# Name: smd_where_used v0.18 # Type: Admin/Client side plugin # Find which forms/pages/articles/plugins/text have been used where in your design # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6InNtZF93aGVyZV91c2VkIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjE4IjtzOjExOiJkZXNjcmlwdGlvbiI7 czo4MDoiRmluZCB3aGljaCBmb3Jtcy9wYWdlcy9hcnRpY2xlcy9wbHVnaW5zL3RleHQgaGF2 ZSBiZWVuIHVzZWQgd2hlcmUgaW4geW91ciBkZXNpZ24iO3M6NDoiY29kZSI7czoxMTAxMToi Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2 cygnc21kX3d1JywnMSwyJyk7DQoNCgkvLyBFeHRlbnNpb25zIHRhYg0KCXJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICdzbWRfd3UnLCBzbWRfd3VfZ1R4dCgnc21kX3d1JykpOw0KCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfd3UnLCAnc21kX3d1Jyk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF93dSgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9h cnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3d1X3NlYXJjaCcsDQoJCSkpKSB7DQoJCXNt ZF93dV9zaG93Zm9ybSgnJyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF93dV9zaG93Zm9ybSgkbWVzc2FnZSwgJHRlcm09JycsICRzZWw9YXJy YXkoKSwgJGluY2w9MCwgJHdob2xlPTAsICRtb2RlPTAsICRwbHVndHlwZT0wLCAkY2FzZT0w KSB7DQoJcGFnZXRvcChzbWRfd3VfZ1R4dCgnc21kX3d1JyksJG1lc3NhZ2UpOw0KCSRidG5T ZWFyY2ggPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfd3Vfc2VhcmNoJywgZ1R4dCgnc2VhcmNo JyksICdzbWFsbGVyYm94Jykuc0lucHV0KCdzbWRfd3Vfc2VhcmNoJykuaElucHV0KCdwbHVn dHlwZScsICgoJHBsdWd0eXBlPT0xKSA/IDAgOiAxKSk7DQoJJGJ0blN0eWxlID0gJyBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcGxhY2UgPSBhcnJheSgnc2VjdGlvbnMn LCdwYWdlcycsJ2Zvcm1zJywnYXJ0aWNsZXMnKTsNCgkkc2VsID0gKGVtcHR5KCRzZWwpKSA/ ICRwbGFjZSA6ICRzZWw7DQoNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9InNt ZF93dV9mb3JtIj4nOw0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWVjaG8gdHIoZkxh YmVsQ2VsbChzbWRfd3VfZ1R4dCgnc2VhcmNoX2xibCcpKSAuIHRkY3MoZklucHV0KCd0ZXh0 JywgJ3NlYXJjaF9mb3InLCBzdHJpcHNsYXNoZXMoJHRlcm0pLCAnJywgJycsICcnLCAzMCks IDQpIC4gdGRhKCRidG5TZWFyY2gsICRidG5TdHlsZSkpOw0KCWVjaG8gdHIoZkxhYmVsQ2Vs bChzbWRfd3VfZ1R4dCgnZmlsdGVyJykpLnRkY3MocmFkaW8oJ21ldGgnLDAsKCgkaW5jbD09 MCk/MTowKSkuc21kX3d1X2dUeHQoJ2luY2x1c2lvbicpLiIgIiAuIHJhZGlvKCdtZXRoJywx LCgoJGluY2w9PTEpPzE6MCkpLnNtZF93dV9nVHh0KCdleGNsdXNpb24nKS4gIiB8ICIgLiBz bWRfd3VfZ1R4dCgnd2hvbGVfd29yZCcpLmNoZWNrYm94KCd3aG9sZScsIDEsICgoJHdob2xl PT0xKT8xOjApKS4gIiB8ICIgLiBzbWRfd3VfZ1R4dCgnbWF0Y2hfY2FzZScpLmNoZWNrYm94 KCdjYXNlJywgMSwgKCgkY2FzZT09MSk/MTowKSksIDQpKTsNCgkkb3V0ID0gJyc7DQoJZm9y ZWFjaCAoJHBsYWNlIGFzICRoZXJlKSB7DQoJCSRvdXQgLj0gZkxhYmVsQ2VsbChnVHh0KCRo ZXJlKSAuIGNoZWNrYm94KCdwbGFjZXNbXScsICRoZXJlLCBpbl9hcnJheSgkaGVyZSwkc2Vs KSkpOw0KCX0NCgllY2hvIHRyKGZMYWJlbENlbGwoc21kX3d1X2dUeHQoJ3NlYXJjaF93aGVy ZV9sYmwnKSkgLiAkb3V0KTsNCgllY2hvIGVuZFRhYmxlKCk7DQoJZWNobyAnPC9mb3JtPic7 DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3d1X3NlYXJjaCgpIHsNCglleHRy YWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2VhcmNoX2ZvcicpKSkpOw0KCSR3aG9sZSA9IGdw cygnd2hvbGUnKTsNCgkkY2FzZSA9IGdwcygnY2FzZScpOyAvLyAwID0gY2FzZSBpbnNlbnNp dGl2ZSwgMSA9IGNhc2Ugc2Vuc2l0aXZlDQoJJGNhc2VTZW5zZSA9ICgkY2FzZT09MSkgPyAn IEJJTkFSWSAnIDogJyc7DQoJJG1ldGggPSBncHMoJ21ldGgnKTsgLy8gMCA9IGluY2x1ZGUs IDEgPSBleGNsdWRlDQoJJHBsdWd0eXBlID0gZ3BzKCdwbHVndHlwZScpOyAvLyAwID0gY2xp ZW50LCAxID0gMCthZG1pbiwgMiA9IDErbGlicmFyeQ0KCSRwbHVndHlwZSA9IChpc19udW1l cmljKCRwbHVndHlwZSkgJiYgJHBsdWd0eXBlIDwgMykgPyAkcGx1Z3R5cGUgOiAwOw0KCSRq b2lubWUgPSAoJG1ldGggPT0gMCkgPyAiIE9SICIgOiAiIEFORCAiOw0KCSRwbGFjZXMgPSBn cHMoJ3BsYWNlcycpOw0KCSRwbGFjZXMgPSBpc19hcnJheSgkcGxhY2VzKSA/ICRwbGFjZXMg OiBhcnJheSgpOw0KCSRtb2RlID0gKCRzZWFyY2hfZm9yKSA/IDAgOiAxOw0KCXNtZF93dV9z aG93Zm9ybSgnJywgJHNlYXJjaF9mb3IsICRwbGFjZXMsICRtZXRoLCAkd2hvbGUsICRtb2Rl LCAkcGx1Z3R5cGUsICRjYXNlKTsNCg0KCS8vIEVudHJpZXMgaW4gdGhlIHBsYWNlVGFibGUg YXJyYXkgYXJlOg0KCS8vICAwOiBUYWJsZSB0byBzZWFyY2gNCgkvLyAgMTogQ29sdW1uIHRv IHNlYXJjaA0KCS8vICAyOiBDb2x1bW4gdG8gcmV0dXJuDQoJLy8gIDM6IEhlYWRpbmcgdG8g ZGlzcGxheSBpZiByZXN1bHRzIGZvdW5kDQoJLy8gIDQ6IEV2ZW50IG9mIGRlc3RpbmF0aW9u IFVSTA0KCS8vICA1OiBTdGVwIG9mIGRlc3RpbmF0aW9uIFVSTA0KCS8vICA2OiBBZGRpdGlv bmFsIFVSTCB2YXINCgkvLyAgNzogQWRkaXRpb25hbCBVUkwgdmFyIHJlcGxhY2VtZW50ICh1 c2VkIGluIHN0cnRyKQ0KCSRwbGFjZVRhYmxlID0gYXJyYXkoDQoJCSdwYWdlcycgPT4gYXJy YXkoJ3R4cF9wYWdlJywgJ3VzZXJfaHRtbCcsICduYW1lJywgZ1R4dCgncGFnZXMnKSwgJ3Bh Z2UnLCAnJywgJ25hbWUnLCAne25hbWV9JyksDQoJCSdmb3JtcycgPT4gYXJyYXkoJ3R4cF9m b3JtJywgJ2Zvcm0nLCAnbmFtZScsIGdUeHQoJ2Zvcm1zJyksICdmb3JtJywgJ2Zvcm1fZWRp dCcsICduYW1lJywgJ3tuYW1lfScpLA0KCQknYXJ0aWNsZXMnID0+IGFycmF5KCd0ZXh0cGF0 dGVybicsICdCb2R5LEV4Y2VycHQsb3ZlcnJpZGVfZm9ybSxzZWN0aW9uLFRpdGxlLGtleXdv cmRzJywgJ0lELHRpdGxlJywgZ1R4dCgnYXJ0aWNsZXMnKSwgJ2FydGljbGUnLCAnZWRpdCcs ICdJRCcsICd7SUR9JyksDQoJCSdzZWN0aW9ucycgPT4gYXJyYXkoJ3R4cF9zZWN0aW9uJywg J3BhZ2UsY3NzJywgJ25hbWUnLCBnVHh0KCdzZWN0aW9ucycpLCAnc2VjdGlvbicsICcnLCAn IycsICdzZWN0aW9uLXtuYW1lfScpLA0KCSk7DQoNCgkkcnMgPSBhcnJheSgpOw0KCWVjaG8g bi4nPGhyIHdpZHRoPSI1MCUiIC8+JzsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkk Y29sSGVhZCA9IGFycmF5KCk7DQoJJGNvbEJvZHkgPSBhcnJheSgpOw0KDQoJaWYgKCRzZWFy Y2hfZm9yKSB7DQoJCWVjaG8gdHIodGRjcyh0YWcoZ1R4dCgnc2VhcmNoX3Jlc3VsdHMnKSwg J2gyJyksIDQpKTsNCgkJZm9yZWFjaCAoJHBsYWNlcyBhcyAkcGxhY2UpIHsNCgkJCSRjcm93 ID0gJHBsYWNlVGFibGVbJHBsYWNlXTsNCgkJCSR3aGVyZSA9IGFycmF5KCk7DQoJCQkkd2l0 ZW1zID0gZG9fbGlzdCgkY3Jvd1sxXSk7DQoJCQkkbGlzdCA9IGRvX2xpc3QoJGNyb3dbMl0p Ow0KDQoJCQlmb3JlYWNoICgkd2l0ZW1zIGFzICRpdGVtKSB7DQoJCQkJJHdoZXJlW10gPSAk Y2FzZVNlbnNlIC4gJGl0ZW0gLiAoKCRtZXRoPT0xKSA/ICcgTk9UJyA6ICcnKSAuICgoJHdo b2xlPT0xKSA/ICcgUkVHRVhQIFwnW1s6PDpdXScuJHNlYXJjaF9mb3IuJ1tbOj46XV1cJycg OiAiIExJS0UgJyUkc2VhcmNoX2ZvciUnIik7DQoJCQl9DQoJCQkkcnMgPSBzYWZlX3Jvd3Mo JGNyb3dbMl0sICRjcm93WzBdLCAnKCcuam9pbigkam9pbm1lLCAkd2hlcmUpLicpIE9SREVS IEJZICcuJGxpc3RbMF0pOw0KCQkJJGNvbEhlYWRbXSA9IHRkKHN0cm9uZygkY3Jvd1szXSkp Ow0KCQkJaWYgKCRycykgew0KCQkJCSRvdXQgPSAnPHVsPic7DQoJCQkJZm9yZWFjaCAoJHJz IGFzICRyb3cpIHsNCgkJCQkJJGhsaW5rID0gJyc7DQoJCQkJCSR2YXJzID0gJyc7DQoJCQkJ CWZvcmVhY2ggKCRsaXN0IGFzICRjb2wpIHsNCgkJCQkJCSRmcm9tID0gJ3snLiRjb2wuJ30n Ow0KCQkJCQkJaWYgKHN0cnBvcygkY3Jvd1s3XSwgJGZyb20pICE9PSBmYWxzZSkgew0KCQkJ CQkJCWlmICgkY3Jvd1s2XSA9PSAiIyIpIHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFy cmF5KCJldmVudCIgPT4gJGNyb3dbNF0sICJzdGVwIiA9PiAkY3Jvd1s1XSkpLiRjcm93WzZd LnN0cnRyKCRjcm93WzddLCBhcnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSk7DQoJCQkJCQkJ fSBlbHNlIHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNy b3dbNF0sICJzdGVwIiA9PiAkY3Jvd1s1XSwgJGNyb3dbNl0gPT4gc3RydHIoJGNyb3dbN10s IGFycmF5KCRmcm9tID0+ICRyb3dbJGNvbF0pKSkpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJ CQkJCSRobGluayAuPSAkcm93WyRjb2xdLiIgIjsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICgk aGxpbmspID8gJzxsaT4nIC4gKCgkdmFycykgPyAnPGEgaHJlZj0iaW5kZXgucGhwJy4kdmFy cy4nIj4nLiRobGluay4nPC9hPiAnIDogJGhsaW5rKSAuICc8L2xpPic6ICcnOw0KCQkJCX0N CgkJCQkkb3V0IC49ICc8L3VsPic7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKCRvdXQpOw0KCQkJ fSBlbHNlIHsNCgkJCQkkY29sQm9keVtdID0gdGQoZ1R4dCgnbm9fcmVzdWx0c19mb3VuZCcp KTsNCgkJCX0NCgkJfQ0KCQllY2hvIHRyKGpvaW4oIiAiLCAkY29sSGVhZCkpOw0KCQllY2hv IHRyKGpvaW4oIiAiLCAkY29sQm9keSkpOw0KCX0gZWxzZSB7DQoJCS8vIE5vIHNlYXJjaCBj cml0ZXJpYSwgc28gc2hvdyBvcnBoYW5zDQoJCWVjaG8gdHIodGRjcyh0YWcoc21kX3d1X2dU eHQoJ29ycGhhbl9yZXN1bHRzJyksICdoMicpLCA1KSk7DQoNCgkJLy8gUmVwcm9ncmFtIHRo ZSBwbGFjZXMvcGxhY2VUYWJsZQ0KCQkkYXJ0a2V5ID0gYXJyYXlfc2VhcmNoKCdhcnRpY2xl cycsICRwbGFjZXMpOw0KCQlpZiAoJGFydGtleSAhPT0gZmFsc2UpIHsNCgkJCXVuc2V0KCRw bGFjZXNbJGFydGtleV0pOw0KCQl9DQoNCgkJLy8gcGFnZXMvZm9ybXMvc2VjdGlvbnMgdG8g aWdub3JlIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGFuZCBjYW5ub3QgYmUgZGVsZXRlZA0K CQkkZXNzZW50aWFscyA9IGFycmF5KA0KCQkJJ3NlY3Rpb25zJyA9PiBhcnJheSgnZGVmYXVs dCcpLA0KCQkJJ3BhZ2VzJyA9PiBhcnJheSgnZXJyb3JfZGVmYXVsdCcpLA0KCQkJJ2Zvcm1z JyA9PiBhcnJheSgnY29tbWVudHMnLCdjb21tZW50c19kaXNwbGF5JywnY29tbWVudF9mb3Jt JywnZGVmYXVsdCcsJ0xpbmtzJywnZmlsZXMnKSwgLy8gY29waWVkIGZyb20gdHhwX2Zvcm1z DQoJCSk7DQoNCgkJJHBsYWNlc1tdID0gJ3BsdWdpbnMnOw0KCQkkcGxhY2VzW10gPSAnc3R5 bGVzaGVldHMnOw0KDQoJCSRwbGFjZVRhYmxlWydwbHVnaW5zJ10gPSBhcnJheSgndHhwX3Bs dWdpbicsICduYW1lJywgJ25hbWUnLCBnVHh0KCdwbHVnaW5zJyksICdwbHVnaW4nLCAnJywg JyMnLCAne25hbWV9Jyk7DQoJCSRwbGFjZVRhYmxlWydzdHlsZXNoZWV0cyddID0gYXJyYXko J3R4cF9jc3MnLCAnbmFtZScsICduYW1lJywgc21kX3d1X2dUeHQoJ3N0eWxlc2hlZXRzJyks ICdjc3MnLCAnJywgJ25hbWUnLCAne25hbWV9Jyk7DQoNCgkJJHBsYWNlVGFibGVbJ2Zvcm1z J11bMF0gPSAiU0VMRUNUIHRmLm5hbWUgRlJPTSAiIC5zYWZlX3BmeCgndHhwX2Zvcm0nKS4g IiBBUyB0ZiBXSEVSRSB0Zi5uYW1lIE5PVCBJTiAoIiAuZG9RdW90ZShpbXBsb2RlKCInLCci LCRlc3NlbnRpYWxzWydmb3JtcyddKSkuICIpIE9SREVSIEJZIHRmLm5hbWUiOyAvLyBXb3Vs ZCBiZSBuaWNlIHRvIGV4Y2x1ZGUgZm9ybXMgdGhhdCByZWZlcmVuY2UgZm9ybXMgaGVyZSBp bnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIHRoZW0gbGF0ZXINCgkJJHBsYWNlVGFibGVb J3BhZ2VzJ11bMF0gPSAiU0VMRUNUIHRwLm5hbWUgRlJPTSAiIC5zYWZlX3BmeCgndHhwX3Nl Y3Rpb24nKS4gIiBBUyB0cyBSSUdIVCBKT0lOICIgLnNhZmVfcGZ4KCd0eHBfcGFnZScpLiAi IEFTIHRwIE9OIHRzLnBhZ2UgPSB0cC5uYW1lIFdIRVJFIHRzLnBhZ2UgSVMgTlVMTCBBTkQg dHAubmFtZSBOT1QgSU4gKCIgLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkZXNzZW50aWFsc1sn cGFnZXMnXSkpLiAiKSBPUkRFUiBCWSB0cC5uYW1lIjsNCgkJJHBsYWNlVGFibGVbJ3BsdWdp bnMnXVswXSA9ICJTRUxFQ1QgdGcubmFtZSwgdGcuY29kZSBGUk9NICIgLnNhZmVfcGZ4KCd0 eHBfcGx1Z2luJykuICIgQVMgdGcgV0hFUkUgdHlwZSA8ICIgLigkcGx1Z3R5cGUrMSkuICIg QU5EIHRnLm5hbWUgIT0gJ3NtZF93aGVyZV91c2VkJyBPUkRFUiBCWSB0Zy5uYW1lIjsNCgkJ JHBsYWNlVGFibGVbJ3NlY3Rpb25zJ11bMF0gPSAiU0VMRUNUIHRzLm5hbWUgRlJPTSAiIC5z YWZlX3BmeCgndHhwX3NlY3Rpb24nKS4gIiBBUyB0cyBMRUZUIEpPSU4gIiAuc2FmZV9wZngo J3RleHRwYXR0ZXJuJykuICIgQVMgdHhwIE9OIHRzLm5hbWUgPSB0eHAuc2VjdGlvbiBXSEVS RSBJRCBJUyBOVUxMIEFORCB0cy5uYW1lIE5PVCBJTiAoIiAuZG9RdW90ZShpbXBsb2RlKCIn LCciLCRlc3NlbnRpYWxzWydzZWN0aW9ucyddKSkuICIpIE9SREVSIEJZIHRzLm5hbWUiOw0K CQkkcGxhY2VUYWJsZVsnc3R5bGVzaGVldHMnXVswXSA9ICJTRUxFQ1QgdGMubmFtZSBGUk9N ICIgLnNhZmVfcGZ4KCd0eHBfc2VjdGlvbicpLiAiIEFTIHRzIFJJR0hUIEpPSU4gIiAuc2Fm ZV9wZngoJ3R4cF9jc3MnKS4gIiBBUyB0YyBPTiB0cy5jc3MgPSB0Yy5uYW1lIFdIRVJFIHRz LnBhZ2UgSVMgTlVMTCBPUkRFUiBCWSB0Yy5uYW1lIjsNCg0KCQkvLyBGb3IgImF3a3dhcmQi IHF1ZXJpZXMgdGhhdCBjYW4ndCBiZSBkb25lIGluIG9uZSBzaG90LCB0aGVyZSBhcmUgdGhy ZWUgdGhpbmdzIHJlcXVpcmVkIHBlciAkcGxhY2U6DQoJCS8vICAxOiB0eHAgdGFibGUgbmFt ZQ0KCQkvLyAgMjogbGlzdCBvZiBjb2x1bW5zIHRvIGNvbXBhcmUNCgkJLy8gIDM6IG1ldGhv ZCBvZiBjb21wYXJpc29uIHBlciBjb2x1bW4gKDAgPSAiZGlyZWN0IG1hdGNoIiwgMSA9ICJs aWtlIikNCgkJJGNUYWJsZSA9IGFycmF5KA0KCQkJJ3BsdWdpbnMnID0+IGFycmF5KA0KCQkJ CSd0eHBfZm9ybScgPT4gYXJyYXkoJ2Zvcm0nID0+IDEpLA0KCQkJCSd0eHBfcGFnZScgPT4g YXJyYXkoJ3VzZXJfaHRtbCcgPT4gMSksDQoJCQkJJ3RleHRwYXR0ZXJuJyA9PiBhcnJheSgn Qm9keScgPT4gMSwgJ0V4Y2VycHQnID0+IDEpLA0KCQkJKSwNCgkJCSdmb3JtcycgPT4gYXJy YXkoDQoJCQkJJ3R4cF9mb3JtJyA9PiBhcnJheSgnZm9ybScgPT4gMSksDQoJCQkJJ3R4cF9w YWdlJyA9PiBhcnJheSgndXNlcl9odG1sJyA9PiAxKSwNCgkJCQkndGV4dHBhdHRlcm4nID0+ IGFycmF5KCdCb2R5JyA9PiAxLCAnRXhjZXJwdCcgPT4gMSwgJ292ZXJyaWRlX2Zvcm0nID0+ IDApLA0KCQkJKSwNCgkJKTsNCg0KCQkvLyBXb3JrIG9uIGEgY29sdW1uIGF0IGEgdGltZQ0K CQlmb3JlYWNoICgkcGxhY2VzIGFzICRwbGFjZSkgew0KCQkJJGNyb3cgPSAkcGxhY2VUYWJs ZVskcGxhY2VdOw0KCQkJJGNvbFJlZnMgPSBkb19saXN0KCRjcm93WzJdKTsNCgkJCSRjb2xI ZWFkW10gPSB0ZChzdHJvbmcoJGNyb3dbM10gLiAoKCRwbGFjZSA9PSAncGx1Z2lucycpID8g KCgkcGx1Z3R5cGU9PTApID8gc21kX3d1X2dUeHQoJ2NsaWVudF9wbHVnaW5zJykgOiBzbWRf d3VfZ1R4dCgnYWRtaW5fcGx1Z2lucycpICkgOiAnJykgKSk7DQoJCQkkcnMgPSBzdGFydFJv d3MoJGNyb3dbMF0pOw0KCQkJaWYgKCRycykgew0KCQkJCSRvdXQgPSAnPHVsPic7DQoJCQkJ d2hpbGUgKCRyb3cgPSBuZXh0Um93KCRycykpIHsNCgkJCQkJLy8gQ291bnQgdGhlIG5vIG9m IHJlY29yZHMgbWF0Y2hpbmcgdGhpcyBuYW1lIGluIGVhY2ggdGFibGUuDQoJCQkJCS8vIEFu eSB0aW1lIHRoaXMgZ29lcyBhYm92ZSB6ZXJvLCB0aGUgaXRlbSBpcyB1c2VkIGFuZCBpdCBj YW4gYmUgaWdub3JlZA0KCQkJCQkkZm5hbGlhc2VzID0gYXJyYXkoKTsNCgkJCQkJaWYgKGFy cmF5X2tleV9leGlzdHMoJHBsYWNlLCAkY1RhYmxlKSkgew0KCQkJCQkJLy8gUGx1Z2luIGZ1 bmN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gaXRz ZWxmLg0KCQkJCQkJLy8gRmluZCBhbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGJ1aWxk IGEgbGlzdCBvZiBhbGlhc2VzDQoJCQkJCQlpZiAoJHBsYWNlID09ICdwbHVnaW5zJykgew0K CQkJCQkJCSRyZSA9ICcvZnVuY3Rpb25ccysoW0EtWmEtejAtOV9dKylccypcKC8nOw0KCQkJ CQkJCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkcmUsICRyb3dbJ2NvZGUnXSwgJGZuYWxpYXNl cyk7DQoJCQkJCQl9DQoNCgkJCQkJCSRyZWNzID0gMDsNCgkJCQkJCWZvcmVhY2ggKCRjVGFi bGVbJHBsYWNlXSBhcyAkdGJsID0+ICRjb2xJbmZvKSB7DQoJCQkJCQkJaWYgKCRyZWNzID09 IDApIHsNCgkJCQkJCQkJJHdoZXJlID0gYXJyYXkoKTsNCgkJCQkJCQkJZm9yZWFjaCAoJGNv bEluZm8gYXMgJGNvbE5hbWUgPT4gJHFyeVR5cGUpIHsNCgkJCQkJCQkJCSR3aGVyZVtdID0g JGNvbE5hbWUgLiAoKCRxcnlUeXBlPT0wKSA/ICIgPSAnIiAuJHJvd1skY29sUmVmc1swXV0u ICInIiA6ICIgTElLRSAnJSIgLiRyb3dbJGNvbFJlZnNbMF1dLiAiJSciKTsNCgkJCQkJCQkJ CWlmIChjb3VudCgkZm5hbGlhc2VzKSA+IDEpIHsNCgkJCQkJCQkJCQlmb3JlYWNoICgkZm5h bGlhc2VzWzFdIGFzICRmbmFsaWFzKSB7DQoJCQkJCQkJCQkJCSR3aGVyZVtdID0gJGNvbE5h bWUgLiAoKCRxcnlUeXBlPT0wKSA/ICIgPSAnIiAuJGZuYWxpYXMuICInIiA6ICIgTElLRSAn JSIgLiRmbmFsaWFzLiAiJSciKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJ CX0NCgkJCQkJCQkJJHdoZXJlID0gam9pbigiIE9SICIsICR3aGVyZSk7DQoJCQkJCQkJCSRy ZWNzICs9IHNhZmVfY291bnQoJHRibCwgJHdoZXJlKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoN CgkJCQkJCS8vIElmIHRoZSBpdGVtIGhhcyBub3QgYmVlbiBmb3VuZCwgZmxhZyBpdA0KCQkJ CQkJaWYgKCRyZWNzID09IDApIHsNCgkJCQkJCQkkY29sTmFtZXMgPSAkY29sUmVmczsNCgkJ CQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNvbE5hbWVzID0gYXJyYXkoKTsNCgkJCQkJCX0NCgkJ CQkJfSBlbHNlIHsNCgkJCQkJCSRjb2xOYW1lcyA9ICRjb2xSZWZzOw0KCQkJCQl9DQoNCgkJ CQkJLy8gTWFrZSB1cCB0aGUgc3RyaW5nIHRvIGRpc3BsYXksIGFuZCBoeXBlcmxpbmsgaXQg aWYgZGlyZWN0ZWQNCgkJCQkJJGhsaW5rID0gJyc7DQoJCQkJCSR2YXJzID0gJyc7DQoJCQkJ CWZvcmVhY2ggKCRjb2xOYW1lcyBhcyAkY29sKSB7DQoJCQkJCQkkZnJvbSA9ICd7Jy4kY29s Lid9JzsNCgkJCQkJCWlmIChzdHJwb3MoJGNyb3dbN10sICRmcm9tKSAhPT0gZmFsc2UpIHsN CgkJCQkJCQlpZiAoJGNyb3dbNl0gPT0gIiMiKSB7DQoJCQkJCQkJCSR2YXJzID0gam9pbl9x cyhhcnJheSgiZXZlbnQiID0+ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0pKS4kY3Jv d1s2XS5zdHJ0cigkY3Jvd1s3XSwgYXJyYXkoJGZyb20gPT4gJHJvd1skY29sXSkpOw0KCQkJ CQkJCX0gZWxzZSB7DQoJCQkJCQkJCSR2YXJzID0gam9pbl9xcyhhcnJheSgiZXZlbnQiID0+ ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0sICRjcm93WzZdID0+IHN0cnRyKCRjcm93 WzddLCBhcnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSkpKTsNCgkJCQkJCQl9DQoJCQkJCQl9 DQoJCQkJCQkkaGxpbmsgLj0gJHJvd1skY29sXS4iICI7DQoJCQkJCX0NCgkJCQkJJG91dCAu PSAoJGhsaW5rKSA/ICc8bGk+JyAuICgoJHZhcnMpID8gJzxhIGhyZWY9ImluZGV4LnBocCcu JHZhcnMuJyI+Jy4kaGxpbmsuJzwvYT4gJyA6ICRobGluaykgLiAnPC9saT4nOiAnJzsNCgkJ CQl9DQoJCQkJJG91dCAuPSAnPC91bD4nOw0KCQkJCSRjb2xCb2R5W10gPSB0ZCgkb3V0KTsN CgkJCX0gZWxzZSB7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKHNtZF93dV9nVHh0KCdub19vcnBo YW5zX2ZvdW5kJykpOw0KCQkJfQ0KCQl9DQoJCWVjaG8gdHIoam9pbigiICIsICRjb2xIZWFk KSk7DQoJCWVjaG8gdHIoam9pbigiICIsICRjb2xCb2R5KSk7DQoJfQ0KCWVjaG8gZW5kVGFi bGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50 IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3d1X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXko DQoJCSdhZG1pbl9wbHVnaW5zJyA9PiAnIFsgQStDIF0nLA0KCQknY2xpZW50X3BsdWdpbnMn ID0+ICcgWyBDIF0nLA0KCQknZXhjbHVzaW9uJyA9PiAnRXhjbHVkZScsDQoJCSdpbmNsdXNp b24nID0+ICdJbmNsdWRlJywNCgkJJ2ZpbHRlcicgPT4gJ0ZpbHRlcjonLA0KCQknbWF0Y2hf Y2FzZScgPT4gJ01hdGNoIGNhc2UnLA0KCQknbm9fb3JwaGFuc19mb3VuZCcgPT4gJ05vIG9y cGhhbnMgZm91bmQuJywNCgkJJ29ycGhhbl9yZXN1bHRzJyA9PiAnUG9zc2libGUgb3JwaGFu cycsDQoJCSdzZWFyY2hfbGJsJyA9PiAnRmluZDonLA0KCQknc2VhcmNoX3doZXJlX2xibCcg PT4gJ0xvb2sgaW46JywNCgkJJ3N0eWxlc2hlZXRzJyA9PiAnU3R5bGVzaGVldHMnLA0KCQkn c21kX3d1JyA9PiAnV2hlcmUgdXNlZCcsDQoJCSd3aG9sZV93b3JkJyA9PiAnV2hvbGUgd29y ZHMnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0 OiJ0eXBlIjtzOjE6IjEiO3M6NDoiaGVscCI7czo2NDU5OiIJPHA+PGRpdiBpZD0ic21kX2hl bHAiPjwvcD4KCgk8aDE+c21kX3doZXJlX3VzZWQ8L2gxPgoKCTxwPlJlYWxseSBzaW1wbGUg YWRtaW4tc2lkZSBwbHVnaW4gdG8gaGVscCBmaW5kIHdoYXQgeW91IG5lZWQgdG8gZWRpdC9k ZWxldGUuIElmIHlvdSBoYXZlIGEgdG9ubmUgb2YgZm9ybXMgb3IgcGFnZXMgYW5kIHdhbnQg dG8gdGlkeSBzdHVmZiB1cCBpdCBjYW4gYmUgYSBiaXQgb2YgYSBwYWluIHRvIGZpbmQgd2hh dCYjODIxNztzIGFjdHVhbGx5IGluIHVzZS48L3A+CgoJPHA+U28gdXNlIHRoaXMgcGx1Z2lu IHRvIHNlYXJjaCB5b3VyIHNlY3Rpb25zLCBwYWdlcywgZm9ybXMgb3IgYXJ0aWNsZXMgZm9y IHJlZmVyZW5jZXMgdG8gcGx1Z2lucywgb3Igb3RoZXIgcGFnZXMvZm9ybXMgb3IgZXZlbiBq dXN0IHBsYWluIHRleHQgaW4gYXJ0aWNsZXMuPC9wPgoKCTxoMiBjbGFzcz0iYXV0aG9yIj5B dXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50 Rm9ybSI+U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMiBjbGFzcz0iaW5zdGFsbCI+SW5zdGFs bGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4g ZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzk4 NC9zbWRfd2hlcmVfdXNlZCI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRo ZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0m Z3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0 IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/aWQ9Mjc0OTMiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBhbmQgdG8gcmVw b3J0IHRoZSBzdWNjZXNzIChvciBvdGhlcndpc2UpIG9mIHRoaXMgcGx1Z2luLjwvcD4KCgk8 cD5Vbmluc3RhbGwgYnkgc2ltcGx5IGRlbGV0aW5nIHRoZSBwbHVnaW4gZnJvbSB0aGUgQWRt aW4tJmd0O1BsdWdpbnMgcGFuZS48L3A+CgoJPGgyIGNsYXNzPSJ1c2FnZSI+VXNhZ2U8L2gy PgoKCTxwPlZpc2l0IHRoZSBFeHRlbnNpb25zIHRhYiBhbmQgQ2xpY2sgJiM4MjE2O1doZXJl IHVzZWQmIzgyMTc7IHRvIGFjY2VzcyB0aGUgc2VhcmNoIGZvcm0uIFR5cGUgc29tZSBzdHVm ZiB0byBmaW5kLCBzZWxlY3Qgd2hlcmUgeW91IHdhbnQgdG8gbG9vayBhbmQgaGl0ICYjODIx NjtTZWFyY2gmIzgyMTc7IG9yIHByZXNzIEVudGVyLiBZb3VyIHJlcXVlc3RlZCBsb2NhdGlv bnMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhhdCB0ZXJtIGFuZCB0aGUgcmVzdWx0cyB0YWJ1 bGF0ZWQsIHdpdGggaHlwZXJsaW5rcyB0byB0aGUgb2ZmZW5kaW5nIGl0ZW1zIHNvIHlvdSBj YW4gcXVpY2tseSBlZGl0IHRoZW0uPC9wPgoKCTxwPllvdSBjYW4gZGVjaWRlIHdoZXRoZXIg dG8gc2VhcmNoIGZvciB0aGUgdGVybSAoJiM4MjIwO0luY2x1ZGUmIzgyMjE7KSBvciB0byBz ZWFyY2ggZm9yIHN0dWZmIDxzcGFuIGNsYXNzPSJjYXBzIj5OT1Q8L3NwYW4+IGNvbnRhaW5p bmcgdGhhdCB0ZXJtICgmIzgyMjA7RXhjbHVkZSYjODIyMTspLiBZb3UgbWF5IGFsc28gY2hv b3NlIHdoZXRoZXIgeW91ciBzZWFyY2ggdGVybSBtYXRjaGVzL2RvZXMgbm90IG1hdGNoIGEg d2hvbGUgd29yZCBvciBpcyBjYXNlIHNlbnNpdGl2ZS48L3A+CgoJPHA+VGhpcyBpcyB3aGF0 IHRoZSBwbHVnaW4gbG9va3MgYXQgd2hlbiB5b3Ugc2VsZWN0IGEgcGFydGljdWxhciBjaGVj a2JveCBmcm9tIHRoZSAmIzgyMjA7TG9vayBpbiYjODIyMTsgcm93OjwvcD4KCgk8dWw+CgkJ PGxpPiYjODIxNjtTZWN0aW9ucyYjODIxNzsgc2VhcmNoZXMgZXZlcnkgU2VjdGlvbiBmb3Ig cGFnZXMgb3Igc3R5bGVzaGVldHMgd2l0aCB0aGUgbWF0Y2hpbmcgbmFtZTwvbGk+CgkJPGxp PiYjODIxNjtQYWdlcyYjODIxNzsgc2VhcmNoZXMgZXZlcnkgUGFnZSBmb3IgZm9ybXMgLyBw bHVnaW5zIC8gdGV4dCB3aXRoIHRoZSBtYXRjaGluZyBuYW1lPC9saT4KCQk8bGk+JiM4MjE2 O0Zvcm1zJiM4MjE3OyBzZWFyY2hlcyBldmVyeSBGb3JtIGZvciBwbHVnaW5zIC8gb3RoZXIg Zm9ybXMgLyB0ZXh0IHdpdGggdGhlIG1hdGNoaW5nIG5hbWU8L2xpPgoJCTxsaT4mIzgyMTY7 QXJ0aWNsZXMmIzgyMTc7IHNlYXJjaGVzIGV2ZXJ5IEFydGljbGUgc2VjdGlvbiwgYm9keSwg ZXhjZXJwdCwgb3ZlcnJpZGVfZm9ybSwgdGl0bGUgYW5kIGtleXdvcmQgZm9yIG1lbnRpb24g b2YgdGhlIHRleHQgeW91IHNwZWNpZnk8L2xpPgoJPC91bD4KCgk8cD5JZiwgaG93ZXZlciwg eW91IGxlYXZlIHRoZSAmIzgyMTY7RmluZCYjODIxNzsgYm94IGVtcHR5IGFuZCBjbGljayAm IzgyMTY7U2VhcmNoJiM4MjE3OyB0aGUgcGx1Z2luIHdpbGwgc2VhcmNoIGZvciBvcnBoYW5z LiBPcnBoYW5zIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6PC9wPgoKCTx1bD4KCQk8bGk+QW55 IFBhZ2UgdGhhdCBpcyBub3QgYXNzaWduZWQgdG8gYSBTZWN0aW9uPC9saT4KCQk8bGk+QW55 IFN0eWxlc2hlZXQgdGhhdCBpcyBub3QgYXNzaWduZWQgdG8gYSBTZWN0aW9uPC9saT4KCQk8 bGk+QW55IFNlY3Rpb24gdGhhdCBoYXMgbm8gQXJ0aWNsZXMgaW4gaXQgKGV4Y2x1ZGluZyDi gJhkZWZhdWx04oCZIHdoaWNoIGNhbm5vdCBoYXZlIGFuIGFydGljbGUgYW55d2F5KTwvbGk+ CgkJPGxpPkFueSBQbHVnaW4gdGhhdCBpcyBub3QgcmVmZXJlbmNlZCBmcm9tIGFuIEFydGlj bGUgKGJvZHkvZXhjZXJwdCkgb3IgYW5vdGhlciBGb3JtIG9yIFBhZ2U8L2xpPgoJCTxsaT5B bnkgRm9ybSB0aGF0IGhhcyBubyByZWZlcmVuY2UgdG8gaXQgaW4gYW55IEFydGljbGUgKGJv ZHkvZXhjZXJwdC9vdmVycmlkZV9mb3JtKSBvciBhbm90aGVyIEZvcm0gb3IgUGFnZTwvbGk+ Cgk8L3VsPgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPk9ycGhhbmVkIGFydGljbGVz IGRvbiYjODIxNzt0IG1ha2Ugc2Vuc2Ugc28gdGhleSBhcmUgb21pdHRlZC4gVGhlIGNoZWNr Ym94IGlzIGlnbm9yZWQ8L2xpPgoJCTxsaT5Fc3NlbnRpYWwgc2VjdGlvbnMgLyBwYWdlcyAv IGZvcm1zIHRoYXQgY2Fubm90IGJlIGRlbGV0ZWQgYXJlIG5vdCBsaXN0ZWQ8L2xpPgoJCTxs aT5TdHlsZXNoZWV0cyBhbmQgUGx1Z2lucyBhcmUgYWx3YXlzIGRpc3BsYXllZCBiZWNhdXNl IHRoZXJlIGFyZSBubyBjaGVjayBib3hlcyBmb3IgdGhlbS4gVGhlIHJlYXNvbiBpcyB0aGF0 IHRoZSBwbHVnaW4gZG9lcyBub3QgYWxsb3cgc2VhcmNoaW5nIHdpdGhpbiBhIHBsdWdpbiBv ciBhIHN0eWxlc2hlZXQgZm9yIGEgcmVmZXJlbmNlIHRvIGEgd29yZCwgYnV0IGl0IGRvZXMg Y2hlY2sgb3RoZXIgcGxhY2VzIGZvciByZWZlcmVuY2VzIDxlbT50bzwvZW0+IHBsdWdpbnMg YW5kIHN0eWxlc2hlZXRzPC9saT4KCQk8bGk+UGx1Z2luIGxpc3QgY2FuIGJlIHRvZ2dsZWQg YmV0d2VlbiB0aGUgZGVmYXVsdCBjbGllbnQtb25seSBwbHVnaW5zIG9yIGJvdGggY2xpZW50 IGFuZCBhZG1pbiBwbHVnaW5zLiBDbGljayAmIzgyMTY7U2VhcmNoJiM4MjE3OyBhZ2FpbiB0 byB0b2dnbGU8L2xpPgoJCTxsaT5KdXN0IGJlY2F1c2UgYW4gaXRlbSBpcyBsaXN0ZWQgYXMg b3JwaGFuZWQgZG9lcyA8ZW0+bm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgbm90IHVzZWQ8 L2VtPiEgRm9yIGV4YW1wbGUsIHJ2bV9tYWludGVuYW5jZSBjaGVja3MgZm9yIHRoZSBleGlz dGVuY2Ugb2YgYW4gPGNvZGU+ZXJyb3JfNTAzPC9jb2RlPiBQYWdlLiBTaW5jZSBpdCBpcyBu ZXZlciBhc3NpZ25lZCB0byBhIFNlY3Rpb24gaXQgd2lsbCBiZSBsaXN0ZWQgYXMgb3JwaGFu ZWQuIElmIHlvdSBoYXZlIGEgZGVkaWNhdGVkIHN0eWxlc2hlZXQgZm9yIG1haW50ZW5hbmNl IG1vZGUgdGhhdCwgdG9vLCB3aWxsIGJlIHNob3duIGFzIG9ycGhhbmVkLiBJbiBzaG9ydCwg YmUgY2FyZWZ1bCBhbmQgbWFrZSBhIGJhY2t1cCA6LSk8L2xpPgoJCTxsaT5QbHVnaW5zIHN1 Y2ggYXMgcGFwX2NvbnRhY3RfY2xlYW5lciBhbmQgcnZtX21haW50ZW5hbmNlIGFyZSBsaXN0 ZWQgYXMgb3JwaGFucyBldmVuIHRob3VnaCB0aGV5IGFyZSB1c2VkIGJ5IG90aGVyIHBsdWdp bnMgLyB1c3VhbGx5IGRpc2FibGVkLiBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBhIHBsdWdp biwgY2hlY2sgaXQgYnkgdHlwaW5nIGEgcGFydGlhbCB0YWcgbmFtZSBpbnRvIHRoZSBzZWFy Y2ggYm94PC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwv aDI+CgoJPHVsPgoJCTxsaT4xNiBKdW4gMDggfCB2MC4xIHwgSW5pdGlhbCByZWxlYXNlPC9s aT4KCQk8bGk+MTYgSnVuIDA4IHwgdjAuMTEgfCBBZGRlZCBzZWN0aW9uIHNlYXJjaCBhbmQg b3ZlcnJpZGVfZm9ybTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYwLjEyIHwgQWRkZWQgaW5j bHVkZS9leGNsdWRlICh0aGFua3MgbXJkYWxlKTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYw LjEzIHwgQWRkZWQgYWJpbGl0eSB0byBtYXRjaCB3aG9sZSB3b3JkcyAodGhhbmtzIHphbnph KTwvbGk+CgkJPGxpPjE3IEp1biAwOCB8IHYwLjE0IHwgQWRkZWQgb3JwaGFuIHNlYXJjaCAo dGhhbmtzIHVsaS9uZXQtY2FydmVyKTwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE1IHwg Rml4ZWQgcGx1Z2luIGxpc3Qgc28gaXQgZG9lcyBhIGRlZXAgc2VhcmNoIGluc2lkZSB0aGUg c291cmNlIGNvZGUgZm9yIHRhZyBuYW1lczwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE2 IHwgQWRkZWQgYWRtaW4vY2xpZW50IHNpZGUgcGx1Z2luIHRvZ2dsZSA7IHNlYXJjaGVzIG5v dyBleHRlbmRlZCB0byB0aXRsZSBhbmQga2V5d29yZHMgKGJvdGggdGhhbmtzIHVsaSk8L2xp PgoJCTxsaT4xOCBKdW4gMDggfCB2MC4xNyB8IEFydGljbGVzIGFyZSBsaW5rZWQgd2l0aCBJ RCBhbmQgdGl0bGUgKHRoYW5rcyB1bGkpPC9saT4KCQk8bGk+MTggSnVuIDA4IHwgdjAuMTgg fCBBZGRlZCBjYXNlIHNlbnNpdGl2ZSBzZWFyY2hlcyAodGhhbmtzIGdlb2ZmNzc3KTwvbGk+ Cgk8L3VsPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0g LS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEu MyA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMw JSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6 ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsg Ym9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlz cGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3Nt ZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0 LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRk aW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZl IHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTog MnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNv bG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsg dGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3 cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzY5Mzsg Zm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4 OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQojc21kX2hl bHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7 IH0KI3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxw IC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNz bWRfaGVscCB0YWJsZSB7d2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmct Ym90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNv bGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJ TiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJjNzdhNWU0YzQ4ZjI3YzU4ZTYwNGM0 YzlkOGI0YmVlOSI7fQ==