# Name: ied_plugin_composer v1.1.1 # Type: Admin/Public/AJAX plugin # Create, publish and edit plugins from within Textpattern CMS # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # 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: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjU6IjEuMS4xIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MDoiQ3JlYXRlLCBw dWJsaXNoIGFuZCBlZGl0IHBsdWdpbnMgZnJvbSB3aXRoaW4gVGV4dHBhdHRlcm4gQ01TIjtz OjQ6ImNvZGUiO3M6MTY5NDYxOiIvLyA8P3BocAovKioKICogaWVkX3BsdWdpbl9jb21wb3Nl cgogKgogKiBBIFRleHRwYXR0ZXJuIENNUyBwbHVnaW4gZm9yIHdyaXRpbmcsIGVkaXRpbmcg YW5kIHNoYXJpbmcgcGx1Z2lucwogKiAgLT4gQ3JlYXRlIGFuZCBlZGl0IGFkbWluLXNpZGUg b3IgcHVibGljIHBsdWdpbnMKICogIC0+IFN1cHBvcnRzIHBsdWdpbiBsaWZlY3ljbGUgZXZl bnRzIGFuZCBwcmVmcwogKiAgLT4gU3VwcG9ydHMgVGV4dHBhY2tzCiAqICAtPiBPcHRpb25h bCBzeW50YXggY2hlY2tlciBvbiBzYXZlCiAqCiAqIEBhdXRob3IgWXVyYSBMaW5ueWsKICog QGF1dGhvciBTdGVmIERhd3NvbgogKiBAYXV0aG9yIFN0ZXZlIERpY2tpbnNvbgogKiBAbGlu ayAgIGh0dHA6Ly9zdGVmZGF3c29uLmNvbS8KICovCgovLyBUT0RPOgovLyAgKiBVc2UgaHJl ZigpIChmcm9tIDQuNi4rKSBmb3IgYW5jaG9yIGNyZWF0aW9uIHRvIGF2b2lkIGRvdWJsZS1l bmNvZGVkIGFtcGVyc2FuZHMKLy8gICogRmlndXJlIG91dCB3aHkgc3ludGF4IGNoZWNrZXIg ZG9lc24ndCBqdW1wIHRvIGxpbmUgbnVtYmVyIHNvbWV0aW1lcyAoQUpBWCBmYWlscyB3aXRo IGVycm9yIGJ1dCBpdCdzIG5vdCBoYW5kbGVkKQovLyAgKiBTaG93IHdoaWNoIGxhbmdzIGhh dmUgaW5zdGFsbGVkIHN0cmluZ3MgaW4gdGhlIGRpc3RyaWJ1dGlvbiBzZWN0aW9uIHNvIHRo ZSBjb3JyZWN0IGxhbmdzIGluIHRoZSBzZWxlY3QgbGlzdCBjYW4gYmUgY2hvc2VuCi8vICAq IEZpbmQgb3V0IHdoeSB1cGxvYWRpbmcgUEhQIGZpbGVzIHNvbWV0aWVtcyB0aHJvd3MgYW4g ZXJyb3IgZXZlbiB0aG91Z2ggaXQgc3VjY2VlZHMKLy8gICogalF1ZXJ5IG9uIGVkaXRvciBk cm9wZG93bnMgaW4gc2V0dXAKLy8gICogcGhwZG9jCgppZiAodHhwaW50ZXJmYWNlID09PSAn YWRtaW4nKSB7CiAgICBuZXcgaWVkX3BjKCk7Cn0gZWxzZWlmICh0eHBpbnRlcmZhY2UgPT09 ICdwdWJsaWMnKSB7CiAgICBpZiAoY2xhc3NfZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJl Z2lzdHJ5JykpIHsKICAgICAgICBUeHA6OmdldCgnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3Ry eScpCiAgICAgICAgICAgIC0+cmVnaXN0ZXIoJ2llZF9wbHVnaW5fbGlzdCcpCiAgICAgICAg ICAgIC0+cmVnaXN0ZXIoJ2llZF9wbHVnaW5faW5mbycpCiAgICAgICAgICAgIC0+cmVnaXN0 ZXIoJ2llZF9wbHVnaW5fdGV4dHBhY2tzJykKICAgICAgICAgICAgLT5yZWdpc3RlcignaWVk X3BsdWdpbl9kb3dubG9hZCcpCiAgICAgICAgICAgIC0+cmVnaXN0ZXIoJ2llZF9wbHVnaW5f ZG93bmxvYWRfbGluaycpOwogICAgfQoKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdpZWRfcGx1 Z2luX2Rvd25sb2FkJywgJ3ByZXRleHQnKTsKCiAgICAvKgogICAgICogUHVibGljIHRhZzog TGlzdCBwbHVnaW5zLCBmaWx0ZXJlZCBieSBuYW1lIG9yIHByZWZpeC4KICAgICAqCiAgICAg KiBAcGFyYW0gYXJyYXkgICRhdHRzICBUYWcgYXR0cmlidXRlcwogICAgICogQHBhcmFtIHN0 cmluZyAkdGhpbmcgVGFnIGNvbnRhaW5lciBjb250ZW50CiAgICAgKi8KICAgIGZ1bmN0aW9u IGllZF9wbHVnaW5fbGlzdCgkYXR0cyA9IGFycmF5KCksICR0aGluZyA9IG51bGwpCiAgICB7 CiAgICAgICAgZ2xvYmFsICRpZWRfcGx1Z2luX2RhdGE7CgogICAgICAgIGV4dHJhY3QobEF0 dHMoYXJyYXkoCiAgICAgICAgICAgICdmcm9tJyAgICAgICA9PiAnZGF0YWJhc2UnLCAvLyBk YXRhYmFzZSwgY2FjaGUgKG9yIGJvdGgpCiAgICAgICAgICAgICduYW1lJyAgICAgICA9PiAn JywgLy8gTGlzdCBvZiBwbHVnaW4gbmFtZXMgdG8gcmV0dXJuCiAgICAgICAgICAgICdwcmVm aXgnICAgICA9PiAnJywgLy8gUGx1Z2luIHByZWZpeGVzCiAgICAgICAgICAgICdleGNsdWRl JyAgICA9PiAnJywgLy8gbmFtZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBsaXN0CiAgICAgICAg ICAgICd0eXBlJyAgICAgICA9PiAnJywgLy8gMC01IG9yIGNvbW1hLXNlcGFyYXRlZCBjb21i b3MgdGhlcmVvZgogICAgICAgICAgICAnd3JhcHRhZycgICAgPT4gJycsCiAgICAgICAgICAg ICdjbGFzcycgICAgICA9PiAnJywKICAgICAgICAgICAgJ2JyZWFrJyAgICAgID0+ICcnLAog ICAgICAgICAgICAnYnJlYWtjbGFzcycgPT4gJycsCiAgICAgICAgICAgICdodG1sX2lkJyAg ICA9PiAnJywKICAgICAgICAgICAgJ2Zvcm0nICAgICAgID0+ICcnLAogICAgICAgICksJGF0 dHMpKTsKCiAgICAgICAgJHRoaW5nID0gKGVtcHR5KCRmb3JtKSkgPyAoKGVtcHR5KCR0aGlu ZykpID8gJzx0eHA6aWVkX3BsdWdpbl9pbmZvIGl0ZW09Im5hbWUiIC8+JyA6ICR0aGluZykg OiBmZXRjaF9mb3JtKCRmb3JtKTsKCiAgICAgICAgJGxvY2F0aW9uID0gZG9fbGlzdCgkZnJv bSk7CiAgICAgICAgJG5hbWVzID0gZG9fbGlzdCgkbmFtZSk7CiAgICAgICAgJHByZWZpeGVz ID0gZG9fbGlzdCgkcHJlZml4KTsKICAgICAgICAkZXhjbHVkZXMgPSBkb19saXN0KCRleGNs dWRlKTsKCiAgICAgICAgaWYgKGluX2FycmF5KCdkYXRhYmFzZScsICRsb2NhdGlvbikpIHsK ICAgICAgICAgICAgJHNxbCA9IGFycmF5KCk7CiAgICAgICAgICAgICRzcWxbXSA9ICcxJzsK ICAgICAgICAgICAgaWYgKCRuYW1lKSB7CiAgICAgICAgICAgICAgICAkc3FsW10gPSAibmFt ZSBJTiAoJyIuaW1wbG9kZSgiJywnIiwgZG9TbGFzaCgkbmFtZXMpKS4iJykiOwogICAgICAg ICAgICB9CiAgICAgICAgICAgIGlmICgkcHJlZml4KSB7CiAgICAgICAgICAgICAgICAkc3Fs b3IgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHByZWZpeGVzIGFzICRw ZngpIHsKICAgICAgICAgICAgICAgICAgICAkc3Fsb3JbXSA9ICJuYW1lIExJS0UgJyIuZG9T bGFzaCgkcGZ4KS4iJSciOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHNx bFtdID0gJygnIC4gaW1wbG9kZSgnIE9SICcsICRzcWxvcikgLiAnKSc7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgaWYgKCRleGNsdWRlKSB7CiAgICAgICAgICAgICAgICAkc3FsW10g PSAibmFtZSBOT1QgSU4gKCciLmltcGxvZGUoIicsJyIsIGRvU2xhc2goJGV4Y2x1ZGVzKSku IicpIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJzID0gc2FmZV9yb3dzKCcqJywg J3R4cF9wbHVnaW4nLCBpbXBsb2RlKCcgQU5EICcsICRzcWwpIC4gJyBPUkRFUiBCWSBuYW1l Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUT0RPOiBBZGQgdGhlIG1ldGEgZGF0YSBmcm9t IG1hdGNoaW5nIHBsdWdpbnMgaW4gdGhlIGNhY2hlIGRpcmVjdG9yeQogICAgICAgIGlmIChp bl9hcnJheSgnY2FjaGUnLCAkbG9jYXRpb24pKSB7CgoKICAgICAgICB9CgogICAgICAgICRv dXQgPSBhcnJheSgpOwogICAgICAgICRpZWRfcGRfc2F2ZWQgPSAkaWVkX3BsdWdpbl9kYXRh OwoKICAgICAgICBmb3JlYWNoICgkcnMgYXMgJHJvdykgewogICAgICAgICAgICAkaWVkX3Bs dWdpbl9kYXRhID0gJHJvdzsKICAgICAgICAgICAgJGllZF9wbHVnaW5fZGF0YVsnaGVscF91 bnN0eWxlZCddID0gcHJlZ19yZXBsYWNlKCcvXDxcIVwtXC0gXCpcKlwqIEJFR0lOIFBMVUdJ TiBDU1MuK0VORCBQTFVHSU4gQ1NTIFwqXCpcKiBcLVwtXD4vcycsICcnLCAkcm93WydoZWxw J10pOwogICAgICAgICAgICAkb3V0W10gPSBwYXJzZSgkdGhpbmcpOwogICAgICAgICAgICAk aWVkX3BsdWdpbl9kYXRhID0gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgICRpZWRfcGx1 Z2luX2RhdGEgPSAkaWVkX3BkX3NhdmVkOwoKICAgICAgICByZXR1cm4gKCR3cmFwdGFnKSA/ IGRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzLCAn JywgJycsICRodG1sX2lkKSA6IGltcGxvZGUoJGJyZWFrLCAkb3V0KTsKICAgIH0KCiAgICAv KioKICAgICAqIFB1YmxpYyB0YWc6IERpc3BsYXkgcGx1Z2luIGRhdGEgZm9yIGZvcm0vY29u dGFpbmVyIHVzYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgJGF0dHMgIFRhZyBh dHRyaWJ1dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aGluZyBUYWcgY29udGFpbmVyIGNv bnRlbnQKICAgICAqLwogICAgZnVuY3Rpb24gaWVkX3BsdWdpbl9pbmZvKCRhdHRzLCAkdGhp bmcgPSBudWxsKQogICAgewogICAgICAgIGdsb2JhbCAkaWVkX3BsdWdpbl9kYXRhOwoKICAg ICAgICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICAgICAnaXRlbScgICAgPT4gJycs CiAgICAgICAgICAgICd3cmFwdGFnJyA9PiAnJywKICAgICAgICAgICAgJ2JyZWFrJyAgID0+ ICcnLAogICAgICAgICAgICAnY2xhc3MnICAgPT4gJycsCiAgICAgICAgICAgICdkZWJ1Zycg ICA9PiAwLAogICAgICAgICksICRhdHRzKSk7CgogICAgICAgICRwZGF0YSA9IGlzX2FycmF5 KCRpZWRfcGx1Z2luX2RhdGEpID8gJGllZF9wbHVnaW5fZGF0YSA6IGFycmF5KCk7CgogICAg ICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgZWNobyAnKysgQVZBSUxBQkxFIElORk8g KysnOwogICAgICAgICAgICBkbXAoJHBkYXRhKTsKICAgICAgICB9CgogICAgICAgICRpdGVt cyA9IGRvX2xpc3QoJGl0ZW0pOwogICAgICAgICRvdXQgPSBhcnJheSgpOwoKICAgICAgICBm b3JlYWNoICgkaXRlbXMgYXMgJGl0KSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkcGRhdGFb JGl0XSkpIHsKICAgICAgICAgICAgICAgICRvdXRbXSA9ICRwZGF0YVskaXRdOwogICAgICAg ICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFn LCAkYnJlYWssICRjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdWJsaWMgdGFnOiBM aXN0IG9mIGF2YWlsYWJsZSB0ZXh0cGFjayBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBA cGFyYW0gYXJyYXkgICRhdHRzICBUYWcgYXR0cmlidXRlcwogICAgICogQHBhcmFtIHN0cmlu ZyAkdGhpbmcgVGFnIGNvbnRhaW5lciBjb250ZW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIGll ZF9wbHVnaW5fdGV4dHBhY2tzKCRhdHRzLCAkdGhpbmcgPSBudWxsKQogICAgewogICAgICAg IGdsb2JhbCAkaWVkX3BsdWdpbl9kYXRhOwoKICAgICAgICBleHRyYWN0KGxBdHRzKGFycmF5 KAogICAgICAgICAgICAnbmFtZScgICAgID0+ICcnLAogICAgICAgICAgICAnZmlsZW5hbWUn ID0+ICcnLAogICAgICAgICAgICAnbGFuZycgICAgID0+ICdJRURfQUxMJywKICAgICAgICAg ICAgJ3dyYXB0YWcnICA9PiAnJywKICAgICAgICAgICAgJ2JyZWFrJyAgICA9PiAnJywKICAg ICAgICAgICAgJ2NsYXNzJyAgICA9PiAnJywKICAgICAgICAgICAgJ2Zvcm0nICAgICA9PiAn JywKICAgICAgICApLCAkYXR0cykpOwoKICAgICAgICBpZiAoISRuYW1lICYmICEkZmlsZW5h bWUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRuYW1l KSB7CiAgICAgICAgICAgICR0aGVOYW1lID0gJG5hbWU7CiAgICAgICAgfSBlbHNlaWYgKCRm aWxlbmFtZSkgewogICAgICAgICAgICAkdGhlTmFtZSA9ICRmaWxlbmFtZTsKICAgICAgICB9 CgogICAgICAgICR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gKChlbXB0eSgkdGhpbmcpKSA/ ICc8dHhwOmllZF9wbHVnaW5faW5mbyBpdGVtPSJsYW5nIiAvPicgOiAkdGhpbmcpIDogZmV0 Y2hfZm9ybSgkZm9ybSk7CgogICAgICAgICRsYW5ncyA9IGFycmF5KCk7CiAgICAgICAgJHRw X3ByZWZpeGVzID0gdW5zZXJpYWxpemUoZ2V0X3ByZWYoJ2llZF9wbHVnaW5fdHBfcHJlZml4 JywgJycpKTsKCiAgICAgICAgaWYgKGlzc2V0KCR0cF9wcmVmaXhlc1skdGhlTmFtZV0pKSB7 CiAgICAgICAgICAgICRzdHJpbmdzID0gJHRoaXMtPnRleHRwYWNrX2dyYWIoJGxhbmcsICR0 cF9wcmVmaXhlc1skdGhlTmFtZV0pOwogICAgICAgICAgICBmb3JlYWNoICgkc3RyaW5ncyBh cyAkcm93KSB7CiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfc2VhcmNoKCRyb3dbJ2xhbmcn XSwgJGxhbmdzKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkbGFuZ3NbXSA9 ICRyb3dbJ2xhbmcnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICAkaWVkX3BkX3NhdmVkID0gJGll ZF9wbHVnaW5fZGF0YTsKICAgICAgICAkaWR4ID0gMDsKICAgICAgICAkbnVtX2xhbmdzID0g Y291bnQoJGxhbmdzKTsKCiAgICAgICAgZm9yZWFjaCAoJGxhbmdzIGFzICRyb3cpIHsKICAg ICAgICAgICAgJGllZF9wbHVnaW5fZGF0YVsnbGFuZyddID0gJHJvdzsKICAgICAgICAgICAg JGllZF9wbHVnaW5fZGF0YVsnZmlyc3RfbGFuZyddID0gKCgkaWR4ID09PSAwKSA/IDEgOiAw KTsKICAgICAgICAgICAgJGllZF9wbHVnaW5fZGF0YVsnbGFzdF9sYW5nJ10gPSAoKCRpZHgg PT09ICRudW1fbGFuZ3MgLSAxKSA/IDEgOiAwKTsKICAgICAgICAgICAgJG91dFtdID0gcGFy c2UoJHRoaW5nKTsKICAgICAgICAgICAgJGllZF9wbHVnaW5fZGF0YVsnbGFuZyddID0gJGll ZF9wbHVnaW5fZGF0YVsnZmlyc3RfbGFuZyddID0gJGllZF9wbHVnaW5fZGF0YVsnbGFzdF9s YW5nJ10gPSAnJzsKICAgICAgICAgICAgJGlkeCsrOwogICAgICAgIH0KICAgICAgICAkaWVk X3BsdWdpbl9kYXRhID0gJGllZF9wZF9zYXZlZDsKCiAgICAgICAgcmV0dXJuIGRvV3JhcCgk b3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MpOwogICAgfQoKICAgIC8qKgogICAgICog UHVibGljIHRhZzogRG93bmxvYWQgYSBwbHVnaW4uCiAgICAgKgogICAgICogQHBhcmFtIGFy cmF5ICAkYXR0cyAgVGFnIGF0dHJpYnV0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRoaW5n IFRhZyBjb250YWluZXIgY29udGVudAogICAgICovCiAgICBmdW5jdGlvbiBpZWRfcGx1Z2lu X2Rvd25sb2FkX2xpbmsoJGF0dHMsICR0aGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgZXh0 cmFjdChsQXR0cyhhcnJheSgKICAgICAgICAgICAgJ3R5cGUnICAgICA9PiAnY29tcHJlc3Nl ZCcsIC8vIHVuY29tcHJlc3NlZCwgY29tcHJlc3NlZCwgdGVtcGxhdGUsIHRleHRwYWNrCiAg ICAgICAgICAgICduYW1lJyAgICAgPT4gJycsCiAgICAgICAgICAgICdmaWxlbmFtZScgPT4g JycsCiAgICAgICAgICAgICdsYWJlbCcgICAgPT4gJ0Rvd25sb2FkJywKICAgICAgICAgICAg J2NsYXNzJyAgICA9PiAnJywKICAgICAgICAgICAgJ2xhbmcnICAgICA9PiAnSUVEX0FMTCcs CiAgICAgICAgICAgICdmb3JtJyAgICAgPT4gJycsCiAgICAgICAgICAgICdlc2NhcGUnICAg PT4gJ2h0bWwnLAogICAgICAgICksICRhdHRzKSk7CgogICAgICAgIGlmICghJG5hbWUgJiYg ISRmaWxlbmFtZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAk YW1wID0gKCRlc2NhcGUgPT09ICdodG1sJykgPyAnJmFtcDsnIDogJyYnOwoKICAgICAgICBp ZiAoJG5hbWUpIHsKICAgICAgICAgICAgJHRoZU5hbWUgPSAkYW1wLiduYW1lPScudXJsZW5j b2RlKCRuYW1lKTsKICAgICAgICB9IGVsc2VpZiAoJGZpbGVuYW1lKSB7CiAgICAgICAgICAg ICR0aGVOYW1lID0gJGFtcC4nZmlsZW5hbWU9Jy51cmxlbmNvZGUoJGZpbGVuYW1lKTsKICAg ICAgICB9CgogICAgICAgICR0aGVDbGFzcyA9ICcnOwogICAgICAgIGlmICgkY2xhc3MpIHsK ICAgICAgICAgICAgJHRoZUNsYXNzID0gJyBjbGFzcz0iJy4kY2xhc3MuJyInOwogICAgICAg IH0KICAgICAgICAkbGFuZ29wdCA9ICcnOwogICAgICAgIGlmICgkbGFuZykgewogICAgICAg ICAgICAkbGFuZ3MgPSBkb19saXN0KCRsYW5nKTsKICAgICAgICAgICAgJGxhbmdvcHQgPSAk YW1wLidsYW5nPScuaW1wbG9kZSgnLCcsICRsYW5ncyk7CiAgICAgICAgfQoKICAgICAgICAk bGlua05hbWUgPSAoZW1wdHkoJGZvcm0pKSA/ICgoZW1wdHkoJHRoaW5nKSkgPyAkbGFiZWwg OiBwYXJzZSgkdGhpbmcpKSA6IHBhcnNlX2Zvcm0oJGZvcm0pOwoKICAgICAgICBpZiAoJHR5 cGUgPT09ICdjb21wcmVzc2VkJykgewogICAgICAgICAgICByZXR1cm4gaHJlZigkbGlua05h bWUsICc/aWVkX3BsdWdpbl9kb3dubG9hZD0xJy4kdGhlTmFtZS4kYW1wLid0eXBlPXppcCcu JGxhbmdvcHQsICR0aGVDbGFzcyk7CiAgICAgICAgfSBlbHNlaWYgKCR0eXBlID09PSAndW5j b21wcmVzc2VkJykgewogICAgICAgICAgICByZXR1cm4gaHJlZigkbGlua05hbWUsICc/aWVk X3BsdWdpbl9kb3dubG9hZD0xJy4kdGhlTmFtZS4kYW1wLid0eXBlPXR4dCcuJGxhbmdvcHQs ICR0aGVDbGFzcyk7CiAgICAgICAgfSBlbHNlaWYgKCR0eXBlID09PSAndGVtcGxhdGUnKSB7 CiAgICAgICAgICAgIHJldHVybiBocmVmKCRsaW5rTmFtZSwgJz9pZWRfcGx1Z2luX2Rvd25s b2FkPTEnLiR0aGVOYW1lLiRhbXAuJ3R5cGU9cGhwJy4kbGFuZ29wdCwgJHRoZUNsYXNzKTsK ICAgICAgICB9IGVsc2VpZiAoJHR5cGUgPT09ICd0ZXh0cGFjaycpIHsKICAgICAgICAgICAg cmV0dXJuIGhyZWYoJGxpbmtOYW1lLCAnP2llZF9wbHVnaW5fZG93bmxvYWQ9MScuJHRoZU5h bWUuJGFtcC4ndHlwZT10ZXh0cGFjaycuJGxhbmdvcHQsICR0aGVDbGFzcyk7CiAgICAgICAg fQogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBkb3dubG9hZGluZyBwbHVnaW4gY29u dGVudC4KICAgICAqLwogICAgZnVuY3Rpb24gaWVkX3BsdWdpbl9kb3dubG9hZCgpCiAgICB7 CiAgICAgICAgaWYgKGdwcygnaWVkX3BsdWdpbl9kb3dubG9hZCcpKSB7CiAgICAgICAgICAg ICR0eXBlID0gZ3BzKCd0eXBlJyk7CiAgICAgICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAg ICAgICAgICAgICAgIGNhc2UgJ3ppcCc6CiAgICAgICAgICAgICAgICBjYXNlICd0eHQnOgog ICAgICAgICAgICAgICAgICAgICRpZWRfcGMgPSBuZXcgaWVkX3BjKCk7CiAgICAgICAgICAg ICAgICAgICAgJGllZF9wYy0+c2F2ZV9hc19maWxlKCk7CiAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdwaHAnOgogICAgICAgICAgICAgICAgICAg ICRpZWRfcGMgPSBuZXcgaWVkX3BjKCk7CiAgICAgICAgICAgICAgICAgICAgJGllZF9wYy0+ c2F2ZV9hc19waHBfZmlsZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAndGV4dHBhY2snOgogICAgICAgICAgICAgICAgICAgICRpZWRfcGMg PSBuZXcgaWVkX3BjKCk7CiAgICAgICAgICAgICAgICAgICAgJGllZF9wYy0+c2F2ZV9hc190 ZXh0cGFjaygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgfQp9CgovKioKICogUGx1Z2luIGNvbXBvc2VyIGFkbWluIGludGVyZmFj ZS4KICovCmNsYXNzIGllZF9wYwp7CiAgICAvKioKICAgICAqIFNoYXJlZCBpbmZvcm1hdGlv biBhY3Jvc3MgbWV0aG9kcy4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAg IHByb3RlY3RlZCAkaWVkX3BsdWdpbl9nbG9iYWxzID0gYXJyYXkoKTsKCiAgICAvKioKICAg ICAqIFRoZSBwbHVnaW4ncyBldmVudCBhcyByZWdpc3RlcmVkIGluIFR4cC4KICAgICAqCiAg ICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGllZF9wY19ldmVudCA9 ICdpZWRfcGx1Z2luX2NvbXBvc2VyJzsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yIHRv IHNldCB1cCBjYWxsYmFja3MgYW5kIGVudmlyb25tZW50LgogICAgICovCiAgICBwdWJsaWMg ZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5pZWRfcGx1Z2lu X2dsb2JhbHMgPSBhcnJheSgKICAgICAgICAgICAgJ2Nzc19zdGFydCcgPT4gJzwhLS0nLAog ICAgICAgICAgICAnY3NzX2VuZCcgICA9PiAnLS0+JywKICAgICAgICAgICAgJ2RsbV9zdGFy dCcgPT4gJyMnLAogICAgICAgICAgICAnZGxtX2VuZCcgICA9PiAnJywKICAgICAgICAgICAg J3N0YXJ0JyAgICAgPT4gJyAtLS0gQkVHSU4gUExVR0lOIFNFQ1RJT04gLS0tJywKICAgICAg ICAgICAgJ2VuZCcgICAgICAgPT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCiAg ICAgICAgICAgICdzaXplX2hlbHAnID0+ICc2MzUzNScsCiAgICAgICAgICAgICdzaXplX2Nz cycgID0+ICcyMDAwJywKICAgICAgICAgICAgJ3NpemVfY29kZScgPT4gJzE2Nzc3MjE1JywK ICAgICAgICApOwoKICAgICAgICBhZGRfcHJpdnMoJHRoaXMtPmllZF9wY19ldmVudCwgJzEs MicpOwogICAgICAgIGFkZF9wcml2cygncGx1Z2luX3ByZWZzLicgLiAkdGhpcy0+aWVkX3Bj X2V2ZW50LCAnMSwyJyk7CgogICAgICAgIHJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsICR0 aGlzLT5pZWRfcGNfZXZlbnQsIGdUeHQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSk7CiAgICAg ICAgcmVnaXN0ZXJfY2FsbGJhY2soYXJyYXkoJHRoaXMsICdwbHVnaW5fY29tcG9zZXInKSwg JHRoaXMtPmllZF9wY19ldmVudCk7CiAgICAgICAgcmVnaXN0ZXJfY2FsbGJhY2soYXJyYXko JHRoaXMsICdzZXR1cCcpLCAncGx1Z2luX3ByZWZzLicgLiAkdGhpcy0+aWVkX3BjX2V2ZW50 KTsKICAgICAgICByZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgkdGhpcywgJ3dlbGNvbWUnKSwg J3BsdWdpbl9saWZlY3ljbGUuJyAuICR0aGlzLT5pZWRfcGNfZXZlbnQpOwogICAgICAgIHJl Z2lzdGVyX2NhbGxiYWNrKGFycmF5KCR0aGlzLCAnaW5qZWN0X2NzcycpLCAnYWRtaW5fc2lk ZScsICdoZWFkX2VuZCcpOwogICAgfQoKICAgIC8qKgogICAgICogQ1NTIGRlZmluaXRpb25z OiBob3BlZnVsbHkga2luZCB0byB0aGVtZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gc3Ry aW5nIFN0eWxlIHJ1bGVzCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfc3R5 bGVfcnVsZXMoKQogICAgewogICAgICAgICRpZWRfcGNfc3R5bGVzID0gYXJyYXkoCiAgICAg ICAgICAgICdpZWRfcGx1Z2luJyA9PiAnCi5pZWRfbGFiZWwgeyBtYXJnaW46MCAwLjJlbSAw IDAuNmVtO30KLmllZF9wbHVnaW5fbGluayB7IGZsb2F0OnJpZ2h0OyB9Ci5pZWRfcGx1Z2lu X2luZm9fYmFyIHsgdGV4dC1hbGlnbjpyaWdodDsgfQojaWVkX3BsdWdpbl9qdW1wVG9MaW5l IHsgd2lkdGg6NGVtOyBtYXJnaW46MCAxZW0gMCAwLjRlbTsgfQouaWVkX2VkaXRGb3JtIHsg d2lkdGg6e2Vkd2lkdGh9OyBtYXJnaW46MCBhdXRvOyB9Ci5pZWRfc3ViZHVlIHsgY29sb3I6 Z3JheTsgcGFkZGluZzoxcHggMnB4IDJweCAxcHg7IH0KI2llZF9wbHVnaW5fdHBfY29udHJv bHMgaW5wdXRbdHlwZT0idGV4dCJdIHsgd2lkdGg6MTYlOyB9CiNvcHRpb25zX2dyb3VwX3Bh Y2sgdWwgeyBsaXN0LXN0eWxlLXR5cGU6bm9uZTsgfQojb3B0aW9uc19ncm91cF9wYWNrIHVs IGxhYmVsIHsgbWFyZ2luOjAgOHB4IDAgMDsgfQojb3B0aW9uc19ncm91cF9wYWNrIHVsIGlu cHV0IHsgd2lkdGg6NDUwcHg7IH0KI29wdGlvbnNfZ3JvdXBfcGFjayBsaSB7IG1hcmdpbi1i b3R0b206LjJlbSB9Ci5kaXN0cmlidXRpb24tY29kZSB7IGhlaWdodDo0LjJlbSFpbXBvcnRh bnQ7IH0KLmllZF9wbHVnaW5fZWRpdF90b29sYmFyIHsgdGV4dC1hbGlnbjpyaWdodDsgd2lk dGg6OTUlOyBkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luOi0yZW0gMCAwIDA7IH0KI2ll ZF9wbHVnaW5fbXNncG9wIHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgbGVm dDoyMDBweDsgbWF4LXdpZHRoOjUwMHB4OyBib3JkZXI6M3B4IHJpZGdlICM5OTk7IG9wYWNp dHk6LjkyOyBmaWx0ZXI6YWxwaGEob3BhY2l0eTo5Mik7IHBhZGRpbmc6MTVweCAyMHB4OyBi YWNrZ3JvdW5kLWNvbG9yOiNlMmRmY2U7IGNvbG9yOiM4MDU1MWU7IH0KI2llZF9wbHVnaW5f bXNncG9wIC5wdWJsaXNoIHsgZmxvYXQ6cmlnaHQ7IH0KICAgICcsCiAgICAgICAgKTsKCiAg ICAgICAgcmV0dXJuICRpZWRfcGNfc3R5bGVzOwogICAgfQoKICAgIC8qKgogICAgICogSW5q ZWN0IHN0eWxlIHJ1bGVzIGludG8gdGhlICZsdDtoZWFkJmd0OyBvZiB0aGUgcGFnZS4KICAg ICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkZXZ0IFRleHRwYXR0ZXJuIGV2ZW50CiAgICAg KiBAcGFyYW0gIHN0cmluZyAkc3RwIFRleHRwYXR0ZXJuIHN0ZXAgKGFjdGlvbikKICAgICAq IEByZXR1cm4gc3RyaW5nICAgICAgU3R5bGUgcnVsZXMsIG9yIG5vdGhpbmcgaWYgbm90IHRo ZSBjb3JyZWN0ICRldmVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5qZWN0X2Nz cygkZXZ0LCAkc3RwKQogICAgewogICAgICAgIGdsb2JhbCAkZXZlbnQ7CgogICAgICAgIGlm ICgkZXZlbnQgPT09ICR0aGlzLT5pZWRfcGNfZXZlbnQpIHsKICAgICAgICAgICAgJGllZF9w bHVnaW5fcHJlZnMgPSAkdGhpcy0+Z2V0X3ByZWZzKCk7CiAgICAgICAgICAgICRpZWRfcGx1 Z2luX3N0eWxlcyA9ICR0aGlzLT5nZXRfc3R5bGVfcnVsZXMoKTsKCiAgICAgICAgICAgIC8v IFBvc3NpYmxlIHZhcmlhYmxlIHJlcGxhY2VtZW50cy4KICAgICAgICAgICAgJGVkd2lkdGgg PSBnZXRfcHJlZignaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnLCAkaWVkX3BsdWdpbl9wcmVm c1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXVsnZGVmYXVsdCddKTsKICAgICAgICAgICAg JHN0eWxlZmluZCA9IGFycmF5KAogICAgICAgICAgICAgICAgJ3tlZHdpZHRofScsCiAgICAg ICAgICAgICk7CiAgICAgICAgICAgICRzdHlsZXJlcHMgPSBhcnJheSgKICAgICAgICAgICAg ICAgICRlZHdpZHRoLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZWNobyAnPHN0eWxl IHR5cGU9InRleHQvY3NzIj4nIC4gc3RyX3JlcGxhY2UoJHN0eWxlZmluZCwgJHN0eWxlcmVw cywgJGllZF9wbHVnaW5fc3R5bGVzWydpZWRfcGx1Z2luJ10pIC4gJzwvc3R5bGU+JzsKICAg ICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIFBsdWdpbiBq dW1wb2ZmIHBvaW50LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRldnQgVGV4dHBh dHRlcm4gZXZlbnQKICAgICAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4gc3Rl cCAoYWN0aW9uKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGx1Z2luX2NvbXBvc2Vy KCRldnQsICRzdHApCiAgICB7CiAgICAgICAgJGF2YWlsYWJsZV9zdGVwcyA9IGFycmF5KAog ICAgICAgICAgICAnY29kZV9zYXZlJyAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2Ny ZWF0ZScgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdlZGl0JyAgICAgICAgICAg ICA9PiBmYWxzZSwKICAgICAgICAgICAgJ2dlbmVyYXRlX3BocGRvYycgID0+IHRydWUsCiAg ICAgICAgICAgICdoZWxwJyAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAnaGVs cF92aWV3ZXInICAgICAgPT4gZmFsc2UsCiAgICAgICAgICAgICdpbnN0YWxsJyAgICAgICAg ICA9PiB0cnVlLAogICAgICAgICAgICAnbGFuZ19zZXQnICAgICAgICAgPT4gdHJ1ZSwKICAg ICAgICAgICAgJ3RhYmxlJyAgICAgICAgICAgID0+IGZhbHNlLAogICAgICAgICAgICAnbWV0 YV9zYXZlJyAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ211bHRpX2VkaXQnICAgICAg ID0+IHRydWUsCiAgICAgICAgICAgICdwcmVmcycgICAgICAgICAgICA9PiBmYWxzZSwKICAg ICAgICAgICAgJ3Jlc3RvcmUnICAgICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdzYXZl JyAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAnc2F2ZV9hc19maWxlJyAgICAg PT4gdHJ1ZSwKICAgICAgICAgICAgJ3NhdmVfYXNfcGhwX2ZpbGUnID0+IHRydWUsCiAgICAg ICAgICAgICdzYXZlX2FzX3RleHRwYWNrJyA9PiB0cnVlLAogICAgICAgICAgICAnc2V0X3Rw X3ByZWZpeCcgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3N3aXRjaF9zdGF0dXMnICAgID0+ IHRydWUsCiAgICAgICAgICAgICd0ZXh0cGFja19kZWwnICAgICA9PiB0cnVlLAogICAgICAg ICAgICAndGV4dHBhY2tfZ2V0JyAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3RleHRwYWNr X2xvYWQnICAgID0+IHRydWUsCiAgICAgICAgICAgICd0ZXh0cGFja19zYXZlJyAgICA9PiB0 cnVlLAogICAgICAgICAgICAndXBsb2FkJyAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAg ICAgJ3NhdmVfcGFuZV9zdGF0ZScgID0+IHRydWUsCiAgICAgICAgKTsKCiAgICAgICAgaWYg KCEkc3RwIG9yICFib3VuY2VyKCRzdHAsICRhdmFpbGFibGVfc3RlcHMpKSB7CiAgICAgICAg ICAgICRzdHAgPSAndGFibGUnOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPiRzdHAoKTsK ICAgIH0KCiAgICAvKioKICAgICAqIExpZmVjeWNsZSBoYW5kbGluZywgcG9zdC1pbnN0YWxs IC8gZGVsZXRlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRldnQgVGV4dHBhdHRl cm4gZXZlbnQKICAgICAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4gc3RlcCAo YWN0aW9uKQogICAgICogQHJldHVybiBzdHJpbmcgICAgICBTdWNjZXNzL2ZhaWx1cmUgbWVz c2FnZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2VsY29tZSgkZXZ0LCAkc3RwKQog ICAgewogICAgICAgICRtc2cgPSAnJzsKCiAgICAgICAgc3dpdGNoICgkc3RwKSB7CiAgICAg ICAgICAgIGNhc2UgJ2luc3RhbGxlZCc6CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZnNf dXBkYXRlKCk7CiAgICAgICAgICAgICAgICAkbXNnID0gJ1RoYW5rcyBmb3IgaW5zdGFsbGlu ZyB0aGUgcGx1Z2luIGNvbXBvc2VyLiBIYXBweSBhdXRob3JpbmcgOi0pJzsKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkZWxldGVkJzoKICAgICAgICAgICAg ICAgICR0aGlzLT5wcmVmc19yZW1vdmUoMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICB9CgogICAgICAgIHJldHVybiAkbXNnOwogICAgfQoKICAgIC8qKgogICAgICogVGFi bGUgb2YgcGx1Z2lucyBpbiBib3RoIGRhdGFiYXNlIGFuZCBmaWxlIHN5c3RlbSBjYWNoZS4K ICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbWVzc2FnZSBGbGFzaCBtZXNzYWdlIHRv IGRpc3BsYXkgc3VjY2Vzcy9lcnJvcgogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAg SFRNTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFibGUoJG1lc3NhZ2UgPSAnJykK ICAgIHsKICAgICAgICBwYWdldG9wKGdUeHQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSwgJG1l c3NhZ2UpOwoKICAgICAgICByZXF1aXJlX3ByaXZzKCdpZWRfcGx1Z2luX2NvbXBvc2VyJyk7 CgogICAgICAgICRpZWRfcGx1Z2luX3ByZWZzID0gJHRoaXMtPmdldF9wcmVmcygpOwoKICAg ICAgICAkbGNfb3B0cyA9IGRvX2xpc3QoZ2V0X3ByZWYoJ2llZF9wbHVnaW5fbGlmZWN5Y2xl X29wdGlvbnMnKSk7CiAgICAgICAgJGNoZWNrZWQgPSBpbl9hcnJheSgnaW5zdGFsbGVkJywg JGxjX29wdHMpOwogICAgICAgICRhdXRvX2VuID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fYXV0 b19lbmFibGUnKTsKICAgICAgICAkcGNkID0gZ2V0X3ByZWYoJ3BsdWdpbl9jYWNoZV9kaXIn KTsKCiAgICAgICAgJGFlUmFkaW9bXSA9ICc8cCBjbGFzcz0iaWVkX3BsdWdpbl9yYWRpb3Nl dCBpZWRfcGx1Z2luX2F1dG9lbmFibGUgdHhwLWxheW91dC0yY29sIj4nOwogICAgICAgICRh ZVJhZGlvW10gPSAnPGxhYmVsIGNsYXNzPSJpZWRfbGFiZWwiPicgLiBnVHh0KCdpZWRfcGx1 Z2luX2F1dG9fZW5hYmxlJykgLiAnPC9sYWJlbD4nOwogICAgICAgICRhZVJhZGlvW10gPSBy YWRpb3NldCgkaWVkX3BsdWdpbl9wcmVmc1snaWVkX3BsdWdpbl9hdXRvX2VuYWJsZSddWydj b250ZW50J10sICdpZWRfcGx1Z2luX2F1dG9lbmFibGUnLCAkYXV0b19lbik7CiAgICAgICAg JGFlUmFkaW9bXSA9ICc8L3A+JzsKCiAgICAgICAgJGlvUmFkaW9bXSA9ICc8cCBjbGFzcz0i aWVkX3BsdWdpbl9yYWRpb3NldCBpZWRfcGx1Z2luX2luc3RhbGxvcHRzIHR4cC1sYXlvdXQt MmNvbCIgaGlkZGVuPic7CiAgICAgICAgJGlvUmFkaW9bXSA9ICc8bGFiZWwgY2xhc3M9Imll ZF9sYWJlbCI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fcnVuX2luc3RhbGwnKSAuICc8L2xhYmVs Pic7CiAgICAgICAgJGlvUmFkaW9bXSA9IHllc25vcmFkaW8oJ2llZF9wbHVnaW5faW5zdGFs bG9wdHMnLCAkY2hlY2tlZCk7CiAgICAgICAgJGlvUmFkaW9bXSA9ICc8L3A+JzsKCiAgICAg ICAgZXh0cmFjdChncHNhKGFycmF5KCdzb3J0JywgJ2RpcicpKSk7CgogICAgICAgIGlmICgk c29ydCA9PT0gJycpICRzb3J0ID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fc29ydF9jb2x1bW4n LCAnbmFtZScpOwogICAgICAgIGlmICgkZGlyID09PSAnJykgJGRpciA9IGdldF9wcmVmKCdp ZWRfcGx1Z2luX3NvcnRfZGlyJywgJ2FzYycpOwogICAgICAgICRkaXIgPSAoJGRpciA9PSAn ZGVzYycpID8gJ2Rlc2MnIDogJ2FzYyc7CiAgICAgICAgaWYgKCFpbl9hcnJheSgkc29ydCwg YXJyYXkoJ25hbWUnLCAnc3RhdHVzJywgJ2F1dGhvcicsICd2ZXJzaW9uJywgJ2xvYWRfb3Jk ZXInKSkpICRzb3J0ID0gJ25hbWUnOwoKICAgICAgICAkc29ydF9zcWwgPSAkc29ydC4nICcu JGRpcjsKCiAgICAgICAgc2V0X3ByZWYoJ2llZF9wbHVnaW5fc29ydF9jb2x1bW4nLCAkc29y dCwgJ2llZF9wbHVnaW4nLCBQUkVGX0hJRERFTiwgJycsIDAsIFBSRUZfUFJJVkFURSk7CiAg ICAgICAgc2V0X3ByZWYoJ2llZF9wbHVnaW5fc29ydF9kaXInLCAkZGlyLCAnaWVkX3BsdWdp bicsIFBSRUZfSElEREVOLCAnJywgMCwgUFJFRl9QUklWQVRFKTsKCiAgICAgICAgJHN3aXRj aF9kaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2FzYycgOiAnZGVzYyc7CgogICAgICAgIC8v IFRvcCBjb250cm9sLXBhbmVsIHBhcnQgb2Ygc2NyZWVuCiAgICAgICAgZWNobyAnPGRpdiBj bGFzcz0idHhwLWxheW91dCI+Jy4KICAgICAgICAgICAgbi4gJzxkaXYgY2xhc3M9InR4cC1s YXlvdXQtMmNvbCI+Jy4KICAgICAgICAgICAgbi4gJzxoMSBjbGFzcz0idHhwLWhlYWRpbmci PicuZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLnNwLiR0aGlzLT5hbmNob3IoJHRoaXMt PmllZF9wY19ldmVudCwgJ2hlbHBfdmlld2VyJywgJz8nLCBhcnJheSgnbmFtZScgPT4gJ2ll ZF9wbHVnaW5fY29tcG9zZXInKSwgYXJyYXkoJ2NsYXNzJyA9PiAncG9waGVscCcpKS4nPC9o MT4nLgogICAgICAgICAgICBuLiAnPC9kaXY+Jy4KICAgICAgICAgICAgbi4gJzxkaXYgaWQ9 ImllZF9wbHVnaW5fY29udHJvbCIgY2xhc3M9InR4cC1sYXlvdXQtMmNvbCI+Jy4KICAgICAg ICAgICAgbi4gc0xpbmsoJHRoaXMtPmllZF9wY19ldmVudCwgJ3ByZWZzJywgZ1R4dCgnaWVk X3BsdWdpbl9zZXR1cCcpLCAnaWVkX3BsdWdpbl9saW5rJykuCiAgICAgICAgICAgIG4uICc8 L2Rpdj4nLgogICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0idHhwLWxheW91dC0xY29sIj4n LgogICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0ic3VtbWFyeS1kZXRhaWxzIGNsZWFyIj48 aDMgY2xhc3M9ImxldmVyIHR4cC1zdW1tYXJ5Jy4oZ2V0X3ByZWYoJ3BhbmVfaWVkX3BsdWdp bl9jcGFuZWxfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJlZj0iI2ll ZF9wbHVnaW5fY3BhbmVsIj4nIC4gZ1R4dCgnaWVkX3BsdWdpbl9jcGFuZWxfbGVnZW5kJykg LiAnPC9hPjwvaDM+PGRpdiBpZD0iaWVkX3BsdWdpbl9jcGFuZWwiIGNsYXNzPSJ0b2dnbGUi IHN0eWxlPSJkaXNwbGF5OicuKGdldF9wcmVmKCdwYW5lX2llZF9wbHVnaW5fY3BhbmVsX3Zp c2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPicuCiAgICAgICAgICAgIG4uICc8Zm9y bSBjbGFzcz0iaWVkX3BsdWdpbl9mb3JtIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRh IiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nLgogICAgICAgICAgICBuLiBp bXBsb2RlKG4sICRhZVJhZGlvKS4KICAgICAgICAgICAgbi4gaW1wbG9kZShuLCAkaW9SYWRp bykuCiAgICAgICAgICAgIG4uICc8cCBjbGFzcz0iY2xlYXIiPicuCiAgICAgICAgICAgIG4u ICc8bGFiZWwgZm9yPSJpZWRfcGx1Z2luX25ld25hbWUiIGNsYXNzPSJpZWRfbGFiZWwiPicu Z1R4dCgnbmFtZScpLic8L2xhYmVsPicuCiAgICAgICAgICAgIG4uIGZJbnB1dCgndGV4dCcs ICduYW1lJywgJycsICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIsICcnLCAnaWVkX3BsdWdp bl9uZXduYW1lJywgZmFsc2UsIGZhbHNlLCAnQ3JlYXRlIGEgbmV3IHBsdWdpbicpLgogICAg ICAgICAgICBuLiBmSW5wdXQoJ3N1Ym1pdCcsICdwbHVnaW5fY3JlYXRlJywgZ1R4dCgnY3Jl YXRlJykpLgogICAgICAgICAgICBuLiAnPC9wPicuCiAgICAgICAgICAgIG4uICc8cD4nLgog ICAgICAgICAgICBuLiAnPGxhYmVsIGZvcj0iaWVkX3BsdWdpbl9maWxlIiBjbGFzcz0iaWVk X2xhYmVsIj4nLmdUeHQoJ2llZF9wbHVnaW5fdXBsb2FkX3BocCcpLic8L2xhYmVsPicuCiAg ICAgICAgICAgIG4uIGZJbnB1dCgnZmlsZScsICd0aGVmaWxlJywgJycsICcnLCAnJywgJycs ICcnLCAnJywgJ2llZF9wbHVnaW5fZmlsZScpLgogICAgICAgICAgICBuLiBmSW5wdXQoJ3N1 Ym1pdCcsICdwbHVnaW5fdXBsb2FkJywgZ1R4dCgndXBsb2FkJykpLgogICAgICAgICAgICBu LiAnPC9wPicuCiAgICAgICAgICAgIG4uICc8cD4nLgogICAgICAgICAgICBuLiAnPGxhYmVs IGZvcj0iaWVkX3BsdWdpbjY0IiBjbGFzcz0iaWVkX2xhYmVsIj4nLmdUeHQoJ2llZF9wbHVn aW5faW5zdGFsbF90eHQnKS4nPC9sYWJlbD4nLgogICAgICAgICAgICBuLiB0ZXh0X2FyZWEo J3BsdWdpbjY0JywgJycsICcnLCAnJywgJ2llZF9wbHVnaW42NCcpLgogICAgICAgICAgICBu LiBmSW5wdXQoJ3N1Ym1pdCcsICdwbHVnaW5faW5zdGFsbCcsIGdUeHQoJ2luc3RhbGwnKSku CiAgICAgICAgICAgIG4uICc8L3A+Jy4KICAgICAgICAgICAgbi4gZUlucHV0KCR0aGlzLT5p ZWRfcGNfZXZlbnQpLgogICAgICAgICAgICBuLiBzSW5wdXQoJ2NyZWF0ZScpLgogICAgICAg ICAgICBuLiBoSW5wdXQoJ01BWF9GSUxFX1NJWkUnLCAxMDAwMDAwKS4KICAgICAgICAgICAg bi4gdElucHV0KCkuCiAgICAgICAgICAgIG4uICc8L2Zvcm0+Jy4KICAgICAgICAgICAgbi4g JzwvZGl2PicuCiAgICAgICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICBuLiAnPC9k aXY+JzsKCiAgICAgICAgLy8gTWFpbiBwbHVnaW4gbGlzdAogICAgICAgICRycyA9IHNhZmVf cm93cygnKicsICd0eHBfcGx1Z2luJywgJzE9MSBPUkRFUiBCWSAnLiRzb3J0X3NxbCk7Cgog ICAgICAgIGlmICgkcnMpIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idHhwLWxh eW91dC0xY29sIj4nLgogICAgICAgICAgICAgICAgbi4gJzxkaXYgY2xhc3M9InN1bW1hcnkt ZGV0YWlscyI+Jy4KICAgICAgICAgICAgICAgIG4uICc8Zm9ybSBhY3Rpb249ImluZGV4LnBo cCIgaWQ9ImllZF9wbHVnaW5fZGJfZm9ybSIgbWV0aG9kPSJwb3N0Ij4nLgogICAgICAgICAg ICAgICAgbi4gJzxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnknLihnZXRfcHJlZigncGFu ZV9pZWRfcGx1Z2luX2RicGx1Z3NfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+ Jy4KICAgICAgICAgICAgICAgIG4uICc8YSBocmVmPSIjaWVkX3BsdWdpbl9kYnBsdWdzIj4n IC4gZ1R4dCgnaWVkX3BsdWdpbl9kYnBsdWdzX2xlZ2VuZCcpIC4gJzwvYT4nLgogICAgICAg ICAgICAgICAgbi4gJzwvaDM+Jy4KICAgICAgICAgICAgICAgIG4uICc8ZGl2IGlkPSJpZWRf cGx1Z2luX2RicGx1Z3MiIGNsYXNzPSJ0b2dnbGUiIHN0eWxlPSJkaXNwbGF5OicuKGdldF9w cmVmKCdwYW5lX2llZF9wbHVnaW5fZGJwbHVnc192aXNpYmxlJykgPyAnYmxvY2snIDogJ25v bmUnKS4nIj4nLgogICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0idHhwLWxpc3R0YWJsZXMi PicuCiAgICAgICAgICAgIG4uIHN0YXJ0VGFibGUoJycsICcnLCAndHhwLWxpc3QnKS4KICAg ICAgICAgICAgbi4nPHRoZWFkPicuCiAgICAgICAgICAgIG4uIHRyKAogICAgICAgICAgICAg ICAgbi5oQ2VsbChmSW5wdXQoJ2NoZWNrYm94JywgJ3NlbGVjdF9hbGwnLCAwLCAnJywgJycs ICcnLCAnJywgJycsICdzZWxlY3RfYWxsJyksICcnLCAnIHRpdGxlPSInLmdUeHQoJ3RvZ2ds ZV9hbGxfc2VsZWN0ZWQnKS4nIiBjbGFzcz0ibXVsdGktZWRpdCInKQogICAgICAgICAgICAg ICAgLm4uY29sdW1uX2hlYWQoJ3BsdWdpbicsICduYW1lJywgJ2llZF9wbHVnaW5fY29tcG9z ZXInLCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAoKCduYW1lJyA9PSAkc29ydCkgPyAi JGRpciAiIDogJycpLiduYW1lJykKICAgICAgICAgICAgICAgIC5uLmNvbHVtbl9oZWFkKCdh dXRob3InLCAnYXV0aG9yJywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCB0cnVlLCAkc3dpdGNo X2RpciwgJycsICcnLCAoKCdhdXRob3InID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykuJ2F1 dGhvcicpCiAgICAgICAgICAgICAgICAubi5jb2x1bW5faGVhZChnVHh0KCd2ZXJzaW9uJyku JyAoJy5nVHh0KCdwbHVnaW5fbW9kaWZpZWQnKS4nKScsICd2ZXJzaW9uJywgJ2llZF9wbHVn aW5fY29tcG9zZXInLCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAoKCd2ZXJzaW9uJyA9 PSAkc29ydCkgPyAiJGRpciAiIDogJycpLid2ZXJzaW9uJykKICAgICAgICAgICAgICAgIC5u LmhDZWxsKGdUeHQoJ2Rlc2NyaXB0aW9uJyksICcnLCAnIGNsYXNzPSJkZXNjcmlwdGlvbiIn KQogICAgICAgICAgICAgICAgLm4uaENlbGwoZ1R4dCgnbWFuYWdlJyksICcnLCAnIGNsYXNz PSJtYW5hZ2UiJykKICAgICAgICAgICAgICAgIC5uLmNvbHVtbl9oZWFkKCdhY3RpdmUnLCAn c3RhdHVzJywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCB0cnVlLCAkc3dpdGNoX2RpciwgJycs ICcnLCAoKCdzdGF0dXMnID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykuJ3N0YXR1cycpCiAg ICAgICAgICAgICkuCiAgICAgICAgICAgIG4uICc8L3RoZWFkPicuCiAgICAgICAgICAgIG4u ICc8dGJvZHk+JzsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRycyBhcyAkcm93KSB7CiAgICAg ICAgICAgICAgICBleHRyYWN0KCRyb3cpOwogICAgICAgICAgICAgICAgJGVuYW1lID0gJHRo aXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnZWRpdCcsICRuYW1lLCBhcnJheSgn bmFtZScgPT4gJG5hbWUpKTsKICAgICAgICAgICAgICAgICRobGluayA9ICgkaGVscCkgPyAk dGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdoZWxwX3ZpZXdlcicsIGdUeHQo J2llZF9wbHVnaW5fZG9jcycpLCBhcnJheSgnbmFtZScgPT4gJG5hbWUpKSA6IGdUeHQoJ25v bmUnKTsKICAgICAgICAgICAgICAgICRmbmFtZXMgPSAkdGhpcy0+Z2V0X25hbWUoJG5hbWUs ICR2ZXJzaW9uKTsKICAgICAgICAgICAgICAgICRwdWJ0YWcgPSAkdGhpcy0+YW5jaG9yKCR0 aGlzLT5pZWRfcGNfZXZlbnQsICdzYXZlX2FzX2ZpbGUnLCBnVHh0KCdwdWJsaXNoJyksIGFy cmF5KCduYW1lJyA9PiAkbmFtZSksIGFycmF5KCd0aXRsZScgPT4gZ1R4dCgnaWVkX3BsdWdp bl9leHBvcnQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWVzWzBdKSkpKTsKICAgICAgICAg ICAgICAgICRwdWJ6dGFnID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAn c2F2ZV9hc19maWxlJywgZ1R4dCgnaWVkX3BsdWdpbl9jb21wcmVzcycpLCBhcnJheSgnbmFt ZScgPT4gJG5hbWUsICd0eXBlJyA9PiAnemlwJyksIGFycmF5KCd0aXRsZScgPT4gZ1R4dCgn aWVkX3BsdWdpbl9leHBvcnQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWVzWzFdKSkpKTsK ICAgICAgICAgICAgICAgICRtb2RpZmllZCA9IChzdHJ0b2xvd2VyKCRjb2RlKSAhPSAoc3Ry dG9sb3dlcigkY29kZV9yZXN0b3JlKSkpOwogICAgICAgICAgICAgICAgJHBsdWdwcmVmID0g KCRmbGFncyAmIFBMVUdJTl9IQVNfUFJFRlMpID8gKHNwLiR0aGlzLT5hbmNob3IoJ3BsdWdp bl9wcmVmcy4nLnVybGVuY29kZSgkbmFtZSksICcnLCAnWycuZ1R4dCgncGx1Z2luX3ByZWZz JykuJ10nLCBhcnJheSgnbmFtZScgPT4gJG5hbWUpLCBhcnJheSgnY2xhc3MnID0+ICdwbHVn aW5fcHJlZnMnLiggKCRzdGF0dXMpID8gJycgOiAnIGVtcHR5JykpKSApIDogJyc7CgogICAg ICAgICAgICAgICAgZWNobyB0cigKICAgICAgICAgICAgICAgICAgICBuLnRkKAogICAgICAg ICAgICAgICAgICAgICAgICBmSW5wdXQoJ2NoZWNrYm94JywgJ3NlbGVjdGVkW10nLCAkbmFt ZSkKICAgICAgICAgICAgICAgICAgICAsJycsICdtdWx0aS1lZGl0JykKICAgICAgICAgICAg ICAgICAgICAubi50ZCgkZW5hbWUuJHBsdWdwcmVmKQogICAgICAgICAgICAgICAgICAgIC5u LnRkKCggKCRhdXRob3JfdXJpKSA/ICc8YSBocmVmPSInLnR4cHNwZWNpYWxjaGFycygkYXV0 aG9yX3VyaSkuJyI+Jy50eHBzcGVjaWFsY2hhcnMoJGF1dGhvcikuJzwvYT4nIDogdHhwc3Bl Y2lhbGNoYXJzKCRhdXRob3IpKSkKICAgICAgICAgICAgICAgICAgICAubi50ZCgoICgkbW9k aWZpZWQpID8gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAncmVzdG9yZScs ICR2ZXJzaW9uLCBhcnJheSgnbmFtZScgPT4gJG5hbWUpLCBhcnJheSgndGl0bGUnID0+IGdU eHQoJ2llZF9wbHVnaW5fcmVzdG9yZV9oZWxwJyksICdvbmNsaWNrJyA9PiAncmV0dXJuIHZl cmlmeShcJycuZ1R4dCgnaWVkX3BsdWdpbl9yZXN0b3JlX3ZlcmlmeScsIGFycmF5KCd7bmFt ZX0nID0+ICRuYW1lKSkuJ1wnKTsnKSkgOiAkdmVyc2lvbikgLiAoKCRtb2RpZmllZCkgPyBz cC4nKCcuZ1R4dCgneWVzJykuJyknIDogJycpKQogICAgICAgICAgICAgICAgICAgIC5uLnRk KHR4cHNwZWNpYWxjaGFycygkZGVzY3JpcHRpb24pKQogICAgICAgICAgICAgICAgICAgIC5u LnRkKCRwdWJ0YWcgLnNwLiAnJiMxMjQ7JyAuc3AuICRwdWJ6dGFnIC5zcC4gJyYjMTI0Oycg LnNwLiAkaGxpbmspCiAgICAgICAgICAgICAgICAgICAgLm4udGQoJHRoaXMtPnN0YXR1c19s aW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSkKICAgICAgICAgICAgICAgICk7 CiAgICAgICAgICAgICAgICB1bnNldCgkbmFtZSwkcGFnZSk7CiAgICAgICAgICAgIH0KICAg ICAgICAgICAgZWNobyBuLiAnPC90Ym9keT4nLgogICAgICAgICAgICAgICAgbi4gZW5kVGFi bGUoKS4KICAgICAgICAgICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICAgICAgbi4g JzwvZGl2PicuCiAgICAgICAgICAgICAgICBuLiB0SW5wdXQoKS4KICAgICAgICAgICAgICAg ICR0aGlzLT5tdWx0aWVkaXRfZm9ybSgnZGInLCAnJywgJHNvcnQsICRkaXIsICcnLCAnJyku CiAgICAgICAgICAgICAgICBuLiAnPC9mb3JtPicuCiAgICAgICAgICAgICAgICBuLiAnPC9k aXY+Jy4KICAgICAgICAgICAgICAgIG4uICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAg aWYgKCFlbXB0eSgkcGNkKSAmJiBmaWxlX2V4aXN0cygkcGNkKSkgewogICAgICAgICAgICAk ZmlsZW5hbWVzID0gYXJyYXkoKTsKCiAgICAgICAgICAgICRkaXJlY3RvcnkgPSBkaXIoJHBj ZCk7CgogICAgICAgICAgICB3aGlsZSAoJGZpbGUgPSAkZGlyZWN0b3J5LT5yZWFkKCkpIHsK ICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewog ICAgICAgICAgICAgICAgICAgICRmaWxlYWRkciA9ICRwY2QgLiBEUyAuICRmaWxlOwogICAg ICAgICAgICAgICAgICAgIGlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgJGZpbGVuYW1lc1tdPSRmaWxlOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkZGlyZWN0b3J5 LT5jbG9zZSgpOwogICAgICAgICAgICAoJGZpbGVuYW1lcyk/bmF0Y2FzZXNvcnQoJGZpbGVu YW1lcyk6Jyc7CgogICAgICAgICAgICAkb3V0ID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGZv cmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7CiAgICAgICAgICAgICAgICAkcGFy dHMgPSBleHBsb2RlICgnLicsJGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICRmaWxlZXh0 ID0gYXJyYXlfcG9wKCRwYXJ0cyk7CgogICAgICAgICAgICAgICAgaWYgKCRmaWxlZXh0PT0n cGhwJykgewogICAgICAgICAgICAgICAgICAgICRiYXNlbmFtZSA9IGJhc2VuYW1lKCRmaWxl bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgJHBsdWdpbiA9ICR0aGlzLT5yZWFkX2ZpbGUo JHBjZCAuIERTIC4gJGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAkaGxpbmsgPSAo JHBsdWdpblsnaGVscCddKSA/ICR0aGlzLT5hbmNob3IoJHRoaXMtPmllZF9wY19ldmVudCwg J2hlbHBfdmlld2VyJywgZ1R4dCgnaWVkX3BsdWdpbl9kb2NzJyksIGFycmF5KCdmaWxlbmFt ZScgPT4gJGZpbGVuYW1lKSkgOiBnVHh0KCdub25lJyk7CiAgICAgICAgICAgICAgICAgICAg JGVmaWxlID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnZWRpdCcsICRw bHVnaW5bJ25hbWUnXSwgYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkZmlsZW5hbWUpKTsKICAgICAg ICAgICAgICAgICAgICAkZm5hbWVzID0gJHRoaXMtPmdldF9uYW1lKCRwbHVnaW5bJ25hbWUn XSwgJHBsdWdpblsndmVyc2lvbiddKTsKICAgICAgICAgICAgICAgICAgICAkcGx1Z3ByZWYg PSAoKCRwbHVnaW5bJ2ZsYWdzJ10gJiBQTFVHSU5fSEFTX1BSRUZTKSkgPyAnICcuJHRoaXMt PmFuY2hvcigncGx1Z2luX3ByZWZzLicudXJsZW5jb2RlKCRwbHVnaW5bJ25hbWUnXSksICcn LCAnIFsnLmdUeHQoJ3BsdWdpbl9wcmVmcycpLiddJykgOiAnJzsKICAgICAgICAgICAgICAg ICAgICAkcHVidGFnID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnc2F2 ZV9hc19maWxlJywgZ1R4dCgncHVibGlzaCcpLCBhcnJheSgnZmlsZW5hbWUnID0+ICRmaWxl bmFtZSksIGFycmF5KCd0aXRsZScgPT4gZ1R4dCgnaWVkX3BsdWdpbl9leHBvcnQnLCBhcnJh eSgne25hbWV9JyA9PiAkZm5hbWVzWzBdKSkpKTsKICAgICAgICAgICAgICAgICAgICAkcHVi enRhZyA9ICR0aGlzLT5hbmNob3IoJHRoaXMtPmllZF9wY19ldmVudCwgJ3NhdmVfYXNfZmls ZScsIGdUeHQoJ2llZF9wbHVnaW5fY29tcHJlc3MnKSwgYXJyYXkoJ2ZpbGVuYW1lJyA9PiAk ZmlsZW5hbWUsICd0eXBlJyA9PiAnemlwJyksIGFycmF5KCd0aXRsZScgPT4gZ1R4dCgnaWVk X3BsdWdpbl9leHBvcnQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWVzWzFdKSkpKTsKCiAg ICAgICAgICAgICAgICAgICAgJG91dFtdID0gdHIoCiAgICAgICAgICAgICAgICAgICAgICAg IG4udGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmSW5wdXQoJ2NoZWNrYm94Jywg J3NlbGVjdGVkLWNhY2hlW10nLCAkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAg ICwnJywgJ211bHRpLWVkaXQnKQogICAgICAgICAgICAgICAgICAgICAgICAubi50ZCgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRhZygkZmlsZW5hbWUsJ2RpdicsJyBjbGFzcz0i aWVkX3N1YmR1ZSInKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLihpc3NldCgkcGx1 Z2luWyduYW1lJ10pID8gJGVmaWxlLiRwbHVncHJlZi4nPGJyIC8+JyA6ICcnKS4nICcKICAg ICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAubi50ZCgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3Vy aSddKSA/ICc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4nIj4nIDogJycgKSAu CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcidd KSA/ICRwbHVnaW5bJ2F1dGhvciddIDogJyZuYnNwOycgKS4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKSA/ICc8L2E+JyA6ICcn ICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAu bi50ZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc3NldCgkcGx1Z2luWyd2ZXJz aW9uJ10pID8gJHBsdWdpblsndmVyc2lvbiddIDogJyZuYnNwOycpCiAgICAgICAgICAgICAg ICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgLm4udGQoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaXNzZXQoJHBsdWdpblsnZGVzY3JpcHRpb24nXSkgPyAkcGx1 Z2luWydkZXNjcmlwdGlvbiddIDogJyZuYnNwOycpCiAgICAgICAgICAgICAgICAgICAgICAg ICkKICAgICAgICAgICAgICAgICAgICAgICAgLm4udGQoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaXNzZXQoJHBsdWdpblsnbmFtZSddKSA/ICRwdWJ0YWcgLnNwLiAnJiMxMjQ7 JyAuc3AuICRwdWJ6dGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YWco JyZuYnNwOycsICdzcGFuJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC5zcC4gJyYjMTI0OycgLnNwLiAkaGxpbmsKICAgICAg ICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkb3V0KSB7CiAgICAgICAg ICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0LTFjb2wiPicuCiAgICAgICAg ICAgICAgICAgICAgbi4gJzxkaXYgY2xhc3M9InN1bW1hcnktZGV0YWlscyI+Jy4KICAgICAg ICAgICAgICAgICAgICBuLiAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIGlkPSJpZWRfcGx1 Z2luX2NhY2hlX2Zvcm0iIG1ldGhvZD0icG9zdCI+Jy4KICAgICAgICAgICAgICAgICAgICAg ICAgbi4gJzxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnknLihnZXRfcHJlZigncGFuZV9p ZWRfcGx1Z2luX2NhY2hlcGx1Z3NfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+ Jy4KICAgICAgICAgICAgICAgICAgICAgICAgbi4gJzxhIGhyZWY9IiNpZWRfcGx1Z2luX2Nh Y2hlcGx1Z3MiPicgLiBnVHh0KCdpZWRfcGx1Z2luX2NhY2hlcGx1Z3NfbGVnZW5kJykgLiAn PC9hPicuCiAgICAgICAgICAgICAgICAgICAgICAgIG4uICc8L2gzPicuCiAgICAgICAgICAg ICAgICAgICAgICAgIG4uICc8ZGl2IGlkPSJpZWRfcGx1Z2luX2NhY2hlcGx1Z3MiIGNsYXNz PSJ0b2dnbGUiIHN0eWxlPSJkaXNwbGF5OicuKGdldF9wcmVmKCdwYW5lX2llZF9wbHVnaW5f Y2FjaGVwbHVnc192aXNpYmxlJykgPyAnYmxvY2snIDogJ25vbmUnKS4nIj4nLgogICAgICAg ICAgICAgICAgICAgIG4uICc8ZGl2IGNsYXNzPSJ0eHAtbGlzdHRhYmxlcyBpZWRfcGx1Z2lu X2NhY2hlcGx1Z3MiPicuCiAgICAgICAgICAgICAgICAgICAgbi5zdGFydFRhYmxlKCcnLCAn JywgJ3R4cC1saXN0JykuCiAgICAgICAgICAgICAgICAgICAgbi4gJzx0aGVhZD4nLgogICAg ICAgICAgICAgICAgICAgIG4uIHRyKAogICAgICAgICAgICAgICAgICAgICAgICBuLmhDZWxs KGZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0X2FsbCcsIDAsICcnLCAnJywgJycsICcnLCAn JywgJ3NlbGVjdF9hbGwnKSwgJycsICcgdGl0bGU9IicuZ1R4dCgndG9nZ2xlX2FsbF9zZWxl Y3RlZCcpLiciIGNsYXNzPSJtdWx0aS1lZGl0IicpCiAgICAgICAgICAgICAgICAgICAgICAg IC5uLmhDZWxsKGdUeHQoJ3BsdWdpbicpLCAnJywgJyBjbGFzcz0ibmFtZSInKQogICAgICAg ICAgICAgICAgICAgICAgICAubi5oQ2VsbChnVHh0KCdhdXRob3InKSwgJycsICcgY2xhc3M9 ImF1dGhvciInKQogICAgICAgICAgICAgICAgICAgICAgICAubi5oQ2VsbChnVHh0KCd2ZXJz aW9uJykgLiAnICgnLmdUeHQoJ3BsdWdpbl9tb2RpZmllZCcpLicpJywgJycsICcgY2xhc3M9 InZlcnNpb24iJykKICAgICAgICAgICAgICAgICAgICAgICAgLm4uaENlbGwoZ1R4dCgnZGVz Y3JpcHRpb24nKSwgJycsICcgY2xhc3M9ImRlc2NyaXB0aW9uIicpCiAgICAgICAgICAgICAg ICAgICAgICAgIC5uLmhDZWxsKGdUeHQoJ21hbmFnZScpLCAnJywgJyBjbGFzcz0ibWFuYWdl IicpCiAgICAgICAgICAgICAgICAgICAgKS4KICAgICAgICAgICAgICAgICAgICBuLiAnPC90 aGVhZD4nLgogICAgICAgICAgICAgICAgICAgIG4uICc8dGJvZHk+Jy4KICAgICAgICAgICAg ICAgICAgICBuLiBpbXBsb2RlKG4sICRvdXQpLgogICAgICAgICAgICAgICAgICAgIG4uICc8 L3Rib2R5PicuCiAgICAgICAgICAgICAgICAgICAgbi4gZW5kVGFibGUoKS4KICAgICAgICAg ICAgICAgICAgICBuLiAnPC9kaXY+Jy4KICAgICAgICAgICAgICAgICAgICBuLiB0SW5wdXQo KS4KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bXVsdGllZGl0X2Zvcm0oJ2NhY2hlJywg JycsICRzb3J0LCAkZGlyLCAnJywgJycpLgogICAgICAgICAgICAgICAgICAgIG4uICc8L2Zv cm0+Jy4KICAgICAgICAgICAgICAgICAgICBuLiAnPC9kaXY+Jy4KICAgICAgICAgICAgICAg ICAgICBuLiAnPC9kaXY+Jy4KICAgICAgICAgICAgICAgICAgICBuLiAnPC9kaXY+JzsKICAg ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWNobyAnPC9kaXY+Jy4KICAgICAgICAg ICAgbi4gc2NyaXB0X2pzKCA8PDxFT0pTCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgp IHsKICAgICQoJyNpZWRfcGx1Z2luX2RiX2Zvcm0nKS50eHBNdWx0aUVkaXRGb3JtKHsKICAg ICAgICAnY2hlY2tib3gnIDogJ2lucHV0W25hbWU9InNlbGVjdGVkW10iXVt0eXBlPWNoZWNr Ym94XScKICAgIH0pOwoKICAgICQoJyNpZWRfcGx1Z2luX2NhY2hlX2Zvcm0nKS50eHBNdWx0 aUVkaXRGb3JtKHsKICAgICAgICAnY2hlY2tib3gnIDogJ2lucHV0W25hbWU9InNlbGVjdGVk LWNhY2hlW10iXVt0eXBlPWNoZWNrYm94XScKICAgIH0pOwoKICAgIHZhciBpZWRfaW8gPSAk KCcuaWVkX3BsdWdpbl9pbnN0YWxsb3B0cycpOwoKICAgICQoJyNpZWRfcGx1Z2luX2ZpbGUn KS5jaGFuZ2UoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGZuID0gJCh0aGlzKS52YWwoKTsK CiAgICAgICAgaWYgKGZuLnN1YnN0cihmbi5sYXN0SW5kZXhPZignLicpICsgMSkgPT09ICd0 eHQnKSB7CiAgICAgICAgICAgIGllZF9pby5zaG93KCk7CiAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgaWVkX2lvLmhpZGUoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICAkKCcjaWVk X3BsdWdpbjY0Jykub24oJ2JsdXIsIGtleXVwJywgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYg KCQodGhpcykudmFsKCkpIHsKICAgICAgICAgICAgaWVkX2lvLnNob3coKTsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICBpZWRfaW8uaGlkZSgpOwogICAgICAgIH0KICAgIH0pOwp9 KTsKRU9KUwogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgIC8vIFNob3cvaGlkZSAi T3B0aW9ucyIgbGluayBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBjbGFzcyBvbiB0aGUg cGx1Z2luJ3MgJmx0O3RyJmd0OwogICAgICAgIGVjaG8gc2NyaXB0X2pzKDw8PEVPSlMKdGV4 dHBhdHRlcm4uUmVsYXkucmVnaXN0ZXIoJ3R4cEFzeW5jSHJlZi5zdWNjZXNzJywgZnVuY3Rp b24gKGV2ZW50LCBkYXRhKSB7CiAgICBqUXVlcnkoZGF0YS50aGlzKS5jbG9zZXN0KCd0cicp LmZpbmQoJ2EucGx1Z2luX3ByZWZzJykudG9nZ2xlQ2xhc3MoJ2VtcHR5Jyk7Cn0pOwpFT0pT CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbmRlciBhIG11bHRpLWVkaXQg ZHJvcGRvd24gbGlzdCBvZiBhY3Rpb25zLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5n ICRmbGF2b3VyICAgICAgIFdoZXRoZXIgdGhlIGRyb3Bkb3duIGlzIGZvciBmaWxlLWJhc2Vk IHBsdWdpbnMgb3IgdGhvc2UgaW4gdGhlIERCCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkcGFn ZSAgICAgICAgICBDdXJyZW50IHBhZ2Ugb2YgcmVzdWx0cyAodW51c2VkKQogICAgICogQHBh cmFtICBzdHJpbmcgJHNvcnQgICAgICAgICAgQ3VycmVudCBzb3J0IGNvbHVtbiBuYW1lCiAg ICAgKiBAcGFyYW0gIHN0cmluZyAkZGlyICAgICAgICAgICBDdXJyZW50IHNvcnQgZGlyZWN0 aW9uIChhc2Mgb3IgZGVzYykKICAgICAqIEBwYXJhbSAgc3RyaW5nICRjcml0ICAgICAgICAg IEN1cnJlbnQgZmlsdGVyIGNyaXRlcmlhICh1bnVzZWQpCiAgICAgKiBAcGFyYW0gIHN0cmlu ZyAkc2VhcmNoX21ldGhvZCBDb2x1bW4gbmFtZSB1cG9uIHdoaWNoIHRoZSBzZWFyY2ggaXMg YmVpbmcgcGVyZm9ybWVkICh1bnVzZWQpCiAgICAgKiBAcmV0dXJuIEhUTUwKICAgICAqLwog ICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG11bHRpZWRpdF9mb3JtKCRmbGF2b3VyLCAkcGFnZSwg JHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCkKICAgIHsKICAgICAgICAkb3Jk ZXJzID0gc2VsZWN0SW5wdXQoJ29yZGVyJywgYXJyYXkoMT0+MSwgMj0+MiwgMz0+MywgND0+ NCwgNT0+NSwgNj0+NiwgNz0+NywgOD0+OCwgOT0+OSksIDUsIGZhbHNlKTsKICAgICAgICAk c3RhdGkgPSBzZWxlY3RJbnB1dCgnc3dpdGNoX3N0YXR1cycsIGFycmF5KCd0b2dnbGUnID0+ IGdUeHQoJ2llZF9wbHVnaW5fdG9nZ2xlJyksICdvbicgPT4gZ1R4dCgnb24nKSwgJ29mZicg PT4gZ1R4dCgnb2ZmJykpLCAndG9nZ2xlJywgZmFsc2UpOwogICAgICAgICRsaWZlY3ljbGVz ID0gc2VsZWN0SW5wdXQoJ2llZF9sY19ldmVudCcsIGFycmF5KAogICAgICAgICAgICAnaW5z dGFsbGVkJyAgICAgICAgID0+IGdUeHQoJ2llZF9wbHVnaW5fbGJsX2xjX2luc3RhbGwnKSwK ICAgICAgICAgICAgJ2VuYWJsZWQnICAgICAgICAgICA9PiBnVHh0KCdpZWRfcGx1Z2luX2xi bF9sY19lbmFibGUnKSwKICAgICAgICAgICAgJ2luc3RhbGxlZCxlbmFibGVkJyA9PiBnVHh0 KCdpZWRfcGx1Z2luX2xibF9sY19pbnN0YWJsZScpLAogICAgICAgICAgICAnZGlzYWJsZWQn ICAgICAgICAgID0+IGdUeHQoJ2llZF9wbHVnaW5fbGJsX2xjX2Rpc2FibGUnKSwKICAgICAg ICAgICAgJ2RlbGV0ZWQnICAgICAgICAgICA9PiBnVHh0KCdpZWRfcGx1Z2luX2xibF9sY19k ZWxldGUnKSwKICAgICAgICAgICAgJ2Rpc2FibGVkLGRlbGV0ZWQnICA9PiBnVHh0KCdpZWRf cGx1Z2luX2xibF9sY19kaXNkZWwnKSwKICAgICAgICApKTsKCiAgICAgICAgaWYgKCRmbGF2 b3VyID09PSAnZGInKSB7CiAgICAgICAgICAgICRtZXRob2RzID0gYXJyYXkoCiAgICAgICAg ICAgICAgICAnY2hhbmdlc3RhdHVzJyA9PiBhcnJheSgnbGFiZWwnID0+IGdUeHQoJ2NoYW5n ZXN0YXR1cycpLCAnaHRtbCcgPT4gJHN0YXRpKSwKICAgICAgICAgICAgICAgICdjaGFuZ2Vv cmRlcicgID0+IGFycmF5KCdsYWJlbCcgPT4gZ1R4dCgnY2hhbmdlb3JkZXInKSwgJ2h0bWwn ID0+ICRvcmRlcnMpLAogICAgICAgICAgICAgICAgJ2xpZmVjeWNsZScgICAgPT4gYXJyYXko J2xhYmVsJyA9PiBnVHh0KCdpZWRfcGx1Z2luX2xpZmVjeWNsZScpLCAnaHRtbCcgPT4gJGxp ZmVjeWNsZXMpLAogICAgICAgICAgICAgICAgJ2RlbGV0ZScgICAgICAgPT4gZ1R4dCgnZGVs ZXRlJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1l dGhvZHMgPSBhcnJheSgKICAgICAgICAgICAgICAgICdsaWZlY3ljbGUnID0+IGFycmF5KCds YWJlbCcgPT4gZ1R4dCgnaWVkX3BsdWdpbl9saWZlY3ljbGUnKSwgJ2h0bWwnID0+ICRsaWZl Y3ljbGVzKSwKICAgICAgICAgICAgICAgICd0ZXh0cGFjaycgID0+IGFycmF5KCdsYWJlbCcg PT4gZ1R4dCgnaWVkX3BsdWdpbl9pbnN0YWxsX3RleHRwYWNrJykpLAogICAgICAgICAgICAg ICAgJ2RlbGV0ZScgICAgPT4gZ1R4dCgnZGVsZXRlJyksCiAgICAgICAgICAgICk7CiAgICAg ICAgfQoKICAgICAgICByZXR1cm4gbXVsdGlfZWRpdCgkbWV0aG9kcywgJHRoaXMtPmllZF9w Y19ldmVudCwgJ211bHRpX2VkaXQnLCAkcGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAkc2Vh cmNoX21ldGhvZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGUgbXVsdGktZWRpdCBh Y3Rpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlfZWRpdCgpCiAgICB7 CiAgICAgICAgJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7CiAgICAgICAgJHNlbGVjdGVk X2NhY2hlID0gcHMoJ3NlbGVjdGVkLWNhY2hlJyk7CiAgICAgICAgJG1ldGhvZCA9IGFzc2Vy dF9zdHJpbmcocHMoJ2VkaXRfbWV0aG9kJykpOwoKICAgICAgICBpZiAoJHNlbGVjdGVkICYm IGlzX2FycmF5KCRzZWxlY3RlZCkpIHsKICAgICAgICAgICAgJHdoZXJlID0gIm5hbWUgSU4g KCciLmltcGxvZGUoIicsJyIsIGRvU2xhc2goJHNlbGVjdGVkKSkuIicpIjsKICAgICAgICAg ICAgJGxjX29wdHMgPSBkb19saXN0KGdldF9wcmVmKCdpZWRfcGx1Z2luX2xpZmVjeWNsZV9v cHRpb25zJykpOwoKICAgICAgICAgICAgc3dpdGNoICgkbWV0aG9kKSB7CiAgICAgICAgICAg ICAgICBjYXNlICdkZWxldGUnOgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxl Y3RlZCBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZV9maWVs ZCgnZmxhZ3MnLCAndHhwX3BsdWdpbicsICJuYW1lID0nIi5kb1NsYXNoKCRuYW1lKS4iJyIp ICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvYWRfcGx1Z2luKCRuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChpbl9hcnJheSgnZGlzYWJsZWQnLCAkbGNfb3B0cykpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19ldmVudCgicGx1Z2luX2xpZmVjeWNsZS4k bmFtZSIsICdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KCdkZWxldGVkJywgJGxjX29w dHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfZXZlbnQo InBsdWdpbl9saWZlY3ljbGUuJG5hbWUiLCAnZGVsZXRlZCcpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNhZmVfZGVsZXRlKCd0eHBfcGx1Z2luJywg JHdoZXJlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBj YXNlICdjaGFuZ2VzdGF0dXMnOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHMoJ3N3 aXRjaF9zdGF0dXMnKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvbic6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3c3RhdCA9ICcxJzsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdv ZmYnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld3N0YXQgPSAnMCc7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAndG9nZ2xlJzoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICRuZXdzdGF0ID0gJygxLXN0YXR1cyknOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc2VsZWN0ZWQgYXMgJG5hbWUpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHNhZmVfZmllbGQoJ2ZsYWdzJywgJ3R4cF9wbHVnaW4n LCAibmFtZSA9JyIuZG9TbGFzaCgkbmFtZSkuIiciKSAmIFBMVUdJTl9MSUZFQ1lDTEVfTk9U SUZZKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gc2FmZV9maWVs ZCgnc3RhdHVzJywgJ3R4cF9wbHVnaW4nLCAibmFtZSA9JyIuZG9TbGFzaCgkbmFtZSkuIici KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0dXMgPSAkc3RhdHVzID8gJ2Rp c2FibGVkJyA6ICdlbmFibGVkJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRf cGx1Z2luKCRuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp bl9hcnJheSgkc3RhdHVzLCAkbGNfb3B0cykpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYWxsYmFja19ldmVudCgicGx1Z2luX2xpZmVjeWNsZS4kbmFtZSIsICRzdGF0 dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzYWZl X3VwZGF0ZSgndHhwX3BsdWdpbicsICdzdGF0dXMgPSAnLiRuZXdzdGF0LCAkd2hlcmUpOwog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2NoYW5n ZW9yZGVyJzoKICAgICAgICAgICAgICAgICAgICAkb3JkZXIgPSBtaW4obWF4KGludHZhbChw cygnb3JkZXInKSksIDEpLCA5KTsKICAgICAgICAgICAgICAgICAgICBzYWZlX3VwZGF0ZSgn dHhwX3BsdWdpbicsICdsb2FkX29yZGVyID0gJy4kb3JkZXIsICR3aGVyZSk7CiAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CgoKICAgICAgICAgICAgICAgIGNhc2UgJ2xpZmVjeWNsZSc6 CiAgICAgICAgICAgICAgICAgICAgJGxjX2V2cyA9IGRvX2xpc3QocHMoJ2llZF9sY19ldmVu dCcpKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc2VsZWN0ZWQgYXMgJG5hbWUp IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGxjX2V2cyBhcyAkbGNfZXYp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2V2ZW50KCJwbHVnaW5f bGlmZWN5Y2xlLiRuYW1lIiwgJGxjX2V2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZWxlY3RlZCA9IGFycmF5 KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlbGVjdGVkX2NhY2hlICYmIGlzX2FycmF5 KCRzZWxlY3RlZF9jYWNoZSkpIHsKICAgICAgICAgICAgJHBjZCA9IGdldF9wcmVmKCdwbHVn aW5fY2FjaGVfZGlyJyk7CgogICAgICAgICAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAg ICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo JHNlbGVjdGVkX2NhY2hlIGFzICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRm aWxlbmFtZXMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAkZGlyID0gZGly KCRwY2QpOwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCRmaWxlID0gJGRpci0+ cmVhZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gIi4i ICYmICRmaWxlICE9ICIuLiIgJiYgaW5fYXJyYXkoJGZpbGUsICRzZWxlY3RlZF9jYWNoZSkp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZWFkZHIgPSAkcGNkIC4g RFMgLiAkZmlsZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19k aXIoJGZpbGVhZGRyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmxpbmsoJGZpbGVhZGRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAgICAgICAgICRkaXItPmNsb3NlKCk7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgJ2xpZmVjeWNsZSc6CiAgICAgICAgICAgICAgICAgICAgJGxjX2V2cyA9IGRvX2xpc3Qo cHMoJ2llZF9sY19ldmVudCcpKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc2Vs ZWN0ZWRfY2FjaGUgYXMgJG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUg PSBzdHJfcmVwbGFjZSgnLnBocCcsICcnLCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGZvcmVhY2ggKCRsY19ldnMgYXMgJGxjX2V2KSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYWxsYmFja19ldmVudCgicGx1Z2luX2xpZmVjeWNsZS4kbmFtZSIsICRsY19l dik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAndGV4dHBh Y2snOgogICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHRleHRwYWNrIGZyb20gdGhl IC5waHAgZmlsZSBhbmQgY2FsbCBpbnN0YWxsX3RleHRwYWNrKCkKICAgICAgICAgICAgICAg ICAgICAkdGV4dHBhY2sgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg KCRzZWxlY3RlZF9jYWNoZSBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAk ZmlsZWFkZHIgPSAkcGNkIC4gRFMgLiAkbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAg ICRjb250ZW50cyA9IGZpbGUoJGZpbGVhZGRyKTsKICAgICAgICAgICAgICAgICAgICAgICAg JGluX3RwID0gJGluX2NvbW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg Zm9yZWFjaCAoJGNvbnRlbnRzIGFzICRyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChzdHJwb3MoJHJvdywgJy8qKicpID09PSAwKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJGluX2NvbW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkcm93 LCAnKiovJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5f Y29tbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkcm93LCAnRU9UOycpICE9PSBmYWxz ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRp bl90cCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0 cGFja1tdID0gdHJpbSgkcm93KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGluX2NvbW1lbnQgJiYgc3RycG9zKCRy b3csICckcGx1Z2luW1wndGV4dHBhY2tcJ10nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAkaW5fdHAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICAgICAgJGRvbmUgPSBpbnN0YWxsX3RleHRwYWNrKGltcGxvZGUobiwgJHRl eHRwYWNrKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgICRzZWxlY3RlZF9jYWNoZSA9IGFycmF5KCk7CiAgICAg ICAgfQoKICAgICAgICAkbWVzc2FnZSA9ICcnOwoKICAgICAgICBpZiAoJHNlbGVjdGVkIHx8 ICRzZWxlY3RlZF9jYWNoZSkgewogICAgICAgICAgICBpZiAoJG1ldGhvZCA9PT0gJ2RlbGV0 ZScpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgncGx1Z2luX2RlbGV0ZWQn LCBhcnJheSgne25hbWV9JyA9PiBpbXBsb2RlKCcsICcsIGFycmF5X21lcmdlKCRzZWxlY3Rl ZCwgJHNlbGVjdGVkX2NhY2hlKSkpKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2Qg PT09ICdsaWZlY3ljbGUnKSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IGdUeHQoJ2ll ZF9wbHVnaW5fbGNfZmlyZWQnLCBhcnJheSgne25hbWV9JyA9PiBpbXBsb2RlKCcsICcsIGFy cmF5X21lcmdlKCRzZWxlY3RlZCwgJHNlbGVjdGVkX2NhY2hlKSksICd7ZXZlbnR9JyA9PiBp bXBsb2RlKCcsJywgJGxjX2V2cykpKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2Qg PT09ICd0ZXh0cGFjaycpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgndGV4 dHBhY2tfc3RyaW5nc19pbnN0YWxsZWQnLCBhcnJheSgne2NvdW50fScgPT4gJGRvbmUpKTsK ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgn cGx1Z2luX3VwZGF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiBpbXBsb2RlKCcsICcsICRzZWxl Y3RlZCkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+dGFibGUo JG1lc3NhZ2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmVuZGVyIGEgaHlwZXJsaW5rIHRv IGFub3RoZXIgcGx1Z2luIGNvbXBvc2VyIG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0g IHN0cmluZyAkZXZ0ICAgICAgVGV4dHBhdHRlcm4gZXZlbnQgZGVzdGluYXRpb24KICAgICAq IEBwYXJhbSAgc3RyaW5nICRzdHAgICAgICBUZXh0cGF0dGVybiBzdGVwIChhY3Rpb24pIGRl c3RpbmF0aW9uCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbGlua3RleHQgVGV4dCBmb3IgdGhl IGh5cGVybGluawogICAgICogQHBhcmFtICBhcnJheSAgJG52ICAgICAgIE5hbWUtdmFsdWUg dHVwbGVzIHRvIGFkZCB0byB0aGUgVVJMCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXR0cyAg ICAgTmFtZS12YWx1ZSB0dXBsZXMgdG8gYWRkIHRvIHRoZSBhbmNob3IgdGFnCiAgICAgKiBA cmV0dXJuIEhUTUwKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFuY2hvcigkZXZ0 LCAkc3RwLCAkbGlua3RleHQsICRudiA9IGFycmF5KCksICRhdHRzID0gYXJyYXkoKSkKICAg IHsKICAgICAgICAkbnZbJ190eHBfdG9rZW4nXSA9IGZvcm1fdG9rZW4oKTsKICAgICAgICAk YXR0c1snaHJlZiddID0gJz9ldmVudD0nIC4gJGV2dCAuICgkc3RwID8gJyZzdGVwPScgLiAk c3RwIDogJycpIC4gJyYnIC4gaHR0cF9idWlsZF9xdWVyeSgkbnYpOwoKICAgICAgICAkYXR0 cmlicyA9ICcnOwoKICAgICAgICBmb3JlYWNoICgkYXR0cyBhcyAkbiA9PiAkdikgewogICAg ICAgICAgICAkYXR0cmlicyAuPSAnICcgLiB0eHBzcGVjaWFsY2hhcnMoJG4pIC4gJz0iJyAu IHR4cHNwZWNpYWxjaGFycygkdikgLiAnIic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4g dGFnKCRsaW5rdGV4dCwgJ2EnLCAkYXR0cmlicyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBS ZW5kZXIgYW4gYXN5bmNocm9ub3VzIGFuY2hvciB0YWcgZm9yIHRvZ2dsaW5nIHBsdWdpbiBz dGF0dXMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJHN0YXR1cyAgIEN1cnJlbnQg cGx1Z2luIHN0YXR1cyAoMD1kaXNhYmxlZCwgMT1lbmFibGVkKQogICAgICogQHBhcmFtICBz dHJpbmcgJG5hbWUgICAgIFBsdWdpbiBuYW1lIHRvIHRvZ2dsZQogICAgICogQHBhcmFtICBz dHJpbmcgJGxpbmt0ZXh0IExpbmsgdGV4dCB0byBkaXNwbGF5IG9uIHRoZSBhbmNob3IKICAg ICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBIVE1MCiAgICAgKi8KICAgIHByb3RlY3Rl ZCBmdW5jdGlvbiBzdGF0dXNfbGluaygkc3RhdHVzLCAkbmFtZSwgJGxpbmt0ZXh0KQogICAg ewogICAgICAgIHJldHVybiBhc3luY0hyZWYoJGxpbmt0ZXh0LCBhcnJheSgnc3RlcCcgPT4g J3N3aXRjaF9zdGF0dXMnLCAndGhpbmcnID0+ICRuYW1lKSwnIHRpdGxlPSInLigkc3RhdHVz PT0xID8gZ1R4dCgnZGlzYWJsZScpIDogZ1R4dCgnZW5hYmxlJykpLiciJyApOwogICAgfQoK ICAgIC8qKgogICAgICogVG9nZ2xlIHRoZSBzdGF0dXMgb2YgdGhlIGdpdmVuIHBsdWdpbiAo cGFyYW1zIHNlbnQgdmlhIFBPU1QpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgTmV3 IHN0YXR1cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3dpdGNoX3N0YXR1cygpCiAg ICB7CiAgICAgICAgZXh0cmFjdChhcnJheV9tYXAoJ2Fzc2VydF9zdHJpbmcnLCBncHNhKGFy cmF5KCd0aGluZycsICd2YWx1ZScpKSkpOwogICAgICAgICRjaGFuZ2UgPSAoJHZhbHVlID09 IGdUeHQoJ3llcycpKSA/IDAgOiAxOwoKICAgICAgICBzYWZlX3VwZGF0ZSgndHhwX3BsdWdp bicsICJzdGF0dXMgPSAkY2hhbmdlIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0aGluZykuIici KTsKCiAgICAgICAgJGxjX29wdHMgPSBkb19saXN0KGdldF9wcmVmKCdpZWRfcGx1Z2luX2xp ZmVjeWNsZV9vcHRpb25zJykpOwogICAgICAgICRzdHAgPSAkY2hhbmdlID8gJ2VuYWJsZWQn IDogJ2Rpc2FibGVkJzsKCiAgICAgICAgaWYgKGluX2FycmF5KCRzdHAsICRsY19vcHRzKSAm JiAoc2FmZV9maWVsZCgnZmxhZ3MnLCAndHhwX3BsdWdpbicsICJuYW1lPSciLmRvU2xhc2go JHRoaW5nKS4iJyIpICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpICkgewogICAgICAgICAg ICBsb2FkX3BsdWdpbigkdGhpbmcsIHRydWUpOwogICAgICAgICAgICAkbWVzc2FnZSA9IGNh bGxiYWNrX2V2ZW50KCJwbHVnaW5fbGlmZWN5Y2xlLiR0aGluZyIsICRzdHApOwogICAgICAg IH0KCiAgICAgICAgZWNobyBnVHh0KCRjaGFuZ2UgPyAneWVzJyA6ICdubycpOwogICAgfQoK ICAgIC8qKgogICAgICogUmVzZXQgdGhlIGdpdmVuIHBsdWdpbiB0byBpdHMgbGFzdCByZXN0 b3JlIHBvaW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZSgpCiAgICB7 CiAgICAgICAgJG5hbWUgPSBkb1NsYXNoKGdwcygnbmFtZScpKTsKICAgICAgICBzYWZlX3Vw ZGF0ZSgidHhwX3BsdWdpbiIsICJjb2RlID0gY29kZV9yZXN0b3JlIiwgIm5hbWU9JyRuYW1l JyIpOwogICAgICAgICR0aGlzLT50YWJsZShnVHh0KCdpZWRfcGx1Z2luX3Jlc3RvcmVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFZGl0 IHRoZSBzZWxlY3RlZCBwbHVnaW4gZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmlu ZyAkbWVzc2FnZSBGbGFzaCBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgYWN0aW9uCiAgICAg KiBAcGFyYW0gIHN0cmluZyAkbmV3ZmlsZSBGaWxlbmFtZSBpZiBwbHVnaW4gYmVpbmcgZWRp dGVkIGlzIGluIHRoZSBmaWxlc3lzdGVtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBl ZGl0KCRtZXNzYWdlID0gJycsICRuZXdmaWxlID0gJycpCiAgICB7CiAgICAgICAgJG5ld25h bWUgPSB0cmltKGdwcygnbmV3bmFtZScpKTsKICAgICAgICAkZmlsZW5hbWUgPSBncHMoJ2Zp bGVuYW1lJyk7CiAgICAgICAgJGVkaXRmaWxlID0gJGZpbGVuYW1lID8gMSA6IDA7CiAgICAg ICAgJG5hbWUgPSBlbXB0eSgkbmV3bmFtZSkgPyBncHMoJ25hbWUnKSA6ICRuZXduYW1lOwog ICAgICAgICRuYW1lID0gKCRuZXdmaWxlKSA/ICRuZXdmaWxlIDogKCgkZmlsZW5hbWUpID8g JGZpbGVuYW1lIDogJG5hbWUpOwoKICAgICAgICBwYWdldG9wKGdUeHQoJ2llZF9wbHVnaW5f ZWRpdGluZycsIGFycmF5KCd7bmFtZX0nID0+IHR4cHNwZWNpYWxjaGFycygkbmFtZSkpKSwg JG1lc3NhZ2UpOwogICAgICAgIHJlcXVpcmVfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXIn KTsKCiAgICAgICAgZWNobyAkdGhpcy0+aW5zZXJ0X2VkaXRvcnMoKTsKCiAgICAgICAgaWYg KCEkZWRpdGZpbGUpIHsKICAgICAgICAgICAgJHJzID0gc2FmZV9yb3coImF1dGhvciwgYXV0 aG9yX3VyaSwgdmVyc2lvbiwgZGVzY3JpcHRpb24sIGNvZGUsIGhlbHAsIHN0YXR1cywgdHlw ZSwgbG9hZF9vcmRlciwgZmxhZ3MiLCAidHhwX3BsdWdpbiIsICJuYW1lPSciLmRvU2xhc2go JG5hbWUpLiInIik7CiAgICAgICAgICAgIGV4dHJhY3QoJHJzKTsKICAgICAgICAgICAgbGlz dCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyAkdGhpcy0+ZXh0cmFjdF9odW5rKCRoZWxwLCAi Q1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7CiAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgJHBsdWdpbiA9ICR0aGlzLT5yZWFkX2ZpbGUoZ2V0X3ByZWYo J3BsdWdpbl9jYWNoZV9kaXInKS5EUy4kbmFtZSk7CiAgICAgICAgICAgICRmaWxlbmFtZSA9 ICRuYW1lOwogICAgICAgICAgICAkbmFtZSA9IGV4cGxvZGUgKCcuJywgJG5hbWUpOwogICAg ICAgICAgICAkZmlsZWV4dCA9IGFycmF5X3BvcCgkbmFtZSk7CiAgICAgICAgICAgICRuYW1l ID0gaW1wbG9kZSgkbmFtZSk7CiAgICAgICAgICAgIGV4dHJhY3QoJHBsdWdpbik7CiAgICAg ICAgICAgICRzdGF0dXMgPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsKICAgICAgICB9Cgog ICAgICAgICRpZmVsID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5faW50ZXJmYWNlX2VsZW1zJyk7 CiAgICAgICAgJGRpc3RibG9jayA9IChzdHJwb3MoJGlmZWwsICdkaXN0cmlidXRpb24nKSAh PT0gZmFsc2UpOwogICAgICAgICRzdHlsZWJsb2NrID0gKHN0cnBvcygkaWZlbCwgJ3N0eWxl JykgIT09IGZhbHNlKTsKICAgICAgICAkZGlzdHJpYnV0aW9uID0gJyc7CgogICAgICAgIGxp c3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9ICR0aGlzLT5tYWtlX21hcmtlcnMoIkNTUyIs ICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkdGhpcy0+aWVkX3Bs dWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoKICAgICAgICBpZiAoJGRpc3RibG9jaykgewog ICAgICAgICAgICAkcGx1Z2luWyduYW1lJ10gPSAkbmFtZTsKICAgICAgICAgICAgJHBsdWdp blsnYXV0aG9yJ10gPSAkYXV0aG9yOwogICAgICAgICAgICAkcGx1Z2luWydhdXRob3JfdXJp J10gPSAkYXV0aG9yX3VyaTsKICAgICAgICAgICAgJHBsdWdpblsndmVyc2lvbiddID0gJHZl cnNpb247CiAgICAgICAgICAgICRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRp b247CiAgICAgICAgICAgICRwbHVnaW5bJ2hlbHAnXSA9ICR0aGlzLT50ZXh0aWxlKCRuYW1l LCAkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3MpOwogICAgICAgICAgICAkcGx1 Z2luWydjb2RlJ10gPSAkY29kZTsKICAgICAgICAgICAgJHBsdWdpblsndHlwZSddID0gJHR5 cGU7CiAgICAgICAgICAgICRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsKICAgICAg ICAgICAgJHBsdWdpblsnZmxhZ3MnXSA9ICRmbGFnczsKICAgICAgICAgICAgJHBsdWdpblsn bWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwogICAgICAgICAgICAkZGlzdHJpYnV0 aW9uID0gJzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24iIGNsYXNzPSJkaXN0cmlidXRp b24tY29kZSIgcm93cz0iMSIgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+Jy5iYXNlNjRfZW5j b2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwvdGV4dGFyZWE+JzsKICAgICAgICB9CgogICAg ICAgIGZvciAoJGkgPSAxOyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJzWyRpXSA9ICRpOwoKICAg ICAgICAkdHBfcGZ4ID0gdW5zZXJpYWxpemUoZ2V0X3ByZWYoJ2llZF9wbHVnaW5fdHBfcHJl Zml4JywgJycsIDEpKTsKICAgICAgICAkdHBfcGZ4ID0gaXNzZXQoJHRwX3BmeFskbmFtZV0p ID8gJHRwX3BmeFskbmFtZV0gOiAnJzsKCiAgICAgICAgJGZuYW1lcyA9ICR0aGlzLT5nZXRf bmFtZSgkbmFtZSwgJHZlcnNpb24pOwogICAgICAgICRuYW1lZExpbmsgPSAoJGZpbGVuYW1l KSA/IGFycmF5KCdmaWxlbmFtZScgPT4gJGZpbGVuYW1lKSA6IGFycmF5KCduYW1lJyA9PiAk bmFtZSk7CiAgICAgICAgJHppcHBlZExpbmsgPSBhcnJheV9tZXJnZSgkbmFtZWRMaW5rLCBh cnJheSgndHlwZScgPT4gJ3ppcCcpKTsKCiAgICAgICAgJHNsaW5rID0gJHRoaXMtPmFuY2hv cigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnc2F2ZV9hc19maWxlJywgZ1R4dCgnaWVkX3BsdWdp bl9leHBvcnQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWVzWzBdKSksICRuYW1lZExpbmsp OwogICAgICAgICRzemlwbGluayA9ICR0aGlzLT5hbmNob3IoJHRoaXMtPmllZF9wY19ldmVu dCwgJ3NhdmVfYXNfZmlsZScsIGdUeHQoJ2llZF9wbHVnaW5fZXhwb3J0X3ppcCcsIGFycmF5 KCd7bmFtZX0nID0+ICRmbmFtZXNbMV0pKSwgJHppcHBlZExpbmspOwogICAgICAgICRzcGhw bGluayA9ICR0aGlzLT5hbmNob3IoJHRoaXMtPmllZF9wY19ldmVudCwgJ3NhdmVfYXNfcGhw X2ZpbGUnLCBnVHh0KCdpZWRfcGx1Z2luX3NhdmVfYXMnLCBhcnJheSgne25hbWV9JyA9PiAk Zm5hbWVzWzJdKSksICRuYW1lZExpbmspOwogICAgICAgICRzdHh0bGluayA9ICR0aGlzLT5h bmNob3IoJHRoaXMtPmllZF9wY19ldmVudCwgJ3NhdmVfYXNfdGV4dHBhY2snLCBnVHh0KCdp ZWRfcGx1Z2luX2V4cG9ydF90ZXh0cGFjaycpLCAkbmFtZWRMaW5rKTsKICAgICAgICAkdmhl bHBsaW5rZnVsbCA9ICgkaGVscCkgPyAnWyAnIC4kdGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRf cGNfZXZlbnQsICdoZWxwX3ZpZXdlcicsIGdUeHQoJ2llZF9wbHVnaW5fZG9jcycpLCAkbmFt ZWRMaW5rKSAuICcgXScgOiAnJzsKCiAgICAgICAgJG1zZ3BvcCA9ICc8ZGl2IGlkPSJpZWRf cGx1Z2luX21zZ3BvcCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB1Ymxpc2giIHZh bHVlPSInLmdUeHQoJ29rJykuJyIgb25jbGljaz0iaWVkX3BsdWdpbl90b2dnbGVfbXNncG9w KFwnMFwnKTsiIC8+PGgyPicuZ1R4dCgnaWVkX3BsdWdpbl9tc2dwb3BfbGJsJykuJzwvaDI+ PHNwYW4gY2xhc3M9ImllZF9wbHVnaW5fbXNncG9wX2NvbnRlbnQiPjwvc3Bhbj48L2Rpdj4n OwoKICAgICAgICAkbmV3bmFtZSA9IGZJbnB1dCgndGV4dCcsICduZXduYW1lJywgJG5hbWUs ICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIpOwogICAgICAgICRhdXRob3Jfd2lkZ2V0ID0g ZklucHV0KCd0ZXh0JywgJ2F1dGhvcicsICRhdXRob3IsICcnLCAnJywgJycsIElOUFVUX1JF R1VMQVIpOwogICAgICAgICRhdXRob3JfdXJpX3dpZGdldCA9IGZJbnB1dCgndGV4dCcsICdh dXRob3JfdXJpJywgJGF1dGhvcl91cmksICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIpOwog ICAgICAgICR2ZXJzaW9uX3dpZGdldCA9IGZJbnB1dCgndGV4dCcsICd2ZXJzaW9uJywgJHZl cnNpb24sICdpbnB1dC1zbWFsbCcsICcnLCAnJyxJTlBVVF9TTUFMTCkgLnNwLiAoKCRlZGl0 ZmlsZSkgPyBjaGVja2JveCgncmVuYW1lX2ZpbGUnLCAnMScsIDAsICcnLCdyZW5hbWVfZmls ZScpIC4gJyA8bGFiZWwgZm9yPSJyZW5hbWVfZmlsZSI+Jy5nVHh0KCdpZWRfcGx1Z2luX3Jl bmFtZV9maWxlJykuJzwvbGFiZWw+JyA6IGNoZWNrYm94KCdyZXN0b3JlX3BvaW50JywgJzEn LCAwLCAnJywncmVzdG9yZV9wb2ludCcpIC4gJyA8bGFiZWwgZm9yPSJyZXN0b3JlX3BvaW50 Ij4nLmdUeHQoJ2llZF9wbHVnaW5fcmVzdG9yZV9wb2ludCcpLic8L2xhYmVsPicpOwogICAg ICAgICRkZXNjcmlwdGlvbl93aWRnZXQgPSBmSW5wdXQoJ3RleHQnLCAnZGVzY3JpcHRpb24n LCAkZGVzY3JpcHRpb24sICdpbnB1dC14bGFyZ2UnLCAnJywgJycsIElOUFVUX1JFR1VMQVIp OwogICAgICAgICRjb2RlYmxvY2sgPSAnPHRleHRhcmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVn aW5fZWRpdG9yIiByb3dzPSInLklOUFVUX1JFR1VMQVIuJyIgY2xhc3M9ImNvZGUgY29kZXBy ZXNzIHBocCIgbWF4bGVuZ3RoPSInLiR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVf Y29kZSddLiciPicudHhwc3BlY2lhbGNoYXJzKCRjb2RlKS4nPC90ZXh0YXJlYT48ZGl2IGNs YXNzPSJpZWRfcGx1Z2luX2luZm9fYmFyIj48c3Bhbj4nLmdUeHQoJ2llZF9wbHVnaW5fanVt cF90b19saW5lJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImllZF9wbHVnaW5f anVtcFRvTGluZSIgc2l6ZT0iNSIgbWF4bGVuZ3RoPSI2IiAvPjxzcGFuIGNsYXNzPSJpZWRf cGx1Z2luX2NoYXJzUmVtYWluIj48L3NwYW4+PC9kaXY+JzsKICAgICAgICAkaGVscF93aWRn ZXQgPSAnPHRleHRhcmVhIG5hbWU9ImhlbHAiIGlkPSJwbHVnaW5faGVscCIgcm93cz0iJy5J TlBVVF9SRUdVTEFSLiciIGNsYXNzPSJtY2VFZGl0b3IiIG1heGxlbmd0aD0iJy4kdGhpcy0+ aWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2hlbHAnXS4nIj4nLnR4cHNwZWNpYWxjaGFycygk aGVscCkuJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iaWVkX3BsdWdpbl9pbmZvX2JhciI+PHNw YW4gY2xhc3M9ImllZF9wbHVnaW5fY2hhcnNSZW1haW4iPjwvc3Bhbj48L2Rpdj4nOwogICAg ICAgICRjc3Nfd2lkZ2V0ID0gKCRzdHlsZWJsb2NrKSA/ICc8dGV4dGFyZWEgbmFtZT0iY3Nz IiBpZD0icGx1Z2luX2hlbHBfY3NzIiByb3dzPSInLklOUFVUX01FRElVTS4nIiBjbGFzcz0i Y29kZSIgbWF4bGVuZ3RoPSInLiR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfY3Nz J10uJyI+Jy50eHBzcGVjaWFsY2hhcnMoJGNzcykuJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0i aWVkX3BsdWdpbl9pbmZvX2JhciI+PHNwYW4gY2xhc3M9ImllZF9wbHVnaW5fY2hhcnNSZW1h aW4iPjwvc3Bhbj48L2Rpdj4nIDogJyc7CiAgICAgICAgJHBsdWdzdGF0dXMgPSAoISRlZGl0 ZmlsZSkgPyBzcC5zcC5jaGVja2JveCgnc3RhdHVzJywxLCRzdGF0dXMsICcnLCdzdGF0dXMn KS4gJyA8bGFiZWwgZm9yPSJzdGF0dXMiPicuZ1R4dCgnaWVkX3BsdWdpbl9lbmFibGUnKS4n PC9sYWJlbD4nIDogJyc7CgogICAgICAgICRwbHVndHlwZXMgPSBhcnJheSgKICAgICAgICAg ICAgJzAnID0+IGdUeHQoJ2llZF9wbHVnaW5fdHlwZV8wJyksCiAgICAgICAgICAgICcxJyA9 PiBnVHh0KCdpZWRfcGx1Z2luX3R5cGVfMScpLAogICAgICAgICAgICAnMicgPT4gZ1R4dCgn aWVkX3BsdWdpbl90eXBlXzInKSwKICAgICAgICAgICAgJzMnID0+IGdUeHQoJ2llZF9wbHVn aW5fdHlwZV8zJyksCiAgICAgICAgICAgICc0JyA9PiBnVHh0KCdpZWRfcGx1Z2luX3R5cGVf NCcpLAogICAgICAgICAgICAnNScgPT4gZ1R4dCgnaWVkX3BsdWdpbl90eXBlXzUnKSwKICAg ICAgICApOwogICAgICAgICRwbHVndHlwZSA9IHNlbGVjdElucHV0KCd0eXBlJywgJHBsdWd0 eXBlcywgJHR5cGUsIGZhbHNlLCAnJywgJ3R5cGUnKTsKCiAgICAgICAgJHBsdWdvcmRlciA9 IHNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDAp OwogICAgICAgICRmbGFnbGlzdCA9IGNoZWNrYm94KAogICAgICAgICAgICAgICAgJ2ZsYWdz W10nLAogICAgICAgICAgICAgICAgUExVR0lOX0hBU19QUkVGUywKICAgICAgICAgICAgICAg ICgoJGZsYWdzICYgUExVR0lOX0hBU19QUkVGUykgPyAxIDogMCksCiAgICAgICAgICAgICAg ICAnJywKICAgICAgICAgICAgICAgICdpZWRfcGx1Z2luX2ZsYWdfaGFzX3ByZWZzJwogICAg ICAgICAgICApCiAgICAgICAgICAgIC5uLiAnPGxhYmVsIGZvcj0iaWVkX3BsdWdpbl9mbGFn X2hhc19wcmVmcyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fZmxhZ19oYXNfcHJlZnMnKSAuICc8 L2xhYmVsPicKICAgICAgICAgICAgLm4uIGNoZWNrYm94KAogICAgICAgICAgICAgICAgJ2Zs YWdzW10nLAogICAgICAgICAgICAgICAgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlksCiAgICAg ICAgICAgICAgICAoKCRmbGFncyAmIFBMVUdJTl9MSUZFQ1lDTEVfTk9USUZZKSA/IDEgOiAw KSwKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgJ2llZF9wbHVnaW5fZmxh Z19saWZlY3ljbGVfbm90aWZ5JwogICAgICAgICAgICApCiAgICAgICAgICAgIC5uLiAnPGxh YmVsIGZvcj0iaWVkX3BsdWdpbl9mbGFnX2xpZmVjeWNsZV9ub3RpZnkiPicgLiBnVHh0KCdp ZWRfcGx1Z2luX2ZsYWdfbGlmZWN5Y2xlX25vdGlmeScpIC4gJzwvbGFiZWw+JzsKCiAgICAg ICAgJHN1YiA9IGdyYWYoZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVi bGlzaCcsICcnLCAnJywgJycsICcnLCAnaWVkX2VkaXRTYXZlJyksIGFycmF5KCdjbGFzcycg PT4gJ3R4cC1zYXZlJykpOwogICAgICAgICRjb2Rlc3ViID0gKCEkZWRpdGZpbGUpID8gJzxh IGNsYXNzPSJuYXZsaW5rIiBuYW1lPSJpZWRfcGx1Z2luX2NvZGVfc2F2ZSIgaWQ9ImllZF9w bHVnaW5fY29kZV9zYXZlIj4nIC4gZ1R4dCgnaWVkX3BsdWdpbl9jb2RlX3NhdmUnKSAuICc8 L2E+JyA6ICcnOwogICAgICAgICRtZXRhc3ViID0gKCEkZWRpdGZpbGUpID8gJzxhIGNsYXNz PSJuYXZsaW5rIiBuYW1lPSJpZWRfcGx1Z2luX21ldGFfc2F2ZSIgaWQ9ImllZF9wbHVnaW5f bWV0YV9zYXZlIj4nIC4gZ1R4dCgnaWVkX3BsdWdpbl9tZXRhX3NhdmUnKSAuICc8L2E+JyA6 ICcnOwoKICAgICAgICAvLyBMYW5ndWFnZSBpbmZvLiBpZWRfdmlzaWJsZV9sYW5ncyBpcyB0 aGUgdXNlcidzIGNob2ljZSBvZiB3aGljaCBvbmVzIHRoZXkgd2FudCB0byBzZWUgYXZhaWxh YmxlLgogICAgICAgIC8vIGllZF9hdmFpbGFibGVfbGFuZ3MgaXMgdGhlIGxpc3Qgb2YgYWN0 dWFsLCBjdXJyZW50bHktaW5zdGFsbGVkIGxhbmdzLgogICAgICAgICR0aGVMYW5nID0gZ2V0 X3ByZWYoJ2xhbmd1YWdlJyk7CiAgICAgICAgJHN0cmluZ19jb3VudCA9ICgkdHBfcGZ4KSA/ IHNhZmVfcm93cygnbGFuZywgY291bnQoKikgYXMgY291bnQnLCAndHhwX2xhbmcnLCAibmFt ZSBsaWtlICciLiR0cF9wZnguIiUnIGdyb3VwIGJ5IGxhbmciKSA6IGFycmF5KCk7CiAgICAg ICAgJGllZF9saXN0bGFuZ3MgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9sYW5nX2Nob29zZScs ICdpbnN0YWxsZWQnKTsKICAgICAgICAkaWVkX3Zpc2libGVfbGFuZ3MgPSBzZWxmOjpsYW5n X2xpc3QoJGllZF9saXN0bGFuZ3MpOwogICAgICAgICRpZWRfYXZhaWxhYmxlX2xhbmdzID0g KCRpZWRfbGlzdGxhbmdzID09ICdpbnN0YWxsZWQnKSA/ICRpZWRfdmlzaWJsZV9sYW5ncyA6 IHNlbGY6OmxhbmdfbGlzdCgnaW5zdGFsbGVkJyk7CiAgICAgICAgJGRmbHRfbGFuZyA9IGdl dF9wcmVmKCdpZWRfcGx1Z2luX2xhbmdfZGVmYXVsdCcsICR0aGVMYW5nKTsKICAgICAgICAk ZGZsdF9sYW5nID0gYXJyYXlfa2V5X2V4aXN0cygkZGZsdF9sYW5nLCAkaWVkX3Zpc2libGVf bGFuZ3MpID8gJGRmbHRfbGFuZyA6ICR0aGVMYW5nOwogICAgICAgICRkZmx0X2xhbmdfc3Ry aW5nX2NvdW50ID0gMDsKCiAgICAgICAgZm9yZWFjaCAoJHN0cmluZ19jb3VudCBhcyAkc3Ry X3RvdGFscykgewogICAgICAgICAgICBpZiAoaXNzZXQoJGllZF92aXNpYmxlX2xhbmdzWyRz dHJfdG90YWxzWydsYW5nJ11dKSkgewogICAgICAgICAgICAgICAgJGllZF92aXNpYmxlX2xh bmdzWyRzdHJfdG90YWxzWydsYW5nJ11dIC49ICcgWycuJHN0cl90b3RhbHNbJ2NvdW50J10u J10nOwogICAgICAgICAgICAgICAgaWYgKCRzdHJfdG90YWxzWydsYW5nJ10gPT09ICRkZmx0 X2xhbmcpIHsKICAgICAgICAgICAgICAgICAgICAkZGZsdF9sYW5nX3N0cmluZ19jb3VudCA9 ICRzdHJfdG90YWxzWydjb3VudCddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICAgICRsYW5nc2VsID0gc2VsZWN0SW5wdXQoJ2llZF9wbHVnaW5f dHBfbGFuZycsICRpZWRfdmlzaWJsZV9sYW5ncywgJGRmbHRfbGFuZywgJycsICcnLCAnaWVk X3BsdWdpbl90cF9sYW5nJykKICAgICAgICAgICAgLmZJbnB1dCgnYnV0dG9uJywgJ2llZF9w bHVnaW5fdHBfcmVmcmVzaCcsIGdUeHQoJ2llZF9wbHVnaW5fbG9hZCcpLCAnJywgJycsICcn LCAnJywgJycsICdpZWRfcGx1Z2luX3RwX3JlZnJlc2gnKTsKCiAgICAgICAgJHByZXNlbGVj dGVkID0gZG9fbGlzdChnZXRfcHJlZignaWVkX3BsdWdpbl9sYW5nX3NlbGVjdGVkJywgJycp KTsKCiAgICAgICAgJG9wX2xhbmdzW10gPSAnPHNlbGVjdCBuYW1lPSJpZWRfcGx1Z2luX3Rw X29wbGFuZ3MiIGlkPSJpZWRfcGx1Z2luX3RwX29wbGFuZ3MiIG11bHRpcGxlPSJtdWx0aXBs ZSI+PG9wdGlvbiB2YWx1ZT0iIj48L29wdGlvbj4nOwogICAgICAgIGZvcmVhY2ggKCRpZWRf YXZhaWxhYmxlX2xhbmdzIGFzICRsYW5nY29kZSA9PiAkYWxhbmcpIHsKICAgICAgICAgICAg JHNlbCA9IGluX2FycmF5KCRsYW5nY29kZSwgJHByZXNlbGVjdGVkKSA/ICcgc2VsZWN0ZWQ9 InNlbGVjdGVkIicgOiAnJzsKICAgICAgICAgICAgJG9wX2xhbmdzW10gPSAnPG9wdGlvbiB2 YWx1ZT0iJy4kbGFuZ2NvZGUuJyInLiRzZWwuJz4nLiRhbGFuZy4nPC9vcHRpb24+JzsKICAg ICAgICB9CiAgICAgICAgJG9wX2xhbmdzW10gPSAnPC9zZWxlY3Q+JzsKCiAgICAgICAgJHRw X3N0cmluZ3MgPSBhcnJheSgpOwogICAgICAgICR0cF9yb3dzID0gJHRoaXMtPnRleHRwYWNr X2dyYWIoJGRmbHRfbGFuZywgJHRwX3BmeCk7CiAgICAgICAgZm9yZWFjaCAoJHRwX3Jvd3Mg YXMgJHRwX3N0cmluZykgewogICAgICAgICAgICAkYXBzZWwgPSBzZWxlY3RJbnB1dCgnaWVk X3BsdWdpbl90cF9ldmVudCcsIGFycmF5KCdhZG1pbicgPT4gZ1R4dCgnYWRtaW4nKSwgJ3B1 YmxpYycgPT4gZ1R4dCgncHVibGljJyksICdjb21tb24nID0+IGdUeHQoJ2JvdGgnKSksICgk dHBfc3RyaW5nWydldmVudCddID09ICdwdWJsaWMnID8gJ3B1YmxpYycgOiAoJHRwX3N0cmlu Z1snZXZlbnQnXSA9PSAnY29tbW9uJyA/ICdjb21tb24nIDogJ2FkbWluJykpICk7CiAgICAg ICAgICAgICR0cF9zdHJpbmdzW10gPSAnPGxpPicuZklucHV0KCd0ZXh0JywgJ3RleHRwYWNr XycuJHRwX3N0cmluZ1snbmFtZSddLCAkdHBfc3RyaW5nWydkYXRhJ10pLicgJy4kYXBzZWwu JyA8bGFiZWw+Jy4kdHBfc3RyaW5nWyduYW1lJ10uJzwvbGFiZWw+Jy4nPC9saT4nOwogICAg ICAgIH0KCgogICAgICAgICRlcnJfcHJlZml4ID0gZ1R4dCgnaWVkX3BsdWdpbl9zeW50YXhf ZXJyJyk7CiAgICAgICAgJGNvZGVzYXZlX29rID0gZ1R4dCgnaWVkX3BsdWdpbl9jb2RlX3Nh dmVkJyk7CiAgICAgICAgJHBocGRvYyA9ICcnOwoKICAgICAgICAvLyBUT0RPCiAgICAgICAg JGNsYXNzRmluZGVyID0gJy9jbGFzc1tcc1xuXSsoXHcrKVtcc1xuXSpcez8oZnVuY3Rpb25b XHNcbl0rKFx3KylbXHNcbl0qXCguKlwpW1xzXG5dKlx7PykqLyc7CiAgICAgICAgJGZ1bmN0 aW9uRmluZGVyID0gJy9mdW5jdGlvbltcc1xuXSsoXHcrKVtcc1xuXSpcKC4qXClbXHNcbl0q XHs/Lyc7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoJGZ1bmN0aW9uRmluZGVyLCAkY29kZSAs ICRmdW5jdGlvbkFycmF5KTsKICAgICAgICAvLyBzZWxlY3RJbnB1dCByZXF1aXJlcyBrZXkg YW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1lCiAgICAvL2RtcCgkZnVuY3Rpb25BcnJheSk7CiAg ICAgICAgJGZuQXJyYXkgPSBhcnJheSgpOwogICAgLyoKICAgICAgICBmb3JlYWNoICgkZnVu Y3Rpb25BcnJheVsxXSBhcyAka2V5ID0+ICR2YWwpIHsKICAgICAgICAgICAgJGZuQXJyYXlb JHZhbF0gPSAkZnVuY3Rpb25BcnJheVsxXVska2V5XTsKICAgICAgICB9CiAgICAgICAgJHBo cGRvYyA9IHNlbGVjdElucHV0KCdpZWRfcGx1Z2luX3RvX3BocGRvYycsICRmbkFycmF5LCAn JywgZmFsc2UsICcnLCAnaWVkX3BsdWdpbl90b19waHBkb2MnKQogICAgICAgICAgICAuJzxh IGNsYXNzPSJuYXZsaW5rIiBuYW1lPSJpZWRfcGx1Z2luX2J0bl9waHBkb2MiIGlkPSJpZWRf cGx1Z2luX2J0bl9waHBkb2MiPicgLiBnVHh0KCdpZWRfcGx1Z2luX3BocF9kb2MnKSAuICc8 L2E+JzsKICAgICovCiAgICAgICAgJHBocGRvYyA9ICcnOwogICAgICAgICR0YWJDb3VudCA9 ICR0YWJBY3RpdmUgPSAwOwogICAgICAgICRzZWxlY3RlZFRhYiA9IGdldF9wcmVmKCdwYW5l XycgLiAkdGhpcy0+aWVkX3BjX2V2ZW50IC4gJ192aXNpYmxlJyk7CiAgICAgICAgJHRva2Vu U3VmZml4ID0gJHRoaXMtPmllZF9wY19ldmVudCAuIGZvcm1fdG9rZW4oKSAuIGdldF9wcmVm KCdibG9nX3VpZCcpOwogICAgICAgICRwYW5lbFNldCA9IGFycmF5KAogICAgICAgICAgICAw ID0+ICdtZXRhJywKICAgICAgICAgICAgMSA9PiAnY29kZScsCiAgICAgICAgICAgIDIgPT4g J3BhY2snLAogICAgICAgICAgICAzID0+ICdkb2NzJywKICAgICAgICAgICAgKTsKCiAgICAg ICAgJHN3aXRjaGVyTGlzdCA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCRwYW5lbFNl dCBhcyAkdGFiSWQgPT4gJHBhbmVsKSB7CiAgICAgICAgICAgICRzd2l0Y2hlckxpc3RbXSA9 ICc8bGk+PGEgaHJlZj0iI29wdGlvbnNfZ3JvdXBfJy4kcGFuZWwuJyIgZGF0YS10eHAtcGFu ZT0iJy4kcGFuZWwuJyIgZGF0YS10eHAtdG9rZW49IicgLiBtZDUoJHBhbmVsLiR0b2tlblN1 ZmZpeCkuJyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fJy4kcGFuZWwuJ19sZWdlbmQnKSAuICc8 L2E+PC9saT4nOwogICAgICAgICAgICBpZiAoJHBhbmVsID09PSAkc2VsZWN0ZWRUYWIpIHsK ICAgICAgICAgICAgICAgICR0YWJBY3RpdmUgPSAkdGFiQ291bnQ7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgICR0YWJDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgZWNobwogICAg ICAgICAgICBuLiBmb3JtKAogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InR4cC1sYXlv dXQiPicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxheW91dC0yY29s Ij4nCiAgICAgICAgICAgICAgICAubi4gaGVkKGdUeHQoJ2llZF9wbHVnaW5fZWRpdCcsIGFy cmF5KCd7bmFtZX0nID0+ICRuYW1lLCAne3ZlcnNpb259JyA9PiAkdmVyc2lvbikpLCAxLCBh cnJheSgnY2xhc3MnID0+ICd0eHAtaGVhZGluZycpKQogICAgICAgICAgICAgICAgLm4uICc8 L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMmNv bCI+JwogICAgICAgICAgICAgICAgLm4uIHNMaW5rKCR0aGlzLT5pZWRfcGNfZXZlbnQsICcn LCBnVHh0KCdpZWRfcGx1Z2luX2xpc3QnKSwgJ2llZF9wbHVnaW5fbGluaycpCiAgICAgICAg ICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0i dHhwLWxheW91dC00Y29sLWFsdCIgaWQ9ImllZF9lZGl0X3N3aXRjaGVyIiByb2xlPSJyZWdp b24iPicKICAgICAgICAgICAgICAgIC5uLiAnPHNlY3Rpb24gY2xhc3M9InR4cC1kZXRhaWxz IiBpZD0iYWxsX29wdGlvbnMiIGFyaWEtbGFiZWxsZWRieT0iYWxsX29wdGlvbnMtbGFiZWwi PicKICAgICAgICAgICAgICAgIC5uLiAnPGgzIGlkPSJhbGxfb3B0aW9ucy1sYWJlbCI+UGFu ZWxzPC9oMz4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgcm9sZT0iZ3JvdXAiPicKICAg ICAgICAgICAgICAgIC5uLiAnPHVsIGNsYXNzPSJzd2l0Y2hlci1saXN0Ij4nCiAgICAgICAg ICAgICAgICAuaW1wbG9kZShuLCAkc3dpdGNoZXJMaXN0KQogICAgICAgICAgICAgICAgLm4u ICc8L3VsPicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAgICAg Lm4uICc8L3NlY3Rpb24+JwogICAgICAgICAgICAgICAgLm4uICRzdWIKICAgICAgICAgICAg ICAgIC5uLiAnPHNlY3Rpb24gY2xhc3M9InR4cC1wcmVmcy1ncm91cCIgaWQ9Im9wdGlvbnNf Z3JvdXBfZGlzdCIgYXJpYS1sYWJlbGxlZGJ5PSJvcHRpb25zX2dyb3VwX2Rpc3QtbGFiZWwi PicKICAgICAgICAgICAgICAgIC5uLiBoZWQoZ1R4dCgnaWVkX3BsdWdpbl91dGlsc19sZWdl bmQnKSwgMiwgYXJyYXkoJ2lkJyA9PiAnb3B0aW9uc19ncm91cF9kaXN0LWxhYmVsJykpCiAg ICAgICAgICAgICAgICAubi4gZ3JhZihnVHh0KCdpZWRfcGx1Z2luX3V0aWxzX2xlZ2VuZF9l eHRyYScpLCBhcnJheSgnY2xhc3MnID0+ICd3YXJuaW5nJykpCiAgICAgICAgICAgICAgICAu bi4gKCgkZGlzdGJsb2NrKSA/ICc8ZGl2PicgLiAkZGlzdHJpYnV0aW9uIC4gJzwvZGl2Picg OiAnJykKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQg dHhwLWZvcm0tZmllbGQtdGV4dGFyZWEiPicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBj bGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbCBmb3I9ImllZF9wbHVnaW5fdHBf b3BsYW5ncyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fbGFuZ19jaG9vc2UnKSAuICc8L2xhYmVs PjwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmll bGQtdmFsdWUiPicgLiBpbXBsb2RlKG4sICRvcF9sYW5ncykgLiAnPC9kaXY+JwogICAgICAg ICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzx1bD4nCiAgICAg ICAgICAgICAgICAubi4gJzxsaT4nIC4gJHNsaW5rIC4gJzwvbGk+JwogICAgICAgICAgICAg ICAgLm4uICc8bGk+JyAuICRzemlwbGluayAuICc8L2xpPicKICAgICAgICAgICAgICAgIC5u LiAnPGxpPicgLiAkc3R4dGxpbmsgLiAnPC9saT4nCiAgICAgICAgICAgICAgICAubi4gJzxs aT4nIC4gJHNwaHBsaW5rIC4gJzwvbGk+JwogICAgICAgICAgICAgICAgLm4uICc8L3VsPicK ICAgICAgICAgICAgICAgIC5uLiAnPC9zZWN0aW9uPicKICAgICAgICAgICAgICAgIC5uLiAn PC9kaXY+JwoKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxheW91dC00 Y29sLTNzcGFuIiBpZD0iaWVkX2VkaXRfY29udGVudCIgcm9sZT0icmVnaW9uIj4nCiAgICAg ICAgICAgICAgICAubi4gJzxzZWN0aW9uIGNsYXNzPSJ0eHAtcHJlZnMtZ3JvdXAiIGlkPSJv cHRpb25zX2dyb3VwX21ldGEiIGFyaWEtbGFiZWxsZWRieT0ib3B0aW9uc19ncm91cF9tZXRh LWxhYmVsIj4nCiAgICAgICAgICAgICAgICAubi4gaGVkKGdUeHQoJ2llZF9wbHVnaW5fbWV0 YV9sZWdlbmQnKSwgMiwgYXJyYXkoJ2lkJyA9PiAnb3B0aW9uc19ncm91cF9tZXRhLWxhYmVs JykpCiAgICAgICAgICAgICAgICAubi4gJzxzcGFuIGNsYXNzPSJpZWRfcGx1Z2luX2VkaXRf dG9vbGJhciI+JyAuICRtZXRhc3ViIC4gJzwvc3Bhbj4nCiAgICAgICAgICAgICAgICAubi4g JzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAubi4gJzxk aXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJuZXduYW1lIj4n IC4gZ1R4dCgnbmFtZScpIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4u ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRuZXduYW1lIC4gJzwv ZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAgICAgLm4u ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAgLm4uICc8 ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0idmVyc2lvbiI+ JyAuIGdUeHQoJ3ZlcnNpb24nKSAuICc8L2xhYmVsPjwvZGl2PicKICAgICAgICAgICAgICAg IC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPicKICAgICAgICAgICAg ICAgIC5uLiAkdmVyc2lvbl93aWRnZXQKICAgICAgICAgICAgICAgIC5uLiAkcGx1Z3N0YXR1 cwogICAgICAgICAgICAgICAgLm4uICgoJGZpbGVuYW1lKSA/IHRhZyhzcC5zcC4nKCcuJGZp bGVuYW1lLicpJywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0KCdmaWxl bmFtZScsICRmaWxlbmFtZSkgOiAnJykKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYg Y2xhc3M9InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xh c3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJkZXNjcmlwdGlvbiI+JyAu IGdUeHQoJ2Rlc2NyaXB0aW9uJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAgICAgICAg ICAubi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4nIC4gJGRlc2NyaXB0 aW9uX3dpZGdldCAuICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAg ICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAgICAg ICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJl bCBmb3I9ImF1dGhvciI+JyAuIGdUeHQoJ2F1dGhvcicpIC4gJzwvbGFiZWw+PC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+ JyAuICRhdXRob3Jfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9k aXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+ JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJl bCI+PGxhYmVsIGZvcj0iYXV0aG9yX3VyaSI+JyAuIGdUeHQoJ3dlYnNpdGUnKSAuICc8L2xh YmVsPjwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0t ZmllbGQtdmFsdWUiPicgLiAkYXV0aG9yX3VyaV93aWRnZXQgLiAnPC9kaXY+JwogICAgICAg ICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9 InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4 cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJ0eXBlIj4nIC4gZ1R4dCgnaWVkX3Bs dWdpbl90eXBlJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxk aXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4nIC4gJHBsdWd0eXBlIC4gJzwvZGl2 PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8 ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2 IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsPicgLiBnVHh0KCdpZWRfcGx1 Z2luX2ZsYWdzJykgIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8 ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRmbGFnbGlzdCAuICc8L2Rp dj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAn PGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAgICAgICAgICAgICAgIC5uLiAnPGRp diBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbD4nIC4gZ1R4dCgnaWVkX3Bs dWdpbl9sb2FkX29yZGVyJykgLiBnVHh0KCdpZWRfcGx1Z2luX2xvYWRfb3JkZXJfaGVscCcp IC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0 eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRwbHVnb3JkZXIgLiAnPC9kaXY+JwogICAgICAg ICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvc2VjdGlvbj4n CgogICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhwLXByZWZzLWdyb3Vw IiBpZD0ib3B0aW9uc19ncm91cF9jb2RlIiBhcmlhLWxhYmVsbGVkYnk9Im9wdGlvbnNfZ3Jv dXBfY29kZS1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChnVHh0KCdpZWRfcGx1 Z2luX2NvZGVfbGVnZW5kJyksIDIsIGFycmF5KCdpZCcgPT4gJ29wdGlvbnNfZ3JvdXBfY29k ZS1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4uICc8c3BhbiBjbGFzcz0iaWVkX3BsdWdp bl9lZGl0X3Rvb2xiYXIiPicgLiAkbXNncG9wIC4gJHBocGRvYyAuIHNwIC4gJGNvZGVzdWIg LiAnPC9zcGFuPicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0t ZmllbGQgdHhwLWZvcm0tZmllbGQtdGV4dGFyZWEiPicKICAgICAgICAgICAgICAgIC5uLiAn PGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbCBmb3I9InBsdWdpbl9l ZGl0b3IiPlBIUDwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNs YXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRjb2RlYmxvY2sgLiAnPC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvc2Vj dGlvbj4nCgogICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhwLXByZWZz LWdyb3VwIiBpZD0ib3B0aW9uc19ncm91cF9wYWNrIiBhcmlhLWxhYmVsbGVkYnk9Im9wdGlv bnNfZ3JvdXBfcGFjay1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChnVHh0KCdp ZWRfcGx1Z2luX3BhY2tfbGVnZW5kJyksIDIsIGFycmF5KCdpZCcgPT4gJ29wdGlvbnNfZ3Jv dXBfcGFjay1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAt Zm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9y bS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0iaWVkX3BsdWdpbl90cF9wcmVmaXgiPicgLiBn VHh0KCdpZWRfcGx1Z2luX3RwX3ByZWZpeCcpIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAg ICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JwogICAg ICAgICAgICAgICAgLm4uIGZJbnB1dCgndGV4dCcsICdpZWRfcGx1Z2luX3RwX3ByZWZpeCcs ICR0cF9wZngsICcnLCAnJywgJycsICcnLCAnJywgJ2llZF9wbHVnaW5fdHBfcHJlZml4JykK ICAgICAgICAgICAgICAgIC5uLiAkbGFuZ3NlbAogICAgICAgICAgICAgICAgLm4uIGZJbnB1 dCgnaGlkZGVuJywgJ2llZF9wbHVnaW5fdHBfbGFuZ19kZmx0JywgJGRmbHRfbGFuZywgJycs ICcnLCAnJywgJycsICcnLCAnaWVkX3BsdWdpbl90cF9sYW5nX2RmbHQnKQogICAgICAgICAg ICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAgICAg ICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAgICAgICAg ICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbD4n IC4gZ1R4dCgnaWVkX3BsdWdpbl90cF9wb3B1bGF0ZScpICAuICc8L2xhYmVsPjwvZGl2PicK ICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUi PicKICAgICAgICAgICAgICAgIC5uLiBmSW5wdXQoJ3RleHQnLCAnaWVkX3BsdWdpbl90cF9w b3B1bGF0ZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICdpZWRfcGx1Z2luX3RwX3BvcHVs YXRlJykKICAgICAgICAgICAgICAgIC5uLiAnPGJ1dHRvbiBpZD0iaWVkX3BsdWdpbl90cF9s b2FkIj4nIC4gZ1R4dCgnZ28nKSAuICc8L2J1dHRvbj4nCiAgICAgICAgICAgICAgICAubi4g JzxzcGFuIGlkPSJpZWRfcGx1Z2luX3RwX2xvYWRfY291bnQiPjwvc3Bhbj4nCiAgICAgICAg ICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAg ICAgICAgICAgICAgLm4uICc8YSBocmVmPSIjIiBpZD0iaWVkX3BsdWdpbl9hZGRfc3RyaW5n IiBjbGFzcz0idHhwLWJ1dHRvbiI+KzwvYT4nCiAgICAgICAgICAgICAgICAubi4gJzx1bD4n CiAgICAgICAgICAgICAgICAubi4gaW1wbG9kZShuLCAkdHBfc3RyaW5ncykKICAgICAgICAg ICAgICAgIC5uLiAnPC91bD4nCiAgICAgICAgICAgICAgICAubi4gJzwvc2VjdGlvbj4nCgog ICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhwLXByZWZzLWdyb3VwIiBp ZD0ib3B0aW9uc19ncm91cF9kb2NzIiBhcmlhLWxhYmVsbGVkYnk9Im9wdGlvbnNfZ3JvdXBf ZG9jcy1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChnVHh0KCdpZWRfcGx1Z2lu X2RvY3NfbGVnZW5kJykgLiBuIC4gJHZoZWxwbGlua2Z1bGwsIDIsIGFycmF5KCdpZCcgPT4g J29wdGlvbnNfZ3JvdXBfZG9jcy1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4uICc8ZGl2 IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCB0eHAtZm9ybS1maWVsZC10ZXh0YXJlYSI+JwogICAg ICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxh YmVsIGZvcj0icGx1Z2luX2hlbHAiPicgLiBnVHh0KCd0ZXh0JykgLiAnPC9sYWJlbD48L2Rp dj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZh bHVlIj4nIC4gJGhlbHBfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAn PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICgoJHN0eWxlYmxvY2spCiAgICAgICAgICAg ICAgICAgICAgICAgID8gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIHR4cC1mb3JtLWZp ZWxkLXRleHRhcmVhIj4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICc8ZGl2IGNs YXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0icGx1Z2luX2hlbHBfY3Nz Ij4nIC4gZ1R4dCgnY3NzJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRj c3Nfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJzwv ZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgOiAnJykKICAgICAgICAgICAgICAgIC5u LiAnPC9zZWN0aW9uPicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAg ICAgICAgLm4uIHNJbnB1dCgnc2F2ZScpCiAgICAgICAgICAgICAgICAubi4gZUlucHV0KCR0 aGlzLT5pZWRfcGNfZXZlbnQpCiAgICAgICAgICAgICAgICAubi4gaElucHV0KCduYW1lJywk bmFtZSkKICAgICAgICAgICAgLCAnJywgJycsICdwb3N0JywgJ2llZC1lZGl0LWZvcm0nKS4K ICAgICAgICAgICAgc2NyaXB0X2pzKDw8PEVPSlMKdmFyIHNlbGVjdGVkVGFiID0gJ3skdGFi QWN0aXZlfSc7CnZhciBpZWRQbHVnaW5Hcm91cCA9ICQoJy5pZWQtZWRpdC1mb3JtJyk7CnZh ciBpZWRQbHVnaW5UYWJzID0gaWVkUGx1Z2luR3JvdXAuZmluZCgnLnN3aXRjaGVyLWxpc3Qg bGknKTsKCmllZFBsdWdpbkdyb3VwLnRhYnMoe2FjdGl2ZTogc2VsZWN0ZWRUYWJ9KS5yZW1v dmVDbGFzcygndWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwnKS5h ZGRDbGFzcygndWktdGFicy12ZXJ0aWNhbCcpOwppZWRQbHVnaW5Hcm91cC5maW5kKCcuc3dp dGNoZXItbGlzdCcpLnJlbW92ZUNsYXNzKCd1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNs ZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCcpOwppZWRQbHVnaW5UYWJz LnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AnKTsKaWVkUGx1 Z2luR3JvdXAuZmluZCgnLnR4cC1wcmVmcy1ncm91cCcpLnJlbW92ZUNsYXNzKCd1aS13aWRn ZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tJyk7CgppZWRQbHVnaW5UYWJzLm9uKCdjbGlj aycsICdhJywgZnVuY3Rpb24oZXYpIHsKICAgIHZhciBtZSA9ICQodGhpcyk7CiAgICBzZW5k QXN5bmNFdmVudCh7CiAgICAgICAgICAgIGV2ZW50ICAgOiAncGFuZScsCiAgICAgICAgICAg IHN0ZXAgICAgOiAndGFiVmlzaWJsZScsCiAgICAgICAgICAgIHBhbmUgICAgOiBtZS5kYXRh KCd0eHAtcGFuZScpLAogICAgICAgICAgICBvcmlnaW4gIDogdGV4dHBhdHRlcm4uZXZlbnQs CiAgICAgICAgICAgIHRva2VuICAgOiBtZS5kYXRhKCd0eHAtdG9rZW4nKQogICAgICAgIH0p Owp9KTsKCnZhciBpZWRfcGx1Z2luX3RwX3RvdGFsID0gMDsKCmpRdWVyeS5mbi5zZWxlY3RS YW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiB0aGlzLmVhY2goZnVu Y3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UpIHsKICAgICAg ICAgICAgdGhpcy5mb2N1cygpOwogICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdl KHN0YXJ0LCBlbmQpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVUZXh0UmFuZ2Up IHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVUZXh0UmFuZ2UoKTsKICAg ICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgIHJhbmdlLm1vdmVF bmQoJ2NoYXJhY3RlcicsIGVuZCk7CiAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hh cmFjdGVyJywgc3RhcnQpOwogICAgICAgICAgICByYW5nZS5zZWxlY3QoKTsKICAgICAgICB9 CiAgICB9KTsKfTsKCkFycmF5LnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbigpIHsKICAg IHZhciByID0gbmV3IEFycmF5KCk7CiAgICBvOmZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5s ZW5ndGg7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IgKHZhciB4ID0gMCwgeSA9IHIubGVu Z3RoOyB4IDwgeTsgeCsrKSB7CiAgICAgICAgICAgIGlmIChyW3hdPT10aGlzW2ldKSB7CiAg ICAgICAgICAgICAgICBjb250aW51ZSBvOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICAgIHJbci5sZW5ndGhdID0gdGhpc1tpXTsKICAgIH0KCiAgICByZXR1cm4gcjsKfTsKCmZ1 bmN0aW9uIGllZF9nb1RvTGluZSgpCnsKICAgIHZhciBsaW5lID0gcGFyc2VJbnQoalF1ZXJ5 KCcjaWVkX3BsdWdpbl9qdW1wVG9MaW5lJykudmFsKCkpOwogICAgdmFyIGllZF9lZCA9IGpR dWVyeSgnI3BsdWdpbl9lZGl0b3InKTsKICAgIHZhciBpZWRfZWRkID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3BsdWdpbl9lZGl0b3InKTsgLy8gRHVubm8gaG93IHRvIGNvbnZlcnQg YSBqUXVlcnkgb2JqIGJhY2sgdG8gRE9NCiAgICB2YXIgbGluZXMgPSBpZWRfZWQudmFsKCku c3BsaXQoJ1xcbicpOwogICAgdmFyIG51bWNoYXJzID0gMDsKICAgIHZhciBjb3VudCA9IDA7 CiAgICB2YXIgZmluZHN0ciA9ICcnOwogICAgalF1ZXJ5LmVhY2gobGluZXMsIGZ1bmN0aW9u ICgpIHsKICAgICAgICBjb3VudCsrOwogICAgICAgIGlmIChjb3VudCA+PSBsaW5lKSB7CiAg ICAgICAgICAgIGZpbmRzdHIgPSB0aGlzOwoKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgICAgbnVtY2hhcnMgKz0gKHRoaXMubGVuZ3RoKSsyOyAvLyBEb24n dCBhc2suICsyIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGxpbmUgZW5kaW5ncyBJIHRoaW5r CiAgICB9KTsKCiAgICAvLyBGaW5kIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0cmluZyB3 ZSBmb3VuZC4gU3RhcnQgY291bnRpbmcgZnJvbSB0aGUgbGluZSBiZWZvcmUuCiAgICAvLyBU aG9zZSBwZXNreSBsaW5lIGVuZGluZ3MgY29tZSBpbnRvIHBsYXkgYWdhaW4gc28gd2UgbmVl ZCB0byBzdWJ0cmFjdCB0aGUgbnVtYmVyCiAgICAvLyBvZiBsaW5lcyBmb3VuZCBmcm9tIHRo ZSBzdGFydCBjaGFyYWN0ZXIgcG9zaXRpb24gKnNocnVnKgogICAgc3RhcnQgPSBpZWRfZWQu dmFsKCkuaW5kZXhPZihmaW5kc3RyLCBudW1jaGFycy1jb3VudCk7CiAgICBzdGFydCA9IChm aW5kc3RyID09ICcnKSA/IHN0YXJ0KzEgOiBzdGFydDsKICAgIGVuZCA9IHN0YXJ0K2ZpbmRz dHIubGVuZ3RoOwogICAgaWVkX2VkLnNlbGVjdFJhbmdlKGVuZC0xLCBlbmQpOwoKICAgIGlm IChkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgIHZhciBpZWRfdGhlQ29kZSA9IGll ZF9lZC52YWwoKS5jaGFyQ29kZUF0KGVuZC0xKTsKICAgICAgICBpZiAod2luZG93LktleUV2 ZW50KSB7CiAgICAgICAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlF dmVudHMnKTsKICAgICAgICAgICAgZXYuaW5pdEtleUV2ZW50KCdrZXlwcmVzcycsIGZhbHNl LCB0cnVlLCB3aW5kb3csIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBpZWRfdGhl Q29kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGV2ID0gZG9jdW1lbnQu Y3JlYXRlRXZlbnQoJ1VJRXZlbnRzJyk7CiAgICAgICAgICAgIGV2LmluaXRVSUV2ZW50KCdr ZXlwcmVzcycsIGZhbHNlLCB0cnVlLCB3aW5kb3csIDApOwogICAgICAgICAgICBldi5rZXlD b2RlID0gaWVkX3RoZUNvZGU7CiAgICAgICAgfQogICAgICAgIGllZF9lZGQuZGlzcGF0Y2hF dmVudChldik7IC8vIGNhdXNlIHNjcm9sbCB0byBjdXJzb3IgYnkgcmVwbGFjaW5nIGxhc3Qg Y2hhciB3aXRoIGl0c2VsZgogICAgfQogICAgaWVkX2VkLnNlbGVjdFJhbmdlKHN0YXJ0LCBl bmQpOwoKICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBpZWRfcGx1Z2luX3RvZ2dsZV9t c2dwb3Aoc3RhdGUpCnsKICAgIHZhciBvYmogPSBqUXVlcnkoIiNpZWRfcGx1Z2luX21zZ3Bv cCIpOwogICAgaWYgKHN0YXRlICE9IHVuZGVmaW5lZCkgewogICAgICAgIGlmIChzdGF0ZSA9 PSAxKSB7CiAgICAgICAgICAgIG9iai5zaG93KCdub3JtYWwnKTsKICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICBvYmouaGlkZSgnbm9ybWFsJyk7CiAgICAgICAgfQogICAgfSBlbHNl IHsKICAgICAgICBvYmoudG9nZ2xlKCdub3JtYWwnKTsKICAgIH0KfQpmdW5jdGlvbiBpZWRf cGx1Z2luX3J0cmltKHN0ciwgY2hhcnMpCnsKICAgIGNoYXJzID0gY2hhcnMgfHwgIlxzIjsK CiAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgiWyIgKyBjaGFycyArICJdKyQi LCAiZyIpLCAiIik7Cn0KZnVuY3Rpb24gaWVkX3BsdWdpbl91cGRhdGVfdHBfY291bnQoKQp7 CiAgICB2YXIgdHBfY291bnQgPSB0cF93YXJucyA9IHRwX2hhc19jb250ZW50ID0gMDsKCiAg ICBqUXVlcnkoJyNvcHRpb25zX2dyb3VwX3BhY2sgdWwgbGknKS5lYWNoKGZ1bmN0aW9uKCkg ewogICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwogICAgICAgIHRwX2NvdW50Kys7 CiAgICAgICAgaWYgKHNlbGYuZmluZCgnaW5wdXQnKS52YWwoKSAhPT0gJycpIHsKICAgICAg ICAgICAgdHBfaGFzX2NvbnRlbnQrKzsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGYuZmlu ZCgnbGFiZWwnKS5oYXNDbGFzcygnd2FybmluZycpKSB7CiAgICAgICAgICAgIHRwX3dhcm5z Kys7CiAgICAgICAgfQogICAgfSk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2NvdW50 JykuZW1wdHkoKS5hcHBlbmQoJygnICt0cF9jb3VudCsgJyB8ICcgK3RwX2hhc19jb250ZW50 KyAnIHwgJyArdHBfd2FybnMrICcpJyk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2xh bmcgb3B0aW9uJykuZmluZCgnOnNlbGVjdGVkJykuZGF0YSgnc3RyaW5nLWNvdW50JywgdHBf aGFzX2NvbnRlbnQpOwoKICAgIC8vIFVwZGF0ZSB0aGUgZ2xvYmFsIHZhciBmb3IgdXNlIHdo ZW4gbG9hZGluZyBzdHJpbmdzCiAgICBpZWRfcGx1Z2luX3RwX3RvdGFsID0gdHBfY291bnQ7 Cn0KCmpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICBjdXJoID0gZ2V0Q29va2llKCdpZWRfcGx1 Z2luX2VkaGVpZ2h0Jyk7CiAgICBjdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1 cmg7CiAgICBqUXVlcnkoJ3RleHRhcmVhW21heGxlbmd0aF0nKS5rZXl1cChmdW5jdGlvbiAo KSB7CiAgICAgICAgdmFyIG1heCA9IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhs ZW5ndGgnKSk7CiAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGggPiBtYXgp IHsKICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLnZhbChqUXVlcnkodGhpcykudmFsKCkuc3Vi c3RyKDAsIGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSkpOwogICAgICAgIH0KICAg ICAgICBqUXVlcnkodGhpcykucGFyZW50KCkuZmluZCgnLmllZF9wbHVnaW5fY2hhcnNSZW1h aW4nKS5odG1sKCdDaGFycyByZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhpcykudmFs KCkubGVuZ3RoKSk7CiAgICB9KTsKICAgIGpRdWVyeSgndGV4dGFyZWFbbWF4bGVuZ3RoXScp LmtleXVwKCk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX2p1bXBUb0xpbmUnKS5rZXlkb3du KGZ1bmN0aW9uIChlKSB7CiAgICAgICAgdmFyIGNvZGUgPSAoZS5rZXlDb2RlID8gZS5rZXlD b2RlIDogZS53aGljaCk7CiAgICAgICAgaWYgKGNvZGUgPT0gMTMpIHsKICAgICAgICAgICAg ZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwog ICAgICAgICAgICBpZWRfZ29Ub0xpbmUoKTsKCgogICAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gU3RvcmUgdGhlIHByZWZpeAogICAgalF1ZXJ5 KCcjaWVkX3BsdWdpbl90cF9wcmVmaXgnKS5ibHVyKGZ1bmN0aW9uICgpIHsKICAgICAgICB2 YXIgcGZ4ID0galF1ZXJ5KHRoaXMpLnZhbCgpOwogICAgICAgIHNlbmRBc3luY0V2ZW50KAog ICAgICAgIHsKICAgICAgICAgICAgZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAogICAgICAg ICAgICBzdGVwOiAnc2V0X3RwX3ByZWZpeCcsCiAgICAgICAgICAgIHBsdWdpbjogJ3skbmFt ZX0nLAogICAgICAgICAgICBwcmVmaXg6IHBmeAogICAgICAgIH0pOwogICAgfSk7CgogICAg Ly8gRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgZ1R4dCgnc29tZXRoaW5nJykKICAgIGpRdWVy eSgnI3BsdWdpbl9lZGl0b3IsICNpZWRfcGx1Z2luX3RwX3ByZWZpeCcpLmJsdXIoZnVuY3Rp b24gKCkgewogICAgICAgIHZhciBpZWRfdHBfcGZ4ID0galF1ZXJ5KCcjaWVkX3BsdWdpbl90 cF9wcmVmaXgnKS52YWwoKTsKICAgICAgICBpZiAoaWVkX3RwX3BmeCAhPSAnJykgewogICAg ICAgICAgICB2YXIgaWVkX2d0eHRfcmUgPSAvZ1R4dFwoW1wnXCJdKFthLXpBLVowLTlfXSo/ KVtcIlwnXVssXCldL2dpOwogICAgICAgICAgICB2YXIgaWVkX3RwX3RhID0galF1ZXJ5KCcj cGx1Z2luX2VkaXRvcicpLnZhbCgpLnJlcGxhY2UoL1xzKi9nLCcnKTsgLy8gU3RyaXAgc3Bh Y2VzIHRvIG1ha2UgbG9va3VwcyBlYXNpZXIKICAgICAgICAgICAgdmFyIGllZF90cF9pdGVt cyA9IGllZF90cF90YS5tYXRjaChpZWRfZ3R4dF9yZSk7CgogICAgICAgICAgICAvLyBpZiBK UyBSZWdFeHAgY2FwdHVyZWQgcGFyZW50aGljYWwgZXhwcmVzc2lvbnMgaW4gZ2xvYmFsIHNl YXJjaGVzIG9yIGl0IHdhcyBlYXN5IHRvIGluamVjdCB2YXJpYWJsZXMKICAgICAgICAgICAg Ly8gaW50byBuZXcgUmVnRXhwKCkgY2FsbHMsIHRoaXMgbG9vcCBjb3VsZCBiZSBhdm9pZGVk CiAgICAgICAgICAgIHZhciBpZWRfdHBfdXNlZCA9IFtdOwogICAgICAgICAgICBmb3IgKHZh ciBpZHggPSAwOyBpZHggPCBpZWRfdHBfaXRlbXMubGVuZ3RoOyBpZHgrKykgewogICAgICAg ICAgICAgICAgdmFyIHBvcyA9IGllZF90cF9pdGVtc1tpZHhdLmxhc3RJbmRleE9mKCInIik7 CiAgICAgICAgICAgICAgICBwb3MgPSAocG9zID09IC0xKSA/IGllZF90cF9pdGVtc1tpZHhd Lmxhc3RJbmRleE9mKCciJykgOiBwb3M7CiAgICAgICAgICAgICAgICB0cHN0ciA9IGllZF90 cF9pdGVtc1tpZHhdLnN1YnN0cig2LHBvcy02KTsKICAgICAgICAgICAgICAgIGlmICh0cHN0 ci5pbmRleE9mKGllZF90cF9wZngpID09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZWRf dHBfdXNlZFtpZWRfdHBfdXNlZC5sZW5ndGhdID0gdHBzdHI7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGllZF90cF91c2VkID0gaWVkX3RwX3VzZWQu dW5pcXVlKCk7CgogICAgICAgICAgICAvLyBMaXN0IG9mIGFsbCBjdXJyZW50IHRleHRwYWNr IHN0cmluZ3MgaW4gdXNlIChhcyBvZiBsYXN0IFNhdmUgb3BlcmF0aW9uKQogICAgICAgICAg ICB2YXIgaWVkX3RwX2N1cnIgPSBbXTsKICAgICAgICAgICAgalF1ZXJ5KCcjb3B0aW9uc19n cm91cF9wYWNrIHVsIGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAg ICBpZWRfdHBfY3VycltpZWRfdHBfY3Vyci5sZW5ndGhdID0galF1ZXJ5KHRoaXMpLnRleHQo KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgY3VycmVu dCBhcnJheSBhbmQgY2hlY2sgaWYgZWFjaCBuYW1lIGlzIGluIHRoZSB1c2VkIHRleHRwYWNr IGl0ZW0gbGlzdC4KICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHJlbW92ZSBpdCBmcm9tIHRo ZSBmaW5hbCBsaXN0LgogICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBpZWRf dHBfY3Vyci5sZW5ndGg7IGlkeCsrKSB7CiAgICAgICAgICAgICAgICBpZiAoKHBvcyA9IGpR dWVyeS5pbkFycmF5KGllZF90cF9jdXJyW2lkeF0sIGllZF90cF91c2VkKSkgPiAtMSkgewog ICAgICAgICAgICAgICAgICAgIGllZF90cF91c2VkLnNwbGljZShwb3MsIDEpOwogICAgICAg ICAgICAgICAgICAgIGpRdWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFjayB1bCBsYWJlbDpjb250 YWlucygnK2llZF90cF9jdXJyW2lkeF0rJyknKS50b2dnbGVDbGFzcygnd2FybmluZycsIGZh bHNlKS5uZXh0KCIuZGVzdHJveSIpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICBzZXRjbGFzcyA9IDE7CiAgICAgICAgICAgICAgICAg ICAgalF1ZXJ5KCcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxhYmVsOmNvbnRhaW5zKCcraWVk X3RwX2N1cnJbaWR4XSsnKScpLnRvZ2dsZUNsYXNzKCd3YXJuaW5nJywgdHJ1ZSkubmV4dCgi LmRlc3Ryb3kiKS5yZW1vdmUoKS5lbmQoKS5hZnRlcignPGEgaHJlZj0iIyIgY2xhc3M9ImRl c3Ryb3kiPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2xvc2UiPkRlbGV0ZTwvc3Bh bj48L2E+Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg Ly8gRm9yIGVhY2ggcmVtYWluaW5nIGl0ZW0gdGhhdCBoYXMgYmVlbiB1c2VkLCBhZGQgYW4g aW5wdXQgYm94CiAgICAgICAgICAgIC8vIFRPRE86IGkxOG4gdGhlIHNlbGVjdCBvcHRpb25z CiAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGllZF90cF91c2VkLmxlbmd0 aDsgaWR4KyspIHsKICAgICAgICAgICAgICAgIGpRdWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFj ayB1bCcpLnByZXBlbmQoJzxsaT48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGV4dHBhY2tf JytpZWRfdHBfdXNlZFtpZHhdKyciIHZhbHVlPSIiIC8+IDxzZWxlY3QgbmFtZT0iaWVkX3Bs dWdpbl90cF9ldmVudCI+PG9wdGlvbiB2YWx1ZT0iYWRtaW4iPkFkbWluPC9vcHRpb24+PG9w dGlvbiB2YWx1ZT0icHVibGljIj5QdWJsaWM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjb21t b24iPkJvdGg8L29wdGlvbj48L3NlbGVjdD4gPGxhYmVsPicraWVkX3RwX3VzZWRbaWR4XSsn PC9sYWJlbD48L2xpPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGllZF9wbHVnaW5f dXBkYXRlX3RwX2NvdW50KCk7CiAgICAgICAgfQogICAgfSkuYmx1cigpOwoKICAgIC8vIEhh bmRsZSBhZGRpbmcgbmV3IHN0cmluZ3MgbWFudWFsbHkKICAgIGpRdWVyeSgnI2llZF9wbHVn aW5fYWRkX3N0cmluZycpLmNsaWNrKGZ1bmN0aW9uIChldikgewogICAgICAgIGpRdWVyeSgn I29wdGlvbnNfZ3JvdXBfcGFjayB1bCcpLmJlZm9yZSgnPGRpdiBpZD0iaWVkX3BsdWdpbl9u ZXdfY29udGFpbmVyIj48bGFiZWw+JytqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX3ByZWZpeCcp LnZhbCgpKydfPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImllZF9wbHVnaW5fdHBfbmV3bmFt ZSIgaWQ9ImllZF9wbHVnaW5fdHBfbmV3bmFtZSIgdmFsdWU9IiIgLz48L2xhYmVsPjwvZGl2 PicpOwogICAgICAgIGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfbmV3bmFtZScpLmZvY3VzKCk7 CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgIH0pOwogICAgalF1ZXJ5KGRvY3Vt ZW50KS5vbignYmx1cicsICcjaWVkX3BsdWdpbl90cF9uZXduYW1lJywgZnVuY3Rpb24gKCkg ewogICAgICAgIHZhciBuZXduYW1lID0gaWVkX3BsdWdpbl9ydHJpbShqUXVlcnkoJyNpZWRf cGx1Z2luX3RwX3ByZWZpeCcpLnZhbCgpKydfJytqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX25l d25hbWUnKS52YWwoKSwgJ18nKTsKICAgICAgICB2YXIgbmV3b2sgPSB0cnVlOwogICAgICAg IGpRdWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFjayB1bCBsaSBsYWJlbCcpLmVhY2goZnVuY3Rp b24gKCkgewogICAgICAgICAgICBpZiAoalF1ZXJ5KHRoaXMpLnRleHQoKSA9PSBuZXduYW1l KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX25ld25hbWUnKS5j c3MoJ2NvbG9yJywgJyNFMDAnKTsKICAgICAgICAgICAgICAgIG5ld29rID0gZmFsc2U7CiAg ICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyBUT0RPOiBpMThuIHNlbGVjdCBv cHRpb24gdGV4dAogICAgICAgIGlmIChuZXdvaykgewogICAgICAgICAgICBqUXVlcnkoJyNv cHRpb25zX2dyb3VwX3BhY2sgdWwnKS5wcmVwZW5kKCc8bGk+PGlucHV0IHR5cGU9InRleHQi IG5hbWU9InRleHRwYWNrXycrbmV3bmFtZSsnIiB2YWx1ZT0iIiAvPiA8c2VsZWN0IG5hbWU9 ImllZF9wbHVnaW5fdHBfZXZlbnQiPjxvcHRpb24gdmFsdWU9ImFkbWluIj5BZG1pbjwvb3B0 aW9uPjxvcHRpb24gdmFsdWU9InB1YmxpYyI+UHVibGljPC9vcHRpb24+PG9wdGlvbiB2YWx1 ZT0iY29tbW9uIj5Cb3RoPC9vcHRpb24+PC9zZWxlY3Q+IDxsYWJlbD4nK25ld25hbWUrJzwv bGFiZWw+PC9saT4nKTsKICAgICAgICAgICAgalF1ZXJ5KCcjaWVkX3BsdWdpbl9uZXdfY29u dGFpbmVyJykucmVtb3ZlKCk7CiAgICAgICAgICAgIGpRdWVyeSgnaW5wdXRbbmFtZT0idGV4 dHBhY2tfJytuZXduYW1lKyciXScpLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGllZF9w bHVnaW5fdXBkYXRlX3RwX2NvdW50KCk7CiAgICB9KTsKCiAgICAvLyBJbml0aWFsaXNlIHRo ZSBnZW5lcmljIEFKQVggZXJyb3IgaGFuZGxlcgogICAgalF1ZXJ5KCcuaWVkX2VkaXRGb3Jt JykuYWpheEVycm9yKGZ1bmN0aW9uIChldmVudCwgcmVxdWVzdCwgc2V0dGluZ3MpIHsKICAg ICAgICB2YXIgeGhyID0galF1ZXJ5KHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKCiAgICAgICAg Ly8gcGhwZG9jIGdlbmVyYXRpb24gYmFyZmVkCiAgICAgICAgaWYgKHNldHRpbmdzLmRhdGEu aW5kZXhPZignc3RlcD1pZWRfcGx1Z2luX2dlbmVyYXRlX3BocGRvYycpID4gLTEpIHsKICAg ICAgICAgICAgdmFyIG1zZ0NvbnRlbnQgPSBqUXVlcnkoIiNpZWRfcGx1Z2luX21zZ3BvcCAu aWVkX3BsdWdpbl9tc2dwb3BfY29udGVudCIpOwogICAgICAgICAgICBzdGF0dXMgPSB4aHIu ZmluZCgnaHR0cC1zdGF0dXMnKS5hdHRyKCd2YWx1ZScpCiAgICAgICAgICAgIGlmIChzdGF0 dXMgPT0gJzIwMCBPSycpIHsKICAgICAgICAgICAgICAgIG1zZ0NvbnRlbnQuYXBwZW5kKHho ci5maW5kKCdpZWRfcGx1Z2luX3BocGRvYycpLmF0dHIoJ3ZhbHVlJykpOwogICAgICAgICAg ICB9IGVsc2UgaWYgKHN0YXR1cyA9PSAnNTAxIE5vdCBJbXBsZW1lbnRlZCcpIHsKICAgICAg ICAgICAgICAgIG1zZ0NvbnRlbnQuYXBwZW5kKHhoci5maW5kKCdlcnJvcl9tc2cnKS5hdHRy KCd2YWx1ZScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZWRfcGx1Z2luX3RvZ2ds ZV9tc2dwb3AoJzEnKTsKICAgICAgICB9CgogICAgICAgIC8vIGNvZGUgc2F2ZSBiYXJmZWQK ICAgICAgICBpZiAoc2V0dGluZ3MuZGF0YS5pbmRleE9mKCdzdGVwPWllZF9wbHVnaW5fY29k ZV9zYXZlJykgPiAtMSkgewogICAgICAgICAgICB2YXIgbXNnID0geGhyLmZpbmQoJ2llZF9w bHVnaW5fbXNnJykuYXR0cigndmFsdWUnKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSB4aHIu ZmluZCgnaWVkX3BsdWdpbl9lcnJfbGluZScpLmF0dHIoJ3ZhbHVlJyk7CiAgICAgICAgICAg IGpRdWVyeSgnI2llZF9wbHVnaW5fanVtcFRvTGluZScpLnZhbChsaW5lKTsKICAgICAgICAg ICAgaWVkX2dvVG9MaW5lKCk7CiAgICAgICAgICAgIHZhciBjb2Rlb2JqID0galF1ZXJ5KCIj cGx1Z2luX2VkaXRvciIpOwogICAgICAgICAgICBjb2Rlb2JqLmNzcyh7J29wYWNpdHknOiAn Ljc1J30pOyAvLyBSZWR1Y2VkIG9wYWNpdHkgYXMgYSB2aXN1YWwgY3VlIHRoYXQgc29tZXRo aW5nJ3Mgd3JvbmcKICAgICAgICAgICAgZXZhbChtc2cpOyAvLyBibGV1cmdoIQogICAgICAg IH0KICAgIH0pOwoKICAgIC8vIEhhbmRsZSAneCcgYnV0dG9uCiAgICBqUXVlcnkoZG9jdW1l bnQpLm9uKCdjbGljaycsICcuZGVzdHJveScsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAg IHZhciBlbGVtID0galF1ZXJ5KHRoaXMpLnByZXYoJ2xhYmVsJyk7CiAgICAgICAgdmFyIHRw X2xibCA9IGVsZW0udGV4dCgpOwoKICAgICAgICBzZW5kQXN5bmNFdmVudCgKICAgICAgICB7 CiAgICAgICAgICAgIGV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwKICAgICAgICAgICAgc3Rl cDogJ3RleHRwYWNrX2RlbCcsCiAgICAgICAgICAgIGllZF90cF9sYmw6IHRwX2xibAogICAg ICAgIH0pOwoKICAgICAgICBlbGVtLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgIGV2ZW50 LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWVkX3BsdWdpbl91cGRhdGVfdHBfY291bnQo KTsKICAgIH0pOwoKICAgIC8vIFNhdmUgdGV4dHBhY2sgc3RyaW5nIHRvIGRhdGFiYXNlCiAg ICBmdW5jdGlvbiBpZWRfcGx1Z2luX3RwX3NhdmUoZXZlbnQpCiAgICB7CiAgICAgICAgdmFy IGVsZW0gPSBqUXVlcnkodGhpcyk7CiAgICAgICAgdmFyIGlzU2VsID0gZWxlbS5pcygnc2Vs ZWN0Jyk7CiAgICAgICAgdmFyIHRwX2xibCA9IGVsZW0ubmV4dEFsbCgnbGFiZWwnKS50ZXh0 KCk7CiAgICAgICAgdmFyIHRwX3N0ciA9IChpc1NlbCkgPyBlbGVtLnByZXZBbGwoJ2lucHV0 JykudmFsKCkgOiBlbGVtLnZhbCgpOwogICAgICAgIHZhciB0cF9ldiA9IChpc1NlbCkgPyBl bGVtLnZhbCgpIDogZWxlbS5uZXh0QWxsKCdzZWxlY3QnKS52YWwoKTsKICAgICAgICB2YXIg dHBfZXZ0ID0gKHRwX2V2PT0ncHVibGljJyB8fCB0cF9ldj09J2NvbW1vbicpID8gdHBfZXYg OiBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX3ByZWZpeCcpLnZhbCgpOwogICAgICAgIHZhciB0 cF9sbmcgPSBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2xhbmcnKS52YWwoKTsKICAgICAgICB2 YXIgdHBfb3duID0galF1ZXJ5KCcjaWVkX3BsdWdpbl90cF9wcmVmaXgnKS52YWwoKTsKCiAg ICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAgICAgICAgICBldmVudDogdGV4 dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICd0ZXh0cGFja19zYXZlJywKICAg ICAgICAgICAgaWVkX3RwX2V2dDogdHBfZXZ0LAogICAgICAgICAgICBpZWRfdHBfbGJsOiB0 cF9sYmwsCiAgICAgICAgICAgIGllZF90cF9sbmc6IHRwX2xuZywKICAgICAgICAgICAgaWVk X3RwX3N0cjogdHBfc3RyLAogICAgICAgICAgICBpZWRfdHBfb3duOiB0cF9vd24KICAgICAg ICB9KTsKICAgIH0KCiAgICAvLyBIYW5kbGUgc2F2aW5nIHRleHRwYWNrIHN0cmluZwogICAg alF1ZXJ5KGRvY3VtZW50KS5vbignYmx1cicsICcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxp IGlucHV0JywgaWVkX3BsdWdpbl90cF9zYXZlKTsKICAgIGpRdWVyeShkb2N1bWVudCkub24o J2NoYW5nZScsICcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpIHNlbGVjdCcsIGllZF9wbHVn aW5fdHBfc2F2ZSk7CgogICAgLy8gSGFuZGxlIGxhbmd1YWdlIGNoYW5nZS4KICAgIGpRdWVy eSgiI2llZF9wbHVnaW5fdHBfbGFuZyIpLmNoYW5nZShmdW5jdGlvbiAoZXZlbnQpIHsKICAg ICAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2xvYWRfY291bnQnKS5lbXB0eSgpLnNob3co KTsKCiAgICAgICAgdmFyIHRwX2xuZyA9IGpRdWVyeSh0aGlzKS52YWwoKTsKICAgICAgICB2 YXIgdHBfZGZsdCA9IGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfbGFuZ19kZmx0JykudmFsKCk7 CiAgICAgICAgdmFyIHNlbCA9ICcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpJzsKICAgICAg ICB2YXIgbnVtU3RyaW5ncyA9IHNlbC5sZW5ndGg7CiAgICAgICAgdmFyIG51bUZldGNoZWQg PSAwOwoKICAgICAgICBqUXVlcnkoc2VsKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAg ICAgdmFyIG9iaiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgdmFyIHRwX2xibCA9IG9i ai5maW5kKCdsYWJlbCcpLnRleHQoKTsKICAgICAgICAgICAgdmFyIHRwX2Rlc3QgPSBvYmou ZmluZCgnaW5wdXQnKTsKCiAgICAgICAgICAgIHNlbmRBc3luY0V2ZW50KAogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAg ICAgICAgICBzdGVwOiAndGV4dHBhY2tfZ2V0JywKICAgICAgICAgICAgICAgIGllZF90cF9s Ymw6IHRwX2xibCwKICAgICAgICAgICAgICAgIGllZF90cF9sbmc6IHRwX2xuZywKICAgICAg ICAgICAgICAgIGllZF90cF9kZmx0OiB0cF9kZmx0CiAgICAgICAgICAgIH0sIGZ1bmN0aW9u IChkYXRhKSB7CiAgICAgICAgICAgICAgICBudW1GZXRjaGVkKys7CiAgICAgICAgICAgICAg ICB2YXIgdGhlVmFsID0gZGF0YS5pZWRfcGx1Z2luX3RwX3N0cmluZzsKICAgICAgICAgICAg ICAgIHZhciB4bDhzdHIgPSBkYXRhLmllZF9wbHVnaW5fdHBfZGZsdDsKCiAgICAgICAgICAg ICAgICB0cF9kZXN0LnZhbCh0aGVWYWwpOwoKICAgICAgICAgICAgICAgIGlmICh4bDhzdHIg PT0gdW5kZWZpbmVkIHx8IHhsOHN0ciA9PSAnJykgewogICAgICAgICAgICAgICAgICAgIG9i ai5yZW1vdmVBdHRyKCd0aXRsZScpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICBvYmouYXR0cigndGl0bGUnLCB4bDhzdHIpOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgaWYgKG51bUZldGNoZWQgPCBpZWRfcGx1Z2luX3RwX3Rv dGFsKSB7CiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjaWVkX3BsdWdpbl90cF9sb2Fk X2NvdW50JykudGV4dChudW1GZXRjaGVkICsgJy8nICsgaWVkX3BsdWdpbl90cF90b3RhbCk7 CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgn I2llZF9wbHVnaW5fdHBfbG9hZF9jb3VudCcpLnRleHQoJ09LJykuaGlkZSgnc2xvdycpOwog ICAgICAgICAgICAgICAgICAgIGllZF9wbHVnaW5fdXBkYXRlX3RwX2NvdW50KCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdqc29uJyk7CiAgICAg ICAgfSk7CiAgICB9KTsKCiAgICAvLyBDdXJyZW50IGxhbmd1YWdlIHJlZnJlc2guCiAgICBq UXVlcnkoJyNpZWRfcGx1Z2luX3RwX3JlZnJlc2gnKS5jbGljayhmdW5jdGlvbiAoKSB7CiAg ICAgICAgLy8gVHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50CiAgICAgICAgalF1ZXJ5KCIjaWVk X3BsdWdpbl90cF9sYW5nIikuY2hhbmdlKCk7CiAgICB9KTsKCiAgICAvLyBMb2FkIHRleHRw YWNrIHN0cmluZ3MgZnJvbSBwbHVnaW4ncyBjdXN0b20gZ1R4dCgpCiAgICBqUXVlcnkoIiNp ZWRfcGx1Z2luX3RwX2xvYWQiKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICB2 YXIgaWVkX2ZuID0galF1ZXJ5KCIjaWVkX3BsdWdpbl90cF9wb3B1bGF0ZSIpLnZhbCgpOwoK CiAgICAgICAgalF1ZXJ5KCcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpJykuZWFjaChmdW5j dGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBvYmogPSBqUXVlcnkodGhpcyk7CiAgICAgICAg ICAgIHZhciB0cF9sYmwgPSBvYmouZmluZCgnbGFiZWwnKS50ZXh0KCk7CiAgICAgICAgICAg IHZhciB0cF9kZXN0ID0gb2JqLmZpbmQoJ2lucHV0Jyk7CgogICAgICAgICAgICBzZW5kQXN5 bmNFdmVudCgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZXZlbnQ6IHRleHRwYXR0 ZXJuLmV2ZW50LAogICAgICAgICAgICAgICAgc3RlcDogJ3RleHRwYWNrX2xvYWQnLAogICAg ICAgICAgICAgICAgaWVkX3RwX2ZuOiBpZWRfZm4sCiAgICAgICAgICAgICAgICBpZWRfdHBf bGJsOiB0cF9sYmwKICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAg ICAgICAgIC8vIFBhc3RlIHRoZSByZXR1cm5lZCBzdHJpbmcgaW50byB0aGUgaW5wdXQgYm94 IGFuZCBzYXZlIGl0IGJ5IGludm9raW5nIGJsdXIoKQogICAgICAgICAgICAgICAgdHBfZGVz dC52YWwoZGF0YS5pZWRfcGx1Z2luX3RwX3N0cmluZykuYmx1cigpOwogICAgICAgICAgICB9 LAogICAgICAgICAgICAnanNvbicpOwogICAgICAgIH0pOwogICAgICAgIGV2ZW50LnByZXZl bnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICAvLyBIYW5kbGUgc2F2aW5nIG1ldGFkYXRhLgog ICAgalF1ZXJ5KCIjaWVkX3BsdWdpbl9tZXRhX3NhdmUiKS5jbGljayhmdW5jdGlvbihldmVu dCkgewogICAgICAgIHZhciBtc2dhcmVhID0galF1ZXJ5KCIjaWVkX3BsdWdpbl9tZXNzYWdl cyIpOwogICAgICAgIG1zZ2FyZWEuZW1wdHkoKTsKICAgICAgICB2YXIgbWV0YW9iaiA9IGpR dWVyeSgiI29wdGlvbnNfZ3JvdXBfbWV0YSIpOwogICAgICAgIHZhciBkYXRhYmxvY2sgPSB7 fTsKCiAgICAgICAgalF1ZXJ5KG1ldGFvYmopLmZpbmQoJ2lucHV0W3R5cGU9InRleHQiXSwg c2VsZWN0JykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG9iaiA9IGpRdWVy eSh0aGlzKTsKICAgICAgICAgICAgdmFyIG9iamlkID0gb2JqLmF0dHIoJ25hbWUnKTsKICAg ICAgICAgICAgZGF0YWJsb2NrW29iamlkXSA9IG9iai52YWwoKTsKICAgICAgICB9KTsKCiAg ICAgICAgalF1ZXJ5KG1ldGFvYmopLmZpbmQoJ2lucHV0W3R5cGU9InJhZGlvIl0sIGlucHV0 W3R5cGU9ImNoZWNrYm94Il0nKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIg b2JqID0galF1ZXJ5KHRoaXMpOwogICAgICAgICAgICB2YXIgb2JqaWQgPSBvYmouYXR0cign bmFtZScpLnJlcGxhY2UoL1xbXF0vLCAnJyk7CiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0 YWJsb2NrW29iamlkXSA9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgZGF0YWJs b2NrW29iamlkXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvYmoucHJv cCgnY2hlY2tlZCcpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBkYXRhYmxvY2tbb2Jq aWRdLnB1c2gob2JqLnZhbCgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAg ICBqUXVlcnkobWV0YW9iaikuZmluZCgnc2VsZWN0JykuZWFjaChmdW5jdGlvbigpIHsKICAg ICAgICAgICAgdmFyIG9iaiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgdmFyIG9iamlk ID0gb2JqLmF0dHIoJ25hbWUnKTsKICAgICAgICAgICAgaWYgKG9iai5wcm9wKCdzZWxlY3Rl ZCcpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBkYXRhYmxvY2tbb2JqaWRdID0gb2Jq LnZhbCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHBsdWdpbiA9 ICd7JG5hbWV9JzsKCiAgICAgICAgbWV0YW9iai5jc3MoJ29wYWNpdHknLCAnMC40Jyk7CiAg ICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAgICAgICAgICBldmVudDogdGV4 dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICdtZXRhX3NhdmUnLAogICAgICAg ICAgICBwbHVnaW46IHBsdWdpbiwKICAgICAgICAgICAgZGF0YTogZGF0YWJsb2NrCiAgICAg ICAgfSwgZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICBtZXRhb2JqLmNzcyh7J29wYWNp dHknOiAnMSd9KTsKICAgICAgICAgICAgdmFyIG1zZyA9IGpRdWVyeShkYXRhKS5maW5kKCdp ZWRfcGx1Z2luX21zZycpLmF0dHIoJ3ZhbHVlJyk7CiAgICAgICAgICAgIGV2YWwobXNnKTsg Ly8geXVrIQogICAgICAgIH0pOwoKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwog ICAgfSk7CgogICAgLy8gSGFuZGxlIHNhdmluZyBjb2RlLgogICAgalF1ZXJ5KCIjaWVkX3Bs dWdpbl9jb2RlX3NhdmUiKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICB2YXIg bXNnYXJlYSA9IGpRdWVyeSgiI2llZF9wbHVnaW5fbWVzc2FnZXMiKTsKICAgICAgICBtc2dh cmVhLmVtcHR5KCk7CiAgICAgICAgdmFyIGNvZGVvYmogPSBqUXVlcnkoIiNwbHVnaW5fZWRp dG9yIik7CiAgICAgICAgdmFyIGNvZGVibG9jayA9IGNvZGVvYmoudmFsKCk7CiAgICAgICAg dmFyIHBsdWdpbiA9ICd7JG5hbWV9JzsKCiAgICAgICAgY29kZW9iai5jc3MoJ29wYWNpdHkn LCAnMC40Jyk7CiAgICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAgICAgICAg ICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICdjb2RlX3Nh dmUnLAogICAgICAgICAgICBwbHVnaW46IHBsdWdpbiwKICAgICAgICAgICAgY29kZWJsb2Nr OiBjb2RlYmxvY2sKICAgICAgICB9LCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICBj b2Rlb2JqLmNzcyh7J29wYWNpdHknOiAnMSd9KTsKICAgICAgICAgICAgdmFyIG1zZyA9IGpR dWVyeShkYXRhKS5maW5kKCdpZWRfcGx1Z2luX21zZycpLmF0dHIoJ3ZhbHVlJyk7CiAgICAg ICAgICAgIGV2YWwobXNnKTsgLy8geXVrIQogICAgICAgIH0pOwoKICAgICAgICBldmVudC5w cmV2ZW50RGVmYXVsdCgpOwogICAgfSk7CgogICAgLy8gSGFuZGxlIGdlbmVyYXRpbmcgcGhw ZG9jCiAgICBqUXVlcnkoIiNpZWRfcGx1Z2luX2J0bl9waHBkb2MiKS5jbGljayhmdW5jdGlv biAoZXZlbnQpIHsKICAgICAgICB2YXIgbXNnYXJlYSA9IGpRdWVyeSgiI2llZF9wbHVnaW5f bXNncG9wIik7CiAgICAgICAgdmFyIG1zZ0NvbnRlbnQgPSBqUXVlcnkoIiNpZWRfcGx1Z2lu X21zZ3BvcCAuaWVkX3BsdWdpbl9tc2dwb3BfY29udGVudCIpOwogICAgICAgIG1zZ0NvbnRl bnQuZW1wdHkoKTsKICAgICAgICB2YXIgZm5vYmogPSBqUXVlcnkoIiNpZWRfcGx1Z2luX3Rv X3BocGRvYyIpOwogICAgICAgIHZhciBmbiA9IGZub2JqLnZhbCgpOwogICAgICAgIHZhciBw bHVnaW4gPSAneyRuYW1lfSc7CgogICAgICAgIHNlbmRBc3luY0V2ZW50KAogICAgICAgIHsK ICAgICAgICAgICAgZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAogICAgICAgICAgICBzdGVw OiAnZ2VuZXJhdGVfcGhwZG9jJywKICAgICAgICAgICAgcGx1Z2luOiBwbHVnaW4sCiAgICAg ICAgICAgIGZuOiBmbgogICAgICAgIH0sIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAg IG1zZ0NvbnRlbnQuYXBwZW5kKGpRdWVyeShkYXRhKS5maW5kKCdpZWRfcGx1Z2luX3BocGRv YycpLmF0dHIoJ3ZhbHVlJykpOwogICAgICAgICAgICBpZWRfcGx1Z2luX3RvZ2dsZV9tc2dw b3AoJzEnKTsKICAgICAgICB9KTsKCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK ICAgIH0pOwoKICAgIGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfb3BsYW5ncycpLmNoYW5nZShm dW5jdGlvbiAoKSB7CiAgICAgICAgc2VsID0galF1ZXJ5KCcjaWVkX3BsdWdpbl90cF9vcGxh bmdzIG9wdGlvbjpzZWxlY3RlZCcpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnZh bHVlIH0pLmdldCgpLmpvaW4oJywgJyk7CiAgICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAg ICAgewogICAgICAgICAgICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAg IHN0ZXA6ICdsYW5nX3NldCcsCiAgICAgICAgICAgIGllZF90cF9sYW5nc2VsOiBzZWwKICAg ICAgICB9KTsKICAgIH0pOwoKfSk7CkVPSlMKICAgICAgICAgICAgKQogICAgICAgIC5uLiAn PC9kaXY+JzsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgdGhlIHBsdWdpbiB0byB0aGUg REIgb3IgZmlsZXN5c3RlbS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQog ICAgewogICAgICAgIGV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3bmFt ZScsJ2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9uJywn ZGVzY3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ2xvYWRfb3JkZXIn LCdyZW5hbWVfZmlsZScsJ3Jlc3RvcmVfcG9pbnQnLCdpZWRfcGx1Z2luX3RwX3ByZWZpeCcp KSkpOwogICAgICAgICRmbGFncyA9IGdwcygnZmxhZ3MnKTsKCiAgICAgICAgbGlzdCAoJHN0 YXJ0X2NzcywgJGVuZF9jc3MpID0gJHRoaXMtPm1ha2VfbWFya2VycygiQ1NTIiwgJHRoaXMt PmllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICR0aGlzLT5pZWRfcGx1Z2luX2ds b2JhbHNbJ2Nzc19lbmQnXSk7CiAgICAgICAgJGV4dHJhTXNnID0gJG5ld2ZpbGVuYW1lID0g JG1zZzEgPSAkbXNnMiA9ICcnOwogICAgICAgICRuZXduYW1lID0gdHJpbSgkbmV3bmFtZSk7 CiAgICAgICAgaWYgKCRmbGFncykgewogICAgICAgICAgICAkZmxhZ291dCA9IDA7CiAgICAg ICAgICAgIGZvcmVhY2ggKCRmbGFncyBhcyAkZmxhZykgewogICAgICAgICAgICAgICAgJGZs YWdvdXQgfD0gJGZsYWc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZsYWdzID0gJGZs YWdvdXQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG5ld25hbWUpKSB7CiAgICAg ICAgICAgICRtc2cxID0gZ1R4dCgnaWVkX3BsdWdpbl9uYW1lX2ZpcnN0Jyk7CiAgICAgICAg ICAgICRtc2dUeXBlID0gRV9FUlJPUjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBp ZiAoZW1wdHkoJGZpbGVuYW1lKSkgewogICAgICAgICAgICAgICAgJGhvdXQgPSBhcnJheSgp OwogICAgICAgICAgICAgICAgJGhvdXRbMF0gPSAkaGVscDsKICAgICAgICAgICAgICAgIGlm ICgkY3NzKSB7ICRob3V0WzFdID0gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOyB9 CiAgICAgICAgICAgICAgICBzYWZlX3VwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAndHhw X3BsdWdpbicsCiAgICAgICAgICAgICAgICAgICAgIm5hbWU9JyIuJG5ld25hbWUuIicsCiAg ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwKICAgICAg ICAgICAgICAgICAgICB0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsCiAgICAgICAgICAgICAg ICAgICAgYXV0aG9yID0gJyIuJGF1dGhvci4iJywKICAgICAgICAgICAgICAgICAgICBhdXRo b3JfdXJpID0gJyIuJGF1dGhvcl91cmkuIicsCiAgICAgICAgICAgICAgICAgICAgdmVyc2lv biA9ICciLiR2ZXJzaW9uLiInLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0g JyIuJGRlc2NyaXB0aW9uLiInLAogICAgICAgICAgICAgICAgICAgIGhlbHAgPSAnIi5pbXBs b2RlKCcnLCRob3V0KS4iJywKICAgICAgICAgICAgICAgICAgICBjb2RlID0gJyIuJGNvZGUu IicsCiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3MpLiIsCiAg ICAgICAgICAgICAgICAgICAgIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAiY29kZV9yZXN0 b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iCiAgICAgICAgICAgICAgICAgICAgbG9hZF9v cmRlciA9ICIuJGxvYWRfb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgIm5hbWUgPSAnIi4k bmFtZS4iJyIpOwogICAgICAgICAgICAgICAgJG1zZzEgPSBnVHh0KCdwbHVnaW5fc2F2ZWQn LCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOwogICAgICAgICAgICAgICAgJG1zZ1R5 cGUgPSAnJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwY2QgPSBn ZXRfcHJlZigncGx1Z2luX2NhY2hlX2RpcicpOwogICAgICAgICAgICAgICAgJGRpciA9ICRw Y2QuRFM7CgogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRwY2QpKSB7CiAgICAgICAgICAg ICAgICAgICAgJGZpbGVjb250ZW50ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJG1zZzIg PSBnVHh0KCdpZWRfcGx1Z2luX2NhY2hlX25vdF9zZXQnKTsKICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGlvbyA9IGdldF9wcmVmKCdpZWRfcGx1Z2lu X291dHB1dF9vcmRlcicpOwogICAgICAgICAgICAgICAgICAgICRvcG9yZGVyID0gKGlzc2V0 KCRpb28pICYmIGlzX251bWVyaWMoJGlvbykpID8gJGlvbyA6IDA7CiAgICAgICAgICAgICAg ICAgICAgJHRleHRwYWNrID0gJHRoaXMtPnRleHRwYWNrX2J1aWxkKCRuZXduYW1lKTsKICAg ICAgICAgICAgICAgICAgICAkaGVscGNodW5rID0gJHRoaXMtPmJ1aWxkX3RlbXBsYXRlKCdo ZWxwJywgYXJyYXkoJGhlbHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENT UyBodW5rIGluIHRoZSBmaWxlCiAgICAgICAgICAgICAgICAgICAgJGNvZGVjaHVuayA9ICR0 aGlzLT5idWlsZF90ZW1wbGF0ZSgnY29kZScsICRjb2RlKTsKICAgICAgICAgICAgICAgICAg ICAkZmlsZWNvbnRlbnQgPSAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoInByZWFtYmxlIikKICAg ICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1wbGF0ZSgibmFtZSIsICRu ZXduYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3RlbXBsYXRl KCJodG1sX2hlbHAiKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3Rl bXBsYXRlKCJ2ZXJzaW9uIiwgJHZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIC4k dGhpcy0+YnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRhdXRob3IpCiAgICAgICAgICAgICAg ICAgICAgICAgIC4kdGhpcy0+YnVpbGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0aG9y X3VyaSkKICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1wbGF0ZSgi ZGVzY3JpcHRpb24iLCAkZGVzY3JpcHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIC4k dGhpcy0+YnVpbGRfdGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikKICAgICAg ICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1wbGF0ZSgidHlwZSIsICR0eXBl KQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3RlbXBsYXRlKCJmbGFn cyIsICRmbGFncykKICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1w bGF0ZSgidGV4dHBhY2siLCAkdGV4dHBhY2spCiAgICAgICAgICAgICAgICAgICAgICAgIC4k dGhpcy0+YnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKQogICAgICAgICAgICAgICAgICAgICAg ICAuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQogICAgICAg ICAgICAgICAgICAgICAgICAuKCgkb3BvcmRlciA9PSAxKSA/ICRjb2RlY2h1bmsgOiAkaGVs cGNodW5rKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3RlbXBsYXRl KCJwb3N0YW1ibGUiKTsKICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICcnOwogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRmaWxlY29udGVudCA9ICR0aGlzLT5t YWtlX2FycmF5KCRmaWxlY29udGVudCk7CiAgICAgICAgICAgICAgICAkbWV0YXZhcnMgPSBh cnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ2ZXJzaW9uIiA9PiAiJHZlcnNpb24iLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhvciIgPT4gIiRhdXRob3IiLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhvcl91cmkiID0+ICIkYXV0 aG9yX3VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz Y3JpcHRpb24iID0+ICIkZGVzY3JpcHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInR5cGUiID0+ICIkdHlwZSIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiID0+ICIkZmxhZ3MiLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIiA9PiAiJGxvYWRfb3JkZXIiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkaHVu a3ZhcnMgPSBhcnJheSgiQ09ERSIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwon LCRjb2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3VuZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkhFTFAiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkaGVscCkp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNTUyIgPT4gZG9TdHJpcChzdHJfcmVw bGFjZSgnXHJcbicsJwonLCRjc3MpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1ldGF2YXJzIGFzICR2YXJuYW1lID0+ ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoJGlkeCA9IDA7ICRpZHggPCBj b3VudCgkZmlsZWNvbnRlbnQpOyAkaWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlkeF0sICckcGx1Z2luW1wnJy4kdmFybmFtZS4n XCddJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlY29udGVu dFskaWR4XSA9ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddID0gJy5kb1F1b3RlKCR2YWx1 ZSkuJzsnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUgPT4gJGh1 bmspIHsKICAgICAgICAgICAgICAgICAgICBsaXN0ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVs aW0pID0gJHRoaXMtPm1ha2VfbWFya2VycygkdmFybmFtZSwgJHRoaXMtPmllZF9wbHVnaW5f Z2xvYmFsc1snZGxtX3N0YXJ0J10sICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ2RsbV9l bmQnXSk7CiAgICAgICAgICAgICAgICAgICAgJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFy dF9kZWxpbSwgJGZpbGVjb250ZW50KSArIDE7CiAgICAgICAgICAgICAgICAgICAgJGVuZCA9 IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQpOwogICAgICAgICAgICAg ICAgICAgIGlmIChpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAk ZW5kID49ICRzdGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2Uo JGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGZpbGVjb250 ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOwoKICAgICAgICAgICAgICAgIGlm ICgkZmlsZWNvbnRlbnQpIHsKICAgICAgICAgICAgICAgICAgICAkZmggPSBmb3BlbigkZGly LiRmaWxlbmFtZSwgJ3crJyk7CiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRmaCwgJGZp bGVjb250ZW50KTsKICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZoKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICRtc2cxID0gKGVtcHR5KCRtc2cxKSkgPyBnVHh0 KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpIDogJG1zZzE7 CiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICcnOwoKICAgICAgICAgICAgICAgIC8vIE1h a2UgbmV3IGZpbGUgaWYgcmVxdWlyZWQKICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lX2Zp bGUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICRmbmFtZXMgPSAkdGhpcy0+Z2V0X25h bWUoJG5ld25hbWUsICR2ZXJzaW9uKTsKICAgICAgICAgICAgICAgICAgICAkbmV3ZmlsZW5h bWUgPSAkZm5hbWVzWzJdOwogICAgICAgICAgICAgICAgICAgICRyZXMgPSByZW5hbWUoJGRp ci4kZmlsZW5hbWUsICRkaXIuJG5ld2ZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAk ZXh0cmFNc2cgPSAoJHJlcykgPyBnVHh0KCdpZWRfcGx1Z2luX3JlbmFtZWQnKSA6IGdUeHQo J2llZF9wbHVnaW5fcmVuYW1lX2ZhaWxlZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CgogICAgICAgICAgICAvLyBTdG9yZSB0aGUgcGx1Z2luIHRleHRwYWNrIHByZWZp eAogICAgICAgICAgICAkdGhpcy0+c2V0X3RwX3ByZWZpeCgkbmV3bmFtZSwgJGllZF9wbHVn aW5fdHBfcHJlZml4KTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtc2cyKSB7CiAgICAgICAg ICAgICR0aGlzLT50YWJsZSgkbXNnMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg Ly8gQ2hlY2sgdGhlIHBsdWdpbiB0eXBlIG1hdGNoZXMgdGhlIGNvZGUgdXNlZC4KICAgICAg ICAgICAgJGV4dHJhTXNnIC49ICgkdGhpcy0+YWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkg PyAnJyA6IHN0cm9uZyhnVHh0KCdpZWRfcGx1Z2luX2NoZWNrX3R5cGUnKSk7CiAgICAgICAg ICAgICRtZXNzYWdlID0gJG1zZzEuJGV4dHJhTXNnOwogICAgICAgICAgICAkdGhpcy0+ZWRp dChhcnJheSgkbWVzc2FnZSwgJG1zZ1R5cGUpLCAkbmV3ZmlsZW5hbWUpOwogICAgICAgIH0K ICAgIH0KCiAgICAvKioKICAgICAqIEV4cG9ydCB0aGUgcGx1Z2luIGFzIGEgZGlzdHJpYnV0 YWJsZSB0eHQgZmlsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVfYXNfZmls ZSgpCiAgICB7CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRuYW1l ID0gZ3BzKCduYW1lJyk7CiAgICAgICAgICAgICRycyA9IHNhZmVfcm93KCdkZXNjcmlwdGlv biwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2Fk X29yZGVyLCBmbGFncycsICd0eHBfcGx1Z2luJywgIm5hbWU9JyIuZG9TbGFzaCgkbmFtZSku IiciKTsKICAgICAgICAgICAgZXh0cmFjdCgkcnMpOwoKICAgICAgICAgICAgbGlzdCgkY3Nz LCRoZWxwKSA9ICgkaGVscCkgPyAkdGhpcy0+ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwg IjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7CiAgICAgICAgfSBlbHNlaWYg KGdwcygnZmlsZW5hbWUnKSkgewogICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMtPnJlYWRf ZmlsZShnZXRfcHJlZigncGx1Z2luX2NhY2hlX2RpcicpLkRTLmdwcygnZmlsZW5hbWUnKSk7 CiAgICAgICAgICAgIGV4dHJhY3QoJHBsdWdpbik7CiAgICAgICAgfQoKICAgICAgICAkemlw ID0gZ3BzKCd0eXBlJyk7CiAgICAgICAgaWYgKGdwcygndHJpbScpPT0xKSB7CiAgICAgICAg ICAgICRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKICAgICAgICAgICAgJGNvZGU9YXJy YXlfbWFwKCd0cmltJywkY29kZSk7CiAgICAgICAgICAgICRjb2RlPWltcGxvZGUoIlxyXG4i LCRjb2RlKTsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBhbnkgdGV4dHBhY2sgc3RyaW5n cwogICAgICAgICR0ZXh0cGFjayA9ICR0aGlzLT50ZXh0cGFja19idWlsZCgkbmFtZSk7Cgog ICAgICAgIGxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9ICR0aGlzLT5tYWtlX21hcmtl cnMoIkNTUyIsICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkdGhp cy0+aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwogICAgICAgICRmbmFtZXMgPSAk dGhpcy0+Z2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsKCiAgICAgICAgaGVhZGVyKCdDb250 ZW50LXR5cGU6IHRleHQvcGxhaW4nKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9z aXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiAoKCR6aXAgPT09ICd6aXAnKSA/ICRm bmFtZXNbMV0gOiAkZm5hbWVzWzBdKSk7CgogICAgICAgICR0eXBlcyA9IGFycmF5KCdQdWJs aWMnICwgJ0FkbWluL1B1YmxpYycgLCAnTGlicmFyeScgLCAnQWRtaW4nLCAnQWRtaW4vQUpB WCcsICdBZG1pbi9QdWJsaWMvQUpBWCcpOyAvLyBObyBnVHh0KCkgYmVjYXVzZSB0aGUgdGVt cGxhdGUgaXMgRW5nbGlzaAogICAgICAgICRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOwogICAg ICAgICRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKICAgICAgICAkcGx1Z2luWydhdXRo b3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKICAgICAgICAkcGx1Z2luWyd2ZXJzaW9uJ10gPSAk dmVyc2lvbjsKICAgICAgICAkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9u OwogICAgICAgICRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwogICAgICAgICRwbHVnaW5bJ3R5 cGUnXSA9ICR0eXBlOwogICAgICAgICRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsK ICAgICAgICAkcGx1Z2luWydmbGFncyddID0gJGZsYWdzOwogICAgLy8gICRwbHVnaW5bJ2Fs bG93X2h0bWxfaGVscCddID0gdHJ1ZTsKICAgIC8vICAkcGx1Z2luWydoZWxwX3JhdyddID0g JGhlbHAuJHN0YXJ0X2Nzcy4kY3NzLiRlbmRfY3NzOwogICAgICAgICRwbHVnaW5bJ2hlbHAn XSA9ICR0aGlzLT50ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVu ZF9jc3MpOwogICAgICAgICRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10g KTsKICAgICAgICBpZiAoJHRleHRwYWNrKSB7CiAgICAgICAgICAgICRwbHVnaW5bJ3RleHRw YWNrJ10gPSAkdGV4dHBhY2s7CiAgICAgICAgfQoKICAgICAgICBlY2hvICcjIE5hbWU6ICcu JG5hbWUuJyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwID09PSAnemlwJykgPyAiKGNvbXByZXNz ZWQpIiA6ICIiKS4nCiMgVHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luCiMgJy4kZGVz Y3JpcHRpb24uJwojIEF1dGhvcjogJy4kYXV0aG9yLicKIyBVUkw6ICcuJGF1dGhvcl91cmku JwojIFJlY29tbWVuZGVkIGxvYWQgb3JkZXI6ICcuJGxvYWRfb3JkZXIuJwoKIyAuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4KIyBUaGlzIGlzIGEgcGx1Z2luIGZvciBUZXh0cGF0dGVybiBDTVMgLSBodHRw Oi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJuID4gYWRtaW4g PiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0ZXh0IGludG8gdGhlIFwnSW5zdGFs bCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgonLigoJHppcCA9PT0gJ3ppcCcp ID8gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUoJHBsdWdp bikpKSwgNzIpIDogY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdp bikpLCA3MikpOwoKICAgICAgICBkaWUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cG9y dCB0aGUgcGx1Z2luIGFzIGEgcGx1Z2luIHRlbXBsYXRlIFBIUCBmaWxlLgogICAgICovCiAg ICBwdWJsaWMgZnVuY3Rpb24gc2F2ZV9hc19waHBfZmlsZSgpCiAgICB7CiAgICAgICAgaWYg KGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRuYW1lID0gZ3BzKCduYW1lJyk7CiAgICAg ICAgICAgICRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJp LCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0eHBf cGx1Z2luIiwgIm5hbWU9JyIuZG9TbGFzaCgkbmFtZSkuIiciKTsKICAgICAgICAgICAgZXh0 cmFjdCgkcnMpOwoKICAgICAgICAgICAgbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyAk dGhpcy0+ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBh cnJheSgnJywkaGVscCk7CiAgICAgICAgfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewog ICAgICAgICAgICAkcGx1Z2luPSR0aGlzLT5yZWFkX2ZpbGUoZ2V0X3ByZWYoJ3BsdWdpbl9j YWNoZV9kaXInKS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwogICAgICAgICAgICBleHRyYWN0KCRw bHVnaW4pOwogICAgICAgIH0KCiAgICAgICAgJGlvbyA9IGdldF9wcmVmKCdpZWRfcGx1Z2lu X291dHB1dF9vcmRlcicpOwogICAgICAgICRvcG9yZGVyID0gKGlzc2V0KCRpb28pICYmIGlz X251bWVyaWMoJGlvbykpID8gJGlvbyA6IDA7CiAgICAgICAgJGZuYW1lcyA9ICR0aGlzLT5n ZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOwoKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlw ZTogdGV4dC9waHAnKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0 dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNbMl0pOwoKICAgICAgICAkdGV4dHBhY2sg PSAkdGhpcy0+dGV4dHBhY2tfYnVpbGQoJG5hbWUpOwogICAgICAgICRoZWxwY2h1bmsgPSAk dGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2hlbHAnLCBhcnJheSgkaGVscCwgJGNzcykpOwogICAg ICAgICRjb2RlY2h1bmsgPSAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2NvZGUnLCBzdHJfcmVw bGFjZSgiXHJcbiIsIlxuIiwkY29kZSkpOwoKICAgICAgICBlY2hvICR0aGlzLT5idWlsZF90 ZW1wbGF0ZSgncHJlYW1ibGUnKS4KICAgICAgICAgICAgJHRoaXMtPmJ1aWxkX3RlbXBsYXRl KCduYW1lJywgJG5hbWUpLgogICAgICAgICAgICAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2h0 bWxfaGVscCcpLgogICAgICAgICAgICAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ3ZlcnNpb24n LCAkdmVyc2lvbikuCiAgICAgICAgICAgICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgnYXV0aG9y JywgJGF1dGhvcikuCiAgICAgICAgICAgICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgnYXV0aG9y X3VyaScsICRhdXRob3JfdXJpKS4KICAgICAgICAgICAgJHRoaXMtPmJ1aWxkX3RlbXBsYXRl KCdkZXNjcmlwdGlvbicsICRkZXNjcmlwdGlvbikuCiAgICAgICAgICAgICR0aGlzLT5idWls ZF90ZW1wbGF0ZSgnbG9hZF9vcmRlcicsICRsb2FkX29yZGVyKS4KICAgICAgICAgICAgJHRo aXMtPmJ1aWxkX3RlbXBsYXRlKCd0eXBlJywgJHR5cGUpLgogICAgICAgICAgICAkdGhpcy0+ YnVpbGRfdGVtcGxhdGUoJ2ZsYWdzJywgJGZsYWdzKS4KICAgICAgICAgICAgJHRoaXMtPmJ1 aWxkX3RlbXBsYXRlKCd0ZXh0cGFjaycsICR0ZXh0cGFjaykuCiAgICAgICAgICAgICR0aGlz LT5idWlsZF90ZW1wbGF0ZSgnaW5jbHVkZScpLgogICAgICAgICAgICAoKCRvcG9yZGVyID09 IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspLgogICAgICAgICAgICAoKCRvcG9yZGVy ID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspLgogICAgICAgICAgICAkdGhpcy0+ YnVpbGRfdGVtcGxhdGUoJ3Bvc3RhbWJsZScpOwoKICAgICAgICBkaWUoKTsKICAgIH0KCiAg ICAvKioKICAgICAqIEV4cG9ydCBvbmx5IHRoZSB0ZXh0cGFja3MgZnJvbSB0aGUgcGx1Z2lu LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZV9hc190ZXh0cGFjaygpCiAgICB7 CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRuYW1lID0gJGJhc2Vf bmFtZSA9IGdwcygnbmFtZScpOwogICAgICAgICAgICAkdmVyc2lvbiA9IHNhZmVfZmllbGQo J3ZlcnNpb24nLCAidHhwX3BsdWdpbiIsICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIik7 CiAgICAgICAgfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewogICAgICAgICAgICAkbmFt ZSA9IGdwcygnZmlsZW5hbWUnKTsKICAgICAgICAgICAgJGJhc2VfbmFtZSA9IHN0cl9yZXBs YWNlKCcucGhwJywgJycsICRuYW1lKTsKICAgICAgICAgICAgJHBsdWdpbj0kdGhpcy0+cmVh ZF9maWxlKGdldF9wcmVmKCdwbHVnaW5fY2FjaGVfZGlyJykuRFMuZ3BzKCdmaWxlbmFtZScp KTsKICAgICAgICAgICAgJHZlcnNpb24gPSAkcGx1Z2luWyd2ZXJzaW9uJ107CiAgICAgICAg fQoKICAgICAgICAkbGFuZ3MgPSBncHMoJ2xhbmcnKTsKICAgICAgICBpZiAoISRsYW5ncykg ewogICAgICAgICAgICAkbGFuZ3MgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9sYW5nX3NlbGVj dGVkJywgJycpOwogICAgICAgIH0KCiAgICAgICAgJGZvcmNlID0gMDsKICAgICAgICBpZiAo JGxhbmdzID09ICcnKSB7CiAgICAgICAgICAgICRsYW5nc3RyID0gJ2FsbCc7CiAgICAgICAg ICAgICRmb3JjZSA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGxhbmdsaXN0 ID0gZG9fbGlzdCgkbGFuZ3MpOwogICAgICAgICAgICBpZiAoY291bnQoJGxhbmdsaXN0KSA9 PSAxKSB7CiAgICAgICAgICAgICAgICAkbGFuZ3N0ciA9ICRsYW5nbGlzdFswXTsKICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb3VudHJ5X2NvZGVzID0gYXJyYXko KTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRsYW5nbGlzdCBhcyAkbG4pIHsKICAgICAg ICAgICAgICAgICAgICAkbHBhcnRzID0gZG9fbGlzdCgkbG4sICctJyk7CiAgICAgICAgICAg ICAgICAgICAgJGNvdW50cnlfY29kZXNbXSA9ICRscGFydHNbMF07CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAkbGFuZ3N0ciA9IGltcGxvZGUoJysnLCBhcnJheV91bmlx dWUoJGNvdW50cnlfY29kZXMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAk dGV4dHBhY2sgPSAkdGhpcy0+dGV4dHBhY2tfYnVpbGQoJGJhc2VfbmFtZSwgJGZvcmNlKTsK ICAgICAgICAkZm5hbWVzID0gJHRoaXMtPmdldF9uYW1lKCRuYW1lLCAkdmVyc2lvbiwgJGxh bmdzdHIpOwoKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFy c2V0PVVURi04Jyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRh Y2htZW50OyBmaWxlbmFtZT0nIC4gJGZuYW1lc1szXSk7CiAgICAgICAgZWNobyAkdGV4dHBh Y2s7CiAgICAgICAgZGllKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBwbHVn aW4gaW4gc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgZnVu Y3Rpb24gYnVpbGRfdGVtcGxhdGUoJHBydCwgJHZhbD0nJykKICAgIHsKICAgICAgICAkY3Nz ID0gJGhlbHAgPSAnJzsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbCkpIHsKICAgICAgICAg ICAgJGhlbHAgPSAkdmFsWzBdOwogICAgICAgICAgICAkY3NzID0gaXNzZXQoJHZhbFsxXSkg PyAkdmFsWzFdIDogJyc7CiAgICAgICAgICAgICR2YWwgPSAnJzsKICAgICAgICB9CiAgICAg ICAgJHRlbXBsYXRlID0gYXJyYXkoCiAgICAgICAgICAgICJwcmVhbWJsZSIgPT4gJzw/cGhw Jy5uLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gVGhpcyBpcyBhIFBMVUdJ TiBURU1QTEFURSBmb3IgVGV4dHBhdHRlcm4gQ01TLicubi5uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuJy8vIENvcHkgdGhpcyBmaWxlIHRvIGEgbmV3IG5hbWUgbGlrZSBhYmNf bXlwbHVnaW4ucGhwLiAgRWRpdCB0aGUgY29kZSwgdGhlbicubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgLicvLyBydW4gdGhpcyBmaWxlIGF0IHRoZSBjb21tYW5kIGxpbmUgdG8g cHJvZHVjZSBhIHBsdWdpbiBmb3IgZGlzdHJpYnV0aW9uOicubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1Z2lu LTAuMS50eHQnLm4ubiwKICAgICAgICAgICAgIm5hbWUiID0+ICcvLyBQbHVnaW4gbmFtZSBp cyBvcHRpb25hbC4gIElmIHVuc2V0LCBpdCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBj dXJyZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8vIGZpbGUgbmFtZS4g UGx1Z2luIG5hbWVzIHNob3VsZCBzdGFydCB3aXRoIGEgdGhyZWUgbGV0dGVyIHByZWZpeCB3 aGljaCBpcycubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyB1bmlxdWUgYW5k IHJlc2VydmVkIGZvciBlYWNoIHBsdWdpbiBhdXRob3IgKCJhYmMiIGlzIGp1c3QgYW4gZXhh bXBsZSkuJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8vIFVuY29tbWVudCBh bmQgZWRpdCB0aGlzIGxpbmUgdG8gb3ZlcnJpZGU6Jy5uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuJyRwbHVnaW5bXCduYW1lXCddID0gJy5kb1F1b3RlKGRvU2xhc2goJHZhbCkp Lic7Jy5uLm4sCiAgICAgICAgICAgICJodG1sX2hlbHAiID0+ICcvLyBBbGxvdyByYXcgSFRN TCBoZWxwLCBhcyBvcHBvc2VkIHRvIFRleHRpbGUuJy5uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuJy8vIDAgPSBQbHVnaW4gaGVscCBpcyBpbiBUZXh0aWxlIGZvcm1hdCwgbm8g cmF3IEhUTUwgYWxsb3dlZCAoZGVmYXVsdCkuJy5uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuJy8vIDEgPSBQbHVnaW4gaGVscCBpcyBpbiByYXcgSFRNTC4gIE5vdCByZWNvbW1l bmRlZC4nLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nIyAkcGx1Z2luW1wnYWxs b3dfaHRtbF9oZWxwXCddID0gMTsnLm4ubiwKICAgICAgICAgICAgInZlcnNpb24iID0+ICck cGx1Z2luW1wndmVyc2lvblwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubiwKICAgICAgICAg ICAgImZsYWdzIiA9PiAnLy8gUGx1Z2luICJmbGFncyIgc2lnbmFsIHRoZSBwcmVzZW5jZSBv ZiBvcHRpb25hbCBjYXBhYmlsaXRpZXMgdG8gdGhlIGNvcmUgcGx1Z2luIGxvYWRlci4nLm4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gVXNlIGFuIGFwcHJvcHJpYXRlbHkg T1ItZWQgY29tYmluYXRpb24gb2YgdGhlc2UgZmxhZ3MuJy5uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuJy8vIFRoZSBmb3VyIGhpZ2gtb3JkZXIgYml0cyAweGYwMDAgYXJlIGF2 YWlsYWJsZSBmb3IgdGhpcyBwbHVnaW5cJ3MgcHJpdmF0ZSB1c2UnLm4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC4naWYgKCFkZWZpbmVkKFwnUExVR0lOX0hBU19QUkVGU1wnKSkg ZGVmaW5lKFwnUExVR0lOX0hBU19QUkVGU1wnLCAweDAwMDEpOyAvLyBUaGlzIHBsdWdpbiB3 YW50cyB0byByZWNlaXZlICJwbHVnaW5fcHJlZnMueyRwbHVnaW5bXCduYW1lXCddfSIgZXZl bnRzJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ2lmICghZGVmaW5lZChcJ1BM VUdJTl9MSUZFQ1lDTEVfTk9USUZZXCcpKSBkZWZpbmUoXCdQTFVHSU5fTElGRUNZQ0xFX05P VElGWVwnLCAweDAwMDIpOyAvLyBUaGlzIHBsdWdpbiB3YW50cyB0byByZWNlaXZlICJwbHVn aW5fbGlmZWN5Y2xlLnskcGx1Z2luW1wnbmFtZVwnXX0iIGV2ZW50cycubi5uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAuJyRwbHVnaW5bXCdmbGFnc1wnXSA9ICcuZG9RdW90ZSgk dmFsKS4nOycubi5uLAogICAgICAgICAgICAidGV4dHBhY2siID0+ICcvLyBQbHVnaW4gXCd0 ZXh0cGFja1wnIGlzIG9wdGlvbmFsLiBJdCBwcm92aWRlcyBpMThuIHN0cmluZ3MgdG8gYmUg dXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGdUeHQoKS4nLm4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC4nLy8gU3ludGF4OicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAg LicvLyAjIyBhcmJpdHJhcnkgY29tbWVudCcubgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLicvLyAjQGV2ZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8vICNA bGFuZ3VhZ2UgSVNPLUxBTkdVQUdFLUNPREUnLm4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC4nLy8gYWJjX3N0cmluZ19uYW1lID0+IExvY2FsaXplZCBTdHJpbmcnLm4ubgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLigoJHZhbCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/ICckcGx1Z2luW1wndGV4dHBhY2tcJ10gPSA8PDxFT1QnLm4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiR2YWwubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAuJ0VPVDsnLm4ubgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogJy8qKiBVbmNvbW1lbnQgbWUsIGlmIHlvdSBuZWVkIGEgdGV4dHBhY2sn Lm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLickcGx1Z2luW1wndGV4 dHBhY2tcJ10gPSA8PDwgRU9UJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC4nI0BhZG1pbicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu JyNAbGFuZ3VhZ2UgZW4tZ2InLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLidhYmNfc2FtcGxlX3N0cmluZyA9PiBTYW1wbGUgU3RyaW5nJy5uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC4nYWJjX29uZV9tb3JlID0+IE9uZSBtb3JlJy5u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nI0BsYW5ndWFnZSBkZS1k ZScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ2FiY19zYW1wbGVf c3RyaW5nID0+IEJlaXNwaWVsdGV4dCcubgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuJ2FiY19vbmVfbW9yZSA9PiBOb2NoIGVpbmVyJy5uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC4nRU9UOycubgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuJyoqLycubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuJy8vIEVuZCBvZiB0ZXh0cGFjaycubi5uKSwKICAgICAgICAgICAgImF1dGhvciIg PT4gJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFsKSkuJzsn Lm4sCiAgICAgICAgICAgICJhdXRob3JfdXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhvcl91cmlc J10gPSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFsKSkuJzsnLm4sCiAgICAgICAgICAgICJkZXNj cmlwdGlvbiIgPT4gJyRwbHVnaW5bXCdkZXNjcmlwdGlvblwnXSA9ICcuZG9RdW90ZShkb1Ns YXNoKCR2YWwpKS4nOycubi5uLAogICAgICAgICAgICAibG9hZF9vcmRlciIgPT4gJy8vIFBs dWdpbiBsb2FkIG9yZGVyOicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyBU aGUgZGVmYXVsdCB2YWx1ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdpbnMsIHdoaWxlIGZv ciBpbnN0YW5jZSBjb21tZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8v IHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMgd291bGQgcHJvYmFibHkgd2Fu dCB0byBydW4gZWFybGllcicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyAo MS4uLjQpIHRvIHByZXBhcmUgdGhlIGVudmlyb25tZW50IGZvciBldmVyeXRoaW5nIGVsc2Ug dGhhdCBmb2xsb3dzLicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyBWYWx1 ZXMgNi4uLjkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHBsdWdpbnMgd2hpY2ggd291bGQg d29yayBsYXRlLicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyBUaGlzIG9y ZGVyIGlzIHVzZXItb3ZlcnJpZGVhYmxlLicubgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLickcGx1Z2luW1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwKICAg ICAgICAgICAgInR5cGUiID0+ICcvLyBQbHVnaW4gXCd0eXBlXCcgZGVmaW5lcyB3aGVyZSB0 aGUgcGx1Z2luIGlzIGxvYWRlZCcubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicv LyAwID0gcHVibGljICAgICAgICAgICAgICA6IG9ubHkgb24gdGhlIHB1YmxpYyBzaWRlIG9m IHRoZSB3ZWJzaXRlIChkZWZhdWx0KScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAg LicvLyAxID0gcHVibGljK2FkbWluICAgICAgICA6IG9uIGJvdGggdGhlIHB1YmxpYyBhbmQg YWRtaW4gc2lkZScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyAyID0gbGli cmFyeSAgICAgICAgICAgICA6IG9ubHkgd2hlbiBpbmNsdWRlX3BsdWdpbigpIG9yIHJlcXVp cmVfcGx1Z2luKCkgaXMgY2FsbGVkJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAu Jy8vIDMgPSBhZG1pbiAgICAgICAgICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4gc2lkZSAo bm8gQUpBWCknLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gNCA9IGFkbWlu K2FqYXggICAgICAgICAgOiBvbmx5IG9uIHRoZSBhZG1pbiBzaWRlIChBSkFYIHN1cHBvcnRl ZCknLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gNSA9IHB1YmxpYythZG1p bithamF4ICAgOiBvbiBib3RoIHRoZSBwdWJsaWMgYW5kIGFkbWluIHNpZGUgKEFKQVggc3Vw cG9ydGVkKScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLickcGx1Z2luW1wndHlw ZVwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubi5uLAogICAgICAgICAgICAiaW5jbHVkZSIg PT4gJ2lmICghZGVmaW5lZChcJ3R4cGludGVyZmFjZVwnKSknLm4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC4nICAgICAgICBAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7 Jy5uLm4sCiAgICAgICAgICAgICJoZWxwIiA9PiAnaWYgKDApIHsnLm4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC4nPz4nLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4g KCgkY3NzKSA/ICc8IS0tJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJyMgLS0t IEJFR0lOIFBMVUdJTiBDU1MgLS0tJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAu JGNzcy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJyMgLS0tIEVORCBQTFVHSU4g Q1NTIC0tLScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLictLT4nLm4gOiAnJykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nPCEtLScubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC4kaGVscC5uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuJyMgLS0tIEVORCBQTFVHSU4gSEVMUCAtLS0nLm4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC4nLS0+Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJzw/cGhwJy5u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ30nLm4sCiAgICAgICAgICAgICJjb2Rl IiA9PiAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuJHZhbC5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJyMgLS0t IEVORCBQTFVHSU4gQ09ERSAtLS0nLm4sCiAgICAgICAgICAgICJwb3N0YW1ibGUiID0+ICc/ PicsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIChhcnJheV9rZXlfZXhpc3RzKCRwcnQs ICR0ZW1wbGF0ZSkgPyAkdGVtcGxhdGVbJHBydF0gOiAnJyk7CiAgICB9CgogICAgLyoqCiAg ICAgKiBDcmVhdGUgLyB1cGxvYWQgLyBpbnN0YWxsIGEgbmV3IHBsdWdpbi4KICAgICAqLwog ICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZSgpCiAgICB7CiAgICAgICAgZXh0cmFjdChkb1Ns YXNoKGdwc2EoYXJyYXkoJ25hbWUnLCAncGx1Z2luX2NyZWF0ZScsICdwbHVnaW5fdXBsb2Fk JywgJ3BsdWdpbl9pbnN0YWxsJywgJ2llZF9wbHVnaW5fYXV0b2VuYWJsZScpKSkpOwoKICAg ICAgICBpZiAoJHBsdWdpbl9jcmVhdGUpIHsKICAgICAgICAgICAgJGZuYW1lID0gJyc7CiAg ICAgICAgICAgIGlmICgkbmFtZSA9PSAnJykgewogICAgICAgICAgICAgICAgJHRoaXMtPnRh YmxlKGFycmF5KGdUeHQoJ2llZF9wbHVnaW5fbmFtZV9maXJzdCcpLCBFX0VSUk9SKSk7CgoK ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo c3RycG9zKCRuYW1lLCAiLnBocCIpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJGZu YW1lID0gJG5hbWU7CiAgICAgICAgICAgICAgICAkbmFtZSA9IGJhc2VuYW1lKCRuYW1lLCAi LnBocCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRleGlzdHMgPSBmZXRjaCgnbmFt ZScsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAkbmFtZSk7CgogICAgICAgICAgICAvLyBNeVNR TCBkZWZhdWx0cyB0byBzZXQgc3RhdHVzPTEgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5IG92 ZXJyaWRlIHRoaXMgaWYgdGhpcwogICAgICAgICAgICAvLyBpcyBhIGZyZXNoIGluc3RhbGxh dGlvbgogICAgICAgICAgICAkc3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJsZT09MSkg PyAxIDogMDsKCgogICAgICAgICAgICBpZiAoISRleGlzdHMpIHsKICAgICAgICAgICAgICAg IGlmICgkZm5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBQdXQgcGx1Z2luIGluIGNh Y2hlIGRpciBieSBmYWtpbmcgYSBQT1NUIHN1Ym1pc3Npb24gYW5kIHNhdmluZwogICAgICAg ICAgICAgICAgICAgICRfUE9TVFsnZmlsZW5hbWUnXSA9ICRmbmFtZTsKICAgICAgICAgICAg ICAgICAgICAkX1BPU1RbJ25ld25hbWUnXSA9ICRuYW1lOwogICAgICAgICAgICAgICAgICAg ICRfUE9TVFsnc3RhdHVzJ10gPSAxOyAvLyBDYWNoZV9kaXIgcGx1Z2lucyBhcmUgYWx3YXlz IG9uIHNvIHRoaXMgc2V0dGluZyBpcyBpZ25vcmVkCiAgICAgICAgICAgICAgICAgICAgJF9Q T1NUWyd0eXBlJ10gPSAwOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsndmVyc2lvbidd ID0gJzAuMSc7CiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydsb2FkX29yZGVyJ10gPSA1 OwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsnZmxhZ3MnXSA9IDA7CiAgICAgICAgICAg ICAgICAgICAgJHRoaXMtPnNhdmUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiCiAgICAgICAgICAg ICAgICAgICAgICAgIG5hbWU9JyRuYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dHVzPSRzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0wLAogICAgICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uPScwLjEnLAogICAgICAgICAgICAgICAgICAgICAgICBs b2FkX29yZGVyPTUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPTAsCiAgICAgICAg ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPScnLAogICAgICAgICAgICAgICAgICAgICAg ICBoZWxwPScnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlPScnLAogICAgICAgICAg ICAgICAgICAgICAgICBjb2RlX3Jlc3RvcmU9JycKICAgICAgICAgICAgICAgICAgICAiKTsK ICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZWRpdChnVHh0KCdpZWRfcGx1Z2luX2VkaXRf bmV3JyksICRuYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZShhcnJheShnVHh0KCdwbHVnaW4nKS4nIDxz dHJvbmc+Jy4kbmFtZS4nPC9zdHJvbmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMnKSwgRV9F UlJPUikpOwogICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZWlmICgkcGx1Z2luX3VwbG9h ZCkgewogICAgICAgICAgICBsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSAkdGhpcy0+ bWFrZV9tYXJrZXJzKCJDU1MiLCAkdGhpcy0+aWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3Rh cnQnXSwgJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCiAgICAgICAg ICAgIGlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7CiAgICAgICAgICAg ICAgICAkdGhpcy0+dGFibGUoYXJyYXkoZ1R4dCgnaWVkX3BsdWdpbl9jaG9vc2VfZmlsZScp LCBFX0VSUk9SKSk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9Cgog ICAgICAgICAgICAkaW5mbyA9IGV4cGxvZGUgKCcuJywkX0ZJTEVTWyd0aGVmaWxlJ11bJ25h bWUnXSk7CiAgICAgICAgICAgICRsYXN0cGFydCA9IGNvdW50KCRpbmZvKS0xOwogICAgICAg ICAgICAkZXh0ID0gJGluZm9bJGxhc3RwYXJ0XTsKCiAgICAgICAgICAgIGlmICgkZXh0ID09 ICdwaHAnKSB7CiAgICAgICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMtPnJlYWRfZmlsZSgk X0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOwovLyAgJG5ld25hbWUgPSAoZW1wdHko JHBsdWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUn XSwgJy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsKICAgICAgICAgICAgICAgICRuZXduYW1l ID0gKCRuYW1lKSA/ICRuYW1lIDogZG9TbGFzaCgkcGx1Z2luWyduYW1lJ10pOwoKICAgICAg ICAgICAgICAgIGlmIChlbXB0eSgkcGx1Z2luWydjb2RlJ10pKSB7CiAgICAgICAgICAgICAg ICAgICAgJHBsdWdpblsnY29kZSddID0gZmlsZV9nZXRfY29udGVudHMoJF9GSUxFU1sndGhl ZmlsZSddWyd0bXBfbmFtZSddKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICBleHRyYWN0KGRvU2xhc2goJHBsdWdpbikpOwoKICAgICAgICAgICAgICAgICRtZDUgPSBt ZDUoJGNvZGUpOwogICAgICAgICAgICAgICAgJHZlcnNpb24gPSAoJHZlcnNpb24pID8gJHZl cnNpb24gOiAiMC4xIjsKICAgICAgICAgICAgICAgICRoZWxwID0gJGhlbHAuKCgkY3NzKSA/ IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzcyA6ICcnKTsKICAgICAgICAgICAgICAg ICRleGlzdHMgPSBmZXRjaCgnbmFtZScsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAkbmV3bmFt ZSk7CgogICAgICAgICAgICAgICAgLy8gTXlTUUwgZGVmYXVsdHMgdG8gc2V0IHN0YXR1cz0x IHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBvdmVycmlkZSB0aGlzIGlmIHRoaXMKICAgICAg ICAgICAgICAgIC8vIGlzIGEgZnJlc2ggaW5zdGFsbGF0aW9uCiAgICAgICAgICAgICAgICAk c3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJsZT09MSkgPyAnc3RhdHVzPTEsJyA6ICgk ZXhpc3RzICYmICgkaWVkX3BsdWdpbl9hdXRvZW5hYmxlPT0yKSA/ICcnIDogJ3N0YXR1cz0w LCcpOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzKSB7CiAgICAgICAgICAgICAgICAg ICAgLy8gTm90ZTogc3RhdHVzIG9taXR0ZWQgc28gaXQgcmV0YWlucyBpdHMgdmFsdWUKICAg ICAgICAgICAgICAgICAgICAkcnMgPSBzYWZlX3VwZGF0ZSgKICAgICAgICAgICAgICAgICAg ICAgICAgInR4cF9wbHVnaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAiJHN0YXRlCiAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwKICAgICAg ICAgICAgICAgICAgICAgICAgYXV0aG9yID0gJyRhdXRob3InLAogICAgICAgICAgICAgICAg ICAgICAgICBhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywKICAgICAgICAgICAgICAgICAg ICAgICAgdmVyc2lvbiA9ICckdmVyc2lvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl c2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhl bHAgPSAnJGhlbHAnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJyRjb2RlJywK ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9yZXN0b3JlID0gJyRjb2RlJywKICAgICAg ICAgICAgICAgICAgICAgICAgY29kZV9tZDUgPSAnJG1kNScsCiAgICAgICAgICAgICAgICAg ICAgICAgIGZsYWdzID0gIi5pbnR2YWwoJGZsYWdzKS4iLAogICAgICAgICAgICAgICAgICAg ICAgICBsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpLAogICAgICAgICAgICAg ICAgICAgICAgICAibmFtZSA9ICckbmV3bmFtZSciCiAgICAgICAgICAgICAgICAgICAgKTsK ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJzID0gc2Fm ZV9pbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eHBfcGx1Z2luIiwKICAgICAg ICAgICAgICAgICAgICAgICAgIm5hbWUgPSAnJG5ld25hbWUnLAogICAgICAgICAgICAgICAg ICAgICAgICAkc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICIuaW50dmFs KCR0eXBlKS4iLAogICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSAnJGF1dGhvcics CiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcl91cmkgPSAnJGF1dGhvcl91cmknLAog ICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gJyR2ZXJzaW9uJywKICAgICAgICAg ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnJGRlc2NyaXB0aW9uJywKICAgICAgICAg ICAgICAgICAgICAgICAgaGVscCA9ICckaGVscCcsCiAgICAgICAgICAgICAgICAgICAgICAg IGNvZGUgPSAnJGNvZGUnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3Jlc3RvcmUg PSAnJGNvZGUnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlX21kNSA9ICckbWQ1JywK ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3MpLiIsCiAg ICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9hZF9vcmRl cikKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgICRtc2cgPSAoJGV4aXN0cykgPyBnVHh0KCdpZWRfcGx1Z2luX3VwZGF0ZWQnLCBh cnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpIDogZ1R4dCgnaWVkX3BsdWdpbl91cGxvYWRl ZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXduYW1lKSk7CiAgICAgICAgICAgICAgICAkdGhp cy0+dGFibGUoJG1zZywgJG5ld25hbWUpOwoKICAgICAgICAgICAgfSBlbHNlaWYgKCRleHQg PT09ICd0eHQnKSB7CiAgICAgICAgICAgICAgICAkcGx1Z2luNjQgPSBmaWxlX2dldF9jb250 ZW50cygkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOwogICAgICAgICAgICAgICAg JHJldCA9ICR0aGlzLT5pbnN0YWxsKCRwbHVnaW42NCk7CgogICAgICAgICAgICAgICAgaWYg KCRyZXRbJ2VyciddID09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhYmxl KCRyZXRbJ21zZyddLCAkcmV0WyduYW0nXSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAkdGhpcy0+dGFibGUoYXJyYXkoJHJldFsnbXNnJ10sICRyZXRb J2VyciddKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBl bHNlaWYgKCRwbHVnaW5faW5zdGFsbCkgewogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmlu c3RhbGwocHMoJ3BsdWdpbjY0JykpOwogICAgICAgICAgICBpZiAoJHJldFsnZXJyJ10gPT0g JycpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZSgkcmV0Wydtc2cnXSwgJHJldFsn bmFtJ10pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT50YWJs ZShhcnJheSgkcmV0Wydtc2cnXSwgJHJldFsnZXJyJ10pKTsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEluc3RhbGwgcGx1Z2luIGZyb20gZGlzdHJp YnV0YWJsZSB0eHQgZmlsZS4KICAgICAqCiAgICAgKiBGcmFua2Vuc3RlaW5lZCBzaGFtZWxl c3NseSBmcm9tIGluY2x1ZGUvdHhwX3BsdWdpbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0g IHN0cmluZyAkcGx1Z2luIFRoZSByYXcgYmFzZTY0LWVuY29kZWQvZ3ppcHBlZCBwbHVnaW4g YmxvY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoJHBsdWdpbiA9ICcn KQogICAgewogICAgICAgIGlmIChzdHJwb3MoJHBsdWdpbiwgJyRwbHVnaW49XCcnKSAhPT0g ZmFsc2UpIHsKICAgICAgICAgICAgQGluaV9zZXQoJ3BjcmUuYmFja3RyYWNrX2xpbWl0Jywg JzEwMDAwMDAnKTsKICAgICAgICAgICAgJHBsdWdpbiA9IHByZWdfcmVwbGFjZSgnQC4qXCRw bHVnaW49XCcoW1x3PSsvXSspXCcuKkBzJywgJyQxJywgJHBsdWdpbik7CiAgICAgICAgfQoK ICAgICAgICAkcGx1Z2luID0gcHJlZ19yZXBsYWNlKCcvXiMuKiQvbScsICcnLCAkcGx1Z2lu KTsKCiAgICAgICAgaWYgKHRyaW0oJHBsdWdpbikpIHsKICAgICAgICAgICAgJHBsdWdpbiA9 IGJhc2U2NF9kZWNvZGUoJHBsdWdpbik7CgogICAgICAgICAgICBpZiAoc3RybmNtcCgkcGx1 Z2luLCAiXHgxRlx4OEIiLCAyKSA9PT0gMCkgewogICAgICAgICAgICAgICAgJHBsdWdpbiA9 IGd6aW5mbGF0ZShzdWJzdHIoJHBsdWdpbiwgMTApKTsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgaWYgKCRwbHVnaW4gPSBAdW5zZXJpYWxpemUoJHBsdWdpbikpIHsKICAgICAgICAg ICAgICAgIGlmIChpc19hcnJheSgkcGx1Z2luKSkgewogICAgICAgICAgICAgICAgICAgIGV4 dHJhY3QoJHBsdWdpbik7CgogICAgICAgICAgICAgICAgICAgICR0eXBlICA9IGVtcHR5KCR0 eXBlKSAgPyAwIDogbWluKG1heChpbnR2YWwoJHR5cGUpLCAwKSwgNSk7CiAgICAgICAgICAg ICAgICAgICAgJG9yZGVyID0gZW1wdHkoJG9yZGVyKSA/IDUgOiBtaW4obWF4KGludHZhbCgk b3JkZXIpLCAxKSwgOSk7CiAgICAgICAgICAgICAgICAgICAgJGZsYWdzID0gZW1wdHkoJGZs YWdzKSA/IDAgOiBpbnR2YWwoJGZsYWdzKTsKCiAgICAgICAgICAgICAgICAgICAgJGV4aXN0 cyA9IGZldGNoKCduYW1lJywgJ3R4cF9wbHVnaW4nLCAnbmFtZScsICRuYW1lKTsKCiAgICAg ICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRoZWxwX3JhdykgJiYgZW1wdHkoJHBsdWdpblsn YWxsb3dfaHRtbF9oZWxwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1 bHQ6IGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQuCiAgICAgICAgICAgICAgICAgICAgICAg IGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CiAgICAgICAg ICAgICAgICAgICAgICAgICR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKICAgICAgICAgICAg ICAgICAgICAgICAgJGhlbHAgPSAkdGV4dGlsZS0+VGV4dGlsZVJlc3RyaWN0ZWQoJGhlbHBf cmF3LCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg IC8vIE15U1FMIGRlZmF1bHRzIHRvIHNldCBzdGF0dXM9MSBzbyB3ZSBuZWVkIHRvIGV4cGxp Y2l0bHkgb3ZlcnJpZGUgdGhpcyBpZiB0aGlzCiAgICAgICAgICAgICAgICAgICAgLy8gaXMg YSBmcmVzaCBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgICAgICAgICAgJGllZF9wbHVnaW5f YXV0b2VuYWJsZSA9IHBzKCdpZWRfcGx1Z2luX2F1dG9lbmFibGUnKTsKICAgICAgICAgICAg ICAgICAgICAkc3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJsZT09MSkgPyAnc3RhdHVz PTEsJyA6ICgkZXhpc3RzICYmICgkaWVkX3BsdWdpbl9hdXRvZW5hYmxlPT0yKSA/ICcnIDog J3N0YXR1cz0wLCcpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJGV4aXN0cykgewogICAg ICAgICAgICAgICAgICAgICAgICAkcnMgPSBzYWZlX3VwZGF0ZSgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgInR4cF9wbHVnaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IiRzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgID0gJHR5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgICAgICAgPSAnIi5kb1Ns YXNoKCRhdXRob3IpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yX3Vy aSAgID0gJyIuZG9TbGFzaCgkYXV0aG9yX3VyaSkuIicsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2ZXJzaW9uICAgICAgPSAnIi5kb1NsYXNoKCR2ZXJzaW9uKS4iJywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICA9ICciLmRvU2xhc2goJGRlc2Ny aXB0aW9uKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgICAgICA9 ICciLmRvU2xhc2goJGhlbHApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k ZSAgICAgICAgID0gJyIuZG9TbGFzaCgkY29kZSkuIicsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb2RlX3Jlc3RvcmUgPSAnIi5kb1NsYXNoKCRjb2RlKS4iJywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvZGVfbWQ1ICAgICA9ICciLmRvU2xhc2goJG1kNSkuIics CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAgICAgICAgPSAkZmxhZ3MiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgICAgICAgID0gJyIuZG9TbGFzaCgk bmFtZSkuIiciCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkcnMgPSBzYWZlX2luc2Vy dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR4cF9wbHVnaW4iLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAibmFtZSAgICAgICAgID0gJyIuZG9TbGFzaCgkbmFtZSkuIics CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGUgICAgICAgICA9ICR0eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXV0aG9yICAgICAgID0gJyIuZG9TbGFzaCgkYXV0aG9yKS4iJywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF1dGhvcl91cmkgICA9ICciLmRvU2xhc2goJGF1dGhvcl91 cmkpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAgICAgID0gJyIu ZG9TbGFzaCgkdmVyc2lvbikuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj cmlwdGlvbiAgPSAnIi5kb1NsYXNoKCRkZXNjcmlwdGlvbikuIicsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoZWxwICAgICAgICAgPSAnIi5kb1NsYXNoKCRoZWxwKS4iJywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICciLmRvU2xhc2goJGNv ZGUpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9yZXN0b3JlID0gJyIu ZG9TbGFzaCgkY29kZSkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX21k NSAgICAgPSAnIi5kb1NsYXNoKCRtZDUpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9hZF9vcmRlciAgID0gJyIuJG9yZGVyLiInLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MgICAgICAgID0gJGZsYWdzIgogICAgICAgICAgICAgICAgICAgICAgICAp OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRycyBh bmQgJGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkdGV4dHBh Y2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3RleHRwYWNrKCR0 ZXh0cGFjaywgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgICAgICAgICBpZiAocHMoJ2llZF9wbHVnaW5faW5zdGFsbG9wdHMnKSAmJiAoJGZs YWdzICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpICkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9hZF9wbHVnaW4oJG5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgJG1lc3NhZ2UgPSBjYWxsYmFja19ldmVudCgicGx1Z2luX2xpZmVjeWNsZS4k bmFtZSIsICdpbnN0YWxsZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXNzYWdlKSkgJG1lc3NhZ2UgPSBnVHh0 KCdwbHVnaW5faW5zdGFsbGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnbXNnJyA9PiAkbWVzc2FnZSwgJ2Vy cicgPT4gJycsICduYW0nID0+ICRuYW1lKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ21zZycgPT4gZ1R4dCgn cGx1Z2luX2luc3RhbGxfZmFpbGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSwgJ2Vy cicgPT4gRV9FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoJ21zZycg PT4gZ1R4dCgnYmFkX3BsdWdpbl9jb2RlJyksICdlcnInID0+IEVfRVJST1IpOwogICAgfQoK ICAgIC8qKgogICAgICogU3RvcmUgdGhlIHN0YXRlIG9mIHRoZSB0b2dnbGFibGUgcGFuZXMu CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlX3BhbmVfc3RhdGUoKQogICAgewog ICAgICAgICRwYW5lcyA9IGFycmF5KCdpZWRfcGx1Z2luX3RwX3N0cmluZ3MnLCAnaWVkX3Bs dWdpbl9jb2RlJywgJ2llZF9wbHVnaW5fZG9jcycsICdpZWRfcGx1Z2luX21ldGEnLCAnaWVk X3BsdWdpbl91dGlscycsICdpZWRfcGx1Z2luX2NwYW5lbCcsICdpZWRfcGx1Z2luX2RicGx1 Z3MnLCAnaWVkX3BsdWdpbl9jYWNoZXBsdWdzJyk7CiAgICAgICAgJHBhbmUgPSBncHMoJ3Bh bmUnKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykpIHsKICAgICAgICAg ICAgc2V0X3ByZWYoInBhbmVfeyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlzaWJsZScpID09 ICd0cnVlJyA/ICcxJyA6ICcwJyksICdpZWRfcGx1Z2luJywgUFJFRl9ISURERU4sICd5ZXNu b3JhZGlvJywgMCwgUFJFRl9QUklWQVRFKTsKICAgICAgICAgICAgc2VuZF94bWxfcmVzcG9u c2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kX3htbF9yZXNwb25zZShh cnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7CiAgICAgICAgfQog ICAgfQoKICAgIC8qKgogICAgICogR2V0IHBsdWdpbiAoZmlsZSluYW1lIGluZm9ybWF0aW9u LgogICAgICoKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgKGZpbGUpbmFtZXM7CiAgICAg KiAgMSkgdGhlIHN0YW5kYXJkIHBsdWdpbgogICAgICogIDIpIHRoZSBjb21wcmVzc2VkIHBs dWdpbgogICAgICogIDMpIHRoZSBQSFAgdGVtcGxhdGUKICAgICAqICA0KSB0aGUgdGV4dHBh Y2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9uYW1lKCRuYW1lLCAkdmVyc2lv biA9ICcnLCAkbGFuZz0nJykKICAgIHsKICAgICAgICAkaWVkX3BsdWdpbl9wcmVmcyA9ICR0 aGlzLT5nZXRfcHJlZnMoKTsKCiAgICAgICAgJG9wID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5f b3V0cHV0X3NmaWxlJyk7CiAgICAgICAgJG9wYyA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX291 dHB1dF9zZmlsZWMnKTsKICAgICAgICAkb3BwID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fb3V0 cHV0X3NmaWxlcCcpOwogICAgICAgICRvcHQgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9vdXRw dXRfc2ZpbGV0Jyk7CgogICAgICAgICRvdXQgPSBhcnJheSgKICAgICAgICAgICAgKCAoZW1w dHkoJG9wKSkgPyAkaWVkX3BsdWdpbl9wcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUn XVsnZGVmYXVsdCddIDogJG9wICksCiAgICAgICAgICAgICggKGVtcHR5KCRvcGMpKSA/ICRp ZWRfcGx1Z2luX3ByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXVsnZGVmYXVsdCdd IDogJG9wYyApLAogICAgICAgICAgICAoIChlbXB0eSgkb3BwKSkgPyAkaWVkX3BsdWdpbl9w cmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJ11bJ2RlZmF1bHQnXSA6ICRvcHAgKSwK ICAgICAgICAgICAgKCAoZW1wdHkoJG9wdCkpID8gJGllZF9wbHVnaW5fcHJlZnNbJ2llZF9w bHVnaW5fb3V0cHV0X3NmaWxldCddWydkZWZhdWx0J10gOiAkb3B0ICksCiAgICAgICAgKTsK CiAgICAgICAgJGZyb20gPSBhcnJheSgne25hbWV9JywgJ3t2ZXJzaW9ufScsICd7bGFuZ30n KTsKICAgICAgICAkdG8gPSBhcnJheSgkbmFtZSwgJHZlcnNpb24sICRsYW5nKTsKCiAgICAg ICAgZm9yZWFjaCAoJG91dCBhcyAkZmlkeCA9PiAkZm5hbWUpIHsKICAgICAgICAgICAgJGZu YW1lID0gc3RyX3JlcGxhY2UoJGZyb20sICR0bywgJGZuYW1lKTsKICAgICAgICAgICAgJG91 dFskZmlkeF0gPSBzYW5pdGl6ZUZvckZpbGUoJGZuYW1lKTsKICAgICAgICB9CgogICAgICAg IHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYSBwbHVnaW4gaW4g U3RhbmRhcmQgVGV4dHBhdHRlcm4gVGVtcGxhdGUgZm9ybWF0LgogICAgICoKICAgICAqIEBw YXJhbSAgc3RyaW5nICRmaWxlcGF0aCBGdWxsIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgcmVh ZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZF9maWxlKCRmaWxlcGF0aCkKICAg IHsKICAgICAgICAkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKICAgICAgICAkanVzdGZp bGUgPSBiYXNlbmFtZSgkZmlsZXBhdGgpOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUgKCcu JywkanVzdGZpbGUpOwogICAgICAgICRleHQgPSBhcnJheV9wb3AoJHBhcnRzKTsKICAgICAg ICAkZXh0ID0gKCRleHQ9PSRqdXN0ZmlsZSkgPyAnJyA6ICcuJy4kZXh0OyAvLyBPbmx5IGFz c2lnbiBhbiBleHRlbnNpb24gaWYgb25lIGV4aXN0cwogICAgICAgICRzb3VyY2VfbGluZXMg PSBjb3VudCgkY29udGVudCk7CiAgICAgICAgJGNvbW1lbnRibG9jayA9IGZhbHNlOwogICAg ICAgICRpbl90ZXh0cGFjayA9IGZhbHNlOwogICAgICAgICRtZXRhZGF0YSA9IGFycmF5KAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICA9PiAnJywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJyAgICAgPT4gJycsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAncmV2aXNpb24nICAgID0+ICcnLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2F1dGhvcicgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdhdXRob3JfdXJpJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZGVzY3JpcHRpb24nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29y ZGVyJyAgICAgICA9PiAnNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZScg ICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdzJyAgICAg ICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0cGFjaycgICAgPT4g JycsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgZm9yICgkaWR4PTA7ICRp ZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKICAgICAgICAgICAgJGNvbnRlbnRbJGlk eF0gPSBydHJpbSgkY29udGVudFskaWR4XSk7CgogICAgICAgICAgICAvLyBCb21iIG91dCBp ZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGFyZWEKICAgICAgICAgICAg aWYgKHN0cnBvcyggJGNvbnRlbnRbJGlkeF0sICdpZiAoIWRlZmluZWQoXCd0eHBpbnRlcmZh Y2VcJyknICkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9 CiAgICAgICAgICAgIGlmIChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICcvKicpID09PSAwKSB7 CiAgICAgICAgICAgICAgICAkY29tbWVudGJsb2NrID0gdHJ1ZTsKICAgICAgICAgICAgICAg IGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggKHN0cnBvcygkY29u dGVudFskaWR4XSwgJyovJykgPT09IDApIHx8IChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICcq Ki8nKSA9PT0gMCkgKSB7CiAgICAgICAgICAgICAgICAkY29tbWVudGJsb2NrID0gZmFsc2U7 CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg aWYgKHN0cnBvcygkY29udGVudFskaWR4XSwgJ0VPVDsnKSA9PT0gMCkgewogICAgICAgICAg ICAgICAgJGluX3RleHRwYWNrID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjb250aW51ZTsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpbl90ZXh0cGFjaykgewogICAgICAg ICAgICAgICAgJG1ldGFkYXRhWyd0ZXh0cGFjayddIC49ICRjb250ZW50WyRpZHhdLm47CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJGNvbW1lbnRibG9jayAmJiBzdHJwb3Mo JGNvbnRlbnRbJGlkeF0sICckcGx1Z2luWycpID09PSAwKSB7CiAgICAgICAgICAgICAgICAv LyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CiAgICAgICAgICAgICAg ICAkcGFydHMgPSBleHBsb2RlKCIgPSAiLCAkY29udGVudFskaWR4XSk7CiAgICAgICAgICAg ICAgICAkcGFydHNbMF0gPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0pOyAvLyBN YWtlIHRoZSBtYXRjaCBlYXNpZXIhCiAgICAgICAgICAgICAgICAkc2VtaWNvbG9uID0gc3Ry cG9zKCRwYXJ0c1sxXSwgJzsnKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlbWljb2xvbiAh PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkcGFydHNbMV0gPSBzdWJzdHIoJHBh cnRzWzFdLCAwLCAkc2VtaWNvbG9uKTsgLy8gRGl0dG8KICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBwcmVnX21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBd LCAkdmFyKTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lCgogICAgICAgICAg ICAgICAgaWYgKGlzX251bWVyaWMoJHBhcnRzWzFdKSkgewogICAgICAgICAgICAgICAgICAg ICRwYXJ0c1sxXSA9ICInIi4kcGFydHNbMV0uIiciOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIGlmIChzdHJwb3MoJHBhcnRzWzFdLCAnPDw8JykgPT09IGZhbHNlKSB7 CiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiLy4qJyguKiknLiovIiwgJHBhcnRz WzFdLCAkdmFsKTsgLy8gUmVtb3ZlIGFueXRoaW5nIG91dHNpZGUgdGhlIHF1b3RlcyAoZS5n LiAkcmV2aXNpb24pCgogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdmFsKSkgewog ICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdW5xdW90ZWQgLSBtYXkgYmUgYSBjb25z dGFudCBvciB0d28uCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goIi8oLiop LyIsICRwYXJ0c1sxXSwgJHZhbCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Ry dG91cHBlcigkdmFsWzFdKSA9PSAkdmFsWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBJdCdzIGEgY29uc3RhbnQgc28gZ2V0IGl0cyB2YWx1ZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgJHZhbFsxXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkY29uc3RhbnRzID0gZG9fbGlzdCgkcGFydHNbMV0sICd8Jyk7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnN0YW50cyBhcyAkY29uc3RhbnQpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsWzFdIHw9IChkZWZpbmVkKCRjb25z dGFudCkpID8gY29uc3RhbnQoJGNvbnN0YW50KSA6IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR2YXJbMV0gPT09 ICdyZXZpc2lvbicgJiYgaXNzZXQoJHZhbFsxXSkgJiYgIWVtcHR5KCR2YWxbMV0pKSB7CiAg ICAgICAgICAgICAgICAgICAgJHJldnBhcnRzID0gZXhwbG9kZSgnICcsIHRyaW0oJHZhbFsx XSwgJyQgJykpOwogICAgICAgICAgICAgICAgICAgICR2YWxbMV0gPSAkcmV2cGFydHNbY291 bnQoJHJldnBhcnRzKS0xXTsKICAgICAgICAgICAgICAgICAgICAkdmFsWzFdID0gKGVtcHR5 KCR2YWxbMV0pKSA/ICcnIDogJy4nIC4kdmFsWzFdOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIGlmICgkdmFyWzFdID09PSAndGV4dHBhY2snKSB7CiAgICAgICAgICAg ICAgICAgICAgJGluX3RleHRwYWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRtZXRhZGF0YVskdmFy WzFdXSA9ICR2YWxbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRtZXRh ZGF0YVsnbmFtZSddID0gKGVtcHR5KCRtZXRhZGF0YVsnbmFtZSddKSkgPyBiYXNlbmFtZSgk anVzdGZpbGUsICRleHQpIDogJG1ldGFkYXRhWyduYW1lJ107CiAgICAgICAgJG1ldGFkYXRh Wydsb2FkX29yZGVyJ10gPSAkbWV0YWRhdGFbJ29yZGVyJ107CiAgICAgICAgJG1ldGFkYXRh Wyd2ZXJzaW9uJ10gLj0gJG1ldGFkYXRhWydyZXZpc2lvbiddOwogICAgICAgICRtZXRhZGF0 YVsnaGVscCddID0gJHRoaXMtPmV4dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAnKTsKICAg ICAgICAkbWV0YWRhdGFbJ2NzcyddICA9ICR0aGlzLT5leHRyYWN0X2h1bmsoJGNvbnRlbnQs ICdDU1MnICk7CiAgICAgICAgJG1ldGFkYXRhWydjb2RlJ10gPSAkdGhpcy0+ZXh0cmFjdF9o dW5rKCRjb250ZW50LCAnQ09ERScpOwoKICAgICAgICByZXR1cm4gJG1ldGFkYXRhOwogICAg fQoKICAgIC8qKgogICAgICogUHVsbCBvdXQgYSBjaHVuayBvZiB0ZXh0IGZyb20gdGhlIFN0 YW5kYXJkIFRlbXBsYXRlIEZvcm1hdC4KICAgICAqCiAgICAgKiBSaXBwZWQgYW5kIG1vZGRl ZCBmcm9tIG5ldC1jYXJ2ZXIncyB6ZW1fdHBsIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBw YXJhbSAgW3R5cGVdICAkY29udGVudCBbZGVzY3JpcHRpb25dCiAgICAgKiBAcGFyYW0gIFt0 eXBlXSAgJGh1bmsgICAgW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFtICBzdHJpbmcgICRj bW50ICAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEBwYXJhbSAgYm9vbGVhbiAkZGVsZXRlICBb ZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAgICAgICAgICAgW2Rlc2NyaXB0 aW9uXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdF9odW5rKCRjb250ZW50 LCAkaHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKQogICAgewogICAgICAgICRkbG0g PSBleHBsb2RlKCJ8IiwgJGNtbnQpOwogICAgICAgICRkbG1TdGFydCA9ICRkbG1bMF07CiAg ICAgICAgJGRsbUVuZCA9IChpc3NldCgkZGxtWzFdKSkgPyAkZGxtWzFdIDogJyc7CiAgICAg ICAgJGxpbmVzID0gJHRoaXMtPm1ha2VfYXJyYXkoJGNvbnRlbnQpOwoKICAgICAgICBsaXN0 ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gJHRoaXMtPm1ha2VfbWFya2VycygkaHVu aywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsKICAgICAgICAkc3RhcnQgPSBhcnJheV9zZWFyY2go JHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsKICAgICAgICAkZW5kID0gYXJyYXlfc2VhcmNo KCRlbmRfZGVsaW0sICRsaW5lcyk7CgogICAgICAgIC8vIEtsdWRnZSB0byBnZXQgcm91bmQg dGhlIGRlbGltaXRlciBjaGFuZ2UgaW4gdjAuODMKICAgICAgICBpZiAoJGh1bmsgPT0gJ0NT UycgJiYgJGVuZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJHN0YXJ0X2RlbGltID0gc3Ry X3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGVsaW0pOwogICAgICAgICAgICAkZW5k X2RlbGltID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RlbGltKTsKICAgICAg ICAgICAgJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSArIDE7 CiAgICAgICAgICAgICRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsK ICAgICAgICB9CgogICAgICAgICRleHRyYWN0ZWQgPSBhcnJheSgpOwogICAgICAgIGlmIChj b3VudCgkbGluZXMpID4gMCAmJiBpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygk ZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7CiAgICAgICAgICAgICRleHRyYWN0ZWQgPSBhcnJh eV9zbGljZSgkbGluZXMsICRzdGFydCwgJGVuZC0kc3RhcnQpOwogICAgICAgICAgICAkbGlu ZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7CiAgICAgICAgICAgIHdoaWxlICgkbGluZU51 bSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgewogICAgICAg ICAgICAgICAgYXJyYXlfcG9wKCRleHRyYWN0ZWQpOwogICAgICAgICAgICB9CiAgICAgICAg ICAgIHdoaWxlIChjb3VudCgkZXh0cmFjdGVkKSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWzBd KSA9PSAiIikgewogICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGV4dHJhY3RlZCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRkZWxldGUpIHsKICAgICAgICAgICAgICAg ICRjaG9wcGVkID0gYXJyYXlfc3BsaWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQtJHN0YXJ0 KzIsICIiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmVtYWlucyA9ICRs aW5lczsKICAgICAgICAvLyBDaGVjayBpZiB0aGUgQ1NTIHNlY3Rpb24gaGFzIDxzdHlsZT4g dGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdAogICAgICAgIGlmICgkaHVuayA9PSAi Q1NTIikgewogICAgICAgICAgICAkbnVtcm93cyA9IGNvdW50KCRleHRyYWN0ZWQpOwogICAg ICAgICAgICBpZiAoJG51bXJvd3MgPiAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RycG9z KCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0eWxlPicpID09PSBmYWxzZSkgewogICAg ICAgICAgICAgICAgICAgICRleHRyYWN0ZWRbXSA9ICc8L3N0eWxlPic7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5 bGUgJykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgk ZXh0cmFjdGVkLCAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGRlbGV0ZSkgewogICAg ICAgICAgICByZXR1cm4gYXJyYXkodHJpbShpbXBsb2RlKCJcbiIsICRleHRyYWN0ZWQpKSwg dHJpbShpbXBsb2RlKCJcbiIsICRyZW1haW5zKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgIHJldHVybiB0cmltKGltcGxvZGUoIlxuIiwgJGV4dHJhY3RlZCkpOwogICAgICAg IH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHRyaW1tZWQgYXJyYXkgZnJvbSBh IG11bHRpLWxpbmUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBbdHlwZV0gJGFy ciBbZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAgICAgIFtkZXNjcmlwdGlv bl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1ha2VfYXJyYXkoJGFycikKICAgIHsK ICAgICAgICBpZiAoIWlzX2FycmF5KCRhcnIpKSB7CiAgICAgICAgICAgICRhcnIgPSBleHBs b2RlKCJcbiIsICRhcnIpOwogICAgICAgIH0KCiAgICAgICAgJHNvdXJjZV9saW5lcyA9IGNv dW50KCRhcnIpOwoKICAgICAgICBmb3IgKCRpZHg9MDsgJGlkeCA8ICRzb3VyY2VfbGluZXM7 ICRpZHgrKykgewogICAgICAgICAgICAkYXJyWyRpZHhdID0gcnRyaW0oJGFyclskaWR4XSk7 CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycjsKICAgIH0KCiAgICAvKioKICAgICAq IENyZWF0ZSBzdGFydCBhbmQgZW5kIG1hcmtlcnMgZm9yIHRoZSBnaXZlbiBodW5rLgogICAg ICoKICAgICAqIEBwYXJhbSAgW3R5cGVdICRodW5rICBbZGVzY3JpcHRpb25dCiAgICAgKiBA cGFyYW0gIFt0eXBlXSAkc3RhcnQgW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFtICBbdHlw ZV0gJGVuZCAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEByZXR1cm4gW3R5cGVdICAgICAgICBb ZGVzY3JpcHRpb25dCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYWtlX21hcmtlcnMo JGh1bmssICRzdGFydCwgJGVuZCkKICAgIHsKICAgICAgICAkc21hcmtlciA9ICRzdGFydCAu IHN0cl9yZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICR0aGlzLT5pZWRfcGx1Z2luX2dsb2Jh bHNbJ3N0YXJ0J10pIC4gKCgkZW5kKT8nICcuJGVuZDonJyk7CiAgICAgICAgJGVtYXJrZXIg PSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkdGhpcy0+aWVkX3Bs dWdpbl9nbG9iYWxzWydlbmQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsKCiAgICAgICAg cmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVtYXJrZXIpKTsKICAgIH0KCiAgICAvKioKICAg ICAqIENoZWNrIGlmIHRoZSBjb2RlIHNtZWxscyBsaWtlIGFuIGFkbWluLXNpZGUgcGx1Z2lu LgogICAgICoKICAgICAqIFJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHpl bV90cGwgdGVtcGxhdGUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGNvZGVibG9j ayBUaGUgc291cmNlIGNvZGUKICAgICAqIEBwYXJhbSAgc3RyaW5nICR0eXBlICAgICAgVGhl IHBsdWdpbidzIHR5cGUKICAgICAqIEByZXR1cm4gYm9vbCAgICAgICAgICAgICAgdHJ1ZSBp ZiB0aGUgY29kZSBpcyBhIHB1YmxpYy1zaWRlIHBsdWdpbgogICAgICogICAgICAgICAgICAg ICAgICAgICAgICAgICBmYWxzZSBpZiBpdCBzZWVtcyB0byBiZSBhZG1pbi1zaWRlCiAgICAg Ki8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZG1pbl9jaGVjaygkY29kZWJsb2NrLCAkdHlwZSkK ICAgIHsKICAgICAgICAvLyBTaG9ydCBjaXJjdWl0IHNpbmNlIHdlJ3JlIG9ubHkgaW50ZXJl c3RlZCBpbiBwdWJsaWMgcGx1Z2lucy4KICAgICAgICBpZiAoJHR5cGUgIT0gJzAnIHx8IHN0 cnBvcygkY29kZWJsb2NrLCAndHhwaW50ZXJmYWNlJykgPT09IGZhbHNlKSB7CiAgICAgICAg ICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhpcyBpcyBzZXZlcmFs IG9yZGVycyBvZiBtYWduaXR1ZGUgcXVpY2tlciB0aGFuIGEgc2luZ2xlIHByZWdfbWF0Y2gK ICAgICAgICAvLyBhcyBwbHVnaW4gc2l6ZSBpbmNyZWFzZXMuCiAgICAgICAgJGNiID0gc3Ry X3JlcGxhY2UoYXJyYXkoJ1x0JywgJyAnKSwgJycsICRjb2RlYmxvY2spOwogICAgICAgICRj YiA9IHN0cl9yZXBsYWNlKCc9PT0nLCAnPT0nLCAkY2IpOwoKICAgICAgICBpZiAoc3RycG9z KCRjYiwgJ3R4cGludGVyZmFjZT09XCJhZG1pbicpIHx8CiAgICAgICAgICAgIHN0cnBvcygk Y2IsICJ0eHBpbnRlcmZhY2U9PVwnYWRtaW4iKSB8fAogICAgICAgICAgICBzdHJwb3MoJGNi LCAnYWRtaW5cIj09dHhwaW50ZXJmYWNlJykgfHwKICAgICAgICAgICAgc3RycG9zKCRjYiwg ImFkbWluXCc9PXR4cGludGVyZmFjZSIpIHx8CiAgICAgICAgICAgIHN0cnBvcygkY2IsICdh ZG1pblwiPT1AdHhwaW50ZXJmYWNlJykgfHwKICAgICAgICAgICAgc3RycG9zKCRjYiwgImFk bWluXCc9PUB0eHBpbnRlcmZhY2UiKSkgewoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBU ZXh0aWxlIHRoZSBwYXNzZWQgaGVscCBkb2MgYW5kIHN0eWxlIGluZm8uCiAgICAgKgogICAg ICogQ2FjaGUgdGhlIGNvbnRlbnQgaWYgdGhlIHByZWZzIGluZGljYXRlIHRvIGRvIHNvLgog ICAgICoKICAgICAqIEBwYXJhbSAgW3R5cGVdICRuYW1lICAgICAgW2Rlc2NyaXB0aW9uXQog ICAgICogQHBhcmFtICBbdHlwZV0gJGhlbHAgICAgICBbZGVzY3JpcHRpb25dCiAgICAgKiBA cGFyYW0gIFt0eXBlXSAkY3NzICAgICAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEBwYXJhbSAg W3R5cGVdICRzdGFydF9kbG0gW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFtICBbdHlwZV0g JGVuZF9kbG0gICBbZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAgICAgICAg ICAgIFtkZXNjcmlwdGlvbl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRleHRpbGUo JG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5kX2RsbSkKICAgIHsKICAgICAg ICAkdG1wZGlyID0gJGhscGZpbGUgPSAnJzsKICAgICAgICAkY2hhbmdlZCA9IHRydWU7CiAg ICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJGlvdGMgPSBnZXRfcHJlZignaWVkX3Bs dWdpbl9vdXRwdXRfdG1wY2FjaGUnKTsKCiAgICAgICAgaWYgKGlzc2V0KCRpb3RjKSAmJiAh ZW1wdHkoJGlvdGMpICYmIGlzX3dyaXRhYmxlKCRpb3RjKSkgewogICAgICAgICAgICAkdG1w ZGlyID0gJGlvdGM7CiAgICAgICAgICAgICRjYWNoZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1w ZGlyLCAnaWVkX3BsdWdpbl9jb21wb3Nlci5jYWNoZScpOwogICAgICAgICAgICBpZiAoIWZp bGVfZXhpc3RzKCRjYWNoZSkpIHsKICAgICAgICAgICAgICAgIHRvdWNoKCRjYWNoZSk7IC8v IENyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgICAgfQogICAgICAg ICAgICAkcGx1Z3MgPSBwYXJzZV9pbmlfZmlsZSgkY2FjaGUpOwoKICAgICAgICAgICAgJG9s ZF9tZDUgPSAoaXNfYXJyYXkoJHBsdWdzKSAmJiBhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAk cGx1Z3MpKSA/ICRwbHVnc1skbmFtZV0gOiAnJzsKICAgICAgICAgICAgJGN1cnJfbWQ1ID0g bWQ1KCRoZWxwKTsKICAgICAgICAgICAgJGhscGZpbGUgPSBidWlsZF9maWxlX3BhdGgoJHRt cGRpciwgJG5hbWUuJ19oZWxwLnR4dGwnKTsKICAgICAgICAgICAgaWYgKCRvbGRfbWQ1ID09 ICRjdXJyX21kNSkgewogICAgICAgICAgICAgICAgJG91dFswXSA9IGZpbGVfZ2V0X2NvbnRl bnRzKCRobHBmaWxlKTsKICAgICAgICAgICAgICAgICRjaGFuZ2VkID0gZmFsc2U7CiAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcGx1Z3NbJG5hbWVdID0gJGN1cnJf bWQ1OwogICAgICAgICAgICAgICAgJGZkID0gZm9wZW4oJGNhY2hlLCAidyIpOwogICAgICAg ICAgICAgICAgZm9yZWFjaCAoJHBsdWdzIGFzICRpZHggPT4gJHZhbCkgewogICAgICAgICAg ICAgICAgICAgIGZ3cml0ZSgkZmQsICRpZHguJyA9ICcuJHZhbC5uKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZmQpOwogICAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICBpZiAoISRvdXQpIHsKICAgICAgICAgICAgQGluY2x1ZGVfb25jZSB0 eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CiAgICAgICAgICAgICRvdXRbMF0gPSAk aGVscDsKICAgICAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7CiAgICAg ICAgICAgICAgICAvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxsaWdlbnQgYWJv dXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QKICAgICAgICAgICAgICAgICRyZSA9ICcvaFsw LTZdKFwoLipcKSk/XC4vJzsKICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCRyZSwg JGhlbHApKSB7CiAgICAgICAgICAgICAgICAgICAgJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgp OwogICAgICAgICAgICAgICAgICAgICRvdXRbMF0gPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMo JGhlbHApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgICBpZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgewogICAgICAgICAgICBpZiAoIWZpbGVf ZXhpc3RzKCRobHBmaWxlKSkgewogICAgICAgICAgICAgICAgdG91Y2goJGhscGZpbGUpOwog ICAgICAgICAgICB9CiAgICAgICAgICAgICRmZCA9IGZvcGVuKCRobHBmaWxlLCAidyIpOwog ICAgICAgICAgICBmd3JpdGUoJGZkLCAkb3V0WzBdKTsKICAgICAgICAgICAgZmNsb3NlKCRm ZCk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXBsYWNlIHRoZSB0cmlwbGUgJy0tLScgaW4g dGhlIGRlbGltaXRlcnMgc28gdGhlIGhlbHAgZmlsZSBjYW4gdmFsaWRhdGUKICAgICAgICAk c3RhcnRfZGxtID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGxtKTsKICAg ICAgICAkZW5kX2RsbSA9IHN0cl9yZXBsYWNlKCctLS0nLCAnKioqJywgJGVuZF9kbG0pOwoK ICAgICAgICAkb3V0WzFdID0gKCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxuJGNzc1xuJGVuZF9k bG1cbiIgOiAnJzsKCiAgICAgICAgcmV0dXJuIHN1YnN0cihpbXBsb2RlKCcnLCAkb3V0KSwg MCwgJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9oZWxwJ10rJHRoaXMtPmllZF9w bHVnaW5fZ2xvYmFsc1snc2l6ZV9jc3MnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbmpl Y3QgYW55IG5lY2Vzc2FyeSBqYXZhc2NyaXB0IG9uIHRoZSBwYWdlIGZvciBjb2RlIGhlbHBl cnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnRfZWRpdG9ycygpCiAgICB7 CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJGVkID0gYXJyYXkoKTsKICAgICAg ICAkY2VkID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fZWRpdG9yJyk7CiAgICAgICAgJGhlZCA9 IGdldF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJyk7CiAgICAgICAgJGNvcCA9IGdl dF9wcmVmKCdpZWRfcGx1Z2luX2VkaXRvcl9vcHRpb25zJyk7CiAgICAgICAgJGhvcCA9IGdl dF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX29wdGlvbnMnKTsKICAgICAgICAkZWRb JGNlZF0gPSBnZXRfcHJlZignaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcpOwogICAgICAgICRl ZFskaGVkXSA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnKTsKCiAg ICAgICAgJGNvcCA9ICRjb3AgPyAnLCcuJGNvcCA6ICcnOwogICAgICAgICRob3AgPSAkaG9w ID8gJywnLiRob3AgOiAnJzsKCiAgICAgICAgZm9yZWFjaCAoJGVkIGFzICRlZGl0b3IgPT4g JGVkaXRvcl9sb2NzKSB7CiAgICAgICAgICAgICRqc29wID0gYXJyYXkoKTsKICAgICAgICAg ICAgJGxvY3MgPSBkb19saXN0KCRlZGl0b3JfbG9jcyk7CiAgICAgICAgICAgIGZvcmVhY2gg KCRsb2NzIGFzICRsb2MpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGxvYywgJ2Nz czonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkanNvcFtdID0gJzxsaW5r IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJy5zdWJzdHIoJGxvYywgNCkuJyI+JzsKICAgICAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGpzb3BbXSA9ICc8c2Ny aXB0IHR5cGU9ImphdmFzY3JpcHQiIHNyYz0iJy4kbG9jLiciPjwvc2NyaXB0Pic7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRqc29wID0gaW1wbG9k ZShuLCAkanNvcCk7CgogICAgICAgICAgICBzd2l0Y2ggKCRlZGl0b3IpIHsKICAgICAgICAg ICAgICAgIGNhc2UgInRpbnlfbWNlIjoKICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSA8 PDxFT0pTCnskanNvcH0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp0aW55TUNF LmluaXQoewogICAgbW9kZSA6ICJzcGVjaWZpY190ZXh0YXJlYXMiLAogICAgZWRpdG9yX3Nl bGVjdG9yIDogIm1jZUVkaXRvciIKICAgIHskaG9wfQp9KTsKPC9zY3JpcHQ+OwpFT0pTOwog ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJlZGl0X2FyZWEi OgogICAgICAgICAgICAgICAgICAgICRvdXRbXSA9IDw8PEVPSlMKeyRqc29wfQo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIGluaXRpYWxpc2F0aW9uCmVkaXRBcmVhTG9h ZGVyLmluaXQoewogICAgaWQ6ICJwbHVnaW5fZWRpdG9yIiwKICAgIHN5bnRheDogInBocCIK ICAgIHskY29wfQp9KTsKPC9zY3JpcHQ+CkVPSlM7CiAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgImNvZGVtaXJyb3IiOgogICAgICAgICAgICAgICAgICAg ICRvdXRbXSA9IDw8PEVPSlMKeyRqc29wfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCI+Cm15VGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGx1Z2luX2VkaXRv ciIpOwp2YXIgaWVkX3BjX2VkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKG15VGV4 dEFyZWEsIHsKICAgIHZhbHVlOiBteVRleHRBcmVhLnZhbHVlCiAgICB7JGNvcH0KfSk7Cjwv c2NyaXB0PgpFT0pTOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlICJjb2RlcHJlc3MiOgogICAgICAgICAgICAgICAgICAgICRvdXRbXSA9ICRqc29wOwog ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg IHJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwogICAgfQoKICAgIC8qKgogICAgICogU2hv dyBwbHVnaW4gaGVscCBkb2N1bWVudGF0aW9uLgogICAgICoKICAgICAqIElmIHJhdywgd2ls bCBUZXh0aWxlIGZpcnN0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXNzYWdl IFtkZXNjcmlwdGlvbl0KICAgICAqIEByZXR1cm4gW3R5cGVdICAgICAgICAgIFtkZXNjcmlw dGlvbl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhlbHBfdmlld2VyKCRtZXNzYWdl ID0gJycpCiAgICB7CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRu YW1lID0gZ3BzKCduYW1lJyk7CiAgICAgICAgICAgICRoZWxwID0gKCRuYW1lKSA/IGZldGNo KCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwogICAgICAgICAgICBs aXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/ICR0aGlzLT5leHRyYWN0X2h1bmsoJGhlbHAs ICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKICAgICAgICB9 IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CiAgICAgICAgICAgICRwbHVnaW4gPSAkdGhp cy0+cmVhZF9maWxlKGdldF9wcmVmKCdwbHVnaW5fY2FjaGVfZGlyJykuRFMuZ3BzKCdmaWxl bmFtZScpKTsKICAgICAgICAgICAgZXh0cmFjdCgkcGx1Z2luKTsKICAgICAgICB9CgogICAg ICAgICRvdXQgPSAnJzsKICAgICAgICBpZiAoZW1wdHkoJGhlbHApKSB7CiAgICAgICAgICAg ICRvdXQgPSBnVHh0KCdpZWRfcGx1Z2luX2hlbHBfbm90X2F2YWlsYWJsZScpOwogICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgIGxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9ICR0 aGlzLT5tYWtlX21hcmtlcnMoIkNTUyIsICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ2Nz c19zdGFydCddLCAkdGhpcy0+aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwogICAg ICAgICAgICAkb3V0ID0gJHRoaXMtPnRleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3Rh cnRfY3NzLCAkZW5kX2Nzcyk7CiAgICAgICAgfQoKICAgICAgICBwYWdldG9wKGdUeHQoJ2ll ZF9wbHVnaW5fdmlld19oZWxwJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSwgJG1lc3Nh Z2UpOwogICAgICAgIGVjaG8gbi4gJzxkaXYgaWQ9InBsdWdpbl9jb250YWluZXIiIGNsYXNz PSJ0eHAtY29udGFpbmVyIHR4cC12aWV3Ij4nLgogICAgICAgICAgICBuLiAnPGRpdiBjbGFz cz0idGV4dC1jb2x1bW4iPicgLiAkb3V0IC4gJzwvZGl2PicuCiAgICAgICAgICAgIG4uICc8 L2Rpdj4nOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcCB0aGUgcGFzc2VkIHdpZGdldCB3 aXRoIHN0YW5kYXJkIG1hcmt1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkd2lk Z2V0IFRoZSB3aWRnZXQgdG8gd3JhcAogICAgICogQHBhcmFtICBzdHJpbmcgJGNsYXNzICBU aGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSB3cmFwcGVyCiAgICAgKiBAcmV0dXJuIHN0 cmluZyAgICAgICAgIEhUTUwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyYXBfd2lk Z2V0KCR3aWRnZXQsICRjbGFzcyA9ICd0eHAtZm9ybS1maWVsZC12YWx1ZScpCiAgICB7CiAg ICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSInIC4gJGNsYXNzIC4gJyI+Jy4kd2lkZ2V0Lic8 L2Rpdj4nOwogICAgfQoKICAgIC8qKgogICAgICogUHJlZmVyZW5jZXMgc3R1YiB3aXRoIGNv cnJlY3Qgc2lnbmF0dXJlIGZvciBsaWZlY3ljbGUgY2FsbGJhY2suCiAgICAgKgogICAgICog QHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0dGVybiBldmVudAogICAgICogQHBhcmFtICBz dHJpbmcgJHN0cCBUZXh0cGF0dGVybiBzdGVwIChhY3Rpb24pCiAgICAgKi8KICAgIHB1Ymxp YyBmdW5jdGlvbiBzZXR1cCgkZXZ0ID0gJycsICRzdHAgPSAnJykKICAgIHsKICAgICAgICAk dGhpcy0+cHJlZnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc3BsYXkgdGhlIHNldHVw IC8gcHJlZnMgcGFuZWwuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG1lc3NhZ2Ug QW55IGZlZWRiYWNrIGVycm9yIC8gaW5mbyBtZXNzYWdlIHRvIGRpc3BseQogICAgICogQHJl dHVybiBzdHJpbmcgICAgICAgICAgSFRNTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24g cHJlZnMoJG1lc3NhZ2UgPSAnJykKICAgIHsKICAgICAgICByZXF1aXJlX3ByaXZzKCdwbHVn aW5fcHJlZnMuJy4kdGhpcy0+aWVkX3BjX2V2ZW50KTsKCiAgICAgICAgaWYgKHBzKCdpZWRf cGx1Z2luX3ByZWZfc2F2ZScpKSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmc191cGRhdGUo KTsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcpOwog ICAgICAgIH0KCiAgICAgICAgJGllZF9wbHVnaW5fcHJlZnMgPSAkdGhpcy0+Z2V0X3ByZWZz KCk7CgogICAgICAgIHBhZ2V0b3AoZ1R4dCgnaWVkX3BsdWdpbl9sYmxfc2V0dXAnKSwgJG1l c3NhZ2UpOwoKICAgICAgICAkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsKCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0i dHhwLWxheW91dCI+JwogICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQt MmNvbCI+JwogICAgICAgICAgICAubi4gJzxoMSBjbGFzcz0idHhwLWhlYWRpbmciPicgLiBn VHh0KCdpZWRfcGx1Z2luX2xibF9zZXR1cCcpIC4gJzwvaDE+JwogICAgICAgICAgICAubi4g JzwvZGl2PicKICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0LTJjb2wi PicKICAgICAgICAgICAgLm4uIHNMaW5rKCR0aGlzLT5pZWRfcGNfZXZlbnQsICcnLCBnVHh0 KCdpZWRfcGx1Z2luX2xpc3QnKSwgJ2llZF9wbHVnaW5fbGluaycpCiAgICAgICAgICAgIC5u LiAnPC9kaXY+JwogICAgICAgICAgICAubi4gc2NyaXB0X2pzKDw8PEVPSlMKdmFyIGllZF9w bHVnaW5fcGF0aF9yZSA9IG5ldyBSZWdFeHAoIl4uKlsvXFxdIiwgImciKQpmdW5jdGlvbiBp ZWRfcGx1Z2luX3ByZWZzd2FwKHNlbElELCBzZWxWYWx1ZSkKewogICAgdmFyIGlkID0gc2Vs SUQrJ19wYXRoJzsKICAgIHZhciBudXZhbCA9ICgoYmFzZW5hbWUoJCgiIyIraWQpLnZhbCgp KSA9PSBzZWxWYWx1ZSkgPyAkKCIjIitpZCkudmFsKCkgOiBkaXJuYW1lKCQoIiMiK2lkKS52 YWwoKSkrc2VsVmFsdWUpOwoKICAgIGlmICgkKCIjIitzZWxJRClbMF0uc2VsZWN0ZWRJbmRl eCA9PSAwKSB7CiAgICAgICAgJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CiAg ICB9IGVsc2UgewogICAgICAgICQoIiMiK2lkKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsK ICAgICAgICAkKCIjIitpZCkudmFsKG51dmFsKTsKICAgIH0KfQpmdW5jdGlvbiBiYXNlbmFt ZShwYXRoLCBzdWZmaXgpCnsKICAgIHJldHVybiBwYXRoLnJlcGxhY2UoaWVkX3BsdWdpbl9w YXRoX3JlLCAnJyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoKQp7CiAgICByZXR1cm4gcGF0 aC5tYXRjaChpZWRfcGx1Z2luX3BhdGhfcmUpOwp9CmpRdWVyeShmdW5jdGlvbiAoKSB7CiAg ICBqUXVlcnkoIi5pZWRfcGx1Z2luX3NldHVwIHNlbGVjdCBvcHRpb246c2VsZWN0ZWQiKS5l YWNoKGZ1bmN0aW9uIChvYmopIHsKICAgICAgICB2YXIgaXRlbSA9IGpRdWVyeSh0aGlzKTsK ICAgICAgICBpZWRfcGx1Z2luX3ByZWZzd2FwKGl0ZW0ucGFyZW50KCkuYXR0cignaWQnKSwg aXRlbS52YWwoKSk7CiAgICB9KTsKfSk7CkVPSlMKICAgICAgICAgICAgKTsKCiAgICAgICAg JG91dCA9IGFycmF5KCk7CiAgICAgICAgJG91dFtdID0gbi4nPGRpdiBjbGFzcz0idHhwLWxh eW91dC0xY29sIj4nOwogICAgICAgICRvdXRbXSA9ICc8Zm9ybSBuYW1lPSJpZWRfcGNfcHJl ZnMiIGlkPSJpZWRfcGNfcHJlZnMiIGNsYXNzPSJ0eHAtcHJlZnMtZ3JvdXAiIGFjdGlvbj0i aW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPic7CiAgICAgICAgJG91dFtdID0gZUlucHV0KCR0 aGlzLT5pZWRfcGNfZXZlbnQpLnNJbnB1dCgncHJlZnMnKTsKCiAgICAgICAgJGxhc3RfZ3Jw ID0gJyc7CgogICAgICAgIGZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzIGFzICRpZHggPT4g JHByZWZvYmopIHsKICAgICAgICAgICAgaWYgKCRsYXN0X2dycCAhPSAkcHJlZm9ialsnZ3Jv dXAnXSkgewogICAgICAgICAgICAgICAgJG91dFtdID0gaGVkKGdUeHQoJHByZWZvYmpbJ2dy b3VwJ10pLCAyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFzdF9ncnAgPSAkcHJl Zm9ialsnZ3JvdXAnXTsKICAgICAgICAgICAgJHN1Ym91dCA9IGFycmF5KCk7CiAgICAgICAg ICAgICRsYWJlbCA9ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+JwogICAg ICAgICAgICAgICAgICAgIC4nPGxhYmVsPicuZ1R4dCgkaWR4KS4nPC9sYWJlbD4nCiAgICAg ICAgICAgICAgICAgICAgLic8L2Rpdj4nOwogICAgICAgICAgICAkdmFsID0gZ2V0X3ByZWYo JGlkeCwgJHByZWZvYmpbJ2RlZmF1bHQnXSwgMSk7CiAgICAgICAgICAgICR2aXMgPSAoaXNz ZXQoJHByZWZvYmpbJ3Zpc2libGUnXSkgJiYgISRwcmVmb2JqWyd2aXNpYmxlJ10pID8gJ2Vt cHR5JyA6ICd0eHAtZm9ybS1maWVsZCc7CiAgICAgICAgICAgIHN3aXRjaCAoJHByZWZvYmpb J2h0bWwnXSkgewogICAgICAgICAgICAgICAgY2FzZSAndGV4dF9pbnB1dCc6CiAgICAgICAg ICAgICAgICAgICAgJHN1Ym91dFtdID0gJHRoaXMtPndyYXBfd2lkZ2V0KGZJbnB1dCgndGV4 dCcsICRpZHgsICR2YWwsICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIsICcnLCAkaWR4KSk7 CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVh JzoKICAgICAgICAgICAgICAgICAgICAkc3Vib3V0W10gPSAkdGhpcy0+d3JhcF93aWRnZXQo dGV4dF9hcmVhKCRpZHgsICcnLCAnJywgJHZhbCwgJGlkeCkpOwogICAgICAgICAgICAgICAg ICAgICR2aXMgPSAoaXNzZXQoJHByZWZvYmpbJ3Zpc2libGUnXSkgJiYgISRwcmVmb2JqWyd2 aXNpYmxlJ10pID8gJ2VtcHR5JyA6ICd0eHAtZm9ybS1maWVsZC10ZXh0YXJlYSc7CiAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3llc25vcmFkaW8nOgog ICAgICAgICAgICAgICAgICAgICRzdWJvdXRbXSA9ICR0aGlzLT53cmFwX3dpZGdldCh5ZXNu b1JhZGlvKCRpZHgsICR2YWwpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAncmFkaW9zZXQnOgogICAgICAgICAgICAgICAgICAgICRzdWJvdXRbXSA9 ICR0aGlzLT53cmFwX3dpZGdldChyYWRpb1NldCgkcHJlZm9ialsnY29udGVudCddLCAkaWR4 LCAkdmFsKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug J2NoZWNrYm94c2V0JzoKICAgICAgICAgICAgICAgICAgICAkdmFscyA9IGRvX2xpc3QoJHZh bCk7CiAgICAgICAgICAgICAgICAgICAgJGxjbG91dCA9IGFycmF5KCk7CiAgICAgICAgICAg ICAgICAgICAgJGNiX2NvdW50ID0gMDsKCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo JHByZWZvYmpbJ2NvbnRlbnQnXSBhcyAkY2IgPT4gJHZhbCkgewogICAgICAgICAgICAgICAg ICAgICAgICAkY2hlY2tlZCA9IGluX2FycmF5KCRjYiwgJHZhbHMpOwogICAgICAgICAgICAg ICAgICAgICAgICAkY2JJZCA9IHR4cHNwZWNpYWxjaGFycygkaWR4LictJy4kY2JfY291bnQp OwogICAgICAgICAgICAgICAgICAgICAgICAkbGNsb3V0W10gPSBjaGVja2JveCgkaWR4IC4g J1tdJywgJGNiLCAkY2hlY2tlZCwgJycsICRjYklkKSAuIG4gLiAnPGxhYmVsIGZvcj0iJyAu ICRjYklkIC4gJyI+JyAuIGdUeHQoJHZhbCkgLiAnPC9sYWJlbD4nOwogICAgICAgICAgICAg ICAgICAgICAgICAkY2JfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICRzdWJvdXRbXSA9ICR0aGlzLT53cmFwX3dpZGdldChpbXBsb2RlKG4s ICRsY2xvdXQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnc2VsZWN0bGlzdCc6CiAgICAgICAgICAgICAgICAgICAgJHN1Ym91dFtdID0gJHRoaXMt PndyYXBfd2lkZ2V0KHNlbGVjdElucHV0KCRpZHgsICRwcmVmb2JqWydjb250ZW50J11bMF0s ICR2YWwsICRwcmVmb2JqWydjb250ZW50J11bMV0pKTsKICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNf Y2FsbGFibGUoJHByZWZvYmpbJ2h0bWwnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg JHN1Ym91dFtdID0gJHRoaXMtPndyYXBfd2lkZ2V0KCRwcmVmb2JqWydodG1sJ10oJGlkeCwg JHZhbCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXRbXSA9IHRhZygkbGFiZWwgLiBuLmltcGxv ZGUobiAsJHN1Ym91dCksICdkaXYnLCAoJHZpcyA/ICcgY2xhc3M9IicuJHZpcy4nIicgOiAn JykpOwogICAgICAgIH0KICAgICAgICAkb3V0W10gPSBncmFmKGZJbnB1dCgnc3VibWl0Jywg J2llZF9wbHVnaW5fcHJlZl9zYXZlJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLCBhcnJh eSgnY2xhc3MnID0+ICd0eHAtc2F2ZScpKTsKICAgICAgICAkb3V0W10gPSB0SW5wdXQoKTsK ICAgICAgICAkb3V0W10gPSAnPC9mb3JtPjwvZGl2PjwvZGl2Pic7CgogICAgICAgIGVjaG8g aW1wbG9kZShuLCAkb3V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgcGx1Z2luIHBy ZWZzIGZyb20gc2V0dXAgcGFuZWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVm c191cGRhdGUoKQogICAgewogICAgICAgIGdsb2JhbCAkcHJlZnM7CgogICAgICAgICRpZWRf cGx1Z2luX3ByZWZzID0gJHRoaXMtPmdldF9wcmVmcygpOwogICAgICAgICRzYXZlZCA9IHBz KCdpZWRfcGx1Z2luX3ByZWZfc2F2ZScpOwoKICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFj aCBwbHVnaW4gc2V0dGluZyBhbmQgbWFrZSBzdXJlIGl0J3MgaW4gdGhlIHByZWZzIHRhYmxl LCBhcyBmb2xsb3dzOgogICAgICAgIC8vIDEpIGlmIHRoZSB2YWx1ZSBoYXMgYmVlbiBQT1NU ZWQgZnJvbSB0aGUgcHJlZnMgcGFuZWwsIHNldCB0aGUgcGFzc2VkIHZhbHVlCiAgICAgICAg Ly8gMikgaWYgdGhlIHZhbHVlIGV4aXN0cyBpbiB0aGUgcHJlZnMgKGkuZS4gcnVuIG9uIHVw Z3JhZGUpLCBzZXQgdGhlIGV4aXN0aW5nIHZhbHVlCiAgICAgICAgLy8gMykgaWYgbmVpdGhl ciBleGlzdCwgc2V0IHRoZSBwbHVnaW4gZGVmYXVsdCB2YWx1ZQogICAgICAgIGZvcmVhY2gg KCRpZWRfcGx1Z2luX3ByZWZzIGFzICRrZXkgPT4gJHByZWZvYmopIHsKICAgICAgICAgICAg JHZhbCA9ICgkc2F2ZWQgfHwgaXNzZXQoJF9QT1NUWyRrZXldKSkgPyBwcygka2V5KSA6ICgo aXNzZXQoJHByZWZzWyRrZXldKSkgPyAkcHJlZnNbJGtleV0gOiAkcHJlZm9ialsnZGVmYXVs dCddKTsKICAgICAgICAgICAgJHZhbCA9IChpc19hcnJheSgkdmFsKSkgPyBpbXBsb2RlKCcs ICcsICR2YWwpIDogJHZhbDsKICAgICAgICAgICAgc2V0X3ByZWYoJGtleSwgJHZhbCwgJ2ll ZF9wbHVnaW4nLCAkcHJlZm9ialsndHlwZSddLCAkcHJlZm9ialsnaHRtbCddLCAkcHJlZm9i alsncG9zaXRpb24nXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRl IHBsdWdpbiBwcmVmcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludGVnZXIgJHNob3dwYW5l IFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgcGFuZWwgYWZ0ZXJ3YXJkcwogICAgICovCiAgICBw dWJsaWMgZnVuY3Rpb24gcHJlZnNfcmVtb3ZlKCRzaG93cGFuZSA9IDEpCiAgICB7CiAgICAg ICAgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1lIGxpa2UgJ2llZF9wbHVnaW5fJSci KTsKCiAgICAgICAgaWYgKCRzaG93cGFuZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IGdU eHQoJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcpOwogICAgICAgICAgICAkdGhpcy0+cHJl ZnMoJG1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRl IGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0 cmluZyAkZmxhdm91ciBJZiAnaW5zdGFsbGVkJyB0aGVuIHNob3cgb25seSB0aG9zZSBhdmFp bGFibGUsIGVsc2UgJ2FsbCcKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVi bGljIHN0YXRpYyBmdW5jdGlvbiBsYW5nX2xpc3QoJGZsYXZvdXIgPSAnaW5zdGFsbGVkJykK ICAgIHsKICAgICAgICAkaWVkX2xhbmdzID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCRmbGF2 b3VyID09PSAnaW5zdGFsbGVkJykgewogICAgICAgICAgICAvLyBTZWxmLWpvaW4gdG8gZ2V0 IGFsbCB0aGUgaW5zdGFsbGVkIGxhbmdzIGFuZCBsYW5ndWFnZSBzdHJpbmdzIGluIG9uZSBz dGVwLgovLyAgICAgICAgICAgICRpbnN0YWxsZWRfbGFuZ3MgPSBzYWZlX3F1ZXJ5KCdzZWxl Y3QgdDEubGFuZywgdDIuZGF0YSBmcm9tICcuUEZYLid0eHBfbGFuZyBhcyB0MSwgJy5QRlgu J3R4cF9sYW5nIGFzIHQyIFdIRVJFIHQxLmxhbmcgPSB0Mi5uYW1lIEdST1VQIEJZIGxhbmcn KTsKICAgICAgICAgICAgJGllZF9sYW5ncyA9IHNhZmVfY29sdW1uKCdsYW5nJywgJ3R4cF9s YW5nJywgJzE9MSBHUk9VUCBCWSBsYW5nJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgLy8gR3JhYiBhbGwgYXZhaWxhYmxlIGxhbmdzIGZyb20gdGhlIFJQQyBzZXJ2ZXIuCiAg ICAgICAgICAgIHJlcXVpcmVfb25jZSB0eHBhdGguJy9saWIvSVhSQ2xhc3MucGhwJzsKCiAg ICAgICAgICAgICRjbGllbnQgPSBuZXcgSVhSX0NsaWVudChSUENfU0VSVkVSKTsKCiAgICAg ICAgICAgIC8vIEdldCBpdGVtcyBmcm9tIFJQQy4KICAgICAgICAgICAgQHNldF90aW1lX2xp bWl0KDUpOwoKICAgICAgICAgICAgaWYgKCRjbGllbnQtPnF1ZXJ5KCd0dXBzLmxpc3RMYW5n dWFnZXMnLCBnZXRfcHJlZignYmxvZ191aWQnKSkpIHsKICAgICAgICAgICAgICAgICRyZXNw b25zZSA9ICRjbGllbnQtPmdldFJlc3BvbnNlKCk7CgogICAgICAgICAgICAgICAgZm9yZWFj aCAoJHJlc3BvbnNlIGFzICRsYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgICRpZWRf bGFuZ3NbXSA9ICRsYW5ndWFnZVsnbGFuZ3VhZ2UnXTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQnVpbGQgdGhlIHNlbGVjdCBsaXN0 IGFycmF5LgogICAgICAgICRsYW5nbGlzdCA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2gg KCRpZWRfbGFuZ3MgYXMgJGllZF9sYW5nKSB7CiAgICAgICAgICAgICRsYW5nbGlzdFskaWVk X2xhbmddID0gZ1R4dCgkaWVkX2xhbmcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRs YW5nbGlzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkIHRleHRwYWNrIGZyb20gc3Ry aW5ncyBpbiB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRu YW1lICAgICAgUGx1Z2luIG5hbWUKICAgICAqIEBwYXJhbSAgaW50ZWdlciAkZm9yY2VfYWxs IFdoZXRoZXIgdG8gYnVpbGQgZm9yIHRoZSBjdXJyZW50IGxhbmd1ZSAoMCkgb3IgYWxsIGlu c3RhbGxlZCBsYW5ndWFnZXMgKDEpCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAg ICBUaGUgVGV4dHBhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRleHRwYWNrX2J1 aWxkKCRuYW1lLCAkZm9yY2VfYWxsID0gMCkKICAgIHsKICAgICAgICAkZmV0Y2hfbGFuZyA9 IG51bGw7CgogICAgICAgIGlmICgkZm9yY2VfYWxsID09PSAwKSB7CiAgICAgICAgICAgICRm ZXRjaF9sYW5nID0gZ3BzKCdsYW5nJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRmZXRj aF9sYW5nKSB7CiAgICAgICAgICAgICRmZXRjaF9sYW5nID0gKCRmb3JjZV9hbGwgPT09IDEp CiAgICAgICAgICAgICAgICA/IGltcGxvZGUoJywnLCBhcnJheV9rZXlzKHNlbGY6Omxhbmdf bGlzdCgnaW5zdGFsbGVkJykpKQogICAgICAgICAgICAgICAgOiBnZXRfcHJlZignaWVkX3Bs dWdpbl9sYW5nX3NlbGVjdGVkJywgJycpOwogICAgICAgIH0KCiAgICAgICAgJHRwb3V0ID0g YXJyYXkoKTsKCiAgICAgICAgaWYgKCRmZXRjaF9sYW5nKSB7CiAgICAgICAgICAgICRjaG9z ZW5fbGFuZyA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2xhbmdfZGVmYXVsdCcsICcnKTsKCiAg ICAgICAgICAgIC8vIEd1YXJkIGFnYWluc3Qgc2l0dWF0aW9ucyB3aGVuIHRoZSBjaG9zZW4g ZGVmYXVsdCBsYW5nIGlzICdhbnknLgogICAgICAgICAgICAkZGZsdF9sYW5nID0gKCRjaG9z ZW5fbGFuZyA9PT0gJycpID8gZ2V0X3ByZWYoJ2xhbmd1YWdlJykgOiAkY2hvc2VuX2xhbmc7 CgogICAgICAgICAgICAkdHBfcGZ4ID0gdW5zZXJpYWxpemUoZ2V0X3ByZWYoJ2llZF9wbHVn aW5fdHBfcHJlZml4JywgJycsIDEpKTsKICAgICAgICAgICAgJHRwX3BmeCA9IGlzc2V0KCR0 cF9wZnhbJG5hbWVdKSA/ICR0cF9wZnhbJG5hbWVdIDogJyc7CiAgICAgICAgICAgICR0cF9y b3dzID0gJHRoaXMtPnRleHRwYWNrX2dyYWIoJGZldGNoX2xhbmcsICR0cF9wZngpOwoKICAg ICAgICAgICAgaWYgKCR0cF9yb3dzKSB7CiAgICAgICAgICAgICAgICAkY3RyID0gMDsKICAg ICAgICAgICAgICAgICRwcmV2bGFuZyA9ICcnOwoKICAgICAgICAgICAgICAgIC8vIEdvIHRo cm91Z2ggYWxsIHRoZSBsYW5ndWFnZXMgYW5kIHB1dCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBh dCB0aGUgc3RhcnQgb2YgdGhlIGFycmF5LgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRw X3Jvd3MgYXMgJHJvdykgewogICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQg bWFya2VyCiAgICAgICAgICAgICAgICAgICAgJHRoZUV2ZW50ID0gaW5fYXJyYXkoJHJvd1sn ZXZlbnQnXSwgYXJyYXkoJ3B1YmxpYycsICdjb21tb24nKSkgPyAkcm93WydldmVudCddIDog JHRwX3BmeDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwcmV2bGFuZyAhPSAkcm93Wyds YW5nJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGN0cisrOwogICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGlkeCA9ICgkcm93WydsYW5nJ10gPT0g JGRmbHRfbGFuZykgPyAwIDogJGN0cjsKICAgICAgICAgICAgICAgICAgICAkdHBsYW5nWyRp ZHhdWyR0aGVFdmVudF1bJHJvd1snbGFuZyddXVskcm93WyduYW1lJ11dID0gJHJvd1snZGF0 YSddOwogICAgICAgICAgICAgICAgICAgICRwcmV2bGFuZyA9ICRyb3dbJ2xhbmcnXTsKICAg ICAgICAgICAgICAgICAgICAkcHJldmV2ZW50ID0gJHJvd1snZXZlbnQnXTsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgZGVmYXVsdCBsYW5ndWFn ZSBpcyBhY3R1YWxseSBmaXJzdC4KICAgICAgICAgICAgICAgIGtzb3J0KCR0cGxhbmcpOwoK ICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBmaW5hbCB0ZXh0cGFjayBhcnJheSB3aXRo IGxhbmd1YWdlIG1hcmtlcnMuCiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBtYXJrZXIg Zm9yIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG1heSAoc2hvdWxkISkgYmUgb21pdHRlZCBpZiB0 aGUgYXV0aG9yIHdhbnRzCiAgICAgICAgICAgICAgICAvLyB0aGUgc3RyaW5ncyB0byBiZSBp bnN0YWxsZWQgcmVnYXJkbGVzcyBvZiBsYW5ndWFnZSBvbiBkZXN0aW5hdGlvbiBzZXJ2ZXIu CiAgICAgICAgICAgICAgICAvLyBJZiBhIHNwZWNpZmljIGxhbmd1YWdlIGlzIHNldCBhbmQg dGhlIHVzZXIgZG9lcyBub3QgaGF2ZSB0aGF0IGxhbmd1YWdlCiAgICAgICAgICAgICAgICAv LyBpbnN0YWxsZWQsIHRoZSBzdHJpbmdzIHdvdWxkIG5vdCBiZSBpbnNlcnRlZC4KICAgICAg ICAgICAgICAgICRwcmV2ZXZlbnQgPSAnJzsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgk dHBsYW5nIGFzICRpZHggPT4gJGxhbmdibG9jaykgewogICAgICAgICAgICAgICAgICAgIGZv cmVhY2ggKCRsYW5nYmxvY2sgYXMgJGV2ID0+ICRjb2RlYmxvY2spIHsKICAgICAgICAgICAg ICAgICAgICAgICAgJHRwaGVhZGVyID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgJHRwc3RyaW5ncyA9IGFycmF5KCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo JHByZXZldmVudCAhPSAkZXYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cGhl YWRlcltdID0gJyNAJyAuICRldjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvZGVibG9jayBhcyAkY29kZSA9PiAkZGF0 YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkaWR4ID09IDAgJiYgJGNo b3Nlbl9sYW5nKSB8fCAoJGlkeCA+IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJHRwaGVhZGVyW10gPSAnI0BsYW5ndWFnZSAnIC4gJGNvZGU7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj aCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gRG9uJ3Qgb3V0cHV0IGVtcHR5IHN0cmluZ3MuCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCR2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJHRwc3RyaW5nc1tdID0gJGtleSAuICcgPT4gJyAuICR2YWw7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHBzdHJpbmdzKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRwb3V0ID0gYXJyYXlfbWVyZ2UoJHRwb3V0 LCAkdHBoZWFkZXIsICR0cHN0cmluZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4g aW1wbG9kZShuLCAkdHBvdXQpOwogICAgfQoKICAgIC8qKgogICAgICogUmVhZCB0ZXh0cGFj ayBzdHJpbmdzIHdpdGggdGhlIGdpdmVuIHByZWZpeCBmcm9tIHRoZSBkYXRhYmFzZS4KICAg ICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbGFuZyAgIExhbmd1YWdlIG9mIHN0cmluZ3Mg dG8gZmV0Y2gKICAgICAqIEBwYXJhbSAgc3RyaW5nICRwcmVmaXggUHJlZml4IHRvIGZpbmQK ICAgICAqIEByZXR1cm4gYXJyYXkgICAgICAgICAgUmVjb3JkIHNldCBvZiBtYXRjaGluZyBz dHJpbmdzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXh0cGFja19ncmFiKCRsYW5n LCAkcHJlZml4KQogICAgewogICAgICAgIGlmICgkbGFuZyA9PT0gJ0lFRF9BTEwnKSB7CiAg ICAgICAgICAgICRsYW5nX3F1ZXJ5ID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgJGxhbmcgPSAoZW1wdHkoJGxhbmcpKSA/IGdldF9wcmVmKCdsYW5ndWFnZScsICdlbi1n YicpIDogJGxhbmc7CiAgICAgICAgICAgICRsYW5ncyA9IHF1b3RlX2xpc3QoZG9fbGlzdCgk bGFuZykpOwogICAgICAgICAgICAkbGFuZ19xdWVyeSA9ICJsYW5nIElOICgiLmltcGxvZGUo JywgJywgJGxhbmdzKS4iKSBBTkQgIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoJHBy ZWZpeCkgPyBzYWZlX3Jvd3MoJ25hbWUsIGRhdGEsIGxhbmcsIGV2ZW50JywgJ3R4cF9sYW5n JywgJGxhbmdfcXVlcnkuIm5hbWUgTElLRSAnIi5kb1NsYXNoKCRwcmVmaXgpLiIlJyBPUkRF UiBCWSBldmVudCxsYW5nLG5hbWUiKSA6IGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAg KiBTZXQgdGhlIGN1cnJlbnQgVGV4dHBhY2sgbGFuZ3VhZ2UgZnJvbSB3aGljaCB0byBkaXNw bGF5IHN0cmluZ3MgaW4gdGhlIGludGVyZmFjZS4KICAgICAqCiAgICAgKiBSZXF1aXJlcyBQ T1NUIHZhcmlhYmxlOgogICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3RwX2xhbmdzZWwgIFRo ZSBsYW5ndWFnZSBuYW1lIHRvIHNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFu Z19zZXQoKQogICAgewogICAgICAgICRzZWwgPSBkb1NsYXNoKGdwcygnaWVkX3RwX2xhbmdz ZWwnKSk7CiAgICAgICAgc2V0X3ByZWYoJ2llZF9wbHVnaW5fbGFuZ19zZWxlY3RlZCcsICRz ZWwsICdpZWRfcGx1Z2luJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9Q UklWQVRFKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3JlIHRoZSBwbHVnaW4gdGV4dHBh Y2sgcHJlZml4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsdWduYW1lIFBsdWdp biBuYW1lIHRvIHN0b3JlIChpZiBvbWl0dGVkLCB0cmllcyBHRVQvUE9TVCBmb3IgJ3BsdWdp bicpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwZnggICAgICBQcmVmaXggdG8gc3RvcmUgKGlm IG9taXR0ZWQsIHRyaWVzIEdFVC9QT1NUIGZvciAncHJlZml4JykKICAgICAqLwogICAgcHVi bGljIGZ1bmN0aW9uIHNldF90cF9wcmVmaXgoJHBsdWduYW1lID0gJycsICRwZnggPSAnJykK ICAgIHsKICAgICAgICAkcGx1Z25hbWUgPSAoJHBsdWduYW1lKSA/ICRwbHVnbmFtZSA6IGdw cygncGx1Z2luJyk7CiAgICAgICAgJHBmeCA9ICgkcGZ4KSA/ICRwZnggOiBncHMoJ3ByZWZp eCcpOwoKICAgICAgICBpZiAoJHBmeCkgewogICAgICAgICAgICAkY3Vycl9wZnggPSB1bnNl cmlhbGl6ZShnZXRfcHJlZignaWVkX3BsdWdpbl90cF9wcmVmaXgnKSk7CiAgICAgICAgICAg ICRjdXJyX3BmeFskcGx1Z25hbWVdID0gJHBmeDsKICAgICAgICAgICAgc2V0X3ByZWYoJ2ll ZF9wbHVnaW5fdHBfcHJlZml4Jywgc2VyaWFsaXplKCRjdXJyX3BmeCksICdpZWRfcGx1Z2lu JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7CiAgICAgICAgfQogICAgfQoKICAgIC8q KgogICAgICogQUpBWDogUmV0dXJuIGEgVGV4dHBhY2sgc3RyaW5nIGZyb20gYSAodHlwZSA0 IG9yIDUpIHBsdWdpbiBnVHh0KCkgZnVuY3Rpb24vbWV0aG9kLgogICAgICoKICAgICAqIEdp dmVuIGEgZnVuY3Rpb24gbmFtZSAodXN1YWxseSAnYWJjX3BsdWdpbl9nVHh0JykgaXQgY2Fs bHMgdGhlIGZ1bmN0aW9uCiAgICAgKiB0byBmZXRjaCB0aGUgZ2l2ZW4gc3RyaW5nIGZyb20g dGhlIHBsdWdpbi4gQnkgY2FsbGluZyB0aGlzIHJlcGVhdGVkbHkKICAgICAqIG9yIGVhY2gg c3RyaW5nLCBhbiBlbnRpcmUgVGV4dHBhY2sgY2FuIGJlIGJ1aWx0IGZyb20gc3RyaW5ncyB0 aGF0IHdlcmUKICAgICAqIHByZXZpb3VzbHkgaGFyZC1jb2RlZCBpbiBvbGQgcGx1Z2lucy4K ICAgICAqCiAgICAgKiBOb3RlIHRoZSBkZXN0aW5hdGlvbiBwbHVnaW4gTVVTVCBiZSBvZiB0 eXBlIDQgb3IgNSBpbiBvcmRlciBmb3IgdGhlCiAgICAgKiBmdW5jdGlvbiB0byBiZSBjYWxs YWJsZSBzbyB5b3UgbWF5IGhhdmUgdG8gKHRlbXBvcmFyaWx5KSBhbHRlciB0aGUKICAgICAq IHBsdWdpbiB0eXBlIGJlZm9yZSB1c2luZyB0aGlzIGZlYXR1cmUuCiAgICAgKgogICAgICog UmVxdWlyZXMgUE9TVCB2YXJpYWJsZXM6CiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBf Zm4gIFRoZSBmdW5jdGlvbiB0byBjYWxsCiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBf bGJsIFRoZSBsYW5ndWFnZSBsYWJlbCAoa2V5KQogICAgICogQHJldHVybiBhcnJheSAgICAg ICAgICAgICBKU09OIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBzdHJpbmcncyB2YWx1ZQog ICAgICogQHRvZG8gc2FuaXRpemUgJGZuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0 ZXh0cGFja19sb2FkKCkKICAgIHsKICAgICAgICAkZm4gPSBkb1NsYXNoKGdwcygnaWVkX3Rw X2ZuJykpOwogICAgICAgICRsYmwgPSBkb1NsYXNoKGdwcygnaWVkX3RwX2xibCcpKTsKICAg ICAgICAkcmV0ID0gJyc7CgogICAgICAgICRmbnBhcnRzID0gZG9fbGlzdCgkZm4sICc6Oicp OwogICAgICAgIGlmIChjb3VudCgkZm5wYXJ0cykgPT0gMikgewogICAgICAgICAgICAvLyBD YWxsYWJsZSBjbGFzcyAtPiBtZXRob2QKICAgICAgICAgICAgJGZvYmogPSBhcnJheSgkZm5w YXJ0c1swXSwgJGZucGFydHNbMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRm b2JqID0gJGZucGFydHNbMF07CiAgICAgICAgfQogICAgICAgIGlmIChpc19jYWxsYWJsZSgk Zm9iaikpIHsKICAgICAgICAgICAgJHJldCA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCRmb2Jq LCBhcnJheSgkbGJsKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJldCkgewogICAgICAg ICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdpZWRfcGx1Z2luX3RwX3N0cmluZycgPT4g JHJldCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFKQVg6IERlbGV0ZSBh IFRleHRwYWNrIHN0cmluZyBmcm9tIHRoZSBkYXRhYmFzZS4KICAgICAqCiAgICAgKiBSZXF1 aXJlcyBQT1NUIHZhcmlhYmxlOgogICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3RwX2xibCBU aGUgbGFuZ3VhZ2UgbGFiZWwgKGtleSkgdG8gZGVsZXRlCiAgICAgKi8KICAgIHB1YmxpYyBm dW5jdGlvbiB0ZXh0cGFja19kZWwoKQogICAgewogICAgICAgICRsYmwgPSBkb1NsYXNoKGdw cygnaWVkX3RwX2xibCcpKTsKCiAgICAgICAgJHJldCA9IHNhZmVfZGVsZXRlKCd0eHBfbGFu ZycsICJuYW1lPSckbGJsJyIpOwogICAgfQoKICAgIC8qKgogICAgICogQUpBWDogc2F2ZSBh IFRleHRwYWNrIHN0cmluZyB0byB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogUmVxdWly ZXMgUE9TVCB2YXJpYWJsZXM6CiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbGJsIFRo ZSBsYW5ndWFnZSBsYWJlbCAoa2V5KQogICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3RwX3N0 ciBUaGUgZGF0YSB2YWx1ZSB0byBzdG9yZQogICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3Rw X2xuZyBEZXNpcmVkIGxhbmd1YWdlIG9mIHN0cmluZwogICAgICogIHBhcmFtICBzdHJpbmcg aWVkX3RwX2V2dCBFdmVudCAoZ3JvdXApIHRoYXQgdGhlIHN0cmluZyBiZWxvbmdzIGluCiAg ICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXh0cGFja19zYXZlKCkKICAgIHsKICAgICAg ICBnbG9iYWwgJERCOwoKICAgICAgICAkbGJsID0gZG9TbGFzaChncHMoJ2llZF90cF9sYmwn KSk7CiAgICAgICAgJHN0ciA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfc3RyJykpOwogICAgICAg ICRsbmcgPSBkb1NsYXNoKGdwcygnaWVkX3RwX2xuZycpKTsKICAgICAgICAkZXZ0ID0gZG9T bGFzaChncHMoJ2llZF90cF9ldnQnKSk7CiAgICAgICAgJG93biA9IGRvU2xhc2goZ3BzKCdp ZWRfdHBfb3duJykpOwoKICAgICAgICAkd2hlcmUgPSAibmFtZT0nJGxibCcgQU5EIGxhbmc9 JyRsbmcnIjsKICAgICAgICAkcmV0ID0gc2FmZV91cGRhdGUoJ3R4cF9sYW5nJywgImRhdGE9 JyRzdHInLCBldmVudD0nJGV2dCcsIG93bmVyPSckb3duJyIsICR3aGVyZSk7CgogICAgICAg IGlmICgkcmV0ICYmIChteXNxbGlfYWZmZWN0ZWRfcm93cygkREItPmxpbmspIHx8IHNhZmVf Y291bnQoJ3R4cF9sYW5nJywgJHdoZXJlKSkpIHsKICAgICAgICAgICAgLy8gVXBkYXRlIE9L OiBkbyBub3RoaW5nIGVsc2UuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJldCA9 IHNhZmVfaW5zZXJ0KCd0eHBfbGFuZycsICJuYW1lPSckbGJsJywgbGFuZz0nJGxuZycsIGV2 ZW50PSckZXZ0Jywgb3duZXI9JyRvd24nLCBkYXRhPSckc3RyJyIpOwogICAgICAgIH0KICAg IH0KCiAgICAvKioKICAgICAqIEFKQVg6IEZldGNoIGEgVGV4dHBhY2sgc3RyaW5nIGZyb20g dGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIFJlcXVpcmVzIFBPU1QgdmFyaWFibGVzOgog ICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3RwX2xibCAgVGhlIGxhbmd1YWdlIGxhYmVsIChr ZXkpCiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbG5nICBMYW5ndWFnZSBvZiBzdHJp bmcgdG8gZmV0Y2gKICAgICAqICBwYXJhbSAgc3RyaW5nIGllZF90cF9kZmx0IERlZmF1bHQg bGFuZ3VhZ2UgdG8gZmV0Y2ggc3RyaW5nIGlmIG1haW4gbGFuZyBtaXNzaW5nCiAgICAgKiBA cmV0dXJuIGFycmF5ICAgICAgICAgICAgICBKU09OIHJlc3BvbnNlCiAgICAgKi8KICAgIHB1 YmxpYyBmdW5jdGlvbiB0ZXh0cGFja19nZXQoKQogICAgewogICAgICAgICRsYmwgPSBkb1Ns YXNoKGdwcygnaWVkX3RwX2xibCcpKTsKICAgICAgICAkbG5nID0gZG9TbGFzaChncHMoJ2ll ZF90cF9sbmcnKSk7CiAgICAgICAgJGRmbHQgPSBkb1NsYXNoKGdwcygnaWVkX3RwX2RmbHQn KSk7CgogICAgICAgICRycyA9IHNhZmVfcm93cygnbGFuZywgZGF0YScsICd0eHBfbGFuZycs ICJuYW1lPSckbGJsJyBBTkQgKGxhbmc9JyRsbmcnIE9SIGxhbmc9JyRkZmx0JykiKTsKICAg ICAgICAkb3V0ID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsK ICAgICAgICAgICAgaWYgKCgkcm93WydsYW5nJ10gPT0gJGRmbHQpICYmICgkbG5nICE9ICRk Zmx0KSkgewogICAgICAgICAgICAgICAgJG91dFsnaWVkX3BsdWdpbl90cF9kZmx0J10gPSAk cm93WydkYXRhJ107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkb3V0 WydpZWRfcGx1Z2luX3RwX3N0cmluZyddID0gJHJvd1snZGF0YSddOwogICAgICAgICAgICB9 CiAgICAgICAgfQoKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRvdXQpOwogICAgfQoKICAg IC8qKgogICAgICogQUpBWDogU2F2ZSBqdXN0IHRoZSBwbHVnaW4gY29kZSwgb3B0aW9uYWxs eSBjaGVja2luZyBzeW50YXguCiAgICAgKgogICAgICogUmVxdWlyZXMgUE9TVCB2YXJpYWJs ZXM6CiAgICAgKiAgcGFyYW0gIHN0cmluZyBwbHVnaW4gICAgTmFtZSBvZiBwbHVnaW4gdG8g c2F2ZSBhZ2FpbnN0CiAgICAgKiAgcGFyYW0gIHN0cmluZyBjb2RlYmxvY2sgUEhQIGNvZGUK ICAgICAqIEByZXR1cm4gYXJyYXkgICAgICAgICAgICBYTUwgcmVzcG9uc2UKICAgICAqLwog ICAgcHVibGljIGZ1bmN0aW9uIGNvZGVfc2F2ZSgpCiAgICB7CiAgICAgICAgZ2xvYmFsICR0 aGVtZTsKCiAgICAgICAgJHN5bnRheF9jaGVjayA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX3N5 bnRheF9jaGVjaycpOwoKICAgICAgICAkcGx1ZyA9IGRvU2xhc2gocHMoJ3BsdWdpbicpKTsK ICAgICAgICAkY29kZSA9IHBzKCdjb2RlYmxvY2snKTsKCiAgICAgICAgJHJldCA9ICgkc3lu dGF4X2NoZWNrKSA/ICR0aGlzLT5jaGVja19zeW50YXhfZXJyKCRjb2RlKSA6IGZhbHNlOwog ICAgICAgICRtc2cgPSAnJzsKCiAgICAgICAgaWYgKCRyZXQgPT09IGZhbHNlKSB7CiAgICAg ICAgICAgICRyZXQgPSBAc2FmZV91cGRhdGUoJ3R4cF9wbHVnaW4nLCAiY29kZT0nIi5kb1Ns YXNoKCRjb2RlKS4iJyIsICJuYW1lPSckcGx1ZyciKTsKICAgICAgICAgICAgaWYgKCRyZXQp IHsKICAgICAgICAgICAgICAgICRtc2cgPSAkdGhlbWUtPmFubm91bmNlX2FzeW5jKGdUeHQo J2llZF9wbHVnaW5fY29kZV9zYXZlZCcpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICRtc2cgPSAkdGhlbWUtPmFubm91bmNlX2FzeW5jKGFycmF5KGdUeHQoJ2ll ZF9wbHVnaW5fY29kZV9zYXZlZF9mYWlsJyksIEVfRVJST1IpKTsKICAgICAgICAgICAgfQog ICAgICAgICAgICBzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaWVkX3BsdWdpbl9tc2cnID0+ ICRtc2cpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbXNnID0gJHRoZW1lLT5h bm5vdW5jZV9hc3luYyhhcnJheShodG1sZW50aXRpZXMoJHJldFswXSwgRU5UX1FVT1RFUyks IEVfRVJST1IpKTsKICAgICAgICAgICAgc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ2h0dHAt c3RhdHVzJyA9PiAnNDEyIFByZWNvbmRpdGlvbiBGYWlsZWQnLCAnaWVkX3BsdWdpbl9tc2cn ID0+ICRtc2csICdpZWRfcGx1Z2luX2Vycl9saW5lJyA9PiAkcmV0WzFdKSk7CiAgICAgICAg fQogICAgfQoKICAgIC8qKgogICAgICogQUpBWDogU2F2ZSBqdXN0IHRoZSBwbHVnaW4gbWV0 YWRhdGEuCiAgICAgKgogICAgICogUmVxdWlyZXMgUE9TVCB2YXJpYWJsZXM6CiAgICAgKiAg cGFyYW0gIHN0cmluZyBwbHVnaW4gTmFtZSBvZiBwbHVnaW4gdG8gc2F2ZSBhZ2FpbnN0CiAg ICAgKiAgcGFyYW0gIGFycmF5ICBkYXRhICAgTmFtZS12YWx1ZSBwYWlycyB0byBzdG9yZQog ICAgICogQHJldHVybiBhcnJheSAgICAgICAgIFhNTCByZXNwb25zZQogICAgICovCiAgICBw dWJsaWMgZnVuY3Rpb24gbWV0YV9zYXZlKCkgewogICAgICAgIGdsb2JhbCAkdGhlbWU7Cgog ICAgICAgICRpZWRfcGx1Z2luX3ByZWZzID0gJHRoaXMtPmdldF9wcmVmcygpOwoKICAgICAg ICAkcGx1ZyA9IGRvU2xhc2gocHMoJ3BsdWdpbicpKTsKICAgICAgICAkZGF0YSA9IHBzKCdk YXRhJyk7CiAgICAgICAgJG1zZyA9ICcnOwogICAgICAgICRtZXRhID0gYXJyYXkoKTsKCiAg ICAgICAgLy8gRGVmYXVsdHMgcmVxdWlyZWQgYmVjYXVzZSBIVE1MIGZvcm1zIGRvbid0IHBv c3QgdW5jaGVja2VkIGl0ZW1zLgogICAgICAgICRzZXQgPSBhcnJheSgKICAgICAgICAgICAg J2ZsYWdzJyAgPT4gImZsYWdzPScwJyIsCiAgICAgICAgICAgICdzdGF0dXMnID0+ICJzdGF0 dXM9JzAnIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtl eSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgc3dpdGNoICgka2V5KSB7CiAgICAgICAgICAg ICAgICBjYXNlICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAgICAgICBjYXNlICd2ZXJzaW9u JzoKICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcic6CiAgICAgICAgICAgICAgICBjYXNl ICdhdXRob3JfdXJpJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3R5cGUnOgogICAgICAgICAg ICAgICAgY2FzZSAnbG9hZF9vcmRlcic6CiAgICAgICAgICAgICAgICAgICAgJHNldFska2V5 XSA9ICRrZXkgLiAiPSciLmRvU2xhc2goJHZhbHVlKS4iJyI7CiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduZXduYW1lJzoKICAgICAgICAgICAg ICAgICAgICAkdmFsID0gZG9TbGFzaCgkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICRz ZXRbJ25hbWUnXSA9ICJuYW1lPSciLiR2YWwuIiciOwogICAgICAgICAgICAgICAgICAgICRt ZXRhWyduYW1lJ10gPSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnc3RhdHVzJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2ZsYWdzJzoK ICAgICAgICAgICAgICAgICAgICAkcGFydCA9IGFycmF5KCk7CgogICAgICAgICAgICAgICAg ICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIWlzc2V0KCRwYXJ0WyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgJHBhcnRbJGtleV0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAkcGFydFska2V5XSArPSAkaXRlbTsKICAgICAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0IGFzICRpZHggPT4g JHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2V0WyRpZHhdID0gJGlkeCAuICI9 JyIgLiBkb1NsYXNoKCR2YWwpLiInIjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAk dXBkYXRlID0gaW1wbG9kZSgnLCcsICRzZXQpOwogICAgICAgICRyZXQgPSBzYWZlX3VwZGF0 ZSgndHhwX3BsdWdpbicsICR1cGRhdGUsICJuYW1lPSckcGx1ZyciKTsKCiAgICAgICAgaWYg KCRyZXQpIHsKICAgICAgICAgICAgJG1zZyA9ICR0aGVtZS0+YW5ub3VuY2VfYXN5bmMoZ1R4 dCgnaWVkX3BsdWdpbl9tZXRhX3NhdmVkJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICRtc2cgPSAkdGhlbWUtPmFubm91bmNlX2FzeW5jKGFycmF5KGdUeHQoJ2llZF9wbHVn aW5fbWV0YV9zYXZlZF9mYWlsJyksIEVfRVJST1IpKTsKICAgICAgICB9CgogICAgICAgIHNl bmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdpZWRfcGx1Z2luX21zZycgPT4gJG1zZykpOwogICAg fQoKICAgIC8qKgogICAgICogQ2hlY2sgdGhlIHN5bnRheCBvZiBzb21lIFBIUCBjb2RlLgog ICAgICoKICAgICAqIE1vc3RseSBmcm9tIGEgY29tbWVudCBpbiBodHRwOi8vcGhwLm5ldC9t YW51YWwvZW4vZnVuY3Rpb24ucGhwLWNoZWNrLXN5bnRheC5waHAKICAgICAqCiAgICAgKiBA cGFyYW0gIHN0cmluZyAkY29kZSAgUEhQIGNvZGUgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJu IGJvb2xlYW58YXJyYXkgSWYgZmFsc2UsIHRoZW4gY2hlY2sgd2FzIHN1Y2Nlc3NmdWwsIG90 aGVyd2lzZSBhbiBhcnJheShtZXNzYWdlLGxpbmUpIG9mIGVycm9ycyBpcyByZXR1cm5lZC4K ICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3N5bnRheF9lcnIoJGNvZGUpCiAg ICB7CiAgICAgICAgaWYgKCFkZWZpbmVkKCdDUicpKSBkZWZpbmUoJ0NSJyxjaHIoMTMpKTsK ICAgICAgICBpZiAoIWRlZmluZWQoJ0xGJykpIGRlZmluZSgnTEYnLGNocigxMCkpOwoKICAg ICAgICAkYnJhY2VzPTA7CiAgICAgICAgJGluU3RyaW5nPTA7CgogICAgICAgIGZvcmVhY2gg KHRva2VuX2dldF9hbGwoJzw/cGhwICcgLiAkY29kZSkgYXMgJHRva2VuKSB7CiAgICAgICAg ICAgIGlmIChpc19hcnJheSgkdG9rZW4pKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0 b2tlblswXSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgVF9DVVJMWV9PUEVOOgogICAg ICAgICAgICAgICAgICAgIGNhc2UgVF9ET0xMQVJfT1BFTl9DVVJMWV9CUkFDRVM6CiAgICAg ICAgICAgICAgICAgICAgY2FzZSBUX1NUQVJUX0hFUkVET0M6ICsrJGluU3RyaW5nOyBicmVh azsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRfRU5EX0hFUkVET0M6ICAgLS0kaW5TdHJp bmc7IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJGlu U3RyaW5nICYgMSkgewogICAgICAgICAgICAgICAgc3dpdGNoICgkdG9rZW4pIHsKICAgICAg ICAgICAgICAgICAgICBjYXNlICdgJzogY2FzZSAnXCcnOgogICAgICAgICAgICAgICAgICAg IGNhc2UgJyInOiAtLSRpblN0cmluZzsgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0b2tlbikgewogICAg ICAgICAgICAgICAgICAgIGNhc2UgJ2AnOiBjYXNlICdcJyc6CiAgICAgICAgICAgICAgICAg ICAgY2FzZSAnIic6ICsrJGluU3RyaW5nOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBj YXNlICd7JzogKyskYnJhY2VzOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd9 JzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpblN0cmluZykgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLS0kaW5TdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSRicmFjZXM7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGJyYWNlcyA8IDApIGJyZWFrIDI7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJGluU3Ry aW5nID0gQGluaV9zZXQoJ2xvZ19lcnJvcnMnLCBmYWxzZSk7CiAgICAgICAgJHRva2VuID0g QGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgdHJ1ZSk7CiAgICAgICAgb2Jfc3RhcnQoKTsK ICAgICAgICAkYnJhY2VzIHx8ICRjb2RlID0gImlmICgwKSB7eyRjb2RlfVxufSI7CiAgICAg ICAgaWYgKGV2YWwoJGNvZGUpID09PSBmYWxzZSkgewogICAgICAgICAgICBpZiAoJGJyYWNl cykgewogICAgICAgICAgICAgICAgJGJyYWNlcyA9IFBIUF9JTlRfTUFYOwogICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgZmFsc2UgIT09IHN0cnBvcygkY29kZSxDUikg JiYgJGNvZGUgPSBzdHJfcmVwbGFjZShDUixMRixzdHJfcmVwbGFjZShDUkxGLExGLCRjb2Rl KSk7CiAgICAgICAgICAgICAgICAkYnJhY2VzID0gc3Vic3RyX2NvdW50KCRjb2RlLExGKTsK ICAgICAgICAgICAgfQogICAgICAgICAgICAkY29kZSA9IG9iX2dldF9jbGVhbigpOwogICAg ICAgICAgICAkY29kZSA9IHN0cmlwX3RhZ3MoJGNvZGUpOwogICAgICAgICAgICBpZiAocHJl Z19tYXRjaCgiJ3N5bnRheCBlcnJvciwgKC4rKSBpbiAuKyBvbiBsaW5lIChcZCspJCdzIiwg JGNvZGUsICRjb2RlKSkgewogICAgICAgICAgICAgICAgJGNvZGVbMl0gPSAoaW50KSAkY29k ZVsyXTsKICAgICAgICAgICAgICAgICRjb2RlID0gJGNvZGVbMl0gPD0gJGJyYWNlcwogICAg ICAgICAgICAgICAgICAgID8gYXJyYXkoJGNvZGVbMV0sICRjb2RlWzJdKQogICAgICAgICAg ICAgICAgICAgIDogYXJyYXkoJ3VuZXhwZWN0ZWQgJGVuZCcgLiBzdWJzdHIoJGNvZGVbMV0s IDE0KSwgJGJyYWNlcyk7CiAgICAgICAgICAgIH0gZWxzZSAkY29kZSA9IGFycmF5KCdzeW50 YXggZXJyb3InLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvYl9lbmRfY2xl YW4oKTsKICAgICAgICAgICAgJGNvZGUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgQGlu aV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJHRva2VuKTsKICAgICAgICBAaW5pX3NldCgnbG9n X2Vycm9ycycsICRpblN0cmluZyk7CgogICAgICAgIHJldHVybiAkY29kZTsKICAgIH0KCiAg ICAvLyBSZWZsZWN0aW9uIHV0aWxpdHkgZm9yIHBocGRvYyBnZW5lcmF0aW9uCiAgICBwdWJs aWMgZnVuY3Rpb24gcmVmbHVuY3Rpb25fZmFjdG9yeSgkY2FsbGJhY2spCiAgICB7CiAgICAg ICAgaWYgKGlzX2FycmF5KCRjYWxsYmFjaykpIHsKICAgICAgICAgICAgLy8gbXVzdCBiZSBh IGNsYXNzIG1ldGhvZAogICAgICAgICAgICBsaXN0KCRjbGFzcywgJG1ldGhvZCkgPSAkY2Fs bGJhY2s7CgoKICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWZsZWN0aW9uTWV0aG9kKCRjbGFz cywgJG1ldGhvZCk7CiAgICAgICAgfQoKICAgICAgICAvLyBjbGFzczo6bWV0aG9kIHN5bnRh eAogICAgICAgIGlmIChpc19zdHJpbmcoJGNhbGxiYWNrKSAmJiBzdHJwb3MoJGNhbGxiYWNr LCAiOjoiKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgbGlzdCgkY2xhc3MsICRtZXRob2Qp ID0gZXhwbG9kZSgiOjoiLCAkY2FsbGJhY2spOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBS ZWZsZWN0aW9uTWV0aG9kKCRjbGFzcywgJG1ldGhvZCk7CiAgICAgICAgfQoKICAgICAgICAv LyBvYmplY3RzIGFzIGZ1bmN0aW9ucyAoUEhQIDUuMyspCiAgICAgICAgaWYgKHZlcnNpb25f Y29tcGFyZShQSFBfVkVSU0lPTiwgIjUuMy4wIiwgIj49IikgJiYgbWV0aG9kX2V4aXN0cygk Y2FsbGJhY2ssICJfX2ludm9rZSIpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVmbGVj dGlvbk1ldGhvZCgkY2FsbGJhY2ssICJfX2ludm9rZSIpOwogICAgICAgIH0KCiAgICAgICAg Ly8gYXNzdW1lIGl0J3MgYSBmdW5jdGlvbgogICAgICAgIHJldHVybiBuZXcgUmVmbGVjdGlv bkZ1bmN0aW9uKCRjYWxsYmFjayk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVy YXRlX3BocGRvYygpCiAgICB7CiAgICAgICAgJHBsdWcgPSBncHMoJ3BsdWdpbicpOwogICAg ICAgICRvYmogPSBncHMoJ2ZuJyk7CiAgICAgICAgJHJldCA9IGxvYWRfcGx1Z2luKCRwbHVn KTsKICAgICAgICBpZiAoJHJldCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg ICAgJG9iaiA9ICR0aGlzLT5yZWZsdW5jdGlvbl9mYWN0b3J5KCRvYmopOwogICAgICAgICAg ICAgICAgJG5hbWUgPSAkb2JqLT5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAkZG9jID0g JG9iai0+Z2V0RG9jQ29tbWVudCgpOwoKICAgICAgICAgICAgICAgIGlmICgkZG9jKSB7CiAg ICAgICAgICAgICAgICAgICAgLy9UT0RPOiBtYWtlIGxpc3Qgb2YgYWxsb3dlZCBkb2NibG9j ayB0YWdzIGEgcHJlZgogICAgICAgICAgICAgICAgICAgIC8vVE9ETzogcGFyc2UgZXhpc3Rp bmcgZG9jIGJsb2NrIGFuZCBhcHBlbmQgYW55IG5ldyB2YXJzL3BhcmFtcwogICAgICAgICAg ICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcvXHMqXCpccypcQChhYnN0cmFjdHxhY2Nlc3N8 YXV0aG9yfGNhdGVnb3J5fGNvcHlyaWdodHxkZXByZWNhdGVkfGV4YW1wbGV8ZmluYWx8Zmls ZXNvdXJjZXxnbG9iYWx8aWdub3JlfGludGVybmFsfGxpY2Vuc2V8bGlua3xtZXRob2R8bmFt ZXxwYWNrYWdlfHBhcmFtfHByb3BlcnR5fHJldHVybnxzZWV8c2luY2V8c3RhdGljfHN0YXRp Y3ZhcnxzdWJwYWNrYWdlfHRvZG98dHV0b3JpYWx8dXNlc3x2YXJ8dmVyc2lvbilccysoXHcr KVxzKyhcJFx3Kyg/Ojpcdyt8LT5cdyspKilccysoXFsoXCZ8XCt8YWJzdHJhY3R8ZmluYWx8 cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHN0YXRpYylcXSkqXHMrKC4qKS8nLCAkZG9jLCAk bWF0Y2hlcywgUFJFR19TRVRfT1JERVIpOwoKICAgICAgICAgICAgICAgICAgICAkdGFncyA9 IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVzaHVmZmxlIHRoZSBtYXRjaGVz IHRvIGluZGV4IG9uIFt0YWddW3Zhcl0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk bWF0Y2hlcyBhcyAkaWR4ID0+ICRkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRm dWwgPSBpc3NldCgkZGF0YVswXSkgPyAkZGF0YVswXSA6ICcnOwogICAgICAgICAgICAgICAg ICAgICAgICAkdGFnID0gaXNzZXQoJGRhdGFbMV0pID8gJGRhdGFbMV0gOiAnJzsKICAgICAg ICAgICAgICAgICAgICAgICAgJHR5cCA9IGlzc2V0KCRkYXRhWzJdKSA/ICRkYXRhWzJdIDog Jyc7CiAgICAgICAgICAgICAgICAgICAgICAgICR2YXIgPSBpc3NldCgkZGF0YVszXSkgPyAk ZGF0YVszXSA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkbW9kID0gaXNzZXQoJGRh dGFbNF0pID8gJGRhdGFbNF0gOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHRhZ3Nb JHRhZ11bJHZhcl0gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBl JyA9PiAkdHlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGwnID0+ICRmdWws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kJyAgPT4gJG1vZCwKICAgICAgICAg ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgJGZudHlwZSA9IGFycmF5KCdtZXRhJyA9PiBhcnJheSgp LCAndHlwZScgPT4gYXJyYXkoKSk7CgogICAgICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlz dHMoJG9iaiwgJ2lzQ29uc3RydWN0b3InKSkgewogICAgICAgICAgICAgICAgICAgIC8vIERl YWxpbmcgd2l0aCBhIGNsYXNzIG1ldGhvZAogICAgICAgICAgICAgICAgICAgIGlmICgkb2Jq LT5pc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZudHlwZVsn bWV0YSddW10gPSAnIFtjXSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgIGlmICgkb2JqLT5pc1B1YmxpYygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICRmbnR5cGVbJ21vZCddW10gPSAnW3B1YmxpY10nOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICBpZiAoJG9iai0+aXNQcml2YXRlKCkpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgJGZudHlwZVsnbW9kJ11bXSA9ICdbcHJpdmF0ZV0nOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoJG9iai0+aXNQcm90ZWN0 ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZm50eXBlWydtb2QnXVtdID0gJ1tw cm90ZWN0ZWRdJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg aWYgKCRvYmotPmlzQWJzdHJhY3QoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZm50 eXBlWydtb2QnXVtdID0gJ1thYnN0cmFjdF0nOwogICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICBpZiAoJG9iai0+aXNGaW5hbCgpKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICRmbnR5cGVbJ21vZCddW10gPSAnW2ZpbmFsXSc7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkb2JqLT5pc1N0YXRpYygpKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICRmbnR5cGVbJ21vZCddW10gPSAnW3N0YXRpY10nOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAkcGFyYW1zID0gJG9iai0+Z2V0UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgJHBh cmFtX2xpc3QgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgaWYgKCRwYXJhbXMgIT0gbnVs bCkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJHBhcmFtKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICRoYXNfZGZsdCA9IGZhbHNlOwogICAgICAgICAg ICAgICAgICAgICAgICAkdHlwZSA9ICdzdHJpbmcnOwoKICAgICAgICAgICAgICAgICAgICAg ICAgLy8gQ3J1ZGUgdHlwZSBjaGVja2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk cGFyYW0tPmlzRGVmYXVsdFZhbHVlQXZhaWxhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICRoYXNfZGZsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkZGZsdCA9ICRwYXJhbS0+Z2V0RGVmYXVsdFZhbHVlKCk7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGlzX2Jvb2woJGRmbHQpKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJHR5cGUgPSAnYm9vbGVhbic7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJGRmbHQgPSAkZGZsdCA/ICd0cnVlJyA6ICdmYWxzZSc7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfbnVsbCgkZGZsdCkpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAkZGZsdCA9ICdOVUxMJzsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZWlmICgkZGZsdCA9PSAoc3RyaW5nKSAoaW50KSAkZGZsdCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2ludGVnZXInOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRkZmx0ID09IChzdHJpbmcp IChmbG9hdCkgJGRmbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlw ZSA9ICdmbG9hdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNf bnVtZXJpYygkZGZsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlw ZSA9ICdudW1iZXInOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlz X2FycmF5KCRkZmx0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBl ID0gJ2FycmF5JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoICgkdHlwZSA9PSAnc3RyaW5nJyB8fCAkdHlwZSA9PSAn YXJyYXknKSAmJiBlbXB0eSgkZGZsdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJGRmbHQgPSAnZW1wdHknOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlaWYgKCR0eXBlID09ICdzdHJpbmcnICYmICRkZmx0ICE9ICdOVUxMJykgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICRkZmx0ID0gJyInLiRkZmx0LiciJzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAnQHBhcmFtJy50LiR0eXBlLnQuJyQnLiRw YXJhbS0+Z2V0TmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtLT5p c1Bhc3NlZEJ5UmVmZXJlbmNlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRp dGVtIC49ICcgWyZdJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoJHBhcmFtLT5hbGxvd3NOdWxsKCkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICRpdGVtIC49ICcgWytdJzsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSAuPSAoJGhhc19kZmx0KSA/IHQuJyhE ZWZhdWx0OiAnIC4kZGZsdC4gJyknIDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgJGl0 ZW0gLj0gdC4nUGFyYW0gZGVzY3JpcHRpb24nOwogICAgICAgICAgICAgICAgICAgICAgICAk cGFyYW1fbGlzdFtdID0gJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgICRmaW5hbCA9ICc8cHJlPic7CiAgICAgICAgICAg ICAgICAkZmluYWwgLj0gIi8qKiIuYnI7CiAgICAgICAgICAgICAgICAkZmluYWwgLj0gIiAq ICRuYW1lIiAuICgoIWVtcHR5KCRmbnR5cGVbJ21ldGEnXSkpID8gJGZudHlwZVsnbWV0YSdd IDogJycpIC50LiAoKCRmblR5cGVbJ21vZCddKSA/IGltcGxvZGUoJyAnLCAkZm5UeXBlWydt b2QnXSkuJyAnIDogJycpIC4gIkRlc2NyaXB0aW9uIi5icjsKICAgICAgICAgICAgICAgICRm aW5hbCAuPSAiICoiLmJyOwogICAgICAgICAgICAgICAgJGZpbmFsIC49ICIgKiBTdW1tYXJ5 IGdvZXMgaGVyZSIuYnI7CiAgICAgICAgICAgICAgICAkZmluYWwgLj0gIiAqIi5icjsKICAg ICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbV9saXN0IGFzICRpdGVtKSB7CiAgICAgICAg ICAgICAgICAgICAgJGZpbmFsIC49ICIgKiAiLiAkaXRlbS5icjsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICRmaW5hbCAuPSAiICovPC9wcmU+Ii5icjsKCiAgICAgICAg ICAgICAgICBzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaWVkX3BsdWdpbl9waHBkb2MnID0+ ICRmaW5hbCkpOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7CiAgICAg ICAgICAgICAgICBzZW5kX3htbF9yZXNwb25zZSggYXJyYXkoICdodHRwLXN0YXR1cycgPT4g JzUwMSBOb3QgSW1wbGVtZW50ZWQnLCAnZXJyb3JfbXNnJyA9PiAkZXgtPmdldE1lc3NhZ2Uo KSAuIGdUeHQoJ2llZF9wbHVnaW5fZm5fbm90X2V4aXN0JykgKSApOwogICAgICAgICAgICB9 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VuZF94bWxfcmVzcG9uc2UoYXJyYXko J2h0dHAtc3RhdHVzJyA9PiAnNDAwIEJhZCBSZXF1ZXN0JykpOwogICAgICAgIH0KCiAgICAv KiAgJGNsYXNzSW50ZXJmYWNlcz0kcmVmbGVjdGlvbi0+Z2V0SW50ZXJmYWNlcygpOwogICAg ICAgIC8vZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcmZhY2VzCiAgICAgICAgaWYg KCRjbGFzc0ludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIGZ3cml0ZSgkaGYsIlxuPC9p Plx0PC90ZD48L3RyPlxuXHQ8dHI+Ii4KICAgICAgICAiPHRkIGFsaWduPVwiY2VudGVyXCIg Y29sc3Bhbj1cIjBcIj4iLgogICAgICAgICI8Zm9udCBmYWNlPVwiYXJpYWxcIiBzaXplPVwi MlwiIi4KICAgICAgICAiIGNvbG9yPVwicHVycGxlXCI+SW1wbGVtZW50ZWQiLgogICAgICAg ICIgaW50ZXJmYWNlczo8L3RkPjx0ZCBhbGlnbj1cImNlbnRlclwiIi4KICAgICAgICAiIGNv bHNwYW49XCIwXCI+PGZvbnQgZmFjZT1cImFyaWFsXCIiLgogICAgICAgICIgc2l6ZT1cIjJc IiBjb2xvcj1cImJsYWNrXCI+PGI+TmFtZTwvYj4iLgogICAgICAgICI8L2ZvbnQ+PC90ZD48 dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAgICAgICAgIiBjb2xzcGFuPVwiM1wiPjxmb250IGZh Y2U9XCJhcmlhbFwiIi4KICAgICAgICAiIHNpemU9XCIyXCIgY29sb3I9XCJibGFja1wiPjxi PiIuCiAgICAgICAgIkRlc2NyaXB0aW9uPC9iPjwvZm9udD48L3RkPjwvdHI+XG4iKTsKICAg ICAgICAgZm9yZWFjaCAoJGNsYXNzSW50ZXJmYWNlcyBhcyAkaW4pIHsKICAgICAgICAgICAg ZndyaXRlKCRoZiwiXHQ8dHI+PHRkPjwvdGQ+PHRkIGFsaWduPSIuCiAgICAgICAgICAgICJc ImNlbnRlclwiPiIpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCRpbi0+Z2V0TmFtZSgpKTsK ICAgICAgICAgICAgZndyaXRlKCRoZiwiPC90ZD48dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAg ICAgICAgICAgICIgY29sc3Bhbj1cIjNcIj48aT5cbiIpOwogICAgICAgICAgICBmd3JpdGUo JGhmLCRpbi0+Z2V0RG9jQ29tbWVudCgpKTsKICAgICAgICAgICAgZndyaXRlKCRoZiwiPC9p PjwvdGQ+PC90cj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgIH0KCiAgICAgICAgLy9n ZXQgdGhlIHN1cGVyY2xhc3MgaW5mb3JtYXRpb24KICAgICAgICAkc3VwZXJjbGFzcz0kcmVm bGVjdGlvbi0+Z2V0UGFyZW50Q2xhc3MoKTsKICAgICAgICBpZiAoJHN1cGVyY2xhc3MgIT0g bnVsbCkgewogICAgICAgICAgICBmd3JpdGUoJGhmLCJcdDx0cj48dGQgYWxpZ249XCJjZW50 ZXJcIiIuCiAgICAgICAgICAgICAiY29sc3Bhbj1cIjBcIj48Zm9udCBmYWNlPVwiYXJpYWxc IiIuCiAgICAgICAgICAgICAiIHNpemU9XCIyXCIgY29sb3I9XCJwdXJwbGVcIj4iLgogICAg ICAgICAgICAgIlRoZSBzdXBlcmNsYXNzIGlzOjwvdGQ+PHRkIi4KICAgICAgICAgICAgICIg YWxpZ249XCJjZW50ZXJcIiBjb2xzcGFuPVwiNFwiPiIuCiAgICAgICAgICAgICAiPGZvbnQg ZmFjZT1cImFyaWFsXCIgc2l6ZT1cIjJcIiIuCiAgICAgICAgICAgICAiIGNvbG9yPVwiYmxh Y2tcIj48Yj5cbiIpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCRzdXBlcmNsYXNzLT5nZXRO YW1lKCkpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCI8L2ZvbnQ+PC90ZD48L3RyPlxuIik7 CiAgICAgICAgICAgIH0KCiAgICAgICAgLy9nZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNv bnN0YW50cwogICAgICAgICRjb25zdGFudHM9JHJlZmxlY3Rpb24tPmdldENvbnN0YW50cygp OwogICAgICAgIGlmICgkY29uc3RhbnRzICE9IG51bGwpIHsKICAgICAgICAgICRjb25zdGFu dHNOdW1iZXI9Y291bnQoJGNvbnN0YW50cyk7CiAgICAgICAgICBmd3JpdGUoJGhmLCJcdDx0 cj48dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAgICAgICAgICAiIGNvbHNwYW49XCIwXCI+PGZv bnQgZmFjZT1cImFyaWFsXCIiLgogICAgICAgICAgIiBzaXplPVwiMlwiIGNvbG9yPVwicHVy cGxlXCI+Ii4KICAgICAgICAgICJDb25zdGFudHM6PC90ZD48dGQgYWxpZ249XCJjZW50ZXJc IiIuCiAgICAgICAgICAiIGNvbHNwYW49XCIwXCI+PGZvbnQgZmFjZT1cImFyaWFsXCIiLgog ICAgICAgICAgIiBzaXplPVwiMlwiIGNvbG9yPVwiYmxhY2tcIj48Yj5OYW1lPC9iPiIuCiAg ICAgICAgICAiPC9mb250PjwvdGQ+PHRkIGFsaWduPVwiY2VudGVyXCIiLgogICAgICAgICAg IiBjb2xzcGFuPVwiM1wiPjxmb250IGZhY2U9XCJhcmlhbFwiIi4KICAgICAgICAgICIgc2l6 ZT1cIjJcIiBjb2xvcj1cImJsYWNrXCI+PGI+VmFsdWU8L2I+Ii4KICAgICAgICAgICI8L2Zv bnQ+PC90ZD48L3RyPlxuIik7CiAgICAgICAgICBmb3JlYWNoICgkY29uc3RhbnRzIGFzICRr ZXlzPT4kdmFsdWUpIHsKICAgICAgICAgICAgZndyaXRlKCRoZiwiXHQ8dHI+PHRkPjwvdGQ+ PHRkIi4KICAgICAgICAgICAgIiBhbGlnbj1cImNlbnRlclwiPiIpOwogICAgICAgICAgICBm d3JpdGUoJGhmLCRrZXlzKTsKICAgICAgICAgICAgZndyaXRlKCRoZiwiPC90ZD48dGQgYWxp Z249XCJjZW50ZXJcIiIuCiAgICAgICAgICAgICIgY29sc3Bhbj1cIjNcIj4iKTsKICAgICAg ICAgICAgZndyaXRlKCRoZiwkdmFsdWUpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCI8L3Rk PjwvdHI+XG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAvL2dldCBp bmZvcm1hdGlvbiBhYm91dCBwcm9wZXJ0aWVzCiAgICAgICAgJHByb3BlcnRpZXM9JHJlZmxl Y3Rpb24tPmdldFByb3BlcnRpZXMoKTsKICAgICAgICBpZiAoJHByb3BlcnRpZXMgIT0gbnVs bCkgewogICAgICAgICAgZndyaXRlKCRoZiwiXHQ8dHI+PHRkIGFsaWduPVwiY2VudGVyXCIi LgogICAgICAgICAgIiBjb2xzcGFuPVwiMFwiPjxmb250IGZhY2U9XCJhcmlhbFwiIi4KICAg ICAgICAgICIgc2l6ZT1cIjJcIiBjb2xvcj1cInB1cnBsZVwiPiIuCiAgICAgICAgICAiUHJv cGVydGllczo8L3RkPjx0ZCBhbGlnbj1cImNlbnRlclwiIi4KICAgICAgICAgICIgY29sc3Bh bj1cIjBcIj48Zm9udCBmYWNlPVwiYXJpYWxcIiIuCiAgICAgICAgICAiIHNpemU9XCIyXCIg Y29sb3I9XCJibGFja1wiPjxiPk5hbWU8L2I+Ii4KICAgICAgICAgICI8L2ZvbnQ+PC90ZD48 dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAgICAgICAgICAiIGNvbHNwYW49XCIzXCI+PGZvbnQg ZmFjZT1cImFyaWFsXCIiLgogICAgICAgICAgIiBzaXplPVwiMlwiIGNvbG9yPVwiYmxhY2tc Ij48Yj4iLgogICAgICAgICAgIk1vZGlmaWVyczwvYj48L2ZvbnQ+PC90ZD48L3RyPlxuIik7 CiAgICAgICAgICBmb3JlYWNoICgkcHJvcGVydGllcyBhcyAkaW4pIHsKICAgICAgICAgICAg IGZ3cml0ZSgkaGYsIlx0PHRyPjx0ZD48L3RkPjx0ZCIuCiAgICAgICAgICAgICAiIGFsaWdu PVwiY2VudGVyXCIgY29sc3Bhbj1cIjBcIj4iKTsKICAgICAgICAgICAgIGZ3cml0ZSgkaGYs JGluLT5nZXROYW1lKCkpOwogICAgICAgICAgICAgZndyaXRlKCRoZiwiPC90ZD48dGQgYWxp Z249XCJjZW50ZXJcIiIuCiAgICAgICAgICAgICAiIGNvbHNwYW49XCIzXCI+Iik7CgogICAg ICAgICAgICAgaWYgKCRpbi0+aXNQdWJsaWMoKSkgeyBmd3JpdGUoJGhmLCJbcHVibGljXSIp OyB9CiAgICAgICAgICAgICBpZiAoJGluLT5pc1ByaXZhdGUoKSkgeyBmd3JpdGUoJGhmLCJb cHJpdmF0ZV0iKTsgfQogICAgICAgICAgICAgaWYgKCRpbi0+aXNQcm90ZWN0ZWQoKSkgeyBm d3JpdGUoJGhmLCJbcHJvdGVjdGVkXSIpOyB9CiAgICAgICAgICAgICBpZiAoJGluLT5pc1N0 YXRpYygpKSB7IGZ3cml0ZSgkaGYsIltzdGF0aWNdIik7IH0KICAgICAgICAgICAgIGZ3cml0 ZSgkaGYsIjwvdGQ+PC90cj5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAg Ki8KCiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBTZXR0 aW5ncyBmb3IgdGhlIHBsdWdpbgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9wcmVmcygpCiAg ICB7CiAgICAgICAgJHRlbXBkaXIgPSBnZXRfcHJlZigndGVtcGRpcicpOwoKICAgICAgICAk aWVkX3BjX3ByZWZzID0gYXJyYXkoCiAgICAgICAgICAgICdpZWRfcGx1Z2luX2VkaXRvcicg PT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAgID0+ICdpZWRfcGx1Z2luX2Nv ZGVfZWRpdG9ycycsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVO LAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMCwKICAgICAgICAgICAgICAgICdk ZWZhdWx0JyAgPT4gJ25vbmUnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVk X3BsdWdpbl9pZl9zZXR0aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRf cGx1Z2luX2VkaXRvcl9wYXRoJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICdodG1sJyAg ICAgPT4gJ3RleHRfaW5wdXQnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVG X0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMjAsCiAgICAgICAgICAg ICAgICAnZGVmYXVsdCcgID0+IGh1Lidqcy8nLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAg ICA9PiAnaWVkX3BsdWdpbl9pZl9zZXR0aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAg ICAgICdpZWRfcGx1Z2luX2VkaXRvcl9vcHRpb25zJyA9PiBhcnJheSgKICAgICAgICAgICAg ICAgICdodG1sJyAgICAgPT4gJ3RleHRhcmVhJywKICAgICAgICAgICAgICAgICd0eXBlJyAg ICAgPT4gUFJFRl9ISURERU4sCiAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDMwLAog ICAgICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAnJywKICAgICAgICAgICAgICAgICdncm91 cCcgICAgPT4gJ2llZF9wbHVnaW5faWZfc2V0dGluZ3MnLAogICAgICAgICAgICApLAogICAg ICAgICAgICAnaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnID0+IGFycmF5KAogICAgICAgICAg ICAgICAgJ2h0bWwnICAgICA9PiAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlw ZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiA0 MCwKICAgICAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJzkwJScsCiAgICAgICAgICAgICAg ICAnZ3JvdXAnICAgID0+ICdpZWRfcGx1Z2luX2lmX3NldHRpbmdzJywKICAgICAgICAgICAg KSwKICAgICAgICAgICAgJ2llZF9wbHVnaW5faGVscF9lZGl0b3InID0+IGFycmF5KAogICAg ICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAnaWVkX3BsdWdpbl9oZWxwX2VkaXRvcnMnLAog ICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAg ICAgICdwb3NpdGlvbicgPT4gNTAsCiAgICAgICAgICAgICAgICAnZGVmYXVsdCcgID0+ICd0 ZXh0aWxlJywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4gJ2llZF9wbHVnaW5faWZf c2V0dGluZ3MnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3BsdWdpbl9oZWxw X2VkaXRvcl9wYXRoJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICdodG1sJyAgICAgPT4g J3RleHRfaW5wdXQnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERF TiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gNjAsCiAgICAgICAgICAgICAgICAn ZGVmYXVsdCcgID0+IGh1Lidqcy8nLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAn aWVkX3BsdWdpbl9pZl9zZXR0aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdp ZWRfcGx1Z2luX2hlbHBfZWRpdG9yX29wdGlvbnMnID0+IGFycmF5KAogICAgICAgICAgICAg ICAgJ2h0bWwnICAgICA9PiAndGV4dGFyZWEnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAg ICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gNzAsCiAg ICAgICAgICAgICAgICAnZGVmYXVsdCcgID0+ICd0aGVtZV9hZHZhbmNlZF90b29sYmFyX2xv Y2F0aW9uIDogInRvcCIsCiAgICB0aGVtZV9hZHZhbmNlZF9idXR0b25zMSA6ICJib2xkLGl0 YWxpYyx1bmRlcmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29sb3IsYmFja2NvbG9yLHJlbW92 ZWZvcm1hdCxudW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRlbnQsanVzdGlmeWxlZnQsanVz dGlmeWNlbnRlcixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwiLAogICAgdGhlbWVfYWR2YW5j ZWRfYnV0dG9uczIgOiAibGluayx1bmxpbmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRv cixzZWFyY2gscmVwbGFjZSxzZXBhcmF0b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNv ZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVjdCIsCiAgICB0aGVtZV9hZHZhbmNlZF9idXR0b25z MyA6ICIiJywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4gJ2llZF9wbHVnaW5faWZf c2V0dGluZ3MnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3BsdWdpbl9pbnRl cmZhY2VfZWxlbXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAn Y2hlY2tib3hzZXQnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERF TiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gODAsCiAgICAgICAgICAgICAgICAn Y29udGVudCcgID0+IGFycmF5KCdkaXN0cmlidXRpb24nID0+ICdpZWRfcGx1Z2luX2lmX2Vs X2Rpc3QnLCAnc3R5bGUnID0+ICdpZWRfcGx1Z2luX2lmX2VsX3N0eWxlJyksCiAgICAgICAg ICAgICAgICAnZGVmYXVsdCcgID0+ICdzdHlsZScsCiAgICAgICAgICAgICAgICAnZ3JvdXAn ICAgID0+ICdpZWRfcGx1Z2luX2lmX3NldHRpbmdzJywKICAgICAgICAgICAgKSwKICAgICAg ICAgICAgJ2llZF9wbHVnaW5fbGlmZWN5Y2xlX29wdGlvbnMnID0+IGFycmF5KAogICAgICAg ICAgICAgICAgJ2h0bWwnICAgICA9PiAnY2hlY2tib3hzZXQnLAogICAgICAgICAgICAgICAg J3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicg PT4gOTAsCiAgICAgICAgICAgICAgICAnY29udGVudCcgID0+IGFycmF5KCdpbnN0YWxsZWQn ID0+ICdpZWRfcGx1Z2luX2xibF9sY19pbnN0YWxsJywgJ2VuYWJsZWQnID0+ICdpZWRfcGx1 Z2luX2xibF9sY19lbmFibGUnLCAnZGlzYWJsZWQnID0+ICdpZWRfcGx1Z2luX2xibF9sY19k aXNhYmxlJywgJ2RlbGV0ZWQnID0+ICdpZWRfcGx1Z2luX2xibF9sY19kZWxldGUnKSwKICAg ICAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJycsCiAgICAgICAgICAgICAgICAnZ3JvdXAn ICAgID0+ICdpZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAg J2llZF9wbHVnaW5fYXV0b19lbmFibGUnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0 bWwnICAgICA9PiAncmFkaW9zZXQnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQ UkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMTAwLAogICAgICAg ICAgICAgICAgJ2NvbnRlbnQnICA9PiBhcnJheSgnMCcgPT4gZ1R4dCgnbm8nKSwgJzEnID0+ IGdUeHQoJ3llcycpLCAnMicgPT4gZ1R4dCgnaWVkX3BsdWdpbl9zYW1lJykpLAogICAgICAg ICAgICAgICAgJ2RlZmF1bHQnICA9PiAnMicsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAg ID0+ICdpZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2ll ZF9wbHVnaW5fc3ludGF4X2NoZWNrJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICdodG1s JyAgICAgPT4gJ3llc25vcmFkaW8nLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQ UkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMTEwLAogICAgICAg ICAgICAgICAgJ2RlZmF1bHQnICA9PiAnMScsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAg ID0+ICdpZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2ll ZF9wbHVnaW5fbGFuZ19jaG9vc2UnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwn ICAgICA9PiAnaWVkX3BsdWdpbl9sYW5nX29wdGlvbnMnLAogICAgICAgICAgICAgICAgJ3R5 cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4g MTIwLAogICAgICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAnaW5zdGFsbGVkJywKICAgICAg ICAgICAgICAgICdncm91cCcgICAgPT4gJ2llZF9wbHVnaW5fcHJlZnMnLAogICAgICAgICAg ICApLAogICAgICAgICAgICAnaWVkX3BsdWdpbl9sYW5nX2RlZmF1bHQnID0+IGFycmF5KAog ICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAnaWVkX3BsdWdpbl9sYW5nX2RlZmF1bHQn LAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAg ICAgICAgICdwb3NpdGlvbicgPT4gMTMwLAogICAgICAgICAgICAgICAgJ2RlZmF1bHQnICA9 PiAnJywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4gJ2llZF9wbHVnaW5fcHJlZnMn LAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIn ID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAncmFkaW9zZXQnLAog ICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAg ICAgICdwb3NpdGlvbicgPT4gMTQwLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQnICA9PiBh cnJheSgnMCcgPT4gZ1R4dCgnaWVkX3BsdWdpbl9sYmxfb3BfY29kZV9maXJzdCcpLCAnMScg PT4gZ1R4dCgnaWVkX3BsdWdpbl9sYmxfb3BfaGVscF9maXJzdCcpKSwKICAgICAgICAgICAg ICAgICdkZWZhdWx0JyAgPT4gJzAnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAn aWVkX3BsdWdpbl9wcmVmcycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1 Z2luX291dHB1dF9zZmlsZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAg ID0+ICd0ZXh0X2lucHV0JywKICAgICAgICAgICAgICAgICd0eXBlJyAgICAgPT4gUFJFRl9I SURERU4sCiAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDE1MCwKICAgICAgICAgICAg ICAgICdkZWZhdWx0JyAgPT4gJ3tuYW1lfV92e3ZlcnNpb259LnR4dCcsCiAgICAgICAgICAg ICAgICAnZ3JvdXAnICAgID0+ICdpZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwK ICAgICAgICAgICAgJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYycgPT4gYXJyYXkoCiAgICAg ICAgICAgICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywKICAgICAgICAgICAgICAg ICd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4sCiAgICAgICAgICAgICAgICAncG9zaXRpb24n ID0+IDE2MCwKICAgICAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJ3tuYW1lfV92e3ZlcnNp b259X3ppcC50eHQnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdp bl9wcmVmcycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1Z2luX291dHB1 dF9zZmlsZXAnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAndGV4 dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAog ICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxNzAsCiAgICAgICAgICAgICAgICAnZGVm YXVsdCcgID0+ICd7bmFtZX1fdnt2ZXJzaW9ufS5waHAnLAogICAgICAgICAgICAgICAgJ2dy b3VwJyAgICA9PiAnaWVkX3BsdWdpbl9wcmVmcycsCiAgICAgICAgICAgICksCiAgICAgICAg ICAgICdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXQnID0+IGFycmF5KAogICAgICAgICAgICAg ICAgJ2h0bWwnICAgICA9PiAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlwZScg ICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxODAs CiAgICAgICAgICAgICAgICAnZGVmYXVsdCcgID0+ICd7bmFtZX1fdnt2ZXJzaW9ufV97bGFu Z31fdGV4dHBhY2sudHh0JywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4gJ2llZF9w bHVnaW5fcHJlZnMnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3BsdWdpbl9v dXRwdXRfdG1wY2FjaGUnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9 PiAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElE REVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxOTAsCiAgICAgICAgICAgICAg ICAnZGVmYXVsdCcgID0+ICR0ZW1wZGlyLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9 PiAnaWVkX3BsdWdpbl9wcmVmcycsCiAgICAgICAgICAgICksCiAgICAgICAgKTsKCiAgICAg ICAgcmV0dXJuICRpZWRfcGNfcHJlZnM7CiAgICB9Cn0KCi8qKgogKiBBZGQgcHJlZnMgY2Fs bGJhY2tzIHRvIGdsb2JhbCBzY29wZSwgc2luY2UgY3JlYXRlX3ByZWYoKSBjYW4ndCB0YWtl CiAqIGFycmF5L29iamVjdCBzeW50YXguCiAqCiAqIEBzZWUgIGh0dHA6Ly9mb3J1bS50ZXh0 cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9Mjk4MTg4I3AyOTgxODgKICovCmlmICh0 eHBpbnRlcmZhY2UgPT09ICdhZG1pbicpIHsKICAgIC8qKgogICAgICogTGlzdCBvZiBzdXBw b3J0ZWQgamF2YXNjcmlwdCBzeW50YXggaGlnaGxpZ2h0ZXIgLyBjb2RlIGVkaXRvcnMuCiAg ICAgKgogICAgICogTkI6IG5vIGkxOG4gc2luY2UgdGhlc2UgYXJlIHRoZSBuYW1lcyBvZiB0 aGUgcHJvamVjdHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUgUHJlZmVy ZW5jZSBuYW1lCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkdmFsICBDdXJyZW50IHByZWZlcmVu Y2UgdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgIEhUTUwKICAgICAqLwogICAg ZnVuY3Rpb24gaWVkX3BsdWdpbl9jb2RlX2VkaXRvcnMoJG5hbWUsICR2YWwgPSAnJykKICAg IHsKICAgICAgICAkZWRzWydub25lJ10gPSBnVHh0KCdub25lJyk7CiAgICAgICAgJGVkc1sn ZWRpdF9hcmVhJ10gPSAnRWRpdEFyZWEnOwogICAgICAgICRlZHNbJ2NvZGVtaXJyb3InXSA9 ICdDb2RlTWlycm9yJzsKICAgICAgICAkZWRzWydjb2RlcHJlc3MnXSA9ICdDb2RlUHJlc3Mn OwoKICAgICAgICByZXR1cm4gc2VsZWN0SW5wdXQoJG5hbWUsICRlZHMsICR2YWwsIGZhbHNl KTsKICAgIH0KCiAgICAvKioKICAgICAqIExpc3Qgb2Ygc3VwcG9ydGVkIGphdmFzY3JpcHQg aGVscCBlZGl0b3JzLgogICAgICoKICAgICAqIE5COiBubyBpMThuIHNpbmNlIHRoZXNlIGFy ZSB0aGUgbmFtZXMgb2YgdGhlIHByb2plY3RzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3Ry aW5nICRuYW1lIFByZWZlcmVuY2UgbmFtZQogICAgICogQHBhcmFtICBzdHJpbmcgJHZhbCAg Q3VycmVudCBwcmVmZXJlbmNlIHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICBI VE1MCiAgICAgKi8KICAgIGZ1bmN0aW9uIGllZF9wbHVnaW5faGVscF9lZGl0b3JzKCRuYW1l LCAkdmFsID0gJycpCiAgICB7CiAgICAgICAgJGVkc1sndGV4dGlsZWUnXSA9ICdUZXh0aWxl JzsKICAgICAgICAkZWRzWyd0aW55X21jZSddID0gJ1RpbnlNQ0UnOwoKICAgICAgICByZXR1 cm4gc2VsZWN0SW5wdXQoJG5hbWUsICRlZHMsICR2YWwsIGZhbHNlKTsKICAgIH0KCiAgICAv KioKICAgICAqIExpc3Qgb2YgbGFuZ3VhZ2Ugb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFy YW0gIHN0cmluZyAkbmFtZSBQcmVmZXJlbmNlIG5hbWUKICAgICAqIEBwYXJhbSAgc3RyaW5n ICR2YWwgIEN1cnJlbnQgcHJlZmVyZW5jZSB2YWx1ZQogICAgICogQHJldHVybiBzdHJpbmcg ICAgICAgSFRNTAogICAgICovCiAgICBmdW5jdGlvbiBpZWRfcGx1Z2luX2xhbmdfb3B0aW9u cygkbmFtZSwgJHZhbCA9ICcnKQogICAgewogICAgICAgICRsbmdzWydpbnN0YWxsZWQnXSA9 IGdUeHQoJ2llZF9wbHVnaW5fbGFuZ3NfaW5zdGFsbGVkJyk7CiAgICAgICAgJGxuZ3NbJ2Fs bCddID0gZ1R4dCgnaWVkX3BsdWdpbl9sYW5nc19hbGwnKTsKCiAgICAgICAgcmV0dXJuIHNl bGVjdElucHV0KCRuYW1lLCAkbG5ncywgJHZhbCwgZmFsc2UpOwogICAgfQoKICAgIC8qKgog ICAgICogQ29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLgogICAgICoKICAg ICAqIEBwYXJhbSAgc3RyaW5nICRuYW1lIFByZWZlcmVuY2UgbmFtZQogICAgICogQHBhcmFt ICBzdHJpbmcgJHZhbCAgQ3VycmVudCBwcmVmZXJlbmNlIHZhbHVlCiAgICAgKiBAcmV0dXJu IHN0cmluZyAgICAgICBIVE1MCiAgICAgKi8KICAgIGZ1bmN0aW9uIGllZF9wbHVnaW5fbGFu Z19kZWZhdWx0KCRuYW1lLCAkdmFsID0gJycpCiAgICB7CiAgICAgICAgJGxhbmdzID0gYXJy YXlfbWVyZ2UoYXJyYXkoJycgPT4gZ1R4dCgnaWVkX3BsdWdpbl9hbnknKSksIGllZF9wYzo6 bGFuZ19saXN0KCdhbGwnKSk7CgogICAgICAgIHJldHVybiBzZWxlY3RJbnB1dCgkbmFtZSwg JGxhbmdzLCAkdmFsLCBmYWxzZSk7CiAgICB9Cn0iO3M6NDoidHlwZSI7czoxOiI1IjtzOjU6 Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjM4Mzg1 OiI8aDE+UGx1Z2luIGNvbXBvc2VyPC9oMT4KCjxwPkNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRl ciB0aGUgPGk+RXh0ZW5zaW9uczwvaT4gdGFiIHdoZXJlIHlvdSBjYW4gZWRpdCBhbmQgZXhw b3J0IHBsdWdpbnMgdGhhdCBhcmUgYWxyZWFkeSBpbnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4s IGFzIHdlbGwgYXMgY3JlYXRlIG9yIHVwbG9hZCBuZXcgcGx1Z2lucyBjcmVhdGVkIGJ5IHRo ZSBjb21tdW5pdHkuPC9wPgoKPGgyPkZlYXR1cmVzPC9oMj4KCjx1bD4KCTxsaT5DcmVhdGUs IGVkaXQsIHVwbG9hZCBvciBpbnN0YWxsIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9u LCB0aGVuIHB1Ymxpc2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgVGV4dHBhdHRlcm4g cGx1Z2luIGZvcm1hdC48L2xpPgoJPGxpPkZ1bGwgc3VwcG9ydCBmb3IgdGhlIG9mZmljaWFs IHplbV90cGwucGhwIHBsdWdpbiB0ZW1wbGF0ZSBhbmQgdGhlIG1vZGlmaWVkICYjODIyMDtj b2RlIGZpcnN0JiM4MjIxOyB2ZXJzaW9uIGJ5IG5ldC1jYXJ2ZXIsIHdoaWNoIGFsc28gaW5j b3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4MjE3OyBzZWdtZW50IGZvciB5b3VyIGhlbHAg dGV4dCAoYWx0aG91Z2ggaXQgc2hvdWxkIGJlIHJhcmVseSBuZWVkZWQpLjwvbGk+Cgk8bGk+ T3B0aW9uYWwgc3ludGF4IGNoZWNrZXIgdG8gcHJvdGVjdCB0aGUgc2l0ZSAvIGFkbWluIHNp ZGUgZnJvbSBiYWQgY29kZS48L2xpPgoJPGxpPkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0 eSBvZiBmb3JtYXRzLCBhbGxvd2luZyB5b3UgdG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBp biB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3Jh bS4gWW91IGNhbiBleHBvcnQ6Cgk8dWw+CgkJPGxpPmEgc3RhbmRhcmQgQkFTRTY0LWVuY29k ZWQgdGV4dCBmaWxlLjwvbGk+CgkJPGxpPmEgZ3ppcHBlZCB2ZXJzaW9uICh1c2VmdWwgZm9y IGxhcmdlIHBsdWdpbnMpLjwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdC48L2xpPgoJCTxsaT5UZXh0cGFja3Mgb24gdGhlaXIgb3duICYj ODIxMjsgYW55IGNvbWJpbmF0aW9uIG9mIGxhbmd1YWdlcy48L2xpPgoJPC91bD48L2xpPgoJ PGxpPlN1cHBvcnQgZm9yIGFsbCBwbHVnaW4gdHlwZXM6IExpYnJhcnksIFB1YmxpYywgYW5k IEFkbWluICh3aXRoIG9yIHdpdGhvdXQgPHNwYW4gY2xhc3M9ImNhcHMiPkFKQVg8L3NwYW4+ KS48L2xpPgoJPGxpPlNwZWNpZnkgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBp ZiB5b3VyIHBsdWdpbiBuZWVkcyBzcGVjaWFsIHBvd2Vycy48L2xpPgoJPGxpPkRvY3VtZW50 YXRpb24gY2FuIGJlIHdyaXR0ZW4gaW4gVGV4dGlsZSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+ SFRNTDwvc3Bhbj4uPC9saT4KCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0i aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5U aW55TUNFIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZv ciB0aGUgaGVscCBzZWN0aW9uLCBvciBhIHZhcmlldHkgb2YgamF2YXNjcmlwdCBzeW50YXgg aGlnaGxpZ2h0ZXJzIC8gZWRpdG9ycyBmb3IgY29kZS4gU2VlIHRoZSA8YSBocmVmPSIjaWVk X3BsdWdpbl9zZXR1cCI+c2V0dXA8L2E+IHNlY3Rpb24gZm9yIG1vcmUgb24gdGhlIGF2YWls YWJsZSBlZGl0b3JzLjwvbGk+Cgk8bGk+QnVpbHQtaW4gVGV4dGlsZSBoZWxwIHZpZXdlciAo dGhhbmtzIHRvIG5ldC1jYXJ2ZXImIzgyMTc7cyBQbHVnaW4gSGVscCBWaWV3ZXIpIHRvIGFs bG93IHlvdSB0byBwcmV2aWV3IHlvdXIgSGVscCB0ZXh0IGR1cmluZyBkZXZlbG9wbWVudC48 L2xpPgoJPGxpPlNldCBhIGNvZGUgJiM4MjIwO3Jlc3RvcmUgcG9pbnQmIzgyMjE7IGFuZCBy b2xsIGJhY2sgdG8gdGhhdCBwb2ludCBpZiB0aGluZ3MgZ28gc2lkZXdheXMuIEFsc28gdXNl ZnVsIGZvciByZXR1cm5pbmcgcGx1Z2luIHNvdXJjZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxs ZWQgc3RhdGUuPC9saT4KPC91bD4KCjxoMj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlv bjwvaDI+Cgo8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjYu MCs8L3A+Cgo8cD5Eb3dubG9hZCB0aGUgcGx1Z2luICh2MC41IGFuZCBhYm92ZSkgZnJvbSA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vaWVkX3BsdWdpbl9jb21wb3NlciI+c3Rl ZmRhd3Nvbi5jb208L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIFRleHRwYXR0ZXJuJiM4MjE3 O3MgPGVtPkFkbWluLSZndDtQbHVnaW5zPC9lbT4gcGFnZSwgaW5zdGFsbCBhbmQgZW5hYmxl IHRoZSBwbHVnaW4uPC9wPgoKPHA+VGhlIGRlZmF1bHQgcHJlZmVyZW5jZXMgYXJlIGF1dG9t YXRpY2FsbHkgY3JlYXRlZCB3aGVuIHlvdSBpbnN0YWxsIHRoZSBwbHVnaW4gb3IgdmlzaXQg dGhlIHNldHVwIHNjcmVlbiwgYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+U2V0dXA8L3N0cm9u Zz4gYnV0dG9uIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIG9mIHRoZSA8ZW0+RXh0ZW5zaW9u cy0mZ3Q7UGx1Z2luIGNvbXBvc2VyPC9lbT4gcGFuZWwuIFNlZSB0aGUgPGEgaHJlZj0iI2ll ZF9wbHVnaW5fc2V0dXAiPnNldHVwIHNlY3Rpb248L2E+IGZvciBkZXRhaWxzLjwvcD4KCjxw PlRvIHJlbW92ZSB0aGUgcGx1Z2luIGNvbXBvc2VyIChub29vbyEpIHNpbXBseSBkZWxldGUg aXQgYXMgbm9ybWFsIGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhbmVs LiBBbGwgdGhlIHByZWZlcmVuY2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkIGFz IHdlbGwuIDxzcGFuIGNsYXNzPSJjYXBzIj5OT1RFPC9zcGFuPjogZGVsZXRpbmcgdGhlIHBs dWdpbiBmcm9tIHRoZSBwbHVnaW4gY29tcG9zZXIgd2luZG93IGl0c2VsZiA8c3Ryb25nPndp bGwgbm90PC9zdHJvbmc+IGRlbGV0ZSB0aGUgcHJlZmVyZW5jZXMgdW5sZXNzIHlvdSBoYXZl IHNldCB0aGUgcGx1Z2luIHRvIHJlc3BvbmQgdG8gJiM4MjE2O2RlbGV0ZSYjODIxNzsgbGlm ZWN5Y2xlIGV2ZW50cy48L3A+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fbGlzdCI+TGlzdCBwYW5l bDwvaDI+Cgo8cD5BdCB0aGUgdG9wIG9mIHRoZSBtYWluIHBhZ2UgaXMgYSBjb2xsYXBzaWJs ZSBhcmVhIGxhYmVsbGVkIDxjb2RlPkluc3RhbGxhdGlvbjwvY29kZT4uIFRoaXMgaXMgZGVh bHQgd2l0aCBpbiB0aGUgPGEgaHJlZj0iI2llZF9wbHVnaW5fY3JlYXRlIj5DcmVhdGluZyBw bHVnaW5zPC9hPiBzZWN0aW9uOyB0aGUgcmVzdCBvZiB0aGUgcGFnZSBsaXN0cyBhbGwgaW5z dGFsbGVkIHBsdWdpbnMuIFRoZSBjb2x1bW5zIGFyZTo8L3A+Cgo8ZGw+Cgk8ZHQ+PHN0cm9u Zz5QbHVnaW48L3N0cm9uZz48L2R0PgoJPGRkPkNsaWNrIHRoZSBwbHVnaW4gbmFtZSB0byA8 YSBocmVmPSIjaWVkX3BsdWdpbl9lZGl0Ij5lZGl0PC9hPiBpdC4gSWYgdGhlIHBsdWdpbiBo YXMgcHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCB5b3Ugd2lsbCBhbHNvIHNlZSBh biA8c3Ryb25nPltPcHRpb25zXTwvc3Ryb25nPiBsaW5rLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5B dXRob3I8L3N0cm9uZz48L2R0PgoJPGRkPklmIGF2YWlsYWJsZSwgY2xpY2sgdGhlIGF1dGhv ciB0byB2aXNpdCB0aGVpciBzaXRlLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5WZXJzaW9uIChNb2Rp ZmllZCk8L3N0cm9uZz48L2R0PgoJPGRkPlNob3dzIHRoZSBjdXJyZW50IHZlcnNpb24gbnVt YmVyIGFuZCB3aGV0aGVyIHRoZSBwbHVnaW4gaGFzIGJlZW4gbW9kaWZpZWQgZnJvbSB3aGVu IGl0IHdhcyBlaXRoZXIgY3JlYXRlZCBvciBpbnN0YWxsZWQuIElmIGl0IGhhcywgeW91IGNh biBjbGljayB0aGUgdmVyc2lvbiBudW1iZXIgdG8gcmVzdG9yZSB0aGUgcGx1Z2luIGNvZGUg dG8gaXRzIGluc3RhbGxlZCBzdGF0ZSBvciBsYXN0IDxhIGhyZWY9IiNpZWRfcGx1Z2luX3Jl c3RvcmUiPnJlc3RvcmUgcG9pbnQ8L2E+LjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5EZXNjcmlwdGlv bjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+QSBicmllZiBvbmUtbGluZSBvdmVydmlldyBvZiB3aGF0 IHRoZSBwbHVnaW4gZG9lcy48L2RkPgoJPGR0PjxzdHJvbmc+UHVibGlzaDwvc3Ryb25nPjwv ZHQ+Cgk8ZGQ+VGhyZWUgbGlua3MKCTxkbD4KCQk8ZGQ+PGVtPlB1Ymxpc2g8L2VtPiA6IGV4 cG9ydHMgdGhlIHBsdWdpbiBhcyBhIC50eHQgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIHRvIG90 aGVyIFRleHRwYXR0ZXJuIHVzZXJzLjwvZGQ+CgkJPGRkPjxlbT5aaXA8L2VtPiA6IGV4cG9y dHMgdGhlIHBsdWdpbiBhcyBhIGNvbXByZXNzZWQgKGd6aXBwZWQpIC50eHQgZmlsZSBmb3Ig ZGlzdHJpYnV0aW9uLjwvZGQ+CgkJPGRkPjxlbT5IZWxwPC9lbT4gOiBkaXNwbGF5cyB0aGUg KHRleHRpbGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1lbnRhdGlvbiwgaWYgdGhlcmUgaXMg YW55LjwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+QWxsIHRoZXNlIHRhc2tzIChhbmQgbW9yZSkg Y2FuIGJlIHBlcmZvcm1lZCBmcm9tIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9lZGl0Ij5l ZGl0IHBhbmVsPC9hPi48L2RkPgoJPGR0PjxzdHJvbmc+T3JkZXI8L3N0cm9uZz48L2R0PgoJ PGRkPlRoZSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBm aXJzdCkgdG8gOSAobG9hZGVkIGxhc3QpLiA1IGlzIGRlZmF1bHQuPC9kZD4KCTxkZD5Ob3Rl IHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdGhpcyBmZWF0dXJl IGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBsdWdpblsmIzM5O29yZGVy JiMzOTtdPC9jb2RlPiBzdHJpbmcgaXMgaW4gdGhlIHRlbXBsYXRlIHRvIGJlZ2luIHdpdGgu PC9lbT4gU28gaWYgeW91ciBsb2FkIG9yZGVyIGtlZXBzIHJldHVybmluZyB0byAmIzgyMTY7 NSYjODIxNzssIGVkaXQgeW91ciB0ZW1wbGF0ZSBkaXJlY3RseSB0byBhZGQgdGhhdCBzdHJp bmcsIG9yIHBhc3RlIHlvdXIgcGx1Z2luIGludG8gdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRo ZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGV4dHBhdHRlcm4vdGV4dHBhdHRlcm4t cGx1Z2luLXRlbXBsYXRlL2Jsb2IvbWFzdGVyL3plbV9wbHVnaW4ucGhwIj5lbXB0eSBwbHVn aW4gdGVtcGxhdGU8L2E+IGFuZCB1cGxvYWQgaXQuPC9kZD4KCTxkdD48c3Ryb25nPkFjdGl2 ZTwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+RW5hYmxlIG9yIGRpc2FibGUgYSBwbHVnaW4gYnkgY2xp Y2tpbmcgZW50cmllcyBpbiB0aGlzIGNvbHVtbiAmIzgyMTI7IHRoaXMgd2lsbCBvbmx5IHRy aWdnZXIgYW55IGVuYWJsZWQvZGlzYWJsZWQgbGlmZWN5Y2xlIGV2ZW50IGluIHlvdXIgcGx1 Z2luIGlmIHlvdSBoYXZlIHNldCB0aGUgcGx1Z2luIHRvIGRvIHNvLjwvZGQ+CjwvZGw+Cgo8 cD5Vc2UgdGhlIG11bHRpLWVkaXQgY2hlY2tib3hlcyAoeW91IGNhbiBzaGlmdCBjbGljayB0 aGVtIHRvIHNlbGVjdCBtb3JlIHRoYW4gb25lIGF0IGEgdGltZSkgdG8gZGVsZXRlIHBsdWdp bnMgb3IgbWFrZSBtYXNzIGNoYW5nZXMuIERlbGV0aW9uIHdpbGwgb25seSB0cmlnZ2VyIHRo ZSAmIzgyMTY7ZGVsZXRlZCYjODIxNzsgbGlmZWN5Y2xlIGV2ZW50IGlmIHlvdSBoYXZlIHRv bGQgdGhlIGNvbXBvc2VyIHRvIGFsbG93IHBsdWdpbnMgdG8gcmVzcG9uZCB0byBsaWZlY3lj bGUgZXZlbnRzLjwvcD4KCjxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9k aXIgKDxlbT5BZG1pbi0mZ3Q7QWR2YW5jZWQgUHJlZnM8L2VtPiksIGFueSBwbHVnaW5zIGlu IHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQgdXBsb2FkZWQgdG8gdGhpcyBkaXJlY3Rv cnkgd2lsbCBiZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkgZm9yIGVkaXRpbmcgYW5kIHRlc3Rp bmcuIFlvdSBjYW4gZWRpdCBhbmQgcHVibGlzaCB0aGUgcGx1Z2lucyBpbiB0aGUgc2FtZSBt YW5uZXIgYXMgdGhlIHJlZ3VsYXIsIGluc3RhbGxlZCBwbHVnaW5zIGFib3ZlLCB3aXRoIHRo ZSBmb2xsb3dpbmcgZXhjZXB0aW9uczo8L3A+Cgo8dWw+Cgk8bGk+VGhlcmUgaXMgbm8gY29u Y2VwdCBvZiAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7IG9yIG9mIHJlc3RvcmUgcG9pbnRzIGFz IHRoZSBmaWxlcyBhbHdheXMgcmVwcmVzZW50IHRoZSBtb3N0IHVwLXRvLWRhdGUgdmVyc2lv bi4gVXNlIHlvdXIgb3duIGV4dGVybmFsIHZlcnNpb25pbmcuPC9saT4KCTxsaT5DYWNoZWQg cGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5cyBvbiYjODIyMTsgYW5kIGRvIG5vdCBuZWVkIHRv IGJlIGluc3RhbGxlZC4gVG8gZGVhY3RpdmF0ZSB0aGUgcGx1Z2luIHRoZSBmaWxlIG11c3Qg YmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5LjwvbGk+Cgk8bGk+ SXQgZm9sbG93cyB0aGF0IHRoZSBsaWZlY3ljbGUgbm90aWZpY2F0aW9uIGV2ZW50cyAoaW5z dGFsbGVkLCBkZWxldGVkLCBlbmFibGVkLCBkaXNhYmxlZCkgYXJlIG5vdCB0cmlnZ2VyZWQg ZnJvbSBwbHVnaW5zIGluIHRoZSBjYWNoZSBkaXJlY3RvcnkuPC9saT4KCTxsaT5UaGUgcmVj b21tZW5kZWQgbG9hZCBvcmRlciBjYW5ub3QgYmUgY2hhbmdlZCBmcm9tIHRoZSBsaXN0IHBh bmVsOyBpdCBjYW4gb25seSBiZSBhbHRlcmVkIHZpYSB0aGUgPGEgaHJlZj0iI2llZF9wbHVn aW5fZWRpdCI+ZWRpdCBwYW5lbDwvYT4uIFRoZSBzcGVjaWZpZWQgbG9hZCBvcmRlciBpcyBv bmx5IHdyaXR0ZW4gdG8gdGhlIGZpbGUgd2hlbiB0aGUgcGx1Z2luIGlzIGV4cG9ydGVkLiBM b2FkIG9yZGVyIGlzIGFscGhhYmV0aWNhbCBmb3IgYWxsIHBsdWdpbnMgaW4gdGhlIHBsdWdp bl9jYWNoZSBkaXJlY3RvcnkuPC9saT4KPC91bD4KCjxoMiBpZD0iaWVkX3BsdWdpbl9jcmVh dGUiPkNyZWF0aW5nLCBpbnN0YWxsaW5nIGFuZCBuYW1pbmcgcGx1Z2luczwvaDI+Cgo8cD5U aGVyZSBhcmUgYSBmZXcgd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZyb20gdGhlIGNvbXBv c2VyJiM4MjE3O3MgbGlzdCBwYW5lbC4gRXhwYW5kIHRoZSAmIzgyMTY7SW5zdGFsbGF0aW9u JiM4MjE3OyB0d2lzdHkgYXQgdGhlIHRvcCBvZiB0aGUgY29tcG9zZXImIzgyMTc7cyBsaXN0 IHBhbmVsIHRvIHNlZSB0aGVtIGFsbC48L3A+Cgo8cD5UaGUgZmlyc3QgaXMgdG8gY3JlYXRl IGEgYmxhbmssIGVtcHR5IHBsdWdpbjsgdXNlIHRoZSBmaXJzdCB0ZXh0IGJveCBmb3IgdGhp cyBhbmQgdGhlIDxzdHJvbmc+Q3JlYXRlIG5ldyBwbHVnaW48L3N0cm9uZz4gYnV0dG9uLiBQ b2ludHMgdG8gbm90ZTo8L3A+Cgo8dWw+Cgk8bGk+SWYgeW91IHVzZSBhIHN0YW5kYXJkIHBs dWdpbiBuYW1lIChlLmcuIDxjb2RlPmFiY19teV9wbHVnaW48L2NvZGU+KSBpdCB3aWxsIGJl IGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlLjwvbGk+Cgk8bGk+SWYgeW91IGFkZCA8Y29kZT4u cGhwPC9jb2RlPiB0byB0aGUgcGx1Z2luIG5hbWUsIGl0IHdpbGwgYmUgY3JlYXRlZCBpbiB0 aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9y bWF0LjwvbGk+Cgk8bGk+QXZvaWQgc3BlY2lmeWluZyB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1 Z2luIGluIHRoZSBuYW1lICYjODIxMjsgeW91IHNob3VsZCB1c2UgdGhlIDxiPlJlbmFtZSBm aWxlPC9iPiBvciA8Yj5FeHBvcnQ8L2I+IG9wdGlvbnMgaW4gdGhlIDxhIGhyZWY9IiNpZWRf cGx1Z2luX2VkaXQiPmVkaXQgcGFuZWw8L2E+IHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBpbnRv IHlvdXIgcHJlZmVycmVkIGZpbGVuYW1lIGZvcm1hdCAoc2VlIDxhIGhyZWY9IiNpZWRfcGx1 Z2luX3NldHVwIj5zZXR1cDwvYT4pLjwvbGk+CjwvdWw+Cgo8cD5UaGUgc2Vjb25kIG1ldGhv ZCBvZiBjcmVhdGluZyBhIHBsdWdpbiBpcyB0byB1cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93 c2UvdXBsb2FkIGJveC4gUGxlYXNlIG5vdGU6PC9wPgoKPHVsPgoJPGxpPllvdSBjYW4gdXBs b2FkIGNvZGUgYXMgZWl0aGVyOgoJPHVsPgoJCTxsaT5hIHN0YW5kYXJkIHBsdWdpbiBiYXNl NjQgLnR4dCBmaWxlLjwvbGk+CgkJPGxpPmEgc3RhbmRhcmQgcGx1Z2luIHRlbXBsYXRlIChl aXRoZXIgY29kZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNs YXNzPSJjYXBzIj5DU1M8L3NwYW4+IGFyZWFzKS48L2xpPgoJCTxsaT5hIDxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgY29udGFpbmluZyByYXcgY29kZSBvbmx5LjwvbGk+ Cgk8L3VsPjwvbGk+Cgk8bGk+VGhlIHBsdWdpbiB3aWxsIGFsd2F5cyBiZSBpbnN0YWxsZWQg aW4gdGhlIGRhdGFiYXNlIHdoZW4gdXNpbmcgdGhpcyBtZXRob2QgKHVwbG9hZCB0ZW1wbGF0 ZSBwbHVnaW5zIG1hbnVhbGx5IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBv ciBjcmVhdGUgYSBuZXcgb25lIHdpdGggYSAucGhwIGV4dGVuc2lvbiBhbmQgcGFzdGUgdGhl IGNvZGUgaW50byBpdCBpZiB5b3Ugd2FudCBpdCBpbiB0aGUgcGx1Z2luIGNhY2hlKS48L2xp PgoJPGxpPklmIHRoZSBwbHVnaW4gZXhpc3RzIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHlv dXIgbmV3IGluZm8uPC9saT4KCTxsaT5UaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHlvdSBjYW4g dXBsb2FkIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB3aXRoIDxjb2RlPiZs dDs/cGhwID8mZ3Q7PC9jb2RlPiBtYXJrZXJzLiBFdmVyeXdoZXJlIGVsc2UgeW91IHNob3Vs ZCB1c2UgYSBmdWxsIHRlbXBsYXRlLjwvbGk+Cgk8bGk+SWYgeW91IGFkZCBhIHBsdWdpbiBO YW1lIGluIHRoZSBib3ggYWJvdmUgdGhlIHVwbG9hZCB3aWRnZXQgYmVmb3JlIGNsaWNraW5n IDxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+LCB5b3VyIHBsdWdpbiB3aWxsIHRha2UgdGhhdCBu YW1lLjwvbGk+CjwvdWw+Cgo8cD5Zb3UgbWF5IGFsc28gaW5zdGFsbCBhIHBsdWdpbiBqdXN0 IGxpa2Ugb24gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhbmVsIGJ5IGNvcHlp bmcgYW5kIHBhc3RpbmcgdGhlIGNvbnRlbnRzIG9mIGEgc3RhbmRhcmQgcGx1Z2luIC50eHQg ZmlsZSBpbnRvIHRoZSBJbnN0YWxsIHRleHRhcmVhIGFuZCBoaXR0aW5nIHRoZSA8c3Ryb25n Pkluc3RhbGw8L3N0cm9uZz4gYnV0dG9uLiBOb3RlIHRoZXJlIGFyZSBhIGZldyBkaWZmZXJl bmNlcyBmcm9tIHRoZSBjb3JlJiM4MjE3O3MgaW5zdGFsbGVyOjwvcD4KCjx1bD4KCTxsaT5U aGVyZSBpcyBubyBwcmV2aWV3IHN0ZXA7IHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGltbWVk aWF0ZWx5LCBzbyBiZSBzdXJlIHlvdSB0cnVzdCB0aGUgY29kZSE8L2xpPgoJPGxpPllvdSBj YW4gY2hvb3NlIHdoZXRoZXIgdGhlIHBsdWdpbiBpcyBhbGxvd2VkIHRvIHJ1biBpdHMgJiM4 MjE2O2luc3RhbGwmIzgyMTc7IGxpZmVjeWNsZSBldmVudCBieSB1c2luZyB0aGUgcmFkaW8g YnV0dG9ucyB0aGF0IGFwcGVhci48L2xpPgoJPGxpPllvdSBjYW4gZWxlY3QgdG8gaGF2ZSB0 aGUgcGx1Z2luIGF1dG8tZW5hYmxlIGl0c2VsZiBieSBzZWxlY3RpbmcgdGhlIGFwcHJvcHJp YXRlIHJhZGlvIGJ1dHRvbiBlbnRyeSBwcmlvciB0byBjbGlja2luZyA8ZW0+SW5zdGFsbDwv ZW0+LjwvbGk+Cgk8bGk+VGhlIHJhZGlvIGJ1dHRvbnMgdGFrZSBvbiB0aGUgZGVmYXVsdCBz ZXR0aW5ncyBmcm9tIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9zZXR1cCI+c2V0dXAgcGFu ZWw8L2E+LjwvbGk+CjwvdWw+Cgo8cD5CeSBjb252ZW50aW9uLCBldmVyeSBwbHVnaW4gc2hv dWxkIGJlIGNyZWF0ZWQgd2l0aCBhIHRocmVlLWxldHRlciBwcmVmaXgsIGFuIHVuZGVyc2Nv cmUsIHRoZW4gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbi4gWW91IGFyZSBmcmVlIHRvIGNob29z ZSB5b3VyIG93biB0aHJlZS1sZXR0ZXIgcHJlZml4ICh1c3VhbGx5IHlvdXIgaW5pdGlhbHMp IHN1YmplY3QgdG8gPGEgaHJlZj0iaHR0cDovL2RvY3MudGV4dHBhdHRlcm4uaW8vZGV2ZWxv cG1lbnQvcGx1Z2luLWRldmVsb3Blci1wcmVmaXhlcyI+YXZvaWRpbmcgb25lcyBhbHJlYWR5 IHRha2VuIGJ5IG90aGVyIHBsdWdpbiBhdXRob3JzPC9hPiBzbyBwZW9wbGUgY2FuIGdldCB0 byBrbm93IHlvdXIgd29yay4gUGx1cywgaXQgZ3JvdXBzIHlvdXIgcGx1Z2lucyB0b2dldGhl ciBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zIj5wbHVn aW4gcmVzcG9zaXRvcnk8L2E+LiBBbGwgZnVuY3Rpb25zLCB2YXJpYWJsZXMgKGluY2x1ZGlu ZyA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPiBub2RlcyksIDxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+IGNsYXNzZXMsIFRleHRwYWNrIHN0cmluZ3MgYW5kIGFueXRoaW5n IGVsc2UgeW91IGluamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJlIHByZWZp eGVkIGJ5IDxzdHJvbmc+YXQgbGVhc3Q8L3N0cm9uZz4geW91ciB0aHJlZSBsZXR0ZXIgY29k ZTsgcHJlZmVyYWJseSB0aGUgd2hvbGUgcGx1Z2luIG5hbWUgKG9yIGFicmlkZ2VkIHZlcnNp b24gdGhlcmVvZikgdG8gYXZvaWQgbmFtZXNwYWNlIGNsYXNoZXMgd2l0aCB5b3VyIG93biBh bmQgb3RoZXIgcGx1Z2lucy48L3A+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fZWRpdCI+RWRpdCBw YW5lbDwvaDI+Cgo8cD5UaGlzIHBhbmVsIGlzIHdoZXJlIHlvdSBjcmFmdCB5b3VyIG1hc3Rl cnBpZWNlLiBJdCBpcyBkaXZpZGVkIGludG8gdmFyaW91cyBzZWN0aW9ucyBhbmQgYm94ZXMu IFRoZSA8ZW0+UGFuZWxzPC9lbT4gYXJlYSBhbGxvd3MgeW91IHRvIHN3aXRjaCBiZXR3ZWVu IHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBwbHVnaW4uIEVhY2ggcGx1Z2luIGhhczo8L3A+ Cgo8dWw+Cgk8bGk+TWV0YSBjb250ZW50IHN1Y2ggYXMgbmFtZSwgdmVyc2lvbiwgYW5kIGZs YWdzLjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gY29kZS48L2xp PgoJPGxpPlRleHRwYWNrIHN0cmluZ3MuPC9saT4KCTxsaT5Eb2N1bWVudGF0aW9uIC8gc3R5 bGluZy48L2xpPgo8L3VsPgoKPHA+WW91IGVkaXQgZWFjaCBwYXJ0IHNlcGFyYXRlbHkgdG8g cmVkdWNlIG9uLXNjcmVlbiBjbHV0dGVyLCBhbmQgd2hlbiB5b3Ugc3dpdGNoIHN1YnBhbmVs cyB5b3VyIHNlbGVjdGlvbiBpcyByZW1lbWJlcmVkIHNvIHRoYXQgcGFuZWwgYXBwZWFycyB3 aGVuIGVkaXRpbmcgb3RoZXIgcGx1Z2lucy4gSGl0dGluZyA8c3Ryb25nPlNhdmU8L3N0cm9u Zz4gY29tbWl0cyBjaGFuZ2VzIGZyb20gdGhlIHdob2xlIHBhZ2UgJiM4MjEyOyBpbmNsdWRp bmcgc3VicGFuZWxzIHRoYXQgYXJlbiYjODIxNzt0IGN1cnJlbnRseSB2aXNpYmxlLjwvcD4K CjxoMz5NZXRhIHN1YnBhbmVsPC9oMz4KCjxkbD4KCTxkdD48c3Ryb25nPk5hbWU8L3N0cm9u Zz48L2R0PgoJPGRkPlRoZSBuYW1lIG9mIHlvdXIgcGx1Z2luLCB3aGljaCB5b3UgY2FuIGNo YW5nZSBhdCBhbnkgdGltZS4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUg ZnJvbSB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBhbmQgdGhlIDxjb2RlPiRwbHVnaW5b JiMzOTtuYW1lJiMzOTtdPC9jb2RlPiByb3cgaXMgY29tbWVudGVkIG91dCBpbiB0aGUgZmls ZSwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBwbHVnaW4gbmFtZTsgaXQg d2lsbCBhbHdheXMgYmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUuPC9kZD4KCTxkdD48c3Ryb25n PlZlcnNpb248L3N0cm9uZz48L2R0PgoJPGRkPlRoZSBjdXJyZW50IHZlcnNpb24gb2YgeW91 ciBwbHVnaW4uIFlvdSBhcmUgZnJlZSB0byBjaG9vc2UgeW91ciBvd24gdmVyc2lvbmluZyBj b252ZW50aW9uLjwvZGQ+Cgk8ZGQ+VG8gdGhlIHJpZ2h0IG9mIHRoZXNlIGJveGVzIHdpbGwg YmUgc29tZSBvcHRpb25hbCBpdGVtcyB0aGF0IGFwcGVhciBkZXBlbmRpbmcgb24gdGhlIGN1 cnJlbnQgbW9kZSBvZiBvcGVyYXRpb246Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+UmVzdG9yZSBw b2ludDwvc3Ryb25nPiAoaW4tZGF0YWJhc2UgcGx1Z2lucyBvbmx5KTogc2VsZWN0aW5nIHRo aXMgY2hlY2tib3ggd2lsbCAodXBvbiBjbGlja2luZyB0aGUgPHN0cm9uZz5TYXZlPC9zdHJv bmc+IGJ1dHRvbikgc3RvcmUgdGhlIGN1cnJlbnQgY29kZSBhcyBhIGJhc2VsaW5lIHRvIHdo aWNoIHlvdSBtYXkgJiM4MjIwO3JvbGwgYmFjayYjODIyMTsgdG8gYXQgYSBsYXRlciBkYXRl LiBTZWUgPGEgaHJlZj0iI2llZF9wbHVnaW5fcmVzdG9yZSI+cmVzdG9yZSBwb2ludHM8L2E+ LjwvZGQ+CgkJPGRkPjxzdHJvbmc+UmVuYW1lIGZpbGU8L3N0cm9uZz4gKGNhY2hlX2RpciBw bHVnaW5zIG9ubHkpOiBieSBkZWZhdWx0LCB3aGVuIHlvdSBzYXZlIGEgZmlsZSBpbiB0aGUg cGx1Z2luIGNhY2hlIGRpcmVjdG9yeSwgaXQgaXMgb3ZlcndyaXR0ZW4gd2l0aCB5b3VyIGNo YW5nZXMuIE9uY2UgYSBwbHVnaW4gaXMgcmVsZWFzZWQgeW91IHdvdWxkIG5vcm1hbGx5IGtl ZXAgYSBjb3B5LCB0YWtlbiBmcm9tIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCBmb3Igc2FmZWtl ZXBpbmcuIElmIHlvdSB0aGVuIHN1YnNlcXVlbnRseSBtb2RpZnkgdGhlIHBsdWdpbiBhbmQg aW5jcmVhc2UgdGhlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IHdpc2ggdG8gYWx0ZXIgdGhl IGZpbGVuYW1lIGFzIHdlbGwuIENoZWNraW5nIHRoaXMgYm94IHdpbGwgKHVwb24gY2xpY2tp bmcgdGhlIDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXR0b24pIHJlbmFtZSB0aGUgZmlsZSBp biB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJyZW50IHZl cnNpb24gbnVtYmVyLiBTZWUgdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX3NldHVwIj5zZXR1 cCBwYW5lbDwvYT4gZm9yIGRldGFpbHMgb24gY3VzdG9taXNpbmcgdGhlIGZpbGVuYW1lIGZv cm1hdC48L2RkPgoJCTxkZD48c3Ryb25nPkVuYWJsZTwvc3Ryb25nPiAoaW4tZGF0YWJhc2Ug cGx1Z2lucyBvbmx5KTogc3dpdGNoIHRoZSBwbHVnaW4gb24gb3Igb2ZmIGFmdGVyIFNhdmUu PC9kZD4KCQk8ZGQ+PHN0cm9uZz4oZmlsZSBuYW1lKTwvc3Ryb25nPiAoY2FjaGVfZGlyIHBs dWdpbnMgb25seSkgOiB0aGUgY3VycmVudCBmaWxlbmFtZSB5b3UgYXJlIGVkaXRpbmcuPC9k ZD4KCTwvZGw+PC9kZD4KCTxkdD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PC9kdD4K CTxkZD5WZXJ5IGJyaWVmIG9uZS1saW5lciBkZXNjcmliaW5nIHlvdXIgcGx1Z2luJiM4MjE3 O3MgY29yZSBmdW5jdGlvbiAvIHJlYXNvbiBmb3IgZXhpc3RlbmNlLiAyNTUgY2hhcmFjdGVy cyBtYXhpbXVtLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOjwvZHQ+Cgk8 ZGQ+WW91ITwvZGQ+Cgk8ZHQ+PHN0cm9uZz5XZWJzaXRlPC9zdHJvbmc+PC9kdD4KCTxkZD5Z b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFnZS4gV2lsbCBiZSBoeXBlcmxpbmtlZCB0byB5 b3VyIEF1dGhvciBuYW1lIGluIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0Ij5saXN0 IHBhbmVsPC9hPi48L2RkPgoJPGR0PjxzdHJvbmc+UGx1Z2luIHR5cGU8L3N0cm9uZz48L2R0 PgoJPGRkPkNob29zZSBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVzdCBmaXRzIHRoZSBpbnRl bmRlZCB1c2Ugb2YgeW91ciBwbHVnaW4uIElmIHlvdSBjaG9vc2UgJiM4MjE2O1B1YmxpYyYj ODIxNzsgYW5kIHRyeSB0byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUgaW4geW91ciBjb2RlLCBh IHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNhdmVkIHNvIHlv dSBjYW4gY2hvb3NlIGEgbW9yZSBhcHByb3ByaWF0ZSB0eXBlLjwvZGQ+Cgk8ZHQ+PHN0cm9u Zz5GbGFnczwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+Q2hvb3NlIHdoaWNoIHBsdWdpbiBmbGFncyBh cmUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwbHVnaW46Cgk8ZGw+CgkJPGRkPjxzdHJv bmc+SGFzIHByZWZzPC9zdHJvbmc+IDogY2hlY2sgdGhpcyB0byBpbmRpY2F0ZSB5b3VyIHBs dWdpbiByZXNwb25kcyB0byB0aGUgPGVtPnBsdWdpbl9wcmVmcy55b3VyX3BsdWdpbl9uYW1l PC9lbT4gZXZlbnQuPC9kZD4KCQk8ZGQ+PHN0cm9uZz5FdmVudCBub3RpZnk8L3N0cm9uZz4g OiBjaGVjayB0aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRvIHRoZSA8 ZW0+cGx1Z2luX2xpZmVjeWNsZS55b3VyX3BsdWdpbl9uYW1lPC9lbT4gZXZlbnQvc3RlcHMu PC9kZD4KCTwvZGw+PC9kZD4KCTxkdD48c3Ryb25nPkxvYWQgb3JkZXI8L3N0cm9uZz48L2R0 PgoJPGRkPkNob29zZSB0aGUgcmVjb21tZW5kZWQgb3JkZXIgaW4gd2hpY2ggeW91IHRoaW5r IHlvdXIgcGx1Z2luIHNob3VsZCBiZSBsb2FkZWQgYnkgdXNlcnMuIE1vc3Qgb2YgdGhlIHRp bWUsIHRoZSBkZWZhdWx0IG9mICYjODIxNjs1JiM4MjE3OyBpcyBmaW5lLCBidXQgZm9yIHNw ZWNpYWwgY2FzZXMgd2hlcmUgeW91ciBwbHVnaW4gaGFzIHRvIHNldCB1cCBhbiBlbnZpcm9u bWVudCBvciBoYXMgdG8gd2FpdCBmb3Igb3RoZXIgcGx1Z2lucyB0byBsb2FkIGZpcnN0LCB5 b3UgbWlnaHQgcmVxdWlyZSBvbmUgb2YgdGhlIG51bWJlcnMgZWl0aGVyIHNpZGUuIEJlIGF3 YXJlIHRoYXQgdGhpcyBpcyBhIDxlbT5yZWNvbW1lbmRhdGlvbjwvZW0+IGFuZCBpcyBvdmVy cmlkYWJsZSBieSB0aGUgc2l0ZSBhZG1pbmlzdHJhdG9yLiBJZiB0aGUgcGx1Z2luIGlzIGFs cmVhZHkgZGVwbG95ZWQgb24gYSBzaXRlLCB0aGUgbG9hZCBvcmRlciB0aGF0IGlzIGFscmVh ZHkgc2V0IHdpbGwgYmUgdXNlZCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMg dmFsdWU7IG9ubHkgbmV3IGluc3RhbGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1 ZSBieSBkZWZhdWx0LjwvZGQ+CjwvZGw+Cgo8aDM+UGx1Z2luIGNvZGU8L2gzPgoKPHA+WW91 ciBwbHVnaW4gY29kZSBnb2VzIGhlcmUuIFdyaXRlIHlvdXIgbWFzdGVycGllY2UgYW5kIGVp dGhlciBjbGljayB0aGUgbWFpbiA8c3Ryb25nPlNhdmU8L3N0cm9uZz4gYnV0dG9uICh3aGlj aCBzYXZlcyBldmVyeXRoaW5nOiBjb2RlLCBoZWxwLCBtZXRhIGRhdGEsIGV0Yykgb3IgaWYg eW91IGFyZSBzaW1wbHkgdXBkYXRpbmcganVzdCB0aGUgY29kZSBwb3J0aW9uLCB1c2UgdGhl IDxzdHJvbmc+U2F2ZSBjb2RlPC9zdHJvbmc+IGJ1dHRvbiBhdCB0aGUgdG9wLXJpZ2h0IG9m IHRoZSBzdWJwYW5lbCBmb3IgcmFwaWQgYmFja2dyb3VuZCBzYXZpbmcuIER1cmluZyB0aGlz IHNhdmUgcHJvY2VzcywgdGhlIHRleHRhcmVhIGRpbXMgdG8gc2hvdyBpdCBpcyB3b3JraW5n LCB0aG91Z2ggeW91IGNhbiBzdGlsbCBjb250aW51ZSB0byB0eXBlIGlmIHlvdSB3aXNoLiBX aGVuIHRoZSB0ZXh0YXJlYSByZXR1cm5zIHRvIGZ1bGwgdmlzaWJpbGl0eSwgaXQgbWVhbnMg dGhlIHNhdmUgcHJvY2VzcyBpcyBjb21wbGV0ZS4gWW91ciBjb2RlIGlzIChvcHRpb25hbGx5 KSBydW4gdGhyb3VnaCBhIHJ1ZGltZW50YXJ5IHN5bnRheCBjaGVja2VyIHdoZW4gdXNpbmcg dGhlIDxzdHJvbmc+U2F2ZSBDb2RlPC9zdHJvbmc+IGJ1dHRvbiBhbmQgYW55IGVycm9yIGlz IGhpZ2hsaWdodGVkLiA8c3BhbiBjbGFzcz0id2FybmluZyI+SWYgYSBzeW50YXggZXJyb3Ig aXMgZGV0ZWN0ZWQsIHlvdXIgcGx1Z2luIGlzIG5vdCBzYXZlZDwvc3Bhbj4uPC9wPgoKPHA+ UGx1Z2lucyBhcmUgbGltaXRlZCB0byAxNk1iIG9mIGNvZGUgc28gdGhlcmUgaXMgYWxzbyBh IGNoYXJhY3RlciBjb3VudGRvd24ganVzdCBiZWxvdyB0aGUgZWRpdCBib3guIElmIHlvdSBz dGFydCBhcHByb2FjaGluZyB0aGUgbGltaXQoISksIGl0IG1pZ2h0IGJlIHdvcnRoIGNvbnNp ZGVyaW5nIHNwbGl0dGluZyB5b3VyIHBsdWdpbiBpbnRvIGEgZmV3IHBhcnRzIG9yIHdvcmtp bmcgZm9yIE1pY3JvJG9mdCwgd2hlcmUgY29kZSBibG9hdCBpcyBhY2NlcHRhYmxlLjwvcD4K CjxwPkluIEZpcmVmb3gsIENocm9tZSBhbmQgSUUxMCsgeW91IGNhbiB1c2UgdGhlIDxlbT5K dW1wIHRvIGxpbmU6PC9lbT4gdGV4dGJveC4gRW50ZXIgYSBsaW5lIG51bWJlciBhbmQgcHJl c3MgRW50ZXIgdG8ganVtcCB0byB0aGF0IGxpbmUgaW4gdGhlIGNvZGUuIEluIG90aGVyIGJy b3dzZXJzLCB5bW12LjwvcD4KCjxoMz5UZXh0cGFjayBzdHJpbmdzPC9oMz4KCjxwPkJlZm9y ZSBUZXh0cGF0dGVybiA0LjMuMCwgYW55IHRpbWUgeW91IGRpc3BsYXllZCBhIHBsdWdpbi1z cGVjaWZpYyBzdHJpbmcgdG8gdGhlIHVzZXIgaXQgbWFkZSBzZW5zZSB0byB3cml0ZSB5b3Vy IG93biA8Y29kZT5nVHh0KCk8L2NvZGU+IGZ1bmN0aW9uIHdoaWNoIHBhY2thZ2VkIHVwIHRo ZSBzdHJpbmdzIGludG8gb25lIGFyZWEgb2YgeW91ciBwbHVnaW4uIFdoaWxlIGNvbnZlbmll bnQsIHRoaXMgbWVhbnQgdGhhdCBhbnlvbmUgd2hvIHdhbnRlZCB0byB1c2UgeW91ciBwbHVn aW4gaW4gYW5vdGhlciBsYW51Z2FnZSBoYWQgdG8gZWRpdCB0aGUgcGx1Z2luIGNvZGUgYW5k IHJld3JpdGUgeW91ciBzdHJpbmdzIGludG8gdGhlIHRhcmdldCBsYW5ndWFnZSwgd2hpY2gg Y2F1c2VkIHVwZ3JhZGUgaGFzc2xlcy48L3A+Cgo8cD5UaGlzIGlzIG5vIGxvbmdlciBhbiBp c3N1ZSwgYXMgVGV4dHBhdHRlcm4gbm93IGhhcyBUZXh0cGFja3M6IHJlZGlzdHJpYnV0YWJs ZSB0ZXh0IGZpbGVzIHRoYXQgY29udGFpbiBsYW5ndWFnZSBzdHJpbmdzIGZvciBkaXJlY3Qg aW5zZXJ0aW9uIGludG8gdGhlIGRhdGFiYXNlLjwvcD4KCjxwIGNsYXNzPSJ3YXJuaW5nIj5B IHdvcmQgb2YgY2F1dGlvbjogdGhlIFRleHRwYWNrIGFyZWEgd29ya3MgYSBsaXR0bGUgZGlm ZmVyZW50bHkgdG8gdGhlIHJlc3Qgb2YgdGhlIGVkaXQgcGFuZWw6IG1vc3QgY2hhbmdlcyBo YXBwZW4gbGl2ZSBhcyB5b3UgdHlwZS48L3A+Cgo8cD5CZWZvcmUgeW91IGJlZ2luIHlvdSBu ZWVkIHRvIGRlZmluZSBhIHRleHRwYWNrIHByZWZpeCBmb3IgdGhlIHBsdWdpbi4gVGhpcyBp cyB1c3VhbGx5IHlvdXIgdGhyZWUgbGV0dGVyIHBsdWdpbiBwcmVmaXggcGx1cyBzb21lIHVu aXF1ZSBpZGVudGlmaWVyIHdpdGggd2hpY2ggYWxsIHN0cmluZ3MgaW4gdXNlIGJ5IHRoZSBw bHVnaW4gd2lsbCBiZWdpbi4gRm9yIGV4YW1wbGUsIHRoZSBwbHVnaW4gY29tcG9zZXIgdXNl cyA8Y29kZT5pZWRfcGx1Z2luPC9jb2RlPiAodGhvdWdoIGl0IGNvdWxkIGhhdmUgdXNlZCA8 Y29kZT5pZWRfcGNvbXA8L2NvZGU+IG9yIDxjb2RlPmllZF9wYzwvY29kZT4sIGV0YykuIE5v dGUgdGhhdCB1c2luZyBqdXN0IHlvdXIgdGhyZWUgbGV0dGVyIHByZWZpeCBpcyBwcm9iYWJs eSBub3Qgd2lzZSBiZWNhdXNlIHlvdXIgb3duIGZ1dHVyZSBwbHVnaW5zIG1pZ2h0IHJlcXVp cmUgYSBzaW1pbGFybHktbmFtZWQgcmVwbGFjZW1lbnQgYW5kIHRoZSBzdHJpbmdzIHdvdWxk IGNsYXNoLiBPZiBjb3Vyc2UsIHlvdSBtaWdodCB3YW50IHRvIHRha2UgYWR2YW50YWdlIG9m IHRoaXMgZmVhdHVyZSE8L3A+Cgo8cD5PbmNlIHlvdSBlbnRlciB0aGUgcHJlZml4IGFuZCB5 b3VyIGN1cnNvciBsZWF2ZXMgdGhlIGJveCwgdGhlIGNvbXBvc2VyIHdpbGwgc3RvcmUgdGhl IHByZWZpeCBhbmQgc2VhcmNoIHRoZSBwbHVnaW4gY29kZSBpbW1lZGlhdGVseSBmb3IgYW55 IHJlZmVyZW5jZXMgdG8gc3VjaCBwcmVmaXhlZCBzdHJpbmdzIGluc2lkZSBhbnkgZnVuY3Rp b24gY2FsbCB3aXRoIDxjb2RlPmdUeHQ8L2NvZGU+IGluIGl0LiBBbnkgaXQgZG9lcyBmaW5k IHdpbGwgYmUgbGlzdGVkIGFuZCB5b3UgY2FuIGltbWVkaWF0ZWx5IGJlZ2luIGVudGVyaW5n IHlvdXIgcmVwbGFjZW1lbnQgdGV4dCBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1 YWdlLiBXaGVuZXZlciB0aGUgY3Vyc29yIGxlYXZlcyBhIHRleHQgYm94IGl0cyBjb250ZW50 cyBpcyBzYXZlZCBkaXJlY3RseSB0byB0aGUgZGF0YWJhc2UuPC9wPgoKPHA+VGV4dHBhY2sg c3RyaW5ncyBjYW4gYmUgdXNlZCBvbiB0aGUgQWRtaW4gc2lkZSwgdGhlIFB1YmxpYyBzaXRl LCBvciBib3RoLiBDaG9vc2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgbG9jYXRpb24gZnJvbSB0 aGUgZHJvcGRvd24gYWdhaW5zdCBlYWNoIHN0cmluZy48L3A+Cgo8cD5JZiB5b3UgY3JlYXRl IG9yIHJlbmFtZSBhIGdUeHQgc3RyaW5nIGluIHRoZSBjb2RlLCB3aGVuIHlvdXIgY3Vyc29y IGxlYXZlcyB0aGUgdGV4dGFyZWEgdGhlIG5ldyBzdHJpbmcocykgd2lsbCBiZSBjcmVhdGVk IGZvciB5b3UgaW4gdGhlIHRleHRwYWNrIGFyZWEgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdC4g Tm90ZSBob3dldmVyIHRoZXkgYXJlIG5vdCB3cml0dGVuIHRvIHRoZSBkYXRhYmFzZSB1bnRp bCB5b3Ugc3VwcGx5IGEgcmVwbGFjZW1lbnQgc3RyaW5nLjwvcD4KCjxwPkR1cmluZyB0aGUg cHJvY2VzcyBvZiBjcmVhdGluZy9yZW5hbWluZyByZXBsYWNlbWVudCBzdHJpbmdzLCBpZiBp dCBvcnBoYW5zIGFub3RoZXIgc3RyaW5nIHRoZW4gdGhlIG9ycGhhbiB3aWxsIGJlIGhpZ2hs aWdodGVkIGFuZCBhbiBbeF0gYnV0dG9uIHdpbGwgYXBwZWFyIG5leHQgdG8gaXQuIElmIHlv dSB3aXNoIHRvIGNvcHkgdGhlIG9sZCBjb250ZW50IG91dCBvZiB0aGUgYm94IGFuZCBwYXN0 ZSBpdCBpbnRvIHlvdXIgcmVuYW1lZCBzdHJpbmcsIG5vdyBpcyB0aGUgdGltZSB0byBkbyBz by4gT25jZSB5b3UmIzgyMTc7cmUgc3VyZSB5b3Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHN0cmlu ZywgaGl0IHRoZSBbeF0gYnV0dG9uIHRvIGltbWVkaWF0ZWx5IGRlbGV0ZSBpdCBmcm9tIHRo ZSBkYXRhYmFzZS4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gPHN0cm9uZz5hbGw8L3N0cm9u Zz4gbGFuZ3VhZ2VzLjwvcD4KCjxwPlBsZWFzZSBub3RlOjwvcD4KCjx1bD4KCTxsaT5pZiB5 b3UgcHJvZ3JhbW1hdGljYWxseSByZWZlciB0byBzdHJpbmdzIChlLmcuIGJ5IGNvbmNhdGVu YXRpbmcgc3RyaW5nIHBhcnRzIHRvZ2V0aGVyIHRvIGZvcm0gdGhlIGdUeHQgc3RyaW5nIG5h bWUsIG9yIGl0ZXJhdGluZyBvdmVyIGEgbG9vcCBhbmQgdXNpbmcgdmFyaWFibGUgc3Vic3Rp dHV0aW9uKSB0aGVuIHRoZXkgd2lsbCA8ZW0+bm90PC9lbT4gYmUgYXV0b21hdGljYWxseSBi ZSBkZXRlY3RlZC4gWW91IHdpbGwgaGF2ZSB0byB1c2UgdGhlICYjODIxNjsrJiM4MjE3OyBi dXR0b24gdG8gYWRkIHN1Y2ggc3RyaW5ncyBtYW51YWxseS48L2xpPgoJPGxpPmFueSBwcm9n cmFtbWF0aWNhbGx5LWRlcml2ZWQgVGV4dHBhY2sgc3RyaW5ncywgb3Igb25lcyBub3QgaW5z aWRlIGEgZ1R4dCgpIGZ1bmN0aW9uIHdpbGwgc2hvdyB1cCB3aXRoIGFuIFt4XSBidXR0b24u IFlvdSBzaG91bGQgb2YgY291cnNlIG5vdCBkZWxldGUgdGhlc2Ugc3RyaW5ncyE8L2xpPgoJ PGxpPmFmdGVyIHlvdSBkbyBhIGZ1bGwgc2F2ZSAoaS5lLiBub3QganVzdCBhIDxzdHJvbmc+ U2F2ZSBDb2RlPC9zdHJvbmc+KSBhbGwgc3RyaW5ncyB0aGF0IGFyZSBkZWZpbmVkIGZvciB0 aGUgcGx1Z2luIHdpbGwgYmUgZGlzcGxheWVkLiBBbnkgZGVyaXZlZCBzdHJpbmdzIHdpbGwg c3RpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgcG90ZW50aWFsIG9ycGhhbnMuPC9saT4KCTxsaT5z d2l0Y2hpbmcgbGFuZ3VhZ2UgZnJvbSB0aGUgc2VsZWN0IGxpc3Qgd2lsbCBpbW1lZGlhdGVs eSBsb2FkIHN0cmluZ3MgZm9yIHRoYXQgbGFuZ3VhZ2UuPC9saT4KCTxsaT5jbGlja2luZyA8 c3Ryb25nPkxvYWQ8L3N0cm9uZz4gZG9lcyB0aGUgc2FtZSB0YXNrIGFzIHN3aXRjaGluZyBs YW5ndWFnZSBhbmQgaXMgdGhlcmUgaW4gY2FzZSB5b3Ugb25seSBoYXZlIG9uZSBsYW5ndWFn ZSBpbnN0YWxsZWQgb3Igd2lzaCB0byByZWZyZXNoIHRoZSBzdHJpbmdzIGluIHRoZSBjdXJy ZW50IGxhbmd1YWdlLjwvbGk+CjwvdWw+Cgo8aDQ+SW1wb3J0aW5nIHN0cmluZ3MgZnJvbSB0 aGUgY3VycmVudCBwbHVnaW48L2g0PgoKPHA+VGhlIHN1Y2Nlc3Mgb2YgdGhlIGF1dG9tYXRp YyBmaW5kIGZhY2lsaXR5IHJlbGllcyBvbiB0d28gdGhpbmdzOjwvcD4KCjx1bD4KCTxsaT50 aGF0IHRoZSBzdHJpbmdzIGFyZSBhbGwgcHJlZml4ZWQuPC9saT4KCTxsaT55b3VyIHBsdWdp biYjODIxNztzIFR5cGUgaXMgb25lIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwv c3Bhbj4gdHlwZXMgKDQgb3IgNSkuPC9saT4KPC91bD4KCjxwPklmIHlvdSYjODIxNztyZSBj b252ZXJ0aW5nIGFuIG9sZCBwbHVnaW4gdG8gdGhlIFRleHRwYWNrIG1ldGhvZG9sb2d5IHRo ZW4geW91IG1heSBoYXZlIGh1bmRyZWRzIG9mIHN0cmluZ3MgdGhhdCB3b3VsZCBiZSBhIGJp bmQgdG8gY29weSBvbmUgYnkgb25lLiBUaGUgY29tcG9zZXIgY2FuIHRyeSB0byBoZWxwIHlv dSBvdXQsIGJ1dCBpdCBvbmx5IHdvcmtzIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gb3IgbWV0 aG9kIGluIHlvdXIgcGx1Z2luIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSByZXBsYWNlZCBhbmQg cmV0dXJuZWQuIElmIHlvdSBkb24mIzgyMTc7dCBoYXZlIHRoYXQsIG5vdyBtaWdodCBiZSB0 aGUgdGltZSB0byBkbyBzbyB0byBzYXZlIHlvdXJzZWxmIHNvbWUgZWZmb3J0ISBJdCBkb2Vz biYjODIxNzt0IGhhdmUgdG8gYmUgcmVmZXJlbmNlZCBpbiB0aGUgY29kZSwgaXQganVzdCBo YXMgdG8gZXhpc3QgYW5kIHJldHVybiBhIHN0cmluZyBmb3IgYSBnaXZlbiBuYW1lLjwvcD4K CjxwPk9uY2UgeW91IGhhdmUgdGhhdCBpbiBwbGFjZSwgaGVyZSBhcmUgc29tZSBzdGVwcyB5 b3UgY2FuIGdvIHRocm91Z2ggdG8gY29udmVydCB5b3VyIHBsdWdpbiBhbmQgZ3JhYiBhbGwg dGhlIG5lY2Vzc2FyeSBzdHJpbmdzIGVuIG1hc3NlOjwvcD4KCjxvbD4KCTxsaT5pbnNpZGUg eW91ciBwbHVnaW4mIzgyMTc7cyBnVHh0KCkgZnVuY3Rpb24sIGVuc3VyZSB0aGF0IGFsbCBr ZXlzIGFyZSBwcmVmaXhlZCB3aXRoIHlvdXIgbm9taW5hdGVkIHBsdWdpbiBwcmVmaXguPC9s aT4KCTxsaT5nbG9iYWxseSByZXBsYWNlIGFueSByZWZlcmVuY2UgdG8gPGNvZGU+YWJjX3Bs dWdpbl9nVHh0KCYjMzk7PC9jb2RlPiB3aXRoIDxjb2RlPmFiY19wbHVnaW5fZ1R4dCgmIzM5 O2FiY19wcmVmaXhfPC9jb2RlPiwgaWYgbm90IGFscmVhZHkuPC9saT4KCTxsaT5zYXZlIHRo ZSBwbHVnaW4gZnJvbSB0aGUgY29tcG9zZXIgd2luZG93LjwvbGk+Cgk8bGk+ZW50ZXIgdGhl IFRleHRwYWNrIHByZWZpeCBpZiBpdCYjODIxNztzIG5vdCBhbHJlYWR5IHNldC48L2xpPgoJ PGxpPmdpdmUgdGhlIG5hbWUgb2YgeW91ciBnVHh0IGZ1bmN0aW9uLCBlLmcuIDxjb2RlPmll ZF9wbHVnaW5fZ1R4dDwvY29kZT4gaW4gdGhlIDxpPkxvYWQgc3RyaW5ncyBmcm9tIGZ1bmN0 aW9uPC9pPiBib3guIElmIHlvdXIgPGNvZGU+Z1R4dCgpPC9jb2RlPiBtZXRob2QgaXMgaW5z aWRlIGEgY2xhc3MsIHNwZWNpZnkgPGNvZGU+Y2xhc3NfbmFtZTo6bWV0aG9kX25hbWU8L2Nv ZGU+IGluc3RlYWQuPC9saT4KCTxsaT5oaXQgJiM4MjE2O0dvJiM4MjE3Oy48L2xpPgo8L29s PgoKPHA+SWYgdGhlIGNvbXBvc2VyIGNhbiBleGVjdXRlIHlvdXIgY2hvc2VuIGZ1bmN0aW9u IHRoZW4gaXQmIzgyMTc7bGwgZG8gc28gYW5kIHJldHVybiB0aGUgc3RyaW5ncyBhcyBkZWZp bmVkIGluc2lkZSB0aGUgZnVuY3Rpb24sIHBvcHVsYXRlIGVhY2ggVGV4dHBhY2sgc3RyaW5n IGFuZCBzYXZlIGl0IGZvciB5b3UgaW4gdGhlIGRhdGFiYXNlIGF1dG9tYXRpY2FsbHkuIE9u Y2UgdGhhdCYjODIxNztzIGRvbmUgYW5kIGFsbCBzdHJpbmdzIGFyZSBwb3B1bGF0ZWQgeW91 IGNhbiB0aGVuOjwvcD4KCjxvbD4KCTxsaT5nbG9iYWxseSByZXBsYWNlIGFueSBjYWxscyB0 byA8Y29kZT5hYmNfcGx1Z2luX2dUeHQ8L2NvZGU+IHdpdGggdGhlIGNvcmUgPGNvZGU+Z1R4 dDwvY29kZT4gaW4geW91ciBwbHVnaW4gY29kZS48L2xpPgoJPGxpPmRlbGV0ZSB5b3VyIGFi Y19wbHVnaW5fZ1R4dCBmdW5jdGlvbi48L2xpPgo8L29sPgoKPHA+VGV4dHBhY2sgc3RyaW5n cyBhcmUgYWxzbyB3cml0dGVuIHRvIHRoZSBmaWxlIG9mIGFueSBwbHVnaW4geW91IGFyZSBl ZGl0aW5nIGluIHRoZSBjYWNoZV9kaXIgd2hlbiB5b3UgU2F2ZSB0aGUgcGx1Z2luLCBhcyBs b25nIGFzIHlvdSBhcmUgdXNpbmcgYSByZWNlbnQgdGVtcGxhdGUgdGhhdCBoYXMgdGhlIDxj b2RlPiRwbHVnaW5bJiMzOTt0ZXh0cGFjayYjMzk7XTwvY29kZT4gc3RyaW5nIGluIGl0Ljwv cD4KCjxwPjxzdHJvbmc+U3dpdGNoaW5nIGxhbmd1YWdlPC9zdHJvbmc+PC9wPgoKPHA+SWYg YXQgYW55IHRpbWUgeW91IHdhbnQgdG8gc2VlIHRoZSBpbnN0YWxsZWQgdGV4dHBhY2sgc3Ry aW5ncyBpbiBvdGhlciBsYW5ndWFnZXMsIHNpbXBseSB1c2UgdGhlIHNlbGVjdCBsaXN0IHRv IGNob29zZSBvbmUuIEFueSBkZWZpbmVkIHN0cmluZ3Mgd2lsbCBiZSBsb2FkZWQgaW50byB0 aGUgdGV4dHBhY2sgZmllbGRzLiBZb3UmIzgyMTc7bGwgc2VlIGEgY291bnRlciB3aGl6emlu ZyB1cCB0byBzaG93IHlvdSBob3cgZmFyIGl0JiM4MjE3O3MgZ29uZS4gQXMgYSB0cmFuc2xh dGlvbiBhaWQsIHRoZSBlcXVpdmFsZW50IHN0cmluZyBpbiB5b3VyIG5vbWluYXRlZCBkZWZh dWx0IGxhbmd1YWdlIChzZWUgPGEgaHJlZj0iI2llZF9wbHVnaW5fc2V0dXAiPnNldHVwPC9h Pikgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgeW91IGhvdmVyIG92ZXIgdGhlIHRleHRwYWNrIGVu dHJ5LiBZb3UgY2FuIGNob29zZSB0byB0cmFuc2xhdGUgc3RyaW5ncyB5b3Vyc2VsZiBvciB5 b3UgY2FuIGRlZmVyIHRyYW5zbGF0aW9uIHRvIG90aGVyIG1lbWJlcnMgb2YgdGhlIGNvbW11 bml0eSBhZnRlciB0aGUgcGx1Z2luIGlzIHB1Ymxpc2hlZC4gVGV4dHBhY2tzIGNhbiBiZSBs aW5rZWQgdG8geW91ciB0ZXh0cGF0dGVybi5vcmcgcGx1Z2luIHBhZ2UgYnkgY29udHJpYnV0 b3JzIGFuZCBpbnN0YWxsZWQgYXQgYW55IHRpbWUgZnJvbSBUZXh0cGF0dGVybiYjODIxNztz IDxlbT5BZG1pbi0mZ3Q7TGFuZ3VhZ2VzPC9lbT4gdGFiLjwvcD4KCjxoMz5QbHVnaW4gaGVs cDwvaDM+Cgo8cD5Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdpbiB1c2Fn ZS4gQ2FuIChwcm9iYWJseSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhyZWY9Imh0 dHA6Ly90ZXh0cGF0dGVybi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9hPi4gVGhl cmUgYXJlIHNvbWUgPGEgaHJlZj0iaHR0cDovL2RvY3MudGV4dHBhdHRlcm4uaW8vZGV2ZWxv cG1lbnQvcGx1Z2luLXVzZXItaGVscC1ndWlkZWxpbmVzIj5kb2N1bWVudGF0aW9uIGd1aWRl bGluZXM8L2E+IHRoYXQgc2VydmUgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3RlIHRo YXQgdGhlIGNoYXJhY3RlciBjb3VudGRvd24gaGVyZSBpcyBvbmx5IGFwcHJveGltYXRlIGJl Y2F1c2Ugd2hlbiB5b3VyIHBsdWdpbiBpcyBzYXZlZCBhbmQgdGhlIGhlbHAgaXMgY29udmVy dGVkIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiwgaXQgdXN1YWxseSB0YWtl cyB1cCBtb3JlIHNwYWNlIHRoYW4gVGV4dGlsZTsgcGxlYXNlIGNoZWNrIHRoYXQgeW91ciBo ZWxwIGZpbGUgcmVuZGVycyBjb3JyZWN0bHkgd2hlbiB5b3VyIHBsdWdpbiBpcyBleHBvcnRl ZC48L3A+Cgo8cD5UaGUgPGVtPlN0eWxlPC9lbT4gYm94IGlzIGZvciBhbnkgPHNwYW4gY2xh c3M9ImNhcHMiPkNTUzwvc3Bhbj4gc3R5bGUgcnVsZXMgeW91IHdpc2ggdG8gYXBwbHkgdG8g eW91ciBkb2N1bWVudGF0aW9uLCBhbHRob3VnaCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRoaXMg d2l0aCBtb2Rlcm4gYWRtaW4gdGhlbWVzLiBZb3UgYXJlIGVuY291cmFnZWQgdG8gcmV1c2Ug dGhlIGFkbWluJiM4MjE3O3MgY29yZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBy dWxlcyBhcyBvZnRlbiBhcyBwb3NzaWJsZSwgYnV0IGlmIHRoZXJlIGlzbiYjODIxNzt0IG9u ZSB0aGF0IHN1aXRzLCBpdCYjODIxNztzIGJlc3QgdG8gdGFyZ2V0IHlvdXIgZG9jdW1lbnRh dGlvbiBzcGVjaWZpY2FsbHkgYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZSBQbHVnaW4gSGVs cCBzZWN0aW9uIHdpdGggc29tZXRoaW5nIGxpa2U6IDxjb2RlPiZsdDtkaXYgaWQ9JnF1b3Q7 YWJjX2hlbHAmcXVvdDsmZ3Q7aDEuIERvY3MgZ28gaGVyZS4uLiZsdDsvZGl2Jmd0OzwvY29k ZT4uPC9wPgoKPHA+Tm90ZSB0aGF0IGJvdGggdGhlIFBsdWdpbiBIZWxwIGFuZCBTdHlsZSBh cmUgZ292ZXJuZWQgYnkgYSBzaXplIGxpbWl0LiBTaW5jZSB0aGV5IGFyZSBib3RoIHN0b3Jl ZCBpbiB0aGUgc2FtZSA2NEtCIGZpZWxkLCB0aGUgc2l6ZSBpcyBzaGFyZWQgYmV0d2VlbiB0 aGVtLiBTdHlsZXMgYXJlIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdGhyb3VnaCB0aGUgVGV4dGls ZSBwcm9jZXNzb3IgYW5kIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRvIGFkZCB0aGUgPGNvZGU+ Jmx0O3N0eWxlJmd0OzwvY29kZT4gdGFnczsgdGhlIGNvbXBvc2VyIHdpbGwgZG8gdGhhdCBm b3IgeW91IChidXQgc2VlIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9ub3RlcyI+bm90ZXM8 L2E+KS48L3A+Cgo8cD5DbGljayB0aGUgPHN0cm9uZz5bRG9jc108L3N0cm9uZz4gbGluayBh bG9uZ3NpZGUgdGhlIFBsdWdpbiBoZWxwIGhlYWRpbmcgdG8gc2hvdyB0aGUgZG9jdW1lbnRh dGlvbiBhcyB1c2VycyB3aWxsIHNlZSBpdCAoaS5lLiBUZXh0aWxlIHByb2Nlc3NlZCBpbnRv IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPikuIEFueSBoZWxwIHRleHQgb3ZlciA2 NEtCIGluIGxlbmd0aCBpcyB0cnVuY2F0ZWQgc28geW91IGNhbiB2ZXJpZnkgdGhhdCBhbGwg eW91ciBkb2N1bWVudGF0aW9uIGZpdHMgaW50byB0aGUgdXNlcnMmIzgyMTc7IGRlc3RpbmF0 aW9uIGRhdGFiYXNlLjwvcD4KCgo8aDM+RGlzdHJpYnV0aW9uPC9oMz4KCjxwPk9uY2UgeW91 IGhhdmUgc2F2ZWQgeW91ciBwbHVnaW4sIHRoZXJlIGlzIGEgc2VjdGlvbiB0aGF0IGFsbG93 cyB5b3UgdG8gZXhwb3J0IHlvdXIgcGx1Z2luIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLiBB IGxhbmd1YWdlIHNlbGVjdCBib3ggZ292ZXJucyBob3cgVGV4dHBhY2tzIGFyZSBkZWFsdCB3 aXRoLiBJZiB5b3UgY2hvb3NlIHRoZSBmaXJzdCAoZW1wdHkpIGl0ZW0gdGhlbiBubyBUZXh0 cGFjayBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0ZWQgZmlsZS4gVGhl IG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4geW91IHNhdmUgVGV4dHBhY2tzIGRpcmVjdGx5OiB0 aGUgZmlyc3QgaXRlbSBpcyBhIHNob3J0Y3V0IGZvciAmIzgyMTY7YWxsIGxhbmd1YWdlcyYj ODIxNzsgdG8gc2F2ZSB5b3UgaGF2aW5nIHRvIHNlbGVjdCB0aGVtIGFsbC48L3A+Cgo8dWw+ Cgk8bGk+PHN0cm9uZz5QbHVnaW4gY29kZSBmb3IgZGlzdHJpYnV0aW9uPC9zdHJvbmc+IDog aXMgYSBkaXJlY3QgY29weSAmIzgyMTY7biYjODIxNzsgcGFzdGUgYXJlYSB0aGF0IGNvbnRh aW5zIHlvdXIgZW50aXJlIHBsdWdpbiArIGRvY3MuIFlvdSBjYW4gdGFrZSB0aGlzIGVudGly ZSBhcmVhIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSAmIzgyMTY7SW5zdGFsbCBwbHVnaW4mIzgy MTc7IGJveC4gU2luY2UgdGhpcyBhZGRzIHRvIHRoZSB0aW1lIGl0IHRha2VzIHRvIGRvIGEg ZnVsbCBzYXZlIG9mIHRoZSBwbHVnaW4sIHRoaXMgcG9ydGlvbiBpcyBvcHRpb25hbCBhbmQg Y2FuIGJlIGVuYWJsZWQgZnJvbSB0aGUgPGEgaHJlZj0iI2llZF9wbHVnaW5fc2V0dXAiPnNl dHVwIHBhbmVsPC9hPi48L2xpPgoJPGxpPjxzdHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdp bi50eHQ8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUgcGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlvdXIgY29t cHV0ZXIgYXMgYSByZWRpc3RyaWJ1dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0 dGVybiB1c2VycyB0byBpbnN0YWxsLiBJZiB5b3UgaGF2ZSBjaG9zZW4gYW55IFRleHRwYWNr IGxhbmd1YWdlcyBmcm9tIHRoZSBhZGphY2VudCBzZWxlY3QgbGlzdCwgdGhleSB3aWxsIGJl IGJ1bmRsZWQgd2l0aCB5b3VyIHBsdWdpbiBhbmQgdGh1cyBpbnN0YWxsZWQgYXV0b21hdGlj YWxseSBpZiB0aGUgbGFuZ3VhZ2UgbWF0Y2hlcyB0aGUgb25lIGluIHVzZSBieSB0aGUgYWRt aW5pc3RyYXRvciB3aG8gaW5zdGFsbHMgdGhlIHBsdWdpbi48L2xpPgoJPGxpPjxzdHJvbmc+ RXhwb3J0IGFzIGFiY19teXBsdWdpbi50eHQgKGNvbXByZXNzZWQpPC9zdHJvbmc+IDogY29u dmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiBhcyBhIHJlZGlzdHJpYnV0YWJsZSwgZ3ppcHBlZCB0 ZXh0IGZpbGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzIHRvIGluc3RhbGwuIFVzZWZ1 bCBmb3IgbGFyZ2UgcGx1Z2lucyBvciB0byBvZmZlciBhbiBhbHRlcm5hdGl2ZSBmb3IgcGVv cGxlIHdobyBoYXZlIHN0cmluZ2VudCBzaXplIGxpbWl0cyBpbXBvc2VkIGJ5IHRoZWlyIGhv c3QuIFRleHRwYWNrIHN0cmluZ3MgYXJlIGJ1bmRsZWQgdG9vIGlmIHlvdSBoYXZlIGNob3Nl biBhdCBsZWFzdCBvbmUgbGFuZ3VhZ2UgZnJvbSB0aGUgc2VsZWN0IGxpc3QuPC9saT4KCTxs aT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4ucGhwPC9zdHJvbmc+IDogc2F2ZXMg dGhlIHBsdWdpbiBpbiBhIFRleHRwYXR0ZXJuIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdC4g VXNlZnVsIGZvciBrZWVwaW5nIHRoZSBwbHVnaW4gZm9yIHlvdXJzZWxmICYjODIxMjsgY29t cGxldGUgd2l0aCBUZXh0aWxlZCBoZWxwIG1hcmt1cCAmIzgyMTI7IHNvIGl0IGNhbiBiZSBs YXRlciBlZGl0ZWQgYW5kIHJlLWlzc3VlZCAvIHVwZGF0ZWQgb3Igc2hhcmVkIHdpdGggb3Ro ZXIgZGV2ZWxvcGVycyB3aG8gaGF2ZSB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHplbV90cGwu cGhwIGNvbXBpbGVyLiBUZXh0cGFjayBzdHJpbmdzIGFyZSBidW5kbGVkIGFzIHBhcnQgb2Yg dGhlIHRlbXBsYXRlIGlmIHlvdSBjaG9vc2UuPC9saT4KCTxsaT48c3Ryb25nPkV4cG9ydCBU ZXh0cGFjayhzKTwvc3Ryb25nPiA6IGNob29zZSBvbmUgb3IgbW9yZSBsYW5ndWFnZXMgZnJv bSB0aGUgc2VsZWN0IGxpc3QgdG8gZ2F0aGVyIGFsbCB5b3VyIHBsdWdpbiYjODIxNztzIFRl eHRwYWNrIHN0cmluZ3MgYW5kIGRvd25sb2FkIHRoZW0gYXMgYSByZWRpc3RyaWJ1dGFibGUg dGV4dCBmaWxlIGZvciBvdGhlciB0ZXh0cGF0dGVybiB1c2VycyB0byBpbnN0YWxsIG9yIG1v ZGlmeS4gWW91IChvciBhbnlvbmUgZWxzZSkgd2lsbCAob25lIGRheSkgYmUgYWJsZSB0byB1 cGxvYWQgbGlua3MgdG8gVGV4dHBhY2tzIG9uIHRleHRwYXR0ZXJuLm9yZyBzbyB0aGV5IGFy ZSBhdmFpbGFibGUgZnJvbSBhIGNlbnRyYWwgbG9jYXRpb24uPC9saT4KPC91bD4KCjxwPk5v dGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhlIFRleHRp bGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2VkIFRleHRp bGUgb3Igbm90OyBpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgaGVhZGVyICg8Y29k ZT5oMS48L2NvZGU+IHRocm91Z2ggPGNvZGU+aDYuPC9jb2RlPikuIFJ1bm5pbmcgcHVyZSA8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGhyb3VnaCBUZXh0aWxlIG1heSBvY2Nh c2lvbmFsbHkgY2F1c2UgZW5jb2RpbmcgaXNzdWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2lu YWwgY2hhcmFjdGVyIHNldCB1c2VkLCBzbyBpdCBpcyBhbHdheXMgYmVzdCB0byB0cnkgYW5k IHN0aWNrIHRvIFRleHRpbGUgYXMgdGhlIGRvY3VtZW50YXRpb24gc3lzdGVtLjwvcD4KCjxo MiBpZD0iaWVkX3BsdWdpbl9yZXN0b3JlIj5SZXN0b3JlIHBvaW50czwvaDI+Cgo8cD5XaGVu IGEgcGx1Z2luIGlzIGluc3RhbGxlZCwgYSBjb3B5IGlzIGtlcHQgaW4gdGhlIGRhdGFiYXNl LiBJZiB0aGUgcGx1Z2luIGNvZGUgKG5vdCBoZWxwIHRleHQpIGlzIHN1YnNlcXVlbnRseSBl ZGl0ZWQsIHRoZSBwbHVnaW4gaXMgY29uc2lkZXJlZCAmIzgyMjA7bW9kaWZpZWQmIzgyMjE7 OyBpbmRpY2F0ZWQgaW4gdGhlIHBsdWdpbiBjb21wb3NlciYjODIxNztzIDxhIGhyZWY9IiNp ZWRfcGx1Z2luX2xpc3QiPmxpc3QgcGFuZWw8L2E+LiBTb21ldGltZXMgeW91IG1heSB3aXNo IHRvIHJldmVydCBhbnkgY2hhbmdlcyBiYWNrIHRvIHRoZSBhcy1pbnN0YWxsZWQgc3RhdGUu PC9wPgoKPHA+QW55IHRpbWUgYSBwbHVnaW4gaXMgbWFya2VkIGFzICYjODIxNjttb2RpZmll ZCYjODIxNzssIHRoZSB2ZXJzaW9uIG51bWJlciBiZWNvbWVzIGNsaWNrYWJsZSBmcm9tIHRo ZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0Ij5saXN0IHBhbmVsPC9hPi4gQ2xpY2tpbmcg aXQgKGFuZCBjb25maXJtaW5nIHlvdSBhcmUgc3VyZSkgd2lsbCB3aXBlIG91dCBhbnkgY2hh bmdlcyB5b3UgbWFkZSBhbmQgcmV0dXJuIHRoZSBwbHVnaW4gdG8gaXRzIGluc3RhbGxlZCBz dGF0ZS48L3A+Cgo8cD5EdXJpbmcgdGhlIGVkaXRpbmcgcHJvY2VzcyBvZiB5b3VyIG93biBw bHVnaW5zLCBpdCBtYXkgYmUgdGhhdCBhdCBjZXJ0YWluIHRpbWVzIHlvdSB3aXNoIHRvIHB1 dCBhIHN0YWtlIGluIHRoZSBncm91bmQgYW5kIHNheSAmIzgyMjA7dGhpcyBpcyBteSBjdXJy ZW50IGJhc2VsaW5lIHRoYXQgSSBtaWdodCB3YW50IHRvIHJldHVybiB0byBsYXRlciYjODIy MTsuIFBlcmhhcHMgeW91IGFyZSBhYm91dCB0byBtYWtlIHNvbWUgbWFqb3IgZWRpdHMgb3Ig dHJ5IHNvbWV0aGluZyBleHBlcmltZW50YWwgYW5kIHdhbnQgYW4gZWFzeSBmYWxsYmFjayBt ZWNoYW5pc20uIFRoYXQmIzgyMTc7cyB3aGVyZSB0aGUgJiM4MjIwO1Jlc3RvcmUgcG9pbnQm IzgyMjE7IGNoZWNrYm94IGNvbWVzIGluLjwvcD4KCjxwPkJ5IGNoZWNraW5nIHRoZSBib3gg d2hlbiB5b3UgZnVsbHkgc2F2ZSB5b3VyIHBsdWdpbiwgdGhlIGN1cnJlbnQgY29kZSB3aWxs IGJlY29tZSB5b3VyIG5ldyByb2xsYmFjayBwb2ludCBhbmQgdGhlIHBsdWdpbiB3aWxsIG5v IGxvbmdlciBiZSBtYXJrZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOy4gQW55IGNoYW5nZXMg bWFkZSBiZWZvcmVoYW5kIHdpbGwgbm90IGJlIHJlY292ZXJhYmxlIHNvIHlvdSB3aWxsIGhh dmUgdG8gcmVseSBvbiB5b3VyIG93biBiYWNrdXBzIGlmIHlvdSB3aXNoIHRvIGdvIGJhY2sg ZnVydGhlci4gQW55IGVkaXRzIHlvdSBtYWtlIGFmdGVyIGNyZWF0aW5nIGEgcmVzdG9yZSBw b2ludCBjYW4gYmUgdW5kb25lIGJ5IHZpc2l0aW5nIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdp bl9saXN0Ij5saXN0IHBhbmVsPC9hPiBhbmQgY2xpY2tpbmcgdGhlIHZlcnNpb24gbnVtYmVy IG5leHQgdG8geW91ciBwbHVnaW4uIEN1cnJlbnRseSwgb25seSBvbmUgcm9sbGJhY2sgcG9p bnQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIE5vdGUgdGhhdCB0aGUgJiM4MjIw O1Jlc3RvcmUgcG9pbnQmIzgyMjE7IGNoZWNrYm94IGlzIGlnbm9yZWQgZHVyaW5nIHNhdmlu ZyBvZiBtZXRhIGRhdGEgb25seSwgc2luY2UgeW91IGFyZSBub3Qgc2F2aW5nIGFueSBjb2Rl LjwvcD4KCjxoMiBpZD0iaWVkX3BsdWdpbl9zZXR1cCI+U2V0dXAgcGFuZWw8L2gyPgoKPHA+ Q2xpY2tpbmcgU2V0dXAgZnJvbSB0aGUgbWFpbiA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0 Ij5saXN0IHBhbmVsPC9hPiBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVnaW4gc2V0dGluZ3Mu PC9wPgoKPGRsPgoJPGR0PjxzdHJvbmc+UGx1Z2luIGVkaXRvcjwvc3Ryb25nPjwvZHQ+Cgk8 ZGQ+WW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUgY29kZSB1c2luZyBhIDNyZCBwYXJ0eSBz eW50YXggaGlnaGxpZ2h0ZXIuIEN1cnJlbnQgc3VwcG9ydCBpcyBmb3IgRWRpdEFyZWEsIENv ZGVNaXJyb3IgYW5kIENvZGVQcmVzcy48L2RkPgoJPGRkPkNob29zZSB0aGUgc3lzdGVtIGhl cmUsIGFuZCBzcGVjaWZ5IHRoZSA8YWNyb255bSB0aXRsZT0icyI+PHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj48L2Fjcm9ueW0+IG9mIHRoZSBzY3JpcHRzIGFuZCBzdHlsZXNoZWV0 cyBpbiB0aGUgYm94IGJlbmVhdGguIElmIHlvdXIgY2hvc2VuIGVkaXRvciByZXF1aXJlcyBt b3JlIHRoYW4gb25lIGZpbGUgdG8gYmUgbG9hZGVkIHRoZW4gbGlzdCB0aGVtIGFsbCwgc2Vw YXJhdGVkIGJ5IGNvbW1hcy4gSWYgYW55IG9mIHRoZSBmaWxlcyBhcmUgc3R5bGVzaGVldHMs IHByZWZpeCB0aGUgbmFtZSB3aXRoIDxjb2RlPmNzczo8L2NvZGU+IHNvIHRoZSBwbHVnaW4g a25vd3MgdG8gaW5zZXJ0IGEgPGNvZGU+Jmx0O2xpbmsgcmVsPSZxdW90O3N0eWxlc2hlZXQm cXVvdDsgLi4uJmd0OzwvY29kZT4gaW5zdGVhZCBvZiBhIDxjb2RlPiZsdDtzY3JpcHQmZ3Q7 PC9jb2RlPiB0YWcuPC9kZD4KCTxkZD5JZiB5b3Ugd2FudCB0byBzdXBwbHkgYW55IGNvbmZp Z3VyYXRpb24gb3B0aW9ucyB0byB0aGUgZWRpdG9yLCB0eXBlIHRoZW0gaW4gdGhlIDxzdHJv bmc+UGx1Z2luIGVkaXRvciBjb25maWd1cmF0aW9uIG9wdGlvbnM8L3N0cm9uZz4gdGV4dGFy ZWEuIFdyaXRlIHRoZW0gYXMgbmFtZTp2YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgY29tbWEs IGV4YWN0bHkgYXMgeW91IHdvdWxkIGlmIGluaXRpYWxpc2FpbmcgdGhlIHNjcmlwdCBhY2Nv cmRpbmcgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi48L2RkPgoJPGR0PjxzdHJvbmc+UGx1Z2lu IGVkaXRvciB3aWR0aDwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+VGhlIHNpemUgb2YgdGhlIHRleHRh cmVhcyBvbiB0aGUgPGEgaHJlZj0iI2llZF9wbHVnaW5fZWRpdCI+ZWRpdCBwYW5lbDwvYT4u IFNldCB0byBzdWl0IHlvdXIgc2NyZWVuIHJlc29sdXRpb24uIEluY2x1ZGUgdGhlIHVuaXRz IChweCwgZW0sICUsIGV0YykgaWYgeW91IHdpc2g7IGl0JiM4MjE3O2xsIGRlZmF1bHQgdG8g cGl4ZWxzIGlmIHlvdSBvbWl0IHRoZW0uPC9kZD4KCTxkdD48c3Ryb25nPkhlbHAgZWRpdG9y PC9zdHJvbmc+PC9kdD4KCTxkZD5Zb3UgbWF5IGNob29zZSB0byBlZGl0IHRoZSBoZWxwIG1h bnVhbGx5IHZpYSBUZXh0aWxlIG9yIHVzZSBUaW55TUNFIGZvciBhIG1vcmUgPHNwYW4gY2xh c3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGV4cGVyaWVuY2UuPC9kZD4KCTxkZD5JbiBhIHNp bWlsYXIgbWFubmVyIHRvIHRoZSBwbHVnaW4gY29kZSBlZGl0b3IgeW91IG5lZWQgdG8gdGVs bCB0aGUgY29tcG9zZXIgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIHRo ZSBqYXZhc2NyaXB0IGZpbGUuIFlvdSBjYW4gYWxzbyBzdXBwbHkgY29uZmlndXJhdGlvbiBv cHRpb25zLiBUaGUgZGVmYXVsdHMgc2hvdWxkIGdpdmUgeW91IGEgaGVhZCBzdGFydCBvbiBo b3cgdG8gdXNlIHRoZW06IGNvbnN1bHQgdGhlIFRpbnlNQ0UgZG9jdW1lbnRhdGlvbiBmb3Ig bW9yZS48L2RkPgoJPGR0PjxzdHJvbmc+T3B0aW9uYWwgaW50ZXJmYWNlIGVsZW1lbnRzPC9z dHJvbmc+PC9kdD4KCTxkZD5DaG9vc2Ugd2hpY2ggcGFydHMgb2YgdGhlIDxhIGhyZWY9IiNp ZWRfcGx1Z2luX2VkaXQiPmVkaXQgcGFuZWw8L2E+IHlvdSB3YW50IHRvIGJlIHZpc2libGUg aW4gdGhlIGludGVyZmFjZS48L2RkPgoJPGR0PjxzdHJvbmc+UGVyZm9ybSBsaWZlY3ljbGUg YWN0aW9ucyBvbjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+V2hlbiBwbHVnaW5zIGFyZSBpbnN0YWxs ZWQsIGVuYWJsZWQsIGRpc2FibGVkIG9yIGRlbGV0ZWQsIHBsdWdpbnMgY2FuIHJ1biBjb2Rl IHRvIHBlcmZvcm0gaW5zdGFsbGF0aW9uIG9yIGNsZWFudXAgYWN0aW9ucy4gQ2hvb3NlIHdo aWNoIG9uZXMgeW91IHdpc2ggdG8gcGVybWl0IHdoZW4gaW5zdGFsbGluZywgZW5hYmxpbmcv ZGlzYWJsaW5nIG9yIGRlbGV0aW5nIHBsdWdpbnMgZnJvbSB0aGUgY29tcG9zZXImIzgyMTc7 cyA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0Ij5saXN0IHBhbmVsPC9hPi48L2RkPgoJPGRk PlRoZSB2YWx1ZSBvZiB0aGUgJiM4MjE2O2luc3RhbGwmIzgyMTc7IGNoZWNrYm94IGNob3Nl biBoZXJlIGJlY29tZXMgdGhlIGRlZmF1bHQgb3B0aW9uIGluIHRoZSA8ZW0+UGVyZm9ybSBw b3N0LWluc3RhbGwgYWN0aW9uczwvZW0+IHJhZGlvIGJ1dHRvbiBpbiB0aGUgPGVtPkluc3Rh bGxhdGlvbjwvZW0+IHN1YnBhbmVsLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5BdXRvLWVuYWJsZSBw bHVnaW5zIG9uIGluc3RhbGw8L3N0cm9uZz48L2R0PgoJPGRkPldoZXRoZXIgdG8gYWxsb3cg cGx1Z2lucyB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCBvbiBhZnRlciBpbnN0YWxsYXRpb24s IG9yIHRvIHJldGFpbiB0aGVpciBwcmV2aW91cyBzdGF0dXMuPC9kZD4KCTxkZD5UaGUgc2V0 dGluZyBjaG9zZW4gaGVyZSBiZWNvbWVzIHRoZSBkZWZhdWx0IHJhZGlvIGJ1dHRvbiBzZWxl Y3Rpb24gdW5kZXIgdGhlIDxlbT5JbnN0YWxsPC9lbT4gdGV4dGFyZWEgb24gdGhlIDxhIGhy ZWY9IiNpZWRfcGx1Z2luX2xpc3QiPmxpc3QgcGFuZWw8L2E+LjwvZGQ+Cgk8ZHQ+PHN0cm9u Zz5TeW50YXggY2hlY2sgb24gY29kZSBzYXZlPC9zdHJvbmc+PC9kdD4KCTxkZD5XaGV0aGVy IHRvIHJ1biB0aGUgY29kZSB0aHJvdWdoIHRoZSBzeW50YXggY2hlY2tlciBvciBub3Qgd2hl biB5b3UgdXNlIHRoZSA8c3Ryb25nPlNhdmUgQ29kZTwvc3Ryb25nPiBidXR0b24uIEhpZ2hs eSByZWNvbW1lbmRlZCB0byBzYXZlIHlvdXIgYWRtaW4gc2lkZSBmcm9tIGJyZWFrYWdlIGR1 cmluZyBkZXZlbG9wbWVudC48L2RkPgoJPGR0PjxzdHJvbmc+VGV4dHBhY2sgbGFuZ3VhZ2Ug bGlzdDwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+V2hldGhlciB0byBvbmx5IGFsbG93IGVkaXRpbmcg b2Ygc3RyaW5ncyBmcm9tIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIGxhbmd1YWdlcywgb3Ig YWxsIGF2YWlsYWJsZSBUZXh0cGF0dGVybiBsYW5ndWFnZXMuPC9kZD4KCTxkdD48c3Ryb25n PkRlZmF1bHQgVGV4dHBhY2sgbGFuZ3VhZ2U8L3N0cm9uZz48L2R0PgoJPGRkPlRoZSBwcmlt YXJ5IGxhbmd1YWdlIGZvciB5b3VyIHBsdWdpbiBzdHJpbmdzIChkZWZhdWx0ID0gYW55KS4g SWYgeW91IGNob29zZSBhIGxhbmd1YWdlIHRoYXQgaXMgbm90IGluc3RhbGxlZCAoYW5kIHlv dSYjODIxNztyZSBsaW1pdGluZyB0aGUgbGFuZ3VhZ2UgbGlzdCB0byBvbmx5IHRob3NlIGlu c3RhbGxlZCkgdGhlIGRlZmF1bHQgbGFuZ3VhZ2Ugd2lsbCByZXZlcnQgdG8geW91ciBjdXJy ZW50IGFkbWluLXNpZGUgbGFuZ3VhZ2UuPC9kZD4KCTxkZD5Ob3RlIHRoYXQgaWYgeW91IHNl dCBhIGxhbmd1YWdlIGhlcmUsIHdoZW4geW91IGV4cG9ydCBUZXh0cGFja3Mgb3IgYnVpbGQg cGx1Z2lucywgdGhhdCB3aWxsIGJlIHRoZSBsYW5ndWFnZSBleHBlY3RlZCB0byBiZSBpbnN0 YWxsZWQgaW4gYSB1c2VyJiM4MjE3O3MgVGV4dHBhdHRlcm4uIElmIHlvdSBsZWF2ZSBpdCBh dCAmIzgyMTY7YW55JiM4MjE3OywgdGhlIGxhbmd1YWdlIG1hcmtlciBpcyBvbWl0dGVkIGZy b20gdGhlIFRleHRwYWNrIGFuZCB0aHVzIHRoZSBzdHJpbmdzIGJ1bmRsZWQgd2l0aCB0aGUg cGx1Z2luICh3aGljaCBtYXkgYmUgaW4gRW5nbGlzaCkgd2lsbCBpbnN0YWxsIGludG8gd2hp Y2hldmVyIGxhbmd1YWdlIGlzIHRoZSB1c2VyJiM4MjE3O3MgZGVmYXVsdCAod2hpY2ggbWF5 IGJlIHNvbWV0aGluZyBvdGhlciB0aGFuIEVuZ2xpc2gpLiBCeSBmb3JjaW5nIHRoZSBkZWZh dWx0IGxhbmd1YWdlLCB5b3UgZm9yY2UgdGhlIGxhbmd1YWdlIG1hcmtlciBpbiB0aGUgcGx1 Z2luLiBUaHVzIGlmIHlvdXIgdXNlcnMgZG9uJiM4MjE3O3QgaGF2ZSB0aGF0IGxhbmd1YWdl IGluc3RhbGxlZCAoZS5nLiBzb21lb25lIG9ubHkgaGFzIG5sLW5sIGluc3RhbGxlZCBhbmQg bm90IEVuZ2xpc2gpIGFuZCB0aGV5IGluc3RhbGwgeW91ciBwbHVnaW4sIGl0IHdpbGwgbG9v ayBhdCB0aGUgaW5zdGFsbGVkIGxhbmd1YWdlIChubC1ubCksIGNvbXBhcmUgaXQgdG8gdGhl IG9uZSBpbiB0aGUgcGx1Z2luIChlbi1nYiksIGZpbmQgaXQgZG9lc24mIzgyMTc7dCBtYXRj aCBhbmQgd2lsbCBza2lwIHRoZSBUZXh0cGFjayBpbnN0YWxsYXRpb24uIFRoaXMgd2lsbCBs ZWF2ZSB0aGUgdXNlciYjODIxNztzIGludGVyZmFjZSB3aXRoIGxvdHMgb2YgdWdseSA8Y29k ZT5hYmNfcGx1Z2luX3NvbWVfaXRlbTwvY29kZT4gc3RyaW5ncyBpbnN0ZWFkIG9mIHRoZSBh Y3R1YWwgdHJhbnNsYXRlZCBjb250ZW50LjwvZGQ+Cgk8ZGQ+VGhpcyBjb3VsZCBiZSBoYW5k eSBpZiB5b3UgYXJlIGRpc3RyaWJ1dGluZyBUZXh0cGFja3Mgc2VwYXJhdGVseSBhbmQgaGF2 ZSBhIGdvb2Qgc3RvY2sgb2YgdGhlbSwgb3IgaGF2ZSBsb2FkcyBvZiBUZXh0cGFja3MgYnVu ZGxlZCB3aXRoIHRoZSBwbHVnaW4sIGJ1dCBmb3IgOTUlIG9mIGNhc2VzIGl0IGlzIGJlc3Qg dG8gbGVhdmUgdGhlIGRlZmF1bHQgdGV4dHBhY2sgbGFuZ3VhZ2UgYXQgPGNvZGU+QW55PC9j b2RlPiBzbyB1c2VycyBvZiB5b3VyIHBsdWdpbiBhcmUgZ3VhcmFudGVlZCB0byBnZXQgc29t ZSB0cmFuc2xhdGVkIHN0cmluZ3MsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGluIHRoZWlyICYj ODIxNjtsb2NhbCYjODIxNzsgbGFuZ3VhZ2UuIFRoZXkgY2FuIHRoZW4gYXQgbGVhc3QgdHJh bnNsYXRlIHRoZW0gYW5kIG1ha2UgdGhlIFRleHRwYWNrIGF2YWlsYWJsZSB0byBvdGhlciB1 c2Vycy48L2RkPgoJPGR0PjxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g ZXhwb3J0IG9yZGVyPC9zdHJvbmc+PC9kdD4KCTxkZD5XaGVuIHNhdmluZyB5b3VyIHBsdWdp biBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LCB0aGlzIGdvdmVybnMgd2hldGhl ciB5b3UgcHJlZmVyIHRoZSBjb2RlIGJsb2NrIHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZp bGUgYW5kIHRoZSBoZWxwIGJsb2NrIGJlbG93LCBvciB2aWNlIHZlcnNhLjwvZGQ+Cgk8ZHQ+ PHN0cm9uZz5FeHBvcnQgcGx1Z2luIGZpbGVuYW1lIGZvcm1hdDwvc3Ryb25nPjwvZHQ+Cgk8 ZHQ+PHN0cm9uZz5FeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQ8L3N0cm9uZz48 L2R0PgoJPGR0PjxzdHJvbmc+RXhwb3J0IHRlbXBsYXRlIGZpbGVuYW1lIGZvcm1hdDwvc3Ry b25nPjwvZHQ+Cgk8ZHQ+PHN0cm9uZz5UZXh0cGFjayBmaWxlbmFtZSBmb3JtYXQ8L3N0cm9u Zz48L2R0PgoJPGRkPlRoZXNlIGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlbmFtZXMg d2hlbiB5b3UgZXhwb3J0IHBsdWdpbnMvVGV4dHBhY2tzLiBUaGUgZmlyc3QgaXMgZm9yIHdo ZW4geW91IGV4cG9ydCBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bhbj4t NjQgcGx1Z2luczsgdGhlIHNlY29uZCBpcyBmb3IgY29tcHJlc3NlZCBwbHVnaW5zOyB0aGUg dGhpcmQgaXMgZm9yIGV4cG9ydGluZyBhIHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IHRlbXBsYXRlLCBhbmQgZmluYWxseSBmb3IgZXhwb3J0aW5nIFRleHRwYWNr cy48L2RkPgoJPGRkPldoZXJldmVyIHlvdSB0eXBlIDxjb2RlPntuYW1lfTwvY29kZT4sIHRo ZSBwbHVnaW4gbmFtZSB3aWxsIGFwcGVhci4gU2ltaWxhcmx5LCA8Y29kZT57dmVyc2lvbn08 L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCBwbHVnaW4gdmVyc2lv biBudW1iZXIuIEFuZCA8Y29kZT57bGFuZ308L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0 aCBlaXRoZXIgMSkgdGhlIGNob3NlbiBsYW5ndWFnZSBjb2RlLCBsaWtlIGVuLWdiOyAyKSAm IzgyMTY7YWxsJiM4MjE3OyBpZiB5b3UgY2hvc2UgdG8gZXhwb3J0IGFsbCB0ZXh0cGFja3Mg YXMgb25lIGZpbGU7IDMpIGFuIGFiYnJldmlhdGVkIGxpc3Qgb2YgY291bnRyaWVzIHRvIHdo aWNoIHRoZSBsYW5ndWFnZXMgaW4gdGhlIHBhY2sgYXBwbHkgaWYgeW91IGNob29zZSB0byBl eHBvcnQgbW9yZSB0aGFuIG9uZSwgZS5nLiA8Y29kZT5lbitmaStubCtmcitkZTwvY29kZT4u PC9kZD4KCTxkZD5Zb3UgY2FuIHR5cGUgYW55dGhpbmcgeW91IGxpa2UgaW4gdGhlc2UgYm94 ZXMsIGJ1dCBpdCYjODIxNztzIG1vcmUgdXNlZnVsIHRvIGluY2x1ZGUgdGhlIHJlcGxhY2Vt ZW50IHN0cmluZ3Mgc29tZXdoZXJlIGluIGVhY2ggYm94IHNvIHlvdSBkb24mIzgyMTc7dCBn ZXQgbmFtZSAvIHZlcnNpb24gY2xhc2hlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkb24mIzgy MTc7dCBsaWtlIHRoZSBmYWN0IHRoYXQgemlwcGVkIHBsdWdpbnMgYXJlIGV4cG9ydGVkIGFz IDxjb2RlPnBmeF9teV9wbHVnaW5fdjAuMV96aXAudHh0PC9jb2RlPiwgeW91IGNhbiBjaGFu Z2UgaXQuIFBlcmhhcHMgeW91IG1heSBwcmVmZXIgPGNvZGU+cGZ4X215X3BsdWdpbi1jb21w cmVzc2VkLTAuMS50eHQ8L2NvZGU+LiBJbiB3aGljaCBjYXNlLCBzZXQgdGhlIDJuZCBib3gg dG8gPGNvZGU+e25hbWV9LWNvbXByZXNzZWQte3ZlcnNpb259LnR4dDwvY29kZT4uPC9kZD4K CTxkZD5Ob3RlIHRoZSBleHRlbnNpb24gc2hvdWxkIHVzdWFsbHkgYmUgc3BlY2lmaWVkIHNv IHlvdXIgc3lzdGVtL2Jyb3dzZXIga25vd3MgdGhlIGZpbGUmIzgyMTc7cyB0eXBlIHdoZW4g aXQgaXMgZXhwb3J0ZWQsIGJ1dCBpdCYjODIxNztzIG5vdCBtYW5kYXRvcnkgYXMgdGhlIDxz cGFuIGNsYXNzPSJjYXBzIj5NSU1FPC9zcGFuPiB0eXBlIGlzIGdpdmVuLCBzbyAoZ29vZCkg YnJvd3NlcnMgc2hvdWxkIHJlYWQgdGhhdC48L2RkPgoJPGR0PjxzdHJvbmc+Q2FjaGUgVGV4 dGlsZWQgaGVscCBwYXRoPC9zdHJvbmc+PC9kdD4KCTxkZD5JZiB5b3Ugd2lzaCB0byB0YWtl IGFkdmFudGFnZSBvZiBoZWxwIGNhY2hlaW5nLCBwdXQgdGhlIHBhdGggdG8gYSB0ZW1wb3Jh cnkgZGlyZWN0b3J5IGluIHRoZSBib3guIEVtcHR5IHRoZSBib3ggaWYgeW91IHByZWZlciBz YXZlcyBhbmQgZXhwb3J0cyB0byBiZSBzbG93ZXIhPC9kZD4KCTxkZD5EZWZhdWx0cyB0byBU ZXh0cGF0dGVybiYjODIxNztzIHRlbXBvcmFyeSBkaXJlY3RvcnkuPC9kZD4KPC9kbD4KCjxo MiBpZD0iaWVkX3BsdWdpbl9ub3RlcyI+Tm90ZXMgLyBrbm93biBpc3N1ZXM8L2gyPgoKPG9s PgoJPGxpPldoZW4gYSBwbHVnaW4gaXMgc2F2ZWQgdG8gdGhlIHBsdWdpbl9jYWNoZV9kaXIs IGlmIHlvdSBoYXZlIG5vdCBwdXQgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gbWFya2Vy cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGJsb2NrIHRoZXkgd2ls bCBiZSBhZGRlZCBmb3IgeW91IGluIHRoZSB0ZXh0IGFyZWEgYnV0IDxlbT5ub3Q8L2VtPiBz YXZlZCBpbiB0aGUgYWN0dWFsIHRlbXBsYXRlIHVudGlsIHlvdSBzYXZlIGl0IGFnYWluIChl eHBvcnRpbmcgYXMgYSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIHVu YWZmZWN0ZWQpLiBTbyBpZiB5b3UgYXJlIGluIHRoZSBoYWJpdCBvZiBtYW51YWxseSBkb3du bG9hZGluZyB0aGUgZmlsZSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bh bj4gY2xpZW50IGltbWVkaWF0ZWx5IGFmdGVyIGEgc2F2ZSwganVzdCBzYXZlIHRoZSBwbHVn aW4gYWdhaW4gdG8gYmUgc3VyZS48L2xpPgoJPGxpPkxvYWRpbmcgVGV4dHBhY2sgc3RyaW5n cyBmcm9tIGEgZ1R4dCBmdW5jdGlvbiB3b24mIzgyMTc7dCB3b3JrIHVubGVzcyB5b3UgKHBl cmhhcHMgdGVtcG9yYXJpbHkpIHN3aXRjaCB5b3VyIHBsdWdpbiB0byBvbmUgb2YgdGhlIDxz cGFuIGNsYXNzPSJjYXBzIj5BSkFYPC9zcGFuPiB0eXBlcy48L2xpPgo8L29sPgoKPGgyPldy aXRpbmcgYSBwbHVnaW48L2gyPgoKPHA+WW91IHNob3VsZCBiZSBhd2FyZSBvZiB0aGUgPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTk4 ODEiPlBsdWdpbiBBdXRob3IgUmVzb3VyY2VzPC9hPiB0b3BpYyBvbiB0aGUgVGV4dHBhdHRl cm4gU3VwcG9ydCBGb3J1bSwgYW5kIHlvdSBtaWdodCBhbHNvIHdhbnQgdG8gaGF2ZSBhIGxv b2sgYXQgdGhlIHR1dG9yaWFscyBhbmQgZ3VpZGVzIGZvciA8YSBocmVmPSJodHRwOi8vZG9j cy50ZXh0cGF0dGVybi5pby9kZXZlbG9wbWVudC8iPlBsdWdpbiBkZXZlbG9wbWVudDwvYT4g aW4gdGhlIFRleHRwYXR0ZXJuIGRvY3VtZW50YXRpb24uPC9wPgoKPHA+SGFwcHkgcGx1Z2lu IGF1dGhvcmluZyA6LSk8L3A+Cgo8aDI+QXV0aG9yczwvaDI+Cgo8cD5PcmlnaW5hbCBwbHVn aW46IFl1cmEgTGlubnlrPGJyIC8+Ck1vZGlmaWNhdGlvbnMgKHYwLjUrKTogPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT48YnIg Lz4KQSB0b3VjaCBvZiBjbGFzczogU3RldmUgRGlja2luc29uPGJyIC8+ClBsdXMgaGVscCBm cm9tIGEgcGxldGhvcmEgb2YgZm9ydW0gY29udHJpYnV0b3JzIHRvbyBudW1lcm91cyB0byBt ZW50aW9uLiBZb3Uga25vdyB3aG8geW91IGFyZSwgdGhhbmsgeW91IDstKTwvcD4iO3M6Mzoi bWQ1IjtzOjMyOiJiMjMxNDQwMjc0YzBjYmZiNWFkZjYzNzEyYWQ0YmVjYSI7czo4OiJ0ZXh0 cGFjayI7czoxMDA5ODoiI0BpZWRfcGx1Z2luCmllZF9wbHVnaW5fYW55ID0+IEFueQppZWRf cGx1Z2luX2F1dG9fZW5hYmxlID0+IEF1dG8tZW5hYmxlIHBsdWdpbnMgb24gaW5zdGFsbApp ZWRfcGx1Z2luX2NhY2hlcGx1Z3NfbGVnZW5kID0+IFBsdWdpbnMgaW4gY2FjaGUgZGlyZWN0 b3J5CmllZF9wbHVnaW5fY2FjaGVfbm90X3NldCA9PiBBZHZhbmNlZCBwcmVmICJwbHVnaW4g Y2FjaGUgZGlyZWN0b3J5IiBub3QgZGVmaW5lZAppZWRfcGx1Z2luX2NoZWNrX3R5cGUgPT4g Q2hlY2sgeW91ciBwbHVnaW4gdHlwZSEKaWVkX3BsdWdpbl9jaG9vc2VfZmlsZSA9PiBQbGVh c2UgY2hvb3NlIGEgZmlsZSBmaXJzdAppZWRfcGx1Z2luX2NvZGVfZGlzdCA9PiBQbHVnaW4g Y29kZSBmb3IgZGlzdHJpYnV0aW9uCmllZF9wbHVnaW5fY29kZV9sZWdlbmQgPT4gUGx1Z2lu IGNvZGUKaWVkX3BsdWdpbl9jb2RlX3NhdmUgPT4gU2F2ZSBjb2RlCmllZF9wbHVnaW5fY29k ZV9zYXZlZCA9PiBDb2RlIHNhdmVkCmllZF9wbHVnaW5fY29kZV9zYXZlZF9mYWlsID0+IENv ZGUgc2F2aW5nIGZhaWxlZAppZWRfcGx1Z2luX2NvbXBvc2VyID0+IFBsdWdpbiBjb21wb3Nl cgppZWRfcGx1Z2luX2NvbXByZXNzID0+IFppcAppZWRfcGx1Z2luX2NwYW5lbF9sZWdlbmQg PT4gSW5zdGFsbGF0aW9uCmllZF9wbHVnaW5fY3JlYXRlX25ldyA9PiBDcmVhdGUgbmV3IHBs dWdpbgppZWRfcGx1Z2luX2RicGx1Z3NfbGVnZW5kID0+IFBsdWdpbnMgaW4gZGF0YWJhc2UK aWVkX3BsdWdpbl9kb2NzID0+IERvY3MKaWVkX3BsdWdpbl9kb2NzX2xlZ2VuZCA9PiBQbHVn aW4gaGVscAppZWRfcGx1Z2luX2VkaXQgPT4gRWRpdDoge25hbWV9IHZ7dmVyc2lvbn0KaWVk X3BsdWdpbl9lZGl0aW5nID0+IEVkaXRpbmcge25hbWV9IGluIFBsdWdpbiBDb21wb3Nlcgpp ZWRfcGx1Z2luX2VkaXRvciA9PiBQbHVnaW4gZWRpdG9yCmllZF9wbHVnaW5fZWRpdG9yX29w dGlvbnMgPT4gUGx1Z2luIGVkaXRvciBjb25maWd1cmF0aW9uIG9wdGlvbnMKaWVkX3BsdWdp bl9lZGl0b3JfcGF0aCA9PiBQbHVnaW4gZWRpdG9yIFVSTAppZWRfcGx1Z2luX2VkaXRvcl93 aWR0aCA9PiBQbHVnaW4gZWRpdG9yIHdpZHRoCmllZF9wbHVnaW5fZWRpdF9uZXcgPT4gRWRp dCB5b3VyIG5ldyBwbHVnaW4KaWVkX3BsdWdpbl9lbmFibGUgPT4gRW5hYmxlZAppZWRfcGx1 Z2luX2V4cG9ydCA9PiBFeHBvcnQgYXMge25hbWV9CmllZF9wbHVnaW5fZXhwb3J0X3RleHRw YWNrID0+IEV4cG9ydCB0ZXh0cGFjayhzKQppZWRfcGx1Z2luX2V4cG9ydF96aXAgPT4gRXhw b3J0IGFzIHtuYW1lfSAoY29tcHJlc3NlZCkKaWVkX3BsdWdpbl9mbGFncyA9PiBGbGFncwpp ZWRfcGx1Z2luX2ZsYWdfaGFzX3ByZWZzID0+IEhhcyBwcmVmcwppZWRfcGx1Z2luX2ZsYWdf bGlmZWN5Y2xlX25vdGlmeSA9PiBFdmVudCBub3RpZnkKaWVkX3BsdWdpbl9mbl9ub3RfZXhp c3QgPT4gKHRoZSBmdW5jdGlvbiBpcyBwcm9iYWJseSBqYXZhc2NyaXB0IG9yIG1hbmdsZWQg UEhQKQppZWRfcGx1Z2luX2hlbHBfZWRpdG9yID0+IEhlbHAgZWRpdG9yCmllZF9wbHVnaW5f aGVscF9lZGl0b3Jfb3B0aW9ucyA9PiBIZWxwIGVkaXRvciBjb25maWd1cmF0aW9uIG9wdGlv bnMKaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoID0+IEhlbHAgZWRpdG9yIFVSTAppZWRf cGx1Z2luX2hlbHBfbm90X2F2YWlsYWJsZSA9PiBQbHVnaW4gaGVscCBub3QgYXZhaWxhYmxl CmllZF9wbHVnaW5faWZfZWxfZGlzdCA9PiBDb2RlIGZvciBkaXN0cmlidXRpb24KaWVkX3Bs dWdpbl9pZl9lbF9zdHlsZSA9PiBIZWxwIHN0eWxlIGJsb2NrCmllZF9wbHVnaW5faWZfc2V0 dGluZ3MgPT4gSW50ZXJmYWNlIHNldHRpbmdzCmllZF9wbHVnaW5faW5zdGFsbF90ZXh0cGFj ayA9PiBJbnN0YWxsIGZpbGUncyBUZXh0cGFjawppZWRfcGx1Z2luX2luc3RhbGxfdHh0ID0+ IEluc3RhbGwgZnJvbSAudHh0IGZpbGUKaWVkX3BsdWdpbl9pbnRlcmZhY2VfZWxlbXMgPT4g T3B0aW9uYWwgaW50ZXJmYWNlIGVsZW1lbnRzCmllZF9wbHVnaW5fanVtcF90b19saW5lID0+ IEp1bXAgdG8gbGluZToKaWVkX3BsdWdpbl9sYW5nc19hbGwgPT4gQWxsIGF2YWlsYWJsZQpp ZWRfcGx1Z2luX2xhbmdzX2luc3RhbGxlZCA9PiBPbmx5IGluc3RhbGxlZAppZWRfcGx1Z2lu X2xhbmdfY2hvb3NlID0+IFRleHRwYWNrIGxhbmd1YWdlIGxpc3QKaWVkX3BsdWdpbl9sYW5n X2RlZmF1bHQgPT4gRGVmYXVsdCB0ZXh0cGFjayBsYW5ndWFnZQppZWRfcGx1Z2luX2xibF9s Y19kZWxldGUgPT4gRGVsZXRlCmllZF9wbHVnaW5fbGJsX2xjX2Rpc2FibGUgPT4gRGlzYWJs ZQppZWRfcGx1Z2luX2xibF9sY19kaXNkZWwgPT4gRGlzYWJsZStEZWxldGUKaWVkX3BsdWdp bl9sYmxfbGNfZW5hYmxlID0+IEVuYWJsZQppZWRfcGx1Z2luX2xibF9sY19pbnN0YWJsZSA9 PiBJbnN0YWxsK0VuYWJsZQppZWRfcGx1Z2luX2xibF9sY19pbnN0YWxsID0+IEluc3RhbGwK aWVkX3BsdWdpbl9sYmxfb3BfY29kZV9maXJzdCA9PiBDb2RlIGZpcnN0CmllZF9wbHVnaW5f bGJsX29wX2hlbHBfZmlyc3QgPT4gSGVscCBmaXJzdAppZWRfcGx1Z2luX2xibF9zZXR1cCA9 PiBQbHVnaW4gY29tcG9zZXIgc2V0dXAKaWVkX3BsdWdpbl9sY19maXJlZCA9PiBMaWZlY3lj bGUgZXZlbnQge2V2ZW50fSBmaXJlZCBmb3Ige25hbWV9CmllZF9wbHVnaW5fbGlmZWN5Y2xl ID0+IEZpcmUgbGlmZWN5Y2xlIGV2ZW50CmllZF9wbHVnaW5fbGlmZWN5Y2xlX29wdGlvbnMg PT4gUGVyZm9ybSBsaWZlY3ljbGUgYWN0aW9ucyBvbgppZWRfcGx1Z2luX2xpc3QgPT4gUGx1 Z2luIGxpc3QKaWVkX3BsdWdpbl9sb2FkID0+IExvYWQKaWVkX3BsdWdpbl9sb2FkX29yZGVy ID0+IExvYWQgb3JkZXIKaWVkX3BsdWdpbl9sb2FkX29yZGVyX2hlbHAgPT4gKDE9Zmlyc3Qg PiA1PW5vcm1hbCA+IDk9bGFzdCkKaWVkX3BsdWdpbl9tZXRhX2xlZ2VuZCA9PiBNZXRhIGlu Zm9ybWF0aW9uCmllZF9wbHVnaW5fbWV0YV9zYXZlID0+IFNhdmUgbWV0YQppZWRfcGx1Z2lu X21ldGFfc2F2ZWQgPT4gTWV0YSBpbmZvIHNhdmVkCmllZF9wbHVnaW5fbWV0YV9zYXZlZF9m YWlsID0+IE1ldGEgaW5mbyBub3Qgc2F2ZWQKaWVkX3BsdWdpbl9tc2dwb3BfbGJsID0+IHBo cGRvYyBibG9jawppZWRfcGx1Z2luX25hbWVfZmlyc3QgPT4gUGxlYXNlIG5hbWUgdGhlIHBs dWdpbiBiZWZvcmUgY3JlYXRpbmcgaXQKaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIgPT4gUEhQ IGV4cG9ydCBvcmRlcgppZWRfcGx1Z2luX291dHB1dF9zZmlsZSA9PiBFeHBvcnQgcGx1Z2lu IGZpbGVuYW1lIGZvcm1hdAppZWRfcGx1Z2luX291dHB1dF9zZmlsZWMgPT4gRXhwb3J0IGNv bXByZXNzZWQgZmlsZW5hbWUgZm9ybWF0CmllZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCA9PiBQ bHVnaW4gdGVtcGxhdGUgZmlsZW5hbWUgZm9ybWF0CmllZF9wbHVnaW5fb3V0cHV0X3NmaWxl dCA9PiBUZXh0cGFjayBmaWxlbmFtZSBmb3JtYXQKaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2Fj aGUgPT4gQ2FjaGUgVGV4dGlsZWQgaGVscCBwYXRoCmllZF9wbHVnaW5fcGFja19sZWdlbmQg PT4gVGV4dHBhY2sgc3RyaW5ncwppZWRfcGx1Z2luX3BocF9kb2MgPT4gTWFrZSBwaHBkb2MK aWVkX3BsdWdpbl9wcmVmcyA9PiBQcmVmZXJlbmNlcwppZWRfcGx1Z2luX3ByZWZzX2RlbGV0 ZWQgPT4gUHJlZmVyZW5jZXMgZGVsZXRlZAppZWRfcGx1Z2luX3JlbmFtZWQgPT4gKHJlbmFt ZWQpCmllZF9wbHVnaW5fcmVuYW1lX2ZhaWxlZCA9PiAocmVuYW1lIGZhaWxlZCkKaWVkX3Bs dWdpbl9yZW5hbWVfZmlsZSA9PiBSZW5hbWUgZmlsZQppZWRfcGx1Z2luX3Jlc3RvcmVkID0+ IFBsdWdpbiB7bmFtZX0gcmVzdG9yZWQuCmllZF9wbHVnaW5fcmVzdG9yZV9oZWxwID0+IFJv bGwgYmFjayB0aGUgcGx1Z2luIGNvZGUgdG8gdGhlIG1vc3QgcmVjZW50IHJlc3RvcmUgcG9p bnQKaWVkX3BsdWdpbl9yZXN0b3JlX3BvaW50ID0+IFJlc3RvcmUgcG9pbnQKaWVkX3BsdWdp bl9yZXN0b3JlX3ZlcmlmeSA9PiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcm9sbGJhY2sg dGhlIHtuYW1lfSBzb3VyY2UgY29kZSB0byBpdHMgbGFzdCByZXN0b3JlIHBvaW50PwppZWRf cGx1Z2luX3J1bl9pbnN0YWxsID0+IFBlcmZvcm0gcG9zdC1pbnN0YWxsIGFjdGlvbnMKaWVk X3BsdWdpbl9zYW1lID0+IFNhbWUKaWVkX3BsdWdpbl9zYXZlX2FzID0+IFNhdmUgYXMge25h bWV9CmllZF9wbHVnaW5fc2V0dXAgPT4gU2V0dXAKaWVkX3BsdWdpbl9zeW50YXhfY2hlY2sg PT4gU3ludGF4IGNoZWNrIG9uIGNvZGUgc2F2ZQppZWRfcGx1Z2luX3N5bnRheF9lcnIgPT4g U3ludGF4IGVycm9yCmllZF9wbHVnaW5fdG9nZ2xlID0+IFRvZ2dsZQppZWRfcGx1Z2luX3Rw X3BvcHVsYXRlID0+IExvYWQgc3RyaW5ncyBmcm9tIGZ1bmN0aW9uCmllZF9wbHVnaW5fdHBf cHJlZml4ID0+IFRleHRwYWNrIHByZWZpeAppZWRfcGx1Z2luX3R5cGUgPT4gUGx1Z2luIHR5 cGUKaWVkX3BsdWdpbl90eXBlXzAgPT4gUHVibGljCmllZF9wbHVnaW5fdHlwZV8xID0+IEFk bWluICsgUHVibGljCmllZF9wbHVnaW5fdHlwZV8yID0+IExpYnJhcnkKaWVkX3BsdWdpbl90 eXBlXzMgPT4gQWRtaW4gb25seQppZWRfcGx1Z2luX3R5cGVfNCA9PiBBZG1pbiAoK0FKQVgp CmllZF9wbHVnaW5fdHlwZV81ID0+IEFkbWluICsgUHVibGljICgrQUpBWCkKaWVkX3BsdWdp bl91cGRhdGVkID0+IFBsdWdpbiB7bmFtZX0gdXBkYXRlZAppZWRfcGx1Z2luX3VwbG9hZGVk ID0+IFBsdWdpbiB7bmFtZX0gdXBsb2FkZWQKaWVkX3BsdWdpbl91cGxvYWRfcGhwID0+IFVw bG9hZCBwbHVnaW4KaWVkX3BsdWdpbl91dGlsc19sZWdlbmQgPT4gRGlzdHJpYnV0aW9uCmll ZF9wbHVnaW5fdXRpbHNfbGVnZW5kX2V4dHJhID0+IE9ubHkgZm9yIHVzZSBhZnRlciBzYXZp bmcKaWVkX3BsdWdpbl92aWV3X2hlbHAgPT4gSGVscDoge25hbWV9CiNAaWVkX3BsdWdpbgoj QGxhbmd1YWdlIGZyLWZyCmllZF9wbHVnaW5fYW55ID0+IFRvdXMKaWVkX3BsdWdpbl9hdXRv X2VuYWJsZSA9PiBBY3RpdmVyIGxlcyBwbHVnaW5zIGTDqHMgbGV1ciBpbnN0YWxsYXRpb24K aWVkX3BsdWdpbl9jYWNoZXBsdWdzX2xlZ2VuZCA9PiBMZXMgUGx1Z2lucyBzb250IGNoYXJn w6lzIGRlcHVpcyBsZSBjYWNoZQppZWRfcGx1Z2luX2NhY2hlX25vdF9zZXQgPT4gTGUgcGFy YW3DqHRyZSAiY2hlbWluIGR1IGNhY2hlIGRlcyBwbHVnaW5zIiBkZXMgcHLDqWbDqXJlbmNl cyBhdmFuY8OpZXMgbidlc3QgcGFzIHJlbnNlaWduw6kKaWVkX3BsdWdpbl9jaGVja190eXBl ID0+IFJlbnNlaWduZXogbGUgdHlwZSBkZSB2b3RyZSBwbHVnaW4gIQppZWRfcGx1Z2luX2No b29zZV9maWxlID0+IFZldWlsbGV6IGNob2lzaXIgZCdhYm9yZCB1biBmaWNoaWVyCmllZF9w bHVnaW5fY29kZV9kaXN0ID0+IENvZGUgZGUgZGlzdHJpYnV0aW9uIGR1IHBsdWdpbgppZWRf cGx1Z2luX2NvZGVfbGVnZW5kID0+IENvZGUgc291cmNlIGR1IHBsdWdpbgppZWRfcGx1Z2lu X2NvZGVfc2F2ZSA9PiBTYXV2ZWdhcmRlciBsZSBjb2RlCmllZF9wbHVnaW5fY29kZV9zYXZl ZCA9PiBDb2RlIHNhdXZlZ2FyZMOpCmllZF9wbHVnaW5fY29kZV9zYXZlZF9mYWlsID0+IMOJ Y2hlYyBkZSBzYXV2ZWdhcmRlIGR1IGNvZGUKaWVkX3BsdWdpbl9jb21wb3NlciA9PiBQbHVn aW4gY29tcG9zZXIKaWVkX3BsdWdpbl9jb21wcmVzcyA9PiBaaXAKaWVkX3BsdWdpbl9jcGFu ZWxfbGVnZW5kID0+IEluc3RhbGxhdGlvbgppZWRfcGx1Z2luX2NyZWF0ZV9uZXcgPT4gQ3LD qWVyIHVuIG5vdXZlYXUgcGx1Z2luCmllZF9wbHVnaW5fZGJwbHVnc19sZWdlbmQgPT4gUGx1 Z2lucyBkaXNwb25pYmxlcwppZWRfcGx1Z2luX2RvY3MgPT4gRG9jcwppZWRfcGx1Z2luX2Rv Y3NfbGVnZW5kID0+IEFpZGUgZHUgcGx1Z2luCmllZF9wbHVnaW5fZWRpdCA9PiDDiWRpdGVy IDoge25hbWV9IHZ7dmVyc2lvbn0KaWVkX3BsdWdpbl9lZGl0aW5nID0+IMOJZGl0aW9uIGRl IHtuYW1lfSBkZXB1aXMgUGx1Z2luIENvbXBvc2VyCmllZF9wbHVnaW5fZWRpdG9yID0+IMOJ ZGl0ZXVyIGRlIHBsdWdpbnMKaWVkX3BsdWdpbl9lZGl0b3Jfb3B0aW9ucyA9PiBPcHRpb25z IGRlIGNvbmZpZ3VyYXRpb24gZGUgbCfDqWRpdGV1ciBkZSBwbHVnaW5zCmllZF9wbHVnaW5f ZWRpdG9yX3BhdGggPT4gVVJMIGRlIGwnw6lkaXRldXIgZGUgcGx1Z2lucwppZWRfcGx1Z2lu X2VkaXRvcl93aWR0aCA9PiBUYWlsbGUgKGxhcmdldXIpIGRlIGwnw6lkaXRldXIgZGUgcGx1 Z2luCmllZF9wbHVnaW5fZWRpdF9uZXcgPT4gw4lkaXRlciB2b3RyZSBub3V2ZWF1IHBsdWdp bgppZWRfcGx1Z2luX2VuYWJsZSA9PiBBY3RpdsOpCmllZF9wbHVnaW5fZXhwb3J0ID0+IEV4 cG9ydGVyIHNvdXMge25hbWV9CmllZF9wbHVnaW5fZXhwb3J0X3RleHRwYWNrID0+IEV4cG9y dGVyIGxlKHMpIHRleHRwYWNrKHMpCmllZF9wbHVnaW5fZXhwb3J0X3ppcCA9PiBFeHBvcnRl ciBzb3VzIHtuYW1lfSAoY29tcHJlc3PDqSkKaWVkX3BsdWdpbl9mbGFncyA9PiBGbGFncwpp ZWRfcGx1Z2luX2ZsYWdfaGFzX3ByZWZzID0+IEEgbGVzIHByw6lmcwppZWRfcGx1Z2luX2Zs YWdfbGlmZWN5Y2xlX25vdGlmeSA9PiBOb3RpZmljYXRpb24gZCfDqXbDqW5lbWVudAppZWRf cGx1Z2luX2ZuX25vdF9leGlzdCA9PiAobGEgZm9uY3Rpb24gZXN0IHByb2JhYmxlbWVudCBl biBqYXZhc2NyaXB0IG91IGNvbnRpZW50IGR1IFBIUCBjb3Jyb21wdSkKaWVkX3BsdWdpbl9o ZWxwX2VkaXRvciA9PiDDiWRpdGV1ciBkZSBsJ2FpZGUKaWVkX3BsdWdpbl9oZWxwX2VkaXRv cl9vcHRpb25zID0+IENvbmZpZ3VyYXRpb24gcG91ciBsJ8OpZGl0ZXVyIGRlIGwnYWlkZQpp ZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGggPT4gVVJMIHBvdXIgbCfDqWRpdGV1ciBkZSBs J2FpZGUKaWVkX3BsdWdpbl9oZWxwX25vdF9hdmFpbGFibGUgPT4gQWlkZSBkdSBwbHVnaW4g bm9uIGRpc3BvbmlibGUKaWVkX3BsdWdpbl9pZl9lbF9kaXN0ID0+IENvZGUgZGUgZGlzdHJp YnV0aW9uCmllZF9wbHVnaW5faWZfZWxfc3R5bGUgPT4gQmxvYyBDU1MgcG91ciBsJ2FpZGUK aWVkX3BsdWdpbl9pZl9zZXR0aW5ncyA9PiBQYXJhbcOodHJlcyBkZSBsJ2ludGVyZmFjZQpp ZWRfcGx1Z2luX2luc3RhbGxfdHh0ID0+IEluc3RhbGxlciBkZXB1aXMgdW4gZmljaGllciAu dHh0CmllZF9wbHVnaW5faW50ZXJmYWNlX2VsZW1zID0+IMOJbMOpbWVudHMgb3B0aW9uZWxz IGRlIGwnaW50ZXJmYWNlCmllZF9wbHVnaW5fanVtcF90b19saW5lID0+IEFsbGVyIMOgIGxh IGxpZ25lIDoKaWVkX3BsdWdpbl9sYW5nc19hbGwgPT4gVG91dGVzIGRpc3BvbmlibGVzCmll ZF9wbHVnaW5fbGFuZ3NfaW5zdGFsbGVkID0+IFNldWxlbWVudCBpbnN0YWxsw6llcwppZWRf cGx1Z2luX2xhbmdfY2hvb3NlID0+IExpc3RlIGRlcyB0cmFkdWN0aW9ucyAoVGV4dHBhY2sp CmllZF9wbHVnaW5fbGFuZ19kZWZhdWx0ID0+IExhbmd1ZSBwYXIgZMOpZmF1dCAoVGV4dHBh Y2spCmllZF9wbHVnaW5fbGJsX2xjX2RlbGV0ZSA9PiBTdXBwcmltZXIKaWVkX3BsdWdpbl9s YmxfbGNfZGlzYWJsZSA9PiBEw6lzYWN0aXZlcgppZWRfcGx1Z2luX2xibF9sY19lbmFibGUg PT4gQWN0aXZlcgppZWRfcGx1Z2luX2xibF9sY19pbnN0YWxsID0+IEluc3RhbGxlcgppZWRf cGx1Z2luX2xibF9vcF9jb2RlX2ZpcnN0ID0+IENvZGUgYXUgZMOpYnV0CmllZF9wbHVnaW5f bGJsX29wX2hlbHBfZmlyc3QgPT4gQWlkZSBhdSBkw6lidXQKaWVkX3BsdWdpbl9sYmxfc2V0 dXAgPT4gQ29uZmlndXJhdGlvbiBkZSBQbHVnaW4gY29tcG9zZXIKaWVkX3BsdWdpbl9saWZl Y3ljbGVfb3B0aW9ucyA9PiBSw6lhbGlzZXIgbGVzIGFjdGlvbnMgImxpZmVjeWNsZSIgc3Vy CmllZF9wbHVnaW5fbG9hZCA9PiBDaGFyZ2VyCmllZF9wbHVnaW5fbG9hZF9vcmRlciA9PiBP cmRyZSBkZSBjaGFyZ2VtZW50CmllZF9wbHVnaW5fbG9hZF9vcmRlcl9oZWxwID0+ICgxPXBy ZW1pZXIgPiA1PW5vcm1hbCA+IDk9ZGVybmllcikKaWVkX3BsdWdpbl9tZXRhX2xlZ2VuZCA9 PiBNZXRhIGluZm9ybWF0aW9uCmllZF9wbHVnaW5fbXNncG9wX2xibCA9PiBCbG9jIHBocGRv YwppZWRfcGx1Z2luX25hbWVfZmlyc3QgPT4gVmV1aWxsZXogbm9tbWVyIGxlIHBsdWdpbiBh dmFudCBkZSBwb3V2b2lyIGxlIGNyw6llcgppZWRfcGx1Z2luX291dHB1dF9vcmRlciA9PiBP cmRlIGQnZXhwb3J0YXRpb24gZHUgc291cmNlIFBIUAppZWRfcGx1Z2luX291dHB1dF9zZmls ZSA9PiBOb21zIGQnZXhwb3J0YXRpb24gZGVzIGZpY2hpZXJzIHBsdWdpbgppZWRfcGx1Z2lu X291dHB1dF9zZmlsZWMgPT4gTm9tcyBkZXMgZmljaGllcnMgY29tcHJlc3PDqXMKaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVwID0+IE5vbXMgZGVzIGZpY2hpZXJzIFBsdWdpbgppZWRfcGx1 Z2luX291dHB1dF9zZmlsZXQgPT4gTm9tcyBkZXMgZmljaGllcnMgVGV4dHBhY2sKaWVkX3Bs dWdpbl9vdXRwdXRfdG1wY2FjaGUgPT4gQ2hlbWluIGR1IGNhY2hlIGRlIGwnYWlkZSBzb3Vz IFRleHRpbGUKaWVkX3BsdWdpbl9wYWNrX2xlZ2VuZCA9PiBDaGHDrm5lcyBkdSBUZXh0cGFj awppZWRfcGx1Z2luX3BocF9kb2MgPT4gQ3LDqWVyIHVuIHBocGRvYwppZWRfcGx1Z2luX3By ZWZzID0+IFByw6lmw6lyZW5jZXMKaWVkX3BsdWdpbl9wcmVmc19kZWxldGVkID0+IFByw6lm w6lyZW5jZXMgc3VwcHJpbcOpZXMKaWVkX3BsdWdpbl9yZW5hbWVkID0+IChyZW5vbcOpKQpp ZWRfcGx1Z2luX3JlbmFtZV9mYWlsZWQgPT4gKMOpY2hlYyBkZSByZW5vbWFnZSkKaWVkX3Bs dWdpbl9yZW5hbWVfZmlsZSA9PiBSZW5vbWVyIGxlIGZpY2hpZXIKaWVkX3BsdWdpbl9yZXN0 b3JlZCA9PiBQbHVnaW4ge25hbWV9IHJlc3RhdXLDqS4KaWVkX3BsdWdpbl9yZXN0b3JlX2hl bHAgPT4gUmVzdGl0dWVyIGxlIGNvZGUgZHUgcGx1Z2luIMOgIHBhcnRpciBkZSBzb24gZGVy bmllciBwb2ludCBkZSByZXN0YXVyYXRpb24KaWVkX3BsdWdpbl9yZXN0b3JlX3BvaW50ID0+ IFBvaW50IGRlIHJlc3RhdXJhdGlvbgppZWRfcGx1Z2luX3Jlc3RvcmVfdmVyaWZ5ID0+IMOK dGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIHJlc3RpdHVlciBsZSBjb2RlIHNvdXJjZSBkZSB7 bmFtZX0gw6AgcGFydGlyIGRlIHNvbiBkZXJuaWVyIHBvaW50IGRlIHJlc3RhdXJhdGlvbiA/ CmllZF9wbHVnaW5fcnVuX2luc3RhbGwgPT4gRWZmZWN0dWVyIGxlcyBhY3Rpb25zIGRlIHBv c3QtaW5zdGFsbGF0aW9uCmllZF9wbHVnaW5fc2FtZSA9PiBOb20KaWVkX3BsdWdpbl9zYXZl X2FzID0+IFNhdXZlciBzb3VzIHtuYW1lfQppZWRfcGx1Z2luX3NldHVwID0+IENvbmZpZ3Vy YXRpb24KaWVkX3BsdWdpbl9zeW50YXhfY2hlY2sgPT4gVsOpcmlmaWVyIGxhIHN5bnRheGUg ZHUgY29kZSBhdmFudCBzYXV2ZWdhcmRlCmllZF9wbHVnaW5fc3ludGF4X2VyciA9PiBFcnJl dXIgZGUgc3ludGF4ZQppZWRfcGx1Z2luX3RwX3BvcHVsYXRlID0+IEVzc2F5ZXIgZGUgY2hh cmdlciBsZXMgY2hhw65uZXMgZGVwdWlzIGxhIGZvbmN0aW9uCmllZF9wbHVnaW5fdHBfcHJl Zml4ID0+IFByw6lmaXhlIGR1IFRleHRwYWNrCmllZF9wbHVnaW5fdHlwZSA9PiBUeXBlIGRl IHBsdWdpbgppZWRfcGx1Z2luX3R5cGVfMCA9PiBQdWJsaWMKaWVkX3BsdWdpbl90eXBlXzEg PT4gQWRtaW4gKyBQdWJsaWMKaWVkX3BsdWdpbl90eXBlXzIgPT4gTGlicmFyaWUKaWVkX3Bs dWdpbl90eXBlXzMgPT4gQWRtaW4gc2V1bAppZWRfcGx1Z2luX3R5cGVfNCA9PiBBZG1pbiAo K0FKQVgpCmllZF9wbHVnaW5fdHlwZV81ID0+IEFkbWluICsgUHVibGljICgrQUpBWCkKaWVk X3BsdWdpbl91cGRhdGVkID0+IFBsdWdpbiB7bmFtZX0gbWlzIMOgIGpvdXIKaWVkX3BsdWdp bl91cGxvYWRlZCA9PiBQbHVnaW4ge25hbWV9IHTDqWzDqWNoYXJnw6kKaWVkX3BsdWdpbl91 cGxvYWRfcGhwID0+IFTDqWzDqWNoYXJnZXIgdW4gcGx1Z2luCmllZF9wbHVnaW5fdXRpbHNf bGVnZW5kID0+IERpc3RyaWJ1dGlvbgppZWRfcGx1Z2luX3V0aWxzX2xlZ2VuZF9leHRyYSA9 PiBFZmZlY3RpZiBhcHLDqHMgc2F1dmVnYXJkZQppZWRfcGx1Z2luX3ZpZXdfaGVscCA9PiBB aWRlIGRlIDoge25hbWV9Ijt9