Menu

#226 String constant too large

unscheduled
open
nobody
tcpproxy (1)
5
2012-10-24
2012-10-22
Danny Sit
No

I am getting the following error from grinder.
net.grinder.scriptengine.jython.JythonScriptExecutionException: SyntaxError: ('s
tring constant too large (more than 32767 characters)', ('C:\Apps\grinder-3.10
\projects\mytest\etc\grinder.py', 449, 7, ''))
(no code object) at line 0

This is similar to this previous issue (http://sourceforge.net/p/grinder/bugs/174/#2b85) but I did not see any resolution.

Here is the string that is causing the error:

def page14(self):
"""POST FleetInsertPage.aspx (request 1401)."""
self.tokenVIEWSTATE = \ '/wEPDwULLTEzMTgwNjk2MjQPZBYCZg9kFgICAQ8WAh4EbGFuZwUCZW4WAgIBD2QWAgIDD2QWAmYPZBYEAgEPDxYIHgtCb3JkZXJTdHlsZQsqJVN5c3RlbS5XZWIuVUkuV2ViQ29udHJvbHMuQm9yZGVyU3R5bGUEHglCYWNrQ29sb3IKpAEeBFRleHQFG0NvbnRlbnRQbGFjZUhvbGRlcjFfTVRpblR4dB4EXyFTQgJIFgIeB29uZm9jdXMFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgUPZBYCAgEPZBYGZg9kFhYCAQ8PFgYeCEltYWdlVXJsBSZ+L29wZW5maWxlcy9pbWFnZXMvQWNjb3VudERpc2FibGVkLnBuZx4LQ29tbWFuZE5hbWUFB2FjY291bnQeB1Zpc2libGVoFgIeB29uY2xpY2sFRnJldHVybiBjb25maXJtKCdVbnNhdmVkIGRhdGEgY2FuIGJlIGxvc3QuV291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nKTtkAgMPDxYGHwYFJH4vb3BlbmZpbGVzL2ltYWdlcy9GbGVldFNlbGVjdGVkLnBuZx8HBQVmbGVldB8IZxYCHwkFRnJldHVybiBjb25maXJtKCdVbnNhdmVkIGRhdGEgY2FuIGJlIGxvc3QuV291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nKTtkAgUPDxYGHwYFJn4vb3BlbmZpbGVzL2ltYWdlcy9NaWxlYWdlRGlzYWJsZWQucG5nHwcFB21pbGVhZ2UfCGcWAh8JBUZyZXR1cm4gY29uZmlybSgnVW5zYXZlZCBkYXRhIGNhbiBiZSBsb3N0LldvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/Jyk7ZAIHDw8WBh8GBSd+L29wZW5maWxlcy9pbWFnZXMvV2d0R3JvdXBEaXNhYmxlZC5wbmcfBwUHd3RHcm91cB8IZxYCHwkFRnJldHVybiBjb25maXJtKCdVbnNhdmVkIGRhdGEgY2FuIGJlIGxvc3QuV291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nKTtkAgkPDxYGHwYFJn4vb3BlbmZpbGVzL2ltYWdlcy9WZWhpY2xlRGlzYWJsZWQucG5nHwcFB3ZlaGljbGUfCGcWAh8JBUZyZXR1cm4gY29uZmlybSgnVW5zYXZlZCBkYXRhIGNhbiBiZSBsb3N0LldvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/Jyk7ZAILDw8WBh8GBSZ+L29wZW5maWxlcy9pbWFnZXMvQmlsbGluZ0Rpc2FibGVkLnBuZx8HBQdiaWxsaW5nHwhnFgIfCQVGcmV0dXJuIGNvbmZpcm0oJ1Vuc2F2ZWQgZGF0YSBjYW4gYmUgbG9zdC5Xb3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPycpO2QCDQ8PFgYfBgUmfi9vcGVuZmlsZXMvaW1hZ2VzL1BheW1lbnREaXNhYmxlZC5wbmcfBwUHcGF5bWVudB8IZxYCHwkFRnJldHVybiBjb25maXJtKCdVbnNhdmVkIGRhdGEgY2FuIGJlIGxvc3QuV291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nKTtkAg8PDxYGHwYFKn4vb3BlbmZpbGVzL2ltYWdlcy9DcmVkZW50aWFsc0Rpc2FibGVkLnBuZx8HBRVDUkVERU5USUFMX0FTU0lHTk1FTlQfCGcWAh8JBUZyZXR1cm4gY29uZmlybSgnVW5zYXZlZCBkYXRhIGNhbiBiZSBsb3N0LldvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/Jyk7ZAIRDw8WBB8GBSV+L29wZW5maWxlcy9pbWFnZXMvTWFpbk1lbnVOb3JtYWwucG5nHwcFCE1haW5NZW51FgIfCQVGcmV0dXJuIGNvbmZpcm0oJ1Vuc2F2ZWQgZGF0YSBjYW4gYmUgbG9zdC5Xb3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPycpO2QCEw8PFgIfBgUmfi9vcGVuZmlsZXMvaW1hZ2VzL0VucXVlcmllc05vcm1hbC5wbmdkZAIVD2QWEgIBDw8WAh4NT25DbGllbnRDbGljawWhDXZhciBicm93c2VyID0gbmF2aWdhdG9yLmFwcE5hbWU7IHZhciB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsgaWYgKHR5cGVvZiB3aW5kb3cuaW5uZXJIZWlnaHQgIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7IH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9IDApIHsgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IH0gZWxzZSB7IHZpZXdwb3J0aGVpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGllbnRIZWlnaHQ7IH0gdmFyIHZpZXdwb3J0d2lkdGggPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsgaWYgKHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aCAhPSAndW5kZWZpbmVkJykgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7IH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAhPSAwKSB7IHZpZXdwb3J0d2lkdGggPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsgfSBlbHNlIHsgdmlld3BvcnR3aWR0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50V2lkdGg7IH0gdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSAxMDA7IHZhciB2VyA9IHZpZXdwb3J0d2lkdGggLSAxMDsgIHZhciB2VCA9IDA7IHZhciB2TCA9IDA7aWYgKGJyb3dzZXIgPT0gJ05ldHNjYXBlJykgeyB2YXIgdkggPSB2aWV3cG9ydGhlaWdodCAtIDg1OyB2VCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuc2NyZWVuWSArIDE4NTsgdkwgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblg7IH0gZWxzZSBpZiAoYnJvd3NlciA9PSAnTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyJykgeyB2VCA9IGRvY3VtZW50LnBhcmVudFdpbmRvdy5zY3JlZW5Ub3AgKyAyNTsgdkwgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuTGVmdDsgfXdpbmRvdy5vcGVuKCcuLi9QYWdlQ29udHJvbGxlci5hc3B4P2FjdGlvbj1+fkFjY291bnQgSW5xdWlyeScsICdJbnF1aXJ5JywgJ2hlaWdodD0nICsgdkggKyAnLHdpZHRoPScgKyB2VyArICcsc2Nyb2xsYmFycz15ZXMsc3RhdHVzPXllcyxsZWZ0PScgKyB2TCArICcsdG9wPScgKyB2VCArICcsIHRvb2xiYXI9bm8sbWVudWJhcj1ubyxsb2NhdGlvbj1jZW50ZXIscmVzaXphYmxlPXllcycsJ1RydWUnKTtyZXR1cm4gZmFsc2U7ZGQCAw8PFgIfCgWfDXZhciBicm93c2VyID0gbmF2aWdhdG9yLmFwcE5hbWU7IHZhciB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsgaWYgKHR5cGVvZiB3aW5kb3cuaW5uZXJIZWlnaHQgIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7IH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9IDApIHsgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IH0gZWxzZSB7IHZpZXdwb3J0aGVpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGllbnRIZWlnaHQ7IH0gdmFyIHZpZXdwb3J0d2lkdGggPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsgaWYgKHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aCAhPSAndW5kZWZpbmVkJykgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7IH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAhPSAwKSB7IHZpZXdwb3J0d2lkdGggPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsgfSBlbHNlIHsgdmlld3BvcnR3aWR0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50V2lkdGg7IH0gdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSAxMDA7IHZhciB2VyA9IHZpZXdwb3J0d2lkdGggLSAxMDsgIHZhciB2VCA9IDA7IHZhciB2TCA9IDA7aWYgKGJyb3dzZXIgPT0gJ05ldHNjYXBlJykgeyB2YXIgdkggPSB2aWV3cG9ydGhlaWdodCAtIDg1OyB2VCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuc2NyZWVuWSArIDE4NTsgdkwgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblg7IH0gZWxzZSBpZiAoYnJvd3NlciA9PSAnTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyJykgeyB2VCA9IGRvY3VtZW50LnBhcmVudFdpbmRvdy5zY3JlZW5Ub3AgKyAyNTsgdkwgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuTGVmdDsgfXdpbmRvdy5vcGVuKCcuLi9QYWdlQ29udHJvbGxlci5hc3B4P2FjdGlvbj1+fkZsZWV0IElucXVpcnknLCAnSW5xdWlyeScsICdoZWlnaHQ9JyArIHZIICsgJyx3aWR0aD0nICsgdlcgKyAnLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz15ZXMsbGVmdD0nICsgdkwgKyAnLHRvcD0nICsgdlQgKyAnLCB0b29sYmFyPW5vLG1lbnViYXI9bm8sbG9jYXRpb249Y2VudGVyLHJlc2l6YWJsZT15ZXMnLCdUcnVlJyk7cmV0dXJuIGZhbHNlO2RkAgUPDxYCHwoFog12YXIgYnJvd3NlciA9IG5hdmlnYXRvci5hcHBOYW1lOyB2YXIgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IGlmICh0eXBlb2Ygd2luZG93LmlubmVySGVpZ2h0ICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAwKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyB9IGVsc2UgeyB2aWV3cG9ydGhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50SGVpZ2h0OyB9IHZhciB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IGlmICh0eXBlb2Ygd2luZG93LmlubmVyV2lkdGggIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gMCkgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IH0gZWxzZSB7IHZpZXdwb3J0d2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudFdpZHRoOyB9IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gMTAwOyB2YXIgdlcgPSB2aWV3cG9ydHdpZHRoIC0gMTA7ICB2YXIgdlQgPSAwOyB2YXIgdkwgPSAwO2lmIChicm93c2VyID09ICdOZXRzY2FwZScpIHsgdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSA4NTsgdlQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblkgKyAxODU7IHZMID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5YOyB9IGVsc2UgaWYgKGJyb3dzZXIgPT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicpIHsgdlQgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuVG9wICsgMjU7IHZMID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlbkxlZnQ7IH13aW5kb3cub3BlbignLi4vUGFnZUNvbnRyb2xsZXIuYXNweD9hY3Rpb249fn5EaXN0YW5jZSBJbnF1aXJ5JywgJ0lucXVpcnknLCAnaGVpZ2h0PScgKyB2SCArICcsd2lkdGg9JyArIHZXICsgJyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9eWVzLGxlZnQ9JyArIHZMICsgJyx0b3A9JyArIHZUICsgJywgdG9vbGJhcj1ubyxtZW51YmFyPW5vLGxvY2F0aW9uPWNlbnRlcixyZXNpemFibGU9eWVzJywnVHJ1ZScpO3JldHVybiBmYWxzZTtkZAIHDw8WAh8KBaYNdmFyIGJyb3dzZXIgPSBuYXZpZ2F0b3IuYXBwTmFtZTsgdmFyIHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lckhlaWdodCAhPSAndW5kZWZpbmVkJykgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgIT0gMCkgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsgfSBlbHNlIHsgdmlld3BvcnRoZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudEhlaWdodDsgfSB2YXIgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lcldpZHRoICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0d2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9IDApIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyB9IGVsc2UgeyB2aWV3cG9ydHdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGllbnRXaWR0aDsgfSB2YXIgdkggPSB2aWV3cG9ydGhlaWdodCAtIDEwMDsgdmFyIHZXID0gdmlld3BvcnR3aWR0aCAtIDEwOyAgdmFyIHZUID0gMDsgdmFyIHZMID0gMDtpZiAoYnJvd3NlciA9PSAnTmV0c2NhcGUnKSB7IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gODU7IHZUID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5ZICsgMTg1OyB2TCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuc2NyZWVuWDsgfSBlbHNlIGlmIChicm93c2VyID09ICdNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXInKSB7IHZUID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlblRvcCArIDI1OyB2TCA9IGRvY3VtZW50LnBhcmVudFdpbmRvdy5zY3JlZW5MZWZ0OyB9d2luZG93Lm9wZW4oJy4uL1BhZ2VDb250cm9sbGVyLmFzcHg/YWN0aW9uPX5+V2VpZ2h0IEdyb3VwIElucXVpcnknLCAnSW5xdWlyeScsICdoZWlnaHQ9JyArIHZIICsgJyx3aWR0aD0nICsgdlcgKyAnLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz15ZXMsbGVmdD0nICsgdkwgKyAnLHRvcD0nICsgdlQgKyAnLCB0b29sYmFyPW5vLG1lbnViYXI9bm8sbG9jYXRpb249Y2VudGVyLHJlc2l6YWJsZT15ZXMnLCdUcnVlJyk7cmV0dXJuIGZhbHNlO2RkAgkPDxYCHwoFoQ12YXIgYnJvd3NlciA9IG5hdmlnYXRvci5hcHBOYW1lOyB2YXIgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IGlmICh0eXBlb2Ygd2luZG93LmlubmVySGVpZ2h0ICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAwKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyB9IGVsc2UgeyB2aWV3cG9ydGhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50SGVpZ2h0OyB9IHZhciB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IGlmICh0eXBlb2Ygd2luZG93LmlubmVyV2lkdGggIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gMCkgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IH0gZWxzZSB7IHZpZXdwb3J0d2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudFdpZHRoOyB9IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gMTAwOyB2YXIgdlcgPSB2aWV3cG9ydHdpZHRoIC0gMTA7ICB2YXIgdlQgPSAwOyB2YXIgdkwgPSAwO2lmIChicm93c2VyID09ICdOZXRzY2FwZScpIHsgdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSA4NTsgdlQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblkgKyAxODU7IHZMID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5YOyB9IGVsc2UgaWYgKGJyb3dzZXIgPT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicpIHsgdlQgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuVG9wICsgMjU7IHZMID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlbkxlZnQ7IH13aW5kb3cub3BlbignLi4vUGFnZUNvbnRyb2xsZXIuYXNweD9hY3Rpb249fn5WZWhpY2xlIElucXVpcnknLCAnSW5xdWlyeScsICdoZWlnaHQ9JyArIHZIICsgJyx3aWR0aD0nICsgdlcgKyAnLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz15ZXMsbGVmdD0nICsgdkwgKyAnLHRvcD0nICsgdlQgKyAnLCB0b29sYmFyPW5vLG1lbnViYXI9bm8sbG9jYXRpb249Y2VudGVyLHJlc2l6YWJsZT15ZXMnLCdUcnVlJyk7cmV0dXJuIGZhbHNlO2RkAgsPDxYCHwoFpA12YXIgYnJvd3NlciA9IG5hdmlnYXRvci5hcHBOYW1lOyB2YXIgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IGlmICh0eXBlb2Ygd2luZG93LmlubmVySGVpZ2h0ICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAwKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyB9IGVsc2UgeyB2aWV3cG9ydGhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50SGVpZ2h0OyB9IHZhciB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IGlmICh0eXBlb2Ygd2luZG93LmlubmVyV2lkdGggIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gMCkgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IH0gZWxzZSB7IHZpZXdwb3J0d2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudFdpZHRoOyB9IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gMTAwOyB2YXIgdlcgPSB2aWV3cG9ydHdpZHRoIC0gMTA7ICB2YXIgdlQgPSAwOyB2YXIgdkwgPSAwO2lmIChicm93c2VyID09ICdOZXRzY2FwZScpIHsgdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSA4NTsgdlQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblkgKyAxODU7IHZMID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5YOyB9IGVsc2UgaWYgKGJyb3dzZXIgPT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicpIHsgdlQgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuVG9wICsgMjU7IHZMID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlbkxlZnQ7IH13aW5kb3cub3BlbignLi4vUGFnZUNvbnRyb2xsZXIuYXNweD9hY3Rpb249fn5TdXBwbGVtZW50IElucXVpcnknLCAnSW5xdWlyeScsICdoZWlnaHQ9JyArIHZIICsgJyx3aWR0aD0nICsgdlcgKyAnLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz15ZXMsbGVmdD0nICsgdkwgKyAnLHRvcD0nICsgdlQgKyAnLCB0b29sYmFyPW5vLG1lbnViYXI9bm8sbG9jYXRpb249Y2VudGVyLHJlc2l6YWJsZT15ZXMnLCdUcnVlJyk7cmV0dXJuIGZhbHNlO2RkAg0PDxYCHwoFnw12YXIgYnJvd3NlciA9IG5hdmlnYXRvci5hcHBOYW1lOyB2YXIgdmlld3BvcnRoZWlnaHQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IGlmICh0eXBlb2Ygd2luZG93LmlubmVySGVpZ2h0ICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAwKSB7IHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyB9IGVsc2UgeyB2aWV3cG9ydGhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xpZW50SGVpZ2h0OyB9IHZhciB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IGlmICh0eXBlb2Ygd2luZG93LmlubmVyV2lkdGggIT0gJ3VuZGVmaW5lZCcpIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggIT0gMCkgeyB2aWV3cG9ydHdpZHRoID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7IH0gZWxzZSB7IHZpZXdwb3J0d2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudFdpZHRoOyB9IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gMTAwOyB2YXIgdlcgPSB2aWV3cG9ydHdpZHRoIC0gMTA7ICB2YXIgdlQgPSAwOyB2YXIgdkwgPSAwO2lmIChicm93c2VyID09ICdOZXRzY2FwZScpIHsgdmFyIHZIID0gdmlld3BvcnRoZWlnaHQgLSA4NTsgdlQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcmVlblkgKyAxODU7IHZMID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5YOyB9IGVsc2UgaWYgKGJyb3dzZXIgPT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicpIHsgdlQgPSBkb2N1bWVudC5wYXJlbnRXaW5kb3cuc2NyZWVuVG9wICsgMjU7IHZMID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlbkxlZnQ7IH13aW5kb3cub3BlbignLi4vUGFnZUNvbnRyb2xsZXIuYXNweD9hY3Rpb249fn5DZW5zdXMgU2VhcmNoJywgJ0lucXVpcnknLCAnaGVpZ2h0PScgKyB2SCArICcsd2lkdGg9JyArIHZXICsgJyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9eWVzLGxlZnQ9JyArIHZMICsgJyx0b3A9JyArIHZUICsgJywgdG9vbGJhcj1ubyxtZW51YmFyPW5vLGxvY2F0aW9uPWNlbnRlcixyZXNpemFibGU9eWVzJywnVHJ1ZScpO3JldHVybiBmYWxzZTtkZAIPDw8WAh8KBa0NdmFyIGJyb3dzZXIgPSBuYXZpZ2F0b3IuYXBwTmFtZTsgdmFyIHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lckhlaWdodCAhPSAndW5kZWZpbmVkJykgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgIT0gMCkgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsgfSBlbHNlIHsgdmlld3BvcnRoZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudEhlaWdodDsgfSB2YXIgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lcldpZHRoICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0d2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9IDApIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyB9IGVsc2UgeyB2aWV3cG9ydHdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGllbnRXaWR0aDsgfSB2YXIgdkggPSB2aWV3cG9ydGhlaWdodCAtIDEwMDsgdmFyIHZXID0gdmlld3BvcnR3aWR0aCAtIDEwOyAgdmFyIHZUID0gMDsgdmFyIHZMID0gMDtpZiAoYnJvd3NlciA9PSAnTmV0c2NhcGUnKSB7IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gODU7IHZUID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5ZICsgMTg1OyB2TCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuc2NyZWVuWDsgfSBlbHNlIGlmIChicm93c2VyID09ICdNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXInKSB7IHZUID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlblRvcCArIDI1OyB2TCA9IGRvY3VtZW50LnBhcmVudFdpbmRvdy5zY3JlZW5MZWZ0OyB9d2luZG93Lm9wZW4oJy4uL1BhZ2VDb250cm9sbGVyLmFzcHg/YWN0aW9uPX5+VmVoaWNsZSBUcmFuc2FjdGlvbiBJbnF1aXJ5JywgJ0lucXVpcnknLCAnaGVpZ2h0PScgKyB2SCArICcsd2lkdGg9JyArIHZXICsgJyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9eWVzLGxlZnQ9JyArIHZMICsgJyx0b3A9JyArIHZUICsgJywgdG9vbGJhcj1ubyxtZW51YmFyPW5vLGxvY2F0aW9uPWNlbnRlcixyZXNpemFibGU9eWVzJywnVHJ1ZScpO3JldHVybiBmYWxzZTtkZAIRDw8WAh8KBa0NdmFyIGJyb3dzZXIgPSBuYXZpZ2F0b3IuYXBwTmFtZTsgdmFyIHZpZXdwb3J0aGVpZ2h0ID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lckhlaWdodCAhPSAndW5kZWZpbmVkJykgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgIT0gMCkgeyB2aWV3cG9ydGhlaWdodCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsgfSBlbHNlIHsgdmlld3BvcnRoZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsaWVudEhlaWdodDsgfSB2YXIgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyBpZiAodHlwZW9mIHdpbmRvdy5pbm5lcldpZHRoICE9ICd1bmRlZmluZWQnKSB7IHZpZXdwb3J0d2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnBhcmVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9IDApIHsgdmlld3BvcnR3aWR0aCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyB9IGVsc2UgeyB2aWV3cG9ydHdpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGllbnRXaWR0aDsgfSB2YXIgdkggPSB2aWV3cG9ydGhlaWdodCAtIDEwMDsgdmFyIHZXID0gdmlld3BvcnR3aWR0aCAtIDEwOyAgdmFyIHZUID0gMDsgdmFyIHZMID0gMDtpZiAoYnJvd3NlciA9PSAnTmV0c2NhcGUnKSB7IHZhciB2SCA9IHZpZXdwb3J0aGVpZ2h0IC0gODU7IHZUID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JlZW5ZICsgMTg1OyB2TCA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuc2NyZWVuWDsgfSBlbHNlIGlmIChicm93c2VyID09ICdNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXInKSB7IHZUID0gZG9jdW1lbnQucGFyZW50V2luZG93LnNjcmVlblRvcCArIDI1OyB2TCA9IGRvY3VtZW50LnBhcmVudFdpbmRvdy5zY3JlZW5MZWZ0OyB9d2luZG93Lm9wZW4oJy4uL1BhZ2VDb250cm9sbGVyLmFzcHg/YWN0aW9uPX5+V2d0IEdyb3VwIFN1cHAgQmFzZSBJbnF1aXJ5JywgJ0lucXVpcnknLCAnaGVpZ2h0PScgKyB2SCArICcsd2lkdGg9JyArIHZXICsgJyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9eWVzLGxlZnQ9JyArIHZMICsgJyx0b3A9JyArIHZUICsgJywgdG9vbGJhcj1ubyxtZW51YmFyPW5vLGxvY2F0aW9uPWNlbnRlcixyZXNpemFibGU9eWVzJywnVHJ1ZScpO3JldHVybiBmYWxzZTtkZAICDw9kFgIeCW9ua2V5ZG93bgVVcmV0dXJuIGNsaWNrQnV0dG9uKGV2ZW50LGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDb250ZW50UGxhY2VIb2xkZXIxX01Qcm9jZWVkQnRuJykpOxZqAgEPZBYCZg9kFgYCAw8PFgIfAwUtUGxlYXNlIEVudGVyIFVzZXJJRCBhbmQgUGFzc3dvcmQgdG8gT3ZlcnJpZGUuZGQCBw8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAILDw8WBh8BCysEBB8CCqQBHwQCSBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgMPZBYCZg9kFgICAw8PFgIfAwUJTmV3IEZsZWV0ZGQCBw8PFggfAQsrBAYfAwUFMTAwMDIfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgsPDxYIHwELKwQGHwMFH09OVEFSSU8gQkFUVEVSWSBTRVJWSUNFUyBDTyBMVEQfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAg8PDxYGHwELKwQEHwIKpAEfBAJIFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCFQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIbDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAiEPDxYGHwELKwQGHwIJ4ODg/x8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIlDw8WCB8BCysEBB8EAkgfAgqkAR4IUmVhZE9ubHloFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCKw8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUFAA5GT1IgLSBGT1IgSElSRRRDT00gLSBDT01NT04gQ0FSUklFUhVGSFIgLSBGT1IgSElSRSBSRU5UQUwNUFZUIC0gUFJJVkFURRUFAANGT1IDQ09NA0ZIUgNQVlQUKwMFZ2dnZ2cWAWZkAjEPZBYCZg9kFgICAQ8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUGAAdBIC0gQUxMCkUgLSBFWEVNUFQTSCAtIEhPVVNFSE9MRCBHT09EUwhMIC0gTE9HUw5QIC0gUEFTU0VOR0VSUxUGAAFBAUUBSAFMAVAUKwMGZ2dnZ2dnZGQCNQ8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUDCkEgLSBBQ1RJVkUMSSAtIElOQUNUSVZFCkwgLSBMT0NLRUQVAwFBAUkBTBQrAwNnZ2cWAWZkAjsPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCQQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJFDxYCHgdFbmFibGVkZ2QCSQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJLDxYCHw1nZAJPDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAlMPEA9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fRAVAgtFIC0gRW5nbGlzaApGIC0gRnJlbmNoFQIBRQFGFCsDAmdnZGQCVw8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJbDw8WAh4MRXJyb3JNZXNzYWdlBSZJUlBHRU4xNzogW0VdIENvbnRhY3QgbmFtZSBpcyByZXF1aXJlZGRkAmEPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCZw8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJtDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAnMPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCeQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJ9Dw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAoEBDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAoMBDw8WAh8OBSRJUlBHRU4yMDM6IFtFXSBQaG9uZSBObyBpcyByZXF1aXJlZC5kZAKHAQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKLAQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKPAQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKTAQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKXAQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKdAQ8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKhAQ8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKjAQ8WAh8NZ2QCrQEPDxYKHwELKwQEHghDc3NDbGFzc2UfBAJKHwIKpAEfDGgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAKxAQ8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9DxYMZgIBAgICAwIEAgUCBgIHAggCCQIKAgsWDBAFDTk5MS1ET1dOU1ZJRVcFAzk5MWcQBQw5ODItS0lOR1NUT04FAzk4MmcQBQo5NzgtQkFSUklFBQM5NzhnEAUNOTYxLU5PUlRIIEJBWQUDOTYxZxAFDTk1OS1QT1JUIEhPUEUFAzk1OWcQBQw5NDQtV0FURVJMT08FAzk0NGcQBQs5MzItV0lORFNPUgUDOTMyZxAFDzkzMC1USFVOREVSIEJBWQUDOTMwZxAFCjkyOC1PVFRBV0EFAzkyOGcQBQo5MTktTE9ORE9OBQM5MTlnEAUMOTEwLUhBTUlMVE9OBQM5MTBnEAUNOTA1LURPV05TVklFVwUDOTA1Z2RkArUBDw8WBh8BCysEBB8CCqQBHwQCSBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kArkBDw8WBh8BCysEBB8CCqQBHwQCSBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAscBD2QWAgICD2QWBAIBDw8WBh8BCysEBB8CCqQBHwQCSBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgMPFgIfDWdkAskBD2QWCAIFDxAPFgIeB0NoZWNrZWRoZGRkZAIJDxAPFgIfEGhkZGRkAg0PEA8WAh8QaGRkZGQCEQ8QDxYCHxBoZGRkZALLAQ9kFgpmD2QWAgIBD2QWAgIBD2QWDAIDDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAggPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCDQ8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAISDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCFg8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIbDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCAQ9kFgICAQ9kFgICAQ9kFgwCAw8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIHDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgwPDxYGHwELKwQEHwIKpAEfBAJIFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCEA8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBVAAApPTi1PTlRBUklPCkFCLUFMQkVSVEEJQUstQUxBU0tBCkFMLUFMQUJBTUELQVItQVJLQU5TQVMKQVotQVJJWk9OQRNCQy1CUklUSVNIIENPTFVNQklBDUNBLUNBTElGT1JOSUELQ08tQ09MT1JBRE8OQ1QtQ09OTkVDVElDVVQXREMtRElTVFJJQ1QgT0YgQ09MVU1CSUELREUtREVMQVdBUkUKRkwtRkxPUklEQQpHQS1HRU9SR0lBB0lBLUlPV0EISUQtSURBSE8LSUwtSUxMSU5PSVMKSU4tSU5ESUFOQQlLUy1LQU5TQVMLS1ktS0VOVFVDS1kMTEEtTE9VSVNJQU5BEE1BLU1BU1NBQ0hVU0VUVFMLTUItTUFOSVRPQkELTUQtTUFSWUxBTkQITUUtTUFJTkULTUktTUlDSElHQU4MTU4tTUlOTkVTT1RBC01PLU1JU1NPVVJJDk1TLU1JU1NJU1NJUFBJCk1ULU1PTlRBTkEJTVgtTUVYSUNPEE5CLU5FVyBCUlVOU1dJQ0sRTkMtTk9SVEggQ0FST0xJTkEPTkQtTk9SVEggREFLT1RBC05FLU5FQlJBU0tBEE5ILU5FVyBIQU1QU0hJUkUNTkotTkVXIEpFUlNFWRxOTC1ORVdGT1VORExBTkQgQU5EIExBQlJBRE9SDU5NLU5FVyBNRVhJQ08OTlMtTk9WQSBTQ09USUERTlQtTlcgVEVSUklUT1JJRVMJTlYtTkVWQURBC05ZLU5FVyBZT1JLB09ILU9ISU8LT0stT0tMQUhPTUEJT1ItT1JFR09OD1BBLVBFTk5TWUxWQU5JQRdQRS1QUklOQ0UgRURXQVJEIElTTEFORAlRQy1RVUVCRUMPUkktUkhPREUgSVNMQU5EEVNDLVNPVVRIIENBUk9MSU5BD1NELVNPVVRIIERBS09UQQ9TSy1TQVNLQVRDSEVXQU4MVE4tVEVOTkVTU0VFCFRYLVRFWEFTB1VULVVUQUgLVkEtVklSR0lOSUEKVlQtVkVSTU9OVA1XQS1XQVNISU5HVE9ODFdJLVdJU0NPTlNJThBXVi1XRVNUIFZJUkdJTklBCldZLVdZT01JTkcIWVQtWVVLT04VQAACT04CQUICQUsCQUwCQVICQVoCQkMCQ0ECQ08CQ1QCREMCREUCRkwCR0ECSUECSUQCSUwCSU4CS1MCS1kCTEECTUECTUICTUQCTUUCTUkCTU4CTU8CTVMCTVQCTVgCTkICTkMCTkQCTkUCTkgCTkoCTkwCTk0CTlMCTlQCTlYCTlkCT0gCT0sCT1ICUEECUEUCUUMCUkkCU0MCU0QCU0sCVE4CVFgCVVQCVkECVlQCV0ECV0kCV1YCV1kCWVQUKwNAZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZxYBZmQCFA8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIYD2QWAmYPZBYCAgEPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAICD2QWAgIBD2QWAgIBD2QWDAIDDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgcPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCDA8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIQDxAPZBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge30QFUAACk9OLU9OVEFSSU8KQUItQUxCRVJUQQlBSy1BTEFTS0EKQUwtQUxBQkFNQQtBUi1BUktBTlNBUwpBWi1BUklaT05BE0JDLUJSSVRJU0ggQ09MVU1CSUENQ0EtQ0FMSUZPUk5JQQtDTy1DT0xPUkFETw5DVC1DT05ORUNUSUNVVBdEQy1ESVNUUklDVCBPRiBDT0xVTUJJQQtERS1ERUxBV0FSRQpGTC1GTE9SSURBCkdBLUdFT1JHSUEHSUEtSU9XQQhJRC1JREFITwtJTC1JTExJTk9JUwpJTi1JTkRJQU5BCUtTLUtBTlNBUwtLWS1LRU5UVUNLWQxMQS1MT1VJU0lBTkEQTUEtTUFTU0FDSFVTRVRUUwtNQi1NQU5JVE9CQQtNRC1NQVJZTEFORAhNRS1NQUlORQtNSS1NSUNISUdBTgxNTi1NSU5ORVNPVEELTU8tTUlTU09VUkkOTVMtTUlTU0lTU0lQUEkKTVQtTU9OVEFOQQlNWC1NRVhJQ08QTkItTkVXIEJSVU5TV0lDSxFOQy1OT1JUSCBDQVJPTElOQQ9ORC1OT1JUSCBEQUtPVEELTkUtTkVCUkFTS0EQTkgtTkVXIEhBTVBTSElSRQ1OSi1ORVcgSkVSU0VZHE5MLU5FV0ZPVU5ETEFORCBBTkQgTEFCUkFET1INTk0tTkVXIE1FWElDTw5OUy1OT1ZBIFNDT1RJQRFOVC1OVyBURVJSSVRPUklFUwlOVi1ORVZBREELTlktTkVXIFlPUksHT0gtT0hJTwtPSy1PS0xBSE9NQQlPUi1PUkVHT04PUEEtUEVOTlNZTFZBTklBF1BFLVBSSU5DRSBFRFdBUkQgSVNMQU5ECVFDLVFVRUJFQw9SSS1SSE9ERSBJU0xBTkQRU0MtU09VVEggQ0FST0xJTkEPU0QtU09VVEggREFLT1RBD1NLLVNBU0tBVENIRVdBTgxUTi1URU5ORVNTRUUIVFgtVEVYQVMHVVQtVVRBSAtWQS1WSVJHSU5JQQpWVC1WRVJNT05UDVdBLVdBU0hJTkdUT04MV0ktV0lTQ09OU0lOEFdWLVdFU1QgVklSR0lOSUEKV1ktV1lPTUlORwhZVC1ZVUtPThVAAAJPTgJBQgJBSwJBTAJBUgJBWgJCQwJDQQJDTwJDVAJEQwJERQJGTAJHQQJJQQJJRAJJTAJJTgJLUwJLWQJMQQJNQQJNQgJNRAJNRQJNSQJNTgJNTwJNUwJNVAJNWAJOQgJOQwJORAJORQJOSAJOSgJOTAJOTQJOUwJOVAJOVgJOWQJPSAJPSwJPUgJQQQJQRQJRQwJSSQJTQwJTRAJTSwJUTgJUWAJVVAJWQQJWVAJXQQJXSQJXVgJXWQJZVBQrA0BnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnFgFmZAIUDw8WBh8BCysEBB8CCqQBHwQCSBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAhgPZBYCZg9kFgICAQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgMPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFgJmD2QWAgIBD2QWGgIFDxAPZBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge30QFQQAEzEwMDA5LUJVUk5TIENPIExURC4dMTAwMjUtQkFSU0FMT1UgUEVSTUlUVElORyBJTkMVMTAwNDItSSBIRUxQIEVWRVJZT05FFQQABTEwMDA5BTEwMDI1BTEwMDQyFCsDBGdnZ2cWAWZkAgkPD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIPDxAPFgIfDWhkZGRkAhcPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIfD2QWBgIBDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCBQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgkPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIlDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCKw9kFgYCAQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgUPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIHDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCMQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAjcPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAI9Dw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCQw8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAkkPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJPDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCBA9kFgICAQ9kFgICAQ9kFgJmD2QWAgIBD2QWBGYPZBYQZg8PFgIfA2VkZAICDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgQPDxYGHwELKwQEHwIKpAEfBAJIFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCBg8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIJDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgwPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCDw8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIRDw9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCAg9kFgICAQ9kFgJmD2QWAgIBDzwrABEBARAWABYAFgBkAs8BDxYCHw1nZALTAQ9kFgYCAw8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUEDUMgLSBDT0xMRUNURUQQTiAtIE5PVCBSRVFVSVJFRA9PIC0gT1VUU1RBTkRJTkcUUyAtIFNZU1RFTSBDT0xMRUNURUQVBAFDAU4BTwFTFCsDBGdnZ2dkZAINDxAPZBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge30QFQQNQyAtIENPTExFQ1RFRBBOIC0gTk9UIFJFUVVJUkVED08gLSBPVVRTVEFORElORxRTIC0gU1lTVEVNIENPTExFQ1RFRBUEAUMBTgFPAVMUKwMEZ2dnZ2RkAhcPEA9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fRAVBA1DIC0gQ09MTEVDVEVEEE4gLSBOT1QgUkVRVUlSRUQPTyAtIE9VVFNUQU5ESU5HFFMgLSBTWVNURU0gQ09MTEVDVEVEFQQBQwFOAU8BUxQrAwRnZ2dnZGQC1QEPZBYEAgEPPCsAEQEBEBYAFgAWAGQCBQ9kFgoCBw8PFgYfAQsrBAQfAgqkAR8EAkgWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAINDxAPZBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge30QFQIMSSAtIEludGVybmFsClAgLSBQdWJsaWMVAgFJAVAUKwMCZ2dkZAIVDxAPFgYeDURhdGFUZXh0RmllbGQFBkNkRGVzYx4ORGF0YVZhbHVlRmllbGQFC0NvbW1lbnRUeXBlHgtfIURhdGFCb3VuZGcWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUAFQAUKwMAFgBkAh0PD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIfDw9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQC2wEPDxYEHgdUb29sVGlwBQ5Ib3QgS2V5PUFsdCArUB4JQWNjZXNzS2V5BQFQFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQC3QEPD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZALfAQ8PFgYfDWgfFAUOSG90IEtleT1BbHQgK0MfFQUBQxYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAuEBDw8WBB8UBQ5Ib3QgS2V5PUFsdCArUh8VBQFSFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQC4wEPDxYEHxQFDkhvdCBLZXk9QWx0ICtRHxUFAVEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZALlAQ8PFgQfFAUOSG90IEtleT1BbHQgK0gfFQUBSBYEHwkF8QF3aW5kb3cub3BlbignaHR0cHM6Ly9sdGNkcXB2c2R2YXAwMTUuY2locy5hZC5nb3Yub24uY2EvT05JUlAvT3BlbkZpbGVzL0hlbHAvT05fSVJQX0hlbHAuaHRtI19Ub2MyNTA5ODU1MjAnLCcnLCdoZWlnaHQ9NjAwLHdpZHRoPTEwNTAsc3RhdHVzPXllcyxsZWZ0PTEyNSx0b3A9MjAsdG9vbGJhcj1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9eWVzLGxvY2F0aW9uPWNlbnRlcixyZXNpemFibGU9eWVzJyk7cmV0dXJuIGZhbHNlHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgMPDxYCHwhoZBYOAgEPZBYCZg9kFgICAw8PFgIfAwUJTmV3IEZsZWV0ZGQClwEPZBYIAgUPEA8WAh8QaGRkZGQCCQ8QDxYCHxBoZGRkZAINDxAPFgIfEGhkZGRkAhEPEA8WAh8QaGRkZGQCpwEPZBYCAgEPZBYCZg9kFgJmD2QWAgIBD2QWMgIBDw8WBB8PBQxDb25maXJtTGFiZWwfBAICZGQCAw8WAh8IZ2QCBQ8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZBYAZAIJDw9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCCw8PFgQfDwUMQ29uZmlybUxhYmVsHwQCAmRkAhMPDxYEHw8FDENvbmZpcm1MYWJlbB8EAgJkZAIXDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCGw8PFgQfDwUMQ29uZmlybUxhYmVsHwQCAmRkAh8PZBYGAgEPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIFDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCCQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAiMPDxYEHw8FDENvbmZpcm1MYWJlbB8EAgJkZAIlDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCKQ8PFgQfDwUMQ29uZmlybUxhYmVsHwQCAmRkAisPZBYGAgEPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIFDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCBw8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAi8PDxYEHw8FDENvbmZpcm1MYWJlbB8EAgJkZAIxDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCNQ8PFgQfDwUMQ29uZmlybUxhYmVsHwQCAmRkAjcPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAI7Dw8WBB8PBQxDb25maXJtTGFiZWwfBAICZGQCPQ8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAkEPDxYEHw8FDENvbmZpcm1MYWJlbB8EAgJkZAJDDw8WBh8BCysEBh8EAkgfAgng4OD/FgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCRw8PFgQfDwUMQ29uZmlybUxhYmVsHwQCAmRkAkkPDxYGHwELKwQGHwQCSB8CCeDg4P8WAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAJNDw8WBB8PBQxDb25maXJtTGFiZWwfBAICZGQCTw8PFgYfAQsrBAYfBAJIHwIJ4ODg/xYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAqsBD2QWAgIBD2QWBGYPZBYQZg8PFgIfA2VkZAICDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgQPDxYGHwELKwQEHwIKpAEfBAJIFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCBg8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIJDw8WBh8BCysEBB8EAkgfAgqkARYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kAgwPDxYGHwELKwQEHwQCSB8CCqQBFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCDw8PFgYfAQsrBAQfBAJIHwIKpAEWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZAIRDw9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCAg9kFgICAQ9kFgJmD2QWAgIBDzwrABEBARAWABYAFgBkArEBD2QWBAIBDzwrABEBARAWABYAFgBkAgUPZBYKAgcPDxYGHwELKwQEHwIKpAEfBAJIFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCDQ8QD2QWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9EBUCDEkgLSBJbnRlcm5hbApQIC0gUHVibGljFQIBSQFQFCsDAmdnFgFmZAIVDxAPFgYfEQUGQ2REZXNjHxIFC0NvbW1lbnRUeXBlHxNnFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fRAVABUAFCsDABYAZAIdDw9kFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCHw8PZBYCHwUFRnRyeXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXhGb2N1c0ZpZWxkJykudmFsdWU9dGhpcy5pZH0gY2F0Y2goZSkge31kArUBDw8WBB8UBQ5Ib3QgS2V5PUFsdCArUB8VBQFQFgIfBQVGdHJ5e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1eEZvY3VzRmllbGQnKS52YWx1ZT10aGlzLmlkfSBjYXRjaChlKSB7fWQCtwEPDxYEHxQFDkhvdCBLZXk9QWx0ICtCHxUFAUIWAh8FBUZ0cnl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V4Rm9jdXNGaWVsZCcpLnZhbHVlPXRoaXMuaWR9IGNhdGNoKGUpIHt9ZBgGBSpjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJE1haW5QbmxDb250YWluZXIPD2RmZAUxY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRDb21tZW50VmlldzEkZ3JkQ29tbWVudA9nZAU5Y3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRDUHdyT2ZBdHRvcm5leSRQd3JPZkF0dG9ybmV5R3JkD2dkBTFjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJENvbW1lbnRWaWV3MiRncmRDb21tZW50D2dkBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WDwUyY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRUcmFuc2FjdFRhYk1lbnUkRmxlZXRCdG4FNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkVHJhbnNhY3RUYWJNZW51JE1pbGVhZ2VCdG4FNWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkVHJhbnNhY3RUYWJNZW51JFdndEdyb3VwQnRuBTRjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJFRyYW5zYWN0VGFiTWVudSRWZWhpY2xlQnRuBTRjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJFRyYW5zYWN0VGFiTWVudSRCaWxsaW5nQnRuBTRjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJFRyYW5zYWN0VGFiTWVudSRQYXltZW50QnRuBThjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJFRyYW5zYWN0VGFiTWVudSRDcmVkZW50aWFsc0J0bgU1Y3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRUcmFuc2FjdFRhYk1lbnUkTWFpbk1lbnVCdG4FNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkVHJhbnNhY3RUYWJNZW51JElucXVpcnlCdG4FK2N0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkY2hia05vSWZ0YUFjY291bnQFLmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkTVd5b21pbmdJbmRpY2F0b3JDaGsFLmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkTUNoYW5nZVZlaEluc0NvbXBDaGsFKmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkTWFpblBubENvbnRhaW5lcgUrY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRpYnRuU2NhbkRvY3VtZW50cwUwY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRDb21tZW50VmlldzEkZGVsZXRlQ2hrBVtjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJE1haW5QbmxDb250YWluZXIkUHdyT2ZBdHRvcm5leVBubCRQd3JPZkF0dG9ybmV5MSRQd3JPZkF0dG9ybmV5R3JkD2dkEwd0AEVnTLp8HcWoDoz2Qvv1CpwNZyOuBgb/9pIlcqE='
self.token
EVENTVALIDATION = \

Discussion

  • Philip Aston

    Philip Aston - 2012-10-22

    Chucking base64 encoded javascript back and forth in requests and responses is a creative, if not a little ugly. :-) The amount of request specific information looks vanishingly small.

    How is this token actually used (look down the script a little)? I guess its a POST parameter?

    I think your use case is a little extreme, but if we fix the tcpproxy to produce valid scripts, I guess we could write the token value to a file. (Like we do for large POST data)

     
    • Danny Sit

      Danny Sit - 2012-10-22

      Thank you so much for your quick reply. Unfortunately it is a COTS product that we cannot change.
      Yes, it used in a POST later on. Is there a workaround before v3.11?
      When is 3.11 expected to come out?

      result = request1201.POST('/ONIRP/Fleet/FleetSearchPage.aspx',
      ( NVPair('ctl00$ScriptManager1', 'ctl00$UpdatePanelWizard|ctl00$ContentPlaceHolder1$NProceedBtn'),
      NVPair('EVENTTARGET', self.tokenEVENTTARGET),
      NVPair('__EVENTARGUMENT', self.token
      EVENTARGUMENT),
      NVPair('
      VIEWSTATE', self.token___VIEWSTATE),

       
  • Philip Aston

    Philip Aston - 2012-10-22
    • labels: --> tcpproxy
    • milestone: 3.11 --> unscheduled
    • priority: 1 --> 5
     
  • Philip Aston

    Philip Aston - 2012-10-22

    Try spliting the string into a few pieces. E.g. "abcdef" -> "abc" + "def".

    You also might find that the token is set correctly by a previous request (something like self.tokenVIEWSTATE = httpUtilities.valueFromHiddenInput(...), and that you can simply delete the self.tokenVIEWSTATE = ... line before the POST.

    3.11 will probably be released this week, but will not contain a fix for this problem.

     
    • Danny Sit

      Danny Sit - 2012-10-22

      Thanks, I deleted the line as you suggested and it works. I imagine that entered data are still being posted back to the server and that VIEWSTATE is only vatal for the clietn side to keep things consistent across pages. However, the test will not be able to simualate the large amount of VIEWSTATE data being sent back to the server.

       
  • Philip Aston

    Philip Aston - 2012-10-24

    Is the token set earlier in your script, from the response of a previous request? In which case it may well be set to the same value. (You could check by adding print self.tokenVIEWSTATE at the start of page14().

     

Log in to post a comment.