Scott on Writing

Musings on technical writing...

Understanding ASP.NET View State

My latest MSDN article is now online, and covers a topic that many developers do not have as tight a grasp on as they may think.  Understanding ASP.NET View State looks at how an ASP.NET page maintains its state changes across postbacks, examining:

  • The ASP.NET Page Life Cycle
  • The Role of View State
  • The Cost of View State
  • How View State is Serialized/Deserialized
  • Specifying Where to Store the View State Information (see how to store it in a file on the Web server rather than as a bloated hidden form field)
  • Programmatically Parsing the View State
  • View State and Security Implications

A special thanks to those who helped review this article, especially those whose feedback was used to improve the article.  If you'd be interested in reviewing articles, read this blog entry for more information...

posted on Thursday, June 03, 2004 9:28 AM

Feedback

# re: Understanding ASP.NET View State 6/3/2004 1:17 PM Scott Mitchell

Scott Hanselman [http://www.hanselman.com/blog/] has a follow up post on my view state article regarding persisting view state to a file on the Web server... worth a read if you're considering implementing this technique...
http://www.hanselman.com/blog/PermaLink.aspx?guid=291897dc-555d-44a1-ab94-65a70e484b3e

# Understanding ASP.NET View State 6/4/2004 4:10 AM Pingback/TrackBack


Scott Mitchel has written an article on MSDN titled

# re: Understanding ASP.NET View State 6/10/2004 8:14 AM Salman

Great detailed overview Scott, your putting your CS degree to good use! hehe

# re: Understanding ASP.NET View State 6/24/2004 7:35 AM Jeff Evans

Fantastic article. I've been consulting various books and web articles trying to wrap my mind around view state, but none can hold a candle to your clear and concise explanation. Thanks!

# Completely removing __VIEWSTATE from form 7/20/2004 5:26 AM Matthias Cavigelli

When I disable the ViewState property of the page, I still have the hidden field __VIEWSTATE in the html code. Could you explain why it's still there although it's not enabled?

Thanks!

# Question: I set my page's EnableViewState property False; why is there still a __VIEWSTATE hidden form field? 7/23/2004 2:54 PM Scott on Writing

# System.Web.HttpException: Invalid_Viewstate_Client_Disconnected 1/12/2005 7:55 AM Anon

Hi Scott,

I got this web exception on my site - I tried researching the problem but am unable to do so.
Any Advice?

Message: Exception of type System.Web.HttpUnhandledException was thrown.

Inner Exception: System.Web.HttpException: Invalid_Viewstate_Client_Disconnected Client IP: 141.149.216.203 Port: 50110 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) ViewState: dDwxMzU5NTc2ODM1O3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDA+O2k8MT47aTw0PjtpPDU+O2k8Nj47PjtsPHQ8QDw4OzExOzEwOzk7Pjs7Pjt0PHA8O3A8bDxvbmtleWRvd247PjtsPGlmICgoZXZlbnQud2hpY2ggJiYgZXZlbnQud2hpY2ggPT0gMTMpIHx8IChldmVudC5rZXlDb2RlICYmIGV2ZW50LmtleUNvZGUgPT0gMTMpKSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImliU2VhcmNoIikuY2xpY2soKVw7cmV0dXJuIGZhbHNlXDt9ZWxzZSByZXR1cm4gdHJ1ZVw7Oz4+Pjs7Pjt0PEA8T3ZlcjtcZTtcZTtPZmY7ZG9jdW1lbnRbJ1Rvd25JbmZvJ10uc3JjPWV2YWwoJ1Rvd25JbmZvT24uc3JjJylcOztkb2N1bWVudFsnVG93bkluZm8nXS5zcmM9ZXZhbCgnVG93bkluZm9PZmYuc3JjJylcOztPZmY7ZG9jdW1lbnRbJ1NlcnZpY2VzJ10uc3JjPWV2YWwoJ1NlcnZpY2VzT24uc3JjJylcOztkb2N1bWVudFsnU2VydmljZXMnXS5zcmM9ZXZhbCgnU2VydmljZXNPZmYuc3JjJylcOztPZmY7ZG9jdW1lbnRbJ0NhbGVuZGFycyddLnNyYz1ldmFsKCdDYWxlbmRhcnNPbi5zcmMnKVw7O2RvY3VtZW50WydDYWxlbmRhcnMnXS5zcmM9ZXZhbCgnQ2FsZW5kYXJzT2ZmLnNyYycpXDs7T2ZmO2RvY3VtZW50WydGb3JtcyddLnNyYz1ldmFsKCdGb3Jtc09uLnNyYycpXDs7ZG9jdW1lbnRbJ0Zvcm1zJ10uc3JjPWV2YWwoJ0Zvcm1zT2ZmLnNyYycpXDs7T2ZmO2RvY3VtZW50WydDb21tdW5pdHlMaW5rcyddLnNyYz1ldmFsKCdDb21tdW5pdHlMaW5rc09uLnNyYycpXDs7ZG9jdW1lbnRbJ0NvbW11bml0eUxpbmtzJ10uc3JjPWV2YWwoJ0NvbW11bml0eUxpbmtzT2ZmLnNyYycpXDs7Pjs7Pjt0PDtsPGk8MD47PjtsPHQ8O2w8aTwxPjtpPDM+O2k8NT47aTw3PjtpPDExPjs+O2w8dDw7bDxpPDM+Oz47bDx0PHA8bDxUZXh0Oz47bDwKXDx0clw+Clw8dGQgd2lkdGg9MTg3IHZhbGlnbj10b3BcPgpcPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0xODcgXD4KXDx0clw+Clw8dGQgdmFsaWduPXRvcFw+Clw8c2NyaXB0IGxhbmd1YWdlPWphdmFzY3JpcHRcPgphY2Vfc3RhdGUuaGJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLm5iZ2NvbG9yID0gJydcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJ1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJydcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzAnKVw7CmFjZW1lbnUuYmdpbWFnZSA9ICdpbWFnZXMvcnB0UG9kLmdpZidcOwphY2VtZW51LkFkZEl0ZW0oIlw8dGFibGUgIGNsYXNzPWhhbmQgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIG9ubW91c2VvdmVyPSd0dXJuT24yKDQ2KVw7JyBvbm1vdXNlb3V0PSd0dXJuT2ZmMig0NilcOydcPlw8dHJcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIFw+XDx0clw+XDx0ZCB2YWxpZ249dG9wXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZFVwcGVyTGVmdC5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTGVmdC5naWZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPHRkIHdpZHRoPTE1MVw+XDx0YWJsZSB3aWR0aD0xNTEgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgY2xhc3M9bmF2dGV4dFw+QXNzZXNzb3JcPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgdmFsaWduPWJvdHRvbSBoZWlnaHQ9MTAwJVw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RMb3dlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPHRkIGhlaWdodD0xMDAlXD5cPHRhYmxlIGhlaWdodD0xMDAlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93VG9wLmdpZiBjbGFzcz1uYXZ0b3BjZW50ZXIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wXD5cPHRyXD5cPHRkIHZhbGlnbj1taWRkbGUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dCb3R0b20uZ2lmIGNsYXNzPW5hdmJvdHRvbWNlbnRlclw+XDxpbWcgc3JjPWltYWdlcy9idG5MZXZlbDJPZmYuZ2lmIG5hbWU9bmF2NDZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPiIsICc/UGFnZUlEPTQ2JywgJycsIGZhbHNlLCAnJylcOwphY2Vfc3RhdGUuaGJnY29sb3IgPSAnIzAwNjZjYydcOwphY2Vfc3RhdGUuaGZ0Y29sb3IgPSAnI2ZmZmZmZidcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnI0Y0RkFGRidcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnIzAwMDAwMCdcOwphY2Vfc3RhdGUuaHRtbEFmdGVyID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMScpXDsKYWNlbWVudS5pdGVtYm9yZGVyID0gJzFweCAgc29saWQnXDsKYWNlbWVudS5tZW51Ym9yZGVyID0gJzFweCAjQkNDQkQ0IHNvbGlkJ1w7CmFjZW1lbnUuQWRkSXRlbSgiQ29udGFjdCBJbmZvcm1hdGlvbiIsJz9QYWdlSUQ9MjQ2JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlNpZ24gVXAgVG8gUmVjZWl2ZSBFbGVjdHJvbmljIE1haWxpbmdzIiwnP1BhZ2VJRD00NjYnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRGVwYXJ0bWVudCBEZXNjcmlwdGlvbiBhbmQgUmVzcG9uc2liaWxpdGllcyIsJz9QYWdlSUQ9MjQ1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkFzc2Vzc21lbnQgQXBwZWFsIFByb2Nlc3MiLCc/UGFnZUlEPTI0NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJFdmVudHMgQ2FsZW5kYXIiLCc/UGFnZUlEPTMzMicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJJbXBvcnRhbnQgQXNzZXNzbWVudCBEYXRlcyIsJz9QYWdlSUQ9MzQzJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIk5hbWUvQWRkcmVzcyBDaGFuZ2UiLCc/UGFnZUlEPTQ4MCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUYXggRXhlbXB0aW9ucyIsJz9QYWdlSUQ9NDc5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0yNDknLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNTkpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDU5KVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5CdWlsZGluZywgUGxhbm5pbmcsIGFuZCBab25pbmdcPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgdmFsaWduPWJvdHRvbSBoZWlnaHQ9MTAwJVw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RMb3dlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPHRkIGhlaWdodD0xMDAlXD5cPHRhYmxlIGhlaWdodD0xMDAlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93VG9wLmdpZiBjbGFzcz1uYXZ0b3BjZW50ZXIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wXD5cPHRyXD5cPHRkIHZhbGlnbj1taWRkbGUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dCb3R0b20uZ2lmIGNsYXNzPW5hdmJvdHRvbWNlbnRlclw+XDxpbWcgc3JjPWltYWdlcy9idG5MZXZlbDJPZmYuZ2lmIG5hbWU9bmF2NTlcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPiIsICc/UGFnZUlEPTU5JywgJycsIGZhbHNlLCAnJylcOwphY2Vfc3RhdGUuaGJnY29sb3IgPSAnIzAwNjZjYydcOwphY2Vfc3RhdGUuaGZ0Y29sb3IgPSAnI2ZmZmZmZidcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnI0Y0RkFGRidcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnIzAwMDAwMCdcOwphY2Vfc3RhdGUuaHRtbEFmdGVyID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMScpXDsKYWNlbWVudS5pdGVtYm9yZGVyID0gJzFweCAgc29saWQnXDsKYWNlbWVudS5tZW51Ym9yZGVyID0gJzFweCAjQkNDQkQ0IHNvbGlkJ1w7CmFjZW1lbnUuQWRkSXRlbSgiQnVpbGRpbmcgJiBEZXZlbG9wbWVudCBQZXJtaXRzIiwnP1BhZ2VJRD00MTEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiQ29tcGxpYW5jZS9Db21wbGFpbnRzIiwnP1BhZ2VJRD0zODAnLCAnJywgdHJ1ZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0zNzEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRWNvbm9taWMgRGV2ZWxvcG1lbnQiLCc/UGFnZUlEPTM4NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJGb3JtcyAmIEJyb2NodXJlcyIsJz9QYWdlSUQ9Mzk2JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIiwnP1BhZ2VJRD00ODgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiSG9tZSBXYXN0ZSIsJz9QYWdlSUQ9Mzg5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkhvdyBDYW4gSSBoZWxwPyIsJz9QYWdlSUQ9Mzk1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0zOTcnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiTmV3cyAmIFN0dWRpZXMiLCc/UGFnZUlEPTM5MicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJPdGhlciBCb2FyZHMgYW5kIENvbW1pc3Npb25zIiwnP1BhZ2VJRD0zOTQnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUGxhbm5pbmcgQm9hcmQiLCc/UGFnZUlEPTM4OCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJTaWduIFVwIFRvIFJlY2VpdmUgRWxlY3Ryb25pYyBNYWlsaW5ncyIsJz9QYWdlSUQ9NDY3JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlNpZ25zIFBlcm1pdHMgYW5kIFJlcXVpcmVtZW50cyIsJz9QYWdlSUQ9NDEyJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlpvbmluZyBCb2FyZCBvZiBBcHBlYWxzIiwnP1BhZ2VJRD0zOTAnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMWkyJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb25zdHJ1Y3Rpb24gSW5zcGVjdGlvbnMiLCc/UGFnZUlEPTM4MScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJGaXJlIFNhZmV0eSAmIFByb3BlcnR5IE1haW50ZW5hbmNlIEluc3BlY3Rpb25zIiwnP1BhZ2VJRD0zODInLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiQ2VydGlmaWNhdGUgT2YgT2NjdXBhbmN5IChDL08pIG9yIENvbXBsaWFuY2UgKEMvQykiLCc/UGFnZUlEPTM4NScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb21wbGFpbnRzICYgSW5xdWlyaWVzIiwnP1BhZ2VJRD0zODYnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoMjU3KVw7JyBvbm1vdXNlb3V0PSd0dXJuT2ZmMigyNTcpXDsnXD5cPHRyXD5cPHRkIGhlaWdodD0xMDAlXD5cPHRhYmxlIGhlaWdodD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlckxlZnQuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgdmFsaWduPWJvdHRvbSBoZWlnaHQ9MTAwJVw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RMb3dlckxlZnQuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCB3aWR0aD0xNTFcPlw8dGFibGUgd2lkdGg9MTUxIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249dG9wXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZFVwcGVyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIGNsYXNzPW5hdnRleHRcPkNsZXJrXDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd1RvcC5naWYgY2xhc3M9bmF2dG9wY2VudGVyIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249bWlkZGxlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93Qm90dG9tLmdpZiBjbGFzcz1uYXZib3R0b21jZW50ZXJcPlw8aW1nIHNyYz1pbWFnZXMvYnRuTGV2ZWwyT2ZmLmdpZiBuYW1lPW5hdjI1N1w+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9MjU3JywgJycsIGZhbHNlLCAnJylcOwphY2Vfc3RhdGUuaGJnY29sb3IgPSAnIzAwNjZjYydcOwphY2Vfc3RhdGUuaGZ0Y29sb3IgPSAnI2ZmZmZmZidcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnI0Y0RkFGRidcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnIzAwMDAwMCdcOwphY2Vfc3RhdGUuaHRtbEFmdGVyID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMScpXDsKYWNlbWVudS5pdGVtYm9yZGVyID0gJzFweCAgc29saWQnXDsKYWNlbWVudS5tZW51Ym9yZGVyID0gJzFweCAjQkNDQkQ0IHNvbGlkJ1w7CmFjZW1lbnUuQWRkSXRlbSgiQ29udGFjdCBJbmZvcm1hdGlvbiIsJz9QYWdlSUQ9MjU5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlNpZ24gVXAgVG8gUmVjZWl2ZSBFbGVjdHJvbmljIE1haWxpbmdzIiwnP1BhZ2VJRD00NjgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRGVwYXJ0bWVudCBEZXNjcmlwdGlvbiBhbmQgUmVzcG9uc2liaWxpdGllcyIsJz9QYWdlSUQ9MjYwJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIk1hcnJpYWdlIExpY2Vuc2VzIGFuZCBNYXJyaWFnZSBUcmFuc2NyaXB0cyIsJz9QYWdlSUQ9MjYxJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlBhc3Nwb3J0IEFwcGxpY2F0aW9ucyIsJz9QYWdlSUQ9MjYyJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkNvbnNlcnZhdGlvbiBMaWNlbnNlcyIsJz9QYWdlSUQ9MjYzJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkhhbmRpY2FwIFBhcmtpbmcgUGVybWl0cyIsJz9QYWdlSUQ9MjY0JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpY2Vuc2VzIGFuZCBQZXJtaXRzIiwnP1BhZ2VJRD0yNjUnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRG9nIENvbnRyb2wiLCc/UGFnZUlEPTI2NicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUcmFzaCIsJz9QYWdlSUQ9MjY3JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkVsZWN0aW9ucyIsJz9QYWdlSUQ9MjY4JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlRvd24gUmVjb3JkcyIsJz9QYWdlSUQ9MjY5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlJlY3ljbGUgQmlucyIsJz9QYWdlSUQ9NDg0JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0yNzAnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNDgpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDQ4KVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5Db21wdHJvbGxlclw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dUb3AuZ2lmIGNsYXNzPW5hdnRvcGNlbnRlciBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPW1pZGRsZSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd0JvdHRvbS5naWYgY2xhc3M9bmF2Ym90dG9tY2VudGVyXD5cPGltZyBzcmM9aW1hZ2VzL2J0bkxldmVsMk9mZi5naWYgbmFtZT1uYXY0OFw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9NDgnLCAnJywgZmFsc2UsICcnKVw7CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcjMDA2NmNjJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcjZmZmZmZmJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcjRjRGQUZGJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcjMDAwMDAwJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0yNTMnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2lnbiBVcCBUbyBSZWNlaXZlIEVsZWN0cm9uaWMgTWFpbGluZ3MiLCc/UGFnZUlEPTQ2OScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJEZXBhcnRtZW50IERlc2NyaXB0aW9uIGFuZCBSZXNwb25zaWJpbGl0aWVzIiwnP1BhZ2VJRD0yNTQnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiTGlua3MiLCc/UGFnZUlEPTI1NScsICcnLCBmYWxzZSwgJycpXDsKXDwvc2NyaXB0XD4KXDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBsYW5ndWFnZT0nSmF2YVNjcmlwdDEuMidcPkFDRURpc3BsYXlNZW51KClcO1w8L3NjcmlwdFw+Clw8L3RkXD4KXDwvdHJcPgpcPC90YWJsZVw+Clw8L3RkXD4KXDwvdHJcPgpcPHRyXD5cPHRkXD5cPGltZyBzcmM9aW1hZ2VzL3NwYWNlci5naWYgd2lkdGg9MSBoZWlnaHQ9NSBcPlw8L3RkXD5cPC90clw+Clw8dHJcPgpcPHRkIHdpZHRoPTE4NyB2YWxpZ249dG9wXD4KXDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTg3IFw+Clw8dHJcPgpcPHRkIHZhbGlnbj10b3BcPgpcPHNjcmlwdCBsYW5ndWFnZT1qYXZhc2NyaXB0XD4KYWNlX3N0YXRlLmhiZ2NvbG9yID0gJydcOwphY2Vfc3RhdGUuaGZ0Y29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLm5mdGNvbG9yID0gJydcOwphY2Vfc3RhdGUuaHRtbEFmdGVyID0gJydcOwphY2Vfc3RhdGUuaHRtbEJlZm9yZSA9ICcnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcwJylcOwphY2VtZW51LmJnaW1hZ2UgPSAnaW1hZ2VzL3JwdFBvZC5naWYnXDsKYWNlbWVudS5BZGRJdGVtKCJcPHRhYmxlICBjbGFzcz1oYW5kIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBvbm1vdXNlb3Zlcj0ndHVybk9uMig0MylcOycgb25tb3VzZW91dD0ndHVybk9mZjIoNDMpXDsnXD5cPHRyXD5cPHRkIGhlaWdodD0xMDAlXD5cPHRhYmxlIGhlaWdodD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlckxlZnQuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgdmFsaWduPWJvdHRvbSBoZWlnaHQ9MTAwJVw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RMb3dlckxlZnQuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCB3aWR0aD0xNTFcPlw8dGFibGUgd2lkdGg9MTUxIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249dG9wXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZFVwcGVyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIGNsYXNzPW5hdnRleHRcPkNvdXJ0XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd1RvcC5naWYgY2xhc3M9bmF2dG9wY2VudGVyIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249bWlkZGxlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93Qm90dG9tLmdpZiBjbGFzcz1uYXZib3R0b21jZW50ZXJcPlw8aW1nIHNyYz1pbWFnZXMvYnRuTGV2ZWwyT2ZmLmdpZiBuYW1lPW5hdjQzXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD4iLCAnP1BhZ2VJRD00MycsICcnLCBmYWxzZSwgJycpXDsKYWNlX3N0YXRlLmhiZ2NvbG9yID0gJyMwMDY2Y2MnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJyNmZmZmZmYnXDsKYWNlX3N0YXRlLm5iZ2NvbG9yID0gJyNGNEZBRkYnXDsKYWNlX3N0YXRlLm5mdGNvbG9yID0gJyMwMDAwMDAnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2Vfc3RhdGUuaHRtbEJlZm9yZSA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzEnKVw7CmFjZW1lbnUuaXRlbWJvcmRlciA9ICcxcHggIHNvbGlkJ1w7CmFjZW1lbnUubWVudWJvcmRlciA9ICcxcHggI0JDQ0JENCBzb2xpZCdcOwphY2VtZW51LkFkZEl0ZW0oIlNpZ24gVXAgVG8gUmVjZWl2ZSBFbGVjdHJvbmljIE1haWxpbmdzIiwnP1BhZ2VJRD00NzAnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNDcpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDQ3KVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5IaWdod2F5XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd1RvcC5naWYgY2xhc3M9bmF2dG9wY2VudGVyIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249bWlkZGxlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93Qm90dG9tLmdpZiBjbGFzcz1uYXZib3R0b21jZW50ZXJcPlw8aW1nIHNyYz1pbWFnZXMvYnRuTGV2ZWwyT2ZmLmdpZiBuYW1lPW5hdjQ3XD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD4iLCAnP1BhZ2VJRD00NycsICcnLCBmYWxzZSwgJycpXDsKYWNlX3N0YXRlLmhiZ2NvbG9yID0gJyMwMDY2Y2MnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJyNmZmZmZmYnXDsKYWNlX3N0YXRlLm5iZ2NvbG9yID0gJyNGNEZBRkYnXDsKYWNlX3N0YXRlLm5mdGNvbG9yID0gJyMwMDAwMDAnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2Vfc3RhdGUuaHRtbEJlZm9yZSA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzEnKVw7CmFjZW1lbnUuaXRlbWJvcmRlciA9ICcxcHggIHNvbGlkJ1w7CmFjZW1lbnUubWVudWJvcmRlciA9ICcxcHggI0JDQ0JENCBzb2xpZCdcOwphY2VtZW51LkFkZEl0ZW0oIkNvbnRhY3QgSW5mb3JtYXRpb24iLCc/UGFnZUlEPTM0NCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJTaWduIFVwIFRvIFJlY2VpdmUgRWxlY3Ryb25pYyBNYWlsaW5ncyIsJz9QYWdlSUQ9NDcxJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkRlcGFydG1lbnQgRGVzY3JpcHRpb24gYW5kIFJlc3BvbnNpYmlsaXRpZXMiLCc/UGFnZUlEPTM1MycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJTaWRld2Fsa3MiLCc/UGFnZUlEPTM2NicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUcmVlIFNlcnZpY2UiLCc/UGFnZUlEPTM2NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJSb2FkL1N0cmVldCBJbmZvcm1hdGlvbiIsJz9QYWdlSUQ9MzY5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlN0b3JtIFdhdGVyL0RyYWluYWdlIiwnP1BhZ2VJRD0zNjAnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU3RyZWV0IFN3ZWVwaW5nIiwnP1BhZ2VJRD0zNjgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUG90IEhvbGVzL0FzcGhhbHQgUGF0Y2hpbmciLCc/UGFnZUlEPTM2NCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJQcm9wZXJ0eSBSZXBhaXJzIiwnP1BhZ2VJRD0zNjEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiVHJhZmZpYy9TdHJlZXQgbGlnaHRzIiwnP1BhZ2VJRD0zNTknLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU3RyZWV0IFNpZ25zIiwnP1BhZ2VJRD0zNTgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUmVjeWNsaW5nIiwnP1BhZ2VJRD0zNTcnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU25vdyBPcGVyYXRpb25zIiwnP1BhZ2VJRD0zNTQnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRGVhZCBBbmltYWxzIiwnP1BhZ2VJRD0zNjMnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2FuaXRhcnkgU2V3ZXIiLCc/UGFnZUlEPTM2MicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJMZWF2ZXMsIEJydXNoLCBZYXJkIFdhc3RlIiwnP1BhZ2VJRD0zNzQnLCAnJywgdHJ1ZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJMaW5rcyIsJz9QYWdlSUQ9MzcwJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzFpMTcnKVw7CmFjZW1lbnUuaXRlbWJvcmRlciA9ICcxcHggIHNvbGlkJ1w7CmFjZW1lbnUubWVudWJvcmRlciA9ICcxcHggI0JDQ0JENCBzb2xpZCdcOwphY2VtZW51LkFkZEl0ZW0oIkxlYWYgQ29sbGVjdGlvbiIsJz9QYWdlSUQ9Mzc1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkJydXNoICYgWWFyZCBXYXN0ZSBDb2xsZWN0aW9uIiwnP1BhZ2VJRD0zNzYnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNjEpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDYxKVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5QYXJrc1w8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dUb3AuZ2lmIGNsYXNzPW5hdnRvcGNlbnRlciBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPW1pZGRsZSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd0JvdHRvbS5naWYgY2xhc3M9bmF2Ym90dG9tY2VudGVyXD5cPGltZyBzcmM9aW1hZ2VzL2J0bkxldmVsMk9mZi5naWYgbmFtZT1uYXY2MVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9NjEnLCAnJywgZmFsc2UsICcnKVw7CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcjMDA2NmNjJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcjZmZmZmZmJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcjRjRGQUZGJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcjMDAwMDAwJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0yNzYnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2lnbiBVcCBUbyBSZWNlaXZlIEVsZWN0cm9uaWMgTWFpbGluZ3MiLCc/UGFnZUlEPTQ3MicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJQYXJrcyBEZXBhcnRtZW50IERlc2NyaXB0aW9uIGFuZCBSZXNwb25zaWJpbGl0aWVzIiwnP1BhZ2VJRD0yNzcnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUG9ja2V0IEd1aWRlIHRvIERlV2l0dCBQYXJrcyIsJz9QYWdlSUQ9Mjc1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlBhcmtzICYgRmFjaWxpdGllcyIsJz9QYWdlSUQ9Mjc4JywgJycsIHRydWUsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUHJvZ3JhbXMgaW4gUGFya3MiLCc/UGFnZUlEPTI5MScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJQYXJrIFJlc2VydmF0aW9ucyIsJz9QYWdlSUQ9MjkyJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlBhcmsgUG9saWNpZXMiLCc/UGFnZUlEPTI5MycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb21taXNzaW9ucyIsJz9QYWdlSUQ9Mjk0JywgJycsIHRydWUsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiTWFzdGVyIFBsYW4iLCc/UGFnZUlEPTI5NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJFbXBsb3ltZW50IE9wcG9ydHVuaXRpZXMiLCc/UGFnZUlEPTI5OCcsICcnLCB0cnVlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0zMDEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMWk1JylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJCdXR0ZXJudXQgQ3JlZWsgUG9ja2V0IFBhcmsiLCc/UGFnZUlEPTI3OScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJCdXR0ZXJudXQgQ3JlZWsgUmVjcmVhdGlvbiBhbmQgTmF0dXJlIEFyZWEiLCc/UGFnZUlEPTI4MCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJEZWxhbmV5IEdyZWVuIFNwYWNlIiwnP1BhZ2VJRD0yODEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRHVucm92aW4gTmVpZ2hib3Job29kIFBhcmsiLCc/UGFnZUlEPTI4MicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJGcmFua2xpbiBQYXJrIE5laWdoYm9yaG9vZCBQYXJrIiwnP1BhZ2VJRD0yODMnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiSmFtZXN2aWxsZSBNaW5pLVBhcmsiLCc/UGFnZUlEPTI4NCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJKYW1lc3ZpbGxlIFRyYWluIFN0YXRpb24iLCc/UGFnZUlEPTI4NScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJSaWNoYXJkcyBHcmVlbiBTcGFjZSIsJz9QYWdlSUQ9Mjg4JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlJ5ZGVyIFJlY3JlYXRpb24gYW5kIE5hdHVyZSBBcmVhIiwnP1BhZ2VJRD0yODknLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiV2llc25lciBHcmVlbiBTcGFjZSIsJz9QYWdlSUQ9MjkwJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIk1heHdlbGwgUGFyayIsJz9QYWdlSUQ9Mjg2JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlBhcmtzIE1haW50ZW5hbmNlIEZhY2lsaXR5IiwnP1BhZ2VJRD0yODcnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMWk5JylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJSZWNyZWF0aW9uIENvbW1pc3Npb24iLCc/UGFnZUlEPTI5NScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJEZVdpdHQgQWR2aXNvcnkgQ29uc2VydmF0aW9uIENvbW1pc3Npb24iLCc/UGFnZUlEPTQ4OScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxaTExJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJGdWxsLVRpbWUgUGVybWFuZW50IiwnP1BhZ2VJRD0yOTknLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRnVsbC1UaW1lIFNlYXNvbmFsIiwnP1BhZ2VJRD0zMDAnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNjIpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDYyKVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5Qb2xpY2VcPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgdmFsaWduPWJvdHRvbSBoZWlnaHQ9MTAwJVw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RMb3dlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPHRkIGhlaWdodD0xMDAlXD5cPHRhYmxlIGhlaWdodD0xMDAlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93VG9wLmdpZiBjbGFzcz1uYXZ0b3BjZW50ZXIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wXD5cPHRyXD5cPHRkIHZhbGlnbj1taWRkbGUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dCb3R0b20uZ2lmIGNsYXNzPW5hdmJvdHRvbWNlbnRlclw+XDxpbWcgc3JjPWltYWdlcy9idG5MZXZlbDJPZmYuZ2lmIG5hbWU9bmF2NjJcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPiIsICc/UGFnZUlEPTYyJywgJycsIGZhbHNlLCAnJylcOwphY2Vfc3RhdGUuaGJnY29sb3IgPSAnIzAwNjZjYydcOwphY2Vfc3RhdGUuaGZ0Y29sb3IgPSAnI2ZmZmZmZidcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnI0Y0RkFGRidcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnIzAwMDAwMCdcOwphY2Vfc3RhdGUuaHRtbEFmdGVyID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJyZuYnNwXDsmbmJzcFw7J1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMScpXDsKYWNlbWVudS5pdGVtYm9yZGVyID0gJzFweCAgc29saWQnXDsKYWNlbWVudS5tZW51Ym9yZGVyID0gJzFweCAjQkNDQkQ0IHNvbGlkJ1w7CmFjZW1lbnUuQWRkSXRlbSgiQ29udGFjdCBJbmZvcm1hdGlvbiIsJz9QYWdlSUQ9MzAzJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlNpZ24gVXAgVG8gUmVjZWl2ZSBFbGVjdHJvbmljIE1haWxpbmdzIiwnP1BhZ2VJRD00NzMnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUG9saWNlIERlcGFydG1lbnQgRGVzY3JpcHRpb24gYW5kIFJlc3BvbnNpYmlsaXRpZXMiLCc/UGFnZUlEPTMwNCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJEaXZpc2lvbnMiLCc/UGFnZUlEPTMwNScsICcnLCB0cnVlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIk1vdG9yIFZlaGljbGUgQWNjaWRlbnRzIiwnP1BhZ2VJRD0zMTAnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiQnVyZ2xhcnkgUHJldmVudGlvbiIsJz9QYWdlSUQ9MzExJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlRpcHMgTGluZSIsJz9QYWdlSUQ9MzEzJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkNvbW1pc3Npb24iLCc/UGFnZUlEPTMxNCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJFbXBsb3ltZW50IiwnP1BhZ2VJRD0zMTUnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiTGlua3MiLCc/UGFnZUlEPTMxNicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxaTQnKVw7CmFjZW1lbnUuaXRlbWJvcmRlciA9ICcxcHggIHNvbGlkJ1w7CmFjZW1lbnUubWVudWJvcmRlciA9ICcxcHggI0JDQ0JENCBzb2xpZCdcOwphY2VtZW51LkFkZEl0ZW0oIlBhdHJvbCBEaXZpc2lvbiIsJz9QYWdlSUQ9MzA2JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkNyaW1pbmFsIEludmVzdGlnYXRpb25zIERpdmlzaW9uIiwnP1BhZ2VJRD0zMDcnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiWW91dGggU2VydmljZXMiLCc/UGFnZUlEPTMwOCcsICcnLCB0cnVlLCAnJylcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzFpNGkzJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJELkEuUi5FLiBMZXNzb24gUGxhbnMiLCc/UGFnZUlEPTMwOScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJZb3V0aCBTZXJ2aWNlcyBQcm9ncmFtcyIsJz9QYWdlSUQ9NDI1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkNoaWxkIEZpbmdlcnByaW50aW5nIiwnP1BhZ2VJRD00ODYnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNDQpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDQ0KVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5SZWNlaXZlciBvZiBUYXhlc1w8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dUb3AuZ2lmIGNsYXNzPW5hdnRvcGNlbnRlciBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPW1pZGRsZSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd0JvdHRvbS5naWYgY2xhc3M9bmF2Ym90dG9tY2VudGVyXD5cPGltZyBzcmM9aW1hZ2VzL2J0bkxldmVsMk9mZi5naWYgbmFtZT1uYXY0NFw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9NDQnLCAnJywgZmFsc2UsICcnKVw7CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcjMDA2NmNjJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcjZmZmZmZmJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcjRjRGQUZGJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcjMDAwMDAwJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0zMTgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2lnbiBVcCBUbyBSZWNlaXZlIEVsZWN0cm9uaWMgTWFpbGluZ3MiLCc/UGFnZUlEPTQ3NCcsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJEZXBhcnRtZW50IERlc2NyaXB0aW9uIGFuZCBSZXNwb25zaWJpbGl0aWVzIiwnP1BhZ2VJRD0zMTknLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiVGF4IE5vdGljZSIsJz9QYWdlSUQ9MzIwJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIlRheCBQYXltZW50IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0zMjEnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMiLCc/UGFnZUlEPTMyMicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUYXggRXhlbXB0aW9ucyIsJz9QYWdlSUQ9NDc4JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0zMjMnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNjMpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDYzKVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5SZWNyZWF0aW9uXDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd1RvcC5naWYgY2xhc3M9bmF2dG9wY2VudGVyIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MFw+XDx0clw+XDx0ZCB2YWxpZ249bWlkZGxlIGJhY2tncm91bmQ9aW1hZ2VzL2dyY0Fycm93Qm90dG9tLmdpZiBjbGFzcz1uYXZib3R0b21jZW50ZXJcPlw8aW1nIHNyYz1pbWFnZXMvYnRuTGV2ZWwyT2ZmLmdpZiBuYW1lPW5hdjYzXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD5cPC90ZFw+XDwvdHJcPlw8L3RhYmxlXD4iLCAnP1BhZ2VJRD02MycsICcnLCBmYWxzZSwgJycpXDsKYWNlX3N0YXRlLmhiZ2NvbG9yID0gJyMwMDY2Y2MnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJyNmZmZmZmYnXDsKYWNlX3N0YXRlLm5iZ2NvbG9yID0gJyNGNEZBRkYnXDsKYWNlX3N0YXRlLm5mdGNvbG9yID0gJyMwMDAwMDAnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2Vfc3RhdGUuaHRtbEJlZm9yZSA9ICcmbmJzcFw7Jm5ic3BcOydcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzEnKVw7CmFjZW1lbnUuaXRlbWJvcmRlciA9ICcxcHggIHNvbGlkJ1w7CmFjZW1lbnUubWVudWJvcmRlciA9ICcxcHggI0JDQ0JENCBzb2xpZCdcOwphY2VtZW51LkFkZEl0ZW0oIkNvbnRhY3QgSW5mb3JtYXRpb24iLCc/UGFnZUlEPTM1MScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJTaWduIFVwIFRvIFJlY2VpdmUgRWxlY3Ryb25pYyBNYWlsaW5ncyIsJz9QYWdlSUQ9NDc1JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkRlcGFydG1lbnQgRGVzY3JpcHRpb24gYW5kIFJlc3BvbnNpYmlsaXRpZXMiLCc/UGFnZUlEPTQyNycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJQcm9ncmFtIExpc3RpbmdzIiwnP1BhZ2VJRD00MjgnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiUHJvZ3JhbSBSZWdpc3RyYXRpb24iLCc/UGFnZUlEPTQyOScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb21taXNzaW9uIiwnP1BhZ2VJRD00MzAnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiTWFzdGVyIFBsYW4iLCc/UGFnZUlEPTQzMScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb21tdW5pdHkgU2lnbiBSZW50YWwiLCc/UGFnZUlEPTQzMicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJWb2x1bnRlZXIgJiBFbXBsb3ltZW50IE9wcG9ydHVuaXRpZXMiLCc/UGFnZUlEPTQzMycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJMaW5rcyIsJz9QYWdlSUQ9NDM0JywgJycsIGZhbHNlLCAnJylcOwpcPC9zY3JpcHRcPgpcPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIGxhbmd1YWdlPSdKYXZhU2NyaXB0MS4yJ1w+QUNFRGlzcGxheU1lbnUoKVw7XDwvc2NyaXB0XD4KXDwvdGRcPgpcPC90clw+Clw8L3RhYmxlXD4KXDwvdGRcPgpcPC90clw+Clw8dHJcPlw8dGRcPlw8aW1nIHNyYz1pbWFnZXMvc3BhY2VyLmdpZiB3aWR0aD0xIGhlaWdodD01IFw+XDwvdGRcPlw8L3RyXD4KXDx0clw+Clw8dGQgd2lkdGg9MTg3IHZhbGlnbj10b3BcPgpcPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0xODcgXD4KXDx0clw+Clw8dGQgdmFsaWduPXRvcFw+Clw8c2NyaXB0IGxhbmd1YWdlPWphdmFzY3JpcHRcPgphY2Vfc3RhdGUuaGJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLm5iZ2NvbG9yID0gJydcOwphY2Vfc3RhdGUubmZ0Y29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJ1w7CmFjZV9zdGF0ZS5odG1sQmVmb3JlID0gJydcOwphY2VtZW51ID0gbmV3IEFDRU1lbnUoJzAnKVw7CmFjZW1lbnUuYmdpbWFnZSA9ICdpbWFnZXMvcnB0UG9kLmdpZidcOwphY2VtZW51LkFkZEl0ZW0oIlw8dGFibGUgIGNsYXNzPWhhbmQgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIG9ubW91c2VvdmVyPSd0dXJuT24yKDQ1KVw7JyBvbm1vdXNlb3V0PSd0dXJuT2ZmMig0NSlcOydcPlw8dHJcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIFw+XDx0clw+XDx0ZCB2YWxpZ249dG9wXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZFVwcGVyTGVmdC5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTGVmdC5naWZcPlw8L3RkXD5cPC90clw+XDwvdGFibGVcPlw8L3RkXD5cPHRkIHdpZHRoPTE1MVw+XDx0YWJsZSB3aWR0aD0xNTEgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJNaWRkbGUuZ2lmXD5cPC90ZFw+XDwvdHJcPlw8dHJcPlw8dGQgY2xhc3M9bmF2dGV4dFw+U3VwZXJ2aXNvclw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dUb3AuZ2lmIGNsYXNzPW5hdnRvcGNlbnRlciBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPW1pZGRsZSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd0JvdHRvbS5naWYgY2xhc3M9bmF2Ym90dG9tY2VudGVyXD5cPGltZyBzcmM9aW1hZ2VzL2J0bkxldmVsMk9mZi5naWYgbmFtZT1uYXY0NVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9NDUnLCAnJywgZmFsc2UsICcnKVw7CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcjMDA2NmNjJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcjZmZmZmZmJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcjRjRGQUZGJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcjMDAwMDAwJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0zMzYnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2lnbiBVcCBUbyBSZWNlaXZlIEVsZWN0cm9uaWMgTWFpbGluZ3MiLCc/UGFnZUlEPTQ3NicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUb3duIEJvYXJkIiwnP1BhZ2VJRD00MjYnLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiQ29tbWlzc2lvbnMsIEJvYXJkcywgYW5kIENvbW1pdHRlZXMiLCc/UGFnZUlEPTM0NicsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJUaGUgRGVXaXR0IDkvMTEgTWVtb3JpYWwgTW9udW1lbnQiLCc/UGFnZUlEPTM0NScsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJXaG9gcyBXaG8gSW4gRGVXaXR0IEdvdmVybm1lbnQiLCc/UGFnZUlEPTM0NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IFN0YXRlIGFuZCBGZWRlcmFsIE9mZmljaWFscyIsJz9QYWdlSUQ9MzQ5JywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD0zNTAnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPgpcPHRyXD4KXDx0ZCB3aWR0aD0xODcgdmFsaWduPXRvcFw+Clw8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTE4NyBcPgpcPHRyXD4KXDx0ZCB2YWxpZ249dG9wXD4KXDxzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdFw+CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmhmdGNvbG9yID0gJydcOwphY2Vfc3RhdGUubmJnY29sb3IgPSAnJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxBZnRlciA9ICcnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJ1w7CmFjZW1lbnUgPSBuZXcgQUNFTWVudSgnMCcpXDsKYWNlbWVudS5iZ2ltYWdlID0gJ2ltYWdlcy9ycHRQb2QuZ2lmJ1w7CmFjZW1lbnUuQWRkSXRlbSgiXDx0YWJsZSAgY2xhc3M9aGFuZCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgb25tb3VzZW92ZXI9J3R1cm5PbjIoNDIpXDsnIG9ubW91c2VvdXQ9J3R1cm5PZmYyKDQyKVw7J1w+XDx0clw+XDx0ZCBoZWlnaHQ9MTAwJVw+XDx0YWJsZSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgXD5cPHRyXD5cPHRkIHZhbGlnbj10b3BcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kVXBwZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPHRyXD5cPHRkIHZhbGlnbj1ib3R0b20gaGVpZ2h0PTEwMCVcPlw8aW1nIHNyYz1pbWFnZXMvZ3JjUG9kTG93ZXJMZWZ0LmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgd2lkdGg9MTUxXD5cPHRhYmxlIHdpZHRoPTE1MSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPXRvcFw+XDxpbWcgc3JjPWltYWdlcy9ncmNQb2RVcHBlck1pZGRsZS5naWZcPlw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCBjbGFzcz1uYXZ0ZXh0XD5XYXRlclw8L3RkXD5cPC90clw+XDx0clw+XDx0ZCB2YWxpZ249Ym90dG9tIGhlaWdodD0xMDAlXD5cPGltZyBzcmM9aW1hZ2VzL2dyY1BvZExvd2VyTWlkZGxlLmdpZlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8dGQgaGVpZ2h0PTEwMCVcPlw8dGFibGUgaGVpZ2h0PTEwMCUgYmFja2dyb3VuZD1pbWFnZXMvZ3JjQXJyb3dUb3AuZ2lmIGNsYXNzPW5hdnRvcGNlbnRlciBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTBcPlw8dHJcPlw8dGQgdmFsaWduPW1pZGRsZSBiYWNrZ3JvdW5kPWltYWdlcy9ncmNBcnJvd0JvdHRvbS5naWYgY2xhc3M9bmF2Ym90dG9tY2VudGVyXD5cPGltZyBzcmM9aW1hZ2VzL2J0bkxldmVsMk9mZi5naWYgbmFtZT1uYXY0Mlw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+XDwvdGRcPlw8L3RyXD5cPC90YWJsZVw+IiwgJz9QYWdlSUQ9NDInLCAnJywgZmFsc2UsICcnKVw7CmFjZV9zdGF0ZS5oYmdjb2xvciA9ICcjMDA2NmNjJ1w7CmFjZV9zdGF0ZS5oZnRjb2xvciA9ICcjZmZmZmZmJ1w7CmFjZV9zdGF0ZS5uYmdjb2xvciA9ICcjRjRGQUZGJ1w7CmFjZV9zdGF0ZS5uZnRjb2xvciA9ICcjMDAwMDAwJ1w7CmFjZV9zdGF0ZS5odG1sQWZ0ZXIgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlX3N0YXRlLmh0bWxCZWZvcmUgPSAnJm5ic3BcOyZuYnNwXDsnXDsKYWNlbWVudSA9IG5ldyBBQ0VNZW51KCcxJylcOwphY2VtZW51Lml0ZW1ib3JkZXIgPSAnMXB4ICBzb2xpZCdcOwphY2VtZW51Lm1lbnVib3JkZXIgPSAnMXB4ICNCQ0NCRDQgc29saWQnXDsKYWNlbWVudS5BZGRJdGVtKCJDb250YWN0IEluZm9ybWF0aW9uIiwnP1BhZ2VJRD0zNTInLCAnJywgZmFsc2UsICcnKVw7CmFjZW1lbnUuQWRkSXRlbSgiU2lnbiBVcCBUbyBSZWNlaXZlIEVsZWN0cm9uaWMgTWFpbGluZ3MiLCc/UGFnZUlEPTQ3NycsICcnLCBmYWxzZSwgJycpXDsKYWNlbWVudS5BZGRJdGVtKCJGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyIsJz9QYWdlSUQ9NDgxJywgJycsIGZhbHNlLCAnJylcOwphY2VtZW51LkFkZEl0ZW0oIkxpbmtzIiwnP1BhZ2VJRD00ODcnLCAnJywgZmFsc2UsICcnKVw7Clw8L3NjcmlwdFw+Clw8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgbGFuZ3VhZ2U9J0phdmFTY3JpcHQxLjInXD5BQ0VEaXNwbGF5TWVudSgpXDtcPC9zY3JpcHRcPgpcPC90ZFw+Clw8L3RyXD4KXDwvdGFibGVcPgpcPC90ZFw+Clw8L3RyXD4KXDx0clw+XDx0ZFw+XDxpbWcgc3JjPWltYWdlcy9zcGFjZXIuZ2lmIHdpZHRoPTEgaGVpZ2h0PTUgXD5cPC90ZFw+XDwvdHJcPjs+Pjs7Pjs+Pjt0PHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nZGVmYXVsdC5hc3B4PyMnIGNsYXNzPSdicmVhZGNydW1ib2ZmJ1w+SG9tZVw8L2FcPiZuYnNwXDsmbmJzcFw7XDxmb250IGNsYXNzPWJjQXJyb3dcPlw+XDwvZm9udFw+Jm5ic3BcOyZuYnNwXDtcPGEgaHJlZj0nP1BhZ2VJRD0yJyBjbGFzcz1icmVhZGNydW1ib25cPkRlcGFydG1lbnRzXDwvYVw+Oz4+Ozs+O3Q8cDxsPFRleHQ7PjtsPERlcGFydG1lbnRzOz4+Ozs+O3Q8cDxsPFRleHQ7PjtsPFw8UFw+VGhlIFRvd24gb2YgRGVXaXR0IGhhcyBlbGV2ZW4gZGVwYXJ0bWVudHMgYXMgd2VsbCBhcyB0aGUgU3VwZXJpdnNvcidzIE9mZmljZSwgZWFjaCB3aXRoIHNwZWNpZmljIHNwZWNpYWxpemVkIGZ1bmN0aW9ucy7CoCBGb3IgY29udGFjdCBpbmZvcm1hdGlvbiwgc2VydmljZXMsIG9yIHRvwqBsZWFybiBtb3JlwqBhYm91dMKgZnVuY3Rpb25zIG9mIGHCoHBhcnRpY3VsYXIgZGVwYXJ0bWVudCBtb3VzZSBvdmVywqB0aGUgZGVwYXJ0bWVudCdzIGJ1dHRvbiB0byB0aGUgbGVmdCBvciBjbGljayBvbiB0aGUgZGVwYXJ0bWVudCdzIGxpbmsgYmVsb3cuwqAgXDxCUlw+XDxCUlw+XDxBIEhSRUY9ImRlZmF1bHQuYXNweD9QYWdlSUQ9NDYiXD5Bc3Nlc3Nvclw8L0FcPiBcPEJSXD5cPEEgSFJFRj0iZGVmYXVsdC5hc3B4P1BhZ2VJRD01OSJcPkJ1aWxkaW5nLCBQbGFubmluZywgYW5kIFpvbmluZ1w8L0FcPiBcPEJSXD5cPEEgSFJFRj0iZGVmYXVsdC5hc3B4P1BhZ2VJRD0yNTciXD5DbGVya1w8L0FcPiBcPEJSXD5cPEEgSFJFRj0iZGVmYXVsdC5hc3B4P1BhZ2VJRD00OCJcPkNvbXB0cm9sbGVyXDwvQVw+IFw8QlJcPlw8QSBIUkVGPSJkZWZhdWx0LmFzcHg/UGFnZUlEPTQzIlw+Q291cnRcPC9BXD4gXDxCUlw+XDxBIEhSRUY9ImRlZmF1bHQuYXNweD9QYWdlSUQ9NDciXD5IaWdod2F5XDwvQVw+IFw8QlJcPlw8QSBIUkVGPSJkZWZhdWx0LmFzcHg/UGFnZUlEPTYxIlw+UGFya3NcPC9BXD4gXDxCUlw+XDxBIEhSRUY9ImRlZmF1bHQuYXNweD9QYWdlSUQ9NjIiXD5Qb2xpY2VcPC9BXD4gXDxCUlw+XDxBIEhSRUY9ImRlZmF1bHQuYXNweD9QYWdlSUQ9NDQiXD5SZWNlaXZlciBvZiBUYXhlc1w8L0FcPiBcPEJSXD5cPEEgSFJFRj0iZGVmYXVsdC5hc3B4P1BhZ2VJRD02MyJcPlJlY3JlYXRpb25cPC9BXD4gXDxCUlw+XDxBIEhSRUY9ImRlZmF1bHQuYXNweD9QYWdlSUQ9NDUiXD5TdXBlcnZpc29yXDwvQVw+IFw8QlJcPlw8QSBIUkVGPSJkZWZhdWx0LmFzcHg/UGFnZUlEPTQyIlw+V2F0ZXJcPC9BXD5cPC9QXD47Pj47Oz47dDxAMDxwPHA8bDxEYXRhS2V5cztfIUl0 Http-Referer: http://www.?????.com/?PageID=2 Path: /Default.aspx. ---> System.Web.HttpException: Authentication of viewstate failed. 1) If this is a cluster, edit configuration so all servers use the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. 2) Viewstate can only be posted back to the same page. 3) The viewstate for this page might be corrupted. ---> System.Web.HttpException: Unable to validate data. at System.Web.Configuration.MachineKey.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) at System.Web.UI.LosFormatter.Deserialize(String input) --- End of inner exception stack trace --- at System.Web.UI.LosFormatter.Deserialize(String input) at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() --- End of inner exception stack trace --- at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadPageViewState() at System.Web.UI.Page.ProcessRequestMain()

Stack Trace: at System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain() at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequest(HttpContext context) at System.Web.CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Source: System.Web

# re: Understanding ASP.NET View State 4/17/2005 1:55 PM Bilal Haidar

Hello Scott, is it possible to have the RewriterConfig section in a seperate config file ? like siteUrls.config ? How would one then, read that file and keep on the same structure of the config classes ?
I mean, when you read the section using GetConfig and then cast to RulesCollection, that is fine, but when you read from another file rather than web.config, then how can you use the same classes, but reading from different config file ?
thanks.

# re: Understanding ASP.NET View State 6/20/2005 3:46 AM Bilal Haidar

Well yes its pretty simple. If anyone is interested.

Regards

# re: Understanding ASP.NET View State 9/6/2006 1:59 AM Vivek Thakur

Great article...!

But i have a confusion: you have written:
"It is a common misconception among developers that view state is somehow responsible for having TextBoxes, CheckBoxes, DropDownLists, and other Web controls remember their values across postback"

I think there should be more clarification here else readers may get confused:

If you have added items in a DropDownList (or listbox)programmatically, then they will not maintain their state if you turn EnableViewstate="off" as the form collection has only one value per control.

Can you throw some light on this?

Regards,
Vivek

# re: Understanding ASP.NET View State 9/6/2006 5:57 AM Scott Mitchell

Vivek, what I mean is that many developers mistakenly assume that the value in the TextBox or the selected value for a DropDownList is persisted in view state. These values are not saved in view state, but persisted because the browser sends back the values.

Granted, view state is needed for programmatically added list items, as you note, and for "changed" events (like TextChanged and SelectedIndexChanged), but the actual *value* for these controls do not require view state.

Is that clearer?

# re: Understanding ASP.NET View State 9/8/2006 1:14 PM Vivek Thakur

Scott,

Thanks for the info.

Cheers,

Vivek

# re: Understanding ASP.NET View State 11/18/2006 8:25 AM Ruben Cordoba

Nice article. Thank you for sharing your knowledge about dynamic controls and viewstate.

I would like to comment one of my problems working with viewstate:

In a page derived from a master page, a GridView control populates a list of animals. Only for the first animal (row) in the populated list, a dynamic user control is loaded. The code is as follows:

Animal.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="AnimalID" EnableViewState="False">

<Columns>

<asp:TemplateField>

<ItemTemplate>

<asp:PlaceHolder ID="PlaceHolder1" runat="server" />

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

</asp:Content>

Note that the dynamic user control is re-created on every post back:

Animal.aspx.vb

Protected Sub Page_Load(...)

GridView1.DataSource = ListAnimals()

GridView1.DataBind()

End Sub

Protected Sub GridView1_RowDataBound(...)

...

If e.Row.RowIndex = 0 Then

Dim Control As Control = Nothing

Control = Page.LoadControl("AnimalPictures.ascx")

Control.ID = "AnimalPictures1"

CType(Control.FindControl("AnimalID"), HiddenField).Value = CType(DataBinder.Eval(e.Row.DataItem, "AnimalID"), Integer)

CType(e.Row.FindControl("PlaceHolder1"), PlaceHolder).Controls.Clear()

CType(e.Row.FindControl("PlaceHolder1"), PlaceHolder).Controls.Add(Control)

End If

...

End Sub

The dynamic user control contains a DataList which populates 4 random pictures about a particular animal. EnableViewState = True is used for the dynamic user control:

AnimalPictures.ascx

<%@ Control Language="VB" ... EnableViewState="True" %>

<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal">

<ItemTemplate>

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="LinkButton1" CommandArgument='<%# Eval("PictureID") %>' PostBackUrl="~/PictureDetails.aspx">

<asp:Image ID="Image1" runat="server" />

</asp:LinkButton>

</ItemTemplate>

</asp:DataList>

<asp:HiddenField ID="AnimalID" runat="server" />

Only the first time the dynamic user control is loaded, a database call is required to retrieve the 4 random pictures.

AnimalPictures.ascx.vb

Protected Sub Page_Load(...)

If Not Page.IsPostBack Then

DataList1.DataSource = RandomAnimalPictures(AnimalID.Value)

DataList1.DataBind()

End If

End Sub

Protected Sub DataList1_ItemCommand(...)

...

End Sub

Protected Sub DataList1_ItemDataBound(...)

...

End Sub

1. When I execute the code and click on one of the animal pictures, the DataList1_ItemCommand event handler is not fired, so I cannot get the details page about that particular animal picture.

2. If I remove the line If Not Page.IsPostBack... from AnimalPictures.ascx.vb the DataList1_ItemCommand event handler is fired. However, because a new database called is executed to retrieve 4 new random images about that particular animal, when I get to the PictureDetails.aspx page, the details information page doesn’t coincide with the picture I clicked on.

What am I doing wrong? Why is the DataList1_ItemCommand event handler not fired? I hope I explained my problem with enough details.

# re: Understanding ASP.NET View State 11/8/2007 9:49 AM Gururaj Kulkarni

Hi Scott Mitchell,
Thank you very much for a wonderful explaination of ViewState (http://msdn2.microsoft.com/en-us/library/ms972976.aspx).
Though I have a question regarding ViewState.
Say for example the EnableViewState is set to false on <%@ Page directive. However I want to enable the view state on my custom conrtol (I set this in control constructor) placed on the page.
Firstly, is it possible. If so, then why are SaveViewState and LoadViewState not being called for my custom control. It would be of great help if you could explain this to me.
Code snippet:



<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewState.aspx.cs" Inherits="MyWebApplication.ViewState" EnableViewState="false"%>
<%@ Register Assembly="MyWebControlLib" Namespace="MyWebControlLib" TagPrefix="MyControls"%>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"><title>View State Testing</title></head>
<body>
<form id="form1" runat="server">
<h3><asp:Literal runat="server" Text="This is a test for View Page" /></h3><br />
<font color="red"><MyControls:Feedback runat="server" ID="litFeedback" EnableViewState="true" /></font>

And a text box and button control. On click of the button the Feedback is set.

</form>
</body>
</html>
<MyControls:Feedback runat="server" ID="litFeedback" EnableViewState="true" />




public class Feedback : Literal
{
public Feedback()
: base()
{
this.EnableViewState = true;
}


protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
}


protected override object SaveViewState()
{
object o = base.SaveViewState();
return o;
}
}

Cheers
Guru

-----Gururaj Kulkarni

Title:  
Name:  
Url:
Protected by Clearscreen.SharpHIPEnter the code you see:
Comments   

Add To Your Reader

My Links

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<May 2008>
SMTWTFS
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

Comment Stats

DayTotal% of Total
Sunday 1866.8%
Monday 37913.9%
Tuesday 45316.7%
Wednesday 50418.5%
Thursday 53519.7%
Friday 49418.2%
Saturday 1666.1%
Total 2717100.0%

Hour1Total% of Total
12:00 AM 652.4%
1:00 AM 682.5%
2:00 AM 622.3%
3:00 AM 742.7%
4:00 AM 572.1%
5:00 AM 1033.8%
6:00 AM 1084.0%
7:00 AM 1585.8%
8:00 AM 1716.3%
9:00 AM 1475.4%
10:00 AM 1716.3%
11:00 AM 1816.7%
12:00 PM 1886.9%
1:00 PM 1696.2%
2:00 PM 1605.9%
3:00 PM 1324.9%
4:00 PM 1073.9%
5:00 PM 923.4%
6:00 PM 913.3%
7:00 PM 963.5%
8:00 PM 833.1%
9:00 PM 782.9%
10:00 PM 792.9%
11:00 PM 772.8%
Total 2717100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 5.54144
Monday 5.22339
Tuesday 4.28419
Wednesday 7.67637
Thursday 6.90607
Friday 5.48411
Saturday 5.33160
Total 5.842717

Hour1 Entry MadeAvg.Total
12:00 AM 5.0035
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 7.0035
8:00 AM 5.35107
9:00 AM 6.32278
10:00 AM 6.47246
11:00 AM 4.41181
12:00 PM 6.88330
1:00 PM 3.00111
2:00 PM 5.41222
3:00 PM 8.64285
4:00 PM 4.0589
5:00 PM 5.92154
6:00 PM 4.52113
7:00 PM 9.67174
8:00 PM 9.80147
9:00 PM 5.05111
10:00 PM 5.4265
11:00 PM 4.5732
Total 5.842717

Learn More About Comment Stats
1 - All times GMT -8...


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles