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IG5vdCBzdGRlcnI/IGJlY2F1c2Ugc3RkZXJyIGlzIGEgbGFtZSBoYWNrIDwwLjIgd2luaz4pLCBhbmQgdGhlIGZpbmFsCmxpbmUgb2Ygb3V0cHV0IGlzICJUZXN0IGZhaWxlZC4iLgoKUnVuIGl0IHdpdGggdGhlIC12IHN3aXRjaCBpbnN0ZWFkOgoKcHl0aG9uIE0ucHkgLXYKCmFuZCBhIGRldGFpbGVkIHJlcG9ydCBvZiBhbGwgZXhhbXBsZXMgdHJpZWQgaXMgcHJpbnRlZCB0byBzdGRvdXQsIGFsb25nCndpdGggYXNzb3J0ZWQgc3VtbWFyaWVzIGF0IHRoZSBlbmQuCgpZb3UgY2FuIGZvcmNlIHZlcmJvc2UgbW9kZSBieSBwYXNzaW5nICJ2ZXJib3NlPVRydWUiIHRvIHRlc3Rtb2QsIG9yIHByb2hpYml0Cml0IGJ5IHBhc3NpbmcgInZlcmJvc2U9RmFsc2UiLiAgSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCBzeXMuYXJndiBpcyBub3QKZXhhbWluZWQgYnkgdGVzdG1vZC4KClRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cyB0byBydW4gZG9jdGVzdHMsIGluY2x1ZGluZyBpbnRlZ3JhdGlvbgp3aXRoIHRoZSB1bml0dGVzdCBmcmFtZXdvcmssIGFuZCBzdXBwb3J0IGZvciBydW5uaW5nIG5vbi1QeXRob24gdGV4dApmaWxlcyBjb250YWluaW5nIGRvY3Rlc3RzLiAgVGhlcmUgYXJlIGFsc28gbWFueSB3YXlzIHRvIG92ZXJyaWRlIHBhcnRzCm9mIGRvY3Rlc3QncyBkZWZhdWx0IGJlaGF2aW9ycy4gIFNlZSB0aGUgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIGZvcgpkZXRhaWxzLgpzEwAAAHJlU3RydWN0dXJlZFRleHQgZW50EwAAAHJlZ2lzdGVyX29wdGlvbmZsYWd0FgAAAERPTlRfQUNDRVBUX1RSVUVfRk9SXzF0FQAAAERPTlRfQUNDRVBUX0JMQU5LTElORXQUAAAATk9STUFMSVpFX1dISVRFU1BBQ0V0CAAAAEVMTElQU0lTdAQAAABTS0lQdBcAAABJR05PUkVfRVhDRVBUSU9OX0RFVEFJTHQQAAAAQ09NUEFSSVNPTl9GTEFHU3QMAAAAUkVQT1JUX1VESUZGdAwAAABSRVBPUlRfQ0RJRkZ0DAAAAFJFUE9SVF9ORElGRnQZAAAAUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRXQPAAAAUkVQT1JUSU5HX0ZMQUdTdAcAAABFeGFtcGxldAcAAABEb2NUZXN0dA0AAABEb2NUZXN0UGFyc2VydA0AAABEb2NUZXN0RmluZGVydA0AAABEb2NUZXN0UnVubmVydA0AAABPdXRwdXRDaGVja2VydA4AAABEb2NUZXN0RmFpbHVyZXQTAAAAVW5leHBlY3RlZEV4Y2VwdGlvbnQLAAAARGVidWdSdW5uZXJ0BwAAAHRlc3Rtb2R0CAAAAHRlc3RmaWxldBYAAABydW5fZG9jc3RyaW5nX2V4YW1wbGVzdAYAAABUZXN0ZXJ0DAAAAERvY1Rlc3RTdWl0ZXQMAAAARG9jRmlsZVN1aXRldBgAAABzZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3N0FAAAAHNjcmlwdF9mcm9tX2V4YW1wbGVzdAoAAAB0ZXN0c291cmNldAkAAABkZWJ1Z19zcmN0BQAAAGRlYnVnaf////9OKAEAAAB0CAAAAFN0cmluZ0lPKAEAAAB0CgAAAG5hbWVkdHVwbGV0CwAAAFRlc3RSZXN1bHRzcxAAAABmYWlsZWQgYXR0ZW1wdGVkYwEAAAABAAAABQAAAEMAAABzGgAAAHQAAGoBAHwAAGQBAHQCAHQAAIMBAD6DAgBTKAIAAABOaQEAAAAoAwAAAHQTAAAAT1BUSU9ORkxBR1NfQllfTkFNRXQKAAAAc2V0ZGVmYXVsdHQDAAAAbGVuKAEAAAB0BAAAAG5hbWUoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UgAAAACAAAAAcwIAAAAAAnMLAAAAPEJMQU5LTElORT5zAwAAAC4uLmMBAAAABAAAAAUAAABDAAAAc1UAAABkAQB9AQB4SAB0AABqAQBEXT0AfQIAfAAAagIAfAIAZAIAgwIAfQMAfAMAdAQAdAAAfAIAgwIAawgAchAAfAEA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aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UkcAAABtAQAAcxoAAAAAAQ8BEAEPAQwDDwIcAQ8CKAEgAgwDAwERA2MAAAAAAAAAAAUAAABCAAAAcz4AAABlAABaAQBkAABaAgBkBgBkAQBkAQBkBgBkAgCEBABaBABkAwCEAABaBQBkBACEAABaBgBkBQCEAABaBwBSUygHAAAAc24GAAAKICAgIEEgc2luZ2xlIGRvY3Rlc3QgZXhhbXBsZSwgY29uc2lzdGluZyBvZiBzb3VyY2UgY29kZSBhbmQgZXhwZWN0ZWQKICAgIG91dHB1dC4gIGBFeGFtcGxlYCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKCiAgICAgIC0gc291cmNlOiBBIHNpbmdsZSBQeXRob24gc3RhdGVtZW50LCBhbHdheXMgZW5kaW5nIHdpdGggYSBuZXdsaW5lLgogICAgICAgIFRoZSBjb25zdHJ1Y3RvciBhZGRzIGEgbmV3bGluZSBpZiBuZWVkZWQuCgogICAgICAtIHdhbnQ6IFRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSBydW5uaW5nIHRoZSBzb3VyY2UgY29kZSAoZWl0aGVyCiAgICAgICAgZnJvbSBzdGRvdXQsIG9yIGEgdHJhY2ViYWNrIGluIGNhc2Ugb2YgZXhjZXB0aW9uKS4gIGB3YW50YCBlbmRzCiAgICAgICAgd2l0aCBhIG5ld2xpbmUgdW5sZXNzIGl0J3MgZW1wdHksIGluIHdoaWNoIGNhc2UgaXQncyBhbiBlbXB0eQogICAgICAgIHN0cmluZy4gIFRoZSBjb25zdHJ1Y3RvciBhZGRzIGEgbmV3bGluZSBpZiBuZWVkZWQuCgogICAgICAtIGV4Y19tc2c6IFRoZSBleGNlcHRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIGV4YW1wbGUsIGlmCiAgICAgICAgdGhlIGV4YW1wbGUgaXMgZXhwZWN0ZWQgdG8gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uOyBvciBgTm9uZWAgaWYKICAgICAgICBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uLiAgVGhpcyBleGNlcHRpb24KICAgICAgICBtZXNzYWdlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIHJldHVybiB2YWx1ZSBvZgogICAgICAgIGB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KClgLiAgYGV4Y19tc2dgIGVuZHMgd2l0aCBhCiAgICAgICAgbmV3bGluZSB1bmxlc3MgaXQncyBgTm9uZWAuICBUaGUgY29uc3RydWN0b3IgYWRkcyBhIG5ld2xpbmUKICAgICAgICBpZiBuZWVkZWQuCgogICAgICAtIGxpbmVubzogVGhlIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgRG9jVGVzdCBzdHJpbmcgY29udGFpbmluZwogICAgICAgIHRoaXMgRXhhbXBsZSB3aGVyZSB0aGUgRXhhbXBsZSBiZWdpbnMuICBUaGlzIGxpbmUgbnVtYmVyIGlzCiAgICAgICAgemVyby1iYXNlZCwgd2l0aCByZXNwZWN0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIERvY1Rlc3QuCgogICAgICAtIGluZGVudDogVGhlIGV4YW1wbGUncyBpbmRlbnRhdGlvbiBpbiB0aGUgRG9jVGVzdCBzdHJpbmcuCiAgICAgICAgSS5lLiwgdGhlIG51bWJlciBvZiBzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgcHJlY2VlZCB0aGUKICAgICAgICBleGFtcGxlJ3MgZmlyc3QgcHJvbXB0LgoKICAgICAgLSBvcHRpb25zOiBBIGRpY3Rpb25hcnkgbWFwcGluZyBmcm9tIG9wdGlvbiBmbGFncyB0byBUcnVlIG9yCiAgICAgICAgRmFsc2UsIHdoaWNoIGlzIHVzZWQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBvcHRpb25zIGZvciB0aGlzCiAgICAgICAgZXhhbXBsZS4gIEFueSBvcHRpb24gZmxhZ3Mgbm90IGNvbnRhaW5lZCBpbiB0aGlzIGRpY3Rpb25hcnkKICAgICAgICBhcmUgbGVmdCBhdCB0aGVpciBkZWZhdWx0IHZhbHVlIChhcyBzcGVjaWZpZWQgYnkgdGhlCiAgICAgICAgRG9jVGVzdFJ1bm5lcidzIG9wdGlvbmZsYWdzKS4gIEJ5IGRlZmF1bHQsIG5v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fAcAfAQAaQAAgwcAAXwIAGoQAIMAAAF8CABTKAUAAABzagYAAAogICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIERvY1Rlc3RzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIGdpdmVuCiAgICAgICAgb2JqZWN0J3MgZG9jc3RyaW5nLCBvciBieSBhbnkgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzJwogICAgICAgIGRvY3N0cmluZ3MuCgogICAgICAgIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYG1vZHVsZWAgaXMgdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgICAgICAgdGhlIGdpdmVuIG9iamVjdC4gIElmIHRoZSBtb2R1bGUgaXMgbm90IHNwZWNpZmllZCBvciBpcyBOb25lLCB0aGVuCiAgICAgICAgdGhlIHRlc3QgZmluZGVyIHdpbGwgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKICAgICAgICBjb3JyZWN0IG1vZHVsZS4gIFRoZSBvYmplY3QncyBtb2R1bGUgaXMgdXNlZDoKCiAgICAgICAgICAgIC0gQXMgYSBkZWZhdWx0IG5hbWVzcGFjZSwgaWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgICAtIFRvIHByZXZlbnQgdGhlIERvY1Rlc3RGaW5kZXIgZnJvbSBleHRyYWN0aW5nIERvY1Rlc3RzCiAgICAgICAgICAgICAgZnJvbSBvYmplY3RzIHRoYXQgYXJlIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy4KICAgICAgICAgICAgLSBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdC4KICAgICAgICAgICAgLSBUbyBoZWxwIGZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvYmplY3Qgd2l0aGluIGl0cwogICAgICAgICAgICAgIGZpbGUuCgogICAgICAgIENvbnRhaW5lZCBvYmplY3RzIHdob3NlIG1vZHVsZSBkb2VzIG5vdCBtYXRjaCBgbW9kdWxlYCBhcmUgaWdub3JlZC4KCiAgICAgICAgSWYgYG1vZHVsZWAgaXMgRmFsc2UsIG5vIGF0dGVtcHQgdG8gZmluZCB0aGUgbW9kdWxlIHdpbGwgYmUgbWFkZS4KICAgICAgICBUaGlzIGlzIG9ic2N1cmUsIG9mIHVzZSBtb3N0bHkgaW4gdGVzdHM6ICBpZiBgbW9kdWxlYCBpcyBGYWxzZSwgb3IKICAgICAgICBpcyBOb25lIGJ1dCBjYW5ub3QgYmUgZm91bmQgYXV0b21hdGljYWxseSwgdGhlbiBhbGwgb2JqZWN0cyBhcmUKICAgICAgICBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgKG5vbi1leGlzdGVudCkgbW9kdWxlLCBzbyBhbGwgY29udGFpbmVkCiAgICAgICAgb2JqZWN0cyB3aWxsIChyZWN1cnNpdmVseSkgYmUgc2VhcmNoZWQgZm9yIGRvY3Rlc3RzLgoKICAgICAgICBUaGUgZ2xvYmFscyBmb3IgZWFjaCBEb2NUZXN0IGlzIGZvcm1lZCBieSBjb21iaW5pbmcgYGdsb2JzYAogICAgICAgIGFuZCBgZXh0cmFnbG9ic2AgKGJpbmRpbmdzIGluIGBleHRyYWdsb2JzYCBvdmVycmlkZSBiaW5kaW5ncwogICAgICAgIGluIGBnbG9ic2ApLiAgQSBuZXcgY29weSBvZiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQKICAgICAgICBmb3IgZWFjaCBEb2NUZXN0LiAgSWYgYGdsb2JzYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0CiAgICAgICAgZGVmYXVsdHMgdG8gdGhlIG1vZHVsZSdzIGBfX2RpY3RfX2AsIGlmIHNwZWNpZmllZCwgb3Ige30KICAgICAgICBvdGhlcndpc2UuICBJZiBgZXh0cmFnbG9ic2AgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cwogICAgICAgIHRvIHt9LgoKICAgICAgICBSNAAAAHNKAAAARG9jVGVzdEZpbmRlci5maW5kOiBuYW1lIG11c3QgYmUgZ2l2ZW4gd2hlbiBvYmouX19uYW1lX18gZG9lc24ndCBleGlzdDogJXJSlwAAAE4oEQAAAFIrAAAAUiwAAABSmAAAAFKiAAAAUnYAAABS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YWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCiAgICAgICAgX1Rlc3RDbGFzcy5nZXQgLT4gVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQogICAgICAgIF9UZXN0Q2xhc3Muc3F1YXJlIC0+IFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKCiAgICBUaGUgYHN1bW1hcml6ZWAgbWV0aG9kIHByaW50cyBhIHN1bW1hcnkgb2YgYWxsIHRoZSB0ZXN0IGNhc2VzIHRoYXQKICAgIGhhdmUgYmVlbiBydW4gYnkgdGhlIHJ1bm5lciwgYW5kIHJldHVybnMgYW4gYWdncmVnYXRlZCBgKGYsIHQpYAogICAgdHVwbGU6CgogICAgICAgID4+PiBydW5uZXIuc3VtbWFyaXplKHZlcmJvc2U9MSkKICAgICAgICA0IGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzCiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzLl9faW5pdF9fCiAgICAgICAgICAgMiB0ZXN0cyBpbiBfVGVzdENsYXNzLmdldAogICAgICAgICAgIDEgdGVzdHMgaW4gX1Rlc3RDbGFzcy5zcXVhcmUKICAgICAgICA3IHRlc3RzIGluIDQgaXRlbXMuCiAgICAgICAgNyBwYXNzZWQgYW5kIDAgZmFpbGVkLgogICAgICAgIFRlc3QgcGFzc2VkLgogICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NykKCiAgICBUaGUgYWdncmVnYXRlZCBudW1iZXIgb2YgdHJpZWQgZXhhbXBsZXMgYW5kIGZhaWxlZCBleGFtcGxlcyBpcwogICAgYWxzbyBhdmFpbGFibGUgdmlhIHRoZSBgdHJpZXNgIGFuZCBgZmFpbHVyZXNgIGF0dHJpYnV0ZXM6CgogICAgICAgID4+PiBydW5uZXIudHJpZXMKICAgICAgICA3CiAgICAgICAgPj4+IHJ1bm5lci5mYWlsdXJlcwogICAgICAgIDAKCiAgICBUaGUgY29tcGFyaXNvbiBiZXR3ZWVuIGV4cGVjdGVkIG91dHB1dHMgYW5kIGFjdHVhbCBvdXRwdXRzIGlzIGRvbmUKICAgIGJ5IGFuIGBPdXRwdXRDaGVja2VyYC4gIFRoaXMgY29tcGFyaXNvbiBtYXkgYmUgY3VzdG9taXplZCB3aXRoIGEKICAgIG51bWJlciBvZiBvcHRpb24gZmxhZ3M7IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYHRlc3Rtb2RgIGZvcgogICAgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHRoZSBvcHRpb24gZmxhZ3MgYXJlIGluc3VmZmljaWVudCwgdGhlbiB0aGUKICAgIGNvbXBhcmlzb24gbWF5IGFsc28gYmUgY3VzdG9taXplZCBieSBwYXNzaW5nIGEgc3ViY2xhc3Mgb2YKICAgIGBPdXRwdXRDaGVja2VyYCB0byB0aGUgY29uc3RydWN0b3IuCgogICAgVGhlIHRlc3QgcnVubmVyJ3MgZGlzcGxheSBvdXRwdXQgY2FuIGJlIGNvbnRyb2xsZWQgaW4gdHdvIHdheXMuCiAgICBGaXJzdCwgYW4gb3V0cHV0IGZ1bmN0aW9uIChgb3V0KSBjYW4gYmUgcGFzc2VkIHRvCiAgICBgVGVzdFJ1bm5lci5ydW5gOyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggc3RyaW5ncyB0aGF0CiAgICBzaG91bGQgYmUgZGlzcGxheWVkLiAgSXQgZGVmYXVsdHMgdG8gYHN5cy5zdGRvdXQud3JpdGVgLiAgSWYKICAgIGNhcHR1cmluZyB0aGUgb3V0cHV0IGlzIG5vdCBzdWZmaWNpZW50LCB0aGVuIHRoZSBkaXNwbGF5IG91dHB1dAogICAgY2FuIGJlIGFsc28gY3VzdG9taXplZCBieSBzdWJjbGFzc2luZyBEb2NUZXN0UnVubmVyLCBhbmQKICAgIG92ZXJyaWRpbmcgdGhlIG1ldGhvZHMgYHJlcG9ydF9zdGFydGAsIGByZXBvcnRfc3VjY2Vzc2AsCiAgICBgcmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9uYCwgYW5kIGByZXBvcnRfZmFpbHVyZWAuCiAgICBSMwAAAGlGAAAAaQAAAABjBAAAAAQAAAADAAAAQwAAAHN2AAAAfAEAcAwAdAAAgwAAfAAAXwEAfAIA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aGVuIHVzZSBgY2xlYXJfZ2xvYnM9RmFsc2VgLgoKICAgICAgICBgY29tcGlsZWZsYWdzYCBnaXZlcyB0aGUgc2V0IG9mIGZsYWdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkKICAgICAgICB0aGUgUHl0aG9uIGNvbXBpbGVyIHdoZW4gcnVubmluZyB0aGUgZXhhbXBsZXMuICBJZiBub3QKICAgICAgICBzcGVjaWZpZWQsIHRoZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBzZXQgb2YgZnV0dXJlLWltcG9ydAogICAgICAgIGZsYWdzIHRoYXQgYXBwbHkgdG8gYGdsb2JzYC4KCiAgICAgICAgVGhlIG91dHB1dCBvZiBlYWNoIGV4YW1wbGUgaXMgY2hlY2tlZCB1c2luZwogICAgICAgIGBEb2NUZXN0UnVubmVyLmNoZWNrX291dHB1dGAsIGFuZCB0aGUgcmVzdWx0cyBhcmUgZm9ybWF0dGVkIGJ5CiAgICAgICAgdGhlIGBEb2NUZXN0UnVubmVyLnJlcG9ydF8qYCBtZXRob2RzLgogICAgICAgIE4oFQAAAFIFAQAAUisAAABSMgAAAFIuAAAAUj0AAABShQAAAHQFAAAAd3JpdGVSGgEAAFKIAAAAUo4AAABShAAAAFInAQAAdAUAAAByZXNldFLuAAAAUu8AAABSQAEAAHQqAAAAX0RvY1Rlc3RSdW5uZXJfX3BhdGNoZWRfbGluZWNhY2hlX2dldGxpbmVzdAsAAABkaXNwbGF5aG9va3QPAAAAX19kaXNwbGF5aG9va19fdBMAAABfRG9jVGVzdFJ1bm5lcl9fcnVudAUAAABjbGVhcigIAAAAUmsAAABSBQEAAFIrAQAAUowAAAB0CwAAAGNsZWFyX2dsb2JzUpMAAAB0DgAAAHNhdmVfc2V0X3RyYWNldBAAAABzYXZlX2Rpc3BsYXlob29rKAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weXQDAAAAcnVuYwUAAHMuAAAAABQJAgwBEgIJAQwBDAEMBwkBDwENAQ8EDAEMAwkBDAIDARcCCQEJAQwBCQEG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Zm8KICAgICAgICAgPj4+IHJhaXNlIGV4Y19pbmZvWzBdLCBleGNfaW5mb1sxXSwgZXhjX2luZm9bMl0KICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAuLi4KICAgICAgICAgS2V5RXJyb3IKCiAgICAgICBXZSB3cmFwIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gdG8gZ2l2ZSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbgogICAgICAgYWNjZXNzIHRvIHRoZSB0ZXN0IGFuZCBleGFtcGxlIGluZm9ybWF0aW9uLgoKICAgICAgIElmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgdGhlbiBhIERvY1Rlc3RGYWlsdXJlIGlzIHJhaXNlZDoKCiAgICAgICAgID4+PiB0ZXN0ID0gRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KCcnJwogICAgICAgICAuLi4gICAgICA+Pj4geCA9IDEKICAgICAgICAgLi4uICAgICAgPj4+IHgKICAgICAgICAgLi4uICAgICAgMgogICAgICAgICAuLi4gICAgICAnJycsIHt9LCAnZm9vJywgJ2Zvby5weScsIDApCgogICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAuLi4gICAgcnVubmVyLnJ1bih0ZXN0KQogICAgICAgICAuLi4gZXhjZXB0IERvY1Rlc3RGYWlsdXJlLCBmYWlsdXJlOgogICAgICAgICAuLi4gICAgcGFzcwoKICAgICAgIERvY1Rlc3RGYWlsdXJlIG9iamVjdHMgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHRlc3Q6CgogICAgICAgICA+Pj4gZmFpbHVyZS50ZXN0IGlzIHRlc3QKICAgICAgICAgVHJ1ZQoKICAgICAgIEFzIHdlbGwgYXMgdG8gdGhlIGV4YW1wbGU6CgogICAgICAgICA+Pj4gZmFpbHVyZS5leGFtcGxlLndhbnQKICAgICAgICAgJzJcbicKCiAgICAgICBhbmQgdGhlIGFjdHVhbCBvdXRwdXQ6CgogICAgICAgICA+Pj4gZmFpbHVyZS5nb3QKICAgICAgICAgJzFcbicKCiAgICAgICBJZiBhIGZhaWx1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IGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGU7IGJ5IGRlZmF1bHQKICAgIHVzZSBtLl9fbmFtZV9fLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJnbG9icyIgZ2l2ZXMgYSBkaWN0IHRvIGJlIHVzZWQgYXMgdGhlIGdsb2JhbHMKICAgIHdoZW4gZXhlY3V0aW5nIGV4YW1wbGVzOyBieSBkZWZhdWx0LCB1c2UgbS5fX2RpY3RfXy4gIEEgY29weSBvZiB0aGlzCiAgICBkaWN0IGlzIGFjdHVhbGx5IHVzZWQgZm9yIGVhY2ggZG9jc3RyaW5nLCBzbyB0aGF0IGVhY2ggZG9jc3RyaW5nJ3MKICAgIGV4YW1wbGVzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZXh0cmFnbG9icyIgZ2l2ZXMgYSBkaWN0aW9uYXJ5IHRoYXQgc2hvdWxkIGJlCiAgICBtZXJnZWQgaW50byB0aGUgZ2xvYmFscyB0aGF0IGFyZSB1c2VkIHRvIGV4ZWN1dGUgZXhhbXBsZXMuICBCeQogICAgZGVmYXVsdCwgbm8gZXh0cmEgZ2xvYmFscyBhcmUgdXNlZC4gIFRoaXMgaXMgbmV3IGluIDIuNC4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAidmVyYm9zZSIgcHJpbnRzIGxvdHMgb2Ygc3R1ZmYgaWYgdHJ1ZSwgcHJpbnRzCiAgICBvbmx5IGZhaWx1cmVzIGlmIGZhbHNlOyBieSBkZWZhdWx0LCBpdCdzIHRydWUgaWZmICItdiIgaXMgaW4gc3lzLmFyZ3YuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJlcG9ydCIgcHJpbnRzIGEgc3VtbWFyeSBhdCB0aGUgZW5kIHdoZW4gdHJ1ZSwKICAgIGVsc2UgcHJpbnRzIG5vdGhpbmcgYXQgdGhlIGVuZC4gIEluIHZlcmJvc2UgbW9kZSwgdGhlIHN1bW1hcnkgaXMKICAgIGRldGFpbGVkLCBlbHNlIHZlcnkgYnJpZWYgKGluIGZhY3QsIGVtcHR5IGlmIGFsbCB0ZXN0cyBwYXNzZWQpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJvcHRpb25mbGFncyIgb3IncyB0b2dldGhlciBtb2R1bGUgY29uc3RhbnRzLAogICAgYW5kIGRlZmF1bHRzIHRvIDAuICBUaGlzIGlzIG5ldyBpbiAyLjMuICBQb3NzaWJsZSB2YWx1ZXMgKHNlZSB0aGUKICAgIGRvY3MgZm9yIGRldGFpbHMpOgoKICAgICAgICBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xCiAgICAgICAgRE9OVF9BQ0NFUFRfQkxBTktMSU5FCiAgICAgICAgTk9STUFMSVpFX1dISVRFU1BBQ0UKICAgICAgICBFTExJUFNJUwogICAgICAgIFNLSVAKICAgICAgICBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAogICAgICAgIFJFUE9SVF9VRElGRgogICAgICAgIFJFUE9SVF9DRElGRgogICAgICAgIFJFUE9SVF9ORElGRgogICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicmFpc2Vfb25fZXJyb3IiIHJhaXNlcyBhbiBleGNlcHRpb24gb24gdGhlCiAgICBmaXJzdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBvciBmYWlsdXJlLiBUaGlzIGFsbG93cyBmYWlsdXJlcyB0byBiZQogICAgcG9zdC1tb3J0ZW0gZGVidWdnZWQuCgogICAgQWR2YW5jZWQgdG9tZm9vbGVyeTogIHRlc3Rtb2QgcnVucyBtZXRob2RzIG9mIGEgbG9jYWwgaW5zdGFuY2Ugb2YKICAgIGNsYXNzIGRvY3Rlc3QuVGVzdGVyLCB0aGVuIG1lcmdlcyB0aGUgcmVzdWx0cyBpbnRvIChvciBjcmVhdGVzKQogICAgZ2xvYmFsIFRlc3RlciBpbnN0YW5jZSBkb2N0ZXN0Lm1hc3Rlci4gIE1ldGhvZHMgb2YgZG9jdGVzdC5tYXN0ZXIKICAgIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgdG9vLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgdW51c3VhbC4KICAgIFBhc3NpbmcgcmVwb3J0PTAgdG8gdGVzdG1vZCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0aGVuLCB0byBkZWxheQogICAgZGlzcGxheWluZyBhIHN1bW1hcnkuICBJbnZva2UgZG9jdGVzdC5tYXN0ZXIuc3VtbWFyaXplKHZlcmJvc2UpCiAgICB3aGVuIHlvdSdyZSBkb25lIGZpZGRsaW5nLgogICAgUpcAAABzHAAAAHRlc3Rtb2Q6IG1vZHVsZSByZXF1aXJlZDsgJXJS6gAAAFLnAAAAUhUBAABSLgAAAFL1AAAATigTAAAAUisAAABSPQAAAFI+AAAAUioAAABSNQAAAFI2AAAAUkEAAABSNAAAAFIQAAAAUhUAAABSEQAAAFJ3AAAAUk0BAABSVAEAAHQGAAAAbWFzdGVyUlYBAABSIwAAAFIYAQAAUhcBAAAoDAAAAFLBAAAAUicAAABSLgAAAFLnAAAAdAYAAAByZXBvcnRSFQEAAFL1AAAAdA4AAAByYWlzZV9vbl9lcnJvclLqAAAAdAYAAABmaW5kZXJ0BgAAAHJ1bm5lclIFAQAAKAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZG9jdGVzdC5weVIWAAAAAgcAAHMkAAAAAEUMBBUDDwEWAwwBDAMPAgYBGAIVAiUBEQIGAQ0CDAEJAg0CYwwAAAAPAAAABwAAAEMAAABzbAEAAHwDAHIcAHwBAAxyHAB0AABkAQCDAQCCAQBuAAB0AQB8AAB8AwB8AQCDAwBcAgB9DAB9AAB8AgBkBwBrCAByVQB0AwBqBABqBQB8AACDAQB9AgBuAAB8BABkBwBrCAByagBpAAB9BABuDAB8BABqBgCDAAB9BAB8CABkBwBrCQBykgB8BABqBwB8CACDAQABbgAAZAIAfAQAawcAcqsAZAMAfAQAZAIAPG4AAHwJAHLJAHQIAGQEAHwFAGQFAHwHAIMAAn0NAG4VAHQJAGQEAHwFAGQFAHwHAIMAAn0NAHwLAGQHAGsJAHL8AHwMAGoKAHwLAIMBAH0MAG4AAHwKAGoLAHwMAHwEAHwCAHwAAGQGAIMFAH0OAHwNAGoMAHwOAIMBAAF8BgByNwF8DQBqDQCDAAABbgAAdA4AZAcAawgAckwBfA0AYQ4Abg0AdA4Aag8AfA0AgwEAAXQQAHwNAGoRAHwNAGoSAIMCAFMoCAAAAHMNDQAACiAgICBUZXN0IGV4YW1wbGVzIGluIHRoZSBnaXZlbiBmaWxlLiAgUmV0dXJuICgjZmFpbHVyZXMsICN0ZXN0cykuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm1vZHVsZV9yZWxhdGl2ZSIgc3BlY2lmaWVzIGhvdyBmaWxlbmFtZXMKICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZDoKCiAgICAgIC0gSWYgIm1vZHVsZV9yZWxhdGl2ZSIgaXMgVHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGVuICJmaWxlbmFtZSIKICAgICAgICAgc3BlY2lmaWVzIGEgbW9kdWxlLXJlbGF0aXZlIHBhdGguICBCeSBkZWZhdWx0LCB0aGlzIHBhdGggaXMKICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIGNhbGxpbmcgbW9kdWxlJ3MgZGlyZWN0b3J5OyBidXQgaWYgdGhlCiAgICAgICAgICJwYWNrYWdlIiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gaXQgaXMgcmVsYXRpdmUgdG8gdGhhdAogICAgICAgICBwYWNrYWdlLiAgVG8gZW5zdXJlIG9zLWluZGVwZW5kZW5jZSwgImZpbGVuYW1lIiBzaG91bGQgdXNlCiAgICAgICAgICIvIiBjaGFyYWN0ZXJzIHRvIHNlcGFyYXRlIHBhdGggc2VnbWVudHMsIGFuZCBzaG91bGQgbm90CiAgICAgICAgIGJlIGFuIGFic29sdXRlIHBhdGggKGkuZS4sIGl0IG1heSBub3QgYmVnaW4gd2l0aCAiLyIpLgoKICAgICAgLSBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZSwgdGhlbiAiZmlsZW5hbWUiIHNwZWNpZmllcyBhbgogICAgICAgIG9zLXNwZWNpZmljIHBhdGguICBUaGUgcGF0aCBtYXkgYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgKHRvCiAgICAgICAgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJuYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgdGVzdDsgYnkgZGVmYXVsdAogICAgdXNlIHRoZSBmaWxlJ3MgYmFzZW5hbWUuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAicGFja2FnZSIgaXMgYSBQeXRob24gcGFja2FnZSBvciB0aGUKICAgIG5hbWUgb2YgYSBQeXRob24gcGFja2FnZSB3aG9zZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIHVzZWQgYXMgdGhlCiAgICBiYXNlIGRpcmVjdG9yeSBmb3IgYSBtb2R1bGUgcmVsYXRpdmUgZmlsZW5hbWUuICBJZiBubyBwYWNrYWdlIGlzCiAgICBzcGVjaWZpZWQsIHRoZW4gdGhlIGNhbGxpbmcgbW9kdWxlJ3MgZGlyZWN0b3J5IGlzIHVzZWQgYXMgdGhlIGJhc2UKICAgIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlIGZpbGVuYW1lcy4gIEl0IGlzIGFuIGVycm9yIHRvCiAgICBzcGVjaWZ5ICJwYWNrYWdlIiBpZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZS4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAiZ2xvYnMiIGdpdmVzIGEgZGljdCB0byBiZSB1c2VkIGFzIHRoZSBnbG9iYWxzCiAgICB3aGVuIGV4ZWN1dGluZyBleGFtcGxlczsgYnkgZGVmYXVsdCwgdXNlIHt9LiAgQSBjb3B5IG9mIHRoaXMgZGljdAogICAgaXMgYWN0dWFsbHkgdXNlZCBmb3IgZWFjaCBkb2NzdHJpbmcsIHNvIHRoYXQgZWFjaCBkb2NzdHJpbmcncwogICAgZXhhbXBsZXMgc3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJleHRyYWdsb2JzIiBnaXZlcyBhIGRpY3Rpb25hcnkgdGhhdCBzaG91bGQgYmUKICAgIG1lcmdlZCBpbnRvIHRoZSBnbG9iYWxzIHRoYXQgYXJlIHVzZWQgdG8gZXhlY3V0ZSBleGFtcGxlcy4gIEJ5CiAgICBkZWZhdWx0LCBubyBleHRyYSBnbG9iYWxzIGFyZSB1c2VkLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJ2ZXJib3NlIiBwcmludHMgbG90cyBvZiBzdHVmZiBpZiB0cnVlLCBwcmludHMKICAgIG9ubHkgZmFpbHVyZXMgaWYgZmFsc2U7IGJ5IGRlZmF1bHQsIGl0J3MgdHJ1ZSBpZmYgIi12IiBpcyBpbiBzeXMuYXJndi4KCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZyAicmVwb3J0IiBwcmludHMgYSBzdW1tYXJ5IGF0IHRoZSBlbmQgd2hlbiB0cnVlLAogICAgZWxzZSBwcmludHMgbm90aGluZyBhdCB0aGUgZW5kLiAgSW4gdmVyYm9zZSBtb2RlLCB0aGUgc3VtbWFyeSBpcwogICAgZGV0YWlsZWQsIGVsc2UgdmVyeSBicmllZiAoaW4gZmFjdCwgZW1wdHkgaWYgYWxsIHRlc3RzIHBhc3NlZCkuCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgIm9wdGlvbmZsYWdzIiBvcidzIHRvZ2V0aGVyIG1vZHVsZSBjb25zdGFudHMsCiAgICBhbmQgZGVmYXVsdHMgdG8gMC4gIFBvc3NpYmxlIHZhbHVlcyAoc2VlIHRoZSBkb2NzIGZvciBkZXRhaWxzKToKCiAgICAgICAgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMQogICAgICAgIERPTlRfQUNDRVBUX0JMQU5LTElORQogICAgICAgIE5PUk1BTElaRV9XSElURVNQQUNFCiAgICAgICAgRUxMSVBTSVMKICAgICAgICBTS0lQCiAgICAgICAgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKICAgICAgICBSRVBPUlRfVURJRkYKICAgICAgICBSRVBPUlRfQ0RJRkYKICAgICAgICBSRVBPUlRfTkRJRkYKICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFCgogICAgT3B0aW9uYWwga2V5d29yZCBhcmcgInJhaXNlX29uX2Vycm9yIiByYWlzZXMgYW4gZXhjZXB0aW9uIG9uIHRoZQogICAgZmlyc3QgdW5leHBlY3RlZCBleGNlcHRpb24gb3IgZmFpbHVyZS4gVGhpcyBhbGxvd3MgZmFpbHVyZXMgdG8gYmUKICAgIHBvc3QtbW9ydGVtIGRlYnVnZ2VkLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJwYXJzZXIiIHNwZWNpZmllcyBhIERvY1Rlc3RQYXJzZXIgKG9yCiAgICBzdWJjbGFzcykgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBleHRyYWN0IHRlc3RzIGZyb20gdGhlIGZpbGVzLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJlbmNvZGluZyIgc3BlY2lmaWVzIGFuIGVuY29kaW5nIHRoYXQgc2hvdWxkCiAgICBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGZpbGUgdG8gdW5pY29kZS4KCiAgICBBZHZhbmNlZCB0b21mb29sZXJ5OiAgdGVzdG1vZCBydW5zIG1ldGhvZHMgb2YgYSBsb2NhbCBpbnN0YW5jZSBvZgogICAgY2xhc3MgZG9jdGVzdC5UZXN0ZXIsIHRoZW4gbWVyZ2VzIHRoZSByZXN1bHRzIGludG8gKG9yIGNyZWF0ZXMpCiAgICBnbG9iYWwgVGVzdGVyIGluc3RhbmNlIGRvY3Rlc3QubWFzdGVyLiAgTWV0aG9kcyBvZiBkb2N0ZXN0Lm1hc3RlcgogICAgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSB0b28sIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB1bnVzdWFsLgogICAgUGFzc2luZyByZXBvcnQ9MCB0byB0ZXN0bW9kIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRoZW4sIHRvIGRlbGF5CiAgICBkaXNwbGF5aW5nIGEgc3VtbWFyeS4gIEludm9rZSBkb2N0ZXN0Lm1hc3Rlci5zdW1tYXJpemUodmVyYm9zZSkKICAgIHdoZW4geW91J3JlIGRvbmUgZmlkZGxpbmcuCiAgICBzOAAAAFBhY2thZ2UgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGZvciBtb2R1bGUtcmVsYXRpdmUgcGF0aHMuUjQAAABSlwAAAFLnAAAAUhUBAABpAAAAAE4oEwAAAFKYAAAAUlMAAABSKwAAAFJKAAAAUpkAAAB0CAAAAGJhc2VuYW1lUqwAAABS8QAAAFIVAAAAUhEAAAB0BgAAAGRlY29kZVLEAAAAUk0BAABSVAEAAFJpAQAAUlYBAABSIwAAAFIYAQAAUhcBAAAoDwAAAFJOAAAAUlAAAABSJwAAAFJPAAAAUi4AAABS5wAAAFJqAQAAUhUB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ICAgICAgIFRoZSBVbmV4cGVjdGVkRXhjZXB0aW9uIGNvbnRhaW5zIHRoZSB0ZXN0LCB0aGUgZXhhbXBsZSwgYW5kCiAgICAgICAgICAgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbjoKCiAgICAgICAgICAgICA+Pj4gZmFpbHVyZS50ZXN0IGlzIHRlc3QKICAgICAgICAgICAgIFRydWUKCiAgICAgICAgICAgICA+Pj4gZmFpbHVyZS5leGFtcGxlLndhbnQKICAgICAgICAgICAgICc0MlxuJwoKICAgICAgICAgICAgID4+PiBleGNfaW5mbyA9IGZhaWx1cmUuZXhjX2luZm8KICAgICAgICAgICAgID4+PiByYWlzZSBleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIGV4Y19pbmZvWzJdCiAgICAgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgIEtleUVycm9yCgogICAgICAgICAgIElmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgdGhlbiBhIERvY1Rlc3RGYWlsdXJlIGlzIHJhaXNlZDoKCiAgICAgICAgICAgICA+Pj4gdGVzdCA9IERvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdCgnJycKICAgICAgICAgICAgIC4uLiAgICAgID4+PiB4ID0gMQogICAgICAgICAgICAgLi4uICAgICAgPj4+IHgKICAgICAgICAgICAgIC4uLiAgICAgIDIKICAgICAgICAgICAgIC4uLiAgICAgICcnJywge30sICdmb28nLCAnZm9vLnB5JywgMCkKICAgICAgICAgICAgID4+PiBjYXNlID0gRG9jVGVzdENhc2UodGVzdCkKCiAgICAgICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAgICAgLi4uICAgIGNhc2UuZGVidWcoKQogICAgICAgICAgICAgLi4uIGV4Y2VwdCBEb2NUZXN0RmFpbHVyZSwgZmFpbHVyZToKICAgICAgICAgICAgIC4uLiAgICBwYXNzCgogICAgICAgICAgIERvY1Rlc3RGYWlsdXJlIG9iamVjdHMgcHJvdmlkZSBhY2Nlc3Mg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c3QgY2FzZS4gIElmIGFueSBvZiB0aGUKICAgIHRlc3RzIGluIGEgZG9jIHN0cmluZyBmYWlsLCB0aGVuIHRoZSB0ZXN0IGNhc2UgZmFpbHMuICBBbiBleGNlcHRpb24KICAgIGlzIHJhaXNlZCBzaG93aW5nIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3QgYW5kIGEKICAgIChzb21ldGltZXMgYXBwcm94aW1hdGUpIGxpbmUgbnVtYmVyLgoKICAgIFRoZSBgbW9kdWxlYCBhcmd1bWVudCBwcm92aWRlcyB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4gIFRoZSBhcmd1bWVudAogICAgY2FuIGJlIGVpdGhlciBhIG1vZHVsZSBvciBhIG1vZHVsZSBuYW1lLgoKICAgIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY2FsbGluZyBtb2R1bGUgaXMgdXNlZC4KCiAgICBBIG51bWJlciBvZiBvcHRpb25zIG1heSBiZSBwcm92aWRlZCBhcyBrZXl3b3JkIGFyZ3VtZW50czoKCiAgICBzZXRVcAogICAgICBBIHNldC11cCBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBydW5uaW5nIHRoZQogICAgICB0ZXN0cyBpbiBlYWNoIGZpbGUuIFRoZSBzZXRVcCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHNldFVwIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIHRlc3QgZ2xvYmFscyBhcyB0aGUKICAgICAgZ2xvYnMgYXR0cmlidXRlIG9mIHRoZSB0ZXN0IHBhc3NlZC4KCiAgICB0ZWFyRG93bgogICAgICBBIHRlYXItZG93biBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gIFRoZSB0ZWFyRG93biBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERvY1Rlc3QKICAgICAgb2JqZWN0LiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhl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bGUncwogICAgICBkaXJlY3Rvcnk7IGJ1dCBpZiB0aGUgInBhY2thZ2UiIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgdGhlbgogICAgICB0aGV5IGFyZSByZWxhdGl2ZSB0byB0aGF0IHBhY2thZ2UuICBUbyBlbnN1cmUgb3MtaW5kZXBlbmRlbmNlLAogICAgICAiZmlsZW5hbWUiIHNob3VsZCB1c2UgIi8iIGNoYXJhY3RlcnMgdG8gc2VwYXJhdGUgcGF0aAogICAgICBzZWdtZW50cywgYW5kIG1heSBub3QgYmUgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLiwgaXQgbWF5IG5vdAogICAgICBiZWdpbiB3aXRoICIvIikuCgogICAgICBJZiAibW9kdWxlX3JlbGF0aXZlIiBpcyBGYWxzZSwgdGhlbiB0aGUgZ2l2ZW4gZmlsZSBwYXRocyBhcmUKICAgICAgaW50ZXJwcmV0ZWQgYXMgb3Mtc3BlY2lmaWMgcGF0aHMuICBUaGVzZSBwYXRocyBtYXkgYmUgYWJzb2x1dGUKICAgICAgb3IgcmVsYXRpdmUgKHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS4KCiAgICBwYWNrYWdlCiAgICAgIEEgUHl0aG9uIHBhY2thZ2Ugb3IgdGhlIG5hbWUgb2YgYSBQeXRob24gcGFja2FnZSB3aG9zZSBkaXJlY3RvcnkKICAgICAgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGJhc2UgZGlyZWN0b3J5IGZvciBtb2R1bGUgcmVsYXRpdmUgcGF0aHMuCiAgICAgIElmICJwYWNrYWdlIiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBjYWxsaW5nIG1vZHVsZSdzCiAgICAgIGRpcmVjdG9yeSBpcyB1c2VkIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIHJlbGF0aXZlCiAgICAgIGZpbGVuYW1lcy4gIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgInBhY2thZ2UiIGlmCiAgICAgICJtb2R1bGVfcmVsYXRpdmUiIGlzIEZhbHNlLgoKICAgIHNldFVwCiAgICAgIEEgc2V0LXVwIGZ1bmN0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgdGhlCiAgICAgIHRlc3RzIGluIGVhY2ggZmlsZS4gVGhlIHNldFVwIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGEgRG9jVGVzdAogICAgICBvYmplY3QuICBUaGUgc2V0VXAgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgdGVzdCBnbG9iYWxzIGFzIHRoZQogICAgICBnbG9icyBhdHRyaWJ1dGUgb2YgdGhlIHRlc3QgcGFzc2VkLgoKICAgIHRlYXJEb3duCiAgICAgIEEgdGVhci1kb3duIGZ1bmN0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgcnVubmluZyB0aGUKICAgICAgdGVzdHMgaW4gZWFjaCBmaWxlLiAgVGhlIHRlYXJEb3duIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGEgRG9jVGVzdAogICAgICBvYmplY3QuICBUaGUgdGVhckRvd24gZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgdGVzdCBnbG9iYWxzIGFzIHRoZQogICAgICBnbG9icyBhdHRyaWJ1dGUgb2YgdGhlIHRlc3QgcGFzc2VkLgoKICAgIGdsb2JzCiAgICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGluaXRpYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIHRlc3RzLgoKICAgIG9wdGlvbmZsYWdzCiAgICAgIEEgc2V0IG9mIGRvY3Rlc3Qgb3B0aW9uIGZsYWdzIGV4cHJlc3NlZCBhcyBhbiBpbnRlZ2VyLgoKICAgIHBhcnNlcgogICAgICBBIERvY1Rlc3RQYXJzZXIgKG9yIHN1YmNsYXNzKSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGV4dHJhY3QKICAgICAgdGVzdHMgZnJvbSB0aGUgZmlsZXMuCgogICAgZW5jb2RpbmcKICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgIFJQAAAAUk8AAAAoBwAAAFKDAQAAUpcBAABSKgAAAFJ4AAAAUkQAAABSmAEAAFKeAQAAKAQAAAB0BQAAAHBhdGhzdAIAAABrd1KaAQAAUpkAAAAoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kb2N0ZXN0LnB5UhsAAACRCQAAcwwAAAAAOAwFEgEcAg0BGgJjAQAAAAUAAAAGAAAAQwAAAHMoAQAAZwAAfQEAeL0AdAAAgwAAagEAfAAAgwEARF2pAH0CAHQCAHwCAHQDAIMCAHKSAHwBAGoEAHwCAGoFAGQBACCDAQABfAIAagYAfQMAfAMAcsIAfAEAagQAZAIAgwEAAXwBAGcAAHwDAGoHAGQDAIMBAGQBACBEXRAAfQQAZAQAfAQAF14CAHF1ADd9AQBxwgBxGQB8AQBnAAB8AgBqBwBkAwCDAQBkAQAgRF0SAH0EAHQIAHwEAIMBAF4CAHGpADd9AQBxGQBXeCQAfAEAcuwAfAEAZAEAGWQFAGsCAHLsAHwBAGoJAIMAAAFxyQBXeCcAfAEAchYBfAEAZAYAGWQFAGsCAHIWAXwBAGoJAGQGAIMBAAFx8ABXZAMAagoAfAEAgwEAZAMAF1MoBwAAAHN2BQAARXh0cmFjdCBzY3JpcHQgZnJvbSB0ZXh0IHdpdGggZXhhbXBsZXMuCgogICAgICAgQ29udmVydHMgdGV4dCB3aXRoIGV4YW1wbGVzIHRvIGEgUHl0aG9uIHNjcmlwdC4gIEV4YW1wbGUgaW5wdXQgaXMKICAgICAgIGNvbnZlcnRlZCB0byByZWd1bGFyIGNvZGUuICBFeGFtcGxlIG91dHB1dCBhbmQgYWxsIG90aGVyIHdvcmRzCiAgICAgICBhcmUgY29udmVydGVkIHRvIGNvbW1lbnRzOgoKICAgICAgID4+PiB0ZXh0ID0gJycnCiAgICAgICAuLi4gICAgICAgSGVyZSBhcmUgZXhhbXBsZXMgb2Ygc2ltcGxlIG1hdGguCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgUHl0aG9uIGhhcyBzdXBlciBhY2N1cmF0ZSBpbnRlZ2VyIGFkZGl0aW9uCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgPj4+IDIgKyAyCiAgICAgICAuLi4gICAgICAgICAgIDUKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBBbmQgdmVyeSBmcmllbmRseSBlcnJvciBtZXNzYWdlczoKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICA+Pj4gMS8wCiAgICAgICAuLi4gICAgICAgICAgIFRvIEluZmluaXR5CiAgICAgICAuLi4gICAgICAgICAgIEFuZAogICAgICAgLi4uICAgICAgICAgICBCZXlvbmQKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICBZb3UgY2FuIHVzZSBsb2dpYyBpZiB5b3Ugd2FudDoKICAgICAgIC4uLgogICAgICAgLi4uICAgICAgICAgICA+Pj4gaWYgMDoKICAgICAgIC4uLiAgICAgICAgICAgLi4uICAgIGJsYWgKICAgICAgIC4uLiAgICAgICAgICAgLi4uICAgIGJsYWgKICAgICAgIC4uLiAgICAgICAgICAgLi4uCiAgICAgICAuLi4KICAgICAgIC4uLiAgICAgICAgICAgSG8gaHVtCiAgICAgICAuLi4gICAgICAgICAgICcnJwoKICAgICAgID4+PiBwcmludCBzY3JpcHRfZnJvbV9leGFtcGxlcyh0ZXh0KQogICAgICAgIyBIZXJlIGFyZSBleGFtcGxlcyBvZiBzaW1wbGUgbWF0aC4KICAgICAgICMKICAgICAgICMgICAgIFB5dGhvbiBoYXMgc3VwZXIgYWNjdXJhdGUgaW50ZWdlciBhZGRpdGlvbgogICAgICAgIwogICAgICAgMiArIDIKICAgICAgICMgRXhwZWN0ZWQ6CiAgICAgICAjIyA1CiAgICAgICAjCiAgICAgICAjICAgICBBbmQgdmVyeSBmcmllbmRseSBlcnJvciBtZXNzYWdlczoKICAgICAgICMKICAgICAgIDEvMAogICAgICAgIyBFeHBlY3RlZDoKICAgICAgICMjIFRvIEluZmluaXR5CiAgICAgICAjIyBBbmQKICAgICAgICMjIEJleW9uZAogICAgICAgIwogICAgICAgIyAgICAgWW91IGNhbiB1c2UgbG9naWMgaWYgeW91IHdhbnQ6CiAgICAgICAjCiAgICAgICBpZiAwOgogICAgICAgICAgYmxhaAogICAgICAgICAgYmxhaAogICAg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LXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSKgAAAJEKAABzAgAAAAAIKAYAAABSNAAAAFJxAAAAUpQAAABSigAAAFKwAQAAUioAAAAoAAAAACgAAAAAKAAAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RvY3Rlc3QucHlSrwEAAG8KAABzCAAAAAYMBgIJCgkKc8QAAAAKICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgb2YgYSBzdHJpbmcgb2JqZWN0LCBzZWFyY2hlZCBhcy1pcy4KICAgICAgICAgICAgICAgICAgICAgID4+PiB4ID0gMTsgeSA9IDIKICAgICAgICAgICAgICAgICAgICAgID4+PiB4ICsgeSwgeCAqIHkKICAgICAgICAgICAgICAgICAgICAgICgzLCAyKQogICAgICAgICAgICAgICAgICAgICAgUrwAAABz3AIAAAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAyLjIsIGJvb2xlYW4gZXhwcmVzc2lvbnMgZGlzcGxheWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgb3IgMS4gIEJ5IGRlZmF1bHQsIHdlIHN0aWxsIGFjY2VwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xIHRvIHRoZSBuZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3MgYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+PiA0ID09IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gNCA9PSA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPiA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDQgPiA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMUAAAAYm9vbC1pbnQgZXF1aXZhbGVuY2Vz5gAAAAogICAgICAgICAgICAgICAgQmxhbmsgbGluZXMgY2FuIGJlIG1hcmtlZCB3aXRoIDxCTEFOS0xJTkU+OgogICAgICAgICAgICAgICAgICAgID4+PiBwcmludCAnZm9vXG5cbmJhclxuJwogICAgICAgICAgICAgICAgICAgIGZvbwogICAgICAgICAgICAgICAgICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgICAgICAgICAgYmFyCiAgICAgICAgICAgICAgICAgICAgPEJMQU5LTElORT4KICAgICAgICAgICAgcwsAAABibGFuayBsaW5lc3PzAAAACiAgICAgICAgICAgICAgICBJZiB0aGUgZWxsaXBzaXMgZmxhZyBpcyB1c2VkLCB0aGVuICcuLi4nIGNhbiBiZSB1c2VkIHRvCiAgICAgICAgICAgICAgICBlbGlkZSBzdWJzdHJpbmdzIGluIHRoZSBkZXNpcmVkIG91dHB1dDoKICAgICAgICAgICAgICAgICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTAwMCkgI2RvY3Rlc3Q6ICtFTExJUFNJUwogICAgICAgICAgICAgICAgICAgIFswLCAxLCAyLCAuLi4sIDk5OV0KICAgICAgICAgICAgdAgAAABlbGxpcHNpc3N8AQAACiAgICAgICAgICAgICAgICBJZiB0aGUgd2hpdGVzcGFjZSBub3JtYWxpemF0aW9uIGZsYWcgaXMgdXNlZCwgdGhlbgogICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBh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