# Name: smd_admin_themes v0.30 # Type: Admin side plugin # Admin-side theme manager and editor # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjMwIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo2MzczMzoiLyoqCiAqIHNtZF9hZG1pbl90aGVtZXMKICoKICogQSBUZXh0cGF0dGVy biBDTVMgcGx1Z2luIGZvciBjcmVhdGluZywgZWRpdGluZywgdGVzdGluZywgaW5zdGFsbGlu ZyBhbmQgZGlzdHJpYnV0aW5nIGFkbWluLXNpZGUgdGhlbWVzCiAqICAtPiBFbXBsb3kgaW1h Z2VzLCBDU1MsIEpTLCBIVE1ML1BIUCBpbiB5b3VyIHRoZW1lCiAqICAtPiBVc2UgY29uc3Rh bnRzIGluIHlvdXIgQ1NTIGZpbGVzCiAqICAtPiBCYXNlIHlvdXIgdGhlbWUgb24gYW4gZXhp c3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZQogKiAgLT4gRXhwb3J0IGEg dGhlbWUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHkgaW4gZWl0 aGVyIC50YXIsIC50Z3osIC5iejIgb3IgLnppcCBmb3JtYXQgKHJlcXVpcmVzIHNtZF9jcnVu Y2hlcnMgcGx1Z2luKQogKiAgLT4gSW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJv bSB0aGUgImNvbW11bml0eSByZXBvc2l0b3J5IjpodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRt aW5pc3RyYXRpb24tdGhlbWVzCiAqICAtPiBBZG1pbmlzdHJhdG9yIGNhbiBzZXQgYSBkZWZh dWx0IHRoZW1lIGZvciBhbGwgdXNlcnMsIG9yIGVuYWJsZSBwZXItdXNlciAvIHBlci1yb2xl IHRoZW1lcwogKgogKiBAYXV0aG9yIFN0ZWYgRGF3c29uCiAqIEBsaW5rICAgaHR0cDovL3N0 ZWZkYXdzb24uY29tLwogKi8KCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCS8v IFNpbGVuY2Ugd2FybmluZ3MgYmVjYXVzZSwgYWx0aG91Z2ggdGhlIHBsdWdpbiByZXF1aXJl cyBzbWRfY3J1bmNoZXJzIGZvciB0aGUKCS8vIGltcG9ydC9leHBvcnQgZmVhdHVyZXMsIGl0 J2xsIGZ1bmN0aW9uIGluIGEgcmVkdWNlZCBjYXBhY2l0eSB3aXRob3V0IGl0CglAcmVxdWly ZV9wbHVnaW4oJ3NtZF9jcnVuY2hlcnMnKTsKCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHNt ZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21kX2F0X3ByaXZzLAoJCSRzbWRf Y29yZV90aGVtZXMsICRzbWRfYXRfcHJlZnMsICRwcmVmcywgJHNtZF9hdF9mZWVkdXJsLCAk c21kX2F0X3RoZW1lX3JlcG8sCgkJJHNtZF9hdF9zdHlsZXM7CgoJJHNtZF9hdF9ldmVudCA9 ICdzbWRfYXQnOwoJJHNtZF9hdF9mdWxsZXYgPSAnc21kX2FkbWluX3RoZW1lcyc7Cgkkc21k X2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOwoJJHNtZF9hdF9wcml2cyA9ICcxJzsKCSRz bWRfYXRfZmVlZHVybCA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRtaW4tdGhlbWVzLWZl ZWQnOwoJJHNtZF9hdF90aGVtZV9yZXBvID0gJ2h0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1p bmlzdHJhdGlvbi10aGVtZXMnOwoJJHNtZF9hdF9zdHlsZXMgPSBhcnJheSgKCQknY29tbW9u JyA9PgoJCSAgICAnLnNtZF9jbGVhciB7IGNsZWFyOmJvdGg7IH0KICAgICAgICAgICAuc21k X3NtYWxscHJpbnQgeyBmb250LXNpemU6NzUlOyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2lu LXRvcDotMTJweDsgfQogICAgICAgICAgIC5zbWRfaGlkZGVuIHsgZGlzcGxheTpub25lOyBt YXJnaW46NXB4OyB9JywKCQknY29udHJvbCcgPT4KCQkgICAgJyNzbWRfY29udHJvbCB7IG1h cmdpbjowIGF1dG87IH0KICAgICAgICAgICAjc21kX2NvbnRyb2wgdGQgLnB1Ymxpc2ggeyBt YXJnaW4tbGVmdDo1MHB4OyB9CiAgICAgICAgICAgI3NtZF9jb250cm9sIC51cGxvYWQtZm9y bSB7IHBhZGRpbmc6MDsgfQogICAgICAgICAgIC5zbWRfYXRfdXBkYXRlIHsgZm9udC13ZWln aHQ6Ym9sZDsgY29sb3I6Izk5MDAwMDsgfScsCgkJJ2VkaXQnID0+CiAgICAgICAgICAnI3Nt ZF9hdF9pbWFnZXMgeyBtYXJnaW46MHB4IDZweCAtNHB4IDA7IH0KICAgICAgICAgICAuc21k X3NraW5fZmlsZXR5cGVzIHsgbWFyZ2luOjEycHggMDsgfScsCgkJJ2dyaWQnID0+CgkJICAg ICcuc21kX2dyaWQgeyB3aWR0aDo5NjBweDsgbWFyZ2luOjAgYXV0bzsgfQogICAgICAgICAg IC5zbWRfY2VsbCB7IGZsb2F0OmxlZnQ7IHBhZGRpbmc6MTBweDsgbWFyZ2luOjEwcHg7IGJv cmRlcjoxcHggcmlkZ2UgI2NjYzsgd2lkdGg6e3R3fXB4OyBoZWlnaHQ6e3RofXB4OyB9CiAg ICAgICAgICAgLnNtZF9jZWxsLmFjdGl2ZSB7IGJvcmRlcjoxcHggc29saWQgcmVkOyB9CiAg ICAgICAgICAgLnNtZF9jZWxsOmhvdmVyIHsgYmFja2dyb3VuZDojZTJkZmNlOyBjb2xvcjoj ODA1NTFlOyB9CiAgICAgICAgICAgLnNtZF9jZWxsOmhvdmVyIGEgeyBjb2xvcjpibGFjazsg fQogICAgICAgICAgIC5zbWRfYXV0aCwuc21kX2FjdGlvbnMgeyB0ZXh0LWFsaWduOmNlbnRl cjsgbWFyZ2luOjVweCAwOyB9JywKCQknbGlzdCcgPT4KICAgICAgICAgICcuc21kX2F0X2xp c3QgdHIuYWN0aXZlLCAuc21kX2F0X2xpc3QgdHIuYWN0aXZlIGEgeyBiYWNrZ3JvdW5kLWNv bG9yOiNlMmRmY2U7IGNvbG9yOiM4MDU1MWU7IH0nLAoJCSdzZXR1cCcgPT4KICAgICAgICAg ICcuc21kX2Zha2VidG4geyBjb2xvcjojNTU1OyBjdXJzb3I6cG9pbnRlcjsgfQogICAgICAg ICAgICNzbWRfYXRfcmFkaW8gaW5wdXQgeyBmbG9hdDpsZWZ0OyBjbGVhcjpib3RoOyB9CiAg ICAgICAgICAgI3NtZF9hdF9yYWRpbyBsYWJlbCB7IGZsb2F0OmxlZnQ7IH0nLAoJKTsKCgkv LyBUaHVtYm5haWwgZGltZW5zaW9ucwoJJHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdjbGFz c2ljJywncmVtb3JhJyk7CgoJYWRkX3ByaXZzKCRzbWRfYXRfZXZlbnQsICRzbWRfYXRfcHJp dnMpOwoJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwgJHNtZF9h dF9wcml2cyk7CglyZWdpc3Rlcl90YWIoImV4dGVuc2lvbnMiLCAkc21kX2F0X2V2ZW50LCBz bWRfYXRfZ1R4dCgndGFiX25hbWUnKSk7CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X29w dGlvbnMnLCAncGx1Z2luX3ByZWZzLicuJHNtZF9hdF9mdWxsZXYpOwoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9hdF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4kc21kX2F0X2Z1 bGxldik7CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0JywgJHNtZF9hdF9ldmVudCk7Cgly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X3BlcicsICdhZG1pbl9zaWRlJywgJ3RoZW1lX25h bWUnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdwcmVmc191aScsICd0 aGVtZV9uYW1lJyk7CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X3VwbG9hZF9mb3JtJywg JHNtZF9hdF9ldmVudC4nX3VpJywgJ3VwbG9hZF9mb3JtJyk7CgoJaWYgKGlzc2V0KCRwcmVm c1snc21kX2F0X3N5c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA9PSAyKSB7 CgkJYWRkX3ByaXZzKCRzbWRfYXRfYWRtX2V2ZW50LCAnMiwzLDQsNSw2Jyk7CgkJcmVnaXN0 ZXJfdGFiKCJhZG1pbiIsICRzbWRfYXRfYWRtX2V2ZW50LCBzbWRfYXRfZ1R4dCgnc2tpbm5l cicpKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0JywgJHNtZF9hdF9hZG1fZXZl bnQpOwoJfQoKCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHBy ZWZzIGFuZCB0aGVpciBkZWZhdWx0cywKCS8vIDJuZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHBy ZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgaW4gZnV0dXJlIChkZWZhdWx0czogYWxsIGVt cHR5KQoJJHNtZF9hdF9wcmVmcyA9IGFycmF5KAoJCWFycmF5KAoJCQknc21kX2F0X2Nhc2Vf c29ydCcgPT4gJzEnLAoJCQknc21kX2F0X2NydXNoJyA9PiAnemlwJywKCQkJJ3NtZF9hdF90 dycgPT4gJzI2MCcsCgkJCSdzbWRfYXRfdGgnID0+ICcxNTAnLAoJCQknc21kX2F0X2ZpbGVu YW1lX2Zvcm1hdCcgPT4gJ3t0aGVtZX0nLAoJCQknc21kX2F0X2xheW91dCcgPT4gJzEnLAoJ CQknc21kX2F0X3N5c3RlbScgPT4gJzAnLAoJCQknc21kX2F0X2dsb2JhbF9za2luJyA9PiAn JywKCQkJJ3NtZF9hdF9ncm91cF9saXN0JyA9PiAnJywKCQkJJ3NtZF9hdF91c2VyX2xpc3Qn ID0+ICcnLAoJCSksCgkJYXJyYXkoCgkJCSdzbWRfYXRfZmlsZV9wYXRoJyA9PiAnJywKCQkp CgkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0KCRl dmVudCwgJHN0ZXApIHsKCWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KAoJ CQknc21kX2F0X2Nsb25lJywKCQkJJ3NtZF9hdF9kZWxldGUnLAoJCQknc21kX2F0X2RlbGV0 ZV9pbWFnZScsCgkJCSdzbWRfYXRfZWRpdCcsCgkJCSdzbWRfYXRfZXhwb3J0JywKCQkJJ3Nt ZF9hdF9pbXBvcnQnLAoJCQknc21kX2F0X25ld2ZpbGUnLAoJCQknc21kX2F0X3ByZWZzX2lu c3RhbGwnLAoJCQknc21kX2F0X3ByZWZzX3JlbW92ZScsCgkJCSdzbWRfYXRfcHJlZnNfdXBk YXRlJywKCQkJJ3NtZF9hdF9yZW5hbWUnLAoJCQknc21kX2F0X3NhdmUnLAoJCQknc21kX2F0 X3NldHVwJywKCQkJJ3NtZF9hdF9zd2l0Y2gnLAoJCQknc21kX2F0X3VwbG9hZF9pbWFnZScs CgkJCSdzbWRfYXRfY2hhbmdlX3BhZ2VieScsCgkJKSkpIHsKCQlzbWRfYXRfbGlzdCgnJyk7 Cgl9IGVsc2UgJHN0ZXAoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfd2VsY29t ZSgkZXZlbnQsICRzdGVwKSB7CgkkbXNnID0gJyc7Cglzd2l0Y2ggKCRzdGVwKSB7CgkJY2Fz ZSAnaW5zdGFsbGVkJzoKCQkJc21kX2F0X3ByZWZzX2luc3RhbGwoMCk7CgkJCWJyZWFrOwoJ CWNhc2UgJ2RlbGV0ZWQnOgoJCQlzbWRfYXRfcHJlZnNfcmVtb3ZlKDApOwoJCQlicmVhazsK CX0KCXJldHVybiAkbXNnOwp9Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2xpbmsoKSB7 CglnbG9iYWwgJHNtZF9hdF9ldmVudDsKCXJldHVybiBocmVmKHNtZF9hdF9nVHh0KCdtYW5h Z2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50KTsKfQoKLy8gQSBzdHViIHRoYXQg Y2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1lc3NhZ2UKZnVuY3Rpb24gc21kX2F0X2Rpc3Bs YXkoKSB7CgkJc21kX2F0X2xpc3QoJycpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gc21kX2F0X2xpc3QoJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkc21kX2F0 X2V2ZW50LCAkcHJlZnMsICRzbWRfYXRfcHJlZnMsICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1l cywgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBv LCAkc21kX2F0X3N0eWxlczsKCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7CgoJ ZXh0cmFjdChncHNhKGFycmF5KCdzdGVwJywgJ3BhZ2UnLCAnY3JpdCcsICdzZWFyY2hfbWV0 aG9kJywgJ3NraW4nKSkpOwoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBn cHMoJ21lc3NhZ2UnKTsKCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsKCSRzdHlsZXJ1bGUg PSAoJGxheW91dD09MCkgPyAnbGlzdCcgOiAnZ3JpZCc7CgkkdHcgPSAoaXNzZXQoJGF0X3By ZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9w cmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7CgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydz bWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1sw XVsnc21kX2F0X3RoJ10pICsgODA7Cgkkc3R5bGVyZXBzID0gYXJyYXkoCgkJJ3t0d30nID0+ ICR0dywKCQkne3RofScgPT4gJHRoLAoJKTsKCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2lu JnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX2F0X2Z1bGxldiN1c2FnZSI7CgoJJHBhZ2Vi eSA9IChncHMoJ3F0eScpKSA/IGdwcygncXR5JykgOiAoKGNzKCdzbWRfYXRfcGFnZWJ5Jykp ID8gY3MoJ3NtZF9hdF9wYWdlYnknKSA6IDE1KTsKCSRtYXhfZmlsZV9zaXplID0gMTUwICog MTAyNDsgLy8gYSBiaXQgYXJiaXRyYXJ5IQoKCSRjdXJyX3NraW4gPSAoc21kX2F0X2V4aXN0 cygkdGhlbWUtPm5hbWUpKSA/ICR0aGVtZS0+bmFtZSA6ICdjbGFzc2ljJzsKCSRza2luX2xp c3QgPSBzbWRfYXRfcmVhZF9za2lucygpOwoJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29w dGlvbnMoJ2NvbXByZXNzJyk7CgkkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25z KCdkZWNvbXByZXNzJyk7CgkkYmFzZXMgPSBhcnJheSgpOwoKCS8vIEdldCBhIGxpc3Qgb2Yg YW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVuZGVuY2llcykKCWZvcmVhY2ggKCRza2luX2xp c3QgYXMgJHNraW5hKSB7CgkJJG1hbmlmZXN0ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2lu YSk7CgkJaWYgKCRtYW5pZmVzdCkgewoJCQlpZiAoJG1hbmlmZXN0WydiYXNlZF9vbiddKSB7 CgkJCQkkYmFzZXNbXSA9ICRtYW5pZmVzdFsnYmFzZWRfb24nXTsKCQkJfQoJCX0KCX0KCSRi YXNlcyA9IGFycmF5X3VuaXF1ZSgkYmFzZXMpOwoKCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ21h bmFnZV9sYmwnKSwkbWVzc2FnZSk7CgoJLy8gSGFuZGxlIHBhZ2luZwoJJHRvdGFsID0gY291 bnQoJHNraW5fbGlzdCk7CgkkbGltaXQgPSBtYXgoQCRwYWdlYnksIDE1KTsKCWxpc3QoJHBh Z2UsICRvZmZzZXQsICRudW1QYWdlcykgPSBwYWdlcigkdG90YWwsICRsaW1pdCwgJHBhZ2Up OwoJJHNraW5fbGlzdCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRvZmZzZXQsICRsaW1p dCk7CgoJJHFzID0gYXJyYXkoCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LAoJCSJwYWdl IiA9PiAkcGFnZSwKCSk7CgoJZWNobyA8PDxFT0pTCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij4KZnVuY3Rpb24gc21kX2dldGNydXNoKHNraW4pIHsKCXNraW5IYW5kbGUgPSAi Y3J1c2hfIitza2luOwoJalF1ZXJ5KCcuc21kX3BvcHVwJykuZWFjaChmdW5jdGlvbigpIHsK CQlib3ggPSBqUXVlcnkodGhpcyk7CgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5k bGUpIHsKCQkJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsKCQkJCWJveC5z bGlkZURvd24oJ2Zhc3QnKTsKCQkJfSBlbHNlIHsKCQkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7 CgkJCX0KCQl9IGVsc2UgewoJCQlib3guc2xpZGVVcCgnZmFzdCcpOwoJCX0KCX0pOwoJalF1 ZXJ5KCcjJytza2luSGFuZGxlKycgYScpLmNsaWNrKGZ1bmN0aW9uKCkgewoJCWpRdWVyeSh0 aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tpbj0iK3NraW4r IiZzdGVwPXNtZF9hdF9leHBvcnQmY3J1c2g9IitqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBp bnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCcpLnZhbCgpKyImcGFnZT0iK3skcGFnZX0p OwoJfSk7CglyZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHNtZF9nZXR2YWwoc2tpbiwgc3Rl cCkgewoJc2tpbkhhbmRsZSA9ICJwb3BfIitza2luOwoJalF1ZXJ5KCcuc21kX3BvcHVwJyku ZWFjaChmdW5jdGlvbigpIHsKCQlib3ggPSBqUXVlcnkodGhpcyk7CgkJaWYgKGJveC5hdHRy KCJpZCIpID09IHNraW5IYW5kbGUpIHsKCQkJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAi bm9uZSIpIHsKCQkJCWJveC5zbGlkZURvd24oJ2Zhc3QnKTsKCQkJCWpRdWVyeSgnIycrc2tp bkhhbmRsZSsnIGlucHV0JykuZm9jdXMoKTsKCQkJfSBlbHNlIHsKCQkJCWJveC5zbGlkZVVw KCdmYXN0Jyk7CgkJCX0KCQl9IGVsc2UgewoJCQlib3guc2xpZGVVcCgnZmFzdCcpOwoJCX0K CX0pOwoJalF1ZXJ5KCcjJytza2luSGFuZGxlKycgYScpLmNsaWNrKGZ1bmN0aW9uKCkgewoJ CWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tp bj0iKygoc2tpbj09J25ldycpPyAnJyA6IHNraW4pKyImc3RlcD0iK3N0ZXArIiZuZXdfc2tp bj0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0JykudmFsKCkrIiZwYWdlPSIreyRw YWdlfSk7Cgl9KTsKCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmtleXVwKGZ1 bmN0aW9uICgpIHsKCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEt WjAtOV9ceDdmLVx4ZmZdL2csJycpOwoJCXdoaWxlICh0aGlzLnZhbHVlLmxlbmd0aCA+IDAg JiYgdGhpcy52YWx1ZS5zdWJzdHJpbmcoMCwxKS5tYXRjaCgvWzAtOV0vKSkgewoJCQl0aGlz LnZhbHVlID0gdGhpcy52YWx1ZS5zdWJzdHJpbmcoMSk7CgkJfQoJfSk7CgoJcmV0dXJuIGZh bHNlOwp9Cjwvc2NyaXB0PgpFT0pTOwoKCS8vIEluamVjdCBzdHlsZXMKCWVjaG8gJzxzdHls ZSB0eXBlPSJ0ZXh0L2NzcyI+JzsKCWVjaG8gc3RydHIoJHNtZF9hdF9zdHlsZXNbJ2NvbW1v biddLm4uJHNtZF9hdF9zdHlsZXNbJHN0eWxlcnVsZV0ubi4kc21kX2F0X3N0eWxlc1snY29u dHJvbCddLCAkc3R5bGVyZXBzKTsKCWVjaG8gJzwvc3R5bGU+JzsKCgkvLyBMaXN0IHRoZSBh dmFpbGFibGUgc2tpbnMKCWVjaG8gc3RhcnRUYWJsZSgnc21kX2NvbnRyb2wnLCcnLCcnLDUp OwoJZWNobyB0cigKCQkoKCR1bmNydXNoZXJzKSA/IHRkYSh1cGxvYWRfZm9ybShzbWRfYXRf Z1R4dCgnaW5zdGFsbF9za2luJyksICcnLCAnc21kX2F0X2ltcG9ydCcsICRzbWRfYXRfZXZl bnQsICcnLCAkbWF4X2ZpbGVfc2l6ZSkuYnIuJzxkaXYgY2xhc3M9InNtZF9zbWFsbHByaW50 Ij4nLnNtZF9hdF9nVHh0KCdzdXBwb3J0ZWRfaW1wb3J0JywgYXJyYXkoJ3t0eXBlc30nID0+ ICgoJHVuY3J1c2hlcnMpID8gam9pbignLCAnLCAkdW5jcnVzaGVycykgOiBnVHh0KCdub25l JykpICkpLic8L2Rpdj4nLCAnIGNvbHNwYW49IjIiJykgOiAnJykKCQkudGRhKGZvcm0oZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldHVwJyksICdwdWJsaXNo Jykuc0lucHV0KCdzbWRfYXRfc2V0dXAnKS5lSW5wdXQoJHNtZF9hdF9ldmVudCkpLCcgY29s c3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4IicpCgkpOwoJZWNobyBlbmRU YWJsZSgpOwoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgYWN0 aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOwoJJG5ld2J0biA9ICcgJy4nPGEgY2xhc3M9Im5h dmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xv bmUnLmEuJ3NraW49IiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJ25ld1wnLCBcJ3Nt ZF9hdF9jbG9uZVwnKTsiPicuc21kX2F0X2dUeHQoJ25ldycpLic8L2E+JwoJCS4gJzxkaXYg aWQ9InBvcF9uZXciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRf YXRfZ1R4dCgnbmV3X3NraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJz bWRfdGV4dF9uYW1lIiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj5bJy5zbWRfYXRfZ1R4dCgn Y29uZmlybScpLiddPC9hPjwvZGl2Pic7CgkkcmVwb2J0biA9ICcgJy4nPGEgY2xhc3M9Im5h dmxpbmsiIGhyZWY9IicuJHNtZF9hdF90aGVtZV9yZXBvLiciPicuc21kX2F0X2dUeHQoJ2Zp bmRfdGhlbWUnKS4nPC9hPic7CgkkaGRyb3cgPSBoZWQoc21kX2F0X2dUeHQoJ2xpc3RfdGl0 bGUnKS4gJyAnLiBzbWRfYXRfZ1R4dCgnaGVscF9saW5rJywgYXJyYXkoJ3tsaW5rfScgPT4g JGhlbHBMaW5rKSksIDMpOwoJaWYgKCRsYXlvdXQ9PSIwIikgewoJCWVjaG8gc3RhcnRUYWJs ZSgnbGlzdCcsJycsJ3NtZF9hdF9saXN0Jyw1KTsKCQllY2hvIHRyKAoJCQl0ZGEoJGhkcm93 LiRyZXBvYnRuLiRuZXdidG4sICcgY29sc3Bhbj0iNyInKQoJCSk7CgkJZWNobyB0cigKCQkJ YXNzSGVhZCgKCQkJCXNtZF9hdF9nVHh0KCdza2luX2dibCcpLAoJCQkJJ2F1dGhvcicsCgkJ CQlnVHh0KCd2ZXJzaW9uJyksCgkJCQknZGVzY3JpcHRpb24nLAoJCQkJc21kX2F0X2dUeHQo J2FjdGlvbnMnKQoJCQkJKQoJCSk7Cgl9IGVsc2UgewoJCWVjaG8gJzxkaXYgY2xhc3M9InNt ZF9ncmlkIj48ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4kcmVwb2J0bi4kbmV3 YnRuLic8L2Rpdj4nOwoJfQoJaWYoIGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSApCgkJJHRy YW5zcG9ydCA9ICdmc29jayc7CgllbHNlaWYoIGlzX2NhbGxhYmxlKCdjdXJsX2luaXQnKSAp IHsKCQkkdHJhbnNwb3J0ID0gJ2N1cmwnOwoJfSBlbHNlIHsKCQkkdHJhbnNwb3J0ID0gJyc7 Cgl9CgoJJGZlZWQgPSAnJzsKCXN3aXRjaCAoJHRyYW5zcG9ydCkgewoJCWNhc2UgJ2N1cmwn OgoJCQkkYyA9IGN1cmxfaW5pdCgpOwoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9VUkws ICRzbWRfYXRfZmVlZHVybCk7CgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1JFRkVSRVIs IGh1KTsKCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUp OwoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9WRVJCT1NFLCBmYWxzZSk7CgkJCWN1cmxf c2V0b3B0KCRjLCBDVVJMT1BUX1RJTUVPVVQsIDEwKTsKCQkJJGZlZWQgPSBjdXJsX2V4ZWMo JGMpOwoJCQlicmVhazsKCQljYXNlICdmc29jayc6CgkJCSR1cmwgPSBwYXJzZV91cmwoJHNt ZF9hdF9mZWVkdXJsKTsKCQkJJGZwID0gQGZzb2Nrb3BlbiAoJHVybFsnaG9zdCddLCA4MCwg JGVycm5vLCAkZXJyc3RyLCA1KTsKCQkJaWYgKCRmcCkgewoJCQkJJHFyeSA9ICdHRVQgJy4k c21kX2F0X2ZlZWR1cmw7CgkJCQkkcXJ5IC49ICIgSFRUUC8xLjBcclxuXHJcbiI7CgoJCQkJ ZnB1dHMoJGZwLCAkcXJ5KTsKCQkJCXN0cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsKCQkJ CSRpbmZvID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsKCgkJCQkkaGRycyA9IHRydWU7 CgkJCQl3aGlsZSAoKCFmZW9mKCRmcCkpICYmICghJGluZm9bJ3RpbWVkX291dCddKSkgewoJ CQkJCSRsaW5lID0gZmdldHMoJGZwLCA4MTkyKTsKCQkJCQkkbGluZSA9IHByZWdfcmVwbGFj ZSgiW1xyXG5dIiwgIiIsICRsaW5lKTsKCQkJCQlpZiAoJGhkcnMgPT0gZmFsc2UpIHsKCQkJ CQkJJGZlZWQgLj0gJGxpbmUuIlxuIjsKCQkJCQl9CgkJCQkJaWYgKHN0cmxlbigkbGluZSkg PT0gMCkgJGhkcnMgPSBmYWxzZTsKCQkJCX0KCQkJCWlmICgkaW5mb1sndGltZWRfb3V0J10p IHsKCQkJCQkkZmVlZCA9ICcnOwoJCQkJfQoJCQkJZmNsb3NlKCRmcCk7CgkJCX0gZWxzZSB7 CgkJCQkkZmVlZCA9ICcnOwoJCQl9CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCSRmZWVkID0g Jyc7Cgl9CgoJJHNtZF9hdF92bGFzdCA9ICcnOwoJJGZlZWRzID0gYXJyYXkoKTsKCWlmIChp c3NldCgkcHJlZnNbJ3NtZF9hdF92ZXJzaW9ucyddKSAmJiBpc3NldCgkcHJlZnNbJ3NtZF9h dF92bGFzdCddKSkgewoJCWlmICh0aW1lKCkgLSAkcHJlZnNbJ3NtZF9hdF92bGFzdCddIDwg ODY0MDApIHsKCQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUgbGFzdCBkYXksIHNvIHJl YWQgdGhlIGNhY2hlZCB2ZXJzaW9uIG51bWJlcnMKCQkJJGZlZWRzID0gdW5zZXJpYWxpemUo JHByZWZzWydzbWRfYXRfdmVyc2lvbnMnXSk7CgkJfQoJfQoJaWYgKCEkZmVlZHMgfHwgZ3Bz KCdyZWFkX3ZlcnNpb25zJykpIHsKCQkkZmVlZHMgPSBzbWRfYXRfZmVlZCgkZmVlZCk7CgkJ JGluc3RhbGxlZF9mZWVkID0gYXJyYXkoKTsKCQkkZmVlZHMgPSAoaXNfYXJyYXkoJGZlZWRz KSkgPyAkZmVlZHMgOiBhcnJheSgpOwoKCQkvLyBPbmx5IHJlY29yZCB0aGUgdmVyc2lvbiBp bmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3RhbGxlZAoJCWZvcmVhY2goJHNraW5fbGlz dCBhcyAkc2tpbl9uYW1lKSB7CgkJCSRmZWVkX3NraW5fbmFtZSA9IHN0cl9yZXBsYWNlKCdf JywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSB0aGUgdXJsX3RpdGxlCgkJCWlm IChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3NraW5fbmFtZSwgJGZlZWRzKSkgewoJCQkJJGlu c3RhbGxlZF9mZWVkWyRmZWVkX3NraW5fbmFtZV0gPSAkZmVlZHNbJGZlZWRfc2tpbl9uYW1l XTsKCQkJfQoJCX0KCQlzZXRfcHJlZignc21kX2F0X3ZsYXN0JywgdGltZSgpLCAkc21kX2F0 X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsKCQlzZXRfcHJlZignc21kX2F0 X3ZlcnNpb25zJywgc2VyaWFsaXplKCRpbnN0YWxsZWRfZmVlZCksICRzbWRfYXRfZXZlbnQs IFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOwoJfQoKCWZvcmVhY2ggKCRza2luX2xpc3Qg YXMgJHNraW5fbmFtZSkgewoJCS8vIFJlYWQgZWFjaCBtYW5pZmVzdCBhbmQgc2V0IHVwIHRo ZSBsYWJlbHMKCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luX25hbWUpOwoJ CSRmZWVkX3NraW5fbmFtZSA9IHN0cl9yZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsg Ly8gVW5zYW5pdGl6ZSBmb3IgdXJsX3RpdGxlIG1hdGNoaW5nCgoJCSR0aHVtYm5haWwgPSBz bWRfYXRfZ2V0X3RodW1iKCRza2luZm8sIDEpOwoJCSR0aGlzX3NraW4gPSAoJHNraW5mbykg PyAoKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUn XSkgOiAkc2tpbmZvWydkbmFtZSddKSA6ICRza2luX25hbWU7CgkJJGlzX2dibCA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkc2tpbl9uYW1lID09ICRh dF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2Jh bCcpIDogJyc7CgkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVu dC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEuJ25leHRzdGVwPXNtZF9hdF9saXN0Jy5hLidz a2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBhZ2UuJyIgdGl0bGU9Iicuc21kX2F0X2dU eHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uJGlzX2dibC4oKCRza2luZm8gJiYg JHNraW5mb1snYmFzZWRfb24nXSkgPyBzbWRfYXRfZ1R4dCgnYmFzZWRfb24nLCBhcnJheSgn e3NraW59JyA9PiAkc2tpbmZvWydiYXNlZF9vbiddKSkgOiAnJykuKCgkdGh1bWJuYWlsKSA/ ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7CgkJJGF1dGhyb3cg PSAoKCRza2luZm8gJiYgc3RycG9zKCRza2luZm9bJ2F1dGhvcl91cmknXSwgImh0dHA6Ly8i KSA9PT0gMCkgPyAnPGEgaHJlZj0iJy4kc2tpbmZvWydhdXRob3JfdXJpJ10uJyI+Jy4kc2tp bmZvWydhdXRob3InXS4nPC9hPicgOiAoKCRza2luZm8pID8gJHNraW5mb1snYXV0aG9yJ10g OiAnLScpKTsKCQkkYWN0cm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQu YS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgn ZWRpdCcpLiddPC9hPicKCQkJLiAnICcgLigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9uZScuYS4nc2tpbj0nLiRza2lu X25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwoXCcnLiRza2luX25hbWUuJ1wn LCBcJ3NtZF9hdF9jbG9uZVwnKTsiPlsnLnNtZF9hdF9nVHh0KCdjbG9uZScpLiddPC9hPicg OiAnJykKCQkJLiAnICcgLigoJHNraW5mbyAmJiAkY3J1c2hlcnMpID8gJzxhIGhyZWY9Ij9l dmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZXhwb3J0Jy5hLidza2luPScu JHNraW5fbmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldGNydXNoKFwnJy4kc2tpbl9u YW1lLidcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0JykuJ108L2E+JyA6ICcnKQoJCQku ICcgJyAuKChpbl9hcnJheSgkc2tpbl9uYW1lLCAkc21kX2NvcmVfdGhlbWVzKSB8fCBpbl9h cnJheSgkc2tpbl9uYW1lLCAkYmFzZXMpKSA/ICcnIDogJzxhIGhyZWY9Ij9ldmVudD0nLiRz bWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZGVsZXRlJy5hLidza2luPScuJHNraW5fbmFt ZS5hLidwYWdlPScuJHBhZ2UuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLnNtZF9h dF9nVHh0KCdkZWxldGVfY29uZmlybScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luX25hbWUp KS4nXCcpOyI+WycuZ1R4dCgnZGVsZXRlJykuJ108L2E+JykKCQkJLiAnPGRpdiBpZD0icG9w XycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicu c21kX2F0X2dUeHQoJ25ld19jbG9uZXNraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0 IiBuYW1lPSJzbWRfdGV4dF9uYW1lIiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj4mbmJzcDtb Jy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+JwoJCQkuICc8 ZGl2IGlkPSJjcnVzaF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlk ZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCdjcnVzaF9mb3JtYXQnKS4nPC9zcGFuPicucmFk aW9TZXQoJGNydXNoZXJzLCAkc2tpbl9uYW1lLidfY3J1c2gnLCAoKGlzc2V0KCRhdF9wcmVm c1snc21kX2F0X2NydXNoJ10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10gOiAnJykg KS4nPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25maXJtJykp LiddPC9hPjwvZGl2Pic7CgkJJHZlcm93ID0gKCRza2luZm8pID8gKChpc3NldCgkZmVlZHNb JGZlZWRfc2tpbl9uYW1lXSkgJiYgaXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1 bW1hcnknXSkgJiYgdmVyc2lvbl9jb21wYXJlKCRmZWVkc1skZmVlZF9za2luX25hbWVdWydz dW1tYXJ5J10sJHNraW5mb1sndmVyc2lvbiddKT09PTEpID8gJzxhIGhyZWY9IicuJGZlZWRz WyRmZWVkX3NraW5fbmFtZV1bJ2xpbmsnXS4nIiBjbGFzcz0ic21kX2F0X3VwZGF0ZSI+Jy5z bWRfYXRfZ1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXS4nPC9hPicgOiBzbWRf YXRfZ1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXSkgOiAnJzsKCgkJaWYgKCRs YXlvdXQ9PTApIHsKCQkJZWNobyB0cigKCQkJCXRkKCR0aHVtcm93KQoJCQkJLnRkKCRhdXRo cm93LCAxMDApCgkJCQkudGQoJHZlcm93KQoJCQkJLnRkKCgoJHNraW5mbyk/ICRza2luZm9b J2Rlc2NyaXB0aW9uJ10gOiAnLScpLigoJHNraW5mbyAmJiAkc2tpbmZvWydoZWxwJ10pID8g JyAnLmhyZWYoJ1snLmdUeHQoJ2hlbHAnKS4nXScsICRza2luZm9bJ2hlbHAnXSkgOiAnJyks IDI1MCkKCQkJCS50ZCgkYWN0cm93LDI2MCkKCQkJLCAoKCRza2luX25hbWUgPT0gJGN1cnJf c2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6ICcnKQoJCQkpOwoJCX0gZWxzZSB7CgkJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikg PyAnIGFjdGl2ZScgOiAnJykuJyI+JzsKCQkJZWNobyAnPGRpdj4nLiR0aHVtcm93Lic8L2Rp dj4nOwoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfYXV0aCI+Jy4kdmVyb3cuc21kX2F0X2dU eHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7CgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9h Y3Rpb25zIj4nLiRhY3Ryb3cuJzwvZGl2Pic7CgkJCWVjaG8gJzwvZGl2Pic7CgkJfQoJfQoK CWlmICgkbGF5b3V0PT0iMCIpIHsKCQllY2hvICc8L3RkPjwvdHI+JzsKCQllY2hvIGVuZFRh YmxlKCk7Cgl9IGVsc2UgewoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+ PC9kaXY+JzsKCX0KCWVjaG8gJzwvZm9ybT4nOwoJZWNobyBuLm5hdl9mb3JtKCRzbWRfYXRf ZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwoJZWNo byBuLnBhZ2VieV9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlYnkpOwp9CgpmdW5jdGlvbiBz bWRfYXRfZmVlZCgkZmVlZCkgewoJZ2xvYmFsICRmZWVkczsKCgkkZmVlZD1wcmVnX3JlcGxh Y2UoIi8+Ii4iW1s6c3BhY2U6XV0rIi4iPC9pIiwgIj48IiwgJGZlZWQpOyAvLyBLaWxsIHdo aXRlc3BhY2UgaW4gZmVlZAoJJHhtbHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7Cgl4 bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfc3RhcnRf dGFnIiwgInNtZF9hdF9mZWVkX2VuZF90YWciKTsKCXhtbF9zZXRfY2hhcmFjdGVyX2RhdGFf aGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfdGFnX2NvbnRlbnRzIik7Cgl4bWxf cGFyc2UoJHhtbHBhcnNlciwgJGZlZWQpOwoJeG1sX3BhcnNlcl9mcmVlKCR4bWxwYXJzZXIp OwoKCXJldHVybiAkZmVlZHM7Cn0KCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygk cGFyc2VyLCAkbmFtZSwgJGF0dHJpYnMpIHsKCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNt ZF9hdF9mZWVkdGFnOwoJaWYgKCRuYW1lID09ICJFTlRSWSIpIHsKCQkkc21kX2F0X2ZlZWRp biA9IHRydWU7Cgl9CglpZiAoJHNtZF9hdF9mZWVkaW4pIHsKCQkkc21kX2F0X2ZlZWR0YWcg PSAkbmFtZTsKCX0KfQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9lbmRfdGFnKCRwYXJzZXIsICRu YW1lKSB7CglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9h dF9mZWVkbmFtZTsKCWlmICgkbmFtZSA9PSAiRU5UUlkiKSB7CgkJJHNtZF9hdF9mZWVkaW4g PSBmYWxzZTsKCQkkc21kX2F0X2ZlZWRuYW1lID0gJyc7Cgl9Cn0KCmZ1bmN0aW9uIHNtZF9h dF9mZWVkX3RhZ19jb250ZW50cygkcGFyc2VyLCAkZGF0YSkgewoJZ2xvYmFsICRzbWRfYXRf ZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVlZG5hbWUsICRmZWVkczsKCWlm ICgkc21kX2F0X2ZlZWRpbikgewoJCWlmICgkc21kX2F0X2ZlZWR0YWcgPT0gIk5BTUUiKSB7 CgkJCSRmZWVkc1skZGF0YV0gPSAnJzsKCQkJJHNtZF9hdF9mZWVkbmFtZSA9ICRkYXRhOwoJ CX0KCQlpZiAoaXNzZXQoJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdKSkgewoJCQlpZiAoJHNt ZF9hdF9mZWVkdGFnID09ICJUSVRMRSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJTVU1NQVJZ IiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlVQREFURUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9 PSAiSUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiTElOSyIpIHsKCQkJCSRmZWVkc1skc21k X2F0X2ZlZWRuYW1lXVtzdHJ0b2xvd2VyKCRzbWRfYXRfZmVlZHRhZyldID0gJGRhdGE7CgkJ CX0KCQl9Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZW1vdmUgaGFy ZCBzcGFjZXMgaW4gdGhlIHVwbG9hZF9mb3JtIHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRoZSBi dXR0b25zCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfZm9ybSgkZXZlbnQsICRzdGVwLCAkZGF0 YSwgJGFyZ3MpIHsKCXJldHVybiBzdHJfcmVwbGFjZSgnJiMxNjA7JywgJyAnLCAkZGF0YSk7 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfZWRpdCgk bWVzc2FnZT0nJykgewoJZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRzbWRfYXRfc3R5bGVzOwoK CWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUn KSkpKTsKCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7CgkkbGF5b3V0ID0gKGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSA6IDE7CgoJJGVkaXRhYmxlID0gYXJyYXkoInNzYyIsICJjc3MiLCAianMiLCAi cGhwIik7CgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBuZyIp OwoJJG1heF9maWxlX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7CgoJJHNraW5mbyA9IHNtZF9h dF9yZWFkX3NraW5mbygkc2tpbik7CgkkZmlsZSA9IChlbXB0eSgkbmV3X3NraW4pKSA/ICRm aWxlIDogJG5ld19za2luOwoJJGZpbGVzID0gc21kX2F0X2xpc3RkaXIoVEhFTUUuJHNraW4p OwoJc29ydCgkZmlsZXMpOwoKCS8vIFNwbGl0IHRoZSBsaXN0IGludG8gaXRzIGRpcmVjdG9y eSBncm91cHMKCSRhbGxmaWxlcyA9IGFycmF5KCk7Cglmb3JlYWNoICgkZmlsZXMgYXMgJGN1 cnJmaWxlKSB7CgkJJGZpbGVfaW5mbyA9IHBhdGhpbmZvKCRjdXJyZmlsZSk7CgkJLy8gSWdu b3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZv WydkaXJuYW1lJ10sICcvLnN2bicpID09PSBmYWxzZSkgewoJCQkkZmlsZV90eXBlID0gKGlz c2V0KCRmaWxlX2luZm9bJ2V4dGVuc2lvbiddKSkgPyAkZmlsZV9pbmZvWydleHRlbnNpb24n XSA6ICdvdGhlcic7CgkJCSRhbGxmaWxlc1skZmlsZV90eXBlXVtdID0gJGN1cnJmaWxlOwoJ CX0KCX0KCglpZiAoZ3BzKCdzbWRfYXRfZWRpdHMnKSkgewoJCSRjb250ZW50cyA9IHN0cl9y ZXBsYWNlKCdcclxuJywnCicsZ3BzKCdzbWRfYXRfZWRpdHMnKSk7IC8vIG5ld2xpbmUgd29y a2Fyb3VuZAoJfSBlbHNlIHsKCQkkY29udGVudHMgPSAnJzsKCQlpZiAoJGZpbGUgJiYgZmls ZV9leGlzdHMoVEhFTUUuJHNraW4uRFMuJGZpbGUpKSB7CgkJCSRjb250ZW50cyA9IGZpbGUo VEhFTUUuJHNraW4uRFMuJGZpbGUpOwoJCQkkY29udGVudHMgPSBqb2luKCIiLCAkY29udGVu dHMpOwoJCX0KCX0KCgkvLyBCZWdpbiByZW5kZXJpbmcgdGhlIHBhZ2UKCXBhZ2V0b3Aoc21k X2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOwoKCWVjaG8gJzxzdHlsZSB0eXBlPSJ0 ZXh0L2NzcyI+JzsKCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2VkaXQnXTsKCWVjaG8gJzwvc3R5 bGU+JzsKCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsKCgkvLyBzZWxlY3RJ bnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlz IGNhc2UKCSRza2luc2VsID0gYXJyYXkoKTsKCWZvcmVhY2goJHNraW5fbGlzdCBhcyAka2V5 MSA9PiAkdmFsdWUxKSB7CgkJJHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0WyRrZXkx XTsKICAgfQoJJHNraW5DaGFuZ2UgPSAnPGZvcm0gbmFtZT0ic2tpbmNoYW5nZSIgYWN0aW9u PSJpbmRleC5waHAiPicKCQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQoJCS4gc0lucHV0KCdz bWRfYXRfZWRpdCcpCgkJLiBzZWxlY3RJbnB1dCgnc2tpbicsICRza2luc2VsLCAkc2tpbiwg MCwgMSkKCQkuICc8L2Zvcm0+JzsKCgkkZmlsZUxpc3QgPSBoZWQoc21kX2F0X2dUeHQoJ3Nr aW5fZmlsZXMnKSwyKQoJCS4gJHNraW5DaGFuZ2UKCQkuIHN0YXJ0VGFibGUoJ2xpc3QnLCAn bGVmdCcsICdzbWRfc2tpbl9maWxldHlwZXMnKTsKCSRmaWxlTGlzdCAuPSAnPGJyIC8+PGEg Y2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1z bWRfYXRfbmV3ZmlsZScuYS4nc2tpbj0nLiRza2luLiciPicuc21kX2F0X2dUeHQoJ25ld19m aWxlJykuJzwvYT4nOwoJJGZpbGVMaXN0IC49ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9 Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIw IikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIgLz4nOwoJJG90aGVy cyA9IGFycmF5KCk7CgoJZm9yZWFjaCAoJGVkaXRhYmxlIGFzICRmaWxldHlwZSkgewoJCWlm IChpc3NldCgkYWxsZmlsZXNbJGZpbGV0eXBlXSkpIHsKCQkJZm9yZWFjaCAoJGFsbGZpbGVz WyRmaWxldHlwZV0gYXMgJGlkeCA9PiAkY3VycmZpbGUpIHsKCQkJCWlmICgkaWR4ID09IDAp IHsKCQkJCQkkZmlsZUxpc3QgLj0gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSks MykpKTsKCQkJCX0KCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7CgkJCQkk YmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7CgkJCQkk ZWRpdCA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0 X2VkaXQnLmEuJ3NraW49Jy4kc2tpbi5hLidmaWxlPScuJGp1c3RmaWxlLiciPicuKCgkZmls ZSA9PSAkanVzdGZpbGUpID8gc3Ryb25nKCRqdXN0ZmlsZSkgOiAkanVzdGZpbGUpLic8L2E+ JzsKCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9h dF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4n LCAkc2tpbik7CgkJCQkkZmlsZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsKCQkJ fQoJCX0gZWxzZSB7CgkJCS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlCgkJCWlmICghJG90aGVy cykgewoJCQkJZm9yZWFjaCAoJGFsbGZpbGVzIGFzICRmdHlwZSA9PiAkZmxzKSB7CgkJCQkJ aWYgKCFpbl9hcnJheSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGltYWdhYmxl KSkpIHsKCQkJCQkJZm9yZWFjaCAoJGFsbGZpbGVzWyRmdHlwZV0gYXMgJGlkeCA9PiAkY3Vy cmZpbGUpIHsKCQkJCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7CgkJCQkJ CQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7CgkJ CQkJCQkkZWRpdCA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9 c21kX2F0X2VkaXQnLmEuJ3NraW49Jy4kc2tpbi5hLidmaWxlPScuJGp1c3RmaWxlLiciPicu KCgkZmlsZSA9PSAkanVzdGZpbGUpID8gc3Ryb25nKCRqdXN0ZmlsZSkgOiAkanVzdGZpbGUp Lic8L2E+JzsKCQkJCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExp bmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwg MSwgJ3NraW4nLCAkc2tpbik7CgkJCQkJCQkkb3RoZXJzW10gPSB0cih0ZCgkZWRpdCkudGQo JGRlbCkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJJGZpbGVMaXN0IC49 ICgkb3RoZXJzKSA/IHRyKHRkKGhlZChzbWRfYXRfZ1R4dCgnb3RoZXJfZmlsZXMnKSwzKSkp LiBqb2luKG4sICRvdGhlcnMpIDogJyc7CgkkZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsKCgkv LyBNYWtlIHRoZSBsaXN0IG9mIGltYWdlcyBmb3IgdGhpcyBza2luCgkkcXMgPSBhcnJheSgK CQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsCgkJInN0ZXAiID0+ICdzbWRfYXRfZGVsZXRl X2ltYWdlJywKCSk7Cgkkc2VsW10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBpZD0ic21kX2F0 X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2ltYWdlZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMo JHFzKS4nIj4nOwoJJHNlbFtdID0gJzxzZWxlY3QgaWQ9InNtZF9hdF9pbWFnZXMiIG5hbWU9 InNtZF9hdF9pbWFnZXNbXSIgY2xhc3M9Imxpc3QiIHNpemU9IjI0IiBtdWx0aXBsZT0ibXVs dGlwbGUiIHN0eWxlPSJ3aWR0aDoxNTRweDsiPic7CgoJaWYgKGRlZmluZWQoJ0dMT0JfQlJB Q0UnKSkgewoJCSRpbWcgPSBnbG9iKFRIRU1FLiRza2luLkRTLid7Ki5qcGcsKi5naWYsKi5w bmd9JywgR0xPQl9CUkFDRSk7Cgl9IGVsc2UgewoJCSRpbWcgPSBhcnJheV9tZXJnZShnbG9i KFRIRU1FLiRza2luLkRTLicqLmpwZycpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyouZ2lmJyks Z2xvYihUSEVNRS4kc2tpbi5EUy4nKi5wbmcnKSk7Cgl9CgoJaWYoaXNfYXJyYXkoJGltZykp IHsKCQlmb3JlYWNoICgkaW1nIGFzICRpbWdmaWxlKSB7CgkJCSRzZWxbXSA9IHQuJzxvcHRp b24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1nZmlsZSkuJzwvb3B0aW9u Pic7CgkJfQoJfQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7Cgkkc2VsW10gPSBkTGluaygkc21k X2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZV9pbWFnZScsICdza2luJywgJHNraW4sIDEpOwoJ JHNlbFtdID0gJzwvZm9ybT4nOwoJJHNlbCA9IGpvaW4oJycsJHNlbCk7CgoJLy8gSW1hZ2Ug cG9ydGlvbgoJJGltZ2JpdCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tpbl9pbWFnZXMnKSwgMikg LiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsKCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkp OwoJJGltZ2JpdCAuPSB0cih0ZCh1cGxvYWRfZm9ybShzbWRfYXRfZ1R4dCgndXBsb2FkX2lt YWdlJyksICcnLCAnc21kX2F0X3VwbG9hZF9pbWFnZScsICRzbWRfYXRfZXZlbnQsICRza2lu LCAkbWF4X2ZpbGVfc2l6ZSwgJycsICcnKSwgMTUwKSk7CgkkaW1nYml0IC49IGVuZFRhYmxl KCk7CgoJLy8gUmVuZGVyIHRoZSByZXN0IG9mIHRoZSBwYWdlCgllY2hvIHN0YXJ0VGFibGUo J2VkaXQnKS4KCXRyKAoJCXRkdGwoJGltZ2JpdCkuCgkJdGQoCgkJCWhlZCgoKCRza2luZm8p ID8gJHNraW5mb1snZG5hbWUnXSA6ICRza2luKSwxKS4KCQkJZm9ybSgKCQkJCSc8aW5wdXQg dHlwZT0idGV4dCIgbmFtZT0ibmV3X3NraW4iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMo JGZpbGUpLiciIGNsYXNzPSJlZGl0IiBzaXplPSI0MCIgdGFiaW5kZXg9IjIiIHN0eWxlPSJt YXJnaW4tYm90dG9tOjEwcHg7IiAvPicuYnIKCQkJCS4nPHRleHRhcmVhIGlkPSJzbWRfYXRf ZWRpdHMiIGNsYXNzPSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2IiByb3dz PSIzMiI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+Jy5icgoJ CQkJLmZJbnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKQoJCQkJLmVJ bnB1dCgkc21kX2F0X2V2ZW50KS5zSW5wdXQoJ3NtZF9hdF9zYXZlJykKCQkJCS5oSW5wdXQo J3NraW4nLCRza2luKQoJCQkJLmhJbnB1dCgnZmlsZScsJGZpbGUpCgkJCSkKCQkpLgoJCXRk dGwoJGZpbGVMaXN0KQoJKS4KCWVuZFRhYmxlKCk7Cgp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLy8gSnVzdCBjbGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlv biB0cmVhdHMgdGhlIGNvbnRlbnQgYXMgYSBuZXcgZmlsZQpmdW5jdGlvbiBzbWRfYXRfbmV3 ZmlsZSgpIHsKCSRfUE9TVFsnZmlsZSddID0gJyc7CgkkbWVzc2FnZT0nJzsKCXNtZF9hdF9l ZGl0KCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IHNtZF9hdF9jbG9uZSgpIHsKCWdsb2JhbCAkdHhwX3VzZXI7CgoJZXh0cmFjdChkb1NsYXNo KGdwc2EoYXJyYXkoJ3NraW4nLCAnbmV3X3NraW4nKSkpKTsKCSRtc2c9Jyc7CgoJJG5ld19z a2luID0gdHJpbSgkbmV3X3NraW4pOwoJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdf c2tpbik7CgoJaWYgKGVtcHR5KCRuZXdfc2tpbikpIHsKCQkkbXNnID0gc21kX2F0X2dUeHQo J25hbWVfZW1wdHknKTsKCX0KCgkvLyBDaGVjayB0aGUgbmV3IG5hbWUgaXNuJ3QgYWxyZWFk eSBpbiB1c2UKCSR0aGVtZXMgPSBzbWRfYXRfcmVhZF9za2lucygpOwoKCWlmIChpbl9hcnJh eSgkbmV3X3NraW4sICR0aGVtZXMpKSB7CgkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4 aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOwoJfQoKCS8vIE5vIGVycm9y cywgc28gbWFrZSBhIG5ldyBkaXIgYW5kIGNyZWF0ZSB0aGUgUEhQIGZpbGUKCWlmICgkbXNn PT0nJykgewoJCSRjb250ZW50ID0gJyc7CgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4u RFM7CgkJJHJlcyA9IG1rZGlyKCRkZXN0ZGlyKTsKCQkkYmFzZWQgPSAnJzsKCgkJaWYgKCRz a2luKSB7CgkJCS8vIEJhc2VkIG9uIGFuIGV4aXN0aW5nIHRoZW1lLiBObyBuZWVkIGZvciBh bnkgZnVuY3Rpb25zIG90aGVyIHRoYW4gbWFuaWZlc3QoKQoJCQkkYmFzZWQgPSAidGhlbWU6 OmJhc2VkX29uKCciLiRza2luLiInKTsiOwoJCQkkZXh0ZW5kcyA9ICRza2luLidfdGhlbWUn OwoJCQkkc3Jjc3MgPSBUSEVNRS4kc2tpbi5EUy4ndGV4dHBhdHRlcm4uY3NzJzsKCQkJaWYg KGZpbGVfZXhpc3RzKCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsKCQkJCSRp bXBvcnQgPSBqb2luKCcnLCBmaWxlKCRzcmNzcykpOwoJCQl9IGVsc2UgewoJCQkJJGltcG9y dCA9ICdAaW1wb3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3MiKTsnOwoJCQl9 CgkJCSRjb250ZW50ID0gJ3snOwoJCX0gZWxzZSB7CgkJCS8vIEJyYW5kIHNwYW5raW5nIG5l dyB0aGVtZS4gQ2xvbmUgJ2NsYXNzaWMnIGZ1bmN0aW9ucyB0aGVuIGFkZCBuZXcgbWFuaWZl c3QoKQoJCQkkZXh0ZW5kcyA9ICd0aGVtZSc7CgkJCSRpbXBvcnQgPSAnJzsKCQkJJHNyYyA9 IHR4cGF0aC5EUy5USEVNRS4nY2xhc3NpYycuRFMuJ2NsYXNzaWMucGhwJzsKCQkJJGdyYWIg PSBmYWxzZTsKCQkJJGZwID0gZmlsZSgkc3JjKTsKCgkJCWZvcmVhY2goJGZwIGFzICRsaW5l KSB7CgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsKCQkJCWlmIChzdHJwb3MoJGxpbmUsICdm dW5jdGlvbiBtYW5pZmVzdCgpJykgIT09IGZhbHNlKSB7CgkJCQkJJGdyYWIgPSBmYWxzZTsg Ly8gdW5uZWNlc3Nhcnk/CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAoJGdyYWIpIHsKCQkJ CQkkY29udGVudCAuPSAkbGluZS5uOwoJCQkJfQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Ns YXNzIGNsYXNzaWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBmYWxzZSkgewoJCQkJCSRn cmFiID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gbWFuaWZlc3QgZmllbGRzCgkJJG1h bnVzZXIgPSBnZXRfYXV0aG9yX25hbWUoJHR4cF91c2VyKTsKCQkkbWFudGl0bGUgPSB1Y3dv cmRzKCRuZXdfc2tpbik7CgoJCS8vIFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUKCQkkYnVmID0g PDw8RU9GCjw/cGhwCgppZiAoIWRlZmluZWQoJ3R4cGludGVyZmFjZScpKSBkaWUoJ3R4cGlu dGVyZmFjZSBpcyB1bmRlZmluZWQuJyk7Cgp7JGJhc2VkfQoKY2xhc3MgeyRuZXdfc2tpbn1f dGhlbWUgZXh0ZW5kcyB7JGV4dGVuZHN9CnskY29udGVudH0KCglmdW5jdGlvbiBtYW5pZmVz dCgpCgl7CgkJcmV0dXJuIGFycmF5KAoJCQkndGl0bGUnCSAJCT0+ICd7JG1hbnRpdGxlfScs CgkJCSdhdXRob3InIAkJPT4gJ3skbWFudXNlcn0nLAoJCQknYXV0aG9yX3VyaScgCT0+ICcn LAoJCQkndmVyc2lvbicgCQk9PiAnMS4wJywKCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycsCgkJ CSdoZWxwJyAJCQk9PiAnJywKCQkpOwoJfQp9Cj8+CkVPRjsKCgkJJGZwID0gZm9wZW4oJGRl c3RkaXIuJG5ld19za2luLicucGhwJywgIndiIik7CgkJZndyaXRlKCRmcCwgJGJ1Zik7CgkJ ZmNsb3NlKCRmcCk7CgoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUKCQkkZnAgPSBmb3Blbigk ZGVzdGRpci4ndGV4dHBhdHRlcm4uY3NzJywgIndiIik7CgkJZndyaXRlKCRmcCwgJGltcG9y dCk7CgkJZmNsb3NlKCRmcCk7CgoJCWlmICgkc2tpbikgewoJCQkkbXNnID0gc21kX2F0X2dU eHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7OwoJCX0g ZWxzZSB7CgkJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5ld19za2luKSk7OwoJCX0KCi8vCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tp bl9ub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsKCgl9CgoJ c21kX2F0X2xpc3QoJG1zZyk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBzbWRfYXRfY3J1c2hfb3B0aW9ucygkdHlwZT0nY29tcHJlc3MnKSB7CglnbG9iYWwg JHBsdWdpbnM7CgoJJHNtZF9jcnVzaGVycyA9IGFycmF5KCk7CgoJaWYgKGlzX2FycmF5KCRw bHVnaW5zKSAmJiBpbl9hcnJheSgnc21kX2NydW5jaGVycycsICRwbHVnaW5zKSkgewoJCSRj cnVuY2hlcnMgPSBzbWRfY3J1bmNoX2NhcGFiaWxpdGllcygkdHlwZSk7CgkJZm9yZWFjaCAo YXJyYXkoJ3RhcicsICdnemlwJywgJ3ppcCcsICdiemlwMicpIGFzICRjbSkgewoJCQlpZiAo aW5fYXJyYXkoJGNtLCAkY3J1bmNoZXJzKSkgewoJCQkJJHNtZF9jcnVzaGVyc1skY21dID0g c21kX2F0X2dUeHQoJ2NfJy4kY20pOwoJCQl9CgkJfQoJfQoKCXJldHVybiAkc21kX2NydXNo ZXJzOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2V4 cG9ydCgpIHsKCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7CgoJZXh0cmFjdChkb1Ns YXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOwoJJG1lc3NhZ2U9Jyc7CgljaGRp cihUSEVNRSk7Cgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsKCSRyZXBz ID0gYXJyYXkoCgkJJ3t0aGVtZX0nID0+ICRza2luLAoJCSd7dmVyc2lvbn0nID0+ICRza2lu Zm9bJ3ZlcnNpb24nXSwKCSk7Cgkkb3V0ID0gc3RydHIoZ2V0X3ByZWYoJ3NtZF9hdF9maWxl bmFtZV9mb3JtYXQnLCAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfZmlsZW5hbWVfZm9ybWF0 J10pLCAkcmVwcyk7CgoJLy8gQ2hlY2sgdGhlIHBhc3NlZCBjb21wcmVzc2lvbiBmb3JtYXQg aXMgdmFsaWQKCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdjb21wcmVzcycp OwoJaWYgKCRjcnVzaD09JycgfHwgJGNydXNoPT0ndW5kZWZpbmVkJyB8fCAhYXJyYXlfa2V5 X2V4aXN0cygkY3J1c2gsICRjcnVzaGVycykpIHsKCQkkbXNnID0gYXJyYXkoc21kX2F0X2dU eHQoJ3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAk Y3J1c2gpKSwgRV9XQVJOSU5HKTsKCQlzbWRfYXRfbGlzdCgkbWVzc2FnZSk7CgkJcmV0dXJu OwoJfQoKCXN3aXRjaCgkY3J1c2gpIHsKCQljYXNlICd6aXAnOgoJCQkkemlwID0gbmV3IHNt ZF9jcnVuY2hfemlwX2ZpbGUoJG91dC4nLnppcCcpOwoJCQlicmVhazsKCQljYXNlICdiemlw Mic6CgkJCSR6aXAgPSBuZXcgc21kX2NydW5jaF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsK CQkJYnJlYWs7CgkJY2FzZSAndGFyJzoKCQkJJHppcCA9IG5ldyBzbWRfY3J1bmNoX3Rhcl9m aWxlKCRvdXQuJy50YXInKTsKCQkJYnJlYWs7CgkJY2FzZSAnZ3ppcCc6CgkJCSR6aXAgPSBu ZXcgc21kX2NydW5jaF9nemlwX2ZpbGUoJG91dC4nLnRneicpOwogCQkJYnJlYWs7Cgl9CgoJ JHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+IHR4cGF0aC5EUy5USEVNRSwg J292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5JyA9PiAxKSk7CgkkemlwLT5hZGRfZmlsZXMo JHNraW4uRFMuJyouKicpOwoJJHppcC0+ZXhjbHVkZV9maWxlcygkc2tpbi5EUy4nKi5zdm4q Jyk7CgkkemlwLT5jcmVhdGVfYXJjaGl2ZSgpOwoJJHppcC0+ZG93bmxvYWRfZmlsZSgpOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2ltcG9ydCgp IHsKCWdsb2JhbCAkcHJlZnM7CgoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUn XTsKCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBf bmFtZSddLCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyd0 bXBfbmFtZSddKSk7CgkkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVNRTsKCSR1bmNydXNoZXJz ID0gc21kX2F0X2NydXNoX29wdGlvbnMoJ2RlY29tcHJlc3MnKTsKCSRtZXNzYWdlPScnOwoJ JGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOwoJJGxhc3RwYXJ0ID0gY291bnQoJGluZm8p LTE7CgkkZXh0ID0gJGluZm9bJGxhc3RwYXJ0XTsKCglpZiAoJG5hbWUgJiYgJGZpbGUpIHsK CQlpZiAoJGV4dCA9PSAnemlwJyAmJiBhcnJheV9rZXlfZXhpc3RzKCd6aXAnLCAkdW5jcnVz aGVycykpIHsKCQkJJHppcCA9IG5ldyBzbWRfY3J1bmNoX2RVbnppcDIoJGZpbGUpOwovLwkJ CSR6aXAtPmRlYnVnID0gdHJ1ZTsKCQkJJHppcC0+Z2V0TGlzdCgpOwoJCQkkdmFsaWRBcmNo aXZlID0gc21kX2F0X2NoZWNrX2FyY2hpdmUoJHppcC0+Y29tcHJlc3NlZExpc3QsICRleHQp OwoJCQlpZiAoJHZhbGlkQXJjaGl2ZSkgewoJCQkJJHppcC0+dW56aXBBbGwoJGJhc2VkaXIp OwoJCQkJJHppcC0+Y2xvc2UoKTsKCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9y dF9vaycpOwoJCQl9IGVsc2UgewoJCQkJJG1lc3NhZ2UgPSBhcnJheShzbWRfYXRfZ1R4dCgn aW1wb3J0X2ZhaWxlZCcpLCBFX1dBUk5JTkcpOwoJCQl9CgkJfSBlbHNlIGlmICgkZXh0ID09 ICd0Z3onICYmIGFycmF5X2tleV9leGlzdHMoJ2d6aXAnLCAkdW5jcnVzaGVycykpIHsKCQkJ JHppcCA9IG5ldyBzbWRfY3J1bmNoX2d6aXBfZmlsZShiYXNlbmFtZSgkZmlsZSkpOwoJCQkk emlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3Jp dGUnID0+IDEpKTsKCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOwoJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsKCQl9IGVsc2UgaWYgKCRleHQgPT0gJ3RiejInICYm IGFycmF5X2tleV9leGlzdHMoJ2J6aXAyJywgJHVuY3J1c2hlcnMpKSB7CgkJCSR6aXAgPSBu ZXcgc21kX2NydW5jaF9iemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsKCQkJJHppcC0+c2V0 X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAx KSk7CgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsKCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgnaW1wb3J0X29rJyk7CgkJfSBlbHNlIGlmICgkZXh0ID09ICd0YXInKSB7CgkJCSR6aXAg PSBuZXcgc21kX2NydW5jaF90YXJfZmlsZShiYXNlbmFtZSgkZmlsZSkpOwoJCQkkemlwLT5z ZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3JpdGUnID0+ IDEpKTsKCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOwoJCQkkbWVzc2FnZSA9IHNtZF9hdF9n VHh0KCdpbXBvcnRfb2snKTsKCQl9IGVsc2UgewoJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9h dF9nVHh0KCd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnLCBhcnJheSgne2NydXNofScg PT4gJGV4dCkpLCBFX1dBUk5JTkcpOwoJCX0KCgkJLy8gUmVtb3ZlIHRoZSB0ZW1wb3Jhcnkg ZmlsZQoJCXVubGluaygkZmlsZSk7Cgl9IGVsc2UgewoJCSRtZXNzYWdlID0gc21kX2F0X2dU eHQoJ2VtcHR5X2luZm8nKTsKCX0KCglzbWRfYXRfbGlzdCgkbWVzc2FnZSk7Cn0KCi8vIENo ZWNrIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSBhcmNoaXZlIGZvciB2YXJpb3Vz IGl0ZW1zL2F0dHJpYnV0ZXMuCi8vIEVhY2ggdGltZSBvbmUgb2YgdGhlIGNvbmRpdGlvbnMg aXMgbWV0LCB0aGUgdmNudCBpcyBpbmNyZW1lbWVudGVkLgovLyBPbmNlIHRoZSB3aG9sZSBh cmNoaXZlIGhhcyBiZWVuIHJlYWQsIGlmIHRoZSB2Y250IG1hdGNoZXMgdGhlIGV4cGVjdGVk Q291bnRzIGZvcgovLyB0aGF0IHR5cGUsIHRoZSBhcmNoaXZlIGlzIHZhbGlkLgpmdW5jdGlv biBzbWRfYXRfY2hlY2tfYXJjaGl2ZSgkc3RydWN0LCAkdHlwZT0nemlwJykgewoJJGV4cGVj dGVkQ291bnRzID0gYXJyYXkoJ3ppcCcgPT4gMSwgJ3RneicgPT4gMCwgJ3RiejInID0+IDAs ICd0YXInID0+IDApOwoJc3dpdGNoICgkdHlwZSkgewoJCWNhc2UgInppcCI6CgkJCSR2Y250 ID0gMDsKCQkJZm9yZWFjaCAoJHN0cnVjdCBhcyAkZW50cnkgPT4gJGluZm8pIHsKCQkJCSRw YXJ0cyA9IHBhdGhpbmZvKCRpbmZvWydmaWxlX25hbWUnXSk7CgkJCQlpZiAoaXNzZXQoJHBh cnRzWydleHRlbnNpb24nXSkgJiYgJHBhcnRzWydleHRlbnNpb24nXSA9PSAncGhwJykgewoJ CQkJCSRkaXJiaXRzID0gZXhwbG9kZShEUywgJHBhcnRzWydkaXJuYW1lJ10pOwoJCQkJCSRu dW1kaXJzID0gY291bnQoJGRpcmJpdHMpOwoJCQkJCWlmICgoJHBhcnRzWydmaWxlbmFtZSdd ID09ICRkaXJiaXRzWyRudW1kaXJzLTFdKSAmJiAkbnVtZGlycz09MSkgewoJCQkJCQkkdmNu dCsrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlicmVhazsKCX0KCglyZXR1cm4gKCRleHBlY3Rl ZENvdW50c1skdHlwZV0gPT0gJHZjbnQpID8gdHJ1ZSA6IGZhbHNlOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9pbWFnZSgpIHsKCWds b2JhbCAkZmlsZV9tYXhfdXBsb2FkX3NpemU7CgoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJy YXkoJ2lkJykpKSk7CgkkX1BPU1RbJ3NraW4nXSA9ICRza2luID0gJGlkOwoKCSRuYW1lID0g JF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ107CgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7CgkkbWVzc2FnZT0nJzsKCglpZiAo JGZpbGUgPT09IGZhbHNlKSB7CgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWls ZWQnKSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZygkX0ZJTEVTWyd0aGVmaWxl J11bJ2Vycm9yJ10pOwoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsKCQlleGl0KCk7Cgl9CgoJ JHNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7CglpZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwg JHNpemUpIHsKCQl1bmxpbmsoJGZpbGUpOwoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxv YWRfZmFpbGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coVVBMT0FEX0VS Ul9GT1JNX1NJWkUpOwoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsKCQlleGl0KCk7Cgl9CgoJ JHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7CgkkbmV3X3NraW4gPSAkc2tp bmZvWyduYW1lJ107CgkkbmV3cGF0aCA9ICRza2luZm9bJ3BhdGgnXTsKCglpZiAoJG5ld19z a2luICYmICRmaWxlKSB7CgkJaWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3Bh dGguJG5hbWUpKSB7CgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9zdWNjZXNz Jyk7CgkJfSBlbHNlIHsKCQkJdW5saW5rKCRmaWxlKTsKCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgndXBsb2FkX2ZhaWxlZCcpOwoJCX0KCX0gZWxzZSB7CgkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnZW1wdHlfaW5mbycpOwoJfQoKCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGVfaW1h Z2UoKSB7CglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lczsKCglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnc2tpbicpKSkpOwoJJGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycp OwoJJG1lc3NhZ2U9Jyc7CgoJaWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7CgkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOwoJfSBlbHNlIHsKCQlpZiAoaW5fYXJyYXko JHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7CgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J2NvcmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7CgkJfSBlbHNl IHsKCQkJZm9yZWFjaCAoJGZpbGVfbGlzdCBhcyAkaW1hZ2UpIHsKCQkJCSRwYXRoID0gdHhw YXRoLkRTLiRpbWFnZTsKCQkJCXVubGluaygkcGF0aCk7CgkJCX0KCQl9Cgl9CgoJc21kX2F0 X2VkaXQoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gc21kX2F0X2RlbGV0ZSgpIHsKCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzLCAkdGhlbWUs ICRzbWRfYXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7CgoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NraW4nLCAnZmlsZScpKSkpOwoJJG1lc3NhZ2U9Jyc7CgoJaWYgKCRmaWxlKSB7 CgkJLy8gRWRpdGluZyBhIHNraW4sIHRodXMgZGVsZXRpbmcgYSBzaW5nbGUgZmlsZQoJCWlm IChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsKCQkJJG1lc3NhZ2UgPSBz bWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4p KTsKCQkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOwoJCX0gZWxzZSB7CgkJCSRkZWwgPSB1bmxp bmsoVEhFTUUuJHNraW4uRFMuJGZpbGUpOwoJCQlpZiAoJGRlbCkgewoJCQkJJG1lc3NhZ2Ug PSBnVHh0KCdmaWxlX2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOwoJCQkJ JF9QT1NUWydmaWxlJ10gPSAnJzsgLy8gQ2xlYXIgdGhlIHZhcmlhYmxlIHNvIHRoZSBmaWxl bmFtZSBkb2Vzbid0IGFwcGVhciBvbiB0aGUgZWRpdCBwYWdlCgkJCX0gZWxzZSB7CgkJCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX25vdF9kZWxldGVkJywgYXJyYXkoJ3tuYW1l fScgPT4gJGZpbGUpKTsKCQkJfQoJCX0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7Cgl9IGVs c2UgewoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsKCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRz a2luKSk7CgkJCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsKCQl9IGVsc2UgewoJCQkvLyBWaWV3 aW5nIHRoZSBza2luIGxpc3QsIHRodXMgZGVsZXRpbmcgdGhlIHdob2xlIHNraW4KCQkJJHNr aW5kaXIgPSBUSEVNRS4kc2tpbjsKCQkJaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRza2lu ZGlyKSkgewoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZGVsZXRlX2ZhaWxlZCcpOwoJ CQl9IGVsc2UgewoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnc2tpbl9kZWxldGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJHNraW4pKTsKCQkJfQoKCQkJLy8gSGFuZGxlIHNpdHVhdGlv bnMgaWYgY3VycmVudCBza2luIGhhcyBiZWVuIGRlbGV0ZWQKCQkJaWYgKCFmaWxlX2V4aXN0 cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7CgkJCQkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0 X3ByZWZzKCk7CgoJCQkJLy8gUmVzZXQgdGhlIGdsb2JhbCBza2luIGluIGNhc2UgaXQncyBi ZWVuIGRlbGV0ZWQKCQkJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9n bG9iYWxfc2tpbiddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7 CgkJCQkkZ2JsX3NraW4gPSAoJGdibF9za2luICE9ICcnICYmIGZpbGVfZXhpc3RzKHR4cGF0 aC5EUy5USEVNRS4kZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsKCQkJCXNl dF9wcmVmKCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkZ2JsX3NraW4sICRzbWRfYXRfZXZlbnQs IFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOwoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUn LCAkZ2JsX3NraW4pOwoKCQkJCSRza2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJyk7CgkJCQlp ZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsKCQkJCQkkc2tpbiA9 ICRnYmxfc2tpbjsKCQkJCX0KCQkJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAnc21k X2F0JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsKCQkJ fQoJCQkkX0dFVFsnc2tpbiddID0gJHNraW47CgkJCSRfR0VUWyduZXh0c3RlcCddID0gJ3Nt ZF9hdF9saXN0JzsKCQkJc21kX2F0X3N3aXRjaCgkbWVzc2FnZSk7CgkJfQoJfQp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X3NhdmUoKSB7CglleHRy YWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ25ld19za2luJywnZmlsZScsJ3NtZF9h dF9lZGl0cycpKSkpOwoKCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwg InBocCIpOwoJJG1lc3NhZ2UgPSAkZXh0cmFNc2cgPSAnJzsKCSRmaWxlID0gdHJpbSgkZmls ZSk7CgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7CgkkbXNnbGV2ID0gMDsKCgkvLyBO ZXcgZmlsZQoJaWYgKCEkZmlsZSAmJiAkbmV3X3NraW4pIHsKCQkkZmlsZSA9ICRuZXdfc2tp bjsKCQkkZXh0ID0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZSkpOwoJCWlmIChzdHJ0 b2xvd2VyKCRmaWxlKSAhPSAncmVhZG1lJyAmJiAoJGV4dCA9PSAnJyB8fCAhaW5fYXJyYXko JGV4dCwgJGVkaXRhYmxlKSkpIHsKCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5zdXBw b3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsKCQkJ JG1zZ2xldiA9IEVfV0FSTklORzsKCQkJJF9QT1NUWydmaWxlJ10gPSAkZmlsZTsKCQl9Cgl9 CgoJaWYgKCRtZXNzYWdlPT0nJykgewoJCSRmbmFtZSA9IHNhbml0aXplRm9yRmlsZSgkZmls ZSk7CgkJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7CgkJJF9QT1NUWydu ZXdfc2tpbiddID0gJG5ld19za2luOwoKCQkkc21kX2F0X2VkaXRzID0gZG9TdHJpcChzdHJf cmVwbGFjZSgnXHJcbicsJwonLCRzbWRfYXRfZWRpdHMpKTsgLy8gbmV3bGluZSB3b3JrYXJv dW5kCgoJCWlmICgkZm5hbWUpIHsKCQkJJGZpbGVwYXRoID0gVEhFTUUuJHNraW4uRFM7CgkJ CWlmICghZmlsZV9leGlzdHMoJGZpbGVwYXRoLiRmbmFtZSkpIHsKCQkJCSRyZXQgPSB0b3Vj aCgkZmlsZXBhdGguJGZuYW1lKTsKCQkJCWlmICgkcmV0ID09PSBmYWxzZSkgewoJCQkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ21rZGlyX2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ ICRmbmFtZSkpOwoJCQkJfQoJCQl9CgoJCQkvLyBBc3N1bWluZyBubyBlcnJvcnMgc28gZmFy Li4uCgkJCWlmICgkbWVzc2FnZSA9PSAnJykgewoJCQkJJGZoID0gZm9wZW4oJGZpbGVwYXRo LiRmbmFtZSwgJ3diJyk7CgkJCQlmd3JpdGUoJGZoLCAkc21kX2F0X2VkaXRzKTsKCQkJCWZj bG9zZSgkZmgpOwoKCQkJCWlmICgkZm5hbWUgIT0gJG5ld19za2luKSB7CgkJCQkJLy8gUmVu YW1lIHRoZSBmaWxlCgkJCQkJJHJlcyA9IHJlbmFtZSgkZmlsZXBhdGguJGZuYW1lLCAkZmls ZXBhdGguJG5ld19za2luKTsKCgkJCQkJLy8gSWYgdGhlIHJlbmFtZWQgZmlsZSBpcyB0aGUg dGhlbWUncyBQSFAgZmlsZSwgdHJ5IHRvIHJlbmFtZSB0aGUgbWFpbiBza2luIGRpciB0b28K CQkJCQkkZmlsZWJpdHMgPSBleHBsb2RlKCcuJywgJG5ld19za2luKTsKCQkJCQkkb2xkZmls ZWJpdHMgPSBleHBsb2RlKCcuJywgJGZuYW1lKTsKCQkJCQkkZXh0ID0gYXJyYXlfcG9wKCRm aWxlYml0cyk7CgkJCQkJaWYgKCRyZXMgJiYgJGV4dCA9PSAncGhwJyAmJiAoJG9sZGZpbGVi aXRzWzBdID09ICRza2luKSkgewoJCQkJCQkkbmV3X2ZpbGVwYXRoID0gVEhFTUUuJGZpbGVi aXRzWzBdLkRTOwoJCQkJCQkkcmVuID0gcmVuYW1lKCRmaWxlcGF0aCwgJG5ld19maWxlcGF0 aCk7CgkJCQkJCSRmaWxlcGF0aCA9ICgkcmVuKSA/ICRuZXdfZmlsZXBhdGggOiAkZmlsZXBh dGg7CgkJCQkJCSRfUE9TVFsnc2tpbiddID0gJGZpbGViaXRzWzBdOwoJCQkJCX0KCQkJCQkk ZXh0cmFNc2cgPSAoJHJlcykgPyBzbWRfYXRfZ1R4dCgncmVuYW1lZCcsIGFycmF5KCd7bmFt ZX0nID0+ICRuZXdfc2tpbikpIDogc21kX2F0X2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsKCQkJ CX0KCgkJCQkvLyBQcm9jZXNzIGFueSBjc3MgcmVwbGFjZW1lbnRzCgkJCQkkZmlsZWJpdHMg PSBleHBsb2RlICgnLicsKCgkZm5hbWU9PSRuZXdfc2tpbik/ICRmbmFtZSA6ICRuZXdfc2tp bikpOwoJCQkJJGNzc2ZpbGUgPSAkZmlsZWJpdHNbMF07CgkJCQkkZXh0ID0gYXJyYXlfcG9w KCRmaWxlYml0cyk7CgkJCQlpZiAoJGV4dCA9PSAnc3NjJykgewoJCQkJCSRyZXBsYWNlbWVu dHMgPSBhcnJheSgpOwoJCQkJCSRudW1fcmVwMSA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0Et WmEtejAtOV9dKyk6XHMqKC4qKTsvJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMxKTsKCQkJ CQkkbnVtX3JlcDIgPSBwcmVnX21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKlx7 KC4qPylcfS9zJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMyKTsKCgkJCQkJLy8gU2ltcGxl IHJlcGxhY2VtZW50cwoJCQkJCWZvcmVhY2goJG1hdGNoZXMxIGFzICRpZHggPT4gJHJlcGFy cikgewoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7CgkJCQkJCQkvLyBSZW1vdmUgdGhlIHZhciBk ZWZpbml0aW9ucwoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7CgkJCQkJCQkJ JHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOwoJ CQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmICgkaWR4ID09IDEpIHsKCQkJCQkJCWZvcmVhY2gg KCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7CgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVw XSA9ICRtYXRjaGVzMVsyXVskamR4XTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCgkJCQkJ Ly8gTXVsdGktbGluZSByZXBsYWNlbWVudHMKCQkJCQlmb3JlYWNoKCRtYXRjaGVzMiBhcyAk aWR4ID0+ICRyZXBhcnIpIHsKCQkJCQkJaWYgKCRpZHggPT0gMCkgewoJCQkJCQkJLy8gUmVt b3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMKCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJl cCkgewoJCQkJCQkJCSRzbWRfYXRfZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21k X2F0X2VkaXRzKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7CgkJ CQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgewoJCQkJCQkJCSRyZXBs YWNlbWVudHNbJHJlcC4nOyddID0gdHJpbSgkbWF0Y2hlczJbMl1bJGpkeF0pOwoJCQkJCQkJ fQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkvLyBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIG5ldyBj c3MgZmlsZQoJCQkJCSRzbWRfYXRfZWRpdHMgPSB0cmltKHN0cnRyKCRzbWRfYXRfZWRpdHMs ICRyZXBsYWNlbWVudHMpKTsKCQkJCQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGNzc2ZpbGUu Jy5jc3MnLCAnd2InKTsKCQkJCQlmd3JpdGUoJGZoLCAkc21kX2F0X2VkaXRzKTsKCQkJCQlm Y2xvc2UoJGZoKTsKCQkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgewoJCQkJCQkkb2xk Zm5hbWUgPSBleHBsb2RlICgnLicsICRmbmFtZSk7CgkJCQkJCSRvbGRmbmFtZSA9ICRvbGRm bmFtZVswXS4nLmNzcyc7CgkJCQkJCSRyZXMgPSBAdW5saW5rKCRmaWxlcGF0aC4kb2xkZm5h bWUpOwoJCQkJCX0KCQkJCX0KCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX3Nh dmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZuYW1lKSkuYnIuJGV4dHJhTXNnOwoJCQl9CgkJ fQoJfQoJc21kX2F0X2VkaXQoYXJyYXkoJG1lc3NhZ2UsICRtc2dsZXYpKTsKfQoKCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQUkVGUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gc21kX2F0X2dldF9wcmVmcygpIHsKCWdsb2JhbCAkc21kX2F0X3By ZWZzOwoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJHNt ZF9hdF9wcmVmc1swXSkpKTsKCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwnLCd0eHBfcHJl ZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOwoJJGF0X3ByZWZzID0gYXJyYXkoKTsK CWZvcmVhY2ggKCRycyBhcyAkcHJlZmFycikgewoJCSRhdF9wcmVmc1skcHJlZmFyclsnbmFt ZSddXSA9ICRwcmVmYXJyWyd2YWwnXTsKCX0KCXJldHVybiAkYXRfcHJlZnM7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfb3B0aW9ucygkZXZlbnQs ICRzdGVwLCAkbWVzc2FnZT0nJykgewoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9zZXR1cCgkbWVzc2Fn ZT0nJykgewoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVudCwg JHRoZW1lLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3N0eWxlczsKCgkkbnVtUmVxUHJl ZnMgPSBjb3VudCgkc21kX2F0X3ByZWZzWzBdKTsKCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRf cHJlZnMoKTsKCSRudW1Sb3dzID0gY291bnQoJGF0X3ByZWZzKTsKCglwYWdldG9wKGdUeHQo J3ByZWZzJyksJG1lc3NhZ2UpOwoKCS8vIFRPRE86IHVzZSBnZXRfZ3JvdXBzKCk7CgkkbGV2 ZWxzID0gYXJyYXkoCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicpLAoJCTIgPT4gZ1R4dCgn bWFuYWdpbmdfZWRpdG9yJyksCgkJMyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLAoJCTQgPT4g Z1R4dCgnc3RhZmZfd3JpdGVyJyksCgkJNSA9PiBnVHh0KCdmcmVlbGFuY2VyJyksCgkJNiA9 PiBnVHh0KCdkZXNpZ25lcicpLAoJKTsKCSRudW1MZXZzID0gY291bnQoJGxldmVscyk7CgoJ Ly8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0CgkkdXNraW5zID0gYXJyYXkoKTsKCWlmIChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsKCQkkdXNraW5zID0gZXhw bG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsKCX0KCgkkbGF5b3V0 ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3Nt ZF9hdF9sYXlvdXQnXSA6IDE7CgkkY2xyQnRuID0gJyBbPHNwYW4gaWQ9InNtZF9jbHIiIGNs YXNzPSJzbWRfZmFrZWJ0biI+Jy5zbWRfYXRfZ1R4dCgnY2xlYXInKS4nPC9zcGFuPl0nOwoJ JGJ0blNldCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXQn KSwgJ3B1Ymxpc2gnKTsKCSRidG5TYXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywg Z1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9k PSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1zbWRf YXRfcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7 CgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRp c3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0 ZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsKCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0i bmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0 KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxi ciAvPic7CgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOwoJ JHJhZEJ0bnMgPSBhcnJheSgKCQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwKCQlzbWRfYXRf Z1R4dCgncGVyX2dyb3VwJyksCgkJc21kX2F0X2dUeHQoJ3Blcl91c2VyJyksCgkpOwoKCWVj aG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykg ewoJCS8vIFByZWZzIGFsbCBpbnN0YWxsZWQKCQkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRf c2tpbnMoKTsKCgkJLy8gc2VsZWN0SW5wdXQgbmVlZHMgYm90aCBpbmRleCBhbmQgdmFsdWUg dG8gYmUgdGhlIHNhbWUgaW4gdGhpcyBjYXNlCgkJJHNraW5zZWwgPSBhcnJheSgpOwoJCWZv cmVhY2goJHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7CgkJCWlmIChzbWRfYXRf ZXhpc3RzKCR2YWx1ZTEpKSB7CgkJCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3Rb JGtleTFdOwoJCQl9CgkJfQoJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9h dF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9 ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhlbWUtPm5hbWU7 CgkJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoJ2NvbXByZXNzJyk7CgkJZWNo byB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFu PSIyIicpIC4gdGRhKCRidG5SZW1vdmUuJGJ0bkxpc3QsICRidG5TdHlsZSkgKTsKCQllY2hv ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4n JiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0PSJyZXR1cm4gc21kX3By ZXN1YigpOyI+JzsKCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnY2FzZV9zb3J0JykpLnRk YSh5ZXNub1JhZGlvKCdzbWRfYXRfY2FzZV9zb3J0JywgJGF0X3ByZWZzWydzbWRfYXRfY2Fz ZV9zb3J0J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY2FzZV9zb3J0IicpKTsKCQlp ZiAoJGNydXNoZXJzKSB7CgkJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBl JykpLnRkYShyYWRpb1NldCgkY3J1c2hlcnMsICdzbWRfYXRfY3J1c2gnLCAkYXRfcHJlZnNb J3NtZF9hdF9jcnVzaCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2NydXNoIicpKTsK CQl9CgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2xheW91dCcpKS50ZGEocmFkaW9TZXQo YXJyYXkoc21kX2F0X2dUeHQoJ2xheW91dF9saXN0JyksIHNtZF9hdF9nVHh0KCdsYXlvdXRf Z3JpZCcpKSwgJ3NtZF9hdF9sYXlvdXQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSks ICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9sYXlvdXQiJykpOwoJCWVjaG8gdHIodGRhKHNt ZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfYXRfdHcn LCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9nVHh0KCd0aW1l cycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3NtZF9hdF90aCdd LCcnLCcnLCcnLDQpKSk7CgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2ZpbGVuYW1lX2Zv cm1hdCcpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnLCAk YXRfcHJlZnNbJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnXSkpKTsKCQllY2hvIHRyKAoJCQl0 ZChzbWRfYXRfZ1R4dCgnZ2xvYmFsX3NraW4nKSkKCQkJLnRkKHNlbGVjdElucHV0KCdzbWRf YXRfZ2xvYmFsX3NraW4nLCAkc2tpbnNlbCwgJGdibF9za2luLCAwLCAwKSkKCQkpOwoJCWVj aG8gdHIodGRhKHNtZF9hdF9nVHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJh ZEJ0bnMsICdzbWRfYXRfc3lzdGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAn IHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfcmFkaW8iJykpOwoKCQkvLyBPcHRpb24gMQoJCSRw cml2X2xpc3QgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJp dnNbXSIgY2xhc3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRp cGxlIj4nOwoJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJGxldmlkID0+ICRsZXZuYW1lKSB7CgkJ CSRwcml2X2xpc3QgLj0gJzxvcHRpb24gdmFsdWU9IicuJGxldmlkLiciPicuJGxldm5hbWUu Jzwvb3B0aW9uPic7CgkJfQoJCSRwcml2X2xpc3QgLj0gJzwvc2VsZWN0Pic7CgoJCS8vIE5v dGUgdGhlIGhpZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFu eSBsaXN0IGNoYW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQKCQkkc2VsYSA9IHNtZF9hdF9n VHh0KCdza2luX2dyb3VwcycpOwoJCSRzZWxiID0gaElucHV0KCdzbWRfYXRfZ3JvdXBfbGlz dCcsICRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSk7CgkJJHNlbGIgLj0gJzxzZWxl Y3QgaWQ9InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3QiIHNp emU9IicuJG51bUxldnMuJyI+JzsKCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikg ewoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNraW4pKSB7CgkJCQkkc2VsYiAuPSAnPG9wdGlv biB2YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7CgkJCX0KCQl9CgkJ JHNlbGIgLj0gJzwvc2VsZWN0Pic7CgkJZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNt ZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykgLiB0ZGEoJHNlbGIuJHByaXZfbGlzdCwgJyB3aWR0 aD0iNDAwIiBjbGFzcz0ic21kX2F0X3NlbDEgc21kX2hpZGRlbiInKSk7CgoJCS8vIE9wdGlv biAyCgkJJHNlbGEgPSBzbWRfYXRfZ1R4dCgnYWxsb3dlZF9za2lucycpOwoJCSRzZWxiID0g JzxzZWxlY3QgaWQ9InNtZF9hdF91c2VyX2xpc3QiIG5hbWU9InNtZF9hdF91c2VyX2xpc3Rb XSIgY2xhc3M9Imxpc3QiIHNpemU9IjgiIG11bHRpcGxlPSJtdWx0aXBsZSI+JzsKCQlmb3Jl YWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgewoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNr aW4pKSB7CgkJCQkkc2VsYiAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyInLigoaW5f YXJyYXkoJGFza2luLCAkdXNraW5zKSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycp Lic+Jy4kYXNraW4uJzwvb3B0aW9uPic7CgkJCX0KCQl9CgkJJHNlbGIgLj0gJzwvc2VsZWN0 PicuJGNsckJ0bjsKCQllY2hvIHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0ic21kX2F0X3NlbDIg c21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0aD0iMjQwIiBjbGFzcz0ic21kX2F0 X3NlbDIgc21kX2hpZGRlbiInKSk7CgkJZWNobyB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHls ZSkpOwoJCWVjaG8gJzwvZm9ybT4nOwoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51 bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsKCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dU eHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnIKCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21l X2V4cGxhaW4nKS5ici5icgoJCQkJCQkuc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9u cycpLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0blN0 eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7Cgl9IGVsc2UgewoJCWVjaG8g dHIodGRhKHNtZF9hdF9nVHh0KCdwcmVmc19ub3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0i MiInKSk7CgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOwoJfQoJZWNo byBlbmRUYWJsZSgpOwoKCWVjaG8gPDw8RU9KUwo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+CgovLyBDb25jYXRlbmF0ZSBjaGVja2JveCBvcHRpb25zIGZvciBzdG9yYWdlCmZ1 bmN0aW9uIHNtZF9hdF9wcmVmc3dhcChzZWxWYWx1ZSkgewoJZm9yIChpZHg9MDsgaWR4IDwg MzsgaWR4KyspIHsKCQlpZiAoaWR4PT1zZWxWYWx1ZSkgewoJCQlqUXVlcnkoIi5zbWRfYXRf c2VsIitpZHgpLnNob3coKTsKCQl9IGVsc2UgewoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitp ZHgpLmhpZGUoKTsKCQl9Cgl9Cn0KalF1ZXJ5KGZ1bmN0aW9uKCkgewoJalF1ZXJ5KCJpbnB1 dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ10iKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CgkJc21kX2F0 X3ByZWZzd2FwKHRoaXMudmFsdWUpOwoJfSk7CgoJalF1ZXJ5KCcjc21kX2NscicpLmNsaWNr KGZ1bmN0aW9uKCkgewoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0 cigic2VsZWN0ZWQiLCAiIik7Cgl9KTsKCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNoYW5n ZShmdW5jdGlvbigpIHsKCQlzZWxza2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOwoKCQkvLyBD bGVhciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlzdCBmcm9t IHRoZSBoaWRkZW4gZmllbGQKCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuYXR0 cigic2VsZWN0ZWQiLGZhbHNlKTsKCQl2YXIgZ3JwbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFt ZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOwoJCXZhciBncnBzID0gZ3JwbGlzdC5z cGxpdCgnLCcpOwoJCXZhciBjbnQgPSBncnBzLmxlbmd0aDsKCQlmb3IgKHZhciBpZHggPSAw OyBpZHggPCBjbnQ7IGlkeCsrKSB7CgkJCXByaXZzID0gZ3Jwc1tpZHhdLnNwbGl0KCc6Jyk7 CgkJCXNraW5pZCA9IHByaXZzLnNoaWZ0KCk7CgkJCWlmIChza2luaWQgPT0gc2Vsc2tpbikg ewoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7CgkJCQlmb3IgKGpkeCA9IDA7IGpkeCA8 IG51bVByaXZzOyBqZHgrKykgewoJCQkJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb25b dmFsdWU9JyIrcHJpdnNbamR4XSsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOwoJCQkJ fQoJCQl9CgkJfQoJfSk7CgoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKGZ1bmN0 aW9uKCkgewoJCXNlbHNraW4gPSBqUXVlcnkoIiNzbWRfYXRfZ3JwcyBvcHRpb246c2VsZWN0 ZWQiKS52YWwoKTsKCQl2YXIgb3V0ID0gW107CgkJdmFyIHByaXZzID0gW107CgkJcHJpdnMu cHVzaChzZWxza2luKTsKCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uOnNlbGVjdGVk IikuZWFjaChmdW5jdGlvbigpIHsKCQkJcHJpdnMucHVzaChqUXVlcnkodGhpcykudmFsKCkp OwoJCX0pOwoJCWlmIChwcml2cy5sZW5ndGggPT0gMSkgewoJCQlwcml2cy5wb3AoKTsKCQl9 IGVsc2UgewoJCQlvdXQucHVzaChwcml2cy5qb2luKCI6IikpOwoJCX0KCQl2YXIgaGlkbGlz dCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOwoJ CXZhciBwcmV2bGlzdCA9IGhpZGxpc3Quc3BsaXQoJywnKTsKCQl2YXIgcHJldmNudCA9IHBy ZXZsaXN0Lmxlbmd0aDsKCgkJalF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uIikuZWFjaChm dW5jdGlvbigpIHsKCQkJY3VycnNraW4gPSBqUXVlcnkodGhpcykudmFsKCk7CgkJCWlmIChj dXJyc2tpbiAhPSBzZWxza2luKSB7CgkJCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBwcmV2 Y250OyBpZHgrKykgewoJCQkJCXByZXZwcml2cyA9IHByZXZsaXN0W2lkeF0uc3BsaXQoJzon KTsKCQkJCQlza2luaWQgPSBwcmV2cHJpdnMuc2hpZnQoKTsKCQkJCQkvLyBHZW5lcmF0ZSB0 aGUgcHJpdiBsaXN0IGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNraW4sIHJlbW92aW5n IGFueSBkdXBsaWNhdGUgcHJpdnMgc2V0IGVsc2V3aGVyZQoJCQkJCWlmIChza2luaWQgPT0g Y3VycnNraW4pIHsKCQkJCQkJdG1wb3V0ID0gW107CgkJCQkJCXRtcG91dC5wdXNoKHNraW5p ZCk7CgkJCQkJCWZvciAodGhpc3ByaXYgaW4gcHJldnByaXZzKSB7CgkJCQkJCQlpZiAoalF1 ZXJ5LmluQXJyYXkocHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgewoJCQkJCQkJ CXRtcG91dC5wdXNoKHByZXZwcml2c1t0aGlzcHJpdl0pOwoJCQkJCQkJfQoJCQkJCQl9CgkJ CQkJCWlmICh0bXBvdXQubGVuZ3RoID4gMSkgewoJCQkJCQkJb3V0LnB1c2godG1wb3V0Lmpv aW4oIjoiKSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9KTsKCQlqUXVlcnkoImlu cHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwob3V0KTsKCX0pOwoKCS8vIERp c3BsYXkgYSB0b29sdGlwIHNob3dpbmcgdGhlIGN1cnJlbnRseS1hc3NpZ25lZCBza2luIHdo ZW4gaG92ZXJpbmcgb3ZlciBhIHByaXZpbGVnZSBsZXZlbAoJalF1ZXJ5KCIjc21kX2F0X3By aXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgewoJCWhvdml0ZW0gPSBqUXVlcnkodGhp cykudmFsKCk7CgkJZ3JwcyA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xp c3QnXSIpLnZhbCgpOwoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIpOwoJCWZvciAoaWR4ID0g MDsgaWR4IDwgaXRlbXMubGVuZ3RoOyBpZHgrKykgewoJCQlza2lueiA9IGl0ZW1zW2lkeF0u c3BsaXQoIjoiKTsKCQkJZm9yIChqZHggPSAxOyBqZHggPCBza2luei5sZW5ndGg7IGpkeCsr KSB7CgkJCQlpZiAoc2tpbnpbamR4XSA9PSBob3ZpdGVtKSB7CgkJCQkJalF1ZXJ5KHRoaXMp LmF0dHIoInRpdGxlIiwgc2tpbnpbMF0pOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJ fSwKCWZ1bmN0aW9uKCkgewoJCWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIsICIiKTsKCX0p OwoJc21kX2F0X3ByZWZzd2FwKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X3N5c3RlbSdd OmNoZWNrZWQiKS52YWwoKSk7CglqUXVlcnkoIiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2UoKTsK fSk7Cjwvc2NyaXB0PgpFT0pTOwoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOwoJ ZWNobyAkc21kX2F0X3N0eWxlc1snY29tbW9uJ10ubi4kc21kX2F0X3N0eWxlc1snc2V0dXAn XTsKCWVjaG8gJzwvc3R5bGU+JzsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8v IFNwbGl0IGEgbXVsdGktY2hhciBwcmVmZXJlbmNlIHZhbHVlIGludG8gYW4gYXJyYXkgb2Yg a2V5cy92YWx1ZXMuCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJlYWQg ZGlyZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGludGVu dGlvbmFsbHkKZnVuY3Rpb24gc21kX2F0X3ByZWZfZXhwbG9kZSgkdmFsKSB7Cgkkb3JkZXIg PSBhcnJheV92YWx1ZXMoYXJyYXkoc21kX2F0X2dUeHQoJ2NfZ3ppcCcpLHNtZF9hdF9nVHh0 KCdjX2J6aXAnKSxzbWRfYXRfZ1R4dCgnY196aXAnKSkpOwoJJG9ub2ZmID0gYXJyYXlfdmFs dWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpKTsK CSRvdXQgPSBhcnJheSgpOwoJZm9yZWFjaCgkb3JkZXIgYXMgJGtleTEgPT4gJHZhbHVlMSkg ewoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlska2V5MV07Cgl9CglyZXR1cm4g JG91dDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfaW5zdGFsbCgkc2hv d3BhbmU9JzEnKSB7CglnbG9iYWwgJHNtZF9hdF9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglm b3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKCFm ZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZl X2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFz aCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9InNt ZF9hZHNraW4iJyk7CgkJfQoJfQoJaWYgKCRzaG93cGFuZSkgewoJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOwoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7 Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX3JlbW92ZSgkc2hvd3Bh bmU9JzEnKSB7CglnbG9iYWwgJHNtZF9hdF9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglmb3Jl YWNoIChhcnJheV9tZXJnZSgkc21kX2F0X3ByZWZzWzBdLCRzbWRfYXRfcHJlZnNbMV0pIGFz ICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFt ZScsJHByZWYpKSB7CgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScu ZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOwoJCX0KCX0KCWlmICgkc2hvd3BhbmUpIHsKCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdwcmVmc19kZWxldGVkJyk7CgkJc21kX2F0X3NldHVw KCRtZXNzYWdlKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfdXBk YXRlKCkgewoJZ2xvYmFsICRzbWRfcGx1Z2luX3ByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21k X2F0X2V2ZW50OwoKCSRtZXNzYWdlID0gJyc7CgkkcG9zdCA9IGFycmF5KCk7CgkkcG9zdFsn c21kX2F0X2dsb2JhbF9za2luJ10gPSBncHMoJ3NtZF9hdF9nbG9iYWxfc2tpbicpOwoJJHBv c3RbJ3NtZF9hdF9zeXN0ZW0nXSA9IGdwcygnc21kX2F0X3N5c3RlbScpOwoJJHBvc3RbJ3Nt ZF9hdF9sYXlvdXQnXSA9IGdwcygnc21kX2F0X2xheW91dCcpOwoJJHBvc3RbJ3NtZF9hdF9j YXNlX3NvcnQnXSA9IGdwcygnc21kX2F0X2Nhc2Vfc29ydCcpOwoJJHBvc3RbJ3NtZF9hdF90 dyddID0gZ3BzKCdzbWRfYXRfdHcnKTsKCSRwb3N0WydzbWRfYXRfdGgnXSA9IGdwcygnc21k X2F0X3RoJyk7CgkkcG9zdFsnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCddID0gZ3BzKCdzbWRf YXRfZmlsZW5hbWVfZm9ybWF0Jyk7CglpZiAoZ3BzKCdzbWRfYXRfdXNlcl9saXN0JykpIHsK CQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0gam9pbignLCcsIGdwcygnc21kX2F0X3Vz ZXJfbGlzdCcpKTsKCX0gZWxzZSB7CgkJJHBvc3RbJ3NtZF9hdF91c2VyX2xpc3QnXSA9ICcn OwoJfQoJaWYgKGdwcygnc21kX2F0X2dyb3VwX2xpc3QnKSkgewoJCSRwb3N0WydzbWRfYXRf Z3JvdXBfbGlzdCddID0gZ3BzKCdzbWRfYXRfZ3JvdXBfbGlzdCcpOwoJfQoJaWYgKGdwcygn c21kX2F0X2NydXNoJykpIHsKCQkkcG9zdFsnc21kX2F0X2NydXNoJ10gPSBncHMoJ3NtZF9h dF9jcnVzaCcpOwoJfQoKCS8vIFNldCB0aGUgc3lzdGVtLXdpZGUgdGhlbWUgdG8gdGhlIGds b2JhbCB0aGVtZQoJaWYgKCRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgewoJCXNldF9w cmVmKCd0aGVtZV9uYW1lJywgJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKTsKCX0KCglm b3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGlz c2V0KCRwb3N0WyRwcmVmXSkpIHsKCQkJc2V0X3ByZWYoJHByZWYsICRwb3N0WyRwcmVmXSwg JHNtZF9hdF9ldmVudCwgMik7CgkJfQoJfQoJJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNl c19zYXZlZCcpOwoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIFVUSUxJVFkgRlVOQ1RJT05TCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7CglnbG9iYWwg JHR4cF91c2VyOwoJJHVzZXIgPSAoJHVzZXIpID8gJHVzZXIgOiAkdHhwX3VzZXI7CgkkcHJp dnMgPSBzYWZlX2ZpZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNo KCR1c2VyKS4iJyIpOwoJcmV0dXJuICRwcml2czsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9leGlzdHMoJG5hbWUpIHsKCSRpbnN0YW5jZSA9IHRo ZW1lOjpmYWN0b3J5KCRuYW1lKTsKCXJldHVybiAkaW5zdGFuY2U7Cn0KCi8vIElmIHBlci11 c2VyIHNraW4gc3VwcG9ydCBpcyBPRkYsIHRoZSBnbG9iYWwgc2tpbiB3aW5zLgovLyBPbmUg ZXhjZXB0aW9uOiBpZiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgYWxsb3cgdGhlIGN1cnJlbnQg c2tpbiB0byBwcmV2YWlsIHNvIHRoZXkgbWF5IHN3aXRjaCBza2lucyB3aXRoIGltcHVuaXR5 Ci8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbgpmdW5jdGlvbiBzbWRfYXRfcGVy KCkgewoJZ2xvYmFsICRzbWRfYXRfcHJpdnMsICRwcmVmcywgJHRoZW1lLCAkdHhwX3VzZXI7 CgoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOwoJJHNraW5TeXMgPSBpc3NldCgk YXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0n XSA6IDA7CgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7CgkkZ2JsX3NraW4gPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgJiYgJGF0X3ByZWZzWydzbWRf YXRfZ2xvYmFsX3NraW4nXSAhPSAnJykgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tp biddIDogJyc7CgkkZ2JsX3NraW4gPSAoc21kX2F0X2V4aXN0cygkZ2JsX3NraW4pKSA/ICRn Ymxfc2tpbiA6ICdjbGFzc2ljJzsKCglzd2l0Y2ggKCRza2luU3lzKSB7CgkJY2FzZSAwOgoJ CQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2VwdCBhZG1pbnMpCgkJCWlmICghaW5fYXJy YXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7CgkJCQlyZXR1cm4g JGdibF9za2luOwoJCQl9IGVsc2UgewoJCQkJLy8gQWRtaW5zCgkJCQkkYWRtX3NraW4gPSBn ZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUt Pm5hbWUpKTsKCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ICRhZG1f c2tpbiA6ICdjbGFzc2ljJzsKCQkJfQoJCQlicmVhazsKCQljYXNlIDE6CgkJCS8vIEdyb3Vw LWxldmVsIGZvcmNlZCBza2lucwoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgn LCcsICRzbWRfYXRfcHJpdnMpKSkgewoJCQkJJGZvcmNlU2tpbnMgPSAoaXNzZXQoJGF0X3By ZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9s aXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpOwoKCQkJ CS8vIFNwbGl0IHRoZSBncm91cCBza2luIGxpc3QKCQkJCSRnc2tpbnMgPSBhcnJheSgpOwoJ CQkJJGdvcHRzID0gZXhwbG9kZSgnLCcsICRmb3JjZVNraW5zKTsKCQkJCWZvcmVhY2ggKCRn b3B0cyBhcyAkZ3JwZGVmKSB7CgkJCQkJaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOwoJ CQkJCSRwcml2Z3JwID0gZXhwbG9kZSgiOiIsICRncnBkZWYpOwoJCQkJCSRza2luaWQgPSBh cnJheV9zaGlmdCgkcHJpdmdycCk7CgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZn cnApKSB7CgkJCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkc2tpbmlkKSkgPyAkc2tpbmlk IDogJ2NsYXNzaWMnOzsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gKCRnYmxfc2tpbikgPyAk Z2JsX3NraW4gOiAkdGhlbWUtPm5hbWU7CgkJCX0gZWxzZSB7CgkJCQkvLyBBZG1pbnMKCQkJ CSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxf c2tpbiA6ICR0aGVtZS0+bmFtZSkpOwoJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRhZG1f c2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2Ug MjoKCQkJLy8gUGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRo ZSBza2luIGlzIGluIHRoZSBhbGxvd2VkIGxpc3QKCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMs IGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsKCQkJCSR2YWxpZFNraW5zID0gKGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9h dF91c2VyX2xpc3QnXSA6ICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFt ZSk7CgkJCQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOwoJCQkJJHRoZV9z a2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDog JHRoZW1lLT5uYW1lKSk7CgkJCQlyZXR1cm4gKGluX2FycmF5KCR0aGVfc2tpbiwgJHZhbGlk U2tpbnMpICYmIHNtZF9hdF9leGlzdHMoJHRoZV9za2luKSkgPyAkdGhlX3NraW4gOiAnJzsK CQkJfSBlbHNlIHsKCQkJCS8vIEFkbWlucwoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3Nt ZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7CgkJ CQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAnY2xh c3NpYyc7CgkJCX0KCQkJYnJlYWs7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQovLyBSZWFkIGFuZCByZXR1cm4gdGhlIG1hbmlmZXN0LCBpZiBpdCBleGlzdHMgYW5kIGFk ZCBhIGZldyBvdGhlciBuaWNldGllcyB0byB0aGUgYXJyYXkgZm9yIGxhdGVyCmZ1bmN0aW9u IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbikgewoJZ2xvYmFsICRzbWRfY29yZV90aGVtZXM7 CgoJJHRoaXNfdGhlbWUgPSB0aGVtZTo6ZmFjdG9yeSgkc2tpbik7Cgkkc2tpbmZvID0gYXJy YXkoKTsKCWlmICgkdGhpc190aGVtZSkgewoJCSRza2luZm8gPSAkdGhpc190aGVtZS0+bWFu aWZlc3QoKTsKCQkkc2tpbmZvWydkbmFtZSddID0gZW1wdHkoJHNraW5mb1sndGl0bGUnXSkg PyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1lKSA6ICRza2luZm9bJ3RpdGxlJ107CgkJJHNr aW5mb1snbmFtZSddID0gJHRoaXNfdGhlbWUtPm5hbWU7CgkJJHNraW5mb1sncGF0aCddID0g JHRoaXNfdGhlbWUtPnVybDsKCQkkc2tpbmZvWydwaHBmaWxlJ10gPSAkdGhpc190aGVtZS0+ cGF0aCgkc2tpbik7CgkJJHNraW5mb1snYmFzZWRfb24nXSA9ICcnOwoJCSRjb250ZW50cyA9 IGZpbGVfZ2V0X2NvbnRlbnRzKCRza2luZm9bJ3BocGZpbGUnXSk7CgkJaWYgKCgkcG9zID0g c3RycG9zKCRjb250ZW50cywgJ3RoZW1lOjpiYXNlZF9vbicpKSAhPT0gZmFsc2UpIHsKCQkJ JGJlZ3BvcyA9IHN0cnBvcygkY29udGVudHMsICInIiwgJHBvcykrMTsKCQkJJGVuZHBvcyA9 IHN0cnBvcygkY29udGVudHMsICInIiwgJGJlZ3Bvcyk7CgkJCSRiYXNlID0gc3Vic3RyKCRj b250ZW50cywgJGJlZ3BvcywgJGVuZHBvcy0kYmVncG9zKTsKCQkJJHNraW5mb1snYmFzZWRf b24nXSA9IChpbl9hcnJheSgkYmFzZSwgJHNtZF9jb3JlX3RoZW1lcykpID8gJycgOiAkYmFz ZTsKCQl9CgkJdW5zZXQoJHRoaXNfdGhlbWUpOwoJfQoJcmV0dXJuICRza2luZm87Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5h bWUgaWYgaXQgZXhpc3RzLCBvcHRpb25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFn CmZ1bmN0aW9uIHNtZF9hdF9nZXRfdGh1bWIoJHNraW4sICRpbWc9MCkgewoJZ2xvYmFsICRz bWRfYXRfcHJlZnM7CgoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOwoJJHR3ID0g aXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dydd IDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J107CgkkdGggPSBpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF90aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3By ZWZzWzBdWydzbWRfYXRfdGgnXTsKCSR1c2VfdGh1bWIgPSAoJHR3ID09IDAgfHwgJHRoID09 IDApID8gZmFsc2UgOiB0cnVlOwoKCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBo YXMgYWxyZWFkeSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVu Y3Rpb24KCWlmICghaXNfYXJyYXkoJHNraW4pKSB7CgkJJHNraW4gPSBzbWRfYXRfcmVhZF9z a2luZm8oJHNraW4pOwoJfQoJaWYgKCRza2luKSB7CgkJJHNraW5kaXIgPSAkc2tpblsncGF0 aCddOwoJCSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90LionKTsKCQly ZXR1cm4gKCRpbWcgJiYgJHVzZV90aHVtYiAmJiAkdGh1bWJuYW1lICYmIGZpbGVfZXhpc3Rz KCR0aHVtYm5hbWVbMF0pKSA/ICc8aW1nIHNyYz0iJy4kdGh1bWJuYW1lWzBdLiciIGFsdD0i Jy4oKGlzc2V0KCRza2luWyduYW1lJ10pKSA/ICRza2luWyduYW1lJ10gOiAnJykuJyB0aHVt Ym5haWwiIHN0eWxlPSJib3JkZXI6MnB4IHJpZGdlICM5OTk7cGFkZGluZzoycHg7IiB3aWR0 aD0iJy4kdHcuJyIgaGVpZ2h0PSInLiR0aC4nIiAvPicgOiAnJzsKCX0gZWxzZSB7CgkJcmV0 dXJuICcnOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21k X2F0X3JlYWRfc2tpbnMoKSB7Cgkkc2tpbl9saXN0ID0gdGhlbWU6Om5hbWVzKCk7Cgkkc2tp bl9saXN0ID0gc21kX2F0X3NvcnQoJHNraW5fbGlzdCk7CglyZXR1cm4gJHNraW5fbGlzdDsK fQoKLy8gU29ydCB0aGUgc2tpbnMgYnV0IGtlZXAgJ2NsYXNzaWMnIGF0IHRoZSB0b3AKZnVu Y3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgewoJZ2xvYmFsICRwcmVmczsKCgkkY2Fz ZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10pID8gJHByZWZzWydz bWRfYXRfY2FzZV9zb3J0J10gOiAxOwoKCWlmKCRjYXNlU2Vuc2UpIHsKCQluYXRzb3J0KCRz a2luX2xpc3QpOwoJfSBlbHNlIHsKCQluYXRjYXNlc29ydCgkc2tpbl9saXN0KTsKCX0KCSRk Zmx0X2ZvdW5kID0gZmFsc2U7Cglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX2lkeCA9 PiAkc2tpbl9uYW1lKSB7CgkJaWYgKCRza2luX25hbWUgPT0gImNsYXNzaWMiKSB7CgkJCXVu c2V0KCRza2luX2xpc3RbJHNraW5faWR4XSk7CgkJCSRkZmx0X2ZvdW5kID0gdHJ1ZTsKCQkJ YnJlYWs7CgkJfQoJfQoJaWYgKCRkZmx0X2ZvdW5kKSB7CgkJYXJyYXlfdW5zaGlmdCgkc2tp bl9saXN0LCJjbGFzc2ljIik7Cgl9CgoJcmV0dXJuICRza2luX2xpc3Q7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfbGlzdGRpcigkc3RhcnRfZGly PScuJykgewoJJGZpbGVzID0gYXJyYXkoKTsKCglpZiAoaXNfZGlyKCRzdGFydF9kaXIpKSB7 CgkJJGZoID0gb3BlbmRpcigkc3RhcnRfZGlyKTsKCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRp cigkZmgpKSAhPT0gZmFsc2UpIHsKCQkJLy8gbG9vcCB0aHJvdWdoIHRoZSBmaWxlcywgc2tp cHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1cnNpbmcgaWYgbmVjZXNzYXJ5CgkJCWlmIChzdHJj bXAoJGZpbGUsICcuJyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7 CgkJCSRmaWxlcGF0aCA9ICRzdGFydF9kaXIgLiAnLycgLiAkZmlsZTsKCQkJaWYgKCBpc19k aXIoJGZpbGVwYXRoKSApIHsKCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21k X2F0X2xpc3RkaXIoJGZpbGVwYXRoKSk7CgkJCX0gZWxzZSB7CgkJCQlhcnJheV9wdXNoKCRm aWxlcywgJGZpbGVwYXRoKTsKCQkJfQoJCX0KCQljbG9zZWRpcigkZmgpOwoJfSBlbHNlIHsK CgkJLy8gZmFsc2UgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlk IG5vbi1kaXJlY3RvcnkgYXJndW1lbnQKCQkkZmlsZXMgPSBmYWxzZTsKCX0KCglyZXR1cm4g JGZpbGVzOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVjdXJzaXZlIHJt ZGlyKCkgY291cnRlc3kgb2YgdGhlIHBocCBtYW51YWwgdXNlciBjb21tZW50cwpmdW5jdGlv biBzbWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0aCkgewoJaWYgKGlzX2RpcigkZmlsZXBh dGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsKCQlpZiAoJGRoID0gb3BlbmRpcigkZmls ZXBhdGgpKSB7CgkJCXdoaWxlICgoJHNmID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsK CQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAnLi4nKSBjb250aW51ZTsKCQkJCWlmICgh c21kX3JtZGlyX3JlY3Vyc2l2ZSgkZmlsZXBhdGguJy8nLiRzZikpIHsKCQkJCQlicmVhazsg Ly8gRG9oLCBjYW4ndCBkZWxldGUKCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0K CQlyZXR1cm4gcm1kaXIoJGZpbGVwYXRoKTsKCX0KCXJldHVybiB1bmxpbmsoJGZpbGVwYXRo KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEZyb20gUEhQIG1hbnVhbCBj b21tZW50cy4gVGhhbmtzIHB1cmVtYW5nbwpmdW5jdGlvbiBzbWRfYXRfaXNfZGlyKCRkaXIp IHsKCS8vIGJ5cGFzc2VzIG9wZW5fYmFzZWRpciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFu ZCBmaWxlcGVybXMKCSR0bXBfY21kID0gYGxzIC1kbCAkZGlyYDsKCSRkaXJfZmxhZyA9ICR0 bXBfY21kWzBdOwoJaWYoJGRpcl9mbGFnIT0iZCIpIHsKCQkvLyBub3QgZDsgdXNlIG5leHQg Y2hhciAoZmlyc3QgY2hhciBtaWdodCBiZSAncycgYW5kIGlzIHN0aWxsIGRpcmVjdG9yeSkK CQkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsxXTsKCX0KCXJldHVybiAoJGRpcl9mbGFnPT0iZCIp Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX21rZGlyX3Jl Y3Vyc2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1KSB7CglpZihAbWtkaXIoJHBhdGgsICRtb2Rl KSBvciBmaWxlX2V4aXN0cygkcGF0aCkpIHJldHVybiB0cnVlOwoJcmV0dXJuIChzbWRfbWtk aXJfcmVjdXJzaXZlKGRpcm5hbWUoJHBhdGgpLCAkbW9kZSkgYW5kIG1rZGlyKCRwYXRoLCAk bW9kZSkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0 X2NoYW5nZV9wYWdlYnkoKSB7CglzZXRjb29raWUoJ3NtZF9hdF9wYWdlYnknLCBncHMoJ3F0 eScpKTsKCXNtZF9hdF9saXN0KCcnKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkc21kX2F0 X3ByaXZzOwoKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ2V2ZW50Jywg J25leHRzdGVwJykpKSk7CgkkdXJsID0gIj9ldmVudD0iLiRldmVudC4iJnN0ZXA9Ii4kbmV4 dHN0ZXA7CgoJaWYgKCRza2luICYmIHNtZF9hdF9leGlzdHMoJHNraW4pKSB7CgkJc2V0X3By ZWYoJ3NtZF9za2luJywgJHNraW4sICRldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0 JywgMCwgUFJFRl9QUklWQVRFKTsKCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gKCgkbWVzc2Fn ZSkgPyAkbWVzc2FnZSA6IHNtZF9hdF9nVHh0KCdza2luX3N3aXRjaGVkJywgYXJyYXkoJ3tz a2lufScgPT4gJHNraW4pKSk7Cgl9IGVsc2UgewoJCSR1cmwgLj0gJyZtZXNzYWdlPScgLiAk bWVzc2FnZTsKCX0KCgkvLyBTaW5jZSB0aGUgaGVhZGVycyBoYXZlIGJlZW4gc2VudCwgZG91 YmxlLWRlY2x1dGNoIGluIG9yZGVyIHRvIHNob3cgdGhlIHNraW4gdGhpcyBmaXJzdCB0aW1l CgllY2hvIDw8PEVPUwo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CndpbmRvdy5s b2NhdGlvbi5ocmVmPSJ7JHVybH0iOwo8L3NjcmlwdD4KPG5vc2NyaXB0Pgo8bWV0YSBodHRw LWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD17JHVybH0iIC8+Cjwvbm9zY3JpcHQ+ CkVPUzsKCWV4aXQ7Cn0KCi8vIEFsbC11c2VyIHNraW4gY2hvb3NlcgpmdW5jdGlvbiBzbWRf YWRtYXQoJGV2ZW50LCAkc3RlcCkgewoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwg YXJyYXkoCgkJCSdzbWRfYXRfc3dpdGNoJywKCQkpKSkgewoJCXNtZF9hdF9jaG9vc2VyKCcn KTsKCX0gZWxzZSAkc3RlcCgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gc21kX2F0X2Nob29zZXIoJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkcHJlZnMsICRz bWRfYXRfYWRtX2V2ZW50LCAkdGhlbWUsICRzbWRfYXRfc3R5bGVzOwoKCSRhdF9wcmVmcyA9 IHNtZF9hdF9nZXRfcHJlZnMoKTsKCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRf YXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsKCSR0dyA9 IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3 J10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsKCSR0aCA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF90aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAk c21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdGgnXSkgKyA4MDsKCSRzdHlsZXJlcHMgPSBhcnJh eSgKCQkne3R3fScgPT4gJHR3LAoJCSd7dGh9JyA9PiAkdGgsCgkpOwoKCSRtZXNzYWdlID0g KCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogZ3BzKCdtZXNzYWdlJyk7CglwYWdldG9wKHNtZF9h dF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOwoKCSRjdXJyX3NraW4gPSAkdGhlbWUtPm5h bWU7CgoJJGFsbG93ZWQgPSAnJzsKCWlmIChpc3NldCgkcHJlZnNbJ3NtZF9hdF91c2VyX2xp c3QnXSkpIHsKCQkkYWxsb3dlZCA9IGV4cGxvZGUoIiwiLCRwcmVmc1snc21kX2F0X3VzZXJf bGlzdCddKTsKCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgewoJCQlp ZiAoJHZhbGlkID09ICcnKSB7CgkJCQl1bnNldCgkYWxsb3dlZFskaWR4XSk7CgkJCX0KCQl9 Cgl9CgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsKCSRoZHJvdyA9IGhlZChz bWRfYXRfZ1R4dCgnYXZhaWxfdGl0bGUnKSwgMyk7CgoJaWYgKCRsYXlvdXQ9PSIwIikgewoJ CWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsKCQllY2hvICRzbWRfYXRfc3R5bGVz Wydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydsaXN0J107CgkJZWNobyAnPC9zdHlsZT4n OwoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAnc21kX2F0X2xpc3QnKTsKCQllY2hv IHRyKAoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMiJykKCQkpOwoJCWVjaG8gdHIoCgkJ CWFzc0hlYWQoCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwKCQkJCSdhdXRob3InLAoJ CQkJJ2Rlc2NyaXB0aW9uJwoJCQkpKTsKCX0gZWxzZSB7CgkJZWNobyAnPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4nOwoJCWVjaG8gc3RydHIoJHNtZF9hdF9zdHlsZXNbJ2NvbW1vbiddLm4u JHNtZF9hdF9zdHlsZXNbJ2dyaWQnXSwgJHN0eWxlcmVwcyk7CgkJZWNobyAnPC9zdHlsZT4n OwoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9ncmlkIj48ZGl2IGNsYXNzPSJzbWRfbmV3cm93 Ij4nLiRoZHJvdy4nPC9kaXY+JzsKCX0KCWZvcmVhY2ggKCRhbGxvd2VkIGFzICRza2luX25h bWUpIHsKCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luX25hbWUpOwoJCWlm ICgkc2tpbmZvKSB7CgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2luZm8s IDEpOwoJCQkkdGhpc19za2luID0gKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyBzdHJv bmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbmZvWydkbmFtZSddOwoJCQkkdGh1bXJvdyA9 ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2FkbV9ldmVudC5hLidzdGVwPXNtZF9hdF9z d2l0Y2gnLmEuJ25leHRzdGVwPXNtZF9hZG1hdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIg dGl0bGU9Iicuc21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uKCgk dGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7 CgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRwOi8v IikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSddLiciPicuJHNr aW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107CgoJCQlpZiAoJGxh eW91dD09IjAiKSB7CgkJCQllY2hvIHRyKAoJCQkJCXRkKCR0aHVtcm93KQoJCQkJCS50ZCgk YXV0aHJvdywgMTAwKQoJCQkJCS50ZCgkc2tpbmZvWydkZXNjcmlwdGlvbiddLCAyNTApCgkJ CQkJLCAoKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6 ICcnKQoJCQkJKTsKCQkJfSBlbHNlIHsKCQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxs Jy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGFjdGl2ZScgOiAnJykuJyI+JzsK CQkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsKCQkJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9hdXRoIj4nLnNtZF9hdF9nVHh0KCdieScpLiRhdXRocm93Lic8L2Rpdj4nOwoJ CQkJZWNobyAnPC9kaXY+JzsKCQkJfQoJCX0KCX0KCWlmICgkbGF5b3V0PT0iMCIpIHsKCQll Y2hvIGVuZFRhYmxlKCk7Cgl9IGVsc2UgewoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVh ciI+PC9kaXY+PC9kaXY+JzsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8v IFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVx dWlyZWQKZnVuY3Rpb24gc21kX2F0X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgewoJ JGxhbmcgPSBhcnJheSgKCQknYWN0aW9ucycgPT4gJ0FjdGlvbnMnLAoJCSdhbGxvd2VkX3Nr aW5zJyA9PiAnQWxsb3dlZCB0aGVtZXM6JywKCQknYXBwbHlfc2tpbicgPT4gJ0FwcGx5IHRo aXMgdGhlbWUnLAoJCSdhdmFpbF90aXRsZScgPT4gJ0F2YWlsYWJsZSB0aGVtZXMnLAoJCSdi YXNlZF9vbicgPT4gJyAoYmFzZWQgb24ge3NraW59KScsCgkJJ2J5JyA9PiAnIGJ5ICcsCgkJ J2NfYnppcDInID0+ICdCWmlwJywKCQknY19nemlwJyA9PiAnR1ppcCcsCgkJJ2NfdGFyJyA9 PiAnVGFyJywKCQknY196aXAnID0+ICdaaXAnLAoJCSdjYXNlX3NvcnQnID0+ICdDYXNlLXNl bnNpdGl2ZSB0aGVtZSBsaXN0OicsCgkJJ2NsZWFyJyA9PiAnbm9uZScsCgkJJ2Nsb25lJyA9 PiAnQmFzZScsCgkJJ2NvbmZpcm0nID0+ICdHbycsCgkJJ2NvcmVfdGhlbWUnID0+ICdDYW5u b3QgZGVsZXRlIHtza2lufTogY29yZSB0aGVtZScsCgkJJ2NvcmVfdGhlbWVfZmlsZScgPT4g J0Nhbm5vdCBkZWxldGUgZmlsZXMgZnJvbSB7c2tpbn06IGNvcmUgdGhlbWUnLAoJCSdjcnVz aF90eXBlJyA9PiAnRXhwb3J0IGNvbXByZXNzaW9uIHR5cGU6JywKCQknY3J1c2hfZm9ybWF0 JyA9PiAnRm9ybWF0OicsCgkJJ3NzYycgPT4gJ1N0eWxlcGxhdGVzJywKCQknY3NzJyA9PiAn U3R5bGVzJywKCQknZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRlIHRoZW1lIHtz a2lufT8nLAoJCSdkZWxldGVfZmFpbGVkJyA9PiAnRGVsZXRlIGZhaWxlZC4gVHJ5IHJlbW92 aW5nIGl0IG1hbnVhbGx5JywKCQknZWRpdF9sYmwnID0+ICdUaGVtZSBlZGl0b3InLAoJCSdl bXB0eV9pbmZvJyA9PiAnWW91IHNob3VsZCBjaG9vc2UgYSBmaWxlIGZpcnN0IDotKScsCgkJ J2V4cG9ydCcgPT4gJ0V4cG9ydCcsCgkJJ2ZpbGVuYW1lX2Zvcm1hdCcgPT4gJ0ZpbGVuYW1l IGZvcm1hdDogJywKCQknZmlsZV9ub3RfZGVsZXRlZCcgPT4gJ0ZpbGUge25hbWV9ICcuc3Ry b25nKCJub3QiKS4nIGRlbGV0ZWQnLAoJCSdmaWxlX3NhdmVkJyA9PiAnRmlsZSB7bmFtZX0g c2F2ZWQnLAoJCSdmaW5kX3RoZW1lJyA9PiAnQnJvd3NlIHRoZW1lcycsCgkJJ2dsb2JhbF9z a2luJyA9PiAnRGVmYXVsdCB0aGVtZTonLAoJCSdoZWxwX2xpbmsnID0+ICcoPGEgaHJlZj0i e2xpbmt9Ij5IZWxwPC9hPiknLAoJCSdpbWcnID0+ICdJbWFnZXMnLAoJCSdpbXBvcnRfZmFp bGVkJyA9PiAnSW5zdGFsbGF0aW9uIGZhaWxlZCA6LSggQ2hlY2sgdGhlIGFyY2hpdmUgc3Ry dWN0dXJlJywKCQknaW1wb3J0X3N1Y2Nlc3MnID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1 bC4gRmlsZXMgZXh0cmFjdGVkOiB7bnVtfScsCgkJJ2ltcG9ydF9vaycgPT4gJ0luc3RhbGxh dGlvbiBzdWNjZXNzZnVsLicsCgkJJ2luc3RhbGxfc2tpbicgPT4gJ0luc3RhbGwgdGhlbWUn LAoJCSdpbnZhbGlkX2ZpbGUnID0+ICdSb2d1ZSBmaWxlIGRldGVjdGVkOiB7bmFtZX0nLAoJ CSdpc19nbG9iYWwnID0+ICcgW0RFRkFVTFRdJywKCQknanMnID0+ICdTY3JpcHRzJywKCQkn bGF5b3V0JyA9PiAnTGF5b3V0IG1ldGhvZDonLAoJCSdsYXlvdXRfbGlzdCcgPT4gJ0xpc3Qn LAoJCSdsYXlvdXRfZ3JpZCcgPT4gJ0dyaWQnLAoJCSdsaXN0X3RpdGxlJyA9PiAnSW5zdGFs bGVkIHRoZW1lcycsCgkJJ21hbmFnZV9sYmwnID0+ICdUaGVtZSBtYW5hZ2VyJywKCQknbWtk aXJfZmFpbGVkJyA9PiAnQ2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIGZpbGUge25hbWV9 LiBUcnkgbWFudWFsbHkgY3JlYXRpbmcgaXQuJywKCQknbmFtZV9lbXB0eScgPT4gJ1lvdSBz aG91bGQgZ2l2ZSB5b3VyIHRoZW1lIGEgbmFtZSA6LSknLAoJCSduZXcnID0+ICdDcmVhdGUg bmV3IHRoZW1lJywKCQknbmV3X2ZpbGUnID0+ICdOZXcgZmlsZScsCgkJJ25ld19jbG9uZXNr aW4nID0+ICdOYW1lIG9mIGNvcHk6JywKCQknbmV3X3NraW4nID0+ICdUaGVtZSBuYW1lOics CgkJJ290aGVyX2ZpbGVzJyA9PiAnT3RoZXJzJywKCQkncGhwJyA9PiAnQ29kZScsCgkJJ3Bl cl9ncm91cCcgPT4gJ09uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsJywKCQkncGVyX3Np dGUnID0+ICdPbmUgdGhlbWUgZm9yIGV2ZXJ5b25lJywKCQkncGVyX3VzZXInID0+ICdPbmUg dGhlbWUgcGVyIHVzZXInLAoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVs ZXRlZCcsCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcs CgkJJ3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVk LicsCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJsZS4n LAoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlz IGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4ncGx1Z2luIHRvIG9uZSB5b3Ug aGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLidoYXZlIGJlY29tZSBjb3JydXB0 IHNvbWVob3cuJywKCQkncHJlZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgn ZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0 byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZlcmVu Y2VzIHVudG91Y2hlZC4nLAoJCSdwcmVmc190aXRsZScgPT4gJ0FkbWluIHRoZW1lIHByZWZl cmVuY2VzJywKCQkncmVuYW1lX2ZhaWxlZCcgPT4gJ1JlbmFtZSBmYWlsZWQnLAoJCSdyZW5h bWVkJyA9PiAnUmVuYW1lZCB0byB7bmFtZX0nLAoJCSdzZXQnID0+ICdTZXQnLAoJCSdzZXR1 cCcgPT4gJ1ByZWZlcmVuY2VzJywKCQknc2tpbl9nYmwnID0+ICdUaGVtZScsCgkJJ3NraW5f Y2xvbmVkJyA9PiAnVGhlbWUgZXh0ZW5kZWQgYXMge25hbWV9JywKCQknc2tpbl9jcmVhdGVk JyA9PiAnVGhlbWUge25hbWV9IGNyZWF0ZWQnLAoJCSdza2luX2RlbGV0ZWQnID0+ICdUaGVt ZSB7bmFtZX0gZGVsZXRlZCcsCgkJJ3NraW5fZXhpc3RzJyA9PiAnVGhlbWUge25hbWV9IGFs cmVhZHkgZXhpc3RzJywKCQknc2tpbl9maWxlcycgPT4gJ1RoZW1lIGZpbGVzJywKCQknc2tp bl9ncm91cHMnID0+ICdHcm91cCB0aGVtZXM6JywKCQknc2tpbl9pbWFnZXMnID0+ICdUaGVt ZSBpbWFnZXMnLAoJCSdza2luX2xpc3QnID0+ICdUaGVtZSBsaXN0JywKCQknc2tpbl9ncmlk JyA9PiAnVGhlbWUgZ3JpZCcsCgkJJ3NraW5fbm90X2NyZWF0ZWQnID0+ICdUaGVtZSB7bmFt ZX0gY291bGQgbm90IGJlIGNyZWF0ZWQuIFRyeSBtYW51YWxseSBtYWtpbmcgdGhlIGRpcmVj dG9yeScsCgkJJ3NraW5fbm90X2ZvdW5kJyA9PiAnVGhlIHRoZW1lIHtuYW1lfSBjb3VsZCBu b3QgYmUgZm91bmQnLAoJCSdza2luX3N3aXRjaGVkJyA9PiAnVGhlbWUgc3dpdGNoZWQgdG8g e3NraW59JywKCQknc2tpbl9zeXN0ZW0nID0+ICdUaGVtZSBzeXN0ZW06JywKCQknc2tpbm5l cicgPT4gJ1RoZW1lJywKCQknc3VwcG9ydGVkX2ltcG9ydCcgPT4gJ1N1cHBvcnRlZCBpbXBv cnQgdHlwZXM6IHt0eXBlc30nLAoJCSd0YWJfbmFtZScgPT4gJ0FkbWluIHRoZW1lcycsCgkJ J3RodW1ic2l6ZScgPT4gJ1RodW1iIGRpbWVuc2lvbnM6JywKCQkndGltZXMnID0+ICcgeCAn LAoJCSd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnID0+ICd7Y3J1c2h9IGlzIG5vdCBh IHN1cHBvcnRlZCBjb21wcmVzc2lvbiBmb3JtYXQgaW4gdGhpcyBpbnN0YWxsYXRpb24nLAoJ CSd1bnN1cHBvcnRlZF9maWxldHlwZScgPT4gJ0ZpbGUgaXMgbm90IG9mIGEgc3VwcG9ydGVk IHR5cGUnLAoJCSd1bnN1cHBvcnRlZF9mdWRnZScgPT4gJzogaGl0IFNhdmUgYWdhaW4gdG8g c3RvcmUgYW55d2F5JywKCQkndXBkYXRlJyA9PiAnVXBkYXRlJywKCQkndXBsb2FkX2ZhaWxl ZCcgPT4gJ0ltYWdlIGNvdWxkIG5vdCBiZSB1cGxvYWRlZCcsCgkJJ3VwbG9hZF9pbWFnZScg PT4gJ1VwbG9hZCBpbWFnZScsCgkJJ3VwbG9hZF9zdWNjZXNzJyA9PiAnSW1hZ2UgdXBsb2Fk ZWQgc3VjY2Vzc2Z1bGx5JywKCQkndmVyc2lvbicgPT4gJ3YnLAoJKTsKCXJldHVybiBzdHJ0 cigkbGFuZ1skd2hhdF0sICRhdHRzKTsKfSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToib3Jk ZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MjY0MTc6Ijxk aXYgaWQ9InNtZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2FkbWluX3RoZW1lczwvaDE+ CgoJPHA+SW5zdGFsbCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRtaW4tc2lkZSB0aGVt ZXMgdGhlbiBzaGFyZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+CgoJPGgyIGlkPSJm ZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGFuZCBFZGl0IGFk bWluLXNpZGUgdGhlbWVzPC9saT4KCQk8bGk+RW1wbG95IGltYWdlcywgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4sIEpTLCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4v UEhQIChmb3IgY2hhbmdpbmcgbWFzdGhlYWQsIGhlYWRlciAmYW1wOyBmb290ZXIpIGluIHlv dXIgdGhlbWU8L2xpPgoJCTxsaT5Vc2UgY29uc3RhbnRzIGluIHlvdXIgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXM8L2xpPgoJCTxsaT5CYXNlIHlvdXIgdGhlbWUgb24g YW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZTwvbGk+CgkJPGxp PkV4cG9ydCBhIHRoZW1lIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiB0byB0aGUgY29tbXVu aXR5IGluIGVpdGhlciAudGFyLCAudGd6LCAuYnoyIG9yIC56aXAgZm9ybWF0IChyZXF1aXJl IHNtZF9jcnVuY2hlcnMgcGx1Z2luKTwvbGk+CgkJPGxpPkltcG9ydCAvIGluc3RhbGwgb3Ro ZXIgdGhlbWVzIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1p bmlzdHJhdGlvbi10aGVtZXMiPmNvbW11bml0eSByZXBvc2l0b3J5PC9hPjwvbGk+CgkJPGxp PkFkbWluaXN0cmF0b3IgY2FuIHNldCBhIGRlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2Vycywg b3IgZW5hYmxlIHBlci11c2VyIC8gcGVyLXJvbGUgdGhlbWVzPC9saT4KCTwvdWw+CgoJPGgy IGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHAg Y2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bh bj4gNSsgYW5kIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfY3J1bmNoZXJz Ij5zbWRfY3J1bmNoZXJzPC9hPiBwbHVnaW4gZm9yIGltcG9ydC9leHBvcnQ8L3A+CgoJPHA+ RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBh dHRlcm4ub3JnL3BsdWdpbnMvMTA5Ni9zbWRfYWRtaW5fdGhlbWVzIj50ZXh0cGF0dGVybi5v cmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0 d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgVHhwIDxlbT5BZG1pbi0m Z3Q7UGx1Z2luczwvZW0+IHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBB IG5ldyB0YWIgbGFiZWxsZWQgPGVtPkV4dGVuc2lvbnMtJmd0O0FkbWluIHRoZW1lczwvZW0+ IGlzIGNyZWF0ZWQuIDxzdHJvbmc+T25seSBwdWJsaXNoZXJzIHdpbGwgc2VlIHRoaXMgdGFi PC9zdHJvbmc+LjwvcD4KCgk8cD5UaGUgcGx1Z2luIHNob3VsZCBhdXRvbWF0aWNhbGx5IGlu c3RhbGwgdGhlIHByZWZlcmVuY2VzIGZvciB5b3UuIENsaWNrICYjODIxNjtQcmVmZXJlbmNl cyYjODIxNzsgZnJvbSB0aGUgPGVtPkV4dGVuc2lvbnMtJmd0O0FkbWluIHRoZW1lczwvZW0+ IHRhYiBvciA8ZW0+T3B0aW9uczwvZW0+IGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2lu czwvZW0+IHRhYiB0byBhbHRlciwgZGVsZXRlIG9yIHJlaW5zdGFsbCB0aGVtLjwvcD4KCgk8 cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3 dG9waWMucGhwP2lkPTMwOTUyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3Ig dG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwv cD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBmcm9tIHRo ZSA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiBwYWdlLiBUaGUgcHJlZmVyZW5jZXMgd2ls bCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQuIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHJlbW92 aW5nIHRoZSBwbHVnaW4gZG9lcyA8c3Ryb25nPm5vdCByZW1vdmUgYW55IHRoZW1lcyB5b3Ug aGF2ZSBpbnN0YWxsZWQsIG5vciBkb2VzIGl0IHJlbW92ZSBwZXItdXNlciB0aGVtZSBwcmVm ZXJlbmNlczwvc3Ryb25nPi4gUGVyLXVzZXIgcHJlZnMgd2lsbCBzaW1wbHkgYmUgaWdub3Jl ZCB3aGVuIHRoZSBwbHVnaW4gaXMgZGVsZXRlZC48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNh Z2U8L2gyPgoKCTxwPk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucy0mZ3Q7QWRtaW4gdGhlbWVzPC9l bT4gdGFiIGlzIGEgbGlzdCBvciBncmlkIGNvbnRhaW5pbmcgaW5zdGFsbGVkIHRoZW1lcy4g T3V0IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwgYmUgdHdvIGF2YWlsYWJsZTogPGVtPmNsYXNz aWM8L2VtPiBhbmQgPGVtPnJlbW9yYTwvZW0+LiA8c3Ryb25nPkl0JiM4MjE3O3MgYWR2aXNh YmxlIG5vdCB0byBjaGFuZ2UgdGhlc2UgdGhlbWVzPC9zdHJvbmc+IHNvIHlvdSBjYW4gYWx3 YXlzIGdvIGJhY2sgdG8gdGhlbSBpZiBldmVyeXRoaW5nIGdvZXMgc2lkZXdheXMuIFBsdXMg aXQmIzgyMTc7cyBhIHZlcnkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8g PGEgaHJlZj0iI2Nsb25lIj5iYXNlPC9hPiBhIDxhIGhyZWY9IiNuZXciPm5ldyB0aGVtZTwv YT4uPC9wPgoKCTxwPkluIHRoZSBsaXN0IGxheW91dCwgdGhlIGNvbHVtbnMgYXJlOjwvcD4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZTwvc3Bhbj4gOiBUaGUgbmFt ZSBvZiB0aGUgdGhlbWUgYW5kIChvcHRpb25hbCkgdGh1bWJuYWlsIGFzc2lnbmVkIHRvIGl0 LiBDbGljayB0byA8YSBocmVmPSIjc3dpdGNoIj5hY3RpdmF0ZTwvYT4gdGhlIHRoZW1lLiBJ ZiB0aGUgdGhlbWUgaXMgYmFzZWQgb24gYW5vdGhlciB1c2VyJiM4MjE3O3MgdGhlbWUsIHRo aXMgZGVwZW5kZW5jeSB3aWxsIGJlIHNob3duIGluIHBhcmVudGhlc2VzIGFmdGVyIHRoZSB0 aGVtZSBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF1dGhvcjwvc3Bhbj4g OiBZb3UhIExpbmtlZCB0byB5b3VyIHdlYiBzaXRlIGlmIHlvdSBzdXBwbHkgaXQgaW4geW91 ciA8YSBocmVmPSIjYWJvdXQiPk1hbmlmZXN0PC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5WZXJzaW9uPC9zcGFuPiA6IFRoZW1lIHZlcnNpb24gbnVtYmVyIGluIDxjb2Rl Pm1ham9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24uIElmIGEgbmV3ZXIgdmVyc2lv biBvZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRnYXJkZW4sIHRoZSB2ZXJzaW9u IG51bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0aGVtZSBvbiBUZXh0Z2FyZGVu IHNvIHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC4gVGhlIHZlcnNpb25zIGFyZSBjaGVj a2VkLCBhdCBtb3N0LCBvbmNlIGV2ZXJ5IDI0IGhvdXJzIHRvIGF2b2lkIGhhbW1lcmluZyB0 aGUgc2VydmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlc2NyaXB0aW9uPC9z cGFuPiA6IEJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxhaW5pbmcgeW91ciB0aGVtZS4g SWYgeW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gaW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5rZWQgaGVyZSBhcyB3ZWxsPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8L3NwYW4+IDogQWN0aW9ucyB0 byBwZXJmb3JtIG9uIGVhY2ggdGhlbWUKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PltOZXcgdGhlbWVdPC9zcGFuPiA6IDxhIGhyZWY9IiNuZXciPkNyZWF0ZTwvYT4gYSBuZXcg YmxhbmssIGVtcHR5IGRpcmVjdG9yeSByZWFkeSBmb3IgeW91ciB0aGVtZS4gTm8gc3BhY2Vz IC8gb2RkIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIG5hbWUgYW5kIGl0IG11c3Qg bm90IHN0YXJ0IHdpdGggYSBudW1iZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ W0VkaXRdPC9zcGFuPiA6IDxhIGhyZWY9IiNlZGl0X3RoZW1lIj5FZGl0PC9hPiB0aGUgdmFy aW91cyBkZXRhaWxzLCBmaWxlcyBhbmQgY29udGVudCB3aXRoaW4gdGhlIHRoZW1lPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltCYXNlXTwvc3Bhbj4gOiA8YSBocmVmPSIjY2xv bmUiPkV4dGVuZDwvYT4gb25lIG9mIHRoZSBleGlzdGluZyB0aGVtZXMgdG8gbWFrZSB5b3Vy IG93biBjaGFuZ2VzIHVuZGVyIGEgbmV3IG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+W0V4cG9ydF08L3NwYW4+IDogPGEgaHJlZj0iI2V4cG9ydCI+U2F2ZTwvYT4gdGhl IHRoZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZvciBkaXN0cmlidXRpb24vYmFj a3VwIGluIHlvdXIgY2hvc2VuIGNvbXByZXNzaW9uIGZvcm1hdDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5bRGVsZXRlXTwvc3Bhbj4gOiBDb21wbGV0ZWx5IDxhIGhyZWY9IiNk ZWxldGUiPnJlbW92ZTwvYT4gdGhlIHRoZW1lLiBOb3QgYXZhaWxhYmxlIHRvIHRoZSBjb3Jl IHRoZW1lcywgZm9yIG9idmlvdXMgcmVhc29ucyEgQWxzbyBub3QgYXZhaWxhYmxlIGlmIGEg dGhlbWUgaGFzIGJlZW4gdXNlZCBhcyBhIGJhc2lzIGZvciBhbm90aGVyIHRoZW1lIGluIHRo ZSBjdXJyZW50IHNpdGU8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5UaGUgY3VycmVu dGx5IHNlbGVjdGVkIHRoZW1lIGlzIHNoYWRlZCBhbmQgdGhlIGN1cnJlbnQgZGVmYXVsdCB0 aGVtZSB0aGF0IGlzIGluIGVmZmVjdCBpcyBoaWdobGlnaHRlZC4gVGhlIGdyaWQgdmlldyBo YXMgcGFydHMgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLCBsYWlkIG91dCBzbGlnaHRseSBk aWZmZXJlbnRseS48L3A+CgoJPGgyIGlkPSJzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2gy PgoKCTxwPkFzIHRoZSBhZG1pbmlzdHJhdG9yLCB5b3UgY2FuIHBsYXkgR29kIG92ZXIgZXZl cnlvbmUgZWxzZSYjODIxNztzIHRoZW1lcy4gWW91IGFyZSBmcmVlIHRvIGluc3RhbGwgYXMg bWFueSBhcyB5b3Ugd2lzaCBhbmQgc3dpdGNoIGJldHdlZW4gdGhlbSB3aXRob3V0IGFmZmVj dGluZyBhbnkgb3RoZXIgbG9naW5zLiBOb2JvZHkgZWxzZSB3aWxsIGV2ZW4ga25vdyB5b3Ug aGF2ZSBpbnN0YWxsZWQgdGhlIHBsdWdpbi48L3A+CgoJPHA+SWYsIGhvd2V2ZXIsIHlvdSB2 aXNpdCB0aGUgPGEgaHJlZj0iI3NldHVwIj5QcmVmZXJlbmNlczwvYT4gcGFnZSB5b3UgY2Fu IGNvbmZpZ3VyZSB0aGUgdGhlbWVzIHRoYXQgb3RoZXJzIHVzZS4gVGhlcmUgYXJlIHRocmVl IG1lY2hhbmlzbXMgdG8gY2hvb3NlIGZyb206PC9wPgoKCTx1bD4KCQk8bGk+Rm9yY2Ugb25l IHRoZW1lIGZvciBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxsaT5Gb3Jj ZSBvbmUgdGhlbWUgZm9yIGVhY2ggdXNlciBwcml2aWxlZ2UgbGV2ZWwgKGV4Y2VwdCB5b3Vy c2VsZik8L2xpPgoJCTxsaT5BbGxvdyBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZikgdG8g cGljayB0aGVpciBmYXZvdXJpdGUgdGhlbWUgZnJvbSBhIHNob3J0bGlzdCB5b3UgZGVmaW5l PC9saT4KCTwvdWw+CgoJPHA+QXQgYWxsIHRpbWVzLCB5b3UgY2FuIGNob29zZSBhbnkgdGhl bWUgeW91IHBsZWFzZSBmb3IgeW91ciBvd24gdXNlLiBUaGlzIGFsbG93cyB0cmlhbGxpbmcs IHR3ZWFraW5nIGFuZCB0ZXN0aW5nIG9mIHRoZW1lcyBiZWZvcmUgdW5sZWFzaGluZyB0aGVt IG9uIHlvdXIgdXNlciBiYXNlLjwvcD4KCgk8aDIgaWQ9InNldHVwIj5UaGVtZSBwcmVmZXJl bmNlczwvaDI+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Q2FzZS1zZW5zaXRp dmUgdGhlbWUgbGlzdDwvc3Bhbj4gOiBXaGVuIHNldCB0byA8Y29kZT5ZZXM8L2NvZGU+LCB1 cHBlci1jYXNlIHRoZW1lIG5hbWVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvd2VyIGNhc2Ug dGhlbWUgbmFtZXMgYW5kIHdpbGwgYmUgbGlzdGVkIGZpcnN0LiBGb3IgZXhhbXBsZSwgMyB0 aGVtZSBjYWxsZWQgJiM4MjE2O0FuZ2VsaWMmIzgyMTc7LCAmIzgyMTY7YmFyYmFyaWMmIzgy MTc7IGFuZCAmIzgyMTY7Q29oZXNpdmUmIzgyMTc7IHdpbGwgYmUgb3JkZXJlZDogPGNvZGU+ QW5nZWxpYywgQ29oZXNpdmUsIGJhcmJhcmljPC9jb2RlPi4gU2V0IHRvIDxjb2RlPk5vPC9j b2RlPiB0byBtaXggdXBwZXIgYW5kIGxvd2VyLWNhc2UgdGhlbWVzIHRvZ2V0aGVyIChvcmRl ciBpcyB0aGVuIDxjb2RlPkFuZ2VsaWMsIGJhcmJhcmljLCBDb2hlc2l2ZTwvY29kZT4gKS4g VGhlICYjODIxNjtjbGFzc2ljJiM4MjE3OyB0aGVtZSBpcyA8ZW0+YWx3YXlzPC9lbT4gbGlz dGVkIGZpcnN0LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FeHBvcnQgY29tcHJl c3Npb24gdHlwZTwvc3Bhbj4gOiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5Pbmx5IGlmIHNt ZF9jcnVuY2hlcnMgaXMgaW5zdGFsbGVkPC9zcGFuPiBEZXBlbmRpbmcgb24geW91ciB2ZXJz aW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGFuZCB3aGljaCBtb2R1bGVz IGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIGl0LCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIGNv bXByZXNzaW9uIGZvcm1hdHMgaGVyZS4gQ2hvb3NlIG9uZSB0aGF0IHN1aXRzIHlvdSBhcyB0 aGUgZGVmYXVsdCBpbiB3aGljaCB0byBleHBvcnQgeW91ciB0aGVtZSBwYWNrYWdlcy4gWW91 IG1heSBjaG9vc2UgZnJvbSA8ZW0+VGFyPC9lbT4sIDxlbT5HWmlwPC9lbT4gKGFjdHVhbGx5 IHRhcitnemlwKSwgPGVtPkJ6aXAyPC9lbT4gKHRhcitiemlwKSwgb3IgPGVtPlppcDwvZW0+ ICh0aGUgZGVmYXVsdCkuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkxheW91dCBt ZXRob2Q8L3NwYW4+IDogQ2hvb3NlIGZyb20gYSBMaXN0IFZpZXcgKHVzZWZ1bCBpZiB5b3Ug cHJlZmVyIHRvIGhpZGUgb3IgdXNlIHNtYWxsIHRodW1icykgb3IgYSBHcmlkIFZpZXcgb2Yg aW5zdGFsbGVkIHRoZW1lcy4gVGhpcyBzZXR0aW5nIGFwcGxpZXMgdG8gYm90aCBhZG1pbiBh bmQgdXNlciB0aGVtZSBzZWxlY3Rpb24gdGFicy4gRGVmYXVsdDogR3JpZCBWaWV3PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRodW1iIGRpbWVuc2lvbnM8L3NwYW4+IDogU2V0 IHRoZSB0aHVtYm5haWwgZGltZW5zaW9ucyBpbiB0aGUgdGhlbWUgbGlzdC4gU2V0IGVpdGhl ciBkaW1lbnNpb24gdG8gMCB0byB0dXJuIG9mZiB0aHVtYm5haWwgZGlzcGxheS4gRGVmYXVs dDogMjYwICYjMjE1OyAxNTBweDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5GaWxl bmFtZSBmb3JtYXQ8L3NwYW4+IDogRGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGV4cG9ydGVk IHRoZW1lLiBZb3UgY2FuIHVzZSA8Y29kZT57dGhlbWV9PC9jb2RlPiBhbmQgPGNvZGU+e3Zl cnNpb259PC9jb2RlPiByZXBsYWNlbWVudCB2YXJpYWJsZXMgaW4gdGhpcyBmaWVsZC4gRm9y IGV4YW1wbGUsIDxjb2RlPnt0aGVtZX1fdnt2ZXJzaW9ufTwvY29kZT4uIERlZmF1bHQ6IDxj b2RlPnt0aGVtZX08L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlZmF1 bHQgdGhlbWU8L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBmb3IgYWxsIG90aGVyIHVzZXJzLiBJ ZiB1c2luZyAmIzgyMTY7T25lIHRoZW1lIGZvciBldmVyeW9uZSYjODIxNzsgdGhlIHRoZW1l IGNob3NlbiBoZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1c2Vycy4gSWYgdXNpbmcgYW55IG9m IHRoZSBvdGhlciBtZWNoYW5pc21zLCB0aGlzIHRoZW1lIGlzIGEgZmFsbGJhY2sgc2hvdWxk IHNvbWV0aGluZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+VGhlbWUgc3lzdGVtPC9zcGFuPiA6IEFzIGRldGFpbGVkIGluIDxhIGhyZWY9IiNzd2l0 Y2giPlN3aXRjaGluZyB0aGVtZXM8L2E+LCB5b3UgbWF5IGNob29zZSB0aGUgd2F5IHRoZSBU eHAgaW50ZXJmYWNlIGlzIHByZXNlbnRlZCB0byBvdGhlciB1c2VyczoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBmb3IgZXZlcnlvbmU8L3NwYW4+IDogdXNl cyB0aGUgRGVmYXVsdCB0aGVtZSBmb3IgYWxsIHVzZXJzOyB0aGV5IGhhdmUgbm8gY2hvaWNl IGluIHRoZSBtYXR0ZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1l IHBlciBwcml2aWxlZ2UgbGV2ZWw8L3NwYW4+IDogYWxsb3dzIHlvdSB0byBhc3NpZ24gb25l IG9yIG1vcmUgcHJpdmlsZWdlIGxldmVscyB0byBhIHRoZW1lLiBDaG9vc2UgYSB0aGVtZSBm cm9tIHRoZSBsZWZ0LWhhbmQgbGlzdCBhbmQgdGhlbiBzaGlmdC9jdHJsLWNsaWNrIHRoZSBw cml2aWxlZ2UgbGV2ZWxzIHRvIGFzc2lnbiB0aGVtLiBGbGljayBiZXR3ZWVuIHRoZW1lcyBp biB0aGUgbGVmdCBjb2x1bW4gdG8gc2VlIHdoaWNoIG9uZXMgYXJlIHNldCBmb3IgdmFyaW91 cyB1c2VyIGxldmVscywgb3IgaG92ZXIgb3ZlciBhIHByaXZpbGVnZSBsZXZlbCB0byBzZWUg YSB0b29sdGlwLiBPbmx5IG9uZSBsZXZlbCBjYW4gYmUgYXNzaWduZWQgdG8gYSB0aGVtZSBz byBpZiB5b3UgY2xpY2sgYSBsZXZlbCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQg dG8gYW5vdGhlciB0aGVtZSwgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXRzIG9yaWdpbmFs IGFzc2lnbm1lbnQuIE5vdGUgeW91IG11c3QgU2F2ZSB0aGUgY2hhbmdlcyBmb3IgdGhlbSB0 byB0YWtlIGVmZmVjdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUg cGVyIHVzZXI8L3NwYW4+IDogZGVmaW5lIGEgc2hvcnRsaXN0IGZyb20gdGhlIGF2YWlsYWJs ZSBpbnN0YWxsZWQgdGhlbWVzIHRvIG9mZmVyIHRvIGFsbCB1c2Vycy4gQSBuZXcgdGFiIHdp bGwgYXBwZWFyIHRvIG90aGVyIHVzZXJzIHVuZGVyIDxlbT5BZG1pbjwvZW0+IHRoYXQgaXMg ZXNzZW50aWFsbHkgYSBjdXQtZG93biB2ZXJzaW9uIG9mIHRoZSA8ZW0+QWRtaW4gdGhlbWVz PC9lbT4gdGFiLiBVc2VycyBjYW4gc3dpdGNoIGJldHdlZW4gYW55IG9uZSBvZiB0aGUgdGhl bWVzIHlvdSBoYXZlIHBlcm1pdHRlZC48L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5S ZW1lbWJlciB0byBjbGljayBTYXZlIHRvIGFwcGx5IHRoZSBjaGFuZ2VzLiBDbGlja2luZyBh bnkgb3RoZXIgdGFiIHdpbGwgdW5kbyBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWF5IGhhdmUg bWFkZS48L3A+CgoJPGgyIGlkPSJicm93c2UiPkJyb3dzZSB0aGVtZXM8L2gyPgoKCTxwPkNs aWNrIHRoaXMgYnV0dG9uIHRvIGJlIHRha2VuIHRvIHRoZSBjZW50cmFsIGFkbWluIHRoZW1l IHJlcG9zaXRvcnkgd2hlcmUgeW91IG1heSBicm93c2UgdGhlbWVzIGFuZCBkb3dubG9hZCB0 aGVtIHJlYWR5IGZvciBpbnN0YWxsYXRpb24uPC9wPgoKCTxoMiBpZD0iaW1wb3J0Ij5JbnN0 YWxsIGEgdGhlbWU8L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPk9ubHkgYXZhaWxhYmxl IGlmIHNtZF9jcnVuY2hlcnMgaXMgaW5zdGFsbGVkLjwvcD4KCgk8cD5Mb2NhdGUgYSB0aGVt ZSBwYWNrYWdlIG9uIHlvdXIgaGFyZCBkcml2ZSBvciBwYXN0ZSBhIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IHRvIGEgcGFja2FnZSBpbiB0aGUgYm94IGF0IHRoZSB0b3Agb2Yg dGhlIHBhZ2UuIEhpdCA8c3Ryb25nPlVwbG9hZDwvc3Ryb25nPiBhbmQgaXQgd2lsbCBiZSBp bnN0YWxsZWQuIElmIGl0IGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4u IE5vdGUgdGhhdCB5b3UgbWF5IHJlY2VpdmUgYSB3YXJuaW5nIGlmIHRoZSB0aGVtZSBpcyBw YWNrYWdlZCB1c2luZyBhIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0aGF0IGlzIG5vdCBidWls dCBpbnRvIHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi4g QSBsaXN0IG9mIHN1cHBvcnRlZCBjb21wcmVzc2lvbiB0eXBlcyBpcyBnaXZlbiBiZWxvdyB0 aGUgdXBsb2FkIGJveC48L3A+CgoJPGgyIGlkPSJuZXciPkNyZWF0ZSBhIG5ldyAoZW1wdHkp IHRoZW1lPC9oMj4KCgk8cD5DbGljayA8c3Ryb25nPkNyZWF0ZSBuZXcgdGhlbWU8L3N0cm9u Zz4gYW5kIGEgYm94IHdpbGwgc2xpZGUgZG93biBhbGxvd2luZyB5b3UgdG8gZ2l2ZSB5b3Vy IHRoZW1lIGEgbmFtZS4gIE5vdGUgdGhhdCB0aGUgZWRpdCBib3ggYXV0b21hdGljYWxseSB0 YWtlcyBmb2N1cywgc28geW91IGNhbiB0eXBlIHN0cmFpZ2h0IGF3YXkuPC9wPgoKCTxwPk5v IHNwYWNlcyBvciBvZGQgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRoZSBu YW1lIHlvdSBlbnRlciBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBi ZSBjcmVhdGVkIGluIHRoZSA8ZW0+dGhlbWU8L2VtPiBmb2xkZXIgYW5kIHRoZW0gbmFtZSBv ZiB5b3VyIHRoZW1lJiM4MjE3O3MgY2xhc3MuIElmIHlvdSBkbyBtYW5hZ2UgdG8gdXNlIG9k ZCBjaGFyYWN0ZXJzLCB0aGUgbmFtZSB3aWxsIGJlICYjODIyMDtkdW1iZWQgZG93biYjODIy MTsgZm9yIHlvdS4gT25jZSB0aGUgbmFtZSBpcyBzZXQsIHRoYXQgaXMgaXQ7IHlvdSBjYW5u b3QgY2hhbmdlIGl0IGZyb20gd2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoZSBvbmx5IHdheSB0 byByZW5hbWUgaXQgaXMgdmlhIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4g Y2xpZW50IGFuZCBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBp ZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9wPgoKCTxwPkluIG9yZGVyIHRvIGF2 b2lkIG5hbWUgY2xhc2hlcyB3aXRoIG90aGVyIHBlb3BsZSYjODIxNztzIHRoZW1lcywgaXQg aXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgdGhlbWVzIHlvdSBkZXNpZ24gYmVnaW4gd2l0aCBh IHVuaXF1ZSAzLWxldHRlciBwcmVmaXggb2YgeW91ciBvd24gY2hvb3NpbmcsIHBsdXMgYW4g dW5kZXJzY29yZSAmIzgyMTI7IGV4YWN0bHkgbGlrZSBwbHVnaW5zLiBUaHVzLCBzbWRfQmx1 ZU1lYW5pZSBtaWdodCB3ZWxsIGJlIHRoZSBuYW1lIG9mIGEgdGhlbWUuPC9wPgoKCTxwPldo ZW4geW91IGhhdmUgbmFtZWQgeW91ciB0aGVtZSwgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25n PiB0byBjcmVhdGUgYSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgY2FuIHJlc2lkZS48L3A+CgoJ PGgyIGlkPSJjbG9uZSI+RXh0ZW5kIGFuIGV4aXN0aW5nIHRoZW1lPC9oMj4KCgk8cD5DbGlj ayA8c3Ryb25nPkJhc2U8L3N0cm9uZz4gdG8gY3JlYXRlIGEgbmV3IHRoZW1lIGJhc2VkIG9u IGFub3RoZXIuIEEgYm94IHdpbGwgc2xpZGUgZG93biAodGhlIGN1cnNvciBmb2N1c2VzIGF1 dG9tYXRpY2FsbHkgaW4gdGhlIGJveCBmb3IgeW91KSBzbyB5b3UgbWF5IGVudGVyIHRoZSBu YW1lIG9mIHlvdXIgY29weS4gT2JzZXJ2ZSB0aGUgPGEgaHJlZj0iI25ldyI+bmFtaW5nIGNv bnZlbnRpb248L2E+LCB0aGVuIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRl IHRoZSBuZXcgdGhlbWUuPC9wPgoKCTxwPjxzcGFuIGNsYXNzPSJpbXBvcnRhbnQiPlBsZWFz ZSByZW1lbWJlciwgeW91ciB0aGVtZSB3aWxsIGJlIGRlcGVuZGVudCBvbiB0aGUgY2hvc2Vu IHRoZW1lIGFuZCA8c3Ryb25nPmJvdGg8L3N0cm9uZz4gbXVzdCBiZSBwcmVzZW50IG9uIGEg dXNlciYjODIxNztzIHN5c3RlbSBmb3IgdGhlIHRoZW1lIHRvIHdvcms8L3NwYW4+LiBJdCBp cyB3b3J0aCBlbnN1cmluZyB0aGF0IHVzZXJzIG9mIHlvdXIgdGhlbWUgYXJlIG1hZGUgYXdh cmUgb2YgdGhpcyBkZXBlbmRlbmN5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZydXN0cmF0aW9u OyBwZXJoYXBzIGFkZCBhIGxpbmsgdG8gdGhlIHRoZW1lJiM4MjE3O3MgYmFzZSwgbWVudGlv biB0aGUgZGVwZW5kZW5jeSBpbiB0aGUgSGVscCBsaW5rIGFuZC9vciBpbiB0aGUgdGhlbWUm IzgyMTc7cyBhcnRpY2xlIG9uIFRleHRnYXJkZW4uIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRv IGRlbGV0ZSBhbnkgdGhlbWUgZnJvbSB0aGUgbGlzdCB0aGF0IGhhcyBzdWNoIGEgZGVwZW5k ZW5jeSwgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gc2lkZSB3aWxsIHN0b3Agd29ya2luZy48L3A+ CgoJPGgyIGlkPSJleHBvcnQiPkV4cG9ydCBhIHRoZW1lPC9oMj4KCgk8cCBjbGFzcz0iaW1w b3J0YW50Ij5Pbmx5IGF2YWlsYWJsZSBpZiBzbWRfY3J1bmNoZXJzIGlzIGluc3RhbGxlZC48 L3A+CgoJPHA+SWYgeW91IHdpc2ggdG8gYmFjayB1cCBhIHRoZW1lIG9yIHNoYXJlIGl0IHdp dGggb3RoZXJzLCBjbGljayA8c3Ryb25nPkV4cG9ydDwvc3Ryb25nPi4gQSBib3ggd2lsbCBz bGlkZSBkb3duIG9mZmVyaW5nIHlvdSBhIGNob2ljZSBvZiBjb21wcmVzc2lvbiBmb3JtYXRz OyB0aGUgZGVmYXVsdCBpcyB0aGUgZm9ybWF0IHlvdSBjaG9zZSBmcm9tIHRoZSA8YSBocmVm PSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdlLiBDbGljayA8ZW0+W0dvXTwvZW0+IHRv IGV4cG9ydCB0aGUgdGhlbWUgYW5kIHNhdmUgaXQgdG8geW91ciBjb21wdXRlci4gQWxsIHJl bGF0ZWQgZmlsZXMgaW4gdGhlIHRoZW1lIHdpbGwgYmUgcGFja2FnZWQgdG9nZXRoZXIgaW50 byBhIHNpbmdsZSBkb3dubG9hZCBmaWxlIGZvciBjb252ZW5pZW5jZS48L3A+CgoJPHA+VGhl IGZpbGVuYW1lIGlzIGdvdmVybmVkIGJ5IHRoZSA8ZW0+RmlsZW5hbWUgZm9ybWF0PC9lbT4g cHJlZmVyZW5jZS48L3A+CgoJPGgyIGlkPSJkZWxldGUiPkRlbGV0ZSBhIHRoZW1lPC9oMj4K Cgk8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFyZSBzdXJlKSB0byByZW1vdmUgdGhl IGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRzIGZyb20gdGhlIGZpbGUgc3lzdGVt LiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5UaGlzIGlzIG5vdCB1bmRvYWJsZSwgc28gYmUg Y2FyZWZ1bDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRpdF90aGVtZSI+RWRpdCBhIHRoZW1l PC9oMj4KCgk8cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGZpbGVz IGFsbCByZXNpZGUgaW4gdGhlaXIgb3duIHNlbGYtY29udGFpbmVkIGRpcmVjdG9yeSB1bmRl ciA8Y29kZT50ZXh0cGF0dGVybi90aGVtZTwvY29kZT4uIFRoZSBuYW1lIG9mIHRoZSBkaXJl Y3RvcnkgaXMgdGhlIG5hbWUgb2YgeW91ciB0aGVtZSwgaGVuY2UgdGhlIHJlYXNvbiBpdCBj YW5ub3QgY29udGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0ZXJzIHRoYXQgd291bGQgYmUgaW52 YWxpZCBpbiB0aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiB2YXJpYWJsZXMuPC9wPgoKCTxwPldoZW4geW91IGNsaWNrICYjODIxNjtFZGl0JiM4MjE3 OyB5b3Ugd2lsbCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0aGF0IGFsbG93cyB5b3UgdG8gbWFr ZSBjaGFuZ2VzIHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQgc2NyZWVuIGlzIGJyb2tlbiBpbnRv IHRocmVlIHZlcnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dzOjwvcD4KCgk8aDMgaWQ9ImVkaXRf aW1nIj5JbWFnZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFjaCB0aGVtZSBjYW4gY29udGFpbiBh biBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMgYW4gaW1hZ2Ugb2YgMjYwJiMyMTU7MTUw cHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNob3QucG5nPC9jb2RlPiAob3IgPGNv ZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2NvZGU+LCBldGMpIGluIHlvdXIgdGhlbWUg ZGlyZWN0b3J5LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNoZWQgLyBzdHJldGNoZWQgdG8gZml0 IHlvdXIgdGh1bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGluIHRoZSBwbHVnaW4gcHJlZnMuPC9w PgoKCTxwPk90aGVyIGltYWdlcyBmb3IgdXNlIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8 L3NwYW4+IHJ1bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIGEgdGhlbWUuIEJyb3dzZSBmb3Ig YW4gaW1hZ2UgYW5kIHNlbGVjdCBpdCwgdGhlbiBjbGljayA8c3Ryb25nPlVwbG9hZDwvc3Ry b25nPiB0byBhZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3UgY2FuIGN1cnJlbnRseSBvbmx5IHVw bG9hZCBvbmUgaW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2ggeW91IGNhbiBkZWxldGUgb25lIG9y IG1vcmUgYXQgb25jZSBieSBTaGlmdC9DdHJsIGNsaWNraW5nIHRoZSBvbmVzIHlvdSB3aXNo IHRvIHJlbW92ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2O3gmIzgyMTc7IGJ1dHRvbi4gPHNw YW4gY2xhc3M9ImltcG9ydGFudCI+V2FybmluZzogZmlsZXMgd2lsbCBiZSBkZWxldGVkIGlt bWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZpcm1hdGlvbi48L3NwYW4+PC9wPgoKCTxwPlRoZSBi ZXN0IHdheSB0byByZWZlciB0byBpbWFnZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0aCBhIHJlbGF0aXZlIHBhdGg6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Lm15U3R5bGUgewogICBiYWNrZ3Jv dW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsKfQo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZGl0 X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoKCTxwPlRoZSBjZW50cmFsIHBhbmUgaXMgd2hlcmUg eW91IGVkaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBpbiB5b3VyIHRoZW1lLiBUaGUg c21hbGwgZWRpdCBib3ggYXQgdGhlIHRvcCBpcyB0aGUgZmlsZW5hbWUgYW5kIHRoZSBsYXJn ZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRlbnQuIENsaWNrIDxzdHJvbmc+U2F2ZTwvc3Ryb25n PiB0byBjb21taXQgY2hhbmdlcy4gWW91IG1heSBmcmVlbHkgcmVuYW1lIGFueSBmaWxlIHlv dSBhcmUgZWRpdGluZy48L3A+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+SW1wb3J0YW50OiBp ZiB5b3Ugc2VsZWN0IGEgZmlsZSwgZWRpdCBpdCwgcmVuYW1lIGl0LCBhbmQgY2xpY2sgPHN0 cm9uZz5TYXZlPC9zdHJvbmc+IHlvdSB3aWxsIG92ZXJ3cml0ZSB3aGF0ZXZlciB3YXMgaW4g dGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlmIHlvdSBlbXB0eSB0aGUgY29udGVu dHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0byBtYWtlIGEgJiM4MjIwO25ldyYj ODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYSBuZXcgZmlsZSwgaXQgaXMgc2Fm ZXIgdG8gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IGZpbGU8L3N0cm9uZz4gYnV0dG9uIGluIHRo ZSByaWdodCBoYW5kIGNvbHVtbiB0byBlbnN1cmUgeW91IGFyZSBub3QgZWRpdGluZyBhbiBl eGlzdGluZyBmaWxlIGJ5IG1pc3Rha2UuPC9wPgoKCTxwPkl0IGlzIGFsc28gd29ydGggbm90 aW5nIHRoYXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZyb20gaG9zdCB0byBob3N0LiBJZiB5 b3UgdHJ5IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQgcmVjZWl2ZSBhIHl1a2t5IHdhcm5p bmcgbWVzc2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZSB0aGUgZmlsZSwgdHJ5 IGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0aGVtZSBkaXJlY3RvcnkgYW5k IGFsbCBmaWxlcyBiZW5lYXRoIGl0LjwvcD4KCgk8cD5UaGUgdGhlbWUgZmlsZXMgYXJlIGRp c3RyaWJ1dGVkIGluIFR4cCB3aXRoIDxjb2RlPjY0NDwvY29kZT4gcGVybWlzc2lvbnMgd2hp Y2ggc2hvdWxkIGJlIGZpbmUgZm9yIGEgc3RhbmRhcmQgaG9zdC4gU29tZSBzaGFyZWQgaG9z dGluZyBjb21wYW5pZXMgJiM4MjEyOyBhbmQgdGhlc2UgYXJlIHVzdWFsbHkgdGhlIG9uZXMg dGhhdCB0ZWxsIHlvdSB0byBzZXQgeW91ciA8Y29kZT5maWxlczwvY29kZT4gYW5kIDxjb2Rl PmltYWdlczwvY29kZT4gZGlyZWN0b3JpZXMgdG8gNzc3IGluIG9yZGVyIHRvIG1ha2UgdGhl bSB3cml0YWJsZSBieSBUeHAgJiM4MjEyOyBydW4gQXBhY2hlL1BIUCBpbiBhIGRpZmZlcmVu dCB3YXkgd2hpY2ggbWlnaHQgcmVxdWlyZSBoaWdoZXIgcGVybWlzc2lvbnMgaW4gb3JkZXIg dG8gd3JpdGUgdG8gdGhlIHRoZW1lIGRpcmVjdG9yeS4gVGhpcyBpcyB1bmZvcnR1bmF0ZWx5 IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBwbHVnaW4gc28geW91IHdpbGwgaGF2ZSB0byBl eHBlcmltZW50IGlmIGl0IGNhdXNlcyB5b3UgcHJvYmxlbXMuPC9wPgoKCTxoMz5GaWxlIGhh bmRsaW5nPC9oMz4KCgk8cD5UaGlzIGNvbHVtbiBiZWdpbnMgd2l0aCBhIHNlbGVjdCBsaXN0 IG9mIGFsbCBpbnN0YWxsZWQgdGhlbWVzOyB0aGUgY3VycmVudCB0aGVtZSBzZWxlY3RlZC4g Q2hhbmdpbmcgdGhlIGl0ZW0gaGVyZSB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IHlvdSB0byBl ZGl0IGFub3RoZXIgdGhlbWUuIFRoaXMgaXMgdmVyeSB1c2VmdWwgaWYgeW91IGFyZSBjb3B5 aW5nIGFuZCBwYXN0aW5nIGZpbGVzIGZyb20gb25lIHRoZW1lIHRvIGFub3RoZXIgYW5kIHNh dmVzIHlvdSBoYXZpbmcgdG8gZ28gYmFjayB0byB0aGUgdGhlbWUgbGlzdCBmaXJzdC48L3A+ CgoJPHA+QmVuZWF0aCB0aGF0IGFyZSB0d28gYnV0dG9uczo8L3A+CgoJPHVsPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TmV3IGZpbGU8L3NwYW4+IDogQ3JlYXRlIGEgbmV3LCBlbXB0 eSBmaWxlIGluIHlvdXIgdGhlbWUgZGlyZWN0b3J5LiBOb3RoaW5nIGlzIGFjdHVhbGx5IGNy ZWF0ZWQgdW50aWwgeW91IGhpdCA8c3Ryb25nPlNhdmU8L3N0cm9uZz4gYnV0IHVzaW5nIHRo aXMgYnV0dG9uIGVuc3VyZXMgeW91IGJlZ2luIHdpdGggYSBjbGVhbiBzbGF0ZSBhbmQgZG9u JiM4MjE3O3QgYWNjaWRlbnRhbGx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZmlsZSB5b3Ug d2VyZSBlZGl0aW5nPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lIGxpc3Q8 L3NwYW4+IDogQSBzaG9ydGN1dCBiYWNrIHRvIHRoZSBtYWluIHRoZW1lIGxpc3QgKGVxdWl2 YWxlbnQgdG8gY2xpY2tpbmcgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIpPC9saT4K CTwvdWw+CgoJPHA+QmVsb3cgdGhvc2UgYnV0dG9ucyBhcmUgdXAgdG8gZm91ciBzZWN0aW9u cyBjb250YWluaW5nIGFsbCB0aGUgKG5vbi1pbWFnZSkgZmlsZXMgdGhhdCBtYWtlIHVwIHlv dXIgdGhlbWUuIENsaWNrIGEgZmlsZW5hbWUgdG8gbG9hZCBpdCBpbnRvIHRoZSBjZW50cmFs IHRleHQgYXJlYSBmb3IgZWRpdGluZy48L3A+CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVz aGVldHM8L2g0PgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPkZpbGVzIGNhbiBiZSBhbnkgdmFs aWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4g PGNvZGU+LmNzczwvY29kZT48L3A+CgoJPHA+VGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHlv dXIgdGhlbWUuIEFkZCBhcyBtYW55IHNoZWV0cyBhcyB5b3UgbGlrZSBhbmQgbG9hZCB0aGVt IGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlKHMpLjwvcD4K Cgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXBsYXRlczwvaDQ+CgoJPHAgY2xhc3M9ImltcG9y dGFudCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9 ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uc3NjPC9jb2RlPjwvcD4KCgk8cD5B IHNwZWNpYWwgdmVyc2lvbiBvZiBhIHN0eWxlc2hlZXQgdGhhdCBhbGxvd3MgeW91IHRvIGRl ZmluZSBjb25zdGFudHMgdGhyb3VnaG91dCB5b3VyIHNoZWV0LiBXcml0ZSB5b3VyIHN0eWxl c2hlZXQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgeW91IHdvdWxkIG5vcm1hbGx5IGJ1 dCB3aGVyZSB5b3UgZmluZCB5b3Vyc2VsZiwgZm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBzYW1l IGNvbG9yIHZhbHVlIHJlcGVhdGVkbHkgb3IgdGhlIHNhbWUgcnVsZXMgYmxvY2ssIHlvdSBj YW4gc2F2ZSB5b3Vyc2VsZiB0eXBpbmcgYnkgdXNpbmcgY29uc3RhbnRzOjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkBicmFuZGluZzogIzEyMzQ1NjsK I2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsKfQpoMiB7CiAgY29sb3I6IEBicmFuZGlu ZzsKfQo8L2NvZGU+PC9wcmU+CgoJPHA+WW91IGNhbiBhbHNvIHNwZWNpZnkgd2hvbGUgcnVs ZSBibG9ja3MgbGlrZSB0aGlzICg8ZW0+Tm90ZSB0aGUgY29sb24gYWZ0ZXIgdGhlIGJsb2Nr IG5hbWU8L2VtPikgOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxv Y2siPkBteV9ibG9jazogewogIG1hcmdpbjowIDIwcHg7CiAgYm9yZGVyOjNweCBzb2xpZCAj OTk5OwogIGZvbnQtc2l6ZToxMjAlOwp9CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7 CiAgcG9zaXRpb246cmVsYXRpdmU7CiAgQG15X2Jsb2NrOwp9CmgyIHsKICBAbXlfYmxvY2s7 Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlvdSBwdXQgYWxsIHlvdXIgY29uc3RhbnRzIGF0 IHRoZSB0b3Agb2YgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgdGhleSB3aWxsIGJlIHJl bW92ZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNzcyBmaWxlLjwvcD4KCgk8cD5XaGVuIHlvdSBz YXZlIGEgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSwgYSBjb3JyZXNwb25kaW5nLW5hbWVkIDxj b2RlPi5jc3M8L2NvZGU+IGZpbGUgd2lsbCBhbHNvIGJlIGNyZWF0ZWQuIFRoZSB0d28gd2ls bCBiZSBrZXB0IGluIHN5bmMgYXMgZmFyIGFzIHByYWN0aWNhYmxlIChldmVuIGlmIHlvdSBy ZW5hbWUgdGhlIG9yaWdpbmFsIGZpbGUpLiBXaGVuIGl0IGNvbWVzIHRvIGRlbGV0aW9uIHRo b3VnaCwgdGhleSBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5LiBUaGlzIGFsbG93cyB5b3UgdG8g ZWl0aGVyIGtlZXAgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgaW4gdGhlIGRpc3RyaWJ1 dGlvbiBhcmNoaXZlIG9yIHJlbW92ZSBpdCBwcmlvciB0byBleHBvcnQuPC9wPgoKCTxoNCBp ZD0iZWRpdF9qcyI+SmF2YXNjcmlwdDwvaDQ+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+Rmls ZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1V U1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uanM8L2NvZGU+PC9wPgoKCTxwPkFueSB0cmlja2Vy eSB5b3UgbWF5IHdpc2ggdG8gZW1wbG95IGluIHlvdXIgdGhlbWUgY2FuIGJlIHdyaXR0ZW4g aW4gdGhlc2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQgalF1ZXJ5IGlzIGxvYWRlZCBieSBkZWZh dWx0IG9uIHRoZSBhZG1pbiBzaWRlIHNvIHlvdSBjYW4gcGxheSB3aXRoIHRoYXQuPC9wPgoK CTxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9oND4K Cgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5PbmUgZmlsZSA8c3Ryb25nPm11c3Q8L3N0cm9uZz4g YmUgbmFtZWQgZXhhY3RseSB0aGUgc2FtZSBhcyB5b3VyIHRoZW1lLCBpLmUuIDxjb2RlPnNt ZF9CbHVlTWVhbmllLnBocDwvY29kZT4uIEFueSBvdGhlciBmaWxlcyBtdXN0IGVuZCBpbiA8 Y29kZT4ucGhwPC9jb2RlPjwvcD4KCgk8cD5Db25zdWx0IHRoZSA8YSBocmVmPSJodHRwOi8v dGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPUNyZWF0aW5nX2FuX0FkbWlu X1NpZGVfVGhlbWUiPkFkbWluIFNpZGUgdGhlbWUgZ3VpZGU8L2E+IG9uIFRleHRib29rIGZv ciB0aGUgcnVsZXMgb24gbWFraW5nIHRoZW1lcy4gTm90ZSB0aGF0IGNvcnJ1cHQgdGhlbWVz IGFyZSBkZXRlY3RlZCB0byB0aGUgYmVzdCBvZiB0aGUgcGx1Z2luJiM4MjE3O3MgYWJpbGl0 eSBhbmQgeW91IG1heSBub3QgZXhwb3J0LCBiYXNlIG9yIHN3aXRjaCB0byBhbnkgdGhlbWUg dGhhdCBpcyBicm9rZW4uPC9wPgoKCTxwPklmIHlvdSByZW5hbWUgdGhlIHRoZW1lJiM4MjE3 O3MgY29yZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIChpLmUuIHRoZSBv bmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0aGVtZSBmb2xkZXIgaXRzZWxmKSB0aGUg cGx1Z2luIHdpbGwgYXR0ZW1wdCB0byByZW5hbWUgdGhlIGRpcmVjdG9yeSBhcyB3ZWxsOyBl c3NlbnRpYWxseSByZW5hbWluZyB0aGUgdGhlbWUuIFRoaXMgc2hvdWxkIHByZXZlbnQgYSB0 aGVtZSBmcm9tIGJlY29taW5nIHVuZWRpdGFibGUsIGJ1dCBpdCBpcyB1cCB0byB5b3UgdG8g a2VlcCB0aGUgY2xhc3MgbmFtZSBpbiBzeW5jIHdpdGggdGhlIGZpbGUgbmFtZS4gSWYgYXQg YW55IHRpbWUgeW91IGdvIGJhY2sgdG8gdGhlIHRoZW1lIGxpc3QvZ3JpZCBhbmQgZmluZCBh IHRoZW1lIGV4aXN0cyBidXQgaGFzIG5vIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBp dCwgY2hhbmNlcyBhcmUgaXQmIzgyMTc7cyBiZWNhdXNlIHRoZSBjbGFzcyBuYW1lIGRvZXNu JiM4MjE3O3QgbWF0Y2ggdGhlIHRoZW1lJiM4MjE3O3MgZGlyZWN0b3J5IG5hbWUuIEp1c3Qg aGl0IFtFZGl0XSBhbmQgYWx0ZXIgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+ IGZpbGUgdG8gYnJpbmcgZXZlcnl0aGluZyBiYWNrIG9uIHRyYWNrLjwvcD4KCgk8aDQgaWQ9 ImVkaXRfb3RoZXIiPk90aGVyczwvaDQ+CgoJPHA+QW55IGZpbGVzIHRoYXQgYXJlIG5vdCBv ZiB0aGUgYWJvdmUgdGhyZWUgdHlwZXMgKGFuZCBhcmUgbm90IGltYWdlcykgYXBwZWFyIGhl cmUuIFlvdSB3aWxsIHByb2JhYmx5IG5ldmVyIHNlZSB0aGlzIHNlY3Rpb24uIElmIHlvdSBk byB0cnkgdG8gY3JlYXRlIGEgZmlsZSB0aGF0IGlzIG5vdCBvZiB0aGUgYWJvdmUgdGhyZWUg dHlwZXMsIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZC4gWW91IG11c3QgaGl0IDxlbT5TYXZl PC9lbT4gYWdhaW4gdG8gY29uZmlybSB5b3UgcmVhbGx5IHdpc2ggdG8gY3JlYXRlIHRoZSBm aWxlLjwvcD4KCgk8aDMgaWQ9ImFib3V0Ij5NYW5pZmVzdDwvaDM+CgoJPHA+SW4geW91ciBt YWluIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaXMgYSBmdW5jdGlvbiBj YWxsZWQgPGNvZGU+bWFuaWZlc3QoKTwvY29kZT4gd2hpY2ggY29udGFpbnMgaW5mbyBhYm91 dCB5b3UgYW5kIHlvdXIgdGhlbWUuIEVkaXQgdGhlIHZhbHVlcyBoZXJlIHRvIHN0YW1wIHlv dXIgbWFyayBvbiB0aGUgdGhlbWUuIE5vdGUgdGhhdCBpZiB5b3VyIGRlc2NyaXB0aW9uIGNv bnRhaW5zIGFwb3N0cm9waGVzIHRoZXkgbXVzdCBiZSA8ZW0+ZXNjYXBlZDwvZW0+IGJ5IHBy ZWNlZGluZyB0aGVtIHdpdGggYSBzaW5nbGUgYmFja3NsYXNoIDxjb2RlPlw8L2NvZGU+LiBl LmcuPC9wPgoKPHByZT48Y29kZT4mIzM5O2Rlc2NyaXB0aW9uJiMzOTsgPSZndDsgJiMzOTtE b25cJiMzOTt0IGZlYXIgdGhlIHJlYXBlciEmIzM5OywKPC9jb2RlPjwvcHJlPgoKCTxoMiBp ZD0icGVydXNlciI+UGVyLXVzZXIgdGhlbWUgc2VsZWN0aW9uPC9oMj4KCgk8cD5JZiBhbiBh ZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWxsb3cgcGVyLXVzZXIgdGhlbWVzLCBhIG5ldyB0 YWIgYXBwZWFycyB1bmRlciB0aGUgQWRtaW4gdGFiIG9mIGFsbCB1c2VycyAoZXhjZXB0IGFk bWluaXN0cmF0b3JzKS4gVGhpcyBzaW1wbHkgZGlzcGxheXMgYWxsIGF2YWlsYWJsZSB0aGVt ZXMgJiM4MjEyOyBvbmVzIHRoYXQgdGhlIGFkbWluaXN0cmF0b3IgaGFzIGV4cGxpY2l0bHkg YWxsb3dlZC48L3A+CgoJPHA+Q2xpY2tpbmcgYSB0aGVtZSBuYW1lIG9yIHRodW1ibmFpbCB3 aWxsIGltbWVkaWF0ZWx5IHN3aXRjaCB0byB0aGF0IHRoZW1lIHVudGlsIHRoZSB1c2VyIGNo b29zZXMgYW5vdGhlciBvciB0aGUgYWRtaW5pc3RyYXRvciBjaGFuZ2VzIHRoZW1lIHN5c3Rl bS48L3A+CgoJPGgyIGlkPSJhdXRob3IiPkF1dGhvciBhbmQgY3JlZGl0czwvaDI+CgoJPHA+ PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9h Pi48L3A+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRob3V0 IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVybiBk ZXZlbG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRoZSB0 aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3RlcnMs IGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qgbm90 YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBhbmQg TWlrZSBEZW5uaXMuPC9wPgoKCTxwPkkgYW0gYWxzbyBpbmRlYnRlZCB0byB0aGUgbGlicmFy aWVzIGhvc3RlZCBhdCA8YSBocmVmPSJodHRwOi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBj bGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBDbGFzc2VzPC9hPiB0aGF0IGVuYWJsZWQgbmF0aXZl IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9mIHZhcmlvdXMgdHlwZXMuIFRoZSBo YXJkIHdvcmsgb2YgRGV2aW4gRG91Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2NoaSByZWFs bHkgYWRkZWQgdGhlIGljaW5nIG9uIHRoZSBjYWtlIGZvciB0aGlzIHBsdWdpbi48L3A+CgoJ PHA+S3Vkb3MgYW5kIHRoYW5rcyB0byB5b3UgYWxsLjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxv ZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjEyIEp1biAyMDA5IHwgMC4xIHwgSW5p dGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJPGxpPjAzIFNlcCAyMDA5IHwgMC4xMSB8IEltcHJv dmVkIFRleHRnYXJkZW4gdGhlbWUgZmVlZCBhbmQgbGlua3MgOyBpbXByb3ZlZCBmaWxlIHN1 cHBvcnQgKGJvdGggdGhhbmtzIHRoZWJvbWJzaXRlKSA7IG1hZGUgZ2xvYmFsIHRoZW1lIG1v cmUgb2J2aW91cyA7IGFsdGVyZWQgcHJlZnMgdGFiIGEgYml0IDsgYWRkZWQgPGNvZGU+LnNz YzwvY29kZT4gc3VwcG9ydCA7IGlnbm9yZWQgLnN2biBzdWJkaXJzIChhbGwgdGhhbmtzIHBp ZW1hbikgOyBpbXByb3ZlZCB3YXJuaW5nIG1lc3NhZ2VzIDsgbWlzYyBmaXhlcyBhbmQgaG91 c2VrZWVwaW5nPC9saT4KCQk8bGk+MDIgTm92IDIwMDkgfCAwLjEyIHwgUmVkdWNlZCB0aGVt ZSBmZWVkIGNsdXR0ZXIgaW4gdGhlIHByZWZzIHRhYmxlPC9saT4KCQk8bGk+MDQgTm92IDIw MDkgfCAwLjEzIHwgUmVtb3ZlZCBlcmVnX3JlcGxhY2UgdG8gY29uZm9ybSB3aXRoIFBIUDUu MysgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBjaGFuZ2VkICYjODIxNjtnbG9iYWwmIzgyMTc7 IHRvICYjODIxNjtkZWZhdWx0JiM4MjE3OyA7IGZpeGVkIHJvZ3VlIHVudHJhbnNsYXRlZCBz dHJpbmc8L2xpPgoJCTxsaT4wOSBOb3YgMjAwOSB8IDAuMTQgfCBNb3ZlZCA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPnMgaW4gbGluZSB3aXRoIFRleHRnYXJkZW4gbGF5b3V0IGFs dGVyYXRpb25zICh0aGFua3MgZm9yIHRoZSBoZWFkc3VwIHRoZWJvbWJzaXRlKSA7IG1hZGUg ZmVlZHMgbW9yZSByb2J1c3QgaW4gdGhlIGV2ZW50IFRleHRnYXJkZW4gaXMgZG93biAvIHVu ZGVyIG1haW50ZW5hbmNlICh0aGFua3MgbWxhcmlubyk8L2xpPgoJCTxsaT4wOSBGZWIgMjAx MCB8IDAuMiB8IE5hdGl2ZSBzdXBwb3J0IGZvciB6aXAgaW1wb3J0aW5nIGFuZCBleHBvcnRp bmcgKGFsbW9zdCkgaXJyZXNwZWN0aXZlIG9mIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBI UDwvc3Bhbj4gZW52aXJvbm1lbnQgOyB6aXAgaXMgbm93IHRoZSBkZWZhdWx0IHN5c3RlbSA7 IGJldHRlciBub3RpZmljYXRpb24gb2Ygc3VwcG9ydGVkIGNvbXByZXNzaW9uIHR5cGVzIGFu ZCBtb3JlIHJvYnVzdCByZWplY3Rpb24gaWYgc29tZXRoaW5nIGlzIG1pc3Npbmc8L2xpPgoJ CTxsaT4xMCBGZWIgMjAxMCB8IDAuMjEgfCBGaXhlZCBiemlwMiB3YXJuaW5nICh0aGFua3Mg dGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVjdXJzaXZlIG1rZGlyIHByb2JsZW0gd2l0aCBiemlw MiBmaWxlcyAodGhhbmtzIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IG1hbnVhbCBj b21tZW50cykgOyBmaXhlZCByb2d1ZSB0ZW1wIGZpbGUgbGVmdCBiZWhpbmQgd2l0aCB6aXAg aW1wb3J0PC9saT4KCQk8bGk+MTUgRmViIDIwMTAgfCAwLjIyIHwgV2hlbiByZW5hbWluZyB0 aGUgY29yZSB0aGVtZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlLCBhdXRv bWF0aWNhbGx5IHJlbmFtZSBkaXJlY3RvcnkgdG9vICh0aGFua3MgZmxvb2RmaXNoKTwvbGk+ CgkJPGxpPjI4IEZlYiAyMDEwIHwgMC4yMyB8IFJ1ZGltZW50YXJ5IHZhbGlkYXRpb24gb2Yg emlwIGZpbGUgY29udGVudHMgKHRoYW5rcyBUdXRzX2FuZF9UaXBwcyk7IGZpeGVkIGV4cG9y dCBub3RpZmljYXRpb248L2xpPgoJCTxsaT4wNiBBdWcgMjAxMCB8IDAuMjQgfCBGaXhlZCA8 Y29kZT5mc29ja29wZW4oKTwvY29kZT4gYW5kIHVuZGVmaW5lZCBpbmRleCB3YXJuaW5ncyBp ZiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAvIHByZWZzIG5vdCBpbnN0YWxsZWQ8 L2xpPgoJCTxsaT4wMSBOb3YgMjAxMCB8IDAuMjUgfCBCZXR0ZXIgdGhlbWUgaW50ZWdyYXRp b24gKGNvbG91cnMsIGV0YykgOyBmaXhlZCBkdXBsaWNhdGUgcGFnZSByZW5kZXJzIG9uIGVk aXQgc2NyZWVuIGFuZCBhZGRlZCBmaWxlbmFtZSBmb3JtYXQgb3B0aW9uIChib3RoIHRoYW5r cyBtYXZlcmljayk8L2xpPgoJCTxsaT4yMSBGZWIgMjAxMSB8IDAuMjYgfCBGaXhlZCBpbXBv cnQgYnVnIGlmIG1vcmUgdGhhbiBvbmUgZG90IGluIGZpbGVuYW1lICh0aGFua3MgcGhpbHdh cmVoYW0pPC9saT4KCQk8bGk+PGRlbD4wOCBKdW4gMjAxMSB8IDAuMjcgfCBGaXhlZCBlcnJv bmVvdXMgc3RyaXBwaW5nIG9mIHNsYXNoZXMgb24gc2F2ZSA7IGFkZGVkIHR4cCBwYXRoIHBy ZWYgKHRoYW5rcyBtYW5pcXVpKTwvZGVsPiA8c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5W RVJTSU9OPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+UkVWT0tFRDwvc3Bhbj48L3N0cm9u Zz48L2xpPgoJCTxsaT4yOCBTZXAgMjAxMSB8IDAuMjggfCBGaXhlZCBlcnJvbmVvdXMgc3Ry aXBwaW5nIG9mIHNsYXNoZXMgb24gc2F2ZTwvbGk+CgkJPGxpPjI5IEphbiAyMDEyIHwgMC4z MCB8IE1vdmVkIChkZSljb21wcmVzc2lvbiBhbGdvcml0aG1zIHRvIHNtZF9jcnVuY2hlcnM6 IG5vdyBhIHJlcXVpcmVkIGxpYnJhcnkgZm9yIHRoaXMgcGx1Z2luIGlmIHlvdSB3aXNoIHRv IGltcG9ydC9leHBvcnQ8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVH SU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9j ayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxh eTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9o ZWxwIGgxIHsgZm9udDogMjJweCBHZW9yZ2lhLCBzZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFs aWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxOHB4IEdlb3JnaWEsIHNlcmlmOyB9 CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTNweCBHZW9yZ2lhLCBzZXJpZjsgbGV0dGVy LXNwYWNpbmc6IDFweDsgbWFyZ2luOiAyMHB4IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVy bGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEycHggR2VvcmdpYSwgc2VyaWY7 IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoj c21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5 OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KI3NtZF9o ZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6 LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRf aGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1 cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7 IH0KI3NtZF9oZWxwIGRsIGRkIHsgbWFyZ2luOjJweCAxNXB4OyB9CiNzbWRfaGVscCBkbCBk ZDpiZWZvcmUgeyBjb250ZW50OiAiXDIwMjJcMDBhMCI7IH0KI3NtZF9oZWxwIGRsIGRkIGRs IHsgcGFkZGluZzogMCAxNXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NT ICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiMDkwMDc3N2FjYzg2ODdmZWUxZmJiYTQwZThm ZDJmY2MiO30=