Skip to main content

We Build Ai

For Your Needs!

  • Ai Workflow Enhancement & Automation

  • Ai Scaled Marketing & Advertisement

  • Ai Phone and CRM Staff

  • Ai Training and Education

  • Ai Opportunity Scoping

  • Ai Workflow Enhancement & Automation

  • Ai Scaled Marketing & Advertisement

  • Ai Phone and CRM Staff

  • Ai Training and Education

  • Ai Opportunity Scoping

Lets Discuss Your Needs


AI Consultation Booking

Select Time Zone

Ready to Get Started?

Book Your Free Consultation.

Let's Discuss Your AI Strategy!

Lets Discuss Your Needs


AI Consultation Booking

Select Time Zone

AgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIG1hcmdpbjogMzBweCAwOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctZmlndXJlLXRpdGxlIHsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlICNlbWctc2V0dXAtc3ZnIHsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGF1dG87CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctc3ZnLWNvbXBvbmVudCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy1zdmctY29tcG9uZW50OmhvdmVyIHsKICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNXB4ICMwMDdiZmYpOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXN2Zy1jb21wb25lbnQuYWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgICAgc3Ryb2tlOiAjMDA3YmZmOwogICAgICBzdHJva2Utd2lkdGg6IDJweDsKICB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy1maWd1cmUtaW5mby1ib3ggewogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nOiAxNXB4OwogICAgICBiYWNrZ3JvdW5kOiAjZWVmN2ZmOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmRlMGZlOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLWZpZ3VyZS1pbmZvLWJveCBoNCB7CiAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIGNvbG9yOiAjMDA1NmIzOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLWhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0KCgogIC8qIC0tLSBUYWJsZSBTdHlsZXMgLS0tICovCiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXRhYmxlLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXJnaW46IDIwcHggMDsKICAgIH0KICAgICNlbWdTbWFydEhvbWVBcnRpY2xlIHRhYmxlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMDUpOwogICAgfQogICAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgdGgsICNlbWdTbWFydEhvbWVBcnRpY2xlIHRkIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE1cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgfQogICAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgdGggewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgY29sb3I6ICM0OTUwNTc7CiAgICB9CiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSB0cjpudGgtY2hpbGQoZXZlbikgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7CiAgICB9CiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTZlYTsKICAgIH0KICAKICAvKiAtLS0gUGFydGljaXBhbnQgSW5mbyBWaXN1YWxpemF0aW9uIC0tLSAqLwogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctcGFydGljaXBhbnQtdml6IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgZ2FwOiAyMHB4OwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIG1hcmdpbjogMjBweCAwOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXBhcnRpY2lwYW50LWdyb3VwIHsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLWdyb3VwLWljb24gewogICAgICB3aWR0aDogODBweDsKICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIG1hcmdpbjogMCBhdXRvIDEwcHg7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDEyMywgMjU1LCAwLjQpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogIH0KICAgICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctcGFydGljaXBhbnQtZ3JvdXA6aG92ZXIgLmVtZy1ncm91cC1pY29uIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLWdyb3VwLWljb24tYWdlMSB7IGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7IGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDQwLCAxNjcsIDY5LCAwLjQpOyB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy1ncm91cC1pY29uLWFnZTIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgyNTUsIDE5MywgNywgMC40KTsgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctZ3JvdXAtaWNvbi1kaXNhYmlsaXR5IHsgYmFja2dyb3VuZC1jb2xvcjogIzE3YTJiODsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMjMsIDE2MiwgMTg0LCAwLjQpOyB9CgogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctZ3JvdXAtY291bnQgewogICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctZ3JvdXAtbGFiZWwgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogIH0KICAgICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctZ3JvdXAtZGVzYyB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICM2Yzc1N2Q7CiAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgfQoKICAvKiAtLS0gS2V5IFRha2Vhd2F5cyBTZWN0aW9uIC0tLSAqLwogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctdGFrZWF3YXlzIHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNTBweCwgMWZyKSk7CiAgICAgIGdhcDogMjBweDsKICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctdGFrZWF3YXktY2FyZCB7CiAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTY7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIGdhcDogMTVweDsKICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzIGVhc2UsIHRyYW5zZm9ybSAwLjNzIGVhc2U7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctdGFrZWF3YXktY2FyZDpob3ZlciB7CiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsKICB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy10YWtlYXdheS1pY29uIHsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIHdpZHRoOiA0MHB4OwogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctdGFrZWF3YXktaWNvbi5lbWctcG9zaXRpdmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBjb2xvcjogIzE1NTcyNDsgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctdGFrZWF3YXktaWNvbi5lbWctY2hhbGxlbmdlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDsgY29sb3I6ICM4NTY0MDQ7IH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXRha2Vhd2F5LWljb24uZW1nLXBvdGVudGlhbCB7IGJhY2tncm91bmQtY29sb3I6ICNkMWVjZjE7IGNvbG9yOiAjMGM1NDYwOyB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy10YWtlYXdheS1pY29uIHN2ZyB7IHdpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7IH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXRha2Vhd2F5LWNvbnRlbnQgcCB7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxNHB4OyB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy10YWtlYXdheS1jb250ZW50IHN0cm9uZyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIGNvbG9yOiAjMzQzYTQwOwogIH0KICAKICAvKiAtLS0gUXVpeiBTZWN0aW9uIC0tLSAqLwogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctcXVpei1jb250YWluZXIgewogICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgIG1hcmdpbjogNDBweCAwOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotcXVlc3Rpb24gewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotcXVlc3Rpb24gcCB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotb3B0aW9ucyBsYWJlbCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2VkNGRhOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0OwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotb3B0aW9ucyBsYWJlbDpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY3ZmY7CiAgICAgIGJvcmRlci1jb2xvcjogIzAwN2JmZjsKICB9CiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotb3B0aW9ucyBpbnB1dCB7CiAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotb3B0aW9ucyBsYWJlbC5jb3JyZWN0IHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsKICAgICAgYm9yZGVyLWNvbG9yOiAjYzNlNmNiOwogIH0KICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXF1aXotb3B0aW9ucyBsYWJlbC5pbmNvcnJlY3QgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhOwogICAgICBib3JkZXItY29sb3I6ICNmNWM2Y2I7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlIC5lbWctcXVpei1idG4gewogICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKICB9CiAgI2VtZ1NtYXJ0SG9tZUFydGljbGUgLmVtZy1xdWl6LWJ0bjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDU2YjM7CiAgfQogICNlbWdTbWFydEhvbWVBcnRpY2xlICNlbWctcXVpei1yZXN1bHRzIHsKICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogLS0tIFJlZmVyZW5jZXMgLS0tICovCiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXJlZmVyZW5jZXMgb2wgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICB9CiAgICAjZW1nU21hcnRIb21lQXJ0aWNsZSAuZW1nLXJlZmVyZW5jZXMgbGkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIH0KIDwvc3R5bGU+CgogPGRpdiBjbGFzcz0iZW1nLW1haW4tY29udGVudCI+CgogIDxkaXYgY2xhc3M9ImVtZy1hcnRpY2xlLWhlYWRlciI+CiAgIDxkaXYgY2xhc3M9ImVtZy1tZXRhLWluZm8iPmFyWGl2OjI1MDcuMTk0Nzl2MSBbY3MuSENdIDI1IEp1bCAyMDI1PC9kaXY+CiAgIDxoMT5Jb1QgYW5kIE9sZGVyIEFkdWx0czogVG93YXJkcyBNdWx0aW1vZGFsIEVNRyBhbmQgQUktQmFzZWQgSW50ZXJhY3Rpb24gd2l0aCBTbWFydCBIb21lPC9oMT4KICAgPGRpdiBjbGFzcz0iZW1nLWF1dGhvcnMiPgogICAgPHNwYW4gY2xhc3M9ImVtZy1hdXRob3IiPldpZXNhdyBLb3BlCiAgICAgPGRpdiBjbGFzcz0iZW1nLWF1dGhvci1kZXRhaWxzIj4KICAgICAgICA8c3Bhbj48Yj5BZmZpbGlhdGlvbnM6PC9iPiBYUiBDZW50ZXIsIFBvbGlzaC1KYXBhbmVzZSBBY2FkZW15IG9mIEluZm9ybWF0aW9uIFRlY2hub2xvZ3k7IEtvYm8gQXNzb2NpYXRpb248L3NwYW4+CiAgICAgICAgPHNwYW4+PGI+T1JDSUQ6PC9iPiAwMDAwLTAwMDEtOTEzMjQxNzE8L3NwYW4+CiAgICAgICAgPHNwYW4+PGI+RW1haWw6PC9iPiBrb3BlY0BwamEuZWR1LnBsPC9zcGFuPgogICAgIDwvZGl2PgogICAgPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImVtZy1hdXRob3IiPkphcm9zYXcgS293YWxza2kKICAgICA8ZGl2IGNsYXNzPSJlbWctYXV0aG9yLWRldGFpbHMiPgogICAgICAgIDxzcGFuPjxiPkFmZmlsaWF0aW9uOjwvYj4gTGFib3JhdG9yeSBvZiBJbnRlcmFjdGl2ZSBUZWNobm9sb2d5LCBOYXRpb25hbCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEluc3RpdHV0ZTwvc3Bhbj4KICAgICAgICA8c3Bhbj48Yj5PUkNJRDo8L2I+IDAwMDAtMDAwMi0xMTI3LTI4MzI8L3NwYW4+CiAgICAgPC9kaXY+CiAgICA8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZW1nLWF1dGhvciI+QWxla3NhbmRlciBNYWpkYQogICAgIDxkaXYgY2xhc3M9ImVtZy1hdXRob3ItZGV0YWlscyI+CiAgICAgICAgPHNwYW4+PGI+QWZmaWxpYXRpb246PC9iPiBCaWcgSWRlYSBUZWNobm9sb2d5PC9zcGFuPgogICAgICAgIDxzcGFuPjxiPk9SQ0lEOjwvYj4gMDAwOS0wMDAxLTIyOTItNTE4MTwvc3Bhbj4KICAgICA8L2Rpdj4KICAgIDwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJlbWctYXV0aG9yIj5Bbm5hIER1c3p5ay1Cb2dvcm9kemthCiAgICAgPGRpdiBjbGFzcz0iZW1nLWF1dGhvci1kZXRhaWxzIj4KICAgICAgICA8c3Bhbj48Yj5BZmZpbGlhdGlvbjo8L2I+IEluc3RpdHV0ZSBvZiBQc3ljaG9sb2d5LCBTV1BTIFVuaXZlcnNpdHk8L3NwYW4+CiAgICAgICAgPHNwYW4+PGI+T1JDSUQ6PC9iPiAwMDAwLTAwMDItNTk4NC0yMzM5PC9zcGFuPgogICAgIDwvZGl2PgogICAgPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImVtZy1hdXRob3IiPkFubmEgSmFza3Vsc2thCiAgICAgPGRpdiBjbGFzcz0iZW1nLWF1dGhvci1kZXRhaWxzIj4KICAgICAgICA8c3Bhbj48Yj5BZmZpbGlhdGlvbnM6PC9iPiBLb2JvIEFzc29jaWF0aW9uOyBMYWJvcmF0b3J5IG9mIEludGVyYWN0aXZlIFRlY2hub2xvZ3ksIE5JUDwvc3Bhbj4KICAgICAgICA8c3Bhbj48Yj5PUkNJRDo8L2I+IDAwMDAtMDAwMi0yNTM5LTM5MzQ8L3NwYW4+CiAgICAgPC9kaXY+CiAgICA8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZW1nLWF1dGhvciI+Q2V6YXJ5IEJpZWxlCiAgICAgPGRpdiBjbGFzcz0iZW1nLWF1dGhvci1kZXRhaWxzIj4KICAgICAgICA8c3Bhbj48Yj5BZmZpbGlhdGlvbjo8L2I+IExhYm9yYXRvcnkgb2YgSW50ZXJhY3RpdmUgVGVjaG5vbG9neSwgTmF0aW9uYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBJbnN0aXR1dGU8L3NwYW4+CiAgICAgICAgPHNwYW4+PGI+T1JDSUQ6PC9iPiAwMDAwLTAwMDItMjUzOS0zOTM0PC9zcGFuPgogICAgIDwvZGl2PgogICAgPC9zcGFuPgogICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iZW1nLWFic3RyYWN0LWJsb2NrIj4KICAgPHA+PGI+QWJzdHJhY3QuPC9iPiBXZSByZXBvcnQgcHJlbGltaW5hcnkgaW5zaWdodHMgZnJvbSBhbiBleHBsb3JhdG9yeSBzdHVkeSBvbiBub24tc3RhbmRhcmQgbm9uLWludmFzaXZlIGludGVyZmFjZXMgZm9yIFNtYXJ0IEhvbWUgVGVjaG5vbG9naWVzIChTSFQpLiBUaGlzIHN0dWR5IGlzIHBhcnQgb2YgYSBicm9hZGVyIHJlc2VhcmNoIHByb2plY3Qgb24gZWZmZWN0aXZlIFNtYXJ0IEhvbWUgZWNvc3lzdGVtIFNhZ2FjaXR5IHRoYXQgd2lsbCB0YXJnZXQgb2xkZXIgYWR1bHRzLCBpbXBhaXJlZCBwZXJzb25zLCBhbmQgb3RoZXIgZ3JvdXBzIGRpc2FkdmFudGFnZWQgaW4gdGhlIG1haW4gdGVjaG5vbG9neSBkaXNjb3Vyc2UuIFRoZXJlZm9yZSwgdGhpcyByZXNlYXJjaCBpcyBpbiBsaW5lIHdpdGggYSBsb25nLXRlcm0gcmVzZWFyY2ggZnJhbWV3b3JrIG9mIHRoZSBIQVNFIHJlc2VhcmNoIGdyb3VwIChIdW1hbiBBc3BlY3RzIGluIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nKSBieSB0aGUgTGl2aW5nIExhYiBLb2JvLiBJbiBvdXIgc3R1ZHksIGJhc2VkIG9uIHRoZSBwcm90b3R5cGUgb2YgdGhlIGNvbXByZWhlbnNpdmUgU0hUIG1hbmFnZW1lbnQgc3lzdGVtIFNhZ2FjaXR5LCB3ZSBpbnZlc3RpZ2F0ZWQgdGhlIHBvdGVudGlhbCBvZiBiaW9lbGVjdHJpYyBzaWduYWxzLCBpbiBwYXJ0aWN1bGFyIEVNRyBhbmQgRU9HIGFzIGEgY29tcGxlbWVudGFyeSBpbnRlcmZhY2UgZm9yIFNIVC4gQmFzZWQgb24gb3VyIHByZXZpb3VzIHBhcnRpY2lwYXRvcnkgcmVzZWFyY2ggYW5kIHN0dWRpZXMgb24gbXVsdGltb2RhbCBpbnRlcmZhY2VzLCBpbmNsdWRpbmcgVlVJIGFuZCBCQ0ksIHdlIHByZXBhcmVkIGFuIGluLWRlcHRoIGludGVyYWN0aXZlIGhhbmRzLW9uIGV4cGVyaWVuY2Ugd29ya3Nob3BzIHdpdGggZGlyZWN0IGludm9sdmVtZW50IG9mIHZhcmlvdXMgZ3JvdXBzIG9mIHBvdGVudGlhbCBlbmQgdXNlcnMsIGluY2x1ZGluZyBvbGRlciBhZHVsdHMgYW5kIGltcGFpcmVkIHBlcnNvbnMgKHRvdGFsIDE4IHN1YmplY3RzKSB0byBleHBsb3JlIGFuZCBpbnZlc3RpZ2F0ZSB0aGUgcG90ZW50aWFsIG9mIHNvbHV0aW9ucyBiYXNlZCBvbiB0aGlzIHR5cGUgb2Ygbm9uLXN0YW5kYXJkIGludGVyZmFjZXMuIFRoZSBwcmVsaW1pbmFyeSBpbnNpZ2h0cyBmcm9tIHRoZSBzdHVkeSB1bnZlaWwgdGhlIHBvdGVudGlhbCBvZiBFTUcvRU9HIGludGVyZmFjZXMgaW4gbXVsdGltb2RhbCBTSFQgbWFuYWdlbWVudCwgYWxvbmdzaWRlIGxpbWl0YXRpb25zIGFuZCBjaGFsbGVuZ2VzIHN0ZW1taW5nIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGVjaG5vbG9neSBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBkZXNpZ25pbmcgbXVsdGltb2RhbCBpbnRlcmFjdGlvbiBwYXJhZGlnbXMgcGlucG9pbnRpbmcgYXJlYXMgb2YgaW50ZXJlc3QgdG8gcHVyc3VlIGluIGZ1cnRoZXIgc3R1ZGllcy48L3A+CiAgPC9kaXY+CiAgCiAgPGI+S2V5d29yZHM6PC9iPgogIDxkaXYgY2xhc3M9ImVtZy1rZXl3b3JkcyI+CiAgIDxzcGFuIGNsYXNzPSJlbWcta2V5d29yZCI+SW9UPHNwYW4gY2xhc3M9ImVtZy10b29sdGlwLXRleHQiPkludGVybmV0IG9mIFRoaW5nczogQSBuZXR3b3JrIG9mIHBoeXNpY2FsIG9iamVjdHMgZW1iZWRkZWQgd2l0aCBzZW5zb3JzIGFuZCBzb2Z0d2FyZSBmb3IgY29ubmVjdGluZyBhbmQgZXhjaGFuZ2luZyBkYXRhLjwvc3Bhbj48L3NwYW4+CiAgIDxzcGFuIGNsYXNzPSJlbWcta2V5d29yZCI+U21hcnQgSG9tZTxzcGFuIGNsYXNzPSJlbWctdG9vbHRpcC10ZXh0Ij5BIHJlc2lkZW5jZSBlcXVpcHBlZCB3aXRoIGludGVybmV0LWNvbm5lY3RlZCBkZXZpY2VzIHRvIGVuYWJsZSByZW1vdGUgbW9uaXRvcmluZyBhbmQgbWFuYWdlbWVudCBvZiBzeXN0ZW1zLjwvc3Bhbj48L3NwYW4+CiAgIDxzcGFuIGNsYXNzPSJlbWcta2V5d29yZCI+RU1HPHNwYW4gY2xhc3M9ImVtZy10b29sdGlwLXRleHQiPkVsZWN0cm9teW9ncmFwaHk6IEEgdGVjaG5pcXVlIGZvciBldmFsdWF0aW5nIGFuZCByZWNvcmRpbmcgdGhlIGVsZWN0cmljYWwgYWN0aXZpdHkgcHJvZHVjZWQgYnkgc2tlbGV0YWwgbXVzY2xlcy48L3NwYW4+PC9zcGFuPgogICA8c3BhbiBjbGFzcz0iZW1nLWtleXdvcmQiPkVPRzxzcGFuIGNsYXNzPSJlbWctdG9vbHRpcC10ZXh0Ij5FbGVjdHJvb2N1bG9ncmFwaHk6IEEgdGVjaG5pcXVlIGZvciBtZWFzdXJpbmcgdGhlIHJlc3RpbmcgcG90ZW50aWFsIG9mIHRoZSByZXRpbmEsIG9mdGVuIHVzZWQgdG8gdHJhY2sgZXllIG1vdmVtZW50cy48L3NwYW4+PC9zcGFuPgogICA8c3BhbiBjbGFzcz0iZW1nLWtleXdvcmQiPk11bHRpbW9kYWwgSW50ZWZhY2VzPHNwYW4gY2xhc3M9ImVtZy10b29sdGlwLXRleHQiPkludGVyZmFjZXMgdGhhdCB1c2UgbXVsdGlwbGUgZm9ybXMgb2YgaW5wdXQvb3V0cHV0IChlLmcuLCB2b2ljZSwgZ2VzdHVyZSwgdG91Y2gpIHRvIGludGVyYWN0IHdpdGggYSBzeXN0ZW0uPC9zcGFuPjwvc3Bhbj4KICAgPHNwYW4gY2xhc3M9ImVtZy1rZXl3b3JkIj5IdW1hbi1Db21wdXRlciBJbnRlcmFjdGlvbjxzcGFuIGNsYXNzPSJlbWctdG9vbHRpcC10ZXh0Ij5UaGUgc3R1ZHkgb2YgaG93IHBlb3BsZSBkZXNpZ24sIGltcGxlbWVudCwgYW5kIHVzZSBpbnRlcmFjdGl2ZSBjb21wdXRlciBzeXN0ZW1zLjwvc3Bhbj48L3NwYW4+CiAgIDxzcGFuIGNsYXNzPSJlbWcta2V5d29yZCI+SHVtYW4tVGVjaG5vbG9neSBJbnRlcmFjdGlvbjxzcGFuIGNsYXNzPSJlbWctdG9vbHRpcC10ZXh0Ij5BIGJyb2FkZXIgZmllbGQgdGhhbiBIQ0ksIGZvY3VzaW5nIG9uIGFsbCBhc3BlY3RzIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBodW1hbnMgYW5kIHRlY2hub2xvZ3kuPC9zcGFuPjwvc3Bhbj4KICAgPHNwYW4gY2xhc3M9ImVtZy1rZXl3b3JkIj5PbGRlciBBZHVsdHM8c3BhbiBjbGFzcz0iZW1nLXRvb2x0aXAtdGV4dCI+QSBrZXkgdGFyZ2V0IGRlbW9ncmFwaGljIGZvciBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBnZW5lcmFsbHkgZGVmaW5lZCBhcyBpbmRpdmlkdWFscyBhZ2VkIDY1IGFuZCBvdmVyLjwvc3Bhbj48L3NwYW4+CiAgIDxzcGFuIGNsYXNzPSJlbWcta2V5d29yZCI+QW1iaWVudCBhbmQgQXNzaXN0ZWQgTGl2aW5nPHNwYW4gY2xhc3M9ImVtZy10b29sdGlwLXRleHQiPkFBTDogVXNpbmcgSUNUIHRvIGhlbHAgcGVvcGxlIGxpdmUgaW5kZXBlbmRlbnRseSBmb3IgbG9uZ2VyLCBlc3BlY2lhbGx5IGluIG9sZGVyIGFnZS48L3NwYW4+PC9zcGFuPgogICA8c3BhbiBjbGFzcz0iZW1nLWtleXdvcmQiPkxpdmluZyBMYWI8c3BhbiBjbGFzcz0iZW1nLXRvb2x0aXAtdGV4dCI+QSByZXNlYXJjaCBjb25jZXB0IGZvciB1c2VyLWNlbnRyaWMsIG9wZW4taW5ub3ZhdGlvbiBlY29zeXN0ZW1zIGluIHJlYWwtbGlmZSBjb250ZXh0cy48L3NwYW4+PC9zcGFuPgogICA8c3BhbiBjbGFzcz0iZW1nLWtleXdvcmQiPlBhcnRpY2lwYXRvcnkgRGVzaWduPHNwYW4gY2xhc3M9ImVtZy10b29sdGlwLXRleHQiPkFuIGFwcHJvYWNoIHRoYXQgaW52b2x2ZXMgYWxsIHN0YWtlaG9sZGVycyAoZS5nLiwgZW5kLXVzZXJzKSBpbiB0aGUgZGVzaWduIHByb2Nlc3MgdG8gZW5zdXJlIHRoZSByZXN1bHQgbWVldHMgdGhlaXIgbmVlZHMuPC9zcGFuPjwvc3Bhbj4KICA8L2Rpdj4KCiAgPGgyPjEgUmVzZWFyY2ggY29udGV4dDwvaDI+CiAgPHA+T25lIG9mIHRoZSBtYWluIGdsb2JhbCBjaGFsbGVuZ2VzIGlzIGEgZGVtb2dyYXBoaWMgdHJhbnNpdGlvbiByZWxhdGVkIHRvIGFuIGFnaW5nIHBvcHVsYXRpb24sIGxvbmdlciBsaXZlcywgYW5kIHNtYWxsZXIgZmFtaWxpZXMgWzE0XS4gT25lIG9mIHRoZSBwcm9taXNpbmcgYXBwcm9hY2hlcyB0b3dhcmRzIGNvdW50ZXJwYXJ0aW5nIHRoYXQgdHJlbmQgaXMgdG8gc3VwcG9ydCBsb25nZXIgYW5kIGluZGVwZW5kZW50IGxpdmluZyBvZiBvbGRlciBhZHVsdHMgd2l0aCB0aGUgdXNlIG9mIG5ldyB0ZWNobm9sb2dpZXMsIGluY2x1ZGluZyBTbWFydCBIb21lLCBJbnRlcm5ldCBvZiBUaGluZ3MgKElvVCkgYW5kIGF1dG9tYXRpb24uIFRoaXMgYXBwcm9hY2ggdW5kZXJwaW5zIGEgY29uY2VwdCBvZiBBbWJpZW50IGFuZCBBc3Npc3RlZCBMaXZpbmcgWzE3XSBvciBBY3RpdmUgYW5kIEFzc2lzdGVkIExpdmluZyAoQUFMKS4gSG93ZXZlciwgdGhlc2UgbmV3IHN1c3RhaW5hYmxlIGFuZCBwZXJ2YXNpdmUgdGVjaG5vbG9naWVzIHJlcXVpcmUgZWZmZWN0aXZlIGludGVyZmFjZXMgZm9yIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgdG93YXJkcyBlZmZlY3RpdmUgaW50ZXJhY3Rpb24gd2l0aCBuZXcgdGVjaG5vbG9naWVzIGJ5IGEgZGl2ZXJzZSBncm91cCBvZiB1c2VycywgaW5jbHVkaW5nIG9sZGVyIGFkdWx0cyBhbmQgaW1wYWlyZWQgcGVyc29ucy4gSW4gdGhpcyB3b3JrLCB3ZSBwcmVzZW50IHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgYW4gZXhwbG9yYXRvcnkgc3R1ZHkgb2YgaW50ZXJhY3Rpb24gd2l0aCBTbWFydCBIb21lIFRlY2hub2xvZ3kgKFNIVCkgdXNpbmcgYW4gaW5ub3ZhdGl2ZSBmYWNpYWwgZXhwcmVzc2lvbiByZWNvZ25pdGlvbiBiYXNlZCBvbiBlbGVjdHJvbXlvZ3JhcGggKEVNRykgYWN0aXZpdHkuIFRoaXMgcmVzZWFyY2ggaXMgcGFydCBvZiBhIGNvbXByZWhlbnNpdmUgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IHByb2plY3Qgb24gcHJvdmlkaW5nIGVmZmVjdGl2ZSBtZXRob2RzIGFuZCB0b29scyB0b3dhcmRzIG11bHRpbW9kYWwgaW50ZXJmYWNlcyBmb3IgYSB1bml2ZXJzYWwgYW5kIG9wZW4gU0hUIGVjb3N5c3RlbS4gVGhpcyByZXNlYXJjaCBpcyBhbHNvIGluIGxpbmUgd2l0aCBvdXIgbG9uZy10ZXJtIHN0dWRpZXMgb24gbXVsdGltb2RhbCBpbnRlcmZhY2VzIGFuZCBpbnRlcmFjdGlvbiwgaW5jbHVkaW5nIG5vbi1zdGFuZGFyZCBhbmQgbm9uLWludmFzaXZlIGludGVyZmFjZXMgYXMgYSBwYXJ0IG9mIGEgcmVzZWFyY2ggZnJhbWV3b3JrIEhBU0UgZ3JvdXAgYnkgdGhlIExpdmluZyBMYWIgS29ibywgYmFzZWQgb24gcGFydGljaXBhdG9yeSByZXNlYXJjaCBvbiBodW1hbi10ZWNobm9sb2d5IGludGVyYWN0aW9uLCBpbiBwYXJ0aWN1bGFyIGxlZCBieSBMYWJvcmF0b3J5IG9mIEludGVyYWN0aXZlIFRlY2hub2xvZ2llcywgTmF0aW9uYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBJbnN0aXR1dGUgKExJVCBOSVBJKSwgWFIgQ2VudGVyIFBvbGlzaC1KYXBhbmVzZSBBY2FkZW15IG9mIEluZm9ybWF0aW9uIFRlY2hub2xvZ2llcyAoWFJDIFBKQUlUKSBhbmQgSW5zdGl0dXRlIG9mIFBzeWNob2xvZ3ksIFNXUFMgVW5pdmVyc2l0eS48L3A+CiAgPGgzPkFnaW5nIHBvcHVsYXRpb24gYW5kIGRlbW9ncmFwaGljIHRyYW5zaXRpb24uPC9oMz4KICA8cD5PbmUgb2YgdGhlIG1haW4gY29udGVtcG9yYXJ5IHNvY2lhbCBhbmQgZWNvbm9taWNhbCBjaGFsbGVuZ2VzIGlzIHJlbGF0ZWQgdG8gdGhlIGdsb2JhbCBkZW1vZ3JhcGhpYyB0cmFuc2l0aW9uLCBiYXNlZCBvbiBncm93aW5nIHRyZW5kcyBvZiBhZ2luZyB0aGUgcG9wdWxhdGlvbiwgbG9uZ2VyIGxpdmVzIGFuZCBzbWFsbGVyIGZhbWlsaWVzIFsyLDE0XS4gVGhpcyBpcyB2YWxpZCBlc3BlY2lhbGx5IGluIGRldmVsb3BlZCBjb3VudHJpZXMsIGluY2x1ZGluZyBFVSwgTm9ydGggQW1lcmljYSwgYW5kIEphcGFuIFs0XS4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIG51bWVyb3VzIHJlcG9ydHMgYXQgdGhlIGludGVybmF0aW9uYWwgYW5kIG5hdGlvbmFsIGxldmVsLCBpbmNsdWRpbmcgVW5pdGVkIE5hdGlvbnMgYW5kIEV1cm9wZWFuIFVuaW9uIGFnZW5jaWVzLCB0aGlzIGlzIGFuIGlycmV2ZXJzaWJsZSBnbG9iYWwgdHJlbmQgdGhhdCBhZmZlY3RzIGV2ZW4gY291bnRyaWVzIHdpdGggcmVsYXRpdmVseSB5b3V0aGZ1bCBwb3B1bGF0aW9ucy5bMl0gSW4gMjAyMSBvbmUgaW4gdGVuIHBlb3BsZSB3b3JsZHdpZGUgd2VyZSBhZ2VkIDY1IG9yIGFib3ZlLCB3aXRoIHRoZSBwcm9zcGVjdCBvZiAxIGluIDYgZ2xvYmFsbHkgYnkgdGhlIGhhbGYgb2YgdGhpcyBjZW50dXJ5LiBUaGUgZ2xvYmFsIHBvcHVsYXRpb24gYWdlZCA2NSBhbmQgb2xkZXIgaXMgcHJvamVjdGVkIHRvIG1vcmUgdGhhbiBkb3VibGUgYnkgdGhlIDIwNTAsIHJlYWNoaW5nIDEuNiBiaWxsaW9uLCB3aGlsZSB0aGUgbnVtYmVyIG9mIHBlb3BsZSBhZ2VkIG92ZXIgODAgeWVhcnMgb2xkIGlzIGdyb3dpbmcgZXZlbiBmYXN0ZXIgWzE5XS4gSW4gZmlmdHkgeWVhcnMsIGkuZS4gYnkgdGhlIGxhdGUgMjA3MHMsIHRoZSBudW1iZXIgb2Ygb2xkZXIgYWR1bHRzIG92ZXIgNjUgd29ybGR3aWRlIGlzIHByb2plY3RlZCB0byByZWFjaCAyLjIgYmlsbGlvbiwgZXhjZWVkaW5nIHRoZSBudW1iZXIgb2YgdGhlIHBvcHVsYXRpb24gdW5kZXIgMTguIEhvd2V2ZXIsIGJ5IHRoZSBtaWQtMjAzMHMsIG9sZGVyIGFkdWx0cyBhZ2VkIDgwIGFuZCBvdmVyIHdpbGwgb3V0bnVtYmVyIGluZmFudHMgKDEgeWVhciBvZiBhZ2Ugb3IgbGVzcyksIHJlYWNoaW5nIDI2NSBtaWxsaW9uIFsyXS48L3A+CiAgPGgzPlRoZSBJbnRlcm5ldCBvZiBUaGluZ3MgYW5kIFNtYXJ0IEhvbWUgVGVjaG5vbG9neTwvaDM+CiAgPHA+YXJlIG9uZSBvZiB0aGUgc3Ryb25nZXN0IHRyZW5kcyBpbiB0aGUgbW9kZXJuIHRlY2hub2xvZ3kgbWFya2V0LiBTbWFydCBob21lIHJlZmVycyB0byBhIHJlc2lkZW5jZSBlcXVpcHBlZCB3aXRoIHNtYXJ0IHRlY2hub2xvZ2llcyB0aGF0IHByb3ZpZGUgdGFpbG9yZWQgc2VydmljZXMgZm9yIHVzZXJzIFsxMl0gYmFzZWQgb24gSW50ZXJuZXQgb2YgVGhpbmdzIChJb1QpIFsxM10gZGV2aWNlcyBhbmQgc29sdXRpb25zLiBBY2NvcmRpbmcgdG8gcmVjZW50IHJlcG9ydHMgYW5kIG1hcmtldCBhbmFseXNpcyBmcm9tIGxlYWRpbmcgbWFya2V0IGFuYWx5dGljcyB0aGUgdG90YWwgSW9UIG1hcmtldCBpbiAyMDIzIHdhcyBvdmVyIFVTICQ4MDAgYmlsbGlvbiBhbmQgd2lsbCByZWFjaCBpbiAyMDI0IGFsbW9zdCBvbmUgdHJpbGxpb24gVVNEIHdpdGggYSBwcm9zcGVjdCBvZiBmdXJ0aGVyIGdyb3d0aCBpbiB0aGUgY29taW5nIHllYXJzIFsxNl0uIENvbnN0YW50IGdyb3d0aCBpbiBpbnRlbGxpZ2VudCBvciBzbWFydCBkZXZpY2VzLCBhcyB3ZWxsIGFzIG5ldHdvcmsgdGVjaG5vbG9naWVzLCBpbmNsdWRpbmcgbmV3IHN0YW5kYXJkcyBvZiB1YmlxdWl0b3VzIHByb3RvY29sIDVHLCBwYXZlZCB0aGUgd2F5IHRvIHRoZSBleHBhbnNpb24gb2YgSW9UIGluIHZhcmlvdXMgYXJlYXMsIGluY2x1ZGluZyBJbmR1c3RyaWFsIElvVCwgYXV0b21vdGl2ZSwgc21hcnQgY2l0aWVzLCBhbmQgaG9tZXMuIFRoZSBsYXR0ZXIgYXJlYSwgc21hcnQgaG9tZSwgaXMgYSBzdWJqZWN0IG9mIGEgcGFydGljdWxhcmx5IGludGVuc2l2ZSBncm93dGggb2YgYXBwbGljYXRpb24sIGJhc2VkIHByZWRvbWluYW50bHkgb24gd2VsbCBlc3RhYmxpc2hlZCByZXNpZGVudGlhbCBuZXR3b3JraW5nIHN0YW5kYXJkcyAobG9jYWwgYXJlYSBuZXR3b3JrcyBhbmQgYnJvYWRiYW5kIEludGVybmV0IGNvbm5lY3Rpb24pIGFuZCB0aGUgcGVydmFzaXZlIGNvbnN1bWVyIElvVCBtYXJrZXQsIHdoaWNoIGhhcyBvdmVyIGhhbGYgb2YgZXN0aW1hdGVkIHRvdGFsIG51bWJlciBvZiBjb25uZWN0ZWQgSW9UIGRldmljZXMsIG5hbWVseSBvdmVyIDEwIGJpbGxpb24gb3V0IG9mIGEgdG90YWwgb2Ygb3ZlciAxOCBiaWxsaW9uIGNvbm5lY3Rpb25zIGluIDIwMjQgZXN0aW1hdGlvbiwgd2l0aCB0aGUgcHJvc3BlY3Qgb2YgZXhjZWVkaW5nIDIwIGJpbGxpb24gb3V0IG9mIGFsbW9zdCA0MCBiaWxsaW9uIGluIDIwMjggWzE2XS48L3A+CiAgPGgzPlBhcnRpY2lwYXRvcnkgRGVzaWduIGFuZCBMaXZpbmcgTGFiIEFwcHJvYWNoPC9oMz4KICA8cD5UaGVzZSBhYm92ZSBtZW50aW9uZWQgc29jaWFsIGFuZCB0ZWNobm9sb2dpY2FsIHRyZW5kcyBwYXZlZCB0aGUgd2F5IGZvciB0aGUgYWN0aXZlIGRldmVsb3BtZW50IG9mIHN1c3RhaW5hYmxlIHNvbHV0aW9ucyB0aGF0IHdpbGwgaGVscCBwZW9wbGUgc3RheSBpbmRlcGVuZGVudCBhbmQgYWN0aXZlIGZvciBsb25nZXIgaW4gdGhlaXIgb2xkZXIgYWdlLiBUaGVzZSBlbmRlYXZvcnMgYXJlIGNvdmVyZWQgYnkgdGhlIHVtYnJlbGxhIHRlcm0gQW1iaWVudCBhbmQgQXNzaXN0ZWQgTGl2aW5nIG9yIEFjdGl2ZSBhbmQgQXNzaXN0ZWQgTGl2aW5nIChBQUwpIFsxNyw2XS4gQUFMIHBvc3R1bGF0ZXMgbWFraW5nIHVzZSBvZiByZWNlbnQgYWR2YW5jZW1lbnRzIGluIHRlY2hub2xvZ3ksIGluY2x1ZGluZyB0aGUgSW50ZXJuZXQgb2YgVGhpbmdzLCBzbWFydCBlbnZpcm9ubWVudHMsIGFuZCBhdXRvbWF0aW9uLiBTdWNoIHRlY2hub2xvZ2ljYWwgYWR2YW5jZXMgY2FuIGFsc28gcG9zZSBjaGFsbGVuZ2VzIHRvIHVzZXJzLCB3aGljaCBpcyB3aHkgYW4gZWZmZWN0aXZlIHVzZXItY2VudHJpYyBhcHByb2FjaCBpcyBuZWNlc3NhcnkgdG8gZGV2ZWxvcCBzb2x1dGlvbnMgdGhhdCBhcmUgYmV0dGVyIHN1aXRlZCB0byBkaWZmZXJlbnQgZW5kLXVzZXIgZ3JvdXBzIFsxM10uIE9uZSBvZiB0aGUgd2VsbCBlc3RhYmxpc2hlZCBhcHByb2FjaGVzIGlzIHBhcnRpY2lwYXRvcnkgZGVzaWduLCBvciBjby1kZXNpZ24sIHdpdGggZGlyZWN0IGludm9sdmVtZW50IG9mIGVuZCB1c2VycyBpbiB0aGUgcHJvY2VzcyBvZiBjby1jcmVhdGlvbiBvZiBuZXcgc29sdXRpb25zIGJldHRlciB0YWlsb3JlZCB0byB0aGVpciBuZWVkcy4gVGhpcyBhcHByb2FjaCBpcyBhIGNydWNpYWwgYXNwZWN0IG9mIGh1bWFuLWNvbXB1dGVyIG9yIGh1bWFuLXRlY2hub2xvZ3kgaW50ZXJhY3Rpb24gcmVzZWFyY2gsIGNvbmR1Y3RlZCBhbHNvIGJ5IG91ciB0cmFuc2Rpc2NpcGxpbmFyeSBIQVNFIHJlc2VhcmNoIGdyb3VwIFs4XS4gQSBsaXZpbmcgbGFiIGFwcHJvYWNoIGlzIGFuIGV4YW1wbGUgb2Ygd2VsbCBlc3RhYmxpc2hlZCBleHBlcmltZW50YWwgYXBwcm9hY2ggZGVlcGx5IHJvb3RlZCBpbiB0aGUgcGhpbG9zb3BoeSBvZiB1c2VyLWNlbnRlcmVkIHJlc2VhcmNoIHRoYXQgZm9zdGVycyB0aGUgcHJvY2VzcyBvZiBkZXNpZ25pbmcgbmV3LCB1c2VmdWwsIGFuZCBhY2NlcHRhYmxlIHByb2R1Y3RzIGFuZCBzZXJ2aWNlcy4gVGhlIG9yaWdpbmFsIExpdmluZyBMYWIgdXNlci1jZW50cmljIGNvbmNlcHQgd2FzIGNvaW5lZCBhdCBNSVQgTWVkaWFMYWIgYnkgV2lsbGlhbSBNaXRjaGVsbCBbM10gb3ZlciB0d28gZGVjYWRlcyBhZ28sIGF0IHRoZSBhZHZlbnQgb2YgSW9ULCBTbWFydCBIb21lIGFuZCBvdGhlciBlbWVyZ2luZyB0ZWNobm9sb2dpZXMgcmVsYXRlZCB0byB0aGUgcmVzZWFyY2ggcmVwb3J0ZWQgaW4gdGhpcyBwYXBlci4gVGhpcyBjb25jZXB0IGhhcyBiZWVuIGVmZmVjdGl2ZWx5IGV4cGxvcmVkIGJ5IG91ciBIdW1hbiBBc3BlY3RzIGluIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nIHJlc2VhcmNoIGdyb3VwIGJ5IHRoZSBMaXZpbmcgTGFiIEtvYm8gQXNzb2NpYXRpb24sIHdoaWNoIGVuYWJsZXMgdHJhbnNkaXNjaXBsaW5hcnkgY29sbGFib3JhdGlvbiBiZXR3ZWVuIHNjaWVudGlzdHMsIHByYWN0aXRpb25lcnMsIGVudHJlcHJlbmV1cnMgYW5kIHZvbHVudGVlcnMgWzhdLjwvcD4KICA8aDM+TXVsdGltb2RhbCBJbnRlcmZhY2VzIGFuZCBJbnRlcmFjdGlvbjwvaDM+CiAgPHA+SGF2aW5nIGluIG1pbmQgdGhhdCBTbWFydCBIb21lIFRlY2hub2xvZ3kgaXMgYSB3ZWxsIGVzdGFibGlzaGVkIGFuZCBjb25zdGFudGx5IGdyb3dpbmcgbWFya2V0LCB0aGVyZSBpcyBhIGNoYWxsZW5nZSBvZiBwcm92aWRpbmcgZWZmZWN0aXZlIGludGVyYWN0aW9uIHRvd2FyZHMgZW5kIHVzZXJzJyBpbnRlcmFjdGlvbiB3aXRoIG5ldyB0ZWNobm9sb2dpZXMgWzEzXS4gV2VsbCBlc3RhYmxpc2hlZCBjb25jZXB0cyBvZiBodW1hbi1jb21wdXRlciBpbnRlcmZhY2VzIGxpa2UgV0lNUCAoV2luZG93cywgSWNvbnMsIE1vdXNlLCBQb2ludGVyKSBbMThdIGhhdmUgbGltaXRlZCBhcHBsaWNhdGlvbiB0byB0aGUgY29udGV4dCBvZiBzbWFydCBob21lIGVudmlyb25tZW50cy4gSW4gdGhlIHN0dWR5IHJlcG9ydGVkIGluIHRoaXMgcGFwZXIsIHdlIGhhdmUgYnVpbHQgb24gb3VyIHByZXZpb3VzIGV4dGVuc2l2ZSByZXNlYXJjaCBvZiBvdXIgSEFTRSBSZXNlYXJjaCBncm91cCBvbiBuZXcgaW50ZXJmYWNlcywgbW9kYWxpdGllcywgYW5kIHBhcmFkaWdtcyBvZiBpbnRlcmFjdGlvbiBpbiB0aGUgY29udGV4dCBvZiBTSFQsIGZyb20gVm9pY2UgQXNzaXN0YW50cyAoVkEpIGFuZCBWb2ljZSB1c2VyIGludGVyZmFjZXMgKFZVSSkgZm9yIG9sZGVyIGFkdWx0cyBbMTFdLCBpbXBhaXJlZCBwZXJzb25zIFs1XSwgYW5kIGNoaWxkcmVuIFsxXSB0byBCcmFpbiBDb21wdXRlciBJbnRlcmZhY2VzIChCQ0kpIFs5XSBpbiB0aGUgY29udGV4dCBvZiBleHBlcmltZW50YWwgcGFydGljaXBhdG9yeSByZXNlYXJjaCBhcHByb2FjaCBieSB0aGUgZGlzdHJpYnV0ZWQgTGl2aW5nIExhYiBLb2JvIFs4LDEwLDcsMTVdLCBUaGVyZWZvcmUsIGluIHRoZSBjb3Vyc2Ugb2Ygb3VyIHJlc2VhcmNoIGVuZGVhdm9ycyB3ZSBleGFtaW5lZCB0aGUgcG90ZW50aWFsIG9mIG5vbiBzdGFuZGFyZCBpbnRlcmZhY2VzIGFuZCBtb2RlcyBvZiB1c2VyLXRlY2hub2xvZ3kgaW50ZXJhY3Rpb24gYmFzZWQgb24gcHN5Y2hvcGh5c2lvbG9naWNhbCBhbmQgYmlvZWxlY3RyaWMgc2lnbmFscy4gSW4gcGFydGljdWxhciwgdGhlIHN0dWR5IHJlcG9ydGVkIGluIHRoaXMgcGFwZXIgaXMgYSBwYXJ0IG9mIG91ciByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgcHJvamVjdCBvbiB0aGUgU2FnYWNpdHkgU21hcnQgSG9tZSBzb2x1dGlvbiwgd2hlcmUgd2UgZXhhbWluZWQgdmFyaW91cyBkZXZpY2VzIGFuZCBhcHByb2FjaGVzIHRvd2FyZHMgZWZmZWN0aXZlIEVNRy9FT0cgaW50ZXJmYWNlLCBpbmNsdWRpbmcgTUwvQUkgYWxnb3JpdGhtcy48L3A+CiAgCiAgPGgyPjIgRXhwbG9yYXRvcnkgSW50ZXJhY3Rpb24gU3R1ZHk8L2gyPgogIDxwPkJhc2VkIG9uIG91ciBwcmV2aW91cyByZXNlYXJjaCBhbmQgYWJvdmUgbWVudGlvbmVkIHJlc2VhcmNoIGNvbnRleHQsIGFzIHdlbGwgYXMgc3RhdGUtb2YtdGhlLWFydCBzb2x1dGlvbnMsIHdlIGhhdmUgY29uZHVjdGVkIGFuIGV4cGxvcmF0b3J5IGV4cGVyaW1lbnRhbCBzZXNzaW9uIHdpdGggYSB3b3JraW5nIHByb3RvdHlwZSBvZiB0aGUgY29tcHJlaGVuc2l2ZSBTSFQgbWFuYWdlbWVudCBzeXN0ZW0gU2FnYWNpdHkgY291cGxlZCB3aXRoIGFuIEVNRyBpbnRlcmZhY2UgZm9yIGJpb2VsZWN0cmljIHNpZ25hbHMgYmFzZWQgb24gZmFjaWFsIG11c2NsZXMgYWN0aXZpdHkgYW5kIHNwZWNpZmljIGZhY2lhbCBleHByZXNzaW9ucyBmb3IgaW50ZW50aW9uYWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBTSFQgc3lzdGVtIFNhZ2FjaXR5LiBGb2xsb3dpbmcgdGhlIExpdmluZyBMYWIgYXBwcm9hY2gsIHdlIHNldCB1cCBhbiBpbi1kZXB0aCBleHBsb3JhdG9yeSBzZXNzaW9uIHdpdGggZW5kIHVzZXJzIGRpcmVjdCBpbnZvbHZlbWVudC4gVGhpcyBzZXNzaW9uIHByb3ZpZGVkIGhhbmRzLW9uIGV4cGVyaWVuY2UgdG8gZ2F0aGVyIG9ic2VydmF0aW9ucyBhbmQgaW5zaWdodHMgZnJvbSB0aGUgZW5kIHVzZXJzIGdyb3VwLjwvcD4KICA8cD5XZSBwcmVwYXJlZCBhbiBleHBlcmltZW50YWwgc2V0dXAgdGhhdCBwcm92aWRlcyBlY29sb2dpY2FsbHkgdmFsaWQgaW5zaWdodCBvZiB0aGUgdmFyaW91cyB0YXJnZXQgZ3JvdXBzLCBpbmNsdWRpbmcgb2xkZXIgYWR1bHRzIGFuZCBpbXBhaXJlZCBwZXJzb25zLiBUaGUgZXhwZXJpbWVudGFsIHNldHVwIHdhcyBiYXNlZCBvbiB0aGUgcmVhbC1saWZlIGNvbmZpZ3VyYXRpb24gKGZpZy4gMSkgdGhhdCByZXByZXNlbnRzIHRoZSBiYXNpYyBTSFQgY29uZmlndXJhdGlvbi4gVGhlIGV4cGVyaW1lbnRhbCBzZXR1cCBjb25zaXN0ZWQgb2YgYWxsIG5lY2Vzc2FyeSBlbGVtZW50cyBvZiBhIHdvcmtpbmcgcHJvdG90eXBlIGluIHRoZSBzbWFydCBob21lIGVudmlyb25tZW50IG9mIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgc21hcnQgYmFuZCBwYWlyZWQgd2l0aCBhIG1vYmlsZSBkZXZpY2UgKHRhYmxldCkgZXF1aXBwZWQgd2l0aCB0aGUgU2FnYWNpdHkgYXBwbGljYXRpb24gdGhhdCBjb250cm9sbGVkIHRoZSBwbGFpbiBsaWdodCBzb3VyY2UgdmlhIFNtYXJ0IFBsdWcgdXNpbmcgc3RhbmRhcmQgV2ktRmkgcHJvdG9jb2xzICh0YWJsZSAxKS48L3A+CiAgCiAgPGRpdiBjbGFzcz0iZW1nLWludGVyYWN0aXZlLWZpZ3VyZSI+CiAgIDxkaXYgY2xhc3M9ImVtZy1maWd1cmUtdGl0bGUiPkZpZy4gMS4gRXhwZXJpbWVudGFsIHNldHVwIGFuZCBjb25uZWN0aW9ucyAoQ2xpY2sgb24gY29tcG9uZW50cyB0byBsZWFybiBtb3JlKTwvZGl2PgogICAgPHN2ZyBpZD0iZW1nLXNldHVwLXN2ZyIgdmlld0JveD0iMCAwIDQwMCAyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgPCEtLSBDb21wb25lbnRzIC0tPgogICAgICAgIDxnIGlkPSJzdmctaGVhZGJhbmQiIGNsYXNzPSJlbWctc3ZnLWNvbXBvbmVudCIgZGF0YS10YXJnZXQ9ImluZm8taGVhZGJhbmQiPgogICAgICAgICAgICA8cGF0aCBkPSJNIDMwIDUwIEEgMjAgMjAgMCAwIDEgNzAgNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzQ5NTA1NyIgc3Ryb2tlLXdpZHRoPSI0Ii8+CiAgICAgICAgICAgIDxyZWN0IHg9IjI1IiB5PSI0MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjEwIiByeD0iMiIgZmlsbD0iIzZjNzU3ZCIvPgogICAgICAgICAgICA8dGV4dCB4PSI0OSIgeT0iMzUiIGZvbnQtc2l6ZT0iOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+SGVhZGJhbmQ8L3RleHQ+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJzdmctdGFibGV0IiBjbGFzcz0iZW1nLXN2Zy1jb21wb25lbnQiIGRhdGEtdGFyZ2V0PSJpbmZvLXRhYmxldCI+CiAgICAgICAgICAgIDxyZWN0IHg9IjgwIiB5PSIxMjAiIHdpZHRoPSI2MCIgaGVpZ2h0PSI3MCIgcng9IjUiIGZpbGw9IiNhZGI1YmQiIHN0cm9rZT0iIzQ5NTA1NyIgc3Ryb2tlLXdpZHRoPSIxIi8+CiAgICAgICAgICAgIDxyZWN0IHg9Ijg1IiB5PSIxMjUiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1NSIgZmlsbD0iI2ZmZiIvPgogICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMTAiIGN5PSIxODIiIHI9IjIiIGZpbGw9IiM0OTUwNTciLz4KICAgICAgICAgICAgPHRleHQgeD0iMTEwIiB5PSIxMTUiIGZvbnQtc2l6ZT0iOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+VGFibGV0PC90ZXh0PgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ic3ZnLXJvdXRlciIgY2xhc3M9ImVtZy1zdmctY29tcG9uZW50IiBkYXRhLXRhcmdldD0iaW5mby1yb3V0ZXIiPgogICAgICAgICAgICA8cmVjdCB4PSIxNzAiIHk9IjcwIiB3aWR0aD0iNjAiIGhlaWdodD0iMjAiIHJ4PSIzIiBmaWxsPSIjNmM3NTdkIi8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMTc1IDcwIEwgMTgwIDYwIEwgMTg1IDcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMzNDNhNDAiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMjE1IDcwIEwgMjIwIDYwIEwgMjI1IDcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMzNDNhNDAiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTAwIiBmb250LXNpemU9IjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpLUZpIFJvdXRlcjwvdGV4dD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgaWQ9InN2Zy1wbHVnIiBjbGFzcz0iZW1nLXN2Zy1jb21wb25lbnQiIGRhdGEtdGFyZ2V0PSJpbmZvLXBsdWciPgogICAgICAgICAgICA8cmVjdCB4PSIyMzAiIHk9IjEzMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMyIgZmlsbD0iI2NlZDRkYSIgc3Ryb2tlPSIjNDk1MDU3IiBzdHJva2Utd2lkdGg9IjEiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUwIiBjeT0iMTQwIiByPSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiM0OTUwNTciIHN0cm9rZS13aWR0aD0iMSIvPgogICAgICAgICAgICA8cmVjdCB4PSIyNDgiIHk9IjE1MiIgd2lkdGg9IjQiIGhlaWdodD0iMTAiIGZpbGw9IiM2Yzc1N2QiLz4KICAgICAgICAgICAgPHRleHQgeD0iMjUwIiB5PSIxMjUiIGZvbnQtc2l6ZT0iOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+U21hcnQgUGx1ZzwvdGV4dD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgaWQ9InN2Zy1sYW1wIiBjbGFzcz0iZW1nLXN2Zy1jb21wb25lbnQiIGRhdGEtdGFyZ2V0PSJpbmZvLWxhbXAiPgogICAgICAgICAgICA8cGF0aCBkPSJNIDM1MCAxNzAgUSAzMzAgMTQwIDMyMCAxMjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzQ5NTA1NyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMzEwIDEyNSBMIDMzMCAxMTUgTCAzMjUgMTA1IFoiIGZpbGw9IiM2Yzc1N2QiLz4KICAgICAgICAgICAgPHBhdGggZD0iTSAzNDAgMTc1IEwgMzYwIDE3NSBMIDM1NSAxNjUgWiIgZmlsbD0iIzg2OGU5NiIvPgogICAgICAgICAgICA8dGV4dCB4PSIzNTAiIHk9IjEwMCIgZm9udC1zaXplPSI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5EZXNrIExhbXA8L3RleHQ+CiAgICAgICAgPC9nPgogICAgICAgIDwhLS0gQ29ubmVjdGlvbnMgLS0+CiAgICAgICAgPHBhdGggZD0iTSA2NSA2MCBRIDEyMCA3MCAxNzAgNzUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FkYjViZCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMiIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMTAwIDEyMCBRIDE1MCAxMDAgMTgwIDkwIiBmaWxsPSJub25lIiBzdHJva2U9IiNhZGI1YmQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI0IDIiLz4KICAgICAgICA8cGF0aCBkPSJNIDIyMCA5MCBRIDI1MCAxMTAgMjUwIDEzMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYWRiNWJkIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNCAyIi8+CiAgICAgICAgPHBhdGggZD0iTSAyNzAgMTUwIEggMzEwIiBmaWxsPSJub25lIiBzdHJva2U9IiNhZGI1YmQiIHN0cm9rZS13aWR0aD0iMiIvPgogICAgPC9zdmc+CiAgICA8ZGl2IGlkPSJlbWctZmlndXJlLWluZm8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJpbmZvLWRlZmF1bHQiIGNsYXNzPSJlbWctZmlndXJlLWluZm8tYm94Ij4KICAgICAgICAgICAgPGg0PlN5c3RlbSBPdmVydmlldzwvaDQ+CiAgICAgICAgICAgIDxwPlRoaXMgZGlhZ3JhbSBzaG93cyB0aGUgZmxvdyBvZiBpbmZvcm1hdGlvbiBpbiB0aGUgZXhwZXJpbWVudGFsIHNldHVwLiBBIHVzZXIgd2VhcnMgdGhlIFNtYXJ0IEhlYWRiYW5kLCB3aGljaCBkZXRlY3RzIGZhY2lhbCBtdXNjbGUgbW92ZW1lbnRzIChFTUcgc2lnbmFscykuIFRoZXNlIHNpZ25hbHMgYXJlIHNlbnQgdG8gdGhlIFNhZ2FjaXR5IGFwcGxpY2F0aW9uIG9uIGEgdGFibGV0LiBUaGUgYXBwIHByb2Nlc3NlcyB0aGUgc2lnbmFsIGFuZCBzZW5kcyBhIGNvbW1hbmQgdmlhIFdpLUZpIHRvIHRoZSBTbWFydCBQbHVnLCB3aGljaCB0dXJucyB0aGUgY29ubmVjdGVkIERlc2sgTGFtcCBvbiBvciBvZmYuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9ImluZm8taGVhZGJhbmQiIGNsYXNzPSJlbWctZmlndXJlLWluZm8tYm94IGVtZy1oaWRkZW4iPgogICAgICAgICAgICA8aDQ+U21hcnQgSGVhZGJhbmQ8L2g0PgogICAgICAgICAgICA8cD5EZXRlY3RzIGJpb2VsZWN0cmljIHNpZ25hbHMgKEVNRykgZnJvbSBmYWNpYWwgbXVzY2xlcy4gSXQgYWN0cyBhcyB0aGUgcHJpbWFyeSBub24taW52YXNpdmUgaW5wdXQgZGV2aWNlLCB0cmFuc2xhdGluZyBpbnRlbnRpb25hbCBmYWNpYWwgZXhwcmVzc2lvbnMgKGxpa2UgYSBzbWlsZSBvciBhIGphdyBjbGVuY2gpIGludG8gZGlnaXRhbCBzaWduYWxzLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJpbmZvLXRhYmxldCIgY2xhc3M9ImVtZy1maWd1cmUtaW5mby1ib3ggZW1nLWhpZGRlbiI+CiAgICAgICAgICAgIDxoND5Nb2JpbGUgQXBwbGljYXRpb24gKFRhYmxldCk8L2g0PgogICAgICAgICAgICA8cD5SdW5zIHRoZSAiU2FnYWNpdHkiIGFwcGxpY2F0aW9uIHdoaWNoIHJlY2VpdmVzIHJhdyBFTUcgZGF0YSBmcm9tIHRoZSBoZWFkYmFuZC4gSXQgdXNlcyBBSS9NTCBhbGdvcml0aG1zIHRvIGNsYXNzaWZ5IHRoZSBzaWduYWxzIGFuZCBkZXRlcm1pbmUgdGhlIHVzZXIncyBpbnRlbnQuIEl0IHRoZW4gc2VuZHMgdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQgdG8gdGhlIHNtYXJ0IGhvbWUgZGV2aWNlcy48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iaW5mby1yb3V0ZXIiIGNsYXNzPSJlbWctZmlndXJlLWluZm8tYm94IGVtZy1oaWRkZW4iPgogICAgICAgICAgICA8aDQ+V2ktRmkgUm91dGVyPC9oND4KICAgICAgICAgICAgPHA+VGhlIGNlbnRyYWwgY29tbXVuaWNhdGlvbiBodWIuIEl0IGFsbG93cyB0aGUgdGFibGV0IHRvIGNvbW11bmljYXRlIHdpcmVsZXNzbHkgd2l0aCB0aGUgU21hcnQgUGx1ZyBvdmVyIHRoZSBsb2NhbCBob21lIG5ldHdvcmssIGVuYWJsaW5nIHRoZSBjb250cm9sIG9mIElvVCBkZXZpY2VzLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJpbmZvLXBsdWciIGNsYXNzPSJlbWctZmlndXJlLWluZm8tYm94IGVtZy1oaWRkZW4iPgogICAgICAgICAgICA8aDQ+U21hcnQgUGx1ZzwvaDQ+CiAgICAgICAgICAgIDxwPkFuIElvVCBkZXZpY2UgdGhhdCBwbHVncyBpbnRvIGEgc3RhbmRhcmQgZWxlY3RyaWNhbCBvdXRsZXQuIEl0IGNhbiBiZSBjb250cm9sbGVkIHJlbW90ZWx5IHRvIHR1cm4gYW55IGNvbm5lY3RlZCBhcHBsaWFuY2Ugb24gb3Igb2ZmLiBJbiB0aGlzIGV4cGVyaW1lbnQsIGl0IGNvbnRyb2xzIHRoZSBwb3dlciB0byB0aGUgZGVzayBsYW1wLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJpbmZvLWxhbXAiIGNsYXNzPSJlbWctZmlndXJlLWluZm8tYm94IGVtZy1oaWRkZW4iPgogICAgICAgICAgICA8aDQ+RGVzayBMYW1wPC9oND4KICAgICAgICAgICAgPHA+QSBzdGFuZGFyZCwgbm9uLXNtYXJ0IGFwcGxpYW5jZSB1c2VkIGFzIHRoZSBvdXRwdXQgZGV2aWNlLiBJdHMgc3RhdGUgKG9uL29mZikgcHJvdmlkZXMgaW1tZWRpYXRlLCB0YW5naWJsZSBmZWVkYmFjayB0byB0aGUgdXNlciwgY29uZmlybWluZyB0aGF0IHRoZWlyIEVNRy1iYXNlZCBjb21tYW5kIHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuPC9wPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9ImVtZy10YWJsZS1jb250YWluZXIiPgogICA8dGFibGU+CiAgICA8Y2FwdGlvbj5UYWJsZSAxLiBMaXN0IG9mIGVxdWlwbWVudCBpbiBleHBlcmltZW50YWwgc2V0dXA8L2NhcHRpb24+CiAgICA8dGhlYWQ+CiAgICAgPHRyPjx0aD5UeXBlPC90aD48dGg+U3BlY3M8L3RoPjwvdHI+CiAgICA8L3RoZWFkPgogICAgPHRib2R5PgogICAgIDx0cj48dGQ+U21hcnQgSGVhZGJhbmQ8L3RkPjx0ZD5NdXNlIFMgSGVhZGJhbmQgd2lyZWxlc3Mgd2l0aCBCVDwvdGQ+PC90cj4KICAgICA8dHI+PHRkPlNtYXJ0IFBsdWc8L3RkPjx0ZD5Tb25vZmYgUzI2IFdpLUZpIFNtYXJ0IFBsdWc8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZD5MaWdodCBzb3VyY2U8L3RkPjx0ZD50cmFkaXRpb25hbCBkZXNrIGxhbXAgKE1heGNvbSBNTDExMCk8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZD5Nb2JpbGUgRGV2aWNlPC90ZD48dGQ+U2Ftc3VuZyBHYWxheHkgVGFiIFM3IEZFIHdpdGggU2FnYWNpdHkgYXBwbGljYXRpb248L3RkPjwvdHI+CiAgICAgPHRyPjx0ZD5XaUZpIFJvdXRlcjwvdGQ+PHRkPkN1ZHkgV1IxMjAwICgxMjAwTWIvcyBhL2IvZy9uL2FjKSBEdWFsQmFuZDwvdGQ+PC90cj4KICAgIDwvdGJvZHk+CiAgIDwvdGFibGU+CiAgPC9kaXY+CiAgPHA+VGhlIHByb3RvdHlwZSBvZiB0aGUgU2FnYWNpdHkgc3lzdGVtIHVzZWQgaW4gdGhpcyBzdHVkeSBpcyBiYXNlZCBvbiB0aHJlZSBjbGFzc2lmaWNhdGlvbiBhbGdvcml0aG1zIHRoYXQgd2VyZSB2ZXJpZmllZCwgdHJhaW5lZCwgYW5kIGltcGxlbWVudGVkIGluIHRoZSBwcmV2aW91cyBzdGFnZXMgb2YgdGhlIFNhZ2FjaXR5IHByb2plY3QgYW5kIHZlcmlmaWVkIHRvd2FyZHMgZWZmZWN0aXZlIGZhY2lhbCBleHByZXNzaW9uIHJlY29nbml0aW9uIChMaW5lYXIgRGlzY3JpbWluYW50IEFuYWx5c2lzIChMREEpLCBLLU5lYXJlc3QgTmVpZ2hib3JzIChLTk4pLCBhbmQgTG9naXN0aWMgUmVncmVzc2lvbikuIFRoZXNlIGFsZ29yaXRobXMgd2VyZSB1c2VkIHRvIGNhdGVnb3JpemUgc2lnbmFsIHNlZ21lbnRzIGludG8gdHdvIGNsYXNzZXM6IG1vdmVtZW50IGFuZCByZXN0LiBGZWF0dXJlIHNlbGVjdGlvbiB3YXMgZ3VpZGVkIGJ5IGJvdGggZXhpc3RpbmcgcmVzZWFyY2ggWzIwXSBhbmQgdGhlIHRyYW5zZGlzY2lwbGluYXJ5IHJlc2VhcmNoIHRlYW0ncyBleHBlcnRpc2UuIEluIHRoaXMgcGFwZXIsIHdlIGZvY3VzIG9uIGhhbmRzLW9uIHVzZXIgZXhwZXJpZW5jZSBleHBsb3JhdGlvbiBhbmQgdGhlIGluc2lnaHRzIGdhaW5lZCwgYXMgYSBwYXJ0IG9mIGEgYnJvYWRlciByZXNlYXJjaCB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgaW4gYSBzZXBhcmF0ZSBwYXBlci48L3A+CiAgPHA+VGhlIGV4cGVyaW1lbnRhbCBwcm9jZWR1cmUgd2FzIGJhc2VkIG9uIHRoZSBwYXJ0aWNpcGF0b3J5IGxpdmluZyBsYWIgYXBwcm9hY2ggYW5kIGNvbnNpc3RlZCBvZiBoYW5kcy1vbiBleHBlcmllbmNlIHNlc3Npb25zIHdpdGggaW4tZGVwdGggb2JzZXJ2YXRpb25zIGFuZCBpbnRlcnZpZXdzIHdpdGggdGhlIGVuZC11c2VycyBmcm9tIHRoZSB0YXJnZXQgZ3JvdXBzLiBUaGUgZXhwZXJpbWVudGFsIHN0dWR5IGludm9sdmVkIDE4IHBlcnNvbnMsIGluY2x1ZGluZyBzaXggcGVyc29ucyBiZXR3ZWVuIDQ1IGFuZCA2NSB5ZWFycyBvbGQgKHRocmVlIG1hbGUgYW5kIGZlbWFsZSBwYXJ0aWNpcGFudHMpLCBzaXggcGVyc29ucyBvdmVyIDY1IHllYXJzIG9sZCAodHdvIG1hbGUgYW5kIGZvdXIgZmVtYWxlIHBhcnRpY2lwYW50cykgYW5kIHNpeCBwZXJzb25zIHdpdGggZGlhZ25vc2VkIG1vYmlsaXR5IGRpc2FiaWxpdHksIGluY2x1ZGluZyBwZXJzb25zIHVzaW5nIHdoZWVsY2hhaXJzIG9yIGNydXRjaGVzICh0aHJlZSBmZW1hbGUgYW5kIHRocmVlIG1hbGUgcGFydGljaXBhbnRzKS4gVGhlIGV4cGVyaW1lbnRhbCBwcm90b2NvbCBjb25zaXN0ZWQgb2YgdHdvIG1ham9yIHBoYXNlczogc2V0dGluZyB1cCB0aGUgU2FnYWNpdHkgU0hUIGVjb3N5c3RlbSBhbmQgYW4gZXhwbG9yYXRvcnkgaGFuZHMtb24gZXhwZXJpZW5jZSBzZXNzaW9uIG9mIHRoZSBTSFQgU2FnYWNpdHkgZW52aXJvbm1lbnQgdXNpbmcgYW4gRU1HIGludGVyZmFjZS4gSW4gdGhpcyBzdHVkeSwgd2UgZm9jdXMgb24gRU1HIGFuZCBBSS1iYXNlZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwcmV0cmFpbmVkIFNhZ2FjaXR5IHN5c3RlbSBwcm92aWRpbmcgcHJlbGltaW5hcnkgaW5zaWdodHMgZnJvbSB0aGUgdXNlcnMgYW5kIG9ic2VydmF0aW9ucyB0aGF0IGZvcm0gYmFzaXMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24sIGV4cGVyaW1lbnRhbCBzdHVkaWVzIGFuZCBzeXN0ZW0gZGV2ZWxvcG1lbnQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImVtZy1wYXJ0aWNpcGFudC12aXoiPgogICAgICAgIDxkaXYgY2xhc3M9ImVtZy1wYXJ0aWNpcGFudC1ncm91cCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtZy1ncm91cC1pY29uIGVtZy1ncm91cC1pY29uLWFnZTEiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtZy1ncm91cC1jb3VudCI+Njwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbWctZ3JvdXAtbGFiZWwiPlBlb3BsZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJlbWctZ3JvdXAtZGVzYyI+QWdlcyA0NS02NSAoMyBtYWxlLCAzIGZlbWFsZSk8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXBhcnRpY2lwYW50LWdyb3VwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1nLWdyb3VwLWljb24gZW1nLWdyb3VwLWljb24tYWdlMiI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1nLWdyb3VwLWNvdW50Ij42PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtZy1ncm91cC1sYWJlbCI+UGVvcGxlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgY2xhc3M9ImVtZy1ncm91cC1kZXNjIj5BZ2VzIDY1KyAoMiBtYWxlLCA0IGZlbWFsZSk8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXBhcnRpY2lwYW50LWdyb3VwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1nLWdyb3VwLWljb24gZW1nLWdyb3VwLWljb24tZGlzYWJpbGl0eSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1nLWdyb3VwLWNvdW50Ij42PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtZy1ncm91cC1sYWJlbCI+UGVvcGxlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgY2xhc3M9ImVtZy1ncm91cC1kZXNjIj5XaXRoIG1vYmlsaXR5IGRpc2FiaWxpdHkgKDMgbWFsZSwgMyBmZW1hbGUpPC9wPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgoKICA8aDI+MyBQcmVsaW1pbmFyeSBSZXN1bHRzIGFuZCBJbnNpZ2h0czwvaDI+CiAgPHA+SW4gZ2VuZXJhbCwgYWxsIHVzZXJzIHdlcmUgYWJsZSB0byBvcGVyYXRlIGFuZCBjb250cm9sIHRoZSBwcmVjb25maWd1cmVkIGV4cGVyaW1lbnRhbCBFTUcgU0hUIHNldHVwLCBzcGVjaWZpY2FsbHkgY29udHJvbGxpbmcgdGhlIGxpZ2h0IHVzaW5nIHRoZSBwcmVsaW1pbmFyeSB3b3JraW5nIHByb3RvdHlwZSBvZiBTYWdhY2l0eS4gSW5zaWdodHMgYW5kIG9ic2VydmF0aW9ucyBmcm9tIHRoaXMgcHJlbGltaW5hcnkgZXhwZXJpbWVudGFsIHN0dWR5IG9mIHRoZSB3b3JraW5nIHByb3RvdHlwZSBvZiBjb21wcmVoZW5zaXZlIEVPRy9FTUcgU0hUIHN5c3RlbSBTYWdhY2l0eSBhcmUgaW4gbGluZSB3aXRoIGluZm9ybWF0aW9uIGdhdGhlcmVkIGF0IHRoZSBwcmV2aW91cyBzdGVwcyBvZiB0aGUgcGFydGljaXBhdG9yeSBkZXNpZ24gcHJvY2VzcyB3aXRoIHVzZXJzLCBpLmUuIG9sZGVyIGFkdWx0cyBmcm9tIG91ciBMaXZpbmcgTGFiIEtvYm8sIHdoaWNoIGFyZSBhbHNvIGluIGxpbmUgd2l0aCB0aGUgcHJvamVjdCBhc3N1bXB0aW9ucy4gSW4gcGFydGljdWxhciwgdXNlcnMgcG9pbnRlZCBvdXQgdGhhdCB0aGUgcG90ZW50aWFsIHRhcmdldCBncm91cHMgb2YgdGhlIEVNRy1jb250cm9sbGVkIFNIVCBzeXN0ZW0gbWF5IGJlIG9sZGVyIGFkdWx0cyBhbmQgaW1wYWlyZWQgcGVyc29ucyAoaW5jbHVkaW5nIHRlbXBvcmFyeSBhbmQgcGVybWFuZW50IGltcGFpcm1lbnQpLiBPbiB0aGUgb3RoZXIgaGFuZCwgdXNlcnMgYWxzbyBwb2ludGVkIG91dCB0aGF0IGJhc2VkIG9uIHRoZSBlYXNlIG9mIHVzZSBvZiB0aGUgc21hcnRiYW5kLCB0aGUgc3lzdGVtIG1heSBiZSB0YXJnZXRlZCB0byB2YXJpb3VzIGVuZCB1c2VycyBncm91cHMsIGFzIGEgcGFydCBvZiB0aGUgbXVsdGltb2RhbCBzeXN0ZW0sIHRoYXQgd2lsbCBzdXBwb3J0IHVzZXJzIGFzIGEgcHJpbWFyeSBvciBzdXBwbGVtZW50YXJ5IGludGVyZmFjZSBhY2NvcmRpbmcgdG8gdGhlIGNpcmN1bXN0YW5jZXMuIEluIHBhcnRpY3VsYXIsIHVzZXJzIGlkZW50aWZpZWQgRU1HLWJhc2VkIGNvbnRyb2wgYXMgdGhlIHByaW1hcnkgb3IgcHJlZmVycmVkIGludGVyZmFjZSwgZXNwZWNpYWxseSBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXkgbmVlZCBoYW5kcyBmcmVlIG9yIGR1ZSB0byBwcml2YWN5IGNvbmNlcm5zICh3aGVuIG11bHRpcGxlIHBlcnNvbnMgc2hhcmUgdGhlIHNhbWUgc3BhY2UpLiBUaGV5IGFsc28gcG9pbnRlZCBvdXQgdGhhdCBzdWNoIEVNRyBpbnRlcmZhY2VzIG1heSBiZSB0cmVhdGVkIGFzIHN1cHBsZW1lbnRhcnkgaW4gdHlwaWNhbCBzY2VuYXJpb3MgbGlrZSBjb250cm9sbGluZyB0aGUgbGlnaHQgb3IgY2FsbGluZyB0aGUgYXNzaXN0YW5jZSwgZXNwZWNpYWxseSBieSB0aGUgaW1wYWlyZWQgcGVyc29ucy4gVGhlc2UgaW5zaWdodHMgd2VyZSBjb25maXJtZWQgaW4gdGhlIGV4cGVyaW1lbnRhbCBwcm90b3R5cGUgc3R1ZHkgZ3JvdXAuIEZvciBleGFtcGxlLCBvbmUgb2YgdGhlIHBhcnRpY2lwYW50cywgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgY2FyZSBvZiB0aGUgcGVybWFuZW50bHkgZGlzYWJsZWQgb2xkZXIgbWVtYmVyIG9mIHRoZSBmYW1pbHkgKHBhcmFseXplZCBmcm9tIHRoZSBuZWNrIGRvd24pLCBmaW5kcyB0aGUgcHJvcG9zZWQgc29sdXRpb24gYXMgdmVyeSBwcm9taXNpbmcgYW5kIHVzZWZ1bCBpbiBldmVyeWRheSBjYXJlZ2l2aW5nIHByYWN0aWNlLiBIb3dldmVyLCB0aGlzIGV4cGVyaW1lbnRhbCBzdHVkeSBhbHNvIHVudmVpbGVkIHNvbWUgbGltaXRhdGlvbnMgYW5kIGNoYWxsZW5nZXMgcmVsYXRlZCB0byBpbnRlcmZhY2UgYWNjdXJhY3ksIHRoZSBvbmJvYXJkaW5nIHByb2Nlc3MgKHVzZXIgdHJhaW5pbmcgdGltZSksIGFuZCB0aGUgaW50dWl0aXZlbmVzcyBvZiB0aGUgaW50ZXJhY3Rpb24gcGFyYWRpZ21zLiBUaGVzZSBhcmVhcyB3aWxsIGJlIHRoZSBzdWJqZWN0IG9mIGZ1cnRoZXIgcmVzZWFyY2ggYW5kIHB1YmxpY2F0aW9ucy48L3A+CgogICAgPGRpdiBjbGFzcz0iZW1nLXRha2Vhd2F5cyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXRha2Vhd2F5LWNhcmQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWctdGFrZWF3YXktaWNvbiBlbWctcG9zaXRpdmUiPgogICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtZy10YWtlYXdheS1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxzdHJvbmc+SGlnaCBQb3RlbnRpYWwgZm9yIFRhcmdldCBHcm91cHM8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDxwPlVzZXJzIGNvbmZpcm1lZCB0aGUgc3lzdGVtIGlzIGVzcGVjaWFsbHkgcHJvbWlzaW5nIGZvciBvbGRlciBhZHVsdHMgYW5kIGluZGl2aWR1YWxzIHdpdGggaW1wYWlybWVudHMsIHBhcnRpY3VsYXJseSB0aG9zZSB3aXRoIHBlcm1hbmVudCBkaXNhYmlsaXRpZXMgbGlrZSBwYXJhbHlzaXMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJlbWctdGFrZWF3YXktY2FyZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtZy10YWtlYXdheS1pY29uIGVtZy1wb3RlbnRpYWwiPgogICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNOSAyMWMwIC41NS40NSAxIDEgMWg0Yy41NSAwIDEtLjQ1IDEtMXYtMUg5djF6bTMtMTlDOC4xNCAyIDUgNS4xNCA1IDljMCAyLjM4IDEuMTkgNC40NyAzIDUuNzRWMTdjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIuMjZjMS44MS0xLjI3IDMtMy4zNiAzLTUuNzQgMC0zLjg2LTMuMTQtNy03LTd6bTIuODUgMTEuMWwtLjg1LjZWMTZoLTR2LTIuM2wtLjg1LS42QzcuOCAxMi4xNiA3IDEwLjYzIDcgOWMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1YzAgMS42My0uOCAzLjE2LTIuMTUgNC4xeiIvPjwvc3ZnPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXRha2Vhd2F5LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHN0cm9uZz5NdWx0aW1vZGFsIEFwcGxpY2F0aW9uPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8cD5UaGUgRU1HIGludGVyZmFjZSB3YXMgc2VlbiBhcyBhIHZhbHVhYmxlIHByaW1hcnkgY29udHJvbCBtZXRob2QgKGZvciBoYW5kcy1mcmVlIG5lZWRzKSBvciBhcyBhIHN1cHBsZW1lbnRhcnkvYmFja3VwIG9wdGlvbiBmb3Igc3BlY2lmaWMgdGFza3MgbGlrZSBjYWxsaW5nIGZvciBhc3Npc3RhbmNlLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXRha2Vhd2F5LWNhcmQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWctdGFrZWF3YXktaWNvbiBlbWctY2hhbGxlbmdlIj4KICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtZy10YWtlYXdheS1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxzdHJvbmc+SWRlbnRpZmllZCBDaGFsbGVuZ2VzPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8cD5UaGUgc3R1ZHkgaGlnaGxpZ2h0ZWQgYXJlYXMgbmVlZGluZyBpbXByb3ZlbWVudDogaW50ZXJmYWNlIGFjY3VyYWN5LCB0aGUgbGVuZ3RoIG9mIHRoZSB1c2VyIG9uYm9hcmRpbmcvdHJhaW5pbmcgcHJvY2VzcywgYW5kIG1ha2luZyB0aGUgaW50ZXJhY3Rpb24gbW9yZSBpbnR1aXRpdmUuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICA8aDI+NCBDb25jbHVzaW9ucyBhbmQgRnVydGhlciBXb3JrPC9oMj4KICA8cD5UaGUgcHJlc2VudGVkIGV4cGxvcmF0b3J5IHN0dWR5LCBhcyBwYXJ0IG9mIHRoZSBicm9hZGVyIHJlc2VhcmNoLCBwcm92aWRlcyBwcmVsaW1pbmFyeSBmaW5kaW5ncyBhbmQgdmFsdWFibGUgaW5zaWdodHMgZm9yIGZ1cnRoZXIgcmVzZWFyY2ggb24gaW5ub3ZhdGl2ZSwgbm9uLWludmFzaXZlIGludGVyZmFjZXMgZm9yIFNtYXJ0IEhvbWUgVGVjaG5vbG9naWVzIChTSFQpLiBCeSBsZXZlcmFnaW5nIGJpb2VsZWN0cmljIHNpZ25hbHMsIHNwZWNpZmljYWxseSBlbGVjdHJvbXlvZ3JhcGh5IChFTUcpIGFuZCBlbGVjdHJvb2N1bG9ncmFwaHkgKEVPRyksIGFzIGNvbXBsZW1lbnRhcnkgaW50ZXJmYWNlcywgd2UgYWltIHRvIGV4cGFuZCB0aGUgYWNjZXNzaWJpbGl0eSBhbmQgdXNhYmlsaXR5IG9mIFNIVC4gSW4gcGFydGljdWxhciwgdGhpcyByZXNlYXJjaCwgYXMgcGFydCBvZiB0aGUgU2FnYWNpdHkgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IHByb2plY3QsIGFpbXMgdG8gZW1wb3dlciBvbGRlciBhZHVsdHMsIGltcGFpcmVkIHBlcnNvbnMsIGFuZCBvdGhlciBtYXJnaW5hbGl6ZWQgZ3JvdXBzIHdpdGhpbiB0aGUgdGVjaG5vbG9neSBsYW5kc2NhcGUuIFRocm91Z2ggYSBwYXJ0aWNpcGF0b3J5IGxpdmluZyBsYWIgYXBwcm9hY2ggaW52b2x2aW5nIGRpdmVyc2UgZW5kLXVzZXJzLCB3ZSBpbnZlc3RpZ2F0ZWQgdGhlIHBvdGVudGlhbCBhbmQgbGltaXRhdGlvbnMgb2YgdGhlc2Ugbm9uLXN0YW5kYXJkIGludGVyZmFjZXMuIE91ciBmaW5kaW5ncyByZXZlYWwgcHJvbWlzaW5nIG9wcG9ydHVuaXRpZXMgZm9yIG11bHRpbW9kYWwgU0hUIG1hbmFnZW1lbnQgdGhhdCBhcmUgaW4gbGluZSB3aXRoIG91ciBwcmV2aW91cyByZXNlYXJjaCBvbiBodW1hbi10ZWNobm9sb2d5IGludGVyYWN0aW9uLCB3aGlsZSBoaWdobGlnaHRpbmcgY2hhbGxlbmdlcyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHRlY2hub2xvZ2ljYWwgbGltaXRhdGlvbnMgYW5kIHVzZXIgYWNjZXB0YW5jZS4gRnV0dXJlIHJlc2VhcmNoIGRpcmVjdGlvbnMgaW5jbHVkZSByZWZpbmluZyBpbnRlcmZhY2UgYWNjdXJhY3ksIHJlZHVjaW5nIHVzZXIgdHJhaW5pbmcgdGltZSwgYW5kIGRldmVsb3BpbmcgaW50dWl0aXZlIGludGVyYWN0aW9uIHBhcmFkaWdtcyB0byBmdWxseSByZWFsaXplIHRoZSBwb3RlbnRpYWwgb2YgYmlvZWxlY3RyaWMgaW50ZXJmYWNlcyBpbiBTSFQuIEJ5IGFkZHJlc3NpbmcgdGhlc2UgY2hhbGxlbmdlcyBhbmQgY2FwaXRhbGl6aW5nIG9uIHRoZSBzdHJlbmd0aHMgb2YgRU1HL0VPRyBpbnRlcmZhY2VzLCB3ZSBjYW4gY3JlYXRlIG1vcmUgaW5jbHVzaXZlLCB2ZXJzYXRpbGUgYW5kIHVzZXItY2VudHJpYyBTbWFydCBIb21lIGVudmlyb25tZW50cywgd2hpY2ggaXMgb25lIG9mIHRoZSBrZXkgYXNwZWN0cyBvZiBTYWdhY2l0eSBwcm9qZWN0IGFuZCBIQVNFIHJlc2VhcmNoIGdyb3VwIG9iamVjdGl2ZXMuPC9wPgogIAogIDxkaXYgY2xhc3M9ImVtZy1xdWl6LWNvbnRhaW5lciI+CiAgICA8aDI+Q2hlY2sgWW91ciBVbmRlcnN0YW5kaW5nPC9oMj4KICAgIDxkaXYgaWQ9ImVtZy1xdWl6LWZvcm0iPgogICAgICAgIDxkaXYgY2xhc3M9ImVtZy1xdWl6LXF1ZXN0aW9uIj4KICAgICAgICAgICAgPHA+MS4gV2hhdCBwcmltYXJ5IGJpb2VsZWN0cmljIHNpZ25hbCB3YXMgdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIHNtYXJ0IGhvbWUgZGV2aWNlIGluIHRoaXMgc3R1ZHk/PC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWctcXVpei1vcHRpb25zIiBkYXRhLWNvcnJlY3Q9ImEiPgogICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icTEiIHZhbHVlPSJhIj4gRU1HIChFbGVjdHJvbXlvZ3JhcGh5KTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJxMSIgdmFsdWU9ImIiPiBFQ0cgKEVsZWN0cm9jYXJkaW9ncmFwaHkpPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InExIiB2YWx1ZT0iYyI+IEVFRyAoRWxlY3Ryb2VuY2VwaGFsb2dyYXBoeSk8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJlbWctcXVpei1xdWVzdGlvbiI+CiAgICAgICAgICAgIDxwPjIuIFdobyB3YXMgaWRlbnRpZmllZCBhcyBhIGtleSB0YXJnZXQgZ3JvdXAgZm9yIHRoaXMgdGVjaG5vbG9neT88L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtZy1xdWl6LW9wdGlvbnMiIGRhdGEtY29ycmVjdD0iYiI+CiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJxMiIgdmFsdWU9ImEiPiBUZWNoLXNhdnZ5IHRlZW5hZ2VyczwvbGFiZWw+CiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJxMiIgdmFsdWU9ImIiPiBPbGRlciBhZHVsdHMgYW5kIGltcGFpcmVkIHBlcnNvbnM8L2xhYmVsPgogICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icTIiIHZhbHVlPSJjIj4gT2ZmaWNlIHdvcmtlcnM8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJlbWctcXVpei1xdWVzdGlvbiI+CiAgICAgICAgICAgIDxwPjMuIFdoaWNoIG9mIHRoZXNlIHdhcyBOT1QgbWVudGlvbmVkIGFzIGEgY2hhbGxlbmdlIGZvciB0aGUgc3lzdGVtPzwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1nLXF1aXotb3B0aW9ucyIgZGF0YS1jb3JyZWN0PSJjIj4KICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InEzIiB2YWx1ZT0iYSI+IEludGVyZmFjZSBhY2N1cmFjeTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJxMyIgdmFsdWU9ImIiPiBVc2VyIHRyYWluaW5nIHRpbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icTMiIHZhbHVlPSJjIj4gRGV2aWNlIGNvc3QgYW5kIGF2YWlsYWJpbGl0eTwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxidXR0b24gY2xhc3M9ImVtZy1xdWl6LWJ0biIgaWQ9ImVtZy1zdWJtaXQtcXVpeiI+Q2hlY2sgQW5zd2VyczwvYnV0dG9uPgogICAgICAgIDxkaXYgaWQ9ImVtZy1xdWl6LXJlc3VsdHMiPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxoMj5BY2tub3dsZWRnbWVudHM8L2gyPgogIDxwPlRoZSBzdHVkeSB3YXMgY29uZHVjdGVkIGFzIGEgcGFydCBvZiBhIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBncmFudDogRGV2ZWxvcG1lbnQgb2YgYW4gaW5ub3ZhdGl2ZSBzeXN0ZW0gZm9yIGNvbnRyb2xsaW5nIEludGVybmV0IG9mIFRoaW5ncyBkZXZpY2VzIHVzaW5nIGEgd2lyZWxlc3MgYmlvZWxlY3RyaWMgc2lnbmFsIGFtcGxpZmllciAoZ3JhbnQgbm8uIFJ6ZWN6eSBzIGRsYSBsdWR6aS8wMDc5LzIwMjApIGJ5IFRoZSBOYXRpb25hbCBDZW50ZXIgZm9yIFJlc2VhcmNoIGFuZCBEZXZlbG9wbWVudC4gSG93ZXZlciwgdGhpcyBzdHVkeSBjb25zdGl0dXRlcyBhbiBleGFtcGxlIG9mIGEgYm90dG9tLXVwIHBhcnRpY2lwYXRvcnkgcmVzZWFyY2ggaW5pdGlhdGl2ZSBkb25lIGluIHRoZSBzcGlyaXQgb2YgdHJhbnNkaXNjaXBsaW5hcnkgbGl2aW5nIGxhYiBjb2xsYWJvcmF0aW9uIGJldHdlZW4gc2NpZW50aXN0cywgcHJhY3RpdGlvbmVycywgZW50cmVwcmVuZXVycywgYW5kIHZvbHVudGVlcnMuIFRoZXJlZm9yZSwgd2Ugd291bGQgbGlrZSB0byB0aGFuayB0aGUgbWFueSBwZW9wbGUgYW5kIGluc3RpdHV0aW9ucyBnYXRoZXJlZCB0b2dldGhlciBieSB0aGUgTGl2aW5nIExhYiBLb2JvIGFuZCB0aGUgSEFTRSBSZXNlYXJjaCBHcm91cC4gRmlyc3QsIHdlIHdvdWxkIGxpa2UgdG8gdGhhbmsgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBIQVNFIHJlc2VhcmNoIGdyb3VwIChIdW1hbiBBc3BlY3RzIGluIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nKSBhbmQgdGhlIExpdmluZyBMYWIgS29ibyBjb21tdW5pdHkgZm9yIHRoZWlyIHN1cHBvcnQgb2YgdGhpcyByZXNlYXJjaCwgZXNwZWNpYWxseSB0aGUgb2xkZXIgYWR1bHRzLCBmb3Igc3VwcG9ydGluZyByZWNydWl0bWVudCBhbmQgcGFydGljaXBhdGlvbiBpbiB0aGUgbGFiIHN0dWRpZXMuIFRoZSBhdXRob3JzIGhhdmUgbm8gY29tcGV0aW5nIGludGVyZXN0cyB0byBkZWNsYXJlIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoZSBjb250ZW50IG9mIHRoaXMgYXJ0aWNsZS48L3A+CgogIDxoMj5SZWZlcmVuY2VzPC9oMj4KICA8ZGl2IGNsYXNzPSJlbWctcmVmZXJlbmNlcyI+CiAgIDxvbD4KICAgIDxsaT5CaWVsZSwgQy4sIEphc2t1bHNrYSwgQS4sIEtvcGVjLCBXLiwgS293YWxza2ksIEouLCBTa29ydXBza2EsIEsuLCBaZHJvZG93c2thLCBBLjogSG93IG1pZ2h0IHZvaWNlIGFzc2lzdGFudHMgcmFpc2Ugb3VyIGNoaWxkcmVuPyBJbjogSW50ZWxsaWdlbnQgSHVtYW4gU3lzdGVtcyBJbnRlZ3JhdGlvbiAyMDE5OiBQcm9jZWVkaW5ncyBvZiB0aGUgMm5kIEludGVybmF0aW9uYWwgQ29uZmVyZW5jZSBvbiBJbnRlbGxpZ2VudCBIdW1hbiBTeXN0ZW1zIEludGVncmF0aW9uIChJSFNJIDIwMTkpOiBJbnRlZ3JhdGluZyBQZW9wbGUgYW5kIEludGVsbGlnZW50IFN5c3RlbXMsIEZlYnJ1YXJ5IDctMTAsIDIwMTksIFNhbiBEaWVnbywgQ2FsaWZvcm5pYSwgVVNBLiBwcC4gMTYyLTE2Ny4gU3ByaW5nZXIgKDIwMTkpPC9saT4KICAgIDxsaT5EZXB0LiBvZiBFY29ub21pYywgVS5OLjogV29ybGQgUG9wdWxhdGlvbiBQcm9zcGVjdHMgMjAyNDogU3VtbWFyeSBvZiBSZXN1bHRzLiBVbml0ZWQgTmF0aW9ucywgTmV3IFlvcmsgKDIwMjQpPC9saT4KICAgIDxsaT5Fcmlrc3NvbiwgTS46IFN0YXRlLW9mLXRoZS1hcnQgaW4gdXRpbGl6aW5nIGxpdmluZyBsYWJzIGFwcHJvYWNoIHRvIHVzZXItY2VudHJpYyBpY3QgaW5ub3ZhdGlvbi1hIGV1cm9wZWFuIGFwcHJvYWNoLiBDZW50ZXIgZm9yIERpc3RhbmNlLXNwYW5uaW5nIFRlY2hub2xvZ3kuIEx1bGVhIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSBTd2VkZW4gKDIwMDUpPC9saT4KICAgIDxsaT5FdXJvc3RhdCwgRS5VLjogQWdlaW5nIEV1cm9wZSBsb29raW5nIGF0IHRoZSBsaXZlcyBvZiBvbGRlciBwZW9wbGUgaW4gdGhlIEVVLiBQdWJsaWNhdGlvbnMgT2ZmaWNlIG9mIHRoZSBFdXJvcGVhbiBVbmlvbiwgTHV4ZW1ib3VyZyAoMjAyMCk8L2xpPgogICAgPGxpPkphc2t1bHNrYSwgQS4sIFNrb3J1cHNrYSwgSy4sIEthcnBvd2ljeiwgQi4sIEJpZWxlLCBDLiwgS293YWxza2ksIEouLCBLb3BlLCBXLjogRXhwbG9yYXRpb24gb2Ygdm9pY2UgdXNlciBpbnRlcmZhY2VzIGZvciBvbGRlciBhZHVsdHMgYSBwaWxvdCBzdHVkeSB0byBhZGRyZXNzIHByb2dyZXNzaXZlIHZpc2lvbiBsb3NzLiBJbjogQ29uZmVyZW5jZSBvbiBNdWx0aW1lZGlhLCBJbnRlcmFjdGlvbiwgRGVzaWduIGFuZCBJbm5vdmF0aW9uLiBwcC4gMTU5LTE2OC4gU3ByaW5nZXIgKDIwMjApPC9saT4KICAgIDxsaT5Kb3Zhbm92aWMsIE0uLCBNaXRyb3YsIEcuLCBaZHJhdmV2c2tpLCBFLiwgTGFtZXNraSwgUC4sIENvbGFudG9uaW8sIFMuLCBLYW1wZWwsIE0uLCBUZWxsaW9nbHUsIEguLCBGbG9yZXotUmV2dWVsdGEsIEYuOiBBbWJpZW50IGFzc2lzdGVkIGxpdmluZzogc2NvcGluZyByZXZpZXcgb2YgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UgbW9kZWxzLCBkb21haW5zLCB0ZWNobm9sb2d5LCBhbmQgY29uY2VybnMuIEpvdXJuYWwgb2YgTWVkaWNhbCBJbnRlcm5ldCBSZXNlYXJjaCAyNCgxMSksIGUzNjU1MyAoMjAyMik8L2xpPgogICAgPGxpPkthcnBvd2ljeiwgQi4sIE1hc3lrLCBSLiwgU2tvcnVwc2thLCBLLiwgSmFib3NraSwgRC4sIEthbGlub3dza2ksIEsuLCBLb2J5bGlza2ksIFAuLCBQb2Nod2F0a28sIEcuLCBLb3JuYWNrYSwgTS4sIEtvcGUsIFcuOiBJbnRlcmdlbmVyYXRpb25hbCBpbnRlcmFjdGlvbiB3aXRoIGF2YXRhcnMgaW4gdnI6IEFuIGV4cGxvcmF0b3J5IHN0dWR5IHRvd2FyZHMgYW4geHIgcmVzZWFyY2ggZnJhbWV3b3JrLiBJbjogQ29uZmVyZW5jZSBvbiBNdWx0aW1lZGlhLCBJbnRlcmFjdGlvbiwgRGVzaWduIGFuZCBJbm5vdmF0aW9uLiBwcC4gMjI5LTIzOC4gU3ByaW5nZXIgKDIwMjEpPC9saT4KICAgIDxsaT5Lb3BlLCBXLiwgQmllbGUsIEMuLCBLb3JuYWNrYSwgTS4sIFBvY2h3YXRrbywgRy4sIEphc2t1bHNrYSwgQS4sIFNrb3J1cHNrYSwgSy4sIFBhbHVjaCwgSi4sIEdhZ28sIFAuLCBLYXJwb3dpY3osIEIuLCBOaWV3aXNraSwgTS4sIGV0IGFsLjogUGFydGljaXBhdG9yeSBkZXNpZ24gbGFuZHNjYXBlIGZvciB0aGUgaHVtYW4tbWFjaGluZSBjb2xsYWJvcmF0aW9uLCBpbnRlcmFjdGlvbiBhbmQgYXV0b21hdGlvbiBhdCB0aGUgZnJvbnRpZXJzIG9mIGhjaSAocGRsIDIwMjEpLiBJbjogSUZJUCBDb25mZXJlbmNlIG9uIEh1bWFuLUNvbXB1dGVyIEludGVyYWN0aW9uLiBwcC4gNTY0LTU2OS4gU3ByaW5nZXIgKDIwMjEpPC9saT4KICAgIDxsaT5Lb3BlLCBXLiwgS293YWxza2ksIEouLCBQYWx1Y2gsIEouLCBKYXNrdWxza2EsIEEuLCBTa29ydXBza2EsIEsuSC4sIE5pZXdpc2tpLCBNLiwgS3J6eXdpY2tpLCBNLiwgQmllbGUsIEMuOiBPbGRlciBhZHVsdHMgYW5kIGJyYWluLWNvbXB1dGVyIGludGVyZmFjZTogYW4gZXhwbG9yYXRvcnkgc3R1ZHkuIEluOiBFeHRlbmRlZCBBYnN0cmFjdHMgb2YgdGhlIDIwMjEgQ0hJIENvbmZlcmVuY2Ugb24gSHVtYW4gRmFjdG9ycyBpbiBDb21wdXRpbmcgU3lzdGVtcy4gcHAuIDEtNSAoMjAyMSk8L2xpPgogICAgPGxpPktvcGUsIFcuLCBOaWVsZWssIFIuLCBXaWVyemJpY2tpLCBBLjogR3VpZGVsaW5lcyB0b3dhcmRzIGJldHRlciBwYXJ0aWNpcGF0aW9uIG9mIG9sZGVyIGFkdWx0cyBpbiBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwcm9jZXNzZXMgdXNpbmcgYSBuZXcgc3BpcmFsIG1ldGhvZCBhbmQgcGFydGljaXBhdG9yeSBhcHByb2FjaC4gSW46IFByb2NlZWRpbmdzIG9mIHRoZSAxMXRoIEludGVybmF0aW9uYWwgd29ya3Nob3Agb24gY29vcGVyYXRpdmUgYW5kIGh1bWFuIGFzcGVjdHMgb2Ygc29mdHdhcmUgZW5naW5lZXJpbmcuIHBwLiA0OS01NiAoMjAxOCk8L2xpPgogICAgPGxpPktvd2Fsc2tpLCBKLiwgSmFza3Vsc2thLCBBLiwgU2tvcnVwc2thLCBLLiwgQWJyYW1jenVrLCBLLiwgQmllbGUsIEMuLCBLb3BlLCBXLiwgTWFyYXNlaywgSy46IE9sZGVyIGFkdWx0cyBhbmQgdm9pY2UgaW50ZXJhY3Rpb246IEEgcGlsb3Qgc3R1ZHkgd2l0aCBnb29nbGUgaG9tZS4gSW46IEV4dGVuZGVkIEFic3RyYWN0cyBvZiB0aGUgMjAxOSBDSEkgQ29uZmVyZW5jZSBvbiBodW1hbiBmYWN0b3JzIGluIGNvbXB1dGluZyBzeXN0ZW1zLiBwcC4gMS02ICgyMDE5KTwvbGk+CiAgICA8bGk+TWFyaWt5YW4sIEQuLCBQYXBhZ2lhbm5pZGlzLCBTLiwgQWxhbWFub3MsIEUuOiBBIHN5c3RlbWF0aWMgcmV2aWV3IG9mIHRoZSBzbWFydCBob21lIGxpdGVyYXR1cmU6IEEgdXNlciBwZXJzcGVjdGl2ZS4gVGVjaG5vbG9naWNhbCBGb3JlY2FzdGluZyBhbmQgU29jaWFsIENoYW5nZSAxMzgsIDEzOS0xNTQgKDIwMTkpPC9saT4KICAgIDxsaT5QYWwsIEQuLCBGdW5pbGt1bCwgUy4sIENoYXJvZW5raXRrYXJuLCBOLiwgS2FudGhhbWFub24sIFAuOiBJbnRlcm5ldC1vZi10aGluZ3MgYW5kIHNtYXJ0IGhvbWVzIGZvciBlbGRlcmx5IGhlYWx0aGNhcmU6IEFuIGVuZCB1c2VyIHBlcnNwZWN0aXZlLiBJRUVFIEFjY2VzcyA2LCAxMDQ4My0xMDQ5NiAoMjAxOCk8L2xpPgogICAgPGxpPlJ1ZG5pY2thLCBFLiwgTmFwaWVyYWEsIFAuLCBQb2RmaWd1cm5hLCBBLiwgTWN6ZWthbHNraSwgQi4sIFNtb2xhcmN6eWssIFIuLCBHcnltb3dpY3osIE0uOiBUaGUgd29ybGQgaGVhbHRoIG9yZ2FuaXphdGlvbiAod2hvKSBhcHByb2FjaCB0byBoZWFsdGh5IGFnZWluZy4gTWF0dXJpdGFzIDEzOSwgNi0xMSAoMjAyMCk8L2xpPgogICAgPGxpPlNrb3J1cHNrYSwgSy4sIEphc2t1bHNrYSwgQS4sIE1hc3lrLCBSLiwgUGFsdWNoLCBKLiwgTmllbGVrLCBSLiwgS29wZSwgVy46IE9sZGVyIGFkdWx0cycgbW90aXZhdGlvbiBhbmQgZW5nYWdlbWVudCB3aXRoIGRpdmVyc2UgY3Jvd2Rzb3VyY2luZyBjaXRpemVuIHNjaWVuY2UgdGFza3MuIEluOiBJRklQIENvbmZlcmVuY2Ugb24gSHVtYW4tQ29tcHV0ZXIgSW50ZXJhY3Rpb24uIHBwLiA5My0xMDMuIFNwcmluZ2VyICgyMDIxKTwvbGk+CiAgICA8bGk+U3RhdGlzdGE6IEludGVybmV0IG9mIHRoaW5ncywgY29uc3VtZXIgaW90LCBzbWFydCBob21lIHdvcmxkd2lkZS4gVGVjaC4gcmVwLiwgaHR0cHM6Ly93d3cuc3RhdGlzdGEuY29tLyAoMjAyNCk8L2xpPgogICAgPGxpPlN1biwgSC4sIERlIEZsb3JpbywgVi4sIEd1aSwgTi4sIEJsb25kaWEsIEMuOiBQcm9taXNlcyBhbmQgY2hhbGxlbmdlcyBvZiBhbWJpZW50IGFzc2lzdGVkIGxpdmluZyBzeXN0ZW1zLiBJbjogMjAwOSBTaXh0aCBJbnRlcm5hdGlvbmFsIENvbmZlcmVuY2Ugb24gSW5mb3JtYXRpb24gVGVjaG5vbG9neTogTmV3IEdlbmVyYXRpb25zLiBwcC4gMTIwMS0xMjA3LiBJZWVlICgyMDA5KTwvbGk+CiAgICA8bGk+VmFuIERhbSwgQS46IFBvc3Qtd2ltcCB1c2VyIGludGVyZmFjZXMuIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00gNDAoMiksIDYzLTY3ICgxOTk3KTwvbGk+CiAgICA8bGk+V2lsbW90aCwgSi5SLiwgQmFzLCBELiwgTXVraGVyamVlLCBTLiwgSGFuaWYsIE4uLCBldCBhbC46IFdvcmxkIFNvY2lhbCBSZXBvcnQgMjAyMzogTGVhdmluZyBubyBvbmUgYmVoaW5kIGluIGFuIGFnZWluZyB3b3JsZC4gVU4gKDIwMjMpPC9saT4KICAgIDxsaT5aaGFuZywgWC4sIEh1YW5nLCBILiwgWWFuZywgUS46IFJlYWwtdGltZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGYtcmVjb3ZlcnkgZW1nIHBhdHRlcm4gcmVjb2duaXRpb24gaW50ZXJmYWNlIGZvciBhcnRpZmljaWFsIGFybXMuIEluOiAyMDEzIDM1dGggQW5udWFsIEludGVybmF0aW9uYWwgQ29uZmVyZW5jZSBvZiB0aGUgSUVFRSBFbmdpbmVlcmluZyBpbiBNZWRpY2luZSBhbmQgQmlvbG9neSBTb2NpZXR5IChFTUJDKS4gcHAuIDU5MjYtNTkyOS4gSUVFRSAoMjAxMyk8L2xpPgogICA8L29sPgogIDwvZGl2PgogPC9kaXY+CgogPHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICd1c2Ugc3RyaWN0JzsKCiAgIGNvbnN0IGVtZ1NtYXJ0SG9tZUFydGljbGUgPSB7CiAgICBpbml0OiBmdW5jdGlvbigpIHsKICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbWdTbWFydEhvbWVBcnRpY2xlJyk7CiAgICAgaWYgKCF0aGlzLmNvbnRhaW5lcikgcmV0dXJuOwogICAgIAogICAgIHRoaXMuaW5pdEludGVyYWN0aXZlRmlndXJlKCk7CiAgICAgdGhpcy5pbml0UXVpeigpOwogICAgfSwKCiAgICBpbml0SW50ZXJhY3RpdmVGaWd1cmU6IGZ1bmN0aW9uKCkgewogICAgIGNvbnN0IHN2ZyA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNlbWctc2V0dXAtc3ZnJyk7CiAgICAgY29uc3QgaW5mb0NvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNlbWctZmlndXJlLWluZm8tY29udGFpbmVyJyk7CiAgICAgY29uc3QgY29tcG9uZW50cyA9IHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuZW1nLXN2Zy1jb21wb25lbnQnKTsKICAgICBjb25zdCBkZWZhdWx0SW5mbyA9IGluZm9Db250YWluZXIucXVlcnlTZWxlY3RvcignI2luZm8tZGVmYXVsdCcpOwoKICAgICBjb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IHsKICAgICAgY29tcG9uZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICAgY29uc3QgdGFyZ2V0SWQgPSBjb21wb25lbnQuZGF0YXNldC50YXJnZXQ7CiAgICAgICBjb25zdCB0YXJnZXRJbmZvID0gaW5mb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHt0YXJnZXRJZH1gKTsKCiAgICAgICAvLyBEZWFjdGl2YXRlIGFsbCBjb21wb25lbnRzCiAgICAgICBjb21wb25lbnRzLmZvckVhY2goYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKICAgICAgIAogICAgICAgLy8gSGlkZSBhbGwgaW5mbyBib3hlcwogICAgICAgaW5mb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZW1nLWZpZ3VyZS1pbmZvLWJveCcpLmZvckVhY2goYm94ID0+IGJveC5jbGFzc0xpc3QuYWRkKCdlbWctaGlkZGVuJykpOwoKICAgICAgIC8vIEFjdGl2YXRlIGNsaWNrZWQgY29tcG9uZW50IGFuZCBzaG93IGl0cyBpbmZvCiAgICAgICBjb21wb25lbnQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICBpZiAodGFyZ2V0SW5mbykgewogICAgICAgIHRhcmdldEluZm8uY2xhc3NMaXN0LnJlbW92ZSgnZW1nLWhpZGRlbicpOwogICAgICAgfQogICAgICB9KTsKICAgICB9KTsKICAgICAKICAgICAvLyBSZXNldCB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGhlIGNvbXBvbmVudHMKICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgaWYgKCFzdmcuY29udGFpbnMoZS50YXJnZXQpKSB7CiAgICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpOwogICAgICAgICAgICBpbmZvQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbWctZmlndXJlLWluZm8tYm94JykuZm9yRWFjaChib3ggPT4gYm94LmNsYXNzTGlzdC5hZGQoJ2VtZy1oaWRkZW4nKSk7CiAgICAgICAgICAgIGRlZmF1bHRJbmZvLmNsYXNzTGlzdC5yZW1vdmUoJ2VtZy1oaWRkZW4nKTsKICAgICAgICB9CiAgICAgfSk7CgogICAgfSwKCiAgICBpbml0UXVpejogZnVuY3Rpb24oKSB7CiAgICAgY29uc3Qgc3VibWl0QnRuID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignI2VtZy1zdWJtaXQtcXVpeicpOwogICAgIGNvbnN0IHF1aXpGb3JtID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignI2VtZy1xdWl6LWZvcm0nKTsKICAgICBjb25zdCByZXN1bHRzQ29udGFpbmVyID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignI2VtZy1xdWl6LXJlc3VsdHMnKTsKCiAgICAgaWYgKCFzdWJtaXRCdG4pIHJldHVybjsKCiAgICAgc3VibWl0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBsZXQgc2NvcmUgPSAwOwogICAgICBjb25zdCBxdWVzdGlvbnMgPSBxdWl6Rm9ybS5xdWVyeVNlbGVjdG9yQWxsKCcuZW1nLXF1aXotcXVlc3Rpb24nKTsKCiAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+IHsKICAgICAgIGNvbnN0IG9wdGlvbnMgPSBxdWVzdGlvbi5xdWVyeVNlbGVjdG9yKCcuZW1nLXF1aXotb3B0aW9ucycpOwogICAgICAgY29uc3QgY29ycmVjdEFuc3dlciA9IG9wdGlvbnMuZGF0YXNldC5jb3JyZWN0OwogICAgICAgY29uc3Qgc2VsZWN0ZWRBbnN3ZXIgPSBxdWVzdGlvbi5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQnKTsKICAgICAgIAogICAgICAgLy8gUmVzZXQgc3R5bGVzCiAgICAgICBvcHRpb25zLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsJykuZm9yRWFjaChsYWJlbCA9PiB7CiAgICAgICAgbGFiZWwuY2xhc3NMaXN0LnJlbW92ZSgnY29ycmVjdCcsICdpbmNvcnJlY3QnKTsKICAgICAgIH0pOwoKICAgICAgIGlmIChzZWxlY3RlZEFuc3dlcikgewogICAgICAgIGNvbnN0IHNlbGVjdGVkTGFiZWwgPSBzZWxlY3RlZEFuc3dlci5jbG9zZXN0KCdsYWJlbCcpOwogICAgICAgIGlmIChzZWxlY3RlZEFuc3dlci52YWx1ZSA9PT0gY29ycmVjdEFuc3dlcikgewogICAgICAgICBzY29yZSsrOwogICAgICAgICBzZWxlY3RlZExhYmVsLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3QnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICBzZWxlY3RlZExhYmVsLmNsYXNzTGlzdC5hZGQoJ2luY29ycmVjdCcpOwogICAgICAgICAvLyBBbHNvIHNob3cgdGhlIGNvcnJlY3Qgb25lCiAgICAgICAgIGNvbnN0IGNvcnJlY3RMYWJlbCA9IG9wdGlvbnMucXVlcnlTZWxlY3RvcihgaW5wdXRbdmFsdWU9IiR7Y29ycmVjdEFuc3dlcn0iXWApLmNsb3Nlc3QoJ2xhYmVsJyk7CiAgICAgICAgIGNvcnJlY3RMYWJlbC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7CiAgICAgICAgfQogICAgICAgfQogICAgICB9KTsKICAgICAgCiAgICAgIHJlc3VsdHNDb250YWluZXIudGV4dENvbnRlbnQgPSBgWW91IHNjb3JlZCAke3Njb3JlfSBvdXQgb2YgJHtxdWVzdGlvbnMubGVuZ3RofSFgOwogICAgIH0pOwogICAgfQogICB9OwoKICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IGVtZ1NtYXJ0SG9tZUFydGljbGUuaW5pdCgpKTsKICAgfSBlbHNlIHsKICAgIGVtZ1NtYXJ0SG9tZUFydGljbGUuaW5pdCgpOwogICB9CgogIH0pKCk7CiA8L3NjcmlwdD4KPC9kaXY+CjwhLS0gRW5kIG9mIEludGVyYWN0aXZlIEFydGljbGUgLS0+