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IG5vdCBzdGRlcnI/IGJlY2F1c2Ugc3RkZXJyIGlzIGEgbGFtZSBoYWNrIDwwLjIgd2luaz4pLCBhbmQgdGhlIGZpbmFsCmxpbmUgb2Ygb3V0cHV0IGlzICJUZXN0IGZhaWxlZC4iLgoKUnVuIGl0IHdpdGggdGhlIC12IHN3aXRjaCBpbnN0ZWFkOgoKcHl0aG9uIE0ucHkgLXYKCmFuZCBhIGRldGFpbGVkIHJlcG9ydCBvZiBhbGwgZXhhbXBsZXMgdHJpZWQgaXMgcHJpbnRlZCB0byBzdGRvdXQsIGFsb25nCndpdGggYXNzb3J0ZWQgc3VtbWFyaWVzIGF0IHRoZSBlbmQuCgpZb3UgY2FuIGZvcmNlIHZlcmJvc2UgbW9kZSBieSBwYXNzaW5nICJ2ZXJib3NlPVRydWUiIHRvIHRlc3Rtb2QsIG9yIHByb2hpYml0Cml0IGJ5IHBhc3NpbmcgInZlcmJvc2U9RmFsc2UiLiAgSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCBzeXMuYXJndiBpcyBub3QKZXhhbWluZWQgYnkgdGVzdG1vZC4KClRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cyB0byBydW4gZG9jdGVzdHMsIGluY2x1ZGluZyBpbnRlZ3JhdGlvbgp3aXRoIHRoZSB1bml0dGVzdCBmcmFtZXdvcmssIGFuZCBzdXBwb3J0IGZvciBydW5uaW5nIG5vbi1QeXRob24gdGV4dApmaWxlcyBjb250YWluaW5nIGRvY3Rlc3RzLiAgVGhlcmUgYXJlIGFsc28gbWFueSB3YXlzIHRvIG92ZXJyaWRlIHBhcnRzCm9mIGRvY3Rlc3QncyBkZWZhdWx0IGJlaGF2aW9ycy4gIFNlZSB0aGUgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIGZvcgpkZXRhaWxzLgpzEwAAAHJlU3RydWN0dXJlZFRleHQgZW50EwAAAHJlZ2lzdGVyX29wdGlvbmZsYWd0FgAAAERPTlRfQUNDRVBUX1RSVUVfRk9SXzF0FQAAAERPTlRfQUNDRVBUX0JMQU5LTElORXQUAAAATk9STUFMSVpFX1dISVRFU1BBQ0V0CAAAAEVMTElQU0lTdAQAAABTS0lQdBcAAABJR05PUkVfRVhDRVBUSU9OX0RFVEFJTHQQAAAAQ09NUEFSSVNPTl9GTEFHU3QMAAAAUkVQT1JUX1VESUZGdAwAAABSRVBPUlRfQ0RJRkZ0DAAAAFJFUE9SVF9ORElGRnQZAAAAUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRXQPAAAAUkVQT1JUSU5HX0ZMQUdTdAcAAABFeGFtcGxldAcAAABEb2NUZXN0dA0AAABEb2NUZXN0UGFyc2VydA0AAABEb2NUZXN0RmluZGVydA0AAABEb2NUZXN0UnVubmVydA0AAABPdXRwdXRDaGVja2VydA4AAABEb2NUZXN0RmFpbHVyZXQTAAAAVW5leHBlY3RlZEV4Y2VwdGlvbnQLAAAARGVidWdSdW5uZXJ0BwAAAHRlc3Rtb2R0CAAAAHRlc3RmaWxldBYAAABydW5fZG9jc3RyaW5nX2V4YW1wbGVzdAYAAABUZXN0ZXJ0DAAAAERvY1Rlc3RTdWl0ZXQMAAAARG9jRmlsZVN1aXRldBgAAABzZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3N0FAAAAHNjcmlwdF9mcm9tX2V4YW1wbGVzdAoAAAB0ZXN0c291cmNldAkAAABkZWJ1Z19zcmN0BQAAAGRlYnVnaf////9OKAEAAAB0CAAAAFN0cmluZ0lPKAEAAAB0CgAAAG5hbWVkdHVwbGV0CwAAAFRlc3RSZXN1bHRzcxAAAABmYWlsZWQgYXR0ZW1wdGVkYwEAAAABAAAABQAAAEMAAABzGgAAAHQAAGoBAHwAAGQBAHQCAHQAAIMBAD6DAgBTKAIAAABOaQEAAAAoAwAAAHQTAAAAT1BUSU9ORkxBR1NfQllfTkFNRXQKAAAAc2V0ZGVmYXVsdHQDAAAAbGVuKAEAAAB0BAAAAG5hbWUoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSAAAAAIAAAABzAgAAAAACcwsAAAA8QkxBTktMSU5FPnMDAAAALi4uYwEAAAAEAAAABQAAAEMAAABzVQAAAGQBAH0BAHhIAHQAAGoBAERdPQB9AgB8AABqAgB8AgBkAgCDAgB9AwB8AwB0BAB0AAB8AgCDAgBrCAByEAB8AQB8AwBqBQBPfQEAcRAAcRAAV3wBAFMoAwAAAHOFAAAACiAgICBSZXR1cm4gdGhlIGNvbXBpbGVyLWZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnV0dXJlIGZlYXR1cmVzIHRoYXQKICAgIGhhdmUgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBnaXZlbiBuYW1lc3BhY2UgKGdsb2JzKS4KICAgIGkAAAAATigGAAAAdAoAAABfX2Z1dHVyZV9fdBEAAABhbGxfZmVhdHVyZV9uYW1lc3QDAAAAZ2V0dAQAAABOb25ldAcAAABnZXRhdHRydA0AAABjb21waWxlcl9mbGFnKAQAAAB0BQAAAGdsb2JzdAUAAABmbGFnc3QFAAAAZm5hbWV0BwAAAGZlYXR1cmUoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0FQAAAF9leHRyYWN0X2Z1dHVyZV9mbGFnc7IAAABzDAAAAAAFBgEQARIBFQEUAWkCAAAAYwIAAAACAAAABQAAAEMAAABzewAAAHQAAGoBAHwAAIMBAHITAHwAAFN0AgB8AAB0AwB0BABmAgCDAgByRAB0BQB8AAB0BgCDAAB0BwCDAABkAQBnAQCDBABTfAAAZAQAawgAcmsAdAkAagoAdAkAagsAfAEAgwEAagwAZAIAGRlTdA0AZAMAgwEAggEAZAQAUygFAAAAc4cBAAAKICAgIFJldHVybiB0aGUgbW9kdWxlIHNwZWNpZmllZCBieSBgbW9kdWxlYC4gIEluIHBhcnRpY3VsYXI6CiAgICAgIC0gSWYgYG1vZHVsZWAgaXMgYSBtb2R1bGUsIHRoZW4gcmV0dXJuIG1vZHVsZS4KICAgICAgLSBJZiBgbW9kdWxlYCBpcyBhIHN0cmluZywgdGhlbiBpbXBvcnQgYW5kIHJldHVybiB0aGUKICAgICAgICBtb2R1bGUgd2l0aCB0aGF0IG5hbWUuCiAgICAgIC0gSWYgYG1vZHVsZWAgaXMgTm9uZSwgdGhlbiByZXR1cm4gdGhlIGNhbGxpbmcgbW9kdWxlLgogICAgICAgIFRoZSBjYWxsaW5nIG1vZHVsZSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBtb2R1bGUgb2YKICAgICAgICB0aGUgc3RhY2sgZnJhbWUgYXQgdGhlIGdpdmVuIGRlcHRoIGluIHRoZSBjYWxsIHN0YWNrLgogICAgdAEAAAAqdAgAAABfX25hbWVfX3MiAAAARXhwZWN0ZWQgYSBtb2R1bGUsIHN0cmluZywgb3IgTm9uZU4oDgAAAHQHAAAAaW5zcGVjdHQIAAAAaXNtb2R1bGV0CgAAAGlzaW5zdGFuY2V0AwAAAHN0cnQHAAAAdW5pY29kZXQKAAAAX19pbXBvcnRfX3QHAAAAZ2xvYmFsc3QGAAAAbG9jYWxzUisAAAB0AwAAAHN5c3QHAAAAbW9kdWxlc3QJAAAAX2dldGZyYW1ldAkAAABmX2dsb2JhbHN0CQAAAFR5cGVFcnJvcigCAAAAdAYAAABtb2R1bGV0BQAAAGRlcHRoKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5dBEAAABfbm9ybWFsaXplX21vZHVsZb4AAABzDgAAAAAKDwEEARUBHAEMARsCYwMAAAAFAAAABgAAAEMAAABznwAAAHwCAHJ2AHQAAHwBAGQBAIMCAH0BAHQBAHwBAHwAAIMCAH0AAHQCAHwBAGQCAIMCAHJ2AHQCAHwBAGoDAGQDAIMCAHJzAHwBAGoDAGoEAHwAAIMBAH0DAHwDAGoFAHQGAGoHAGQEAIMCAHwAAGYCAFNxdgBuAAB0CAB8AACDAQCPFwB9BAB8BABqCQCDAAB8AABmAgBTV2QAAFFYZAAAUygFAAAATmkDAAAAdAoAAABfX2xvYWRlcl9fdAgAAABnZXRfZGF0YXMBAAAACigKAAAAUkQAAAB0FQAAAF9tb2R1bGVfcmVsYXRpdmVfcGF0aHQHAAAAaGFzYXR0clJFAAAAUkYAAAB0BwAAAHJlcGxhY2V0AgAAAG9zdAcAAABsaW5lc2VwdAQAAABvcGVudAQAAAByZWFkKAUAAAB0CAAAAGZpbGVuYW1ldAcAAABwYWNrYWdldA8AAABtb2R1bGVfcmVsYXRpdmV0DQAAAGZpbGVfY29udGVudHN0AQAAAGYoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0DgAAAF9sb2FkX3Rlc3RmaWxl0QAAAHMSAAAAAAEGAQ8BDwEPARIBEgMfAQ8BdAgAAABlbmNvZGluZ3MFAAAAdXRmLThpBAAAAGMCAAAAAgAAAAQAAABDAAAAczsAAAB0AAB8AAB0AQCDAgByJAB8AABqAgB0AwBkAQCDAgB9AABuAAB0BABqBQBkAgB8AQBkAwAUfAAAgwMAUygEAAAAc/YAAAAKICAgIEFkZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIGJlZ2lubmluZyBvZgogICAgZXZlcnkgbm9uLWJsYW5rIGxpbmUgaW4gYHNgLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICBJZiB0aGUgc3RyaW5nIGBzYCBpcyBVbmljb2RlLCBpdCBpcyBlbmNvZGVkIHVzaW5nIHRoZSBzdGRvdXQKICAgIGVuY29kaW5nIGFuZCB0aGUgYGJhY2tzbGFzaHJlcGxhY2VgIGVycm9yIGhhbmRsZXIuCiAgICB0EAAAAGJhY2tzbGFzaHJlcGxhY2VzCgAAACg/bSleKD8hJCl0AQAAACAoBgAAAFI3AAAAUjkAAAB0BgAAAGVuY29kZXQJAAAAX2VuY29kaW5ndAIAAAByZXQDAAAAc3ViKAIAAAB0AQAAAHN0BgAAAGluZGVudCgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQHAAAAX2luZGVudOEAAABzBgAAAAAHDwEVAmMBAAAABQAAAAYAAABDAAAAczsAAAB0AACDAAB9AQB8AABcAwB9AgB9AwB9BAB0AQBqAgB8AgB8AwB8BABkAQB8AQCDAwEBfAEAagMAgwAAUygCAAAAc3oAAAAKICAgIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGEgdHJhY2ViYWNrIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbgogICAgZXhjX2luZm8gdHVwbGUgKGFzIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpKS4KICAgIHQEAAAAZmlsZSgEAAAAUiEAAAB0CQAAAHRyYWNlYmFja3QPAAAAcHJpbnRfZXhjZXB0aW9udAgAAABnZXR2YWx1ZSgFAAAAdAgAAABleGNfaW5mb3QGAAAAZXhjb3V0dAgAAABleGNfdHlwZXQHAAAAZXhjX3ZhbHQGAAAAZXhjX3RiKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5dBQAAABfZXhjZXB0aW9uX3RyYWNlYmFja+0AAABzCAAAAAAGCQEPARkBdAkAAABfU3Bvb2ZPdXRjAAAAAAAAAAACAAAAQgAAAHMdAAAAZQAAWgEAZAAAhAAAWgIAZAIAZAEAhAEAWgQAUlMoAwAAAGMBAAAAAgAAAAQAAABDAAAAc04AAAB0AABqAQB8AACDAQB9AQB8AQByMgB8AQBqAgBkAQCDAQAMcjIAfAEAZAEAN30BAG4AAHQDAHwAAGQCAIMCAHJKAHwAAGAEAG4AAHwBAFMoAwAAAE5zAQAAAAp0CQAAAHNvZnRzcGFjZSgFAAAAUiEAAABSYQAAAHQIAAAAZW5kc3dpdGhSSAAAAFJpAAAAKAIAAAB0BAAAAHNlbGZ0BgAAAHJlc3VsdCgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVJhAAAA+gAAAHMMAAAAAAEPBBYBDQMPAQkBYwIAAAACAAAAAwAAAEMAAABzQQAAAHQAAGoBAHwAAHwBAIMCAAF0AgB8AABkAQCDAgByKAB8AABgAwBuAAB8AABqBABzPQBkAgB8AABfBABuAABkAABTKAMAAABOUmkAAAB0AAAAACgFAAAAUiEAAAB0CAAAAHRydW5jYXRlUkgAAABSaQAAAHQDAAAAYnVmKAIAAABSawAAAHQEAAAAc2l6ZSgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVJuAAAABwEAAHMKAAAAAAEQAQ8BCQEJAk4oBQAAAFI0AAAAdAoAAABfX21vZHVsZV9fUmEAAABSKwAAAFJuAAAAKAAAAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSaAAAAPkAAABzBAAAAAYBCQ1jAgAAAAYAAAAFAAAAQwAAAHMmAQAAdAAAfAAAawcAchYAfAAAfAEAawIAU3wAAGoBAHQAAIMBAH0CAHQCAHwCAIMBAGQBAGsFAHM9AHQDAIIBAGQCAHQCAHwBAIMBAAJ9AwB9BAB8AgBkAgAZfQUAfAUAcowAfAEAagQAfAUAgwEAcoUAdAIAfAUAgwEAfQMAfAIAZAIAPXGMAHQFAFNuAAB8AgBkAwAZfQUAfAUAcswAfAEAagYAfAUAgwEAcsUAfAQAdAIAfAUAgwEAOH0EAHwCAGQDAD1xzAB0BQBTbgAAfAMAfAQAawQActwAdAUAU3hDAHwCAERdOwB9BQB8AQBqBwB8BQB8AwB8BACDAwB9AwB8AwBkAgBrAAByDgF0BQBTfAMAdAIAfAUAgwEAN30DAHHjAFd0CABTKAQAAABzXwAAAAogICAgRXNzZW50aWFsbHkgdGhlIG9ubHkgc3VidGxlIGNhc2U6CiAgICA+Pj4gX2VsbGlwc2lzX21hdGNoKCdhYS4uLmFhJywgJ2FhYScpCiAgICBGYWxzZQogICAgaQIAAABpAAAAAGn/////KAkAAAB0DwAAAEVMTElQU0lTX01BUktFUnQFAAAAc3BsaXRSJgAAAHQOAAAAQXNzZXJ0aW9uRXJyb3J0CgAAAHN0YXJ0c3dpdGh0BQAAAEZhbHNlUmoAAAB0BAAAAGZpbmR0BAAAAFRydWUoBgAAAHQEAAAAd2FudHQDAAAAZ290dAIAAAB3c3QIAAAAc3RhcnRwb3N0BgAAAGVuZHBvc3QBAAAAdygAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQPAAAAX2VsbGlwc2lzX21hdGNoEAEAAHMyAAAAAAYMAQoDDwEYAxMBCgEGAQ8BDAEKAgcBCgEGAQ8BEAEKAgcCDAMEBQ0EFQEMAQQBFAJjAQAAAAEAAAACAAAAQwAAAHMiAAAAfAAAagAAgwAAfQAAfAAAchoAZAEAfAAAF1NkAgBTZAMAUygEAAAAcykAAABSZXR1cm4gYSBjb21tZW50ZWQgZm9ybSBvZiB0aGUgZ2l2ZW4gbGluZXMCAAAAIyB0AQAAACNOKAEAAAB0BgAAAHJzdHJpcCgBAAAAdAQAAABsaW5lKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5dA0AAABfY29tbWVudF9saW5lQQEAAHMIAAAAAAIMAQYBCAJ0FQAAAF9PdXRwdXRSZWRpcmVjdGluZ1BkYmMAAAAAAAAAAAIAAABCAAAAczUAAABlAABaAQBkAABaAgBkAQCEAABaAwBkBQBkAgCEAQBaBQBkAwCEAABaBgBkBACEAABaBwBSUygGAAAAc8AAAAAKICAgIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgcHl0aG9uIGRlYnVnZ2VyIHRoYXQgcmVkaXJlY3RzIHN0ZG91dAogICAgdG8gYSBnaXZlbiBzdHJlYW0gd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyLiAgU3Rkb3V0IGlzICpub3QqCiAgICByZWRpcmVjdGVkIHdoZW4gdHJhY2VkIGNvZGUgaXMgZXhlY3V0ZWQuCiAgICBjAgAAAAIAAAAEAAAAQwAAAHM1AAAAfAEAfAAAXwAAdAEAfAAAXwIAdAMAagQAagUAfAAAZAEAfAEAgwEBAWQCAHwAAF8GAGQAAFMoAwAAAE50BgAAAHN0ZG91dGkBAAAAKAcAAAB0GgAAAF9PdXRwdXRSZWRpcmVjdGluZ1BkYl9fb3V0UnYAAAB0JAAAAF9PdXRwdXRSZWRpcmVjdGluZ1BkYl9fZGVidWdnZXJfdXNlZHQDAAAAcGRidAMAAABQZGJ0CAAAAF9faW5pdF9fdAwAAAB1c2VfcmF3aW5wdXQoAgAAAFJrAAAAdAMAAABvdXQoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSigAAAE8BAABzCAAAAAABCQEJARYCYwIAAAACAAAAAwAAAEMAAABzPgAAAHQAAHwAAF8BAHwBAGQAAGsIAHInAHQDAGoEAIMAAGoFAH0BAG4AAHQGAGoHAGoIAHwAAHwBAIMCAAFkAABTKAEAAABOKAkAAABSeAAAAFKHAAAAUisAAABSPQAAAFI/AAAAdAYAAABmX2JhY2tSiAAAAFKJAAAAdAkAAABzZXRfdHJhY2UoAgAAAFJrAAAAdAUAAABmcmFtZSgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKOAAAAVgEAAHMIAAAAAAEJAQwBEgFjAQAAAAEAAAACAAAAQwAAAHMgAAAAfAAAagAAchwAdAEAagIAagMAfAAAgwEAAW4AAGQAAFMoAQAAAE4oBAAAAFKHAAAAUogAAABSiQAAAHQMAAAAc2V0X2NvbnRpbnVlKAEAAABSawAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKQAAAAXAEAAHMEAAAAAAMJAWMBAAAAAwAAAAUAAABHAAAAcz0AAAB0AABqAQB9AgB8AABqAgB0AABfAQB6FwB0AwBqBABqBQB8AAB8AQCMAQBTV2QAAHwCAHQAAF8BAFhkAABTKAEAAABOKAYAAABSPQAAAFKFAAAAUoYAAABSiAAAAFKJAAAAdA4AAAB0cmFjZV9kaXNwYXRjaCgDAAAAUmsAAAB0BAAAAGFyZ3N0CwAAAHNhdmVfc3Rkb3V0KAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UpEAAABiAQAAcwoAAAAAAgkBDAIDARcCTigIAAAAUjQAAABScQAAAHQHAAAAX19kb2NfX1KKAAAAUisAAABSjgAAAFKQAAAAUpEAAAAoAAAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKEAAAASQEAAHMKAAAABgUGAQkHDAYJBmMCAAAAAwAAAAUAAABDAAAAc/gAAAB0AABqAQB8AACDAQBzHwB0AgBkAQB8AAAWggIAbgAAfAEAagMAZAIAgwEAcjoAdAQAZAMAggIAbgAAdAUAfAAAZAQAgwIAcmUAdAYAagcAaggAfAAAagkAgwEAZAUAGX0CAG53AHwAAGoKAGQGAGsCAHLIAHQLAHQMAGoNAIMBAGQFAGsEAHK8AHQMAGoNAGQFABlkBwBrAwByvAB0BgBqBwBqCAB0DABqDQBkBQAZgwEAZAUAGX0CAHHcAHQGAGoOAH0CAG4UAHQEAGQIAHwAABdkCQAXgwEAggEAdAYAagcAag8AfAIAfAEAaggAZAIAgwEAjAEAUygKAAAATnMVAAAARXhwZWN0ZWQgYSBtb2R1bGU6ICVydAEAAAAvczEAAABNb2R1bGUtcmVsYXRpdmUgZmlsZXMgbWF5IG5vdCBoYXZlIGFic29sdXRlIHBhdGhzdAgAAABfX2ZpbGVfX2kAAAAAdAgAAABfX21haW5fX1JtAAAAcysAAABDYW4ndCByZXNvbHZlIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBtb2R1bGUgcxUAAAAgKGl0IGhhcyBubyBfX2ZpbGVfXykoEAAAAFI1AAAAUjYAAABSQQAAAFJ1AAAAdAoAAABWYWx1ZUVycm9yUkgAAABSSgAAAHQEAAAAcGF0aFJzAAAAUpYAAABSNAAAAFImAAAAUj0AAAB0BAAAAGFyZ3Z0BgAAAGN1cmRpcnQEAAAAam9pbigDAAAAUkIAAABSmQAAAHQHAAAAYmFzZWRpcigAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVJHAAAAbQEAAHMaAAAAAAEPARABDwEMAw8CHAEPAigBIAIMAwMBEQNjAAAAAAAAAAAFAAAAQgAAAHM+AAAAZQAAWgEAZAAAWgIAZAYAZAEAZAEAZAYAZAIAhAQAWgQAZAMAhAAAWgUAZAQAhAAAWgYAZAUAhAAAWgcAUlMoBwAAAHNuBgAACiAgICBBIHNpbmdsZSBkb2N0ZXN0IGV4YW1wbGUsIGNvbnNpc3Rpbmcgb2Ygc291cmNlIGNvZGUgYW5kIGV4cGVjdGVkCiAgICBvdXRwdXQuICBgRXhhbXBsZWAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CgogICAgICAtIHNvdXJjZTogQSBzaW5nbGUgUHl0aG9uIHN0YXRlbWVudCwgYWx3YXlzIGVuZGluZyB3aXRoIGEgbmV3bGluZS4KICAgICAgICBUaGUgY29uc3RydWN0b3IgYWRkcyBhIG5ld2xpbmUgaWYgbmVlZGVkLgoKICAgICAgLSB3YW50OiBUaGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgc291cmNlIGNvZGUgKGVpdGhlcgogICAgICAgIGZyb20gc3Rkb3V0LCBvciBhIHRyYWNlYmFjayBpbiBjYXNlIG9mIGV4Y2VwdGlvbikuICBgd2FudGAgZW5kcwogICAgICAgIHdpdGggYSBuZXdsaW5lIHVubGVzcyBpdCdzIGVtcHR5LCBpbiB3aGljaCBjYXNlIGl0J3MgYW4gZW1wdHkKICAgICAgICBzdHJpbmcuICBUaGUgY29uc3RydWN0b3IgYWRkcyBhIG5ld2xpbmUgaWYgbmVlZGVkLgoKICAgICAgLSBleGNfbXNnOiBUaGUgZXhjZXB0aW9uIG1lc3NhZ2UgZ2VuZXJhdGVkIGJ5IHRoZSBleGFtcGxlLCBpZgogICAgICAgIHRoZSBleGFtcGxlIGlzIGV4cGVjdGVkIHRvIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbjsgb3IgYE5vbmVgIGlmCiAgICAgICAgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbi4gIFRoaXMgZXhjZXB0aW9uCiAgICAgICAgbWVzc2FnZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSByZXR1cm4gdmFsdWUgb2YKICAgICAgICBgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSgpYC4gIGBleGNfbXNnYCBlbmRzIHdpdGggYQogICAgICAgIG5ld2xpbmUgdW5sZXNzIGl0J3MgYE5vbmVgLiAgVGhlIGNvbnN0cnVjdG9yIGFkZHMgYSBuZXdsaW5lCiAgICAgICAgaWYgbmVlZGVkLgoKICAgICAgLSBsaW5lbm86IFRoZSBsaW5lIG51bWJlciB3aXRoaW4gdGhlIERvY1Rlc3Qgc3RyaW5nIGNvbnRhaW5pbmcKICAgICAgICB0aGlzIEV4YW1wbGUgd2hlcmUgdGhlIEV4YW1wbGUgYmVnaW5zLiAgVGhpcyBsaW5lIG51bWJlciBpcwogICAgICAgIHplcm8tYmFzZWQsIHdpdGggcmVzcGVjdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBEb2NUZXN0LgoKICAgICAgLSBpbmRlbnQ6IFRoZSBleGFtcGxlJ3MgaW5kZW50YXRpb24gaW4gdGhlIERvY1Rlc3Qgc3RyaW5nLgogICAgICAgIEkuZS4sIHRoZSBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycyB0aGF0IHByZWNlZWQgdGhlCiAgICAgICAgZXhhbXBsZSdzIGZpcnN0IHByb21wdC4KCiAgICAgIC0gb3B0aW9uczogQSBkaWN0aW9uYXJ5IG1hcHBpbmcgZnJvbSBvcHRpb24gZmxhZ3MgdG8gVHJ1ZSBvcgogICAgICAgIEZhbHNlLCB3aGljaCBpcyB1c2VkIHRvIG92ZXJyaWRlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhpcwogICAgICAgIGV4YW1wbGUuICBBbnkgb3B0aW9uIGZsYWdzIG5vdCBjb250YWluZWQgaW4gdGhpcyBkaWN0aW9uYXJ5CiAgICAgICAgYXJlIGxlZnQgYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZSAoYXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgIERvY1Rlc3RSdW5uZXIncyBvcHRpb25mbGFncykuICBCeSBkZWZhdWx0LCBubyBvcHRpb25zIGFyZSBzZXQu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ICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIERvY1Rlc3RzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIGdpdmVuCiAgICAgICAgb2JqZWN0J3MgZG9jc3RyaW5nLCBvciBieSBhbnkgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzJwogICAgICAgIGRvY3N0cmluZ3MuCgogICAgICAgIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYG1vZHVsZWAgaXMgdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgICAgICAgdGhlIGdpdmVuIG9iamVjdC4gIElmIHRoZSBtb2R1bGUgaXMgbm90IHNwZWNpZmllZCBvciBpcyBOb25lLCB0aGVuCiAgICAgICAgdGhlIHRlc3QgZmluZGVyIHdpbGwgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKICAgICAgICBjb3JyZWN0IG1vZHVsZS4gIFRoZSBvYmplY3QncyBtb2R1bGUgaXMgdXNlZDoKCiAgICAgICAgICAgIC0gQXMgYSBkZWZhdWx0IG5hbWVzcGFjZSwgaWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgICAtIFRvIHByZXZlbnQgdGhlIERvY1Rlc3RGaW5kZXIgZnJvbSBleHRyYWN0aW5nIERvY1Rlc3RzCiAgICAgICAgICAgICAgZnJvbSBvYmplY3RzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy4KICAgICAgICAgICAgLSBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdC4KICAgICAgICAgICAgLSBUbyBoZWxwIGZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvYmplY3Qgd2l0aGluIGl0cwogICAgICAgICAgICAgIGZpbGUuCgogICAgICAgIENvbnRhaW5lZCBvYmplY3RzIHdob3NlIG1vZHVsZSBkb2VzIG5vdCBtYXRjaCBgbW9kdWxlYCBhcmUgaWdub3JlZC4KCiAgICAgICAgSWYgYG1vZHVsZWAgaXMgRmFsc2UsIG5vIGF0dGVtcHQgdG8gZmluZCB0aGUgbW9kdWxlIHdpbGwgYmUgbWFkZS4KICAgICAgICBUaGlzIGlzIG9ic2N1cmUsIG9mIHVzZSBtb3N0bHkgaW4gdGVzdHM6ICBpZiBgbW9kdWxlYCBpcyBGYWxzZSwgb3IKICAgICAgICBpcyBOb25lIGJ1dCBjYW5ub3QgYmUgZm91bmQgYXV0b21hdGljYWxseSwgdGhlbiBhbGwgb2JqZWN0cyBhcmUKICAgICAgICBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgKG5vbi1leGlzdGVudCkgbW9kdWxlLCBzbyBhbGwgY29udGFpbmVkCiAgICAgICAgb2JqZWN0cyB3aWxsIChyZWN1cnNpdmVseSkgYmUgc2VhcmNoZWQgZm9yIGRvY3Rlc3RzLgoKICAgICAgICBUaGUgZ2xvYmFscyBmb3IgZWFjaCBEb2NUZXN0IGlzIGZvcm1lZCBieSBjb21iaW5pbmcgYGdsb2JzYAogICAgICAgIGFuZCBgZXh0cmFnbG9ic2AgKGJpbmRpbmdzIGluIGBleHRyYWdsb2JzYCBvdmVycmlkZSBiaW5kaW5ncwogICAgICAgIGluIGBnbG9ic2ApLiAgQSBuZXcgY29weSBvZiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQKICAgICAgICBmb3IgZWFjaCBEb2NUZXN0LiAgSWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0CiAgICAgICAgZGVmYXVsdHMgdG8gdGhlIG1vZHVsZSdzIGBfX2RpY3RfX2AsIGlmIHNwZWNpZmllZCwgb3Ige30KICAgICAgICBvdGhlcndpc2UuICBJZiBgZXh0cmFnbG9ic2AgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cwogICAgICAgIHRvIHt9LgoKICAgICAgICBSNAAAAHNKAAAARG9jVGVzdEZpbmRlci5maW5kOiBuYW1lIG11c3QgYmUgZ2l2ZW4gd2hlbiBvYmouX19uYW1lX18gZG9lc24ndCBleGlzdDogJXJSlwAAAE4oEQAAAFIrAAAAUiwAAABSmAAAAFKiAAAAUnYAAABSNQAAAHQJAAAAZ2V0bW9kdWxldA0AAABnZXRzb3VyY2VmaWxldAcA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LT4gVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQogICAgICAgIF9UZXN0Q2xhc3Muc3F1YXJlIC0+IFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKCiAgICBUaGUgYHN1bW1hcml6ZWAgbWV0aG9kIHByaW50cyBhIHN1bW1hcnkgb2YgYWxsIHRoZSB0ZXN0IGNhc2VzIHRoYXQKICAgIGhhdmUgYmVlbiBydW4gYnkgdGhlIHJ1bm5lciwgYW5kIHJldHVybnMgYW4gYWdncmVnYXRlZCBgKGYsIHQpYAogICAgdHVwbGU6CgogICAgICAgID4+PiBydW5uZXIuc3VtbWFyaXplKHZlcmJvc2U9MSkKICAgICAgICA0IGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzCiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzLl9faW5pdF9fCiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzLmdldAogICAgICAgICAgIDEgdGVzdHMgaW4gX1Rlc3RDbGFzcy5zcXVhcmUKICAgICAgICA3IHRlc3RzIGluIDQgaXRlbXMuCiAgICAgICAgNyBwYXNzZWQgYW5kIDAgZmFpbGVkLgogICAgICAgIFRlc3QgcGFzc2VkLgogICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NykKCiAgICBUaGUgYWdncmVnYXRlZCBudW1iZXIgb2YgdHJpZWQgZXhhbXBsZXMgYW5kIGZhaWxlZCBleGFtcGxlcyBpcwogICAgYWxzbyBhdmFpbGFibGUgdmlhIHRoZSBgdHJpZXNgIGFuZCBgZmFpbHVyZXNgIGF0dHJpYnV0ZXM6CgogICAgICAgID4+PiBydW5uZXIudHJpZXMKICAgICAgICA3CiAgICAgICAgPj4+IHJ1bm5lci5mYWlsdXJlcwogICAgICAgIDAKCiAgICBUaGUgY29tcGFyaXNvbiBiZXR3ZWVuIGV4cGVjdGVkIG91dHB1dHMgYW5kIGFjdHVhbCBvdXRwdXRzIGlzIGRvbmUKICAgIGJ5IGFuIGBPdXRwdXRDaGVja2VyYC4gIFRoaXMgY29tcGFyaXNvbiBtYXkgYmUgY3VzdG9taXplZCB3aXRoIGEKICAgIG51bWJlciBvZiBvcHRpb24gZmxhZ3M7IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYHRlc3Rtb2RgIGZvcgogICAgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHRoZSBvcHRpb24gZmxhZ3MgYXJlIGluc3VmZmljaWVudCwgdGhlbiB0aGUKICAgIGNvbXBhcmlzb24gbWF5IGFsc28gYmUgY3VzdG9taXplZCBieSBwYXNzaW5nIGEgc3ViY2xhc3Mgb2YKICAgIGBPdXRwdXRDaGVja2VyYCB0byB0aGUgY29uc3RydWN0b3IuCgogICAgVGhlIHRlc3QgcnVubmVyJ3MgZGlzcGxheSBvdXRwdXQgY2FuIGJlIGNvbnRyb2xsZWQgaW4gdHdvIHdheXMuCiAgICBGaXJzdCwgYW4gb3V0cHV0IGZ1bmN0aW9uIChgb3V0KSBjYW4gYmUgcGFzc2VkIHRvCiAgICBgVGVzdFJ1bm5lci5ydW5gOyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggc3RyaW5ncyB0aGF0CiAgICBzaG91bGQgYmUgZGlzcGxheWVkLiAgSXQgZGVmYXVsdHMgdG8gYHN5cy5zdGRvdXQud3JpdGVgLiAgSWYKICAgIGNhcHR1cmluZyB0aGUgb3V0cHV0IGlzIG5vdCBzdWZmaWNpZW50LCB0aGVuIHRoZSBkaXNwbGF5IG91dHB1dAogICAgY2FuIGJlIGFsc28gY3VzdG9taXplZCBieSBzdWJjbGFzc2luZyBEb2NUZXN0UnVubmVyLCBhbmQKICAgIG92ZXJyaWRpbmcgdGhlIG1ldGhvZHMgYHJlcG9ydF9zdGFydGAsIGByZXBvcnRfc3VjY2Vzc2AsCiAgICBgcmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9uYCwgYW5kIGByZXBvcnRfZmFpbHVyZWAuCiAgICBSMwAAAGlGAAAAaQAAAABjBAAAAAQAAAADAAAAQwAAAHN2AAAAfAEAcAwAdAAAgwAAfAAAXwEAfAIAZAMAawgAcjAAZAEAdAMAagQAawYAfQIAbgAAfAIAfAAAXwUAfAMAfAAAXwYAfAMAfAAAXwcAZAIAfAAAXwgAZAIAfAAAXwkAaQAAfAAAXwoAdAsAgwAAfAAAXwwAZAMAUygEAAAAc2MCAAAKICAgICAgICBDcmVhdGUgYSBuZXcgdGVzdCBydW5uZXIuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnIGBjaGVja2VyYCBpcyB0aGUgYE91dHB1dENoZWNrZXJgIHRoYXQKICAgICAgICBzaG91bGQgYmUgdXNlZCB0byBjb21wYXJlIHRoZSBleHBlY3RlZCBvdXRwdXRzIGFuZCBhY3R1YWwKICAgICAgICBvdXRwdXRzIG9mIGRvY3Rlc3QgZXhhbXBsZXMuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICd2ZXJib3NlJyBwcmludHMgbG90cyBvZiBzdHVmZiBpZiB0cnVlLAogICAgICAgIG9ubHkgZmFpbHVyZXMgaWYgZmFsc2U7IGJ5IGRlZmF1bHQsIGl0J3MgdHJ1ZSBpZmYgJy12JyBpcyBpbgogICAgICAgIHN5cy5hcmd2LgoKICAgICAgICBPcHRpb25hbCBhcmd1bWVudCBgb3B0aW9uZmxhZ3NgIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgaG93IHRoZQogICAgICAgIHRlc3QgcnVubmVyIGNvbXBhcmVzIGV4cGVjdGVkIG91dHB1dCB0byBhY3R1YWwgb3V0cHV0LCBhbmQgaG93CiAgICAgICAgaXQgZGlzcGxheXMgZmFpbHVyZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGB0ZXN0bW9kYCBmb3IKICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIHMCAAAALXZpAAAAAE4oDQAAAFISAAAAdAgAAABfY2hlY2tlclIrAAAAUj0AAABSmgAAAFLkAAAAdAsAAABvcHRpb25mbGFnc3QUAAAAb3JpZ2luYWxfb3B0aW9uZmxhZ3N0BQAAAHRyaWVzdAgAAABmYWlsdXJlc3QIAAAAX25hbWUyZnRSaAAAAHQIAAAAX2Zha2VvdXQoBAAAAFJrAAAAdAcAAABjaGVja2VyUucAAABSFQEAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKKAAAAdAQAAHMUAAAAABESAQwBEgEJAQkBCQMJAQkBCQNjBAAAAAQAAAAEAAAAQwAAAHNfAAAAfAAAagAAclsAfAMAagEAcj0AfAEAZAEAdAIAfAMAagMAgwEAF2QCABd0AgB8AwBqAQCDAQAXgwEAAXFbAHwBAGQBAHQCAHwDAGoDAIMBABdkAwAXgwEAAW4AAGQEAFMoBQAAAHOHAAAACiAgICAgICAgUmVwb3J0IHRoYXQgdGhlIHRlc3QgcnVubmVyIGlzIGFib3V0IHRvIHByb2Nlc3MgdGhlIGdpdmVuCiAgICAgICAgZXhhbXBsZS4gIChPbmx5IGRpc3BsYXlzIGEgbWVzc2FnZSBpZiB2ZXJib3NlPVRydWUpCiAgICAgICAgcwgAAABUcnlpbmc6CnMLAAAARXhwZWN0aW5nOgpzEgAAAEV4cGVjdGluZyBub3RoaW5nCk4oBAAAAFLkAAAAUnkAAABSXQAAAFKeAAAAKAQAAABSawAAAFKMAAAAUgUBAAB0BwAAAGV4YW1wbGUoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0DAAAAHJlcG9ydF9zdGFydJgEAABzDAAAAAAFCQEJAQMBKAITAWMFAAAABQAAAAIAAABDAAAAcxoAAAB8AABqAAByFgB8AQBkAQCDAQABbgAAZAIAUygDAAAAc3QAAAAKICAgICAgICBSZXBvcnQgdGhhdCB0aGUgZ2l2ZW4gZXhhbXBsZSByYW4gc3VjY2Vzc2Z1bGx5LiAgKE9ubHkKICAgICAgICBkaXNwbGF5cyBhIG1lc3NhZ2UgaWYgdmVyYm9zZT1UcnVlKQogICAgICAgIHMDAAAAb2sKTigBAAAAUuQAAAAoBQAAAFJrAAAAUowAAABSBQEAAFIcAQAAUnoAAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0DgAAAHJlcG9ydF9zdWNjZXNzpQQAAHMEAAAAAAUJAWMFAAAABQAAAAYAAABDAAAAczMAAAB8AQB8AABqAAB8AgB8AwCDAgB8AABqAQBqAgB8AwB8BAB8AABqAwCDAwAXgwEAAWQBAFMoAgAAAHM3AAAACiAgICAgICAgUmVwb3J0IHRoYXQgdGhlIGdpdmVuIGV4YW1wbGUgZmFpbGVkLgogICAgICAgIE4oBAAAAHQPAAAAX2ZhaWx1cmVfaGVhZGVyUhQBAAB0EQAAAG91dHB1dF9kaWZmZXJlbmNlUhUBAAAoBQAAAFJrAAAAUowAAABSBQEAAFIcAQAAUnoAAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0DgAAAHJlcG9ydF9mYWlsdXJlrQQAAHMEAAAAAAQSAWMFAAAABQAAAAUAAABDAAAAcy4AAAB8AQB8AABqAAB8AgB8AwCDAgBkAQAXdAEAdAIAfAQAgwEAgwEAF4MBAAFkAgBTKAMAAABzTwAAAAogICAgICAgIFJlcG9ydCB0aGF0IHRoZSBnaXZlbiBleGFtcGxlIHJhaXNlZCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KICAgICAgICBzEgAAAEV4Y2VwdGlvbiByYWlzZWQ6Ck4oAwAAAFIfAQAAUl0AAABSZwAAACgFAAAAUmsAAABSjAAAAFIFAQAAUhwBAABSYgAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQbAAAAcmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9utAQAAHMEAAAAAAQDAWMDAAAABgAAAAYAAABDAAAAc8oAAAB8AABqAABnAQB9AwB8AQBqAQBycwB8AQBqAgBkAABrCQBySgB8AgBqAgBkAABrCQBySgB8AQBqAgB8AgBqAgAXZAEAF30EAG4GAGQCAH0EAHwDAGoEAGQDAHwBAGoBAHwEAHwBAGoFAGYDABaDAQABbiEAfAMAagQAZAQAfAIAagIAZAEAF3wBAGoFAGYCABaDAQABfAMAagQAZAUAgwEAAXwCAGoGAH0FAHwDAGoEAHQHAHwFAIMBAIMBAAFkBgBqCAB8AwCDAQBTKAcAAABOaQEAAAB0AQAAAD9zGQAAAEZpbGUgIiVzIiwgbGluZSAlcywgaW4gJXNzDgAAAExpbmUgJXMsIGluICVzcw8AAABGYWlsZWQgZXhhbXBsZTpzAQAAAAooCQAAAHQHAAAARElWSURFUlJOAAAAUp8AAABSKwAAAFK1AAAAUicAAABSngAAAFJdAAAAUpwAAAAoBgAAAFJrAAAAUgUBAABSHAEAAFKMAAAAUp8AAABSngAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIfAQAAuwQAAHMYAAAAAAEMAQkBHgEXAgYBCQEaAiEBDQEJARMBYwQAAAAYAAAACQAAAEIAAABznwMAAGQBAAR9BAB9BQB8AABqAAB9BgBlAQBkAgCDAQBcAwB9BwB9CAB9CQB8AABqAgBqAwB9CgB4PwNlBAB8AQBqBQCDAQBEXS4DXAIAfQsAfQwAfAAAagAAZQYAQG9mAHwEAGQBAGsEAH0NAHwGAHwAAF8AAHwMAGoHAHLGAHhIAHwMAGoHAGoIAIMAAERdNABcAgB9DgB9DwB8DwByrwB8AAAEagAAfA4ATwJfAABxiwB8AAAEagAAfA4AD00CXwAAcYsAV24AAHwAAGoAAGUJAEBy2QBxRABuAAB8BQBkAwA3fQUAfA0Ac/8AfAAAagoAfAMAfAEAfAwAgwMAAW4AAGQEAHwBAGoLAHwLAGYCABZ9EAB5NwBlDAB8DABqDQB8EABkBQB8AgBkAwCDBQB8AQBqDgAEVXwAAGoPAGoQAIMAAAFkCgB9EQBXbjMABGUSAGsKAHJfAQEBAYIAAG4gAAEBAWUTAGoUAIMAAH0RAHwAAGoPAGoQAIMAAAFuAQBYfAAAahUAahYAgwAAfRIAfAAAahUAahcAZAEAgwEAAXwIAH0TAHwRAGQKAGsIAHLUAXwKAHwMAGoYAHwSAHwAAGoAAIMDAHK8AnwHAH0TAHG8Am7oAGUTAGoUAIMAAH0UAGUZAGoaAHwUAGQGACCMAABkBwAZfRUAfA0AcxACfBIAZRsAfBQAgwEAN30SAG4AAHwMAGocAGQKAGsIAHIoAnwJAH0TAG6UAHwKAHwMAGocAHwVAHwAAGoAAIMDAHJJAnwHAH0TAG5zAHwAAGoAAGUdAEByvAJlHgBqHwBkCAB8DABqHACDAgB9FgBlHgBqHwBkCAB8FQCDAgB9FwB8FgByvAJ8FwByvAJ8CgB8FgBqIABkAwCDAQB8FwBqIABkAwCDAQB8AABqAACDAwByvAJ8BwB9EwBxvAJuAAB8EwB8BwBrCABy6gJ8DQBzcgN8AABqIQB8AwB8AQB8DAB8EgCDBAABcXIDcUQAfBMAfAgAawgAciIDfA0AcxUDfAAAaiIAfAMAfAEAfAwAfBIAgwQAAW4AAHwEAGQDADd9BABxRAB8EwB8CQBrCAByWgN8DQBzTQN8AABqIwB8AwB8AQB8DAB8FACDBAABbgAAfAQAZAMAN30EAHFEAGUkAHNEAHQlAGQJAHwTAGYCAIMBAIIBAHFEAFd8BgB8AABfAAB8AABqJgB8AQB8BAB8BQCDAwABZScAfAQAfAUAgwIAUygLAAAAc9IBAAAKICAgICAgICBSdW4gdGhlIGV4YW1wbGVzIGluIGB0ZXN0YC4gIFdyaXRlIHRoZSBvdXRjb21lIG9mIGVhY2ggZXhhbXBsZQogICAgICAgIHdpdGggb25lIG9mIHRoZSBgRG9jVGVzdFJ1bm5lci5yZXBvcnRfKmAgbWV0aG9kcywgdXNpbmcgdGhlCiAgICAgICAgd3JpdGVyIGZ1bmN0aW9uIGBvdXRgLiAgYGNvbXBpbGVmbGFnc2AgaXMgdGhlIHNldCBvZiBjb21waWxlcgogICAgICAgIGZsYWdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZXhlY3V0ZSBleGFtcGxlcy4gIFJldHVybiBhIHR1cGxlCiAgICAgICAgYChmLCB0KWAsIHdoZXJlIGB0YCBpcyB0aGUgbnVtYmVyIG9mIGV4YW1wbGVzIHRyaWVkLCBhbmQgYGZgCiAgICAgICAgaXMgdGhlIG51bWJlciBvZiBleGFtcGxlcyB0aGF0IGZhaWxlZC4gIFRoZSBleGFtcGxlcyBhcmUgcnVuCiAgICAgICAgaW4gdGhlIG5hbWVzcGFjZSBgdGVzdC5nbG9ic2AuCiAgICAgICAgaQAAAABpAwAAAGkBAAAAcxAAAAA8ZG9jdGVzdCAlc1slZF0+dAYAAABzaW5nbGVpAgAAAGn/////cxQAAAAoPzpbXjpdKlwuKT8oW146XSo6KXMPAAAAdW5rbm93biBvdXRjb21lTigoAAAAUhUBAABSEgEAAFIUAQAAdAwAAABjaGVja19vdXRwdXRS2wAAAFKqAAAAUgsAAABSoAAAAFL/AAAAUgUAAABSHQEAAFInAAAAUt8AAABSngAAAFIuAAAAdAgAAABkZWJ1Z2dlclKQAAAAUisAAAB0EQAAAEtleWJvYXJkSW50ZXJydXB0Uj0AAABSYgAAAFIaAQAAUmEAAABSbgAAAFJ5AAAAUl8AAAB0FQAAAGZvcm1hdF9leGNlcHRpb25fb25seVJnAAAAUqEAAABSBgAAAFJZAAAAUsoAAABSugAAAFIeAQAAUiEBAABSIgEAAFJ2AAAAUnQAAAB0HgAAAF9Eb2NUZXN0UnVubmVyX19yZWNvcmRfb3V0Y29tZVIjAAAAKBgAAABSawAAAFIFAQAAdAwAAABjb21waWxlZmxhZ3NSjAAAAFIYAQAAUhcBAABSFgEAAHQHAAAAU1VDQ0VTU3QHAAAARkFJTFVSRXQEAAAAQk9PTXQFAAAAY2hlY2t0CgAAAGV4YW1wbGVudW1SHAEAAHQFAAAAcXVpZXR0CgAAAG9wdGlvbmZsYWdSBwEAAFJOAAAAdAkAAABleGNlcHRpb25SegAAAHQHAAAAb3V0Y29tZVJiAAAAUqEAAAB0AgAAAG0xdAIAAABtMigAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQFAAAAX19ydW7PBAAAc4IAAAAACwoECQIVAgwDHAQNAQwDCQEJARwBBgESAhcDDQEGAwoBBgEWBRMFAwIPAREBDQEKAQ0BBgEDAQwBEQIPARABBgQMARgBDAQMARcBBgETBA8BCQMYAQkDDQEVARIBJwEMAQwDDAEGARwBDAEGARkBDQEMAQYBDwEKAQ0CHAMJAxMBYwQAAAAGAAAABAAAAEMAAABzXgAAAHwAAGoAAGoBAHwBAGoCAGQDAIMCAFwCAH0EAH0FAHwCAHwEABd8AwB8BQAXZgIAfAAAagAAfAEAagIAPHwAAARqAwB8AgA3Al8DAHwAAARqBAB8AwA3Al8EAGQCAFMoBAAAAHN7AAAACiAgICAgICAgUmVjb3JkIHRoZSBmYWN0IHRoYXQgdGhlIGdpdmVuIERvY1Rlc3QgKGB0ZXN0YCkgZ2VuZXJhdGVkIGBmYAogICAgICAgIGZhaWx1cmVzIG91dCBvZiBgdGAgdHJpZWQgZXhhbXBsZXMuCiAgICAgICAgaQAAAABOKAIAAABpAAAAAGkAAAAAKAUAAABSGQEAAFIqAAAAUicAAABSGAEAAFIXAQAAKAYAAABSawAAAFIFAQAAUlIAAAB0AQAAAHR0AgAAAGYydAIAAAB0MigAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQQAAAAX19yZWNvcmRfb3V0Y29tZUsFAABzCAAAAAAFHgEeAQ8Bcy4AAAA8ZG9jdGVzdCAoP1A8bmFtZT4uKylcWyg/UDxleGFtcGxlbnVtPlxkKylcXT4kYwMAAAAGAAAABQAAAEMAAABzoAAAAHwAAGoAAGoBAHwBAIMBAH0DAHwDAHKMAHwDAGoCAGQBAIMBAHwAAGoDAGoEAGsCAHKMAHwAAGoDAGoFAHQGAHwDAGoCAGQCAIMBAIMBABl9BAB8BABqBwB9BQB0CAB8BQB0CQCDAgByfwB8BQBqCgBkAwBkBACDAgB9BQBuAAB8BQBqCwB0DACDAQBTfAAAag0AfAEAfAIAgwIAU2QAAFMoBQAAAE5SJwAAAFIwAQAAdAUAAABhc2NpaVJVAAAAKA4AAAB0JQAAAF9Eb2NUZXN0UnVubmVyX19MSU5FQ0FDSEVfRklMRU5BTUVfUkVSygAAAFK6AAAAUgUBAABSJwAAAFKqAAAAdAMAAABpbnRSngAAAFI3AAAAUjkAAABSVwAAAHQKAAAAc3BsaXRsaW5lc1J4AAAAdBcAAABzYXZlX2xpbmVjYWNoZV9nZXRsaW5lcygGAAAAUmsAAABSTgAAAHQOAAAAbW9kdWxlX2dsb2JhbHNSwQAAAFIcAQAAUp4AAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHl0HAAAAF9fcGF0Y2hlZF9saW5lY2FjaGVfZ2V0bGluZXNYBQAAcxAAAAAAARIBIQEfAQkBDwEVAQ0CYwUAAAAIAAAABQAAAEMAAABzEQEAAHwBAHwAAF8AAHwCAGQBAGsIAHInAHQCAHwBAGoDAIMBAH0CAG4AAHQEAGoFAH0FAHwDAGQBAGsIAHJIAHwFAGoGAH0DAG4AAHwAAGoHAHQEAF8FAHQIAGoJAH0GAHQKAHwFAIMBAHwAAF8LAHwAAGoLAGoMAIMAAAF8AABqCwBqCQB0CABfCQB0DQBqDgB8AABfDwB8AABqEAB0DQBfDgB0BABqEQB9BwB0BABqEgB0BABfEQB6FwB8AABqEwB8AQB8AgB8AwCDAwBTV2QBAHwFAHQEAF8FAHwGAHQIAF8JAHwAAGoPAHQNAF8OAHwHAHQEAF8RAHwEAHIMAXwBAGoDAGoUAIMAAAFuAABYZAEAUygCAAAAc0oDAAAKICAgICAgICBSdW4gdGhlIGV4YW1wbGVzIGluIGB0ZXN0YCwgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgdXNpbmcgdGhlCiAgICAgICAgd3JpdGVyIGZ1bmN0aW9uIGBvdXRgLgoKICAgICAgICBUaGUgZXhhbXBsZXMgYXJlIHJ1biBpbiB0aGUgbmFtZXNwYWNlIGB0ZXN0Lmdsb2JzYC4gIElmCiAgICAgICAgYGNsZWFyX2dsb2JzYCBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZW4gdGhpcyBuYW1lc3BhY2Ugd2lsbAogICAgICAgIGJlIGNsZWFyZWQgYWZ0ZXIgdGhlIHRlc3QgcnVucywgdG8gaGVscCB3aXRoIGdhcmJhZ2UKICAgICAgICBjb2xsZWN0aW9uLiAgSWYgeW91IHdvdWxkIGxpa2UgdG8gZXhhbWluZSB0aGUgbmFtZXNwYWNlIGFmdGVyCiAgICAgICAgdGhlIHRlc3QgY29tcGxldGVzLCB0aGVuIHVzZSBgY2xlYXJfZ2xvYnM9RmFsc2VgLgoKICAgICAgICBgY29tcGlsZWZsYWdzYCBnaXZlcyB0aGUgc2V0IG9mIGZsYWdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkKICAgICAgICB0aGUgUHl0aG9uIGNvbXBpbGVyIHdoZW4gcnVubmluZyB0aGUgZXhhbXBsZXMuICBJZiBub3QKICAgICAgICBzcGVjaWZpZWQsIHRoZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBzZXQgb2YgZnV0dXJlLWltcG9ydAogICAgICAgIGZsYWdzIHRoYXQgYXBwbHkgdG8gYGdsb2JzYC4KCiAgICAgICAgVGhlIG91dHB1dCBvZiBlYWNoIGV4YW1wbGUgaXMgY2hlY2tlZCB1c2luZwogICAgICAgIGBEb2NUZXN0UnVubmVyLmNoZWNrX291dHB1dGAsIGFuZCB0aGUgcmVzdWx0cyBhcmUgZm9ybWF0dGVkIGJ5CiAgICAgICAgdGhlIGBEb2NUZXN0UnVubmVyLnJlcG9ydF8qYCBtZXRob2RzLgogICAgICAgIE4oFQAAAFIFAQAAUisAAABSMgAAAFIuAAAAUj0AAABShQAAAHQFAAAAd3JpdGVSGgEAAFKIAAAAUo4AAABShAAAAFInAQAAdAUAAAByZXNldFLuAAAAUu8AAABSQAEAAHQqAAAAX0RvY1Rlc3RSdW5uZXJfX3BhdGNoZWRfbGluZWNhY2hlX2dldGxpbmVzdAsAAABkaXNwbGF5aG9va3QPAAAAX19kaXNwbGF5aG9va19fdBMAAABfRG9jVGVzdFJ1bm5lcl9fcnVudAUAAABjbGVhcigIAAAAUmsAAABSBQEAAFIrAQAAUowAAAB0CwAAAGNsZWFyX2dsb2JzUpMAAAB0DgAAAHNhdmVfc2V0X3RyYWNldBAAAABzYXZlX2Rpc3BsYXlob29rKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5dAMAAABydW5jBQAAcy4AAAAAFAkCDAESAgkBDAEMAQwHCQEPAQ0BDwQMAQwDCQEMAgMBFwIJAQkBDAEJAQYBYwIAAAANAAAABQAAAEMAAABzIAIAAHwBAGQPAGsIAHIYAHwAAGoBAH0BAG4AAGcAAH0CAGcAAH0DAGcAAH0EAGQBAAR9BQB9BgB4mgB8AABqAgBqAwCDAABEXYkAfQcAfAcAXAIAfQgAXAIAfQkAfQoAfAkAfAoAawEAc24AdAQAggEAfAUAfAoAN30FAHwGAHwJADd9BgB8CgBkAQBrAgByngB8AgBqBQB8CACDAQABcUQAfAkAZAEAawIAcsAAfAMAagUAfAgAfAoAZgIAgwEAAXFEAHwEAGoFAHwHAIMBAAFxRABXfAEAcl4BfAIAchMBdAYAfAIAgwEAR2QCAEdIfAIAagcAgwAAAXgaAHwCAERdDwB9CwBkAwBHfAsAR0hx/QBXbgAAfAMAcl4BdAYAfAMAgwEAR2QEAEdIfAMAagcAgwAAAXgmAHwDAERdGwBcAgB9CwB9DABkBQB8DAB8CwBmAgAWR0hxOQFXcV4BbgAAfAQAcrcBfAAAaggAR0h0BgB8BACDAQBHZAYAR0h8BABqBwCDAAABeC8AfAQARF0kAFwCAH0LAFwCAH0JAH0KAGQHAHwJAHwKAHwLAGYDABZHSHGMAVduAAB8AQBy7wF8BQBHZAgAR3QGAHwAAGoCAIMBAEdkCQBHSHwFAHwGABhHZAoAR3wGAEdkCwBHSG4AAHwGAHIFAmQMAEd8BgBHZA0AR0huDgB8AQByEwJkDgBHSG4AAHQJAHwGAHwFAIMCAFMoEAAAAHOmAQAACiAgICAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgdGVzdCBjYXNlcyB0aGF0IGhhdmUgYmVlbiBydW4gYnkKICAgICAgICB0aGlzIERvY1Rlc3RSdW5uZXIsIGFuZCByZXR1cm4gYSB0dXBsZSBgKGYsIHQpYCwgd2hlcmUgYGZgIGlzCiAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBmYWlsZWQgZXhhbXBsZXMsIGFuZCBgdGAgaXMgdGhlIHRvdGFsCiAgICAgICAgbnVtYmVyIG9mIHRyaWVkIGV4YW1wbGVzLgoKICAgICAgICBUaGUgb3B0aW9uYWwgYHZlcmJvc2VgIGFyZ3VtZW50IGNvbnRyb2xzIGhvdyBkZXRhaWxlZCB0aGUKICAgICAgICBzdW1tYXJ5IGlzLiAgSWYgdGhlIHZlcmJvc2l0eSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZQogICAgICAgIERvY1Rlc3RSdW5uZXIncyB2ZXJib3NpdHkgaXMgdXNlZC4KICAgICAgICBpAAAAAHMTAAAAaXRlbXMgaGFkIG5vIHRlc3RzOnMDAAAAICAgcxcAAABpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOnMQAAAAICUzZCB0ZXN0cyBpbiAlc3MTAAAAaXRlbXMgaGFkIGZhaWx1cmVzOnMRAAAAICUzZCBvZiAlM2QgaW4gJXNzCAAAAHRlc3RzIGlucwYAAABpdGVtcy5zCgAAAHBhc3NlZCBhbmRzBwAAAGZhaWxlZC5zEQAAACoqKlRlc3QgRmFpbGVkKioqcwkAAABmYWlsdXJlcy5zDAAAAFRlc3QgcGFzc2VkLk4oCgAAAFIrAAAAUuQAAABSGQEAAFL/AAAAUnQAAABStQAAAFImAAAAUvMAAABSJAEAAFIjAAAAKA0AAABSawAAAFLnAAAAdAcAAABub3Rlc3RzdAYAAABwYXNzZWR0BgAAAGZhaWxlZHQGAAAAdG90YWx0dAYAAAB0b3RhbGZSxQAAAFInAAAAUlIAAABSOAEAAHQFAAAAdGhpbmdStwAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQJAAAAc3VtbWFyaXploQUAAHNSAAAAAAsMAQwBBgEGAQYBCgEWARIBEgEKAQoBDAEQAQwBFgIRAQYBBgEPAQoBDQEQAQYBDwEKARMBGQEGAQgBDwEKARkBGQEGARoBGAEGARABBgEIAWMCAAAACAAAAAQAAABDAAAAc3YAAAB8AABqAAB9AgB4ZgB8AQBqAABqAQCDAABEXVUAXAIAfQMAXAIAfQQAfQUAfAMAfAIAawYAcl4AfAIAfAMAGVwCAH0GAH0HAHwEAHwGABd9BAB8BQB8BwAXfQUAbgAAfAQAfAUAZgIAfAIAfAMAPHEZAFdkAABTKAEAAABOKAIAAABSGQEAAFL/AAAAKAgAAABSawAAAFKkAAAAdAEAAABkUicAAABSUgAAAFI4AQAAUjkBAABSOgEAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQFAAAAbWVyZ2XaBQAAcw4AAAAAAQkBIgEMBRABCgENAU4oFQAAAFI0AAAAUnEAAABSlAAAAFIkAQAAUisAAABSigAAAFIdAQAAUh4BAABSIQEAAFIiAQAAUh8BAABSSAEAAFIqAQAAUlkAAABS3wAAAFI9AQAAUkUBAABSeAAAAFJNAQAAUlQBAABSVgEAACgAAAAAKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhEAAAA4BAAAcx4AAAAGNwYDCgISJAkNCQgJBwkHCRQJfAkKDwMMCxI+DDljAAAAAAAAAAABAAAAQgAAAHMpAAAAZQAAWgEAZAAAWgIAZAEAhAAAWgMAZAIAhAAAWgQAZAMAhAAAWgUAUlMoBAAAAHNfAQAACiAgICBBIGNsYXNzIHVzZWQgdG8gY2hlY2sgdGhlIHdoZXRoZXIgdGhlIGFjdHVhbCBvdXRwdXQgZnJvbSBhIGRvY3Rlc3QKICAgIGV4YW1wbGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgb3V0cHV0LiAgYE91dHB1dENoZWNrZXJgIGRlZmluZXMgdHdvCiAgICBtZXRob2RzOiBgY2hlY2tfb3V0cHV0YCwgd2hpY2ggY29tcGFyZXMgYSBnaXZlbiBwYWlyIG9mIG91dHB1dHMsCiAgICBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZXkgbWF0Y2g7IGFuZCBgb3V0cHV0X2RpZmZlcmVuY2VgLCB3aGljaAogICAgcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBvdXRwdXRzLgogICAgYwQAAAAEAAAABAAAAEMAAABzCAEAAHwCAHwBAGsCAHIQAHQAAFN8AwB0AQBAc0kAfAIAfAEAZgIAZAkAawIAcjAAdAAAU3wCAHwBAGYCAGQKAGsCAHJJAHQAAFNuAAB8AwB0AgBAc50AdAMAagQAZAUAdAMAagUAdAYAgwEAFmQGAHwBAIMDAH0BAHQDAGoEAGQHAGQGAHwCAIMDAH0CAHwCAHwBAGsCAHKdAHQAAFNuAAB8AwB0BwBAcuQAZAgAaggAfAIAagkAgwAAgwEAfQIAZAgAaggAfAEAagkAgwAAgwEAfQEAfAIAfAEAawIAcuQAdAAAU24AAHwDAHQKAEByBAF0CwB8AQB8AgCDAgByBAF0AABTbgAAdAwAUygLAAAAc6UBAAAKICAgICAgICBSZXR1cm4gVHJ1ZSBpZmYgdGhlIGFjdHVhbCBvdXRwdXQgZnJvbSBhbiBleGFtcGxlIChgZ290YCkKICAgICAgICBtYXRjaGVzIHRoZSBleHBlY3RlZCBvdXRwdXQgKGB3YW50YCkuICBUaGVzZSBzdHJpbmdzIGFyZQogICAgICAgIGFsd2F5cyBjb25zaWRlcmVkIHRvIG1hdGNoIGlmIHRoZXkgYXJlIGlkZW50aWNhbDsgYnV0CiAgICAgICAgZGVwZW5kaW5nIG9uIHdoYXQgb3B0aW9uIGZsYWdzIHRoZSB0ZXN0IHJ1bm5lciBpcyB1c2luZywKICAgICAgICBzZXZlcmFsIG5vbi1leGFjdCBtYXRjaCB0eXBlcyBhcmUgYWxzbyBwb3NzaWJsZS4gIFNlZSB0aGUKICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBgVGVzdFJ1bm5lcmAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgICBvcHRpb24gZmxhZ3MuCiAgICAgICAgcwUAAABUcnVlCnMCAAAAMQpzBgAAAEZhbHNlCnMCAAAAMApzDAAAACg/bSleJXNccyo/JFJtAAAAcwoAAAAoP20pXlxzKj8kUlYAAAAoAgAAAHMFAAAAVHJ1ZQpzAgAAADEKKAIAAABzBgAAAEZhbHNlCnMCAAAAMAooDQAAAFJ4AAAAUgEAAABSAgAAAFJZAAAAUloAAAB0BgAAAGVzY2FwZXQQAAAAQkxBTktMSU5FX01BUktFUlIDAAAAUpwAAABScwAAAFIEAAAAUn8AAABSdgAAACgEAAAAUmsAAABSeQAAAFJ6AAAAUhUBAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSJgEAAO8FAABzLAAAAAAMDAEEBAoBEgEEARIBBwQKAhYBDAMVAQwBBwUKARUBFQEMAQcECgEPAQcDYwQAAAAEAAAAAwAAAEMAAABzTAAAAHwDAHQAAHQBAEJ0AgBCQHMWAHQDAFN8AwB0AgBAciQAdAQAU3wBAGoFAGQBAIMBAGQCAGsEAG9LAHwCAGoFAGQBAIMBAGQCAGsEAFMoAwAAAE5zAQAAAAppAgAAACgGAAAAUggAAABSCQAAAFIKAAAAUnYAAABSeAAAAFK3AAAAKAQAAABSawAAAFJ5AAAAUnoAAABSFQEAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQQAAAAX2RvX2FfZmFuY3lfZGlmZiUGAABzDgAAAAACAwEHAQgBBAwKAQQDYwQAAAALAAAABQAAAEMAAABzugEAAHwBAGoAAH0EAHwDAHQBAEBzKwB0AgBqAwBkAQB0BAB8AgCDAwB9AgBuAAB8AABqBQB8BAB8AgB8AwCDAwByZAF8BABqBgB0BwCDAQB9BQB8AgBqBgB0BwCDAQB9BgB8AwB0CABAcpkAdAkAagoAfAUAfAYAZAIAZAMAgwIBfQcAdAsAfAcAgwEAZAMAH30HAGQEAH0IAG6NAHwDAHQMAEBy1AB0CQBqDQB8BQB8BgBkAgBkAwCDAgF9BwB0CwB8BwCDAQBkAwAffQcAZAUAfQgAblIAfAMAdA4AQHIUAXQJAGoPAGQGAHQJAGoQAIMAAX0JAHQLAHwJAGoRAHwFAHwGAIMCAIMBAH0HAGQHAH0IAG4SAGQIAHMmAXQSAGQJAIMBAIIBAGcAAHwHAERdFgB9CgB8CgBqEwCDAABkCgAXXgIAcS0BfQcAZAsAfAgAFnQUAGQMAGoVAHwHAIMBAIMBABdTfAQAcooBfAIAcooBZA0AdBQAfAQAgwEAdBQAfAIAgwEAZgIAFlN8BAByngFkDgB0FAB8BACDAQAWU3wCAHKyAWQPAHQUAHwCAIMBABZTZBAAU2QRAFMoEgAAAHP7AAAACiAgICAgICAgUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCiAgICAgICAgZXhwZWN0ZWQgb3V0cHV0IGZvciBhIGdpdmVuIGV4YW1wbGUgKGBleGFtcGxlYCkgYW5kIHRoZSBhY3R1YWwKICAgICAgICBvdXRwdXQgKGBnb3RgKS4gIGBvcHRpb25mbGFnc2AgaXMgdGhlIHNldCBvZiBvcHRpb24gZmxhZ3MgdXNlZAogICAgICAgIHRvIGNvbXBhcmUgYHdhbnRgIGFuZCBgZ290YC4KICAgICAgICBzDgAAACg/bSleWyBdKig/PQopdAEAAABuaQIAAABzIwAAAHVuaWZpZWQgZGlmZiB3aXRoIC1leHBlY3RlZCArYWN0dWFscy0AAABjb250ZXh0IGRpZmYgd2l0aCBleHBlY3RlZCBmb2xsb3dlZCBieSBhY3R1YWx0CAAAAGNoYXJqdW5rcxwAAABuZGlmZiB3aXRoIC1leHBlY3RlZCArYWN0dWFsaQAAAABzDwAAAEJhZCBkaWZmIG9wdGlvbnMBAAAACnMSAAAARGlmZmVyZW5jZXMgKCVzKToKUm0AAABzEwAAAEV4cGVjdGVkOgolc0dvdDoKJXNzGAAAAEV4cGVjdGVkOgolc0dvdCBub3RoaW5nCnMYAAAARXhwZWN0ZWQgbm90aGluZwpHb3Q6CiVzcx0AAABFeHBlY3RlZCBub3RoaW5nCkdvdCBub3RoaW5nCk4oFgAAAFJ5AAAAUgIAAABSWQAAAFJaAAAAUlgBAABSWQEAAFI/AQAAUngAAABSCAAAAHQHAAAAZGlmZmxpYnQMAAAAdW5pZmllZF9kaWZmdAQAAABsaXN0UgkAAAB0DAAAAGNvbnRleHRfZGlmZlIKAAAAdAYAAABEaWZmZXJ0EQAAAElTX0NIQVJBQ1RFUl9KVU5LdAcAAABjb21wYXJlUnQAAABSgQAAAFJdAAAAUpwAAAAoCwAAAFJrAAAAUhwBAABSegAAAFIVAQAAUnkAAABSzwAAAHQJAAAAZ290X2xpbmVzdAQAAABkaWZmdAQAAABraW5kdAYAAABlbmdpbmVSggAAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIgAQAAPAYA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IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgLi4uCiAgICAgICAgIEtleUVycm9yCgogICAgICAgV2Ugd3JhcCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIHRvIGdpdmUgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24KICAgICAgIGFjY2VzcyB0byB0aGUgdGVzdCBhbmQgZXhhbXBsZSBpbmZvcm1hdGlvbi4KCiAgICAgICBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2gsIHRoZW4gYSBEb2NUZXN0RmFpbHVyZSBpcyByYWlzZWQ6CgogICAgICAgICA+Pj4gdGVzdCA9IERvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdCgnJycKICAgICAgICAgLi4uICAgICAgPj4+IHggPSAxCiAgICAgICAgIC4uLiAgICAgID4+PiB4CiAgICAgICAgIC4uLiAgICAgIDIKICAgICAgICAgLi4uICAgICAgJycnLCB7fSwgJ2ZvbycsICdmb28ucHknLCAwKQoKICAgICAgICAgPj4+IHRyeToKICAgICAgICAgLi4uICAgIHJ1bm5lci5ydW4odGVzdCkKICAgICAgICAgLi4uIGV4Y2VwdCBEb2NUZXN0RmFpbHVyZSwgZmFpbHVyZToKICAgICAgICAgLi4uICAgIHBhc3MKCiAgICAgICBEb2NUZXN0RmFpbHVyZSBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSB0ZXN0OgoKICAgICAgICAgPj4+IGZhaWx1cmUudGVzdCBpcyB0ZXN0CiAgICAgICAgIFRydWUKCiAgICAgICBBcyB3ZWxsIGFzIHRvIHRoZSBleGFtcGxlOgoKICAgICAgICAgPj4+IGZhaWx1cmUuZXhhbXBsZS53YW50CiAgICAgICAgICcyXG4nCgogICAgICAgYW5kIHRoZSBhY3R1YWwgb3V0cHV0OgoKICAgICAgICAgPj4+IGZhaWx1cmUuZ290CiAgICAgICAgICcxXG4nCgogICAgICAgSWYgYSBmYWlsdXJlIG9yIGVycm9yIG9jY3VycywgdGhlIGdsb2JhbHMgYXJlIGxlZnQgaW50YWN0OgoKICAgICAgICAgPj4+IGRlbCB0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AHwJAGoLAHwAAHwBAGQGAHwCAGQHAHwGAIMCAkRdEwB9CwB8CgBqDAB8CwCDAQABcb8AV3wEAHLpAHwKAGoNAIMAAAFuAAB0DgBkCABrCABy/gB8CgBhDgBuDQB0DgBqDwB8CgCDAQABdBAAfAoAahEAfAoAahIAgwIAUygJAAAAcyoKAABtPU5vbmUsIG5hbWU9Tm9uZSwgZ2xvYnM9Tm9uZSwgdmVyYm9zZT1Ob25lLCByZXBvcnQ9VHJ1ZSwKICAgICAgIG9wdGlvbmZsYWdzPTAsIGV4dHJhZ2xvYnM9Tm9uZSwgcmFpc2Vfb25fZXJyb3I9RmFsc2UsCiAgICAgICBleGNsdWRlX2VtcHR5PUZhbHNlCgogICAgVGVzdCBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIGluIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyByZWFjaGFibGUKICAgIGZyb20gbW9kdWxlIG0gKG9yIHRoZSBjdXJyZW50IG1vZHVsZSBpZiBtIGlzIG5vdCBzdXBwbGllZCksIHN0YXJ0aW5nCiAgICB3aXRoIG0uX19kb2NfXy4KCiAgICBBbHNvIHRlc3QgZXhhbXBsZXMgcmVhY2hhYmxlIGZyb20gZGljdCBtLl9fdGVzdF9fIGlmIGl0IGV4aXN0cyBhbmQgaXMKICAgIG5vdCBOb25lLiAgbS5fX3Rlc3RfXyBtYXBzIG5hbWVzIHRvIGZ1bmN0aW9ucywgY2xhc3NlcyBhbmQgc3RyaW5nczsKICAgIGZ1bmN0aW9uIGFuZCBjbGFzcyBkb2NzdHJpbmdzIGFyZSB0ZXN0ZWQgZXZlbiBpZiB0aGUgbmFtZSBpcyBwcml2YXRlOwogICAgc3RyaW5ncyBhcmUgdGVzdGVkIGRpcmVjdGx5LCBhcyBpZiB0aGV5IHdlcmUgZG9jc3RyaW5ncy4KCiAgICBSZXR1cm4gKCNmYWlsdXJlcywgI3Rlc3RzKS4KCiAgICBTZWUgaGVscChkb2N0ZXN0KSBmb3IgYW4gb3ZlcnZpZXcuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm5hbWUiIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGU7IGJ5IGRlZmF1bHQKICAgIHVzZSBtLl9fbmFtZV9fLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJnbG9icyIgZ2l2ZXMgYSBkaWN0IHRvIGJlIHVzZWQgYXMgdGhlIGdsb2JhbHMKICAgIHdoZW4gZXhlY3V0aW5nIGV4YW1wbGVzOyBieSBkZWZhdWx0LCB1c2UgbS5fX2RpY3RfXy4gIEEgY29weSBvZiB0aGlzCiAgICBkaWN0IGlzIGFjdHVhbGx5IHVzZWQgZm9yIGVhY2ggZG9jc3RyaW5nLCBzbyB0aGF0IGVhY2ggZG9jc3RyaW5nJ3MKICAgIGV4YW1wbGVzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZXh0cmFnbG9icyIgZ2l2ZXMgYSBkaWN0aW9uYXJ5IHRoYXQgc2hvdWxkIGJlCiAgICBtZXJnZWQgaW50byB0aGUgZ2xvYmFscyB0aGF0IGFyZSB1c2VkIHRvIGV4ZWN1dGUgZXhhbXBsZXMuICBCeQogICAgZGVmYXVsdCwgbm8gZXh0cmEgZ2xvYmFscyBhcmUgdXNlZC4gIFRoaXMgaXMgbmV3IGluIDIuNC4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAidmVyYm9zZSIgcHJpbnRzIGxvdHMgb2Ygc3R1ZmYgaWYgdHJ1ZSwgcHJpbnRzCiAgICBvbmx5IGZhaWx1cmVzIGlmIGZhbHNlOyBieSBkZWZhdWx0LCBpdCdzIHRydWUgaWZmICItdiIgaXMgaW4gc3lzLmFyZ3YuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJlcG9ydCIgcHJpbnRzIGEgc3VtbWFyeSBhdCB0aGUgZW5kIHdoZW4gdHJ1ZSwKICAgIGVsc2UgcHJpbnRzIG5vdGhpbmcgYXQgdGhlIGVuZC4gIEluIHZlcmJvc2UgbW9kZSwgdGhlIHN1bW1hcnkgaXMKICAgIGRldGFpbGVkLCBlbHNlIHZlcnkgYnJpZWYgKGluIGZhY3QsIGVtcHR5IGlmIGFsbCB0ZXN0cyBwYXNzZWQpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJvcHRpb25mbGFncyIgb3IncyB0b2dldGhlciBtb2R1bGUgY29uc3RhbnRzLAogICAgYW5kIGRlZmF1bHRzIHRvIDAuICBUaGlzIGlzIG5ldyBpbiAyLjMuICBQb3NzaWJsZSB2YWx1ZXMgKHNlZSB0aGUKICAgIGRvY3MgZm9yIGRldGFpbHMpOgoKICAgICAgICBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xCiAgICAgICAgRE9OVF9BQ0NFUFRfQkxBTktMSU5FCiAgICAgICAgTk9STUFMSVpFX1dISVRFU1BBQ0UKICAgICAgICBFTExJUFNJUwogICAgICAgIFNLSVAKICAgICAgICBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAogICAgICAgIFJFUE9SVF9VRElGRgogICAgICAgIFJFUE9SVF9DRElGRgogICAgICAgIFJFUE9SVF9ORElGRgogICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicmFpc2Vfb25fZXJyb3IiIHJhaXNlcyBhbiBleGNlcHRpb24gb24gdGhlCiAgICBmaXJzdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBvciBmYWlsdXJlLiBUaGlzIGFsbG93cyBmYWlsdXJlcyB0byBiZQogICAgcG9zdC1tb3J0ZW0gZGVidWdnZWQuCgogICAgQWR2YW5jZWQgdG9tZm9vbGVyeTogIHRlc3Rtb2QgcnVucyBtZXRob2RzIG9mIGEgbG9jYWwgaW5zdGFuY2Ugb2YKICAgIGNsYXNzIGRvY3Rlc3QuVGVzdGVyLCB0aGVuIG1lcmdlcyB0aGUgcmVzdWx0cyBpbnRvIChvciBjcmVhdGVzKQogICAgZ2xvYmFsIFRlc3RlciBpbnN0YW5jZSBkb2N0ZXN0Lm1hc3Rlci4gIE1ldGhvZHMgb2YgZG9jdGVzdC5tYXN0ZXIKICAgIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgdG9vLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgdW51c3VhbC4KICAgIFBhc3NpbmcgcmVwb3J0PTAgdG8gdGVzdG1vZCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0aGVuLCB0byBkZWxheQogICAgZGlzcGxheWluZyBhIHN1bW1hcnkuICBJbnZva2UgZG9jdGVzdC5tYXN0ZXIuc3VtbWFyaXplKHZlcmJvc2UpCiAgICB3aGVuIHlvdSdyZSBkb25lIGZpZGRsaW5nLgogICAgUpcAAABzHAAAAHRlc3Rtb2Q6IG1vZHVsZSByZXF1aXJlZDsgJXJS6gAAAFLnAAAAUhUBAABSLgAAAFL1AAAATigTAAAAUisAAABSPQAAAFI+AAAAUioAAABSNQAAAFI2AAAAUkEAAABSNAAAAFIQAAAAUhUAAABSEQAAAFJ3AAAAUk0BAABSVAEAAHQGAAAAbWFzdGVyUlYBAABSIwAAAFIYAQAAUhcBAAAoDAAAAFLBAAAAUicAAABSLgAAAFLnAAAAdAYAAAByZXBvcnRSFQEAAFL1AAAAdA4AAAByYWlzZV9vbl9lcnJvclLqAAAAdAYAAABmaW5kZXJ0BgAAAHJ1bm5lclIFAQAAKAAAAAAoAAAAAHNOAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhYAAAACBwAAcyQAAAAARQwEFQMPARYDDAEMAw8CBgEYAhUCJQERAgYBDQIMAQkCDQJjDAAAAA8AAAAHAAAAQwAAAHNsAQAAfAMAchwAfAEADHIcAHQAAGQBAIMBAIIBAG4AAHQBAHwAAHwDAHwBAIMDAFwCAH0MAH0AAHwCAGQHAGsIAHJVAHQDAGoEAGoFAHwAAIMBAH0CAG4AAHwEAGQHAGsIAHJqAGkAAH0EAG4MAHwEAGoGAIMAAH0EAHwIAGQHAGsJAHKSAHwEAGoHAHwIAIMBAAFuAABkAgB8BABrBwByqwBkAwB8BABkAgA8bgAAfAkAcskAdAgAZAQAfAUAZAUAfAcAgwACfQ0AbhUAdAkAZAQAfAUAZAUAfAcAgwACfQ0AfAsAZAcAawkAcvwAfAwAagoAfAsAgwEAfQwAbgAAfAoAagsAfAwAfAQAfAIAfAAAZAYAgwUAfQ4AfA0AagwAfA4AgwEAAXwGAHI3AXwNAGoNAIMAAAFuAAB0DgBkBwBrCAByTAF8DQBhDgBuDQB0DgBqDwB8DQCDAQABdBAAfA0AahEAfA0AahIAgwIAUygIAAAAcw0NAAAKICAgIFRlc3QgZXhhbXBsZXMgaW4gdGhlIGdpdmVuIGZpbGUuICBSZXR1cm4gKCNmYWlsdXJlcywgI3Rlc3RzKS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAibW9kdWxlX3JlbGF0aXZlIiBzcGVjaWZpZXMgaG93IGZpbGVuYW1lcwogICAgc2hvdWxkIGJlIGludGVycHJldGVkOgoKICAgICAgLSBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBUcnVlICh0aGUgZGVmYXVsdCksIHRoZW4gImZpbGVuYW1lIgogICAgICAgICBzcGVjaWZpZXMgYSBtb2R1bGUtcmVsYXRpdmUgcGF0aC4gIEJ5IGRlZmF1bHQsIHRoaXMgcGF0aCBpcwogICAgICAgICByZWxhdGl2ZSB0byB0aGUgY2FsbGluZyBtb2R1bGUncyBkaXJlY3Rvcnk7IGJ1dCBpZiB0aGUKICAgICAgICAgInBhY2thZ2UiIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgdGhlbiBpdCBpcyByZWxhdGl2ZSB0byB0aGF0CiAgICAgICAgIHBhY2thZ2UuICBUbyBlbnN1cmUgb3MtaW5kZXBlbmRlbmNlLCAiZmlsZW5hbWUiIHNob3VsZCB1c2UKICAgICAgICAgIi8iIGNoYXJhY3RlcnMgdG8gc2VwYXJhdGUgcGF0aCBzZWdtZW50cywgYW5kIHNob3VsZCBub3QKICAgICAgICAgYmUgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLiwgaXQgbWF5IG5vdCBiZWdpbiB3aXRoICIvIikuCgogICAgICAtIElmICJtb2R1bGVfcmVsYXRpdmUiIGlzIEZhbHNlLCB0aGVuICJmaWxlbmFtZSIgc3BlY2lmaWVzIGFuCiAgICAgICAgb3Mtc3BlY2lmaWMgcGF0aC4gIFRoZSBwYXRoIG1heSBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSAodG8KICAgICAgICB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm5hbWUiIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSB0ZXN0OyBieSBkZWZhdWx0CiAgICB1c2UgdGhlIGZpbGUncyBiYXNlbmFtZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50ICJwYWNrYWdlIiBpcyBhIFB5dGhvbiBwYWNrYWdlIG9yIHRoZQogICAgbmFtZSBvZiBhIFB5dGhvbiBwYWNrYWdlIHdob3NlIGRpcmVjdG9yeSBzaG91bGQgYmUgdXNlZCBhcyB0aGUKICAgIGJhc2UgZGlyZWN0b3J5IGZvciBhIG1vZHVsZSByZWxhdGl2ZSBmaWxlbmFtZS4gIElmIG5vIHBhY2thZ2UgaXMKICAgIHNwZWNpZmllZCwgdGhlbiB0aGUgY2FsbGluZyBtb2R1bGUncyBkaXJlY3RvcnkgaXMgdXNlZCBhcyB0aGUgYmFzZQogICAgZGlyZWN0b3J5IGZvciBtb2R1bGUgcmVsYXRpdmUgZmlsZW5hbWVzLiAgSXQgaXMgYW4gZXJyb3IgdG8KICAgIHNwZWNpZnkgInBhY2thZ2UiIGlmICJtb2R1bGVfcmVsYXRpdmUiIGlzIEZhbHNlLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJnbG9icyIgZ2l2ZXMgYSBkaWN0IHRvIGJlIHVzZWQgYXMgdGhlIGdsb2JhbHMKICAgIHdoZW4gZXhlY3V0aW5nIGV4YW1wbGVzOyBieSBkZWZhdWx0LCB1c2Uge30uICBBIGNvcHkgb2YgdGhpcyBkaWN0CiAgICBpcyBhY3R1YWxseSB1c2VkIGZvciBlYWNoIGRvY3N0cmluZywgc28gdGhhdCBlYWNoIGRvY3N0cmluZydzCiAgICBleGFtcGxlcyBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgImV4dHJhZ2xvYnMiIGdpdmVzIGEgZGljdGlvbmFyeSB0aGF0IHNob3VsZCBiZQogICAgbWVyZ2VkIGludG8gdGhlIGdsb2JhbHMgdGhhdCBhcmUgdXNlZCB0byBleGVjdXRlIGV4YW1wbGVzLiAgQnkKICAgIGRlZmF1bHQsIG5vIGV4dHJhIGdsb2JhbHMgYXJlIHVzZWQuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInZlcmJvc2UiIHByaW50cyBsb3RzIG9mIHN0dWZmIGlmIHRydWUsIHByaW50cwogICAgb25seSBmYWlsdXJlcyBpZiBmYWxzZTsgYnkgZGVmYXVsdCwgaXQncyB0cnVlIGlmZiAiLXYiIGlzIGluIHN5cy5hcmd2LgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJyZXBvcnQiIHByaW50cyBhIHN1bW1hcnkgYXQgdGhlIGVuZCB3aGVuIHRydWUsCiAgICBlbHNlIHByaW50cyBub3RoaW5nIGF0IHRoZSBlbmQuICBJbiB2ZXJib3NlIG1vZGUsIHRoZSBzdW1tYXJ5IGlzCiAgICBkZXRhaWxlZCwgZWxzZSB2ZXJ5IGJyaWVmIChpbiBmYWN0LCBlbXB0eSBpZiBhbGwgdGVzdHMgcGFzc2VkKS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAib3B0aW9uZmxhZ3MiIG9yJ3MgdG9nZXRoZXIgbW9kdWxlIGNvbnN0YW50cywKICAgIGFuZCBkZWZhdWx0cyB0byAwLiAgUG9zc2libGUgdmFsdWVzIChzZWUgdGhlIGRvY3MgZm9yIGRldGFpbHMpOgoKICAgICAgICBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xCiAgICAgICAgRE9OVF9BQ0NFUFRfQkxBTktMSU5FCiAgICAgICAgTk9STUFMSVpFX1dISVRFU1BBQ0UKICAgICAgICBFTExJUFNJUwogICAgICAgIFNLSVAKICAgICAgICBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAogICAgICAgIFJFUE9SVF9VRElGRgogICAgICAgIFJFUE9SVF9DRElGRgogICAgICAgIFJFUE9SVF9ORElGRgogICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicmFpc2Vfb25fZXJyb3IiIHJhaXNlcyBhbiBleGNlcHRpb24gb24gdGhlCiAgICBmaXJzdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBvciBmYWlsdXJlLiBUaGlzIGFsbG93cyBmYWlsdXJlcyB0byBiZQogICAgcG9zdC1tb3J0ZW0gZGVidWdnZWQuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInBhcnNlciIgc3BlY2lmaWVzIGEgRG9jVGVzdFBhcnNlciAob3IKICAgIHN1YmNsYXNzKSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGV4dHJhY3QgdGVzdHMgZnJvbSB0aGUgZmlsZXMuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgImVuY29kaW5nIiBzcGVjaWZpZXMgYW4gZW5jb2RpbmcgdGhhdCBzaG91bGQKICAgIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZSB0byB1bmljb2RlLgoKICAgIEFkdmFuY2VkIHRvbWZvb2xlcnk6ICB0ZXN0bW9kIHJ1bnMgbWV0aG9kcyBvZiBhIGxvY2FsIGluc3RhbmNlIG9mCiAgICBjbGFzcyBkb2N0ZXN0LlRlc3RlciwgdGhlbiBtZXJnZXMgdGhlIHJlc3VsdHMgaW50byAob3IgY3JlYXRlcykKICAgIGdsb2JhbCBUZXN0ZXIgaW5zdGFuY2UgZG9jdGVzdC5tYXN0ZXIuICBNZXRob2RzIG9mIGRvY3Rlc3QubWFzdGVyCiAgICBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHRvbywgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHVudXN1YWwuCiAgICBQYXNzaW5nIHJlcG9ydD0wIHRvIHRlc3Rtb2QgaXMgZXNwZWNpYWxseSB1c2VmdWwgdGhlbiwgdG8gZGVsYXkKICAgIGRpc3BsYXlpbmcgYSBzdW1tYXJ5LiAgSW52b2tlIGRvY3Rlc3QubWFzdGVyLnN1bW1hcml6ZSh2ZXJib3NlKQogICAgd2hlbiB5b3UncmUgZG9uZSBmaWRkbGluZy4KICAgIHM4AAAAUGFja2FnZSBtYXkgb25seSBiZSBzcGVjaWZpZWQgZm9yIG1vZHVsZS1yZWxhdGl2ZSBwYXRocy5SNAAAAFKXAAAAUucAAABSFQEAAGkAAAAATigTAAAAUpgAAABSUwAAAFIrAAAAUkoAAABSmQAAAHQIAAAAYmFzZW5hbWVSrAAAAFLxAAAAUhUAAABSEQAAAHQGAAAAZGVjb2RlUsQAAABSTQEAAFJUAQAAUmkBAABSVgEAAFIjAAAAUhgBAABSFwEAACgPAAAAUk4AAABSUAAAAFInAAAAUk8AAABSLgAAAFLnAAAAUmoBAABSFQEAAFL1AAAAUmsBAABS6AAAAFJUAAAAdAQAAAB0ZXh0Um0BAABSBQEAACgAAAAAKAAAAABzTgAAAC9idWlsZGJvdC90bXAvYnVp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dGhvdXQgcmVzdWx0cyBhbmQgd2l0aG91dCBjYXRjaGluZyBleGNlcHRpb25zCgogICAgICAgICAgIFRoZSB1bml0IHRlc3QgZnJhbWV3b3JrIGluY2x1ZGVzIGEgZGVidWcgbWV0aG9kIG9uIHRlc3QgY2FzZXMKICAgICAgICAgICBhbmQgdGVzdCBzdWl0ZXMgdG8gc3VwcG9ydCBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcuICBUaGUgdGVzdCBjb2RlCiAgICAgICAgICAgaXMgcnVuIGluIHN1Y2ggYSB3YXkgdGhhdCBlcnJvcnMgYXJlIG5vdCBjYXVnaHQuICBUaGlzIHdheSBhCiAgICAgICAgICAgY2FsbGVyIGNhbiBjYXRjaCB0aGUgZXJyb3JzIGFuZCBpbml0aWF0ZSBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcuCgogICAgICAgICAgIFRoZSBEb2NUZXN0Q2FzZSBwcm92aWRlcyBhIGRlYnVnIG1ldGhvZCB0aGF0IHJhaXNlcwogICAgICAgICAgIFVuZXhwZWN0ZWRFeGNlcHRpb24gZXJyb3JzIGlmIHRoZXJlIGlzIGFuIHVuZXhwZWN0ZWQKICAgICAgICAgICBleGNlcHRpb246CgogICAgICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJz4+PiByYWlzZSBLZXlFcnJvclxuNDInLAogICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgIHt9LCAnZm9vJywgJ2Zvby5weScsIDApCiAgICAgICAgICAgICA+Pj4gY2FzZSA9IERvY1Rlc3RDYXNlKHRlc3QpCiAgICAgICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAgICAgLi4uICAgICBjYXNlLmRlYnVnKCkKICAgICAgICAgICAgIC4uLiBleGNlcHQgVW5leHBlY3RlZEV4Y2VwdGlvbiwgZmFpbHVyZToKICAgICAgICAgICAgIC4uLiAgICAgcGFzcwoKICAgICAgICAgICBUaGUgVW5leHBlY3RlZEV4Y2VwdGlvbiBjb250YWlucyB0aGUgdGVzdCwgdGhlIGV4YW1wbGUsIGFuZAogICAgICAgICAgIHRoZSBvcmlnaW5hbCBleGNlcHRpb246CgogICAgICAgICAgICAgPj4+IGZhaWx1cmUudGVzdCBpcyB0ZXN0CiAgICAgICAgICAgICBUcnVlCgogICAgICAgICAgICAgPj4+IGZhaWx1cmUuZXhhbXBsZS53YW50CiAgICAgICAgICAgICAnNDJcbicKCiAgICAgICAgICAgICA+Pj4gZXhjX2luZm8gPSBmYWlsdXJlLmV4Y19pbmZvCiAgICAgICAgICAgICA+Pj4gcmFpc2UgZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBleGNfaW5mb1syXQogICAgICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICBLZXlFcnJvcgoKICAgICAgICAgICBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2gsIHRoZW4gYSBEb2NUZXN0RmFpbHVyZSBpcyByYWlzZWQ6CgogICAgICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJycnCiAgICAgICAgICAgICAuLi4gICAgICA+Pj4geCA9IDEKICAgICAgICAgICAgIC4uLiAgICAgID4+PiB4CiAgICAgICAgICAgICAuLi4gICAgICAyCiAgICAgICAgICAgICAuLi4gICAgICAnJycsIHt9LCAnZm9vJywgJ2Zvby5weScsIDApCiAgICAgICAgICAgICA+Pj4gY2FzZSA9IERvY1Rlc3RDYXNlKHRlc3QpCgogICAgICAgICAgICAgPj4+IHRyeToKICAgICAgICAgICAgIC4uLiAgICBjYXNlLmRlYnVnKCkKICAgICAgICAgICAgIC4uLiBleGNlcHQgRG9jVGVzdEZhaWx1cmUsIGZhaWx1cmU6CiAgICAgICAgICAgICAuLi4gICAgcGFzcwoKICAgICAgICAgICBEb2NUZXN0RmFpbHVyZSBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSB0ZXN0OgoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLnRlc3QgaXMgdGVzdAogICAgICAgICAgICAgVHJ1ZQoKICAgICAgICAgICBBcyB3ZWxs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IHJhaXNlZCBzaG93aW5nIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3QgYW5kIGEKICAgIChzb21ldGltZXMgYXBwcm94aW1hdGUpIGxpbmUgbnVtYmVyLgoKICAgIFRoZSBgbW9kdWxlYCBhcmd1bWVudCBwcm92aWRlcyB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4gIFRoZSBhcmd1bWVudAogICAgY2FuIGJlIGVpdGhlciBhIG1vZHVsZSBvciBhIG1vZHVsZSBuYW1lLgoKICAgIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY2FsbGluZyBtb2R1bGUgaXMgdXNlZC4KCiAgICBBIG51bWJlciBvZiBvcHRpb25zIG1heSBiZSBwcm92aWRlZCBhcyBrZXl3b3JkIGFyZ3VtZW50czoKCiAgICBzZXRVcAogICAgICBBIHNldC11cCBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuIFRoZSBzZXRVcCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHNldFVwIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICB0ZWFyRG93bgogICAgICBBIHRlYXItZG93biBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICBnbG9icwogICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmlu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Z2UuICBUbyBlbnN1cmUgb3MtaW5kZXBlbmRlbmNlLAogICAgICAiZmlsZW5hbWUiIHNob3VsZCB1c2UgIi8iIGNoYXJhY3RlcnMgdG8gc2VwYXJhdGUgcGF0aAogICAgICBzZWdtZW50cywgYW5kIG1heSBub3QgYmUgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLiwgaXQgbWF5IG5vdAogICAgICBiZWdpbiB3aXRoICIvIikuCgogICAgICBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZSwgdGhlbiB0aGUgZ2l2ZW4gZmlsZSBwYXRocyBhcmUKICAgICAgaW50ZXJwcmV0ZWQgYXMgb3Mtc3BlY2lmaWMgcGF0aHMuICBUaGVzZSBwYXRocyBtYXkgYmUgYWJzb2x1dGUKICAgICAgb3IgcmVsYXRpdmUgKHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS4KCiAgICBwYWNrYWdlCiAgICAgIEEgUHl0aG9uIHBhY2thZ2Ugb3IgdGhlIG5hbWUgb2YgYSBQeXRob24gcGFja2FnZSB3aG9zZSBkaXJlY3RvcnkKICAgICAgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGJhc2UgZGlyZWN0b3J5IGZvciBtb2R1bGUgcmVsYXRpdmUgcGF0aHMuCiAgICAgIElmICJwYWNrYWdlIiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBjYWxsaW5nIG1vZHVsZSdzCiAgICAgIGRpcmVjdG9yeSBpcyB1c2VkIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlCiAgICAgIGZpbGVuYW1lcy4gIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgInBhY2thZ2UiIGlmCiAgICAgICJtb2R1bGVfcmVsYXRpdmUiIGlzIEZhbHNlLgoKICAgIHNldFVwCiAgICAgIEEgc2V0LXVwIGZ1bmN0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gVGhlIHNldFVwIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGEgRG9jVGVzdAogICAgICBvYmplY3QuICBUaGUgc2V0VXAgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgdGVzdCBnbG9iYWxzIGFzIHRoZQogICAgICBnbG9icyBhdHRyaWJ1dGUgb2YgdGhlIHRlc3QgcGFzc2VkLgoKICAgIHRlYXJEb3duCiAgICAgIEEgdGVhci1kb3duIGZ1bmN0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgcnVubmluZyB0aGUKICAgICAgdGVzdHMgaW4gZWFjaCBmaWxlLiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGEgRG9jVGVzdAogICAgICBvYmplY3QuICBUaGUgdGVhckRvd24gZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgdGVzdCBnbG9iYWxzIGFzIHRoZQogICAgICBnbG9icyBhdHRyaWJ1dGUgb2YgdGhlIHRlc3QgcGFzc2VkLgoKICAgIGdsb2JzCiAgICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGluaXRpYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIHRlc3RzLgoKICAgIG9wdGlvbmZsYWdzCiAgICAgIEEgc2V0IG9mIGRvY3Rlc3Qgb3B0aW9uIGZsYWdzIGV4cHJlc3NlZCBhcyBhbiBpbnRlZ2VyLgoKICAgIHBhcnNlcgogICAgICBBIERvY1Rlc3RQYXJzZXIgKG9yIHN1YmNsYXNzKSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGV4dHJhY3QKICAgICAgdGVzdHMgZnJvbSB0aGUgZmlsZXMuCgogICAgZW5jb2RpbmcKICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgIFJQAAAAUk8AAAAoBwAAAFKDAQAAUpcBAABSKgAAAFJ4AAAAUkQAAABSmAEAAFKeAQAAKAQAAAB0BQAAAHBhdGhzdAIAAABrd1KaAQAAUpkAAAAoAAAAACgAAAAAc04AAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSGwAAAJEJAABzDAAAAAA4DAUSARwCDQEaAmMBAAAABQAAAAYAAABDAAAAcygBAABnAAB9AQB4vQB0AACDAABqAQB8AACDAQBEXakAfQIAdAIAfAIAdAMAgwIAcpIAfAEAagQAfAIAagUAZAEAIIMBAAF8AgBqBgB9AwB8AwBywgB8AQBqBABkAgCDAQABfAEAZwAAfAMAagcAZAMAgwEAZAEAIERdEAB9BABkBAB8BAAXXgIAcXUAN30BAHHCAHEZAHwBAGcAAHwCAGoHAGQDAIMBAGQBACBEXRIAfQQAdAgAfAQAgwEAXgIAcakAN30BAHEZAFd4JAB8AQBy7AB8AQBkAQAZZAUAawIAcuwAfAEAagkAgwAAAXHJAFd4JwB8AQByFgF8AQBkBgAZZAUAawIAchYBfAEAagkAZAYAgwEAAXHwAFdkAwBqCgB8AQCDAQBkAwAXUygHAAAAc3YFAABFeHRyYWN0IHNjcmlwdCBmcm9tIHRleHQgd2l0aCBleGFtcGxlcy4KCiAgICAgICBDb252ZXJ0cyB0ZXh0IHdpdGggZXhhbXBsZXMgdG8gYSBQeXRob24gc2NyaXB0LiAgRXhhbXBsZSBpbnB1dCBpcwogICAgICAgY29udmVydGVkIHRvIHJlZ3VsYXIgY29kZS4gIEV4YW1wbGUgb3V0cHV0IGFuZCBhbGwgb3RoZXIgd29yZHMKICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gY29tbWVudHM6CgogICAgICAgPj4+IHRleHQgPSAnJycKICAgICAgIC4uLiAgICAgICBIZXJlIGFyZSBleGFtcGxlcyBvZiBzaW1wbGUgbWF0aC4KICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBQeXRob24gaGFzIHN1cGVyIGFjY3VyYXRlIGludGVnZXIgYWRkaXRpb24KICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICA+Pj4gMiArIDIKICAgICAgIC4uLiAgICAgICAgICAgNQogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgIEFuZCB2ZXJ5IGZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzOgogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgID4+PiAxLzAKICAgICAgIC4uLiAgICAgICAgICAgVG8gSW5maW5pdHkKICAgICAgIC4uLiAgICAgICAgICAgQW5kCiAgICAgICAuLi4gICAgICAgICAgIEJleW9uZAogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgIFlvdSBjYW4gdXNlIGxvZ2ljIGlmIHlvdSB3YW50OgogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgID4+PiBpZiAwOgogICAgICAgLi4uICAgICAgICAgICAuLi4gICAgYmxhaAogICAgICAgLi4uICAgICAgICAgICAuLi4gICAgYmxhaAogICAgICAgLi4uICAgICAgICAgICAuLi4KICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBIbyBodW0KICAgICAgIC4uLiAgICAgICAgICAgJycnCgogICAgICAgPj4+IHByaW50IHNjcmlwdF9mcm9tX2V4YW1wbGVzKHRleHQpCiAgICAgICAjIEhlcmUgYXJlIGV4YW1wbGVzIG9mIHNpbXBsZSBtYXRoLgogICAgICAgIwogICAgICAgIyAgICAgUHl0aG9uIGhhcyBzdXBlciBhY2N1cmF0ZSBpbnRlZ2VyIGFkZGl0aW9uCiAgICAgICAjCiAgICAgICAyICsgMgogICAgICAgIyBFeHBlY3RlZDoKICAgICAgICMjIDUKICAgICAgICMKICAgICAgICMgICAgIEFuZCB2ZXJ5IGZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzOgogICAgICAgIwogICAgICAgMS8wCiAgICAgICAjIEV4cGVjdGVkOgogICAgICAgIyMgVG8gSW5maW5pdHkKICAgICAgICMjIEFuZAogICAgICAgIyMgQmV5b25kCiAgICAgICAjCiAgICAgICAjICAgICBZb3UgY2FuIHVzZSBsb2dpYyBpZiB5b3Ugd2FudDoKICAgICAgICMKICAgICAgIGlmIDA6CiAgICAgICAgICBibGFoCiAgICAgICAgICBibGFoCiAgICAgICAjCiAgICAgICAjICAgICBIbyBodW0KICAgICAgIDxCTEFOS0xJTkU+CiAgICAgICBp/////3MLAAAAIyBFeHBlY3RlZDpzAQAAAApzAwAAACMjIFKAAAAAaQAAAAAoCwAAAFIPAAAAUsIA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YnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKvAQAAbwoAAHMIAAAABgwGAgkKCQpzxAAAAAogICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZSBvZiBhIHN0cmluZyBvYmplY3QsIHNlYXJjaGVkIGFzLWlzLgogICAgICAgICAgICAgICAgICAgICAgPj4+IHggPSAxOyB5ID0gMgogICAgICAgICAgICAgICAgICAgICAgPj4+IHggKyB5LCB4ICogeQogICAgICAgICAgICAgICAgICAgICAgKDMsIDIpCiAgICAgICAgICAgICAgICAgICAgICBSvAAAAHPcAgAACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIDIuMiwgYm9vbGVhbiBleHByZXNzaW9ucyBkaXNwbGF5ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBvciAxLiAgQnkgZGVmYXVsdCwgd2Ugc3RpbGwgYWNjZXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW0uICBUaGlzIGNhbiBiZSBkaXNhYmxlZCBieSBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTlRfQUNDRVBUX1RSVUVfRk9SXzEgdG8gdGhlIG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncyBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPT0gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+PiA0ID09IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gNCA+IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gNCA+IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcxQAAABib29sLWludCBlcXVpdmFsZW5jZXPmAAAACiAgICAgICAgICAgICAgICBCbGFuayBsaW5lcyBjYW4gYmUgbWFya2VkIHdpdGggPEJMQU5LTElORT46CiAgICAgICAgICAgICAgICAgICAgPj4+IHByaW50ICdmb29cblxuYmFyXG4nCiAgICAgICAgICAgICAgICAgICAgZm9vCiAgICAgICAgICAgICAgICAgICAgPEJMQU5LTElORT4KICAgICAgICAgICAgICAgICAgICBiYXIKICAgICAgICAgICAgICAgICAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBzCwAAAGJsYW5rIGxpbmVzc/MAAAAKICAgICAgICAgICAgICAgIElmIHRoZSBlbGxpcHNpcyBmbGFnIGlzIHVzZWQsIHRoZW4gJy4uLicgY2FuIGJlIHVzZWQgdG8KICAgICAgICAgICAgICAgIGVsaWRlIHN1YnN0cmluZ3MgaW4gdGhlIGRlc2lyZWQgb3V0cHV0OgogICAgICAgICAgICAgICAgICAgID4+PiBwcmludCByYW5nZSgxMDAwKSAjZG9jdGVzdDogK0VMTElQU0lTCiAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDIsIC4uLiwgOTk5XQogICAgICAgICAgICB0CAAAAGVsbGlwc2lzc3wBAAAKICAgICAgICAgICAgICAgIElmIHRoZSB3aGl0ZXNwYWNlIG5vcm1hbGl6YXRpb24gZmxhZyBpcyB1c2VkLCB0aGVuCiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLgogICAgICAgICAgICAgICAgICAgID4+PiBwcmludCByYW5nZSgzMCkgI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQogICAgICAgICAgICAgICAgICAgIFswLCAxLCAyLCAzLCA0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