Mentorship PlatformsRoshan Gehlot2026-01-05T11:11:04+00:00
PGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIiAvPgoKPHRpdGxlPk1lbnRvcnNoaXAgUGxhdGZvcm1zIC0gQ29ubmVjdCBNZW50b3JzICYgTWVudGVlcyB8IE1lbnRvckxpbms8L3RpdGxlPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iTGF1bmNoIGFuZCBzY2FsZSBtZW50b3JzaGlwIHByb2dyYW1zLiBNYXRjaCBtZW50b3JzIGFuZCBtZW50ZWVzLCBzY2hlZHVsZSBzZXNzaW9ucywgdHJhY2sgcHJvZ3Jlc3MsIGFuZCBkZWxpdmVyIHBlcnNvbmFsaXplZCBndWlkYW5jZSBmb3IgY2FyZWVycyBhbmQgc2tpbGxzLiIgLz4KPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Im1lbnRvcnNoaXAgcGxhdGZvcm0sIG1lbnRvciBtYXJrZXRwbGFjZSwgY2FyZWVyIGNvYWNoaW5nLCBtZW50ZWUgbWFuYWdlbWVudCwgc2Vzc2lvbiBzY2hlZHVsaW5nLCBza2lsbCBkZXZlbG9wbWVudCwgbWVudG9yc2hpcCBzb2Z0d2FyZSIgLz4KPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJMYXVuY2hLaXQiIC8+CiAgPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgZm9sbG93LCBtYXgtc25pcHBldDotMSwgbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UsIG1heC12aWRlby1wcmV2aWV3Oi0xIiAvPgogIDxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJFbmdsaXNoIiAvPgogIDxtZXRhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgY29udGVudD0iZ2xvYmFsIiAvPgogIAogIDxtZXRhIG5hbWU9InJhdGluZyIgY29udGVudD0iR2VuZXJhbCIgLz4KICA8bWV0YSBuYW1lPSJyZXZpc2l0LWFmdGVyIiBjb250ZW50PSI3IGRheXMiIC8+CjxtZXRhIG5hbWU9InRoZW1lLWNvbG9yIiBjb250ZW50PSIjZmZmZmZmIiAvPgo8bWV0YSBuYW1lPSJhcHBsaWNhdGlvbi1uYW1lIiBjb250ZW50PSJFdmVudCBMYW5kaW5nIFBhZ2Ug4oCUIEFJIEJ1aWxkZXIiIC8+Cgo8IS0tIENhbm9uaWNhbCAtLT4KPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vZXhhbXBsZS5jb20vbWVudG9yc2hpcC1wbGF0Zm9ybXMvIiAvPgoKICA8IS0tIEZhdmljb25zIC0tPgogIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIiAvPgogIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii9hcHBsZS10b3VjaC1pY29uLnBuZyIgLz4KICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjMyeDMyIiBocmVmPSIvZmF2aWNvbi0zMngzMi5wbmciIC8+CiAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9wbmciIHNpemVzPSIxNngxNiIgaHJlZj0iL2Zhdmljb24tMTZ4MTYucG5nIiAvPgoKPCEtLSBPcGVuIEdyYXBoIC8gRmFjZWJvb2sgLS0+CjxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL2V4YW1wbGUuY29tL21lbnRvcnNoaXAtcGxhdGZvcm1zLyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJNZW50b3JzaGlwIFBsYXRmb3JtcyDigJQgQ29ubmVjdCwgR3VpZGUsIEdyb3ciIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ29ubmVjdCBtZW50b3JzIGFuZCBtZW50ZWVzLCBtYW5hZ2Ugc2Vzc2lvbnMsIGFuZCB0cmFjayBncm93dGggd2l0aCBhbiBhbGwtaW4tb25lIG1lbnRvcnNoaXAgcGxhdGZvcm0uIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzAzL2xhdW5jaC1zdHVkaW8ucG5nIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6c2l0ZV9uYW1lIiBjb250ZW50PSJNZW50b3JMaW5rIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6bG9jYWxlIiBjb250ZW50PSJlbl9VUyIgLz4KCjwhLS0gVHdpdHRlciBDYXJkcyAtLT4KPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIiAvPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOnVybCIgY29udGVudD0iaHR0cHM6Ly9leGFtcGxlLmNvbS9tZW50b3JzaGlwLXBsYXRmb3Jtcy8iIC8+CjxtZXRhIG5hbWU9InR3aXR0ZXI6dGl0bGUiIGNvbnRlbnQ9Ik1lbnRvcnNoaXAgUGxhdGZvcm1zIOKAlCBDb25uZWN0LCBHdWlkZSwgR3JvdyIgLz4KPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iTGF1bmNoIG1lbnRvcnNoaXAgcHJvZ3JhbXMgd2l0aCBtYXRjaGluZywgc2NoZWR1bGluZywgYW5kIHByb2dyZXNzIHRyYWNraW5nLiIgLz4KPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDMvbGF1bmNoLXN0dWRpby5wbmciIC8+CjxtZXRhIG5hbWU9InR3aXR0ZXI6Y3JlYXRvciIgY29udGVudD0iQHRlY2hzdW1taXQiIC8+Cgo8IS0tIEluc3RhZ3JhbSAtLT4KPG1ldGEgcHJvcGVydHk9Im9nOnNlZV9hbHNvIiBjb250ZW50PSJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3dyaXRlY3JlYW1haS8iIC8+CjxtZXRhIG5hbWU9Imluc3RhZ3JhbTpzaXRlIiBjb250ZW50PSJAd3JpdGVjcmVhbWFpIiAvPgo8bWV0YSBuYW1lPSJpbnN0YWdyYW06aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzAzL2NvZGUtYXNzaXN0YW50LnBuZyIgLz4KCiAgPCEtLSBBZGRpdGlvbmFsIFNFTyBNZXRhIFRhZ3MgLS0+CiAgPG1ldGEgbmFtZT0iZ2VvLnJlZ2lvbiIgY29udGVudD0iVVMiIC8+CiAgPG1ldGEgbmFtZT0iZ2VvLnBsYWNlbmFtZSIgY29udGVudD0iTmV3IFlvcmssIFVTQSIgLz4KICA8bWV0YSBuYW1lPSJnZW8ucG9zaXRpb24iIGNvbnRlbnQ9IjQwLjcxMjg7LTc0LjAwNjAiIC8+CiAgPG1ldGEgbmFtZT0iSUNCTSIgY29udGVudD0iNDAuNzEyOCwgLTc0LjAwNjAiIC8+CiAgPG1ldGEgbmFtZT0ibW9iaWxlLXdlYi1hcHAtY2FwYWJsZSIgY29udGVudD0ieWVzIiAvPgogIDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9InRydWUiIC8+CiAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPgoKPCEtLSBTY2hlbWEgTWFya3VwIChKU09OLUxEKSAtLT4KPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KewogICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICJAdHlwZSI6ICJTb2Z0d2FyZUFwcGxpY2F0aW9uIiwKICAibmFtZSI6ICJNZW50b3JzaGlwIFBsYXRmb3JtcyIsCiAgInVybCI6ICJodHRwczovL2V4YW1wbGUuY29tL21lbnRvcnNoaXAtcGxhdGZvcm1zLyIsCiAgImRlc2NyaXB0aW9uIjogIkNvbm5lY3QgbWVudG9ycyBhbmQgbWVudGVlcywgc2NoZWR1bGUgc2Vzc2lvbnMsIGFuZCB0cmFjayBncm93dGggd2l0aCBhIGNvbXBsZXRlIG1lbnRvcnNoaXAgcGxhdGZvcm0uIiwKICAiYXBwbGljYXRpb25DYXRlZ29yeSI6ICJVdGlsaXR5QXBwbGljYXRpb24iLAogICJvcGVyYXRpbmdTeXN0ZW0iOiAiQWxsIiwKICAib2ZmZXJzIjogewogICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICJwcmljZSI6ICIwLjAwIiwKICAgICJwcmljZUN1cnJlbmN5IjogIlVTRCIKICB9LAogICJwdWJsaXNoZXIiOiB7CiAgICAiQHR5cGUiOiAiT3JnYW5pemF0aW9uIiwKICAgICJuYW1lIjogIk1lbnRvckxpbmsiLAogICAgInVybCI6ICJodHRwczovL2V4YW1wbGUuY29tLyIKICB9LAogICJhZ2dyZWdhdGVSYXRpbmciOiB7CiAgICAiQHR5cGUiOiAiQWdncmVnYXRlUmF0aW5nIiwKICAgICJyYXRpbmdWYWx1ZSI6ICI0LjgiLAogICAgInJldmlld0NvdW50IjogIjM0MjEiCiAgfQp9Cjwvc2NyaXB0PgoKICA8IS0tIEZvbnRzIGFuZCBDU1MgLS0+CiAgPCEtLSA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iIC8+CiAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbiAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9T3V0Zml0OndnaHRANDAwOzUwMDs2MDA7NzAwJmZhbWlseT1TcGFjZStHcm90ZXNrOndnaHRANDAwOzUwMDs2MDA7NzAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0IiAvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzYuMC4wL2Nzcy9hbGwubWluLmNzcyIgLz4gLS0+CiAgICA8c2NyaXB0IHR5cGU9ImltcG9ydG1hcCI+CiAgICAgIHsKICAgICAgICAiaW1wb3J0cyI6IHsKICAgICAgICAgICJyZWFjdCI6ICJodHRwczovL2VzbS5zaC9yZWFjdEAxOC4yLjAiLAogICAgICAgICAgInJlYWN0LWRvbSI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMi4wIiwKICAgICAgICAgICJyZWFjdC1kb20vIjogImh0dHBzOi8vZXNtLnNoL3JlYWN0LWRvbUAxOC4yLjAvIiwKICAgICAgICAgICJAY29kZXNhbmRib3gvc2FuZHBhY2stcmVhY3QiOiAiaHR0cHM6Ly9lc20uc2gvQGNvZGVzYW5kYm94L3NhbmRwYWNrLXJlYWN0QDIuOC4wP2RlcHM9cmVhY3RAMTguMi4wJmRlcHM9cmVhY3QtZG9tQDE4LjIuMCIKICAgICAgICB9CiAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8va2l0LmZvbnRhd2Vzb21lLmNvbS9iYzA4MTc5MmQ0LmpzIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPgo6cm9vdCB7CiAgICAtLXByaW1hcnktY29sb3I6ICMyZDJkMmQ7CiAgICAtLWFjY2VudC1jb2xvcjogIzRhOTBlMjsKICAgIC0tYmx1ZS1jb2xvcjogIzRhOTBlMjsKICAgIAogICAgLyogRGFyayB0aGVtZSBjb2xvcnMgKGRlZmF1bHQgYW5kIG9ubHkgdGhlbWUpICovCiAgICAtLWJnLWNvbG9yOiAjMDAwMDAwOwogICAgLS1zdXJmYWNlLWNvbG9yOiAjMmQyZDJkOwogICAgLS10ZXh0LWNvbG9yOiAjZTBlMGUwOwogICAgLS1ib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAtLWlucHV0LWJnOiAjMmQyZDJkOwogICAgLS1pbnB1dC1ib3JkZXI6ICM0MDQwNDA7CiAgICAtLXBpbGwtYmc6ICMzMzMzMzM7CiAgICAtLWJ1dHRvbi1iZzogIzQwNDA0MDsKICAgIC0tc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAtLWhlYWRlci1ib3JkZXI6ICM0MDQwNDA7CiAgICAtLWZvb3Rlci1iZzogIzJkMmQyZDsKICAgIC0tY2FyZC1iZzogIzMzMzMzMzsKICAgIC0tYmctc2Vjb25kYXJ5OiAjNDQ0NDQ0OwogICAgLS10ZXh0LXNlY29uZGFyeTogI2NjY2NjYzsKICAgIC0tYmx1ZS1ob3ZlcjogIzNhN2JjODsKfQoKLyogU2Nyb2xsYmFyIHdpZHRoICovCjo6LXdlYmtpdC1zY3JvbGxiYXIgewogIHdpZHRoOiAxMnB4Owp9CgovKiBUcmFjayAoYmFja2dyb3VuZCkgKi8KOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgYmFja2dyb3VuZDogIzFhMWExYTsgLyogZGFyayBiYWNrZ3JvdW5kICovCn0KCi8qIEhhbmRsZSAodGh1bWIpICovCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogIGJhY2tncm91bmQ6ICM1NTU7IC8qIGRhcmsgZ3JheSAqLwogIGJvcmRlci1yYWRpdXM6IDZweDsKfQoKLyogSGFuZGxlIG9uIGhvdmVyICovCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogIGJhY2tncm91bmQ6ICM3Nzc7Cn0KLyogQmFzZSBjaGF0IGJ1YmJsZSBzdHlsZXMgZm9yIGRhcmsgdGhlbWUgKi8KLmNoYXQtYnViYmxlLmFpIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOyAvKiBNb3JlIHNwZWNpZmljIHRoYW4gLS1zdXJmYWNlLWNvbG9yICovCiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNTA1MDUwOyAvKiBNb3JlIHNwZWNpZmljIHRoYW4gLS1ib3JkZXItY29sb3IgKi8KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKICAgIG1hcmdpbi1sZWZ0OiAxNXB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLmNoYXQtYnViYmxlLmFpOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAtOHB4OwogICAgd2lkdGg6IDhweDsKICAgIGhlaWdodDogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsgLyogTWF0Y2hlcyB0aGUgYnViYmxlIGJhY2tncm91bmQgKi8KICAgIGNsaXAtcGF0aDogcG9seWdvbigxMDAlIDAsIDAlIDEwMCUsIDEwMCUgMTAwJSk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKfQoKLmdpdGh1Yi1zdGFycywKLmdpdGh1Yi1sYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7Cn0KCi5iYWRnZS10b2dldGhlciB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgb3BhY2l0eTogMC44Owp9CgoqIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwp9CgovKiBXb3JkUHJlc3MgVGhlbWUgQ29tcGF0aWJpbGl0eSAtIEZ1bGwgUGFnZSBCYWNrZ3JvdW5kICovCmJvZHksIGh0bWwgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteDogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIFdvcmRQcmVzcyBjb250YWluZXIgYWRqdXN0bWVudHMgLSBGdWxsIHdpZHRoICovCi5jb250YWluZXIsIC5jb250YWluZXItZmx1aWQsIC53cmFwcGVyLCAuY29udGVudCwgLm1haW4sIAouc2l0ZS1jb250ZW50LCAuZW50cnktY29udGVudCwgLnBhZ2UtY29udGVudCB7CiAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKfQoKLyogRW5zdXJlIG91ciBjb250ZW50IHdvcmtzIHdpdGhpbiBXb3JkUHJlc3MgKi8KI2xhbmRpbmdTZWN0aW9uIHsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDA7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLyogRml4IGhlcm8gc2VjdGlvbiBjb250ZW50IGNlbnRlcmluZyAtIGtlZXAgY29udGVudCBjZW50ZXJlZCBidXQgYmFja2dyb3VuZCBmdWxsLXdpZHRoICovCi5oZXJvLXNlY3Rpb24gewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50Owp9CgouaGVyby1jb250ZW50LCAuaGVyby10ZXh0IHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiA4MDBweCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgMjBweCAhaW1wb3J0YW50Owp9CgovKiBGaXggc3RhciBsb2dvIHBvc2l0aW9uaW5nIC0ga2VlcCBpdCBjZW50ZXJlZCAqLwouaGVyby1zZWN0aW9uIGgxIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBnYXA6IDE1cHggIWltcG9ydGFudDsKfQoKLmhlcm8tc2VjdGlvbiBwIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKfQoKLyogRml4IHRoZSBhY3R1YWwgaW5wdXQgY29udGFpbmVyIGNsYXNzZXMgZnJvbSBIVE1MICovCi5pbnB1dC1vdXRlci1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5pbnB1dC1pbm5lci1jb250YWluZXIgewogICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiA1MCUgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7Cn0KCi5pbnB1dC1pbm5lci1jb250YWluZXIudmVydGljYWwgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9CgouaW5wdXQtY29udHJvbHMtcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiA1MHB4ICFpbXBvcnRhbnQ7CiAgICBnYXA6IDEycHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDZweCAxMHB4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBwcm9tcHQgaW5wdXQgc3R5bGluZyB0byBtYXRjaCBvcmlnaW5hbCAqLwoucHJvbXB0LWlucHV0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4IDEycHggMCAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxcmVtIDEuNXJlbSAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAxcmVtICFpbXBvcnRhbnQ7CiAgICBib3JkZXItYm90dG9tOiBub25lICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogICAgcmVzaXplOiBub25lICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiAyMDBweCAhaW1wb3J0YW50OwogICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50OwogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKCgovKiBGaXggc3VnZ2VzdGVkIGFwcHMgc2VjdGlvbiAtIGNlbnRlcmVkIHdpdGggcHJvcGVyIHdpZHRoICovCi5zdWdnZXN0ZWQtYXBwcyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7CiAgICBnYXA6IDEwcHggIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDIwcHggIWltcG9ydGFudDsKfQoKLnN1Z2dlc3RlZC1hcHAgewogICAgbWFyZ2luOiA1cHggIWltcG9ydGFudDsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBmZWF0dXJlcyBncmlkIC0gMyBjYXJkcyBpbiBhIHJvdywgY2VudGVyZWQgKi8KLmZlYXR1cmVzLWdyaWQgewogICAgZGlzcGxheTogZ3JpZCAhaW1wb3J0YW50OwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMjgwcHgpICFpbXBvcnRhbnQ7CiAgICBnYXA6IDIwcHggIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogZml0LWNvbnRlbnQgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyMHB4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50Owp9CgouZmVhdHVyZS1jYXJkIHsKICAgIHdpZHRoOiAyODBweCAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAyODBweCAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgYWxsIHNlY3Rpb25zIGFyZSBwcm9wZXJseSBjZW50ZXJlZCAqLwouZmVhdHVyZXMtc2VjdGlvbiwgLmhvdy1pdC13b3Jrcy1zZWN0aW9uLCAucG9zc2liaWxpdGllcy1zZWN0aW9uLAouZGVtby1zZWN0aW9uLCAuY2FwYWJpbGl0aWVzLXNlY3Rpb24sIC50ZXN0aW1vbmlhbHMtc2VjdGlvbiwgLmN0YS1zZWN0aW9uIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMjAwcHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KCi8qIFdvcmRQcmVzcyBwYWdlLXNwZWNpZmljIHN0eWxpbmcgLSBGdWxsIGJhY2tncm91bmQgY292ZXJhZ2UgKi8KYm9keS5wYWdlLWlkLTU5MzYzIHsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKYm9keS5wYWdlLWlkLTU5MzYzICNsYW5kaW5nU2VjdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogLTQwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC0xNTBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDQwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmctYm90dG9tOiAxNTBweCAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDE5MHB4KSAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgY2VudGVyaW5nIGZvciBIb3cgSXQgV29ya3Mgc2VjdGlvbiAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmhvdy1pdC13b3Jrcy1zZWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDAwcHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGNlbnRlciBvbmx5IHRoZSBzdWJ0aXRsZSB0ZXh0ICovCmJvZHkucGFnZS1pZC01OTM2MyAuaG93LWl0LXdvcmtzLXN1YnRpdGxlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Owp9CgovKiBDZW50ZXIgQUxMIHNlY3Rpb24gc3VidGl0bGVzIGluIFdvcmRQcmVzcyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmhlcm8tc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuaG93LWl0LXdvcmtzLXN1YnRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLmVuZGxlc3Mtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuYWN0aW9uLXN1YnRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLm1vcmUtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAubG92ZWQtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuY3RhLXN1YnRpdGxlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgV29yZFByZXNzIGNvbnRhaW5lcnMgZG9uJ3QgYWRkIHdoaXRlIHNwYWNlICovCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndyYXBwZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGVudCwKYm9keS5wYWdlLWlkLTU5MzYzIC5tYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtY29udGVudCwKYm9keS5wYWdlLWlkLTU5MzYzIC5lbnRyeS1jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLnBhZ2UtY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGV4Y2Vzc2l2ZSBXb3JkUHJlc3Mgb3ZlcnJpZGVzIC0ga2VlcCBtaW5pbWFsICovCgovKiBXb3JkUHJlc3MgY29udGFpbmVyIGNvbXBhdGliaWxpdHkgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5jb250YWluZXIsCmJvZHkucGFnZS1pZC01OTM2MyAud3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLm1haW4sCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50IHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKLyogUmVzcG9uc2l2ZSBEZXNpZ24gSW1wcm92ZW1lbnRzICovCi8qIEZvciBzY3JlZW5zIDkwMHB4IGFuZCBiZWxvdyAtIFNUQUNLIFZFUlRJQ0FMTFkgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAuc3RlcHMtY29udGFpbmVyIHsgCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OyAKICAgICAgICBnYXA6IDEuNXJlbSAhaW1wb3J0YW50OyAKICAgICAgICBwYWRkaW5nOiAwIDFyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIH0KICAgIC5zdGVwLWFycm93IHsgCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpICFpbXBvcnRhbnQ7IAogICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcC1jYXJkIHsgCiAgICAgICAgbWF4LXdpZHRoOiA5MCUgIWltcG9ydGFudDsgCiAgICAgICAgd2lkdGg6IDkwJSAhaW1wb3J0YW50OyAKICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAxLjVyZW0gMXJlbSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxLjFyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIC5zdGVwLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDAuOXJlbSAhaW1wb3J0YW50OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQgIWltcG9ydGFudDsKICAgIH0KfQoKLyogTW9iaWxlIHJlc3BvbnNpdmUgZml4ZXMgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAvKiBNb2JpbGUgZm9vdGVyIGJhY2tncm91bmQgZml4IC0gaW5jcmVhc2VkIGV4dGVuc2lvbiAqLwogICAgYm9keSB7CiAgICAgICAgbWFyZ2luLXRvcDogNDBweDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNDAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNDAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyA0MDBweCkgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAzMDBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBFeHRlbmQgYmFja2dyb3VuZCBwYXR0ZXJuIGRvd24gc2lnbmlmaWNhbnRseSAqLwogICAgI2xhbmRpbmdTZWN0aW9uOjpiZWZvcmUgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlICsgMzAwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBoZXJvIHNlY3Rpb24gaW1wcm92ZW1lbnRzICovCiAgICAuaGVyby1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDE1cHggIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5pbnNpZGUtaGVyby1zZWN0aW9uIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICAgICAgZ2FwOiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8taWNvbiBpbWcgewogICAgICAgIHdpZHRoOiAyLjVyZW0gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxLjhyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5oZXJvLXN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDFyZW0gIWltcG9ydGFudDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDEwcHggMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAucG93ZXJlZC1waWxsIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTVweCAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMC44NXJlbSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMTBweCBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQgIWltcG9ydGFudDsKICAgICAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBpbnB1dCBzZWN0aW9uIGZpeGVzICovCiAgICAuaW5wdXQtc2VjdGlvbiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDVweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtaW5uZXItY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtY29udGFpbmVyLCAucHJvbXB0LWlucHV0LCAuaW5wdXQtZ3JvdXAgewogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBNb2JpbGUgaGVybyBjb250ZW50ICovCiAgICAuaGVyby1jb250ZW50LCAuaGVyby10ZXh0IHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDIwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogTW9iaWxlIGZlYXR1cmVzIGdyaWQgLSBzaW5nbGUgY29sdW1uICovCiAgICAuZmVhdHVyZXMtZ3JpZCB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5mZWF0dXJlLWNhcmQgewogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAzNTBweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBpbnB1dCBjb250YWluZXJzICovCiAgICAuaW5wdXQtb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5pbnB1dC1pbm5lci1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgMTBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAucHJvbXB0LWlucHV0IHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogTW9iaWxlIHN1Z2dlc3RlZCBhcHBzICovCiAgICAuc3VnZ2VzdGVkLWFwcHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAhaW1wb3J0YW50OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZS1zcGVjaWZpYyBiYWNrZ3JvdW5kIGhlaWdodCByZWR1Y3Rpb24gKi8KICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKICAgIGJvZHkucGFnZS1pZC01OTM2MyAjbGFuZGluZ1NlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IC0yMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDIwcHggIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgMTcwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIEZ1cnRoZXIgcmVkdWN0aW9uIGZvciB2ZXJ5IHNtYWxsIHNjcmVlbnMgKi8KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgewogICAgICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKICAgICAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDE2MHB4KSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICAvKiBFeHRyYSBzbWFsbCBzY3JlZW5zIC0gaW1wcm92ZWQgaGVybyByZXNwb25zaXZlbmVzcyAqLwogICAgLmhlcm8tc2VjdGlvbiBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxLjZyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tc2VjdGlvbiBwIHsKICAgICAgICBmb250LXNpemU6IDAuODVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMS41cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogOHB4IDAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDhweCAwICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1pY29uIGltZyB7CiAgICAgICAgd2lkdGg6IDJyZW0gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLnBvd2VyZWQtcGlsbCB7CiAgICAgICAgZm9udC1zaXplOiAwLjhyZW0gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogOHB4IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiBmaXQtY29udGVudCAhaW1wb3J0YW50OwogICAgICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogRXh0cmEgc21hbGwgc2NyZWVucyAtIGltcHJvdmVkIHRlc3RpbW9uaWFsIHJlc3BvbnNpdmVuZXNzICovCiAgICAudGVzdGltb25pYWwtY29udGFpbmVyIHsKICAgICAgICBtaW4taGVpZ2h0OiAzMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTsKICAgICAgICBtYXJnaW46IDAgYXV0byAxLjVyZW07CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1uYXYgewogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLW5hdi5wcmV2LWJ0biB7CiAgICAgICAgbGVmdDogNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtbmF2Lm5leHQtYnRuIHsKICAgICAgICByaWdodDogNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtY2FyZCB7CiAgICAgICAgcGFkZGluZzogMXJlbTsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXZhdGFyIHsKICAgICAgICB3aWR0aDogMzVweDsKICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1xdW90ZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXV0aG9yLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWF1dGhvci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXV0aG9yLWNvbXBhbnkgewogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtZG90cyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgIGdhcDogMC41cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtZG90cyAuZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgfQogICAgCiAgICAuZmVhdHVyZXMtZ3JpZCwgLnBvc3NpYmlsaXRpZXMtZ3JpZCwgLmNhcGFiaWxpdGllcy1ncmlkIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAhaW1wb3J0YW50OwogICAgICAgIGdhcDogMXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBBZGp1c3QgdG9wIG1hcmdpbiBmb3IgdmVyeSBzbWFsbCBzY3JlZW5zIC0gaW5jcmVhc2VkIGV4dGVuc2lvbiAqLwogICAgYm9keSB7CiAgICAgICAgbWFyZ2luLXRvcDogNTBweDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNjAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNjAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyA2MDBweCkgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA0MDBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBFeHRlbmQgYmFja2dyb3VuZCBwYXR0ZXJuIGRvd24gZnVydGhlciBvbiBzbWFsbCBzY3JlZW5zICovCiAgICAjbGFuZGluZ1NlY3Rpb246OmJlZm9yZSB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MDBweCkgIWltcG9ydGFudDsKICAgIH0KfQoKYm9keSB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgbWluLWhlaWdodDogMTAwdmg7CiAgICBtYXJnaW46IDA7CiAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlLCBjb2xvciAwLjNzIGVhc2U7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KCi8qIEhpZGUgbWFpbiBwYWdlIHNjcm9sbGJhciB3aGVuIGFwcCBpcyBhY3RpdmUgKi8KYm9keS5hcHAtYWN0aXZlIHsKICAgIC8qIG92ZXJmbG93OiBoaWRkZW47CiAgICBoZWlnaHQ6IDEwMHZoOyAqLwogICAgbWluLWhlaWdodDogMTAwdmg7Cn0KCi8qIE1vYmlsZSBib2R5IGhhbmRsaW5nICovCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgewogICAgYm9keS5hcHAtYWN0aXZlIHsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9Cn0KCi8qIERlc2t0b3Agc2NyZWVucyBhYm92ZSA3NjhweCAtIHJlbW92ZSB3aGl0ZSBzcGFjZXMgKi8KQG1lZGlhIChtaW4td2lkdGg6IDc2OXB4KSB7CiAgICAuaGVhZGVyIHsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpOwogICAgICAgIG1hcmdpbi1yaWdodDogY2FsYygtNTB2dyArIDUwJSk7CiAgICAgICAgcGFkZGluZzogMXJlbSAwOwogICAgfQogICAgCiAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAKICAgIC5oZWFkZXItZmxleCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQp9CgouY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5oZWFkZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpOwogICAgcGFkZGluZzogMXJlbSAwOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIHotaW5kZXg6IDEwMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UsIG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgZGlzcGxheTogbm9uZTsgLyogSGlkZGVuIGJ5IGRlZmF1bHQgb24gbGFuZGluZyBwYWdlICovCiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW46IDA7Cn0KCi8qIFNob3cgaGVhZGVyIG9ubHkgd2hlbiBjb252ZXJzYXRpb24gaGFzIHN0YXJ0ZWQgKi8KYm9keS5hcHAtYWN0aXZlIC5oZWFkZXIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgovKiBGdWxsLXdpZHRoIGhlYWRlciBmaXggb25seSB3aGVuIGFwcCBpcyBhY3RpdmUgKGR1cmluZyBnZW5lcmF0aW9uKSAtIGFib3ZlIDEwMjRweCAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTAyNXB4KSB7CiAgICBib2R5LmFwcC1hY3RpdmUgLmhlYWRlciwKICAgIGJvZHkuYXBwLWFjdGl2ZSAjd3JhcHBlciAuaGVhZGVyLAogICAgYm9keS5hcHAtYWN0aXZlIC5mdXNpb24td3JhcHBlciAuaGVhZGVyLAogICAgYm9keS5hcHAtYWN0aXZlIC5mdXNpb24tcGFnZS13cmFwcGVyIC5oZWFkZXIsCiAgICBib2R5LmFwcC1hY3RpdmUgLmZ1c2lvbi1wYWdlLXdyYXBwZXItcm93IC5oZWFkZXIgewogICAgICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygtNTB2dyArIDUwJSkgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLXRvcDogY2FsYygxcmVtICsgNTBweCkgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tdG9wOiAtNTBweCAhaW1wb3J0YW50OwogICAgfQp9CgouaGVhZGVyLWZsZXggewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmxvZ28tZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKfQoKLmxvZ28tZ3JvdXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoKLmxvZ28taWNvbiB7CiAgICBmb250LXNpemU6IDEuNXJlbTsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwogICAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgoubG9nby10ZXh0IHsKICAgIGZvbnQtc2l6ZTogMS41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5sb2dvLXRleHQgLmJvbGQgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5oZWFkZXItcmlnaHQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDIwcHg7Cn0KCi5naXRodWItYnRuIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBmb250LXNpemU6IDAuOTVyZW07Cn0KCi5kb3dubG9hZC1idG4gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzRhOTBlMiwgIzM1N2FiZCk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBjb2xvcjogd2hpdGU7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgbWluLXdpZHRoOiA0MHB4OwogICAgaGVpZ2h0OiAzNnB4OwogICAgei1pbmRleDogOTk5OTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmRvd25sb2FkLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMzU3YWJkLCAjMmE2YWEwKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi5kb3dubG9hZC1idG46YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0biB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDBhZDlmLCAjMDBkNGFhKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICBtaW4td2lkdGg6IDQwcHg7CiAgICBoZWlnaHQ6IDM2cHg7CiAgICB6LWluZGV4OiA5OTk5OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA5NDdmLCAjMDBiMzk0KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAxNzMsIDE1OSwgMC4zKTsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgovKiBTZXQgVG9rZW4gYnV0dG9uIHN0eWxlZCB0byBtYXRjaCBEZXBsb3kgdG8gTmV0bGlmeSAqLwouc2V0LXRva2VuLWJ0biB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDBhZDlmLCAjMDBkNGFhKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICBtaW4td2lkdGg6IDQwcHg7CiAgICBoZWlnaHQ6IDM2cHg7CiAgICB6LWluZGV4OiA5OTk5OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnNldC10b2tlbi1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwOTQ3ZiwgIzAwYjM5NCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMTczLCAxNTksIDAuMyk7Cn0KCi5zZXQtdG9rZW4tYnRuOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KCi5kb3dubG9hZC1pY29uIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5wb3dlcmVkLXBpbGwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAycmVtIGF1dG87CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSwgY29sb3IgMC4zcyBlYXNlOwogICAgLyogTWVyZ2VkIGRhcmsgdGhlbWUgc3R5bGVzICovCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tYWluLWhlYWRpbmcgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAyLjdyZW07CiAgICBtYXJnaW4tYm90dG9tOiAyLjVyZW07CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlOwp9CgovKiBUeXBpbmcgYW5pbWF0aW9uIHN0eWxlcyAqLwojYW5pbWF0ZWQtd29yZCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKI2FuaW1hdGVkLXdvcmQ6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICd8JzsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGFuaW1hdGlvbjogYmxpbmsgMXMgaW5maW5pdGU7CiAgICBtYXJnaW4tbGVmdDogMnB4Owp9CgpAa2V5ZnJhbWVzIGJsaW5rIHsKICAgIDAlLCA1MCUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CiAgICA1MSUsIDEwMCUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICB9Cn0KCkBrZXlmcmFtZXMgdHlwZXdyaXRlciB7CiAgICBmcm9tIHsKICAgICAgICB3aWR0aDogMDsKICAgIH0KICAgIHRvIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KfQoKLm1haW4taGVhZGluZyAuYmx1ZSB7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7Cn0KCi8qIExhbmRpbmcgcGFnZSBpbnB1dCBzdHlsaW5nIC0gRXh0ZW5kZWQgdG9wIGFuZCBib3R0b20gY292ZXJhZ2UgKi8KI2xhbmRpbmdTZWN0aW9uIHsKICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyAyMzBweCkgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwYWRkaW5nOiA4MHB4IDAgMTUwcHggMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwdncgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogLTgwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC0xNTBweCAhaW1wb3J0YW50Owp9CgovKiBBbmltYXRlZCBzdGFycnkgYmFja2dyb3VuZCAqLwojbGFuZGluZ1NlY3Rpb246OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpOwogICAgYmFja2dyb3VuZC1pbWFnZTogCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDJweCAycHggYXQgMjBweCAzMHB4LCAjNGE5MGUyLCB0cmFuc3BhcmVudCksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDJweCAycHggYXQgNDBweCA3MHB4LCByZ2JhKDc0LCAxNDQsIDIyNiwgMC44KSwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgxcHggMXB4IGF0IDkwcHggNDBweCwgIzZiNzNmZiwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgxcHggMXB4IGF0IDEzMHB4IDgwcHgsIHJnYmEoMTA3LCAxMTUsIDI1NSwgMC42KSwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgycHggMnB4IGF0IDE2MHB4IDMwcHgsICM0YTkwZTIsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4IDEwMHB4OwogICAgYW5pbWF0aW9uOiB0d2lua2xlIDNzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTsKICAgIHotaW5kZXg6IDA7Cn0KCkBrZXlmcmFtZXMgdHdpbmtsZSB7CiAgICAwJSB7IG9wYWNpdHk6IDAuMzsgfQogICAgMTAwJSB7IG9wYWNpdHk6IDAuODsgfQp9CgovKiBIZXJvIFNlY3Rpb24gKi8KLmhlcm8tc2VjdGlvbiB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcmVtIDAgMHJlbTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KLmluc2lkZS1oZXJvLXNlY3Rpb257CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgouaGVyby1pY29uIHsKICAgIGZvbnQtc2l6ZTogM3JlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKICAgIGNvbG9yOiAjNGE5MGUyOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYW5pbWF0aW9uOiBmbG9hdCAzcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLmhlcm8taWNvbiBpbWcgewogICAgd2lkdGg6IDRyZW07CiAgICBoZWlnaHQ6IDIuNXJlbTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBkaXNwbGF5OiBibG9jazsKfQoKQGtleWZyYW1lcyBmbG9hdCB7CiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CiAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOyB9Cn0KCi5oZXJvLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMy41cmVtOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHRleHQtc2hhZG93OiAwIDAgMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKfQoKLmhlcm8tc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjNyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmhlcm8tZGVzY3JpcHRpb24gewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogM3JlbTsKICAgIG1heC13aWR0aDogNTAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLyogVXBkYXRlIGlucHV0IHNlY3Rpb24gZm9yIGRhcmsgdGhlbWUgKi8KI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1vdXRlci1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICAvKiBNZXJnZWQgc3R5bGVzICovCiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtYXJnaW4tYm90dG9tOiAycmVtOwogICAgbWF4LXdpZHRoOiA3MDBweDsKfQoKI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1pbm5lci1jb250YWluZXIudmVydGljYWwgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBwYWRkaW5nOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCiNsYW5kaW5nU2VjdGlvbiAucHJvbXB0LWlucHV0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4IDEycHggMCAwOwogICAgcGFkZGluZzogMXJlbSAxLjVyZW07CiAgICBmb250LXNpemU6IDFyZW07CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHJlc2l6ZTogbm9uZTsKICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1jb250cm9scy1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiAwIDAgMTJweCAxMnB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgbWluLWhlaWdodDogNTBweDsKICAgIGdhcDogMTJweDsKICAgIC8qIE1lcmdlZC91cGRhdGVkIHN0eWxlcyAqLwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgojbGFuZGluZ1NlY3Rpb24gLnByb21wdC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKfQoKLmdlbmVyYXRlLWNvZGUtYnRuIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM0YTkwZTIsICM2YjczZmYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMC43NXJlbSAxLjVyZW0gIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC45cmVtICFpbXBvcnRhbnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50ICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IDE1MHB4ICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlICFpbXBvcnRhbnQ7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLmdlbmVyYXRlLWNvZGUtYnRuOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC40KSAhaW1wb3J0YW50Owp9CgovKiBGZWF0dXJlcyBHcmlkICovCi5mZWF0dXJlcy1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgIGdhcDogMnJlbTsKICAgIG1hcmdpbjogNHJlbSAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLmZlYXR1cmUtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIHBhZGRpbmc6IDJyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLmZlYXR1cmUtY2FyZDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogLTEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuNXMgZWFzZTsKfQoKLmZlYXR1cmUtY2FyZDpob3Zlcjo6YmVmb3JlIHsKICAgIGxlZnQ6IDEwMCU7Cn0KCi5mZWF0dXJlLWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjIpOwp9CgouZmVhdHVyZS1pY29uIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgY29sb3I6ICM0YTkwZTI7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZmVhdHVyZS1pY29uIGltZyB7CiAgICB3aWR0aDogMi41cmVtOwogICAgaGVpZ2h0OiAyLjVyZW07CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEFnZ3Jlc3NpdmUgV29yZFByZXNzIHdoaXRlIHNwYWNlIHJlbW92YWwgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5oZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuaGVhZGVyLWZsZXgsCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGFpbmVyIHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45KSAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSByZW1vdmUgYW55IFdvcmRQcmVzcyBjb250YWluZXIgY29uc3RyYWludHMgKi8KYm9keS5wYWdlLWlkLTU5MzYzICNtYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLmxheW91dC1ib3hlZC1tb2RlICNtYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLmxheW91dC13aWRlLW1vZGUgI21haW4sCmJvZHkucGFnZS1pZC01OTM2MyAubGF5b3V0LXdpZGUtbW9kZSAjd3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC53cmFwcGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmNvbnRlbnQsCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50IHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBhbnkgV29yZFByZXNzIHRoZW1lIHBhZGRpbmcvbWFyZ2lucyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgKiB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7Cn0KCi8qIFRhcmdldCBzcGVjaWZpYyBXb3JkUHJlc3MgdGhlbWUgZWxlbWVudHMgY2F1c2luZyB3aGl0ZSBzcGFjZXMgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24taGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZ1c2lvbi1oZWFkZXItd3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tc2Vjb25kYXJ5LWhlYWRlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tbWFpbi1oZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuYXZhZGEtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmhlYWRlci13cmFwcGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLm1haW4taGVhZGVyIHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOSkgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGFueSBXb3JkUHJlc3MgdGhlbWUgY29udGFpbmVyIHBhZGRpbmcgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZ1c2lvbi1yb3csCmJvZHkucGFnZS1pZC01OTM2MyAuZnVzaW9uLWNvbHVtbiwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tYnVpbGRlci1yb3csCmJvZHkucGFnZS1pZC01OTM2MyAuZnVzaW9uLWJ1aWxkZXItY29sdW1uIHsKICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBoZWFkZXIgdG8gYnJlYWsgb3V0IG9mIGFueSBjb250YWluZXIgY29uc3RyYWludHMgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICByaWdodDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAuaGVhZGVyICosCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIgKiB7CiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLyogT3ZlcnJpZGUgV29yZFByZXNzIGJhY2tncm91bmQgY29sb3IgZm9yIG1haW4gZWxlbWVudHMgKi8KI21haW4sIAoubGF5b3V0LWJveGVkLW1vZGUgI21haW4sIAoubGF5b3V0LWJveGVkLW1vZGUuYXZhZGEtZm9vdGVyLWZ4LXN0aWNreSAuYWJvdmUtZm9vdGVyLXdyYXBwZXIsIAoubGF5b3V0LWJveGVkLW1vZGUuYXZhZGEtZm9vdGVyLWZ4LXN0aWNreS13aXRoLXBhcmFsbGF4LWJnLWltYWdlIC5hYm92ZS1mb290ZXItd3JhcHBlciwgCi5sYXlvdXQtd2lkZS1tb2RlICNtYWluLCAKLmxheW91dC13aWRlLW1vZGUgI3dyYXBwZXIsIApib2R5LCAKaHRtbCwgCmh0bWwgYm9keS5jdXN0b20tYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBXb3JkUHJlc3MgdGVtcGxhdGUgZWxlbWVudHMgLSByZW1vdmUgdW53YW50ZWQgbGluZXMgYW5kIGJhY2tncm91bmRzICovCmJvZHkucGFnZS1pZC01OTM2MyAqIHsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgd2hpdGUgbGluZSBhdCB0b3Agb2YgV29yZFByZXNzIGludGVyZmFjZSAqLwpib2R5LnBhZ2UtaWQtNTkzNjM6OmJlZm9yZSwKYm9keS5wYWdlLWlkLTU5MzYzOjphZnRlciwKYm9keS5wYWdlLWlkLTU5MzYzICo6OmJlZm9yZSwKYm9keS5wYWdlLWlkLTU5MzYzICo6OmFmdGVyIHsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGNvbnRlbnQ6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIHRvcCBib3JkZXJzIGFuZCBsaW5lcyBmcm9tIFdvcmRQcmVzcyBlbGVtZW50cyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgYm9keSwKYm9keS5wYWdlLWlkLTU5MzYzIGh0bWwsCmJvZHkucGFnZS1pZC01OTM2MyAjcGFnZSwKYm9keS5wYWdlLWlkLTU5MzYzIC5zaXRlLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtbWFpbiwKYm9keS5wYWdlLWlkLTU5MzYzIC5zaXRlLWZvb3RlciwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1zaXRlLWJsb2NrcywKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1ibG9jay1ncm91cCwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1jb250YWluZXIgewogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWxlZnQ6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1yaWdodDogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBzcGVjaWZpYyBib3JkZXJzIGZyb20gV29yZFByZXNzIGVsZW1lbnRzICovCmJvZHkucGFnZS1pZC01OTM2MyBkaXYsCmJvZHkucGFnZS1pZC01OTM2MyBzZWN0aW9uLApib2R5LnBhZ2UtaWQtNTkzNjMgYXJ0aWNsZSwKYm9keS5wYWdlLWlkLTU5MzYzIG1haW4sCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyBmb290ZXIsCmJvZHkucGFnZS1pZC01OTM2MyBuYXYsCmJvZHkucGFnZS1pZC01OTM2MyBhc2lkZSB7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1ib3R0b206IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1sZWZ0OiBub25lICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmlnaHQ6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGJhY2tncm91bmRzIGZyb20gV29yZFByZXNzIHRlbXBsYXRlIGVsZW1lbnRzICovCmJvZHkucGFnZS1pZC01OTM2MyAud3AtY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWJsb2NrLWdyb3VwLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWJsb2NrLWNvbHVtbiwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1ibG9jay1jb2x1bW5zLApib2R5LnBhZ2UtaWQtNTkzNjMgLmVudHJ5LWNvbnRlbnQsCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLmNvbnRlbnQtYXJlYSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIFdvcmRQcmVzcyBhZG1pbiBiYXIgYW5kIHRvcCBlbGVtZW50cyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgI3dwYWRtaW5iYXIsCmJvZHkucGFnZS1pZC01OTM2MyAuYWRtaW4tYmFyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWFkbWluLWJhciwKYm9keS5wYWdlLWlkLTU5MzYzIFtpZCo9ImFkbWluIl0sCmJvZHkucGFnZS1pZC01OTM2MyBbY2xhc3MqPSJhZG1pbiJdIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgcmVtb3ZlIGFueSB0b3AtbGV2ZWwgYm9yZGVycyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgPiAqIHsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgbW9iaWxlIGZvb3RlciBiYWNrZ3JvdW5kIGZpeGVzIC0gaW5jcmVhc2VkICovCmJvZHkucGFnZS1pZC01OTM2MyB7CiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgODAwcHgpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAjbGFuZGluZ1NlY3Rpb24gewogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDgwMHB4KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Owp9Cgpib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgewogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3MgbW9iaWxlIGZvb3RlciBiYWNrZ3JvdW5kIGV4dGVuc2lvbiAtIGluY3JlYXNlZCAqLwpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgIGJvZHkucGFnZS1pZC01OTM2MyB7CiAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgMjAwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uOjpiZWZvcmUgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlICsgMjAwcHgpICFpbXBvcnRhbnQ7CiAgICB9Cn0KCi8qIEFkZGl0aW9uYWwgV29yZFByZXNzIG92ZXJyaWRlcyBmb3IgZmVhdHVyZSBjYXJkcyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmZlYXR1cmUtY2FyZCBoMywKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LWNhcmQgaDMsCmJvZHkucGFnZS1pZC01OTM2MyAucG9zc2liaWxpdHktY2FyZCBoMyB7CiAgICBjb2xvcjogIzRhOTBlMiAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgaGVhZGluZyBjb2xvciBmaXhlcyAqLwovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgaGVhZGluZyBjb2xvciBmaXhlcyAtIG9ubHkgZm9yIG91ciBhcHAgY29udGVudCAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgxLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgyLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgzLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg0LApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg1LApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg2LApib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgaDEsCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciBoMiwKYm9keS5wYWdlLWlkLTU5MzYzIC5hcHAtY29udGFpbmVyIGgzLApib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgaDQsCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciBoNSwKYm9keS5wYWdlLWlkLTU5MzYzIC5hcHAtY29udGFpbmVyIGg2IHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIFNwZWNpZmljIFdvcmRQcmVzcyBvdmVycmlkZXMgZm9yIGZlYXR1cmUgdGl0bGVzICovCmJvZHkucGFnZS1pZC01OTM2MyAuZmVhdHVyZS10aXRsZSwKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LXRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLnBvc3NpYmlsaXR5LXRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZlYXR1cmUtY2FyZCBoMywKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LWNhcmQgaDMsCmJvZHkucGFnZS1pZC01OTM2MyAucG9zc2liaWxpdHktY2FyZCBoMyB7CiAgICBjb2xvcjogIzRhOTBlMiAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgZmVhdHVyZSB0aXRsZXMgYXJlIGJsdWUgaW4gV29yZFByZXNzICovCi5mZWF0dXJlLXRpdGxlIHsKICAgIGNvbG9yOiAjNGE5MGUyICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7Cn0KCi5mZWF0dXJlLWRlc2NyaXB0aW9uIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBsaW5lLWhlaWdodDogMS41Owp9CgovKiBGdXNpb24gQnVpbGRlciBhbmQgV29yZFByZXNzIGgxIGNvbG9yIG92ZXJyaWRlICovCmZ1c2lvbi1tb2RhbCBoMSwgLmZ1c2lvbi1wb3N0LWNvbnRlbnQgaDEsIC5mdXNpb24tdGItZm9vdGVyIGgxLCAuZnVzaW9uLXRiLXBhZ2UtdGl0bGUtYmFyIGgxLCAuZnVzaW9uLXdpZGdldC1hcmVhIGgxLCAucG9zdC1jb250ZW50IGgxLCAuc2VhcmNoLXBhZ2Utc2VhcmNoLWZvcm0gaDEsIC50aXRsZSBoMSwgaDEgewogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKfQoKLyogRnVzaW9uIEJ1aWxkZXIgYW5kIFdvcmRQcmVzcyBoMyBjb2xvciBvdmVycmlkZSAqLwouZnVzaW9uLWF1dGhvciAuZnVzaW9uLWF1dGhvci10aXRsZSwgLmZ1c2lvbi1tb2RhbCAubW9kYWwtdGl0bGUsIC5mdXNpb24td2lkZ2V0LWFyZWEgaDMsIC5wb3N0LWNvbnRlbnQgaDMsIC5wcm9qZWN0LWNvbnRlbnQgaDMsIC5zaWRlYmFyIC53aWRnZXQgaDMsIC5tYWluLWZsZXggLnNsaWRlLWNvbnRlbnQgaDMsIGgzIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi5xdWljay1hcHBzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBnYXA6IDFyZW07CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1hcmdpbi10b3A6IDNyZW07CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgoucXVpY2stYXBwLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTsKICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTsKfQoKLnF1aWNrLWFwcC1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMik7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjQpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Cn0KCi8qIEhvdyBJdCBXb3JrcyBTZWN0aW9uICovCi5ob3ctaXQtd29ya3Mtc2VjdGlvbiB7CiAgICBtYXJnaW46IDZyZW0gYXV0byA0cmVtICFpbXBvcnRhbnQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwMHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwIDJyZW0gIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9CgouaG93LWl0LXdvcmtzLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLmhvdy1pdC13b3Jrcy1zdWJ0aXRsZSB7CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBtYXJnaW4tYm90dG9tOiA0cmVtOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgoudGV4dC13aGl0ZXsKICAgIGNvbG9yOiB3aGl0ZTsKfQoKLnN0ZXBzLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAycmVtOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogMCAxcmVtOwogICAgbWF4LXdpZHRoOiA5MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Cgouc3RlcC1jYXJkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgcGFkZGluZzogMnJlbSAxLjVyZW07CiAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgZmxleDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5zdGVwLWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi5zdGVwLW51bWJlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xNXB4OwogICAgbGVmdDogLTVweDsKICAgIGJhY2tncm91bmQ6ICMyQTQxRTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICB3aWR0aDogMzVweDsKICAgIGhlaWdodDogMzVweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwp9Cgouc3RlcC1pY29uIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgbWFyZ2luOiAxcmVtIDA7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLnN0ZXAtaWNvbiBpbWcgewogICAgd2lkdGg6IDIuNXJlbTsKICAgIGhlaWdodDogMi41cmVtOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87Cn0KCi5zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4zcmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLnN0ZXAtZGVzY3JpcHRpb24gewogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KCi5zdGVwLWFycm93IHsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZmxleDogMCAwIGF1dG87Cn0KCi50cnktbm93LWJ0biB7CiAgICBiYWNrZ3JvdW5kOiAjMkE0MUU3OwogICAgY29sb3I6IHdoaXRlOwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMXJlbSAyLjVyZW07CiAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgZm9udC1zaXplOiAxcmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoNDIsIDY1LCAyMzEsIDAuMyk7Cn0KCi50cnktbm93LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjMWUyZWIzOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDQyLCA2NSwgMjMxLCAwLjQpOwp9CgovKiBFbmRsZXNzIFBvc3NpYmlsaXRpZXMgU2VjdGlvbiAqLwouZW5kbGVzcy1wb3NzaWJpbGl0aWVzLXNlY3Rpb24gewogICAgbWFyZ2luOiA2cmVtIGF1dG8gNHJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgcGFkZGluZzogMCAycmVtOwp9CgouZW5kbGVzcy10aXRsZSB7CiAgICBmb250LXNpemU6IDIuNXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIG1hcmdpbi1ib3R0b206IDFyZW07Cn0KCi5lbmRsZXNzLXN1YnRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbi1ib3R0b206IDRyZW07CiAgICBtYXgtd2lkdGg6IDcwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi5wb3NzaWJpbGl0aWVzLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjQwcHgsIDFmcikpOwogICAgZ2FwOiAxcmVtOwogICAgbWFyZ2luLWJvdHRvbTogNXJlbTsKfQoKLnBvc3NpYmlsaXR5LWNhcmQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoucG9zc2liaWxpdHktY2FyZDpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjIpOwp9CgoucG9zc2liaWxpdHktaWNvbiB7CiAgICB3aWR0aDogNDhweDsKICAgIGhlaWdodDogNDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMS41cmVtOwogICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMik7Cn0KCi5wb3NzaWJpbGl0eS1pY29uIGltZyB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLnBvc3NpYmlsaXR5LXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMC44cmVtOwp9CgoucG9zc2liaWxpdHktZGVzY3JpcHRpb24gewogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KCi5wb3B1bGFyLXByb21wdHMtc2VjdGlvbiB7CiAgICBtYXJnaW4tdG9wOiA0cmVtOwp9CgoucG9wdWxhci1wcm9tcHRzLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS44cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMnJlbTsKfQoKLnBvcHVsYXItcHJvbXB0cy1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMyMHB4LCAxZnIpKTsKICAgIGdhcDogMXJlbTsKICAgIG1heC13aWR0aDogMTAwMHB4OwogICAgbWFyZ2luOiAwIGF1dG87Cn0KCi5wb3B1bGFyLXByb21wdC1idG4gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBwYWRkaW5nOiAxcmVtIDAuNXJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoucG9wdWxhci1wcm9tcHQtYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwp9CgovKiBTZWUgSXQgSW4gQWN0aW9uIFNlY3Rpb24gKi8KLnNlZS1pdC1pbi1hY3Rpb24tc2VjdGlvbiB7CiAgICBtYXJnaW46IDZyZW0gYXV0byA0cmVtOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICBwYWRkaW5nOiAwIDJyZW07Cn0KCi5hY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAyLjVyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwp9CgouYWN0aW9uLXN1YnRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbi1ib3R0b206IDNyZW07CiAgICBtYXgtd2lkdGg6IDcwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi5kZW1vLXRhYnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIGdhcDogMDsKICAgIG1hcmdpbi1ib3R0b206IDNyZW07CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIHBhZGRpbmc6IDRweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIG1heC13aWR0aDogMjUwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmRlbW8tdGFiIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgd2lkdGg6IDEwMCU7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDAuNXJlbTsKICAgIGZsZXg6IDE7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTk1cHg7Cn0KCi5kZW1vLXRhYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLmRlbW8tdGFiLmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiAjMkE0MUU3OwogICAgY29sb3I6IHdoaXRlOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoNDIsIDY1LCAyMzEsIDAuMyk7Cn0KCi50YWItaWNvbiB7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoudGFiLWljb24gaW1nIHsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoudGFiLXRleHQgewogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLmRlbW8tY29udGVudCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4taGVpZ2h0OiA2MDBweDsKfQoKLmRlbW8tcGFuZSB7CiAgICBkaXNwbGF5OiBub25lOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOwp9CgouZGVtby1wYW5lLmFjdGl2ZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG9wYWNpdHk6IDE7Cn0KCi5kZW1vLXByb21wdCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIHBhZGRpbmc6IDEuMnJlbSAxLjVyZW07CiAgICBtYXJnaW4tYm90dG9tOiAycmVtOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDFyZW07CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi5wcm9tcHQtaWNvbiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDAuNXJlbTsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwp9CgouZGVtby1wcm9tcHQgc3BhbiB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZm9udC1zaXplOiAxcmVtOwp9CgouZGVtby1jb2RlLWNvbnRhaW5lciB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwp9CgouY29kZS1oZWFkZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgcGFkZGluZzogMXJlbSAxLjVyZW07CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLmNvZGUtZG90cyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAwLjVyZW07Cn0KCi5kb3QgewogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7Cn0KCi5kb3QucmVkIHsKICAgIGJhY2tncm91bmQ6ICNmZjVmNTY7Cn0KCi5kb3QueWVsbG93IHsKICAgIGJhY2tncm91bmQ6ICNmZmJkMmU7Cn0KCi5kb3QuZ3JlZW4gewogICAgYmFja2dyb3VuZDogIzI3Y2EzZjsKfQoKLmNvZGUtdGl0bGUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5jb3B5LWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgcGFkZGluZzogMC40cmVtIDAuOHJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBmb250LXNpemU6IDAuODVyZW07CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgouY29weS1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5jb2RlLWltYWdlLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nOiAxcmVtOwogICAgYmFja2dyb3VuZDogIzFhMWExYTsKfQoKLmNvZGUtaW1hZ2UgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi8qIE1vYmlsZSBVSSBEZW1vIFN0eWxlcyAqLwouY29kZS1wcmV2aWV3IHsKICAgIHBhZGRpbmc6IDJyZW07CiAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDQwMHB4Owp9CgoubW9iaWxlLW1vY2t1cCB7CiAgICBiYWNrZ3JvdW5kOiAjMmQyZDJkOwogICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIHBhZGRpbmc6IDJyZW07CiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5wcm9maWxlLWNhcmQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBwYWRkaW5nOiAycmVtOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgd2lkdGg6IDI1MHB4Owp9CgoucHJvZmlsZS1hdmF0YXIgewogICAgd2lkdGg6IDgwcHg7CiAgICBoZWlnaHQ6IDgwcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDJyZW07CiAgICBtYXJnaW46IDAgYXV0byAxcmVtOwp9CgoucHJvZmlsZS1jYXJkIGgzIHsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwp9CgoucHJvZmlsZS1jYXJkIHAgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwp9CgoucHJvZmlsZS1idG4gewogICAgYmFja2dyb3VuZDogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiAyNXB4OwogICAgcGFkZGluZzogMC44cmVtIDJyZW07CiAgICBjb2xvcjogd2hpdGU7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLnByb2ZpbGUtYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMzYTdiYzg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Cn0KCi8qIE1vcmUgQ2FwYWJpbGl0aWVzIFNlY3Rpb24gKi8KLm1vcmUtY2FwYWJpbGl0aWVzLXNlY3Rpb24gewogICAgbWFyZ2luOiA2cmVtIGF1dG8gNHJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgcGFkZGluZzogNHJlbSAycmVtOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAxMDAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7Cn0KLmZsZXh7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxcmVtOwp9CgoubW9yZS10aXRsZSB7CiAgICBmb250LXNpemU6IDNyZW07CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDFyZW07Cn0KCi5tb3JlLXN1YnRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbi1ib3R0b206IDRyZW07CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi5jYXBhYmlsaXRpZXMtZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsKICAgIGdhcDogMnJlbTsKICAgIG1hcmdpbi10b3A6IDJyZW07Cn0KCi5jYXBhYmlsaXR5LWNhcmQgewogICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjgpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIHBhZGRpbmc6IDIuNXJlbSAycmVtOwogICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouY2FwYWJpbGl0eS1jYXJkOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpIDEwMCUpOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKfQoKLmNhcGFiaWxpdHktY2FyZDpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICBib3gtc2hhZG93OiAwIDIwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5jYXBhYmlsaXR5LWNhcmQ6aG92ZXI6OmJlZm9yZSB7CiAgICBvcGFjaXR5OiAxOwp9CgouY2FwYWJpbGl0eS1pY29uIHsKICAgIHdpZHRoOiA2NHB4OwogICAgaGVpZ2h0OiA2NHB4OwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDEuOHJlbTsKICAgIG1hcmdpbjogMCBhdXRvIDEuNXJlbTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi53ZWItaWNvbiB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKfQoKLndlYi1pY29uIGltZyB7CiAgICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDYwJSAhaW1wb3J0YW50Owp9CgoucHl0aG9uLWljb24gewogICAgYmFja2dyb3VuZDogd2hpdGU7Cn0KCi5kYXRhLWljb24gewogICAgYmFja2dyb3VuZDogd2hpdGU7Cn0KCi5hcGktaWNvbiB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKfQoKLm1vYmlsZS1pY29uIHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwp9CgouZGV2b3BzLWljb24gewogICAgYmFja2dyb3VuZDogd2hpdGU7Cn0KCi5jYXBhYmlsaXR5LWljb24gaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKfQoKLmNhcGFiaWxpdHktdGl0bGUgewogICAgZm9udC1zaXplOiAxLjNyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLmNhcGFiaWxpdHktZGVzY3JpcHRpb24gewogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgovKiBHcmFkaWVudCBUZXh0ICovCi5ncmFkaWVudC10ZXh0IHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCggNDVkZWcsICNmZjhhODAsICM4MGRlZWEsICM4MWQ0ZmEsICNhNWQ2YTcsICNmZmY1OWQsICNlMWJlZTcsICNiMmRmZGIgKTsKICAgIGJhY2tncm91bmQtc2l6ZTogNDAwJSA0MDAlOyBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OyBhbmltYXRpb246IGdyYWRpZW50RmxvdyA0cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KQGtleWZyYW1lcyBncmFkaWVudEZsb3cgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsgfSAyNSUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTsgfSA1MCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDEwMCU7IH0gNzUlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMTAwJTsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOyB9IH0KCi8qIEZvb3RlciAqLwouZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKTsKICAgIHBhZGRpbmc6IDAuNnJlbSAycmVtOwogICAgZm9udC1zaXplOiAwLjg1cmVtOwogICAgbWFyZ2luLXRvcDogYXV0bzsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgb3BhY2l0eTogMTsKfQouZm9vdGVyLWxlZnQgYSB7IGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogNTAwOyB9Ci5mb290ZXItcmlnaHQgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEycHg7IH0KLmZvb3Rlci1pY29uIHsgZm9udC1zaXplOiAxLjNyZW07IGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2U7IH0KLmZvb3Rlci1pY29uOmhvdmVyIHsgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOyB9CgovKiAtLS0gQ0hBVCAmIEFQUCBJTlRFUkZBQ0UgU1RZTEVTIC0tLSAqLwoKLyogSW5pdGlhbGx5IGhpZGUgY2hhdCBpbnRlcmZhY2UgKi8KI2NoYXRJbnRlcmZhY2UgewogICAgZGlzcGxheTogbm9uZTsKfQoKLyogQ2hhdCBpbnRlcmZhY2UgY29udGFpbmVyICovCi5jaGF0LWludGVyZmFjZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGhlaWdodDogMTAwJTsgLyogQ2hhbmdlZCBmcm9tIGNhbGMoKSB0byB0YWtlIGZ1bGwgaGVpZ2h0IG9mIHBhcmVudCAqLwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHBhZGRpbmc6IDA7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jb2xvcik7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmNoYXQtbWVzc2FnZXMgewogICAgZmxleDogMTsKICAgIHBhZGRpbmc6IDI0cHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDE4cHg7CiAgICBtaW4taGVpZ2h0OiAzMDBweDsKICAgIG1heC1oZWlnaHQ6IDYwdmg7Cn0KCi5jaGF0LW1lc3NhZ2UgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIGdhcDogMTJweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5jaGF0LW1lc3NhZ2UudXNlciB7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7Cn0KCi5jaGF0LW1lc3NhZ2UgLmF2YXRhciB7CiAgICBmb250LXNpemU6IDEuN3JlbTsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLyogQ29uc29saWRhdGVkIENoYXQgQnViYmxlIFN0eWxlcyAqLwouY2hhdC1idWJibGUgewogICAgcGFkZGluZzogMTRweCAxOHB4OwogICAgbWFyZ2luOiAxMHB4IDA7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZvbnQtc2l6ZTogMS4wNXJlbTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIG1heC13aWR0aDogOTAlOwp9CgouY2hhdC1idWJibGUudXNlciB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgY29sb3I6IHdoaXRlOwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwp9CgouY2hhdC1idWJibGUudXNlcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAwOwogICAgcmlnaHQ6IC04cHg7CiAgICB3aWR0aDogOHB4OwogICAgaGVpZ2h0OiA4cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDAlIDEwMCUsIDEwMCUgMTAwJSk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKfQoKLyogSW5wdXQgY29udGFpbmVyIGF0IHRoZSBib3R0b20gb2YgdGhlIGNoYXQgdmlldyAqLwouaW5wdXQtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTsKICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgIHotaW5kZXg6IDEwMDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGJveC1zaGFkb3c6IDAgLTJweCAxMHB4IHZhcigtLXNoYWRvdyk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgojY2hhdEludGVyZmFjZSAuaW5wdXQtaW5uZXItY29udGFpbmVyLnZlcnRpY2FsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDE2cHggdmFyKC0tc2hhZG93KTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgZ2FwOiAwOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgojY2hhdEludGVyZmFjZSAuaW5wdXQtY29udHJvbHMtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgbWluLWhlaWdodDogNDZweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogMCAwIDEycHggMTJweDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Cn0KCiNjaGF0SW50ZXJmYWNlIC5zdWJtaXQtYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMzYTgwZDI7Cn0KCi8qIExvYWRpbmcgQm94IFN0eWxlcyAqLwoubG9hZGluZy1ib3ggewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuOTUpIDAlLCByZ2JhKDIwLCAyMCwgMjAsIDAuOTgpIDEwMCUpOwogICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIGJveC1zaGFkb3c6IDAgMTJweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC40KSwgMCAwIDAgMXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOwogICAgd2lkdGg6IDcwJTsKICAgIG1heC13aWR0aDogNDUwcHg7CiAgICBtaW4taGVpZ2h0OiAxNDBweDsKICAgIG1hcmdpbjogMnJlbSBhdXRvOwogICAgcGFkZGluZzogNDBweCAzMHB4IDM1cHggMzBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDk5OTk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpOwogICAgYW5pbWF0aW9uOiBsb2FkaW5nQm94RW50cmFuY2UgMC43cyBlYXNlLW91dCwgbG9hZGluZ0JveFB1bHNlIDNzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLmxvYWRpbmctYm94OjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAtMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSksIHRyYW5zcGFyZW50KTsKICAgIGFuaW1hdGlvbjogbG9hZGluZ1NoaW1tZXIgMnMgaW5maW5pdGU7CiAgICB6LWluZGV4OiAxOwp9CgoubG9hZGluZy1ib3g6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAwOwogICAgbGVmdDogMDsKICAgIGhlaWdodDogM3B4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNGE5MGUyLCAjMzU3YWJkLCAjNGE5MGUyKTsKICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlOwogICAgYW5pbWF0aW9uOiBsb2FkaW5nUHJvZ3Jlc3MgMi41cyBlYXNlLWluLW91dCBpbmZpbml0ZSwgZ3JhZGllbnRNb3ZlIDEuNXMgbGluZWFyIGluZmluaXRlOwogICAgYm9yZGVyLXJhZGl1czogMCAwIDIwcHggMjBweDsKICAgIHotaW5kZXg6IDI7Cn0KCi5sb2FkaW5nLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgwLCAwLCAwLCAwLjk3KSAwJSwgcmdiYSgyMCwgMjAsIDIwLCAwLjk5KSAxMDAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgei1pbmRleDogMTAwMDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxNXB4KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEhpLXRlY2ggbG9hZGluZyBhbmltYXRpb24gKi8KLmhpdGVjaC1sb2FkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDIwMHB4OwogICAgaGVpZ2h0OiAyMDBweDsKICAgIG1hcmdpbjogMjBweCBhdXRvOwp9CgovKiBDb2RlIE1hdHJpeCBFZmZlY3QgKi8KLmNvZGUtbWF0cml4IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tYXRyaXgtbGluZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMnB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdHJhbnNwYXJlbnQgMCUsICMwMGZmNDEgNTAlLCB0cmFuc3BhcmVudCAxMDAlKTsKICAgIGFuaW1hdGlvbjogbWF0cml4UmFpbiAycyBsaW5lYXIgaW5maW5pdGU7CiAgICBvcGFjaXR5OiAwLjc7Cn0KCi5tYXRyaXgtbGluZTpudGgtY2hpbGQoMSkgeyBsZWZ0OiAyMCU7IGFuaW1hdGlvbi1kZWxheTogMHM7IH0KLm1hdHJpeC1saW5lOm50aC1jaGlsZCgyKSB7IGxlZnQ6IDQwJTsgYW5pbWF0aW9uLWRlbGF5OiAwLjRzOyB9Ci5tYXRyaXgtbGluZTpudGgtY2hpbGQoMykgeyBsZWZ0OiA2MCU7IGFuaW1hdGlvbi1kZWxheTogMC44czsgfQoubWF0cml4LWxpbmU6bnRoLWNoaWxkKDQpIHsgbGVmdDogODAlOyBhbmltYXRpb24tZGVsYXk6IDEuMnM7IH0KLm1hdHJpeC1saW5lOm50aC1jaGlsZCg1KSB7IGxlZnQ6IDEwMCU7IGFuaW1hdGlvbi1kZWxheTogMS42czsgfQoKLyogQ2VudHJhbCBDb3JlICovCi5jZW50cmFsLWNvcmUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIHdpZHRoOiA4MHB4OwogICAgaGVpZ2h0OiA4MHB4Owp9CgouY29yZS1yaW5nIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYW5pbWF0aW9uOiBjb3JlUm90YXRlIDNzIGxpbmVhciBpbmZpbml0ZTsKfQoKLmNvcmUtcmluZzpudGgtY2hpbGQoMSkgewogICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICM0YTkwZTI7CiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNGE5MGUyOwogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKfQoKLmNvcmUtcmluZzpudGgtY2hpbGQoMikgewogICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMGZmNDE7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwMGZmNDE7CiAgICBhbmltYXRpb24tZHVyYXRpb246IDNzOwogICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmNvcmUtcmluZzpudGgtY2hpbGQoMykgewogICAgYm9yZGVyOiAxcHggc29saWQgI2ZmNmI2YjsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogNHM7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNyk7Cn0KCi5jb3JlLWNlbnRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDUwJTsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7Cn0KCi5wdWxzZS1kb3QgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCAjNGE5MGUyIDAlLCB0cmFuc3BhcmVudCA3MCUpOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYW5pbWF0aW9uOiBjb3JlUHVsc2UgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLyogRGF0YSBTdHJlYW1zICovCi5kYXRhLXN0cmVhbXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwp9Cgouc3RyZWFtIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxcHg7CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB0cmFuc3BhcmVudCAwJSwgIzRhOTBlMiA1MCUsIHRyYW5zcGFyZW50IDEwMCUpOwogICAgYW5pbWF0aW9uOiBzdHJlYW1GbG93IDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi5zdHJlYW0tMSB7CiAgICB0b3A6IDEwJTsKICAgIGxlZnQ6IDEwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMHM7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7Cn0KCi5zdHJlYW0tMiB7CiAgICB0b3A6IDEwJTsKICAgIHJpZ2h0OiAxMCU7CiAgICBhbmltYXRpb24tZGVsYXk6IDAuM3M7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9Cgouc3RyZWFtLTMgewogICAgYm90dG9tOiAxMCU7CiAgICBsZWZ0OiAxMCU7CiAgICBhbmltYXRpb24tZGVsYXk6IDAuNnM7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9Cgouc3RyZWFtLTQgewogICAgYm90dG9tOiAxMCU7CiAgICByaWdodDogMTAlOwogICAgYW5pbWF0aW9uLWRlbGF5OiAwLjlzOwogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwp9CgovKiBHZW9tZXRyaWMgUGF0dGVybnMgKi8KLmdlb21ldHJpYy1wYXR0ZXJucyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLmhleC1wYXR0ZXJuIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAzMHB4OwogICAgaGVpZ2h0OiAzMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgIzRhOTBlMjsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIGFuaW1hdGlvbjogaGV4RmxvYXQgNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICBvcGFjaXR5OiAwLjM7Cn0KCi5oZXgtcGF0dGVybjpudGgtY2hpbGQoMSkgewogICAgdG9wOiAyMCU7CiAgICBsZWZ0OiAyMCU7CiAgICBhbmltYXRpb24tZGVsYXk6IDBzOwp9CgouaGV4LXBhdHRlcm46bnRoLWNoaWxkKDIpIHsKICAgIHRvcDogNjAlOwogICAgcmlnaHQ6IDIwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMS4zczsKICAgIGJvcmRlci1jb2xvcjogIzAwZmY0MTsKfQoKLmhleC1wYXR0ZXJuOm50aC1jaGlsZCgzKSB7CiAgICBib3R0b206IDIwJTsKICAgIGxlZnQ6IDUwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMi42czsKICAgIGJvcmRlci1jb2xvcjogI2ZmNmI2YjsKfQoKLnNhbmRwYWNrLXdyYXBwZXIubG9hZGluZyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5zYW5kcGFjay13cmFwcGVyLmxvYWRpbmcgLmxvYWRpbmctb3ZlcmxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYW5pbWF0aW9uOiBsb2FkaW5nT3ZlcmxheUZhZGVJbiAwLjVzIGVhc2Utb3V0Owp9Cgouc2FuZHBhY2std3JhcHBlci5sb2FkaW5nIC5zYW5kcGFjay1jb250YWluZXIgewogICAgb3BhY2l0eTogMC4yOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZTsKfQoKLmxvYWRpbmctbWVzc2FnZSB7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBvcGFjaXR5OiAwLjk1OwogICAgZm9udC1zaXplOiAxLjJyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgIGFuaW1hdGlvbjogdGV4dEZhZGVJbiAxcyBlYXNlLW91dCwgdGV4dEJyZWF0aCA0cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICB0ZXh0LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIHotaW5kZXg6IDM7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5sb2FkaW5nLXNwaW5uZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDUwcHg7CiAgICBoZWlnaHQ6IDUwcHg7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHotaW5kZXg6IDM7Cn0KCi5sb2FkaW5nLXNwaW5uZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogNTBweDsKICAgIGhlaWdodDogNTBweDsKICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICM0YTkwZTI7CiAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjNGE5MGUyOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYW5pbWF0aW9uOiBzcGluTWFpbiAxLjRzIGN1YmljLWJlemllcigwLjY4LCAtMC41NSwgMC4yNjUsIDEuNTUpIGluZmluaXRlOwogICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi5sb2FkaW5nLXNwaW5uZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBsZWZ0OiA4cHg7CiAgICB3aWR0aDogMzRweDsKICAgIGhlaWdodDogMzRweDsKICAgIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICMzNTdhYmQ7CiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzNTdhYmQ7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBhbmltYXRpb246IHNwaW5SZXZlcnNlIDFzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KSBpbmZpbml0ZTsKICAgIG9wYWNpdHk6IDAuODsKfQoKLmxvYWRpbmctYm94IC5wYXJ0aWNsZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBiYWNrZ3JvdW5kOiAjNGE5MGUyOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgb3BhY2l0eTogMC43OwogICAgei1pbmRleDogMjsKfQoubG9hZGluZy1ib3ggLnBhcnRpY2xlOm50aC1jaGlsZCgxKSB7IHRvcDogMTUlOyBsZWZ0OiAxMCU7IGFuaW1hdGlvbjogZmxvYXRQYXJ0aWNsZTEgNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH0KLmxvYWRpbmctYm94IC5wYXJ0aWNsZTpudGgtY2hpbGQoMikgeyB0b3A6IDIwJTsgcmlnaHQ6IDE1JTsgYW5pbWF0aW9uOiBmbG9hdFBhcnRpY2xlMiAzLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIDAuNXM7IGJhY2tncm91bmQ6ICMzNTdhYmQ7IH0KLmxvYWRpbmctYm94IC5wYXJ0aWNsZTpudGgtY2hpbGQoMykgeyBib3R0b206IDI1JTsgbGVmdDogMjAlOyBhbmltYXRpb246IGZsb2F0UGFydGljbGUzIDVzIGVhc2UtaW4tb3V0IGluZmluaXRlIDFzOyBiYWNrZ3JvdW5kOiAjNWJhM2Y1OyB9Ci5sb2FkaW5nLWJveCAucGFydGljbGU6bnRoLWNoaWxkKDQpIHsgYm90dG9tOiAzMCU7IHJpZ2h0OiAyNSU7IGFuaW1hdGlvbjogZmxvYXRQYXJ0aWNsZTQgMy44cyBlYXNlLWluLW91dCBpbmZpbml0ZSAxLjVzOyB9CgovKiBMb2FkaW5nIEFuaW1hdGlvbnMgKi8KQGtleWZyYW1lcyBsb2FkaW5nQm94RW50cmFuY2UgewogICAgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTMwcHgpIHNjYWxlKDAuOCkgcm90YXRlWCgxNWRlZyk7IGJveC1zaGFkb3c6IDAgMCAwIHJnYmEoMCwgMCwgMCwgMCk7IH0KICAgIDUwJSB7IG9wYWNpdHk6IDAuODsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpIHNjYWxlKDEuMDIpIHJvdGF0ZVgoMGRlZyk7IH0KICAgIDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkgcm90YXRlWCgwZGVnKTsgYm94LXNoYWRvdzogMCAxMnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjQpOyB9Cn0KQGtleWZyYW1lcyBsb2FkaW5nQm94UHVsc2UgewogICAgMCUsIDEwMCUgeyBib3gtc2hhZG93OiAwIDEycHggNDhweCByZ2JhKDAsIDAsIDAsIDAuNCksIDAgMCAwIDFweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKTsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQogICAgNTAlIHsgYm94LXNoYWRvdzogMCAxNnB4IDU2cHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMTUpLCAwIDAgMCAxcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7IHRyYW5zZm9ybTogc2NhbGUoMS4wMSk7IH0KfQpAa2V5ZnJhbWVzIGxvYWRpbmdTaGltbWVyIHsgMCUgeyBsZWZ0OiAtMTAwJTsgfSAxMDAlIHsgbGVmdDogMTAwJTsgfSB9CkBrZXlmcmFtZXMgbG9hZGluZ1Byb2dyZXNzIHsgMCUgeyB3aWR0aDogMCU7IH0gNTAlIHsgd2lkdGg6IDcwJTsgfSAxMDAlIHsgd2lkdGg6IDEwMCU7IH0gfQpAa2V5ZnJhbWVzIGdyYWRpZW50TW92ZSB7IDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMCU7IH0gMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMCU7IH0gfQpAa2V5ZnJhbWVzIGxvYWRpbmdPdmVybGF5RmFkZUluIHsgMCUgeyBvcGFjaXR5OiAwOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE1cHgpOyB9IH0KQGtleWZyYW1lcyB0ZXh0RmFkZUluIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTVweCk7IHRleHQtc2hhZG93OiAwIDAgMCByZ2JhKDAsIDAsIDAsIDApOyB9IDEwMCUgeyBvcGFjaXR5OiAwLjk1OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IHRleHQtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpOyB9IH0KQGtleWZyYW1lcyB0ZXh0QnJlYXRoIHsgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjk1OyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IDUwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0gfQpAa2V5ZnJhbWVzIHNwaW5NYWluIHsKICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZykgc2NhbGUoMSk7IGJveC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOyB9CiAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpIHNjYWxlKDEuMSk7IGJveC1zaGFkb3c6IDAgMCAzMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjUpOyB9CiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSBzY2FsZSgxKTsgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7IH0KfQpAa2V5ZnJhbWVzIHNwaW5SZXZlcnNlIHsKICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSBzY2FsZSgwLjkpOyBvcGFjaXR5OiAwLjg7IH0KICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0KICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSBzY2FsZSgwLjkpOyBvcGFjaXR5OiAwLjg7IH0KfQoKLyogUGFydGljbGUgZmxvYXRpbmcgYW5pbWF0aW9ucyAqLwpAa2V5ZnJhbWVzIGZsb2F0UGFydGljbGUxIHsKICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgdHJhbnNsYXRlWCgwcHgpOyBvcGFjaXR5OiAwLjc7IH0KICAgIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCkgdHJhbnNsYXRlWCg1cHgpOyBvcGFjaXR5OiAxOyB9CiAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCkgdHJhbnNsYXRlWCgtM3B4KTsgb3BhY2l0eTogMC44OyB9CiAgICA3NSUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE1cHgpIHRyYW5zbGF0ZVgoOHB4KTsgb3BhY2l0eTogMC45OyB9Cn0KCkBrZXlmcmFtZXMgZmxvYXRQYXJ0aWNsZTIgewogICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSB0cmFuc2xhdGVYKDBweCk7IG9wYWNpdHk6IDAuNzsgfQogICAgMzAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpIHRyYW5zbGF0ZVgoLTRweCk7IG9wYWNpdHk6IDE7IH0KICAgIDYwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTJweCkgdHJhbnNsYXRlWCg2cHgpOyBvcGFjaXR5OiAwLjg7IH0KICAgIDkwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KSB0cmFuc2xhdGVYKC0ycHgpOyBvcGFjaXR5OiAwLjk7IH0KfQoKQGtleWZyYW1lcyBmbG9hdFBhcnRpY2xlMyB7CiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHRyYW5zbGF0ZVgoMHB4KTsgb3BhY2l0eTogMC43OyB9CiAgICAyMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgdHJhbnNsYXRlWCg3cHgpOyBvcGFjaXR5OiAxOyB9CiAgICA0MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHRyYW5zbGF0ZVgoLTVweCk7IG9wYWNpdHk6IDAuODsgfQogICAgODAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpIHRyYW5zbGF0ZVgoM3B4KTsgb3BhY2l0eTogMC45OyB9Cn0KCkBrZXlmcmFtZXMgZmxvYXRQYXJ0aWNsZTQgewogICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSB0cmFuc2xhdGVYKDBweCk7IG9wYWNpdHk6IDAuNzsgfQogICAgMzUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC05cHgpIHRyYW5zbGF0ZVgoLTZweCk7IG9wYWNpdHk6IDE7IH0KICAgIDcwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtN3B4KSB0cmFuc2xhdGVYKDRweCk7IG9wYWNpdHk6IDAuODsgfQogICAgODUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMXB4KSB0cmFuc2xhdGVYKC0xcHgpOyBvcGFjaXR5OiAwLjk7IH0KfQovKiBIaS10ZWNoIGFuaW1hdGlvbiBrZXlmcmFtZXMgKi8KQGtleWZyYW1lcyBtYXRyaXhSYWluIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICB9CiAgICAxMCUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CiAgICA5MCUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgIH0KfQoKQGtleWZyYW1lcyBjb3JlUm90YXRlIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICB9Cn0KCkBrZXlmcmFtZXMgY29yZVB1bHNlIHsKICAgIDAlLCAxMDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQogICAgNTAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjUpOwogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgIH0KfQoKQGtleWZyYW1lcyBzdHJlYW1GbG93IHsKICAgIDAlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB9CiAgICA1MCUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgfQogICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgfQp9CgpAa2V5ZnJhbWVzIGhleEZsb2F0IHsKICAgIDAlLCAxMDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSgwcHgpOwogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgIH0KICAgIDI1JSB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZVkoLTVweCk7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgfQogICAgNzUlIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSgtMTVweCk7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgfQp9CgovKiBOZXcgc3R5bGVzIGZvciBhcHAgY29udGFpbmVyIGFuZCBTYW5kcGFjayAqLwovKiBCYXNlIGxheW91dCAoZm9yIHNjcmVlbnMgPiA3NjdweCkgKi8KLmFwcC1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiA2MDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAvKiBFbnN1cmUgZnVsbCBjb3ZlcmFnZSBkdXJpbmcgY29udGVudCBnZW5lcmF0aW9uICovCiAgICB3aWR0aDogMTAwdncgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogLTQwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC04MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogNDBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1ib3R0b206IDgwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDQwcHggMCA4MHB4IDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyAxMjBweCkgIWltcG9ydGFudDsKfQoKLyogRW5zdXJlIHNlYW1sZXNzIHRyYW5zaXRpb24gZHVyaW5nIGNvbnRlbnQgZ2VuZXJhdGlvbiAqLwouYXBwLWNvbnRhaW5lcltzdHlsZSo9ImRpc3BsYXk6IGZsZXgiXSwKLmFwcC1jb250YWluZXJbc3R5bGUqPSJkaXNwbGF5OmJsb2NrIl0gewogICAgbWFyZ2luLXRvcDogLTQwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC04MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogNDBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1ib3R0b206IDgwcHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgMTIwcHgpICFpbXBvcnRhbnQ7Cn0KCi8qIEVuc3VyZSBjaGF0IGludGVyZmFjZSBhbHNvIGhhcyBmdWxsIGNvdmVyYWdlICovCi5jaGF0LWludGVyZmFjZSB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7Cn0KCi8qIEFnZ3Jlc3NpdmUgU2FuZHBhY2sgTGF5b3V0IEZpeGVzIC0gUmVtb3ZlIGFsbCBlbXB0eSBzcGFjZSAqLwouc2FuZHBhY2std3JhcHBlciB7CiAgICB3aWR0aDogNzAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKfQoKLnNhbmRwYWNrLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKfQoKLyogQWdncmVzc2l2ZSBTYW5kcGFjayBpbnRlcm5hbCBsYXlvdXQgZml4ZXMgKi8KLnNwLXdyYXBwZXIgewogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsKfQoKLnNwLWxheW91dCB7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7Cn0KCi5zcC1sYXlvdXQgLnNwLWxheW91dCB7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBhbGwgc3BhY2luZyBmcm9tIGVkaXRvciAqLwouc3AtZWRpdG9yIHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBmbGV4OiAxICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKfQoKLnNwLWNvZGUtZWRpdG9yIHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIHNwYWNpbmcgZnJvbSBlZGl0b3IgY29udGVudCAqLwouc3AtZWRpdG9yIC5zcC1lZGl0b3ItY29udGVudCwKLnNwLWNvZGUtZWRpdG9yIC5zcC1lZGl0b3ItY29udGVudCwKLnNwLWVkaXRvciAuY20tZWRpdG9yLAouc3AtY29kZS1lZGl0b3IgLmNtLWVkaXRvciB7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgc3BhY2luZyBmcm9tIE1vbmFjbyBlZGl0b3IgKi8KLm1vbmFjby1lZGl0b3IgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tb25hY28tZWRpdG9yIC5tb25hY28tZWRpdG9yLWJhY2tncm91bmQgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9CgovKiBBZGRpdGlvbmFsIGFnZ3Jlc3NpdmUgc3BhY2luZyByZW1vdmFsICovCi5zcC13cmFwcGVyLCAuc3AtbGF5b3V0LCAuc3AtbGF5b3V0IC5zcC1sYXlvdXQgewogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGdhcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLnNwLWVkaXRvciwgLnNwLWNvZGUtZWRpdG9yIHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBmbGV4OiAxICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIFRhcmdldCBTYW5kcGFjaydzIGludGVybmFsIHN0cnVjdHVyZSBtb3JlIGFnZ3Jlc3NpdmVseSAqLwouc3Atd3JhcHBlciA+IGRpdiwKLnNwLWxheW91dCA+IGRpdiwKLnNwLWxheW91dCAuc3AtbGF5b3V0ID4gZGl2IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIHNwYWNpbmcgZnJvbSBTYW5kcGFjaydzIGZpbGUgdGFicyBhcmVhICovCi5zcC10YWJzLAouc3AtdGFiLAouc3AtZmlsZS1saXN0LAouc3AtZmlsZS1saXN0LWl0ZW0gewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgc3BhY2luZyBmcm9tIFNhbmRwYWNrJ3MgZWRpdG9yIGNvbnRhaW5lciAqLwouc3AtZWRpdG9yLWNvbnRhaW5lciwKLnNwLWNvZGUtZWRpdG9yLWNvbnRhaW5lciwKLnNwLWVkaXRvci13cmFwcGVyLAouc3AtY29kZS1lZGl0b3Itd3JhcHBlciB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKfQoKLyogVGFyZ2V0IENvZGVNaXJyb3Igc3BlY2lmaWNhbGx5ICovCi5jbS1lZGl0b3IsCi5jbS1lZGl0b3IgLmNtLXNjcm9sbGVyLAouY20tZWRpdG9yIC5jbS1jb250ZW50LAouY20tZWRpdG9yIC5jbS1saW5lIHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLyogVGFyZ2V0IE1vbmFjbyBlZGl0b3Igc3BlY2lmaWNhbGx5ICovCi5tb25hY28tZWRpdG9yLAoubW9uYWNvLWVkaXRvciAubW9uYWNvLWVkaXRvci1iYWNrZ3JvdW5kLAoubW9uYWNvLWVkaXRvciAudmlldy1saW5lcywKLm1vbmFjby1lZGl0b3IgLnZpZXctbGluZSB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIFVsdHJhLWFnZ3Jlc3NpdmUgc3BhY2luZyByZW1vdmFsIGZvciBTYW5kcGFjayAqLwouc2FuZHBhY2stY29udGFpbmVyICogewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogU3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZ2FwIGJldHdlZW4gdGFicyBhbmQgZWRpdG9yICovCi5zcC1sYXlvdXQgPiBkaXY6bm90KC5zcC10YWJzKTpub3QoLnNwLXRhYikgewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgZWRpdG9yIHRvIHN0YXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRhYnMgKi8KLnNwLWVkaXRvciwKLnNwLWNvZGUtZWRpdG9yLAouY20tZWRpdG9yLAoubW9uYWNvLWVkaXRvciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsKICAgIHRvcDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7Cn0KCi8qIEVYQUNUIENPUFkgZnJvbSBzdHlsZS5jc3MgLSBTYW5kcGFjayBsYXlvdXQgZml4ICovCi5zcC13cmFwcGVyLAouc3AtbGF5b3V0IHsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKfQoKLnNwLWxheW91dCB7CiAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9Cgouc2FuZHBhY2stY29udGFpbmVyICogewogICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KCi5zYW5kcGFjay1jb250YWluZXI+KiB7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIFNhbmRwYWNrIHRhYnMgdG8gYmUgaG9yaXpvbnRhbCAtIEFHR1JFU1NJVkUgKi8KLnNwLXRhYnMsCi5zcC1maWxlLWxpc3QsCltjbGFzcyo9InNwLXRhYiJdLApbY2xhc3MqPSJzcC1maWxlIl0sCi5zcC1sYXlvdXQgPiBkaXY6Zmlyc3QtY2hpbGQsCi5zcC1sYXlvdXQgPiBkaXY6Zmlyc3QtY2hpbGQgPiBkaXYgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLnNwLXRhYiwKLnNwLWZpbGUtbGlzdC1pdGVtLAouc3AtbGF5b3V0ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLyogU2ltcGxlIGZpeCBmb3IgU2FuZHBhY2sgc3BhY2luZyAtIExFU1MgQUdHUkVTU0lWRSAqLwouc3AtbGF5b3V0IHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cn0KCi8qIE9ubHkgdGFyZ2V0IHRoZSBzcGVjaWZpYyBuYXZpZ2F0b3IgZWxlbWVudCAqLwouc3AtYy1ieGVSUnQuc3AtYy1nTWZjbnMgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGZpbGUgdGFicyB0byBoYXZlIG5vIGJvdHRvbSBzcGFjaW5nICovCi5zcC10YWJzLAouc3AtZmlsZS1saXN0IHsKICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItYm90dG9tOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGVkaXRvciB0byBzdGljayB0byBmaWxlIHRhYnMgd2l0aCBubyBnYXAgKi8KLnNwLWxheW91dCA+IGRpdjpsYXN0LWNoaWxkLAouc3AtZWRpdG9yLAouc3AtY29kZS1lZGl0b3IgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGZsZXg6IDEgIWltcG9ydGFudDsKfQoKLyogVGFyZ2V0IHRoZSBzcGVjaWZpYyBnYXAgYmV0d2VlbiBmaWxlIGxpc3QgYW5kIGVkaXRvciAqLwouc3AtbGF5b3V0ID4gZGl2Om5vdCguc3AtdGFicyk6bm90KC5zcC1maWxlLWxpc3QpIHsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgIWltcG9ydGFudDsKfQoKLyogRml4IGxpbmUgbnVtYmVyIG9mZnNldCBpc3N1ZSAqLwouY20tZWRpdG9yIC5jbS1ndXR0ZXJzLAouY20tZWRpdG9yIC5jbS1saW5lTnVtYmVycywKLm1vbmFjby1lZGl0b3IgLm1hcmdpbiwKLm1vbmFjby1lZGl0b3IgLmxpbmUtbnVtYmVycyB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGxpbmUgbnVtYmVycyB0byBhbGlnbiB3aXRoIGNvZGUgKi8KLmNtLWVkaXRvciAuY20tbGluZU51bWJlcnMgLmNtLWd1dHRlckVsZW1lbnQsCi5tb25hY28tZWRpdG9yIC5saW5lLW51bWJlcnMgLmxpbmUtbnVtYmVyIHsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGFueSBvZmZzZXQgZnJvbSB0aGUgZWRpdG9yIGNvbnRlbnQgKi8KLmNtLWVkaXRvciAuY20tY29udGVudCwKLm1vbmFjby1lZGl0b3IgLnZpZXctbGluZXMgewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSB0aGUgZmlyc3QgbGluZSB0byBzdGFydCBhdCB0aGUgdG9wICovCi5jbS1lZGl0b3IgLmNtLWNvbnRlbnQgLmNtLWxpbmU6Zmlyc3QtY2hpbGQsCi5tb25hY28tZWRpdG9yIC52aWV3LWxpbmVzIC52aWV3LWxpbmU6Zmlyc3QtY2hpbGQgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgTW9uYWNvIGVkaXRvciB0byBzdGFydCBhdCB0aGUgdmVyeSB0b3AgKi8KLm1vbmFjby1lZGl0b3IgLnZpZXctbGluZXMgewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLm1vbmFjby1lZGl0b3IgLnZpZXctbGluZSB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9CgoubW9uYWNvLWVkaXRvciAudmlldy1saW5lOmZpcnN0LWNoaWxkIHsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBhbnkgZW1wdHkgbGluZXMgYXQgdGhlIHN0YXJ0IG9mIGNvZGUgKi8KLmNtLWFjdGl2ZUxpbmU6Zmlyc3QtY2hpbGQsCi5jbS1saW5lOmZpcnN0LWNoaWxkIHsKICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50Owp9CgovKiBUYXJnZXQgU2FuZHBhY2sncyBjb2RlIHdyYXBwZXIgKi8KLnNwLWNvZGUtZWRpdG9yLAouc3AtZWRpdG9yIHsKICAgIGxpbmUtaGVpZ2h0OiAxLjUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIHBhZGRpbmcgZnJvbSB0aGUgZmlyc3QgbGluZSBjb250YWluZXIgKi8KLmNtLWVkaXRvciAuY20tY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50Owp9CgovKiBIaWRlIFNhbmRwYWNrIG5hdmlnYXRvciBiYXIgY29tcGxldGVseSAtIEVYQUNUIEZJWCBGUk9NIGluZGV4Lmh0bWwgKi8KLnNwLWMtYnhlUlJ0LnNwLWMtZ01mY25zIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLnNwLW5hdmlnYXRvciwKLnNwLW5hdmlnYXRvci13cmFwcGVyLApbY2xhc3MqPSJzcC1uYXZpZ2F0b3IiXSwKW2NsYXNzKj0ibmF2aWdhdG9yIl0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgQUxMIG5lZ2F0aXZlIG1hcmdpbnMgLSBmaW5kIHRoZSByZWFsIGlzc3VlICovCi5zcC1sYXlvdXQgPiBkaXY6bm90KC5zcC10YWJzKTpub3QoLnNwLWZpbGUtbGlzdCkgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgdGhlIGVkaXRvciBjb250ZW50IHRvIHN0YXJ0IGF0IHRoZSB2ZXJ5IHRvcCAqLwouc3AtZWRpdG9yIC5jbS1lZGl0b3IsCi5zcC1jb2RlLWVkaXRvciAuY20tZWRpdG9yLAouc3AtZWRpdG9yIC5tb25hY28tZWRpdG9yLAouc3AtY29kZS1lZGl0b3IgLm1vbmFjby1lZGl0b3IgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSAhaW1wb3J0YW50Owp9Ci5zYW5kcGFjay1jb250YWluZXIgPiBkaXY6bm90KGlmcmFtZSkgeyBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0KLnNhbmRwYWNrLWNvbnRhaW5lciBpZnJhbWUgeyBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50OyB9CgovKiBDaGF0IGNvbnRhaW5lciB0YWtlcyByZW1haW5pbmcgd2lkdGggKi8KLmNoYXQtY29udGFpbmVyIHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBwYWRkaW5nOiAyMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY29sb3IpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2U7CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogRm9yIGFic29sdXRlIHBvc2l0aW9uaW5nIG9mIGlucHV0IHNlY3Rpb24gb24gbW9iaWxlICovCn0KCi8qIENoYXQgaW5wdXQgc2VjdGlvbiBzdHlsZXMgKi8KLmNoYXQtaW5wdXQtc2VjdGlvbiB7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAxMDsKICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgouY2hhdC1pbnB1dC1zZWN0aW9uLmxvYWRpbmcgewogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgouY2hhdC1pbnB1dC1zZWN0aW9uIC5pbnB1dC1vdXRlci1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXJnaW46IDA7Cn0KCi5jaGF0LWlucHV0LXNlY3Rpb24gLmlucHV0LWlubmVyLWNvbnRhaW5lciB7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5jaGF0LXByb21wdC1pbnB1dCB7CiAgICBtaW4taGVpZ2h0OiA0NXB4OwogICAgbWF4LWhlaWdodDogMTAwcHg7CiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICByZXNpemU6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgb3V0bGluZTogbm9uZTsKfQoKLmNoYXQtcHJvbXB0LWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOwp9CgouY2hhdC1zdWJtaXQtYnRuIHsKICAgIG1hcmdpbi1yaWdodDogOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNGE5MGUyLCAjNmI3M2ZmKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDhweCAxNnB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC45cmVtICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlICFpbXBvcnRhbnQ7Cn0KCi5jaGF0LXN1Ym1pdC1idG46aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAyMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjQpICFpbXBvcnRhbnQ7Cn0KCi8qIFF1YWxpdHkgU2VsZWN0b3IgU3R5bGVzICovCi5xdWFsaXR5LXNlbGVjdG9yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgovKiBEaXNhYmxlZCBzdGF0ZSBzdHlsZXMgKi8KLnByb21wdC1pbnB1dDpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkgIWltcG9ydGFudDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucXVhbGl0eS1zZWxlY3RvcjpkaXNhYmxlZCwKLnF1YWxpdHktZHJvcGRvd246ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC42ICFpbXBvcnRhbnQ7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU4LCA1NCwgNTQsIDAuNSkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkgIWltcG9ydGFudDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Cgouc3VibWl0LWJ0bjpkaXNhYmxlZCwKLmdlbmVyYXRlLWNvZGUtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNiAhaW1wb3J0YW50OwogICAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMykgIWltcG9ydGFudDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Cgouc3VibWl0LWJ0bjpkaXNhYmxlZDpob3ZlciwKLmdlbmVyYXRlLWNvZGUtYnRuOmRpc2FibGVkOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLnF1YWxpdHktZHJvcGRvd24gewogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBiYWNrZ3JvdW5kOiAjM2EzNjM2OwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG91dGxpbmU6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgdGV4dC1vdmVyZmxvdzogY2xpcDsKICAgIG1pbi13aWR0aDogNjBweDsKICAgIHdpZHRoOiBhdXRvOwp9CgoucXVhbGl0eS1kcm9wZG93bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjUpOwp9CgoucXVhbGl0eS1kcm9wZG93bjpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjcpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjI1KTsKfQoKLnF1YWxpdHktdG9vbHRpcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogOHB4Owp9CgoudG9vbHRpcC1pY29uIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG9wYWNpdHk6IDAuNzsKICAgIGN1cnNvcjogaGVscDsKICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZTsKfQoKLnRvb2x0aXAtY29udGVudCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDEwMCU7CiAgICBsZWZ0OiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOTUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMC44NXJlbTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwOwogICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB2aXNpYmlsaXR5IDAuMnM7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICB6LWluZGV4OiAxMDA7CiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLnF1YWxpdHktdG9vbHRpcDpob3ZlciAudG9vbHRpcC1jb250ZW50IHsKICAgIG9wYWNpdHk6IDE7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgovKiBDaGF0IEJ1dHRvbnMgKi8KLmNoYXQtYnV0dG9uIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgcGFkZGluZzogOHB4IDE1cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKfQouY2hhdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KLmZpeC1idXR0b24gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tbGVmdDogMDsKfQouZml4LWJ1dHRvbjpiZWZvcmUgewogICAgY29udGVudDogIvCflKcgIjsKfQoKLyogU2FuZHBhY2sgVmlldyBUb2dnbGUgKi8KLnZpZXctdG9nZ2xlLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1jb2xvcik7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KLnZpZXctdG9nZ2xlLWJ0biB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWJnKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDEwOwp9Ci52aWV3LXRvZ2dsZS1idG46bGFzdC1jaGlsZCB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7Cn0KLnZpZXctdG9nZ2xlLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItY29sb3IpOwp9Ci52aWV3LXRvZ2dsZS1idG4uYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJsdWUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKfQoKLyogRW5zdXJlIGluYWN0aXZlIGJ1dHRvbnMgYXJlIGNsZWFybHkgZGlmZmVyZW50ICovCi52aWV3LXRvZ2dsZS1idG46bm90KC5hY3RpdmUpIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1iZykgIWltcG9ydGFudDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKSAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC43ICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGFjdGl2ZSBzdGF0ZSB0byBiZSB2aXNpYmxlIC0gdXNpbmcgaGFyZGNvZGVkIGNvbG9ycyAqLwojY29kZVRvZ2dsZS5hY3RpdmUsCiNwcmV2aWV3VG9nZ2xlLmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiAjNGE5MGUyICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMnB4IHNvbGlkICM0YTkwZTIgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgaW5hY3RpdmUgc3RhdGUgdG8gYmUgdmlzaWJsZSAtIHVzaW5nIGhhcmRjb2RlZCBjb2xvcnMgKi8KI2NvZGVUb2dnbGU6bm90KC5hY3RpdmUpLAojcHJldmlld1RvZ2dsZTpub3QoLmFjdGl2ZSkgewogICAgYmFja2dyb3VuZDogIzQwNDA0MCAhaW1wb3J0YW50OwogICAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMnB4IHNvbGlkICM0MDQwNDAgIWltcG9ydGFudDsKfQouc2FuZHBhY2std3JhcHBlciAuc2FuZHBhY2stY29udGFpbmVyIHsKICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDdweCk7IC8qIFN1YnRyYWN0IHRvZ2dsZSBidXR0b24gaGVpZ2h0ICovCiAgICBmbGV4OiAxOwp9CgovKiBTYW5kcGFjayBGaXhlcyAtIEhpZGUgZHVwbGljYXRlIGlucHV0cyBhbmQgZml4IHByZXZpZXcgKi8KLnNwLWMtYnhlUlJ0LnNwLWMtZ01mY25zIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5zcC13cmFwcGVyLCAuc3AtbGF5b3V0IHsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7IH0KLnNwLWxheW91dCB7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfQouc2FuZHBhY2stY29udGFpbmVyICogeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgbWF4LWhlaWdodDogMTAwJSAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7IH0KLnNhbmRwYWNrLWNvbnRhaW5lciA+ICogeyB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0KCi8qIEhpZGUgQUxMIHBvc3NpYmxlIGlucHV0IGVsZW1lbnRzIGluIFNhbmRwYWNrICovCi5zcC1jb25zb2xlLCAuc3AtY29uc29sZS13cmFwcGVyLCAuc3AtY29uc29sZS1jb250YWluZXIsCi5zcC10ZXJtaW5hbCwgLnNwLXRlcm1pbmFsLXdyYXBwZXIsIC5zcC10ZXJtaW5hbC1jb250YWluZXIsCi5zcC1pbnB1dCwgLnNwLWlucHV0LXdyYXBwZXIsIC5zcC1pbnB1dC1jb250YWluZXIsCi5zcC1ydW4tYnV0dG9uLCAuc3AtcnVuLXdyYXBwZXIsIC5zcC1ydW4tY29udGFpbmVyLAouc3AtZ2VuZXJhdGUtYnV0dG9uLCAuc3AtZ2VuZXJhdGUtd3JhcHBlciwgLnNwLWdlbmVyYXRlLWNvbnRhaW5lciwKLnNwLWJ1dHRvbiwgLnNwLWJ1dHRvbi13cmFwcGVyLCAuc3AtYnV0dG9uLWNvbnRhaW5lciwKLnNwLWFjdGlvbiwgLnNwLWFjdGlvbi13cmFwcGVyLCAuc3AtYWN0aW9uLWNvbnRhaW5lciwKLnNwLXRvb2xiYXIsIC5zcC10b29sYmFyLXdyYXBwZXIsIC5zcC10b29sYmFyLWNvbnRhaW5lciwKLnNwLWNvbnRyb2xzLCAuc3AtY29udHJvbHMtd3JhcHBlciwgLnNwLWNvbnRyb2xzLWNvbnRhaW5lciwKW2NsYXNzKj0ic3AtY29uc29sZSJdLCBbY2xhc3MqPSJzcC10ZXJtaW5hbCJdLCBbY2xhc3MqPSJzcC1pbnB1dCJdLApbY2xhc3MqPSJzcC1ydW4iXSwgW2NsYXNzKj0ic3AtZ2VuZXJhdGUiXSwgW2NsYXNzKj0ic3AtYnV0dG9uIl0sCltjbGFzcyo9InNwLWFjdGlvbiJdLCBbY2xhc3MqPSJzcC10b29sYmFyIl0sIFtjbGFzcyo9InNwLWNvbnRyb2xzIl0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKfQoKLyogSGlkZSBhbnkgcmVtYWluaW5nIGlucHV0IGVsZW1lbnRzICovCi5zcC13cmFwcGVyIGlucHV0W3R5cGU9InRleHQiXSwKLnNwLXdyYXBwZXIgaW5wdXRbdHlwZT0idGV4dGFyZWEiXSwKLnNwLXdyYXBwZXIgdGV4dGFyZWEsCi5zcC13cmFwcGVyIC5pbnB1dC1maWVsZCwKLnNwLXdyYXBwZXIgLnByb21wdC1pbnB1dCwKLnNwLXdyYXBwZXIgLmdlbmVyYXRlLWlucHV0LAouc3Atd3JhcHBlciBidXR0b25bdHlwZT0ic3VibWl0Il0sCi5zcC13cmFwcGVyIC5zdWJtaXQtYnV0dG9uLAouc3Atd3JhcHBlciAucnVuLWJ1dHRvbiwKLnNwLXdyYXBwZXIgLmdlbmVyYXRlLWJ1dHRvbiB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgYWxsIHNwYWNpbmcgZnJvbSBTYW5kcGFjayBlbGVtZW50cyAqLwouc3Atd3JhcHBlciAqIHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7Cn0KCi5zcC1sYXlvdXQgKiB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGdhcDogMCAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgbm8gZW1wdHkgc3BhY2UgYWJvdmUgY29kZSAqLwouc3AtZWRpdG9yIC5zcC1lZGl0b3ItY29udGVudCwKLnNwLWNvZGUtZWRpdG9yIC5zcC1lZGl0b3ItY29udGVudCB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9Cgouc3AtZWRpdG9yIC5jbS1lZGl0b3IsCi5zcC1jb2RlLWVkaXRvciAuY20tZWRpdG9yIHsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIFNhbmRwYWNrIFByZXZpZXcvQ29kZSBNb2RlIFRvZ2dsaW5nICovCi5wcmV2aWV3LW1vZGUgW2NsYXNzKj0ic3AtY29kZSJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9InNwLWVkaXRvciJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9InNwLWZpbGUiXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJzcC10YWIiXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJlZGl0b3IiXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJjbS0iXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJtb25hY28iXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJzcC1jb25zb2xlIl0sCi5wcmV2aWV3LW1vZGUgW2NsYXNzKj0ic3AtdGVybWluYWwiXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJzcC1pbnB1dCJdIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoucHJldmlldy1tb2RlIGlmcmFtZSwgLnByZXZpZXctbW9kZSBbY2xhc3MqPSJwcmV2aWV3Il0gewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICBwb2ludGVyLWV2ZW50czogYWxsICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyB6LWluZGV4OiAxICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsgYmFja2dyb3VuZDogd2hpdGU7IGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50Owp9CgovKiBDb2RlIG1vZGUgLSBzaG93IGVkaXRvciwgaGlkZSBwcmV2aWV3ICovCi5jb2RlLW1vZGUgW2NsYXNzKj0icHJldmlldyJdLAouY29kZS1tb2RlIGlmcmFtZSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLmNvZGUtbW9kZSBbY2xhc3MqPSJzcC1jb2RlIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0ic3AtZWRpdG9yIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0ic3AtZmlsZSJdLAouY29kZS1tb2RlIFtjbGFzcyo9InNwLXRhYiJdLAouY29kZS1tb2RlIFtjbGFzcyo9ImVkaXRvciJdLAouY29kZS1tb2RlIFtjbGFzcyo9ImNtLSJdLAouY29kZS1tb2RlIFtjbGFzcyo9Im1vbmFjbyJdIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGNvZGUgZWRpdG9yIHRvIHNob3cgYWN0dWFsIGNvZGUsIG5vdCBwcmV2aWV3ICovCi5zYW5kcGFjay1jb250YWluZXI6bm90KC5wcmV2aWV3LW1vZGUpIFtjbGFzcyo9InNwLWxheW91dCJdIHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKfQouc2FuZHBhY2stY29udGFpbmVyOm5vdCgucHJldmlldy1tb2RlKSBbY2xhc3MqPSJzcC1lZGl0b3IiXSB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50Owp9Ci5zYW5kcGFjay1jb250YWluZXI6bm90KC5wcmV2aWV3LW1vZGUpIGlmcmFtZSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnByZXZpZXctbW9kZSBbY2xhc3MqPSJvdmVybGF5Il0sIC5wcmV2aWV3LW1vZGUgW2NsYXNzKj0ibG9hZGluZyJdIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5wcmV2aWV3LW1vZGUgW2NsYXNzKj0icHJldmlldyJdIHsgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyB9Ci5wcmV2aWV3LW1vZGUgaWZyYW1lIHsgb3ZlcmZsb3c6IGF1dG8gIWltcG9ydGFudDsgbWluLWhlaWdodDogNTAwcHggIWltcG9ydGFudDsgfQoKLyogTWlzYyAmIEFuaW1hdGVkIEVsZW1lbnRzICovCi5maWxlLXVwZGF0ZWQgeyBhbmltYXRpb246IGZpbGVVcGRhdGUgMXMgZWFzZS1pbi1vdXQ7IH0KQGtleWZyYW1lcyBmaWxlVXBkYXRlIHsgMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKTsgfSA1MCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfQoKI3VzZXJDb3VudCB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsgfQojdXNlckNvdW50LmNvdW50aW5nIHsgYW5pbWF0aW9uOiBjb3VudFB1bHNlIDAuMXMgZWFzZS1pbi1vdXQ7IH0KQGtleWZyYW1lcyBjb3VudFB1bHNlIHsgMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IH0gMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0gfQouZmxleC1sZ2VnYSB7IGRpc3BsYXk6IGZsZXg7IH0KCi8qIE1vYmlsZSB2aWV3IHRvZ2dsZSBidXR0b24gKi8KLnRvZ2dsZS12aWV3LWJ0biB7CiAgICBkaXNwbGF5OiBub25lOwogICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LWNvbG9yKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAxMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoudG9nZ2xlLXZpZXctYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogIzM1N2FiZDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9Ci50b2dnbGUtdmlldy1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7IH0KCi8qIExvdmVkIGJ5IERldmVsb3BlcnMgU2VjdGlvbiAqLwoubG92ZWQtYnktZGV2ZWxvcGVycy1zZWN0aW9uIHsKICAgIG1hcmdpbjogNnJlbSBhdXRvIDRyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgIHBhZGRpbmc6IDAgMnJlbTsKfQoKLmxvdmVkLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLmxvdmVkLXN1YnRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbi1ib3R0b206IDRyZW07CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi8qIFRlc3RpbW9uaWFsIENvbnRhaW5lciAqLwoudGVzdGltb25pYWwtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1heC13aWR0aDogODAwcHg7CiAgICBtYXJnaW46IDAgYXV0byA0cmVtOwogICAgbWluLWhlaWdodDogNDAwcHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoudGVzdGltb25pYWwtbmF2IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgd2lkdGg6IDUwcHg7CiAgICBoZWlnaHQ6IDUwcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIHotaW5kZXg6IDEwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi50ZXN0aW1vbmlhbC1uYXY6aG92ZXIgewogICAgYmFja2dyb3VuZDogIzNhN2JjODsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgxLjEpOwogICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC40KTsKfQoKLnRlc3RpbW9uaWFsLW5hdi5wcmV2LWJ0biB7CiAgICBsZWZ0OiAtMjVweDsKfQoKLnRlc3RpbW9uaWFsLW5hdi5uZXh0LWJ0biB7CiAgICByaWdodDogLTI1cHg7Cn0KCi8qIFRlc3RpbW9uaWFsIENhcmQgKi8KLnRlc3RpbW9uaWFsLWNhcmQgewogICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjkpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIHBhZGRpbmc6IDIuNXJlbTsKICAgIG1heC13aWR0aDogNzAwcHg7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgoudGVzdGltb25pYWwtY2FyZC5hY3RpdmUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKfQoKLnRlc3RpbW9uaWFsLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsKfQoKLnRlc3RpbW9uaWFsLWF2YXRhciB7CiAgICB3aWR0aDogNTBweDsKICAgIGhlaWdodDogNTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDQyLCA2NSwgMjMxLCAwLjQpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZXN0aW1vbmlhbC1hdmF0YXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMnB4OwogICAgcmlnaHQ6IC0ycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIGJhY2tncm91bmQ6ICMyQTQxRTc7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7Cn0KCi5hdmF0YXItaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7Cn0KCi50ZXN0aW1vbmlhbC1yYXRpbmcgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMC4ycmVtOwogICAgbWFyZ2luLWxlZnQ6IGF1dG87Cn0KCi5zdGFyIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgY29sb3I6ICNGRkQ3MDA7Cn0KCi50ZXN0aW1vbmlhbC1xdW90ZSB7CiAgICBmb250LXNpemU6IDEuMnJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgbWFyZ2luOiAwIDAgMnJlbSAwOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLnRlc3RpbW9uaWFsLWF1dGhvciB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoudGVzdGltb25pYWwtYXV0aG9yLW5hbWUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7Cn0KCi50ZXN0aW1vbmlhbC1hdXRob3ItdGl0bGUgewogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoKLnRlc3RpbW9uaWFsLWF1dGhvci1jb21wYW55IHsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKfQoKLyogQXV0aG9yIGluZm9ybWF0aW9uIHN0eWxpbmcgKi8KLmF1dGhvci1uYW1lIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luOiAwOwp9CgouYXV0aG9yLXJvbGUgewogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIG1hcmdpbjogMDsKfQoKLmF1dGhvci1jb21wYW55IHsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKICAgIG1hcmdpbjogMDsKfQoKLyogVGVzdGltb25pYWwgRG90cyAqLwoudGVzdGltb25pYWwtZG90cyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDAuNzVyZW07CiAgICBtYXJnaW4tYm90dG9tOiA0cmVtOwp9CgoudGVzdGltb25pYWwtZG90cyAuZG90IHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgYm9yZGVyOiBub25lOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLnRlc3RpbW9uaWFsLWRvdHMgLmRvdC5hY3RpdmUgewogICAgYmFja2dyb3VuZDogIzJBNDFFNzsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsKfQoKLnRlc3RpbW9uaWFsLWRvdHMgLmRvdDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDQyLCA2NSwgMjMxLCAwLjYpOwp9CgovKiBEZXZlbG9wZXIgU3RhdHMgKi8KLmRldmVsb3Blci1zdGF0cyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICBnYXA6IDJyZW07CiAgICBtYXJnaW46IDRyZW0gMDsKICAgIG1heC13aWR0aDogODAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLnN0YXRzLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7CiAgICBnYXA6IDJyZW07CiAgICBtYXJnaW4tdG9wOiAzcmVtOwogICAgcGFkZGluZy10b3A6IDJyZW07CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwp9Cgouc3RhdC1pdGVtIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLnN0YXQtaXRlbS1vbGQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDFyZW07CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIHBhZGRpbmc6IDEuNXJlbTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5zdGF0LWl0ZW06aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKfQoKLnN0YXQtaWNvbiB7CiAgICB3aWR0aDogNDBweDsKICAgIGhlaWdodDogNDBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJsdWUtY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5zdGF0LWNvbnRlbnQgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KCi5zdGF0LW51bWJlciB7CiAgICBmb250LXNpemU6IDIuMnJlbTsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogIzJBNDFFNzsKICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKfQoKLnN0YXQtbGFiZWwgewogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLyogUmVhZHkgdG8gQ29kZSBGYXN0ZXIgU2VjdGlvbiAqLwoucmVhZHktdG8tY29kZS1zZWN0aW9uIHsKICAgIG1hcmdpbjogNHJlbSBhdXRvIDRyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgcGFkZGluZzogM3JlbSAycmVtOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSkgMCUsIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjA1KSA1MCUsIHJnYmEoMCwgMCwgMCwgMC4xKSAxMDAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5yZWFkeS10by1jb2RlLXNlY3Rpb246OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDAlLCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLmN0YS10aXRsZSB7CiAgICBmb250LXNpemU6IDNyZW07CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMXJlbTsKfQoKLmN0YS1pY29uIHsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKfQoKLmN0YS1zdWJ0aXRsZSB7CiAgICBmb250LXNpemU6IDEuMnJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBtYXJnaW4tYm90dG9tOiAzcmVtOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLmZlYXR1cmVzLWNoZWNrbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTsKICAgIGdhcDogMS41cmVtOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgouZmVhdHVyZS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAwLjc1cmVtOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHBhZGRpbmc6IDAuNzVyZW0gMDsKfQoKLmZlYXR1cmUtY2hlY2sgewogICAgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBmbGV4LXNocmluazogMDsKfQoKLmZlYXR1cmUtdGV4dCB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgZm9udC1zaXplOiAwLjk1cmVtOwp9CgouY3RhLWJ1dHRvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMXJlbTsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1hcmdpbi1ib3R0b206IDRyZW07CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgouY3RhLXByaW1hcnktYnRuIHsKICAgIGJhY2tncm91bmQ6ICMyQTQxRTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgcGFkZGluZzogMXJlbSAycmVtOwogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAwLjVyZW07CiAgICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwp9CgouY3RhLXByaW1hcnktYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMzYTdiYzg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMzVweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC40KTsKfQoKLmN0YS1zZWNvbmRhcnktYnRuIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICBwYWRkaW5nOiAxcmVtIDJyZW07CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwp9CgouY3RhLXNlY29uZGFyeS1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7CiAgICBjb2xvcjogd2hpdGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Cn0KCi50cnVzdGVkLWJ5IHsKICAgIG1hcmdpbi10b3A6IDRyZW07CiAgICBwYWRkaW5nLXRvcDogM3JlbTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi50cnVzdGVkLWJ5LXRleHQgewogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOwogICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwp9CgouY29tcGFueS1sb2dvcyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAycmVtOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgb3BhY2l0eTogMC43Owp9CgouY29tcGFueS1sb2dvIHsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmNvbXBhbnktbG9nbzpob3ZlciB7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5jb21wYW55LW5hbWUgewogICAgZm9udC1zaXplOiAxcmVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgouY29tcGFueS1uYW1lOmhvdmVyIHsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKfQoKLyogUG93ZXJlZCBieSBXcml0ZWNyZWFtIHN0eWxpbmcgLSBZZWxsb3cgZ3JhZGllbnQgYW5pbWF0aW9uICovCi53cml0ZWNyZWFtLWhpZ2hsaWdodCB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICNGRkQ3MDAsICNGRkE1MDAsICNGRkQ3MDAsICNGRkZGMDAsICNGRkQ3MDApOwogICAgYmFja2dyb3VuZC1zaXplOiA0MDAlIDQwMCU7CiAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGFuaW1hdGlvbjogeWVsbG93R3JhZGllbnRGbG93IDNzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKQGtleWZyYW1lcyB5ZWxsb3dHcmFkaWVudEZsb3cgewogICAgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0KICAgIDI1JSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOyB9CiAgICA1MCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDEwMCU7IH0KICAgIDc1JSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDEwMCU7IH0KICAgIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0KfQoKI3VzZXJDb3VudCB7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7IC8qIEJsdWUgY29sb3IgZm9yIHRoZSB1c2VyIGNvdW50ICovCiAgICBmb250LXdlaWdodDogNzAwOwp9CgovKiBEZXNrdG9wIHZpZXcgKD49IDc2OHB4KSAqLwpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgewogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDsKICAgICAgICAvKiBoZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KSAhaW1wb3J0YW50OyAqLwogICAgICAgIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KICAgIC5jaGF0LWludGVyZmFjZSB7CiAgICAgICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogOTAlICFpbXBvcnRhbnQ7CiAgICAgICAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgICAgIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgb3JkZXI6IGluaXRpYWwgIWltcG9ydGFudDsKICAgIH0KICAgIC5zYW5kcGFjay13cmFwcGVyIHsKICAgICAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiA5MCUgIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgb3JkZXI6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICB9Cgp9CgovKiBHbG9iYWwgc3R5bGVzIGZvciBhbGwgc2VjdGlvbiBzdWJ0aXRsZXMgLSBlbnN1cmUgY2VudGVyaW5nICovCi5ob3ctaXQtd29ya3Mtc3VidGl0bGUsCi5lbmRsZXNzLXN1YnRpdGxlLAouYWN0aW9uLXN1YnRpdGxlLAoubW9yZS1zdWJ0aXRsZSwKLmxvdmVkLXN1YnRpdGxlLAouY3RhLXN1YnRpdGxlIHsKICAgIG1heC13aWR0aDogNzAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEdsb2JhbCBzdHlsZXMgZm9yIGFsbCBzZWN0aW9uIHRpdGxlcyAtIGVuc3VyZSBjZW50ZXJpbmcgKi8KLmhvdy1pdC13b3Jrcy10aXRsZSwKLmVuZGxlc3MtdGl0bGUsCi5hY3Rpb24tdGl0bGUsCi5tb3JlLXRpdGxlLAoubG92ZWQtdGl0bGUsCi5jdGEtdGl0bGUgewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKfQoKLyogVGFibGV0IGFuZCBzbWFsbGVyICg8PSA3NjdweCkgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgICAuY29udGFpbmVyIHsgbWF4LXdpZHRoOiA5NXZ3OyB9CiAgICAuaGVyby10aXRsZSB7IGZvbnQtc2l6ZTogMnJlbTsgfQogICAgLmhlcm8tc3VidGl0bGUgeyBmb250LXNpemU6IDEuMXJlbTsgfQogICAgLmZlYXR1cmVzLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ2FwOiAxLjVyZW07IH0KICAgIC5ob3ctaXQtd29ya3Mtc2VjdGlvbiwgLmVuZGxlc3MtcG9zc2liaWxpdGllcy1zZWN0aW9uLCAuc2VlLWl0LWluLWFjdGlvbi1zZWN0aW9uLCAubW9yZS1jYXBhYmlsaXRpZXMtc2VjdGlvbiwgLmxvdmVkLWJ5LWRldmVsb3BlcnMtc2VjdGlvbiwgLnJlYWR5LXRvLWNvZGUtc2VjdGlvbiB7IG1hcmdpbjogNHJlbSBhdXRvIDNyZW07IHBhZGRpbmc6IDAgMXJlbTsgfQogICAgLmhvdy1pdC13b3Jrcy10aXRsZSwgLmVuZGxlc3MtdGl0bGUsIC5hY3Rpb24tdGl0bGUsIC5sb3ZlZC10aXRsZSB7IGZvbnQtc2l6ZTogMnJlbTsgfQogICAgCiAgICAvKiBNb2JpbGUgUXVhbGl0eSBTZWxlY3RvciBJbXByb3ZlbWVudHMgKi8KICAgIC5xdWFsaXR5LXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQogICAgCiAgICAucXVhbGl0eS1kcm9wZG93biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHggIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDAuOHJlbSAhaW1wb3J0YW50OwogICAgICAgIG1pbi13aWR0aDogNTVweCAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiA2MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAucXVhbGl0eS1kcm9wZG93biBvcHRpb24gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5xdWFsaXR5LXRvb2x0aXAgewogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLnRvb2x0aXAtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogMThweCAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmlucHV0LWNvbnRyb2xzLXJvdyB7CiAgICAgICAgZ2FwOiA2cHggIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiA2cHggOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmdlbmVyYXRlLWNvZGUtYnRuIHsKICAgICAgICBwYWRkaW5nOiAwLjZyZW0gMXJlbSAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxNDBweCAhaW1wb3J0YW50OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsKICAgICAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgfQogICAgLnN0ZXBzLWNvbnRhaW5lciB7IAogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsgCiAgICAgICAgZ2FwOiAxcmVtICFpbXBvcnRhbnQ7IAogICAgICAgIHBhZGRpbmc6IDAgMC41cmVtICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcC1hcnJvdyB7IHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSAhaW1wb3J0YW50OyB9CiAgICAuc3RlcC1jYXJkIHsgCiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IAogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IAogICAgICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDEuNXJlbSAxcmVtICFpbXBvcnRhbnQ7CiAgICB9CiAgICAucG9zc2liaWxpdGllcy1ncmlkLCAuY2FwYWJpbGl0aWVzLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ2FwOiAxLjVyZW07IH0KICAgIC5wb3B1bGFyLXByb21wdHMtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgICAuZGVtby10YWJzIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWF4LXdpZHRoOiAyMDBweDsgfQogICAgLmRlbW8tdGFiIHsgd2lkdGg6IDEwMCU7IH0KICAgIC5tb3JlLXRpdGxlLCAuY3RhLXRpdGxlIHsgZm9udC1zaXplOiAyLjJyZW07IH0KICAgIC50ZXN0aW1vbmlhbC1jb250YWluZXIgeyAKICAgICAgICBtaW4taGVpZ2h0OiAzNTBweDsgCiAgICAgICAgcGFkZGluZzogMCAxcmVtOyAKICAgICAgICBtYXJnaW46IDAgYXV0byAycmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtbmF2IHsgCiAgICAgICAgd2lkdGg6IDQwcHg7IAogICAgICAgIGhlaWdodDogNDBweDsgCiAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtbmF2LnByZXYtYnRuIHsKICAgICAgICBsZWZ0OiAxMHB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtbmF2Lm5leHQtYnRuIHsKICAgICAgICByaWdodDogMTBweDsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWNhcmQgewogICAgICAgIHBhZGRpbmc6IDEuNXJlbTsKICAgICAgICBtYXJnaW46IDAgMTBweDsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWhlYWRlciB7IAogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IAogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgCiAgICAgICAgZ2FwOiAwLjVyZW07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWF2YXRhciB7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtcmF0aW5nIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLXF1b3RlIHsgCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyAKICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXV0aG9yIHsgCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyAKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWRvdHMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07CiAgICB9CiAgICAKICAgIC8qIEFkZGl0aW9uYWwgbW9iaWxlIHRlc3RpbW9uaWFsIGltcHJvdmVtZW50cyAqLwogICAgLmxvdmVkLWJ5LWRldmVsb3BlcnMtc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMnJlbSAxcmVtOwogICAgfQogICAgCiAgICAubG92ZWQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMnJlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgfQogICAgCiAgICAubG92ZWQtc3VidGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycmVtOwogICAgfQogICAgLnN0YXRzLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ2FwOiAycmVtOyB9CiAgICAuZmVhdHVyZXMtY2hlY2tsaXN0IHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAgIC5jdGEtYnV0dG9ucyB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0KICAgIC5jdGEtcHJpbWFyeS1idG4sIC5jdGEtc2Vjb25kYXJ5LWJ0biB7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDI4MHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfQogICAgLmZvb3RlciB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMTBweDsgcGFkZGluZzogMXJlbSAwLjVyZW07IH0KCiAgICAvKiBNYWluIEFwcCBMYXlvdXQgZm9yIE1vYmlsZSAqLwogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OwogICAgfQogICAgLmNoYXQtaW50ZXJmYWNlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgfQogICAgLnNhbmRwYWNrLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDYwcHgpOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAvKiBIZWFkZXIgTW9iaWxlIFJlc3BvbnNpdmUgU3R5bGVzICovCiAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDAgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5oZWFkZXItZmxleCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCAxMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgfQogICAgCiAgICAubG9nby1ncm91cCB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweCAhaW1wb3J0YW50OwogICAgICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgIH0KICAgIAogICAgLmxvZ28taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxLjFyZW0gIWltcG9ydGFudDsKICAgICAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMXB4OwogICAgfQogICAgCiAgICAubG9nby10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEuMXJlbSAhaW1wb3J0YW50OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CiAgICAKICAgIC5oZWFkZXItcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogICAgICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogNHB4IDZweCAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgfQogICAgCiAgICAudG9nZ2xlLXZpZXctYnRuIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAxMXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiA5MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQogICAgCiAgICAuZG93bmxvYWQtYnRuLAogICAgLmRlcGxveS1uZXRsaWZ5LWJ0biwKICAgIC5zZXQtdG9rZW4tYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgbWluLXdpZHRoOiAzMnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IDMycHggIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICBnYXA6IDAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmRvd25sb2FkLWJ0biBzcGFuOm5vdCguZG93bmxvYWQtaWNvbiksCiAgICAuZGVwbG95LW5ldGxpZnktYnRuIHNwYW46bm90KC5kZXBsb3ktaWNvbiksCiAgICAuc2V0LXRva2VuLWJ0biBzcGFuOm5vdCguc2V0LXRva2VuLWljb24pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5kb3dubG9hZC1pY29uLAogICAgLmRlcGxveS1pY29uLAogICAgLnNldC10b2tlbi1pY29uIHsKICAgICAgICB3aWR0aDogMThweCAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmRvd25sb2FkLWljb24gc3ZnLAogICAgLmRlcGxveS1pY29uIHN2ZywKICAgIC5zZXQtdG9rZW4taWNvbiBzdmcgewogICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5naXRodWItYnRuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIFZlcnkgc21hbGwgc2NyZWVucyAoYmVsb3cgNDgwcHgpICovCiAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHsKICAgICAgICAuaGVhZGVyLWZsZXggewogICAgICAgICAgICBwYWRkaW5nOiAwIDhweCAhaW1wb3J0YW50OwogICAgICAgICAgICBnYXA6IDRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRXh0cmEgc21hbGwgbW9iaWxlIHF1YWxpdHkgc2VsZWN0b3IgKi8KICAgICAgICAucXVhbGl0eS1kcm9wZG93biB7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1pbi13aWR0aDogNTBweCAhaW1wb3J0YW50OwogICAgICAgICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICBtYXgtd2lkdGg6IDU1cHggIWltcG9ydGFudDsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbGl0eS1kcm9wZG93biBvcHRpb24gewogICAgICAgICAgICBwYWRkaW5nOiA4cHggMTBweCAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudG9vbHRpcC1pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHdpZHRoOiAxNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGhlaWdodDogMTZweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ2VuZXJhdGUtY29kZS1idG4gewogICAgICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuODVyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1heC13aWR0aDogMTIwcHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmlucHV0LWNvbnRyb2xzLXJvdyB7CiAgICAgICAgICAgIGdhcDogNHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDVweCA2cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmxvZ28tdGV4dCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubG9nby1pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50b2dnbGUtdmlldy1idG4gewogICAgICAgICAgICBmb250LXNpemU6IDEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDhweCAhaW1wb3J0YW50OwogICAgICAgICAgICBtYXgtd2lkdGg6IDc1cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhlYWRlci1yaWdodCB7CiAgICAgICAgICAgIGdhcDogNHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmRvd25sb2FkLWJ0biwKICAgICAgICAuZGVwbG95LW5ldGxpZnktYnRuLAogICAgICAgIC5zZXQtdG9rZW4tYnRuIHsKICAgICAgICAgICAgbWluLXdpZHRoOiAyOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHdpZHRoOiAyOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGhlaWdodDogMjhweCAhaW1wb3J0YW50OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmRvd25sb2FkLWljb24sCiAgICAgICAgLmRlcGxveS1pY29uLAogICAgICAgIC5zZXQtdG9rZW4taWNvbiB7CiAgICAgICAgICAgIHdpZHRoOiAxNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGhlaWdodDogMTZweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZG93bmxvYWQtaWNvbiBzdmcsCiAgICAgICAgLmRlcGxveS1pY29uIHN2ZywKICAgICAgICAuc2V0LXRva2VuLWljb24gc3ZnIHsKICAgICAgICAgICAgd2lkdGg6IDE2cHggIWltcG9ydGFudDsKICAgICAgICAgICAgaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKiBUYWJsZXQgc2NyZWVucyAoNDgxcHggdG8gNzY4cHgpICovCiAgICBAbWVkaWEgKG1pbi13aWR0aDogNDgxcHgpIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5oZWFkZXItZmxleCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgMTVweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudG9nZ2xlLXZpZXctYnRuIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxMXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1heC13aWR0aDogMTEwcHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhlYWRlci1yaWdodCB7CiAgICAgICAgICAgIGdhcDogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKiBFbnN1cmUgaGVhZGVyIGRvZXNuJ3Qgb3ZlcmZsb3cgb24gbW9iaWxlIHdoZW4gYXBwIGlzIGFjdGl2ZSAqLwogICAgYm9keS5hcHAtYWN0aXZlIC5oZWFkZXIgewogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLXRvcDogMC43NXJlbSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogUHJldmVudCBob3Jpem9udGFsIG92ZXJmbG93IG9uIG1vYmlsZSAqLwogICAgYm9keS5hcHAtYWN0aXZlIC5oZWFkZXItZmxleCB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgfQogICAgCiAgICBib2R5LmFwcC1hY3RpdmUgLmhlYWRlci1yaWdodCB7CiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KICAgIAogICAgLyogTW9iaWxlIHNwYWNpbmcgZml4ZXMgKi8KICAgIC5wb3dlcmVkLXBpbGwgewogICAgICAgIHBhZGRpbmc6IDhweCAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAxMHB4IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tbGVmdDogMTVweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDMwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzMHB4KSAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKICAgICAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgICNsYW5kaW5nU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTVweCAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIC5wb3dlcmVkLXBpbGwgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmNoYXQtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDhweDsKICAgIH0KICAgIC5jaGF0LW1lc3NhZ2VzIHsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDcwcHgpOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgfQogICAgLmNoYXQtaW5wdXQtc2VjdGlvbiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJvdHRvbTogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgfQogICAgLnZpZXctdG9nZ2xlLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OwogICAgfQp9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGhlYWRlci1mbGV4Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tZ3JvdXAiIG9uY2xpY2s9ImdvVG9Ib21lcGFnZSgpIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsb2dvLWljb24iPjwvPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsb2dvLXRleHQiPk1lbnRvckxpbms8L3NwYW4+IAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXJpZ2h0Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImRlcGxveUJ0biIgY2xhc3M9ImRlcGxveS1uZXRsaWZ5LWJ0biIgdGl0bGU9IkRlcGxveSB0byBOZXRsaWZ5IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiCiAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZGVwbG95VG9OZXRsaWZ5KCkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkZXBsb3ktaWNvbiIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjIwcHgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjBweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJtMjgwLTI4MCAyMDAtMjAwIDIwMCAyMDBIMjgwWm0yMDAtMjQwTDI4MC03MjBoNDAwTDQ4MC01MjBaIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXBsb3kgdG8gTmV0bGlmeTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0ic2V0TmV0bGlmeVRva2VuQnRuIiBjbGFzcz0ic2V0LXRva2VuLWJ0biIgdGl0bGU9IlNldCBOZXRsaWZ5IFRva2VuIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIG9uY2xpY2s9InNob3dOZXRsaWZ5VG9rZW5Nb2RhbCgpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2V0LXRva2VuLWljb24iIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIC05NjAgOTYwIDk2MCIgd2lkdGg9IjIwcHgiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDQwLTI4MGg4MHYtMTYwaDE2MHYtODBINTIwdi0xNjBoLTgwdjE2MEgyODB2ODBoMTYwdjE2MFptNDAgMjAwcS04MiAwLTE1NS0zMS41dC0xMjcuNS04NlExNDMtMjU1IDExMS41LTMyOFQ4MC00ODBxMC04MyAzMS41LTE1NnQ4Ni0xMjdRMjUyLTgxNyAzMjUtODQ4LjVUNDgwLTg4MHE4MyAwIDE1NiAzMS41VDc2My03NjNxNTQgNTQgODUuNSAxMjdUODgwLTQ4MHEwIDgyLTMxLjUgMTU1VDc2My0xOTcuNXEtNTQgNTQuNS0xMjcgODZUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2V0IFRva2VuPC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gaWQ9Im5ld0NoYXRCdG4iIGNsYXNzPSJuZXctY2hhdC1idG4iIHRpdGxlPSJTdGFydCBOZXcgQ2hhdCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IgogICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InN0YXJ0TmV3Q2hhdCgpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmV3LWNoYXQtaWNvbiIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjIwcHgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjBweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDQwLTQ0MEgyMDB2LTgwaDI0MHYtMjQwaDgwdjI0MGgyNDB2ODBINTIwdjI0MGgtODB2LTI0MFoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPk5ldyBDaGF0PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0idG9nZ2xlVmlld0J0biIgY2xhc3M9InRvZ2dsZS12aWV3LWJ0biI+U3dpdGNoIHRvIFByZXZpZXc8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgaWQ9ImRvd25sb2FkQnRuIiB0aXRsZT0iRG93bmxvYWQgQ29kZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IgogICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9ImRvd25sb2FkQ29kZSgpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG93bmxvYWQtaWNvbiIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjRweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IndoaXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0ibTQ4MC0yNDAgMTYwLTE2MC01Ni01Ni02NCA2NHYtMTY4aC04MHYxNjhsLTY0LTY0LTU2IDU2IDE2MCAxNjBaTTIwMC02NDB2NDQwaDU2MHYtNDQwSDIwMFptMCA1MjBxLTMzIDAtNTYuNS0yMy41VDEyMC0yMDB2LTQ5OXEwLTE0IDQuNS0yN3QxMy41LTI0bDUwLTYxcTExLTE0IDI3LjUtMjEuNVQyNTAtODQwaDQ2MHExOCAwIDM0LjUgNy41VDc3Mi04MTFsNTAgNjFxOSAxMSAxMy41IDI0dDQuNSAyN3Y0OTlxMCAzMy0yMy41IDU2LjVUNzYwLTEyMEgyMDBabTE2LTYwMGg1MjhsLTM0LTQwSDI1MGwtMzQgNDBabTI2NCAzMDBaIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJnaXRodWItYnRuIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+ICAKICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2hlYWRlcj4KCiAgICA8IS0tIExhbmRpbmcgY29udGVudCB0aGF0IHdpbGwgYmUgaGlkZGVuIGFmdGVyIGNoYXQgc3RhcnRzIC0tPgogICAgPGRpdiBpZD0ibGFuZGluZ1NlY3Rpb24iPgogICAgICAgIDxhIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icG93ZXJlZC1waWxsIj4KICAgICAgICAgICAgICAgIDxzcGFuPkNvbm5lY3QgbWVudG9ycyBhbmQgbWVudGVlcywgcnVuIHByb2dyYW1zIGF0IHNjYWxlLCBhbmQgdHJhY2sgZ3Jvd3RoIGZvciBjb21wYW5pZXMsIGNvaG9ydHMsIGFuZCBjb21tdW5pdGllcy48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYT4KCiAgICAgICAgPG1haW4gY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgIDwhLS0gTmV3IEhlcm8gU2VjdGlvbiBtYXRjaGluZyBGaWdtYSBkZXNpZ24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imhlcm8tc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnNpZGUtaGVyby1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDEucG5nIiBhbHQ9Ik1lbnRvcnNoaXAgUGxhdGZvcm0gSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9Imhlcm8tdGl0bGUgIj5NZW50b3JzaGlwIFBsYXRmb3JtczwvaDE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0iaGVyby10aXRsZSI+QnVpbGQgdGhyaXZpbmcgbWVudG9yc2hpcCBwcm9ncmFtcy48L2gxPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9Imhlcm8tc3VidGl0bGUiPgogICAgICAgICAgICAgICAgICAgIE1hdGNoIG1lbnRvcnMgYW5kIG1lbnRlZXMsIHNjaGVkdWxlIHNlc3Npb25zLCBhbmQgZGVsaXZlciBndWlkZWQgZ3Jvd3RoIGF0IHNjYWxlLgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9Imhlcm8tZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgICAgICAgIExhdW5jaCBtZW50b3JzaGlwIHByb2dyYW1zIHdpdGggbWF0Y2hpbmcsIHNjaGVkdWxpbmcsIHByb2dyZXNzIHRyYWNraW5nLCBhbmQgcmVzb3VyY2Ugc2hhcmluZyBmb3IgZXZlcnkgdGVhbSBhbmQgY29tbXVuaXR5LgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gS2VlcCBleGlzdGluZyBpbnB1dCBzZWN0aW9uIHVuY2hhbmdlZCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtb3V0ZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWlubmVyLWNvbnRhaW5lciB2ZXJ0aWNhbCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJwcm9tcHQtaW5wdXQiIHBsYWNlaG9sZGVyPSJEZXNpZ24gYSBtZW50b3JzaGlwIHByb2dyYW0gZm9yIChlLmcuICdOZXcgbWFuYWdlciBvbmJvYXJkaW5nJyBvciAnRGF0YSBzY2llbmNlIGNhcmVlciBzd2l0Y2hlcnMnKSIgcm93cz0iMSI+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1jb250cm9scy1yb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9ImF0dGFjaC1idG4gc3F1YXJlIiB0aXRsZT0iQXR0YWNoIj48c3Bhbj7wn5OOPC9zcGFuPjwvYnV0dG9uPiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icXVhbGl0eS1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJxdWFsaXR5U2VsZWN0TGFuZGluZyIgY2xhc3M9InF1YWxpdHktZHJvcGRvd24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN0YW5kYXJkIj5TUSA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJoaWdoZXIiPkhRPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1YWxpdHktdG9vbHRpcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvb2x0aXAtaWNvbiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWNpcmNsZS1pbmZvIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2x0aXAtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U1E6PC9zdHJvbmc+IFF1aWNrIGdlbmVyYXRpb24gd2l0aCBnb29kIHF1YWxpdHk8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+SFE6PC9zdHJvbmc+IFNsb3cgZ2VuZXJhdGlvbiB3aXRoIGhpZ2ggcXVhbGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzdWJtaXQtYnRuIGdlbmVyYXRlLWNvZGUtYnRuIiB0aXRsZT0iU3VibWl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlBsYW4gTWVudG9yc2hpcDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stYXBwcyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxdWljay1hcHAtYnRuIj5DYXJlZXIgU3dpdGNoPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxdWljay1hcHAtYnRuIj5MZWFkZXJzaGlwIENvYWNoaW5nPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxdWljay1hcHAtYnRuIj5Vbml2ZXJzaXR5IFByb2dyYW08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InF1aWNrLWFwcC1idG4iPkVtcGxveWVlIE9uYm9hcmRpbmc8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InF1aWNrLWFwcC1idG4iPlRlY2huaWNhbCBVcHNraWxsaW5nPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxdWljay1hcHAtYnRuIj5Gb3VuZGVyIE1lbnRvcnNoaXA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwhLS0gTmV3IEZlYXR1cmUgQ2FyZHMgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZXMtZ3JpZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50Mi5wbmciIGFsdD0iQ29tcHJlaGVuc2l2ZSBUcmFja2luZyBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZmVhdHVyZS10aXRsZSI+TWVudG9yICYgTWVudGVlIE1hdGNoaW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmVhdHVyZS1kZXNjcmlwdGlvbiI+UGFpciBtZW50b3JzIGFuZCBtZW50ZWVzIGJ5IHNraWxscywgZ29hbHMsIGFuZCBhdmFpbGFiaWxpdHkgd2l0aCBjb25maWd1cmFibGUgbWF0Y2hpbmcgcnVsZXMgZm9yIGV2ZXJ5IHByb2dyYW0uPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50NS5wbmciIGFsdD0iUmVjb21tZW5kYXRpb25zIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmZWF0dXJlLXRpdGxlIj5TZXNzaW9uIFNjaGVkdWxpbmc8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmZWF0dXJlLWRlc2NyaXB0aW9uIj5Db29yZGluYXRlIDE6MXMgYW5kIGdyb3VwIHNlc3Npb25zIHdpdGggdGltZXpvbmUtYXdhcmUgc2NoZWR1bGluZywgcmVtaW5kZXJzLCBhbmQgaW50ZWdyYXRlZCBhZ2VuZGFzLjwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDYucG5nIiBhbHQ9IkFuYWx5dGljcyBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZmVhdHVyZS10aXRsZSI+UHJvZ3Jlc3MgVHJhY2tpbmc8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmZWF0dXJlLWRlc2NyaXB0aW9uIj5UcmFjayBtZW50ZWUgbWlsZXN0b25lcywgZ29hbHMsIGFuZCBmZWVkYmFjayBsb29wcyB3aXRoIGRhc2hib2FyZHMgdGhhdCBzaG93IHRhbmdpYmxlIGdyb3d0aCBvdmVyIHRpbWUuPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBLZWVwIGV4aXN0aW5nIHF1aWNrIGFwcHMgYnV0IHN0eWxlIHRoZW0gYmV0dGVyIC0tPgoKICAgICAgICAgICAgPCEtLSBIb3cgSXQgV29ya3MgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaG93LWl0LXdvcmtzLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJob3ctaXQtd29ya3MtdGl0bGUiPkhvdyBJdCBXb3JrczwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaG93LWl0LXdvcmtzLXN1YnRpdGxlIj5MYXVuY2ggYW5kIHJ1biBtZW50b3JzaGlwIHByb2dyYW1zIGluIHRocmVlIHNpbXBsZSBzdGVwczwvcD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbnVtYmVyIj4wMTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQ3LnBuZyIgYWx0PSJJbnB1dCBEYXRhIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InN0ZXAtdGl0bGUiPlNldCBVcCBZb3VyIFByb2dyYW08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ic3RlcC1kZXNjcmlwdGlvbiI+RGVmaW5lIHByb2dyYW0gZ29hbHMsIGNvaG9ydHMsIG1lbnRvciBwcm9maWxlcywgYW5kIHRoZSBza2lsbHMgb3IgY2FyZWVyIHBhdGhzIHlvdSB3YW50IHRvIGFjY2VsZXJhdGUuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWFycm93Ij7ihpI8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1udW1iZXIiPjAyPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDgucG5nIiBhbHQ9IkFuYWx5emUgSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0ic3RlcC10aXRsZSI+TWF0Y2ggJiBTY2hlZHVsZTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJzdGVwLWRlc2NyaXB0aW9uIj5NYXRjaCBtZW50b3JzIGFuZCBtZW50ZWVzIGludGVsbGlnZW50bHksIHRoZW4gc2NoZWR1bGUgcmVjdXJyaW5nIHNlc3Npb25zIHdpdGggcmVtaW5kZXJzIGFuZCBzaGFyZWQgYWdlbmRhcy48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtYXJyb3ciPuKGkjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLW51bWJlciI+MDM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50OS5wbmciIGFsdD0iUmVkdWNlIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InN0ZXAtdGl0bGUiPlRyYWNrIEdyb3d0aDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJzdGVwLWRlc2NyaXB0aW9uIj5Nb25pdG9yIHByb2dyZXNzLCBjb2xsZWN0IHBvc3Qtc2Vzc2lvbiBmZWVkYmFjaywgYW5kIHNoYXJlIG91dGNvbWVzIHdpdGggc3Rha2Vob2xkZXJzIHRvIGtlZXAgcHJvZ3JhbXMgaW1wcm92aW5nLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEVuZGxlc3MgUG9zc2liaWxpdGllcyBTZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbmRsZXNzLXBvc3NpYmlsaXRpZXMtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImVuZGxlc3MtdGl0bGUiPk1lbnRvcnNoaXAgUHJvZ3JhbXM8L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImVuZGxlc3Mtc3VidGl0bGUiPlVzZSBjYXNlcyBhY3Jvc3MgdGVhbXMsIHNjaG9vbHMsIGFuZCBjb21tdW5pdGllczwvcD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0aWVzLWdyaWQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0eS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50MTAucG5nIiBhbHQ9IlRyYW5zcG9ydGF0aW9uIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvc3NpYmlsaXR5LXRpdGxlIj5DYXJlZXIgR3Jvd3RoPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InBvc3NpYmlsaXR5LWRlc2NyaXB0aW9uIj5TdXBwb3J0IG1lbnRlZXMgd2l0aCBjYXJlZXIgbmF2aWdhdGlvbiwgc2tpbGwtYnVpbGRpbmcsIGFuZCBhY2NvdW50YWJpbGl0eSBmb3IgbmV4dC1zdGVwIHJvbGVzLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zc2liaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxMi5wbmciIGFsdD0iRW5lcmd5IEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvc3NpYmlsaXR5LXRpdGxlIj5MZWFkZXJzaGlwIENvYWNoaW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InBvc3NpYmlsaXR5LWRlc2NyaXB0aW9uIj5QYWlyIGVtZXJnaW5nIGxlYWRlcnMgd2l0aCBleHBlcmllbmNlZCBtZW50b3JzIHRvIHN0cmVuZ3RoZW4gZGVjaXNpb24tbWFraW5nLCBjb21tdW5pY2F0aW9uLCBhbmQgZXhlY3V0aXZlIHByZXNlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zc2liaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxMy5wbmciIGFsdD0iRm9vZCBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJwb3NzaWJpbGl0eS10aXRsZSI+VGVjaG5pY2FsIFVwc2tpbGxpbmc8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icG9zc2liaWxpdHktZGVzY3JpcHRpb24iPlJ1biBzdHJ1Y3R1cmVkIHRyYWNrcyBmb3IgZW5naW5lZXJzLCBkYXRhIHNjaWVudGlzdHMsIGFuZCBkZXNpZ25lcnMgd2l0aCBwcm9qZWN0LWJhc2VkIG1pbGVzdG9uZXMuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zc2liaWxpdHktaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDE2LnBuZyIgYWx0PSJMaWZlc3R5bGUgSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0icG9zc2liaWxpdHktdGl0bGUiPk9uYm9hcmRpbmcgJiBSZXRlbnRpb248L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icG9zc2liaWxpdHktZGVzY3JpcHRpb24iPkJsZW5kIG1lbnRvcnNoaXAgaW50byBvbmJvYXJkaW5nIGFuZCBidWRkeSBwcm9ncmFtcyB0byBpbmNyZWFzZSBlbmdhZ2VtZW50IGFuZCByZXRlbnRpb24uPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvcHVsYXItcHJvbXB0cy1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvcHVsYXItcHJvbXB0cy10aXRsZSI+UXVpY2sgUmVxdWVzdHM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3B1bGFyLXByb21wdHMtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwb3B1bGFyLXByb21wdC1idG4iPiJDYXJlZXIgc3dpdGNoIHBsYW4iPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwb3B1bGFyLXByb21wdC1idG4iPiJMZWFkZXJzaGlwIGNvYWNoaW5nIHRyYWNrIjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icG9wdWxhci1wcm9tcHQtYnRuIj4iUGVlciBtZW50b3JpbmcgY2lyY2xlIjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icG9wdWxhci1wcm9tcHQtYnRuIj4iT25ib2FyZGluZyBidWRkeSBzeXN0ZW0iPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwb3B1bGFyLXByb21wdC1idG4iPiJEaXZlcnNpdHkgbWVudG9yc2hpcCI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InBvcHVsYXItcHJvbXB0LWJ0biI+IkV4ZWN1dGl2ZSBzaGFkb3dpbmciPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTZWUgSXQgSW4gQWN0aW9uIFNlY3Rpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlZS1pdC1pbi1hY3Rpb24tc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImFjdGlvbi10aXRsZSI+U2VlIEhvdyBJdCBXb3JrczwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYWN0aW9uLXN1YnRpdGxlIj5FeHBsb3JlIG1hdGNoaW5nLCBzY2hlZHVsaW5nLCBhbmQgcHJvZ3Jlc3MgdHJhY2tpbmcgaW4gb25lIHBsYWNlPC9wPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVtby10YWIgYWN0aXZlIiBkYXRhLXRhYj0icmVhY3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxOC5wbmciIGFsdD0iU3VydmV5IEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi10ZXh0Ij5NZW50b3IgTWF0Y2hpbmc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlbW8tdGFiIiBkYXRhLXRhYj0icHl0aG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50MTkucG5nIiBhbHQ9IkFuYWx5dGljcyBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItdGV4dCI+UHJvZ3Jlc3MgVHJhY2tpbmc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlbW8tdGFiIiBkYXRhLXRhYj0ibW9iaWxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50MjEucG5nIiBhbHQ9Ikluc2lnaHRzIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi10ZXh0Ij5TZXNzaW9uIFNjaGVkdWxlcjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBSZWFjdCBDb21wb25lbnQgRGVtbyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXBhbmUgYWN0aXZlIiBpZD0icmVhY3QtZGVtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcHJvbXB0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb21wdC1pY29uIj7wn5OLPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4iTWF0Y2ggbWVudG9ycyBhbmQgbWVudGVlcyBieSBnb2Fscywgc2tpbGxzLCB0aW1lem9uZXMsIGFuZCBwcm9ncmFtIHByZWZlcmVuY2VzIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29kZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZG90cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgcmVkIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgeWVsbG93Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgZ3JlZW4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29kZS10aXRsZSI+TWF0Y2hpbmcgRGFzaGJvYXJkPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIj7wn5SOIFZpZXc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1pbWFnZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwLzItMS5wbmciIGFsdD0iU3VydmV5IFByZXZpZXciIGNsYXNzPSJjb2RlLWltYWdlIGxhenkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFB5dGhvbiBBUEkgRGVtbyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXBhbmUiIGlkPSJweXRob24tZGVtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcHJvbXB0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb21wdC1pY29uIj7wn5OKPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4iVHJhY2sgbWVudGVlIHByb2dyZXNzLCBnb2FscywgYW5kIHNlc3Npb24gb3V0Y29tZXMgd2l0aCBhdXRvbWF0ZWQgc3VtbWFyaWVzIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29kZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZG90cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgcmVkIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgeWVsbG93Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgZ3JlZW4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29kZS10aXRsZSI+UHJvZ3Jlc3MgQW5hbHl0aWNzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIj7wn5SOIFZpZXc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1pbWFnZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwLzEtMS5wbmciIGFsdD0iU2VudGltZW50IFByZXZpZXciIGNsYXNzPSJjb2RlLWltYWdlIGxhenkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE1vYmlsZSBVSSBEZW1vIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcGFuZSIgaWQ9Im1vYmlsZS1kZW1vIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1wcm9tcHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbXB0LWljb24iPvCfkqE8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiJBdXRvbWF0ZSBzZXNzaW9uIHNjaGVkdWxpbmcsIHJlbWluZGVycywgYW5kIGZvbGxvdy11cHMgZm9yIG1lbnRvcnMgYW5kIG1lbnRlZXMiPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb2RlLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1kb3RzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRvdCByZWQiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRvdCB5ZWxsb3ciPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRvdCBncmVlbiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2RlLXRpdGxlIj5TY2hlZHVsaW5nIE1vYmlsZSBWaWV3PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIj7wn5SOIFZpZXc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1wcmV2aWV3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtbW9ja3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3NzLnBuZyIgYWx0PSJJbnNpZ2h0cyBQcmV2aWV3IiBjbGFzcz0iY29kZS1pbWFnZSBsYXp5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIE1vcmUgQ2FwYWJpbGl0aWVzIFNlY3Rpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vcmUtY2FwYWJpbGl0aWVzLXNlY3Rpb24iPgoKICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0ibW9yZS10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtd2hpdGUiPk1lbnRvcnNoaXAgPC9wPnByb2dyYW1zIG1hZGUgc2ltcGxlCiAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1vcmUtc3VidGl0bGUiPkV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gbWF0Y2gsIHNjaGVkdWxlLCBhbmQgdHJhY2sgbWVudG9yc2hpcCBzdWNjZXNzIHdpdGggY2xlYXIgb3V0Y29tZXMuPC9wPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdGllcy1ncmlkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWljb24gd2ViLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEiLz48Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIxIi8+PGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIxIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImNhcGFiaWxpdHktdGl0bGUiPk1hdGNoaW5nIEVuZ2luZTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJjYXBhYmlsaXR5LWRlc2NyaXB0aW9uIj5SdWxlcy1iYXNlZCBhbmQgQUktYXNzaXN0ZWQgbWF0Y2hpbmcgYWNyb3NzIHNraWxscywgZ29hbHMsIGFuZCBhdmFpbGFiaWxpdHkgZm9yIGFueSBjb2hvcnQgc2l6ZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktaWNvbiBweXRob24taWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBvbHlsaW5lIHBvaW50cz0iMTIgMyAyMCA3LjUgMjAgMTYuNSAxMiAyMSA0IDE2LjUgNCA3LjUgMTIgMyIvPjxwb2x5bGluZSBwb2ludHM9IjEyIDEyIDIwIDcuNSIvPjxwb2x5bGluZSBwb2ludHM9IjEyIDEyIDEyIDIxIi8+PHBvbHlsaW5lIHBvaW50cz0iMTIgMTIgNCA3LjUiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iY2FwYWJpbGl0eS10aXRsZSI+UHJvZ3Jlc3MgQW5hbHl0aWNzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcGFiaWxpdHktZGVzY3JpcHRpb24iPkRhc2hib2FyZHMgdGhhdCBjYXB0dXJlIHNlc3Npb24gbm90ZXMsIGdvYWxzLCBhbmQgb3V0Y29tZXMgdG8gcHJvdmUgcHJvZ3JhbSBpbXBhY3QuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWljb24gZGF0YS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjlNMTMgMTd2LTRNOCAxN3YtMiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJjYXBhYmlsaXR5LXRpdGxlIj5Hb2FsIE1pbGVzdG9uZXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FwYWJpbGl0eS1kZXNjcmlwdGlvbiI+TWlsZXN0b25lIHRlbXBsYXRlcyBhbmQgY2hlY2staW5zIHRoYXQga2VlcCBtZW50b3JzIGFuZCBtZW50ZWVzIGFjY291bnRhYmxlIHRvIHRpbWVsaW5lcy48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktaWNvbiBhcGktaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6Ii8+PHBvbHlsaW5lIHBvaW50cz0iMjIgNiAxMiAxMyAyIDYiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iY2FwYWJpbGl0eS10aXRsZSI+UmVzb3VyY2UgTGlicmFyeTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJjYXBhYmlsaXR5LWRlc2NyaXB0aW9uIj5DZW50cmFsaXplIHBsYXlib29rcywgdGVtcGxhdGVzLCBhbmQgbGVhcm5pbmcgcGF0aHMgdG8gc3VwcG9ydCBldmVyeSBzZXNzaW9uLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1pY29uIG1vYmlsZS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cmVjdCB4PSI1IiB5PSIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMjAiIHJ4PSIyIiByeT0iMiIvPjxsaW5lIHgxPSIxMiIgeTE9IjE4IiB4Mj0iMTIuMDEiIHkyPSIxOCIvPjwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJjYXBhYmlsaXR5LXRpdGxlIj5Nb2JpbGUgQ2hlY2staW5zPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcGFiaWxpdHktZGVzY3JpcHRpb24iPk9uLXRoZS1nbyBhZ2VuZGFzLCByZW1pbmRlcnMsIGFuZCBmZWVkYmFjayBmb3JtcyB0aGF0IGtlZXAgbWVudG9ycyBhbmQgbWVudGVlcyBhbGlnbmVkLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1pY29uIGRldm9wcy1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTIgMjJzOC00IDgtMTBWNWwtOC0zLTggM3Y3YzAgNiA4IDEwIDggMTB6Ii8+PHBvbHlsaW5lIHBvaW50cz0iMTAgMTIgMTIgMTQgMTQgMTIiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iY2FwYWJpbGl0eS10aXRsZSI+UHJvZ3JhbSBDb2xsYWJvcmF0aW9uPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcGFiaWxpdHktZGVzY3JpcHRpb24iPlByb2dyYW0gbWFuYWdlcnMsIGNvYWNoZXMsIGFuZCBtZW50b3JzIGNvbGxhYm9yYXRlIG9uIGluc2lnaHRzLCBub3RlcywgYW5kIG5leHQgc3RlcHMgaW4gb25lIHdvcmtzcGFjZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIENsaWVudCBUZXN0aW1vbmlhbHMgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG92ZWQtYnktZGV2ZWxvcGVycy1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0ibG92ZWQtdGl0bGUiPlRydXN0ZWQgYnkgUHJvZ3JhbSBMZWFkczwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibG92ZWQtc3VidGl0bGUiPlRlYW1zIHJ1bm5pbmcgbWVudG9yc2hpcCBhdCBzY2FsZSBmb3IgZW1wbG95ZWVzLCBzdHVkZW50cywgZm91bmRlcnMsIGFuZCBjb21tdW5pdGllczwvcD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXN0aW1vbmlhbC1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRlc3RpbW9uaWFsLW5hdiBwcmV2LWJ0biIgaWQ9InByZXZCdG4iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSAxOEw5IDEyTDE1IDYiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtY2FyZCBhY3RpdmUiIGRhdGEtdGVzdGltb25pYWw9IjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXN0aW1vbmlhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtYXZhdGFyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTU0NDAwNTMxMy05NGRkZjAyODZkZjI/dz00MDAmaD00MDAmZml0PWNyb3AmYXV0bz1mb3JtYXQmcT04MCZpeGxpYj1yYi00LjAuMyZzPXBsYWNlaG9sZGVyIiBhbHQ9IkVtbWEgSm9obnNvbiIgY2xhc3M9ImF2YXRhci1pbWcgbGF6eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlc3RpbW9uaWFsLXJhdGluZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXIiPuKtkDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhciI+4q2QPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGFyIj7irZA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXIiPuKtkDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhciI+4q2QPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9InRlc3RpbW9uaWFsLXF1b3RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZW50b3JMaW5rIGxldCB1cyBtYXRjaCA0MDArIG1lbnRvcnMgYW5kIG1lbnRlZXMgaW4gdW5kZXIgYSB3ZWVrLiBDb21wbGV0aW9uIHJhdGVzIGp1bXBlZCAzMCUgYmVjYXVzZSBzY2hlZHVsaW5nIGFuZCByZW1pbmRlcnMganVzdCB3b3JrZWQuIiAKICAgICAgICAgICAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtYXV0aG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0iYXV0aG9yLW5hbWUiPlByaXlhIERlc2FpPC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJhdXRob3Itcm9sZSI+UHJvZ3JhbSBEaXJlY3RvcjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJhdXRob3ItY29tcGFueSI+R3Jvd3RoUGF0aCBGZWxsb3dzaGlwPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGVzdGltb25pYWwtbmF2IG5leHQtYnRuIiBpZD0ibmV4dEJ0biI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkgMThMMTUgMTJMOSA2IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXN0aW1vbmlhbC1kb3RzIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3QgYWN0aXZlIiBkYXRhLXNsaWRlPSIwIj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3QiIGRhdGEtc2xpZGU9IjEiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvdCIgZGF0YS1zbGlkZT0iMiI+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG90IiBkYXRhLXNsaWRlPSIzIj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3QiIGRhdGEtc2xpZGU9IjQiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1udW1iZXIiPjEwLDAwMCs8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPlByb2dyYW1zIExhdW5jaGVkPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1udW1iZXIiPjUwMEs8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPlNlc3Npb25zIFNjaGVkdWxlZDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbnVtYmVyIj40LjnimIU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPk1lbnRvciBTYXRpc2ZhY3Rpb248L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmVhZHkgdG8gQ29kZSBGYXN0ZXIgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVhZHktdG8tY29kZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN0YS1pY29uIj7wn46vPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJjdGEtdGl0bGUiPlJlYWR5IHRvIGxhdW5jaCB5b3VyIG1lbnRvcnNoaXAgcHJvZ3JhbT88L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY3RhLXN1YnRpdGxlIj5NYXRjaCBtZW50b3JzIGFuZCBtZW50ZWVzLCBhdXRvbWF0ZSBzY2hlZHVsaW5nLCBhbmQgc2hvdyBtZWFzdXJhYmxlIGdyb3d0aCBmcm9tIGRheSBvbmUuPC9wPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmVzLWNoZWNrbGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hlY2staWNvbiIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2LjY2NjcgNUw3LjUgMTQuMTY2N0wzLjMzMzM0IDEwIiBzdHJva2U9IiM0QTkwRTIiIHN0cm9rZS13aWR0aD0iMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYXRjaCBtZW50b3JzIGFuZCBtZW50ZWVzIGluc3RhbnRseTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJjaGVjay1pY29uIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTYuNjY2NyA1TDcuNSAxNC4xNjY3TDMuMzMzMzQgMTAiIHN0cm9rZT0iIzRBOTBFMiIgc3Ryb2tlLXdpZHRoPSIyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkF1dG9tYXRlIHNjaGVkdWxpbmcgYW5kIHJlbWluZGVyczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJjaGVjay1pY29uIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTYuNjY2NyA1TDcuNSAxNC4xNjY3TDMuMzMzMzQgMTAiIHN0cm9rZT0iIzRBOTBFMiIgc3Ryb2tlLXdpZHRoPSIyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRyYWNrIG1pbGVzdG9uZXMgYW5kIG91dGNvbWVzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNoZWNrLWljb24iIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi42NjY3IDVMNy41IDE0LjE2NjdMMy4zMzMzNCAxMCIgc3Ryb2tlPSIjNEE5MEUyIiBzdHJva2Utd2lkdGg9IjIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2hhcmUgaW1wYWN0IHdpdGggc3Rha2Vob2xkZXJzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3RhLWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0YS1wcmltYXJ5LWJ0biIgaWQ9ImN0YUdldFN0YXJ0ZWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy44MjUgNi45MTY2OUwxMCAzLjA5MTY5TDYuMTc1IDYuOTE2NjkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAgMy4wOTE2OVYxNi45MDg0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgTGF1bmNoIGEgTWVudG9yc2hpcCBQcm9ncmFtCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3RhLXNlY29uZGFyeS1idG4iIGlkPSJjdGFMaXZlRGVtbyI+VmlldyBQcm9ncmFtIFBsYXlib29rczwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHJ1c3QtYmFkZ2VzIj4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idHJ1c3QtdGV4dCI+VHJ1c3RlZCBieSB1bml2ZXJzaXRpZXMsIGVudGVycHJpc2VzLCBhY2NlbGVyYXRvcnMsIGFuZCBub25wcm9maXRzPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbXBhbnktbG9nb3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29tcGFueS1sb2dvIj5DYW1wdXNIdWI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPlN0YXJ0dXBMYWI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPkdsb2JhbFdvcmtzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29tcGFueS1sb2dvIj5MZWFkRm9yd2FyZDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbXBhbnktbG9nbyI+U2tpbGxSaXNlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29tcGFueS1sb2dvIj5OZXh0R2VuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L21haW4+CiAgICA8L2Rpdj4KCiAgICA8IS0tIE1haW4gYXBwbGljYXRpb24gY29udGFpbmVyIHdpdGggY2hhdCBhbmQgc2FuZHBhY2sgLS0+CiAgICA8ZGl2IGNsYXNzPSJhcHAtY29udGFpbmVyIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgIDwhLS0gQ2hhdCBpbnRlcmZhY2UgLS0+CiAgICAgICAgPGRpdiBpZD0iY2hhdEludGVyZmFjZSIgY2xhc3M9ImNoYXQtaW50ZXJmYWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdC1jb250YWluZXIiIGlkPSJjaGF0Q29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDwhLS0gTWVzc2FnZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaGVyZSAtLT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLWJveCIgaWQ9ImxvYWRpbmdCb3giIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aWNsZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aWNsZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aWNsZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aWNsZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW1lc3NhZ2UiPkNvbWluZyB1cCB3aXRoIHJlc3BvbnNlLCBtYXkgdGFrZSBhIG1pbnV0ZS4uLjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFBlcnNpc3RlbnQgY2hhdCBpbnB1dCB0aGF0IHNob3VsZCBhbHdheXMgYmUgdmlzaWJsZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdC1pbnB1dC1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LW91dGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtaW5uZXItY29udGFpbmVyIHZlcnRpY2FsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJwcm9tcHQtaW5wdXQgY2hhdC1wcm9tcHQtaW5wdXQiIHBsYWNlaG9sZGVyPSJBc2sgZm9yIGNvZGUgY2hhbmdlcy4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9IjEiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWNvbnRyb2xzLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9ImF0dGFjaC1idG4gc3F1YXJlIiB0aXRsZT0iQXR0YWNoIj48c3Bhbj7wn5OOPC9zcGFuPjwvYnV0dG9uPiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1YWxpdHktc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InF1YWxpdHlTZWxlY3RDaGF0IiBjbGFzcz0icXVhbGl0eS1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN0YW5kYXJkIj4gU1E8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaGlnaGVyIj4gSFE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWFsaXR5LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idG9vbHRpcC1pY29uIj48aSBjbGFzcz0iZmEtc29saWQgZmEtY2lyY2xlLWluZm8iPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2x0aXAtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlN0YW5kYXJkOjwvc3Ryb25nPiBRdWljayBnZW5lcmF0aW9uIHdpdGggZ29vZCBxdWFsaXR5PGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5IaWdoZXI6PC9zdHJvbmc+IEFyY2hpdGVjdHVyYWwgcGxhbm5pbmcgKyBwcmVtaXVtIGNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InN1Ym1pdC1idG4gY2hhdC1zdWJtaXQtYnRuIiB0aXRsZT0iU3VibWl0Ij48c3Bhbj7inpQ8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFNhbmRwYWNrIGNvbnRhaW5lciAtIHNlcGFyYXRlIGZyb20gY2hhdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzYW5kcGFjay13cmFwcGVyIiBpZD0ic2FuZHBhY2tXcmFwcGVyIj4KICAgICAgICAgICAgPCEtLSBUb2dnbGUgYnV0dG9ucyBmb3IgQ29kZS9QcmV2aWV3IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRvZ2dsZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY29kZVRvZ2dsZSIgY2xhc3M9InZpZXctdG9nZ2xlLWJ0biI+Q29kZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0icHJldmlld1RvZ2dsZSIgY2xhc3M9InZpZXctdG9nZ2xlLWJ0biBhY3RpdmUiPlByZXZpZXc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InJvb3QiIGNsYXNzPSJzYW5kcGFjay1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgICA8IS0tIExvYWRpbmcgb3ZlcmxheSBmb3IgU2FuZHBhY2sgYXJlYSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5IiBpZD0ic2FuZHBhY2tMb2FkaW5nT3ZlcmxheSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhpdGVjaC1sb2FkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbWF0cml4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0cml4LWxpbmUiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRyaXgtbGluZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdHJpeC1saW5lIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0cml4LWxpbmUiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRyaXgtbGluZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2VudHJhbC1jb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29yZS1yaW5nIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29yZS1yaW5nIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29yZS1yaW5nIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29yZS1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHVsc2UtZG90Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YS1zdHJlYW1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyZWFtIHN0cmVhbS0xIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyZWFtIHN0cmVhbS0yIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyZWFtIHN0cmVhbS0zIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyZWFtIHN0cmVhbS00Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnZW9tZXRyaWMtcGF0dGVybnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXgtcGF0dGVybiI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhleC1wYXR0ZXJuIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGV4LXBhdHRlcm4iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW1lc3NhZ2UiPkNvbWluZyB1cCB3aXRoIHJlc3BvbnNlLCBtYXkgdGFrZSBhIG1pbnV0ZS4uLjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKCgogICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+CiAgICAgICAgICAgIEJ1aWx0IHdpdGggPGEgaHJlZj0iIyI+Q29kaW5nIEFJPC9hPiBhbmQgPGEgaHJlZj0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vIj48c3BhbiBjbGFzcz0iZ3JhZGllbnQtdGV4dCI+V3JpdGVjcmVhbSBBSTwvc3Bhbj48L2E+LgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1yaWdodCI+CiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj0iIyIgY2xhc3M9ImZvb3Rlci1pY29uIiB0aXRsZT0iVHdpdHRlciI+8J+QpjwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImZvb3Rlci1pY29uIiB0aXRsZT0iR2l0SHViIj7wn5CZPC9hPiAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZm9vdGVyPgoKPGRpdiBpZD0ibmV0bGlmeVRva2VuTW9kYWwiIGNsYXNzPSJtb2RhbCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxzcGFuIGNsYXNzPSJjbG9zZS1tb2RhbCIgb25jbGljaz0iY2xvc2VOZXRsaWZ5VG9rZW5Nb2RhbCgpIj7Dlzwvc3Bhbj4KICAgICAgICA8aDI+U2V0IE5ldGxpZnkgUGVyc29uYWwgQWNjZXNzIFRva2VuPC9oMj4KICAgICAgICA8cD5FbnRlciB5b3VyIE5ldGxpZnkgUEFUIHRvIGRlcGxveSB1c2luZyB5b3VyIGFjY291bnQuIElmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHRva2VuIHdpbGwgYmUgdXNlZC48L3A+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJuZXRsaWZ5VG9rZW5JbnB1dCIgcGxhY2Vob2xkZXI9IkVudGVyIHlvdXIgTmV0bGlmeSBQQVQiIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTBweDsgbWFyZ2luOiAxMHB4IDA7Ij4KICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InN1Ym1pdE5ldGxpZnlUb2tlbigpIj5TdWJtaXQ8L2J1dHRvbj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gSmF2YVNjcmlwdCBtb3ZlZCB0byBlbmQgb2YgZmlsZSAtLT4KCjwhLS0gQWxsIEphdmFTY3JpcHQgbW92ZWQgdG8gZW5kIG9mIGZpbGUgLS0+Cgo8IS0tIEpTWmlwIGZvciBmaWxlIGRvd25sb2FkcyAtLT4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2pzemlwLzMuMTAuMS9qc3ppcC5taW4uanMiPjwvc2NyaXB0PgoKPCEtLSBDT05GSUcgSmF2YVNjcmlwdCAtLT4KPHNjcmlwdD4KLy8gQ29uZmlndXJhdGlvbiBmaWxlIGZvciBMYW1iZGEgaW50ZWdyYXRpb24KLy8gVXBkYXRlIHRoZSBMQU1CREFfQkFTRV9VUkwgd2l0aCB5b3VyIGFjdHVhbCBMYW1iZGEgZnVuY3Rpb24gVVJMCgpjb25zdCBDT05GSUcgPSB7CiAgLy8gUmVwbGFjZSB0aGlzIHdpdGggeW91ciBhY3R1YWwgTGFtYmRhIGZ1bmN0aW9uIFVSTAogIExBTUJEQV9CQVNFX1VSTDogJ2h0dHBzOi8vN2xjNzdiaDVoYWtmbG9oM292enh0YXR2Y2EwZWxrcWwubGFtYmRhLXVybC51cy1lYXN0LTEub24uYXdzJywKICAKICAvLyBBUEkgZW5kcG9pbnRzCiAgRU5EUE9JTlRTOiB7CiAgICBERVBMT1lfTkVUTElGWTogJy9hcGkvZGVwbG95LW5ldGxpZnknLAogICAgQVJDSElURUNUOiAnL2FwaS9hcmNoaXRlY3QnLAogICAgT1BFTkFJOiAnL2FwaS9vcGVuYWknLAogICAgTU9ESUZZOiAnL2FwaS9tb2RpZnknLAogICAgQ09OVEVYVF9TRVNTSU9OOiAnL2FwaS9jb250ZXh0L3Nlc3Npb24nLAogICAgQ09OVEVYVF9IRUFMVEg6ICcvYXBpL2NvbnRleHQvaGVhbHRoJwogIH0sCiAgCiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBmdWxsIEFQSSBVUkwKICBnZXRBcGlVcmw6IGZ1bmN0aW9uKGVuZHBvaW50KSB7CiAgICByZXR1cm4gdGhpcy5MQU1CREFfQkFTRV9VUkwgKyBlbmRwb2ludDsKICB9Cn07CgovLyBFeHBvcnQgZm9yIHVzZSBpbiBvdGhlciBmaWxlcwppZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKICBtb2R1bGUuZXhwb3J0cyA9IENPTkZJRzsKfSBlbHNlIHsKICB3aW5kb3cuQ09ORklHID0gQ09ORklHOwp9Cjwvc2NyaXB0PgoKPCEtLSBNYWluIEFwcGxpY2F0aW9uIEphdmFTY3JpcHQgLS0+CjxzY3JpcHQ+IAovLyBFbmhhbmNlZCBQZXJzaXN0ZW5jZSBNYW5hZ2VyCmNsYXNzIEVuaGFuY2VkUGVyc2lzdGVuY2VNYW5hZ2VyIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuc3RvcmFnZUtleXMgPSB7CiAgICAgIENIQVRfSElTVE9SWTogJ3dlYmJ1aWxkZXJfY2hhdF9oaXN0b3J5JywKICAgICAgVEVNUExBVEU6ICd3ZWJidWlsZGVyX3RlbXBsYXRlJywKICAgICAgUVVBTElUWV9TRVRUSU5HOiAnd2ViYnVpbGRlcl9xdWFsaXR5JywKICAgICAgVUlfU1RBVEU6ICd3ZWJidWlsZGVyX3VpX3N0YXRlJywKICAgICAgVklFV19UT0dHTEVfU1RBVEU6ICd3ZWJidWlsZGVyX3ZpZXdfdG9nZ2xlX3N0YXRlJywKICAgICAgQ1VSUkVOVF9VU0VDQVNFOiAnd2ViYnVpbGRlcl9jdXJyZW50X3VzZWNhc2UnLAogICAgICBDT05URVhUX01FVEFEQVRBOiAnd2ViYnVpbGRlcl9jb250ZXh0X21ldGFkYXRhJwogICAgfTsKICAgIAogICAgdGhpcy5jb250ZXh0VmFsaWRhdGlvbiA9IHsKICAgICAgbWF4Q2hhdEhpc3RvcnlTaXplOiA1MCwKICAgICAgbWF4Q29kZUZpbGVTaXplOiAxMDI0ICogMTAyNCwKICAgICAgY29udGV4dEV4cGlyeUhvdXJzOiAyNAogICAgfTsKICB9CgogIC8vIEVuaGFuY2VkIGNoYXQgaGlzdG9yeSB3aXRoIHZhbGlkYXRpb24gYW5kIHVzZWNhc2UgYXdhcmVuZXNzCiAgc2F2ZUNoYXRIaXN0b3J5KHByb21wdHMsIHVzZWNhc2UgPSAnZGVmYXVsdCcpIHsKICAgIHRyeSB7CiAgICAgIC8vIFZhbGlkYXRlIGFuZCBjbGVhbiBwcm9tcHRzCiAgICAgIGNvbnN0IHZhbGlkYXRlZFByb21wdHMgPSB0aGlzLnZhbGlkYXRlQ2hhdEhpc3RvcnkocHJvbXB0cyk7CiAgICAgIAogICAgICAvLyBTYXZlIHdpdGggbWV0YWRhdGEKICAgICAgY29uc3QgY2hhdERhdGEgPSB7CiAgICAgICAgcHJvbXB0czogdmFsaWRhdGVkUHJvbXB0cywKICAgICAgICB1c2VjYXNlOiB1c2VjYXNlLAogICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICB2ZXJzaW9uOiAnMi4wJyAvLyBWZXJzaW9uIHRyYWNraW5nIGZvciBmdXR1cmUgbWlncmF0aW9ucwogICAgICB9OwogICAgICAKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DSEFUX0hJU1RPUlksIEpTT04uc3RyaW5naWZ5KGNoYXREYXRhKSk7CiAgICAgIAogICAgICAvLyBVcGRhdGUgY29udGV4dCBtZXRhZGF0YQogICAgICB0aGlzLnVwZGF0ZUNvbnRleHRNZXRhZGF0YSh7CiAgICAgICAgbGFzdENoYXRTYXZlOiBEYXRlLm5vdygpLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgcHJvbXB0Q291bnQ6IHZhbGlkYXRlZFByb21wdHMubGVuZ3RoCiAgICAgIH0pOwogICAgICAKICAgICAgY29uc29sZS5sb2coYPCfkr4gU2F2ZWQgJHt2YWxpZGF0ZWRQcm9tcHRzLmxlbmd0aH0gY2hhdCBtZXNzYWdlcyBmb3IgdXNlY2FzZTogJHt1c2VjYXNlfWApOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBjaGF0IGhpc3Rvcnk6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gRW5oYW5jZWQgY2hhdCBoaXN0b3J5IGxvYWRpbmcgd2l0aCB2YWxpZGF0aW9uCiAgbG9hZENoYXRIaXN0b3J5KGV4cGVjdGVkVXNlY2FzZSA9IG51bGwpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DSEFUX0hJU1RPUlkpOwogICAgICBpZiAoIXNhdmVkKSByZXR1cm4gW107CiAgICAgIAogICAgICBjb25zdCBjaGF0RGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogICAgICAKICAgICAgLy8gSGFuZGxlIGxlZ2FjeSBmb3JtYXQgKGFycmF5IG9mIHByb21wdHMpCiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXREYXRhKSkgewogICAgICAgIGNvbnNvbGUubG9nKCfwn5OmIE1pZ3JhdGluZyBsZWdhY3kgY2hhdCBoaXN0b3J5IGZvcm1hdCcpOwogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ2hhdEhpc3RvcnkoY2hhdERhdGEpOwogICAgICB9CiAgICAgIAogICAgICAvLyBWYWxpZGF0ZSBjb250ZXh0IGZyZXNobmVzcwogICAgICBpZiAodGhpcy5pc0NvbnRleHRFeHBpcmVkKGNoYXREYXRhLnRpbWVzdGFtcCkpIHsKICAgICAgICBjb25zb2xlLmxvZygn4o+wIENoYXQgY29udGV4dCBleHBpcmVkLCBjbGVhcmluZy4uLicpOwogICAgICAgIHRoaXMuY2xlYXJDaGF0SGlzdG9yeSgpOwogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICAKICAgICAgLy8gVXNlY2FzZSB2YWxpZGF0aW9uCiAgICAgIGlmIChleHBlY3RlZFVzZWNhc2UgJiYgY2hhdERhdGEudXNlY2FzZSAhPT0gZXhwZWN0ZWRVc2VjYXNlKSB7CiAgICAgICAgY29uc29sZS5sb2coYPCflIQgVXNlY2FzZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtleHBlY3RlZFVzZWNhc2V9LCBmb3VuZCAke2NoYXREYXRhLnVzZWNhc2V9YCk7CiAgICAgICAgLy8gRG9uJ3QgYXV0by1jbGVhciwgYnV0IHdhcm4KICAgICAgfQogICAgICAKICAgICAgY29uc3QgdmFsaWRhdGVkUHJvbXB0cyA9IHRoaXMudmFsaWRhdGVDaGF0SGlzdG9yeShjaGF0RGF0YS5wcm9tcHRzIHx8IFtdKTsKICAgICAgY29uc29sZS5sb2coYPCfk5YgTG9hZGVkICR7dmFsaWRhdGVkUHJvbXB0cy5sZW5ndGh9IGNoYXQgbWVzc2FnZXMgZm9yIHVzZWNhc2U6ICR7Y2hhdERhdGEudXNlY2FzZX1gKTsKICAgICAgCiAgICAgIHJldHVybiB2YWxpZGF0ZWRQcm9tcHRzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjaGF0IGhpc3Rvcnk6JywgZXJyb3IpOwogICAgICByZXR1cm4gW107CiAgICB9CiAgfQoKICAvLyBFbmhhbmNlZCBjb2RlIGZpbGVzIHdpdGggdmFsaWRhdGlvbiBhbmQgdXNlY2FzZSBhd2FyZW5lc3MKICBzYXZlQ29kZUZpbGVzKGNvZGVGaWxlcywgdXNlY2FzZSA9ICdkZWZhdWx0JykgewogICAgdHJ5IHsKICAgICAgLy8gVmFsaWRhdGUgY29kZSBmaWxlcwogICAgICBjb25zdCB2YWxpZGF0ZWRGaWxlcyA9IHRoaXMudmFsaWRhdGVDb2RlRmlsZXMoY29kZUZpbGVzKTsKICAgICAgCiAgICAgIGNvbnN0IGNvZGVEYXRhID0gewogICAgICAgIGZpbGVzOiB2YWxpZGF0ZWRGaWxlcywKICAgICAgICB1c2VjYXNlOiB1c2VjYXNlLAogICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICB2ZXJzaW9uOiAnMi4wJwogICAgICB9OwogICAgICAKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DT0RFX0ZJTEVTLCBKU09OLnN0cmluZ2lmeShjb2RlRGF0YSkpOwogICAgICAKICAgICAgLy8gVXBkYXRlIGNvbnRleHQgbWV0YWRhdGEKICAgICAgdGhpcy51cGRhdGVDb250ZXh0TWV0YWRhdGEoewogICAgICAgIGxhc3RDb2RlU2F2ZTogRGF0ZS5ub3coKSwKICAgICAgICB1c2VjYXNlOiB1c2VjYXNlLAogICAgICAgIGZpbGVDb3VudDogT2JqZWN0LmtleXModmFsaWRhdGVkRmlsZXMpLmxlbmd0aAogICAgICB9KTsKICAgICAgCiAgICAgIGNvbnNvbGUubG9nKGDwn5K+IFNhdmVkICR7T2JqZWN0LmtleXModmFsaWRhdGVkRmlsZXMpLmxlbmd0aH0gY29kZSBmaWxlcyBmb3IgdXNlY2FzZTogJHt1c2VjYXNlfWApOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBjb2RlIGZpbGVzOicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIEVuaGFuY2VkIGNvZGUgZmlsZXMgbG9hZGluZyB3aXRoIHZhbGlkYXRpb24KICBsb2FkQ29kZUZpbGVzKGV4cGVjdGVkVXNlY2FzZSA9IG51bGwpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DT0RFX0ZJTEVTKTsKICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIG51bGw7CiAgICAgIAogICAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogICAgICAKICAgICAgLy8gSGFuZGxlIGxlZ2FjeSBmb3JtYXQgKGRpcmVjdCBmaWxlcyBvYmplY3QpCiAgICAgIGlmICghY29kZURhdGEudmVyc2lvbiAmJiAhY29kZURhdGEudGltZXN0YW1wKSB7CiAgICAgICAgY29uc29sZS5sb2coJ/Cfk6YgTWlncmF0aW5nIGxlZ2FjeSBjb2RlIGZpbGVzIGZvcm1hdCcpOwogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ29kZUZpbGVzKGNvZGVEYXRhKTsKICAgICAgfQogICAgICAKICAgICAgLy8gVmFsaWRhdGUgY29udGV4dCBmcmVzaG5lc3MKICAgICAgaWYgKHRoaXMuaXNDb250ZXh0RXhwaXJlZChjb2RlRGF0YS50aW1lc3RhbXApKSB7CiAgICAgICAgY29uc29sZS5sb2coJ+KPsCBDb2RlIGNvbnRleHQgZXhwaXJlZCwgY2xlYXJpbmcuLi4nKTsKICAgICAgICB0aGlzLmNsZWFyQ29kZUZpbGVzKCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIFVzZWNhc2UgdmFsaWRhdGlvbgogICAgICBpZiAoZXhwZWN0ZWRVc2VjYXNlICYmIGNvZGVEYXRhLnVzZWNhc2UgIT09IGV4cGVjdGVkVXNlY2FzZSkgewogICAgICAgIGNvbnNvbGUubG9nKGDwn5SEIENvZGUgdXNlY2FzZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtleHBlY3RlZFVzZWNhc2V9LCBmb3VuZCAke2NvZGVEYXRhLnVzZWNhc2V9YCk7CiAgICAgIH0KICAgICAgCiAgICAgIGNvbnN0IHZhbGlkYXRlZEZpbGVzID0gdGhpcy52YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRGF0YS5maWxlcyB8fCB7fSk7CiAgICAgIGNvbnNvbGUubG9nKGDwn5OWIExvYWRlZCAke09iamVjdC5rZXlzKHZhbGlkYXRlZEZpbGVzKS5sZW5ndGh9IGNvZGUgZmlsZXMgZm9yIHVzZWNhc2U6ICR7Y29kZURhdGEudXNlY2FzZX1gKTsKICAgICAgCiAgICAgIHJldHVybiB2YWxpZGF0ZWRGaWxlczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgY29kZSBmaWxlczonLCBlcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gU2F2ZSBjdXJyZW50IHRlbXBsYXRlCiAgc2F2ZVRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlRFTVBMQVRFLCB0ZW1wbGF0ZSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIHRlbXBsYXRlOicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIExvYWQgY3VycmVudCB0ZW1wbGF0ZQogIGxvYWRUZW1wbGF0ZSgpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlRFTVBMQVRFKSB8fCAncmVhY3QnOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCB0ZW1wbGF0ZTonLCBlcnJvcik7CiAgICAgIHJldHVybiAncmVhY3QnOwogICAgfQogIH0KCiAgLy8gU2F2ZSBxdWFsaXR5IHNldHRpbmcKICBzYXZlUXVhbGl0eVNldHRpbmcocXVhbGl0eSkgewogICAgdHJ5IHsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5RVUFMSVRZX1NFVFRJTkcsIHF1YWxpdHkpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBxdWFsaXR5IHNldHRpbmc6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCBxdWFsaXR5IHNldHRpbmcKICBsb2FkUXVhbGl0eVNldHRpbmcoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5RVUFMSVRZX1NFVFRJTkcpIHx8ICdzdGFuZGFyZCc7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHF1YWxpdHkgc2V0dGluZzonLCBlcnJvcik7CiAgICAgIHJldHVybiAnc3RhbmRhcmQnOwogICAgfQogIH0KCiAgLy8gU2F2ZSBVSSBzdGF0ZQogIHNhdmVVSVN0YXRlKHVpU3RhdGUpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVUlfU1RBVEUsIEpTT04uc3RyaW5naWZ5KHVpU3RhdGUpKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgVUkgc3RhdGU6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCBVSSBzdGF0ZQogIGxvYWRVSVN0YXRlKCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlVJX1NUQVRFKTsKICAgICAgcmV0dXJuIHNhdmVkID8gSlNPTi5wYXJzZShzYXZlZCkgOiB7IGNoYXRWaXNpYmxlOiBmYWxzZSB9OwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBVSSBzdGF0ZTonLCBlcnJvcik7CiAgICAgIHJldHVybiB7IGNoYXRWaXNpYmxlOiBmYWxzZSB9OwogICAgfQogIH0KCiAgLy8gU2F2ZSB2aWV3IHRvZ2dsZSBzdGF0ZQogIHNhdmVWaWV3VG9nZ2xlU3RhdGUodmlld1N0YXRlKSB7CiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlZJRVdfVE9HR0xFX1NUQVRFLCBKU09OLnN0cmluZ2lmeSh2aWV3U3RhdGUpKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgdmlldyB0b2dnbGUgc3RhdGU6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCB2aWV3IHRvZ2dsZSBzdGF0ZQogIGxvYWRWaWV3VG9nZ2xlU3RhdGUoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVklFV19UT0dHTEVfU1RBVEUpOwogICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IHsgY3VycmVudFZpZXc6ICdjb2RlJyB9OwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCB2aWV3IHRvZ2dsZSBzdGF0ZTonLCBlcnJvcik7CiAgICAgIHJldHVybiB7IGN1cnJlbnRWaWV3OiAnY29kZScgfTsKICAgIH0KICB9CgogIC8vIENsZWFyIGFsbCBzYXZlZCBkYXRhCiAgY2xlYXJBbGwoKSB7CiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3RvcmFnZUtleXMpLmZvckVhY2goa2V5ID0+IHsKICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTsKICAgIH0pOwogIH0KCiAgLy8gQ2xlYXIgYWxsIHNhdmVkIGRhdGEgZXhjZXB0IHRoZW1lIGFuZCB2aWV3IHRvZ2dsZSBzdGF0ZSAoZm9yIEhRIG1vZGUpCiAgY2xlYXJBbGxFeGNlcHRDcml0aWNhbCgpIHsKICAgIGNvbnN0IGtleXNUb1ByZXNlcnZlID0gWwogICAgICB0aGlzLnN0b3JhZ2VLZXlzLlZJRVdfVE9HR0xFX1NUQVRFLAogICAgICAndGhlbWUnIC8vIFByZXNlcnZlIHRoZW1lIGFzIHdlbGwKICAgIF07CiAgICAKICAgIE9iamVjdC52YWx1ZXModGhpcy5zdG9yYWdlS2V5cykuZm9yRWFjaChrZXkgPT4gewogICAgICBpZiAoIWtleXNUb1ByZXNlcnZlLmluY2x1ZGVzKGtleSkpIHsKICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOwogICAgICB9CiAgICB9KTsKICAgIAogICAgY29uc29sZS5sb2coJ/Cfp7kgQ2xlYXJlZCBhbGwgZGF0YSBleGNlcHQgY3JpdGljYWwgc2V0dGluZ3MnKTsKICB9CgogIC8vIEVuaGFuY2VkIHZhbGlkYXRpb24gbWV0aG9kcwogIHZhbGlkYXRlQ2hhdEhpc3RvcnkocHJvbXB0cykgewogICAgaWYgKCFBcnJheS5pc0FycmF5KHByb21wdHMpKSByZXR1cm4gW107CiAgICAKICAgIHJldHVybiBwcm9tcHRzCiAgICAgIC5maWx0ZXIocHJvbXB0ID0+IHByb21wdCAmJiB0eXBlb2YgcHJvbXB0ID09PSAnb2JqZWN0JykKICAgICAgLmZpbHRlcihwcm9tcHQgPT4gcHJvbXB0LnJvbGUgJiYgcHJvbXB0LmNvbnRlbnQpCiAgICAgIC5zbGljZSgtdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDaGF0SGlzdG9yeVNpemUpIC8vIEtlZXAgb25seSByZWNlbnQgbWVzc2FnZXMKICAgICAgLm1hcChwcm9tcHQgPT4gKHsKICAgICAgICByb2xlOiBTdHJpbmcocHJvbXB0LnJvbGUpLnRyaW0oKSwKICAgICAgICBjb250ZW50OiBTdHJpbmcocHJvbXB0LmNvbnRlbnQpLnRyaW0oKQogICAgICB9KSk7CiAgfQoKICB2YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRmlsZXMpIHsKICAgIGlmICghY29kZUZpbGVzIHx8IHR5cGVvZiBjb2RlRmlsZXMgIT09ICdvYmplY3QnKSByZXR1cm4ge307CiAgICAKICAgIGNvbnN0IHZhbGlkYXRlZEZpbGVzID0ge307CiAgICAKICAgIE9iamVjdC5lbnRyaWVzKGNvZGVGaWxlcykuZm9yRWFjaCgoW2ZpbGVQYXRoLCBmaWxlRGF0YV0pID0+IHsKICAgICAgaWYgKCFmaWxlUGF0aCB8fCB0eXBlb2YgZmlsZVBhdGggIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIAogICAgICAvLyBIYW5kbGUgYm90aCBsZWdhY3kgZm9ybWF0IChkaXJlY3QgY29kZSBzdHJpbmcpIGFuZCBuZXcgZm9ybWF0IChvYmplY3Qgd2l0aCBjb2RlIHByb3BlcnR5KQogICAgICBsZXQgY29kZSA9ICcnOwogICAgICBpZiAodHlwZW9mIGZpbGVEYXRhID09PSAnc3RyaW5nJykgewogICAgICAgIGNvZGUgPSBmaWxlRGF0YTsKICAgICAgfSBlbHNlIGlmIChmaWxlRGF0YSAmJiB0eXBlb2YgZmlsZURhdGEgPT09ICdvYmplY3QnICYmIGZpbGVEYXRhLmNvZGUpIHsKICAgICAgICBjb2RlID0gU3RyaW5nKGZpbGVEYXRhLmNvZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybjsgLy8gU2tpcCBpbnZhbGlkIGZpbGUgZGF0YQogICAgICB9CiAgICAgIAogICAgICAvLyBWYWxpZGF0ZSBmaWxlIHNpemUKICAgICAgaWYgKGNvZGUubGVuZ3RoID4gdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDb2RlRmlsZVNpemUpIHsKICAgICAgICBjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlUGF0aH0gZXhjZWVkcyBzaXplIGxpbWl0LCB0cnVuY2F0aW5nLi4uYCk7CiAgICAgICAgY29kZSA9IGNvZGUuc3Vic3RyaW5nKDAsIHRoaXMuY29udGV4dFZhbGlkYXRpb24ubWF4Q29kZUZpbGVTaXplKTsKICAgICAgfQogICAgICAKICAgICAgdmFsaWRhdGVkRmlsZXNbZmlsZVBhdGhdID0gewogICAgICAgIGNvZGU6IGNvZGUsCiAgICAgICAgaGlkZGVuOiBmaWxlRGF0YS5oaWRkZW4gfHwgZmFsc2UKICAgICAgfTsKICAgIH0pOwogICAgCiAgICByZXR1cm4gdmFsaWRhdGVkRmlsZXM7CiAgfQoKICBpc0NvbnRleHRFeHBpcmVkKHRpbWVzdGFtcCkgewogICAgaWYgKCF0aW1lc3RhbXApIHJldHVybiB0cnVlOwogICAgY29uc3QgZXhwaXJ5VGltZSA9IHRoaXMuY29udGV4dFZhbGlkYXRpb24uY29udGV4dEV4cGlyeUhvdXJzICogNjAgKiA2MCAqIDEwMDA7CiAgICByZXR1cm4gKERhdGUubm93KCkgLSB0aW1lc3RhbXApID4gZXhwaXJ5VGltZTsKICB9CgogIC8vIFVzZWNhc2UgbWFuYWdlbWVudAogIHNhdmVDdXJyZW50VXNlY2FzZSh1c2VjYXNlKSB7CiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNVUlJFTlRfVVNFQ0FTRSwgdXNlY2FzZSk7CiAgICAgIGNvbnNvbGUubG9nKGDwn46vIFNldCBjdXJyZW50IHVzZWNhc2U6ICR7dXNlY2FzZX1gKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgY3VycmVudCB1c2VjYXNlOicsIGVycm9yKTsKICAgIH0KICB9CgogIGxvYWRDdXJyZW50VXNlY2FzZSgpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNVUlJFTlRfVVNFQ0FTRSkgfHwgJ2RlZmF1bHQnOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjdXJyZW50IHVzZWNhc2U6JywgZXJyb3IpOwogICAgICByZXR1cm4gJ2RlZmF1bHQnOwogICAgfQogIH0KCiAgLy8gQ29udGV4dCBtZXRhZGF0YSBtYW5hZ2VtZW50CiAgdXBkYXRlQ29udGV4dE1ldGFkYXRhKG1ldGFkYXRhKSB7CiAgICB0cnkgewogICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMubG9hZENvbnRleHRNZXRhZGF0YSgpOwogICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4ubWV0YWRhdGEgfTsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DT05URVhUX01FVEFEQVRBLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byB1cGRhdGUgY29udGV4dCBtZXRhZGF0YTonLCBlcnJvcik7CiAgICB9CiAgfQoKICBsb2FkQ29udGV4dE1ldGFkYXRhKCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPTlRFWFRfTUVUQURBVEEpOwogICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IHt9OwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjb250ZXh0IG1ldGFkYXRhOicsIGVycm9yKTsKICAgICAgcmV0dXJuIHt9OwogICAgfQogIH0KCiAgLy8gQ2xlYXIgc3BlY2lmaWMgZGF0YSB0eXBlcwogIGNsZWFyQ2hhdEhpc3RvcnkoKSB7CiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNIQVRfSElTVE9SWSk7CiAgICBjb25zb2xlLmxvZygn8J+Xke+4jyBDbGVhcmVkIGNoYXQgaGlzdG9yeScpOwogIH0KCiAgY2xlYXJDb2RlRmlsZXMoKSB7CiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPREVfRklMRVMpOwogICAgY29uc29sZS5sb2coJ/Cfl5HvuI8gQ2xlYXJlZCBjb2RlIGZpbGVzJyk7CiAgfQoKICAvLyBDb250ZXh0IGhlYWx0aCBjaGVjawogIGdldENvbnRleHRIZWFsdGgoKSB7CiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubG9hZENvbnRleHRNZXRhZGF0YSgpOwogICAgY29uc3QgY2hhdEhpc3RvcnkgPSB0aGlzLmxvYWRDaGF0SGlzdG9yeSgpOwogICAgY29uc3QgY29kZUZpbGVzID0gdGhpcy5sb2FkQ29kZUZpbGVzKCk7CiAgICAKICAgIHJldHVybiB7CiAgICAgIGhhc0FjdGl2ZUNvbnRleHQ6IGNoYXRIaXN0b3J5Lmxlbmd0aCA+IDAgfHwgKGNvZGVGaWxlcyAmJiBPYmplY3Qua2V5cyhjb2RlRmlsZXMpLmxlbmd0aCA+IDApLAogICAgICBjaGF0TWVzc2FnZUNvdW50OiBjaGF0SGlzdG9yeS5sZW5ndGgsCiAgICAgIGNvZGVGaWxlQ291bnQ6IGNvZGVGaWxlcyA/IE9iamVjdC5rZXlzKGNvZGVGaWxlcykubGVuZ3RoIDogMCwKICAgICAgbGFzdEFjdGl2aXR5OiBNYXRoLm1heChtZXRhZGF0YS5sYXN0Q2hhdFNhdmUgfHwgMCwgbWV0YWRhdGEubGFzdENvZGVTYXZlIHx8IDApLAogICAgICBjdXJyZW50VXNlY2FzZTogdGhpcy5sb2FkQ3VycmVudFVzZWNhc2UoKSwKICAgICAgaXNFeHBpcmVkOiB0aGlzLmlzQ29udGV4dEV4cGlyZWQobWV0YWRhdGEubGFzdENoYXRTYXZlIHx8IG1ldGFkYXRhLmxhc3RDb2RlU2F2ZSkKICAgIH07CiAgfQoKICAvLyBDaGVjayBpZiBzdG9yYWdlIGlzIGF2YWlsYWJsZQogIGlzU3RvcmFnZUF2YWlsYWJsZSgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHRlc3QgPSAnX19zdG9yYWdlX3Rlc3RfXyc7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRlc3QsIHRlc3QpOwogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgovLyBBcHBQZXJzaXN0ZW5jZSBjbGFzcyBmb3IgZGF0YSBwZXJzaXN0ZW5jZSAtIGNvcGllZCBmcm9tIHBlcnNpc3RlbmNlLmpzCmNsYXNzIEFwcFBlcnNpc3RlbmNlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIC8vIFVOSUZJRUQgU1RPUkFHRSBLRVlTIC0gQ29tcGF0aWJsZSB3aXRoIG9yaWdpbmFsIHZlcnNpb24KICAgIHRoaXMuc3RvcmFnZUtleXMgPSB7CiAgICAgIENIQVRfSElTVE9SWTogJ3dlYmJ1aWxkZXJfY2hhdF9oaXN0b3J5JywKICAgICAgQ09ERV9GSUxFUzogJ3dlYmJ1aWxkZXJfY29kZV9maWxlcycsIAogICAgICBURU1QTEFURTogJ3dlYmJ1aWxkZXJfdGVtcGxhdGUnLAogICAgICBRVUFMSVRZX1NFVFRJTkc6ICd3ZWJidWlsZGVyX3F1YWxpdHknLAogICAgICBVSV9TVEFURTogJ3dlYmJ1aWxkZXJfdWlfc3RhdGUnLAogICAgICBWSUVXX1RPR0dMRV9TVEFURTogJ3dlYmJ1aWxkZXJfdmlld190b2dnbGVfc3RhdGUnLAogICAgICBDVVJSRU5UX1VTRUNBU0U6ICd3ZWJidWlsZGVyX2N1cnJlbnRfdXNlY2FzZScsCiAgICAgIENPTlRFWFRfTUVUQURBVEE6ICd3ZWJidWlsZGVyX2NvbnRleHRfbWV0YWRhdGEnCiAgICB9OwogICAgCiAgICAvLyBDb250ZXh0IHZhbGlkYXRpb24gc2V0dGluZ3MKICAgIHRoaXMuY29udGV4dFZhbGlkYXRpb24gPSB7CiAgICAgIG1heENoYXRIaXN0b3J5U2l6ZTogNTAsCiAgICAgIG1heENvZGVGaWxlU2l6ZTogMTAyNCAqIDEwMjQsCiAgICAgIGNvbnRleHRFeHBpcnlIb3VyczogMjQKICAgIH07CiAgfQoKICAvLyBDaGVjayBpZiBzdG9yYWdlIGlzIGF2YWlsYWJsZQogIGlzU3RvcmFnZUF2YWlsYWJsZSgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHRlc3QgPSAnX19zdG9yYWdlX3Rlc3RfXyc7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRlc3QsIHRlc3QpOwogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLyBTYXZlIGNoYXQgaGlzdG9yeQogIHNhdmVDaGF0SGlzdG9yeShwcm9tcHRzLCB1c2VjYXNlID0gJ2RlZmF1bHQnKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2YWxpZGF0ZWRQcm9tcHRzID0gdGhpcy52YWxpZGF0ZUNoYXRIaXN0b3J5KHByb21wdHMpOwogICAgICBjb25zdCBjaGF0RGF0YSA9IHsKICAgICAgICBwcm9tcHRzOiB2YWxpZGF0ZWRQcm9tcHRzLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgIHZlcnNpb246ICcyLjAnCiAgICAgIH07CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ0hBVF9ISVNUT1JZLCBKU09OLnN0cmluZ2lmeShjaGF0RGF0YSkpOwogICAgICBjb25zb2xlLmxvZyhg8J+SviBTYXZlZCAke3ZhbGlkYXRlZFByb21wdHMubGVuZ3RofSBjaGF0IG1lc3NhZ2VzIGZvciB1c2VjYXNlOiAke3VzZWNhc2V9YCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIGNoYXQgaGlzdG9yeTonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBMb2FkIGNoYXQgaGlzdG9yeQogIGxvYWRDaGF0SGlzdG9yeShleHBlY3RlZFVzZWNhc2UgPSBudWxsKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ0hBVF9ISVNUT1JZKTsKICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIFtdOwogICAgICBjb25zdCBjaGF0RGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGF0RGF0YSkpIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUNoYXRIaXN0b3J5KGNoYXREYXRhKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUNoYXRIaXN0b3J5KGNoYXREYXRhLnByb21wdHMgfHwgW10pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjaGF0IGhpc3Rvcnk6JywgZXJyb3IpOwogICAgICByZXR1cm4gW107CiAgICB9CiAgfQoKICAvLyBTYXZlIGNvZGUgZmlsZXMKICBzYXZlQ29kZUZpbGVzKGNvZGVGaWxlcywgdXNlY2FzZSA9ICdkZWZhdWx0JykgewogICAgdHJ5IHsKICAgICAgY29uc3QgdmFsaWRhdGVkRmlsZXMgPSB0aGlzLnZhbGlkYXRlQ29kZUZpbGVzKGNvZGVGaWxlcyk7CiAgICAgIGNvbnN0IGNvZGVEYXRhID0gewogICAgICAgIGZpbGVzOiB2YWxpZGF0ZWRGaWxlcywKICAgICAgICB1c2VjYXNlOiB1c2VjYXNlLAogICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICB2ZXJzaW9uOiAnMi4wJwogICAgICB9OwogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPREVfRklMRVMsIEpTT04uc3RyaW5naWZ5KGNvZGVEYXRhKSk7CiAgICAgIGNvbnNvbGUubG9nKGDwn5K+IFNhdmVkICR7T2JqZWN0LmtleXModmFsaWRhdGVkRmlsZXMpLmxlbmd0aH0gY29kZSBmaWxlcyBmb3IgdXNlY2FzZTogJHt1c2VjYXNlfWApOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBjb2RlIGZpbGVzOicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIExvYWQgY29kZSBmaWxlcwogIGxvYWRDb2RlRmlsZXMoZXhwZWN0ZWRVc2VjYXNlID0gbnVsbCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPREVfRklMRVMpOwogICAgICBpZiAoIXNhdmVkKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgY29kZURhdGEgPSBKU09OLnBhcnNlKHNhdmVkKTsKICAgICAgaWYgKCFjb2RlRGF0YS52ZXJzaW9uICYmICFjb2RlRGF0YS50aW1lc3RhbXApIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRGF0YSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVDb2RlRmlsZXMoY29kZURhdGEuZmlsZXMgfHwge30pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjb2RlIGZpbGVzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvLyBTYXZlIGN1cnJlbnQgdXNlY2FzZQogIHNhdmVDdXJyZW50VXNlY2FzZSh1c2VjYXNlKSB7CiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNVUlJFTlRfVVNFQ0FTRSwgdXNlY2FzZSk7CiAgICAgIGNvbnNvbGUubG9nKGDwn46vIFNldCBjdXJyZW50IHVzZWNhc2U6ICR7dXNlY2FzZX1gKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgY3VycmVudCB1c2VjYXNlOicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIExvYWQgY3VycmVudCB1c2VjYXNlCiAgbG9hZEN1cnJlbnRVc2VjYXNlKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ1VSUkVOVF9VU0VDQVNFKSB8fCAnZGVmYXVsdCc7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGN1cnJlbnQgdXNlY2FzZTonLCBlcnJvcik7CiAgICAgIHJldHVybiAnZGVmYXVsdCc7CiAgICB9CiAgfQoKICAvLyBTYXZlIHZpZXcgdG9nZ2xlIHN0YXRlCiAgc2F2ZVZpZXdUb2dnbGVTdGF0ZSh2aWV3U3RhdGUpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVklFV19UT0dHTEVfU1RBVEUsIEpTT04uc3RyaW5naWZ5KHZpZXdTdGF0ZSkpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSB2aWV3IHRvZ2dsZSBzdGF0ZTonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBMb2FkIHZpZXcgdG9nZ2xlIHN0YXRlCiAgbG9hZFZpZXdUb2dnbGVTdGF0ZSgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5WSUVXX1RPR0dMRV9TVEFURSk7CiAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDogeyBjdXJyZW50VmlldzogJ2NvZGUnIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHZpZXcgdG9nZ2xlIHN0YXRlOicsIGVycm9yKTsKICAgICAgcmV0dXJuIHsgY3VycmVudFZpZXc6ICdjb2RlJyB9OwogICAgfQogIH0KCiAgLy8gVmFsaWRhdGlvbiBtZXRob2RzCiAgdmFsaWRhdGVDaGF0SGlzdG9yeShwcm9tcHRzKSB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvbXB0cykpIHJldHVybiBbXTsKICAgIHJldHVybiBwcm9tcHRzCiAgICAgIC5maWx0ZXIocHJvbXB0ID0+IHByb21wdCAmJiB0eXBlb2YgcHJvbXB0ID09PSAnb2JqZWN0JykKICAgICAgLmZpbHRlcihwcm9tcHQgPT4gcHJvbXB0LnJvbGUgJiYgcHJvbXB0LmNvbnRlbnQpCiAgICAgIC5zbGljZSgtdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDaGF0SGlzdG9yeVNpemUpCiAgICAgIC5tYXAocHJvbXB0ID0+ICh7CiAgICAgICAgcm9sZTogU3RyaW5nKHByb21wdC5yb2xlKS50cmltKCksCiAgICAgICAgY29udGVudDogU3RyaW5nKHByb21wdC5jb250ZW50KS50cmltKCkKICAgICAgfSkpOwogIH0KCiAgdmFsaWRhdGVDb2RlRmlsZXMoY29kZUZpbGVzKSB7CiAgICBpZiAoIWNvZGVGaWxlcyB8fCB0eXBlb2YgY29kZUZpbGVzICE9PSAnb2JqZWN0JykgcmV0dXJuIHt9OwogICAgY29uc3QgdmFsaWRhdGVkRmlsZXMgPSB7fTsKICAgIE9iamVjdC5lbnRyaWVzKGNvZGVGaWxlcykuZm9yRWFjaCgoW2ZpbGVQYXRoLCBmaWxlRGF0YV0pID0+IHsKICAgICAgaWYgKCFmaWxlUGF0aCB8fCB0eXBlb2YgZmlsZVBhdGggIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIGxldCBjb2RlID0gJyc7CiAgICAgIGlmICh0eXBlb2YgZmlsZURhdGEgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgY29kZSA9IGZpbGVEYXRhOwogICAgICB9IGVsc2UgaWYgKGZpbGVEYXRhICYmIHR5cGVvZiBmaWxlRGF0YSA9PT0gJ29iamVjdCcgJiYgZmlsZURhdGEuY29kZSkgewogICAgICAgIGNvZGUgPSBTdHJpbmcoZmlsZURhdGEuY29kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChjb2RlLmxlbmd0aCA+IHRoaXMuY29udGV4dFZhbGlkYXRpb24ubWF4Q29kZUZpbGVTaXplKSB7CiAgICAgICAgY29kZSA9IGNvZGUuc3Vic3RyaW5nKDAsIHRoaXMuY29udGV4dFZhbGlkYXRpb24ubWF4Q29kZUZpbGVTaXplKTsKICAgICAgfQogICAgICB2YWxpZGF0ZWRGaWxlc1tmaWxlUGF0aF0gPSB7CiAgICAgICAgY29kZTogY29kZSwKICAgICAgICBoaWRkZW46IGZpbGVEYXRhLmhpZGRlbiB8fCBmYWxzZQogICAgICB9OwogICAgfSk7CiAgICByZXR1cm4gdmFsaWRhdGVkRmlsZXM7CiAgfQoKICBjbGVhckRhdGEoKSB7CiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3RvcmFnZUtleXMpLmZvckVhY2goa2V5ID0+IHsKICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTsKICAgIH0pOwogIH0KfQoKLy8gRXhwb3J0IGFzIGdsb2JhbCBpbnN0YW5jZQp3aW5kb3cuYXBwUGVyc2lzdGVuY2UgPSBuZXcgQXBwUGVyc2lzdGVuY2UoKTsKPC9zY3JpcHQ+Cgo8IS0tIE1haW4gUmVhY3QgQXBwbGljYXRpb24gU2NyaXB0IC0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAicmVhY3QiOwppbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAicmVhY3QtZG9tL2NsaWVudCI7CmltcG9ydCB7IFNhbmRwYWNrIH0gZnJvbSAiQGNvZGVzYW5kYm94L3NhbmRwYWNrLXJlYWN0IjsKCi8vIEluaXRpYWxpemUgUmVhY3Qgcm9vdApjb25zdCByb290ID0gY3JlYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKTsKCi8vIEluaXRpYWxpemUgcGVyc2lzdGVuY2UgKHdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIERPTSBsb2FkcykKLy8gQ2hhdCBmdW5jdGlvbmFsaXR5CmNsYXNzIFByb21wdCB7CiAgICBjb25zdHJ1Y3Rvcihyb2xlLCBtZXNzYWdlKSB7CiAgICAgICAgdGhpcy5yb2xlID0gcm9sZTsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgfQp9CndpbmRvdy5Qcm9tcHQgPSBQcm9tcHQ7IC8vIE1ha2UgaXQgZ2xvYmFsbHkgYWNjZXNzaWJsZQoKbGV0IGFwcFBlcnNpc3RlbmNlOwpsZXQgY3VycmVudFVzZWNhc2UgPSAnZGVmYXVsdCc7CmxldCBjdXJyZW50UHJvbXB0VHlwZSA9ICdyZWFjdCc7IC8vIFRyYWNrIGN1cnJlbnQgcHJvbXB0IHR5cGUgZm9yIGRlcGxveSBidXR0b24gdmlzaWJpbGl0eQpsZXQgcHJvbXB0cyA9IFtdOyAvLyBHbG9iYWwgcHJvbXB0cyBhcnJheSBmb3IgY2hhdCBoaXN0b3J5CndpbmRvdy5wcm9tcHRzID0gcHJvbXB0czsgLy8gTWFrZSBpdCBnbG9iYWxseSBhY2Nlc3NpYmxlCgovLyBFbmhhbmNlZCBnZXRDdXJyZW50VXNlY2FzZSBmdW5jdGlvbiB3aXRoIHBlcnNpc3RlbmNlIGludGVncmF0aW9uIGFuZCB2YWxpZGF0aW9uCmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VjYXNlKCkgewogIHRyeSB7CiAgICAvLyBGaXJzdCBjaGVjayBpZiBpdCdzIHNldCBieSB0aGUgc2VydmVyCiAgICBpZiAod2luZG93LmN1cnJlbnRVc2VjYXNlKSB7CiAgICAgIC8vIFZhbGlkYXRlIHRoZSB1c2VjYXNlIGlmIHZhbGlkYXRpb24gaXMgYXZhaWxhYmxlCiAgICAgIGlmICh3aW5kb3cucGFnZUNvbmZpZyAmJiB3aW5kb3cucGFnZUNvbmZpZy52YWxpZGF0ZVVzZWNhc2UpIHsKICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gd2luZG93LnBhZ2VDb25maWcudmFsaWRhdGVVc2VjYXNlKHdpbmRvdy5jdXJyZW50VXNlY2FzZSk7CiAgICAgICAgaWYgKHZhbGlkYXRpb24uaXNWYWxpZCkgewogICAgICAgICAgY3VycmVudFVzZWNhc2UgPSB3aW5kb3cuY3VycmVudFVzZWNhc2U7CiAgICAgICAgICAvLyBTYXZlIHRvIHBlcnNpc3RlbmNlIGZvciBjb25zaXN0ZW5jeQogICAgICAgICAgaWYgKGFwcFBlcnNpc3RlbmNlICYmIHR5cGVvZiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUgPT09ICdmdW5jdGlvbicgJiYgYXBwUGVyc2lzdGVuY2UuaXNTdG9yYWdlQXZhaWxhYmxlKCkpIHsKICAgICAgICAgICAgYXBwUGVyc2lzdGVuY2Uuc2F2ZUN1cnJlbnRVc2VjYXNlKGN1cnJlbnRVc2VjYXNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjdXJyZW50VXNlY2FzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS53YXJuKCdTZXJ2ZXItcHJvdmlkZWQgdXNlY2FzZSBpcyBpbnZhbGlkOicsIHZhbGlkYXRpb24uZXJyb3IpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjdXJyZW50VXNlY2FzZSA9IHdpbmRvdy5jdXJyZW50VXNlY2FzZTsKICAgICAgICBpZiAoYXBwUGVyc2lzdGVuY2UgJiYgdHlwZW9mIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSA9PT0gJ2Z1bmN0aW9uJyAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICAgICAgYXBwUGVyc2lzdGVuY2Uuc2F2ZUN1cnJlbnRVc2VjYXNlKGN1cnJlbnRVc2VjYXNlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIENoZWNrIHBlcnNpc3RlbmNlIGZvciBzYXZlZCB1c2VjYXNlCiAgICBpZiAoYXBwUGVyc2lzdGVuY2UgJiYgdHlwZW9mIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSA9PT0gJ2Z1bmN0aW9uJyAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICBjb25zdCBzYXZlZFVzZWNhc2UgPSBhcHBQZXJzaXN0ZW5jZS5sb2FkQ3VycmVudFVzZWNhc2UoKTsKICAgICAgaWYgKHNhdmVkVXNlY2FzZSAmJiBzYXZlZFVzZWNhc2UgIT09ICdkZWZhdWx0JykgewogICAgICAgIC8vIFZhbGlkYXRlIHNhdmVkIHVzZWNhc2UKICAgICAgICBpZiAod2luZG93LnBhZ2VDb25maWcgJiYgd2luZG93LnBhZ2VDb25maWcudmFsaWRhdGVVc2VjYXNlKSB7CiAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gd2luZG93LnBhZ2VDb25maWcudmFsaWRhdGVVc2VjYXNlKHNhdmVkVXNlY2FzZSk7CiAgICAgICAgICBpZiAodmFsaWRhdGlvbi5pc1ZhbGlkKSB7CiAgICAgICAgICAgIGN1cnJlbnRVc2VjYXNlID0gc2F2ZWRVc2VjYXNlOwogICAgICAgICAgICByZXR1cm4gY3VycmVudFVzZWNhc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NhdmVkIHVzZWNhc2UgaXMgaW52YWxpZDonLCB2YWxpZGF0aW9uLmVycm9yKTsKICAgICAgICAgICAgLy8gQ2xlYXIgaW52YWxpZCBzYXZlZCB1c2VjYXNlCiAgICAgICAgICAgIGFwcFBlcnNpc3RlbmNlLnNhdmVDdXJyZW50VXNlY2FzZSgnZGVmYXVsdCcpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50VXNlY2FzZSA9IHNhdmVkVXNlY2FzZTsKICAgICAgICAgIHJldHVybiBjdXJyZW50VXNlY2FzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gRmFsbGJhY2sgdG8gcGF0aCBtYXRjaGluZwogICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKICAgIAogICAgLy8gRmluZCBtYXRjaGluZyB1c2VjYXNlIGJ5IHNsdWcgdXNpbmcgZW5oYW5jZWQgdXRpbGl0eSBpZiBhdmFpbGFibGUKICAgIGlmICh3aW5kb3cucGFnZUNvbmZpZykgewogICAgICBpZiAod2luZG93LnBhZ2VDb25maWcuZ2V0VXNlY2FzZUJ5U2x1ZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHdpbmRvdy5wYWdlQ29uZmlnLmdldFVzZWNhc2VCeVNsdWcocGF0aCk7CiAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgY3VycmVudFVzZWNhc2UgPSByZXN1bHQudXNlY2FzZTsKICAgICAgICAgIC8vIFNhdmUgdG8gcGVyc2lzdGVuY2UKICAgICAgICAgIGlmIChhcHBQZXJzaXN0ZW5jZSAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ3VycmVudFVzZWNhc2UoY3VycmVudFVzZWNhc2UpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBGYWxsYmFjayB0byBtYW51YWwgc2VhcmNoCiAgICAgICAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKHdpbmRvdy5wYWdlQ29uZmlnKSkgewogICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuc2x1ZyA9PT0gcGF0aCAmJiAha2V5LnN0YXJ0c1dpdGgoJ18nKSkgewogICAgICAgICAgICBjdXJyZW50VXNlY2FzZSA9IGtleTsKICAgICAgICAgICAgLy8gU2F2ZSB0byBwZXJzaXN0ZW5jZQogICAgICAgICAgICBpZiAoYXBwUGVyc2lzdGVuY2UgJiYgYXBwUGVyc2lzdGVuY2UuaXNTdG9yYWdlQXZhaWxhYmxlKCkpIHsKICAgICAgICAgICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ3VycmVudFVzZWNhc2UoY3VycmVudFVzZWNhc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VXNlY2FzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gRGVmYXVsdCBmYWxsYmFjawogICAgY3VycmVudFVzZWNhc2UgPSAnZGVmYXVsdCc7CiAgICBpZiAoYXBwUGVyc2lzdGVuY2UgJiYgYXBwUGVyc2lzdGVuY2UuaXNTdG9yYWdlQXZhaWxhYmxlKCkpIHsKICAgICAgYXBwUGVyc2lzdGVuY2Uuc2F2ZUN1cnJlbnRVc2VjYXNlKGN1cnJlbnRVc2VjYXNlKTsKICAgIH0KICAgIHJldHVybiBjdXJyZW50VXNlY2FzZTsKICB9IGNhdGNoIChlcnJvcikgewogICAgY29uc29sZS53YXJuKCdFcnJvciBpbiBnZXRDdXJyZW50VXNlY2FzZTonLCBlcnJvcik7CiAgICByZXR1cm4gJ2RlZmF1bHQnOwogIH0KfQp3aW5kb3cuZ2V0Q3VycmVudFVzZWNhc2UgPSBnZXRDdXJyZW50VXNlY2FzZTsgLy8gTWFrZSBpdCBnbG9iYWxseSBhY2Nlc3NpYmxlCgovLyBHbG9iYWwgc3RhdGUKbGV0IGN1cnJlbnRDb2RlID0ge307CndpbmRvdy5jdXJyZW50Q29kZSA9IGN1cnJlbnRDb2RlOyAvLyBNYWtlIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUKbGV0IGN1cnJlbnRUZW1wbGF0ZSA9ICdyZWFjdCc7CmxldCBjaGF0SGlzdG9yeSA9IFtdOwp3aW5kb3cuY2hhdEhpc3RvcnkgPSBjaGF0SGlzdG9yeTsgLy8gTWFrZSBpdCBnbG9iYWxseSBhY2Nlc3NpYmxlCmxldCBpc0dlbmVyYXRpbmcgPSBmYWxzZTsKbGV0IHNhbmRwYWNrUmVuZGVyS2V5ID0gMDsgLy8gS2V5IHRvIGZvcmNlIFNhbmRwYWNrIHJlLXJlbmRlcnMKbGV0IGlzTW9iaWxlVmlld0luaXRpYWxpemVkID0gZmFsc2U7IC8vIFRyYWNrIGlmIG1vYmlsZSB0b2dnbGUgaXMgaW5pdGlhbGl6ZWQKbGV0IGlzQ2hhdFZpc2libGUgPSB0cnVlOyAvLyBUcmFjayBjdXJyZW50IG1vYmlsZSB2aWV3IHN0YXRlCgovLyBET00gZWxlbWVudHMKY29uc3QgbGFuZGluZ1NlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFuZGluZ1NlY3Rpb24nKTsKY29uc3QgYXBwQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1jb250YWluZXInKTsKY29uc3QgY2hhdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0Q29udGFpbmVyJyk7CmNvbnN0IGxvYWRpbmdCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZ0JveCcpOwpjb25zdCBkb3dubG9hZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3dubG9hZEJ0bicpOwpjb25zdCB0b2dnbGVWaWV3QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZVZpZXdCdG4nKTsKY29uc3Qgc2FuZHBhY2tXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRwYWNrV3JhcHBlcicpOwpjb25zdCBjaGF0SW50ZXJmYWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRJbnRlcmZhY2UnKTsKCi8vIEluaXRpYWxpemUgYXBwCmZ1bmN0aW9uIGluaXRpYWxpemVBcHAoKSB7CiAgICAvLyBFbnN1cmUgbGFuZGluZyBzZWN0aW9uIGlzIHZpc2libGUgYW5kIGFwcCBjb250YWluZXIgaXMgaGlkZGVuIG9uIGxvYWQKICAgIGlmIChsYW5kaW5nU2VjdGlvbikgewogICAgICAgIGxhbmRpbmdTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgfQogICAgaWYgKGFwcENvbnRhaW5lcikgewogICAgICAgIGFwcENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgCiAgICBzZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICBzZXR1cFNhbmRwYWNrKCk7Cn0KCmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMoKSB7CiAgICBjb25zb2xlLmxvZygn4pqZ77iPIFNldHRpbmcgdXAgZXZlbnQgbGlzdGVuZXJzLi4uJyk7CiAgICAKICAgIC8vIExhbmRpbmcgcGFnZSBnZW5lcmF0ZSBidXR0b24KICAgIGNvbnN0IGdlbmVyYXRlQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdlbmVyYXRlLWNvZGUtYnRuJyk7CiAgICBjb25zb2xlLmxvZygn8J+UmCBHZW5lcmF0ZSBidXR0b24gZm91bmQ6JywgZ2VuZXJhdGVCdG4pOwogICAgCiAgICBpZiAoZ2VuZXJhdGVCdG4pIHsKICAgICAgICBnZW5lcmF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5SYIEdlbmVyYXRlIGJ1dHRvbiBjbGlja2VkJyk7CiAgICAgICAgICAgIGhhbmRsZUdlbmVyYXRlQ29kZSgpOwogICAgICAgIH0pOwogICAgICAgIGNvbnNvbGUubG9nKCfinIUgQ2xpY2sgaGFuZGxlciBhdHRhY2hlZCB0byBnZW5lcmF0ZSBidXR0b24nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEdlbmVyYXRlIGJ1dHRvbiBub3QgZm91bmQhJyk7CiAgICB9CgogICAgLy8gUXVpY2sgYXBwIGJ1dHRvbnMKICAgIGNvbnN0IHF1aWNrQXBwQnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xdWljay1hcHAtYnRuJyk7CiAgICBxdWlja0FwcEJ0bnMuZm9yRWFjaChidG4gPT4gewogICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGUudGFyZ2V0LnRleHRDb250ZW50OwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvbXB0LWlucHV0JykudmFsdWUgPSBwcm9tcHQ7CiAgICAgICAgICAgIGhhbmRsZUdlbmVyYXRlQ29kZSgpOwogICAgICAgIH0pOwogICAgfSk7CgogICAgLy8gQ2hhdCBzdWJtaXQgYnV0dG9uCiAgICBjb25zdCBjaGF0U3VibWl0QnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNoYXQtc3VibWl0LWJ0bicpOwogICAgaWYgKGNoYXRTdWJtaXRCdG4pIHsKICAgICAgICBjaGF0U3VibWl0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2hhdFN1Ym1pdCk7CiAgICB9CgogICAgLy8gRW50ZXIga2V5IGhhbmRsaW5nCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsKICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHsKICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwcm9tcHQtaW5wdXQnKSkgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CflJEgRW50ZXIga2V5IHByZXNzZWQgaW4gcHJvbXB0IGlucHV0Jyk7CiAgICAgICAgICAgICAgICBpZiAobGFuZGluZ1NlY3Rpb24uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CflJEgQ2FsbGluZyBoYW5kbGVHZW5lcmF0ZUNvZGUgZnJvbSBFbnRlciBrZXknKTsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZW5lcmF0ZUNvZGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CflJEgQ2FsbGluZyBoYW5kbGVDaGF0U3VibWl0IGZyb20gRW50ZXIga2V5Jyk7CiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhdFN1Ym1pdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gVG9nZ2xlIHZpZXcgYnV0dG9uCiAgICBpZiAodG9nZ2xlVmlld0J0bikgewogICAgICAgIHRvZ2dsZVZpZXdCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVWaWV3KTsKICAgIH0KCiAgICAvLyBEb3dubG9hZCBidXR0b24KICAgIGlmIChkb3dubG9hZEJ0bikgewogICAgICAgIGRvd25sb2FkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG93bmxvYWRDb2RlKTsKICAgIH0KfQoKZnVuY3Rpb24gc2V0dXBTYW5kcGFjaygpIHsKICAgIC8vIEluaXRpYWxpemUgU2FuZHBhY2sgd2l0aCBkZWZhdWx0IHRlbXBsYXRlCiAgICBjb25zdCBkZWZhdWx0RmlsZXMgPSB7CiAgICAgICAgICAgICAgICAiL0FwcC5qcyI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CgpmdW5jdGlvbiBBcHAoKSB7CiAgICByZXR1cm4gKAogICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzIwcHgnLCBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnIH19PgogICAgICAgICAgICA8aDE+RGlnaXRhbCBXaGl0ZWJvYXJkIOKAlCBMaXZlIFByZXZpZXc8L2gxPgogICAgICAgICAgICA8cD5FeHBsb3JlIHdoaXRlYm9hcmQgdGVtcGxhdGVzLCBjb2xsYWJvcmF0aXZlIGZlYXR1cmVzLCBhbmQgcmVhbC10aW1lIGVkaXRpbmcgaW4gdGhpcyBpbnRlcmFjdGl2ZSBwcmV2aWV3LjwvcD4KICAgICAgICA8L2Rpdj4KICAgICk7Cn0KCmV4cG9ydCBkZWZhdWx0IEFwcDtgCiAgICAgICAgfSwKICAgICAgICAiL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICAgY29kZTogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiB7CiAgICAgICAgICAgICAgICAgICAgInJlYWN0IjogIl4xOC4yLjAiLAogICAgICAgICAgICAgICAgICAgICJyZWFjdC1kb20iOiAiXjE4LjIuMCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgbnVsbCwgMikKICAgICAgICB9CiAgICB9OwoKICAgIHNhbmRwYWNrUmVuZGVyS2V5Kys7IC8vIEluY3JlbWVudCBrZXkgZm9yIGZyZXNoIHJlbmRlcgogICAgCiAgICByb290LnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFNhbmRwYWNrLCB7CiAgICAgICAga2V5OiBgc2FuZHBhY2stJHtzYW5kcGFja1JlbmRlcktleX1gLCAvLyBBZGQga2V5IHRvIGZvcmNlIHJlLXJlbmRlcgogICAgICAgIHRlbXBsYXRlOiAicmVhY3QiLAogICAgICAgIGZpbGVzOiBkZWZhdWx0RmlsZXMsCiAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICByZWNvbXBpbGVNb2RlOiAiZGVsYXllZCIsCiAgICAgICAgICAgIHJlY29tcGlsZURlbGF5OiAzMDAsCiAgICAgICAgICAgIGF1dG9ydW46IHRydWUsCiAgICAgICAgICAgIHNob3dMaW5lTnVtYmVyczogZmFsc2UsCiAgICAgICAgICAgIHNob3dJbmxpbmVFcnJvcnM6IHRydWUsCiAgICAgICAgICAgIHNob3dDb25zb2xlOiBmYWxzZSwKICAgICAgICAgICAgc2hvd0NvbnNvbGVCdXR0b246IGZhbHNlLAogICAgICAgICAgICBjbG9zYWJsZVRhYnM6IHRydWUsCiAgICAgICAgICAgIHdyYXBDb250ZW50OiB0cnVlLAogICAgICAgICAgICBlZGl0b3JIZWlnaHQ6ICIxMDAlIiwKICAgICAgICAgICAgc2hvd09wZW5JbkNvZGVTYW5kYm94OiBmYWxzZSwKICAgICAgICAgICAgc2hvd0Vycm9yU2NyZWVuOiB0cnVlLAogICAgICAgICAgICBzaG93TG9hZGluZ1NjcmVlbjogdHJ1ZSwKICAgICAgICAgICAgYnVuZGxlclVSTDogYGh0dHBzOi8vc2FuZHBhY2stYnVuZGxlci5jb2Rlc2FuZGJveC5pbz92PSR7RGF0ZS5ub3coKX1gLAogICAgICAgICAgICBzdGFydFJvdXRlOiAiLyIsCiAgICAgICAgICAgIGxvZ0xldmVsOiAiZXJyb3IiLAogICAgICAgICAgICBpbml0TW9kZTogImxhenkiCiAgICAgICAgfSwKICAgICAgICB0aGVtZTogImxpZ2h0IgogICAgfSkpOwogICAgCiAgICAvLyBJbml0aWFsaXplIENvZGUvUHJldmlldyB0b2dnbGUgYWZ0ZXIgU2FuZHBhY2sgcmVuZGVycwogICAgc2V0VGltZW91dChpbml0aWFsaXplQ29kZVByZXZpZXdUb2dnbGUsIDUwMCk7Cn0KCi8vIENvZGUvUHJldmlldyBUb2dnbGUgRnVuY3Rpb25hbGl0eQpmdW5jdGlvbiBpbml0aWFsaXplQ29kZVByZXZpZXdUb2dnbGUoKSB7CiAgICBsZXQgY29kZVRvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2RlVG9nZ2xlJyk7CiAgICBsZXQgcHJldmlld1RvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3VG9nZ2xlJyk7CiAgICBjb25zdCBzYW5kcGFja0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290Jyk7CiAgICAKICAgIGlmICghY29kZVRvZ2dsZSB8fCAhcHJldmlld1RvZ2dsZSB8fCAhc2FuZHBhY2tDb250YWluZXIpIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0NvZGUvUHJldmlldyB0b2dnbGUgYnV0dG9ucyBvciBzYW5kcGFjayBjb250YWluZXIgbm90IGZvdW5kJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBjb25zb2xlLmxvZygn4pyFIEluaXRpYWxpemluZyBDb2RlL1ByZXZpZXcgdG9nZ2xlIGJ1dHRvbnMnKTsKICAgIAogICAgZnVuY3Rpb24gc3dpdGNoVG9Db2RlVmlldygpIHsKICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBTd2l0Y2hpbmcgdG8gQ29kZSB2aWV3Li4uJyk7CiAgICAgICAgc2FuZHBhY2tDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncHJldmlldy1tb2RlJyk7CiAgICAgICAgc2FuZHBhY2tDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY29kZS1tb2RlJyk7CiAgICAgICAgY29kZVRvZ2dsZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICBwcmV2aWV3VG9nZ2xlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgIGNvbnNvbGUubG9nKCfwn5SnIFN3aXRjaGVkIHRvIENvZGUgdmlldyAtIENvZGUgYWN0aXZlOicsIGNvZGVUb2dnbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSwgJ1ByZXZpZXcgYWN0aXZlOicsIHByZXZpZXdUb2dnbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHN3aXRjaFRvUHJldmlld1ZpZXcoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ/CflIQgU3dpdGNoaW5nIHRvIFByZXZpZXcgdmlldy4uLicpOwogICAgICAgIHNhbmRwYWNrQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2NvZGUtbW9kZScpOwogICAgICAgIHNhbmRwYWNrQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3ByZXZpZXctbW9kZScpOwogICAgICAgIHByZXZpZXdUb2dnbGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgY29kZVRvZ2dsZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICBjb25zb2xlLmxvZygn8J+Rge+4jyBTd2l0Y2hlZCB0byBQcmV2aWV3IHZpZXcgLSBDb2RlIGFjdGl2ZTonLCBjb2RlVG9nZ2xlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJyksICdQcmV2aWV3IGFjdGl2ZTonLCBwcmV2aWV3VG9nZ2xlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpOwogICAgICAgIAogICAgICAgIC8vIEVuc3VyZSBpZnJhbWUgaXMgdmlzaWJsZQogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBpZnJhbWVzID0gc2FuZHBhY2tDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7CiAgICAgICAgICAgIGlmcmFtZXMuZm9yRWFjaChpZnJhbWUgPT4gewogICAgICAgICAgICAgICAgaWYgKGlmcmFtZS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHsKICAgICAgICAgICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sIDEwMCk7CiAgICB9CiAgICAKICAgIC8vIFJlbW92ZSBleGlzdGluZyBsaXN0ZW5lcnMgaWYgYW55CiAgICBjb25zdCBuZXdDb2RlVG9nZ2xlID0gY29kZVRvZ2dsZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICBjb25zdCBuZXdQcmV2aWV3VG9nZ2xlID0gcHJldmlld1RvZ2dsZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICBjb2RlVG9nZ2xlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0NvZGVUb2dnbGUsIGNvZGVUb2dnbGUpOwogICAgcHJldmlld1RvZ2dsZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdQcmV2aWV3VG9nZ2xlLCBwcmV2aWV3VG9nZ2xlKTsKICAgIAogICAgLy8gVXBkYXRlIHZhcmlhYmxlIHJlZmVyZW5jZXMgdG8gcG9pbnQgdG8gdGhlIG5ldyBlbGVtZW50cwogICAgY29kZVRvZ2dsZSA9IG5ld0NvZGVUb2dnbGU7CiAgICBwcmV2aWV3VG9nZ2xlID0gbmV3UHJldmlld1RvZ2dsZTsKICAgIAogICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwogICAgY29kZVRvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXRjaFRvQ29kZVZpZXcpOwogICAgcHJldmlld1RvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXRjaFRvUHJldmlld1ZpZXcpOwogICAgCiAgICAvLyBTdGFydCB3aXRoIHByZXZpZXcgdmlldyBieSBkZWZhdWx0CiAgICBzd2l0Y2hUb1ByZXZpZXdWaWV3KCk7CiAgICAKICAgIGNvbnNvbGUubG9nKCfinIUgQ29kZS9QcmV2aWV3IHRvZ2dsZSBpbml0aWFsaXplZCcpOwp9Cgphc3luYyBmdW5jdGlvbiBoYW5kbGVHZW5lcmF0ZUNvZGUoKSB7CiAgICBjb25zb2xlLmxvZygn8J+agCBoYW5kbGVHZW5lcmF0ZUNvZGUgY2FsbGVkIC0gaXNHZW5lcmF0aW5nOicsIGlzR2VuZXJhdGluZyk7CiAgICAKICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZ2VuZXJhdGluZyBmaXJzdAogICAgaWYgKGlzR2VuZXJhdGluZykgewogICAgICAgIGNvbnNvbGUubG9nKCfimqDvuI8gQWxyZWFkeSBnZW5lcmF0aW5nLCBza2lwcGluZy4uLicpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgY29uc3QgcHJvbXB0SW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvbXB0LWlucHV0Jyk7CiAgICBjb25zdCBxdWFsaXR5U2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1YWxpdHlTZWxlY3RMYW5kaW5nJyk7CiAgICAKICAgIGNvbnNvbGUubG9nKCfwn5OdIFByb21wdCBpbnB1dDonLCBwcm9tcHRJbnB1dCk7CiAgICBjb25zb2xlLmxvZygn8J+TnSBQcm9tcHQgdmFsdWU6JywgcHJvbXB0SW5wdXQ/LnZhbHVlKTsKICAgIAogICAgaWYgKCFwcm9tcHRJbnB1dCB8fCAhcHJvbXB0SW5wdXQudmFsdWUudHJpbSgpKSB7CiAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnRlciBhIHByb21wdCcpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaXNHZW5lcmF0aW5nID0gdHJ1ZTsKICAgIGNvbnN0IHByb21wdCA9IHByb21wdElucHV0LnZhbHVlLnRyaW0oKTsKICAgIGNvbnN0IHF1YWxpdHkgPSBxdWFsaXR5U2VsZWN0ID8gcXVhbGl0eVNlbGVjdC52YWx1ZSA6ICdzdGFuZGFyZCc7CiAgICAKICAgIC8vIFNob3cgY2hhdCBpbnRlcmZhY2UgZmlyc3Qgc28gbG9hZGluZyBib3ggY2FuIGJlIHZpc2libGUKICAgIHNob3dDaGF0SW50ZXJmYWNlKGZhbHNlKTsgLy8gRG9uJ3Qgc2hvdyBidXR0b25zIGR1cmluZyBnZW5lcmF0aW9uCiAgICAKICAgIC8vIENsZWFyIGNoYXQgY29udGFpbmVyIHRvIHByZXZlbnQgZHVwbGljYXRlcwogICAgY2xlYXJDaGF0Q29udGFpbmVyKCk7CiAgICAKICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2UgdG8gY2hhdAogICAgYWRkVG9DaGF0SGlzdG9yeSgndXNlcicsIHByb21wdCk7CiAgICAKICAgIC8vIENsZWFyIHRoZSBpbnB1dCBmaWVsZAogICAgcHJvbXB0SW5wdXQudmFsdWUgPSAnJzsKICAgIAogICAgLy8gU2hvdyBsb2FkaW5nCiAgICBzaG93TG9hZGluZygpOwogICAgCiAgICB0cnkgewogICAgICAgIC8vIEFkZCB1c2VyIHByb21wdCB0byBwcm9tcHRzIGFycmF5CiAgICAgICAgY29uc3QgdXNlclByb21wdCA9IG5ldyBQcm9tcHQoJ3VzZXInLCBwcm9tcHQpOwogICAgICAgIHByb21wdHMucHVzaCh1c2VyUHJvbXB0KTsKICAgICAgICB3aW5kb3cucHJvbXB0cyA9IHByb21wdHM7IC8vIEtlZXAgaW4gc3luYwogICAgICAgIAogICAgICAgIC8vIENoZWNrIGlmIGhpZ2hlciBxdWFsaXR5IGlzIHNlbGVjdGVkCiAgICAgICAgaWYgKHF1YWxpdHkgPT09ICdoaWdoZXInKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJIaWdoZXIgcXVhbGl0eSBzZWxlY3RlZCwgaW5pdGlhdGluZyB0d28tc3RhZ2UgcHJvY2Vzcy4uLiIpOwogICAgICAgICAgICBhd2FpdCBmZXRjaEhpZ2hRdWFsaXR5Q29kZShwcm9tcHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFN0YW5kYXJkIHF1YWxpdHkgZ2VuZXJhdGlvbgogICAgICAgICAgICAvLyBHZW5lcmF0ZSBvciBnZXQgc2Vzc2lvbiBJRCBmb3IgY29udGV4dCB0cmFja2luZwogICAgICAgICAgICBsZXQgc2Vzc2lvbklkID0gd2luZG93LmN1cnJlbnRTZXNzaW9uSWQ7CiAgICAgICAgICAgIGlmICghc2Vzc2lvbklkKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uSWQgPSBgc2Vzc2lvbl8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgICAgICAgICAgICAgICB3aW5kb3cuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7CiAgICAgICAgICAgICAgICBtZXNzYWdlczogcHJvbXB0cy5tYXAocCA9PiAoewogICAgICAgICAgICAgICAgICAgIHJvbGU6IHAucm9sZSwKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBwLm1lc3NhZ2UKICAgICAgICAgICAgICAgIH0pKSwKICAgICAgICAgICAgICAgIHF1YWxpdHk6IHF1YWxpdHksCiAgICAgICAgICAgICAgICB1c2VjYXNlOiBnZXRDdXJyZW50VXNlY2FzZSgpLAogICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn4yQIE1ha2luZyBBUEkgY2FsbCB0bzonLCBDT05GSUcuZ2V0QXBpVXJsKENPTkZJRy5FTkRQT0lOVFMuT1BFTkFJKSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5OkIFJlcXVlc3QgYm9keTonLCByZXF1ZXN0Qm9keSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKENPTkZJRy5nZXRBcGlVcmwoQ09ORklHLkVORFBPSU5UUy5PUEVOQUkpLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5OlIFJlc3BvbnNlIHN0YXR1czonLCByZXNwb25zZS5zdGF0dXMpOwogICAgICAgICAgICBjb25zb2xlLmxvZygn8J+TpSBSZXNwb25zZSBvazonLCByZXNwb25zZS5vayk7CgogICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5OlIEFQSSBSZXNwb25zZSBkYXRhOicsIGRhdGEpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggZGF0YS5jb2RlIGFuZCBkYXRhLmZpbGVzIChBUEkgbWlnaHQgcmV0dXJuIGVpdGhlcikKICAgICAgICAgICAgY29uc3QgY29kZUZpbGVzID0gZGF0YS5jb2RlIHx8IGRhdGEuZmlsZXM7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoY29kZUZpbGVzICYmIHR5cGVvZiBjb2RlRmlsZXMgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICBjdXJyZW50Q29kZSA9IGNvZGVGaWxlczsKICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50Q29kZSA9IGN1cnJlbnRDb2RlOyAvLyBLZWVwIGluIHN5bmMKICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9tcHRUeXBlID0gZGF0YS5wcm9tcHRUeXBlIHx8ICdyZWFjdCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEFkZCBBSSByZXNwb25zZSB0byBwcm9tcHRzIGFycmF5CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChuZXcgUHJvbXB0KCdhaScsIGRhdGEuZGVzY3JpcHRpb24pKTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucHJvbXB0cyA9IHByb21wdHM7IC8vIEtlZXAgaW4gc3luYwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgU2FuZHBhY2sKICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2V0QWxsU2FuZHBhY2tGaWxlcykgewogICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0QWxsU2FuZHBhY2tGaWxlcyhjb2RlRmlsZXMpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdXBkYXRlU2FuZHBhY2soY29kZUZpbGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQWRkIGFzc2lzdGFudCByZXNwb25zZSB0byBjaGF0IC0gb25seSBzaG93IEFJIGRlc2NyaXB0aW9uIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFkZFRvQ2hhdEhpc3RvcnkgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgYWRkVG9DaGF0SGlzdG9yeSgnYXNzaXN0YW50JywgZGF0YS5kZXNjcmlwdGlvbik7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5hZGRUb0NoYXRIaXN0b3J5ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRUb0NoYXRIaXN0b3J5KCdhc3Npc3RhbnQnLCBkYXRhLmRlc2NyaXB0aW9uKTsKICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBTYXZlIHRvIHBlcnNpc3RlbmNlCiAgICAgICAgICAgICAgICBpZiAoYXBwUGVyc2lzdGVuY2UpIHsKICAgICAgICAgICAgICAgICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ29kZUZpbGVzKGNvZGVGaWxlcywgZ2V0Q3VycmVudFVzZWNhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgYXBwUGVyc2lzdGVuY2Uuc2F2ZUNoYXRIaXN0b3J5KGNoYXRIaXN0b3J5LCBnZXRDdXJyZW50VXNlY2FzZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FQSSBSZXNwb25zZTonLCBkYXRhKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmFsaWQgY29kZSBmaWxlcyByZWNlaXZlZCBmcm9tIEFQSS4gRXhwZWN0ZWQgZGF0YS5jb2RlIG9yIGRhdGEuZmlsZXMgb2JqZWN0LicpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZW5lcmF0aW5nIGNvZGU6JywgZXJyb3IpOwogICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCc1MDAnKSkgewogICAgICAgICAgICBhbGVydCgnU2VydmVyIGVycm9yOiBUaGUgQUkgc2VydmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LicpOwogICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnZmV0Y2gnKSkgewogICAgICAgICAgICBhbGVydCgnTmV0d29yayBlcnJvcjogUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluLicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdFcnJvciBnZW5lcmF0aW5nIGNvZGU6ICcgKyBlcnJvci5tZXNzYWdlICsgJy4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICB9CiAgICB9IGZpbmFsbHkgew