A/MNClNcrFFjAAAAAAAAAAAEAAAAQAAAAHOxAwAAZAAAZAEAbAAAWgAAZAAAZAEAbAEAWgEAZAAAZAIAbAIAbQMAWgMAAWQAAGQDAGwEAG0FAFoFAAFkAABkBABsBgBtBwBaCAABZQUAZAUAZAYAZAcAgwEBWgkAZQUAZAgAZAYAZAcAgwEBWgoAZAkAWgsAZAoAWgwAZAsAWg0AZAwAhAAAWg4AZA0AhAAAWg8AZRAAZA4AhAEAWhEAZA8AhAAAWhIAZBAAhAAAWhMAZBEAhAAAWhQAZBIAhAAAWhUAZBMAhAAAWhYAZBQAhAAAWhcAZBUAhAAAWhgAZBYAhAAAWhkAZBcAhAAAWhoAZBgAhAAAWhsAZBkAhAAAWhwAZBoAhAAAWh0AZBsAhAAAWh4AZBwAhAAAWh8AZB0AhAAAWiAAZB4AhAAAWiEAZB8AhAAAWiIAZCAAhAAAWiMAZCEAhAAAWiQAZCIAhAAAWiUAZCMAhAAAWiYAZCQAhAAAWicAZCUAhAAAWigAZCYAhAAAWikAZCcAhAAAWioAZCgAhAAAWisAZCkAhAAAWiwAZCoAhAAAWi0AZCsAWi4AZCwAhAAAWi8AZC0AhAAAWjAAZC4AhAAAWjEAZC8AhAAAWjIAZDAAhAAAWjMAZDEAhAAAWjQAZDIAhAAAWjUAaQAAWjYAZDMAZTYAZDQAPGQ1AGU2AGQ2ADxkNwBlNgBkOAA8ZDkAZTYAZDoAPGQ7AGU2AGQ8ADxkPQBlNgBkPgA8ZD8AZTYAZEAAPGRBAGU2AGRCADxkQwBqNwBlAQBqOABlCQBlEACDAgCDAQBlNgBkRAA8ZEUAZAEAZEYAhAIAWjoAZEcAhAAAWjsAZEgAhAAAWjwAaQAAWj0AZEkAZT0AZEoAPGRLAGU9AGRMADxkTQCEAABaPgBkTgCEAABaPwBkTwCEAABaQABkUACEAABaQQBkUQCEAABaQgBkUgCEAABaQwBkUwCEAABaRABkVACEAABaRQBkVQBkbABkVgCEAACDAABZWkYAZFcAhAAAWkcAZFgAWkgAZFkAhAAAWkkAZFoAhAAAWkoAZFsAhAAAWksAZFwAhAAAWkwAZF0AhAAAWk0AZF4AhAAAWk4AZF8AhAAAWk8AZGAAhAAAWlAAZGEAhAAAWlEAZGIAhAAAWlIAZGMAhAAAWlMAZGQAhAAAWlQAZGUAhAAAWlUAZGYAhAAAWlYAZGcAZVcAZgEAZGgAhAAAgwAAWVpYAGRpAGRqAIQBAFpZAGVaAGRrAGsCAHKtA2VZAIMAAAFuAABkAQBTKG0AAABp/////04oAQAAAHQMAAAAdGVzdF9zdXBwb3J0KAEAAAB0CAAAAGZpbmRmaWxlKAEAAAB0CwAAAEVsZW1lbnRUcmVlcwoAAABzaW1wbGUueG1sdAYAAABzdWJkaXJ0CwAAAHhtbHRlc3RkYXRhcw0AAABzaW1wbGUtbnMueG1sc4QAAAA8Ym9keT4KICA8dGFnIGNsYXNzPSdhJz50ZXh0PC90YWc+CiAgPHRhZyBjbGFzcz0nYicgLz4KICA8c2VjdGlvbj4KICAgIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogIDwvc2VjdGlvbj4KPC9ib2R5PgpzegAAADxzZWN0aW9uPgogIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogIDxuZXh0dGFnIC8+CiAgPG5leHRzZWN0aW9uPgogICAgPHRhZyAvPgogIDwvbmV4dHNlY3Rpb24+Cjwvc2VjdGlvbj4Kc3kAAAAKPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICA8dGFnPnRleHQ8L3RhZz4KICA8dGFnIC8+CiAgPHNlY3Rpb24+CiAgICA8dGFnPnN1YnRleHQ8L3RhZz4KICA8L3NlY3Rpb24+CjwvYm9keT4KYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOaAAAACiAgICBJbXBvcnQgc2FuaXR5LgoKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudEluY2x1ZGUKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQGAAAAc2FuaXR5OAAAAHMAAAAAYwEAAAABAAAAAwAAAEMAAABzHwAAAHQAAHwAAGQBAIMCAHMbAHwAAEdkAgBHSG4AAGQAAFMoAwAAAE50CAAAAF9fY2FsbF9fcwwAAABub3QgY2FsbGFibGUoAQAAAHQHAAAAaGFzYXR0cigBAAAAdAYAAABtZXRob2QoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAwAAABjaGVja19tZXRob2RBAAAAcwQAAAAAAQ8BYwIAAAAGAAAAAwAAAEsAAABzXAAAAGQBAGQAAGwAAH0DAHwDAGoAAIMAAH0EAHQBAGoCAHwAAIMBAH0FAHwFAGoDAHwEAHwCAI0BAAF8AQByRwB8BABqBACDAABTfAQAagUAZAIAgwEAAXwEAFNkAABTKAMAAABOaf////9pAAAAACgGAAAAdAgAAABTdHJpbmdJT3QCAAAARVRSAgAAAHQFAAAAd3JpdGV0CAAAAGdldHZhbHVldAQAAABzZWVrKAYAAAB0BAAAAGVsZW10CQAAAHRvX3N0cmluZ3QHAAAAb3B0aW9uc1IKAAAAdAQAAABmaWxldAQAAAB0cmVlKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAc2VyaWFsaXplRQAAAHMQAAAAAAEMAQwBDwEQAQYBCgINAWMBAAAAAQAAAAIAAABDAAAAcx0AAAB8AABqAAB0AQBqAgBrAgByFgBkAQBTfAAAagAAUygCAAAATnMJAAAAPENvbW1lbnQ+KAMAAAB0AwAAAHRhZ1ILAAAAdAcAAABDb21tZW50KAEAAABSDwAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAHN1bW1hcml6ZVAAAABzBgAAAAABEgEEAWMBAAAAAgAAAAQAAABDAAAAcx0AAABnAAB8AABEXRIAfQEAdAAAfAEAgwEAXgIAcQcAUygBAAAATigBAAAAUhcAAAAoAgAAAHQDAAAAc2VxUg8AAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dA4AAABzdW1tYXJpemVfbGlzdFUAAABzAgAAAAABYwEAAAACAAAABAAAAEMAAABzYwAAAHhcAHwAAGoAAIMAAERdTgB9AQB8AQBqAQByNwB8AQBqAQBqAgBkAQBkAgCDAgB8AQBfAQBuAAB8AQBqAwByDQB8AQBqAwBqAgBkAQBkAgCDAgB8AQBfAwBxDQBxDQBXZAAAUygDAAAATnMCAAAADQpzAQAAAAooBAAAAHQEAAAAaXRlcnQEAAAAdGV4dHQHAAAAcmVwbGFjZXQEAAAAdGFpbCgCAAAAUhMAAABSDwAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DgAAAG5vcm1hbGl6ZV9jcmxmWAAAAHMKAAAAAAETAQkBGwEJAWMBAAAAAwAAAAMAAABDAAAAc1kAAAB0AAB8AACDAQABeCwAfAAARF0kAH0BAHQAAHwBAIMBAGQBAGsDAHIRAGQCAHwBABZHSHERAHERAFd8AABkAwAXfQIAfAAAZAQAF30CAHwAAGQFACABZAAAUygGAAAATmkBAAAAcyUAAABleHBlY3RlZCBvbmUtY2hhcmFjdGVyIHN0cmluZywgZ290ICVydAAAAAB0AQAAACBpAAAAACgBAAAAdAMAAABsZW4oAwAAAHQGAAAAc3RyaW5ndAQAAABjaGFydAoAAABuZXdfc3RyaW5nKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQMAAAAY2hlY2tfc3RyaW5nXwAAAHMOAAAAAAEKAQ0BEgEQAQoBCgFjAQAAAAUAAAADAAAAQwAAAHNrAAAAdAAAfAAAgwEAAXwAAGoBAIMAAH0BAHwAAGoCAIMAAH0CAHgYAHwBAERdEAB9AwB8AAB8AwAZfQQAcSkAV2QBAHwAAGQCADx8AABkAgAZZAEAawMAcmcAZAMAfAAAZAIAGRZHSG4AAGQAAFMoBAAAAE50BQAAAHZhbHVldAMAAABrZXlzHQAAAGV4cGVjdGVkIHZhbHVlIHN0cmluZywgZ290ICVyKAMAAABSIQAAAHQEAAAAa2V5c3QFAAAAaXRlbXMoBQAAAHQHAAAAbWFwcGluZ1IoAAAAUikAAABSJwAAAHQEAAAAaXRlbSgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DQAAAGNoZWNrX21hcHBpbmdoAAAAcxAAAAAAAQoBDAEMAQ0BDgEKARABYwEAAAACAAAAAwAAAEMAAABz6gAAAHQAAGoBAHwAAIMBAHMXAGQBAEdIbgAAdAIAfAAAZAIAgwIAcy4AZAMAR0huAAB0AgB8AABkBACDAgBzRQBkBQBHSG4AAHQCAHwAAGQGAIMCAHNcAGQHAEdIbgAAdAIAfAAAZAgAgwIAc3MAZAkAR0huAAB0AwB8AABqBACDAQABdAUAfAAAagYAgwEAAXwAAGoHAGQAAGsJAHKsAHQDAHwAAGoHAIMBAAFuAAB8AABqCQBkAABrCQByywB0AwB8AABqCQCDAQABbgAAeBgAfAAARF0QAH0BAHQKAHwBAIMBAAFx0gBXZAAAUygKAAAATnMOAAAAbm90IGFuIGVsZW1lbnRSFQAAAHMNAAAAbm8gdGFnIG1lbWJlcnQGAAAAYXR0cmlicxAAAABubyBhdHRyaWIgbWVtYmVyUhsAAABzDgAAAG5vIHRleHQgbWVtYmVyUh0AAABzDgAAAG5vIHRhaWwgbWVtYmVyKAsAAABSCwAAAHQJAAAAaXNlbGVtZW50UgcAAABSJQAAAFIVAAAAUiwAAABSLQAAAFIbAAAAdAQAAABOb25lUh0AAAB0DQAAAGNoZWNrX2VsZW1lbnQoAgAAAHQHAAAAZWxlbWVudFIPAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVIwAAAAcgAAAHMkAAAAAAEPAQgBDwEIAQ8BCAEPAQgBDwEIAg0BDQEPARABDwEQAQ0BYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHM+BgAACiAgICBUZXN0IGVsZW1lbnQgdHJlZSBpbnRlcmZhY2UuCgogICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGNoZWNrX2VsZW1lbnQoZWxlbWVudCkKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkKICAgID4+PiBjaGVja19lbGVtZW50KHRyZWUuZ2V0cm9vdCgpKQoKICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidFx4ZTRnIiwga2V5PSJ2YWx1ZSIpCiAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCiAgICA+Pj4gcmVwcihlbGVtZW50KSAgICMgZG9jdGVzdDogK0VMTElQU0lTCiAgICAiPEVsZW1lbnQgJ3RcXHhlNGcnIGF0IDB4Li4uPiIKICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCgogICAgTWFrZSBzdXJlIGFsbCBzdGFuZGFyZCBlbGVtZW50IG1ldGhvZHMgZXhpc3QuCgogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmFwcGVuZCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5leHRlbmQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaW5zZXJ0KQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRjaGlsZHJlbikKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmRhbGwpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuY2xlYXIpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0KQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnNldCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5rZXlzKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZW1zKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXIpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcnRleHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0aXRlcmF0b3IpCgogICAgVGhlc2UgbWV0aG9kcyByZXR1cm4gYW4gaXRlcmFibGUuIFNlZSBidWcgNjQ3Mi4KCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcigidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgiKiIpLm5leHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcigidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgiKiIpLm5leHQpCgogICAgVGhlc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQ6CgogICAgPj4+IGFzc2VydCBFVC5YTUwgPT0gRVQuZnJvbXN0cmluZwogICAgPj4+IGFzc2VydCBFVC5QSSA9PSBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KICAgID4+PiBhc3NlcnQgRVQuWE1MUGFyc2VyID09IEVULlhNTFRyZWVCdWlsZGVyCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAGludGVyZmFjZYoAAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzSwYAAAogICAgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCgogICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JwogICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ0YWcyIikKICAgID4+PiBlbGVtLmFwcGVuZChlKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzxib2R5Pjx0YWcgLz48dGFnMiAvPjwvYm9keT4nCiAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8Ym9keT48dGFnIC8+PC9ib2R5PicKICAgID4+PiBlbGVtLmluc2VydCgwLCBlKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzxib2R5Pjx0YWcyIC8+PHRhZyAvPjwvYm9keT4nCiAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKICAgID4+PiBlbGVtLmV4dGVuZChbZV0pCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKICAgID4+PiBlbGVtLnJlbW92ZShlKQoKICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMQogICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCiAgICA+Pj4gc3ViZWxlbWVudCA9IEVULkVsZW1lbnQoInN1YnRhZyIpCiAgICA+Pj4gZWxlbWVudC5hcHBlbmQoc3ViZWxlbWVudCkKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAyCiAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwogICAgPj4+IGVsZW1lbnQuaW5zZXJ0KDAsIHN1YmVsZW1lbnQpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMwogICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCiAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA0CiAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwogICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgNQogICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCiAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFZhbHVlRXJyb3I6IGxpc3QucmVtb3ZlKHgpOiB4IG5vdCBpbiBsaXN0CiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgNgogICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCiAgICA+Pj4gZWxlbWVudFswOjBdID0gW3N1YmVsZW1lbnQsIHN1YmVsZW1lbnQsIHN1YmVsZW1lbnRdCiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnRbMV0pCiAgICAnPHN1YnRhZyAvPicKICAgID4+PiBlbGVtZW50WzE6OV0gPT0gW2VsZW1lbnRbMV0sIGVsZW1lbnRbMl1dCiAgICBUcnVlCiAgICA+Pj4gZWxlbWVudFs6OToyXSA9PSBbZWxlbWVudFswXSwgZWxlbWVudFsyXV0KICAgIFRydWUKICAgID4+PiBkZWwgZWxlbWVudFsxOjJdCiAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpCiAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PHN1YnRhZyAvPjwvdGFnPicKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAc2ltcGxlb3BzvQAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMZAQAACiAgICBUZXN0IENEQVRBIGhhbmRsaW5nIChldGMpLgoKICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPmhlbGxvPC90YWc+IikpCiAgICAnPHRhZz5oZWxsbzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPiYjMTA0OyYjMTAxOyYjMTA4OyYjMTA4OyYjMTExOzwvdGFnPiIpKQogICAgJzx0YWc+aGVsbG88L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz48IVtDREFUQVtoZWxsb11dPjwvdGFnPiIpKQogICAgJzx0YWc+aGVsbG88L3RhZz4nCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0BQAAAGNkYXRh9QAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOZAwAACiAgICBUZXN0IGZpbmQgbWV0aG9kcyB1c2luZyB0aGUgZWxlbWVudHBhdGggZmFsbGJhY2suCgogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQoKICAgID4+PiBDdXJyZW50RWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5FbGVtZW50UGF0aAogICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoID0gRWxlbWVudFRyZWUuX1NpbXBsZUVsZW1lbnRQYXRoKCkKICAgID4+PiBlbGVtID0gRWxlbWVudFRyZWUuWE1MKFNBTVBMRV9YTUwpCiAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCiAgICAndGV4dCcKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQogICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKICAgICdkZWZhdWx0JwogICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQogICAgJ3RleHQnCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgIFsndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQoKICAgIFBhdGggc3ludGF4IGRvZXNuJ3Qgd29yayBpbiB0aGlzIGNhc2UuCgogICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi90YWciKQogICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCiAgICBbXQoKICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEN1cnJlbnRFbGVtZW50UGF0aAogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAoAAABzaW1wbGVmaW5kAgEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHNuDwAACiAgICBUZXN0IGZpbmQgbWV0aG9kcyAoaW5jbHVkaW5nIHhwYXRoIHN5bnRheCkuCgogICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgID4+PiBlbGVtLmZpbmQoInRhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gZWxlbS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiBlbGVtLmZpbmQoIi4vdGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi4vdGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi90YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gZWxlbVsyXSA9IEVULlhNTChTQU1QTEVfU0VDVElPTikKICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vbmV4dHRhZyIpLnRhZwogICAgJ25leHR0YWcnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgic2VjdGlvbi90YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidG9nIikKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0b2cvZm9vIikKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQogICAgJ3RleHQnCiAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi9uZXh0dGFnIikKICAgICcnCiAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi9uZXh0dGFnIiwgImRlZmF1bHQiKQogICAgJycKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQogICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKICAgICdkZWZhdWx0JwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQogICAgJ3RleHQnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRvZy9mb28iKQogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIiwgImRlZmF1bHQiKQogICAgJ2RlZmF1bHQnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoIi4vdGFnIikKICAgICd0ZXh0JwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCIvdGFnIikKICAgICd0ZXh0JwogICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgICdzdWJ0ZXh0JwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCiAgICAnc3VidGV4dCcKICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4iKSkKICAgIFsnYm9keSddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgIFsndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0b2ciKSkKICAgIFtdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0b2cvZm9vIikpCiAgICBbXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKiIpKQogICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnLCAndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uL3RhZyIpKQogICAgWyd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8qIikpCiAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKSkKICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi8vKiIpKQogICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8qIikpCiAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLyoiKSkKICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovdGFnIikpCiAgICBbJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLy4vdGFnIikpCiAgICBbJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJywgJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8uL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3NdIikpCiAgICBbJ3RhZycsICd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3M9J2EnXSIpKQogICAgWyd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzcz0nYiddIikpCiAgICBbJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BpZF0iKSkKICAgIFsndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3NlY3Rpb25bdGFnXSIpKQogICAgWydzZWN0aW9uJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3NlY3Rpb25bZWxlbWVudF0iKSkKICAgIFtdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLi90YWciKSkKICAgIFtdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy4uL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIuL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KCiAgICBGb2xsb3dpbmcgZXhhbXBsZSBpcyBpbnZhbGlkIGluIDEuMi4KICAgIEEgbGVhZGluZyAnKicgaXMgYXNzdW1lZCBpbiAxLjMuCgogICAgPj4+IGVsZW0uZmluZGFsbCgic2VjdGlvbi8vIikgPT0gZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8qIikKICAgIFRydWUKCiAgICBFVCdzIFBhdGggbW9kdWxlIGhhbmRsZXMgdGhpcyBjYXNlIGluY29ycmVjdGx5OyB0aGlzIGdpdmVzCiAgICBhIHdhcm5pbmcgaW4gMS4zLCBhbmQgdGhlIGJlaGF2aW91ciB3aWxsIGJlIG1vZGlmaWVkIGluIDEuNC4KCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiL3RhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MX05TKQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCiAgICBbXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgie2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQogICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8ve2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQogICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0BAAAAGZpbmQlAQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc38BAAAKICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KCiAgICA+Pj4gc3RyaW5nZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKFNBTVBMRV9YTUwpCiAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9c3RyaW5nZmlsZSkKICAgID4+PiB0cmVlLmZpbmQoInRhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiB0cmVlLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCiAgICAndGFnJwoKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZmlsZT1TSU1QTEVfWE1MRklMRSkKICAgID4+PiB0cmVlLmZpbmQoImVsZW1lbnQiKS50YWcKICAgICdlbGVtZW50JwogICAgPj4+IHRyZWUuZmluZCgiZWxlbWVudC8uLi9lbXB0eS1lbGVtZW50IikudGFnCiAgICAnZW1wdHktZWxlbWVudCcKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAZmlsZV9pbml0nwEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPQAAAACiAgICBDaGVjayBiYWQgb3IgdW5zdXBwb3J0ZWQgcGF0aCBleHByZXNzaW9ucy4KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGVsZW0uZmluZGFsbCgiL3RhZyIpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBTeW50YXhFcnJvcjogY2Fubm90IHVzZSBhYnNvbHV0ZSBwYXRoIG9uIGVsZW1lbnQKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQIAAAAYmFkX2ZpbmSxAQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAcz4CAAAKICAgIENoZWNrIHRoYXQgdGhlIHBhdGggY2FjaGUgYmVoYXZlcyBzYW5lbHkuCgogICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCiAgICA+Pj4gY2FjaGVfbGVuXzEwID0gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkKICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCiAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPT0gY2FjaGVfbGVuXzEwCiAgICBUcnVlCiAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMjApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQogICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpID4gY2FjaGVfbGVuXzEwCiAgICBUcnVlCiAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoNjAwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA8IDUwMAogICAgVHJ1ZQogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAoAAABwYXRoX2NhY2hluwEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHNgAQAACiAgICBUZXN0IGNvcHkgaGFuZGxpbmcgKGV0YykuCgogICAgPj4+IGltcG9ydCBjb3B5CiAgICA+Pj4gZTEgPSBFVC5YTUwoIjx0YWc+aGVsbG88Zm9vLz48L3RhZz4iKQogICAgPj4+IGUyID0gY29weS5jb3B5KGUxKQogICAgPj4+IGUzID0gY29weS5kZWVwY29weShlMSkKICAgID4+PiBlMS5maW5kKCJmb28iKS50YWcgPSAiYmFyIgogICAgPj4+IHNlcmlhbGl6ZShlMSkKICAgICc8dGFnPmhlbGxvPGJhciAvPjwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZTIpCiAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGUzKQogICAgJzx0YWc+aGVsbG88Zm9vIC8+PC90YWc+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQEAAAAY29wec0BAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz3AUAAAogICAgVGVzdCBhdHRyaWJ1dGUgaGFuZGxpbmcuCgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiLCAiZGVmYXVsdCIpICMgMS4yCiAgICAnZGVmYXVsdCcKICAgID4+PiBlbGVtLnNldCgia2V5IiwgInZhbHVlIikKICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjMKICAgICd2YWx1ZScKCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIGtleT0idmFsdWUiKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDIuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgMi4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgYXR0cmliKQogICAgPj4+IGF0dHJpYi5jbGVhcigpICMgY2hlY2sgZm9yIGFsaWFzaW5nIGlzc3VlcwogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDMuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgMy4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgKiphdHRyaWIpCiAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCiAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgNC4xCiAgICAndmFsdWUnCiAgICA+Pj4gZWxlbS5hdHRyaWIgIyA0LjIKICAgIHsna2V5JzogJ3ZhbHVlJ30KCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIHsia2V5IjogIm90aGVyIn0sIGtleT0idmFsdWUiKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDUuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgNS4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCd0ZXN0JykKICAgID4+PiBlbGVtLnRleHQgPSAiYWEiCiAgICA+Pj4gZWxlbS5zZXQoJ3Rlc3RhJywgJ3Rlc3R2YWwnKQogICAgPj4+IGVsZW0uc2V0KCd0ZXN0YicsICd0ZXN0MicpCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QyIj5hYTwvdGVzdD4nCiAgICA+Pj4gc29ydGVkKGVsZW0ua2V5cygpKQogICAgWyd0ZXN0YScsICd0ZXN0YiddCiAgICA+Pj4gc29ydGVkKGVsZW0uaXRlbXMoKSkKICAgIFsoJ3Rlc3RhJywgJ3Rlc3R2YWwnKSwgKCd0ZXN0YicsICd0ZXN0MicpXQogICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YiddCiAgICAndGVzdDInCiAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10gPSAndGVzdDEnCiAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RjJ10gPSAndGVzdDInCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QxIiB0ZXN0Yz0idGVzdDIiPmFhPC90ZXN0PicKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVItAAAA3wEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMwAwAACiAgICBUZXN0IG1ha2VlbGVtZW50IGhhbmRsaW5nLgoKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CiAgICA+Pj4gc3ViZWxlbSA9IGVsZW0ubWFrZWVsZW1lbnQoInN1YnRhZyIsIGF0dHJpYikKICAgID4+PiBpZiBzdWJlbGVtLmF0dHJpYiBpcyBhdHRyaWI6CiAgICAuLi4gICAgIHByaW50ICJhdHRyaWIgYWxpYXNpbmciCiAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCgogICAgPj4+IGVsZW0uY2xlYXIoKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWcgLz4nCiAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCiAgICA+Pj4gZWxlbS5leHRlbmQoW3N1YmVsZW0sIHN1YmVsZW1dKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JwogICAgPj4+IGVsZW1bOl0gPSBbc3ViZWxlbV0KICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCiAgICA+Pj4gZWxlbVs6XSA9IHR1cGxlKFtzdWJlbGVtXSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAsAAABtYWtlZWxlbWVudBkCAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABziAUAAAogICAgVGVzdCBwYXJzaW5nIGZyb20gZmlsZS4KCiAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKFNJTVBMRV9YTUxGSUxFKQogICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCiAgICA+Pj4gdHJlZS53cml0ZShzeXMuc3Rkb3V0KQogICAgPHJvb3Q+CiAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgogICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCiAgICAgICA8ZW1wdHktZWxlbWVudCAvPgogICAgPC9yb290PgogICAgPj4+IHRyZWUgPSBFVC5wYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKICAgID4+PiBub3JtYWxpemVfY3JsZih0cmVlKQogICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKICAgIDxuczA6cm9vdCB4bWxuczpuczA9Im5hbWVzcGFjZSI+CiAgICAgICA8bnMwOmVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvbnMwOmVsZW1lbnQ+CiAgICAgICA8bnMwOmVsZW1lbnQ+dGV4dDwvbnMwOmVsZW1lbnQ+dGFpbAogICAgICAgPG5zMDplbXB0eS1lbGVtZW50IC8+CiAgICA8L25zMDpyb290PgoKICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUpIGFzIGY6CiAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQoKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQogICAgPj4+IHBhcnNlci52ZXJzaW9uICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgJ0V4cGF0IC4uLicKICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQogICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKICAgIDxyb290PgogICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAogICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KICAgIDwvcm9vdD4KCiAgICA+Pj4gcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5CiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCiAgICA8cm9vdD4KICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CiAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CiAgICA8L3Jvb3Q+CgogICAgPj4+IHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PXRhcmdldCkKICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQogICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKICAgIDxyb290PgogICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAogICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KICAgIDwvcm9vdD4KICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAcGFyc2VmaWxlOAIAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHN3AwAACiAgICA+Pj4gZWxlbWVudCA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQogICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CiAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgogICAgPj4+IHNlcXVlbmNlID0gWyI8aHRtbD48Ym9keT4iLCAidGV4dDwvYm8iLCAiZHk+PC9odG1sPiJdCiAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmdsaXN0KHNlcXVlbmNlKQogICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQpCiAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KICAgID4+PiBwcmludCAiIi5qb2luKEVULnRvc3RyaW5nbGlzdChlbGVtZW50KSkKICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgogICAgPj4+IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cbjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIKICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBsZW4oaWRzKQogICAgMAogICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keSBpZD0nYm9keSc+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBsZW4oaWRzKQogICAgMQogICAgPj4+IGlkc1siYm9keSJdLnRhZwogICAgJ2JvZHknCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DAAAAHBhcnNlbGl0ZXJhbG8CAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzfAoAAAogICAgVGVzdCBpdGVycGFyc2UgaW50ZXJmYWNlLgoKICAgID4+PiBpdGVycGFyc2UgPSBFVC5pdGVycGFyc2UKCiAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSkKICAgID4+PiBhY3Rpb24sIGVsZW0gPSBuZXh0KGNvbnRleHQpCiAgICA+Pj4gcHJpbnQgYWN0aW9uLCBlbGVtLnRhZwogICAgZW5kIGVsZW1lbnQKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCiAgICBlbmQgZWxlbWVudAogICAgZW5kIGVtcHR5LWVsZW1lbnQKICAgIGVuZCByb290CiAgICA+Pj4gY29udGV4dC5yb290LnRhZwogICAgJ3Jvb3QnCgogICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX05TX1hNTEZJTEUpCiAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgogICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZwogICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9cm9vdAoKICAgID4+PiBldmVudHMgPSAoKQogICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cykKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCgogICAgPj4+IGV2ZW50cyA9ICgpCiAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzPWV2ZW50cykKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCgogICAgPj4+IGV2ZW50cyA9ICgic3RhcnQiLCAiZW5kIikKICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCiAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgogICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZwogICAgc3RhcnQgcm9vdAogICAgc3RhcnQgZWxlbWVudAogICAgZW5kIGVsZW1lbnQKICAgIHN0YXJ0IGVsZW1lbnQKICAgIGVuZCBlbGVtZW50CiAgICBzdGFydCBlbXB0eS1lbGVtZW50CiAgICBlbmQgZW1wdHktZWxlbWVudAogICAgZW5kIHJvb3QKCiAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiLCAiZW5kLW5zIikKICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFLCBldmVudHMpCiAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgogICAgLi4uICAgaWYgYWN0aW9uIGluICgic3RhcnQiLCAiZW5kIik6CiAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKICAgIC4uLiAgIGVsc2U6CiAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbQogICAgc3RhcnQtbnMgKCcnLCAnbmFtZXNwYWNlJykKICAgIHN0YXJ0IHtuYW1lc3BhY2V9cm9vdAogICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CiAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9cm9vdAogICAgZW5kLW5zIE5vbmUKCiAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAiYm9ndXMiKQogICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSwgInJiIikgYXMgZjoKICAgIC4uLiAgICAgaXRlcnBhcnNlKGYsIGV2ZW50cykKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFZhbHVlRXJyb3I6IHVua25vd24gZXZlbnQgJ2JvZ3VzJwoKICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KCiAgICA+Pj4gc291cmNlID0gU3RyaW5nSU8uU3RyaW5nSU8oCiAgICAuLi4gICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG4iCiAgICAuLi4gICAgICI8Ym9keSB4bWxucz0naHR0cDovLyYjMjMzO2ZmYm90Lm9yZy9ucydcbiIKICAgIC4uLiAgICAgIiAgICAgIHhtbG5zOmNsXHhlOT0naHR0cDovL2VmZmJvdC5vcmcvbnMnPnRleHQ8L2JvZHk+XG4iKQogICAgPj4+IGV2ZW50cyA9ICgic3RhcnQtbnMiLCkKICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKHNvdXJjZSwgZXZlbnRzKQogICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCiAgICBzdGFydC1ucyAoJycsIHUnaHR0cDovL1x4ZTlmZmJvdC5vcmcvbnMnKQogICAgc3RhcnQtbnMgKHUnY2xceGU5JywgJ2h0dHA6Ly9lZmZib3Qub3JnL25zJykKCiAgICA+Pj4gc291cmNlID0gU3RyaW5nSU8uU3RyaW5nSU8oIjxkb2N1bWVudCAvPmp1bmsiKQogICAgPj4+IHRyeToKICAgIC4uLiAgIGZvciBhY3Rpb24sIGVsZW0gaW4gaXRlcnBhcnNlKHNvdXJjZSk6CiAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKICAgIC4uLiBleGNlcHQgRVQuUGFyc2VFcnJvciwgdjoKICAgIC4uLiAgIHByaW50IHYKICAgIGVuZCBkb2N1bWVudAogICAganVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50OiBsaW5lIDEsIGNvbHVtbiAxMgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAkAAABpdGVycGFyc2WJAgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc1ICAAAKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgID4+PiBlbGVtLnRleHQgPSAidGV4dCIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPnRleHQ8L3RhZz4nCiAgICA+Pj4gRVQuU3ViRWxlbWVudChlbGVtLCAic3VidGFnIikudGV4dCA9ICJzdWJ0ZXh0IgogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+dGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPjwvdGFnPicKCiAgICBUZXN0IHRhZyBzdXBwcmVzc2lvbgogICAgPj4+IGVsZW0udGFnID0gTm9uZQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJ3RleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCiAgICA+Pj4gZWxlbS5pbnNlcnQoMCwgRVQuQ29tbWVudCgiY29tbWVudCIpKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAgICAgIyBhc3N1bWVzIDEuMwogICAgJ3RleHQ8IS0tY29tbWVudC0tPjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKICAgID4+PiBlbGVtWzBdID0gRVQuUEkoImtleSIsICJ2YWx1ZSIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAndGV4dDw/a2V5IHZhbHVlPz48c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAHdyaXRlZmlsZekCAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzewUAAAogICAgVGVzdCBwYXJzZXIgdy4gY3VzdG9tIGJ1aWxkZXIuCgogICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCiAgICA+Pj4gY2xhc3MgQnVpbGRlcjoKICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZwogICAgLi4uICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CiAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCiAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgogICAgLi4uICAgICAgICAgcGFzcwogICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgIHN0YXJ0IHJvb3QKICAgIHN0YXJ0IGVsZW1lbnQKICAgIGVuZCBlbGVtZW50CiAgICBzdGFydCBlbGVtZW50CiAgICBlbmQgZWxlbWVudAogICAgc3RhcnQgZW1wdHktZWxlbWVudAogICAgZW5kIGVtcHR5LWVsZW1lbnQKICAgIGVuZCByb290CgogICAgPj4+IHdpdGggb3BlbihTSU1QTEVfTlNfWE1MRklMRSkgYXMgZjoKICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCiAgICA+Pj4gY2xhc3MgQnVpbGRlcjoKICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZwogICAgLi4uICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CiAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCiAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgogICAgLi4uICAgICAgICAgcGFzcwogICAgLi4uICAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKICAgIC4uLiAgICAgICAgIHByaW50ICJwaSIsIHRhcmdldCwgcmVwcihkYXRhKQogICAgLi4uICAgICBkZWYgY29tbWVudChzZWxmLCBkYXRhKToKICAgIC4uLiAgICAgICAgIHByaW50ICJjb21tZW50IiwgcmVwcihkYXRhKQogICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgIHBpIHBpICdkYXRhJwogICAgY29tbWVudCAnIGNvbW1lbnQgJwogICAgc3RhcnQge25hbWVzcGFjZX1yb290CiAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAogICAgc3RhcnQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1yb290CgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dA4AAABjdXN0b21fYnVpbGRlcv8CAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzvwMAAAogICAgVGVzdCBFbGVtZW50LmdldGNoaWxkcmVuKCkKCiAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAiciIpIGFzIGY6CiAgICAuLi4gICAgIHRyZWUgPSBFVC5wYXJzZShmKQogICAgPj4+IGZvciBlbGVtIGluIHRyZWUuZ2V0cm9vdCgpLml0ZXIoKToKICAgIC4uLiAgICAgc3VtbWFyaXplX2xpc3QoZWxlbS5nZXRjaGlsZHJlbigpKQogICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCiAgICBbXQogICAgW10KICAgIFtdCiAgICA+Pj4gZm9yIGVsZW0gaW4gdHJlZS5nZXRpdGVyYXRvcigpOgogICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCiAgICBbJ2VsZW1lbnQnLCAnZWxlbWVudCcsICdlbXB0eS1lbGVtZW50J10KICAgIFtdCiAgICBbXQogICAgW10KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCiAgICAzCiAgICA+Pj4gbGVuKGVsZW1bMl0uZ2V0Y2hpbGRyZW4oKSkKICAgIDEKICAgID4+PiBlbGVtWzpdID09IGVsZW0uZ2V0Y2hpbGRyZW4oKQogICAgVHJ1ZQogICAgPj4+IGNoaWxkMSA9IGVsZW1bMF0KICAgID4+PiBjaGlsZDIgPSBlbGVtWzJdCiAgICA+Pj4gZGVsIGVsZW1bMToyXQogICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCiAgICAyCiAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KICAgIFRydWUKICAgID4+PiBjaGlsZDIgPT0gZWxlbVsxXQogICAgVHJ1ZQogICAgPj4+IGVsZW1bMDoyXSA9IFtjaGlsZDIsIGNoaWxkMV0KICAgID4+PiBjaGlsZDIgPT0gZWxlbVswXQogICAgVHJ1ZQogICAgPj4+IGNoaWxkMSA9PSBlbGVtWzFdCiAgICBUcnVlCiAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KICAgIEZhbHNlCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gZWxlbS5nZXRjaGlsZHJlbigpCiAgICBbXQogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAsAAABnZXRjaGlsZHJlbjUDAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz+gAAAAogICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4nCiAgICA+Pj4gZWxlbSA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4nCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CwAAAHdyaXRlc3RyaW5nZAMAAHMAAAAAYwEAAAABAAAAAwAAAEMAAABzFQAAAHQAAGoBAGQBAHwAABaDAQABZAIAUygDAAAAc9cAAAAKICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQogICAgPj4+IGNoZWNrX2VuY29kaW5nKCJ1cy1hc2NpaSIpCiAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTEiKQogICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCiAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImNwNDM3IikKICAgID4+PiBjaGVja19lbmNvZGluZygibWFjLXJvbWFuIikKICAgIHMqAAAAPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+TigCAAAAUgsAAAB0AwAAAFhNTCgBAAAAdAgAAABlbmNvZGluZygAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DgAAAGNoZWNrX2VuY29kaW5nbgMAAHMCAAAAAAljAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc04IAAAKICAgIFRlc3QgZW5jb2RpbmcgaXNzdWVzLgoKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgID4+PiBlbGVtLnRleHQgPSB1ImFiYyIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPmFiYzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICc8dGFnPmFiYzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKICAgICc8dGFnPmFiYzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQogICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbjx0YWc+YWJjPC90YWc+IgoKICAgID4+PiBlbGVtLnRleHQgPSAiPCZcIlwnPiIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAnPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKSAjIGNkYXRhIGNoYXJhY3RlcnMKICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JwoKICAgID4+PiBlbGVtLmF0dHJpYlsia2V5Il0gPSAiPCZcIlwnPiIKICAgID4+PiBlbGVtLnRleHQgPSBOb25lCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCiAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCgogICAgPj4+IGVsZW0udGV4dCA9IHUnXHhlNVx4ZjZceGY2PD4nCiAgICA+Pj4gZWxlbS5hdHRyaWIuY2xlYXIoKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAnPHRhZz5ceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKICAgICc8dGFnPiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7PC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5ceGU1XHhmNlx4ZjYmbHQ7Jmd0OzwvdGFnPiIKCiAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gdSdceGU1XHhmNlx4ZjY8PicKICAgID4+PiBlbGVtLnRleHQgPSBOb25lCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZyBrZXk9IiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7IiAvPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICc8dGFnIGtleT0iXHhjM1x4YTVceGMzXHhiNlx4YzNceGI2Jmx0OyZndDsiIC8+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQogICAgJzx0YWcga2V5PSImIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OyIgLz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZyBrZXk9Ilx4ZTVceGY2XHhmNiZsdDsmZ3Q7IiAvPicKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVJEAAAAeQMAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMHAgAACiAgICBUZXN0IHNlcmlhbGl6YXRpb24gbWV0aG9kcy4KCiAgICA+Pj4gZSA9IEVULlhNTCgiPGh0bWw+PGxpbmsvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+IikKICAgID4+PiBlLnRhaWwgPSAiXG4iCiAgICA+Pj4gc2VyaWFsaXplKGUpCiAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJwogICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Tm9uZSkKICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCiAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0ieG1sIikKICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCiAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0iaHRtbCIpCiAgICAnPGh0bWw+PGxpbms+PHNjcmlwdD4xIDwgMjwvc2NyaXB0PjwvaHRtbD5cbicKICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ0ZXh0IikKICAgICcxIDwgMlxuJwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAcAAABtZXRob2RztAMAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMvAwAACiAgICBUZXN0IGl0ZXJhdG9ycy4KCiAgICA+Pj4gZSA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGhpcyBpcyBhIDxpPnBhcmFncmFwaDwvaT4uPC9ib2R5Pi4uPC9odG1sPiIpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5pdGVyKCkpCiAgICBbJ2h0bWwnLCAnYm9keScsICdpJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlLmZpbmQoImJvZHkiKS5pdGVyKCkpCiAgICBbJ2JvZHknLCAnaSddCiAgICA+Pj4gc3VtbWFyaXplKG5leHQoZS5pdGVyKCkpKQogICAgJ2h0bWwnCiAgICA+Pj4gIiIuam9pbihlLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4uLicKICAgID4+PiAiIi5qb2luKGUuZmluZCgiYm9keSIpLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4nCiAgICA+Pj4gbmV4dChlLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhICcKCiAgICBNZXRob2QgaXRlcnBhcnNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuIFNlZSBidWcgNjQ3Mi4KCiAgICA+Pj4gc291cmNlZmlsZSA9IHNlcmlhbGl6ZShlLCB0b19zdHJpbmc9RmFsc2UpCiAgICA+Pj4gbmV4dChFVC5pdGVycGFyc2Uoc291cmNlZmlsZSkpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgKCdlbmQnLCA8RWxlbWVudCAnaScgYXQgMHguLi4+KQoKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoTm9uZSkKICAgID4+PiB0cmVlLml0ZXIoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgQXR0cmlidXRlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXInCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAGl0ZXJhdG9yc8YDAABzAAAAAHN5AAAAPCFET0NUWVBFIHBvaW50cyBbCjwhRU5USVRZICUgdXNlci1lbnRpdGllcyBTWVNURU0gJ3VzZXItZW50aXRpZXMueG1sJz4KJXVzZXItZW50aXRpZXM7Cl0+Cjxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+CmMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABztAIAAAogICAgVGVzdCBlbnRpdHkgaGFuZGxpbmcuCgogICAgMSkgZ29vZCBlbnRpdGllcwoKICAgID4+PiBlID0gRVQuWE1MKCI8ZG9jdW1lbnQgdGl0bGU9JyYjeDgyMzA7Jz50ZXN0PC9kb2N1bWVudD4iKQogICAgPj4+IHNlcmlhbGl6ZShlKQogICAgJzxkb2N1bWVudCB0aXRsZT0iJiMzMzMyODsiPnRlc3Q8L2RvY3VtZW50PicKCiAgICAyKSBiYWQgZW50aXRpZXMKCiAgICA+Pj4gRVQuWE1MKCI8ZG9jdW1lbnQ+JmVudGl0eTs8L2RvY3VtZW50PiIpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBQYXJzZUVycm9yOiB1bmRlZmluZWQgZW50aXR5OiBsaW5lIDEsIGNvbHVtbiAxMAoKICAgID4+PiBFVC5YTUwoRU5USVRZX1hNTCkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmVudGl0eTs6IGxpbmUgNSwgY29sdW1uIDEwCgogICAgMykgY3VzdG9tIGVudGl0eQoKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQogICAgPj4+IHBhcnNlci5lbnRpdHlbImVudGl0eSJdID0gInRleHQiCiAgICA+Pj4gcGFyc2VyLmZlZWQoRU5USVRZX1hNTCkKICAgID4+PiByb290ID0gcGFyc2VyLmNsb3NlKCkKICAgID4+PiBzZXJpYWxpemUocm9vdCkKICAgICc8ZG9jdW1lbnQ+dGV4dDwvZG9jdW1lbnQ+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAYAAABlbnRpdHnsAwAAcwAAAABjAQAAAAEAAAAFAAAAQwAAAHMwAAAAeREAdAAAagEAfAAAgwEAAVduGAAEdAAAagIAawoAcisAAQEBdAMAagQAU1hkAQBTKAIAAABz5QAAAAoKICAgIFRlc3QgZXJyb3IgaGFuZGxpbmcuCgogICAgPj4+IGlzc3ViY2xhc3MoRVQuUGFyc2VFcnJvciwgU3ludGF4RXJyb3IpCiAgICBUcnVlCiAgICA+Pj4gZXJyb3IoImZvbyIpLnBvc2l0aW9uCiAgICAoMSwgMCkKICAgID4+PiBlcnJvcigiPHRhZz4mZm9vOzwvdGFnPiIpLnBvc2l0aW9uCiAgICAoMSwgNSkKICAgID4+PiBlcnJvcigiZm9vYmFyPCIpLnBvc2l0aW9uCiAgICAoMSwgNikKCiAgICBOKAUAAABSCwAAAFJDAAAAdAoAAABQYXJzZUVycm9ydAMAAABzeXN0CQAAAGV4Y192YWx1ZSgBAAAAdAMAAAB4bWwoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAUAAABlcnJvcgoEAABzCAAAAAAPAwERARABYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMgBAAACiAgICBUZXN0IG5hbWVzcGFjZSBpc3N1ZXMuCgogICAgMSkgeG1sIG5hbWVzcGFjZQoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8dGFnIHhtbDpsYW5nPSdlbicgLz4iKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQogICAgJzx0YWcgeG1sOmxhbmc9ImVuIiAvPicKCiAgICAyKSBvdGhlciAid2VsbC1rbm93biIgbmFtZXNwYWNlcwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIC8+IikKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKICAgICc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIC8+JwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbDpodG1sIHhtbG5zOmh0bWw9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIC8+IikKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjIKICAgICc8aHRtbDpodG1sIHhtbG5zOmh0bWw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIC8+JwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSdodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlJyAvPiIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4zCiAgICAnPG5zMDpFbnZlbG9wZSB4bWxuczpuczA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUiIC8+JwoKICAgIDMpIHVua25vd24gbmFtZXNwYWNlcwogICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKICAgID4+PiBwcmludCBzZXJpYWxpemUoZWxlbSkKICAgIDxuczA6Ym9keSB4bWxuczpuczA9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICAgICAgPG5zMDp0YWc+dGV4dDwvbnMwOnRhZz4KICAgICAgPG5zMDp0YWcgLz4KICAgICAgPG5zMDpzZWN0aW9uPgogICAgICAgIDxuczA6dGFnPnN1YnRleHQ8L25zMDp0YWc+CiAgICAgIDwvbnMwOnNlY3Rpb24+CiAgICA8L25zMDpib2R5PgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAkAAABuYW1lc3BhY2UeBAAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAczEIAAAKICAgIFRlc3QgUU5hbWUgaGFuZGxpbmcuCgogICAgMSkgZGVjb3JhdGVkIHRhZ3MKCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInt1cml9dGFnIikKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInt1cml9dGFnIikpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4yCiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JwogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KEVULlFOYW1lKCJ1cmkiLCAidGFnIikpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4zCiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JwogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KEVULlFOYW1lKCJ1cmkiLCAidGFnIikpCiAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcxIikpCiAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcyIikpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS40CiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiPjxuczA6dGFnMSAvPjxuczA6dGFnMiAvPjwvbnMwOnRhZz4nCgogICAgMikgZGVjb3JhdGVkIGF0dHJpYnV0ZXMKCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSAidmFsdWUiCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4xCiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gZWxlbS5hdHRyaWJbRVQuUU5hbWUoInt1cml9a2V5IildID0gInZhbHVlIgogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDIuMgogICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ2YWx1ZSIgLz4nCgogICAgMykgZGVjb3JhdGVkIHZhbHVlcyBhcmUgbm90IGNvbnZlcnRlZCBieSBkZWZhdWx0LCBidXQgdGhlCiAgICAgICBRTmFtZSB3cmFwcGVyIGNhbiBiZSB1c2VkIGZvciB2YWx1ZXMKCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSAie3VyaX12YWx1ZSIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjEKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgbnMwOmtleT0ie3VyaX12YWx1ZSIgLz4nCgogICAgPj4+IGVsZW0uY2xlYXIoKQogICAgPj4+IGVsZW0uYXR0cmliWyJ7dXJpfWtleSJdID0gRVQuUU5hbWUoInt1cml9dmFsdWUiKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMgogICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJuczA6dmFsdWUiIC8+JwoKICAgID4+PiBlbGVtLmNsZWFyKCkKICAgID4+PiBzdWJlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgID4+PiBzdWJlbGVtLmF0dHJpYlsie3VyaTF9a2V5Il0gPSBFVC5RTmFtZSgie3VyaTJ9dmFsdWUiKQogICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCiAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjMKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgeG1sbnM6bnMxPSJ1cmkxIiB4bWxuczpuczI9InVyaTIiPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjwvbnMwOnRhZz4nCgogICAgNCkgRGlyZWN0IFFOYW1lIHRlc3RzCgogICAgPj4+IHN0cihFVC5RTmFtZSgnbnMnLCAndGFnJykpCiAgICAne25zfXRhZycKICAgID4+PiBzdHIoRVQuUU5hbWUoJ3tuc310YWcnKSkKICAgICd7bnN9dGFnJwogICAgPj4+IHExID0gRVQuUU5hbWUoJ25zJywgJ3RhZycpCiAgICA+Pj4gcTIgPSBFVC5RTmFtZSgnbnMnLCAndGFnJykKICAgID4+PiBxMSA9PSBxMgogICAgVHJ1ZQogICAgPj4+IHEyID0gRVQuUU5hbWUoJ25zJywgJ290aGVyLXRhZycpCiAgICA+Pj4gcTEgPT0gcTIKICAgIEZhbHNlCiAgICA+Pj4gcTEgPT0gJ25zOnRhZycKICAgIEZhbHNlCiAgICA+Pj4gcTEgPT0gJ3tuc310YWcnCiAgICBUcnVlCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0BQAAAHFuYW1lQgQAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPrAAAACiAgICBUZXN0IFBVQkxJQyBkb2N0eXBlLgoKICAgID4+PiBlbGVtID0gRVQuWE1MKCc8IURPQ1RZUEUgaHRtbCBQVUJMSUMnCiAgICAuLi4gICAnICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiInCiAgICAuLi4gICAnICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nCiAgICAuLi4gICAnPGh0bWw+dGV4dDwvaHRtbD4nKQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQOAAAAZG9jdHlwZV9wdWJsaWOLBAAAcwAAAABjAQAAAAUAAAAEAAAAQwAAAHNNAAAAZAEAZAIAbAAAbQEAfQEAAWcAAH0CAHgwAHwBAGoCAHwAAIMBAERdHwBcAgB9AwB9BAB8AgBqAwB8AwBwQQB8BACDAQABcSYAV3wCAFMoAwAAAHO1BQAACiAgICBUZXN0IHRoZSBYUGF0aCB0b2tlbml6ZXIuCgogICAgPj4+ICMgdGVzdHMgZnJvbSB0aGUgeG1sIHNwZWNpZmljYXRpb24KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIioiKQogICAgWycqJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInRleHQoKSIpCiAgICBbJ3RleHQnLCAnKCknXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiQG5hbWUiKQogICAgWydAJywgJ25hbWUnXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiQCoiKQogICAgWydAJywgJyonXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVsxXSIpCiAgICBbJ3BhcmEnLCAnWycsICcxJywgJ10nXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVtsYXN0KCldIikKICAgIFsncGFyYScsICdbJywgJ2xhc3QnLCAnKCknLCAnXSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIqL3BhcmEiKQogICAgWycqJywgJy8nLCAncGFyYSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvZG9jL2NoYXB0ZXJbNV0vc2VjdGlvblsyXSIpCiAgICBbJy8nLCAnZG9jJywgJy8nLCAnY2hhcHRlcicsICdbJywgJzUnLCAnXScsICcvJywgJ3NlY3Rpb24nLCAnWycsICcyJywgJ10nXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlci8vcGFyYSIpCiAgICBbJ2NoYXB0ZXInLCAnLy8nLCAncGFyYSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvL3BhcmEiKQogICAgWycvLycsICdwYXJhJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vb2xpc3QvaXRlbSIpCiAgICBbJy8vJywgJ29saXN0JywgJy8nLCAnaXRlbSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuIikKICAgIFsnLiddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLy9wYXJhIikKICAgIFsnLicsICcvLycsICdwYXJhJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4uIikKICAgIFsnLi4nXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi4vQGxhbmciKQogICAgWycuLicsICcvJywgJ0AnLCAnbGFuZyddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJjaGFwdGVyW3RpdGxlXSIpCiAgICBbJ2NoYXB0ZXInLCAnWycsICd0aXRsZScsICddJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImVtcGxveWVlW0BzZWNyZXRhcnkgYW5kIEBhc3Npc3RhbnRdIikKICAgIFsnZW1wbG95ZWUnLCAnWycsICdAJywgJ3NlY3JldGFyeScsICcnLCAnYW5kJywgJycsICdAJywgJ2Fzc2lzdGFudCcsICddJ10KCiAgICA+Pj4gIyBhZGRpdGlvbmFsIHRlc3RzCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJ7aHR0cDovL3NwYW19ZWdnIikKICAgIFsne2h0dHA6Ly9zcGFtfWVnZyddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuL3NwYW0uZWdnIikKICAgIFsnLicsICcvJywgJ3NwYW0uZWdnJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3todHRwOi8vc3BhbX1lZ2ciKQogICAgWycuJywgJy8vJywgJ3todHRwOi8vc3BhbX1lZ2cnXQogICAgaf////8oAQAAAHQLAAAARWxlbWVudFBhdGgoBAAAAHQJAAAAeG1sLmV0cmVlUlEAAAB0DwAAAHhwYXRoX3Rva2VuaXplcnQGAAAAYXBwZW5kKAUAAAB0AQAAAHBSUQAAAHQDAAAAb3V0dAIAAABvcFIVAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVJTAAAAlgQAAHMKAAAAADAQAQYBHAEXAWMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzvAEAAAogICAgVGVzdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZGlyZWN0bHkKCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUHJvY2Vzc2luZ0luc3RydWN0aW9uKCd0ZXN0JywgJ2luc3RydWN0aW9uJykpCiAgICAnPD90ZXN0IGluc3RydWN0aW9uPz4nCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUEkoJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKICAgICc8P3Rlc3QgaW5zdHJ1Y3Rpb24/PicKCiAgICBJc3N1ZSAjMjc0NgoKICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsICc8dGVzdGluZyY+JykpCiAgICAnPD90ZXN0IDx0ZXN0aW5nJj4/PicKICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsIHUnPHRlc3RpbmcmPuMnKSwgJ2xhdGluMScpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nbGF0aW4xJz8+XG48P3Rlc3QgPHRlc3RpbmcmPlx4ZTM/PiIKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQVAAAAcHJvY2Vzc2luZ2luc3RydWN0aW9uzAQAAHMAAAAAc7QAAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICA8cD4xMjAgTXogaXMgYWRlcXVhdGUgZm9yIGFuIGF2ZXJhZ2UgaG9tZSB1c2VyLjwvcD4KICA8eGk6aW5jbHVkZSBocmVmPSJkaXNjbGFpbWVyLnhtbCIvPgo8L2RvY3VtZW50PgpzBgAAAEMxLnhtbHPQAAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+CjxkaXNjbGFpbWVyPgogIDxwPlRoZSBvcGluaW9ucyByZXByZXNlbnRlZCBoZXJlaW4gcmVwcmVzZW50IHRob3NlIG9mIHRoZSBpbmRpdmlkdWFsCiAgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgb2ZmaWNpYWwgcG9saWN5IGVuZG9yc2VkIGJ5IHRoaXMKICBvcmdhbml6YXRpb24uPC9wPgo8L2Rpc2NsYWltZXI+CnMOAAAAZGlzY2xhaW1lci54bWxztgAAADw/eG1sIHZlcnNpb249JzEuMCc/Pgo8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gYWNjZXNzZWQKICA8eGk6aW5jbHVkZSBocmVmPSJjb3VudC50eHQiIHBhcnNlPSJ0ZXh0Ii8+IHRpbWVzLjwvcD4KPC9kb2N1bWVudD4KcwYAAABDMi54bWx0BgAAADMyNDM4N3MJAAAAY291bnQudHh0c78AAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIDxlbT5hY2Nlc3NlZDwvZW0+CiAgPHhpOmluY2x1ZGUgaHJlZj0iY291bnQudHh0IiBwYXJzZT0idGV4dCIvPiB0aW1lcy48L3A+CjwvZG9jdW1lbnQ+CnMHAAAAQzJiLnhtbHPZAAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+Cjxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgc291cmNlIG9mIHRoZSAiZGF0YS54bWwiIHJlc291cmNlOjwvcD4KICA8ZXhhbXBsZT48eGk6aW5jbHVkZSBocmVmPSJkYXRhLnhtbCIgcGFyc2U9InRleHQiLz48L2V4YW1wbGU+CjwvZG9jdW1lbnQ+CnMGAAAAQzMueG1sc1EAAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRhdGE+CiAgPGl0ZW0+PCFbQ0RBVEFbQnJvb2tzICYgU2hpZWxkc11dPjwvaXRlbT4KPC9kYXRhPgpzCAAAAGRhdGEueG1sc1cBAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRpdiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgPHhpOmluY2x1ZGUgaHJlZj0iZXhhbXBsZS50eHQiIHBhcnNlPSJ0ZXh0Ij4KICAgIDx4aTpmYWxsYmFjaz4KICAgICAgPHhpOmluY2x1ZGUgaHJlZj0iZmFsbGJhY2stZXhhbXBsZS50eHQiIHBhcnNlPSJ0ZXh0Ij4KICAgICAgICA8eGk6ZmFsbGJhY2s+PGEgaHJlZj0ibWFpbHRvOmJvYkBleGFtcGxlLm9yZyI+UmVwb3J0IGVycm9yPC9hPjwveGk6ZmFsbGJhY2s+CiAgICAgIDwveGk6aW5jbHVkZT4KICAgIDwveGk6ZmFsbGJhY2s+CiAgPC94aTppbmNsdWRlPgo8L2Rpdj4KcwYAAABDNS54bWxzhAAAADw/eG1sIHZlcnNpb249JzEuMCc/Pgo8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogIDxwPkV4YW1wbGUuPC9wPgogIDx4aTppbmNsdWRlIGhyZWY9Int9Ii8+CjwvZG9jdW1lbnQ+CnMLAAAAZGVmYXVsdC54bWxSTAAAAGMDAAAABQAAAAUAAABDAAAAc1gAAAB5DgB0AAB8AAAZfQMAV24dAAR0AQBrCgByLQABAQF0AgBkAQCDAQCCAQBuAQBYfAEAZAIAawIAclQAZAMAZAQAbAMAbQQAfQQAAXwEAHwDAIMBAFN8AwBTKAUAAABOcxIAAAByZXNvdXJjZSBub3QgZm91bmRSTAAAAGn/////KAEAAABSQwAAACgFAAAAdAgAAABYSU5DTFVERXQIAAAAS2V5RXJyb3J0BwAAAElPRXJyb3J0FQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZVJDAAAAKAUAAAB0BAAAAGhyZWZ0BQAAAHBhcnNlUkQAAAB0BAAAAGRhdGFSQwAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DwAAAHhpbmNsdWRlX2xvYWRlcikFAABzEAAAAAABAwEOAQ0BEAEMARABCgFjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc6YHAAAKICAgIEJhc2ljIGluY2x1c2lvbiBleGFtcGxlIChYSW5jbHVkZSBDLjEpCgogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzEueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMxCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgogICAgICA8ZGlzY2xhaW1lcj4KICAgICAgPHA+VGhlIG9waW5pb25zIHJlcHJlc2VudGVkIGhlcmVpbiByZXByZXNlbnQgdGhvc2Ugb2YgdGhlIGluZGl2aWR1YWwKICAgICAgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgb2ZmaWNpYWwgcG9saWN5IGVuZG9yc2VkIGJ5IHRoaXMKICAgICAgb3JnYW5pemF0aW9uLjwvcD4KICAgIDwvZGlzY2xhaW1lcj4KICAgIDwvZG9jdW1lbnQ+CgogICAgVGV4dHVhbCBpbmNsdXNpb24gZXhhbXBsZSAoWEluY2x1ZGUgQy4yKQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzIueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMyCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gYWNjZXNzZWQKICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KICAgIDwvZG9jdW1lbnQ+CgogICAgVGV4dHVhbCBpbmNsdXNpb24gYWZ0ZXIgc2libGluZyBlbGVtZW50IChiYXNlZCBvbiBtb2RpZmllZCBYSW5jbHVkZSBDLjIpCgogICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMmIueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGRvY3VtZW50KSkgIyBDMmIKICAgIDxkb2N1bWVudD4KICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgogICAgICAzMjQzODcgdGltZXMuPC9wPgogICAgPC9kb2N1bWVudD4KCiAgICBUZXh0dWFsIGluY2x1c2lvbiBvZiBYTUwgZXhhbXBsZSAoWEluY2x1ZGUgQy4zKQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzMueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMzCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CiAgICAgIDxleGFtcGxlPiZsdDs/eG1sIHZlcnNpb249JzEuMCc/Jmd0OwogICAgJmx0O2RhdGEmZ3Q7CiAgICAgICZsdDtpdGVtJmd0OyZsdDshW0NEQVRBW0Jyb29rcyAmYW1wOyBTaGllbGRzXV0mZ3Q7Jmx0Oy9pdGVtJmd0OwogICAgJmx0Oy9kYXRhJmd0OwogICAgPC9leGFtcGxlPgogICAgPC9kb2N1bWVudD4KCiAgICBGYWxsYmFjayBleGFtcGxlIChYSW5jbHVkZSBDLjUpCiAgICBOb3RlISBGYWxsYmFjayBzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKCiAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkM1LnhtbCIpCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgSU9FcnJvcjogcmVzb3VyY2Ugbm90IGZvdW5kCiAgICA+Pj4gIyBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzUKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQIAAAAeGluY2x1ZGUzBQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc28BAAAKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudEluY2x1ZGUKCiAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoImRlZmF1bHQueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50KQogICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBkZWZhdWx0CiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPkV4YW1wbGUuPC9wPgogICAgICA8cm9vdD4KICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CiAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CiAgICA8L3Jvb3Q+CiAgICA8L2RvY3VtZW50PgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBAAAAB4aW5jbHVkZV9kZWZhdWx0cgUAAHMAAAAAc8UAAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICA8cD4xMjAgTXogaXMgYWRlcXVhdGUgZm9yIGFuIGF2ZXJhZ2UgaG9tZSB1c2VyLjwvcD4KICA8eGk6aW5jbHVkZSBocmVmPSJkaXNjbGFpbWVyLnhtbCIgcGFyc2U9IkJBRF9UWVBFIi8+CjwvZG9jdW1lbnQ+CnMGAAAAQjEueG1sc24AAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRpdiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgICA8eGk6ZmFsbGJhY2s+PC94aTpmYWxsYmFjaz4KPC9kaXY+CnMGAAAAQjIueG1sYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOoBAAACiAgICBUZXN0IGZhaWx1cmUgdG8gbG9jYXRlIGluY2x1ZGVkIFhNTCBmaWxlLgoKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudEluY2x1ZGUKCiAgICA+Pj4gZGVmIG5vbmVfbG9hZGVyKGhyZWYsIHBhcnNlciwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAuLi4gICAgIHJldHVybiBOb25lCgogICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFWyJDMS54bWwiXSkKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBGYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2Rpc2NsYWltZXIueG1sJyBhcyAneG1sJwoKICAgIFRlc3QgZmFpbHVyZSB0byBsb2NhdGUgaW5jbHVkZWQgdGV4dCBmaWxlLgoKICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERVsiQzIueG1sIl0pCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgRmF0YWxJbmNsdWRlRXJyb3I6IGNhbm5vdCBsb2FkICdjb3VudC50eHQnIGFzICd0ZXh0JwoKICAgIFRlc3QgYmFkIHBhcnNlIHR5cGUuCgogICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjEueG1sIl0pCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgRmF0YWxJbmNsdWRlRXJyb3I6IHVua25vd24gcGFyc2UgdHlwZSBpbiB4aTppbmNsdWRlIHRhZyAoJ0JBRF9UWVBFJykKCiAgICBUZXN0IHhpOmZhbGxiYWNrIG91dHNpZGUgeGk6aW5jbHVkZS4KCiAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVfQkFEWyJCMi54bWwiXSkKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBGYXRhbEluY2x1ZGVFcnJvcjogeGk6ZmFsbGJhY2sgdGFnIG11c3QgYmUgY2hpbGQgb2YgeGk6aW5jbHVkZSAoJ3todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlfWZhbGxiYWNrJykKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQRAAAAeGluY2x1ZGVfZmFpbHVyZXOXBQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc68DAAAKCiAgICBtYXJzaGFsbGVyIGdpdmVzIG9ic2N1cmUgZXJyb3JzIGZvciBub24tc3RyaW5nIHZhbHVlcwoKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgxMjMpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFnCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCiAgICA+Pj4gZWxlbS50ZXh0ID0gMTIzCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGV4dAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQogICAgPj4+IGVsZW0udGFpbCA9IDEyMwogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIHRhaWwKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKICAgID4+PiBlbGVtLnNldCgxMjMsICIxMjMiKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSBrZXkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKICAgID4+PiBlbGVtLnNldCgiMTIzIiwgMTIzKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSB2YWx1ZQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBAAAABidWdfeG1sdG9vbGtpdDIxvgUAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPKAAAACgogICAgdHlwbyBpbiBFbGVtZW50VHJlZS5maW5kdGV4dAoKICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCiAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCiAgICA+Pj4gdHJlZS5maW5kdGV4dCgidGFnIikKICAgICd0ZXh0JwogICAgPj4+IHRyZWUuZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgICdzdWJ0ZXh0JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXQyNd4FAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz2AAAAAoKICAgIC4vL3RhZyBjYXVzZXMgZXhjZXB0aW9ucwoKICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKICAgID4+PiBzdW1tYXJpemVfbGlzdCh0cmVlLmZpbmRhbGwoIi4vL3RoZWFkIikpCiAgICBbXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGJvZHkiKSkKICAgIFsndGJvZHknXQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXQyOOwFAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz0AAAAAoKICAgIGR1bXAoKSBkb2Vzbid0IGZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyCgogICAgPj4+IHRyZWUgPSBFVC5YTUwoIjxkb2M+PHRhYmxlPjx0Ym9keS8+PC90YWJsZT48L2RvYz4iKQogICAgPj4+IEVULmR1bXAodHJlZSk7IHN5cy5zdGRvdXQud3JpdGUoInRhaWwiKQogICAgPGRvYz48dGFibGU+PHRib2R5IC8+PC90YWJsZT48L2RvYz4KICAgIHRhaWwKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0EAAAAGJ1Z194bWx0b29sa2l0WDH5BQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAczgDAAAKCiAgICBub24tYXNjaWkgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzIGRvZXNuJ3Qgd29yawoKICAgID4+PiB0cmVlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PHTkZyAvPiIpCiAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKICAgICc8dFx4YzNceGE0ZyAvPicKCiAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0YWcg5HR0cj0ndiYjMjI4O2x1ZScgLz4iKQogICAgPj4+IHRyZWUuYXR0cmliCiAgICB7dSdceGU0dHRyJzogdSd2XHhlNGx1ZSd9CiAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKICAgICc8dGFnIFx4YzNceGE0dHRyPSJ2XHhjM1x4YTRsdWUiIC8+JwoKICAgID4+PiB0cmVlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PHTkZz50ZXh0PC905Gc+IikKICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQogICAgJzx0XHhjM1x4YTRnPnRleHQ8L3RceGMzXHhhNGc+JwoKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCh1InRcdTAwZTRnIikKICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQogICAgJzx0XHhjM1x4YTRnIC8+JwoKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCgidGFnIikKICAgID4+PiB0cmVlLnNldCh1Ilx1MDBlNHR0ciIsIHUidlx1MDBlNGx1ZSIpCiAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKICAgICc8dGFnIFx4YzNceGE0dHRyPSJ2XHhjM1x4YTRsdWUiIC8+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXQzOQUGAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzvQAAAAoKICAgIHByb2JsZW1zIGhhbmRsaW5nIGludGVybmFsbHkgZGVmaW5lZCBlbnRpdGllcwoKICAgID4+PiBlID0gRVQuWE1MKCI8IURPQ1RZUEUgZG9jIFs8IUVOVElUWSBsZG90cyAnJiN4ODIzMDsnPl0+PGRvYz4mbGRvdHM7PC9kb2M+IikKICAgID4+PiBzZXJpYWxpemUoZSkKICAgICc8ZG9jPiYjMzMzMjg7PC9kb2M+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXQ1NCMGAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz/QAAAAoKICAgIG1ha2Ugc3VyZSB3ZSdyZSByZXBvcnRpbmcgdGhlIGZpcnN0IGVycm9yLCBub3QgdGhlIGxhc3QKCiAgICA+Pj4gZSA9IEVULlhNTCgiPCFET0NUWVBFIGRvYyBTWVNURU0gJ2RvYy5kdGQnPjxkb2M+Jmxkb3RzOyZuZG90czsmcmRvdHM7PC9kb2M+IikKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmxkb3RzOzogbGluZSAxLCBjb2x1bW4gMzYKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0EAAAAGJ1Z194bWx0b29sa2l0NTUuBgAAcwAAAAB0DQAAAEV4Y2VwdGlvbkZpbGVjAAAAAAAAAAABAAAAQgAAAHMRAAAAZQAAWgEAZAAAhAAAWgIAUlMoAQAAAGMCAAAAAgAAAAEAAABDAAAAcwoAAAB0AACCAQBkAABTKAEAAABOKAEAAABSXAAAACgCAAAAdAQAAABzZWxmdAEAAAB4KAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQEAAAAcmVhZDoGAABzAgAAAAABKAMAAAB0CAAAAF9fbmFtZV9fdAoAAABfX21vZHVsZV9fUm8AAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHlSbAAAADkGAABzAgAAAAYBYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOGAAAACgogICAgSGFuZGxlIGNyYXNoIGluIHN0cmVhbSBzb3VyY2UuCiAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKEV4Y2VwdGlvbkZpbGUoKSkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIElPRXJyb3IKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DAAAAHhtbHRvb2xraXQ2MD0GAABzAAAAAHNGAQAAPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbiBTWVNURU0gInBhcC12MTUtMjAwMS0wMS0zMS5kdGQiIFtdPgo8cGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uPgo8c3ViZG9jLWFic3RyYWN0Pgo8cGFyYWdyYXBoIGlkPSJBLTAwMDEiIGx2bD0iMCI+QSBuZXcgY3VsdGl2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dWx0IGJ1aWxkZXIuCiAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkgIyBkZWZhdWx0CiAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQogICAgPj4+IHN1bW1hcml6ZShwYXJzZXIuY2xvc2UoKSkKICAgICdlbGVtZW50JwoKICAgIFRlc3QgY3VzdG9tIGJ1aWxkZXIuCiAgICA+Pj4gY2xhc3MgRWNob1RhcmdldDoKICAgIC4uLiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgLi4uICAgICAgICAgcmV0dXJuIEVULkVsZW1lbnQoImVsZW1lbnQiKSAjIHNpbXVsYXRlIHJvb3QKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoRWNob1RhcmdldCgpKQogICAgPj4+IHBhcnNlci5mZWVkKCI8ZWxlbWVudD5zb21lIHRleHQ8L2VsZW1lbnQ+IikKICAgID4+PiBzdW1tYXJpemUocGFyc2VyLmNsb3NlKCkpCiAgICAnZWxlbWVudCcKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0EAAAAGJ1Z18yMDA3MDhfY2xvc2WDBgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAcwYDAAAKCiAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQogICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDEKICAgICc8ZWxlbSB4bWxucz0iZGVmYXVsdCI+PGVsZW0gLz48L2VsZW0+JwoKICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCiAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQogICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7bm90LWRlZmF1bHR9ZWxlbSIpCiAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAyCiAgICAnPGVsZW0geG1sbnM9ImRlZmF1bHQiIHhtbG5zOm5zMT0ibm90LWRlZmF1bHQiPjxlbGVtIC8+PG5zMTplbGVtIC8+PC9lbGVtPicKCiAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQogICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAiZWxlbSIpICMgdW5wcmVmaXhlZCBuYW1lCiAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAzCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBWYWx1ZUVycm9yOiBjYW5ub3QgdXNlIG5vbi1xdWFsaWZpZWQgbmFtZXMgd2l0aCBkZWZhdWx0X25hbWVzcGFjZSBvcHRpb24KCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0HAAAAGJ1Z18yMDA3MDlfZGVmYXVsdF9uYW1lc3BhY2WXBgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc1YCAAAKCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKICAgICc8bnMwOnRpdGxlIHhtbG5zOm5zMD0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCiAgICA+Pj4gRVQucmVnaXN0ZXJfbmFtZXNwYWNlKCJmb28iLCAiaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIpCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKICAgICc8Zm9vOnRpdGxlIHhtbG5zOmZvbz0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCgogICAgQW5kIHRoZSBEdWJsaW4gQ29yZSBuYW1lc3BhY2UgaXMgaW4gdGhlIGRlZmF1bHQgbGlzdDoKCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvfXRpdGxlIikpCiAgICAnPGRjOnRpdGxlIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgLz4nCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dB0AAABidWdfMjAwNzA5X3JlZ2lzdGVyX25hbWVzcGFjZa4GAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzNwEAAAoKICAgIE5vdCBzdXJlIGlmIHRoaXMgY2FuIGJlIGZpeGVkLCByZWFsbHkgKHNpbmNlIHRoZSBzZXJpYWxpemVyIG5lZWRzCiAgICBFVC5Db21tZW50LCBub3QgY0VULmNvbW1lbnQpLgoKICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCiAgICA+Pj4gYS5hcHBlbmQoRVQuQ29tbWVudCgnZm9vJykpCiAgICA+Pj4gYVswXS50YWcgPT0gRVQuQ29tbWVudAogICAgVHJ1ZQoKICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCiAgICA+Pj4gYS5hcHBlbmQoRVQuUEkoJ2ZvbycpKQogICAgPj4+IGFbMF0udGFnID09IEVULlBJCiAgICBUcnVlCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBoAAABidWdfMjAwNzA5X2VsZW1lbnRfY29tbWVudL4GAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzEwEAAAoKICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCiAgICA+Pj4gYiA9IEVULlN1YkVsZW1lbnQoYSwgJ2InKQogICAgPj4+IGMgPSBFVC5TdWJFbGVtZW50KGEsICdjJykKICAgID4+PiBkID0gRVQuRWxlbWVudCgnZCcpCiAgICA+Pj4gYS5pbnNlcnQoMCwgZCkKICAgID4+PiBzdW1tYXJpemVfbGlzdChhKQogICAgWydkJywgJ2InLCAnYyddCiAgICA+Pj4gYS5pbnNlcnQoLTEsIGQpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYSkKICAgIFsnZCcsICdiJywgJ2QnLCAnYyddCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBkAAABidWdfMjAwNzA5X2VsZW1lbnRfaW5zZXJ00AYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPHAAAACgogICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKICAgID4+PiBiID0gRVQuU3ViRWxlbWVudChhLCAnYicpCiAgICA+Pj4gY29tbWVudF9iID0gRVQuQ29tbWVudCgiVEVTVC1iIikKICAgID4+PiBiLmFwcGVuZChjb21tZW50X2IpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYS5pdGVyKEVULkNvbW1lbnQpKQogICAgWyc8Q29tbWVudD4nXQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQXAAAAYnVnXzIwMDcwOV9pdGVyX2NvbW1lbnTgBgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc7oAAAAKCiAgICA+Pj4gYm9iID0gRVQuVHJlZUJ1aWxkZXIoKQogICAgPj4+IGUgPSBib2IuZGF0YSgiZGF0YSIpCiAgICA+Pj4gZSA9IGJvYi5zdGFydCgidGFnIiwge30pCiAgICA+Pj4gZSA9IGJvYi5lbmQoInRhZyIpCiAgICA+Pj4gZSA9IGJvYi5jbG9zZSgpCiAgICA+Pj4gc2VyaWFsaXplKGUpCiAgICAnPHRhZyAvPicKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CwAAAGJ1Z18xNTM0NjMw7wYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHN4AQAACgogICAgPj4+IGUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04Jz8+PGJvZHk+dFx4YzNceGEzZzwvYm9keT4iKQogICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PGJvZHk+dFx4ZTNnPC9ib2R5PiIpCiAgICA+Pj4gRVQudG9zdHJpbmcoZSwgJ2FzY2lpJykKICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/PlxuPGJvZHk+dCYjMjI3O2c8L2JvZHk+IgoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQPAAAAY2hlY2tfaXNzdWU2MjMz/AYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPTAAAACgogICAgPj4+IGUgPSBFVC5YTUwoJzxwcmVmaXg6bG9jYWxuYW1lIHhtbG5zOnByZWZpeD0iJHtzdHVmZn0iLz4nKQogICAgPj4+IGUudGFnCiAgICAneyR7c3R1ZmZ9fWxvY2FsbmFtZScKICAgID4+PiB0ID0gRVQuRWxlbWVudFRyZWUoZSkKICAgID4+PiBFVC50b3N0cmluZyhlKQogICAgJzxuczA6bG9jYWxuYW1lIHhtbG5zOm5zMD0iJHtzdHVmZn0iIC8+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQPAAAAY2hlY2tfaXNzdWUzMTUxCAcAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPaAAAACgogICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0pCiAgICBbJ3RhZyddCiAgICA+Pj4gbmV3ZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGVsZW1bOl0gPSBuZXdlbGVtWzpdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbSkKICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUu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