# Name: smd_admin_themes v0.50 # Type: Admin/AJAX plugin # Admin-side theme manager and editor # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjUwIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo4MjQ1MjoiLyoqCiAqIHNtZF9hZG1pbl90aGVtZXMKICoKICogQSBUZXh0cGF0dGVy biBDTVMgcGx1Z2luIGZvciBjcmVhdGluZywgZWRpdGluZywgdGVzdGluZywgaW5zdGFsbGlu ZyBhbmQgZGlzdHJpYnV0aW5nIGFkbWluLXNpZGUgdGhlbWVzCiAqICAtPiBFbXBsb3kgaW1h Z2VzLCBDU1MsIEpTLCBIVE1ML1BIUCBpbiB5b3VyIHRoZW1lCiAqICAtPiBVc2UgY29uc3Rh bnRzIGluIHlvdXIgQ1NTIGZpbGVzCiAqICAtPiBCYXNlIHlvdXIgdGhlbWUgb24gYW4gZXhp c3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZQogKiAgLT4gRXhwb3J0IGEg dGhlbWUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHkgaW4gZWl0 aGVyIC50YXIsIC50Z3osIC5iejIgb3IgLnppcCBmb3JtYXQgKHJlcXVpcmVzIHNtZF9jcnVu Y2hlcnMgcGx1Z2luKQogKiAgLT4gSW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJv bSB0aGUgImNvbW11bml0eSByZXBvc2l0b3J5IjpodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRt aW5pc3RyYXRpb24tdGhlbWVzCiAqICAtPiBBZG1pbmlzdHJhdG9yIGNhbiBzZXQgYSBkZWZh dWx0IHRoZW1lIGZvciBhbGwgdXNlcnMsIG9yIGVuYWJsZSBwZXItdXNlciAvIHBlci1yb2xl IHRoZW1lcwogKgogKiBAYXV0aG9yIFN0ZWYgRGF3c29uCiAqIEBsaW5rICAgaHR0cDovL3N0 ZWZkYXdzb24uY29tLwogKiBAdG9kbyA6IFJlbW92ZSB0aGVzZSBzdHJpbmdzCiAqICAtPiBz bWRfYXRfbGlzdF90aXRsZQogKiAgLT4gc21kX2F0X29uZV90aGVtZQogKi8KCi8vIFRPRE86 Ci8vICAqIFZlcmlmeSB0aGF0IGZpbGVzIGNhbid0IGJlIHVwbG9hZGVkL2NyZWF0ZWQgb3V0 c2lkZSBvZiB0aGUgdGhlbWUncyBkaXIKLy8gICogJ2VtcHR5X2luZm8nIG1lc3NhZ2Ugc2hv dWxkbid0IGZpcmUgZm9yIGJhZCBmaWxlIHVwbG9hZAovLyBUT0ZJWDoKLy8gICogcmF3dXJs ZW5jb2RlL2RlY29kZSBmb3IgZmlsZXMgd2l0aCBzcGFjZXMgaW4gdGhlbS4gQ3VycmVudGx5 IGNhbid0IGVkaXQgY29udGVudHMgb2YgZmlsZSB3aXRoIHNwYWNlcyBpbiBpdCBhcyB0aGV5 IGdldCBlbmNvZGVkIGFzICUyMC4gSWYgZW5jb2RlZCwgd2l0aCBlYWNoIHNhdmUgdGhleSBn ZXQgJTI1MjAgYWRkZWQgYW5kIGl0IGdldHMgbG9uZ2VyIGFuZCBsb25nZXIuLi4uCgp1c2Ug XFRleHRwYXR0ZXJuXEFkbWluXFRoZW1lOwoKaWYgKHR4cGludGVyZmFjZSA9PT0gJ2FkbWlu JykgewoKICAgIC8vIFNpbGVuY2Ugd2FybmluZ3MgYmVjYXVzZSwgYWx0aG91Z2ggdGhlIHBs dWdpbiByZXF1aXJlcyBzbWRfY3J1bmNoZXJzIGZvciB0aGUKICAgIC8vIGltcG9ydC9leHBv cnQgZmVhdHVyZXMsIGl0J2xsIGZ1bmN0aW9uIGluIGEgcmVkdWNlZCBjYXBhY2l0eSB3aXRo b3V0IGl0CiAgICBAcmVxdWlyZV9wbHVnaW4oJ3NtZF9jcnVuY2hlcnMnKTsKCiAgICBnbG9i YWwgJHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAk c21kX2F0X3ByaXZzLAogICAgICAgICRzbWRfY29yZV90aGVtZXMsICRwcmVmcywgJHNtZF9h dF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG87CgogICAgJHNtZF9hdF9ldmVudCA9ICdz bWRfYXQnOwogICAgJHNtZF9hdF9mdWxsZXYgPSAnc21kX2FkbWluX3RoZW1lcyc7CiAgICAk c21kX2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOwogICAgJHNtZF9hdF9wcml2cyA9ICcx JzsKICAgICRzbWRfYXRfZmVlZHVybCA9ICcnOwogICAgJHNtZF9hdF90aGVtZV9yZXBvID0g Jyc7CgogICAgJHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdoaXZlJywgJ2hpdmVuZXV0cmFs Jyk7CgogICAgYWRkX3ByaXZzKCRzbWRfYXRfZXZlbnQsICRzbWRfYXRfcHJpdnMpOwogICAg YWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9wcml2 cyk7CiAgICByZWdpc3Rlcl90YWIoImV4dGVuc2lvbnMiLCAkc21kX2F0X2V2ZW50LCBnVHh0 KCdzbWRfYWR0aF90YWJfbmFtZScpKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRf b3B0aW9ucycsICdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldik7CiAgICByZWdpc3Rl cl9jYWxsYmFjaygnc21kX2F0X3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS4nLiRzbWRf YXRfZnVsbGV2KTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXQnLCAkc21kX2F0X2V2 ZW50KTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUn LCAndGhlbWVfbmFtZScpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF9saW5rJywg J3ByZWZzX3VpJywgJ3RoZW1lX25hbWUnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf YXRfaW5qZWN0X2NzcycsICdhZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7CgogICAgaWYgKGlz c2V0KCRwcmVmc1snc21kX2F0X3N5c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9zeXN0ZW0n XSA9PSAyKSB7CiAgICAgICAgYWRkX3ByaXZzKCRzbWRfYXRfYWRtX2V2ZW50LCAnMiwzLDQs NSw2Jyk7CiAgICAgICAgcmVnaXN0ZXJfdGFiKCJhZG1pbiIsICRzbWRfYXRfYWRtX2V2ZW50 LCBnVHh0KCdzbWRfYWR0aF9za2lubmVyJykpOwogICAgICAgIHJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfYWRtYXQnLCAkc21kX2F0X2FkbV9ldmVudCk7CiAgICB9Cn0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ly8gQ1NTIGRlZmluaXRpb25zOiBob3BlZnVsbHkga2luZCB0byB0aGVtZXJzCmZ1bmN0aW9u IHNtZF9hdF9nZXRfc3R5bGVfcnVsZXMoKQp7CiAgICAkc21kX2F0X3N0eWxlcyA9IGFycmF5 KAogICAgICAgICdzbWRfYXQnID0+Jwouc21kX2F0X2J0biB7IGZsb2F0OiByaWdodCB9Ci5z bWQtYXQtbGlzdC1uYW1lIHsgZGlzcGxheTpibG9jazsgcGFkZGluZzouMzg0NjE1Mzg0NjE1 MzhlbSAyLjVlbSAuMzg0NjE1Mzg0NjE1MzhlbSAxZW07IHRleHQtb3ZlcmZsb3c6ZWxsaXBz aXM7IHdoaXRlLXNwYWNlOm5vd3JhcDsgb3ZlcmZsb3c6aGlkZGVuOyB9Ci5zd2l0Y2hlci1h Y3Rpb24gKyAuc21kLWF0LWxpc3QtbmFtZSB7IHBhZGRpbmctcmlnaHQ6MWVtOyBwYWRkaW5n LWxlZnQ6Mi41ZW07IH0KLnNtZF9hdF91cGRhdGUgeyBmb250LXdlaWdodDpib2xkOyBjb2xv cjojOTAwOyB9CiNzbWRfYXRfaW1hZ2VzIHsgbWFyZ2luOjBweCA2cHggLTRweCAwOyB9Ci5z bWRfc2tpbl9maWxldHlwZXMgeyBtYXJnaW46MTJweCAwOyB9CnNtZF9mYWtlYnRuIHsgY29s b3I6IzU1NTsgY3Vyc29yOnBvaW50ZXI7IH0KJwogICAgKTsKCiAgICByZXR1cm4gJHNtZF9h dF9zdHlsZXM7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2luamVjdF9jc3MoJGV2 dCwgJHN0cCkKewogICAgZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRldmVudDsKCiAgICBpZiAo JGV2ZW50ID09ICRzbWRfYXRfZXZlbnQpIHsKICAgICAgICAkc21kX2F0X3N0eWxlcyA9IHNt ZF9hdF9nZXRfc3R5bGVfcnVsZXMoKTsKICAgICAgICBlY2hvICc8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPicsICRzbWRfYXRfc3R5bGVzWydzbWRfYXQnXSwgJzwvc3R5bGU+JzsKICAgIH0K CiAgICByZXR1cm47Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQbHVnaW4g anVtcG9mZiBwb2ludApmdW5jdGlvbiBzbWRfYXQoJGV2dCwgJHN0cCkKewogICAgJGF2YWls YWJsZV9zdGVwcyA9IGFycmF5KAogICAgICAgICdzbWRfYXRfY2xvbmUnICAgICAgICAgPT4g dHJ1ZSwKICAgICAgICAnc21kX2F0X2RlbGV0ZScgICAgICAgID0+IHRydWUsCiAgICAgICAg J3NtZF9hdF9kZWxldGVfZm9sZGVyJyA9PiB0cnVlLAogICAgICAgICdzbWRfYXRfZWRpdCcg ICAgICAgICAgPT4gZmFsc2UsCiAgICAgICAgJ3NtZF9hdF9tdWx0aV9lZGl0JyAgICA9PiB0 cnVlLAogICAgICAgICdzbWRfYXRfZXhwb3J0JyAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAn c21kX2F0X2ltcG9ydCcgICAgICAgID0+IHRydWUsCiAgICAgICAgJ3NtZF9hdF9uZXdmaWxl JyAgICAgICA9PiBmYWxzZSwKICAgICAgICAnc21kX2F0X3ByZWZzX2luc3RhbGwnID0+IGZh bHNlLAogICAgICAgICdzbWRfYXRfcHJlZnNfcmVtb3ZlJyAgPT4gZmFsc2UsCiAgICAgICAg J3NtZF9hdF9wcmVmc191cGRhdGUnICA9PiB0cnVlLAogICAgICAgICdzbWRfYXRfcHJldmll dycgICAgICAgPT4gdHJ1ZSwKICAgICAgICAnc21kX2F0X3JlbmFtZScgICAgICAgID0+IHRy dWUsCiAgICAgICAgJ3NtZF9hdF9zYXZlJyAgICAgICAgICA9PiB0cnVlLAogICAgICAgICdz bWRfYXRfc2V0dXAnICAgICAgICAgPT4gZmFsc2UsCiAgICAgICAgJ3NtZF9hdF9zd2l0Y2gn ICAgICAgICA9PiB0cnVlLAogICAgICAgICdzbWRfYXRfdXBsb2FkJyAgICAgICAgPT4gdHJ1 ZSwKICAgICAgICAnc21kX2F0X2NoYW5nZV9wYWdlYnknID0+IHRydWUsCiAgICAgICAgJ3Nh dmVfcGFuZV9zdGF0ZScgICAgICA9PiB0cnVlLAogICAgKTsKCiAgICBpZiAoJHN0cCA9PSAn c2F2ZV9wYW5lX3N0YXRlJykgewogICAgICAgIHNtZF9hdF9zYXZlX3BhbmVfc3RhdGUoKTsK ICAgIH0gZWxzZSBpZiAoJHN0cCAmJiBib3VuY2VyKCRzdHAsICRhdmFpbGFibGVfc3RlcHMp KSB7CiAgICAgICAgJHN0cCgpOwogICAgfSBlbHNlIHsKICAgICAgICBzbWRfYXRfbGlzdCgp OwogICAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF93ZWxjb21lKCRldmVudCwg JHN0ZXApCnsKICAgICRtc2cgPSAnJzsKICAgIHN3aXRjaCAoJHN0ZXApIHsKICAgICAgICBj YXNlICdpbnN0YWxsZWQnOgogICAgICAgICAgICBzbWRfYXRfcHJlZnNfaW5zdGFsbCgwKTsK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZGVsZXRlZCc6CiAgICAgICAgICAg IHNtZF9hdF9wcmVmc19yZW1vdmUoMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAg cmV0dXJuICRtc2c7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2xpbmsoKQp7CiAg ICBnbG9iYWwgJHNtZF9hdF9ldmVudDsKICAgIHJldHVybiBocmVmKGdUeHQoJ3NtZF9hZHRo X21hbmFnZV9sYmwnKSwgJz9ldmVudD0nLiRzbWRfYXRfZXZlbnQpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2xpc3QoJG1lc3NhZ2UgPSAnJykK ewogICAgZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRwcmVmcywgJHRoZW1lLCAkc21kX2NvcmVf dGhlbWVzLCAkc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1l X3JlcG87CgogICAgJHNtZF9hdF9zdHlsZXMgPSBzbWRfYXRfZ2V0X3N0eWxlX3J1bGVzKCk7 CiAgICAkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7CgogICAgZXh0cmFjdChncHNh KGFycmF5KCdzdGVwJywgJ3BhZ2UnLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJywgJ3NraW4n KSkpOwogICAgJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3Nh Z2UnKTsKICAgICRsYXlvdXQgPSAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXTsKICAgICRz dHlsZXJ1bGUgPSAoJGxheW91dD09MCkgPyAnbGlzdCcgOiAnZ3JpZCc7CiAgICAkdHcgPSAk YXRfcHJlZnNbJ3NtZF9hdF90dyddICsgMTA7CiAgICAkdGggPSAkYXRfcHJlZnNbJ3NtZF9h dF90aCddICsgODA7CiAgICAkaGVscExpbmsgPSAiP2V2ZW50PXBsdWdpbiZzdGVwPXBsdWdp bl9oZWxwJm5hbWU9JHNtZF9hdF9mdWxsZXYjdXNhZ2UiOwoKICAgICRwYWdlYnkgPSAoZ3Bz KCdxdHknKSkgPyBncHMoJ3F0eScpIDogKChjcygnc21kX2F0X3BhZ2VieScpKSA/IGNzKCdz bWRfYXRfcGFnZWJ5JykgOiAxNSk7CiAgICAkbWF4X3RoZW1lX3NpemUgPSAkYXRfcHJlZnNb J3NtZF9hdF9tYXhfdGhlbWVfc2l6ZSddOwoKICAgICRjdXJyX3NraW4gPSAoc21kX2F0X2V4 aXN0cygkdGhlbWUtPm5hbWUpKSA/ICR0aGVtZS0+bmFtZSA6ICdoaXZlJzsKICAgICRza2lu X2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOwogICAgJGNydXNoZXJzID0gc21kX2F0X2Ny dXNoX29wdGlvbnMoJ2NvbXByZXNzJyk7CiAgICAkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVz aF9vcHRpb25zKCdkZWNvbXByZXNzJyk7CiAgICAkYmFzZXMgPSBhcnJheSgpOwoKICAgIC8v IEdldCBhIGxpc3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVuZGVuY2llcykKICAg IGZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5hKSB7CiAgICAgICAgJG1hbmlmZXN0ID0g c21kX2F0X3JlYWRfc2tpbmZvKCRza2luYSk7CiAgICAgICAgaWYgKCRtYW5pZmVzdCkgewog ICAgICAgICAgICBpZiAoJG1hbmlmZXN0WydiYXNlZF9vbiddKSB7CiAgICAgICAgICAgICAg ICAkYmFzZXNbXSA9ICRtYW5pZmVzdFsnYmFzZWRfb24nXTsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgIH0KCiAgICAkYmFzZXMgPSBhcnJheV91bmlxdWUoJGJhc2VzKTsKCiAgICBw YWdldG9wKGdUeHQoJ3NtZF9hZHRoX21hbmFnZV9sYmwnKSwgJG1lc3NhZ2UpOwoKICAgIC8v IEhhbmRsZSBwYWdpbmcuCiAgICAvLyBAdG9kbyBXaHkgZG9lcyBwbHVnaW4gbm90IGhhdmUg aXRzIG93biBwYWdlYnk/CiAgICAkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0KTsKICAgICRs aW1pdCA9IG1heChAJHBhZ2VieSwgMTUpOwoKICAgIGxpc3QoJHBhZ2UsICRvZmZzZXQsICRu dW1QYWdlcykgPSBwYWdlcigkdG90YWwsICRsaW1pdCwgJHBhZ2UpOwogICAgJHNraW5fbGlz dCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRvZmZzZXQsICRsaW1pdCk7CgogICAgJHFz ID0gYXJyYXkoCiAgICAgICAgImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LAogICAgICAgICJw YWdlIiA9PiAkcGFnZSwKICAgICk7CgogICAgZWNobyBzY3JpcHRfanMoPDw8RU9KUwpmdW5j dGlvbiBzbWRfZ2V0Y3J1c2goc2tpbikgewogICAgc2tpbkhhbmRsZSA9ICJjcnVzaF8iK3Nr aW47CiAgICBqUXVlcnkoJy5zbWRfcG9wdXAnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAg IGJveCA9IGpRdWVyeSh0aGlzKTsKICAgICAgICBpZiAoYm94LmF0dHIoImlkIikgPT0gc2tp bkhhbmRsZSkgewogICAgICAgICAgICBpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJub25l IikgewogICAgICAgICAgICAgICAgYm94LnNsaWRlRG93bignZmFzdCcpOwogICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgYm94LnNsaWRlVXAoJ2Zhc3QnKTsKICAgICAg ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJveC5zbGlkZVVwKCdmYXN0 Jyk7CiAgICAgICAgfQogICAgfSk7CiAgICBqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJyku Y2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAi P2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrc2tpbisiJnN0ZXA9c21kX2F0X2V4cG9y dCZjcnVzaD0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0W3R5cGU9XCdyYWRpb1wn XTpjaGVja2VkJykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSsiJl90eHBfdG9rZW49Iit0ZXh0 cGF0dGVybi5fdHhwX3Rva2VuKTsKICAgIH0pOwogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5j dGlvbiBzbWRfZ2V0dmFsKHNraW4sIHN0ZXApIHsKICAgIHNraW5IYW5kbGUgPSAicG9wXyIr c2tpbjsKICAgIGpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAg ICAgYm94ID0galF1ZXJ5KHRoaXMpOwogICAgICAgIGlmIChib3guYXR0cigiaWQiKSA9PSBz a2luSGFuZGxlKSB7CiAgICAgICAgICAgIGlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5v bmUiKSB7CiAgICAgICAgICAgICAgICBib3guc2xpZGVEb3duKCdmYXN0Jyk7CiAgICAgICAg ICAgICAgICBqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmZvY3VzKCk7CiAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBib3guc2xpZGVVcCgnZmFzdCcpOwog ICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYm94LnNsaWRlVXAo J2Zhc3QnKTsKICAgICAgICB9CiAgICB9KTsKICAgIGpRdWVyeSgnIycrc2tpbkhhbmRsZSsn IGEnKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICBqUXVlcnkodGhpcykuYXR0cigiaHJl ZiIsICI/ZXZlbnQ9eyRzbWRfYXRfZXZlbnR9JnNraW49IisoKHNraW49PSduZXcnKT8gJycg OiBza2luKSsiJnN0ZXA9IitzdGVwKyImbmV3X3NraW49IitqUXVlcnkoJyMnK3NraW5IYW5k bGUrJyBpbnB1dCcpLnZhbCgpKyImcGFnZT0iK3skcGFnZX0rIiZfdHhwX3Rva2VuPSIrdGV4 dHBhdHRlcm4uX3R4cF90b2tlbik7CiAgICB9KTsKCiAgICBqUXVlcnkoJyMnK3NraW5IYW5k bGUrJyBpbnB1dCcpLmtleXVwKGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLnZhbHVlID0g dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csJycpOwogICAgICAgIHdoaWxl ICh0aGlzLnZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy52YWx1ZS5zdWJzdHJpbmcoMCwxKS5t YXRjaCgvWzAtOV0vKSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5z dWJzdHJpbmcoMSk7CiAgICAgICAgfQogICAgfSk7CgogICAgcmV0dXJuIGZhbHNlOwp9CkVP SlMKICAgICk7CgogICAgLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNraW5zLgogICAgZWNobyAn PGRpdiBjbGFzcz0idHhwLWxheW91dCI+JwogICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhw LWxheW91dC0yY29sIj4nCiAgICAgICAgLm4uIGhlZChnVHh0KCdzbWRfYWR0aF90YWJfbmFt ZScpLCAxLCBhcnJheSgnY2xhc3MnID0+ICd0eHAtaGVhZGluZycpKQogICAgICAgIC5uLiAn PC9kaXY+JwogICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxheW91dC0yY29sIj4nCiAg ICAgICAgLm4uIGdyYWYoCiAgICAgICAgICAgIG4uICc8YSBocmVmPSI/ZXZlbnQ9Jy4gJHNt ZF9hdF9ldmVudC4gYS4gJ3N0ZXA9c21kX2F0X3NldHVwIj4nLiBnVHh0KCdzbWRfYWR0aF9z ZXR1cCcpLiAnPC9hPicKICAgICAgICAgICAgLm4uIGdUeHQoJ3NtZF9hZHRoX2hlbHBfbGlu aycsIGFycmF5KCd7bGlua30nID0+ICRoZWxwTGluaykpCiAgICAgICAgLm4uICc8YSBocmVm PSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJ25ld1wnLCBcJ3NtZF9hdF9jbG9u ZVwnKTsiPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWV4dHJhLWljb24tbmV3LWRvY3VtZW50 Ij48L3NwYW4+ICcuZ1R4dCgnc21kX2FkdGhfbmV3JykuJzwvYT4nCiAgICAgICAgLm4uICc8 cCBpZD0icG9wX25ldyIgY2xhc3M9InNtZF9wb3B1cCB0eHAtbGlzdC1vcHRpb25zIiBoaWRk ZW4+JwogICAgICAgIC5uLiAnPHNwYW4+Jy4gZ1R4dCgnc21kX2FkdGhfbmV3X3NraW4nKS4g Jzwvc3Bhbj4nLm4uICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIg dmFsdWU9IiIgc2l6ZT0iJy4gSU5QVVRfUkVHVUxBUi4gJyIgLz4gPGEgY2xhc3M9Im5hdmxp bmsiIGhyZWY9IiMiPicuIGdUeHQoJ3NtZF9hZHRoX2NvbmZpcm0nKS4gJzwvYT4nCiAgICAg ICAgLm4uICc8L3A+JwogICAgICAgICAgICAsIGFycmF5KCdjbGFzcycgPT4gJ3R4cC1hY3Rp b25zIHR4cC1hY3Rpb25zLWlubGluZScpCiAgICAgICAgKQogICAgICAgIC5uLiAnPC9kaXY+ JwoKICAgICAgICAubi4gJzxkaXYgY2xhc3M9InNtZF9hdF9sYXlvdXRfZ3JpZCI+JwogICAg ICAgIC5uLiAnPGRpdiBpZD0ic21kX2NvbnRyb2wiIGNsYXNzPSJ0eHAtY29udHJvbC1wYW5l bCI+JwogICAgICAgIC5uLiAoKCR1bmNydXNoZXJzKQogICAgICAgICAgICA/IHVwbG9hZF9m b3JtKGdUeHQoJ3NtZF9hZHRoX2luc3RhbGxfc2tpbicpLCAnJywgJ3NtZF9hdF9pbXBvcnQn LCAkc21kX2F0X2V2ZW50LCAnJywgJG1heF90aGVtZV9zaXplKQogICAgICAgICAgICAubi4g dGFnKGdUeHQoJ3NtZF9hZHRoX3N1cHBvcnRlZF9pbXBvcnQnLCBhcnJheSgne3R5cGVzfScg PT4gKCgkdW5jcnVzaGVycykgPyBqb2luKCcsICcsICR1bmNydXNoZXJzKSA6IGdUeHQoJ25v bmUnKSkpKSwgJ2RpdicsIGFycmF5KCdjbGFzcycgPT4gJ3R4cC1mb3JtLWZpZWxkLWluc3Ry dWN0aW9ucycpKQogICAgICAgICAgICA6ICcnCiAgICAgICAgICAgICkKICAgICAgICAubi4g JzwvZGl2Pic7CgogICAgZWNobyAnPGRpdiBjbGFzcz0idHhwLWxheW91dC0xY29sIj48Zm9y bSBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBhY3Rpb249IicgLiBqb2luX3FzKCRx cykgLiAnIj4nOwoKICAgIGlmICgkbGF5b3V0PT0iMCIpIHsKICAgICAgICBlY2hvICc8ZGl2 IGNsYXNzPSJ0eHAtbGlzdHRhYmxlcyI+Jy4KICAgICAgICAgICAgc3RhcnRUYWJsZSgnJywg JycsICd0eHAtbGlzdCcsIDUpLgogICAgICAgICAgICBhc3NIZWFkKAogICAgICAgICAgICAg ICAgZ1R4dCgnc21kX2FkdGhfc2tpbl9nYmwnKSwKICAgICAgICAgICAgICAgICdhdXRob3In LAogICAgICAgICAgICAgICAgZ1R4dCgndmVyc2lvbicpLAogICAgICAgICAgICAgICAgJ2Rl c2NyaXB0aW9uJywKICAgICAgICAgICAgICAgIGdUeHQoJ3NtZF9hZHRoX2FjdGlvbnMnKQog ICAgICAgICAgICApOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ0 eHAtZ3JpZCI+JzsKICAgIH0KCiAgICBpZiAoaXNfY2FsbGFibGUoJ2Zzb2Nrb3BlbicpKSB7 CiAgICAgICAgJHRyYW5zcG9ydCA9ICdmc29jayc7CiAgICB9IGVsc2VpZiAoaXNfY2FsbGFi bGUoJ2N1cmxfaW5pdCcpKSB7CiAgICAgICAgJHRyYW5zcG9ydCA9ICdjdXJsJzsKICAgIH0g ZWxzZSB7CiAgICAgICAgJHRyYW5zcG9ydCA9ICcnOwogICAgfQoKICAgICRmZWVkID0gJyc7 CiAgICBzd2l0Y2ggKCR0cmFuc3BvcnQpIHsKICAgICAgICBjYXNlICdjdXJsJzoKICAgICAg ICAgICAgJGMgPSBjdXJsX2luaXQoKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGMsIENV UkxPUFRfVVJMLCAkc21kX2F0X2ZlZWR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgk YywgQ1VSTE9QVF9SRUZFUkVSLCBodSk7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBD VVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQo JGMsIENVUkxPUFRfVkVSQk9TRSwgZmFsc2UpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgk YywgQ1VSTE9QVF9USU1FT1VULCAxMCk7CiAgICAgICAgICAgICRmZWVkID0gY3VybF9leGVj KCRjKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZnNvY2snOgogICAgICAg ICAgICAkdXJsID0gcGFyc2VfdXJsKCRzbWRfYXRfZmVlZHVybCk7CiAgICAgICAgICAgICRm cCA9IEBmc29ja29wZW4gKCR1cmxbJ2hvc3QnXSwgODAsICRlcnJubywgJGVycnN0ciwgNSk7 CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgICRxcnkgPSAnR0VUICcu JHNtZF9hdF9mZWVkdXJsOwogICAgICAgICAgICAgICAgJHFyeSAuPSAiIEhUVFAvMS4wXHJc blxyXG4iOwoKICAgICAgICAgICAgICAgIGZwdXRzKCRmcCwgJHFyeSk7CiAgICAgICAgICAg ICAgICBzdHJlYW1fc2V0X3RpbWVvdXQoJGZwLCAxMCk7CiAgICAgICAgICAgICAgICAkaW5m byA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRmcCk7CgogICAgICAgICAgICAgICAgJGhkcnMg PSB0cnVlOwogICAgICAgICAgICAgICAgd2hpbGUgKCghZmVvZigkZnApKSAmJiAoISRpbmZv Wyd0aW1lZF9vdXQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGZnZXRzKCRm cCwgODE5Mik7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSBwcmVnX3JlcGxhY2UoIltc clxuXSIsICIiLCAkbGluZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRoZHJzID09IGZh bHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmZWVkIC49ICRsaW5lLiJcbiI7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oJGxp bmUpID09IDApICRoZHJzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7CiAgICAgICAgICAgICAgICAgICAgJGZl ZWQgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnAp OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGZlZWQgPSAnJzsKICAg ICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAkZmVlZCA9ICcnOwogICAgfQoKICAgICRzbWRfYXRfdmxhc3QgPSAnJzsKICAgICRm ZWVkcyA9IGFycmF5KCk7CgogICAgaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3ZlcnNpb25z J10pICYmIGlzc2V0KCRwcmVmc1snc21kX2F0X3ZsYXN0J10pKSB7CiAgICAgICAgaWYgKHRp bWUoKSAtICRwcmVmc1snc21kX2F0X3ZsYXN0J10gPCA4NjQwMCkgewogICAgICAgICAgICAv LyBMYXN0IHVwZGF0ZWQgd2l0aGluIHRoZSBsYXN0IGRheSwgc28gcmVhZCB0aGUgY2FjaGVk IHZlcnNpb24gbnVtYmVycwogICAgICAgICAgICAkZmVlZHMgPSB1bnNlcmlhbGl6ZSgkcHJl ZnNbJ3NtZF9hdF92ZXJzaW9ucyddKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoISRmZWVk cyB8fCBncHMoJ3JlYWRfdmVyc2lvbnMnKSkgewogICAgICAgICRmZWVkcyA9IHNtZF9hdF9m ZWVkKCRmZWVkKTsKICAgICAgICAkaW5zdGFsbGVkX2ZlZWQgPSBhcnJheSgpOwogICAgICAg ICRmZWVkcyA9IChpc19hcnJheSgkZmVlZHMpKSA/ICRmZWVkcyA6IGFycmF5KCk7CgogICAg ICAgIC8vIE9ubHkgcmVjb3JkIHRoZSB2ZXJzaW9uIGluZm8gZnJvbSB0aGVtZXMgdGhhdCBh cmUgaW5zdGFsbGVkCiAgICAgICAgZm9yZWFjaCgkc2tpbl9saXN0IGFzICRza2luX25hbWUp IHsKICAgICAgICAgICAgJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScs ICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIHRoZSB1cmxfdGl0bGUKICAgICAgICAgICAg aWYgKGFycmF5X2tleV9leGlzdHMoJGZlZWRfc2tpbl9uYW1lLCAkZmVlZHMpKSB7CiAgICAg ICAgICAgICAgICAkaW5zdGFsbGVkX2ZlZWRbJGZlZWRfc2tpbl9uYW1lXSA9ICRmZWVkc1sk ZmVlZF9za2luX25hbWVdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldF9w cmVmKCdzbWRfYXRfdmxhc3QnLCB0aW1lKCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVO LCAndGV4dF9pbnB1dCcpOwogICAgICAgIHNldF9wcmVmKCdzbWRfYXRfdmVyc2lvbnMnLCBz ZXJpYWxpemUoJGluc3RhbGxlZF9mZWVkKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4s ICd0ZXh0X2lucHV0Jyk7CiAgICB9CgogICAgZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tp bl9uYW1lKSB7CiAgICAgICAgLy8gUmVhZCBlYWNoIG1hbmlmZXN0IGFuZCBzZXQgdXAgdGhl IGxhYmVscwogICAgICAgICRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5fbmFt ZSk7CiAgICAgICAgJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScsICRz a2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZvciB1cmxfdGl0bGUgbWF0Y2hpbmcKCiAgICAg ICAgJHRodW1ibmFpbCA9IHNtZF9hdF9nZXRfdGh1bWIoJHNraW5mbywgMSk7CiAgICAgICAg JHRoaXNfc2tpbiA9ICgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10gOiAkc2tpbl9uYW1l OwogICAgICAgICRpc19nYmwgPSAoJHNraW5fbmFtZSA9PSAkYXRfcHJlZnNbJ3NtZF9hdF9n bG9iYWxfc2tpbiddKSA/IGdUeHQoJ3NtZF9hZHRoX2lzX2dsb2JhbCcpIDogJyc7CiAgICAg ICAgJHN3aXRjaF9saW5rID0gJz9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2luX25h bWUuYS4ncGFnZT0nLiRwYWdlLmEuJ190eHBfdG9rZW49Jy5mb3JtX3Rva2VuKCk7CiAgICAg ICAgJHNraW50ZXh0ID0gJHRoaXNfc2tpbiAubi4gJGlzX2dibCAubi4gKCgkc2tpbmZvICYm ICRza2luZm9bJ2Jhc2VkX29uJ10pID8gbi5nVHh0KCdzbWRfYWR0aF9iYXNlZF9vbicsIGFy cmF5KCd7c2tpbn0nID0+ICRza2luZm9bJ2Jhc2VkX29uJ10pKSA6ICcnKTsKICAgICAgICAk dGh1bWJsb2NrID0gKCRsYXlvdXQ9PTApCiAgICAgICAgICAgICAgICAgICAgICAgID8gJzxh IGhyZWY9IicuJHN3aXRjaF9saW5rLiciIHRpdGxlPSInLmdUeHQoJ3NtZF9hZHRoX2FwcGx5 X3NraW4nKS4nIj4nLiRza2ludGV4dC4oKCR0aHVtYm5haWwpID8gYnIuJHRodW1ibmFpbCA6 ICcnKS4nPC9hPicKICAgICAgICAgICAgICAgICAgICAgICAgOiAnPGEgaHJlZj0iJy4kc3dp dGNoX2xpbmsuJyIgdGl0bGU9IicuZ1R4dCgnc21kX2FkdGhfYXBwbHlfc2tpbicpLiciPicu KCgkdGh1bWJuYWlsKSA/ICR0aHVtYm5haWwgOiBnVHh0KCdzbWRfYWR0aF9hcHBseV9za2lu JykpLic8L2E+JzsKICAgICAgICAkYXV0aGJsb2NrID0gKCgkc2tpbmZvICYmIHN0cnBvcygk c2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9Iicu JHNraW5mb1snYXV0aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDog KCgkc2tpbmZvKSA/ICRza2luZm9bJ2F1dGhvciddIDogJy0nKSk7CiAgICAgICAgJGFjdGJs b2NrID0gJzxwIGNsYXNzPSJ0eHAtYWN0aW9ucyI+PGEgaHJlZj0iP2V2ZW50PScuJHNtZF9h dF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIj48 c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXBlbmNpbCI+PC9zcGFuPiAnLmdUeHQoJ2Vk aXQnKS4nPC9hPicKICAgICAgICAgICAgLiAoKCRza2luZm8pID8gJzxhIGhyZWY9IiMiIG9u Y2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRfYXRf Y2xvbmVcJyk7Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNvcHkiPjwvc3Bhbj4g Jy5nVHh0KCdzbWRfYWR0aF9jbG9uZScpLic8L2E+JyA6ICcnKQogICAgICAgICAgICAuICgo JHNraW5mbyAmJiAkY3J1c2hlcnMpID8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBz bWRfZ2V0Y3J1c2goXCcnLiRza2luX25hbWUuJ1wnKTsiPjxzcGFuIGNsYXNzPSJ1aS1pY29u IHVpLWljb24tZXh0bGluayI+PC9zcGFuPiAnLmdUeHQoJ3NtZF9hZHRoX2V4cG9ydCcpLic8 L2E+JyA6ICcnKQogICAgICAgICAgICAuICgoaW5fYXJyYXkoJHNraW5fbmFtZSwgJHNtZF9j b3JlX3RoZW1lcykgfHwgaW5fYXJyYXkoJHNraW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6ICc8 YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0ZScu YS4nc2tpbj0nLiRza2luX25hbWUuYS4ncGFnZT0nLiRwYWdlLmEuJ190eHBfdG9rZW49Jy5m b3JtX3Rva2VuKCkuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLmdUeHQoJ3NtZF9h ZHRoX2RlbGV0ZV9jb25maXJtJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW5fbmFtZSkpLidc Jyk7Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNsb3NlIj48L3NwYW4+ICcuZ1R4 dCgnZGVsZXRlJykuJzwvYT48L3A+Jyk7CiAgICAgICAgJGNsb25lYmxvY2sgPSAnPHAgaWQ9 InBvcF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1cCIgaGlkZGVuPjxzcGFuPicu Z1R4dCgnc21kX2FkdGhfbmV3X2Nsb25lc2tpbicpLic8L3NwYW4+Jy5uLic8aW5wdXQgdHlw ZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFsdWU9IiIgc2l6ZT0iJy5JTlBVVF9N RURJVU0uJyIgY2xhc3M9ImlucHV0LW1lZGl1bSIgLz4nLm4uJzxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSIjIj4nLnN0cm9uZyhnVHh0KCdzbWRfYWR0aF9jb25maXJtJykpLic8L2E+PC9w Pic7CiAgICAgICAgJGNydXNoYmxvY2sgPSAoKCRjcnVzaGVycykgPyAnPHAgaWQ9ImNydXNo XycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3BvcHVwIiBoaWRkZW4+PHNwYW4+Jy5nVHh0 KCdzbWRfYWR0aF9jcnVzaF9mb3JtYXQnKS4nPC9zcGFuPicucmFkaW9TZXQoJGNydXNoZXJz LCAkc2tpbl9uYW1lLidfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVzaCddKS5uLic8 YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iIyI+Jy5zdHJvbmcoZ1R4dCgnc21kX2FkdGhfY29u ZmlybScpKS4nPC9hPjwvcD4nIDogJycpOwogICAgICAgICR2ZXJibG9jayA9ICgkc2tpbmZv KSA/ICgoaXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV0pICYmIGlzc2V0KCRmZWVkc1sk ZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10pICYmIHZlcnNpb25fY29tcGFyZSgkZmVlZHNb JGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddLCRza2luZm9bJ3ZlcnNpb24nXSk9PT0xKSA/ ICc8YSBocmVmPSInLiRmZWVkc1skZmVlZF9za2luX25hbWVdWydsaW5rJ10uJyIgY2xhc3M9 InNtZF9hdF91cGRhdGUiPicuZ1R4dCgnc21kX2FkdGhfdmVyc2lvbicpLiRza2luZm9bJ3Zl cnNpb24nXS4nPC9hPicgOiBnVHh0KCdzbWRfYWR0aF92ZXJzaW9uJykuJHNraW5mb1sndmVy c2lvbiddKSA6ICcnOwoKICAgICAgICBpZiAoJGxheW91dD09MCkgewogICAgICAgICAgICBl Y2hvIHRyKAogICAgICAgICAgICAgICAgbi50ZCgkdGh1bWJsb2NrKQogICAgICAgICAgICAg ICAgLm4udGQoJGF1dGhibG9jaykKICAgICAgICAgICAgICAgIC5uLnRkKCR2ZXJibG9jaykK ICAgICAgICAgICAgICAgIC5uLnRkKCgoJHNraW5mbyk/ICRza2luZm9bJ2Rlc2NyaXB0aW9u J10gOiAnLScpLigoJHNraW5mbyAmJiAkc2tpbmZvWydoZWxwJ10pID8gJyAnLmhyZWYoJ1sn LmdUeHQoJ2hlbHAnKS4nXScsICRza2luZm9bJ2hlbHAnXSkgOiAnJykpCiAgICAgICAgICAg ICAgICAubi50ZCgkYWN0YmxvY2sgLm4uICRjbG9uZWJsb2NrIC5uLiAkY3J1c2hibG9jaykK ICAgICAgICAgICAgLCAoKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGNsYXNzPSJo aWdobGlnaHQiJyA6ICcnKQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InR4cC1ncmlkLWNlbGwnLCAoKCRza2luX25hbWUg PT0gJGN1cnJfc2tpbikgPyAnIGhpZ2hsaWdodCcgOiAnJyksICciPicsCiAgICAgICAgICAg ICAgICAgICAgbiwgaGVkKCRza2ludGV4dCwgMyksCiAgICAgICAgICAgICAgICAgICAgbiwg JzxwPicsICR0aHVtYmxvY2ssICc8L3A+JywKICAgICAgICAgICAgICAgICAgICBuLCAnPHA+ JywgJHZlcmJsb2NrLCBuLCBnVHh0KCdzbWRfYWR0aF9ieScpLCBuLCAkYXV0aGJsb2NrLCAn PC9wPicsCiAgICAgICAgICAgICAgICAgICAgbiwgJzxwPicsICRhY3RibG9jaywgJzwvcD4n LAogICAgICAgICAgICAgICAgICAgIG4sICRjbG9uZWJsb2NrLAogICAgICAgICAgICAgICAg ICAgIG4sICRjcnVzaGJsb2NrLAogICAgICAgICAgICAgICAgbiwgJzwvZGl2Pic7CiAgICAg ICAgfQogICAgfQoKICAgIGlmICgkbGF5b3V0PT0iMCIpIHsKICAgICAgICBlY2hvIG4sIGVu ZFRhYmxlKCk7CiAgICB9CgogICAgZWNobyBuLCAnPC9kaXY+JywKICAgICAgICBuLCB0SW5w dXQoKSwKICAgICAgICBuLCAnPC9mb3JtPjwvZGl2PicsCiAgICAgICAgbiwgJzxkaXYgaWQ9 Imxpc3RfbmF2aWdhdGlvbiIgY2xhc3M9InR4cC1uYXZpZ2F0aW9uIj4nLAogICAgICAgIG4s IG5hdl9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpLAogICAgICAgIG4sIHBhZ2VieV9mb3JtKCRzbWRfYXRfZXZlbnQsICRw YWdlYnkpLAogICAgICAgIG4sICc8L2Rpdj4nLAogICAgICAgIG4sICc8L2Rpdj4nOwp9Cgpm dW5jdGlvbiBzbWRfYXRfZmVlZCgkZmVlZCkKewogICAgZ2xvYmFsICRmZWVkczsKCiAgICAk ZmVlZD1wcmVnX3JlcGxhY2UoIi8+Ii4iW1s6c3BhY2U6XV0rIi4iPC9pIiwgIj48IiwgJGZl ZWQpOyAvLyBLaWxsIHdoaXRlc3BhY2UgaW4gZmVlZAogICAgJHhtbHBhcnNlciA9IHhtbF9w YXJzZXJfY3JlYXRlKCk7CiAgICB4bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1scGFyc2Vy LCAic21kX2F0X2ZlZWRfc3RhcnRfdGFnIiwgInNtZF9hdF9mZWVkX2VuZF90YWciKTsKICAg IHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2Zl ZWRfdGFnX2NvbnRlbnRzIik7CiAgICB4bWxfcGFyc2UoJHhtbHBhcnNlciwgJGZlZWQpOwog ICAgeG1sX3BhcnNlcl9mcmVlKCR4bWxwYXJzZXIpOwoKICAgIHJldHVybiAkZmVlZHM7Cn0K CmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygkcGFyc2VyLCAkbmFtZSwgJGF0dHJp YnMpCnsKICAgIGdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnOwogICAg aWYgKCRuYW1lID09ICJFTlRSWSIpIHsKICAgICAgICAkc21kX2F0X2ZlZWRpbiA9IHRydWU7 CiAgICB9CiAgICBpZiAoJHNtZF9hdF9mZWVkaW4pIHsKICAgICAgICAkc21kX2F0X2ZlZWR0 YWcgPSAkbmFtZTsKICAgIH0KfQoKZnVuY3Rpb24gc21kX2F0X2ZlZWRfZW5kX3RhZygkcGFy c2VyLCAkbmFtZSkKewogICAgZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0 YWcsICRzbWRfYXRfZmVlZG5hbWU7CiAgICBpZiAoJG5hbWUgPT0gIkVOVFJZIikgewogICAg ICAgICRzbWRfYXRfZmVlZGluID0gZmFsc2U7CiAgICAgICAgJHNtZF9hdF9mZWVkbmFtZSA9 ICcnOwogICAgfQp9CgpmdW5jdGlvbiBzbWRfYXRfZmVlZF90YWdfY29udGVudHMoJHBhcnNl ciwgJGRhdGEpCnsKICAgIGdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFn LCAkc21kX2F0X2ZlZWRuYW1lLCAkZmVlZHM7CiAgICBpZiAoJHNtZF9hdF9mZWVkaW4pIHsK ICAgICAgICBpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJOQU1FIikgewogICAgICAgICAgICAk ZmVlZHNbJGRhdGFdID0gJyc7CiAgICAgICAgICAgICRzbWRfYXRfZmVlZG5hbWUgPSAkZGF0 YTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRmZWVkc1skc21kX2F0X2ZlZWRuYW1l XSkpIHsKICAgICAgICAgICAgaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiVElUTEUiIHx8ICRz bWRfYXRfZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJVUERB VEVEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0g IkxJTksiKSB7CiAgICAgICAgICAgICAgICAkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV1bc3Ry dG9sb3dlcigkc21kX2F0X2ZlZWR0YWcpXSA9ICRkYXRhOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21k X2F0X3ZhbGlkX3R5cGVzKCkKewogICAgJGVkaXRhYmxlID0gYXJyYXkoJ3NzYycsICdzY3Nz JywgJ2NzcycsICdqcycsICdwaHAnLCAndHh0JywgJ3RleHRpbGUnKTsKICAgICRpbWFnYWJs ZSA9IGFycmF5KCdqcGcnLCAnanBlZycsICdnaWYnLCAncG5nJywgJ3N2ZycpOwogICAgcmV0 dXJuIGFycmF5KCRlZGl0YWJsZSwgJGltYWdhYmxlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9lZGl0KCRtZXNzYWdlID0gJycpCnsKICAgIGds b2JhbCAkc21kX2F0X2V2ZW50LCAkZmlsZV9tYXhfdXBsb2FkX3NpemUsICRzdGVwOwoKICAg IGV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ25ld19z a2luX2RpcicsICdmaWxlJywgJ2RpcicpKSkpOwoKICAgICRzbWRfYXRfc3R5bGVzID0gc21k X2F0X2dldF9zdHlsZV9ydWxlcygpOwogICAgJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVm cygpOwogICAgJGxheW91dCA9ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddOwoKICAgIGxp c3QoJGVkaXRhYmxlLCAkaW1hZ2FibGUpID0gc21kX2F0X3ZhbGlkX3R5cGVzKCk7CgogICAg JHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7CiAgICAkZmlsZSA9IChlbXB0 eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2luOwogICAgJGRpciA9IChlbXB0eSgk bmV3X3NraW5fZGlyKSkgPyAkZGlyIDogJG5ld19za2luX2RpcjsKICAgICRmaWxlcyA9IHNt ZF9hdF9saXN0ZGlyKFRIRU1FLiRza2luKTsKICAgIHNvcnQoJGZpbGVzKTsKCiAgICAvLyBT cGxpdCB0aGUgbGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzCiAgICAkYWxsZmlsZXMg PSBhcnJheSgpOwoKICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkY3VycmZpbGUpIHsKICAgICAg ICAkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJmaWxlKTsKICAgICAgICAvLyBJZ25vcmUg YW55IHJvZ3VlIFN1YnZlcnNpb24gZmlsZXMKICAgICAgICBpZiAoc3RycG9zKCRmaWxlX2lu Zm9bJ2Rpcm5hbWUnXSwgJy8uc3ZuJykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRmaWxl X3R5cGUgPSBzdHJ0b2xvd2VyKChpc3NldCgkZmlsZV9pbmZvWydleHRlbnNpb24nXSkpID8g JGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInKTsKICAgICAgICAgICAgJGFsbGZp bGVzWyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7CiAgICAgICAgfQogICAgfQoKICAgIGlm IChncHMoJ3NtZF9hdF9lZGl0cycpKSB7CiAgICAgICAgJGNvbnRlbnRzID0gc3RyX3JlcGxh Y2UoJ1xyXG4nLCcKJyxncHMoJ3NtZF9hdF9lZGl0cycpKTsgLy8gbmV3bGluZSB3b3JrYXJv dW5kCiAgICB9IGVsc2UgewogICAgICAgICRjb250ZW50cyA9ICcnOwoKICAgICAgICBpZiAo JGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNraW4uRFMuJGRpci5EUy4kZmlsZSkpIHsK ICAgICAgICAgICAgJGNvbnRlbnRzID0gZmlsZShUSEVNRS4kc2tpbi5EUy4kZGlyLkRTLiRm aWxlKTsKICAgICAgICAgICAgJGNvbnRlbnRzID0gam9pbigiIiwgJGNvbnRlbnRzKTsKICAg ICAgICB9CiAgICB9CgogICAgJGluZm8gPSBleHBsb2RlICgnLicsJGZpbGUpOwogICAgJGxh c3RwYXJ0ID0gY291bnQoJGluZm8pLTE7CiAgICAkZXh0ID0gc3RydG9sb3dlcih0cmltKCRp bmZvWyRsYXN0cGFydF0pKTsKICAgICRpc190ZXh0aWxlID0gKCRleHQgPT0gJ3RleHRpbGUn KTsKICAgICRpc19zdmcgPSAoJGV4dCA9PSAnc3ZnJyk7CgogICAgLy8gQmVnaW4gcmVuZGVy aW5nIHRoZSBwYWdlCiAgICBwYWdldG9wKGdUeHQoJ3NtZF9hZHRoX2VkaXRfbGJsJywgYXJy YXkoJ3t0aGVtZX0nID0+ICRza2luKSksICRtZXNzYWdlKTsKCiAgICAkc2tpbl9saXN0ID0g c21kX2F0X3JlYWRfc2tpbnMoKTsKCiAgICAvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGlu ZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UKICAgICRza2luc2Vs ID0gYXJyYXkoKTsKCiAgICBmb3JlYWNoICgkc2tpbl9saXN0IGFzICRrZXkxID0+ICR2YWx1 ZTEpIHsKICAgICAgICAkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOwog ICAgfQoKICAgICRza2luQ2hhbmdlID0gJzxmb3JtIG5hbWU9InNraW5jaGFuZ2UiIGFjdGlv bj0iaW5kZXgucGhwIj4nCiAgICAgICAgLiBlSW5wdXQoJHNtZF9hdF9ldmVudCkKICAgICAg ICAuIHNJbnB1dCgnc21kX2F0X2VkaXQnKQogICAgICAgIC4gdElucHV0KCkKICAgICAgICAu IHNlbGVjdElucHV0KCdza2luJywgJHNraW5zZWwsICRza2luLCAwLCAxKQogICAgICAgIC4g JzwvZm9ybT4nOwoKICAgICRsaXN0QWN0aW9ucyA9IGdyYWYoCiAgICAgICAgaHJlZignPHNw YW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXMiPjwvc3Bhbj4g Jy5nVHh0KCdleHBhbmRfYWxsJyksICcjJywgYXJyYXkoCiAgICAgICAgICAgICdjbGFzcycg ICAgICAgICA9PiAndHhwLWV4cGFuZC1hbGwnLAogICAgICAgICAgICAnYXJpYS1jb250cm9s cycgPT4gJ2FsbGZvcm1zX2Zvcm0nLAogICAgICAgICkpLgogICAgICAgIGhyZWYoJzxzcGFu IGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1uIj48L3NwYW4+ICcu Z1R4dCgnY29sbGFwc2VfYWxsJyksICcjJywgYXJyYXkoCiAgICAgICAgICAgICdjbGFzcycg ICAgICAgICA9PiAndHhwLWNvbGxhcHNlLWFsbCcsCiAgICAgICAgICAgICdhcmlhLWNvbnRy b2xzJyA9PiAnYWxsZm9ybXNfZm9ybScsCiAgICAgICAgKSksIGFycmF5KCdjbGFzcycgPT4g J3R4cC1hY3Rpb25zJykKICAgICk7CgogICAgJGZpbGVMaXN0ID0gYXJyYXkoKTsKICAgICRm aWxlTGlzdFtdID0gJzxkaXYgaWQ9ImNvbnRlbnRfc3dpdGNoZXIiIGNsYXNzPSJ0eHAtbGF5 b3V0LTRjb2wtYWx0IiByb2xlPSJyZWdpb24iPicKICAgICAgICAubi4gaGVkKGdUeHQoJ3Nt ZF9hZHRoX3NraW5fZmlsZXMnKSwgMikKICAgICAgICAubi4gJHNraW5DaGFuZ2UKICAgICAg ICAuJGxpc3RBY3Rpb25zCi8vICAgICAgLm4uIHVwbG9hZF9mb3JtKGdUeHQoJ3VwbG9hZF9m aWxlJyksICcnLCAnc21kX2F0X3VwbG9hZCcsICRzbWRfYXRfZXZlbnQsICRza2luLCAkZmls ZV9tYXhfdXBsb2FkX3NpemUsICcnLCAnJykKICAgICAgICAubi4gJzxmb3JtIGlkPSJzbWRf YXRfYWxsZmlsZXMiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPic7CgogICAg JGRpcnMgPSAkZGlyb3V0ID0gJG91dCA9IGFycmF5KCk7CiAgICAkbWV0aG9kcyA9IGFycmF5 KAogICAgICAgICdkZWxldGUnICAgICA9PiBnVHh0KCdkZWxldGUnKSwKICAgICk7CgogICAg Zm9yZWFjaCAoJGFsbGZpbGVzIGFzICRmdHlwZSA9PiAkZmlsZXJlYykgewogICAgICAgIGZv cmVhY2ggKCRmaWxlcmVjIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7CiAgICAgICAgICAgICRq dXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7CiAgICAgICAgICAgICRkaXJzW10gPSAk dGhlRGlyID0gZGlybmFtZSgkY3VycmZpbGUpOwogICAgICAgICAgICAkanVzdGRpciA9IHRy aW0oc3RyX3JlcGxhY2UoVEhFTUUuJHNraW4sICcnLCAkdGhlRGlyKSwgRFMpOwogICAgICAg ICAgICAkcGFydHMgPSBleHBsb2RlKCcuJywgJGp1c3RmaWxlKTsKICAgICAgICAgICAgJGJh c2VmaWxlID0gYXJyYXlfc2hpZnQoJHBhcnRzKTsKICAgICAgICAgICAgJHNob3dmaWxlID0g KCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZTsK ICAgICAgICAgICAgJGlzX2ltZyA9IHNtZF9hdF9pc19pbWFnZSgkY3VycmZpbGUpOwogICAg ICAgICAgICAkaXNfYmluID0gc21kX2F0X2lzX2JpbmFyeSgkY3VycmZpbGUpOwoKICAgICAg ICAgICAgJGVkaXQgPSAkaXNfaW1nID8gJzxhIGhyZWY9IicuJGN1cnJmaWxlLiciIHRpdGxl PSInLmdUeHQoJ3NtZF9hZHRoX3ByZXZpZXdfaW1hZ2UnKS4nIj4nLiRzaG93ZmlsZS4nPC9h PicgOiAoJGlzX2JpbiA/ICc8c3BhbiBjbGFzcz0ic21kLWF0LWxpc3QtbmFtZSI+JyAuICRz aG93ZmlsZSAuICc8L3NwYW4+JyA6ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LmEuJ3N0ZXA9c21kX2F0X2VkaXQnLmEuJ3NraW49Jy4kc2tpbi5hLidmaWxlPScuJGp1c3Rm aWxlLmEuJ2Rpcj0nLiRqdXN0ZGlyLiciPicuJHNob3dmaWxlLic8L2E+Jyk7CiAgICAgICAg ICAgICRtb2Rib3ggPSAoJGJhc2VmaWxlID09ICRza2luKQogICAgICAgICAgICAgICAgPyAg ICcnCiAgICAgICAgICAgICAgICA6ICAgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0i c2VsZWN0ZWRfZmlsZXNbXSIgdmFsdWU9IicuJGp1c3RkaXIuRFMuJGp1c3RmaWxlLiciIC8+ JzsKCiAgICAgICAgICAgICRncm91cF9uYW1lID0gaW5fYXJyYXkoJGZ0eXBlLCAkaW1hZ2Fi bGUpID8gJ2ltYWdlX2ZpbGVzJyA6IChpbl9hcnJheSgkZnR5cGUsICRlZGl0YWJsZSkgPyAk ZnR5cGUgOiAnb3RoZXInKTsKCiAgICAgICAgICAgICRvdXRbJGdyb3VwX25hbWVdW10gPSAn PGxpPicubi4nPHNwYW4gY2xhc3M9InN3aXRjaGVyLWFjdGlvbiI+Jy4kbW9kYm94Lic8L3Nw YW4+Jy4kZWRpdC4nPC9saT4nOwogICAgICAgIH0KICAgIH0KCiAgICAkY29tYmluZWQgPSBh cnJheV9tZXJnZSgkZWRpdGFibGUsIGFycmF5KCdpbWFnZV9maWxlcycsICdvdGhlcicpKTsK CiAgICBmb3JlYWNoICgkY29tYmluZWQgYXMgJGdyb3VwX25hbWUpIHsKICAgICAgICBpZiAo aXNzZXQoJG91dFskZ3JvdXBfbmFtZV0pKSB7CiAgICAgICAgICAgICRjb250ZW50ID0gJzx1 bCBjbGFzcz0ic3dpdGNoZXItbGlzdCI+JyAubi4gam9pbihuLCAkb3V0WyRncm91cF9uYW1l XSkgLm4uICc8L3VsPic7CiAgICAgICAgICAgICRmaWxlTGlzdFtdID0gd3JhcFJlZ2lvbigk Z3JvdXBfbmFtZS4nX2dyb3VwJywgJGNvbnRlbnQsICRncm91cF9uYW1lLCAnc21kX2F0Xycu JGdyb3VwX25hbWUsICdzbWRfYXRfcGFuZV8nLiRncm91cF9uYW1lLidfdmlzaWJsZScpOwog ICAgICAgIH0KICAgIH0KCiAgICAkZmlsZUxpc3RbXSA9IG11bHRpX2VkaXQoJG1ldGhvZHMs ICRzbWRfYXRfZXZlbnQsICdzbWRfYXRfbXVsdGlfZWRpdCcsICcnLCAnJywgJycsICRza2lu KTsKICAgICRmaWxlTGlzdFtdID0gdElucHV0KCkubi4nPC9mb3JtPic7CgogICAgJGRpcnMg PSBhcnJheV91bmlxdWUoJGRpcnMpOwogICAgdW5zZXQoJGRpcnNbYXJyYXlfc2VhcmNoKFRI RU1FLiRza2luLCAkZGlycyldKTsKCiAgICBmb3JlYWNoICgkZGlycyBhcyAkdGhpc2Rpcikg ewogICAgICAgICRkaXJvdXRbXSA9ICc8bGkgY2xhc3M9InNtZC1hdC1saXN0LW5hbWUiPicu c3RyX3JlcGxhY2UoVEhFTUUuJHNraW4uJy8nLCAnJywgJHRoaXNkaXIpLic8L3RkPjx0ZD4n LmRMaW5rKCRzbWRfYXRfZXZlbnQsICdzbWRfYXRfZGVsZXRlX2ZvbGRlcicsICdkZWxmb2xk ZXInLCAkdGhpc2RpciwgMSwgJ3NraW4nLCAkc2tpbikuJzwvbGk+JzsKICAgIH0KCiAgICAk Zm9sZGVyTGlzdCA9ICgkZGlyb3V0KQogICAgICAgID8gd3JhcFJlZ2lvbignc21kX2F0X2Zv bGRlcnNfZ3JvdXAnLCAnPHVsIGNsYXNzPSJzd2l0Y2hlci1saXN0Ij4nIC5uLiBqb2luKG4s ICRkaXJvdXQpIC5uLiAnPC91bD4nLCAnZm9sZGVycycsICdzbWRfYXRfZm9sZGVycycsICdz bWRfYXRfcGFuZV9mb2xkZXJzX3Zpc2libGUnKQogICAgICAgIDogJyc7CgogICAgJHFzID0g YXJyYXkoCiAgICAgICAgImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LAogICAgKTsKCiAgICAk cXNWYXJzID0gImluZGV4LnBocCIuam9pbl9xcygkcXMpOwoKICAgIC8vIFJlbmRlciB0aGUg cmVzdCBvZiB0aGUgcGFnZS4KICAgIGVjaG8gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQiPicK ICAgICAgICAuJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMmNvbCI+JwogICAgICAgIC5oZWQo Z1R4dCgnc21kX2FkdGhfZWRpdF9sYmwnLCBhcnJheSgne3RoZW1lfScgPT4gKCgkc2tpbmZv KSA/ICRza2luZm9bJ2RuYW1lJ10gOiAkc2tpbikpKSwgMSkKICAgICAgICAuJzwvZGl2PicK ICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMmNvbCI+JwogICAgICAgIC5n cmFmKAogICAgICAgICAgICBocmVmKGdUeHQoJ3NtZF9hZHRoX2FsbF90aGVtZXMnKSwgJz9l dmVudD0nIC4gJHNtZF9hdF9ldmVudCwgYXJyYXkoJ2NsYXNzJyA9PiAnc21kX2F0X2J0bicp KQogICAgICAgICAgICAsIGFycmF5KCdjbGFzcycgPT4gJ3R4cC1hY3Rpb25zIHR4cC1hY3Rp b25zLWlubGluZScpCiAgICAgICAgKQogICAgICAgIC5uLiAnPC9kaXY+JwoKICAgICAgICAu bi4gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMWNvbCI+JwogICAgICAgIC5uLiAnPGRpdiBj bGFzcz0idHhwLWNvbnRyb2wtcGFuZWwiPicKICAgICAgICAubi4gJzxmb3JtIGFjdGlvbj0i aW5kZXgucGhwIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEi PicKICAgICAgICAubi4gaElucHV0KCdNQVhfRklMRV9TSVpFJywgJGZpbGVfbWF4X3VwbG9h ZF9zaXplKQogICAgICAgIC5uLiBoSW5wdXQoJ2lkJywgJHNraW4pCiAgICAgICAgLm4uIGVJ bnB1dCgkc21kX2F0X2V2ZW50KQogICAgICAgIC5uLiBzSW5wdXQoJ3NtZF9hdF91cGxvYWQn KQogICAgICAgIC5uLiB0SW5wdXQoKQogICAgICAgIC5uLiAnPGlucHV0IHR5cGU9ImZpbGUi IG5hbWU9InNtZF9hdF9maWxlW10iIG11bHRpcGxlPSJ0cnVlIiAvPicuc3AuZklucHV0KCdz dWJtaXQnLCAnJywgZ1R4dCgndXBsb2FkJykpCiAgICAgICAgLm4uIGdyYWYoJzxsYWJlbCBm b3I9InNtZF9hdF9mb2xkZXIiPicuZ1R4dCgnc21kX2FkdGhfZm9sZGVyJykuJzwvbGFiZWw+ JyAubi4gZklucHV0KCd0ZXh0JywgJ3NtZF9hdF9mb2xkZXInLCBwcygnc21kX2F0X2ZvbGRl cicpLCAnJywgJycsICcnLCBJTlBVVF9NRURJVU0sICcnLCAnc21kX2F0X2ZvbGRlcicpKQog ICAgICAgIC5uLiAnPC9mb3JtPicKICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAubi4g JzwvZGl2PicKCiAgICAgICAgLmpvaW4obiwgJGZpbGVMaXN0KS5uLiRmb2xkZXJMaXN0Lic8 L2Rpdj4nCiAgICAgICAgLic8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0LTRjb2wtM3NwYW4iIHJv bGU9InJlZ2lvbiI+JwogICAgICAgIC5mb3JtKAogICAgICAgICAgICBuLiAnPHAgY2xhc3M9 InR4cC1hY3Rpb25zIHR4cC1hY3Rpb25zLWlubGluZSI+JwogICAgICAgICAgICAubi4gJzxh IGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfbmV3ZmlsZScu YS4nc2tpbj0nLiRza2luLiciPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWV4dHJhLWljb24t bmV3LWRvY3VtZW50Ij48L3NwYW4+ICcuZ1R4dCgnc21kX2FkdGhfbmV3X2ZpbGUnKS4nPC9h PicKICAgICAgICAgICAgLm4uICc8L3A+JwogICAgICAgICAgICAubi4nPGRpdiBjbGFzcz0i dHhwLWZvcm0tZmllbGQiPicKICAgICAgICAgICAgLm4uJzxkaXYgY2xhc3M9InR4cC1mb3Jt LWZpZWxkLWxhYmVsIj4nCiAgICAgICAgICAgIC5uLic8bGFiZWwgZm9yPSJuZXdfc2tpbiI+ JyAuIGdUeHQoJ3NtZF9hZHRoX2ZpbGVfbmFtZScpIC4gJzwvbGFiZWw+JwogICAgICAgICAg ICAubi4nPC9kaXY+JwogICAgICAgICAgICAubi4nPGRpdiBjbGFzcz0idHhwLWZvcm0tZmll bGQtdmFsdWUiPicKICAgICAgICAgICAgLm4uJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmV3 X3NraW4iIG5hbWU9Im5ld19za2luIiB2YWx1ZT0iJy50eHBzcGVjaWFsY2hhcnMoJGZpbGUp LiciIHNpemU9IicuSU5QVVRfUkVHVUxBUi4nIiAvPicKICAgICAgICAgICAgLm4uKCRpc190 ZXh0aWxlID8gJzxhIGNsYXNzPSJzbWRfYXRfcHJldmlldyIgaHJlZj0iP2V2ZW50PScgLiAk c21kX2F0X2V2ZW50IC5hLiAnc3RlcD1zbWRfYXRfcHJldmlldycgLmEuICdza2luPScuJHNr aW4uYS4nZGlyPScuJGRpci5hLidmaWxlPScuJGZpbGUuYS4ndHlwZT10ZXh0aWxlJy5hLidf dHhwX3Rva2VuPScuZm9ybV90b2tlbigpLiciPicuZ1R4dCgncHJldmlldycpLic8L2E+JyA6 ICcnKQogICAgICAgICAgICAubi4oJGlzX3N2ZyA/ICc8YSBjbGFzcz0ic21kX2F0X3ByZXZp ZXciIGhyZWY9IicuIFRIRU1FIC4gJHNraW4uJy8nIC4gKCgkZGlyKSA/ICRkaXIuJy8nIDog JycpIC4gJGZpbGUgLiciPicuZ1R4dCgncHJldmlldycpLic8L2E+JyA6ICcnKQogICAgICAg ICAgICAubi4nPC9kaXY+JwogICAgICAgICAgICAubi4nPC9kaXY+JwogICAgICAgICAgICAu KCRzdGVwID09ICdzbWRfYXRfbmV3ZmlsZScKICAgICAgICAgICAgICAgID8gbi4nPGRpdiBj bGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAgICAgICAgICAgICAgICAgICAubi4nPGRpdiBj bGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPicKICAgICAgICAgICAgICAgICAgICAubi4n PGxhYmVsIGZvcj0ibmV3X3NraW5fZGlyIj4nIC4gZ1R4dCgnc21kX2FkdGhfZm9sZGVyX25h bWUnKSAuICc8L2xhYmVsPicKICAgICAgICAgICAgICAgICAgICAubi4nPC9kaXY+JwogICAg ICAgICAgICAgICAgICAgIC5uLic8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+ JwogICAgICAgICAgICAgICAgICAgIC5uLic8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ld19z a2luX2RpciIgbmFtZT0ibmV3X3NraW5fZGlyIiB2YWx1ZT0iJy50eHBzcGVjaWFsY2hhcnMo JGRpcikuJyIgc2l6ZT0iJy5JTlBVVF9SRUdVTEFSLiciIC8+JwogICAgICAgICAgICAgICAg ICAgIC5uLic8L2Rpdj4nCiAgICAgICAgICAgICAgICAgICAgLm4uJzwvZGl2PicKICAgICAg ICAgICAgICAgIDogJycKICAgICAgICAgICAgKQogICAgICAgICAgICAubi5ncmFmKAogICAg ICAgICAgICAgICAgJzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29kZSIg bmFtZT0ic21kX2F0X2VkaXRzIiBjb2xzPSInLklOUFVUX1hMQVJHRS4nIiByb3dzPSInLklO UFVUX1JFR1VMQVIuJyI+Jy50eHBzcGVjaWFsY2hhcnMoJGNvbnRlbnRzKS4nPC90ZXh0YXJl YT4nCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIC5uLmdyYWYoCiAgICAgICAgICAg ICAgICBmSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykKICAgICAg ICAgICAgKQogICAgICAgICAgICAubi5lSW5wdXQoJHNtZF9hdF9ldmVudCkKICAgICAgICAg ICAgLm4uc0lucHV0KCdzbWRfYXRfc2F2ZScpCiAgICAgICAgICAgIC5uLmhJbnB1dCgnc2tp bicsJHNraW4pCiAgICAgICAgICAgIC5uLmhJbnB1dCgnZmlsZScsJGZpbGUpCiAgICAgICAg ICAgIC5uLmhJbnB1dCgnZGlyJywkZGlyKQogICAgICAgICkKICAgICAgICAuJzwvZGl2PicK ICAgICAgICAuc2NyaXB0X2pzKCA8PDxFT1MKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5j dGlvbigpIHsKICAgIGpRdWVyeSgnI3NtZF9hdF9hbGxmaWxlcycpLnR4cE11bHRpRWRpdEZv cm0oewogICAgICAgICdjaGVja2JveCcgOiAnaW5wdXRbbmFtZT0ic2VsZWN0ZWRfZmlsZXNb XSJdW3R5cGU9Y2hlY2tib3hdJywKICAgICAgICAncm93JyA6ICcuc3dpdGNoZXItbGlzdCBs aScsCiAgICAgICAgJ2hpZ2hsaWdodGVkJyA6ICcuc3dpdGNoZXItbGlzdCBsaScKICAgIH0p Owp9KTsKalF1ZXJ5KCcjc21kX2F0X2VkaXRzJykua2V5dXAoZnVuY3Rpb24oKSB7CiAgICBq UXVlcnkoJy5zbWRfYXRfcHJldmlldycpLmhpZGUoKTsKfSk7CkVPUwogICAgICAgICkKICAg ICAgICAuJzwvZGl2PjwvZGl2Pic7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQov LyBKdXN0IGNsZWFyIG91dCB0aGUgdmFyIHNvIHRoZSBzYXZlIGZ1bmN0aW9uIHRyZWF0cyB0 aGUgY29udGVudCBhcyBhIG5ldyBmaWxlCmZ1bmN0aW9uIHNtZF9hdF9uZXdmaWxlKCkKewog ICAgJF9QT1NUWydmaWxlJ10gPSAnJzsKICAgICRtZXNzYWdlPScnOwogICAgc21kX2F0X2Vk aXQoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24g c21kX2F0X3ByZXZpZXcoKQp7CiAgICBleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tp bicsICdmaWxlJywgJ2RpcicsICd0eXBlJykpKSk7CgogICAgJGZwID0gJHNraW4uRFMuKCgk ZGlyKSA/ICRkaXIuRFMgOiAnJykuJGZpbGU7CgogICAgJHBhdGggPSBUSEVNRS4kZnA7CiAg ICAkb3V0ID0gJyc7CgogICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgIGNhc2UgJ3RleHRp bGUnOgogICAgICAgICAgICBAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFzc1RleHRp bGUucGhwJzsKCiAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ1RleHRpbGUnKSAmJiBm aWxlX2V4aXN0cygkcGF0aCkpIHsKICAgICAgICAgICAgICAgICR0ZXh0aWxlID0gbmV3IFRl eHRpbGUoKTsKICAgICAgICAgICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRz KCRwYXRoKTsKICAgICAgICAgICAgICAgICRvdXQgPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMo JGNvbnRlbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHBh Z2V0b3AoZ1R4dCgnc21kX2FkdGhfcHJldmlldycsIGFycmF5KCd7bmFtZX0nID0+ICRmcCkp KTsKICAgIGVjaG8gbiwnPGRpdiBpZD0ic21kX2F0X2NvbnRhaW5lciIgY2xhc3M9InR4cC1j b250YWluZXIgdHhwLXZpZXciPicsCiAgICAgICAgbiwnPGRpdiBjbGFzcz0idGV4dC1jb2x1 bW4iPicgLiAkb3V0IC4gJzwvZGl2PicsCiAgICAgICAgbiwnPC9kaXY+JzsKCiAgICAvL1RP RE86IGJhY2sgdG8gc21kX2F0X2VkaXQoKSBidXR0b24/Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQovLyBEbyB0aGUgZmlyc3QgNTEyIGJ5dGVzIGNvbnRhaW4gYSBkaXNwcm9w b3J0aW9uYXRlIHF1YW50aXR5IG9mIG5vbi1hc2NpaSBjaGFycz8KLy8gSGFja2VkIGZyb20g aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zODcyODc3L2hvdy10by1jaGVj ay1pZi11cGxvYWRlZC1maWxlLWlzLWJpbmFyeS1maWxlLCB0aGFua3MKZnVuY3Rpb24gc21k X2F0X2lzX2JpbmFyeSgkcGF0aCkKewogICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgewog ICAgICAgIGlmICghaXNfZmlsZSgkcGF0aCkpIHJldHVybiAwOwoKICAgICAgICAkZmggID0g Zm9wZW4oJHBhdGgsICJyIik7CiAgICAgICAgJGJsayA9IGZyZWFkKCRmaCwgNTEyKTsKICAg ICAgICBmY2xvc2UoJGZoKTsKICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOwoKICAgICAgICBy ZXR1cm4gKAogICAgICAgICAgICAwIG9yIHN1YnN0cl9jb3VudCgkYmxrLCAiXHgwMCIpID4g MAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIEhhY2tlZCBmcm9tIGh0dHA6Ly93d3cuYmluYXJ5dGlkZXMuY29tL2Js b2cvcGhwLWJlc3Qtd2F5LXRvLWNoZWNrLWlmLWZpbGUtaXMtYW4taW1hZ2UvLCB0aGFua3MK ZnVuY3Rpb24gc21kX2F0X2lzX2ltYWdlKCRwYXRoKQp7CiAgICAvLyBTaWxlbmNlIHdhcm5p bmdzIGluIGNhc2UgZmlsZSBpcyBub3QgcmVhZGFibGUgZHVlIHRvIHNwYWNlcyBvciBzb21l dGhpbmcKICAgICRhID0gQGdldGltYWdlc2l6ZSgkcGF0aCk7CiAgICAkaW1hZ2VfdHlwZSA9 ICRhWzJdOwoKICAgIGlmKGluX2FycmF5KCRpbWFnZV90eXBlICwgYXJyYXkoSU1BR0VUWVBF X0dJRiwgSU1BR0VUWVBFX0pQRUcsIElNQUdFVFlQRV9QTkcpKSkgewogICAgICAgIHJldHVy biB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2Nsb25lKCkKewogICAgZ2xvYmFsICR0eHBfdXNl cjsKCiAgICBleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicp KSkpOwogICAgJG1zZz0nJzsKCiAgICAkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7CiAg ICAkbmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsKCiAgICBpZiAoZW1wdHko JG5ld19za2luKSkgewogICAgICAgICRtc2cgPSBhcnJheShnVHh0KCdzbWRfYWR0aF9uYW1l X2VtcHR5JyksIEVfV0FSTklORyk7CiAgICB9CgogICAgLy8gQ2hlY2sgdGhlIG5ldyBuYW1l IGlzbid0IGFscmVhZHkgaW4gdXNlCiAgICAkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tpbnMo KTsKCiAgICBpZiAoaW5fYXJyYXkoJG5ld19za2luLCAkdGhlbWVzKSkgewogICAgICAgICRt c2cgPSBhcnJheShnVHh0KCdzbWRfYWR0aF9za2luX2V4aXN0cycsIGFycmF5KCd7bmFtZX0n ID0+ICRuZXdfc2tpbikpLCBFX0VSUk9SKTsKICAgIH0KCiAgICAvLyBObyBlcnJvcnMsIHNv IG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVhdGUgdGhlIFBIUCBmaWxlCiAgICBpZiAoJG1zZz09 JycpIHsKICAgICAgICAkY29udGVudCA9ICcnOwogICAgICAgICRkZXN0ZGlyID0gVEhFTUUu JG5ld19za2luLkRTOwogICAgICAgICRyZXMgPSBta2RpcigkZGVzdGRpcik7CiAgICAgICAg JGJhc2VkID0gJyc7CgogICAgICAgIGlmICgkc2tpbikgewogICAgICAgICAgICAvLyBCYXNl ZCBvbiBhbiBleGlzdGluZyB0aGVtZS4gTm8gbmVlZCBmb3IgYW55IGZ1bmN0aW9ucyBvdGhl ciB0aGFuIG1hbmlmZXN0KCkKICAgICAgICAgICAgJGJhc2VkID0gIlRoZW1lOjpiYXNlZF9v bignIi4kc2tpbi4iJyk7IjsKICAgICAgICAgICAgJGV4dGVuZHMgPSAkc2tpbi4nX3RoZW1l JzsKICAgICAgICAgICAgJHNyY3NzID0gVEhFTUUuJHNraW4uRFMuJ3RleHRwYXR0ZXJuLmNz cyc7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkc3Jjc3MpICYmIGZpbGVzaXplKCRz cmNzcykgPiAwKSB7CiAgICAgICAgICAgICAgICAkaW1wb3J0ID0gam9pbignJywgZmlsZSgk c3Jjc3MpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRpbXBvcnQg PSAnQGltcG9ydCB1cmwoIi4uL2hpdmUvYXNzZXRzL2Nzcy90ZXh0cGF0dGVybi5jc3MiKTsn OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb250ZW50ID0gJ3snOwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgIC8vIEJyYW5kIHNwYW5raW5nIG5ldyB0aGVtZS4gQ2xvbmUg J2hpdmUnIGZ1bmN0aW9ucyB0aGVuIGFkZCBuZXcgbWFuaWZlc3QoKQogICAgICAgICAgICAk ZXh0ZW5kcyA9ICdUaGVtZSc7CiAgICAgICAgICAgICRpbXBvcnQgPSAnJzsKICAgICAgICAg ICAgJHNyYyA9IHR4cGF0aC5EUy5USEVNRS4naGl2ZScuRFMuJ2hpdmUucGhwJzsKICAgICAg ICAgICAgJGdyYWIgPSBmYWxzZTsKICAgICAgICAgICAgJGZwID0gZmlsZSgkc3JjKTsKCiAg ICAgICAgICAgIGZvcmVhY2goJGZwIGFzICRsaW5lKSB7CiAgICAgICAgICAgICAgICAkbGlu ZSA9IHJ0cmltKCRsaW5lKTsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGxpbmUsICdm dW5jdGlvbiBtYW5pZmVzdCgpJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAg JGdyYWIgPSBmYWxzZTsgLy8gdW5uZWNlc3Nhcnk/CiAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGdyYWIpIHsKICAg ICAgICAgICAgICAgICAgICAkY29udGVudCAuPSAkbGluZS5uOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkbGluZSwgJ2NsYXNzIGhpdmVfdGhlbWUg ZXh0ZW5kcycpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRncmFiID0gdHJ1 ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg Ly8gbWFuaWZlc3QgZmllbGRzCiAgICAgICAgJG1hbnVzZXIgPSBkb1NsYXNoKGdldF9hdXRo b3JfbmFtZSgkdHhwX3VzZXIpKTsKICAgICAgICAkbWFudGl0bGUgPSBkb1NsYXNoKHVjd29y ZHMoJG5ld19za2luKSk7CgogICAgICAgIC8vIFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUKICAg ICAgICAkYnVmID0gPDw8RU9GCjw/cGhwCgp1c2UgXFRleHRwYXR0ZXJuXEFkbWluXFRoZW1l OwoKaWYgKCFkZWZpbmVkKCd0eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMg dW5kZWZpbmVkLicpOwoKeyRiYXNlZH0KCmNsYXNzIHskbmV3X3NraW59X3RoZW1lIGV4dGVu ZHMgeyRleHRlbmRzfQp7JGNvbnRlbnR9CgogICAgZnVuY3Rpb24gbWFuaWZlc3QoKQogICAg ewogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgJ3RpdGxlJyAgICAgICAgID0+ ICd7JG1hbnRpdGxlfScsCiAgICAgICAgICAgICdhdXRob3InICAgICAgICA9PiAneyRtYW51 c2VyfScsCiAgICAgICAgICAgICdhdXRob3JfdXJpJyAgICA9PiAnJywKICAgICAgICAgICAg J3ZlcnNpb24nICAgICAgID0+ICcxLjAnLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nICAg PT4gJycsCiAgICAgICAgICAgICdoZWxwJyAgICAgICAgICA9PiAnJywKICAgICAgICApOwog ICAgfQp9Cj8+CkVPRjsKCiAgICAgICAgJGZwID0gZm9wZW4oJGRlc3RkaXIuJG5ld19za2lu LicucGhwJywgIndiIik7CiAgICAgICAgZndyaXRlKCRmcCwgJGJ1Zik7CiAgICAgICAgZmNs b3NlKCRmcCk7CgogICAgICAgIC8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUKICAgICAgICAkZnAg PSBmb3BlbigkZGVzdGRpci4ndGV4dHBhdHRlcm4uY3NzJywgIndiIik7CiAgICAgICAgZndy aXRlKCRmcCwgJGltcG9ydCk7CiAgICAgICAgZmNsb3NlKCRmcCk7CgogICAgICAgIGlmICgk c2tpbikgewogICAgICAgICAgICAkbXNnID0gZ1R4dCgnc21kX2FkdGhfc2tpbl9jbG9uZWQn LCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7CiAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF9hZHRoX3NraW5fY3JlYXRlZCcsIGFycmF5KCd7 bmFtZX0nID0+ICRuZXdfc2tpbikpOzsKICAgICAgICB9CgovLyAgJG1zZyA9IGdUeHQoJ3Nr aW5fbm90X2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7CgogICAg fQoKICAgIHNtZF9hdF9saXN0KCRtc2cpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gc21kX2F0X2NydXNoX29wdGlvbnMoJHR5cGUgPSAnY29tcHJlc3MnKQp7 CiAgICBnbG9iYWwgJHBsdWdpbnM7CgogICAgJHNtZF9jcnVzaGVycyA9IGFycmF5KCk7Cgog ICAgaWYgKGlzX2FycmF5KCRwbHVnaW5zKSAmJiBpbl9hcnJheSgnc21kX2NydW5jaGVycycs ICRwbHVnaW5zKSkgewogICAgICAgICRjcnVuY2hlcnMgPSBzbWRfY3J1bmNoX2NhcGFiaWxp dGllcygkdHlwZSk7CiAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ3RhcicsICdnemlwJywgJ3pp cCcsICdiemlwMicpIGFzICRjbSkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGNtLCAk Y3J1bmNoZXJzKSkgewogICAgICAgICAgICAgICAgJHNtZF9jcnVzaGVyc1skY21dID0gZ1R4 dCgnc21kX2FkdGhfY18nLiRjbSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cgog ICAgcmV0dXJuICRzbWRfY3J1c2hlcnM7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBzbWRfYXRfZXhwb3J0KCkKewogICAgZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOwoKICAgICRhdF9wcmVmcyA9IHNtZF9hdF9nZXRf cHJlZnMoKTsKCiAgICAkbWVzc2FnZT0nJzsKICAgIGNoZGlyKFRIRU1FKTsKICAgICRza2lu Zm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOwogICAgJHJlcHMgPSBhcnJheSgKICAg ICAgICAne3RoZW1lfScgPT4gJHNraW4sCiAgICAgICAgJ3t2ZXJzaW9ufScgPT4gJHNraW5m b1sndmVyc2lvbiddLAogICAgKTsKICAgICRvdXQgPSBzdHJ0cigkYXRfcHJlZnNbJ3NtZF9h dF9maWxlbmFtZV9mb3JtYXQnXSwgJHJlcHMpOwoKICAgIC8vIENoZWNrIHRoZSBwYXNzZWQg Y29tcHJlc3Npb24gZm9ybWF0IGlzIHZhbGlkCiAgICAkY3J1c2hlcnMgPSBzbWRfYXRfY3J1 c2hfb3B0aW9ucygnY29tcHJlc3MnKTsKICAgIGlmICgkY3J1c2g9PScnIHx8ICRjcnVzaD09 J3VuZGVmaW5lZCcgfHwgIWFycmF5X2tleV9leGlzdHMoJGNydXNoLCAkY3J1c2hlcnMpKSB7 CiAgICAgICAgJG1zZyA9IGFycmF5KGdUeHQoJ3NtZF9hZHRoX3Vuc3VwcG9ydGVkX2NvbXBy ZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkY3J1c2gpKSwgRV9XQVJOSU5HKTsK ICAgICAgICBzbWRfYXRfbGlzdCgkbWVzc2FnZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK ICAgIHN3aXRjaCgkY3J1c2gpIHsKICAgICAgICBjYXNlICd6aXAnOgogICAgICAgICAgICAk emlwID0gbmV3IHNtZF9jcnVuY2hfemlwX2ZpbGUoJG91dC4nLnppcCcpOwogICAgICAgICAg ICBicmVhazsKICAgICAgICBjYXNlICdiemlwMic6CiAgICAgICAgICAgICR6aXAgPSBuZXcg c21kX2NydW5jaF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsKICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSAndGFyJzoKICAgICAgICAgICAgJHppcCA9IG5ldyBzbWRfY3J1bmNo X3Rhcl9maWxlKCRvdXQuJy50YXInKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSAnZ3ppcCc6CiAgICAgICAgICAgICR6aXAgPSBuZXcgc21kX2NydW5jaF9nemlwX2ZpbGUo JG91dC4nLnRneicpOwogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICAkemlwLT5zZXRf b3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1FLCAnb3ZlcndyaXRl JyA9PiAxLCAnaW5tZW1vcnknID0+IDEpKTsKICAgICR6aXAtPmFkZF9maWxlcygkc2tpbi5E Uy4nKi4qJyk7CiAgICAkemlwLT5leGNsdWRlX2ZpbGVzKCRza2luLkRTLicqLnN2bionKTsK ICAgICR6aXAtPmNyZWF0ZV9hcmNoaXZlKCk7CiAgICAkemlwLT5kb3dubG9hZF9maWxlKCk7 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfaW1wb3J0 KCkKewogICAgJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsKICAgICRmaWxl ID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddLCB0 eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSdd KSk7CiAgICAkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVNRTsKICAgICR1bmNydXNoZXJzID0g c21kX2F0X2NydXNoX29wdGlvbnMoJ2RlY29tcHJlc3MnKTsKICAgICRtZXNzYWdlPScnOwog ICAgJGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOwogICAgJGxhc3RwYXJ0ID0gY291bnQo JGluZm8pLTE7CiAgICAkZXh0ID0gJGluZm9bJGxhc3RwYXJ0XTsKCiAgICBpZiAoJG5hbWUg JiYgJGZpbGUpIHsKICAgICAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBhcnJheV9rZXlfZXhp c3RzKCd6aXAnLCAkdW5jcnVzaGVycykpIHsKICAgICAgICAgICAgJHppcCA9IG5ldyBzbWRf Y3J1bmNoX2RVbnppcDIoJGZpbGUpOwovLyAgICAgICAgICAkemlwLT5kZWJ1ZyA9IHRydWU7 CiAgICAgICAgICAgICR6aXAtPmdldExpc3QoKTsKICAgICAgICAgICAgJHZhbGlkQXJjaGl2 ZSA9IHNtZF9hdF9jaGVja19hcmNoaXZlKCR6aXAtPmNvbXByZXNzZWRMaXN0LCAkZXh0KTsK ICAgICAgICAgICAgaWYgKCR2YWxpZEFyY2hpdmUpIHsKICAgICAgICAgICAgICAgICR6aXAt PnVuemlwQWxsKCRiYXNlZGlyLCAnJywgdHJ1ZSwgMDc1NSk7CiAgICAgICAgICAgICAgICAk emlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdzbWRfYWR0 aF9pbXBvcnRfb2snKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRt ZXNzYWdlID0gYXJyYXkoZ1R4dCgnc21kX2FkdGhfaW1wb3J0X2ZhaWxlZCcpLCBFX0VSUk9S KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoJGV4dCA9PSAndGd6JyAmJiBh cnJheV9rZXlfZXhpc3RzKCdnemlwJywgJHVuY3J1c2hlcnMpKSB7CiAgICAgICAgICAgICR6 aXAgPSBuZXcgc21kX2NydW5jaF9nemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsKICAgICAg ICAgICAgJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAn b3ZlcndyaXRlJyA9PiAxKSk7CiAgICAgICAgICAgICR6aXAtPmV4dHJhY3RfZmlsZXMoKTsK ICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdzbWRfYWR0aF9pbXBvcnRfb2snKTsKICAg ICAgICB9IGVsc2UgaWYgKCRleHQgPT0gJ3RiejInICYmIGFycmF5X2tleV9leGlzdHMoJ2J6 aXAyJywgJHVuY3J1c2hlcnMpKSB7CiAgICAgICAgICAgICR6aXAgPSBuZXcgc21kX2NydW5j aF9iemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsKICAgICAgICAgICAgJHppcC0+c2V0X29w dGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7 CiAgICAgICAgICAgICR6aXAtPmV4dHJhY3RfZmlsZXMoKTsKICAgICAgICAgICAgJG1lc3Nh Z2UgPSBnVHh0KCdzbWRfYWR0aF9pbXBvcnRfb2snKTsKICAgICAgICB9IGVsc2UgaWYgKCRl eHQgPT0gJ3RhcicpIHsKICAgICAgICAgICAgJHppcCA9IG5ldyBzbWRfY3J1bmNoX3Rhcl9m aWxlKGJhc2VuYW1lKCRmaWxlKSk7CiAgICAgICAgICAgICR6aXAtPnNldF9vcHRpb25zKGFy cmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOwogICAgICAg ICAgICAkemlwLT5leHRyYWN0X2ZpbGVzKCk7CiAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4 dCgnc21kX2FkdGhfaW1wb3J0X29rJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg JG1lc3NhZ2UgPSBhcnJheShnVHh0KCdzbWRfYWR0aF91bnN1cHBvcnRlZF9jb21wcmVzc2lv bnR5cGUnLCBhcnJheSgne2NydXNofScgPT4gJGV4dCkpLCBFX1dBUk5JTkcpOwogICAgICAg IH0KCiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZQogICAgICAgIHVubGlu aygkZmlsZSk7CiAgICB9IGVsc2UgewogICAgICAgICRtZXNzYWdlID0gYXJyYXkoZ1R4dCgn c21kX2FkdGhfZW1wdHlfaW5mbycpLCBFX1dBUk5JTkcpOwogICAgfQoKICAgIHNtZF9hdF9s aXN0KCRtZXNzYWdlKTsKfQoKLy8gQ2hlY2sgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2Yg dGhlIGFyY2hpdmUgZm9yIHZhcmlvdXMgaXRlbXMvYXR0cmlidXRlcy4KLy8gRWFjaCB0aW1l IG9uZSBvZiB0aGUgY29uZGl0aW9ucyBpcyBtZXQsIHRoZSB2Y250IGlzIGluY3JlbWVtZW50 ZWQuCi8vIE9uY2UgdGhlIHdob2xlIGFyY2hpdmUgaGFzIGJlZW4gcmVhZCwgaWYgdGhlIHZj bnQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWRDb3VudHMgZm9yCi8vIHRoYXQgdHlwZSwgdGhlIGFy Y2hpdmUgaXMgdmFsaWQuCmZ1bmN0aW9uIHNtZF9hdF9jaGVja19hcmNoaXZlKCRzdHJ1Y3Qs ICR0eXBlID0gJ3ppcCcpCnsKICAgICRleHBlY3RlZENvdW50cyA9IGFycmF5KCd6aXAnID0+ IDEsICd0Z3onID0+IDAsICd0YnoyJyA9PiAwLCAndGFyJyA9PiAwKTsKICAgIHN3aXRjaCAo JHR5cGUpIHsKICAgICAgICBjYXNlICJ6aXAiOgogICAgICAgICAgICAkdmNudCA9IDA7CiAg ICAgICAgICAgIGZvcmVhY2ggKCRzdHJ1Y3QgYXMgJGVudHJ5ID0+ICRpbmZvKSB7CiAgICAg ICAgICAgICAgICAkcGFydHMgPSBwYXRoaW5mbygkaW5mb1snZmlsZV9uYW1lJ10pOwogICAg ICAgICAgICAgICAgaWYgKGlzc2V0KCRwYXJ0c1snZXh0ZW5zaW9uJ10pICYmICRwYXJ0c1sn ZXh0ZW5zaW9uJ10gPT0gJ3BocCcpIHsKICAgICAgICAgICAgICAgICAgICAkZGlyYml0cyA9 IGV4cGxvZGUoRFMsICRwYXJ0c1snZGlybmFtZSddKTsKICAgICAgICAgICAgICAgICAgICAk bnVtZGlycyA9IGNvdW50KCRkaXJiaXRzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoKCRw YXJ0c1snZmlsZW5hbWUnXSA9PSAkZGlyYml0c1skbnVtZGlycy0xXSkgJiYgJG51bWRpcnM9 PTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHZjbnQrKzsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJl YWs7CiAgICB9CgogICAgcmV0dXJuICgkZXhwZWN0ZWRDb3VudHNbJHR5cGVdID09ICR2Y250 KSA/IHRydWUgOiBmYWxzZTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0 aW9uIHNtZF9hdF9zYW5pdGl6ZV9mb2xkZXIoJHRleHQpCnsKICAgIC8vIFJlbW92ZSBjb250 cm9sIGNoYXJhY3RlcnMgYW5kICIgKiBcIDogPCA+ID8gfAogICAgJHRleHQgPSBwcmVnX3Jl cGxhY2UoJy9bXHgwMC1ceDFmXHgyMlx4MmFceDNhXHgzY1x4M2VceDNmXHg1Y1x4N2NceDdm XSsvJywgJycsICR0ZXh0KTsKICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZG90cyBhbmQgYW55 IGxlYWRpbmcgb3IgdHJhaWxpbmcgZG90cy9zcGFjZXMKICAgICR0ZXh0ID0gcHJlZ19yZXBs YWNlKCcvWy5dezIsfS8nLCAnLicsIHRyaW0oJHRleHQsICcuICcpKTsKICAgIC8vIFJlbW92 ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBzbGFzaAogICAgJHRleHQgPSB0cmltKCR0ZXh0 LCAnLycpOwogICAgcmV0dXJuICR0ZXh0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gc21kX2F0X3JybWRpcigkZGlyKQp7CiAgICBmb3JlYWNoKGdsb2IoJGRp ciAuICcvKicpIGFzICRmaWxlKSB7CiAgICAgICAgaWYoaXNfZGlyKCRmaWxlKSkKICAgICAg ICAgICAgc21kX2F0X3JybWRpcigkZmlsZSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB1 bmxpbmsoJGZpbGUpOwogICAgfQogICAgcm1kaXIoJGRpcik7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfdXBsb2FkKCkKewogICAgZ2xvYmFsICRm aWxlX21heF91cGxvYWRfc2l6ZTsKCiAgICBleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn aWQnLCAnc21kX2F0X2ZvbGRlcicpKSkpOwoKICAgICRfUE9TVFsnc2tpbiddID0gJHNraW4g PSAkaWQ7CiAgICAkZm9sZGVyID0gc21kX2F0X3Nhbml0aXplX2ZvbGRlcigkc21kX2F0X2Zv bGRlcik7CgogICAgJGZpbGVsaXN0ID0gJF9GSUxFU1snc21kX2F0X2ZpbGUnXVsnbmFtZSdd OwogICAgJG5hbWUgPSAkcG9zID0gTlVMTDsKICAgICRtZXNzYWdlPScnOwogICAgJHVwX2Nv dW50ID0gJGZhaWxfY291bnQgPSAwOwogICAgJHVwbG9hZGVkID0gYXJyYXkoKTsKCiAgICAk c2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsKICAgICRuZXdfc2tpbiA9ICRz a2luZm9bJ25hbWUnXTsKCiAgICBpZiAoJG5ld19za2luKSB7CiAgICAgICAgJG5ld3BhdGgg PSAkc2tpbmZvWydwYXRoJ10gLiAoKCRmb2xkZXIpID8gJGZvbGRlci4nLycgOiAnJyk7Cgog ICAgICAgIGlmICghZmlsZV9leGlzdHMoJG5ld3BhdGgpKSB7CiAgICAgICAgICAgIG1rZGly KCRuZXdwYXRoLCAwNzU1LCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRm aWxlbGlzdCBhcyAkcG9zID0+ICRuYW1lKSB7CiAgICAgICAgICAgIGlmICgkbmFtZSA9PSAn JykgY29udGludWU7CgogICAgICAgICAgICAkZmlsZSA9IGdldF91cGxvYWRlZF9maWxlKCRf RklMRVNbJ3NtZF9hdF9maWxlJ11bJ3RtcF9uYW1lJ11bJHBvc10pOwoKICAgICAgICAgICAg Ly8gU2tpcCBmaWxlcyB0aGF0IGFyZSB0b28gYmlnCiAgICAgICAgICAgICRzaXplID0gZmls ZXNpemUoJGZpbGUpOwogICAgICAgICAgICBpZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwg JHNpemUpIHsKICAgICAgICAgICAgICAgIHVubGluaygkZmlsZSk7CiAgICAgICAgICAgICAg ICAkZmFpbF9jb3VudCsrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg IH0KCiAgICAgICAgICAgIGlmICgkbmFtZSAmJiAkZmlsZSkgewogICAgICAgICAgICAgICAg aWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGguJG5hbWUpKSB7CiAgICAg ICAgICAgICAgICAgICAgY2htb2QoJG5ld3BhdGguJG5hbWUsIDA3NTUpOwogICAgICAgICAg ICAgICAgICAgICR1cF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICR1cGxvYWRlZFtd ID0gJG5hbWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg IHVubGluaygkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgJGZhaWxfY291bnQrKzsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbWVzc2Fn ZSA9IGdUeHQoJ3NtZF9hZHRoX3VwbG9hZF9yZXBvcnQnLCBhcnJheSgne251bV9zdWNjZXNz fScgPT4gJHVwX2NvdW50LCAne251bV9mYWlsfScgPT4gJGZhaWxfY291bnQsICd7dXBsb2Fk ZWR9JyA9PiBqb2luKCcsICcsICR1cGxvYWRlZCkpKTsKICAgIH0gZWxzZSB7CiAgICAgICAg JG1lc3NhZ2UgPSBhcnJheShnVHh0KCdzbWRfYWR0aF9lbXB0eV9pbmZvJyksIEVfV0FSTklO Ryk7CiAgICB9CgogICAgc21kX2F0X2VkaXQoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZSgpCnsKICAgIGdsb2JhbCAk c21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X2V2ZW50OwpkbXAoJ3J1bm5pbmcnKTsKICAgIGlm ICghaGFzX3ByaXZzKCRzbWRfYXRfZXZlbnQpKSB7CiAgICAgICAgc21kX2F0X2VkaXQoKTsK ICAgIH0KCiAgICBleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicpKSkpOwoKICAg ICRtZXNzYWdlID0gJyc7CgogICAgaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhl bWVzKSkgewogICAgICAgICRtZXNzYWdlID0gYXJyYXkoZ1R4dCgnc21kX2FkdGhfY29yZV90 aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSksIEVfRVJST1IpOwpkbXAoJ2lzY29y ZScsICRza2luLCAkbWVzc2FnZSk7CiAgICAgICAgc21kX2F0X2xpc3QoJG1lc3NhZ2UpOwog ICAgfSBlbHNlIHsKICAgICAgICAkc2tpbmRpciA9IFRIRU1FLiRza2luOwogICAgICAgIGlm ICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkc2tpbmRpcikpIHsKICAgICAgICAgICAgJG1lc3Nh Z2UgPSBhcnJheShnVHh0KCdzbWRfYWR0aF9kZWxldGVfZmFpbGVkJyksIEVfRVJST1IpOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgnc21kX2FkdGhf c2tpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNraW4pKTsKICAgICAgICB9Cgog ICAgICAgIC8vIEhhbmRsZSBzaXR1YXRpb25zIGlmIGN1cnJlbnQgc2tpbiBoYXMgYmVlbiBk ZWxldGVkCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJHNraW4p KSB7CiAgICAgICAgICAgICRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsKCiAgICAg ICAgICAgIC8vIFJlc2V0IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNlIGl0J3MgYmVlbiBkZWxl dGVkCiAgICAgICAgICAgICRnYmxfc2tpbiA9ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9z a2luJ107CiAgICAgICAgICAgICRnYmxfc2tpbiA9ICgkZ2JsX3NraW4gIT0gJycgJiYgZmls ZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRnYmxfc2tpbikpID8gJGdibF9za2luIDogJ2hp dmUnOwogICAgICAgICAgICBzZXRfcHJlZignc21kX2F0X2dsb2JhbF9za2luJywgJGdibF9z a2luLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsKICAgICAg ICAgICAgc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkZ2JsX3NraW4pOwoKICAgICAgICAgICAg JHNraW4gPSBnZXRfcHJlZignc21kX3NraW4nKTsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4 aXN0cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7CiAgICAgICAgICAgICAgICAkc2tpbiA9 ICRnYmxfc2tpbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZXRfcHJlZignc21kX3Nr aW4nLCAkc2tpbiwgJ3NtZF9hdCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBS RUZfUFJJVkFURSk7CiAgICAgICAgfQogICAgICAgICRfR0VUWydza2luJ10gPSAkc2tpbjsK ICAgICAgICAkX0dFVFsnbmV4dHN0ZXAnXSA9ICdzbWRfYXRfbGlzdCc7CiAgICAgICAgc21k X2F0X3N3aXRjaCgkbWVzc2FnZSk7CiAgICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBzbWRfYXRfZGVsZXRlX2ZpbGUoJHNraW4sICRkZWxmaWxlKQp7CiAg ICBnbG9iYWwgJHNtZF9jb3JlX3RoZW1lcywgJHNtZF9hdF9ldmVudDsKCiAgICBpZiAoIWhh c19wcml2cygkc21kX2F0X2V2ZW50KSkgewogICAgICAgIHNtZF9hdF9lZGl0KCk7CiAgICB9 CgogICAgJHJldCA9IGZhbHNlOwogICAgJHBhdGggPSBUSEVNRS4kc2tpbi5EUy4kZGVsZmls ZTsKICAgIGlmIChmaWxlX2V4aXN0cygkcGF0aCkgJiYgIWluX2FycmF5KCRza2luLCAkc21k X2NvcmVfdGhlbWVzKSkgewogICAgICAgICRyZXQgPSB1bmxpbmsoJHBhdGgpOwogICAgfQog ICAgcmV0dXJuICRyZXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBzbWRfYXRfZGVsZXRlX2ZvbGRlcigpCnsKICAgIGdsb2JhbCAkc21kX2NvcmVfdGhlbWVz LCAkc21kX2F0X2V2ZW50OwoKICAgIGlmICghaGFzX3ByaXZzKCRzbWRfYXRfZXZlbnQpKSB7 CiAgICAgICAgc21kX2F0X2VkaXQoKTsKICAgIH0KCiAgICBleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnc2tpbicsICdkZWxmb2xkZXInKSkpKTsKICAgICRtZXNzYWdlID0gJyc7Cgog ICAgJF9QT1NUWydza2luJ10gPSAkc2tpbjsKCiAgICBpZiAoZmlsZV9leGlzdHMoJGRlbGZv bGRlcikgJiYgIWluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgewogICAgICAg IHNtZF9hdF9ycm1kaXIoJGRlbGZvbGRlcik7CiAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdz bWRfYWR0aF9mb2xkZXJfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRkZWxmb2xkZXIp KTsKICAgIH0KCiAgICBzbWRfYXRfZWRpdCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfbXVsdGlfZWRpdCgpCnsKICAgIGdsb2Jh bCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X2V2ZW50OwoKICAgIGlmICghaGFzX3ByaXZz KCRzbWRfYXRfZXZlbnQpKSB7CiAgICAgICAgc21kX2F0X2VkaXQoKTsKICAgIH0KCiAgICAk bWVzc2FnZSA9ICcnOwogICAgJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOwogICAgJGZp bGVzID0gcHMoJ3NlbGVjdGVkX2ZpbGVzJyk7CiAgICAkc2tpbiA9IHBzKCdjcml0Jyk7IC8v IGJpdCBvZiBhIGhhY2ssIGJ1dCBtdWx0aV9lZGl0KCkgaGFzIGEgZml4ZWQgcGFyYW0gc2V0 CiAgICAkYWZmZWN0ZWQgPSBhcnJheSgpOwogICAgJF9QT1NUWydza2luJ10gPSAkc2tpbjsK CiAgICBpZiAoJGZpbGVzIGFuZCBpc19hcnJheSgkZmlsZXMpKSB7CiAgICAgICAgaWYgKCRt ZXRob2QgPT0gJ2RlbGV0ZScpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRu YW1lKSB7CiAgICAgICAgICAgICAgICBpZiAoc21kX2F0X2RlbGV0ZV9maWxlKCRza2luLCAk bmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAkYWZmZWN0ZWRbXSA9ICRuYW1lOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGFmZmVjdGVk KSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IGdUeHQoJ3NtZF9hZHRoX2ZpbGVzX2Rl bGV0ZWQnLCBhcnJheSgne2xpc3R9JyA9PiBqb2luKCcsICcsICRhZmZlY3RlZCkpKTsKICAg ICAgICAgICAgfQoKICAgICAgICAgICAgc21kX2F0X2VkaXQoJG1lc3NhZ2UpOwogICAgICAg IH0KICAgIH0gZWxzZSB7CiAgICAgICAgc21kX2F0X2VkaXQoKTsKICAgIH0KfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9zYXZlKCkKewogICAgZXh0 cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCduZXdfc2tpbicsJ25ld19za2luX2Rp cicsJ2ZpbGUnLCdkaXInLCdzbWRfYXRfZWRpdHMnKSkpKTsKCiAgICBsaXN0KCRlZGl0YWJs ZSwgJGltYWdhYmxlKSA9IHNtZF9hdF92YWxpZF90eXBlcygpOwogICAgJG1lc3NhZ2UgPSAk ZXh0cmFNc2cgPSAnJzsKICAgICRmaWxlID0gdHJpbSgkZmlsZSk7CiAgICAkbmV3X3NraW4g PSB0cmltKCRuZXdfc2tpbik7CiAgICAkdHJpbURpciA9IHRyaW0oJG5ld19za2luX2Rpcik7 CiAgICAkbmV3X3NraW5fZGlyID0gdHJpbSgkdHJpbURpciwgRFMpOwogICAgJG1zZ2xldiA9 IDA7CgogICAgLy8gTmV3IGZpbGUKICAgIGlmICghJGZpbGUgJiYgJG5ld19za2luKSB7CiAg ICAgICAgJGZpbGUgPSAkbmV3X3NraW47CiAgICAgICAgJGRpciA9ICRuZXdfc2tpbl9kaXI7 CiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pOwoK ICAgICAgICBpZiAoc3RydG9sb3dlcigkZmlsZSkgIT0gJ3JlYWRtZScgJiYgKCRleHQgPT0g JycgfHwgIWluX2FycmF5KCRleHQsICRlZGl0YWJsZSkpKSB7CiAgICAgICAgICAgICRtZXNz YWdlID0gZ1R4dCgnc21kX2FkdGhfdW5zdXBwb3J0ZWRfZmlsZXR5cGUnKS5nVHh0KCdzbWRf YWR0aF91bnN1cHBvcnRlZF9mdWRnZScpOwogICAgICAgICAgICAkbXNnbGV2ID0gRV9XQVJO SU5HOwogICAgICAgICAgICAkX1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOwogICAgICAgICAgICAk X1BPU1RbJ2RpciddID0gJGRpcjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRtZXNzYWdl ID09ICcnKSB7CiAgICAgICAgJGZuYW1lID0gc2FuaXRpemVGb3JGaWxlKCRmaWxlKTsKICAg ICAgICAkbmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsKICAgICAgICAkX1BP U1RbJ25ld19za2luJ10gPSAkbmV3X3NraW47CgogICAgICAgICRzbWRfYXRfZWRpdHMgPSBk b1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnCicsJHNtZF9hdF9lZGl0cykpOyAvLyBuZXds aW5lIHdvcmthcm91bmQKCiAgICAgICAgaWYgKCRmbmFtZSkgewogICAgICAgICAgICAkZmls ZXBhdGggPSBUSEVNRS4kc2tpbi5EUy4kZGlyLkRTOwogICAgICAgICAgICBpZiAoIWZpbGVf ZXhpc3RzKCRmaWxlcGF0aC4kZm5hbWUpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWZpbGVf ZXhpc3RzKCRmaWxlcGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICBta2RpcigkZmlsZXBh dGgsIDA3NTUsIHRydWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRy ZXQgPSB0b3VjaCgkZmlsZXBhdGguJGZuYW1lKTsKICAgICAgICAgICAgICAgIGlmICgkcmV0 ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgnc21k X2FkdGhfbWtkaXJfZmFpbGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZuYW1lKSk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEFzc3VtaW5nIG5v IGVycm9ycyBzbyBmYXIuLi4KICAgICAgICAgICAgaWYgKCRtZXNzYWdlID09ICcnKSB7CiAg ICAgICAgICAgICAgICAkZmggPSBmb3BlbigkZmlsZXBhdGguJGZuYW1lLCAnd2InKTsKICAg ICAgICAgICAgICAgIGZ3cml0ZSgkZmgsICRzbWRfYXRfZWRpdHMpOwogICAgICAgICAgICAg ICAgZmNsb3NlKCRmaCk7CgogICAgICAgICAgICAgICAgaWYgKCRmbmFtZSAhPSAkbmV3X3Nr aW4pIHsKICAgICAgICAgICAgICAgICAgICAvLyBSZW5hbWUgdGhlIGZpbGUKICAgICAgICAg ICAgICAgICAgICAkcmVzID0gcmVuYW1lKCRmaWxlcGF0aC4kZm5hbWUsICRmaWxlcGF0aC4k bmV3X3NraW4pOwoKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVuYW1lZCBmaWxl IGlzIHRoZSB0aGVtZSdzIFBIUCBmaWxlLCB0cnkgdG8gcmVuYW1lIHRoZSBtYWluIHNraW4g ZGlyIHRvbwogICAgICAgICAgICAgICAgICAgICRmaWxlYml0cyA9IGV4cGxvZGUoJy4nLCAk bmV3X3NraW4pOwogICAgICAgICAgICAgICAgICAgICRvbGRmaWxlYml0cyA9IGV4cGxvZGUo Jy4nLCAkZm5hbWUpOwogICAgICAgICAgICAgICAgICAgICRleHQgPSBhcnJheV9wb3AoJGZp bGViaXRzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJlcyAmJiAkZXh0ID09ICdwaHAn ICYmICgkb2xkZmlsZWJpdHNbMF0gPT0gJHNraW4pKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICRuZXdfZmlsZXBhdGggPSBUSEVNRS4kZmlsZWJpdHNbMF0uRFM7CiAgICAgICAgICAg ICAgICAgICAgICAgICRyZW4gPSByZW5hbWUoJGZpbGVwYXRoLCAkbmV3X2ZpbGVwYXRoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGVwYXRoID0gKCRyZW4pID8gJG5ld19maWxl cGF0aCA6ICRmaWxlcGF0aDsKICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydza2lu J10gPSAkZmlsZWJpdHNbMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICRleHRyYU1zZyA9ICgkcmVzKSA/IGdUeHQoJ3NtZF9hZHRoX3JlbmFtZWQnLCBh cnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKSA6IGdUeHQoJ3NtZF9hZHRoX3JlbmFtZV9m YWlsZWQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBQcm9jZXNz IGFueSBjc3MgcmVwbGFjZW1lbnRzCiAgICAgICAgICAgICAgICAkZmlsZWJpdHMgPSBleHBs b2RlKCcuJywoKCRmbmFtZT09JG5ld19za2luKT8gJGZuYW1lIDogJG5ld19za2luKSk7CiAg ICAgICAgICAgICAgICAkY3NzZmlsZSA9ICRmaWxlYml0c1swXTsKICAgICAgICAgICAgICAg ICRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsKICAgICAgICAgICAgICAgIGlmICgkZXh0 ID09ICdzc2MnKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcGxhY2VtZW50cyA9IGFycmF5 KCk7CiAgICAgICAgICAgICAgICAgICAgJG51bV9yZXAxID0gcHJlZ19tYXRjaF9hbGwoJy8o XEBbQS1aYS16MC05X10rKTpccyooLiopOy8nLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczEp OwogICAgICAgICAgICAgICAgICAgICRudW1fcmVwMiA9IHByZWdfbWF0Y2hfYWxsKCcvKFxA W0EtWmEtejAtOV9dKyk6XHMqXHsoLio/KVx9L3MnLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hl czIpOwoKICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcmVwbGFjZW1lbnRzCiAgICAg ICAgICAgICAgICAgICAgZm9yZWFjaCgkbWF0Y2hlczEgYXMgJGlkeCA9PiAkcmVwYXJyKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaWR4ID09IDApIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25zCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVwYXJyIGFzICRyZXApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2Uo JHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCRpZHggPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJl cGFyciBhcyAkamR4ID0+ICRyZXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkcmVwbGFjZW1lbnRzWyRyZXBdID0gJG1hdGNoZXMxWzJdWyRqZHhdOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1saW5lIHJlcGxh Y2VtZW50cwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJG1hdGNoZXMyIGFzICRpZHgg PT4gJHJlcGFycikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlkeCA9PSAwKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHZhciBkZWZpbml0 aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlcGFyciBhcyAk cmVwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNtZF9hdF9lZGl0cyA9 IHN0cl9yZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgkaWR4ID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJHJlcGxhY2VtZW50c1skcmVwLic7J10gPSB0cmltKCRtYXRjaGVz MlsyXVskamR4XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg ICAgIC8vIEdlbmVyYXRlIGFuZCB3cml0ZSB0aGUgbmV3IGNzcyBmaWxlCiAgICAgICAgICAg ICAgICAgICAgJHJlcERvbmUgPSBzdHJ0cigkc21kX2F0X2VkaXRzLCAkcmVwbGFjZW1lbnRz KTsKICAgICAgICAgICAgICAgICAgICAkc21kX2F0X2VkaXRzID0gdHJpbSgkcmVwRG9uZSk7 CiAgICAgICAgICAgICAgICAgICAgJGZoID0gZm9wZW4oJGZpbGVwYXRoLiRjc3NmaWxlLicu Y3NzJywgJ3diJyk7CiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRmaCwgJHNtZF9hdF9l ZGl0cyk7CiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmaCk7CiAgICAgICAgICAgICAg ICAgICAgaWYgKCRmbmFtZSAhPSAkbmV3X3NraW4pIHsKICAgICAgICAgICAgICAgICAgICAg ICAgJG9sZGZuYW1lID0gZXhwbG9kZSgnLicsICRmbmFtZSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICRvbGRmbmFtZSA9ICRvbGRmbmFtZVswXS4nLmNzcyc7CiAgICAgICAgICAgICAg ICAgICAgICAgICRyZXMgPSBAdW5saW5rKCRmaWxlcGF0aC4kb2xkZm5hbWUpOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbWVz c2FnZSA9IGdUeHQoJ3NtZF9hZHRoX2ZpbGVfc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAk Zm5hbWUpKS5ici4kZXh0cmFNc2c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAg ICBzbWRfYXRfZWRpdChhcnJheSgkbWVzc2FnZSwgJG1zZ2xldikpOwp9CgoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi8vIFBSRUZTCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQovLyBHZXQgY3VycmVudCBwcmVmIHZhbHVlIG9yIGRlZmF1bHQgZm9yIGVhY2gga25vd24g cHJlZgpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByZWZzKCRmb3JjZSA9IDApCnsKICAgIGdsb2Jh bCAkcHJlZnM7CgogICAgJHNtZF9hdF9wcmVmcyA9IGFycmF5KAogICAgICAgICdzbWRfYXRf Y2FzZV9zb3J0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAneWVzbm9y YWRpbycsCiAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMTAsCiAgICAgICAgICAgICdkZWZh dWx0JyAgPT4gJzEnLAogICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdzbWRfYXRfc2V0dGlu Z3MnLAogICAgICAgICksCiAgICAgICAgJ3NtZF9hdF9jcnVzaCcgPT4gYXJyYXkoCiAgICAg ICAgICAgICdodG1sJyAgICAgPT4gJ3JhZGlvc2V0JywKICAgICAgICAgICAgJ3Bvc2l0aW9u JyA9PiAyMCwKICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAnemlwJywKICAgICAgICAgICAg J2dyb3VwJyAgICA9PiAnc21kX2F0X3NldHRpbmdzJywKICAgICAgICApLAogICAgICAgICdz bWRfYXRfdHcnID0+IGFycmF5KAogICAgICAgICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lu cHV0JywKICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAzMCwKICAgICAgICAgICAgJ2RlZmF1 bHQnICA9PiAnMjYwJywKICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnc21kX2F0X3NldHRp bmdzJywKICAgICAgICApLAogICAgICAgICdzbWRfYXRfdGgnID0+IGFycmF5KAogICAgICAg ICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywKICAgICAgICAgICAgJ3Bvc2l0aW9u JyA9PiA0MCwKICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAnMTUwJywKICAgICAgICAgICAg J2dyb3VwJyAgICA9PiAnc21kX2F0X3NldHRpbmdzJywKICAgICAgICApLAogICAgICAgICdz bWRfYXRfZmlsZW5hbWVfZm9ybWF0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ2h0bWwnICAg ICA9PiAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICdwb3NpdGlvbicgPT4gNjAsCiAgICAg ICAgICAgICdkZWZhdWx0JyAgPT4gJ3t0aGVtZX0nLAogICAgICAgICAgICAnZ3JvdXAnICAg ID0+ICdzbWRfYXRfc2V0dGluZ3MnLAogICAgICAgICksCiAgICAgICAgJ3NtZF9hdF9tYXhf dGhlbWVfc2l6ZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdodG1sJyAgICAgPT4gJ3RleHRf aW5wdXQnLAogICAgICAgICAgICAncG9zaXRpb24nID0+IDcwLAogICAgICAgICAgICAnZGVm YXVsdCcgID0+ICg1MDAgKiAxMDI0KSwKICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnc21k X2F0X3NldHRpbmdzJywKICAgICAgICApLAogICAgICAgICdzbWRfYXRfbGF5b3V0JyA9PiBh cnJheSgKICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAncmFkaW9zZXQnLAogICAgICAgICAg ICAncG9zaXRpb24nID0+IDgwLAogICAgICAgICAgICAnZGVmYXVsdCcgID0+ICcxJywKICAg ICAgICAgICAgJ2dyb3VwJyAgICA9PiAnc21kX2F0X3NldHRpbmdzJywKICAgICAgICApLAog ICAgICAgICdzbWRfYXRfc3lzdGVtJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2h0bWwnICAg ICA9PiAncmFkaW9zZXQnLAogICAgICAgICAgICAncG9zaXRpb24nID0+IDkwLAogICAgICAg ICAgICAnZGVmYXVsdCcgID0+ICcwJywKICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnc21k X2F0X3NldHRpbmdzJywKICAgICAgICApLAogICAgICAgICdzbWRfYXRfZ2xvYmFsX3NraW4n ID0+IGFycmF5KAogICAgICAgICAgICAnaHRtbCcgICAgID0+ICdzZWxlY3RsaXN0JywKICAg ICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMDAsCiAgICAgICAgICAgICdkZWZhdWx0JyAgPT4g JycsCiAgICAgICAgICAgICdncm91cCcgICAgPT4gJ3NtZF9hdF9zZXR0aW5ncycsCiAgICAg ICAgKSwKICAgICAgICAnc21kX2F0X2dyb3VwX2xpc3QnID0+IGFycmF5KAogICAgICAgICAg ICAnaHRtbCcgICAgID0+ICdsaXN0JywKICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMTAs CiAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJycsCiAgICAgICAgICAgICdncm91cCcgICAg PT4gJ3NtZF9hdF9zZXR0aW5ncycsCiAgICAgICAgKSwKICAgICAgICAnc21kX2F0X3VzZXJf bGlzdCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdodG1sJyAgICAgPT4gJ2xpc3QnLAogICAg ICAgICAgICAncG9zaXRpb24nID0+IDEyMCwKICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAn JywKICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnc21kX2F0X3NldHRpbmdzJywKICAgICAg ICApLAogICAgKTsKCiAgICAkYXRfcHJlZnMgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJHNt ZF9hdF9wcmVmcyBhcyAka2V5ID0+ICRwcmVmYXJyKSB7CiAgICAgICAgJGF0X3ByZWZzWyRr ZXldID0gZ2V0X3ByZWYoJGtleSwgJycsICRmb3JjZSk7CiAgICAgICAgaWYgKCRhdF9wcmVm c1ska2V5XSA9PSAnJykgewogICAgICAgICAgICAkYXRfcHJlZnNbJGtleV0gPSAkcHJlZmFy clsnZGVmYXVsdCddOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkYXRfcHJlZnM7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfb3B0aW9ucygk ZXZlbnQsICRzdGVwLCAkbWVzc2FnZSA9ICcnKQp7CiAgICBzbWRfYXRfc2V0dXAoJG1lc3Nh Z2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0X3Nl dHVwKCRtZXNzYWdlID0gJycpCnsKICAgIGdsb2JhbCAkc21kX2F0X2V2ZW50LCAkdGhlbWUs ICRzbWRfY29yZV90aGVtZXM7CgogICAgJHNtZF9hdF9zdHlsZXMgPSBzbWRfYXRfZ2V0X3N0 eWxlX3J1bGVzKCk7CiAgICAkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKDEpOwoKICAg IHBhZ2V0b3AoZ1R4dCgnc21kX2FkdGhfcHJlZnNfdGl0bGUnKSwkbWVzc2FnZSk7CgogICAg JGxldmVscyA9IGdldF9ncm91cHMoKTsKICAgIHVuc2V0KCRsZXZlbHNbMV0pOyAvLyBQdWJs aXNoZXJzIGdldCBzcGVjaWFsIHByaXZzIGFwYXJ0IGZyb20gdGhlIG1hc3NlcwogICAgJG51 bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsKCiAgICAvLyBTcGxpdCB0aGUgdXNlciBza2luIGxp c3QKICAgICR1c2tpbnMgPSBleHBsb2RlKCcsJywgJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9s aXN0J10pOwoKICAgICRsYXlvdXQgPSAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXTsKICAg ICRjbHJCdG4gPSAnIFs8c3BhbiBpZD0ic21kX2NsciIgY2xhc3M9InNtZF9mYWtlYnRuIj4n LmdUeHQoJ3NtZF9hZHRoX2NsZWFyJykuJzwvc3Bhbj5dJzsKICAgICRidG5TZXQgPSBmSW5w dXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzbWRfYWR0aF9zZXQnKSwgJ3B1Ymxpc2gn KTsKICAgICRidG5TYXZlID0gZ3JhZihmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdzYXZlJyksICdwdWJsaXNoJykpOwogICAgJGJ0bkxpc3QgPSBncmFmKAogICAgICAgIGhy ZWYoZ1R4dCgnc21kX2FkdGhfYWxsX3RoZW1lcycpLCAnP2V2ZW50PScgLiAkc21kX2F0X2V2 ZW50LCBhcnJheSgnY2xhc3MnID0+ICdzbWRfYXRfYnRuJykpCiAgICAgICAgLCBhcnJheSgn Y2xhc3MnID0+ICd0eHAtYWN0aW9ucyB0eHAtYWN0aW9ucy1pbmxpbmUnKQogICAgKTsKICAg ICRyYWRCdG5zID0gYXJyYXkoCiAgICAgICAgZ1R4dCgnc21kX2FkdGhfcGVyX3NpdGUnKSwK ICAgICAgICBnVHh0KCdzbWRfYWR0aF9wZXJfZ3JvdXAnKSwKICAgICAgICBnVHh0KCdzbWRf YWR0aF9wZXJfdXNlcicpLAogICAgKTsKCiAgICAkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRf c2tpbnMoKTsKCiAgICAvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1 ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UKICAgICRza2luc2VsID0gYXJyYXkoKTsK CiAgICBmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgewogICAgICAg IGlmIChzbWRfYXRfZXhpc3RzKCR2YWx1ZTEpKSB7CiAgICAgICAgICAgICRza2luc2VsWyR2 YWx1ZTFdID0gJHNraW5fbGlzdFska2V5MV07CiAgICAgICAgfQogICAgfQoKICAgICRnYmxf c2tpbiA9ICgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9w cmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhlbWUtPm5hbWU7CiAgICAkY3J1c2hl cnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygnY29tcHJlc3MnKTsKCiAgICBlY2hvIG4uICc8 ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0Ij4nCiAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0i dHhwLWxheW91dC0yY29sIj4nCiAgICAgICAgICAgIC5uLiAnPGgxIGNsYXNzPSJ0eHAtaGVh ZGluZyI+Jy5nVHh0KCdzbWRfYWR0aF9wcmVmc190aXRsZScpLic8L2gxPicKICAgICAgICAg ICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxheW91 dC0yY29sIj4nCiAgICAgICAgICAgIC5uLiAkYnRuTGlzdAogICAgICAgICAgICAubi4gJzwv ZGl2PicKICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMWNvbCI+JwogICAg ICAgIC5uLiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0idHhwLWVkaXQiIGFjdGlvbj0i P2V2ZW50PScsICRzbWRfYXRfZXZlbnQsIGEsICdzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUi IG9uc3VibWl0PSJyZXR1cm4gc21kX3ByZXN1YigpOyI+JwogICAgICAgIC5uLiBpbnB1dExh YmVsKCdzbWRfYXRfY2FzZV9zb3J0JywgeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcs ICRhdF9wcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSwgJ3NtZF9hdF9jYXNlX3NvcnQnKTsK CiAgICBpZiAoJGNydXNoZXJzKSB7CiAgICAgICAgZWNobyBuLiBpbnB1dExhYmVsKCdzbWRf YXRfY3J1c2gnLCByYWRpb1NldCgkY3J1c2hlcnMsICdzbWRfYXRfY3J1c2gnLCAkYXRfcHJl ZnNbJ3NtZF9hdF9jcnVzaCddKSwgJ3NtZF9hdF9jcnVzaF90eXBlJyk7CiAgICB9CgogICAg ZWNobyBuLiBpbnB1dExhYmVsKCdzbWRfYXRfbGF5b3V0JywgcmFkaW9TZXQoYXJyYXkoZ1R4 dCgnc21kX2FkdGhfbGF5b3V0X2xpc3QnKSwgZ1R4dCgnc21kX2FkdGhfbGF5b3V0X2dyaWQn KSksICdzbWRfYXRfbGF5b3V0JywgJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pLCAnc21k X2F0X2xheW91dCcpCiAgICAgICAgLm4uIGlucHV0TGFiZWwoJ3NtZF9hdF90aHVtYnNpemUn LCBmSW5wdXQoJ3RleHQnLCAnc21kX2F0X3R3JywgJGF0X3ByZWZzWydzbWRfYXRfdHcnXSwn aW5wdXQteHNtYWxsJywnJywnJyw0KS5uLmdUeHQoJ3NtZF9hZHRoX3RpbWVzJykubi5mSW5w dXQoJ3RleHQnLCAnc21kX2F0X3RoJywgJGF0X3ByZWZzWydzbWRfYXRfdGgnXSwnaW5wdXQt eHNtYWxsJywnJywnJyw0KSwgJ3NtZF9hdF90aHVtYnNpemUnKQogICAgICAgIC5uLiBpbnB1 dExhYmVsKCdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JywgZklucHV0KCd0ZXh0JywgJ3NtZF9h dF9maWxlbmFtZV9mb3JtYXQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQn XSksICdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JykKICAgICAgICAubi4gaW5wdXRMYWJlbCgn c21kX2F0X21heF90aGVtZV9zaXplJywgZklucHV0KCd0ZXh0JywgJ3NtZF9hdF9tYXhfdGhl bWVfc2l6ZScsICRhdF9wcmVmc1snc21kX2F0X21heF90aGVtZV9zaXplJ10pLCAnc21kX2F0 X21heF90aGVtZV9zaXplJykKICAgICAgICAubi4gaW5wdXRMYWJlbCgnc21kX2F0X2dsb2Jh bF9za2luJywgc2VsZWN0SW5wdXQoJ3NtZF9hdF9nbG9iYWxfc2tpbicsICRza2luc2VsLCAk Z2JsX3NraW4sIDAsIDAsICdzbWRfYXRfZ2xvYmFsX3NraW4nKSwgJ3NtZF9hdF9nbG9iYWxf c2tpbicpCiAgICAgICAgLm4uIGlucHV0TGFiZWwoJ3NtZF9hdF9za2luX3N5c3RlbScsIHJh ZGlvU2V0KCRyYWRCdG5zLCAnc21kX2F0X3N5c3RlbScsICRhdF9wcmVmc1snc21kX2F0X3N5 c3RlbSddKSwgJ3NtZF9hdF9za2luX3N5c3RlbScpOwoKICAgIC8vIE9wdGlvbiAxCiAgICAk cHJpdl9saXN0ID0gJzxzZWxlY3QgaWQ9InNtZF9hdF9wcml2cyIgbmFtZT0ic21kX2F0X3By aXZzW10iIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLiciIG11bHRpcGxlPSJtdWx0 aXBsZSI+JzsKCiAgICBmb3JlYWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkg ewogICAgICAgICRwcml2X2xpc3QgLj0gJzxvcHRpb24gdmFsdWU9IicuJGxldmlkLiciPicu JGxldm5hbWUuJzwvb3B0aW9uPic7CiAgICB9CgogICAgJHByaXZfbGlzdCAuPSAnPC9zZWxl Y3Q+JzsKCiAgICAvLyBOb3RlIHRoZSBoaWRkZW4gc2tpbiBncm91cCBib3g7IGpRdWVyeSBr ZWVwcyB0cmFjayBvZiBhbnkgbGlzdCBjaGFuZ2VzIGFuZCBrZWVwcyBpdCB1cGRhdGVkCiAg ICAkc2VsYSA9ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsPicg LiBnVHh0KCdzbWRfYWR0aF9za2luX2dyb3VwcycpIC4gJzwvbGFiZWw+PC9kaXY+JzsKICAg ICRzZWxiID0gaElucHV0KCdzbWRfYXRfZ3JvdXBfbGlzdCcsICRhdF9wcmVmc1snc21kX2F0 X2dyb3VwX2xpc3QnXSk7CiAgICAkc2VsYiAuPSAnPHNlbGVjdCBpZD0ic21kX2F0X2dycHMi IG5hbWU9InNtZF9hdF9ncnBzIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIj4n OwoKICAgIGZvcmVhY2ggKCRza2luX2xpc3QgYXMgJGFza2luKSB7CiAgICAgICAgaWYgKHNt ZF9hdF9leGlzdHMoJGFza2luKSkgewogICAgICAgICAgICAkc2VsYiAuPSAnPG9wdGlvbiB2 YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7CiAgICAgICAgfQogICAg fQoKICAgICRzZWxiIC49ICc8L3NlbGVjdD4nOwoKICAgIGVjaG8gbi4gJzxkaXYgY2xhc3M9 InR4cC1mb3JtLWZpZWxkIHNtZF9hdF9zZWwxIj4nIC4kc2VsYS4nPGRpdiBjbGFzcz0idHhw LWZvcm0tZmllbGQtdmFsdWUiPicuJHNlbGIuJHByaXZfbGlzdC4nPC9kaXY+PC9kaXY+JzsK CiAgICAvLyBPcHRpb24gMgogICAgJHNlbGEgPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmll bGQtbGFiZWwiPjxsYWJlbD4nIC4gZ1R4dCgnc21kX2FkdGhfYWxsb3dlZF9za2lucycpIC4g JzwvbGFiZWw+PC9kaXY+JzsKICAgICRzZWxiID0gJzxzZWxlY3QgaWQ9InNtZF9hdF91c2Vy X2xpc3QiIG5hbWU9InNtZF9hdF91c2VyX2xpc3RbXSIgY2xhc3M9Imxpc3QiIHNpemU9Ijgi IG11bHRpcGxlPSJtdWx0aXBsZSI+JzsKCiAgICBmb3JlYWNoICgkc2tpbl9saXN0IGFzICRh c2tpbikgewogICAgICAgIGlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsKICAgICAgICAg ICAgJHNlbGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2luLiciJy4oKGluX2FycmF5KCRh c2tpbiwgJHVza2lucykpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPicuJGFz a2luLic8L29wdGlvbj4nOwogICAgICAgIH0KICAgIH0KCiAgICAkc2VsYiAuPSAnPC9zZWxl Y3Q+Jy4kY2xyQnRuOwoKICAgIGVjaG8gbi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxk IHNtZF9hdF9zZWwyIj4nIC4kc2VsYS4nPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFs dWUiPicuJHNlbGIuJzwvZGl2PjwvZGl2PicKICAgICAgICAubi4gJGJ0blNhdmUKICAgICAg ICAubi4gdElucHV0KCkKICAgICAgICAubi4gJzwvZm9ybT4nCiAgICAgICAgLm4uICc8L2Rp dj48L2Rpdj4nOwoKICAgIGVjaG8gc2NyaXB0X2pzKDw8PEVPSlMKLy8gSGFuZGxlIHNob3cv aGlkZSBvZiBwcmVmIHdpZGdldHMgYmFzZWQgb24gcmFkaW8gc2VsZWN0aW9uCmZ1bmN0aW9u IHNtZF9hdF9wcmVmc3dhcChzZWxWYWx1ZSkgewogICAgZm9yIChpZHg9MDsgaWR4IDwgMzsg aWR4KyspIHsKICAgICAgICBpZiAoaWR4PT1zZWxWYWx1ZSkgewogICAgICAgICAgICBqUXVl cnkoIi5zbWRfYXRfc2VsIitpZHgpLnNob3coKTsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICBqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLmhpZGUoKTsKICAgICAgICB9CiAgICB9 Cn0KCmpRdWVyeShmdW5jdGlvbigpIHsKICAgIGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0 X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgewogICAgICAgIHNtZF9hdF9wcmVmc3dh cCh0aGlzLnZhbHVlKTsKICAgIH0pOwoKICAgIGpRdWVyeSgnI3NtZF9jbHInKS5jbGljayhm dW5jdGlvbigpIHsKICAgICAgICBqUXVlcnkoJyNzbWRfYXRfdXNlcl9saXN0IG9wdGlvbicp LnByb3AoInNlbGVjdGVkIiwgIiIpOwogICAgfSk7CgogICAgalF1ZXJ5KCIjc21kX2F0X2dy cHMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CiAgICAgICAgc2Vsc2tpbiA9IGpRdWVyeSh0aGlz KS52YWwoKTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIG9sZCBwcml2cyBsaXN0IGFuZCBncmFi IHRoZSBjdXJyZW50IGxpc3QgZnJvbSB0aGUgaGlkZGVuIGZpZWxkCiAgICAgICAgalF1ZXJ5 KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLnByb3AoInNlbGVjdGVkIixmYWxzZSk7CiAgICAg ICAgdmFyIGdycGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0 J10iKS52YWwoKTsKICAgICAgICB2YXIgZ3JwcyA9IGdycGxpc3Quc3BsaXQoJywnKTsKICAg ICAgICB2YXIgY250ID0gZ3Jwcy5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsg aWR4IDwgY250OyBpZHgrKykgewogICAgICAgICAgICBwcml2cyA9IGdycHNbaWR4XS5zcGxp dCgnOicpOwogICAgICAgICAgICBza2luaWQgPSBwcml2cy5zaGlmdCgpOwogICAgICAgICAg ICBpZiAoc2tpbmlkID09IHNlbHNraW4pIHsKICAgICAgICAgICAgICAgIG51bVByaXZzID0g cHJpdnMubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChqZHggPSAwOyBqZHggPCBudW1Q cml2czsgamR4KyspIHsKICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIiNzbWRfYXRfcHJp dnMgb3B0aW9uW3ZhbHVlPSciK3ByaXZzW2pkeF0rIiddIikucHJvcCgic2VsZWN0ZWQiLCB0 cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0p OwoKICAgIGpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAg ICAgICBzZWxza2luID0galF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uOnNlbGVjdGVkIiku dmFsKCk7CiAgICAgICAgdmFyIG91dCA9IFtdOwogICAgICAgIHZhciBwcml2cyA9IFtdOwog ICAgICAgIHByaXZzLnB1c2goc2Vsc2tpbik7CiAgICAgICAgalF1ZXJ5KCIjc21kX2F0X3By aXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHBy aXZzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsKICAgICAgICB9KTsKICAgICAgICBpZiAo cHJpdnMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgcHJpdnMucG9wKCk7CiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgb3V0LnB1c2gocHJpdnMuam9pbigiOiIpKTsKICAgICAg ICB9CiAgICAgICAgdmFyIGhpZGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9n cm91cF9saXN0J10iKS52YWwoKTsKICAgICAgICB2YXIgcHJldmxpc3QgPSBoaWRsaXN0LnNw bGl0KCcsJyk7CiAgICAgICAgdmFyIHByZXZjbnQgPSBwcmV2bGlzdC5sZW5ndGg7CgogICAg ICAgIGpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7CiAg ICAgICAgICAgIGN1cnJza2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOwogICAgICAgICAgICBp ZiAoY3VycnNraW4gIT0gc2Vsc2tpbikgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4 ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4KyspIHsKICAgICAgICAgICAgICAgICAgICBwcmV2 cHJpdnMgPSBwcmV2bGlzdFtpZHhdLnNwbGl0KCc6Jyk7CiAgICAgICAgICAgICAgICAgICAg c2tpbmlkID0gcHJldnByaXZzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgLy8gR2Vu ZXJhdGUgdGhlIHByaXYgbGlzdCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCBy ZW1vdmluZyBhbnkgZHVwbGljYXRlIHByaXZzIHNldCBlbHNld2hlcmUKICAgICAgICAgICAg ICAgICAgICBpZiAoc2tpbmlkID09IGN1cnJza2luKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHRtcG91dCA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB0bXBvdXQucHVzaChz a2luaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHRoaXNwcml2IGluIHByZXZw cml2cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeS5pbkFycmF5 KHByZXZwcml2c1t0aGlzcHJpdl0sIHByaXZzKSA8IDApIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bXBvdXQucHVzaChwcmV2cHJpdnNbdGhpc3ByaXZdKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBpZiAodG1wb3V0Lmxlbmd0aCA+IDEpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKHRtcG91dC5qb2luKCI6IikpOwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgalF1ZXJ5KCJpbnB1dFtu YW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKG91dCk7CiAgICB9KTsKCiAgICAvLyBE aXNwbGF5IGEgdG9vbHRpcCBzaG93aW5nIHRoZSBjdXJyZW50bHktYXNzaWduZWQgc2tpbiB3 aGVuIGhvdmVyaW5nIG92ZXIgYSBwcml2aWxlZ2UgbGV2ZWwKICAgIGpRdWVyeSgiI3NtZF9h dF9wcml2cyBvcHRpb24iKS5ob3ZlcihmdW5jdGlvbigpIHsKICAgICAgICBob3ZpdGVtID0g alF1ZXJ5KHRoaXMpLnZhbCgpOwogICAgICAgIGdycHMgPSBqUXVlcnkoImlucHV0W25hbWU9 J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsKICAgICAgICBpdGVtcyA9IGdycHMuc3Bs aXQoIiwiKTsKICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4 KyspIHsKICAgICAgICAgICAgc2tpbnogPSBpdGVtc1tpZHhdLnNwbGl0KCI6Iik7CiAgICAg ICAgICAgIGZvciAoamR4ID0gMTsgamR4IDwgc2tpbnoubGVuZ3RoOyBqZHgrKykgewogICAg ICAgICAgICAgICAgaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkgewogICAgICAgICAgICAg ICAgICAgIGpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIsIHNraW56WzBdKTsKICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgIH0KICAgIH0sCiAgICBmdW5jdGlvbigpIHsKICAgICAgICBqUXVlcnkodGhpcykuYXR0 cigidGl0bGUiLCAiIik7CiAgICB9KTsKICAgIHNtZF9hdF9wcmVmc3dhcChqUXVlcnkoImlu cHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXTpjaGVja2VkIikudmFsKCkpOwogICAgalF1ZXJ5 KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKCk7Cn0pOwpFT0pTCiAgICApOwp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU3BsaXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2Ug dmFsdWUgaW50byBhbiBhcnJheSBvZiBrZXlzL3ZhbHVlcy4KLy8gTm90ZTogdmFsdWUgaXMg cGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBwcmVmcyBhcnJheSBp biB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQpmdW5jdGlvbiBzbWRfYXRfcHJlZl9l eHBsb2RlKCR2YWwpCnsKICAgICRvcmRlciA9IGFycmF5X3ZhbHVlcyhhcnJheShnVHh0KCdz bWRfYWR0aF9jX2d6aXAnKSxnVHh0KCdzbWRfYWR0aF9jX2J6aXAyJyksZ1R4dCgnc21kX2Fk dGhfY196aXAnKSkpOwogICAgJG9ub2ZmID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8v JywgJHZhbCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpKTsKICAgICRvdXQgPSBhcnJheSgp OwogICAgZm9yZWFjaCgkb3JkZXIgYXMgJGtleTEgPT4gJHZhbHVlMSkgewogICAgICAgICRv dXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlska2V5MV07CiAgICB9CiAgICByZXR1cm4g JG91dDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfaW5zdGFsbCgkc2hv d3BhbmUgPSAnMScpCnsKICAgICRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsKCiAg ICAkbWVzc2FnZSA9ICcnOwogICAgZm9yZWFjaCAoJGF0X3ByZWZzIGFzICRwcmVmID0+ICRk Zmx0KSB7CiAgICAgICAgaWYgKCFmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRw cmVmKSkgewogICAgICAgICAgICAkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJl ZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVv dGUoZG9TbGFzaCgkZGZsdCkpLicsIGV2ZW50PSJzbWRfYXQiLCB0eXBlPScuUFJFRl9ISURE RU4pOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkc2hvd3BhbmUpIHsKICAgICAgICAkbWVz c2FnZSA9IGdUeHQoJ3NtZF9hZHRoX3ByZWZzX2luc3RhbGxlZCcpOwogICAgICAgIHNtZF9h dF9zZXR1cCgkbWVzc2FnZSk7CiAgICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2F0 X3ByZWZzX3JlbW92ZSgkc2hvd3BhbmUgPSAnMScpCnsKICAgICRhdF9wcmVmcyA9IHNtZF9h dF9nZXRfcHJlZnMoKTsKCiAgICAkbWVzc2FnZSA9ICcnOwogICAgZm9yZWFjaCAoJGF0X3By ZWZzIGFzICRwcmVmID0+ICRkZmx0KSB7CiAgICAgICAgaWYgKGZldGNoKCduYW1lJywndHhw X3ByZWZzJywnbmFtZScsJHByZWYpKSB7CiAgICAgICAgICAgICRpZCA9IHNhZmVfZGVsZXRl KCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOwogICAgICAg IH0KICAgIH0KICAgIGlmICgkc2hvd3BhbmUpIHsKICAgICAgICAkbWVzc2FnZSA9IGdUeHQo J3NtZF9hZHRoX3ByZWZzX2RlbGV0ZWQnKTsKICAgICAgICBzbWRfYXRfc2V0dXAoJG1lc3Nh Z2UpOwogICAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc191cGRhdGUo KQp7CiAgICBnbG9iYWwgJHNtZF9wbHVnaW5fcHJlZnMsICRzbWRfYXRfZXZlbnQ7CgogICAg JGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOwoKICAgICRtZXNzYWdlID0gJyc7CiAg ICAkcG9zdCA9IGFycmF5KCk7CgogICAgZm9yZWFjaCAoJGF0X3ByZWZzIGFzICRwcmVmID0+ ICRwcmVmb2JqKSB7CiAgICAgICAgJHBvc3RbJHByZWZdID0gcHMoJHByZWYpOwogICAgfQoK ICAgIC8vIEhhbmRsZSBsaXN0IG9wdGlvbnMgc2VwYXJhdGVseSBhbmQgb25seSB1cGRhdGUg dGhlbSBpZiB0aGV5J3JlIHNldAogICAgLy8gKHRoZXkndmUgYWxyZWFkeSBiZWVuIHNldCBp biB0aGUgZm9yZWFjaCBhYm92ZSwgc28gbmVlZCB1bnNldHRpbmcpCiAgICBpZiAocHMoJ3Nt ZF9hdF91c2VyX2xpc3QnKSkgewogICAgICAgICRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10g PSBqb2luKCcsJywgcHMoJ3NtZF9hdF91c2VyX2xpc3QnKSk7CiAgICB9IGVsc2UgewogICAg ICAgICRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSAnJzsKICAgIH0KICAgIGlmIChwcygn c21kX2F0X2dyb3VwX2xpc3QnKSkgewogICAgICAgICRwb3N0WydzbWRfYXRfZ3JvdXBfbGlz dCddID0gcHMoJ3NtZF9hdF9ncm91cF9saXN0Jyk7CiAgICB9IGVsc2UgewogICAgICAgIHVu c2V0KCRwb3N0WydzbWRfYXRfZ3JvdXBfbGlzdCddKTsKICAgIH0KICAgIGlmIChwcygnc21k X2F0X2NydXNoJykpIHsKICAgICAgICAkcG9zdFsnc21kX2F0X2NydXNoJ10gPSBwcygnc21k X2F0X2NydXNoJyk7CiAgICB9IGVsc2UgewogICAgICAgIHVuc2V0KCRwb3N0WydzbWRfYXRf Y3J1c2gnXSk7CiAgICB9CgogICAgLy8gU2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVtZSB0byB0 aGUgZ2xvYmFsIHRoZW1lCiAgICBpZiAoJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSB7 CiAgICAgICAgc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkcG9zdFsnc21kX2F0X2dsb2JhbF9z a2luJ10pOwogICAgfQoKICAgIGZvcmVhY2ggKCRhdF9wcmVmcyBhcyAkcHJlZiA9PiAkZGZs dCkgewogICAgICAgIGlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7CiAgICAgICAgICAgIHNl dF9wcmVmKCRwcmVmLCAkcG9zdFskcHJlZl0sICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVO KTsKICAgICAgICB9CiAgICB9CiAgICAkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3Nh dmVkJyk7CiAgICBzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLy8gVVRJTElUWSBGVU5DVElPTlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9nZXRfcHJpdnMoJHVzZXIgPSAnJykKewogICAgZ2xv YmFsICR0eHBfdXNlcjsKICAgICR1c2VyID0gKCR1c2VyKSA/ICR1c2VyIDogJHR4cF91c2Vy OwogICAgJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWU9 JyIuZG9TbGFzaCgkdXNlcikuIiciKTsKICAgIHJldHVybiAkcHJpdnM7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfZXhpc3RzKCRuYW1lKQp7CiAg ICAkaW5zdGFuY2UgPSBUaGVtZTo6ZmFjdG9yeSgkbmFtZSk7CiAgICByZXR1cm4gJGluc3Rh bmNlOwp9CgovLyBJZiBwZXItdXNlciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFs IHNraW4gd2lucy4KLy8gT25lIGV4Y2VwdGlvbjogaWYgdGhlIHVzZXIgaXMgYW4gYWRtaW4s IGFsbG93IHRoZSBjdXJyZW50IHNraW4gdG8gcHJldmFpbCBzbyB0aGV5IG1heSBzd2l0Y2gg c2tpbnMgd2l0aCBpbXB1bml0eQovLyBhbmQgbm90IGFmZmVjdCB0aGUgZ2xvYmFsIHNraW4K ZnVuY3Rpb24gc21kX2F0X3BlcigpCnsKICAgIGdsb2JhbCAkc21kX2F0X3ByaXZzLCAkdGhl bWUsICR0eHBfdXNlcjsKCiAgICAkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7CiAg ICAkc2tpblN5cyA9ICRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddOwogICAgJHByaXZzID0g c21kX2F0X2dldF9wcml2cygpOwogICAgJGdibF9za2luID0gKCRhdF9wcmVmc1snc21kX2F0 X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4n XSA6ICcnOwogICAgJGdibF9za2luID0gKHNtZF9hdF9leGlzdHMoJGdibF9za2luKSkgPyAk Z2JsX3NraW4gOiAnaGl2ZSc7CgogICAgc3dpdGNoICgkc2tpblN5cykgewogICAgICAgIGNh c2UgMDoKICAgICAgICAgICAgLy8gR2xvYmFsIGZvcmNlZCBza2luIChleGNlcHQgYWRtaW5z KQogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRf YXRfcHJpdnMpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRnYmxfc2tpbjsKICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIEFkbWlucwogICAgICAgICAgICAg ICAgJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdi bF9za2luIDogJHRoZW1lLT5uYW1lKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKHNtZF9h dF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAnaGl2ZSc7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAvLyBH cm91cC1sZXZlbCBmb3JjZWQgc2tpbnMKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkcHJp dnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsKICAgICAgICAgICAgICAgICRm b3JjZVNraW5zID0gKCRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSAhPSAnJykgPyAk YXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3Nr aW4gOiAkdGhlbWUtPm5hbWUpOwoKICAgICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBncm91 cCBza2luIGxpc3QKICAgICAgICAgICAgICAgICRnc2tpbnMgPSBhcnJheSgpOwogICAgICAg ICAgICAgICAgJGdvcHRzID0gZXhwbG9kZSgnLCcsICRmb3JjZVNraW5zKTsKICAgICAgICAg ICAgICAgIGZvcmVhY2ggKCRnb3B0cyBhcyAkZ3JwZGVmKSB7CiAgICAgICAgICAgICAgICAg ICAgaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICRw cml2Z3JwID0gZXhwbG9kZSgiOiIsICRncnBkZWYpOwogICAgICAgICAgICAgICAgICAgICRz a2luaWQgPSBhcnJheV9zaGlmdCgkcHJpdmdycCk7CiAgICAgICAgICAgICAgICAgICAgaWYg KGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoc21kX2F0X2V4aXN0cygkc2tpbmlkKSkgPyAkc2tpbmlkIDogJ2hpdmUnOzsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICByZXR1cm4gKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWU7CiAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBBZG1pbnMKICAgICAgICAgICAg ICAgICRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOwogICAgICAgICAgICAgICAgcmV0dXJuIChzbWRf YXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2hpdmUnOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgLy8g UGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRoZSBza2luIGlz IGluIHRoZSBhbGxvd2VkIGxpc3QKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkcHJpdnMs IGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsKICAgICAgICAgICAgICAgICR2YWxp ZFNraW5zID0gKCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSA/ICRhdF9wcmVmc1sn c21kX2F0X3VzZXJfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1l LT5uYW1lKTsKICAgICAgICAgICAgICAgICR2YWxpZFNraW5zID0gZG9fbGlzdCgkdmFsaWRT a2lucyk7CiAgICAgICAgICAgICAgICAkdGhlX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4n LCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsKICAgICAgICAg ICAgICAgIHJldHVybiAoaW5fYXJyYXkoJHRoZV9za2luLCAkdmFsaWRTa2lucykgJiYgc21k X2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tpbiA6ICcnOwogICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQWRtaW5zCiAgICAgICAgICAgICAgICAkYWRt X3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4g OiAkdGhlbWUtPm5hbWUpKTsKICAgICAgICAgICAgICAgIHJldHVybiAoc21kX2F0X2V4aXN0 cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdoaXZlJzsKICAgICAgICAgICAgfQogICAg ICAgICAgICBicmVhazsKICAgIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8v IFJlYWQgYW5kIHJldHVybiB0aGUgbWFuaWZlc3QsIGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEg ZmV3IG90aGVyIG5pY2V0aWVzIHRvIHRoZSBhcnJheSBmb3IgbGF0ZXIKZnVuY3Rpb24gc21k X2F0X3JlYWRfc2tpbmZvKCRza2luKQp7CiAgICBnbG9iYWwgJHNtZF9jb3JlX3RoZW1lczsK CiAgICAkdGhpc190aGVtZSA9IFRoZW1lOjpmYWN0b3J5KCRza2luKTsKICAgICRza2luZm8g PSBhcnJheSgpOwogICAgaWYgKCR0aGlzX3RoZW1lKSB7CiAgICAgICAgJHNraW5mbyA9ICR0 aGlzX3RoZW1lLT5tYW5pZmVzdCgpOwogICAgICAgICRza2luZm9bJ2RuYW1lJ10gPSBlbXB0 eSgkc2tpbmZvWyd0aXRsZSddKSA/IHVjd29yZHMoJHRoaXNfdGhlbWUtPm5hbWUpIDogJHNr aW5mb1sndGl0bGUnXTsKICAgICAgICAkc2tpbmZvWyduYW1lJ10gPSAkdGhpc190aGVtZS0+ bmFtZTsKICAgICAgICAkc2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOwogICAg ICAgICRza2luZm9bJ3BocGZpbGUnXSA9ICR0aGlzX3RoZW1lLT5wYXRoKCRza2luKTsKICAg ICAgICAkc2tpbmZvWydiYXNlZF9vbiddID0gJyc7CiAgICAgICAgJGNvbnRlbnRzID0gZmls ZV9nZXRfY29udGVudHMoJHNraW5mb1sncGhwZmlsZSddKTsKICAgICAgICBpZiAoKCRwb3Mg PSBzdHJwb3MoJGNvbnRlbnRzLCAnVGhlbWU6OmJhc2VkX29uJykpICE9PSBmYWxzZSkgewog ICAgICAgICAgICAkYmVncG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkcG9zKSsxOwog ICAgICAgICAgICAkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkYmVncG9zKTsK ICAgICAgICAgICAgJGJhc2UgPSBzdWJzdHIoJGNvbnRlbnRzLCAkYmVncG9zLCAkZW5kcG9z LSRiZWdwb3MpOwogICAgICAgICAgICAkc2tpbmZvWydiYXNlZF9vbiddID0gKGluX2FycmF5 KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVzKSkgPyAnJyA6ICRiYXNlOwogICAgICAgIH0KICAg ICAgICB1bnNldCgkdGhpc190aGVtZSk7CiAgICB9CiAgICByZXR1cm4gJHNraW5mbzsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEdyYWIgdGhlIHRodW1ibmFpbCBmaWxl bmFtZSBpZiBpdCBleGlzdHMsIG9wdGlvbmFsbHkgcmV0dXJuIGEgZm9ybWF0dGVkIGltZyB0 YWcKZnVuY3Rpb24gc21kX2F0X2dldF90aHVtYigkc2tpbiwgJGltZyA9IDApCnsKICAgICRh dF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsKICAgICR0dyA9ICRhdF9wcmVmc1snc21k X2F0X3R3J107CiAgICAkdGggPSAkYXRfcHJlZnNbJ3NtZF9hdF90aCddOwogICAgJHVzZV90 aHVtYiA9ICgkdHcgPT0gMCB8fCAkdGggPT0gMCkgPyBmYWxzZSA6IHRydWU7CiAgICAkZGZs dF90aHVtYiA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVV Z0FBQVFRQUFBQ1dDQU1BQUFBUER3YkVBQUFBd0ZCTVZFWDJ2VGY1MVduVDA5UDA5UFQ2MlhY NHpGUDR5MDMzd1R3M05qUDN3MERyNit2NHpWajczWUhmdEU3NHhVUGYzOS83NElyNHlFVEl4 c0Q4Nkx2aDFiVFN4SjNtNGRUM3hVajgvUHpEdVpyaTJzYjR4MGo0ejEzaHlZZTl1N1g1MFdM bnlIZnF4bWYzeVZLMmxrVHR3bGVjZ1R6VnFEMTFaRHJoekpiazBxSHh5bDc0eUUzdzFZVHl4 VS9Hb0VIVnUzTHJ1ai91MEhuYm5CYjEzYVBtNXVid3Ywbng4Zkh1NitIdXhsbnNzakQ0eVVq WW55amxxQi91N3U3NStmbjM5L2U4U1huNkFBQU5Ua2xFUVZSNDJ1M2RlM1BhUmhjRzhHQWhG QkFXd2VXU0FBcGdiSE16aVdtRTR0Qlh6dmYvVmoxbmQ2VkhxeTAzLzdXODBYR24wODYwbmRt Zm5qMW5WNFRtdysreWZwY0lKVUtKVUNLVUNDVkNpVkFpbEFnbFFvbFFJcFFJdGlPOE9YODZ3 dHZiNTg5UStDTVJTSURxTGZrREVSQUNWWTJMLzEwbmpwMnJSd0FCVjNMSjhwMDRhVVM5empL NWZnVG5jNjVpNTd6VmkrVVBPb3ZKWkZYemU4Ny9GOEx2Nkl6bDArcVg0V1M2b3JxL3IrM3ZP L0hWSXpUeUNHL1IwZXp6d3crbkR3K2JvRjRQMnFKcU5YZVpYRDFDOUpaWGFCM2UrdUhrNFdH MzIzazdyMDZsRVBiN212c2NPYzYxSjBIYkQxR3NyeDdMOXo2azVWSFYyN0wydFpxL2JUbFF1 RTZFUk5zUFNaUXRYelMraHgyVjk4SUNNQkJSU0ExY2Q5U0tvWENsSTdLVlIzQnUxTllYMmNm S05RUnROOVQ4MGFBUlh6M0NtMnFLVHZ6eloyOFdUbmUwK3AySGg0OUNFdHAxWlVBSWZpZEtv SENsQ1BGYm5ORHllNzIvcU1ML2ZUaGVub0V3V3JRYVY0aUF6cGRFcmU4ZFduNVdQLzQrQTZI dGtRSVF3bFlqaWE4T0FWTi9NdDM5RTRLQTZ1bVVBWkt3WndUWEgyMXZzQit1QVNFOThTN0Q2 YVl1dC8ydjd4ckM3Vm5iZ1F3Q1FwQkpxTnhFamV0QUVBOC9FaWZlMTAyZkdoKzNQc0h3cENF c2p3RVFBVmZRQm9KTENIZTBIMnhHd1BJNSszMnFnSjZqeDhVRVhQOW9DRDkrblVTZ2Y1OFVn bXc2Vkxwb0NsWWhZT3UzK09sdlgxY2JCZ2lZUUJtazlmZGY1KzBISlVjRzNCSUVRazBjbHNi ZEd5c1JzczYzWGZtK2UzOS92MTRQTXdNRVFUYUZwWVl3T1l3Z0hFakJxeU1KcnV0WFFqUUZt eENTd1hKWjNWYkdvOUhJOTRYQm1neUlJS0FWZ0VEV1JOOFB4M2FDR2cxQnJqRzYvbmhySllM enM5bXNWdG5BcDFJR2ZSVURCRUhWYlU2ZzBqOFVBeFJSQm1RQWhNcGQxRWpzUzBMMGlRd3E0 ekhuZ0hhRE5NZ2hRQ0NIMEJ3Zk95dHJTUUNDbTQ2SDJEcUV4bElrUVFaQklnU1VCQmpray9D TEkxRHRINThLTU9BOVZkY1J1cTNJUW9TRUVDb0N3WlZCb0VKUExEN3daMFRnY0F5QVFKRks3 NUJVOWlMRW5iUWx1T2dJSnNMcDRzQVVEQVNETk5oTGhESEdnMVVJQTVFRWJUeVN3TVVFWmc2 OFFCQXdndHdPOWlJNHZXZEtBaU53RG5CUWZMY0JnbUFnMEdtcGl2RmcwNGt4WW9TUnIzSWdn NkJhNHJzTjZwN2FDM2l0SkJGR1lrYkdGaUpVQklJS1FwME4za3NBQVNaUUNNUDBtT0Q2ZkZC b1JSWWlOSllpQ1d3d0hNcW1pSXZqZTFLUVZzREZCc044RXVqMmdLWmdEVUt5ckk0WlFSZ1Fn bmRoRHZpZlBXQ2drcUFob0RQYWhCQjMrTHdvT3dLYTR0a0Erdm5JTU5DUzRCUEMxazZFd1ph R0F5R2dLVks5SXdaMXc0QVFXQUVJUHNhRFhRaE9UL1pGT1JrdW1vN0hjOEExSkFJZEFiY0hD eEJRdmExb0NVUndXUkE4OVFPRWdzRXdhQ3VFbW9ZUVdZZ1FFWUlyRWVxWElNRGdhZmI0K0FT RFhBNU1CSFY3Y0d4RGVCN0pKTURnRW9IWi9LT29lWkdnSHpDQWlZRE9hQkZDWXpHaTRZQWdY SktEbDhlUFdYM3pkQVJoWUNLRVZpTEV5NUV2RVM0S0F2OXpzNCs1ZXN3VERPbVByTlpNSU04 SjQvRXp4b05OQ0oyeFFFQVF6dHdKMytRMm1MMTRMM1ArQzBXQXNRQUVWbEJKb0JrWjJaY0Va N0FTTGVGQ2d3K2lGOHpxUEJhRXgyTkswSmNwZ0VHR1FFbkFlTEFMb2JYbDRYRG1ac2dtZ3Rn QlFUb2ErVys4ZW9yUXpna3dnaklRU2NCNHNBQUJGUUhoekNCSWcvbXY3SmpJU1pnRmhnRUQw Qjhad29nUkZ1aU1GaUUwdHRRU2dIQzJ3Y3RMUFkvd1VsY0dlZ3FFZ1pzaFlEelloWkFzMUNt QkNieXpEWExYQmUrUi9oNEV4UlFRUXJvYktBbGlQTVRXSVN4OVFqaTdJM2plaXpCUU1SQTFw NVlBQkptQlhBb2tndHdPY2p4WWh4QjN1Q1ZjZ0REbnZaQzdNSG0zdkJ1a1FWOGhyRlhkTTRF MFVFbW9ZanhZaE9BTWdIQk9SNWp4OGZCRC90WTRJNVZDTzFBbENWUU9PQWlFMEcyaEtkaUQw QVBDT1I4dDhEZ0VBUldmbFc1bERHQWcyd0VJZUMrSUlGUzdOL1lnb0ZxcmRmOGNBNXdRbmdn QmRjdmJneEgwa1ZERFRvQUJLZkNNVEt4RGFFeFZFSTREcUFzRDM1azhJTWpaOEUxckJ4Z0tN QUJDeUFpeGRRaVRZWERTUVA2b3RrZ0VxQmNPUXA4SVlKQVQwQTBZNGZtdVpTRkNFdlpQSXFR RzhyS1VJUVQwdzBIb0t3UVd3UEVJN1NBWGhDckdnMVVJeXcwam5ORVBaQkw0eWVQbEFZS1FQ eHNnQjRxQUpvTkN3SGl3Q1NIdWJPb25FRHdneUJ0MFNsRHZ5eUJnS2hnZGtRbTRLc3FnMmIy eEVNRVp2SjdSRXJKNjVDZ0VMQkJrUVpBeFVNZGs1TUEwb01KNHNBQUIxUVBDYVFXZUIvVWdl NlU4VjBGUVcrRWVNVEJ6VUJVSVRkd2ViRUtJcHVjbUFiTlJYUldlS0FpN1Bqb2lHbUtHSUFp UWcyYTFTYmNIK3hBYWs1TkpNRDUxbHdZMTJocTNNTUJlUUQ4QVFVVVpOT1Y0Y094Q1NFSkNP SE12NUEzNjNCVWZkOWw5NmQ0azBBMkEwTEFQWVhFTXdZTUNZaUN2akRzS3dvNXprUFVEd3dE dElEUEFlTEFKSVY3V1QzWUViQVhrb00vdkVUWXdRQTZVUW00cXdFQWlKTFloT0IxYTRna0Rz eWYyMTA4Y0JKTkFJUnpLQVNQZzRHd1BRbTkzTkFrR2dRekNVQVFoTThCV01BeEFJR3B4MDRw c1FVQUI0VUFPc0JWVUVjRitwb0p3RHdNRElUY2FvZkNNOFdBUlF2UndjampxbzVGendFR1k2 NWNGbkpIb3h3Z0NGUkFhMWlFMHB0NDVDR2lKYk1CdkZtZTRMR2czWjV3UVFKQXFmQ0tFR3hz UndvTUkvM1ZHa2hkbnZrT1lPWkFJb25JNUVBSkF3SGl3Q0NGWjdJNGI2SE9CRGZZdTM2TjBB c1JBYndoc0FJSlBud2loWlI5Q3ZOd2RNd0JDN25YcStpT1ZXNnM5ekZ4c0JhUWc5eElsTDhB R05DTXhIdXhCY0FaSEVmSXB3RHNrUnBqUHFUdUNnQW9FMkF3QWtOVmNZRHhZaE5CN09KNERJ Q2dDUmxEMU9GSUVNSkJWTkpCRmY0SHhZQlZDOUhCNk9Pb0VhL2ViTXZCekJBV0VhZ1VHVUxB TkFUUHlJSUtaZzdWUW9JYjQ3ZHZqNCsycjZ3TUJtMEh2Q0dyMVFNQnJkNHNSVEFPdXdwdEU5 NTdXbndMQVFCTEF3RkJvVnIrMld2WWhKT0U1Q1AyMlF0RGZucmlIRElEd3FZaUE4V0FQUXJ3 d0NZb0lmUzBJa3NETWdkb0tTSUs1SGNROUVrM0JIb1NPY1cweURkcEFnQUU2SXZyQnFTQTBx MTlzUkhBR0JZTzBqQndNODU4eit2azdvN2taaE1KaGhNUTJoTjV4QXpSRkdIRGh5cWdka3BU QmdTQVFRdmNPbmRFT0JLNldkK0RWTWlZRERJejNhQnFCUWtCSE1CRXFJU0ZFMWlGRUR3YytZ ekFOOUh2encvempiSXlOZ0o1NHhLQktDRGNXSWpTbXh6NWlRRTlFRG9pQURmaWxBbUtnOVFN ZDRVZk9vREs1UTJlMEJ5RUpQV00yd21EWWhvRStGK2FFc0dJRU13ZjZiQUFCZnk5NSt0Vkdo SGl4TzVXRDlkRDRpR2trN2c4akE2R0tqNXZVblFFRzR2dnBFaUd4RGFFakVUeVVPUmpNbDBp UGpEQmJaY2NEVEFidC9naUNwakJ3WDcvYzRQWmdCd0xlS0hnZmppSFVDZ2p1ZEM3dWtTb0lR RUFPdUJRQkc4Z2MrSXlBOFdBRkF0NG9GTC80THhIVVprQkR5TGNFcXRVNFM0SXNOQVFWQlBw VFpsQWhnOXJtaXhvUGpoVUltSkVJZ283UWxnYjdtb213NGwvRytacHJDWXFna3M4Qi80Qmd6 QWExdmtCbzJJT0FHZm1mQktvcjFtQ1FTNEpZdkw0YkVBTWdhQWFNc1BsdUo4SkVKQUhuUkND bzczZEN3VHd3SXdaNHhhNWFJbkpRVlFadWJhOFFFc3NRa3ZCQURoaWhTT0FibDRiY2RJUUJG eVBBZ0RjREkvUy9mNlh4Z001b0M4SlNiWWRDRHRwWkRxRGdJd2o1eTJOeE5LclNERklFUGlp MHJFT0lPeW9KeUlFS0Fnd3dINDAzS1VkZXFLRWhLQVQ2TCswZktBbjJJVGdEL0svelpCQlVE blFFUk1GRkZnd0VKa0RsRVh5RnNFa1JIS3NRZXJzMEJ6QXdFVkJHRXM0eGtBaGNYekVlTEVL SU5oSUJmYkdkN29hOVlZRHhZQ0pBQWR0QmpVZlZFcmkrM05pRGdJcGU1UmM5OVNSb1hWSDhI RXBDWld5K1ZQeWhKMkdVSmNIMTdVUm9UUHJaWk9CaUF6a2UweUFnRDBBNGtJVENkc0J1SUFT dTZSYzVIV3hEU0JhRW9HTFFGZ0tGK1doMFIyd0lKTUdZai9vaGdVb1NVRi9FVzBaN0VPTGxo aEd3RTdMNWVFZ0I4K0ZVVHlBRElId25ncnNiM2cwV0luUVlRU3FvSE1EZ01JTDVxMUxNSk9D a3RGb0pBbWxnMHkwU3YrQ2ZETm9CRjNMQVZRT0VycUJ2QnlnY1F2Q25MQ0FJdUNNMExFVG9F VUxRNW40UW9DRUlBMVBoaUVFVENOcHNXRTNWUG1BQklvQ0JGUWlZa1pTRVRJQU4yb3dBQnhP QkZZQlFQRFhqa0xEZGtnQkhBQVJzWUI5Q1kxb1hTVUFPMHUxZ2JBbmpPMTVHRXBvWndmTjJ1 dzFaQUFDU0FBWTJJVXlRQkJtRnRrcUNvaWoyQkgwMG1LL1ZKRUhZelFsRW5BRVNZQUlZV0lT UUxOUUpBUWhERUFBQlhkRXdBQUV0bnlwY2RBRkFCS2tBQ0d4RGlKZHBEbEI3ZEFYRUFBUUZB MndISWxoMHU1Z0VBQkFDSUxBT29STndTekFSWUlCUDRBQ0E5K3lpK1Bsai9TMHViQUlHZ0lD TkNNNWdHQnduS0h6YjBmellyZkQ0a1FCRUFBSjJJdlEyYlFPaExReVFBckYrb3hOc244TXVs cDk3L0Z5SkFXQXpRclRTRGRBUDBRaUszL1hjaHRUOTc5VHE4ZlR6eno4RHVJcmZLakdhcnZN RW1BZzZRSVdMRjk5TkY5L0N3OGZ5c1g0QVhBRkNJMXpuVTVEdkFsa0gyRzQ1K0hqeVdEcXYz bGcrMW44dENNbGlYeFRJdnRPMm5lU2V2TGIwaHFva09XZjU5aU1zTi9LTW1Qcy9aRTNDRUEr K1IydFB5MWc2bG8vMVh5RkNQTmlRZ1FCWWljVWo4MnJkSjVlTzVWOHJndE5iMGVJWDNVNWg4 UkZXYmk3ZFhQeVZJOFJSTHUwbkhycTU5Q3RIQUlQNHpWK3BMbi9vMTQ4QUJhNTNMLzM2RWND Z1Yva2I3bE9WQ0NWQ2lWQWlsQWdsUW9sUUlwUUlKY0pWMTcvSUlmRFJkMG5QbFFBQUFBQkpS VTVFcmtKZ2dnPT0nOwoKICAgIC8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBoYXMg YWxyZWFkeSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rp b24KICAgIGlmICghaXNfYXJyYXkoJHNraW4pKSB7CiAgICAgICAgJHNraW4gPSBzbWRfYXRf cmVhZF9za2luZm8oJHNraW4pOwogICAgfQogICAgaWYgKCRza2luKSB7CiAgICAgICAgJHNr aW5kaXIgPSAkc2tpblsncGF0aCddOwogICAgICAgICR0aHVtYm5hbWUgPSBnbG9iKCRza2lu ZGlyLidzY3JlZW5zaG90LionKTsKICAgICAgICByZXR1cm4gKCRpbWcgJiYgJHVzZV90aHVt YikgPyAnPGltZyBjbGFzcz0iY29udGVudC1pbWFnZSIgc3JjPSInLigoJHRodW1ibmFtZSAm JiBmaWxlX2V4aXN0cygkdGh1bWJuYW1lWzBdKSkgPyAkdGh1bWJuYW1lWzBdIDogJGRmbHRf dGh1bWIpLiciIGFsdD0iJy4oKGlzc2V0KCRza2luWyduYW1lJ10pKSA/ICRza2luWyduYW1l J10gOiAnJykuJyB0aHVtYm5haWwiIHdpZHRoPSInLiR0dy4nIiBoZWlnaHQ9IicuJHRoLici IC8+JyA6ICcnOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfcmVhZF9za2lucygp CnsKICAgICRza2luX2xpc3QgPSBUaGVtZTo6bmFtZXMoKTsKICAgICRza2luX2xpc3QgPSBz bWRfYXRfc29ydCgkc2tpbl9saXN0KTsKICAgIHJldHVybiAkc2tpbl9saXN0Owp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU29ydCB0aGUgc2tpbnMsIGtlZXBpbmcgY29y ZSB0aGVtZXMgYXQgdGhlIHRvcApmdW5jdGlvbiBzbWRfYXRfc29ydCgkc2tpbl9saXN0KQp7 CiAgICBnbG9iYWwgJHByZWZzLCAkc21kX2NvcmVfdGhlbWVzOwoKICAgICRjYXNlU2Vuc2Ug PSBpc3NldCgkcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSkgPyAkcHJlZnNbJ3NtZF9hdF9j YXNlX3NvcnQnXSA6IDE7CgogICAgaWYoJGNhc2VTZW5zZSkgewogICAgICAgIG5hdHNvcnQo JHNraW5fbGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgIG5hdGNhc2Vzb3J0KCRza2luX2xp c3QpOwogICAgfQogICAgJGRmbHRfZm91bmQgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJHNr aW5fbGlzdCBhcyAkc2tpbl9pZHggPT4gJHNraW5fbmFtZSkgewogICAgICAgIGlmIChpbl9h cnJheSgkc2tpbl9uYW1lLCAkc21kX2NvcmVfdGhlbWVzKSkgewogICAgICAgICAgICB1bnNl dCgkc2tpbl9saXN0WyRza2luX2lkeF0pOwogICAgICAgICAgICAkZGZsdF9mb3VuZFtdID0g JHNraW5fbmFtZTsKICAgICAgICB9CiAgICB9CgogICAgJGRmbHRzID0gYXJyYXlfcmV2ZXJz ZSgkZGZsdF9mb3VuZCk7IC8vIFNvIHRoZXkgZ28gaW4gYWxwaGFiZXRpY2FsIG9yZGVyCiAg ICBmb3JlYWNoICgkZGZsdHMgYXMgJGNvcmV0aGVtZSkgewogICAgICAgIGFycmF5X3Vuc2hp ZnQoJHNraW5fbGlzdCwgJGNvcmV0aGVtZSk7CiAgICB9CgogICAgcmV0dXJuICRza2luX2xp c3Q7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYXRfbGlz dGRpcigkc3RhcnRfZGlyID0gJy4nKQp7CiAgICAkZmlsZXMgPSBhcnJheSgpOwoKICAgIGlm IChpc19kaXIoJHN0YXJ0X2RpcikpIHsKICAgICAgICAkZmggPSBvcGVuZGlyKCRzdGFydF9k aXIpOwogICAgICAgIHdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRmaCkpICE9PSBmYWxzZSkg ewogICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lwcGluZyAuIGFu ZCAuLiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgaWYgKHN0cmNt cCgkZmlsZSwgJy4nKT09MCB8fCBzdHJjbXAoJGZpbGUsICcuLicpPT0wKSBjb250aW51ZTsK ICAgICAgICAgICAgJGZpbGVwYXRoID0gJHN0YXJ0X2RpciAuICcvJyAuICRmaWxlOwogICAg ICAgICAgICBpZiAoIGlzX2RpcigkZmlsZXBhdGgpICkgewogICAgICAgICAgICAgICAgJGZp bGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCBzbWRfYXRfbGlzdGRpcigkZmlsZXBhdGgpKTsK ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGZpbGVz LCAkZmlsZXBhdGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsb3NlZGly KCRmaCk7CiAgICB9IGVsc2UgewoKICAgICAgICAvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24g d2FzIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbm9uLWRpcmVjdG9yeSBhcmd1bWVudAogICAg ICAgICRmaWxlcyA9IGZhbHNlOwogICAgfQoKICAgIHJldHVybiAkZmlsZXM7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZWN1cnNpdmUgcm1kaXIoKSBjb3VydGVzeSBv ZiB0aGUgcGhwIG1hbnVhbCB1c2VyIGNvbW1lbnRzCmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1 cnNpdmUoJGZpbGVwYXRoKQp7CiAgICBpZiAoaXNfZGlyKCRmaWxlcGF0aCkgJiYgIWlzX2xp bmsoJGZpbGVwYXRoKSkgewogICAgICAgIGlmICgkZGggPSBvcGVuZGlyKCRmaWxlcGF0aCkp IHsKICAgICAgICAgICAgd2hpbGUgKCgkc2YgPSByZWFkZGlyKCRkaCkpICE9PSBmYWxzZSkg ewogICAgICAgICAgICAgICAgaWYgKCRzZiA9PSAnLicgfHwgJHNmID09ICcuLicpIGNvbnRp bnVlOwogICAgICAgICAgICAgICAgaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0 aC4nLycuJHNmKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBEb2gsIGNhbid0 IGRlbGV0ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNs b3NlZGlyKCRkaCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBybWRpcigkZmlsZXBhdGgp OwogICAgfQogICAgcmV0dXJuIHVubGluaygkZmlsZXBhdGgpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLy8gRnJvbSBQSFAgbWFudWFsIGNvbW1lbnRzLiBUaGFua3MgcHVy ZW1hbmdvCmZ1bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikKewogICAgLy8gYnlwYXNzZXMg b3Blbl9iYXNlZGlyIHJlc3RyaWN0aW9ucyBvZiBpc19kaXIgYW5kIGZpbGVwZXJtcwogICAg JHRtcF9jbWQgPSBgbHMgLWRsICRkaXJgOwogICAgJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07 CiAgICBpZigkZGlyX2ZsYWchPSJkIikgewogICAgICAgIC8vIG5vdCBkOyB1c2UgbmV4dCBj aGFyIChmaXJzdCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQgaXMgc3RpbGwgZGlyZWN0b3J5KQog ICAgICAgICRkaXJfZmxhZyA9ICR0bXBfY21kWzFdOwogICAgfQogICAgcmV0dXJuICgkZGly X2ZsYWc9PSJkIik7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBz bWRfYXRfY2hhbmdlX3BhZ2VieSgpCnsKICAgIHNldGNvb2tpZSgnc21kX2F0X3BhZ2VieScs IGdwcygncXR5JykpOwogICAgc21kX2F0X2xpc3QoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3NhZ2UgPSAnJykKewogICAg Z2xvYmFsICRzbWRfYXRfcHJpdnM7CgogICAgZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXko J3NraW4nLCAnZXZlbnQnLCAnbmV4dHN0ZXAnKSkpKTsKICAgICR1cmwgPSAiP2V2ZW50PSIu JGV2ZW50LiImc3RlcD0iLiRuZXh0c3RlcDsKCiAgICBpZiAoJHNraW4gJiYgc21kX2F0X2V4 aXN0cygkc2tpbikpIHsKICAgICAgICBzZXRfcHJlZignc21kX3NraW4nLCAkc2tpbiwgJGV2 ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOwogICAg ICAgICR1cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogZ1R4 dCgnc21kX2FkdGhfc2tpbl9zd2l0Y2hlZCcsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSkp OwogICAgfSBlbHNlIHsKICAgICAgICAkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7 CiAgICB9CgogICAgLy8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJs ZS1kZWNsdXRjaCBpbiBvcmRlciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQog ICAgZWNobyA8PDxFT1MKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp3aW5kb3cu bG9jYXRpb24uaHJlZj0ieyR1cmx9IjsKPC9zY3JpcHQ+Cjxub3NjcmlwdD4KPG1ldGEgaHR0 cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPgo8L25vc2NyaXB0 PgpFT1M7CiAgICBleGl0Owp9CgovLyBBbGwtdXNlciBza2luIGNob29zZXIKZnVuY3Rpb24g c21kX2FkbWF0KCRldmVudCwgJHN0ZXApCnsKICAgIGlmKCEkc3RlcCBvciAhaW5fYXJyYXko JHN0ZXAsIGFycmF5KAogICAgICAgICAgICAnc21kX2F0X3N3aXRjaCcsCiAgICAgICAgKSkp IHsKICAgICAgICBzbWRfYXRfY2hvb3NlcignJyk7CiAgICB9IGVsc2UgJHN0ZXAoKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9jaG9vc2VyKCRt ZXNzYWdlID0gJycpCnsKICAgIGdsb2JhbCAkcHJlZnMsICRzbWRfYXRfYWRtX2V2ZW50LCAk dGhlbWU7CgogICAgJHNtZF9hdF9zdHlsZXMgPSBzbWRfYXRfZ2V0X3N0eWxlX3J1bGVzKCk7 CiAgICAkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7CiAgICAkbGF5b3V0ID0gJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J107CiAgICAkdHcgPSAkYXRfcHJlZnNbJ3NtZF9hdF90 dyddICsgMTA7CiAgICAkdGggPSAkYXRfcHJlZnNbJ3NtZF9hdF90aCddICsgODA7CgogICAg JG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3NhZ2UnKTsKICAg IHBhZ2V0b3AoZ1R4dCgnc21kX2FkdGhfc2tpbm5lcicpLCRtZXNzYWdlKTsKCiAgICAkY3Vy cl9za2luID0gJHRoZW1lLT5uYW1lOwoKICAgICRhbGxvd2VkID0gJyc7CiAgICBpZiAoaXNz ZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSB7CiAgICAgICAgJGFsbG93ZWQgPSBl eHBsb2RlKCIsIiwkcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7CiAgICAgICAgZm9yZWFj aCAoJGFsbG93ZWQgYXMgJGlkeCA9PiAkdmFsaWQpIHsKICAgICAgICAgICAgaWYgKCR2YWxp ZCA9PSAnJykgewogICAgICAgICAgICAgICAgdW5zZXQoJGFsbG93ZWRbJGlkeF0pOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgJGFsbG93ZWQgPSBzbWRfYXRfc29ydCgk YWxsb3dlZCk7CiAgICAkaGRyb3cgPSBoZWQoZ1R4dCgnc21kX2FkdGhfYXZhaWxfdGl0bGUn KSwgMik7CgogICAgZWNobyAnPGRpdiBjbGFzcz0idHhwLWNvbnRhaW5lciI+JzsKCiAgICBp ZiAoJGxheW91dD09MCkgewogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InR4cC1saXN0dGFi bGVzIj4nLAogICAgICAgICAgICBzdGFydFRhYmxlKCcnLCAnJywgJ3R4cC1saXN0JyksCiAg ICAgICAgICAgIHRyKAogICAgICAgICAgICAgICAgdGRhKCRoZHJvdywgJyBjb2xzcGFuPSIz IicpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFzc0hlYWQoCiAgICAgICAgICAgICAg ICBnVHh0KCdzbWRfYWR0aF9za2luX2dibCcpLAogICAgICAgICAgICAgICAgJ2F1dGhvcics CiAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nCiAgICAgICAgICAgICk7CiAgICB9IGVs c2UgewogICAgICAgIGVjaG8gJGhkcm93LCAnPGRpdiBjbGFzcz0idHhwLWdyaWQiPic7CiAg ICB9CiAgICBmb3JlYWNoICgkYWxsb3dlZCBhcyAkc2tpbl9uYW1lKSB7CiAgICAgICAgJHNr aW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsKICAgICAgICBpZiAoJHNr aW5mbykgewogICAgICAgICAgICAkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tp bmZvLCAxKTsKICAgICAgICAgICAgJHN3aXRjaF9saW5rID0gJz9ldmVudD0nLiRzbWRfYXRf YWRtX2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0 Jy5hLidza2luPScuJHNraW5fbmFtZTsKICAgICAgICAgICAgJHRodW1ibG9jayA9ICgkbGF5 b3V0PT0wKQogICAgICAgICAgICAgICAgICAgICAgICA/ICc8YSBocmVmPSInLiRzd2l0Y2hf bGluay4nIiB0aXRsZT0iJy5nVHh0KCdzbWRfYWR0aF9hcHBseV9za2luJykuJyI+Jy4kc2tp bmZvWydkbmFtZSddLigoJHRodW1ibmFpbCkgPyBici4kdGh1bWJuYWlsIDogJycpLic8L2E+ JwogICAgICAgICAgICAgICAgICAgICAgICA6ICc8YSBocmVmPSInLiRzd2l0Y2hfbGluay4n IiB0aXRsZT0iJy5nVHh0KCdzbWRfYWR0aF9hcHBseV9za2luJykuJyI+Jy4oKCR0aHVtYm5h aWwpID8gJHRodW1ibmFpbCA6IGdUeHQoJ3NtZF9hZHRoX2FwcGx5X3NraW4nKSkuJzwvYT4n OwogICAgICAgICAgICAkYXV0aGJsb2NrID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJp J10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3Vy aSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107 CgogICAgICAgICAgICBpZiAoJGxheW91dD09MCkgewogICAgICAgICAgICAgICAgZWNobyB0 cigKICAgICAgICAgICAgICAgICAgICBuLnRkKCR0aHVtYmxvY2spCiAgICAgICAgICAgICAg ICAgICAgLm4udGQoJGF1dGhibG9jaykKICAgICAgICAgICAgICAgICAgICAubi50ZCgkc2tp bmZvWydkZXNjcmlwdGlvbiddKQogICAgICAgICAgICAgICAgICAgICwgKCgkc2tpbl9uYW1l ID09ICRjdXJyX3NraW4pID8gJyBjbGFzcz0iaGlnaGxpZ2h0IicgOiAnJykKICAgICAgICAg ICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlY2hvIG4s ICc8ZGl2IGNsYXNzPSJ0eHAtZ3JpZC1jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tp bikgPyAnIGhpZ2hsaWdodCcgOiAnJykuJyI+JywKICAgICAgICAgICAgICAgICAgICAgICAg biwgaGVkKCRza2luZm9bJ2RuYW1lJ10sIDMpLAogICAgICAgICAgICAgICAgICAgICAgICBu LCAnPHA+JywgJHRodW1ibG9jaywgJzwvcD4nLAogICAgICAgICAgICAgICAgICAgICAgICBu LCAnPHA+JywgbiwgZ1R4dCgnc21kX2FkdGhfYnknKSwgbiwgJGF1dGhibG9jay4nPC9wPics CiAgICAgICAgICAgICAgICAgICAgbiwgJzwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogICAgaWYgKCRsYXlvdXQgPT0gMCkgewogICAgICAgIGVjaG8gbiwgZW5k VGFibGUoKSwKICAgICAgICAgICAgbiwgJzwvZGl2Pic7CiAgICB9IGVsc2UgewogICAgICAg IGVjaG8gbiwgJzwvZGl2Pic7CiAgICB9CiAgICBlY2hvIG4sICc8L2Rpdj4nOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIHNtZF9hdF9zYXZlX3BhbmVfc3RhdGUoKQp7CiAgICBsaXN0KCRw MSwgJHAyKSA9IHNtZF9hdF92YWxpZF90eXBlcygpOwoKICAgICRwYW5lcyA9IGFycmF5X21l cmdlKCRwMSwgJHAyLCBhcnJheSgnZm9sZGVycycsICdpbWFnZV9maWxlcycsICdvdGhlcicp KTsKICAgICRwYW5lID0gZ3BzKCdwYW5lJyk7CgogICAgaWYgKGluX2FycmF5KCRwYW5lLCAk cGFuZXMpKQogICAgewogICAgICAgIHNldF9wcmVmKCJzbWRfYXRfcGFuZV97JHBhbmV9X3Zp c2libGUiLCAoZ3BzKCd2aXNpYmxlJykgPT0gJ3RydWUnID8gJzEnIDogJzAnKSwgJ3NtZF9h dCcsIFBSRUZfSElEREVOLCAneWVzbm9yYWRpbycsIDAsIFBSRUZfUFJJVkFURSk7CiAgICAg ICAgc2VuZF94bWxfcmVzcG9uc2UoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2VuZF94bWxf cmVzcG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVzJyA9PiAnNDAwIEJhZCBSZXF1ZXN0JykpOwog ICAgfQp9IjtzOjQ6InR5cGUiO3M6MToiNCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZs YWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czoyNDU3MDoiPGgxIGlkPSJ0b3AiPnNtZF9hZG1p bl90aGVtZXM8L2gxPgoKPHA+SW5zdGFsbCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRt aW4tc2lkZSB0aGVtZXMgdGhlbiBzaGFyZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+ Cgo8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+Cgo8dWw+Cgk8bGk+Q3JlYXRlIGFu ZCBFZGl0IGFkbWluLXNpZGUgdGhlbWVzPC9saT4KCTxsaT5FbXBsb3kgaW1hZ2VzLCA8c3Bh biBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiwgSlMsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPi9QSFAgKGZvciBjaGFuZ2luZyBtYXN0aGVhZCwgaGVhZGVyICZhbXA7IGZvb3Rl cikgaW4geW91ciB0aGVtZTwvbGk+Cgk8bGk+VXNlIGNvbnN0YW50cyBpbiB5b3VyIDxzcGFu IGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGZpbGVzPC9saT4KCTxsaT5CYXNlIHlvdXIgdGhl bWUgb24gYW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZTwvbGk+ Cgk8bGk+RXhwb3J0IGEgdGhlbWUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBj b21tdW5pdHkgaW4gZWl0aGVyIC50YXIsIC50Z3osIC5iejIgb3IgLnppcCBmb3JtYXQgKHJl cXVpcmVzIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfY3J1bmNoZXJzIj5z bWRfY3J1bmNoZXJzPC9hPiBwbHVnaW4pPC9saT4KCTxsaT5JbXBvcnQgLyBpbnN0YWxsIG90 aGVyIHRoZW1lcyBmcm9tIHRoZSA8YSBocmVmPSJodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRt aW5pc3RyYXRpb24tdGhlbWVzIj5jb21tdW5pdHkgcmVwb3NpdG9yeTwvYT48L2xpPgoJPGxp PkFkbWluaXN0cmF0b3IgY2FuIHNldCBhIGRlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2Vycywg b3IgZW5hYmxlIHBlci11c2VyIC8gcGVyLXJvbGUgdGhlbWVzPC9saT4KPC91bD4KCjxoMiBp ZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKPHAgY2xh c3M9Indhcm5pbmciPlJlcXVpcmVzIFRleHRwYXR0ZXJuIDQuNi4wKyBhbmQgPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9jcnVuY2hlcnMiPnNtZF9jcnVuY2hlcnM8L2E+ IHBsdWdpbiBmb3IgaW1wb3J0L2V4cG9ydDwvcD4KCjxwPkRvd25sb2FkIHRoZSBwbHVnaW4g ZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0Jsb2tlL3NtZF9hZG1p bl90aGVtZXMvIj5HaXRIdWI8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUg VGV4dHBhdHRlcm4gPGVtPkFkbWluLSZndDtQbHVnaW5zPC9lbT4gcGFuZSwgaW5zdGFsbCBh bmQgZW5hYmxlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiBsYWJlbGxlZCA8ZW0+RXh0ZW5zaW9u cy0mZ3Q7QWRtaW4gdGhlbWVzPC9lbT4gaXMgY3JlYXRlZC4gPHN0cm9uZz5Pbmx5IHB1Ymxp c2hlcnMgd2lsbCBzZWUgdGhpcyB0YWI8L3N0cm9uZz4uPC9wPgoKPHA+VGhlIHBsdWdpbiBz aG91bGQgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBwcmVmZXJlbmNlcyBmb3IgeW91LiBD bGljayAmIzgyMTY7UHJlZmVyZW5jZXMmIzgyMTc7IGZyb20gdGhlIDxlbT5FeHRlbnNpb25z LSZndDtBZG1pbiB0aGVtZXM8L2VtPiB0YWIgb3IgPGVtPk9wdGlvbnM8L2VtPiBmcm9tIHRo ZSA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiB0YWIgdG8gYWx0ZXIsIGRlbGV0ZSBvciBy ZWluc3RhbGwgdGhlbS48L3A+Cgo8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMwOTUyIj5mb3J1bSB0aHJlYWQ8 L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVy d2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCjxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0 ZSB0aGUgcGx1Z2luIGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2Uu IFRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVtb3ZlZC4gUGxlYXNl IGJlIGF3YXJlIHRoYXQgcmVtb3ZpbmcgdGhlIHBsdWdpbiBkb2VzIDxzdHJvbmc+bm90IHJl bW92ZSBhbnkgdGhlbWVzIHlvdSBoYXZlIGluc3RhbGxlZCwgbm9yIGRvZXMgaXQgcmVtb3Zl IHBlci11c2VyIHRoZW1lIHByZWZlcmVuY2VzPC9zdHJvbmc+LiBQZXItdXNlciBwcmVmcyB3 aWxsIHNpbXBseSBiZSBpZ25vcmVkIHdoZW4gdGhlIHBsdWdpbiBpcyBkZWxldGVkLjwvcD4K CjxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCjxwPk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucy0m Z3Q7QWRtaW4gdGhlbWVzPC9lbT4gdGFiIGlzIGEgbGlzdCBvciBncmlkIGNvbnRhaW5pbmcg aW5zdGFsbGVkIHRoZW1lcy4gT3V0IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwgYmUgdHdvIGF2 YWlsYWJsZTogPGVtPmhpdmU8L2VtPiBhbmQgPGVtPmhpdmVuZXV0cmFsPC9lbT4uIDxzdHJv bmc+SXQmIzgyMTc7cyBhZHZpc2FibGUgbm90IHRvIGNoYW5nZSB0aGVzZSB0aGVtZXM8L3N0 cm9uZz4gc28geW91IGNhbiBhbHdheXMgZ28gYmFjayB0byB0aGVtIGlmIGV2ZXJ5dGhpbmcg Z29lcyBzaWRld2F5cy4gUGx1cyBpdCYjODIxNztzIGEgdmVyeSB1c2VmdWwgc3RhcnRpbmcg cG9pbnQgZnJvbSB3aGljaCB0byA8YSBocmVmPSIjY2xvbmUiPmJhc2U8L2E+IGEgPGEgaHJl Zj0iI25ldyI+bmV3IHRoZW1lPC9hPi48L3A+Cgo8cD5JbiB0aGUgbGlzdCBsYXlvdXQsIHRo ZSBjb2x1bW5zIGFyZTo8L3A+Cgo8ZGw+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1l PC9zcGFuPjwvZHQ+Cgk8ZGQ+VGhlIG5hbWUgb2YgdGhlIHRoZW1lIGFuZCAob3B0aW9uYWwp IHRodW1ibmFpbCBhc3NpZ25lZCB0byBpdC4gQ2xpY2sgdG8gPGEgaHJlZj0iI3N3aXRjaCI+ YWN0aXZhdGU8L2E+IHRoZSB0aGVtZS48L2RkPgoJPGRkPklmIHRoZSB0aGVtZSBpcyBiYXNl ZCBvbiBhbm90aGVyIHVzZXImIzgyMTc7cyB0aGVtZSwgdGhpcyBkZXBlbmRlbmN5IHdpbGwg YmUgc2hvd24gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgdGhlIHRoZW1lIG5hbWUuPC9kZD4KCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+QXV0aG9yPC9zcGFuPjwvZHQ+Cgk8ZGQ+WW91ISBMaW5r ZWQgdG8geW91ciB3ZWIgc2l0ZSBpZiB5b3Ugc3VwcGx5IGl0IGluIHlvdXIgPGEgaHJlZj0i I2Fib3V0Ij5NYW5pZmVzdDwvYT4uPC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+VmVy c2lvbjwvc3Bhbj48L2R0PgoJPGRkPlRoZW1lIHZlcnNpb24gbnVtYmVyIGluIDxjb2RlPm1h am9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24uIElmIGEgbmV3ZXIgdmVyc2lvbiBv ZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRnYXJkZW4sIHRoZSB2ZXJzaW9uIG51 bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0aGVtZSBvbiBUZXh0Z2FyZGVuIHNv IHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC48L2RkPgoJPGRkPlRoZSB2ZXJzaW9ucyBh cmUgY2hlY2tlZCwgYXQgbW9zdCwgb25jZSBldmVyeSAyNCBob3VycyB0byBhdm9pZCBoYW1t ZXJpbmcgdGhlIHNlcnZlci48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5EZXNjcmlw dGlvbjwvc3Bhbj48L2R0PgoJPGRkPkJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxhaW5p bmcgeW91ciB0aGVtZS4gSWYgeW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gaW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5rZWQg aGVyZSBhcyB3ZWxsLjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8L3Nw YW4+PC9kdD4KCTxkZD5BY3Rpb25zIHRvIHBlcmZvcm0gb24gZWFjaCB0aGVtZToKCTxkbD4K CQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPltOZXcgdGhlbWVdPC9zcGFuPjwvZHQ+CgkJPGRk PjxhIGhyZWY9IiNuZXciPkNyZWF0ZTwvYT4gYSBuZXcgYmxhbmssIGVtcHR5IGZvbGRlciBy ZWFkeSBmb3IgeW91ciB0aGVtZS4gTm8gc3BhY2VzIC8gb2RkIGNoYXJhY3RlcnMgYXJlIGFs bG93ZWQgaW4gdGhlIG5hbWUgYW5kIGl0IG11c3Qgbm90IHN0YXJ0IHdpdGggYSBudW1iZXIu PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPltFZGl0XTwvc3Bhbj48L2R0PgoJCTxk ZD48YSBocmVmPSIjZWRpdF90aGVtZSI+RWRpdDwvYT4gdGhlIHZhcmlvdXMgZGV0YWlscywg ZmlsZXMgYW5kIGNvbnRlbnQgd2l0aGluIHRoZSB0aGVtZS48L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+W0Jhc2VdPC9zcGFuPjwvZHQ+CgkJPGRkPjxhIGhyZWY9IiNjbG9uZSI+ RXh0ZW5kPC9hPiBvbmUgb2YgdGhlIGV4aXN0aW5nIHRoZW1lcyB0byBtYWtlIHlvdXIgb3du IGNoYW5nZXMgdW5kZXIgYSBuZXcgbmFtZS48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+W0V4cG9ydF08L3NwYW4+PC9kdD4KCQk8ZGQ+PGEgaHJlZj0iI2V4cG9ydCI+U2F2ZTwv YT4gdGhlIHRoZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZvciBkaXN0cmlidXRp b24vYmFja3VwIGluIHlvdXIgY2hvc2VuIGNvbXByZXNzaW9uIGZvcm1hdC48L2RkPgoJCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+W0RlbGV0ZV08L3NwYW4+PC9kdD4KCQk8ZGQ+Q29tcGxl dGVseSA8YSBocmVmPSIjZGVsZXRlIj5yZW1vdmU8L2E+IHRoZSB0aGVtZS4gTm90IGF2YWls YWJsZSB0byB0aGUgY29yZSB0aGVtZXMsIGZvciBvYnZpb3VzIHJlYXNvbnMhIEFsc28gbm90 IGF2YWlsYWJsZSBpZiBhIHRoZW1lIGhhcyBiZWVuIHVzZWQgYXMgYSBiYXNpcyBmb3IgYW5v dGhlciB0aGVtZSBpbiB0aGUgY3VycmVudCBzaXRlLjwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8L2Rs PgoKPHA+VGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQgYW5kIHRoZSBj dXJyZW50IGRlZmF1bHQgdGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGlnaGxpZ2h0ZWQu IFRoZSBncmlkIHZpZXcgaGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiwgbGFp ZCBvdXQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuPC9wPgoKPGgyIGlkPSJzd2l0Y2giPlN3aXRj aGluZyB0aGVtZXM8L2gyPgoKPHA+QXMgdGhlIGFkbWluaXN0cmF0b3IsIHlvdSBjYW4gcGxh eSBHb2Qgb3ZlciBldmVyeW9uZSBlbHNlJiM4MjE3O3MgdGhlbWVzLiBZb3UgYXJlIGZyZWUg dG8gaW5zdGFsbCBhcyBtYW55IGFzIHlvdSB3aXNoIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGVt IHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlciBsb2dpbnMuIE5vYm9keSBlbHNlIHdpbGwg ZXZlbiBrbm93IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgcGx1Z2luLjwvcD4KCjxwPklmLCBo b3dldmVyLCB5b3UgdmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVyZW5jZXM8L2E+ IHBhZ2UgeW91IGNhbiBjb25maWd1cmUgdGhlIHRoZW1lcyB0aGF0IG90aGVycyB1c2UuIFRo ZXJlIGFyZSB0aHJlZSBtZWNoYW5pc21zIHRvIGNob29zZSBmcm9tOjwvcD4KCjx1bD4KCTxs aT5Gb3JjZSBvbmUgdGhlbWUgZm9yIGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+ Cgk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBlYWNoIHVzZXIgcHJpdmlsZWdlIGxldmVsIChl eGNlcHQgeW91cnNlbGYpPC9saT4KCTxsaT5BbGxvdyBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vy c2VsZikgdG8gcGljayB0aGVpciBmYXZvdXJpdGUgdGhlbWUgZnJvbSBhIHNob3J0bGlzdCB5 b3UgZGVmaW5lPC9saT4KPC91bD4KCjxwPkF0IGFsbCB0aW1lcywgeW91IGNhbiBjaG9vc2Ug YW55IHRoZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIgb3duIHVzZS4gVGhpcyBhbGxvd3MgdHJp YWxsaW5nLCB0d2Vha2luZyBhbmQgdGVzdGluZyBvZiB0aGVtZXMgYmVmb3JlIHVubGVhc2hp bmcgdGhlbSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+Cgo8aDIgaWQ9InNldHVwIj5UaGVtZSBw cmVmZXJlbmNlczwvaDI+Cgo8dWw+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNhc2Utc2Vu c2l0aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDogV2hlbiBzZXQgdG8gPGNvZGU+WWVzPC9jb2Rl PiwgdXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBsb3dlciBj YXNlIHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJlIGxpc3RlZCBmaXJzdC4gRm9yIGV4YW1wbGUs IDMgdGhlbWUgY2FsbGVkICYjODIxNjtBbmdlbGljJiM4MjE3OywgJiM4MjE2O2JhcmJhcmlj JiM4MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZlJiM4MjE3OyB3aWxsIGJlIG9yZGVyZWQ6IDxj b2RlPkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJiYXJpYzwvY29kZT4uIFNldCB0byA8Y29kZT5O bzwvY29kZT4gdG8gbWl4IHVwcGVyIGFuZCBsb3dlci1jYXNlIHRoZW1lcyB0b2dldGhlciAo b3JkZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGljLCBiYXJiYXJpYywgQ29oZXNpdmU8L2NvZGU+ ICkuIFRoZSBjb3JlIHRoZW1lcyBhcmUgYWx3YXlzIGxpc3RlZCBmaXJzdC48L2xpPgoJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5FeHBvcnQgY29tcHJlc3Npb24gdHlwZTwvc3Bhbj4gOiA8 c3BhbiBjbGFzcz0id2FybmluZyI+T25seSBpZiA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vc21kX2NydW5jaGVycyI+c21kX2NydW5jaGVyczwvYT4gaXMgaW5zdGFsbGVkPC9z cGFuPiBEZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IGFuZCB3aGljaCBtb2R1bGVzIGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIGl0 LCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIGNvbXByZXNzaW9uIGZvcm1hdHMgaGVyZS4gQ2hv b3NlIG9uZSB0aGF0IHN1aXRzIHlvdSBhcyB0aGUgZGVmYXVsdCBpbiB3aGljaCB0byBleHBv cnQgeW91ciB0aGVtZSBwYWNrYWdlcy4gWW91IG1heSBjaG9vc2UgZnJvbSA8ZW0+VGFyPC9l bT4sIDxlbT5HWmlwPC9lbT4gKGFjdHVhbGx5IHRhcitnemlwKSwgPGVtPkJ6aXAyPC9lbT4g KHRhcitiemlwKSwgb3IgPGVtPlppcDwvZW0+ICh0aGUgZGVmYXVsdCkuPC9saT4KCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TGF5b3V0IG1ldGhvZDwvc3Bhbj4gOiBDaG9vc2UgZnJvbSBh IExpc3QgVmlldyAodXNlZnVsIGlmIHlvdSBwcmVmZXIgdG8gaGlkZSBvciB1c2Ugc21hbGwg dGh1bWJzKSBvciBhIEdyaWQgVmlldyBvZiBpbnN0YWxsZWQgdGhlbWVzLiBUaGlzIHNldHRp bmcgYXBwbGllcyB0byBib3RoIGFkbWluIGFuZCB1c2VyIHRoZW1lIHNlbGVjdGlvbiB0YWJz LiBEZWZhdWx0OiBHcmlkIFZpZXc8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaHVt YiBkaW1lbnNpb25zPC9zcGFuPiA6IFNldCB0aGUgdGh1bWJuYWlsIGRpbWVuc2lvbnMgaW4g dGhlIHRoZW1lIGxpc3QuIFNldCBlaXRoZXIgZGltZW5zaW9uIHRvIDAgdG8gdHVybiBvZmYg dGh1bWJuYWlsIGRpc3BsYXkuIERlZmF1bHQ6IDI2MCAmIzIxNTsgMTUwcHg8L2xpPgoJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5GaWxlbmFtZSBmb3JtYXQ8L3NwYW4+IDogRGVmaW5lIHRo ZSBmb3JtYXQgb2YgdGhlIGV4cG9ydGVkIHRoZW1lLiBZb3UgY2FuIHVzZSA8Y29kZT57dGhl bWV9PC9jb2RlPiBhbmQgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiByZXBsYWNlbWVudCB2YXJp YWJsZXMgaW4gdGhpcyBmaWVsZC4gRm9yIGV4YW1wbGUsIDxjb2RlPnt0aGVtZX1fdnt2ZXJz aW9ufTwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPnt0aGVtZX08L2NvZGU+PC9saT4KCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TWF4IHRoZW1lIGZpbGUgc2l6ZTwvc3Bhbj4gOiBBbnkgKGNv bXByZXNzZWQpIHRoZW1lIHRoYXQgZXhjZWVkcyB0aGlzIGZpbGUgc2l6ZSB3aWxsIG5vdCBi ZSBpbXBvcnRlZC4gRGVmYXVsdDogPGNvZGU+NTEyMDAwPC9jb2RlPjwvbGk+Cgk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQgdGhlbWU8L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBm b3IgYWxsIG90aGVyIHVzZXJzLiBJZiB1c2luZyAmIzgyMTY7T25lIHRoZW1lIGZvciBldmVy eW9uZSYjODIxNzsgdGhlIHRoZW1lIGNob3NlbiBoZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1 c2Vycy4gSWYgdXNpbmcgYW55IG9mIHRoZSBvdGhlciBtZWNoYW5pc21zLCB0aGlzIHRoZW1l IGlzIGEgZmFsbGJhY2sgc2hvdWxkIHNvbWV0aGluZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBzeXN0ZW08L3NwYW4+IDogQXMgZGV0YWls ZWQgaW4gPGEgaHJlZj0iI3N3aXRjaCI+U3dpdGNoaW5nIHRoZW1lczwvYT4sIHlvdSBtYXkg Y2hvb3NlIHRoZSB3YXkgdGhlIFRleHRwYXR0ZXJuIGludGVyZmFjZSBpcyBwcmVzZW50ZWQg dG8gb3RoZXIgdXNlcnM6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhl bWUgZm9yIGFsbDwvc3Bhbj4gOiB1c2VzIHRoZSBEZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNl cnM7IHRoZXkgaGF2ZSBubyBjaG9pY2UgaW4gdGhlIG1hdHRlcjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbDwvc3Bhbj4gOiBh bGxvd3MgeW91IHRvIGFzc2lnbiBvbmUgb3IgbW9yZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGEg dGhlbWUuIENob29zZSBhIHRoZW1lIGZyb20gdGhlIGxlZnQtaGFuZCBsaXN0IGFuZCB0aGVu IHNoaWZ0L2N0cmwtY2xpY2sgdGhlIHByaXZpbGVnZSBsZXZlbHMgdG8gYXNzaWduIHRoZW0u IEZsaWNrIGJldHdlZW4gdGhlbWVzIGluIHRoZSBsZWZ0IGNvbHVtbiB0byBzZWUgd2hpY2gg b25lcyBhcmUgc2V0IGZvciB2YXJpb3VzIHVzZXIgbGV2ZWxzLCBvciBob3ZlciBvdmVyIGEg cHJpdmlsZWdlIGxldmVsIHRvIHNlZSBhIHRvb2x0aXAuIE9ubHkgb25lIGxldmVsIGNhbiBi ZSBhc3NpZ25lZCB0byBhIHRoZW1lIHNvIGlmIHlvdSBjbGljayBhIGxldmVsIHRoYXQgaGFz IGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byBhbm90aGVyIHRoZW1lLCBpdCB3aWxsIGJlIHJl bW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgYXNzaWdubWVudC4gTm90ZSB5b3UgbXVzdCBTYXZl IHRoZSBjaGFuZ2VzIGZvciB0aGVtIHRvIHRha2UgZWZmZWN0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBwZXIgdXNlcjwvc3Bhbj4gOiBkZWZpbmUgYSBzaG9y dGxpc3QgZnJvbSB0aGUgYXZhaWxhYmxlIGluc3RhbGxlZCB0aGVtZXMgdG8gb2ZmZXIgdG8g YWxsIHVzZXJzLiBBIG5ldyBwYW5lbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgdG8gb3RoZXIg dXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhhdCBpcyBlc3NlbnRpYWxseSBhIGN1dC1k b3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIuIFVzZXJzIGNh biBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRoZSB0aGVtZXMgeW91IGhhdmUgcGVybWl0 dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKPHA+UmVtZW1iZXIgdG8gY2xpY2sgU2F2 ZSB0byBhcHBseSB0aGUgY2hhbmdlcy4gQ2xpY2tpbmcgYW55IG90aGVyIHBhbmVsIHdpbGwg dW5kbyBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWF5IGhhdmUgbWFkZS48L3A+Cgo8aDIgaWQ9 ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+Cgo8cD5DbGljayB0aGlzIGJ1dHRvbiB0byBi ZSB0YWtlbiB0byB0aGUgY2VudHJhbCBhZG1pbiB0aGVtZSByZXBvc2l0b3J5IHdoZXJlIHlv dSBtYXkgYnJvd3NlIHRoZW1lcyBhbmQgZG93bmxvYWQgdGhlbSByZWFkeSBmb3IgaW5zdGFs bGF0aW9uLjwvcD4KCjxoMiBpZD0iaW1wb3J0Ij5JbnN0YWxsIGEgdGhlbWU8L2gyPgoKPHAg Y2xhc3M9Indhcm5pbmciPk9ubHkgYXZhaWxhYmxlIGlmIDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9zbWRfY3J1bmNoZXJzIj5zbWRfY3J1bmNoZXJzPC9hPiBpcyBpbnN0YWxs ZWQuPC9wPgoKPHA+TG9jYXRlIGEgdGhlbWUgcGFja2FnZSBvbiB5b3VyIGhhcmQgZHJpdmUg b3IgcGFzdGUgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBhIHBhY2thZ2Ug aW4gdGhlIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBIaXQgPHN0cm9uZz5VcGxvYWQ8 L3N0cm9uZz4gYW5kIGl0IHdpbGwgYmUgaW5zdGFsbGVkLiBJZiBpdCBhbHJlYWR5IGV4aXN0 cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBOb3RlIHRoYXQgeW91IG1heSByZWNlaXZlIGEg d2FybmluZyBpZiB0aGUgdGhlbWUgaXMgcGFja2FnZWQgdXNpbmcgYSBjb21wcmVzc2lvbiBh bGdvcml0aG0gdGhhdCBpcyBub3QgYnVpbHQgaW50byB5b3VyIHZlcnNpb24gb2YgPHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uIEEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcHJlc3Np b24gdHlwZXMgaXMgZ2l2ZW4gYmVsb3cgdGhlIHVwbG9hZCBib3guPC9wPgoKPGgyIGlkPSJu ZXciPkNyZWF0ZSBhIG5ldyAoZW1wdHkpIHRoZW1lPC9oMj4KCjxwPkNsaWNrIDxzdHJvbmc+ Q3JlYXRlIG5ldyB0aGVtZTwvc3Ryb25nPiBhbmQgYSBib3ggd2lsbCBzbGlkZSBkb3duIGFs bG93aW5nIHlvdSB0byBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lLjwvcD4KCjxwPk5vIHNwYWNl cyBvciBvZGQgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRoZSBuYW1lIHlv dSBlbnRlciBpcyB0aGUgbmFtZSBvZiB0aGUgZm9sZGVyIHRoYXQgd2lsbCBiZSBjcmVhdGVk IGluIHRoZSA8ZW0+dGhlbWU8L2VtPiBmb2xkZXIgYW5kIHRoZSBuYW1lIG9mIHlvdXIgdGhl bWUmIzgyMTc7cyBjbGFzcy4gSWYgeW91IGRvIG1hbmFnZSB0byB1c2Ugb2RkIGNoYXJhY3Rl cnMsIHRoZSBuYW1lIHdpbGwgYmUgJiM4MjIwO2R1bWJlZCBkb3duJiM4MjIxOyBmb3IgeW91 LjwvcD4KCjxwPkluIG9yZGVyIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIG90aGVyIHBl b3BsZSYjODIxNztzIHRoZW1lcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgdGhlbWVz IHlvdSBkZXNpZ24gYmVnaW4gd2l0aCBhIHVuaXF1ZSAzLWxldHRlciBwcmVmaXggb2YgeW91 ciBvd24gY2hvb3NpbmcsIHBsdXMgYW4gdW5kZXJzY29yZSAmIzgyMTI7IGV4YWN0bHkgbGlr ZSBwbHVnaW5zLiBUaHVzLCBzbWRfQmx1ZU1lYW5pZSBtaWdodCB3ZWxsIGJlIHRoZSBuYW1l IG9mIGEgdGhlbWUuIFdoZW4geW91IGhhdmUgbmFtZWQgeW91ciB0aGVtZSwgY2xpY2sgPGI+ W0dvXTwvYj4gdG8gY3JlYXRlIGEgZm9sZGVyIGluIHdoaWNoIGl0IGNhbiByZXNpZGUuPC9w PgoKPHA+T25jZSB0aGUgbmFtZSBpcyBzZXQsIHRoZSBvbmx5IHdheXMgdG8gcmVuYW1lIGl0 IGFyZSB0bzo8L3A+Cgo8b2w+Cgk8bGk+ZWRpdCB0aGUgdGhlbWUmIzgyMTc7cyBtYWluIDxj b2RlPi5waHA8L2NvZGU+IGZpbGVuYW1lIGZyb20gdGhlIHBsdWdpbiYjODIxNztzIGludGVy ZmFjZS4gVGhlIGZvbGRlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVuYW1lZCB0byBtYXRj aC48L2xpPgoJPGxpPm1hbnVhbGx5IHJlbmFtZSB0aGUgZm9sZGVyIGFuZCA8Y29kZT4ucGhw PC9jb2RlPiBmaWxlbmFtZS48L2xpPgo8L29sPgoKPHA+SW4gYm90aCBjYXNlcywgeW91IDxz dHJvbmc+bXVzdDwvc3Ryb25nPiBhbHNvIGFsdGVyIHRoZSB0aGVtZSYjODIxNztzIGNsYXNz IG5hbWUgaW5zaWRlIHRoZSA8Y29kZT4ucGhwPC9jb2RlPiBmaWxlIGl0c2VsZi48L3A+Cgo8 aDIgaWQ9ImNsb25lIj5FeHRlbmQgYW4gZXhpc3RpbmcgdGhlbWU8L2gyPgoKPHA+Q2xpY2sg PGI+W0Jhc2VdPC9iPiB0byBjcmVhdGUgYSBuZXcgdGhlbWUgYmFzZWQgb24gYW5vdGhlci4g QSBib3ggd2lsbCBzbGlkZSBkb3duIHNvIHlvdSBtYXkgZW50ZXIgdGhlIG5hbWUgb2YgeW91 ciBjb3B5LjwvcD4KCjxwPk9ic2VydmUgdGhlIDxhIGhyZWY9IiNuZXciPm5hbWluZyBjb252 ZW50aW9uPC9hPiwgdGhlbiBjbGljayA8Yj5bR29dPC9iPiB0byBjcmVhdGUgdGhlIG5ldyB0 aGVtZS48L3A+Cgo8cD48c3BhbiBjbGFzcz0id2FybmluZyI+UGxlYXNlIHJlbWVtYmVyLCB5 b3VyIHRoZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9zZW4gdGhlbWUgYW5kIDxz dHJvbmc+Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24gYSB1c2VyJiM4MjE3O3Mg c3lzdGVtIGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0IGlzIHdvcnRoIGVuc3Vy aW5nIHRoYXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBhd2FyZSBvZiB0aGlzIGRl cGVuZGVuY3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRpb247IHBlcmhhcHMgYWRk IGEgbGluayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50aW9uIHRoZSBkZXBlbmRl bmN5IGluIHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVtZSYjODIxNztzIGFydGlj bGUgb24gVGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIGFueSB0 aGVtZSBmcm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBlbmRlbmN5LCBvdGhlcndp c2UgeW91ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwvcD4KCjxoMiBpZD0iZXhw b3J0Ij5FeHBvcnQgYSB0aGVtZTwvaDI+Cgo8cCBjbGFzcz0id2FybmluZyI+T25seSBhdmFp bGFibGUgaWYgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9jcnVuY2hlcnMi PnNtZF9jcnVuY2hlcnM8L2E+IGlzIGluc3RhbGxlZC48L3A+Cgo8cD5JZiB5b3Ugd2lzaCB0 byBiYWNrIHVwIGEgdGhlbWUgb3Igc2hhcmUgaXQgd2l0aCBvdGhlcnMsIGNsaWNrIDxiPltF eHBvcnRdPC9iPi4gQSBib3ggd2lsbCBzbGlkZSBkb3duIG9mZmVyaW5nIHlvdSBhIGNob2lj ZSBvZiBjb21wcmVzc2lvbiBmb3JtYXRzOyB0aGUgZGVmYXVsdCBpcyB0aGUgZm9ybWF0IHlv dSBjaG9zZSBmcm9tIHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdl LjwvcD4KCjxwPldoZW4geW91IGhhdmUgY2hvc2VuIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQs IGNsaWNrIDxiPltHb108L2I+IHRvIGV4cG9ydCB0aGUgdGhlbWUgYW5kIHNhdmUgaXQgdG8g eW91ciBjb21wdXRlci4gQWxsIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHRoZW1lIHdpbGwgYmUg cGFja2FnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBkb3dubG9hZCBmaWxlIGZvciBjb252 ZW5pZW5jZS48L3A+Cgo8cD5UaGUgZmlsZW5hbWUgaXMgZ292ZXJuZWQgYnkgdGhlIDxlbT5G aWxlbmFtZSBmb3JtYXQ8L2VtPiBwcmVmZXJlbmNlLjwvcD4KCjxoMiBpZD0iZGVsZXRlIj5E ZWxldGUgYSB0aGVtZTwvaDI+Cgo8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFyZSBz dXJlKSB0byByZW1vdmUgdGhlIGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRzIGZy b20gdGhlIGZpbGUgc3lzdGVtLiA8c3BhbiBjbGFzcz0id2FybmluZyI+VGhpcyBpcyBub3Qg dW5kb2FibGUsIHNvIGJlIGNhcmVmdWw8L3NwYW4+LjwvcD4KCjxoMiBpZD0iZWRpdF90aGVt ZSI+RWRpdCBhIHRoZW1lPC9oMj4KCjxwPkEgdGhlbWUgaXMgYSBjb2xsZWN0aW9uIG9mIGZp bGVzLiBUaGUgZmlsZXMgYWxsIHJlc2lkZSBpbiB0aGVpciBvd24gc2VsZi1jb250YWluZWQg Zm9sZGVyIHVuZGVyIDxjb2RlPnRleHRwYXR0ZXJuL3RoZW1lPC9jb2RlPi4gVGhlIG5hbWUg b2YgdGhlIGZvbGRlciBpcyB0aGUgbmFtZSBvZiB5b3VyIHRoZW1lLCBoZW5jZSB0aGUgcmVh c29uIGl0IGNhbm5vdCBjb250YWluIGFueSBvYnNjdXJlIGNoYXJhY3RlcnMgdGhhdCB3b3Vs ZCBiZSBpbnZhbGlkIGluIHRoZSBmaWxlc3lzdGVtIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IHZhcmlhYmxlcy48L3A+Cgo8cD5XaGVuIHlvdSBjbGljayA8Yj5bRWRpdF08 L2I+IHlvdSB3aWxsIGJlIHRha2VuIHRvIGEgc2NyZWVuIHRoYXQgYWxsb3dzIHlvdSB0byBt YWtlIGNoYW5nZXMgdG8gdGhlIHRoZW1lLiBUaGUgRWRpdCBzY3JlZW4gaXMgYnJva2VuIGlu dG8gdHdvIHN1Yi1wYW5lbHMsIGFzIGZvbGxvd3M6PC9wPgoKPGgzIGlkPSJlZGl0X2NvbnRl bnQiPkNvbnRlbnQ8L2gzPgoKPHA+VGhpcyBpcyB3aGVyZSB5b3UgZWRpdCB0aGUgY29udGVu dHMgb2YgdGhlIGZpbGVzIGluIHlvdXIgdGhlbWUuIFRoZSBzbWFsbCBlZGl0IGJveCBhdCB0 aGUgdG9wIGlzIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxhcmdlIHRleHQgYXJlYSBpcyBpdHMg Y29udGVudC4gQ2xpY2sgPGI+U2F2ZTwvYj4gdG8gY29tbWl0IGNoYW5nZXMuIFlvdSBtYXkg ZnJlZWx5IHJlbmFtZSBhbnkgZmlsZSB5b3UgYXJlIGVkaXRpbmcuPC9wPgoKPHAgY2xhc3M9 Indhcm5pbmciPkltcG9ydGFudDogaWYgeW91IHNlbGVjdCBhIGZpbGUsIGVkaXQgaXQsIHJl bmFtZSBpdCwgYW5kIGNsaWNrIDxiPlNhdmU8L2I+IHlvdSB3aWxsIG92ZXJ3cml0ZSB3aGF0 ZXZlciB3YXMgaW4gdGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlmIHlvdSBlbXB0 eSB0aGUgY29udGVudHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0byBtYWtlIGEg JiM4MjIwO25ldyYjODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYSBuZXcgZmls ZSwgeW91IG11c3QgY2xpY2sgdGhlIDxiPk5ldyBmaWxlPC9iPiBidXR0b24gdG8gZW5zdXJl IHlvdSBhcmUgbm90IGVkaXRpbmcgYW4gZXhpc3RpbmcgZmlsZSBieSBtaXN0YWtlLjwvcD4K CjxwPldoZW4gY3JlYXRpbmcgYSBuZXcgZmlsZSwgYW5vdGhlciBib3ggd2lsbCBhcHBlYXIg YWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgdGhlIGZvbGRlciBmb3IgdGhlIGZpbGUuIEFsdGhv dWdoIGZpbGVzIGNhbiBiZSByZW5hbWVkLCBmb2xkZXJzIGNhbm5vdC4gT25jZSBhIGZpbGUg aXMgaW5zaWRlIGEgZm9sZGVyIGl0IGNhbm5vdCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBm b2xkZXIgZnJvbSB0aGUgdXNlciBpbnRlcmZhY2U6IHlvdSB3aWxsIGhhdmUgdG8gdXNlIHlv dXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4gcHJvZ3JhbSB0byBtb3ZlIGZpbGVz IG9yIHJlbmFtZSBmb2xkZXJzLjwvcD4KCjxwPkl0IGlzIGFsc28gd29ydGggbm90aW5nIHRo YXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZyb20gaG9zdCB0byBob3N0LiBJZiB5b3UgdHJ5 IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQgcmVjZWl2ZSBhIHl1a2t5IHdhcm5pbmcgbWVz c2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZSB0aGUgZmlsZSwgdHJ5IGluY3Jl YXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0aGVtZSBmb2xkZXIgYW5kIGFsbCBmaWxl cyBiZW5lYXRoIGl0LjwvcD4KCjxwPlRoZSB0aGVtZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQg aW4gVGV4dHBhdHRlcm4gd2l0aCA8Y29kZT42NDQ8L2NvZGU+IHBlcm1pc3Npb25zIHdoaWNo IHNob3VsZCBiZSBmaW5lIGZvciBhIHN0YW5kYXJkIGhvc3QuIFNvbWUgc2hhcmVkIGhvc3Rp bmcgY29tcGFuaWVzICYjODIxMjsgYW5kIHRoZXNlIGFyZSB1c3VhbGx5IHRoZSBvbmVzIHRo YXQgdGVsbCB5b3UgdG8gc2V0IHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGFuZCA8Y29kZT5p bWFnZXM8L2NvZGU+IGZvbGRlcnMgdG8gNzc3IGluIG9yZGVyIHRvIG1ha2UgdGhlbSB3cml0 YWJsZSBieSBUZXh0cGF0dGVybiAmIzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVy ZW50IHdheSB3aGljaCBtaWdodCByZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRl ciB0byB3cml0ZSB0byB0aGUgdGhlbWUgZm9sZGVyLiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkg b3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4 cGVyaW1lbnQgaWYgaXQgY2F1c2VzIHlvdSBwcm9ibGVtcy48L3A+Cgo8aDM+RmlsZSBoYW5k bGluZzwvaDM+Cgo8cD5BbG9uZ3NpZGUgdGhlIGVkaXRpbmcgYXJlYSBpcyB3aGVyZSB0aGVt ZSBmaWxlcyBhcmUgbWFuYWdlZC4gRmlyc3RseSBpcyBhIHNlbGVjdCBsaXN0IG9mIGFsbCBp bnN0YWxsZWQgdGhlbWVzOyB0aGUgY3VycmVudCB0aGVtZSBiZWluZyBlZGl0ZWQgaXMgc2Vs ZWN0ZWQuIENoYW5naW5nIHRoZSB0aGVtZSBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cg eW91IHRvIGVkaXQgYW5vdGhlciB0aGVtZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3Ug YXJlIGNvcHlpbmcgYW5kIHBhc3RpbmcgZmlsZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhl ciBhbmQgc2F2ZXMgeW91IGhhdmluZyB0byBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZp cnN0LjwvcD4KCjxwPkJlbmVhdGggdGhhdCBhcmUgdHdvIGJ1dHRvbnM6PC9wPgoKPHVsPgoJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5OZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcs IGVtcHR5IGZpbGUgaW4geW91ciB0aGVtZSBmb2xkZXIuIE5vdGhpbmcgaXMgYWN0dWFsbHkg Y3JlYXRlZCB1bnRpbCB5b3UgaGl0IDxiPlNhdmU8L2I+IGJ1dCB1c2luZyB0aGlzIGJ1dHRv biBlbnN1cmVzIHlvdSBiZWdpbiB3aXRoIGEgY2xlYW4gc2xhdGUgYW5kIGRvbiYjODIxNzt0 IGFjY2lkZW50YWxseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZpbGUgeW91IHdlcmUgZWRp dGluZzwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lIGxpc3Q8L3NwYW4+IDog QSBzaG9ydGN1dCBiYWNrIHRvIHRoZSBtYWluIHRoZW1lIGxpc3QgKGVxdWl2YWxlbnQgdG8g Y2xpY2tpbmcgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiBtZW51IGl0ZW0pPC9saT4KPC91 bD4KCjxwPk5leHQgaXMgYW4gdXBsb2FkIGFyZWEgYWxsb3dpbmcgeW91IHRvIHVwbG9hZCBu ZXcgZmlsZXMgYW5kIGltYWdlcyB0byB5b3VyIHRoZW1lLiBZb3UgY2FuIGJyb3dzZSBmb3Ig YXMgbWFueSBmaWxlcyB0byB1cGxvYWQgYXMgeW91IHdpc2ggJiM4MjEyOyBzdWJqZWN0IHRv IHRoZSBtYXhpbXVtIGZpbGUgc2l6ZSByZXN0cmljdGlvbiBhcyBzZXQgaW4geW91ciA8ZW0+ QWR2YW5jZWQgUHJlZmVyZW5jZXM8L2VtPiAmIzgyMTI7IGFuZCAob3B0aW9uYWxseSkgc3Rv cmUgdGhlbSBpbiB0aGUgbm9taW5hdGVkIGZvbGRlci4gVGhlc2UgY2FuIGJlIGFueSBvZiB0 aGUgc3VwcG9ydGVkIGZpbGUgdHlwZXMsIGluY2x1ZGluZyBpbWFnZXMuPC9wPgoKPHA+QmVs b3cgdGhvc2UgYnV0dG9ucyBhcmUgYSBidW5jaCBvZiBjb2xsYXBzaWJsZSBzZWN0aW9ucyBj b250YWluaW5nIGFsbCB0aGUgZmlsZXMgdGhhdCBtYWtlIHVwIHlvdXIgdGhlbWUuIENsaWNr OjwvcD4KCjx1bD4KCTxsaT5hIHNlY3Rpb24gaGVhZGluZyB0byB0b2dnbGUgdGhlIGdyb3Vw IG9mIGZpbGVzIHZpc2libGUvaGlkZGVuPC9saT4KCTxsaT5hIGZpbGVuYW1lIHRvIGxvYWQg aXQgaW50byB0aGUgdGV4dCBhcmVhIGZvciBlZGl0aW5nPC9saT4KCTxsaT5hIHJlZ3VsYXIg KGJpbmFyeSkgaW1hZ2UgZmlsZW5hbWUgdG8gcHJldmlldyBpdDogc3ZnIGZpbGVzIGFyZSBw cmV2aWV3ZWQgc2VwYXJhdGVseSB3aGlsZSBlZGl0aW5nIHRoZW0gaW4gdGhlIHRleHQgYXJl YTwvbGk+CjwvdWw+Cgo8cD5Ob3RlIHRoYXQgb3RoZXIgYmluYXJ5IGZpbGVzIG1heSBub3Qg YmUgZWRpdGVkIGFuZCBhcmUgcHJldmVudGVkIGZyb20gYmVpbmcgY2xpY2tlZC48L3A+Cgo8 cD5Zb3UgY2FuIHVzZSB0aGUgY2hlY2tib3hlcyBhbG9uZ3NpZGUgZWFjaCBmaWxlIHRvIHNl bGVjdCBmaWxlcyBmb3IgZGVsZXRpb24uIFVzZSB0aGUgJiM4MjE2O1dpdGggc2VsZWN0ZWQm IzgyMzA7JiM4MjE3OyBib3ggYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCBmb3IgdGhpcyB0 YXNrLiBZb3UgbWF5IHNoaWZ0LWNsaWNrIG11bHRpcGxlIGZpbGVzIHRvIHNlbGVjdCBhIHJh bmdlLjwvcD4KCjxoNCBpZD0iZWRpdF9pbWciPkltYWdlczwvaDQ+Cgo8cCBjbGFzcz0id2Fy bmluZyI+SW1hZ2VzIG11c3QgaGF2ZSBhIGxvd2VyLWNhc2UgZmlsZSBleHRlbnNpb24gb3Ig dGhleSB3aWxsIG5vdCBzaG93IHVwIGluIHRoZSBsaXN0IChhbHRob3VnaCB0aGV5IHdpbGwg YmUgdXBsb2FkZWQpLiBTdXBwb3J0ZWQgZXh0ZW5zaW9ucyBhcmUgPGNvZGU+LmpwZzwvY29k ZT4sIDxjb2RlPi5qcGVnPC9jb2RlPiwgPGNvZGU+LmdpZjwvY29kZT4sIDxjb2RlPi5wbmc8 L2NvZGU+IGFuZCA8Y29kZT4uc3ZnPC9jb2RlPi48L3A+Cgo8cD5VcGxvYWQgYW55IGltYWdl cyB0aGF0IHlvdXIgdGhlbWUgdXNlcy4gTm90ZSB0aGUgYmVzdCB3YXkgdG8gcmVmZXIgdG8g aW1hZ2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGluIHN0eWxlc2hlZXRzIGlz IHdpdGggYSByZWxhdGl2ZSBwYXRoOjwvcD4KCjxwcmU+PGNvZGU+Lm15U3R5bGUgewogICBi YWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UucG5nKTsKfTwvY29kZT48L3ByZT4KCjxwPkVhY2gg dGhlbWUgY2FuIGFsc28gY29udGFpbiBhbiBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMg YW4gaW1hZ2Ugb2YgMjYwJiMyMTU7MTUwcHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVl bnNob3QucG5nPC9jb2RlPiAob3IgPGNvZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2Nv ZGU+LCBldGMpIGluIHlvdXIgcm9vdCB0aGVtZSBmb2xkZXIuIE5vdGUgaXQgd2lsbCBiZSBz cXVhc2hlZCAvIHN0cmV0Y2hlZCB0byBmaXQgeW91ciB0aHVtYm5haWwgZGltZW5zaW9ucyBz ZXQgaW4gdGhlIHBsdWdpbiBwcmVmcy48L3A+Cgo8cD5JZiB5b3Ugc2VsZWN0IGFuIDxzcGFu IGNsYXNzPSJjYXBzIj5TVkc8L3NwYW4+IGltYWdlIGl0IHdpbGwgYmUgb3BlbmVkIHVwIGlu IHRoZSBlZGl0b3IganVzdCBsaWtlIGEgcmVndWxhciBmaWxlLiBZb3UgbWF5IHByZXZpZXcg aXQgYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+UHJldmlldzwvc3Ryb25nPiBsaW5rIGFsb25n c2lkZSB0aGUgZmlsZW5hbWUgaW5wdXQgYm94LiBBbGwgb3RoZXIgaW1hZ2UgZmlsZXMgYXJl IHByZXZpZXdlZCBieSBjbGlja2luZyB0aGVpciBuYW1lIGluIHRoZSBmaWxlIGxpc3QuPC9w PgoKPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVzaGVldHM8L2g0PgoKPHAgY2xhc3M9Indhcm5p bmciPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJj YXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LmNzczwvY29kZT4gb3IgPGNvZGU+LnNj c3M8L2NvZGU+IChpLmUuIFNhc3MgZmlsZXMpPC9wPgoKPHA+VGhlIG1lYXQgYW5kIHBvdGF0 b2VzIG9mIHlvdXIgdGhlbWUuIEFkZCBhcyBtYW55IHNoZWV0cyBhcyB5b3UgbGlrZSBhbmQg bG9hZCB0aGVtIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxl KHMpLjwvcD4KCjxoNCBpZD0iZWRpdF9zc2MiPlN0eWxlcGxhdGVzPC9oND4KCjxwIGNsYXNz PSJ3YXJuaW5nIj5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBj bGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5zc2M8L2NvZGU+PC9wPgoK PHA+QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNoZWV0IHRoYXQgYWxsb3dzIHlvdSB0 byBkZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91ciBzaGVldC4gV3JpdGUgeW91ciBz dHlsZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCwgYnV0IHdoZXJl IHlvdSBmaW5kIHlvdXJzZWxmLCBmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHNhbWUgY29sb3Ig dmFsdWUgcmVwZWF0ZWRseSBvciB0aGUgc2FtZSBydWxlcyBibG9jaywgeW91IGNhbiBzYXZl IHlvdXJzZWxmIHR5cGluZyBieSB1c2luZyBjb25zdGFudHM6PC9wPgoKPHByZSBjbGFzcz0i cHJldHR5cHJpbnQiPjxjb2RlPkBicmFuZGluZzogIzEyMzQ1NjsKI2hlYWRlciB7CiAgY29s b3I6IEBicmFuZGluZzsKfQpoMiB7CiAgY29sb3I6IEBicmFuZGluZzsKfTwvY29kZT48L3By ZT4KCjxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHdob2xlIHJ1bGUgYmxvY2tzIGxpa2UgdGhp cyAoPGVtPk5vdGUgdGhlIGNvbG9uIGFmdGVyIHRoZSBibG9jayBuYW1lPC9lbT4pIDo8L3A+ Cgo8cHJlPjxjb2RlPkBteV9ibG9jazogewogIG1hcmdpbjowIDIwcHg7CiAgYm9yZGVyOjNw eCBzb2xpZCAjOTk5OwogIGZvbnQtc2l6ZToxMjAlOwp9CiNoZWFkZXIgewogIGNvbG9yOiBA YnJhbmRpbmc7CiAgcG9zaXRpb246cmVsYXRpdmU7CiAgQG15X2Jsb2NrOwp9CmgyIHsKICBA bXlfYmxvY2s7Cn08L2NvZGU+PC9wcmU+Cgo8cD5JZiB5b3UgcHV0IGFsbCB5b3VyIGNvbnN0 YW50cyBhdCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlIHRoZXkgd2ls bCBiZSByZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3MgZmlsZS48L3A+Cgo8cD5XaGVu IHlvdSBzYXZlIGEgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSwgYSBjb3JyZXNwb25kaW5nLW5h bWVkIDxjb2RlPi5jc3M8L2NvZGU+IGZpbGUgd2lsbCBhbHNvIGJlIGNyZWF0ZWQuIFRoZSB0 d28gd2lsbCBiZSBrZXB0IGluIHN5bmMgYXMgZmFyIGFzIHByYWN0aWNhYmxlIChldmVuIGlm IHlvdSByZW5hbWUgdGhlIG9yaWdpbmFsIGZpbGUpLiBXaGVuIGl0IGNvbWVzIHRvIGRlbGV0 aW9uIHRob3VnaCwgdGhleSBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5LiBUaGlzIGFsbG93cyB5 b3UgdG8gZWl0aGVyIGtlZXAgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgaW4gdGhlIGRp c3RyaWJ1dGlvbiBhcmNoaXZlIG9yIHJlbW92ZSBpdCBwcmlvciB0byBleHBvcnQuPC9wPgoK PGg0IGlkPSJlZGl0X2pzIj5KYXZhc2NyaXB0PC9oND4KCjxwIGNsYXNzPSJ3YXJuaW5nIj5G aWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+ TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5qczwvY29kZT48L3A+Cgo8cD5BbnkgdHJpY2tl cnkgeW91IG1heSB3aXNoIHRvIGVtcGxveSBpbiB5b3VyIHRoZW1lIGNhbiBiZSB3cml0dGVu IGluIHRoZXNlIGZpbGVzLiBSZW1lbWJlciB0aGF0IGpRdWVyeSBpcyBsb2FkZWQgYnkgZGVm YXVsdCBvbiB0aGUgYWRtaW4gc2lkZSBzbyB5b3UgY2FuIHBsYXkgd2l0aCB0aGF0LjwvcD4K CjxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9oND4K CjxwIGNsYXNzPSJ3YXJuaW5nIj5PbmUgZmlsZSBtdXN0IGJlIG5hbWVkIDxzdHJvbmc+ZXhh Y3RseTwvc3Ryb25nPiB0aGUgc2FtZSBhcyB5b3VyIHRoZW1lLCBpLmUuIDxjb2RlPnNtZF9C bHVlTWVhbmllLnBocDwvY29kZT4uIEFueSBvdGhlciBmaWxlcyBtdXN0IGVuZCBpbiA8Y29k ZT4ucGhwPC9jb2RlPjwvcD4KCjxwPkNvbnN1bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0 cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5fU2lk ZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBndWlkZTwvYT4gb24gVGV4dGJvb2sgZm9yIHRo ZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBOb3RlIHRoYXQgY29ycnVwdCB0aGVtZXMgYXJl IGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRoZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5IGFu ZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ugb3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0aGF0 IGlzIGJyb2tlbi48L3A+Cgo8cD5JZiB5b3UgcmVuYW1lIHRoZSB0aGVtZSYjODIxNztzIGNv cmUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSAoaS5lLiB0aGUgb25lIHdp dGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGhlbWUgZm9sZGVyIGl0c2VsZikgdGhlIHBsdWdp biB3aWxsIGF0dGVtcHQgdG8gcmVuYW1lIHRoZSBmb2xkZXIgYXMgd2VsbDsgZXNzZW50aWFs bHkgcmVuYW1pbmcgdGhlIHRoZW1lLiBUaGlzIHNob3VsZCBwcmV2ZW50IGEgdGhlbWUgZnJv bSBiZWNvbWluZyB1bmVkaXRhYmxlLCBidXQgaXQgaXMgdXAgdG8geW91IHRvIGtlZXAgdGhl IGNsYXNzIG5hbWUgaW4gc3luYyB3aXRoIHRoZSBmaWxlIG5hbWUuIElmIGF0IGFueSB0aW1l IHlvdSBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0L2dyaWQgYW5kIGZpbmQgYSB0aGVtZSBl eGlzdHMgYnV0IGhhcyBubyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQsIGNoYW5j ZXMgYXJlIGl0JiM4MjE3O3MgYmVjYXVzZSB0aGUgY2xhc3MgbmFtZSBkb2VzbiYjODIxNzt0 IG1hdGNoIHRoZSB0aGVtZSYjODIxNztzIGZvbGRlciBuYW1lLiBKdXN0IGhpdCA8Yj5bRWRp dF08L2I+IGFuZCBhbHRlciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmls ZSB0byBicmluZyBldmVyeXRoaW5nIGJhY2sgb24gdHJhY2suPC9wPgoKPGg0IGlkPSJlZGl0 X2pzIj5UZXh0IC8gVGV4dGlsZSBkb2NzPC9oND4KCjxwPkFueSBmaWxlcyB3aXRoIGEgPGNv ZGU+LnR4dDwvY29kZT4gb3IgPGNvZGU+LnRleHRpbGU8L2NvZGU+IGV4dGVuc2lvbiBhcmUg c3VwcG9ydGVkLiBUZXh0aWxlIGZpbGVzIGNhbiBiZSBwcmV2aWV3ZWQgYnkgY2xpY2tpbmcg dGhlIDxzdHJvbmc+UHJldmlldzwvc3Ryb25nPiBsaW5rIGFsb25nc2lkZSB0aGUgZmlsZW5h bWUgaW5wdXQgYm94LiBOb3RlIHRoYXQgd2hlbiB0aGUgbWFpbiB0ZXh0YXJlYSBpcyBlZGl0 ZWQsIHRoZSBwcmV2aWV3IGJlY29tZXMgdW5hdmFpbGFibGUgYmVjYXVzZSB0aGUgZmlsZSBt dXN0IGJlIHNhdmVkIHRvIHVwZGF0ZSBpdCBmaXJzdC48L3A+Cgo8aDQgaWQ9ImVkaXRfb3Ro ZXIiPk90aGVyczwvaDQ+Cgo8cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBhYm92 ZSBzdXBwb3J0ZWQgdHlwZXMgYXBwZWFyIGhlcmUuIElmIHlvdSBkbyB0cnkgdG8gY3JlYXRl IGEgZmlsZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQsIGEgd2FybmluZyB3aWxsIGJlIGlzc3Vl ZC4gWW91IG11c3QgaGl0IDxiPlNhdmU8L2I+IGFnYWluIHRvIGNvbmZpcm0geW91IHJlYWxs eSB3aXNoIHRvIGNyZWF0ZSB0aGUgZmlsZS48L3A+Cgo8aDQgaWQ9ImVkaXRfZm9sZGVyIj5G b2xkZXJzPC9oND4KCjxwPkFueSBmb2xkZXJzIHRoYXQgeW91ciB0aGVtZSBpcyB1c2luZyB3 aWxsIGJlIGxpc3RlZCBoZXJlLiBJZiB5b3UgY2xpY2sgdGhlICYjODIxNjt4JiM4MjE3OyBh bG9uZ3NpZGUgYW55IG9uZSwgaXQgPHN0cm9uZz5hbmQgYWxsIGl0cyBjb250ZW50czwvc3Ry b25nPiB3aWxsIGJlIGRlbGV0ZWQuIEJ5IGNvbnRyYXN0LCBpZiB5b3UgZGVsZXRlIGFsbCBm aWxlcyBmcm9tIGEgZm9sZGVyIHVzaW5nIHRoZSByZWd1bGFyICYjODIxNjtXaXRoIHNlbGVj dGVkJiM4MjE3OyBtZWNoYW5pc20sIHRoZSBmb2xkZXIgaXRzZWxmIHdpbGwgcmVtYWluIGlu IHRoZSBmaWxlc3lzdGVtIChhbHRob3VnaCBpdCB3b24mIzgyMTc7dCBiZSBzaG93bikgaW4g dGhpcyBmb2xkZXIgbGlzdC48L3A+Cgo8aDMgaWQ9ImFib3V0Ij5NYW5pZmVzdDwvaDM+Cgo8 cD5JbiB5b3VyIG1haW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyBh IGZ1bmN0aW9uIGNhbGxlZCA8Y29kZT5tYW5pZmVzdCgpPC9jb2RlPiB3aGljaCBjb250YWlu cyBpbmZvIGFib3V0IHlvdSBhbmQgeW91ciB0aGVtZS4gRWRpdCB0aGUgdmFsdWVzIGhlcmUg dG8gc3RhbXAgeW91ciBtYXJrIG9uIHRoZSB0aGVtZS4gTm90ZSB0aGF0IGlmIHlvdXIgZGVz Y3JpcHRpb24gY29udGFpbnMgYXBvc3Ryb3BoZXMgdGhleSBtdXN0IGJlIDxlbT5lc2NhcGVk PC9lbT4gYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBhIHNpbmdsZSBiYWNrc2xhc2ggPGNvZGU+ XDwvY29kZT4uIGUuZy48L3A+Cgo8cHJlPjxjb2RlPiYjMzk7ZGVzY3JpcHRpb24mIzM5OyA9 Jmd0OyAmIzM5O0RvblwmIzM5O3QgZmVhciB0aGUgcmVhcGVyISYjMzk7LDwvY29kZT48L3By ZT4KCjxoMiBpZD0icGVydXNlciI+UGVyLXVzZXIgdGhlbWUgc2VsZWN0aW9uPC9oMj4KCjxw PklmIGFuIGFkbWluaXN0cmF0b3IgY2hvb3NlcyB0byBhbGxvdyBwZXItdXNlciB0aGVtZXMs IGEgbmV3IHBhbmVsIGFwcGVhcnMgdW5kZXIgdGhlIEFkbWluIG1lbnUgaXRlbSBvZiBhbGwg dXNlcnMgKGV4Y2VwdCBhZG1pbmlzdHJhdG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFs bCBhdmFpbGFibGUgdGhlbWVzICYjODIxMjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9y IGhhcyBleHBsaWNpdGx5IGFsbG93ZWQuPC9wPgoKPHA+Q2xpY2tpbmcgYSB0aGVtZSBuYW1l IG9yIHRodW1ibmFpbCB3aWxsIGltbWVkaWF0ZWx5IHN3aXRjaCB0byB0aGF0IHRoZW1lIHVu dGlsIHRoZSB1c2VyIGNob29zZXMgYW5vdGhlciBvciB0aGUgYWRtaW5pc3RyYXRvciBjaGFu Z2VzIHRoZW1lIHN5c3RlbS48L3A+Cgo8aDIgaWQ9ImF1dGhvciI+QXV0aG9yIGFuZCBjcmVk aXRzPC9oMj4KCjxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5T dGVmIERhd3NvbjwvYT4uPC9wPgoKPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhp c3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIFJvYmVy dCBXZXR6bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUg YXJteSBvZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVt ZSBhZHZvY2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFu LCBEYXZlIERlU2FuZHJvLCBNaWtlIERlbm5pcyBhbmQgUGhpbCBXYXJlaGFtLjwvcD4KCjxw Pkt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFsbC48L3A+IjtzOjM6Im1kNSI7czozMjoiMTRh OWJlMGM4MzcyODAzOGNjMTUwODM1MDdmMTZiMWUiO3M6ODoidGV4dHBhY2siO3M6Mzc0OToi I0BzbWRfYWR0aApzbWRfYWR0aF9hY3Rpb25zID0+IEFjdGlvbnMKc21kX2FkdGhfYWxsb3dl ZF9za2lucyA9PiBBbGxvd2VkIHRoZW1lcwpzbWRfYWR0aF9hbGxfdGhlbWVzID0+IEFsbCB0 aGVtZXMKc21kX2FkdGhfYXBwbHlfc2tpbiA9PiBBcHBseSB0aGlzIHRoZW1lCnNtZF9hZHRo X2F2YWlsX3RpdGxlID0+IEF2YWlsYWJsZSB0aGVtZXMKc21kX2FkdGhfYmFzZWRfb24gPT4g KGJhc2VkIG9uIHtza2lufSkKc21kX2FkdGhfYnkgPT4gYnkKc21kX2FkdGhfY2FzZV9zb3J0 ID0+IENhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3QKc21kX2FkdGhfY2xlYXIgPT4gbm9uZQpz bWRfYWR0aF9jbG9uZSA9PiBCYXNlCnNtZF9hZHRoX2NvbmZpcm0gPT4gR28Kc21kX2FkdGhf Y29yZV90aGVtZSA9PiBDYW5ub3QgZGVsZXRlIHtza2lufTogY29yZSB0aGVtZQpzbWRfYWR0 aF9jb3JlX3RoZW1lX2ZpbGUgPT4gQ2Fubm90IGRlbGV0ZSBmaWxlcyBmcm9tIHtza2lufTog Y29yZSB0aGVtZQpzbWRfYWR0aF9jcnVzaF9mb3JtYXQgPT4gRm9ybWF0OgpzbWRfYWR0aF9j cnVzaF90eXBlID0+IEV4cG9ydCBjb21wcmVzc2lvbiB0eXBlCnNtZF9hZHRoX2NzcyA9PiBT dHlsZXNoZWV0CnNtZF9hZHRoX2NfYnppcDIgPT4gQlppcApzbWRfYWR0aF9jX2d6aXAgPT4g R1ppcApzbWRfYWR0aF9jX3RhciA9PiBUYXIKc21kX2FkdGhfY196aXAgPT4gWmlwCnNtZF9h ZHRoX2RlbGV0ZV9jb25maXJtID0+IFJlYWxseSBkZWxldGUgdGhlbWUge3NraW59PwpzbWRf YWR0aF9kZWxldGVfZmFpbGVkID0+IERlbGV0ZSBmYWlsZWQuIFRyeSByZW1vdmluZyBpdCBt YW51YWxseQpzbWRfYWR0aF9lZGl0X2xibCA9PiBFZGl0IHt0aGVtZX0gdGhlbWUKc21kX2Fk dGhfZW1wdHlfaW5mbyA9PiBZb3Ugc2hvdWxkIGNob29zZSBhIGZpbGUgZmlyc3QKc21kX2Fk dGhfZXhwb3J0ID0+IEV4cG9ydApzbWRfYWR0aF9maWxlbmFtZV9mb3JtYXQgPT4gRmlsZW5h bWUgZm9ybWF0CnNtZF9hZHRoX2ZpbGVzX2RlbGV0ZWQgPT4gRGVsZXRlZDoge2xpc3R9LiBO b3RlIHRoYXQgZW1wdHkgZm9sZGVycyBtYXkgbmVlZCByZW1vdmluZyBtYW51YWxseQpzbWRf YWR0aF9maWxlX25hbWUgPT4gRmlsZSBuYW1lCnNtZF9hZHRoX2ZpbGVfbm90X2RlbGV0ZWQg PT4gRmlsZSB7bmFtZX0gPHN0cm9uZz5ub3Q8L3N0cm9uZz4gZGVsZXRlZApzbWRfYWR0aF9m aWxlX3NhdmVkID0+IEZpbGUge25hbWV9IHNhdmVkCnNtZF9hZHRoX2ZpbmRfdGhlbWUgPT4g QnJvd3NlIHRoZW1lcwpzbWRfYWR0aF9mb2xkZXIgPT4gLi4uIHRvIGZvbGRlcgpzbWRfYWR0 aF9mb2xkZXJzID0+IEZvbGRlcgpzbWRfYWR0aF9mb2xkZXJfZGVsZXRlZCA9PiBGb2xkZXIg e25hbWV9IGRlbGV0ZWQKc21kX2FkdGhfZm9sZGVyX25hbWUgPT4gRm9sZGVyCnNtZF9hZHRo X2dsb2JhbF9za2luID0+IERlZmF1bHQgdGhlbWUKc21kX2FkdGhfaGVscF9saW5rID0+IDxh IGhyZWY9IntsaW5rfSI+SGVscDwvYT4Kc21kX2FkdGhfaW1hZ2VfZmlsZXMgPT4gSW1hZ2UK c21kX2FkdGhfaW1wb3J0X2ZhaWxlZCA9PiBJbnN0YWxsYXRpb24gZmFpbGVkIDotKCBDaGVj ayB0aGUgYXJjaGl2ZSBzdHJ1Y3R1cmUKc21kX2FkdGhfaW1wb3J0X29rID0+IEluc3RhbGxh dGlvbiBzdWNjZXNzZnVsLgpzbWRfYWR0aF9pbnN0YWxsX3NraW4gPT4gSW5zdGFsbCB0aGVt ZQpzbWRfYWR0aF9pc19nbG9iYWwgPT4gKGRlZmF1bHQpCnNtZF9hZHRoX2pzID0+IEphdmFz Y3JpcHQKc21kX2FkdGhfbGF5b3V0ID0+IExheW91dCBtZXRob2QKc21kX2FkdGhfbGF5b3V0 X2dyaWQgPT4gR3JpZApzbWRfYWR0aF9sYXlvdXRfbGlzdCA9PiBMaXN0CnNtZF9hZHRoX21h bmFnZV9sYmwgPT4gVGhlbWUgbWFuYWdlcgpzbWRfYWR0aF9tYXhfdGhlbWVfc2l6ZSA9PiBN YXggdGhlbWUgZmlsZSBzaXplIChieXRlcykKc21kX2FkdGhfbWtkaXJfZmFpbGVkID0+IENh bm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciBmaWxlIHtuYW1lfS4gVHJ5IG1hbnVhbGx5IGNy ZWF0aW5nIGl0LgpzbWRfYWR0aF9uYW1lX2VtcHR5ID0+IFlvdSBzaG91bGQgZ2l2ZSB5b3Vy IHRoZW1lIGEgbmFtZQpzbWRfYWR0aF9uZXcgPT4gQ3JlYXRlIG5ldyB0aGVtZQpzbWRfYWR0 aF9uZXdfY2xvbmVza2luID0+IE5hbWUgb2YgY29weQpzbWRfYWR0aF9uZXdfZmlsZSA9PiBO ZXcgZmlsZQpzbWRfYWR0aF9uZXdfc2tpbiA9PiBUaGVtZSBuYW1lCnNtZF9hZHRoX290aGVy ID0+IE90aGVyIGZpbGVzCnNtZF9hZHRoX290aGVyX2ZpbGVzID0+IE90aGVycwpzbWRfYWR0 aF9wZXJfZ3JvdXAgPT4gVGhlbWUgcGVyIHByaXYgbGV2ZWwKc21kX2FkdGhfcGVyX3NpdGUg PT4gT25lIHRoZW1lIGZvciBhbGwKc21kX2FkdGhfcGVyX3VzZXIgPT4gVGhlbWUgcGVyIHVz ZXIKc21kX2FkdGhfcGhwID0+IFBIUApzbWRfYWR0aF9wcmVmc19kZWxldGVkID0+IFByZWZl cmVuY2VzIGRlbGV0ZWQKc21kX2FkdGhfcHJlZnNfaW5zdGFsbGVkID0+IFByZWZlcmVuY2Vz IGluc3RhbGxlZApzbWRfYWR0aF9wcmVmc190aXRsZSA9PiBBZG1pbiB0aGVtZSBwcmVmZXJl bmNlcwpzbWRfYWR0aF9wcmV2aWV3ID0+IFByZXZpZXcgb2Yge25hbWV9CnNtZF9hZHRoX3By ZXZpZXdfaW1hZ2UgPT4gVmlldyBpbWFnZQpzbWRfYWR0aF9yZW5hbWVkID0+IFJlbmFtZWQg dG8ge25hbWV9CnNtZF9hZHRoX3JlbmFtZV9mYWlsZWQgPT4gUmVuYW1lIGZhaWxlZApzbWRf YWR0aF9zY3NzID0+IFNDU1MKc21kX2FkdGhfc2V0ID0+IFNldApzbWRfYWR0aF9zZXR1cCA9 PiBQcmVmZXJlbmNlcwpzbWRfYWR0aF9za2lubmVyID0+IFRoZW1lCnNtZF9hZHRoX3NraW5f Y2xvbmVkID0+IFRoZW1lIGV4dGVuZGVkIGFzIHtuYW1lfQpzbWRfYWR0aF9za2luX2NyZWF0 ZWQgPT4gVGhlbWUge25hbWV9IGNyZWF0ZWQKc21kX2FkdGhfc2tpbl9kZWxldGVkID0+IFRo ZW1lIHtuYW1lfSBkZWxldGVkCnNtZF9hZHRoX3NraW5fZXhpc3RzID0+IFRoZW1lIHtuYW1l fSBhbHJlYWR5IGV4aXN0cwpzbWRfYWR0aF9za2luX2ZpbGVzID0+IFRoZW1lIGZpbGVzCnNt ZF9hZHRoX3NraW5fZ2JsID0+IFRoZW1lCnNtZF9hZHRoX3NraW5fZ3JvdXBzID0+IEdyb3Vw IHRoZW1lcwpzbWRfYWR0aF9za2luX3N3aXRjaGVkID0+IFRoZW1lIHN3aXRjaGVkIHRvIHtz a2lufQpzbWRfYWR0aF9za2luX3N5c3RlbSA9PiBUaGVtZSBzeXN0ZW0Kc21kX2FkdGhfc3Nj ID0+IFN0eWxlcGxhdGUKc21kX2FkdGhfc3VwcG9ydGVkX2ltcG9ydCA9PiBTdXBwb3J0ZWQg aW1wb3J0IHR5cGVzOiB7dHlwZXN9CnNtZF9hZHRoX3RhYl9uYW1lID0+IEFkbWluIHRoZW1l cwpzbWRfYWR0aF90ZXh0aWxlID0+IFRleHRpbGUKc21kX2FkdGhfdGh1bWJzaXplID0+IFRo dW1iIGRpbWVuc2lvbnMKc21kX2FkdGhfdGltZXMgPT4geApzbWRfYWR0aF90eHQgPT4gVGV4 dApzbWRfYWR0aF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUgPT4ge2NydXNofSBpcyBu b3QgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0IGluIHRoaXMgaW5zdGFsbGF0aW9u CnNtZF9hZHRoX3Vuc3VwcG9ydGVkX2ZpbGV0eXBlID0+IEZpbGUgaXMgbm90IG9mIGEgc3Vw cG9ydGVkIHR5cGUKc21kX2FkdGhfdW5zdXBwb3J0ZWRfZnVkZ2UgPT4gOiBoaXQgU2F2ZSBh Z2FpbiB0byBzdG9yZSBhbnl3YXkKc21kX2FkdGhfdXBsb2FkX3JlcG9ydCA9PiBVcGxvYWRl ZCB7bnVtX3N1Y2Nlc3N9IGZpbGVzKHMpIHt1cGxvYWRlZH0uIEZhaWxlZDoge251bV9mYWls fQpzbWRfYWR0aF92ZXJzaW9uID0+IHYiO30=