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IG5vdCBzdGRlcnI/IGJlY2F1c2Ugc3RkZXJyIGlzIGEgbGFtZSBoYWNrIDwwLjIgd2luaz4pLCBhbmQgdGhlIGZpbmFsCmxpbmUgb2Ygb3V0cHV0IGlzICJUZXN0IGZhaWxlZC4iLgoKUnVuIGl0IHdpdGggdGhlIC12IHN3aXRjaCBpbnN0ZWFkOgoKcHl0aG9uIE0ucHkgLXYKCmFuZCBhIGRldGFpbGVkIHJlcG9ydCBvZiBhbGwgZXhhbXBsZXMgdHJpZWQgaXMgcHJpbnRlZCB0byBzdGRvdXQsIGFsb25nCndpdGggYXNzb3J0ZWQgc3VtbWFyaWVzIGF0IHRoZSBlbmQuCgpZb3UgY2FuIGZvcmNlIHZlcmJvc2UgbW9kZSBieSBwYXNzaW5nICJ2ZXJib3NlPVRydWUiIHRvIHRlc3Rtb2QsIG9yIHByb2hpYml0Cml0IGJ5IHBhc3NpbmcgInZlcmJvc2U9RmFsc2UiLiAgSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCBzeXMuYXJndiBpcyBub3QKZXhhbWluZWQgYnkgdGVzdG1vZC4KClRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cyB0byBydW4gZG9jdGVzdHMsIGluY2x1ZGluZyBpbnRlZ3JhdGlvbgp3aXRoIHRoZSB1bml0dGVzdCBmcmFtZXdvcmssIGFuZCBzdXBwb3J0IGZvciBydW5uaW5nIG5vbi1QeXRob24gdGV4dApmaWxlcyBjb250YWluaW5nIGRvY3Rlc3RzLiAgVGhlcmUgYXJlIGFsc28gbWFueSB3YXlzIHRvIG92ZXJyaWRlIHBhcnRzCm9mIGRvY3Rlc3QncyBkZWZhdWx0IGJlaGF2aW9ycy4gIFNlZSB0aGUgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIGZvcgpkZXRhaWxzLgpzEwAAAHJlU3RydWN0dXJlZFRleHQgZW50EwAAAHJlZ2lzdGVyX29wdGlvbmZsYWd0FgAAAERPTlRfQUNDRVBUX1RSVUVfRk9SXzF0FQAAAERPTlRfQUNDRVBUX0JMQU5LTElORXQUAAAATk9STUFMSVpFX1dISVRFU1BBQ0V0CAAAAEVMTElQU0lTdAQAAABTS0lQdBcAAABJR05PUkVfRVhDRVBUSU9OX0RFVEFJTHQQAAAAQ09NUEFSSVNPTl9GTEFHU3QMAAAAUkVQT1JUX1VESUZGdAwAAABSRVBPUlRfQ0RJRkZ0DAAAAFJFUE9SVF9ORElGRnQZAAAAUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRXQPAAAAUkVQT1JUSU5HX0ZMQUdTdAcAAABFeGFtcGxldAcAAABEb2NUZXN0dA0AAABEb2NUZXN0UGFyc2VydA0AAABEb2NUZXN0RmluZGVydA0AAABEb2NUZXN0UnVubmVydA0AAABPdXRwdXRDaGVja2VydA4AAABEb2NUZXN0RmFpbHVyZXQTAAAAVW5leHBlY3RlZEV4Y2VwdGlvbnQLAAAARGVidWdSdW5uZXJ0BwAAAHRlc3Rtb2R0CAAAAHRlc3RmaWxldBYAAABydW5fZG9jc3RyaW5nX2V4YW1wbGVzdAYAAABUZXN0ZXJ0DAAAAERvY1Rlc3RTdWl0ZXQMAAAARG9jRmlsZVN1aXRldBgAAABzZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3N0FAAAAHNjcmlwdF9mcm9tX2V4YW1wbGVzdAoAAAB0ZXN0c291cmNldAkAAABkZWJ1Z19zcmN0BQAAAGRlYnVnaf////9OKAEAAAB0CAAAAFN0cmluZ0lPKAEAAAB0CgAAAG5hbWVkdHVwbGV0CwAAAFRlc3RSZXN1bHRzcxAAAABmYWlsZWQgYXR0ZW1wdGVkYwEAAAABAAAABQAAAEMAAABzGgAAAHQAAGoBAHwAAGQBAHQCAHQAAIMBAD6DAgBTKAIAAABOaQEAAAAoAwAAAHQTAAAAT1BUSU9ORkxBR1NfQllfTkFNRXQKAAAAc2V0ZGVmYXVsdHQDAAAAbGVuKAEAAAB0BAAAAG5hbWUoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UgAAAACAAAAAcwIAAAAAAnMLAAAAPEJMQU5LTElORT5zAwAAAC4uLmMBAAAABAAAAAUAAABDAAAAc1UAAABkAQB9AQB4SAB0AABqAQBEXT0AfQIAfAAAagIAfAIAZAIAgwIAfQMAfAMAdAQAdAAAfAIAgwIAawgAchAAfAEA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AHMaAAAAAAEPARABDwEMAw8CHAEPAigBIAIMAwMBEQNjAAAAAAAAAAAFAAAAQgAAAHM+AAAAZQAAWgEAZAAAWgIAZAYAZAEAZAEAZAYAZAIAhAQAWgQAZAMAhAAAWgUAZAQAhAAAWgYAZAUAhAAAWgcAUlMoBwAAAHNuBgAACiAgICBBIHNpbmdsZSBkb2N0ZXN0IGV4YW1wbGUsIGNvbnNpc3Rpbmcgb2Ygc291cmNlIGNvZGUgYW5kIGV4cGVjdGVkCiAgICBvdXRwdXQuICBgRXhhbXBsZWAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CgogICAgICAtIHNvdXJjZTogQSBzaW5nbGUgUHl0aG9uIHN0YXRlbWVudCwgYWx3YXlzIGVuZGluZyB3aXRoIGEgbmV3bGluZS4KICAgICAgICBUaGUgY29uc3RydWN0b3IgYWRkcyBhIG5ld2xpbmUgaWYgbmVlZGVkLgoKICAgICAgLSB3YW50OiBUaGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgc291cmNlIGNvZGUgKGVpdGhlcgogICAgICAgIGZyb20gc3Rkb3V0LCBvciBhIHRyYWNlYmFjayBpbiBjYXNlIG9mIGV4Y2VwdGlvbikuICBgd2FudGAgZW5kcwogICAgICAgIHdpdGggYSBuZXdsaW5lIHVubGVzcyBpdCdzIGVtcHR5LCBpbiB3aGljaCBjYXNlIGl0J3MgYW4gZW1wdHkKICAgICAgICBzdHJpbmcuICBUaGUgY29uc3RydWN0b3IgYWRkcyBhIG5ld2xpbmUgaWYgbmVlZGVkLgoKICAgICAgLSBleGNfbXNnOiBUaGUgZXhjZXB0aW9uIG1lc3NhZ2UgZ2VuZXJhdGVkIGJ5IHRoZSBleGFtcGxlLCBpZgogICAgICAgIHRoZSBleGFtcGxlIGlzIGV4cGVjdGVkIHRvIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbjsgb3IgYE5vbmVgIGlmCiAgICAgICAgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbi4gIFRoaXMgZXhjZXB0aW9uCiAgICAgICAgbWVzc2FnZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSByZXR1cm4gdmFsdWUgb2YKICAgICAgICBgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSgpYC4gIGBleGNfbXNnYCBlbmRzIHdpdGggYQogICAgICAgIG5ld2xpbmUgdW5sZXNzIGl0J3MgYE5vbmVgLiAgVGhlIGNvbnN0cnVjdG9yIGFkZHMgYSBuZXdsaW5lCiAgICAgICAgaWYgbmVlZGVkLgoKICAgICAgLSBsaW5lbm86IFRoZSBsaW5lIG51bWJlciB3aXRoaW4gdGhlIERvY1Rlc3Qgc3RyaW5nIGNvbnRhaW5pbmcKICAgICAgICB0aGlzIEV4YW1wbGUgd2hlcmUgdGhlIEV4YW1wbGUgYmVnaW5zLiAgVGhpcyBsaW5lIG51bWJlciBpcwogICAgICAgIHplcm8tYmFzZWQsIHdpdGggcmVzcGVjdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBEb2NUZXN0LgoKICAgICAgLSBpbmRlbnQ6IFRoZSBleGFtcGxlJ3MgaW5kZW50YXRpb24gaW4gdGhlIERvY1Rlc3Qgc3RyaW5nLgogICAgICAgIEkuZS4sIHRoZSBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycyB0aGF0IHByZWNlZWQgdGhlCiAgICAgICAgZXhhbXBsZSdzIGZpcnN0IHByb21wdC4KCiAgICAgIC0gb3B0aW9uczogQSBkaWN0aW9uYXJ5IG1hcHBpbmcgZnJvbSBvcHRpb24gZmxhZ3MgdG8gVHJ1ZSBvcgogICAgICAgIEZhbHNlLCB3aGljaCBpcyB1c2VkIHRvIG92ZXJyaWRlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhpcwogICAgICAgIGV4YW1wbGUuICBBbnkgb3B0aW9uIGZsYWdzIG5vdCBjb250YWluZWQgaW4gdGhpcyBkaWN0aW9uYXJ5CiAgICAgICAgYXJlIGxlZnQgYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZSAoYXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgIERvY1Rlc3RSdW5uZXIncyBvcHRpb25mbGFncykuICBCeSBkZWZhdWx0LCBubyBvcHRpb25zIGFyZSBzZXQuCiAgICBpAAAAAGMHAAAABwAAAAQAAABDAAAAc7cAAAB8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c3RzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGEgZ2l2ZW4KICAgIG9iamVjdCwgZnJvbSBpdHMgZG9jc3RyaW5nIGFuZCB0aGUgZG9jc3RyaW5ncyBvZiBpdHMgY29udGFpbmVkCiAgICBvYmplY3RzLiAgRG9jdGVzdHMgY2FuIGN1cnJlbnRseSBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgZm9sbG93aW5nCiAgICBvYmplY3QgdHlwZXM6IG1vZHVsZXMsIGZ1bmN0aW9ucywgY2xhc3NlcywgbWV0aG9kcywgc3RhdGljbWV0aG9kcywKICAgIGNsYXNzbWV0aG9kcywgYW5kIHByb3BlcnRpZXMuCiAgICBjBQAAAAUAAAACAAAAQwAAAHMoAAAAfAIAfAAAXwAAfAEAfAAAXwEAfAMAfAAAXwIAfAQAfAAAXwMAZAEAUygCAAAAc3QCAAAKICAgICAgICBDcmVhdGUgYSBuZXcgZG9jdGVzdCBmaW5kZXIuCgogICAgICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCBgcGFyc2VyYCBzcGVjaWZpZXMgYSBjbGFzcyBvcgogICAgICAgIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIG5ldyBEb2NUZXN0IG9iamVjdHMgKG9yCiAgICAgICAgb2JqZWN0cyB0aGF0IGltcGxlbWVudCB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgRG9jVGVzdCkuICBUaGUKICAgICAgICBzaWduYXR1cmUgZm9yIHRoaXMgZmFjdG9yeSBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIHNpZ25hdHVyZQogICAgICAgIG9mIHRoZSBEb2NUZXN0IGNvbnN0cnVjdG9yLgoKICAgICAgICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgYHJlY3Vyc2VgIGlzIGZhbHNlLCB0aGVuIGBmaW5kYCB3aWxsCiAgICAgICAgb25seSBleGFtaW5lIHRoZSBnaXZlbiBvYmplY3QsIGFuZCBub3QgYW55IGNvbnRhaW5lZCBvYmplY3RzLgoKICAgICAgICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgYGV4Y2x1ZGVfZW1wdHlgIGlzIGZhbHNlLCB0aGVuIGBmaW5kYAogICAgICAgIHdpbGwgaW5jbHVkZSB0ZXN0cyBmb3Igb2JqZWN0cyB3aXRoIGVtcHR5IGRvY3N0cmluZ3MuCiAgICAgICAgTigEAAAAdAcAAABfcGFyc2VydAgAAABfdmVyYm9zZXQIAAAAX3JlY3Vyc2V0DgAAAF9leGNsdWRlX2VtcHR5KAUAAABSawAAAHQHAAAAdmVyYm9zZXQGAAAAcGFyc2VydAcAAAByZWN1cnNldA0AAABleGNsdWRlX2VtcHR5KAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVKJAAAAGQMAAHMIAAAAABEJAQkBCQFjBgAAAAkAAAAJAAAAQwAAAHOhAQAAfAIAZAQAawgAckkAdAEAfAEAZAEAZAQAgwMAfQIAfAIAZAQAawgAckkAdAIAZAIAdAMAfAEAgwEAZgEAFoMBAIIBAHFJAG4AAHwDAHQEAGsIAHJeAGQEAH0DAG4eAHwDAGQEAGsIAHJ8AHQFAGoGAHwBAIMBAH0DAG4AAHlkAHQFAGoHAHwBAIMBAHCaAHQFAGoIAHwBAIMBAH0GAHwDAGQEAGsJAHLBAHQJAGoKAHwGAHwDAGoLAIMCAH0HAG4PAHQJAGoKAHwGAIMBAH0HAHwHAHPfAGQEAH0HAG4AAFduFwAEdAwAawoAcvkAAQEBZAQAfQcAbgEAWHwEAGQEAGsIAHItAXwDAGQEAGsIAHIbAWkAAH0EAHE5AXwDAGoLAGoNAIMAAH0EAG4MAHwEAGoNAIMAAH0EAHwFAGQEAGsJAHJVAXwEAGoOAHwFAIMBAAFuAABkAQB8BABrBwBybgFkAwB8BABkAQA8bgAAZwAAfQgAfAAAag8AfAgAfAEAfAIAfAMAfAcAfAQAaQAAgwcAAXwIAGoQAIMAAAF8CABTKAUAAABzagYAAAogICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIERvY1Rlc3RzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIGdpdmVuCiAgICAgICAgb2JqZWN0J3MgZG9jc3RyaW5nLCBvciBieSBhbnkgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzJwogICAgICAgIGRvY3N0cmluZ3MuCgogICAgICAgIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYG1vZHVsZWAgaXMgdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgICAgICAgdGhlIGdpdmVuIG9iamVjdC4gIElmIHRoZSBtb2R1bGUgaXMgbm90IHNwZWNpZmllZCBvciBpcyBOb25lLCB0aGVuCiAgICAgICAgdGhlIHRlc3QgZmluZGVyIHdpbGwgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKICAgICAgICBjb3JyZWN0IG1vZHVsZS4gIFRoZSBvYmplY3QncyBtb2R1bGUgaXMgdXNlZDoKCiAgICAgICAgICAgIC0gQXMgYSBkZWZhdWx0IG5hbWVzcGFjZSwgaWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgICAtIFRvIHByZXZlbnQgdGhlIERvY1Rlc3RGaW5kZXIgZnJvbSBleHRyYWN0aW5nIERvY1Rlc3RzCiAgICAgICAgICAgICAgZnJvbSBvYmplY3RzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy4KICAgICAgICAgICAgLSBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdC4KICAgICAgICAgICAgLSBUbyBoZWxwIGZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvYmplY3Qgd2l0aGluIGl0cwogICAgICAgICAgICAgIGZpbGUuCgogICAgICAgIENvbnRhaW5lZCBvYmplY3RzIHdob3NlIG1vZHVsZSBkb2VzIG5vdCBtYXRjaCBgbW9kdWxlYCBhcmUgaWdub3JlZC4KCiAgICAgICAgSWYgYG1vZHVsZWAgaXMgRmFsc2UsIG5vIGF0dGVtcHQgdG8gZmluZCB0aGUgbW9kdWxlIHdpbGwgYmUgbWFkZS4KICAgICAgICBUaGlzIGlzIG9ic2N1cmUsIG9mIHVzZSBtb3N0bHkgaW4gdGVzdHM6ICBpZiBgbW9kdWxlYCBpcyBGYWxzZSwgb3IKICAgICAgICBpcyBOb25lIGJ1dCBjYW5ub3QgYmUgZm91bmQgYXV0b21hdGljYWxseSwgdGhlbiBhbGwgb2JqZWN0cyBhcmUKICAgICAgICBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgKG5vbi1leGlzdGVudCkgbW9kdWxlLCBzbyBhbGwgY29udGFpbmVkCiAgICAgICAgb2JqZWN0cyB3aWxsIChyZWN1cnNpdmVseSkgYmUgc2VhcmNoZWQgZm9yIGRvY3Rlc3RzLgoKICAgICAgICBUaGUgZ2xvYmFscyBmb3IgZWFjaCBEb2NUZXN0IGlzIGZvcm1lZCBieSBjb21iaW5pbmcgYGdsb2JzYAogICAgICAgIGFuZCBgZXh0cmFnbG9ic2AgKGJpbmRpbmdzIGluIGBleHRyYWdsb2JzYCBvdmVycmlkZSBiaW5kaW5ncwogICAgICAgIGluIGBnbG9ic2ApLiAgQSBuZXcgY29weSBvZiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQKICAgICAgICBmb3IgZWFjaCBEb2NUZXN0LiAgSWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0CiAgICAgICAgZGVmYXVsdHMgdG8gdGhlIG1vZHVsZSdzIGBfX2RpY3RfX2AsIGlmIHNwZWNpZmllZCwgb3Ige30KICAgICAgICBvdGhlcndpc2UuICBJZiBgZXh0cmFnbG9ic2AgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cwogICAgICAgIHRvIHt9LgoKICAgICAgICBSNAAAAHNKAAAARG9jVGVzdEZpbmRlci5maW5kOiBuYW1lIG11c3QgYmUgZ2l2ZW4gd2hlbiBvYmouX19uYW1lX18gZG9lc24ndCBleGlzdDogJXJSlgAAAE4oEQAAAFIrAAAAUiwAAABSlwAAAFKhAAAAUnUAAABSNQAAAHQJAAAAZ2V0bW9kdWxldA0AAABnZXRzb3VyY2VmaWxldAcAAABnZXRmaWxldAkAAABsaW5lY2FjaGV0CAAAAGdldGxpbmVzdAgAAABfX2RpY3RfX1JBAAAAUqoAAAB0BgAAAHVwZGF0ZXQFAAAAX2ZpbmR0BAAAAHNvcnQoCQAAAFJrAAAAdAMAAABvYmpSJwAAAFJCAAAAUi4AAAB0CgAAAGV4dHJhZ2xvYnNSXgAAAFLLAAAAdAUAAAB0ZXN0cygAAAAAKAAAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSdgAAAC8DAABzPgAAAAAkDAESAQwBBgIZBQwBCQEMARIFAwEeAQwEGAQPAQYBDQENAQoDDAEMAQkCEgIMAQwBEAEMAQ0DBgEfBQoBYwMAAAADAAAAAwAAAEMAAABzuAAAAHwBAGQDAGsIAHIQAHQBAFN0AgBqAwB8AgCDAQBkAwBrCQByOAB8AQB0AgBqAwB8AgCDAQBrCABTdAIAagQAfAIAgwEAclcAfAEAagUAfAIAagYAawgAU3QCAGoHAHwCAIMBAHJ2AHwBAGoIAHwCAGoJAGsCAFN0CgB8AgBkAQCDAgBylQB8AQBqCAB8AgBqCQBrAgBTdAsAfAIAdAwAgwIAcqgAdAEAU3QNAGQCAIMBAIIBAGQDAFMoBAAAAHNZAAAACiAgICAgICAgUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBkZWZpbmVkIGluIHRoZSBnaXZlbgogICAgICAgIG1vZHVsZS4KICAgICAgICBScQAAAHMiAAAAb2JqZWN0IG11c3QgYmUgYSBjbGFzcyBvciBmdW5jdGlvbk4oDgAAAFIrAAAAUncAAABSNQAAAFLpAAAAdAoAAABpc2Z1bmN0aW9uUu4AAAB0DAAAAGZ1bmNfZ2xvYmFsc3QHAAAAaXNjbGFzc1I0AAAAUnEAAABSSAAAAFI3AAAAdAgAAABwcm9wZXJ0eVKXAAAAKAMAAABSawAAAFJCAAAAdAYAAABvYmplY3QoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5dAwAAABfZnJvbV9tb2R1bGWMAwAAcxoAAAAABQwBBAEVARMBDwEQAQ8BEAEPARABDwEEAmMIAAAACwAAAA8AAABDAAAAcwkDAAB8AABqAAByFQBkAQB8AwAWR0huAAB0AQB8AgCDAQB8BwBrBgByKwBkAgBTZAMAfAcAdAEAfAIAgwEAPHwAAGoCAHwCAHwDAHwEAHwGAHwFAIMFAH0IAHwIAGQCAGsJAHJyAHwBAGoEAHwIAIMBAAFuAAB0BQBqBgB8AgCDAQByDwF8AABqBwByDwF4ggB8AgBqCABqCQCDAABEXW4AXAIAfQkAfQoAZAQAfAMAfAkAZgIAFn0JAHQFAGoKAHwKAIMBAHPUAHQFAGoLAHwKAIMBAHKaAHwAAGoMAHwEAHwKAIMCAHKaAHwAAGoNAHwBAHwKAHwJAHwEAHwFAHwGAHwHAIMHAAFxmgBxmgBXbgAAdAUAagYAfAIAgwEAchQCfAAAagcAchQCeOoAdA4AfAIAZAUAaQAAgwMAagkAgwAARF3NAFwCAH0JAH0KAHQPAHwJAHQQAIMCAHN3AXQRAGQGAHQSAHwJAIMBAGYBABaDAQCCAQBuAAB0BQBqCgB8CgCDAQBwvwF0BQBqCwB8CgCDAQBwvwF0BQBqEwB8CgCDAQBwvwF0BQBqBgB8CgCDAQBwvwF0DwB8CgB0EACDAgBz3gF0EQBkBwB0EgB8CgCDAQBmAQAWgwEAggEAbgAAZAgAfAMAfAkAZgIAFn0JAHwAAGoNAHwBAHwKAHwJAHwEAHwFAHwGAHwHAIMHAAFxQAFXbgAAdAUAagsAfAIAgwEAcgUDfAAAagcAcgUDeNYAfAIAaggAagkAgwAARF3CAFwCAH0JAH0KAHQPAHwKAHQUAIMCAHJpAnQOAHwCAHwJAIMCAH0KAG4AAHQPAHwKAHQVAIMCAHKNAnQOAHwCAHwJAIMCAGoWAH0KAG4AAHQFAGoKAHwKAIMBAHO6AnQFAGoLAHwKAIMBAHO6AnQPAHwKAHQXAIMCAHI8AnwAAGoMAHwEAHwKAIMCAHI8AmQEAHwDAHwJAGYCABZ9CQB8AABqDQB8AQB8CgB8CQB8BAB8BQB8BgB8BwCDBwABcTwCcTwCV24AAGQCAFMoCQAAAHNtAAAACiAgICAgICAgRmluZCB0ZXN0cyBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgYW55IGNvbnRhaW5lZCBvYmplY3RzLCBhbmQKICAgICAgICBhZGQgdGhlbSB0byBgdGVzdHNgLgogICAgICAgIHMTAAAARmluZGluZyB0ZXN0cyBpbiAlc05pAQAAAHMFAAAAJXMuJXN0CAAAAF9fdGVz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dW1tYXJpemVgIG1ldGhvZCBwcmludHMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgdGVzdCBjYXNlcyB0aGF0CiAgICBoYXZlIGJlZW4gcnVuIGJ5IHRoZSBydW5uZXIsIGFuZCByZXR1cm5zIGFuIGFnZ3JlZ2F0ZWQgYChmLCB0KWAKICAgIHR1cGxlOgoKICAgICAgICA+Pj4gcnVubmVyLnN1bW1hcml6ZSh2ZXJib3NlPTEpCiAgICAgICAgNCBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcwogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcy5fX2luaXRfXwogICAgICAgICAgIDIgdGVzdHMgaW4gX1Rlc3RDbGFzcy5nZXQKICAgICAgICAgICAxIHRlc3RzIGluIF9UZXN0Q2xhc3Muc3F1YXJlCiAgICAgICAgNyB0ZXN0cyBpbiA0IGl0ZW1zLgogICAgICAgIDcgcGFzc2VkIGFuZCAwIGZhaWxlZC4KICAgICAgICBUZXN0IHBhc3NlZC4KICAgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTcpCgogICAgVGhlIGFnZ3JlZ2F0ZWQgbnVtYmVyIG9mIHRyaWVkIGV4YW1wbGVzIGFuZCBmYWlsZWQgZXhhbXBsZXMgaXMKICAgIGFsc28gYXZhaWxhYmxlIHZpYSB0aGUgYHRyaWVzYCBhbmQgYGZhaWx1cmVzYCBhdHRyaWJ1dGVzOgoKICAgICAgICA+Pj4gcnVubmVyLnRyaWVzCiAgICAgICAgNwogICAgICAgID4+PiBydW5uZXIuZmFpbHVyZXMKICAgICAgICAwCgogICAgVGhlIGNvbXBhcmlzb24gYmV0d2VlbiBleHBlY3RlZCBvdXRwdXRzIGFuZCBhY3R1YWwgb3V0cHV0cyBpcyBkb25lCiAgICBieSBhbiBgT3V0cHV0Q2hlY2tlcmAuICBUaGlzIGNvbXBhcmlzb24gbWF5IGJlIGN1c3RvbWl6ZWQgd2l0aCBhCiAgICBudW1iZXIgb2Ygb3B0aW9uIGZsYWdzOyBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGB0ZXN0bW9kYCBmb3IKICAgIG1vcmUgaW5mb3JtYXRpb24uICBJZiB0aGUgb3B0aW9uIGZsYWdzIGFyZSBpbnN1ZmZpY2llbnQsIHRoZW4gdGhlCiAgICBjb21wYXJpc29uIG1heSBhbHNvIGJlIGN1c3RvbWl6ZWQgYnkgcGFzc2luZyBhIHN1YmNsYXNzIG9mCiAgICBgT3V0cHV0Q2hlY2tlcmAgdG8gdGhlIGNvbnN0cnVjdG9yLgoKICAgIFRoZSB0ZXN0IHJ1bm5lcidzIGRpc3BsYXkgb3V0cHV0IGNhbiBiZSBjb250cm9sbGVkIGluIHR3byB3YXlzLgogICAgRmlyc3QsIGFuIG91dHB1dCBmdW5jdGlvbiAoYG91dCkgY2FuIGJlIHBhc3NlZCB0bwogICAgYFRlc3RSdW5uZXIucnVuYDsgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHN0cmluZ3MgdGhhdAogICAgc2hvdWxkIGJlIGRpc3BsYXllZC4gIEl0IGRlZmF1bHRzIHRvIGBzeXMuc3Rkb3V0LndyaXRlYC4gIElmCiAgICBjYXB0dXJpbmcgdGhlIG91dHB1dCBpcyBub3Qgc3VmZmljaWVudCwgdGhlbiB0aGUgZGlzcGxheSBvdXRwdXQKICAgIGNhbiBiZSBhbHNvIGN1c3RvbWl6ZWQgYnkgc3ViY2xhc3NpbmcgRG9jVGVzdFJ1bm5lciwgYW5kCiAgICBvdmVycmlkaW5nIHRoZSBtZXRob2RzIGByZXBvcnRfc3RhcnRgLCBgcmVwb3J0X3N1Y2Nlc3NgLAogICAgYHJlcG9ydF91bmV4cGVjdGVkX2V4Y2VwdGlvbmAsIGFuZCBgcmVwb3J0X2ZhaWx1cmVgLgogICAgUjMAAABpRgAAAGkAAAAAYwQAAAAEAAAAAwAAAEMAAABzdgAAAHwBAHAMAHQAAIMAAHwAAF8BAHwCAGQDAGsIAHIwAGQBAHQDAGoEAGsGAH0CAG4AAHwCAHwAAF8FAHwDAHwAAF8GAHwDAHwAAF8HAGQCAHwAAF8IAGQCAHwAAF8JAGkAAHwAAF8KAHQLAIMAAHwAAF8MAGQDAFMoBAAAAHNjAgAACiAgICAgICAgQ3JlYXRlIGEgbmV3IHRlc3QgcnVubmVyLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyBgY2hlY2tlcmAgaXMgdGhlIGBPdXRwdXRDaGVja2VyYCB0aGF0CiAgICAgICAgc2hvdWxkIGJlIHVzZWQgdG8gY29tcGFyZSB0aGUgZXhwZWN0ZWQgb3V0cHV0cyBhbmQgYWN0dWFsCiAgICAgICAgb3V0cHV0cyBvZiBkb2N0ZXN0IGV4YW1wbGVzLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAndmVyYm9zZScgcHJpbnRzIGxvdHMgb2Ygc3R1ZmYgaWYgdHJ1ZSwKICAgICAgICBvbmx5IGZhaWx1cmVzIGlmIGZhbHNlOyBieSBkZWZhdWx0LCBpdCdzIHRydWUgaWZmICctdicgaXMgaW4KICAgICAgICBzeXMuYXJndi4KCiAgICAgICAgT3B0aW9uYWwgYXJndW1lbnQgYG9wdGlvbmZsYWdzYCBjYW4gYmUgdXNlZCB0byBjb250cm9sIGhvdyB0aGUKICAgICAgICB0ZXN0IHJ1bm5lciBjb21wYXJlcyBleHBlY3RlZCBvdXRwdXQgdG8gYWN0dWFsIG91dHB1dCwgYW5kIGhvdwogICAgICAgIGl0IGRpc3BsYXlzIGZhaWx1cmVzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgdGVzdG1vZGAgZm9yCiAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICBzAgAAAC12aQAAAABOKA0AAABSEgAAAHQIAAAAX2NoZWNrZXJSKwAAAFI9AAAAUpkAAABS4gAAAHQLAAAAb3B0aW9uZmxhZ3N0FAAAAG9yaWdpbmFsX29wdGlvbmZsYWdzdAUAAAB0cmllc3QIAAAAZmFpbHVyZXN0CAAAAF9uYW1lMmZ0UmgAAAB0CAAAAF9mYWtlb3V0KAQAAABSawAAAHQHAAAAY2hlY2tlclLlAAAAUhQBAAAoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UokAAAB0BAAAcxQAAAAAERIBDAESAQkBCQEJAwkBCQEJA2MEAAAABAAAAAQAAABDAAAAc18AAAB8AABqAABy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aWx1cmUuCgogICAgICAgSWYgYW4gdW5leHBlY3RlZCBleGNlcHRpb24gb2NjdXJzLCBhbiBVbmV4cGVjdGVkRXhjZXB0aW9uIGlzIHJhaXNlZC4KICAgICAgIEl0IGNvbnRhaW5zIHRoZSB0ZXN0LCB0aGUgZXhhbXBsZSwgYW5kIHRoZSBvcmlnaW5hbCBleGNlcHRpb246CgogICAgICAgICA+Pj4gcnVubmVyID0gRGVidWdSdW5uZXIodmVyYm9zZT1GYWxzZSkKICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJz4+PiByYWlzZSBLZXlFcnJvclxuNDInLAogICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSwgJ2ZvbycsICdmb28ucHknLCAwKQogICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAuLi4gICAgIHJ1bm5lci5ydW4odGVzdCkKICAgICAgICAgLi4uIGV4Y2VwdCBVbmV4cGVjdGVkRXhjZXB0aW9uLCBmYWlsdXJlOgogICAgICAgICAuLi4gICAgIHBhc3MKCiAgICAgICAgID4+PiBmYWlsdXJlLnRlc3QgaXMgdGVzdAogICAgICAgICBUcnVlCgogICAgICAgICA+Pj4gZmFpbHVyZS5leGFtcGxlLndhbnQKICAgICAgICAgJzQyXG4nCgogICAgICAgICA+Pj4gZXhjX2luZm8gPSBmYWlsdXJlLmV4Y19pbmZvCiAgICAgICAgID4+PiByYWlzZSBleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIGV4Y19pbmZvWzJdCiAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgLi4uCiAgICAgICAgIEtleUVycm9yCgogICAgICAgV2Ugd3JhcCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIHRvIGdpdmUgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24KICAgICAgIGFjY2VzcyB0byB0aGUgdGVzdCBhbmQgZXhhbXBsZSBpbmZvcm1hdGlvbi4KCiAgICAgICBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2gsIHRoZW4gYSBEb2NUZXN0RmFpbHVyZSBpcyByYWlzZWQ6CgogICAgICAgICA+Pj4gdGVzdCA9IERvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdCgnJycKICAgICAgICAgLi4uICAgICAgPj4+IHggPSAxCiAgICAgICAgIC4uLiAgICAgID4+PiB4CiAgICAgICAgIC4uLiAgICAgIDIKICAgICAgICAgLi4uICAgICAgJycnLCB7fSwgJ2ZvbycsICdmb28ucHknLCAwKQoKICAgICAgICAgPj4+IHRyeToKICAgICAgICAgLi4uICAgIHJ1bm5lci5ydW4odGVzdCkKICAgICAgICAgLi4uIGV4Y2VwdCBEb2NUZXN0RmFpbHVyZSwgZmFpbHVyZToKICAgICAgICAgLi4uICAgIHBhc3MKCiAgICAgICBEb2NUZXN0RmFpbHVyZSBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSB0ZXN0OgoKICAgICAgICAgPj4+IGZhaWx1cmUudGVzdCBpcyB0ZXN0CiAgICAgICAgIFRydWUKCiAgICAgICBBcyB3ZWxsIGFzIHRvIHRoZSBleGFtcGxlOgoKICAgICAgICAgPj4+IGZhaWx1cmUuZXhhbXBsZS53YW50CiAgICAgICAgICcyXG4nCgogICAgICAgYW5kIHRoZSBhY3R1YWwgb3V0cHV0OgoKICAgICAgICAgPj4+IGZhaWx1cmUuZ290CiAgICAgICAgICcxXG4nCgogICAgICAgSWYgYSBmYWlsdXJlIG9yIGVycm9yIG9jY3VycywgdGhlIGdsb2JhbHMgYXJlIGxlZnQgaW50YWN0OgoKICAgICAgICAgPj4+IGRlbCB0ZXN0Lmdsb2JzWydfX2J1aWx0aW5zX18nXQogICAgICAgICA+Pj4gdGVzdC5nbG9icwogICAgICAgICB7J3gnOiAxfQoKICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJycnCiAgICAgICAgIC4uLiAgICAgID4+PiB4ID0gMgogICAgICAgICAuLi4gICAgICA+Pj4gcmFpc2UgS2V5RXJyb3IKICAgICAgICAgLi4uICAgICAgJycnLCB7fSwgJ2Zvbycs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eHRyYWdsb2JzPU5vbmUsIHJhaXNlX29uX2Vycm9yPUZhbHNlLAogICAgICAgZXhjbHVkZV9lbXB0eT1GYWxzZQoKICAgIFRlc3QgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyBpbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgcmVhY2hhYmxlCiAgICBmcm9tIG1vZHVsZSBtIChvciB0aGUgY3VycmVudCBtb2R1bGUgaWYgbSBpcyBub3Qgc3VwcGxpZWQpLCBzdGFydGluZwogICAgd2l0aCBtLl9fZG9jX18uCgogICAgQWxzbyB0ZXN0IGV4YW1wbGVzIHJlYWNoYWJsZSBmcm9tIGRpY3QgbS5fX3Rlc3RfXyBpZiBpdCBleGlzdHMgYW5kIGlzCiAgICBub3QgTm9uZS4gIG0uX190ZXN0X18gbWFwcyBuYW1lcyB0byBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIHN0cmluZ3M7CiAgICBmdW5jdGlvbiBhbmQgY2xhc3MgZG9jc3RyaW5ncyBhcmUgdGVzdGVkIGV2ZW4gaWYgdGhlIG5hbWUgaXMgcHJpdmF0ZTsKICAgIHN0cmluZ3MgYXJlIHRlc3RlZCBkaXJlY3RseSwgYXMgaWYgdGhleSB3ZXJlIGRvY3N0cmluZ3MuCgogICAgUmV0dXJuICgjZmFpbHVyZXMsICN0ZXN0cykuCgogICAgU2VlIGhlbHAoZG9jdGVzdCkgZm9yIGFuIG92ZXJ2aWV3LgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJuYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlOyBieSBkZWZhdWx0CiAgICB1c2UgbS5fX25hbWVfXy4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZ2xvYnMiIGdpdmVzIGEgZGljdCB0byBiZSB1c2VkIGFzIHRoZSBnbG9iYWxzCiAgICB3aGVuIGV4ZWN1dGluZyBleGFtcGxlczsgYnkgZGVmYXVsdCwgdXNlIG0uX19kaWN0X18uICBBIGNvcHkgb2YgdGhpcwogICAgZGljdCBpcyBhY3R1YWxseSB1c2VkIGZvciBlYWNoIGRvY3N0cmluZywgc28gdGhhdCBlYWNoIGRvY3N0cmluZydzCiAgICBleGFtcGxlcyBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgImV4dHJhZ2xvYnMiIGdpdmVzIGEgZGljdGlvbmFyeSB0aGF0IHNob3VsZCBiZQogICAgbWVyZ2VkIGludG8gdGhlIGdsb2JhbHMgdGhhdCBhcmUgdXNlZCB0byBleGVjdXRlIGV4YW1wbGVzLiAgQnkKICAgIGRlZmF1bHQsIG5vIGV4dHJhIGdsb2JhbHMgYXJlIHVzZWQuICBUaGlzIGlzIG5ldyBpbiAyLjQuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInZlcmJvc2UiIHByaW50cyBsb3RzIG9mIHN0dWZmIGlmIHRydWUsIHByaW50cwogICAgb25seSBmYWlsdXJlcyBpZiBmYWxzZTsgYnkgZGVmYXVsdCwgaXQncyB0cnVlIGlmZiAiLXYiIGlzIGluIHN5cy5hcmd2LgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJyZXBvcnQiIHByaW50cyBhIHN1bW1hcnkgYXQgdGhlIGVuZCB3aGVuIHRydWUsCiAgICBlbHNlIHByaW50cyBub3RoaW5nIGF0IHRoZSBlbmQuICBJbiB2ZXJib3NlIG1vZGUsIHRoZSBzdW1tYXJ5IGlzCiAgICBkZXRhaWxlZCwgZWxzZSB2ZXJ5IGJyaWVmIChpbiBmYWN0LCBlbXB0eSBpZiBhbGwgdGVzdHMgcGFzc2VkKS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAib3B0aW9uZmxhZ3MiIG9yJ3MgdG9nZXRoZXIgbW9kdWxlIGNvbnN0YW50cywKICAgIGFuZCBkZWZhdWx0cyB0byAwLiAgVGhpcyBpcyBuZXcgaW4gMi4zLiAgUG9zc2libGUgdmFsdWVzIChzZWUgdGhlCiAgICBkb2NzIGZvciBkZXRhaWxzKToKCiAgICAgICAgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMQogICAgICAgIERPTlRfQUNDRVBUX0JMQU5LTElORQogICAgICAgIE5PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAgRUxMSVBTSVMKICAgICAgICBTS0lQCiAgICAgICAgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKICAgICAgICBSRVBPUlRfVURJRkYKICAgICAgICBSRVBPUlRfQ0RJRkYKICAgICAgICBSRVBPUlRfTkRJRkYKICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJhaXNlX29uX2Vycm9yIiByYWlzZXMgYW4gZXhjZXB0aW9uIG9uIHRoZQogICAgZmlyc3QgdW5leHBlY3RlZCBleGNlcHRpb24gb3IgZmFpbHVyZS4gVGhpcyBhbGxvd3MgZmFpbHVyZXMgdG8gYmUKICAgIHBvc3QtbW9ydGVtIGRlYnVnZ2VkLgoKICAgIEFkdmFuY2VkIHRvbWZvb2xlcnk6ICB0ZXN0bW9kIHJ1bnMgbWV0aG9kcyBvZiBhIGxvY2FsIGluc3RhbmNlIG9mCiAgICBjbGFzcyBkb2N0ZXN0LlRlc3RlciwgdGhlbiBtZXJnZXMgdGhlIHJlc3VsdHMgaW50byAob3IgY3JlYXRlcykKICAgIGdsb2JhbCBUZXN0ZXIgaW5zdGFuY2UgZG9jdGVzdC5tYXN0ZXIuICBNZXRob2RzIG9mIGRvY3Rlc3QubWFzdGVyCiAgICBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHRvbywgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHVudXN1YWwuCiAgICBQYXNzaW5nIHJlcG9ydD0wIHRvIHRlc3Rtb2QgaXMgZXNwZWNpYWxseSB1c2VmdWwgdGhlbiwgdG8gZGVsYXkKICAgIGRpc3BsYXlpbmcgYSBzdW1tYXJ5LiAgSW52b2tlIGRvY3Rlc3QubWFzdGVyLnN1bW1hcml6ZSh2ZXJib3NlKQogICAgd2hlbiB5b3UncmUgZG9uZSBmaWRkbGluZy4KICAgIFKWAAAAcxwAAAB0ZXN0bW9kOiBtb2R1bGUgcmVxdWlyZWQ7ICVyUugAAABS5QAAAFIUAQAAUi4AAABS8wAAAE4oEwAAAFIrAAAAUj0AAABSPgAAAFIqAAAAUjUAAABSNgAAAFJBAAAAUjQAAABSEAAAAFIVAAAAUhEAAABSdgAAAFJMAQAAUlMBAAB0BgAAAG1hc3RlclJVAQAAUiMAAABSFwEAAFIWAQAAKAwAAABSvwAAAFInAAAAUi4AAABS5QAAAHQGAAAAcmVwb3J0UhQBAABS8wAAAHQOAAAAcmFpc2Vfb25fZXJyb3JS6AAAAHQGAAAAZmluZGVydAYAAABydW5uZXJSBAEAACgAAAAAKAAAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSFgAAAAIHAABzJAAAAABFDAQVAw8BFgMMAQwDDwIGARgCFQIlARECBgENAgwBCQINAmMMAAAADwAAAAcAAABDAAAAc2wBAAB8AwByHAB8AQAMchwAdAAAZAEAgwEAggEAbgAAdAEAfAAAfAMAfAEAgwMAXAIAfQwAfQAAfAIAZAcAawgAclUAdAMAagQAagUAfAAAgwEAfQIAbgAAfAQAZAcAawgAcmoAaQAAfQQAbgwAfAQAagYAgwAAfQQAfAgAZAcAawkAcpIAfAQAagcAfAgAgwEAAW4AAGQCAHwEAGsHAHKrAGQDAHwEAGQCADxuAAB8CQByyQB0CABkBAB8BQBkBQB8BwCDAAJ9DQBuFQB0CQBkBAB8BQBkBQB8BwCDAAJ9DQB8CwBkBwBrCQBy/AB8DABqCgB8CwCDAQB9DABuAAB8CgBqCwB8DAB8BAB8AgB8AABkBgCDBQB9DgB8DQBqDAB8DgCDAQABfAYAcjcBfA0Aag0AgwAAAW4AAHQOAGQHAGsIAHJMAXwNAGEOAG4NAHQOAGoPAHwNAIMBAAF0EAB8DQBqEQB8DQBqEgCDAgBTKAgAAABzDQ0AAAogICAgVGVzdCBleGFtcGxlcyBpbiB0aGUgZ2l2ZW4gZmlsZS4gIFJldHVybiAoI2ZhaWx1cmVzLCAjdGVzdHMpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJtb2R1bGVfcmVsYXRpdmUiIHNwZWNpZmllcyBob3cgZmlsZW5hbWVzCiAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQ6CgogICAgICAtIElmICJtb2R1bGVfcmVsYXRpdmUiIGlzIFRydWUgKHRoZSBkZWZhdWx0KSwgdGhlbiAiZmlsZW5hbWUiCiAgICAgICAgIHNwZWNpZmllcyBhIG1vZHVsZS1yZWxhdGl2ZSBwYXRoLiAgQnkgZGVmYXVsdCwgdGhpcyBwYXRoIGlzCiAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBjYWxsaW5nIG1vZHVsZSdzIGRpcmVjdG9yeTsgYnV0IGlmIHRoZQogICAgICAgICAicGFja2FnZSIgYXJndW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIGl0IGlzIHJlbGF0aXZlIHRvIHRoYXQKICAgICAgICAgcGFja2FnZS4gIFRvIGVuc3VyZSBvcy1pbmRlcGVuZGVuY2UsICJmaWxlbmFtZSIgc2hvdWxkIHVzZQogICAgICAgICAiLyIgY2hhcmFjdGVycyB0byBzZXBhcmF0ZSBwYXRoIHNlZ21lbnRzLCBhbmQgc2hvdWxkIG5vdAogICAgICAgICBiZSBhbiBhYnNvbHV0ZSBwYXRoIChpLmUuLCBpdCBtYXkgbm90IGJlZ2luIHdpdGggIi8iKS4KCiAgICAgIC0gSWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgRmFsc2UsIHRoZW4gImZpbGVuYW1lIiBzcGVjaWZpZXMgYW4KICAgICAgICBvcy1zcGVjaWZpYyBwYXRoLiAgVGhlIHBhdGggbWF5IGJlIGFic29sdXRlIG9yIHJlbGF0aXZlICh0bwogICAgICAgIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAibmFtZSIgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIHRlc3Q7IGJ5IGRlZmF1bHQKICAgIHVzZSB0aGUgZmlsZSdzIGJhc2VuYW1lLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgInBhY2thZ2UiIGlzIGEgUHl0aG9uIHBhY2thZ2Ugb3IgdGhlCiAgICBuYW1lIG9mIGEgUHl0aG9uIHBhY2thZ2Ugd2hvc2UgZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkIGFzIHRoZQogICAgYmFzZSBkaXJlY3RvcnkgZm9yIGEgbW9kdWxlIHJlbGF0aXZlIGZpbGVuYW1lLiAgSWYgbm8gcGFja2FnZSBpcwogICAgc3BlY2lmaWVkLCB0aGVuIHRoZSBjYWxsaW5nIG1vZHVsZSdzIGRpcmVjdG9yeSBpcyB1c2VkIGFzIHRoZSBiYXNlCiAgICBkaXJlY3RvcnkgZm9yIG1vZHVsZSByZWxhdGl2ZSBmaWxlbmFtZXMuICBJdCBpcyBhbiBlcnJvciB0bwogICAgc3BlY2lmeSAicGFja2FnZSIgaWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgRmFsc2UuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgImdsb2JzIiBnaXZlcyBhIGRpY3QgdG8gYmUgdXNlZCBhcyB0aGUgZ2xvYmFscwogICAgd2hlbiBleGVjdXRpbmcgZXhhbXBsZXM7IGJ5IGRlZmF1bHQsIHVzZSB7fS4gIEEgY29weSBvZiB0aGlzIGRpY3QKICAgIGlzIGFjdHVhbGx5IHVzZWQgZm9yIGVhY2ggZG9jc3RyaW5nLCBzbyB0aGF0IGVhY2ggZG9jc3RyaW5nJ3MKICAgIGV4YW1wbGVzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZXh0cmFnbG9icyIgZ2l2ZXMgYSBkaWN0aW9uYXJ5IHRoYXQgc2hvdWxkIGJlCiAgICBtZXJnZWQgaW50byB0aGUgZ2xvYmFscyB0aGF0IGFyZSB1c2VkIHRvIGV4ZWN1dGUgZXhhbXBsZXMuICBCeQogICAgZGVmYXVsdCwgbm8gZXh0cmEgZ2xvYmFscyBhcmUgdXNlZC4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAidmVyYm9zZSIgcHJpbnRzIGxvdHMgb2Ygc3R1ZmYgaWYgdHJ1ZSwgcHJpbnRzCiAgICBvbmx5IGZhaWx1cmVzIGlmIGZhbHNlOyBieSBkZWZhdWx0LCBpdCdzIHRydWUgaWZmICItdiIgaXMgaW4gc3lzLmFyZ3YuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJlcG9ydCIgcHJpbnRzIGEgc3VtbWFyeSBhdCB0aGUgZW5kIHdoZW4gdHJ1ZSwKICAgIGVsc2UgcHJpbnRzIG5vdGhpbmcgYXQgdGhlIGVuZC4gIEluIHZlcmJvc2UgbW9kZSwgdGhlIHN1bW1hcnkgaXMKICAgIGRldGFpbGVkLCBlbHNlIHZlcnkgYnJpZWYgKGluIGZhY3QsIGVtcHR5IGlmIGFsbCB0ZXN0cyBwYXNzZWQpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJvcHRpb25mbGFncyIgb3IncyB0b2dldGhlciBtb2R1bGUgY29uc3RhbnRzLAogICAgYW5kIGRlZmF1bHRzIHRvIDAuICBQb3NzaWJsZSB2YWx1ZXMgKHNlZSB0aGUgZG9jcyBmb3IgZGV0YWlscyk6CgogICAgICAgIERPTlRfQUNDRVBUX1RSVUVfRk9SXzEKICAgICAgICBET05UX0FDQ0VQVF9CTEFOS0xJTkUKICAgICAgICBOT1JNQUxJWkVfV0hJVEVTUEFDRQogICAgICAgIEVMTElQU0lTCiAgICAgICAgU0tJUAogICAgICAgIElHTk9SRV9FWENFUFRJT05fREVUQUlMCiAgICAgICAgUkVQT1JUX1VESUZGCiAgICAgICAgUkVQT1JUX0NESUZGCiAgICAgICAgUkVQT1JUX05ESUZGCiAgICAgICAgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJyYWlzZV9vbl9lcnJvciIgcmFpc2VzIGFuIGV4Y2VwdGlvbiBvbiB0aGUKICAgIGZpcnN0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9yIGZhaWx1cmUuIFRoaXMgYWxsb3dzIGZhaWx1cmVzIHRvIGJlCiAgICBwb3N0LW1vcnRlbSBkZWJ1Z2dlZC4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicGFyc2VyIiBzcGVjaWZpZXMgYSBEb2NUZXN0UGFyc2VyIChvcgogICAgc3ViY2xhc3MpIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZXh0cmFjdCB0ZXN0cyBmcm9tIHRoZSBmaWxlcy4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZW5jb2RpbmciIHNwZWNpZmllcyBhbiBlbmNvZGluZyB0aGF0IHNob3VsZAogICAgYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBmaWxlIHRvIHVuaWNvZGUuCgogICAgQWR2YW5jZWQgdG9tZm9vbGVyeTogIHRlc3Rtb2QgcnVucyBtZXRob2RzIG9mIGEgbG9jYWwgaW5zdGFuY2Ugb2YKICAgIGNsYXNz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AAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhkAAAAECAAAcw4AAAAGARUUCQkPCQwICQYMA2MBAAAAAgAAAAMAAABDAAAAczIAAAB8AAB0AABAfAAAawMAciIAdAEAZAEAfAAAgwIAggEAbgAAdAIAfQEAfAAAYQIAfAEAUygCAAAAcz8DAABTZXRzIHRoZSB1bml0dGVzdCBvcHRpb24gZmxhZ3MuCgogICAgVGhlIG9sZCBmbGFnIGlzIHJldHVybmVkIHNvIHRoYXQgYSBydW5uZXIgY291bGQgcmVzdG9yZSB0aGUgb2xkCiAgICB2YWx1ZSBpZiBpdCB3aXNoZWQgdG86CgogICAgICA+Pj4gaW1wb3J0IGRvY3Rlc3QKICAgICAgPj4+IG9sZCA9IGRvY3Rlc3QuX3VuaXR0ZXN0X3JlcG9ydGZsYWdzCiAgICAgID4+PiBkb2N0ZXN0LnNldF91bml0dGVzdF9yZXBvcnRmbGFncyhSRVBPUlRfTkRJRkYgfAogICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUpID09IG9sZAogICAgICBUcnVlCgogICAgICA+Pj4gZG9jdGVzdC5fdW5pdHRlc3RfcmVwb3J0ZmxhZ3MgPT0gKFJFUE9SVF9ORElGRiB8CiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSkKICAgICAgVHJ1ZQoKICAgIE9ubHkgcmVwb3J0aW5nIGZsYWdzIGNhbiBiZSBzZXQ6CgogICAgICA+Pj4gZG9jdGVzdC5zZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MoRUxMSVBTSVMpCiAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgLi4uCiAgICAgIFZhbHVlRXJyb3I6ICgnT25seSByZXBvcnRpbmcgZmxhZ3MgYWxsb3dlZCcsIDgpCgogICAgICA+Pj4gZG9jdGVzdC5zZXRfdW5p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ICAgICAgICAgaXMgcnVuIGluIHN1Y2ggYSB3YXkgdGhhdCBlcnJvcnMgYXJlIG5vdCBjYXVnaHQuICBUaGlzIHdheSBhCiAgICAgICAgICAgY2FsbGVyIGNhbiBjYXRjaCB0aGUgZXJyb3JzIGFuZCBpbml0aWF0ZSBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcuCgogICAgICAgICAgIFRoZSBEb2NUZXN0Q2FzZSBwcm92aWRlcyBhIGRlYnVnIG1ldGhvZCB0aGF0IHJhaXNlcwogICAgICAgICAgIFVuZXhwZWN0ZWRFeGNlcHRpb24gZXJyb3JzIGlmIHRoZXJlIGlzIGFuIHVuZXhwZWN0ZWQKICAgICAgICAgICBleGNlcHRpb246CgogICAgICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJz4+PiByYWlzZSBLZXlFcnJvclxuNDInLAogICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgIHt9LCAnZm9vJywgJ2Zvby5weScsIDApCiAgICAgICAgICAgICA+Pj4gY2FzZSA9IERvY1Rlc3RDYXNlKHRlc3QpCiAgICAgICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAgICAgLi4uICAgICBjYXNlLmRlYnVnKCkKICAgICAgICAgICAgIC4uLiBleGNlcHQgVW5leHBlY3RlZEV4Y2VwdGlvbiwgZmFpbHVyZToKICAgICAgICAgICAgIC4uLiAgICAgcGFzcwoKICAgICAgICAgICBUaGUgVW5leHBlY3RlZEV4Y2VwdGlvbiBjb250YWlucyB0aGUgdGVzdCwgdGhlIGV4YW1wbGUsIGFuZAogICAgICAgICAgIHRoZSBvcmlnaW5hbCBleGNlcHRpb246CgogICAgICAgICAgICAgPj4+IGZhaWx1cmUudGVzdCBpcyB0ZXN0CiAgICAgICAgICAgICBUcnVlCgogICAgICAgICAgICAgPj4+IGZhaWx1cmUuZXhhbXBsZS53YW50CiAgICAgICAgICAgICAnNDJcbicKCiAgICAgICAgICAgICA+Pj4gZXhjX2luZm8gPSBmYWlsdXJlLmV4Y19pbmZvCiAgICAgICAgICAgICA+Pj4gcmFpc2UgZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBleGNfaW5mb1syXQogICAgICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICBLZXlFcnJvcgoKICAgICAgICAgICBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2gsIHRoZW4gYSBEb2NUZXN0RmFpbHVyZSBpcyByYWlzZWQ6CgogICAgICAgICAgICAgPj4+IHRlc3QgPSBEb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3QoJycnCiAgICAgICAgICAgICAuLi4gICAgICA+Pj4geCA9IDEKICAgICAgICAgICAgIC4uLiAgICAgID4+PiB4CiAgICAgICAgICAgICAuLi4gICAgICAyCiAgICAgICAgICAgICAuLi4gICAgICAnJycsIHt9LCAnZm9vJywgJ2Zvby5weScsIDApCiAgICAgICAgICAgICA+Pj4gY2FzZSA9IERvY1Rlc3RDYXNlKHRlc3QpCgogICAgICAgICAgICAgPj4+IHRyeToKICAgICAgICAgICAgIC4uLiAgICBjYXNlLmRlYnVnKCkKICAgICAgICAgICAgIC4uLiBleGNlcHQgRG9jVGVzdEZhaWx1cmUsIGZhaWx1cmU6CiAgICAgICAgICAgICAuLi4gICAgcGFzcwoKICAgICAgICAgICBEb2NUZXN0RmFpbHVyZSBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSB0ZXN0OgoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLnRlc3QgaXMgdGVzdAogICAgICAgICAgICAgVHJ1ZQoKICAgICAgICAgICBBcyB3ZWxsIGFzIHRvIHRoZSBleGFtcGxlOgoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLmV4YW1wbGUud2FudAogICAgICAgICAgICAgJzJcbicKCiAgICAgICAgICAgYW5kIHRoZSBhY3R1YWwgb3V0cHV0OgoKICAgICAgICAgICAgID4+PiBmYWlsdXJlLmdvdAogICAgICAgICAgICAgJzFcbicKCiAgICAgICAgICAgUhQBAABSGgEAAFLlAAAAUkkBAABOKAgA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biBiZSBlaXRoZXIgYSBtb2R1bGUgb3IgYSBtb2R1bGUgbmFtZS4KCiAgICBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNhbGxpbmcgbW9kdWxlIGlzIHVzZWQuCgogICAgQSBudW1iZXIgb2Ygb3B0aW9ucyBtYXkgYmUgcHJvdmlkZWQgYXMga2V5d29yZCBhcmd1bWVudHM6CgogICAgc2V0VXAKICAgICAgQSBzZXQtdXAgZnVuY3Rpb24uICBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgcnVubmluZyB0aGUKICAgICAgdGVzdHMgaW4gZWFjaCBmaWxlLiBUaGUgc2V0VXAgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYSBEb2NUZXN0CiAgICAgIG9iamVjdC4gIFRoZSBzZXRVcCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSB0ZXN0IGdsb2JhbHMgYXMgdGhlCiAgICAgIGdsb2JzIGF0dHJpYnV0ZSBvZiB0aGUgdGVzdCBwYXNzZWQuCgogICAgdGVhckRvd24KICAgICAgQSB0ZWFyLWRvd24gZnVuY3Rpb24uICBUaGlzIGlzIGNhbGxlZCBhZnRlciBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuICBUaGUgdGVhckRvd24gZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYSBEb2NUZXN0CiAgICAgIG9iamVjdC4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSB0ZXN0IGdsb2JhbHMgYXMgdGhlCiAgICAgIGdsb2JzIGF0dHJpYnV0ZSBvZiB0aGUgdGVzdCBwYXNzZWQuCgogICAgZ2xvYnMKICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5pdGlhbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgdGVzdHMuCgogICAgb3B0aW9uZmxhZ3MKICAgICAgIEEgc2V0IG9mIGRvY3Rlc3Qgb3B0aW9uIGZsYWdzIGV4cHJlc3NlZCBhcyBhbiBpbnRlZ2VyLgogICAgUi4AAABS8wAAAGkCAAAAcxEAAABoYXMgbm8gZG9jc3RyaW5nc2kAAAAAafz///9zBAAAAC5weWNzBAAA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LgoKICAgICAgSWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgRmFsc2UsIHRoZW4gdGhlIGdpdmVuIGZpbGUgcGF0aHMgYXJlCiAgICAgIGludGVycHJldGVkIGFzIG9zLXNwZWNpZmljIHBhdGhzLiAgVGhlc2UgcGF0aHMgbWF5IGJlIGFic29sdXRlCiAgICAgIG9yIHJlbGF0aXZlICh0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuCgogICAgcGFja2FnZQogICAgICBBIFB5dGhvbiBwYWNrYWdlIG9yIHRoZSBuYW1lIG9mIGEgUHl0aG9uIHBhY2thZ2Ugd2hvc2UgZGlyZWN0b3J5CiAgICAgIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlIHBhdGhzLgogICAgICBJZiAicGFja2FnZSIgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgY2FsbGluZyBtb2R1bGUncwogICAgICBkaXJlY3RvcnkgaXMgdXNlZCBhcyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9yIG1vZHVsZSByZWxhdGl2ZQogICAgICBmaWxlbmFtZXMuICBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5ICJwYWNrYWdlIiBpZgogICAgICAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZS4KCiAgICBzZXRVcAogICAgICBBIHNldC11cCBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuIFRoZSBzZXRVcCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHNldFVwIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICB0ZWFyRG93bgogICAgICBBIHRlYXItZG93biBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICBnbG9icwogICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBpbml0aWFsIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZSB0ZXN0cy4KCiAgICBvcHRpb25mbGFncwogICAgICBBIHNldCBvZiBkb2N0ZXN0IG9wdGlvbiBmbGFncyBleHByZXNzZWQgYXMgYW4gaW50ZWdlci4KCiAgICBwYXJzZXIKICAgICAgQSBEb2NUZXN0UGFyc2VyIChvciBzdWJjbGFzcykgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBleHRyYWN0CiAgICAgIHRlc3RzIGZyb20gdGhlIGZpbGVzLgoKICAgIGVuY29kaW5nCiAgICAgIEFuIGVuY29kaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGZpbGVzIHRvIHVuaWNvZGUuCiAgICBSUAAAAFJPAAAAKAcAAABSggEAAFKWAQAAUioAAABSdwAAAFJEAAAAUpcBAABSnQEAACgEAAAAdAUAAABwYXRoc3QCAAAAa3dSmQEAAFKYAAAAKAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIbAAAAkQkAAHMMAAAAADgMBRIBHAINARoCYwEAAAAFAAAABgAAAEMAAABzKAEAAGcAAH0BAHi9AHQAAIMAAGoBAHwAAIMBAERdqQB9AgB0AgB8AgB0AwCDAgBykgB8AQBqBAB8AgBqBQBkAQAggwEAAXwCAGoGAH0DAHwDAHLCAHwBAGoEAGQCAIMBAAF8AQBnAAB8AwBqBwBkAwCDAQBkAQAgRF0QAH0EAGQEAHwEABdeAgBxdQA3fQEAccIAcRkAfAEAZwAAfAIAagcAZAMAgwEAZAEAIERdEgB9BAB0CAB8BACDAQBeAgBxqQA3fQEAcRkAV3gkAHwBAHLsAHwBAGQBABlkBQBrAgBy7AB8AQBqCQCDAAABcckAV3gnAHwBAHIWAXwBAGQGABlkBQBrAgByFgF8AQBqCQBkBgCDAQABcfAAV2QDAGoKAHwBAIMBAGQDABdTKAcAAABzdgUAAEV4dHJhY3Qgc2NyaXB0IGZyb20gdGV4dCB3aXRoIGV4YW1wbGVzLgoKICAgICAgIENvbnZlcnRzIHRleHQgd2l0aCBleGFtcGxlcyB0byBhIFB5dGhvbiBzY3JpcHQuICBFeGFtcGxlIGlucHV0IGlzCiAgICAgICBjb252ZXJ0ZWQgdG8gcmVndWxhciBjb2RlLiAgRXhhbXBsZSBvdXRwdXQgYW5kIGFsbCBvdGhlciB3b3JkcwogICAgICAgYXJlIGNvbnZlcnRlZCB0byBjb21tZW50czoKCiAgICAgICA+Pj4gdGV4dCA9ICcnJwogICAgICAgLi4uICAgICAgIEhlcmUgYXJlIGV4YW1wbGVzIG9mIHNpbXBsZSBtYXRoLgogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgIFB5dGhvbiBoYXMgc3VwZXIgYWNjdXJhdGUgaW50ZWdlciBhZGRpdGlvbgogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgID4+PiAyICsgMgogICAgICAgLi4uICAgICAgICAgICA1CiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgQW5kIHZlcnkgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXM6CiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgPj4+IDEvMAogICAgICAgLi4uICAgICAgICAgICBUbyBJbmZpbml0eQogICAgICAgLi4uICAgICAgICAgICBBbmQKICAgICAgIC4uLiAgICAgICAgICAgQmV5b25kCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgWW91IGNhbiB1c2UgbG9naWMgaWYgeW91IHdhbnQ6CiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgPj4+IGlmIDA6CiAgICAgICAuLi4gICAgICAgICAgIC4uLiAgICBibGFoCiAgICAgICAuLi4gICAgICAgICAgIC4uLiAgICBibGFoCiAgICAgICAuLi4gICAgICAgICAgIC4uLgogICAgICAgLi4uCiAgICAgICAuLi4gICAgICAgICAgIEhvIGh1bQogICAgICAgLi4uICAgICAgICAgICAnJycKCiAgICAgICA+Pj4gcHJpbnQgc2NyaXB0X2Zyb21fZXhhbXBsZXModGV4dCkKICAgICAgICMgSGVyZSBhcmUgZXhhbXBsZXMgb2Ygc2ltcGxlIG1hdGguCiAgICAgICAjCiAgICAgICAjICAgICBQeXRob24gaGFzIHN1cGVyIGFjY3VyYXRlIGludGVnZXIgYWRkaXRpb24KICAgICAgICMKICAgICAgIDIgKyAyCiAgICAgICAjIEV4cGVjdGVkOgogICAgICAgIyMgNQogICAgICAgIwogICAgICAgIyAgICAgQW5kIHZlcnkgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXM6CiAgICAgICAjCiAgICAgICAxLzAKICAgICAgICMgRXhwZWN0ZWQ6CiAgICAgICAjIyBUbyBJbmZpbml0eQogICAgICAgIyMgQW5kCiAgICAgICAjIyBCZXlvbmQKICAgICAgICMKICAgICAgICMgICAgIFlvdSBjYW4gdXNlIGxvZ2ljIGlmIHlvdSB3YW50OgogICAgICAgIwogICAgICAgaWYgMDoKICAgICAgICAgIGJsYWgKICAgICAgICAgIGJsYWgKICAgICAgICMKICAgICAgICMgICAgIEhvIGh1bQogICAgICAgPEJMQU5LTElORT4KICAgICAgIGn/////cwsAAAAjIEV4cGVjdGVkOnMBAAAACnMDAAAAIyMgUn8AAABpAAAAACgLAAAAUg8AAABSwAAAAFI3AAAAUg0AAABSswAAAFKdAAAAUngAAABScwAAAFKCAAAAdAMAAABwb3BSmwAAACgFAAAAUlsAAABSvQAAAHQFAAAAcGllY2VSeAAAAFK8AAAAKAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5w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ICAgICAgICAgICA+Pj4geCA9IDE7IHkgPSAyCiAgICAgICAgICAgICAgICAgICAgICA+Pj4geCArIHksIHggKiB5CiAgICAgICAgICAgICAgICAgICAgICAoMywgMikKICAgICAgICAgICAgICAgICAgICAgIFK6AAAAc9wCAAAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gMi4yLCBib29sZWFuIGV4cHJlc3Npb25zIGRpc3BsYXllZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIG9yIDEuICBCeSBkZWZhdWx0LCB3ZSBzdGlsbCBhY2NlcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbS4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IHBhc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMSB0byB0aGUgbmV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzIGFyZ3VtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gNCA9PSA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPT0gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+PiA0ID4gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+PiA0ID4gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzFAAAAGJvb2wtaW50IGVxdWl2YWxlbmNlc+YAAAAKICAgICAgICAgICAgICAgIEJsYW5rIGxpbmVzIGNhbiBiZSBtYXJrZWQgd2l0aCA8QkxBTktMSU5FPjoKICAgICAgICAgICAgICAgICAgICA+Pj4gcHJpbnQgJ2Zvb1xuXG5iYXJcbicKICAgICAgICAgICAgICAgICAgICBmb28KICAgICAgICAgICAgICAgICAgICA8QkxBTktMSU5FPgogICAgICAgICAgICAgICAgICAgIGJhcgogICAgICAgICAgICAgICAgICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIHMLAAAAYmxhbmsgbGluZXNz8wAAAAogICAgICAgICAgICAgICAgSWYgdGhlIGVsbGlwc2lzIGZsYWcgaXMgdXNlZCwgdGhlbiAnLi4uJyBjYW4gYmUgdXNlZCB0bwogICAgICAgICAgICAgICAgZWxpZGUgc3Vic3RyaW5ncyBpbiB0aGUgZGVzaXJlZCBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgICAgPj4+IHByaW50IHJhbmdlKDEwMDApICNkb2N0ZXN0OiArRUxMSVBTSVMKICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMiwgLi4uLCA5OTldCiAgICAgICAgICAgIHQIAAAAZWxsaXBzaXNzfAEAAAogICAgICAgICAgICAgICAgSWYgdGhlIHdoaXRlc3BhY2Ugbm9ybWFsaXphdGlvbiBmbGFnIGlzIHVzZWQsIHRoZW4KICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgYXJlIGlnbm9yZWQuCiAgICAgICAgICAgICAgICAgICAgPj4+IHByaW50IHJhbmdlKDMwKSAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwKICAgICAgICAgICAgICAgICAgICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwKICAgICAgICAgICAgICAgICAgICAgMjcsIDI4LCAyOV0KICAgICAgICAgICAgcxgAAAB3aGl0ZXNwYWNlIG5v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