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IG5vdCBzdGRlcnI/IGJlY2F1c2Ugc3RkZXJyIGlzIGEgbGFtZSBoYWNrIDwwLjIgd2luaz4pLCBhbmQgdGhlIGZpbmFsCmxpbmUgb2Ygb3V0cHV0IGlzICJUZXN0IGZhaWxlZC4iLgoKUnVuIGl0IHdpdGggdGhlIC12IHN3aXRjaCBpbnN0ZWFkOgoKcHl0aG9uIE0ucHkgLXYKCmFuZCBhIGRldGFpbGVkIHJlcG9ydCBvZiBhbGwgZXhhbXBsZXMgdHJpZWQgaXMgcHJpbnRlZCB0byBzdGRvdXQsIGFsb25nCndpdGggYXNzb3J0ZWQgc3VtbWFyaWVzIGF0IHRoZSBlbmQuCgpZb3UgY2FuIGZvcmNlIHZlcmJvc2UgbW9kZSBieSBwYXNzaW5nICJ2ZXJib3NlPVRydWUiIHRvIHRlc3Rtb2QsIG9yIHByb2hpYml0Cml0IGJ5IHBhc3NpbmcgInZlcmJvc2U9RmFsc2UiLiAgSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCBzeXMuYXJndiBpcyBub3QKZXhhbWluZWQgYnkgdGVzdG1vZC4KClRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cyB0byBydW4gZG9jdGVzdHMsIGluY2x1ZGluZyBpbnRlZ3JhdGlvbgp3aXRoIHRoZSB1bml0dGVzdCBmcmFtZXdvcmssIGFuZCBzdXBwb3J0IGZvciBydW5uaW5nIG5vbi1QeXRob24gdGV4dApmaWxlcyBjb250YWluaW5nIGRvY3Rlc3RzLiAgVGhlcmUgYXJlIGFsc28gbWFueSB3YXlzIHRvIG92ZXJyaWRlIHBhcnRzCm9mIGRvY3Rlc3QncyBkZWZhdWx0IGJlaGF2aW9ycy4gIFNlZSB0aGUgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIGZvcgpkZXRhaWxzLgpzEwAAAHJlU3RydWN0dXJlZFRleHQgZW50EwAAAHJlZ2lzdGVyX29wdGlvbmZsYWd0FgAAAERPTlRfQUNDRVBUX1RSVUVfRk9SXzF0FQAAAERPTlRfQUNDRVBUX0JMQU5LTElORXQUAAAATk9STUFMSVpFX1dISVRFU1BBQ0V0CAAAAEVMTElQU0lTdAQAAABTS0lQdBcAAABJR05PUkVfRVhDRVBUSU9OX0RFVEFJTHQQAAAAQ09NUEFSSVNPTl9GTEFHU3QMAAAAUkVQT1JUX1VESUZGdAwAAABSRVBPUlRfQ0RJRkZ0DAAAAFJFUE9SVF9ORElGRnQZAAAAUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRXQPAAAAUkVQT1JUSU5HX0ZMQUdTdAcAAABFeGFtcGxldAcAAABEb2NUZXN0dA0AAABEb2NUZXN0UGFyc2VydA0AAABEb2NUZXN0RmluZGVydA0AAABEb2NUZXN0UnVubmVydA0AAABPdXRwdXRDaGVja2VydA4AAABEb2NUZXN0RmFpbHVyZXQTAAAAVW5leHBlY3RlZEV4Y2VwdGlvbnQLAAAARGVidWdSdW5uZXJ0BwAAAHRlc3Rtb2R0CAAAAHRlc3RmaWxldBYAAABydW5fZG9jc3RyaW5nX2V4YW1wbGVzdAYAAABUZXN0ZXJ0DAAAAERvY1Rlc3RTdWl0ZXQMAAAARG9jRmlsZVN1aXRldBgAAABzZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3N0FAAAAHNjcmlwdF9mcm9tX2V4YW1wbGVzdAoAAAB0ZXN0c291cmNldAkAAABkZWJ1Z19zcmN0BQAAAGRlYnVnaf////9OKAEAAAB0CAAAAFN0cmluZ0lPKAEAAAB0CgAAAG5hbWVkdHVwbGV0CwAAAFRlc3RSZXN1bHRzcxAAAABmYWlsZWQgYXR0ZW1wdGVkYwEAAAABAAAABQAAAEMAAABzGgAAAHQAAGoBAHwAAGQBAHQCAHQAAIMBAD6DAgBTKAIAAABOaQEAAAAoAwAAAHQTAAAAT1BUSU9ORkxBR1NfQllfTkFNRXQKAAAAc2V0ZGVmYXVsdHQDAAAAbGVuKAEAAAB0BAAAAG5hbWUoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSAAAAAIAAAABzAgAAAAACcwsAAAA8QkxBTktMSU5FPnMDAAAALi4uYwEAAAAEAAAABQAAAEMAAABzVQAAAGQBAH0BAHhIAHQAAGoBAERdPQB9AgB8AABqAgB8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dAcAAABsaW5lc2VwdAQAAABvcGVudAQAAAByZWFkKAUAAAB0CAAAAGZpbGVuYW1ldAcAAABwYWNrYWdldA8AAABtb2R1bGVfcmVsYXRpdmV0DQAAAGZpbGVfY29udGVudHN0AQAAAGYoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0DgAAAF9sb2FkX3Rlc3RmaWxl0QAAAHMSAAAAAAEGAQ8BDwEPARIBEgMfAQ8BdAgAAABlbmNvZGluZ3MFAAAAdXRmLThpBAAAAGMCAAAAAgAAAAQAAABDAAAAczsAAAB0AAB8AAB0AQCDAgByJAB8AABqAgB0AwBkAQCDAgB9AABuAAB0BABqBQBkAgB8AQBkAwAUfAAAgwMAUygEAAAAc/YAAAAKICAgIEFkZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIGJlZ2lubmluZyBvZgogICAgZXZlcnkgbm9uLWJsYW5rIGxpbmUgaW4gYHNgLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICBJZiB0aGUgc3RyaW5nIGBzYCBpcyBVbmljb2RlLCBpdCBpcyBlbmNvZGVkIHVzaW5nIHRoZSBzdGRvdXQKICAgIGVuY29kaW5nIGFuZCB0aGUgYGJhY2tzbGFzaHJlcGxhY2VgIGVycm9yIGhhbmRsZXIuCiAgICB0EAAAAGJhY2tzbGFzaHJlcGxhY2VzCgAAACg/bSleKD8hJCl0AQAAACAoBgAAAFI3AAAAUjkAAAB0BgAAAGVuY29kZXQJAAAAX2VuY29kaW5ndAIAAAByZXQDAAAAc3ViKAIAAAB0AQAAAHN0BgAAAGluZGVudCgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQHAAAAX2lu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ICA+Pj4gX2VsbGlwc2lzX21hdGNoKCdhYS4uLmFhJywgJ2FhYScpCiAgICBGYWxzZQogICAgaQAAAABp/////ygIAAAAdA8AAABFTExJUFNJU19NQVJLRVJ0BQAAAHNwbGl0UiYAAAB0CgAAAHN0YXJ0c3dpdGh0BQAAAEZhbHNlUmoAAAB0BAAAAGZpbmR0BAAAAFRydWUoBgAAAHQEAAAAd2FudHQDAAAAZ290dAIAAAB3c3QIAAAAc3RhcnRwb3N0BgAAAGVuZHBvc3QBAAAAdygAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQPAAAAX2VsbGlwc2lzX21hdGNoEAEAAHMwAAAAAAYMAQoDDwQTAQoBBgEPAQwBCgIHAQoBBgEPARABCgIHAgwDBAUNBBUBDAEEARQCYwEAAAABAAAAAgAAAEMAAABzIgAAAHwAAGoAAIMAAH0AAHwAAHIaAGQBAHwAABdTZAIAU2QDAFMoBAAAAHMpAAAAUmV0dXJuIGEgY29tbWVudGVkIGZvcm0gb2YgdGhlIGdpdmVuIGxpbmVzAgAAACMgdAEAAAAjTigBAAAAdAYAAAByc3RyaXAoAQAAAHQEAAAAbGluZSgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQNAAAAX2NvbW1lbnRfbGluZUEBAABzCAAAAAACDAEGAQgCdBUAAABfT3V0cHV0UmVkaXJlY3RpbmdQZGJjAAAAAAAAAAACAAAAQgAAAHM1AAAAZQAAWgEAZAAAWgIAZAEAhAAAWgMAZAUAZAIAhAEAWgUAZAMAhAAAWgYAZAQAhAAAWgcAUlMoBgAAAHPAAAAACiAgICBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIHB5dGhvbiBkZWJ1Z2dlciB0aGF0IHJlZGlyZWN0cyBzdGRvdXQKICAgIHRvIGEgZ2l2ZW4gc3RyZWFtIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdXNlci4gIFN0ZG91dCBpcyAqbm90KgogICAgcmVkaXJlY3RlZCB3aGVuIHRyYWNlZCBjb2RlIGlzIGV4ZWN1dGVkLgogICAgYwIAAAACAAAABAAAAEMAAABzNQAAAHwBAHwAAF8AAHQBAHwAAF8CAHQDAGoEAGoFAHwAAGQBAHwBAIMBAQFkAgB8AABfBgBkAABTKAMAAABOdAYAAABzdGRvdXRpAQAAACgHAAAAdBoAAABfT3V0cHV0UmVkaXJlY3RpbmdQZGJfX291dFJ1AAAAdCQAAABfT3V0cHV0UmVkaXJlY3RpbmdQZGJfX2RlYnVnZ2VyX3VzZWR0AwAAAHBkYnQDAAAAUGRidAgAAABfX2luaXRfX3QMAAAAdXNlX3Jhd2lucHV0KAIAAABSawAAAHQDAAAAb3V0KAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UokAAABPAQAAcwgAAAAAAQkBCQEWAmMCAAAAAgAAAAMAAABDAAAAcz4AAAB0AAB8AABfAQB8AQBkAABrCAByJwB0AwBqBACDAABqBQB9AQBuAAB0BgBqBwBqCAB8AAB8AQCDAgABZAAAUygBAAAATigJAAAAUncAAABShgAAAFIrAAAAUj0AAABSPwAAAHQGAAAAZl9iYWNrUocAAABSiAAAAHQJAAAAc2V0X3RyYWNlKAIAAABSawAAAHQFAAAAZnJhbWUoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSjQAAAFYBAABzCAAAAAABCQEMARIBYwEAAAABAAAAAgAAAEMAAABzIAAAAHwAAGoAAHIcAHQBAGoCAGoDAHwAAIMBAAFuAABkAABTKAEAAABOKAQAAABShgAAAFKHAAAAUogAAAB0DAAAAHNldF9jb250aW51ZSgBAAAAUmsAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSjwAAAFwBAABzBAAAAAADCQFjAQAAAAMAAAAFAAAARwAAAHM9AAAAdAAAagEAfQIAfAAAagIAdAAAXwEAehcAdAMAagQAagUAfAAAfAEAjAEAU1dkAAB8AgB0AABfAQBYZAAAUygBAAAATigGAAAAUj0AAABShAAAAFKFAAAAUocAAABSiAAAAHQOAAAAdHJhY2VfZGlzcGF0Y2goAwAAAFJrAAAAdAQAAABhcmdzdAsAAABzYXZlX3N0ZG91dCgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKQAAAAYgEAAHMKAAAAAAIJAQwCAwEXAk4oCAAAAFI0AAAAUnEAAAB0BwAAAF9fZG9jX19SiQAAAFIrAAAAUo0AAABSjwAAAFKQAAAAKAAAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSgwAAAEkBAABzCgAAAAYFBgEJBwwGCQZjAgAAAAMAAAAFAAAAQwAAAHP4AAAAdAAAagEAfAAAgwEAcx8AdAIAZAEAfAAAFoICAG4AAHwBAGoDAGQCAIMBAHI6AHQEAGQDAIICAG4AAHQFAHwAAGQEAIMCAHJlAHQGAGoHAGoIAHwAAGoJAIMBAGQFABl9AgBudwB8AABqCgBkBgBrAgByyAB0CwB0DABqDQCDAQBkBQBrBAByvAB0DABqDQBkBQAZZAcAawMAcrwAdAYAagcAaggAdAwAag0AZAUAGYMBAGQFABl9AgBx3AB0BgBqDgB9AgBuFAB0BABkCAB8AAAXZAkAF4MBAIIBAHQGAGoHAGoPAHwCAHwBAGoIAGQCAIMBAIwBAFMoCgAAAE5zFQAAAEV4cGVjdGVkIGEgbW9kdWxlOiAlcnQBAAAAL3MxAAAATW9kdWxlLXJlbGF0aXZlIGZpbGVzIG1heSBub3QgaGF2ZSBhYnNvbHV0ZSBwYXRoc3QIAAAAX19maWxlX19pAAAAAHQIAAAAX19tYWluX19SbQAAAHMrAAAAQ2FuJ3QgcmVzb2x2ZSBwYXRocyByZWxhdGl2ZSB0byB0aGUgbW9kdWxlIHMVAAAAIChpdCBoYXMgbm8gX19maWxlX18pKBAAAABSNQAAAFI2AAAAUkEAAABSdAAAAHQKAAAAVmFsdWVFcnJvclJIAAAAUkoAAAB0BAAAAHBhdGhScwAAAFKVAAAAUjQAAABSJgAAAFI9AAAAdAQAAABhcmd2dAYAAABjdXJkaXJ0BAAAAGpvaW4oAwAAAFJCAAAAUpgAAAB0BwAAAGJhc2VkaXIoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSRwAAAG0BAABzGgAAAAABDwEQAQ8BDAMPAhwBDwIoASACDAMDAREDYwAAAAAAAAAABQAAAEIAAABzPgAAAGUAAFoBAGQAAFoCAGQGAGQBAGQBAGQGAGQCAIQEAFoEAGQDAIQAAFoFAGQEAIQAAFoGAGQFAIQAAFoHAFJTKAcAAABzbgYAAAogICAgQSBzaW5nbGUgZG9jdGVzdCBleGFtcGxlLCBjb25zaXN0aW5nIG9mIHNvdXJjZSBjb2RlIGFuZCBleHBlY3RlZAogICAgb3V0cHV0LiAgYEV4YW1wbGVgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgoKICAgICAgLSBzb3VyY2U6IEEgc2luZ2xlIFB5dGhvbiBzdGF0ZW1lbnQsIGFsd2F5cyBlbmRpbmcgd2l0aCBhIG5ld2xpbmUuCiAgICAgICAgVGhlIGNvbnN0cnVjdG9yIGFkZHMgYSBuZXdsaW5lIGlmIG5lZWRlZC4KCiAgICAgIC0gd2FudDogVGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHJ1bm5pbmcgdGhlIHNvdXJjZSBjb2RlIChlaXRoZXIKICAgICAgICBmcm9tIHN0ZG91dCwgb3IgYSB0cmFjZWJhY2sgaW4gY2FzZSBvZiBleGNlcHRpb24pLiAgYHdhbnRgIGVuZHMKICAgICAgICB3aXRoIGEgbmV3bGluZSB1bmxlc3MgaXQncyBlbXB0eSwgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGVtcHR5CiAgICAgICAgc3RyaW5nLiAgVGhlIGNvbnN0cnVjdG9yIGFkZHMgYSBuZXdsaW5lIGlmIG5lZWRlZC4KCiAgICAgIC0gZXhjX21zZzogVGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGdlbmVyYXRlZCBieSB0aGUgZXhhbXBsZSwgaWYKICAgICAgICB0aGUgZXhhbXBsZSBpcyBleHBlY3RlZCB0byBnZW5lcmF0ZSBhbiBleGNlcHRpb247IG9yIGBOb25lYCBpZgogICAgICAgIGl0IGlzIG5vdCBleHBlY3RlZCB0byBnZW5lcmF0ZSBhbiBleGNlcHRpb24uICBUaGlzIGV4Y2VwdGlvbgogICAgICAgIG1lc3NhZ2UgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgcmV0dXJuIHZhbHVlIG9mCiAgICAgICAgYHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKWAuICBgZXhjX21zZ2AgZW5kcyB3aXRoIGEKICAgICAgICBuZXdsaW5lIHVubGVzcyBpdCdzIGBOb25lYC4gIFRoZSBjb25zdHJ1Y3RvciBhZGRzIGEgbmV3bGluZQogICAgICAgIGlmIG5lZWRlZC4KCiAgICAgIC0gbGluZW5vOiBUaGUgbGluZSBudW1iZXIgd2l0aGluIHRoZSBEb2NUZXN0IHN0cmluZyBjb250YWluaW5nCiAgICAgICAgdGhpcyBFeGFtcGxlIHdoZXJlIHRoZSBFeGFtcGxlIGJlZ2lucy4gIFRoaXMgbGluZSBudW1iZXIg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AAAAUmsAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0CAAAAF9faGFzaF9f1AEAAHMEAAAAAAEbAU4oCAAAAFI0AAAAUnEAAABSkwAAAFIrAAAAUokAAABSpAAAAFKlAAAAUqcAAAAoAAAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVINAAAAkQEAAHMMAAAABiIGAQkBDBEJCwkDYwAAAAAAAAAAAQAAAEIAAABzRAAAAGUAAFoBAGQAAFoCAGQBAIQAAFoDAGQCAIQAAFoEAGQDAIQAAFoFAGQEAIQAAFoGAGQFAIQAAFoHAGQGAIQAAFoIAFJTKAcAAABzZQMAAAogICAgQSBjb2xsZWN0aW9uIG9mIGRvY3Rlc3QgZXhhbXBsZXMgdGhhdCBzaG91bGQgYmUgcnVuIGluIGEgc2luZ2xlCiAgICBuYW1lc3BhY2UuICBFYWNoIGBEb2NUZXN0YCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKCiAgICAgIC0gZXhhbXBsZXM6IHRoZSBsaXN0IG9mIGV4YW1wbGVzLgoKICAgICAgLSBnbG9iczogVGhlIG5hbWVzcGFjZSAoYWthIGdsb2JhbHMpIHRoYXQgdGhlIGV4YW1wbGVzIHNob3VsZAogICAgICAgIGJlIHJ1biBpbi4KCiAgICAgIC0gbmFtZTogQSBuYW1lIGlkZW50aWZ5aW5nIHRoZSBEb2NUZXN0ICh0eXBpY2FsbHksIHRoZSBuYW1lIG9mCiAgICAgICAgdGhlIG9iamVjdCB3aG9zZSBkb2NzdHJpbmcgdGhpcyBEb2NUZXN0IHdhcyBleHRyYWN0ZWQgZnJvbSkuCgogICAgICAtIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHRoaXMgRG9jVGVzdCB3YXMgZXh0cmFjdGVkCiAgICAgICAgZnJvbSwgb3IgYE5vbmVgIGlmIHRoZSBmaWxlbmFtZSBpcyB1bmtub3duLgoKICAgICAgLSBsaW5lbm86IFRoZSBsaW5lIG51bWJlciB3aXRoaW4gZmlsZW5hbWUgd2hlcmUgdGhpcyBEb2NUZXN0CiAgICAgICAgYmVnaW5zLCBvciBgTm9uZWAgaWYgdGhlIGxpbmUgbnVtYmVyIGlzIHVuYXZhaWxhYmxlLiAgVGhpcwogICAgICAgIGxpbmUgbnVtYmVyIGlzIHplcm8tYmFzZWQsIHdpdGggcmVzcGVjdCB0byB0aGUgYmVnaW5uaW5nIG9mCiAgICAgICAgdGhlIGZpbGUuCgogICAgICAtIGRvY3N0cmluZzogVGhlIHN0cmluZyB0aGF0IHRoZSBleGFtcGxlcyB3ZXJlIGV4dHJhY3RlZCBmcm9tLAogICAgICAgIG9yIGBOb25lYCBpZiB0aGUgc3RyaW5nIGlzIHVuYXZhaWxhYmxlLgogICAgYwcAAAAHAAAAAgAAAEMAAABzQAAAAHwBAHwAAF8AAHwGAHwAAF8BAHwCAGoCAIMAAHwAAF8DAHwDAHwAAF8EAHwEAHwAAF8FAHwFAHwAAF8GAGQBAFMoAgAAAHOMAAAACiAgICAgICAgQ3JlYXRlIGEgbmV3IERvY1Rlc3QgY29udGFpbmluZyB0aGUgZ2l2ZW4gZXhhbXBsZXMuICBUaGUKICAgICAgICBEb2NUZXN0J3MgZ2xvYmFscyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNvcHkgb2YgYGdsb2JzYC4KICAgICAgICBOKAcAAAB0CAAAAGV4YW1wbGVzdAkAAABkb2NzdHJpbmd0BAAAAGNvcHlSLgAAAFInAAAAUk4AAABSngAAACgHAAAAUmsAAABSqAAAAFIuAAAAUicAAABSTgAAAFKeAAAAUqkAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rl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Y3QgYWxsIGRvY3Rlc3QgZXhhbXBsZXMgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLCBhbmQKICAgICAgICBjb2xsZWN0IHRoZW0gaW50byBhIGBEb2NUZXN0YCBvYmplY3QuCgogICAgICAgIGBnbG9ic2AsIGBuYW1lYCwgYGZpbGVuYW1lYCwgYW5kIGBsaW5lbm9gIGFyZSBhdHRyaWJ1dGVzIGZvcgogICAgICAgIHRoZSBuZXcgYERvY1Rlc3RgIG9iamVjdC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYERvY1Rlc3RgCiAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgKAIAAABSDgAAAHQMAAAAZ2V0X2V4YW1wbGVzKAYAAABSawAAAFK6AAAAUi4AAABSJwAAAFJOAAAAUp4AAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0CwAAAGdldF9kb2N0ZXN0fAIAAHMEAAAAAAkVAWMDAAAABAAAAAUAAABDAAAAczIAAABnAAB8AABqAAB8AQB8AgCDAgBEXRsAfQMAdAEAfAMAdAIAgwIAchMAfAMAXgIAcRMAUygBAAAAc9EBAAAKICAgICAgICBFeHRyYWN0IGFsbCBkb2N0ZXN0IGV4YW1wbGVzIGZyb20gdGhlIGdpdmVuIHN0cmluZywgYW5kIHJldHVybgogICAgICAgIHRoZW0gYXMgYSBsaXN0IG9mIGBFeGFtcGxlYCBvYmplY3RzLiAgTGluZSBudW1iZXJzIGFyZQogICAgICAgIDAtYmFzZWQsIGJlY2F1c2UgaXQncyBtb3N0IGNvbW1vbiBpbiBkb2N0ZXN0cyB0aGF0IG5vdGhpbmcKICAgICAgICBpbnRlcmVzdGluZyBhcHBlYXJzIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3BlbmluZyB0cmlwbGUtcXVvdGUsCiAgICAgICAgYW5kIHNvIHRoZSBmaXJzdCBpbnRlcmVzdGluZyBsaW5lIGlzIGNhbGxl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IHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBuZXcgRG9jVGVzdCBvYmplY3RzIChvcgogICAgICAgIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIERvY1Rlc3QpLiAgVGhlCiAgICAgICAgc2lnbmF0dXJlIGZvciB0aGlzIGZhY3RvcnkgZnVuY3Rpb24gc2hvdWxkIG1hdGNoIHRoZSBzaWduYXR1cmUKICAgICAgICBvZiB0aGUgRG9jVGVzdCBjb25zdHJ1Y3Rvci4KCiAgICAgICAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGByZWN1cnNlYCBpcyBmYWxzZSwgdGhlbiBgZmluZGAgd2lsbAogICAgICAgIG9ubHkgZXhhbWluZSB0aGUgZ2l2ZW4gb2JqZWN0LCBhbmQgbm90IGFueSBjb250YWluZWQgb2JqZWN0cy4KCiAgICAgICAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGBleGNsdWRlX2VtcHR5YCBpcyBmYWxzZSwgdGhlbiBgZmluZGAKICAgICAgICB3aWxsIGluY2x1ZGUgdGVzdHMgZm9yIG9iamVjdHMgd2l0aCBlbXB0eSBkb2NzdHJpbmdzLgogICAgICAgIE4oBAAAAHQHAAAAX3BhcnNlcnQIAAAAX3ZlcmJvc2V0CAAAAF9yZWN1cnNldA4AAABfZXhjbHVkZV9lbXB0eSgFAAAAUmsAAAB0BwAAAHZlcmJvc2V0BgAAAHBhcnNlcnQHAAAAcmVjdXJzZXQNAAAAZXhjbHVkZV9lbXB0eSgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKJAAAAGQMAAHMIAAAAABEJAQkBCQFjBgAAAAkAAAAJAAAAQwAAAHOhAQAAfAIAZAQAawgAckkAdAEAfAEAZAEAZAQAgwMAfQIAfAIAZAQAawgAckkAdAIAZAIAdAMAfAEAgwEAZgEAFoMBAIIBAHFJAG4AAHwDAHQEAGsIAHJeAGQEAH0DAG4eAHwDAGQEAGsIAHJ8AHQFAGoGAHwBAIMBAH0DAG4AAHlkAHQFAGoHAHwBAIMBAHCaAHQFAGoIAHwBAIMBAH0GAHwDAGQEAGsJAHLBAHQJAGoKAHwGAHwDAGoLAIMCAH0HAG4PAHQJAGoKAHwGAIMBAH0HAHwHAHPfAGQEAH0HAG4AAFduFwAEdAwAawoAcvkAAQEBZAQAfQcAbgEAWHwEAGQEAGsIAHItAXwDAGQEAGsIAHIbAWkAAH0EAHE5AXwDAGoLAGoNAIMAAH0EAG4MAHwEAGoNAIMAAH0EAHwFAGQEAGsJAHJVAXwEAGoOAHwFAIMBAAFuAABkAQB8BABrBwBybgFkAwB8BABkAQA8bgAAZwAAfQgAfAAAag8AfAgAfAEAfAIAfAMAfAcAfAQAaQAAgwcAAXwIAGoQAIMAAAF8CABTKAUAAABzagYAAAogICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIERvY1Rlc3RzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIGdpdmVuCiAgICAgICAgb2JqZWN0J3MgZG9jc3RyaW5nLCBvciBieSBhbnkgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzJwogICAgICAgIGRvY3N0cmluZ3MuCgogICAgICAgIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYG1vZHVsZWAgaXMgdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgICAgICAgdGhlIGdpdmVuIG9iamVjdC4gIElmIHRoZSBtb2R1bGUgaXMgbm90IHNwZWNpZmllZCBvciBpcyBOb25lLCB0aGVuCiAgICAgICAgdGhlIHRlc3QgZmluZGVyIHdpbGwgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKICAgICAgICBjb3JyZWN0IG1vZHVsZS4gIFRoZSBvYmplY3QncyBtb2R1bGUgaXMgdXNlZDoKCiAgICAgICAgICAgIC0gQXMgYSBkZWZhdWx0IG5hbWVzcGFjZSwgaWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgICAtIFRvIHByZXZlbnQgdGhlIERvY1Rlc3RGaW5kZXIgZnJvbSBleHRyYWN0aW5nIERvY1Rlc3RzCiAgICAgICAgICAgICAgZnJvbSBvYmplY3RzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy4KICAgICAgICAgICAgLSBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdC4KICAgICAgICAgICAgLSBUbyBoZWxwIGZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvYmplY3Qgd2l0aGluIGl0cwogICAgICAgICAgICAgIGZpbGUuCgogICAgICAgIENvbnRhaW5lZCBvYmplY3RzIHdob3NlIG1vZHVsZSBkb2VzIG5vdCBtYXRjaCBgbW9kdWxlYCBhcmUgaWdub3JlZC4KCiAgICAgICAgSWYgYG1vZHVsZWAgaXMgRmFsc2UsIG5vIGF0dGVtcHQgdG8gZmluZCB0aGUgbW9kdWxlIHdpbGwgYmUgbWFkZS4KICAgICAgICBUaGlzIGlzIG9ic2N1cmUsIG9mIHVzZSBtb3N0bHkgaW4gdGVzdHM6ICBpZiBgbW9kdWxlYCBpcyBGYWxzZSwgb3IKICAgICAgICBpcyBOb25lIGJ1dCBjYW5ub3QgYmUgZm91bmQgYXV0b21hdGljYWxseSwgdGhlbiBhbGwgb2JqZWN0cyBhcmUKICAgICAgICBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgKG5vbi1leGlzdGVudCkgbW9kdWxlLCBzbyBhbGwgY29udGFpbmVkCiAgICAgICAgb2JqZWN0cyB3aWxsIChyZWN1cnNpdmVseSkgYmUgc2VhcmNoZWQgZm9yIGRvY3Rlc3RzLgoKICAgICAgICBUaGUgZ2xvYmFscyBmb3IgZWFjaCBEb2NUZXN0IGlzIGZvcm1lZCBieSBjb21iaW5pbmcgYGdsb2JzYAogICAgICAgIGFuZCBgZXh0cmFnbG9ic2AgKGJpbmRpbmdzIGluIGBleHRyYWdsb2JzYCBvdmVycmlkZSBiaW5kaW5ncwogICAgICAgIGluIGBnbG9ic2ApLiAgQSBuZXcgY29weSBvZiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQKICAgICAgICBmb3IgZWFjaCBEb2NUZXN0LiAgSWYgYGdsb2JzYCBpcyBub3Qgc3Bl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IHVzZWQgdG8gcHJvY2VzcyBhIHNpbmdsZSBEb2NUZXN0IGNhc2UuICBJdAogICAgcmV0dXJucyBhIHR1cGxlIGAoZiwgdClgLCB3aGVyZSBgdGAgaXMgdGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzCiAgICB0cmllZCwgYW5kIGBmYCBpcyB0aGUgbnVtYmVyIG9mIHRlc3QgY2FzZXMgdGhhdCBmYWlsZWQuCgogICAgICAgID4+PiB0ZXN0cyA9IERvY1Rlc3RGaW5kZXIoKS5maW5kKF9UZXN0Q2xhc3MpCiAgICAgICAgPj4+IHJ1bm5lciA9IERvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkKICAgICAgICA+Pj4gdGVzdHMuc29ydChrZXkgPSBsYW1iZGEgdGVzdDogdGVzdC5uYW1lKQogICAgICAgID4+PiBmb3IgdGVzdCBpbiB0ZXN0czoKICAgICAgICAuLi4gICAgIHByaW50IHRlc3QubmFtZSwgJy0+JywgcnVubmVyLnJ1bih0ZXN0KQogICAgICAgIF9UZXN0Q2xhc3MgLT4gVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQogICAgICAgIF9UZXN0Q2xhc3MuX19pbml0X18gLT4gVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQogICAgICAgIF9UZXN0Q2xhc3MuZ2V0IC0+IFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKICAgICAgICBfVGVzdENsYXNzLnNxdWFyZSAtPiBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCgogICAgVGhlIGBzdW1tYXJpemVgIG1ldGhvZCBwcmludHMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgdGVzdCBjYXNlcyB0aGF0CiAgICBoYXZlIGJlZW4gcnVuIGJ5IHRoZSBydW5uZXIsIGFuZCByZXR1cm5zIGFuIGFnZ3JlZ2F0ZWQgYChmLCB0KWAKICAgIHR1cGxlOgoKICAgICAgICA+Pj4gcnVubmVyLnN1bW1hcml6ZSh2ZXJib3NlPTEpCiAgICAgICAgNCBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcwogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcy5fX2luaXRfXwogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcy5nZXQKICAgICAgICAgICAxIHRlc3RzIGluIF9UZXN0Q2xhc3Muc3F1YXJlCiAgICAgICAgNyB0ZXN0cyBpbiA0IGl0ZW1zLgogICAgICAgIDcgcGFzc2VkIGFuZCAwIGZhaWxlZC4KICAgICAgICBUZXN0IHBhc3NlZC4KICAgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTcpCgogICAgVGhlIGFnZ3JlZ2F0ZWQgbnVtYmVyIG9mIHRyaWVkIGV4YW1wbGVzIGFuZCBmYWlsZWQgZXhhbXBsZXMgaXMKICAgIGFsc28gYXZhaWxhYmxlIHZpYSB0aGUgYHRyaWVzYCBhbmQgYGZhaWx1cmVzYCBhdHRyaWJ1dGVzOgoKICAgICAgICA+Pj4gcnVubmVyLnRyaWVzCiAgICAgICAgNwogICAgICAgID4+PiBydW5uZXIuZmFpbHVyZXMKICAgICAgICAwCgogICAgVGhlIGNvbXBhcmlzb24gYmV0d2VlbiBleHBlY3RlZCBvdXRwdXRzIGFuZCBhY3R1YWwgb3V0cHV0cyBpcyBkb25lCiAgICBieSBhbiBgT3V0cHV0Q2hlY2tlcmAuICBUaGlzIGNvbXBhcmlzb24gbWF5IGJlIGN1c3RvbWl6ZWQgd2l0aCBhCiAgICBudW1iZXIgb2Ygb3B0aW9uIGZsYWdzOyBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGB0ZXN0bW9kYCBmb3IKICAgIG1vcmUgaW5mb3JtYXRpb24uICBJZiB0aGUgb3B0aW9uIGZsYWdzIGFyZSBpbnN1ZmZpY2llbnQsIHRoZW4gdGhlCiAgICBjb21wYXJpc29uIG1heSBhbHNvIGJlIGN1c3RvbWl6ZWQgYnkgcGFzc2luZyBhIHN1YmNsYXNzIG9mCiAgICBgT3V0cHV0Q2hlY2tlcmAgdG8gdGhlIGNvbnN0cnVjdG9yLgoKICAgIFRoZSB0ZXN0IHJ1bm5lcidzIGRpc3BsYXkgb3V0cHV0IGNhbiBiZSBjb250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bnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIfAQAAPAYAAHM2AAAAAAcJAwoBGAMVAg8BDwIKARgBEAEJAQoBGAEQAQkBCgEVARgBCQQjARsEDAEaAQYBDgEGAQ4CKAYAAABSNAAAAFJxAAAAUpMAAABSJQEAAFJYAQAAUh8BAAAoAAAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVISAAAA5wUAAHMIAAAABgcGAQk2CRdjAAAAAAAAAAABAAAAQgAAAHMgAAAAZQAAWgEAZAAAWgIAZAEAhAAAWgMAZAIAhAAAWgQAUlMoAwAAAHPWAAAAQSBEb2NUZXN0IGV4YW1wbGUgaGFzIGZhaWxlZCBpbiBkZWJ1Z2dpbmcgbW9kZS4KCiAgICBUaGUgZXhjZXB0aW9uIGluc3RhbmNlIGhhcyB2YXJpYWJsZXM6CgogICAgLSB0ZXN0OiB0aGUgRG9jVGVzdCBvYmplY3QgYmVpbmcgcnVuCgogICAgLSBleGFtcGxlOiB0aGUgRXhhbXBsZSBvYmplY3QgdGhhdCBmYWlsZWQKCiAgICAtIGdvdDogdGhlIGFjdHVhbCBvdXRwdXQKICAgIGMEAAAABAAAAAIAAABDAAAAcx8AAAB8AQB8AABfAAB8AgB8AABfAQB8AwB8AABfAgBkAABTKAEAAABOKAMAAABSBAEAAFIbAQAAUnkAAAAoBAAAAFJrAAAAUgQBAABSGwEAAFJ5AAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UokAAAB3BgAAcwYAAAAAAQkBCQFjAQAAAAEAAAACAAAAQwAAAHMNAAAAdAAAfAAAagEAgwEAUygBAAAATigCAAAAUjgAAABSBAEAACgBAAAAUmsAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0BwAAAF9fc3RyX198BgAAcwIAAAAAASgFAAAAUjQAAABScQAAAFKTAAAAUokAAABSZgEAACgAAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhMAAABsBgAAcwYAAAAGCgYBCQVjAAAAAAAAAAABAAAAQgAAAHMgAAAAZQAAWgEAZAAAWgIAZAEAhAAAWgMAZAIAhAAAWgQAUlMoAwAAAHPmAAAAQSBEb2NUZXN0IGV4YW1wbGUgaGFzIGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uCgogICAgVGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBoYXMgdmFyaWFibGVzOgoKICAgIC0gdGVzdDogdGhlIERvY1Rlc3Qgb2JqZWN0IGJlaW5nIHJ1bgoKICAgIC0gZXhhbXBsZTogdGhlIEV4YW1wbGUgb2JqZWN0IHRoYXQgZmFpbGVkCgogICAgLSBleGNfaW5mbzogdGhlIGV4Y2VwdGlvbiBpbmZvCiAgICBjBAAAAAQAAAACAAAAQwAAAHMfAAAAfAEAfAAAXwAAfAIAfAAAXwEAfAMAfAAAXwIAZAAAUygBAAAATigDAAAAUgQBAABSGwEAAFJiAAAAKAQAAABSawAAAFIEAQAAUhsBAABSYgAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKJAAAAigYAAHMGAAAAAAEJAQkBYwEAAAABAAAAAgAAAEMAAABzDQAAAHQAAHwAAGoBAIMBAFMoAQAAAE4oAgAAAFI4AAAAUgQBAAAoAQAAAFJrAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UmYBAACPBgAAcwIAAAAAASgFAAAAUjQAAABScQAAAFKTAAAAUokAAABSZgEAACgAAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhQAAAB/BgAAcwYAAAAGCgYBCQVjAAAAAAAAAAAEAAAAQgAAAHMyAAAAZQAAWgEAZAAAWgIAZAQAZAQAZQQAZAEAhAMAWgUAZAIAhAAAWgYAZAMAhAAAWgcAUlMoBQAAAHN7CQAAUnVuIGRvYyB0ZXN0cyBidXQgcmFpc2UgYW4gZXhjZXB0aW9uIGFzIHNvb24gYXMgdGhlcmUgaXMgYSBmYWlsdXJlLgoKICAgICAgIElmIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VycywgYW4gVW5leHBlY3RlZEV4Y2VwdGlvbiBpcyByYWlzZWQuCiAgICAgICBJdCBjb250YWlucyB0aGUgdGVzdCwgdGhlIGV4YW1wbGUsIGFuZCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uOgoKICAgICAgICAgPj4+IHJ1bm5lciA9IERlYnVnUnVubmVyKHZlcmJvc2U9RmFsc2UpCiAgICAgICAgID4+PiB0ZXN0ID0gRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KCc+Pj4gcmFpc2UgS2V5RXJyb3JcbjQyJywKICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sICdmb28nLCAnZm9vLnB5JywgMCkKICAgICAgICAgPj4+IHRyeToKICAgICAgICAgLi4uICAgICBydW5uZXIucnVuKHRlc3QpCiAgICAgICAgIC4uLiBleGNlcHQgVW5leHBlY3RlZEV4Y2VwdGlvbiwgZmFpbHVyZToKICAgICAgICAgLi4uICAgICBwYXNzCgogICAgICAgICA+Pj4gZmFpbHVyZS50ZXN0IGlzIHRlc3QKICAgICAgICAgVHJ1ZQoKICAgICAgICAgPj4+IGZhaWx1cmUuZXhhbXBsZS53YW50CiAgICAgICAgICc0MlxuJwoKICAgICAgICAgPj4+IGV4Y19pbmZvID0gZmFpbHVyZS5leGNfaW5mbwogICAgICAgICA+Pj4gcmFpc2UgZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBleGNfaW5mb1syXQogICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIC4uLgogICAgICAgICBLZXlFcnJvcgoKICAgICAgIFdlIHdyYXAgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiB0byBnaXZlIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uCiAgICAgICBhY2Nlc3MgdG8gdGhlIHRlc3QgYW5kIGV4YW1wbGUgaW5mb3JtYXRpb24uCgogICAgICAgSWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoLCB0aGVuIGEgRG9jVGVzdEZhaWx1cmUgaXMgcmFpc2VkOgoKICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJycnCiAgICAgICAgIC4uLiAgICAgID4+PiB4ID0gMQogICAgICAgICAuLi4gICAgICA+Pj4geAogICAgICAgICAuLi4gICAgICAyCiAgICAgICAgIC4uLiAgICAgICcnJywge30sICdmb28nLCAnZm9vLnB5JywgMCkKCiAgICAgICAgID4+PiB0cnk6CiAgICAgICAgIC4uLiAgICBydW5uZXIucnVuKHRlc3QpCiAgICAgICAgIC4uLiBleGNlcHQgRG9jVGVzdEZhaWx1cmUsIGZhaWx1cmU6CiAgICAgICAgIC4uLiAgICBwYXNzCgogICAgICAgRG9jVGVzdEZhaWx1cmUgb2JqZWN0cyBwcm92aWRlIGFjY2VzcyB0byB0aGUgdGVzdDoKCiAgICAgICAgID4+PiBmYWlsdXJlLnRlc3QgaXMgdGVzdAogICAgICAgICBUcnVlCgogICAgICAgQXMgd2VsbCBhcyB0byB0aGUgZXhhbXBsZToKCiAgICAgICAgID4+PiBmYWlsdXJlLmV4YW1wbGUud2FudAogICAgICAgICAnMlxuJwoKICAgICAgIGFuZCB0aGUgYWN0dWFsIG91dHB1dDoKCiAgICAgICAgID4+PiBmYWlsdXJlLmdvdAogICAgICAgICAnMVxuJwoKICAgICAgIElmIGEgZmFpbHVyZSBvciBlcnJvciBvY2N1cnMsIHRoZSBnbG9iYWxzIGFyZSBsZWZ0IGludGFjdDoKCiAgICAgICAgID4+PiBkZWwgdGVzdC5nbG9ic1snX19idWlsdGluc19fJ10KICAgICAgICAgPj4+IHRlc3QuZ2xvYnMKICAgICAgICAgeyd4JzogMX0KCiAgICAgICAgID4+PiB0ZXN0ID0gRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KCcnJwogICAgICAgICAuLi4gICAgICA+Pj4geCA9IDIKICAgICAgICAgLi4uICAgICAgPj4+IHJhaXNlIEtleUVycm9yCiAgICAgICAgIC4uLiAgICAgICcnJywge30sICdmb28nLCAnZm9vLnB5JywgMCkKCiAgICAgICAgID4+PiBydW5uZXIucnVuKHRlc3QpCiAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgLi4uCiAgICAgICAgIFVuZXhwZWN0ZWRFeGNlcHRpb246IDxEb2NUZXN0IGZvbyBmcm9tIGZvby5weTowICgyIGV4YW1wbGVzKT4KCiAgICAgICAgID4+PiBkZWwgdGVzdC5nbG9ic1snX19idWlsdGluc19fJ10KICAgICAgICAgPj4+IHRlc3QuZ2xvYnMKICAgICAgICAgeyd4JzogMn0KCiAgICAgICBCdXQgdGhlIGdsb2JhbHMgYXJlIGNsZWFyZWQgaWYgdGhlcmUgaXMgbm8gZXJyb3I6CgogICAgICAgICA+Pj4gdGVzdCA9IERvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdCgnJycKICAgICAgICAgLi4uICAgICAgPj4+IHggPSAyCiAgICAgICAgIC4uLiAgICAgICcnJywge30sICdmb28nLCAnZm9vLnB5JywgMCkKCiAgICAgICAgID4+PiBydW5uZXIucnVuKHRlc3QpCiAgICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKCiAgICAgICAgID4+PiB0ZXN0Lmdsb2JzCiAgICAgICAgIHt9CgogICAgICAgYwUAAAAGAAAABgAAAEMAAABzNQAAAHQAAGoBAHwAAHwBAHwCAHwDAHQCAIMFAH0FAHwEAHIxAHwBAGoDAGoEAIMAAAFuAAB8BQBTKAEAAABOKAUAAABSEQAAAFJMAQAAUnUAAABSLgAAAFJIAQAAKAYAAABSawAAAFIEAQAAUioBAABSiwAAAFJJAQAAdAEAAAByKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UkwBAADtBgAAcwgAAAAAARsBBgEQAWMFAAAABQAAAAQAAABDAAAAcxYAAAB0AAB8AgB8AwB8BACDAwCCAQBkAABTKAEAAABOKAEAAABSFAAAACgFAAAAUmsAAABSiwAAAFIEAQAAUhsBAABSYgAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIhAQAA8wYAAHMCAAAAAAFjBQAAAAUAAAAEAAAAQwAAAHMWAAAAdAAAfAIAfAMAfAQAgwMAggEAZAAAUygBAAAATigBAAAAUhMAAAAoBQAAAFJrAAAAUosAAABSBAEAAFIbAQAAUnkAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSIAEAAPYGAABzAgAAAAABTigIAAAAUjQAAABScQAAAFKTAAAAUisAAABSdwAAAFJMAQAAUiEBAABSIAEAACgAAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhUAAACSBgAAcwgAAAAGWQYCEgYJA2kAAAAAYwkAAAAMAAAABwAAAEMAAABzHgEAAHwAAGQIAGsIAHIhAHQBAGoCAGoDAGQBAIMBAH0AAG4AAHQEAGoFAHwAAIMBAHNGAHQGAGQCAHwAAGYBABaDAQCCAQBuAAB8AQBkCABrCAByXgB8AABqBwB9AQBuAAB0CABkAwB8CACDAAF9CQB8BwByiwB0CQBkBAB8AwBkBQB8BQCDAAJ9CgBuFQB0CgBkBAB8AwBkBQB8BQCDAAJ9CgB4MwB8CQBqCwB8AAB8AQBkBgB8AgBkBwB8BgCDAgJEXRMAfQsAfAoAagwAfAsAgwEAAXG/AFd8BABy6QB8CgBqDQCDAAABbgAAdA4AZAgAawgAcv4AfAoAYQ4Abg0AdA4Aag8AfAoAgwEAAXQQAHwKAGoRAHwKAGoSAIMCAFMoCQAAAHMqCgAAbT1Ob25lLCBuYW1lPU5vbmUsIGdsb2JzPU5vbmUsIHZlcmJvc2U9Tm9uZSwgcmVwb3J0PVRydWUsCiAgICAgICBvcHRpb25mbGFncz0wLCBleHRyYWdsb2JzPU5vbmUsIHJhaXNlX29uX2Vycm9yPUZhbHNlLAogICAgICAgZXhjbHVkZV9lbXB0eT1GYWxzZQoKICAgIFRlc3QgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyBpbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgcmVhY2hhYmxlCiAgICBmcm9tIG1vZHVsZSBtIChvciB0aGUgY3VycmVudCBtb2R1bGUgaWYgbSBpcyBub3Qgc3VwcGxpZWQpLCBzdGFydGluZwogICAgd2l0aCBtLl9fZG9jX18uCgogICAgQWxzbyB0ZXN0IGV4YW1wbGVzIHJlYWNoYWJsZSBmcm9tIGRpY3QgbS5fX3Rlc3RfXyBpZiBpdCBleGlzdHMgYW5kIGlzCiAgICBub3QgTm9uZS4gIG0uX190ZXN0X18gbWFwcyBuYW1lcyB0byBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIHN0cmluZ3M7CiAgICBmdW5jdGlvbiBhbmQgY2xhc3MgZG9jc3RyaW5ncyBhcmUgdGVzdGVkIGV2ZW4gaWYgdGhlIG5hbWUgaXMgcHJpdmF0ZTsKICAgIHN0cmluZ3MgYXJlIHRlc3RlZCBkaXJlY3RseSwgYXMgaWYgdGhleSB3ZXJlIGRvY3N0cmluZ3MuCgogICAgUmV0dXJuICgjZmFpbHVyZXMsICN0ZXN0cykuCgogICAgU2VlIGhlbHAoZG9jdGVzdCkgZm9yIGFuIG92ZXJ2aWV3LgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJuYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlOyBieSBkZWZhdWx0CiAgICB1c2UgbS5fX25hbWVfXy4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZ2xvYnMiIGdpdmVzIGEgZGljdCB0byBiZSB1c2VkIGFzIHRoZSBnbG9iYWxzCiAgICB3aGVuIGV4ZWN1dGluZyBleGFtcGxlczsgYnkgZGVmYXVsdCwgdXNlIG0uX19kaWN0X18uICBBIGNvcHkgb2YgdGhpcwogICAgZGljdCBpcyBhY3R1YWxseSB1c2VkIGZvciBlYWNoIGRvY3N0cmluZywgc28gdGhhdCBlYWNoIGRvY3N0cmluZydzCiAgICBleGFtcGxlcyBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgImV4dHJhZ2xvYnMiIGdpdmVzIGEgZGljdGlvbmFyeSB0aGF0IHNob3VsZCBiZQogICAgbWVyZ2VkIGludG8gdGhlIGdsb2JhbHMgdGhhdCBhcmUgdXNlZCB0byBleGVjdXRlIGV4YW1wbGVzLiAgQnkKICAgIGRlZmF1bHQsIG5vIGV4dHJhIGdsb2JhbHMgYXJlIHVzZWQuICBUaGlzIGlzIG5ldyBpbiAyLjQuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInZlcmJvc2UiIHByaW50cyBsb3RzIG9mIHN0dWZmIGlmIHRydWUsIHByaW50cwogICAgb25seSBmYWlsdXJlcyBpZiBmYWxzZTsgYnkgZGVmYXVsdCwgaXQncyB0cnVlIGlmZiAiLXYiIGlzIGluIHN5cy5hcmd2LgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJyZXBvcnQiIHByaW50cyBhIHN1bW1hcnkgYXQgdGhlIGVuZCB3aGVuIHRydWUsCiAgICBlbHNlIHByaW50cyBub3RoaW5nIGF0IHRoZSBlbmQuICBJbiB2ZXJib3NlIG1vZGUsIHRoZSBzdW1tYXJ5IGlzCiAgICBkZXRhaWxlZCwgZWxzZSB2ZXJ5IGJyaWVmIChpbiBmYWN0LCBlbXB0eSBpZiBhbGwgdGVzdHMgcGFzc2VkKS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAib3B0aW9uZmxhZ3MiIG9yJ3MgdG9nZXRoZXIgbW9kdWxlIGNvbnN0YW50cywKICAgIGFuZCBkZWZhdWx0cyB0byAwLiAgVGhpcyBpcyBuZXcgaW4gMi4zLiAgUG9zc2libGUgdmFsdWVzIChzZWUgdGhlCiAgICBkb2NzIGZvciBkZXRhaWxzKToKCiAgICAgICAgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMQogICAgICAgIERPTlRfQUNDRVBUX0JMQU5LTElORQogICAgICAgIE5PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAgRUxMSVBTSVMKICAgICAgICBTS0lQCiAgICAgICAgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKICAgICAgICBSRVBPUlRfVURJRkYKICAgICAgICBSRVBPUlRfQ0RJRkYKICAgICAgICBSRVBPUlRfTkRJRkYKICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJhaXNlX29uX2Vycm9yIiByYWlzZXMgYW4gZXhjZXB0aW9uIG9uIHRoZQogICAgZmlyc3QgdW5leHBlY3RlZCBleGNlcHRpb24gb3IgZmFpbHVyZS4gVGhpcyBhbGxvd3MgZmFpbHVyZXMgdG8gYmUKICAgIHBvc3QtbW9ydGVtIGRlYnVnZ2VkLgoKICAgIEFkdmFuY2VkIHRvbWZvb2xlcnk6ICB0ZXN0bW9kIHJ1bnMgbWV0aG9kcyBvZiBhIGxvY2FsIGluc3RhbmNlIG9mCiAgICBjbGFzcyBkb2N0ZXN0LlRlc3RlciwgdGhlbiBtZXJnZXMgdGhlIHJlc3VsdHMgaW50byAob3IgY3JlYXRlcykKICAgIGdsb2JhbCBUZXN0ZXIgaW5zdGFuY2UgZG9jdGVzdC5tYXN0ZXIuICBNZXRob2RzIG9mIGRvY3Rlc3QubWFzdGVyCiAgICBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHRvbywgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHVudXN1YWwuCiAgICBQYXNzaW5nIHJlcG9ydD0wIHRvIHRlc3Rtb2QgaXMgZXNwZWNpYWxseSB1c2VmdWwgdGhlbiwgdG8gZGVsYXkKICAgIGRpc3BsYXlpbmcgYSBzdW1tYXJ5LiAgSW52b2tlIGRvY3Rlc3QubWFzdGVyLnN1bW1hcml6ZSh2ZXJib3NlKQogICAgd2hlbiB5b3UncmUgZG9uZSBmaWRkbGluZy4KICAgIFKWAAAAcxwAAAB0ZXN0bW9kOiBtb2R1bGUgcmVxdWlyZWQ7ICVyUugAAABS5QAAAFIUAQAAUi4AAABS8wAAAE4oEwAAAFIrAAAAUj0AAABSPgAAAFIqAAAAUjUAAABSNgAAAFJBAAAAUjQAAABSEAAAAFIVAAAAUhEAAABSdgAAAFJMAQAAUlMBAAB0BgAAAG1hc3RlclJVAQAAUiMAAABSFwEAAFIWAQAAKAwAAABSvwAAAFInAAAAUi4AAABS5QAAAHQGAAAAcmVwb3J0UhQBAABS8wAAAHQOAAAAcmFpc2Vfb25fZXJyb3JS6AAAAHQGAAAAZmluZGVydAYAAABydW5uZXJSBAEAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIWAAAAAgcAAHMkAAAAAEUMBBUDDwEWAwwBDAMPAgYBGAIVAiUBEQIGAQ0CDAEJAg0CYwwAAAAPAAAABwAAAEMAAABzbAEAAHwDAHIcAHwBAAxyHAB0AABkAQCDAQCCAQBuAAB0AQB8AAB8AwB8AQCDAwBcAgB9DAB9AAB8AgBkBwBrCAByVQB0AwBqBABqBQB8AACDAQB9AgBuAAB8BABkBwBrCAByagBpAAB9BABuDAB8BABqBgCDAAB9BAB8CABkBwBrCQBykgB8BABqBwB8CACDAQABbgAAZAIAfAQAawcAcqsAZAMAfAQAZAIAPG4AAHwJAHLJAHQIAGQEAHwFAGQFAHwHAIMAAn0NAG4VAHQJAGQEAHwFAGQFAHwHAIMAAn0NAHwLAGQHAGsJAHL8AHwMAGoKAHwLAIMBAH0MAG4AAHwKAGoLAHwMAHwEAHwCAHwAAGQGAIMFAH0OAHwNAGoMAHwOAIMBAAF8BgByNwF8DQBqDQCDAAABbgAAdA4AZAcAawgAckwBfA0AYQ4Abg0AdA4Aag8AfA0AgwEAAXQQAHwNAGoRAHwNAGoSAIMCAFMoCAAAAHMNDQAACiAgICBUZXN0IGV4YW1wbGVzIGluIHRoZSBnaXZlbiBmaWxlLiAgUmV0dXJuICgjZmFpbHVyZXMsICN0ZXN0cykuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm1vZHVsZV9yZWxhdGl2ZSIgc3BlY2lmaWVzIGhvdyBmaWxlbmFtZXMKICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZDoKCiAgICAgIC0gSWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgVHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGVuICJmaWxlbmFtZSIKICAgICAgICAgc3BlY2lmaWVzIGEgbW9kdWxlLXJlbGF0aXZlIHBhdGguICBCeSBkZWZhdWx0LCB0aGlzIHBhdGggaXMKICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIGNhbGxpbmcgbW9kdWxlJ3MgZGlyZWN0b3J5OyBidXQgaWYgdGhlCiAgICAgICAgICJwYWNrYWdlIiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gaXQgaXMgcmVsYXRpdmUgdG8gdGhhdAogICAgICAgICBwYWNrYWdlLiAgVG8gZW5zdXJlIG9zLWluZGVwZW5kZW5jZSwgImZpbGVuYW1lIiBzaG91bGQgdXNlCiAgICAgICAgICIvIiBjaGFyYWN0ZXJzIHRvIHNlcGFyYXRlIHBhdGggc2VnbWVudHMsIGFuZCBzaG91bGQgbm90CiAgICAgICAgIGJlIGFuIGFic29sdXRlIHBhdGggKGkuZS4sIGl0IG1heSBub3QgYmVnaW4gd2l0aCAiLyIpLgoKICAgICAgLSBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZSwgdGhlbiAiZmlsZW5hbWUiIHNwZWNpZmllcyBhbgogICAgICAgIG9zLXNwZWNpZmljIHBhdGguICBUaGUgcGF0aCBtYXkgYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgKHRvCiAgICAgICAgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJuYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgdGVzdDsgYnkgZGVmYXVsdAogICAgdXNlIHRoZSBmaWxlJ3MgYmFzZW5hbWUuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAicGFja2FnZSIgaXMgYSBQeXRob24gcGFja2FnZSBvciB0aGUKICAgIG5hbWUgb2YgYSBQeXRob24gcGFja2FnZSB3aG9zZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIHVzZWQgYXMgdGhlCiAgICBiYXNlIGRpcmVjdG9yeSBmb3IgYSBtb2R1bGUgcmVsYXRpdmUgZmlsZW5hbWUuICBJZiBubyBwYWNrYWdlIGlzCiAgICBzcGVjaWZpZWQsIHRoZW4gdGhlIGNhbGxpbmcgbW9kdWxlJ3MgZGlyZWN0b3J5IGlzIHVzZWQgYXMgdGhlIGJhc2UKICAgIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlIGZpbGVuYW1lcy4gIEl0IGlzIGFuIGVycm9yIHRvCiAgICBzcGVjaWZ5ICJwYWNrYWdlIiBpZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZ2xvYnMiIGdpdmVzIGEgZGljdCB0byBiZSB1c2VkIGFzIHRoZSBnbG9iYWxzCiAgICB3aGVuIGV4ZWN1dGluZyBleGFtcGxlczsgYnkgZGVmYXVsdCwgdXNlIHt9LiAgQSBjb3B5IG9mIHRoaXMgZGljdAogICAgaXMgYWN0dWFsbHkgdXNlZCBmb3IgZWFjaCBkb2NzdHJpbmcsIHNvIHRoYXQgZWFjaCBkb2NzdHJpbmcncwogICAgZXhhbXBsZXMgc3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJleHRyYWdsb2JzIiBnaXZlcyBhIGRpY3Rpb25hcnkgdGhhdCBzaG91bGQgYmUKICAgIG1lcmdlZCBpbnRvIHRoZSBnbG9iYWxzIHRoYXQgYXJlIHVzZWQgdG8gZXhlY3V0ZSBleGFtcGxlcy4gIEJ5CiAgICBkZWZhdWx0LCBubyBleHRyYSBnbG9iYWxzIGFyZSB1c2VkLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJ2ZXJib3NlIiBwcmludHMgbG90cyBvZiBzdHVmZiBpZiB0cnVlLCBwcmludHMKICAgIG9ubHkgZmFpbHVyZXMgaWYgZmFsc2U7IGJ5IGRlZmF1bHQsIGl0J3MgdHJ1ZSBpZmYgIi12IiBpcyBpbiBzeXMuYXJndi4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicmVwb3J0IiBwcmludHMgYSBzdW1tYXJ5IGF0IHRoZSBlbmQgd2hlbiB0cnVlLAogICAgZWxzZSBwcmludHMgbm90aGluZyBhdCB0aGUgZW5kLiAgSW4gdmVyYm9zZSBtb2RlLCB0aGUgc3VtbWFyeSBpcwogICAgZGV0YWlsZWQsIGVsc2UgdmVyeSBicmllZiAoaW4gZmFjdCwgZW1wdHkgaWYgYWxsIHRlc3RzIHBhc3NlZCkuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm9wdGlvbmZsYWdzIiBvcidzIHRvZ2V0aGVyIG1vZHVsZSBjb25zdGFudHMsCiAgICBhbmQgZGVmYXVsdHMgdG8gMC4gIFBvc3NpYmxlIHZhbHVlcyAoc2VlIHRoZSBkb2NzIGZvciBkZXRhaWxzKToKCiAgICAgICAgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMQogICAgICAgIERPTlRfQUNDRVBUX0JMQU5LTElORQogICAgICAgIE5PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAgRUxMSVBTSVMKICAgICAgICBTS0lQCiAgICAgICAgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKICAgICAgICBSRVBPUlRfVURJRkYKICAgICAgICBSRVBPUlRfQ0RJRkYKICAgICAgICBSRVBPUlRfTkRJRkYKICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJhaXNlX29uX2Vycm9yIiByYWlzZXMgYW4gZXhjZXB0aW9uIG9uIHRoZQogICAgZmlyc3QgdW5leHBlY3RlZCBleGNlcHRpb24gb3IgZmFpbHVyZS4gVGhpcyBhbGxvd3MgZmFpbHVyZXMgdG8gYmUKICAgIHBvc3QtbW9ydGVtIGRlYnVnZ2VkLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJwYXJzZXIiIHNwZWNpZmllcyBhIERvY1Rlc3RQYXJzZXIgKG9yCiAgICBzdWJjbGFzcykgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBleHRyYWN0IHRlc3RzIGZyb20gdGhlIGZpbGVzLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJlbmNvZGluZyIgc3BlY2lmaWVzIGFuIGVuY29kaW5nIHRoYXQgc2hvdWxkCiAgICBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGZpbGUgdG8gdW5pY29kZS4KCiAgICBBZHZhbmNlZCB0b21mb29sZXJ5OiAgdGVzdG1vZCBydW5zIG1ldGhvZHMgb2YgYSBsb2NhbCBpbnN0YW5jZSBvZgogICAgY2xhc3MgZG9jdGVzdC5UZXN0ZXIsIHRoZW4gbWVyZ2VzIHRoZSByZXN1bHRzIGludG8gKG9yIGNyZWF0ZXMpCiAgICBnbG9iYWwgVGVzdGVyIGluc3RhbmNlIGRvY3Rlc3QubWFzdGVyLiAgTWV0aG9kcyBvZiBkb2N0ZXN0Lm1hc3RlcgogICAgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSB0b28sIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB1bnVzdWFsLgogICAgUGFzc2luZyByZXBvcnQ9MCB0byB0ZXN0bW9kIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRoZW4sIHRvIGRlbGF5CiAgICBkaXNwbGF5aW5nIGEgc3VtbWFyeS4gIEludm9rZSBkb2N0ZXN0Lm1hc3Rlci5zdW1tYXJpemUodmVyYm9zZSkKICAgIHdoZW4geW91J3JlIGRvbmUgZmlkZGxpbmcuCiAgICBzOAAAAFBhY2thZ2UgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGZvciBtb2R1bGUtcmVsYXRpdmUgcGF0aHMuUjQAAABSlgAAAFLlAAAAUhQBAABpAAAAAE4oEwAAAFKXAAAAUlMAAABSKwAAAFJKAAAAUpgAAAB0CAAAAGJhc2VuYW1lUqoAAABS7wAAAFIVAAAAUhEAAAB0BgAAAGRlY29kZVLCAAAAUkwBAABSUwEAAFJoAQAAUlUBAABSIwAAAFIXAQAAUhYBAAAoDwAAAFJOAAAAUlAAAABSJwAAAFJPAAAAUi4AAABS5QAAAFJpAQAAUhQBAABS8wAAAFJqAQAAUuYAAABSVAAAAHQEAAAAdGV4dFJsAQAAUgQBAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSFwAAAGoHAABzMgAAAABSDQEPBBgDDAEVAwwBCQIMAQwBEAEMAQ0CBgEYAhUCDAESAxsBDQIGAQ0CDAEJAg0CdAYAAABOb05hbWVjBgAAAAkAAAAFAAAAQwAAAHNkAAAAdAAAZAEAfAIAZAIAdAEAgwACfQYAdAIAZAEAfAIAZAMAfAUAgwACfQcAeDMAfAYAagMAfAAAfAMAZAQAfAEAgwIBRF0ZAH0IAHwHAGoEAHwIAGQFAHwEAIMBAQFxQwBXZAYAUygHAAAAc3ICAAAKICAgIFRlc3QgZXhhbXBsZXMgaW4gdGhlIGdpdmVuIG9iamVjdCdzIGRvY3N0cmluZyAoYGZgKSwgdXNpbmcgYGdsb2JzYAogICAgYXMgZ2xvYmFscy4gIE9wdGlvbmFsIGFyZ3VtZW50IGBuYW1lYCBpcyB1c2VkIGluIGZhaWx1cmUgbWVzc2FnZXMuCiAgICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgYHZlcmJvc2VgIGlzIHRydWUsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0CiAgICBldmVuIGlmIHRoZXJlIGFyZSBubyBmYWlsdXJlcy4KCiAgICBgY29tcGlsZWZsYWdzYCBnaXZlcyB0aGUgc2V0IG9mIGZsYWdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgdGhlCiAgICBQeXRob24gY29tcGlsZXIgd2hlbiBydW5uaW5nIHRoZSBleGFtcGxlcy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4KICAgIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2V0IG9mIGZ1dHVyZS1pbXBvcnQgZmxhZ3MgdGhhdCBhcHBseSB0bwogICAgYGdsb2JzYC4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyBgb3B0aW9uZmxhZ3NgIHNwZWNpZmllcyBvcHRpb25zIGZvciB0aGUKICAgIHRlc3RpbmcgYW5kIG91dHB1dC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYHRlc3Rtb2RgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbi4KICAgIFLlAAAAUucAAABSFAEAAFIuAAAAUioBAABOKAUAAABSEAAAAFJ1AAAAUhEAAABSdgAAAFJMAQAAKAkAAABSUgAAAFIuAAAAUuUAAABSJwAAAFIqAQAAUhQBAABSawEAAFJsAQAAUgQBAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSGAAAAOcHAABzCAAAAAASFQEVAR8BYwAAAAAAAAAABQAAAEIAAABzXwAAAGUAAFoBAGQIAGQIAGQIAGQAAGQBAIQEAFoDAGQCAIQAAFoEAGQIAGQIAGQDAIQCAFoF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L2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSVQEAADwIAABzAgAAAAABTigKAAAAUjQAAABScQAAAFIrAAAAUokAAABSeQEAAFJ6AQAAUn0BAABSfgEAAFJTAQAAUlUBAAAoAAAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIZAAAABAgAAHMOAAAABgEVFAkJDwkMCAkGDANjAQAAAAIAAAADAAAAQwAAAHMyAAAAfAAAdAAAQHwAAGsDAHIiAHQBAGQBAHwAAIMCAIIBAG4AAHQCAH0BAHwAAGECAHwBAFMoAgAAAHM/AwAAU2V0cyB0aGUgdW5pdHRlc3Qgb3B0aW9uIGZsYWdzLgoKICAgIFRoZSBvbGQgZmxhZyBpcyByZXR1cm5lZCBzbyB0aGF0IGEgcnVubmVyIGNvdWxkIHJlc3RvcmUgdGhlIG9sZAogICAgdmFsdWUgaWYgaXQgd2lzaGVkIHRvOgoKICAgICAgPj4+IGltcG9ydCBkb2N0ZXN0CiAgICAgID4+PiBvbGQgPSBkb2N0ZXN0Ll91bml0dGVzdF9yZXBvcnRmbGFncwogICAgICA+Pj4gZG9jdGVzdC5zZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MoUkVQT1JUX05ESUZGIHwKICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKSA9PSBvbGQKICAgICAgVHJ1ZQoKICAgICAgPj4+IGRvY3Rlc3QuX3VuaXR0ZXN0X3JlcG9ydGZsYWdzID09IChSRVBPUlRfTkRJRkYgfAogICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUpCiAgICAgIFRydWUKCiAgICBPbmx5IHJlcG9ydGlu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Pj4+IHRyeToKICAgICAgICAgICAgIC4uLiAgICAgY2FzZS5kZWJ1ZygpCiAgICAgICAgICAgICAuLi4gZXhjZXB0IFVuZXhwZWN0ZWRFeGNlcHRpb24sIGZhaWx1cmU6CiAgICAgICAgICAgICAuLi4gICAgIHBhc3MKCiAgICAgICAgICAgVGhlIFVuZXhwZWN0ZWRFeGNlcHRpb24gY29udGFpbnMgdGhlIHRlc3QsIHRoZSBleGFtcGxlLCBhbmQKICAgICAgICAgICB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uOgoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLnRlc3QgaXMgdGVzdAogICAgICAgICAgICAgVHJ1ZQoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLmV4YW1wbGUud2FudAogICAgICAgICAgICAgJzQyXG4nCgogICAgICAgICAgICAgPj4+IGV4Y19pbmZvID0gZmFpbHVyZS5leGNfaW5mbwogICAgICAgICAgICAgPj4+IHJhaXNlIGV4Y19pbmZvWzBdLCBleGNfaW5mb1sxXSwgZXhjX2luZm9bMl0KICAgICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgS2V5RXJyb3IKCiAgICAgICAgICAgSWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoLCB0aGVuIGEgRG9jVGVzdEZhaWx1cmUgaXMgcmFpc2VkOgoKICAgICAgICAgICAgID4+PiB0ZXN0ID0gRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KCcnJwogICAgICAgICAgICAgLi4uICAgICAgPj4+IHggPSAxCiAgICAgICAgICAgICAuLi4gICAgICA+Pj4geAogICAgICAgICAgICAgLi4uICAgICAgMgogICAgICAgICAgICAgLi4uICAgICAgJycnLCB7fSwgJ2ZvbycsICdmb28ucHknLCAwKQogICAgICAgICAgICAgPj4+IGNhc2UgPSBEb2NUZXN0Q2FzZSh0ZXN0KQoKICAgICAgICAgICAgID4+PiB0cnk6CiAgICAgICAgICAgICAuLi4gICAgY2FzZS5kZWJ1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aW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKJAAAADQkAAHMEAAAAAAEJAWMBAAAAAQAAAAIAAABDAAAAcxEAAAB8AABqAABkAQCDAQABZAAAUygCAAAATnMtAAAARG9jVGVzdFN1aXRlIHdpbGwgbm90IHdvcmsgd2l0aCAtTzIgYW5kIGFib3ZlKAEAAAB0CAAAAHNraXBUZXN0KAEAAABSawAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKJAQAAEQkAAHMCAAAAAAFjAQAAAAEAAAABAAAAQwAAAHMEAAAAZAAAUygBAAAATigAAAAAKAEAAABSawAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQJAAAAdGVzdF9za2lwFAkAAHMCAAAAAAFjAQAAAAEAAAACAAAAQwAAAHMOAAAAZAEAfAAAagAAagEAFlMoAgAAAE5zFgAAAFNraXBwaW5nIHRlc3RzIGZyb20gJXMoAgAAAFJCAAAAUjQAAAAoAQAAAFJrAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UpEBAAAXCQAAcwIAAAAAASgHAAAAUjQAAABScQAAAFKJAAAAUokBAABSlAEAAFKRAQAAUmYBAAAoAAAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKSAQAADAkAAHMKAAAABgEJBAkDCQMJA2MEAAAACQAAAAYAAABLAAAAcyoBAAB8AwBkCgBrCAByGAB0AQCDAAB9AwBuAAB0AgB8AACDAQB9AAB8AwBqAwB8AABkAQB8AQBkAgB8AgCDAQJ9BQB8BQAMcnsAdAQAagUAagYAZAMAawUAcnsAdAcAaggAgwAAfQYAfAYAagkAdAoAfAAAgwEAgwEAAXwGAFN8BQBzkwB0CwB8AABkBACDAgCCAQBuAAB8BQBqDACDAAABdAcAaggAgwAAfQYAeHoAfAUARF1yAH0HAHQNAHwHAGoOAIMBAGQFAGsCAHLRAHGwAG4AAHwHAGoPAHMMAXwAAGoQAH0IAHwIAGQGAB9kCwBrBgByAAF8CABkCQAgfQgAbgAAfAgAfAcAXw8AbgAAfAYAagkAdBEAfAcAfAQAjQEAgwEAAXGwAFd8BgBTKAwAAABzEgUAAAogICAgQ29udmVydCBkb2N0ZXN0IHRlc3RzIGZvciBhIG1vZHVsZSB0byBhIHVuaXR0ZXN0IHRlc3Qgc3VpdGUuCgogICAgVGhpcyBjb252ZXJ0cyBlYWNoIGRvY3VtZW50YXRpb24gc3RyaW5nIGluIGEgbW9kdWxlIHRoYXQKICAgIGNvbnRhaW5zIGRvY3Rlc3QgdGVzdHMgdG8gYSB1bml0dGVzdCB0ZXN0IGNhc2UuICBJZiBhbnkgb2YgdGhlCiAgICB0ZXN0cyBpbiBhIGRvYyBzdHJpbmcgZmFpbCwgdGhlbiB0aGUgdGVzdCBjYXNlIGZhaWxzLiAgQW4gZXhjZXB0aW9uCiAgICBpcyByYWlzZWQgc2hvd2luZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0IGFuZCBhCiAgICAoc29tZXRpbWVzIGFwcHJveGltYXRlKSBsaW5lIG51bWJlci4KCiAgICBUaGUgYG1vZHVsZWAgYXJndW1lbnQgcHJvdmlkZXMgdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQuICBUaGUgYXJndW1lbnQKICAgIGNhbiBiZSBlaXRoZXIgYSBtb2R1bGUgb3IgYSBtb2R1bGUgbmFtZS4KCiAgICBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNhbGxpbmcgbW9kdWxlIGlzIHVzZWQuCgogICAgQSBudW1iZXIgb2Ygb3B0aW9ucyBtYXkgYmUgcHJvdmlkZWQgYXMga2V5d29yZCBhcmd1bWVudHM6CgogICAgc2V0VXAKICAgICAgQSBzZXQtdXAgZnVuY3Rpb24uICBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgcnVubmluZyB0aGUKICAgICAgdGVzdHMgaW4gZWFjaCBmaWxlLiBUaGUgc2V0VXAgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYSBEb2NUZXN0CiAgICAgIG9iamVjdC4gIFRoZSBzZXRVcCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSB0ZXN0IGdsb2JhbHMgYXMgdGhlCiAgICAgIGdsb2JzIGF0dHJpYnV0ZSBvZiB0aGUgdGVzdCBwYXNzZWQuCgogICAgdGVhckRvd24KICAgICAgQSB0ZWFyLWRvd24gZnVuY3Rpb24uICBUaGlzIGlzIGNhbGxlZCBhZnRlciBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuICBUaGUgdGVhckRvd24gZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYSBEb2NUZXN0CiAgICAgIG9iamVjdC4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSB0ZXN0IGdsb2JhbHMgYXMgdGhlCiAgICAgIGdsb2JzIGF0dHJpYnV0ZSBvZiB0aGUgdGVzdCBwYXNzZWQuCgogICAgZ2xvYnMKICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5pdGlhbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgdGVzdHMuCgogICAgb3B0aW9uZmxhZ3MKICAgICAgIEEgc2V0IG9mIGRvY3Rlc3Qgb3B0aW9uIGZsYWdzIGV4cHJlc3NlZCBhcyBhbiBpbnRlZ2VyLgogICAgUi4AAABS8wAAAGkCAAAAcxEAAABoYXMgbm8gZG9jc3RyaW5nc2kAAAAAafz///9zBAAAAC5weWNzBAAAAC5weW9p/////04oAgAAAHMEAAAALnB5Y3MEAAAA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UicAAABSBAEAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQLAAAARG9jRmlsZVRlc3R0CQAAcxoAAAAAAwwBCQIMAg0BDwQYAgwBDQMSAwwBEgMbAWMAAAAABAAAAAUAAABPAAAAc2UAAAB0AABqAQCDAAB9AgB8AQBqAgBkAQB0AwCDAgByOgB0BAB8AQBqAgBkAgCDAQCDAQB8AQBkAgA8bgAAeCQAfAAARF0cAH0DAHwCAGoFAHQGAHwDAHwBAI0BAIMBAAFxQQBXfAIAUygDAAAAc5EIAABBIHVuaXR0ZXN0IHN1aXRlIGZvciBvbmUgb3IgbW9yZSBkb2N0ZXN0IGZpbGVzLgoKICAgIFRoZSBwYXRoIHRvIGVhY2ggZG9jdGVzdCBmaWxlIGlzIGdpdmVuIGFzIGEgc3RyaW5nOyB0aGUKICAgIGludGVycHJldGF0aW9uIG9mIHRoYXQgc3RyaW5nIGRlcGVuZHMgb24gdGhlIGtleXdvcmQgYXJndW1lbnQKICAgICJtb2R1bGVfcmVsYXRpdmUiLgoKICAgIEEgbnVtYmVyIG9mIG9wdGlvbnMgbWF5IGJlIHByb3ZpZGVkIGFzIGtleXdvcmQgYXJndW1lbnRzOgoKICAgIG1vZHVsZV9yZWxhdGl2ZQogICAgICBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBUcnVlLCB0aGVuIHRoZSBnaXZlbiBmaWxlIHBhdGhzIGFyZQogICAgICBpbnRlcnByZXRlZCBhcyBvcy1pbmRlcGVuZGVudCBtb2R1bGUtcmVsYXRpdmUgcGF0aHMuICBCeQogICAgICBkZWZhdWx0LCB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNhbGxpbmcgbW9kdWxlJ3MKICAgICAgZGlyZWN0b3J5OyBidXQgaWYgdGhlICJwYWNrYWdlIiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHRoZW4KICAgICAgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhhdCBwYWNrYWdlLiAgVG8gZW5zdXJlIG9zLWluZGVwZW5kZW5jZSwKICAgICAgImZpbGVuYW1lIiBzaG91bGQgdXNlICIvIiBjaGFyYWN0ZXJzIHRvIHNlcGFyYXRlIHBhdGgKICAgICAgc2VnbWVudHMsIGFuZCBtYXkgbm90IGJlIGFuIGFic29sdXRlIHBhdGggKGkuZS4sIGl0IG1heSBub3QKICAgICAgYmVnaW4gd2l0aCAiLyIpLgoKICAgICAgSWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgRmFsc2UsIHRoZW4gdGhlIGdpdmVuIGZpbGUgcGF0aHMgYXJlCiAgICAgIGludGVycHJldGVkIGFzIG9zLXNwZWNpZmljIHBhdGhzLiAgVGhlc2UgcGF0aHMgbWF5IGJlIGFic29sdXRlCiAgICAgIG9yIHJlbGF0aXZlICh0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuCgogICAgcGFja2FnZQogICAgICBBIFB5dGhvbiBwYWNrYWdlIG9yIHRoZSBuYW1lIG9mIGEgUHl0aG9uIHBhY2thZ2Ugd2hvc2UgZGlyZWN0b3J5CiAgICAgIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlIHBhdGhzLgogICAgICBJZiAicGFja2FnZSIgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgY2FsbGluZyBtb2R1bGUncwogICAgICBkaXJlY3RvcnkgaXMgdXNlZCBhcyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9yIG1vZHVsZSByZWxhdGl2ZQogICAgICBmaWxlbmFtZXMuICBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5ICJwYWNrYWdlIiBpZgogICAgICAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZS4KCiAgICBzZXRVcAogICAgICBBIHNldC11cCBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuIFRoZSBzZXRVcCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHNldFVwIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICB0ZWFyRG93bgogICAgICBBIHRlYXItZG93biBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICBnbG9icwogICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBpbml0aWFsIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZSB0ZXN0cy4KCiAgICBvcHRpb25mbGFncwogICAgICBBIHNldCBvZiBkb2N0ZXN0IG9wdGlvbiBmbGFncyBleHByZXNzZWQgYXMgYW4gaW50ZWdlci4KCiAgICBwYXJzZXIKICAgICAgQSBEb2NUZXN0UGFyc2VyIChvciBzdWJjbGFzcykgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBleHRyYWN0CiAgICAgIHRlc3RzIGZyb20gdGhlIGZpbGVzLgoKICAgIGVuY29kaW5nCiAgICAgIEFuIGVuY29kaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGZpbGVzIHRvIHVuaWNvZGUuCiAgICBSUAAAAFJPAAAAKAcAAABSggEAAFKWAQAAUioAAABSdwAAAFJEAAAAUpcBAABSnQEAACgEAAAAdAUAAABwYXRoc3QCAAAAa3dSmQEAAFKYAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhsAAACRCQAAcwwAAAAAOAwFEgEcAg0BGgJjAQAAAAUAAAAGAAAAQwAAAHMoAQAAZwAAfQEAeL0AdAAAgwAAagEAfAAAgwEARF2pAH0CAHQCAHwCAHQDAIMCAHKSAHwBAGoEAHwCAGoFAGQBACCDAQABfAIAagYAfQMAfAMAcsIAfAEAagQAZAIAgwEAAXwBAGcAAHwDAGoHAGQDAIMBAGQBACBEXRAAfQQAZAQAfAQAF14CAHF1ADd9AQBxwgBxGQB8AQBnAAB8AgBqBwBkAwCDAQBkAQAgRF0SAH0EAHQIAHwEAIMBAF4CAHGpADd9AQBxGQBXeCQAfAEAcuwAfAEAZAEAGWQFAGsCAHLsAHwBAGoJAIMAAAFxyQBXeCcAfAEAchYBfAEAZAYAGWQFAGsCAHIWAXwBAGoJAGQGAIMBAAFx8ABXZAMAagoAfAEAgwEAZAMAF1MoBwAAAHN2BQAARXh0cmFjdCBzY3JpcHQgZnJvbSB0ZXh0IHdpdGggZXhhbXBsZXMuCgogICAgICAgQ29udmVydHMgdGV4dCB3aXRoIGV4YW1wbGVzIHRvIGEgUHl0aG9uIHNjcmlwdC4gIEV4YW1wbGUgaW5wdXQgaXMKICAgICAgIGNvbnZlcnRlZCB0byByZWd1bGFyIGNvZGUuICBFeGFtcGxlIG91dHB1dCBhbmQgYWxsIG90aGVyIHdvcmRzCiAgICAgICBhcmUgY29udmVydGVkIHRvIGNvbW1lbnRzOgoKICAgICAgID4+PiB0ZXh0ID0gJycnCiAgICAgICAuLi4gICAgICAgSGVyZSBhcmUgZXhhbXBsZXMgb2Ygc2ltcGxlIG1hdGguCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgUHl0aG9uIGhhcyBzdXBlciBhY2N1cmF0ZSBpbnRlZ2VyIGFkZGl0aW9uCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgPj4+IDIgKyAyCiAgICAgICAuLi4gICAgICAgICAgIDUKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBBbmQgdmVyeSBmcmllbmRseSBlcnJvciBtZXNzYWdlczoKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICA+Pj4gMS8wCiAgICAgICAuLi4gICAgICAgICAgIFRvIEluZmluaXR5CiAgICAgICAuLi4gICAgICAgICAgIEFuZAogICAgICAgLi4uICAgICAgICAgICBCZXlvbmQKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBZb3UgY2FuIHVzZSBsb2dpYyBpZiB5b3Ugd2FudDoKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICA+Pj4gaWYgMDoKICAgICAgIC4uLiAgICAgICAgICAgLi4uICAgIGJsYWgKICAgICAgIC4uLiAgICAgICAgICAgLi4uICAgIGJsYWgKICAgICAgIC4uLiAgICAgICAgICAgLi4uCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgSG8gaHVtCiAgICAgICAuLi4gICAgICAgICAgICcnJwoKICAgICAgID4+PiBwcmludCBzY3JpcHRfZnJvbV9leGFtcGxlcyh0ZXh0KQogICAgICAgIyBIZXJlIGFyZSBleGFtcGxlcyBvZiBzaW1wbGUgbWF0aC4KICAgICAgICMKICAgICAgICMgICAgIFB5dGhvbiBoYXMgc3VwZXIgYWNjdXJhdGUgaW50ZWdlciBhZGRpdGlvbgogICAgICAgIwogICAgICAgMiArIDIKICAgICAgICMgRXhwZWN0ZWQ6CiAgICAgICAjIyA1CiAgICAgICAjCiAgICAgICAjICAgICBBbmQgdmVyeSBmcmllbmRseSBlcnJvciBtZXNzYWdlczoKICAgICAgICMKICAgICAgIDEvMAogICAgICAgIyBFeHBlY3RlZDoKICAgICAgICMjIFRvIEluZmluaXR5CiAgICAgICAjIyBBbmQKICAgICAgICMjIEJleW9uZAogICAgICAgIwogICAgICAgIyAgICAgWW91IGNhbiB1c2UgbG9naWMgaWYgeW91IHdhbnQ6CiAgICAgICAjCiAgICAgICBpZiAwOgogICAgICAgICAgYmxhaAogICAgICAgICAgYmxhaAogICAgICAgIwogICAgICAgIyAgICAgSG8gaHVtCiAgICAgICA8QkxBTktMSU5FPgogICAgICAgaf////9zCwAAACMgRXhwZWN0ZWQ6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YXRlZCB2YWx1ZS4KCiAgICAgICAgPj4+IHggPSBfVGVzdENsYXNzKC00MikKICAgICAgICA+Pj4gcHJpbnQgeC5nZXQoKQogICAgICAgIC00MgogICAgICAgICgBAAAAUgYBAAAoAQAAAFJrAAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UioAAACRCgAAcwIAAAAACCgGAAAAUjQAAABScQAAAFKTAAAAUokAAABSrwEAAFIqAAAAKAAAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSrgEAAG8KAABzCAAAAAYMBgIJCgkKc8QAAAAKICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgb2YgYSBzdHJpbmcgb2JqZWN0LCBzZWFyY2hlZCBhcy1pcy4KICAgICAgICAgICAgICAgICAgICAgID4+PiB4ID0gMTsgeSA9IDIKICAgICAgICAgICAgICAgICAgICAgID4+PiB4ICsgeSwgeCAqIHkKICAgICAgICAgICAgICAgICAgICAgICgzLCAyKQogICAgICAgICAgICAgICAgICAgICAgUroAAABz3AIAAAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAyLjIsIGJvb2xlYW4gZXhwcmVzc2lvbnMgZGlzcGxheWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgb3IgMS4gIEJ5IGRlZmF1bHQsIHdlIHN0aWxsIGFjY2VwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xIHRvIHRoZSBuZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3MgYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+PiA0ID09IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gNCA9PSA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPiA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPiA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMUAAAAYm9vbC1pbnQgZXF1aXZhbGVuY2Vz5gAAAAogICAgICAgICAgICAgICAgQmxhbmsgbGluZXMgY2FuIGJlIG1hcmtlZCB3aXRoIDxCTEFOS0xJTkU+OgogICAgICAgICAgICAgICAgICAgID4+PiBwcmludCAnZm9vXG5cbmJhclxuJwogICAgICAgICAgICAgICAgICAgIGZvbwogICAgICAgICAgICAgICAgICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgICAgICAgICAgYmFyCiAgICAgICAgICAgICAgICAgICAgPEJMQU5LTElORT4KICAgICAgICAgICAgcwsAAABibGFuayBsaW5lc3PzAAAACiAgICAgICAgICAgICAgICBJZiB0aGUgZWxsaXBzaXMgZmxhZyBpcyB1c2VkLCB0aGVuICcuLi4nIGNhbiBiZSB1c2VkIHRvCiAgICAgICAgICAgICAgICBlbGlkZSBzdWJzdHJpbmdzIGluIHRoZSBkZXNpcmVkIG91dHB1dDoK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