# Name: smd_macro v0.10 # Type: Admin/Public side plugin # Define custom macros/virtual TXP tags for your site # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6InNtZF9tYWNybyI7czo2OiJhdXRob3IiO3M6MTE6IlN0 ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5j b20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xMCI7czoxMToiZGVzY3JpcHRpb24iO3M6NTE6 IkRlZmluZSBjdXN0b20gbWFjcm9zL3ZpcnR1YWwgVFhQIHRhZ3MgZm9yIHlvdXIgc2l0ZSI7 czo0OiJjb2RlIjtzOjI0ODg4OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCgln bG9iYWwgJHNtZF9tYWNyb19ldmVudCwgJHNtZF9tYWNyb19zdHlsZXM7DQoJJHNtZF9tYWNy b19ldmVudCA9ICdzbWRfbWFjcm8nOw0KDQoJYWRkX3ByaXZzKCRzbWRfbWFjcm9fZXZlbnQs JzEsMicpOw0KCXJlZ2lzdGVyX3RhYignY29udGVudCcsICRzbWRfbWFjcm9fZXZlbnQsIHNt ZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fdGFiX25hbWUnKSk7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9tYWNyb19kaXNwYXRjaGVyJywgJ3NtZF9tYWNybycpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfbWFjcm9fdXBsb2FkX2Zvcm0nLCAkc21kX21hY3JvX2V2ZW50LidfdWkn LCAndXBsb2FkX2Zvcm0nKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX21hY3JvX3dlbGNv bWUnLCAncGx1Z2luX2xpZmVjeWNsZS5zbWRfbWFjcm8nKTsNCn0NCg0KaWYgKCFkZWZpbmVk KCdTTURfTUFDUk8nKSkgew0KCWRlZmluZSgiU01EX01BQ1JPIiwgJ3NtZF9tYWNybycpOw0K fQ0KDQovLyBCb290c3RyYXAgdGhlIGZ1bmN0aW9uIGluc2VydGlvbg0KcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9tYWNyb19ib290JywgJ3ByZXRleHQnKTsNCg0KLy8gKioqKioqKioqKioq KioqKioqKioNCi8vIEFETUlOIFNJREUgSU5URVJGQUNFDQovLyAqKioqKioqKioqKioqKioq KioqKg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9tYWNy b19kaXNwYXRjaGVyKCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0 cCwgYXJyYXkoDQoJCQknc21kX21hY3JvX3RhYmxlX2luc3RhbGwnLA0KCQkJJ3NtZF9tYWNy b190YWJsZV9yZW1vdmUnLA0KCQkJJ3NtZF9tYWNyb19wcmVmc2F2ZScsDQoJCQknc21kX21h Y3JvX3NhdmUnLA0KCQkJJ3NtZF9tYWNyb19kZWxldGUnLA0KCQkpKSkgew0KCQlzbWRfbWFj cm8oJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX3dlbGNvbWUoJGV2dCwgJHN0cCkgew0KCSRtc2cg PSAnJzsNCglzd2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9t YWNyb190YWJsZV9pbnN0YWxsKDApOw0KCQkJJG1zZyA9ICdHbyBnbyBnYWRnZXQgbWFjcm8h JzsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF9tYWNyb190YWJsZV9y ZW1vdmUoMCk7DQoJCQlicmVhazsNCgl9DQoJcmV0dXJuICRtc2c7DQp9DQoNCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWFjcm8oJG1zZz0nJykgew0K CWdsb2JhbCAkc21kX21hY3JvX2V2ZW50Ow0KDQoJJGV4cG9ydF9saXN0ID0gZ3BzKCdzbWRf bWFjcm9fZXhwb3J0Jyk7DQoJJG1heF9maWxlX3NpemUgPSBnZXRfcHJlZignc21kX21hY3Jv X2ltcG9ydF9maWxlc2l6ZScsIDE1ICogMTAyNCk7DQoNCglpZiAoZ3BzKCdzdGVwJykgPT0g J3NtZF9tYWNyb19leHBvcnQnICYmICRleHBvcnRfbGlzdCkgew0KCQkvLyBHZW5lcmF0ZSBh biBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGlzIHRyYW5zbGF0ZWQgdG8gYW4gaW5pIGZpbGUN CgkJJG91dCA9IGFycmF5KCk7DQoJCSRyb3dzID0gc2FmZV9yb3dzKCcqJywgU01EX01BQ1JP LCAibWFjcm9fbmFtZSBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaCgkZXhwb3J0X2xpc3Qp KS4iJykiKTsNCgkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgew0KCQkJJGF0dHMgPSB1bnNl cmlhbGl6ZSgkcm93WydhdHRyaWJ1dGVzJ10pOw0KCQkJJG91dGF0dHMgPSBhcnJheSgpOw0K CQkJZm9yZWFjaCAoJGF0dHMgYXMgJGF0dCA9PiAkdmFscykgew0KCQkJCSRvdXRhdHRzW10g PSBqb2luKCd8JywgYXJyYXkoJGF0dCwgJHZhbHNbJ2RlZmF1bHQnXSwgJHZhbHNbJ3JlcCdd KSk7DQoJCQl9DQoJCQkkb3V0WyRyb3dbJ21hY3JvX25hbWUnXV0gPSBhcnJheSgNCgkJCQkn ZGVzY3JpcHRpb24nID0+ICRyb3dbJ2Rlc2NyaXB0aW9uJ10sDQoJCQkJJ2F0dHJpYnV0ZXMn ID0+ICRvdXRhdHRzLA0KCQkJCSdkZWZpbml0aW9uJyA9PiAkcm93WydkZWZpbml0aW9uJ10s DQoJCQkpOw0KCQl9DQoNCgkJJGNvbnRlbnQgPSBzbWRfbWFjcm9fY3JlYXRlX2luaSgkb3V0 LCBhcnJheSgnZGVmaW5pdGlvbicgPT4gJ2Jhc2U2NF9lbmNvZGUnKSk7DQoNCgkJaGVhZGVy KCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsNCgkJaGVhZGVyKCJDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cInNtZF9tYWNyb3MuaW5pXCIiKTsNCgkJ aGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkY29udGVudCkpOw0KCQloZWFk ZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNh Y2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsN CgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAwIDEyOjAwOjAwIEdNVCIpOw0K CQlwcmludCgkY29udGVudCk7DQoJCWV4aXQ7DQoNCgl9IGVsc2UgaWYgKGdwcygnc3RlcCcp ID09ICdzbWRfbWFjcm9faW1wb3J0Jykgew0KCQkkb3ZlcndyaXRlID0gZ3BzKCdzbWRfbWFj cm9faW1wb3J0X292ZXJ3cml0ZScpOw0KDQoJCSRmaWxlID0gQGdldF91cGxvYWRlZF9maWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwgZ2V0X3ByZWYoJ3RlbXBkaXInKS5E Uy5iYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkJaWYgKCRm aWxlID09PSBmYWxzZSkgew0KCQkJJG1zZyA9IGFycmF5KHNtZF9tYWNyb19nVHh0KCdzbWRf bWFjcm9fY2Fubm90X2ltcG9ydCcpLCBFX1dBUk5JTkcpOw0KCQl9IGVsc2Ugew0KCQkJJHNp emUgPSBmaWxlc2l6ZSgkZmlsZSk7DQoJCQlpZiAoJG1heF9maWxlX3NpemUgPCAkc2l6ZSkg ew0KCQkJCSRtc2cgPSBhcnJheShzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX2ZpbGVfc2l6 ZScpLCBFX1dBUk5JTkcpOw0KCQkJfSBlbHNlIHsNCgkJCQkkaW5pID0gQHBhcnNlX2luaV9m aWxlKCRmaWxlLCB0cnVlKTsNCgkJCQlpZiAoJGluaSkgew0KCQkJCQkkZG9uZSA9IGFycmF5 KCdvaycgPT4gYXJyYXkoKSwgJ25vaycgPT4gYXJyYXkoKSwgJ3NraXAnID0+IGFycmF5KCkp Ow0KCQkJCQlmb3JlYWNoICgkaW5pIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCQkJJGF0dHMg PSBhcnJheSgpOw0KCQkJCQkJJGRlZiA9ICRkZXNjID0gJyc7DQoJCQkJCQlpZiAoaXNzZXQo JHZhbFsnYXR0cmlidXRlcyddKSkgew0KCQkJCQkJCWZvcmVhY2ggKCR2YWxbJ2F0dHJpYnV0 ZXMnXSBhcyAkYXR0bGlzdCkgew0KCQkJCQkJCQlsaXN0KCRuYW0sICRkZmx0LCAkcmVwKSA9 IGV4cGxvZGUoJ3wnLCAkYXR0bGlzdCk7DQoJCQkJCQkJCSRhdHRzW3Nhbml0aXplRm9yVXJs KCRuYW0pXSA9IGFycmF5KA0KCQkJCQkJCQkJJ2RlZmF1bHQnID0+ICRkZmx0LA0KCQkJCQkJ CQkJJ3JlcCcgPT4gJHJlcA0KCQkJCQkJCQkpOw0KCQkJCQkJCX0JDQoJCQkJCQl9DQoJCQkJ CQlpZiAoaXNzZXQoJHZhbFsnZGVzY3JpcHRpb24nXSkpIHsNCgkJCQkJCQkkZGVzYyA9ICR2 YWxbJ2Rlc2NyaXB0aW9uJ107DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHZhbFsnZGVm aW5pdGlvbiddKSkgew0KCQkJCQkJCSRkZWYgPSBiYXNlNjRfZGVjb2RlKCR2YWxbJ2RlZmlu aXRpb24nXSk7DQoJCQkJCQl9DQoJCQ0KCQkJCQkJJHJlc3VsdCA9IChzdHJpbmcpc21kX21h Y3JvX3NhdmVfZGlyZWN0KCRrZXksICRkZXNjLCAkYXR0cywgJGRlZiwgJG92ZXJ3cml0ZSk7 DQoJCQkJCQlzd2l0Y2ggKCRyZXN1bHQpIHsNCgkJCQkJCQljYXNlICdTTURfTUFDUk9fQkFE X05BTUUnOg0KCQkJCQkJCWNhc2UgJ1NNRF9NQUNST19DTEFTSCc6DQoJCQkJCQkJCSRkb25l Wydub2snXVtdID0gJGtleTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAnU01EX01B Q1JPX1NLSVAnOg0KCQkJCQkJCQkkZG9uZVsnc2tpcCddW10gPSAka2V5Ow0KCQkJCQkJCQli cmVhazsNCgkJCQkJCQlkZWZhdWx0Og0KCQkJCQkJCQkkZG9uZVsnb2snXVtdID0gJGtleTsN CgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCX0NCgkJDQoJCQkJCSRtc2cgPSAoKCRk b25lWydvayddKSA/IHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9faW1wb3J0ZWQnKSAuIGpv aW4oJywgJywgJGRvbmVbJ29rJ10pLmJyIDogJycpDQoJCQkJCQkuICgoJGRvbmVbJ3NraXAn XSkgPyBzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX3NraXBwZWQnKSAuIGpvaW4oJywgJywg JGRvbmVbJ3NraXAnXSkuYnIgOiAnJykNCgkJCQkJCS4gKCgkZG9uZVsnbm9rJ10pID8gc21k X21hY3JvX2dUeHQoJ3NtZF9tYWNyb19ub3RfaW1wb3J0ZWQnKSAuIGpvaW4oJywgJywgJGRv bmVbJ25vayddKSA6ICcnKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbXNnID0gYXJyYXkoc21k X21hY3JvX2dUeHQoJ3NtZF9tYWNyb19pbnZhbGlkX2luaScpLCBFX1dBUk5JTkcpOw0KCQkJ CX0NCgkJCX0NCgkJCXVubGluaygkZmlsZSk7DQoJCX0NCgl9IGVsc2UgaWYgKGdwcygnc3Rl cCcpID09ICdzbWRfbWFjcm9fY2xvbmUnKSB7DQoJCSRzb3VyY2UgPSBzYWZlX3JvdygnKics IFNNRF9NQUNSTywgIm1hY3JvX25hbWU9JyIuZG9TbGFzaChncHMoJ3NtZF9tYWNyb19uYW1l JykpLiInIik7DQoJCSRuYW1lID0gZ3BzKCdzbWRfbWFjcm9fbmV3X25hbWUnKTsNCgkJJGRl c2MgPSAkc291cmNlWydkZXNjcmlwdGlvbiddOw0KCQkkZGVmID0gJHNvdXJjZVsnZGVmaW5p dGlvbiddOw0KCQkkYXR0cyA9ICRzb3VyY2VbJ2F0dHJpYnV0ZXMnXTsNCg0KCQkkcmVzdWx0 ID0gKHN0cmluZylzbWRfbWFjcm9fc2F2ZV9kaXJlY3QoJG5hbWUsICRkZXNjLCAkYXR0cywg JGRlZiwgZmFsc2UpOw0KCQlzd2l0Y2goJHJlc3VsdCkgew0KCQkJY2FzZSAnU01EX01BQ1JP X0JBRF9OQU1FJzoNCgkJCQkkbXNnID0gYXJyYXkoc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNy b19pbnZhbGlkJyksIEVfV0FSTklORyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdTTURfTUFD Uk9fQ0xBU0gnOg0KCQkJY2FzZSAnU01EX01BQ1JPX1NLSVAnOg0KCQkJCSRtc2cgPSBhcnJh eShzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX2V4aXN0cycpLCBFX1dBUk5JTkcpOw0KCQkJ CWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkkbXNnID0gc21kX21hY3JvX2dUeHQoJ3NtZF9t YWNyb19jcmVhdGVkJyk7DQoJCQkJJF9QT1NUWydzbWRfbWFjcm9fbmFtZSddID0gJG5hbWU7 IC8vIEluamVjdCB0aGUgbmV3IG1hY3JvIGludG8gdGhlIHBvc3Qgc3RyZWFtIHNvIGl0J3Mg c2VsZWN0ZWQgYnkgZGVmYXVsdA0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJcGFnZXRvcChz bWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX3RhYl9uYW1lJyksICRtc2cpOw0KDQoJaWYgKHNt ZF9tYWNyb190YWJsZV9leGlzdCgxKSkgew0KCQkkbWFjcm9zID0gc2FmZV9yb3dzKCcqJywg U01EX01BQ1JPLCAnMT0xIE9SREVSIEJZIG1hY3JvX25hbWUnKTsNCgkJJG1hY3JvX25hbWUg PSAkbWFjcm9fbmV3X25hbWUgPSBncHMoJ3NtZF9tYWNyb19uYW1lJyk7DQoJCSRtYWNyb19k ZXNjcmlwdGlvbiA9ICRtYWNyb19kZWYgPSAkbWFjcm9fY29kZSA9ICcnOw0KCQkkbWFjcm9f YXR0cyA9IGFycmF5KCk7DQoNCgkJLy8gQnVpbGQgdGhlIHNlbGVjdCBsaXN0IGlmIHBvc3Np YmxlDQoJCSRtYWNyb2xpc3QgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkbWFjcm9zIGFzICRp ZHggPT4gJG1hY3JvKSB7DQoJCQkkbWFjcm9saXN0WyRtYWNyb1snbWFjcm9fbmFtZSddXSA9 ICRtYWNyb1snbWFjcm9fbmFtZSddOw0KCQkJaWYgKCRtYWNyb1snbWFjcm9fbmFtZSddID09 ICRtYWNyb19uYW1lKSB7DQoJCQkJJG1hY3JvX25ld19uYW1lID0gJG1hY3JvWydtYWNyb19u YW1lJ107DQoJCQkJJG1hY3JvX2Rlc2NyaXB0aW9uID0gJG1hY3JvWydkZXNjcmlwdGlvbidd Ow0KCQkJCSRtYWNyb19hdHRzID0gJG1hY3JvWydhdHRyaWJ1dGVzJ10gPyB1bnNlcmlhbGl6 ZSgkbWFjcm9bJ2F0dHJpYnV0ZXMnXSkgOiBhcnJheSgpOw0KCQkJCSRtYWNyb19kZWYgPSAk bWFjcm9bJ2RlZmluaXRpb24nXTsNCgkJCX0NCgkJfQ0KCQkkbWFjcm9TZWxlY3RvciA9ICgk bWFjcm9saXN0KSA/IHNlbGVjdElucHV0KCdzbWRfbWFjcm9fbmFtZScsICRtYWNyb2xpc3Qs ICRtYWNyb19uYW1lLCB0cnVlLCAxKSA6ICcnOw0KCQkkbXVsdGlfbWFjc2VsID0gJyc7DQoJ CWlmICgkbWFjcm9saXN0KSB7DQoJCQkkbXVsdGlfbWFjc2VsID0gJzxzZWxlY3QgbmFtZT0i c21kX21hY3JvX2V4cG9ydFtdIiBpZD0ic21kX21hY3JvX2V4cG9ydF9saXN0IiBzaXplPSI4 IiBjbGFzcz0ibGlzdCIgbXVsdGlwbGU9Im11bHRpcGxlIj4nLm47DQoJCQlmb3JlYWNoICgk bWFjcm9saXN0IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRtdWx0aV9tYWNzZWwgLj0gJzxv cHRpb24gdmFsdWU9IicuJGtleS4nIicgLiAoKCRtYWNyb19uYW1lPT0ka2V5KSA/ICcgc2Vs ZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykgLic+Jy4kdmFsLic8L29wdGlvbj4nLm47DQoJCQl9 DQoJCQkkbXVsdGlfbWFjc2VsIC49ICc8L3NlbGVjdD4nOw0KCQl9DQoNCgkJJGVkaXRjZWxs ID0gKCRtYWNyb2xpc3QpID8gJzxsYWJlbD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f Y2hvb3NlJykuJzwvbGFiZWw+Jy5zcC4kbWFjcm9TZWxlY3RvciA6ICcnOw0KDQoJCS8vIEVk aXQgZm9ybQ0KCQllY2hvICc8Zm9ybSBpZD0ic21kX21hY3JvX3NlbGVjdCIgYWN0aW9uPSJp bmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdzbWRfbWFj cm9fc2VsZWN0JywgJycsICcnLCAnJywgJzgwMCcpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRl ZGl0Y2VsbCAuIGVJbnB1dCgkc21kX21hY3JvX2V2ZW50KSwgJyBjbGFzcz0ibm9saW5lIiBz dHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpDQoJ CQkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KDQoJCS8vIElt cG9ydCAvIGV4cG9ydCBmb3JtDQoJCWVjaG8gc3RhcnRUYWJsZSgnc21kX21hY3JvX2ltcGV4 cCcsICcnLCAnJywgJycsICc4MDAnKTsNCgkJZWNobyB0cigNCgkJCXRkYSgNCgkJCQknPGEg aWQ9InNtZF9tYWNyb19pbXBvcnQiIGhyZWY9IiMiPicuc21kX21hY3JvX2dUeHQoJ3NtZF9t YWNyb19pbXBvcnQnKS4nPC9hPicNCgkJCQkuKCgkbXVsdGlfbWFjc2VsKQ0KCQkJCQk/ICcg LyAnIC4gJzxhIGlkPSJzbWRfbWFjcm9fZXhwb3J0IiBocmVmPSIjIj4nLnNtZF9tYWNyb19n VHh0KCdzbWRfbWFjcm9fZXhwb3J0JykuJzwvYT4nDQoJCQkJCQkuICgoJG1hY3JvX25hbWUp ID8gJyAvICcgLiAnPGEgaWQ9InNtZF9tYWNyb19jbG9uZSIgaHJlZj0iIyI+Jy5zbWRfbWFj cm9fZ1R4dCgnc21kX21hY3JvX2Nsb25lJykuJzwvYT4nIDogJycpDQoJCQkJCTogJycpDQoJ CQkJLic8ZGl2IGlkPSJzbWRfbWFjcm9faW1wb3J0X2hvbGRlciIgY2xhc3M9InNtZF9oaWRk ZW4iPicNCgkJCQkuIHVwbG9hZF9mb3JtKHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fdXBs b2FkJyksICcnLCAnc21kX21hY3JvX2ltcG9ydCcsICRzbWRfbWFjcm9fZXZlbnQsICcnKQ0K CQkJCS4gJzwvZGl2PicNCgkJCQkuICgoJG11bHRpX21hY3NlbCkNCgkJCQkJCT8gJzxkaXYg aWQ9InNtZF9tYWNyb19leHBvcnRfaG9sZGVyIiBjbGFzcz0ic21kX2hpZGRlbiI+PGZvcm0g aWQ9InNtZF9tYWNyb19leHBvcnRfZm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0i cG9zdCI+Jw0KCQkJCQkJCS4gJG11bHRpX21hY3NlbCAuIGJyDQoJCQkJCQkJLiBmSW5wdXQo J3N1Ym1pdCcsICdzbWRfbWFjcm9fZXhwb3J0X2dvJywgZ1R4dCgnZ28nKSwgJycsICcnLCAn c21kX21hY3JvX2V4cG9ydF9jbG9zZSgpOycpDQoJCQkJCQkJLiBlSW5wdXQoJHNtZF9tYWNy b19ldmVudCkNCgkJCQkJCQkuIHNJbnB1dCgnc21kX21hY3JvX2V4cG9ydCcpDQoJCQkJCQkJ LiAnPC9mb3JtPjwvZGl2PicNCgkJCQkJCQkuICc8ZGl2IGlkPSJzbWRfbWFjcm9fY2xvbmVf aG9sZGVyIiBjbGFzcz0ic21kX2hpZGRlbiI+PGZvcm0gaWQ9InNtZF9tYWNyb19jbG9uZV9m b3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nDQoJCQkJCQkJLiBoSW5w dXQoJ3NtZF9tYWNyb19uYW1lJywgJG1hY3JvX25hbWUpDQoJCQkJCQkJLiBmSW5wdXQoJ3Rl eHQnLCAnc21kX21hY3JvX25ld19uYW1lJywgJycpDQoJCQkJCQkJLiBmSW5wdXQoJ3N1Ym1p dCcsICdzbWRfbWFjcm9fY2xvbmVfZ28nLCBnVHh0KCdnbycpKQ0KCQkJCQkJCS4gZUlucHV0 KCRzbWRfbWFjcm9fZXZlbnQpDQoJCQkJCQkJLiBzSW5wdXQoJ3NtZF9tYWNyb19jbG9uZScp DQoJCQkJCQkJLiAnPC9mb3JtPjwvZGl2PicNCgkJCQkJCTogJycNCgkJCQkJKQ0KCQkJLCAn IGNsYXNzPSJub2xpbmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxp Z246IG1pZGRsZTsiJw0KCQkJKQ0KCQkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoNCgkJZWNo byAnPGZvcm0gaWQ9InNtZF9tYWNyb19mb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0Ij4nOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsNCgkJZWNobyB0cigNCgkJ CWZMYWJlbENlbGwoJ25hbWUnLCAnJywgJ3NtZF9tYWNyb19uZXdfbmFtZScpDQoJCQkudGQo DQoJCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9tYWNyb19uZXdfbmFtZScsICRtYWNyb19uZXdf bmFtZSkuZklucHV0KCdoaWRkZW4nLCAnc21kX21hY3JvX25hbWUnLCAkbWFjcm9fbmFtZSkN CgkJCQkuKCgkbWFjcm9fbmFtZSA9PSAnJykgPyAnJyA6IHNwLic8YSBocmVmPSI/ZXZlbnQ9 Jy4kc21kX21hY3JvX2V2ZW50LiBhLidzdGVwPXNtZF9tYWNyb19kZWxldGUnIC4gYSAuICdz bWRfbWFjcm9fbmFtZT0nLnVybGVuY29kZSgkbWFjcm9fbmFtZSkuJyIgY2xhc3M9InNtYWxs ZXJib3giIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy5nVHh0KCdjb25maXJtX2RlbGV0 ZV9wb3B1cCcpLidcJyk7Ij5beF08L2E+JykNCgkJCSkNCgkJKTsNCgkJZWNobyB0cigNCgkJ CWZMYWJlbENlbGwoJ2Rlc2NyaXB0aW9uJywgJycsICdzbWRfbWFjcm9fZGVzY3JpcHRpb24n KQ0KCQkJLnRkKA0KCQkJCWZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fZGVzY3JpcHRpb24n LCAkbWFjcm9fZGVzY3JpcHRpb24sICcnLCAnJywgJycsICc2NicpDQoJCQkpDQoJCSk7DQoN CgkJJGF0dGxpc3QgPSBhcnJheSgnPHRhYmxlIGlkPSJzbWRfbWFjcm9fYXR0bGlzdCI+PHRo ZWFkPjx0cj48dGg+Jy5nVHh0KCduYW1lJykuJzwvdGg+PHRoPicuZ1R4dCgnZGVmYXVsdCcp Lic8L3RoPjx0aD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fcmVwbmFtZScpLic8L3Ro PjwvdHI+PC90aGVhZD48dGJvZHk+Jyk7DQoJCSRtYWNyb19hdHRzID0gZW1wdHkoJG1hY3Jv X2F0dHMpID8gYXJyYXkoJycgPT4gYXJyYXkoJ2RlZmF1bHQnID0+ICcnLCAncmVwJyA9PiAn JykpIDogJG1hY3JvX2F0dHM7DQoNCgkJZm9yZWFjaCAoJG1hY3JvX2F0dHMgYXMgJGF0dG5h bWUgPT4gJGF0dCkgew0KCQkJJGF0dGxpc3RbXSA9ICc8dHIgY2xhc3M9InNtZF9tYWNyb19h dHQiPicNCgkJCQkuJzx0ZD4nLmZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0bmFtZVtd JywgJGF0dG5hbWUpLiAnPC90ZD4nDQoJCQkJLic8dGQ+Jy5mSW5wdXQoJ3RleHQnLCAnc21k X21hY3JvX2F0dGRmbHRbXScsICRhdHRbJ2RlZmF1bHQnXSkuICc8L3RkPicNCgkJCQkuJzx0 ZD4nLmZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0cmVwW10nLCAkYXR0WydyZXAnXSku ICc8L3RkPicNCgkJCQkuJzwvdHI+JzsNCgkJfQ0KCQkkYXR0bGlzdFtdID0gJzwvdGJvZHk+ PC90YWJsZT4nOw0KDQoJCSRhdHRzID0gam9pbihuLCAkYXR0bGlzdCk7DQoJCWVjaG8gdHIo DQoJCQl0ZGEoJzxsYWJlbD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fYXR0cmlidXRl cycpLic8L2xhYmVsPicuc3AuJzxhIGhyZWY9IiMiIGlkPSJzbWRfbWFjcm9fYXR0X2FkZCIg dGl0bGU9Iicuc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19hdHRfY2xvbmVfaGVscCcpLici Picuc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19hdHRfY2xvbmUnKS4nPC9hPicsICcgY2xh c3M9Im5vbGluZSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjog dG9wOyInKQ0KCQkJLnRkYSgkYXR0cywgJyBpZD0ic21kX21hY3JvX2F0dCInKQ0KCQkpOw0K CQllY2hvIHRyKA0KCQkJdGRhKCc8bGFiZWw+Jy5zbWRfbWFjcm9fZ1R4dCgnc21kX21hY3Jv X3RhZ19kZWZpbml0aW9uJykuJzwvbGFiZWw+JywgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0i dGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7IicpDQoJCQkudGRhKA0K CQkJCXRleHRfYXJlYSgnc21kX21hY3JvX2RlZmluaXRpb24nLCAyNTAsIDcwMCwgJG1hY3Jv X2RlZikNCgkJCSkNCgkJKTsNCgkJZWNobyB0cih0ZCgnJm5ic3A7JykuZUlucHV0KCRzbWRf bWFjcm9fZXZlbnQpLnNJbnB1dCgnc21kX21hY3JvX3NhdmUnKS50ZChmSW5wdXQoJ3N1Ym1p dCcsICdzYXZlJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcsICcnLCAnJykpKTsNCgkJ ZWNobyBlbmRUYWJsZSgpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgkJZWNobyA8PDxFT0pTDQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJ alF1ZXJ5KCcjc21kX21hY3JvX2F0dF9hZGQnKS5jbGljayhmdW5jdGlvbihldikgew0KCQl2 YXIgb2JqID0galF1ZXJ5KCcjc21kX21hY3JvX2F0dGxpc3QgdGJvZHknKTsNCgkJdmFyIGVs ZW1zID0galF1ZXJ5KCcuc21kX21hY3JvX2F0dCcpOw0KDQoJCS8vIEFkZCB0aGUgcm93LCBl bXB0eSBpdCBhbmQgZm9jdXMuIENhbid0IGRvIHRoaXMgaW4gYW55IGZld2VyIGpRdWVyeSgp IGNhbGxzIGZvciBzb21lIHJlYXNvbg0KCQlvYmouYXBwZW5kKG9iai5jaGlsZHJlbigpLmVx KDApLmNsb25lKCkpOw0KCQlvYmouY2hpbGRyZW4oKS5sYXN0KCkuZmluZCgnaW5wdXQ6dGV4 dCcpLnZhbCgnJyk7DQoJCW9iai5jaGlsZHJlbigpLmxhc3QoKS5maW5kKCdpbnB1dDp0ZXh0 JykuZmlyc3QoKS5mb2N1cygpOw0KCQlldi5wcmV2ZW50RGVmYXVsdCgpOw0KCX0pOw0KDQoJ Ly8gSW1wb3J0IGxpbmsNCglqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0JykuY2xpY2soZnVu Y3Rpb24oZXYpIHsNCgkJalF1ZXJ5KCcjc21kX21hY3JvX2V4cG9ydF9ob2xkZXInKS5oaWRl KCdub3JtYWwnKTsNCgkJalF1ZXJ5KCcjc21kX21hY3JvX2Nsb25lX2hvbGRlcicpLmhpZGUo J25vcm1hbCcpOw0KCQlqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0X2hvbGRlcicpLnRvZ2ds ZSgnbm9ybWFsJyk7DQoJfSk7DQoNCgkvLyBFeHBvcnQgbGluaw0KCWpRdWVyeSgnI3NtZF9t YWNyb19leHBvcnQnKS5jbGljayhmdW5jdGlvbihldikgew0KCQlqUXVlcnkoJyNzbWRfbWFj cm9faW1wb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcpOw0KCQlqUXVlcnkoJyNzbWRfbWFj cm9fY2xvbmVfaG9sZGVyJykuaGlkZSgnbm9ybWFsJyk7DQoJCWpRdWVyeSgnI3NtZF9tYWNy b19leHBvcnRfaG9sZGVyJykudG9nZ2xlKCdub3JtYWwnKTsNCgl9KTsNCg0KCS8vIENsb25l IGxpbmsNCglqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmUnKS5jbGljayhmdW5jdGlvbihldikg ew0KCQlqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcp Ow0KCQlqUXVlcnkoJyNzbWRfbWFjcm9fZXhwb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcp Ow0KCQlqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmVfaG9sZGVyJykudG9nZ2xlKCdub3JtYWwn KS5maW5kKCJpbnB1dFtuYW1lPSdzbWRfbWFjcm9fbmV3X25hbWUnXSIpLmZvY3VzKCk7DQoJ fSk7DQp9KTsNCmZ1bmN0aW9uIHNtZF9tYWNyb19leHBvcnRfY2xvc2UoKSB7DQoJalF1ZXJ5 KCIjc21kX21hY3JvX2V4cG9ydCIpLmNsaWNrKCk7DQp9DQo8L3NjcmlwdD4NCjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2hpZGRlbiB7DQoJZGlzcGxheTpub25lOw0KfQ0KI3Nt ZF9tYWNyb19pbXBvcnRfaG9sZGVyIC51cGxvYWQtZm9ybSB7DQoJdGV4dC1hbGlnbjpyaWdo dCFpbXBvcnRhbnQ7DQoJd2lkdGg6ODAwcHg7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCg0KCX0g ZWxzZSB7DQoJCS8vIFRhYmxlIG5vdCBpbnN0YWxsZWQNCgkJJGJ0bkluc3RhbGwgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfbWFjcm9fZXZlbnQuYS4n c3RlcD1zbWRfbWFjcm9fdGFibGVfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f dGJsX2luc3RhbGxfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nOw0KCQkkYnRuU3R5 bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCQllY2hvIHN0YXJ0VGFi bGUoJ2xpc3QnKTsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9tYWNyb19nVHh0KCdzbWRf bWFjcm9fcHJlZnNfc29tZV90YmwnKSkuYnIuYnINCgkJCQkuc21kX21hY3JvX2dUeHQoJ3Nt ZF9tYWNyb19wcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5zbWRfbWFjcm9fZ1R4 dCgnc21kX21hY3JvX3ByZWZzX3NvbWVfb3B0cycpLCAnIGNvbHNwYW49IjIiJykNCgkJKTsN CgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRh YmxlKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkZCBh biBvdmVyd3JpdGUgY2hlY2tib3ggdG8gdGhlIHVwbG9hZCBmb3JtDQpmdW5jdGlvbiBzbWRf bWFjcm9fdXBsb2FkX2Zvcm0oJGV2dCwgJHN0cCwgJGRhdGEsICRhcmdzKSB7DQoJJHJldCA9 IHN0cl9yZXBsYWNlKA0KCQknPC9kaXY+Jw0KCQksICBjaGVja2JveCgnc21kX21hY3JvX2lt cG9ydF9vdmVyd3JpdGUnLCAnMScsIDApIC4gc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19v dmVyd3JpdGUnKSAuICc8L2Rpdj4nDQoJCSwgJGRhdGENCgkpOw0KCXJldHVybiAkcmV0Ow0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9tYWNyb19z YXZlX2RpcmVjdCgkbmFtZT0nJywgJGRlc2M9JycsICRhdHRzPWFycmF5KCksICRkZWY9Jycs ICRvdmVyd3JpdGUgPSBmYWxzZSkgew0KCWdsb2JhbCAkc21kX21hY3JvX2V2ZW50Ow0KDQoJ JHNtZF9tYWNyb19uZXdfbmFtZSA9IHNhbml0aXplRm9yVXJsKCRuYW1lKTsNCgkkc21kX21h Y3JvX2Rlc2NyaXB0aW9uID0gZG9TbGFzaCgkZGVzYyk7DQoJJHNtZF9tYWNyb19kZWZpbml0 aW9uID0gJGRlZjsNCg0KCSRyZXQgPSAnJzsNCg0KCWlmIChzbWRfbWFjcm9fdmFsaWQoJHNt ZF9tYWNyb19uZXdfbmFtZSkpIHsNCgkJJGNvZGUgPSBkb1NsYXNoKHNtZF9tYWNyb19idWls ZCgkc21kX21hY3JvX25ld19uYW1lLCAkYXR0cywgJHNtZF9tYWNyb19kZWZpbml0aW9uKSk7 DQoNCgkJJHNtZF9tYWNyb19kZWZpbml0aW9uID0gZG9TbGFzaCgkc21kX21hY3JvX2RlZmlu aXRpb24pOw0KCQkkc21kX21hY3JvX2F0dHMgPSBpc19hcnJheSgkYXR0cykgPyBzZXJpYWxp emUoJGF0dHMpIDogJGF0dHM7DQoNCgkJaWYgKHNtZF9tYWNyb190YWJsZV9leGlzdCgpKSB7 DQoJCQkvLyBDaGVjayBpZiB0aGlzIG1hY3JvIG5hbWUgY2xhc2hlcyB3aXRoIGEgYnVpbHQt aW4gUEhQL1RYUCBmdW5jdGlvbg0KCQkJJGV4aXN0cyA9IHNtZF9tYWNyb19leGlzdHMoJHNt ZF9tYWNyb19uZXdfbmFtZSwgZmFsc2UpOw0KCQkJaWYgKCRleGlzdHMgPT09IGZhbHNlKSB7 DQoJCQkJJGluZGIgPSBzYWZlX2ZpZWxkKCdtYWNyb19uYW1lJywgU01EX01BQ1JPLCAibWFj cm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZSciKTsNCg0KCQkJCWlmICgkaW5kYikgew0K CQkJCQlpZiAoJG92ZXJ3cml0ZSkgew0KCQkJCQkJLy8gVXBkYXRlDQoJCQkJCQkkcmV0ID0g c2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFt ZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRlcz0n JHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9uJywg Y29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRzbWRfbWFjcm9fbmV3X25hbWUnIik7DQoJ CQkJCX0gZWxzZSB7DQoJCQkJCQkkcmV0ID0gJ1NNRF9NQUNST19TS0lQJzsNCgkJCQkJfQ0K CQkJCX0gZWxzZSB7DQoJCQkJCS8vIEluc2VydA0KCQkJCQkkcmV0ID0gc2FmZV9pbnNlcnQo U01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZScsIGRlc2NyaXB0 aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRlcz0nJHNtZF9tYWNyb19h dHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9uJywgY29kZT0nJGNvZGUn Iik7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkcmV0ID0gJ1NNRF9NQUNST19DTEFTSCc7 DQoJCQl9DQoJCX0NCgl9IGVsc2Ugew0KCQkkcmV0ID0gJ1NNRF9NQUNST19CQURfTkFNRSc7 DQoJfQ0KDQoJLy8gJHJldCBtYXkgYmUgZW1wdHkgb25seSBpZiBtYWNybyB0YWJsZSBub3Qg aW5zdGFsbGVkDQoJcmV0dXJuICRyZXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX3NhdmUoKSB7DQoJZ2xvYmFsICRzbWRfbWFjcm9f ZXZlbnQ7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgNCgkJJ3NtZF9tYWNyb19u YW1lJywNCgkJJ3NtZF9tYWNyb19uZXdfbmFtZScsDQoJCSdzbWRfbWFjcm9fZGVzY3JpcHRp b24nLA0KCSkpKSk7DQoJDQoJJG1zZyA9ICcnOw0KCSRzbWRfbWFjcm9fbmV3X25hbWUgPSBz YW5pdGl6ZUZvclVybCgkc21kX21hY3JvX25ld19uYW1lKTsNCg0KCWlmIChzbWRfbWFjcm9f dmFsaWQoJHNtZF9tYWNyb19uZXdfbmFtZSkpIHsNCgkJJGF0dF9uYW1lID0gZ3BzKCdzbWRf bWFjcm9fYXR0bmFtZScpOw0KCQkkYXR0X2RmbHQgPSBncHMoJ3NtZF9tYWNyb19hdHRkZmx0 Jyk7DQoJCSRhdHRfcmVwID0gZ3BzKCdzbWRfbWFjcm9fYXR0cmVwJyk7DQoNCgkJLy8gRG9u J3QgZG9TbGFzaCgpIHRoaXMgeWV0DQoJCSRzbWRfbWFjcm9fZGVmaW5pdGlvbiA9IGdwcygn c21kX21hY3JvX2RlZmluaXRpb24nKTsNCg0KCQkkYXR0cyA9IGFycmF5KCk7DQoJCWZvcmVh Y2goJGF0dF9uYW1lIGFzICRpZHggPT4gJGF0dCkgew0KCQkJaWYgKCRhdHQgPT0gJycpIGNv bnRpbnVlOw0KCQkJJGF0dHNbc2FuaXRpemVGb3JVcmwoJGF0dCldID0gYXJyYXkoDQoJCQkJ J2RlZmF1bHQnID0+ICRhdHRfZGZsdFskaWR4XSwNCgkJCQkncmVwJyA9PiAkYXR0X3JlcFsk aWR4XQ0KCQkJKTsNCgkJfQ0KCQkNCgkJJGNvZGUgPSBkb1NsYXNoKHNtZF9tYWNyb19idWls ZCgkc21kX21hY3JvX25ld19uYW1lLCAkYXR0cywgJHNtZF9tYWNyb19kZWZpbml0aW9uKSk7 DQoJCSRzbWRfbWFjcm9fZGVmaW5pdGlvbiA9IGRvU2xhc2goJHNtZF9tYWNyb19kZWZpbml0 aW9uKTsNCgkJJHNtZF9tYWNyb19hdHRzID0gc2VyaWFsaXplKCRhdHRzKTsNCg0KCQlpZiAo c21kX21hY3JvX3RhYmxlX2V4aXN0KCkpIHsNCgkJCSRleGlzdHMgPSAoJHNtZF9tYWNyb19u YW1lICE9ICRzbWRfbWFjcm9fbmV3X25hbWUpICYmIHNtZF9tYWNyb19leGlzdHMoJHNtZF9t YWNyb19uZXdfbmFtZSk7DQoJCQlpZiAoJGV4aXN0cyA9PT0gZmFsc2UpIHsNCgkJCQkvLyBJ bmplY3QgdGhlIG5ldyBuYW1lIHNvIGl0J3Mgc2VsZWN0ZWQgaW4gdGhlIGRyb3Bkb3duIGlm IHJlbmFtZWQNCgkJCQkkX1BPU1RbJ3NtZF9tYWNyb19uYW1lJ10gPSAkc21kX21hY3JvX25l d19uYW1lOw0KCQkJCQ0KCQkJCWlmICgkc21kX21hY3JvX25hbWUgPT0gJycpIHsNCgkJCQkJ Ly8gSW5zZXJ0DQoJCQkJCSRyZXQgPSBzYWZlX2luc2VydChTTURfTUFDUk8sICJtYWNyb19u YW1lPSckc21kX21hY3JvX25ld19uYW1lJywgZGVzY3JpcHRpb249JyRzbWRfbWFjcm9fZGVz Y3JpcHRpb24nLCBhdHRyaWJ1dGVzPSckc21kX21hY3JvX2F0dHMnLCBkZWZpbml0aW9uPSck c21kX21hY3JvX2RlZmluaXRpb24nLCBjb2RlPSckY29kZSciKTsNCgkJCQkJJG1zZyA9IHNt ZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fY3JlYXRlZCcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJ CS8vIFVwZGF0ZQ0KCQkJCQkkcmV0ID0gc2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9f bmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rl c2NyaXB0aW9uJywgYXR0cmlidXRlcz0nJHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0n JHNtZF9tYWNyb19kZWZpbml0aW9uJywgY29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRz bWRfbWFjcm9fbmFtZSciKTsNCgkJCQkJJG1zZyA9IHNtZF9tYWNyb19nVHh0KCdzbWRfbWFj cm9fc2F2ZWQnKTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRtc2cgPSBhcnJheShzbWRf bWFjcm9fZ1R4dCgnc21kX21hY3JvX2V4aXN0cycpLCBFX1dBUk5JTkcpOw0KCQkJfQ0KCQl9 DQoJfSBlbHNlIHsNCgkJJG1zZyA9IGFycmF5KHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f aW52YWxpZCcpLCBFX1dBUk5JTkcpOw0KCX0NCglzbWRfbWFjcm8oJG1zZyk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX2RlbGV0ZSgp IHsNCglnbG9iYWwgJHNtZF9tYWNyb19ldmVudDsNCg0KCSRtYWNyb19uYW1lID0gZG9TbGFz aChncHMoJ3NtZF9tYWNyb19uYW1lJykpOw0KDQoJJHJldCA9IHNhZmVfZGVsZXRlKFNNRF9N QUNSTywgIm1hY3JvX25hbWU9JyRtYWNyb19uYW1lJyIpOw0KCSRtc2cgPSBzbWRfbWFjcm9f Z1R4dCgnc21kX21hY3JvX2RlbGV0ZWQnKTsNCg0KCSRfR0VUWydzbWRfbWFjcm9fbmFtZSdd ID0gJyc7DQoNCglzbWRfbWFjcm8oJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gQ2hlY2sgdGhlIG1hY3JvIGRvZXNuJ3QgZXhpc3QgYW5kIGFsc28gdGhh dCBpdCBkb2Vzbid0IGNsYXNoIHdpdGggYW4gaW50ZXJuYWwgUEhQL1RYUCBmdW5jdGlvbg0K ZnVuY3Rpb24gc21kX21hY3JvX2V4aXN0cygkbWFjcm8sICRjaGVja19kYiA9IHRydWUpIHsN CgkkcmV0ID0gKCRjaGVja19kYikgPyBzYWZlX2ZpZWxkKCdtYWNyb19uYW1lJywgU01EX01B Q1JPLCAibWFjcm9fbmFtZT0nJG1hY3JvJyIpIDogZmFsc2U7DQoJaWYgKCRyZXQgPT09IGZh bHNlKSB7DQoJCSRmbnMgPSBnZXRfZGVmaW5lZF9mdW5jdGlvbnMoKTsNCgkJZm9yZWFjaCAo JGZucyBhcyAkZmxpc3QpIHsNCgkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCSRyZXQg PSBpbl9hcnJheSgkbWFjcm8sICRmbGlzdCk7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRy ZXQ7DQp9DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENoZWNrIHRoZSBtYWNy byBuYW1lIGlzIGEgdmFsaWQgUEhQIGZ1bmN0aW9uIG5hbWUNCmZ1bmN0aW9uIHNtZF9tYWNy b192YWxpZCgkbWFjcm8pIHsNCglyZXR1cm4gaXNfY2FsbGFibGUoJG1hY3JvLCB0cnVlKSAm JiBwcmVnX21hdGNoKCcvXlthLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZm XSokLycsICRtYWNybyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX21hY3JvX2J1aWxkKCRtYWNybywgJGFyZ3MsICRkZWYpIHsNCgkkYXJnbGlz dCA9ICRyZXBzID0gYXJyYXkoKTsNCgkkbEF0dHMgPSAnJzsNCg0KCS8vIFZhbGlkYXRlIG1h Y3JvIG5hbWUgYW5kIGJhaWwgaWYgaXQnZCBjYXVzZSBwcm9ibGVtcw0KDQoJLy8gQnVpbGQg YXJnIGxpc3QgYW5kIHJlcGxhY2VtZW50cyBhcnJheS4NCgkvLyBSZXBsYWNlbWVudHMgYXJl IHByZWZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1hY3JvIGZvciBjbGFzaCBtaW5pbWlz YXRpb24NCgkkYXJncyA9IGlzX2FycmF5KCRhcmdzKSA/ICRhcmdzIDogdW5zZXJpYWxpemUo JGFyZ3MpOw0KCWZvcmVhY2ggKCRhcmdzIGFzICRhcmcgPT4gJHZhbHMpIHsNCgkJJGFyZ2xp c3RbXSA9ICInJGFyZycgPT4gJyIuJHZhbHNbJ2RlZmF1bHQnXS4iJyI7DQoJCSRyZXAgPSBl bXB0eSgkdmFsc1sncmVwJ10pID8gJGFyZyA6ICR2YWxzWydyZXAnXTsNCgkJJHJlcHNbXSA9 ICcieycgLiAkcmVwIC4gJ30iID0+ICIkJy4kbWFjcm8uJ18nLiRhcmcuJyInOw0KCX0NCgkk YXJnX3N0cmluZyA9IGpvaW4oJywnLm4sICRhcmdsaXN0KTsNCgkkcmVwX3N0cmluZyA9IGpv aW4oJywnLm4sICRyZXBzKTsNCgkkZGVmID0gZG9TbGFzaCgkZGVmKTsNCg0KCS8vIE9ubHkg Y3JlYXRlIGxBdHRzIGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBkZWZpbmVk DQoJaWYgKCRhcmdfc3RyaW5nKSB7DQoJCSRsQXR0cyA9IDw8PEVPQVRUDQpleHRyYWN0KGxB dHRzKGFycmF5KA0KCQl7JGFyZ19zdHJpbmd9DQoJKSxcJGF0dHMpLCBFWFRSX1BSRUZJWF9B TEwsICd7JG1hY3JvfScpOw0KRU9BVFQ7DQoJfQ0KDQokZnVsbF9tYWNybyA9IDw8PCBFT0ZO DQpmdW5jdGlvbiB7JG1hY3JvfShcJGF0dHMsIFwkdGhpbmcgPSBOVUxMKSB7DQoJeyRsQXR0 c30NCglcJG91dCA9ICcnOw0KCVwkb3V0ID0gc3RydHIoc3RyaXBzbGFzaGVzKCd7JGRlZn0n KSwgYXJyYXkoeyRyZXBfc3RyaW5nfSkpOw0KCXJldHVybiBcJG91dDsNCn0NCkVPRk47DQoN CglyZXR1cm4gJGZ1bGxfbWFjcm87DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KLy8gQ3JlYXRlIGluaSBmaWxlIGNvbnRlbnRzIGFuZCByZXR1cm4gaXQuDQovLyAkc3Bl Y2lhbCBpcyBhbiBhcnJheSBvZiBrZXluYW1lcyBhbmQgYSBmdW5jdGlvbiB0byBhcHBseSB0 byB0aGVtIChlLmcuICdkZWZpbml0aW9uJyA9PiAnYmFzZTY0X2VuY29kZScpDQpmdW5jdGlv biBzbWRfbWFjcm9fY3JlYXRlX2luaSgkYXJyLCAkc3BlY2lhbD1hcnJheSgpKSB7DQoJJGNv bnRlbnQgPSAnJzsNCglmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJGVsZW0pIHsNCgkJJGNv bnRlbnQgLj0gIlsiLiRrZXkuIl1cbiI7DQoJCWZvcmVhY2ggKCRlbGVtIGFzICRzdWJrZXkg PT4gJHN1YmVsZW0pIHsNCgkJCSRzdWJlbGVtID0gKGFycmF5X2tleV9leGlzdHMoJHN1Ymtl eSwgJHNwZWNpYWwpKSA/IGRvQXJyYXkoJHN1YmVsZW0sICRzcGVjaWFsWyRzdWJrZXldKSA6 ICRzdWJlbGVtOw0KCQkJaWYoaXNfYXJyYXkoJHN1YmVsZW0pKSB7DQoJCQkJJG51bSA9IGNv dW50KCRzdWJlbGVtKTsNCgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCAkbnVtOyAkaWR4Kysp IHsNCgkJCQkJJGNvbnRlbnQgLj0gJHN1YmtleSAuICJbXSA9IFwiIiAuICRzdWJlbGVtWyRp ZHhdIC4gIlwiXG4iOw0KCQkJCX0NCgkJCX0gZWxzZSBpZigkc3ViZWxlbSA9PSAiIikgew0K CQkJCSRjb250ZW50IC49ICRzdWJrZXkgLiAiID0gXG4iOw0KCQkJfSBlbHNlIHsNCgkJCQkk Y29udGVudCAuPSAkc3Via2V5IC4gIiA9IFwiIiAuICRzdWJlbGVtIC4gIlwiXG4iOw0KCQkJ fQ0KCQl9DQoJfQ0KDQoJcmV0dXJuICRjb250ZW50Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCi8vIEFkZCBtYWNybyB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0YWxs ZWQNCmZ1bmN0aW9uIHNtZF9tYWNyb190YWJsZV9pbnN0YWxsKCRzaG93cGFuZT0nMScpIHsN CgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9 IGFycmF5KCk7DQoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAiLlBG WC5TTURfTUFDUk8uImAgKA0KCQlgbWFjcm9fbmFtZWAgdmFyY2hhcigzMikgTk9UIE5VTEwg ZGVmYXVsdCAnJywNCgkJYGRlc2NyaXB0aW9uYCB2YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0 ICcnLA0KCQlgYXR0cmlidXRlc2AgdGV4dCBOVUxMIGRlZmF1bHQgJycsDQoJCWBkZWZpbml0 aW9uYCBtZWRpdW10ZXh0IE5VTEwgZGVmYXVsdCAnJywNCgkJYGNvZGVgIG1lZGl1bXRleHQg TlVMTCBkZWZhdWx0ICcnLA0KCQlQUklNQVJZIEtFWSAoYG1hY3JvX25hbWVgKQ0KCSkgRU5H SU5FPU15SVNBTSI7DQoNCglpZihncHMoJ2RlYnVnJykpIHsNCgkJZG1wKCRzcWwpOw0KCX0N Cglmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7 DQoJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10r KzsNCgkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5t eXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxu IjsNCgkJfQ0KCX0NCg0KCSRmbGRzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguU01E X01BQ1JPLidgJyk7DQoJaWYgKCFpbl9hcnJheSgnZGVmaW5pdGlvbicsJGZsZHMpKSB7DQoJ CXNhZmVfYWx0ZXIoU01EX01BQ1JPLCAiYWRkIGBkZWZpbml0aW9uYCBtZWRpdW10ZXh0IE5V TEwgZGVmYXVsdCAnJyBhZnRlciBgYXR0cmlidXRlc2AiKTsNCgl9DQoNCgkvLyBTcGl0IG91 dCByZXN1bHRzDQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQlp ZiAoJHNob3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb190 YmxfaW5zdGFsbGVkJyk7DQoJCQlzbWRfbWFjcm8oJG1zZyk7DQoJCX0NCgl9IGVsc2Ugew0K CQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNy b190Ymxfbm90X2luc3RhbGxlZCcpOw0KCQkJc21kX21hY3JvKCRtc2cpOw0KCQl9DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3AgdGFibGUgaWYgaW4g ZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF9tYWNyb190YWJsZV9yZW1vdmUoKSB7DQoJJHJldCA9 ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAw Ow0KCWlmIChzbWRfbWFjcm9fdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBU QUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9NQUNSTy4gIjsgIjsNCgkJaWYoZ3BzKCdkZWJ1 ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7 DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsN CgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xP QkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxu IjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCglp ZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtc2cgPSBzbWRfbWFj cm9fZ1R4dCgnc21kX21hY3JvX3RibF9yZW1vdmVkJyk7DQoJfSBlbHNlIHsNCgkJJG1zZyA9 IHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fdGJsX25vdF9yZW1vdmVkJyk7DQoJCXNtZF9t YWNybygkbXNnKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX21hY3JvX3RhYmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkgew0K CQkkdGJscyA9IGFycmF5KFNNRF9NQUNSTyA9PiA1KTsNCgkJJG91dCA9IGNvdW50KCR0Ymxz KTsNCgkJZm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGdwcygn ZGVidWcnKSkgew0KCQkJCWVjaG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBz YWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xz LiIgKysiLmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAk dGJsKSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgk b3V0PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJ CQllY2hvICIrKyBUQUJMRSAiLlNNRF9NQUNSTy4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3co J2NvbHVtbnMnLCBTTURfTUFDUk8pKS4iIENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNh ZmVfc2hvdygnY29sdW1ucycsIFNNRF9NQUNSTykpOw0KCX0NCn0NCg0KLy8gKioqKioqKioq KioqKioqKioqKioqDQovLyBQVUJMSUMgU0lERSBJTlRFUkZBQ0UNCi8vICoqKioqKioqKioq KioqKioqKioqKg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEV4dHJhY3Rz IGFsbCBwcmVidWlsdCBtYWNyb3MgKGVzc2VudGlhbGx5LCBuZXcgdGFncykgYW5kIGluamVj dHMgdGhlbSBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc28gdGhleSBjYW4gYmUgY2FsbGVkDQpm dW5jdGlvbiBzbWRfbWFjcm9fYm9vdCgpIHsNCgkkZnVsbF9tYWNyb3MgPSBhcnJheSgpOw0K DQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX01BQ1JPLCAnMT0xJyk7DQoNCglmb3JlYWNo ICgkcnMgYXMgJHJvdykgew0KCQkkZnVsbF9tYWNyb3NbXSA9IHN0cl9yZXBsYWNlKCdcclxu JywnDQonLCRyb3dbJ2NvZGUnXSk7IC8vIHl1a2t5IG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0N Cg0KCSRtYWNyb3MgPSBqb2luKG4sICRmdWxsX21hY3Jvcyk7DQoNCgkvLyBJbmplY3QgdGhl IHZpcnR1YWwgdGFncyBpbnRvIHRoZSBnbG9iYWwgc2NvcGUNCglldmFsKCRtYWNyb3MpOw0K fQ0KDQovKioNCiAqIHNtZF9tYWNyb19nVHh0CUNvbnZlcnQgc3RyaW5ncyBmb3IgaTE4biBw dXJwb3Nlcw0KICoNCiAqIEBwYXJhbQlzdHJpbmcJJHdoYXQgWytdIFtwcml2YXRlXSBbc3Rh dGljXQkJTmFtZSBvZiB0aGUgaXRlbSBmcm9tIHRoZSBhcnJheSB0byByZXRyaWV2ZQ0KICog QHBhcmFtCWFycmF5CSRhdHRzIFsrXQkoRGVmYXVsdDogQXJyYXkpCUFycmF5IG9mICdzZWFy Y2gnID0+ICdyZXBsYWNlbWVudHMnIHRvIG1ha2UNCiAqLw0KZnVuY3Rpb24gc21kX21hY3Jv X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdz bWRfbWFjcm9fYXR0cmlidXRlcycgPT4gJ0F0dHJpYnV0ZXMnLA0KCQknc21kX21hY3JvX2No b29zZScgPT4gJ1NlbGVjdCBtYWNybyB0byBlZGl0OicsDQoJCSdzbWRfbWFjcm9fYXR0X2Ns b25lJyA9PiAnWytdJywNCgkJJ3NtZF9tYWNyb19hdHRfY2xvbmVfaGVscCcgPT4gJ0FkZCBh biBhdHRyaWJ1dGUnLA0KCQknc21kX21hY3JvX2Nhbm5vdF9pbXBvcnQnID0+ICdVbmFibGUg dG8gaW1wb3J0IG1hY3JvLiBQbGVhc2UgY2hlY2sgZm9sZGVyIHBlcm1pc3Npb25zL3NldHRp bmdzIG9uIHlvdXIgaG9zdCcsDQoJCSdzbWRfbWFjcm9fY2xvbmUnID0+ICdDbG9uZScsDQoJ CSdzbWRfbWFjcm9fY3JlYXRlZCcgPT4gJ01hY3JvIGNyZWF0ZWQnLA0KCQknc21kX21hY3Jv X2RlbGV0ZWQnID0+ICdNYWNybyBkZWxldGVkJywNCgkJJ3NtZF9tYWNyb19leGlzdHMnID0+ ICdNYWNybyBuYW1lIGFscmVhZHkgZXhpc3RzIG9yIGNsYXNoZXMnLA0KCQknc21kX21hY3Jv X2V4cG9ydCcgPT4gJ0V4cG9ydCcsDQoJCSdzbWRfbWFjcm9fZmlsZV9zaXplJyA9PiAnTWFj cm8gZmlsZSB0b28gbGFyZ2UnLA0KCQknc21kX21hY3JvX2ltcG9ydCcgPT4gJ0ltcG9ydCcs DQoJCSdzbWRfbWFjcm9faW1wb3J0ZWQnID0+ICdJbXBvcnRlZDogJywNCgkJJ3NtZF9tYWNy b19pbnZhbGlkJyA9PiAnTWFjcm8gbmFtZSBub3QgdmFsaWQnLA0KCQknc21kX21hY3JvX2lu dmFsaWRfaW5pJyA9PiAnTWFjcm8gZmlsZSBub3QgaW4gZXhwZWN0ZWQgZm9ybWF0JywNCgkJ J3NtZF9tYWNyb19ub3RfaW1wb3J0ZWQnID0+ICdOb3QgaW1wb3J0ZWQ6ICcsDQoJCSdzbWRf bWFjcm9fb3ZlcndyaXRlJyA9PiAnRm9yY2Ugb3ZlcndyaXRlJywNCgkJJ3NtZF9tYWNyb19w cmVmc19zb21lX2V4cGxhaW4nID0+ICdUaGlzIGlzIGVpdGhlciBhIG5ldyBpbnN0YWxsYXRp b24gb3IgYSBkaWZmZXJlbnQgdmVyc2lvbicuYnIuJ29mIHRoZSBwbHVnaW4gdG8gb25lIHlv dSBoYWQgYmVmb3JlLicsDQoJCSdzbWRfbWFjcm9fcHJlZnNfc29tZV9vcHRzJyA9PiAnQ2xp Y2sgIkluc3RhbGwgdGFibGUiIHRvIGFkZCBvciB1cGRhdGUgdGhlIHRhYmxlJy5ici4nbGVh dmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuJywNCgkJJ3NtZF9tYWNyb19wcmVm c19zb21lX3RibCcgPT4gJ05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuJywNCgkJJ3Nt ZF9tYWNyb19yZXBuYW1lJyA9PiAnUmVwbGFjZW1lbnQgbmFtZScsDQoJCSdzbWRfbWFjcm9f c2F2ZWQnID0+ICdNYWNybyBzYXZlZCcsDQoJCSdzbWRfbWFjcm9fc2tpcHBlZCcgPT4gJ1Nr aXBwZWQ6ICcsDQoJCSdzbWRfbWFjcm9fdGFiX25hbWUnID0+ICdNYWNyb3MnLA0KCQknc21k X21hY3JvX3RhZ19kZWZpbml0aW9uJyA9PiAnTWFjcm8gZGVmaW5pdGlvbicsDQoJCSdzbWRf bWFjcm9fdGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCB0YWJsZScsDQoJCSdzbWRfbWFj cm9fdGJsX2luc3RhbGxlZCcgPT4gJ1RhYmxlIGluc3RhbGxlZCcsDQoJCSdzbWRfbWFjcm9f dGJsX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZSBub3QgaW5zdGFsbGVkJywNCgkJJ3NtZF9t YWNyb190YmxfcmVtb3ZlZCcgPT4gJ1RhYmxlIHJlbW92ZWQnLA0KCQknc21kX21hY3JvX3Ri bF9ub3RfcmVtb3ZlZCcgPT4gJ1RhYmxlIG5vdCByZW1vdmVkJywNCgkJJ3NtZF9tYWNyb191 cGxvYWQnID0+ICdNYWNybyBmaWxlJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hh dF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUi O3M6NToiZmxhZ3MiO3M6MToiMiI7czo0OiJoZWxwIjtzOjExMDk0OiI8ZGl2IGlkPSJzbWRf aGVscCI+CgoJPGgxIGlkPSJzbWRfdG9wIj5zbWRfbWFjcm88L2gxPgoKCTxwPkJ1aWxkIHlv dXIgb3duIHZpcnR1YWwgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyBmcm9t IGNvbWJpbmF0aW9ucyBvZiBidWlsdC1pbiB0YWdzIGFuZCBwbHVnaW5zICYjODIxMjsgZXZl biA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi4gVGh1cyB5b3UgY2FuIGVhc2UgeW91 ciB3b3JrZmxvdyBvciBvZmZlciB5b3VyIGNsaWVudHMgc2ltcGxlciBzeW50YXggZm9yIGRv aW5nIHBvd2VyZnVsIHRoaW5ncyBpbiB0aGVpciBQYWdlcywgRm9ybXMsIGFuZCBBcnRpY2xl cy48L3A+CgoJPGgyIGlkPSJzbWRfZmVhdCI+RmVhdHVyZXM6PC9oMj4KCgk8dWw+CgkJPGxp PkRlZmluZSBtYWNyb3MgJiM4MjEyOyBjdXN0b20sIHZpcnR1YWwgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gdGFncyAmIzgyMTI7IHdpdGggYW55IG51bWJlciBvZiBhdHRyaWJ1 dGVzPC9saT4KCQk8bGk+Q29uc3RydWN0IGEgZGVmaW5pdGlvbiBibG9jayAmIzgyMTI7IGxp a2UgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBGb3JtICYjODIxMjsgdGhhdCBj b250YWlucyB0aGUgdGFncyAvIGNvZGUgdGhhdCBtYWtlIHVwIHlvdXIgbWFjcm88L2xpPgoJ CTxsaT5JbmplY3QgcmVwbGFjZW1lbnQgdmFsdWVzIChyZWFkIGZyb20geW91ciBhdHRyaWJ1 dGVzKSBpbnRvIG1hY3JvIGRlZmluaXRpb25zIGF0IHJ1bnRpbWU8L2xpPgoJCTxsaT5JbXBv cnQgLyBleHBvcnQgbWFjcm9zIGZvciBhcmNoaXZlIC8gc2hhcmluZyB3aXRoIHRoZSBjb21t dW5pdHk8L2xpPgoJPC91bD4KCgk8aDI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+V3Jp dHRlbiBieSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBE YXdzb248L2E+LiBTcGF3bmVkIGZyb20gYW4gaWRlYSBieSBqcGR1cG9udCwgd2l0aCB0aGFu a3MuIEFsc28gYmlnIHByb3BzIHRvIHRoZSBiZXRhIHRlc3QgdGVhbTogcHJpbWFyaWx5IGpw ZHVwb250LCBwaWVtYW4sIG1yZGFsZSwgbWF2ZXJpY2ssIG1hcnVjaGFuIGFuZCBqYWtvYi48 L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFz cz0iaW1wb3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0 LjMuMCs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVm PSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTIxMy9zbWRfbWFjcm8iPnRleHRw YXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v c3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBh bmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBUbyB1bmluc3RhbGwsIGRlbGV0 ZSBmcm9tIHRoZSA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuPC9wPgoKCTxw PlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9MzU3NzIiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0 byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9w PgoKCTxoMiBpZD0ic21kX3VzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+VmlzaXQgdGhlIDxlbT5D b250ZW50IC0mZ3Q7IE1hY3JvczwvZW0+IHRhYi4gV2hlbiB0aGVyZSBhcmUgbWFjcm9zIGRl ZmluZWQsIHRoZSBkcm9wZG93biBhdCB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBwYW5lbCBjb250 YWlucyBhIGxpc3Qgb2YgYWxsIG1hY3JvcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkLiBDaG9v c2Ugb25lIHRvIGxvYWQgaXQgaW50byB0aGUgYm94ZXMgYmVsb3cgZm9yIGVkaXRpbmcuPC9w PgoKCTxwPlRoZSBib3hlcyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPk5hbWU8L3NwYW4+IDogbmFtZSBvZiB5b3VyIG1hY3JvL3ZpcnR1YWwgdGFnPHN1cCBp ZD0iZm5yZXYyODM2MTAwNGQ4MTNkZGFhOTRjMCIgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVm PSIjZm4yODM2MTAwNGQ4MTNkZGFhOTRjMCI+MTwvYT48L3N1cD4uIENsaWNrIHRoZSBhZGph Y2VudCBbeF0gYnV0dG9uIHRvIGRlbGV0ZSBpdC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+RGVzY3JpcHRpb248L3NwYW4+IDogb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHlv dXIgb3duIGRvY3VtZW50YXRpb24gJiM4MjEyOyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlIGF0 IHByZXNlbnQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF0dHJpYnV0ZXM8L3Nw YW4+IDogc3BlY2lmeSB1cCB0byB0aHJlZSB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlPHN1 cCBpZD0iZm5yZXYxNDk5NDg4MDUyNGQ4MTNkZGFhOWM4ZiIgY2xhc3M9ImZvb3Rub3RlIj48 YSBocmVmPSIjZm4xNDk5NDg4MDUyNGQ4MTNkZGFhOWM4ZiI+MjwvYT48L3N1cD4uIENsaWNr IHRoZSBbK10gYnV0dG9uIHRvIGNyZWF0ZSBtb3JlLiBDbGVhciB0aGUgPGVtPm5hbWU8L2Vt PiBib3ggYmVmb3JlIFNhdmluZyB0byBkZWxldGUgdGhhdCBhdHRyaWJ1dGUuIFRoZSB0aHJl ZSB2YWx1ZXMgYXJlOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmFtZTwvc3Bh bj4gOiB0aGUgbmFtZSBvZiB5b3VyIGF0dHJpYnV0ZSB0aGF0IGNsaWVudHMgd2lsbCB1c2Ug aW4geW91ciB0YWcuIE11c3QgYmUgYSB2YWxpZCA8c3BhbiBjbGFzcz0iY2FwcyI+QVNDSUk8 L3NwYW4+IG5hbWUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQ8L3Nw YW4+IDogdGhlIGRlZmF1bHQgdmFsdWUgdGhhdCB0aGlzIGF0dHJpYnV0ZSB3aWxsIHRha2Ug b24gaWYgbm90IHN1cHBsaWVkLiBMZWF2ZSBlbXB0eSBmb3IgPGNvZGU+JnF1b3Q7JnF1b3Q7 PC9jb2RlPi48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UmVwbGFjZW1lbnQ8L3Nw YW4+IDogdGhlIG5hbWUgb2YgdGhlIDxjb2RlPntyZXBsYWNlbWVudH08L2NvZGU+IHRoYXQg dGhpcyBhdHRyaWJ1dGUgd2lsbCBvY2N1cHkgaW4geW91ciBkZWZpbml0aW9ucy4gU3BlY2lm eSBpdCA8ZW0+d2l0aG91dDwvZW0+IHRoZSA8Y29kZT57fTwvY29kZT4gYnJhY2tldHMuIElm IHRoaXMgZW50cnkgaXMgb21pdHRlZCwgdGhlIGF0dHJpYnV0ZSYjODIxNztzIDxjb2RlPk5h bWU8L2NvZGU+IHdpbGwgYmUgdXNlZC48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+TWFjcm8gZGVmaW5pdGlvbjwvc3Bhbj4gOiB5b3VyIHRhZyBjb2RlIGhl cmUuIEF0IGFueSBwb2ludCB5b3UgY2FuIGluc2VydCB0aGUgbmFtZSBvZiBhbnkgb2YgeW91 ciBkZWZpbmVkIGF0dHJpYnV0ZSByZXBsYWNlbWVudCB2YWx1ZXMgaW5zaWRlIDxjb2RlPnt9 PC9jb2RlPiBtYXJrcyB0byBoYXZlIHRoZSBwbHVnaW4gaW5qZWN0IHRoZSBhdHRyaWJ1dGUg aW50byB5b3VyIG1hcmt1cCB3aGVuIHRoZSBjbGllbnQgdXNlcyB0aGUgdGFnLiBTZWUgPGEg aHJlZj0iI3NtZF9leGFtcGxlcyI+ZXhhbXBsZXM8L2E+IGZvciBtb3JlLjwvbGk+Cgk8L3Vs PgoKCTxwIGlkPSJmbjI4MzYxMDA0ZDgxM2RkYWE5NGMwIiBjbGFzcz0iZm9vdG5vdGUiPjxz dXA+MTwvc3VwPiA8c3BhbiBjbGFzcz0iY2FwcyI+SU1QT1JUQU5UPC9zcGFuPjogeW91ciB0 YWcgPHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj48L3N0cm9uZz4gYWRo ZXJlIHRvIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnM6PC9wPgoKCTx1bD4KCQk8bGk+YW4g PHNwYW4gY2xhc3M9ImNhcHMiPkFTQ0lJPC9zcGFuPiBuYW1lICYjODIxMjsgbm8gZm9yZWln biBjaGFyYWN0ZXJzLCBoeXBoZW5zIG9yIGFueXRoaW5nIG90aGVyIHRoYW4gYWxwaGFudW1l cmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLiBJbiBhZGRpdGlvbiBpdCBtYXkgPGVt Pm5vdDwvZW0+IGJlZ2luIHdpdGggYSBudW1iZXIuPC9saT4KCQk8bGk+ZG91YmxlIGNoZWNr IGJlZm9yZSBzYXZpbmcgdGhhdCB5b3VyIHRhZyBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIG5h bWUgYXMgYW4gZXhpc3RpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gb3IgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZnVuY3Rpb24uIElmIGl0IGRvZXMsIHlvdXIg c2l0ZSA8c3BhbiBjbGFzcz0iY2FwcyI+V0lMTDwvc3Bhbj4gYmxvdyB1cCB3aXRoIG5hc3R5 IGVycm9ycy4gVGhlIGJlc3Qgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHlv dSBwcmVmaXggeW91ciB0YWdzIHdpdGggYSB0aHJlZS1sZXR0ZXIgcHJlZml4LCBqdXN0IGFz IHlvdSB3b3VsZCBpZiB0aGlzIHdhcyB5b3VyIG93biBwbHVnaW4uPC9saT4KCTwvdWw+CgoJ PHA+VGhlIHBsdWdpbiB0cmllcyB0byBzaGllbGQgeW91IGZyb20gaW52YWxpZCBuYW1lcyBh cyBmYXIgYXMgcG9zc2libGUgYW5kIHdpbGwgdXN1YWxseSBkZXRlY3QgaW50ZXJuYWwgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4vVFhQIGZ1bmN0aW9uIG5hbWUgY2xhc2hlcywg YWRtaW4tc2lkZSBwbHVnaW4gY2xhc2hlcyBhcyB3ZWxsIGFzIGludmFsaWQvcHJldmlvdXNs eSBkZWZpbmVkIG1hY3JvIG5hbWVzLiBCdXQgaXQgY2Fubm90IGxlZ2lzbGF0ZSBmb3IgZnVu Y3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlY29tZSBhdmFpbGFibGUgb24geW91ciBwdWJs aWMgc2l0ZSwgaS5lLiB0YWdzL2Z1bmN0aW9ucyBhZGRlZCBieSBwdWJsaWMtc2lkZSBwbHVn aW5zLiBQbGVhc2UgZXhlcmNpc2UgY2F1dGlvbiB3aGVuIG5hbWluZyB5b3VyIG1hY3Jvcy48 L3A+CgoJPHAgaWQ9ImZuMTQ5OTQ4ODA1MjRkODEzZGRhYTljOGYiIGNsYXNzPSJmb290bm90 ZSI+PHN1cD4yPC9zdXA+IE1ha2Ugc3VyZSB5b3UgYXZvaWQgdGhlIHBpcGUgc3ltYm9sIDxj b2RlPnw8L2NvZGU+IGluIHlvdXIgYXR0cmlidXRlIG5hbWVzIC8gZGVmYXVsdHMgLyByZXBs YWNlbWVudHMgYXMgdGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBw bHVnaW4uPC9wPgoKCTxoMiBpZD0ic21kX2ltcG9ydCI+SW1wb3J0aW5nIG1hY3JvczwvaDI+ CgoJPHA+WW91IGNhbiBpbXBvcnQgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkg ZXhwb3J0ZWQgZnJvbSB0aGUgcGx1Z2luLiBDbGljayB0aGUgPGVtPkltcG9ydDwvZW0+IGxp bmsgYW5kIGNob29zZSB0aGUgPGNvZGU+c21kX21hY3Jvcy5pbmk8L2NvZGU+IGZpbGUgdGhh dCB5b3UgaGF2ZSBiZWVuIGdpdmVuICh0aGUgZmlsZSBuYW1lIGl0c2VsZiBkb2VzbiYjODIx Nzt0IGFjdHVhbGx5IG1hdHRlcikuIElmIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSBhbnkgbWFj cm9zIG9mIHRoZSBzYW1lIG5hbWUgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHlvdXIgc3lzdGVt LCBjaGVjayB0aGUgPGVtPkZvcmNlIG92ZXJ3cml0ZTwvZW0+IGJveC4gT3RoZXJ3aXNlLCBh bnkgbWFjcm9zIGluIHRoZSBpbXBvcnQgZmlsZSB0aGF0IGFscmVhZHkgZXhpc3Qgd2lsbCBi ZSBza2lwcGVkLjwvcD4KCgk8cD5Ob3RlIHRoYXQgdGhlIHBsdWdpbiBtYWtlcyBzb21lIGNo ZWNrcyBvbiB5b3VyIHN5c3RlbSBhbmQgd2lsbCB0cnkgYW5kIGJhaWwgb3V0IGdyYWNlZnVs bHkgaWYgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBhcmUgbm90IHNldCAoaXQgdGVtcG9y YXJpbHkgdXBsb2FkcyBmaWxlcyB0byA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYj ODIxNztzIHRlbXAgZGlyZWN0b3J5LCBhcyBkZWZpbmVkIGluIDxlbT5BZHZhbmNlZCBQcmVm czwvZW0+KS4gSXQgYWxzbyBpbXBvc2VzIGEgc29mdCBsaW1pdCBvZiByb3VnaGx5IDE1S0Ig b24gdGhlIHNpemUgb2YgdGhlIGltcG9ydGVkIGZpbGUsIG1vc3RseSBmb3IgcmVhc29ucyBv ZiBzcGVlZC4gSWYgeW91IGZpbmQgeW91cnNlbGYgcmVxdWlyaW5nIHRvIGltcG9ydCBsYXJn ZSBudW1iZXJzIG9mIG1hY3JvcyBpbiBvbmUgZmlsZSwgeW91IGNhbiBpbmNyZWFzZSB0aGlz IGxpbWl0IGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHN5c3RlbSBwcmVmZXJl bmNlIChzbWRfcHJlZmFsaXplciBjYW4gaGVscCk6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPlByZWYgbmFtZTwvc3Bhbj46IHNtZF9tYWNyb19pbXBvcnRfZmlsZXNp emU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VmFsdWU8L3NwYW4+IDogbWF4aW11 bSBmaWxlIHNpemUgKGluIGJ5dGVzKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5W aXNpYmlsaXR5PC9zcGFuPiA6IEhpZGRlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5FdmVudDwvc3Bhbj4gOiBzbWRfbWFjcm88L2xpPgoJPC91bD4KCgk8cD5BbHRlcm5hdGl2 ZWx5LCBzcGxpdCB5b3VyIG1hY3JvcyBpbnRvIGEgZmV3IHNtYWxsZXIgZmlsZXMgYW5kIGlt cG9ydCB0aGVtIHNlcGFyYXRlbHkuPC9wPgoKCTxoMiBpZD0ic21kX2V4cG9ydCI+RXhwb3J0 aW5nIG1hY3JvczwvaDI+CgoJPHA+QXQgYW55IHRpbWUgeW91IGNhbiBleHBvcnQgb25lIG9y IG1vcmUgbWFjcm9zIHRvIGEgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIG9yIGJhY2t1cC4gSnVz dCBjbGljayB0aGUgPGVtPkV4cG9ydDwvZW0+IGxpbmsgYW5kIGNob29zZSBvbmUgb3IgbW9y ZSBtYWNyb3MgZnJvbSB0aGUgbGlzdCB0aGF0IGFwcGVhcnMuIENsaWNrIDxlbT5HbzwvZW0+ IGFuZCB0aGVuIHNhdmUgdGhlIHJlc3VsdGluZyBmaWxlIHRvIHlvdXIgZmlsZXN5c3RlbS4g VGhlIGN1cnJlbnQgbWFjcm8gdGhhdCBpcyBiZWluZyBlZGl0ZWQgKGlmIGFueSkgaXMgc2Vs ZWN0ZWQgYnkgZGVmYXVsdC48L3A+CgoJPGgyIGlkPSJzbWRfY2xvbmUiPkNsb25pbmcgbWFj cm9zPC9oMj4KCgk8cD5XaGlsZSBhIG1hY3JvIGlzIGxvYWRlZCBpbnRvIHRoZSBlZGl0IGJv eGVzIHlvdSBjYW4gY2xvbmUgaXQuIENsaWNrIHRoZSA8ZW0+Q2xvbmU8L2VtPiBidXR0b24s IHN1cHBseSBhIG5hbWUgZm9yIHRoZSBjbG9uZSBhbmQgaGl0IDxlbT5HbzwvZW0+LiBQcm92 aWRlZCB0aGUgbmFtZSBpc24mIzgyMTc7dCBpbnZhbGlkIG9yIGluIHVzZSwgeW91ciBuZXcg Y2xvbmUgd2lsbCBiZSBjcmVhdGVkIGFuZCBicm91Z2h0IGludG8gdGhlIGVkaXQgYXJlYSBm b3IgaW1tZWRpYXRlIGVkaXRpbmcuPC9wPgoKCTxwPk5vdGUgdGhhdCB0aGUgY2xvbmUgd2ls bCBiZSBjcmVhdGVkIGZyb20gdGhlIGNob3NlbiBtYWNybyBhcyBpdCB3YXMgbGFzdCBzYXZl ZCB0byB0aGUgZGF0YWJhc2UuIElmIHlvdSBoYXZlIG1hZGUgdW5zYXZlZCBlZGl0cyB0byB0 aGUgbWFjcm8gaW4gdGhlIGVkaXQgYm94ZXMgYXQgdGhlIHRpbWUgeW91IGNsb25lIHRoZSBt YWNybywgdGhleSB3aWxsIGJlIGxvc3QuPC9wPgoKCTxoMiBpZD0ic21kX2V4YW1wbGVzIj5F eGFtcGxlczwvaDI+CgoJPGgzIGlkPSJzbWRfZWcxIj5FeGFtcGxlIDE6IGltYWdlIGdhbGxl cnk8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk1hY3JvIG5hbWU8L3Nw YW4+IDogbXlfZ2FsbGVyeTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdHRyaWJ1 dGVzIChkZWZhdWx0IC8gcmVwbGFjZW1lbnQpPC9zcGFuPiA6IGNhdGVnb3J5IChlbXB0eSAv IGltZ19jYXQpPC9saT4KCTwvdWw+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9 ImJsb2NrIj4mbHQ7dHhwOmltYWdlcyBjYXRlZ29yeT0mcXVvdDt7aW1nX2NhdH0mcXVvdDsm Z3Q7CiAgICZsdDt0eHA6aW1hZ2UgLyZndDsKICAgJmx0O2RpdiBjbGFzcz0mcXVvdDtpbWdf aW5mbyZxdW90OyZndDsmbHQ7dHhwOmltYWdlX2luZm8gLyZndDsgYnkgJmx0O3R4cDppbWFn ZV9hdXRob3IgLyZndDsmbHQ7L2RpdiZndDsKJmx0Oy90eHA6aW1hZ2VzJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPHA+VGh1cywgPGNvZGU+Jmx0O3R4cDpteV9nYWxsZXJ5IGNhdGVnb3J5PSZx dW90O2FuaW1hbHMmcXVvdDsgLyZndDs8L2NvZGU+IHdpbGwgcmVuZGVyIGFuIGltYWdlIGdh bGxlcnkgZnJvbSB0aGUgZ2l2ZW4gY2F0ZWdvcnksIGNvbXBsZXRlIHdpdGggY2FwdGlvbiBh bmQgYXV0aG9yIGluZm8uIE5vdGUgdGhhdCBubyBkZWZhdWx0IHZhbHVlIGlzIGdpdmVuIHNv IGlmIHRoZSA8Y29kZT5jYXRlZ29yeTwvY29kZT4gYXR0cmlidXRlIGlzIG5vdCBzdXBwbGll ZCwgbm8gZ2FsbGVyeSB3aWxsIGJlIHByb2R1Y2VkLjwvcD4KCgk8aDMgaWQ9InNtZF9lZzIi PkV4YW1wbGUgMjogaW50ZXJmYWNlIHRvIHNtZF9xdWVyeTwvaDM+CgoJPHVsPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TWFjcm8gbmFtZTwvc3Bhbj4gOiBteV9jb2xfZnJvbV90YWJs ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdHRyaWJ1dGVzIChkZWZhdWx0IC8g cmVwbGFjZW1lbnQpPC9zcGFuPiA6IGNvbHVtbiAoSUQgLyBjb2wpLCB0YWJsZSAodGV4dHBh dHRlcm4pPC9saT4KCTwvdWw+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj4mbHQ7cCZndDtUaGUgY29udGVudHMgb2YgdGhlIHtjb2x9IGNvbHVtbgpmcm9tIHRo ZSB7dGFibGV9IHRhYmxlIGlzOiZsdDsvcCZndDsKJmx0O3R4cDpzbWRfcXVlcnkgY29sdW1u PSZxdW90O3tjb2x9JnF1b3Q7IHRhYmxlPSZxdW90O3t0YWJsZX0mcXVvdDsKICAgICB3cmFw dGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7Jmd0OwogICB7e2NvbH19 CiZsdDsvdHhwOnNtZF9xdWVyeSZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkFueWJvZHkgdXNp bmcgPGNvZGU+Jmx0O3R4cDpteV9jb2xfZnJvbV90YWJsZSBjb2x1bW49JnF1b3Q7VGl0bGUm cXVvdDsgLyZndDs8L2NvZGU+IHdvdWxkIHNlZSBhIGxpc3Qgb2YgYWxsIGFydGljbGUgdGl0 bGVzLiBJZiB0aGV5IGFkZGVkIDxjb2RlPnRhYmxlPSZxdW90O3R4cF9maWxlJnF1b3Q7PC9j b2RlPiB0aGV5JiM4MjE3O2Qgc2VlIGFsbCB0aXRsZXMgZnJvbSBhbGwgdXBsb2FkZWQgZmls ZXMuIFRoaW5ncyB0byBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPk5vIHJlcGxhY2VtZW50IHZh cmlhYmxlIHNwZWNpZmllZCBmb3IgdGhlIDxjb2RlPnRhYmxlPC9jb2RlPiBhdHRyaWJ1dGUs IHRoZXJlZm9yZSBpdCB0YWtlcyBvbiB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGl0c2Vs Zi48L2xpPgoJCTxsaT5UaGUgZG91YmxlIHNldCBvZiA8Y29kZT57e319PC9jb2RlPiBpbiB0 aGUgc21kX3F1ZXJ5IGNvbnRhaW5lciBpcyByZXF1aXJlZCBiZWNhdXNlIHlvdSBmaXJzdCB3 YW50IHRoZSBtYWNybyB0byByZXBsYWNlIDxjb2RlPntjb2x9PC9jb2RlPiB3aXRoIHRoZSB2 YWx1ZSBmcm9tIHlvdXIgbWFjcm8mIzgyMTc7cyA8Y29kZT5jb2x1bW48L2NvZGU+IGF0dHJp YnV0ZSwgaS5lLiBpZiB5b3UmIzgyMTc7ZCBjaG9zZW4gPGNvZGU+Y29sdW1uPSZxdW90O1Bv c3RlZCZxdW90OzwvY29kZT4gdGhlbiA8Y29kZT57e2NvbH19PC9jb2RlPiBiZWNvbWVzIDxj b2RlPntQb3N0ZWR9PC9jb2RlPi4gQWZ0ZXIgdGhhdCwgc21kX3F1ZXJ5IHNlYXJjaGVzIGZv ciA8Y29kZT57UG9zdGVkfTwvY29kZT4gYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGNvbnRl bnRzIG9mIHRoZSAmIzgyMTY7UG9zdGVkJiM4MjE3OyBjb2x1bW4gZm9yIGVhY2ggcm93IGlu IHRoZSB0YWJsZS48L2xpPgoJPC91bD4KCgk8aDIgaWQ9InNtZF9jaGFuZ2Vsb2ciPkNoYW5n ZWxvZzwvaDI+CgoJPHA+MTYgTWFyIDExIHwgMC4xMCB8IEluaXRpYWwgcHVibGljIHJlbGVh c2U8L3A+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHls ZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21k X2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmll ciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7 IGNvbG9yOiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3Jt YWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4 IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHgg R2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0K I3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5n OjEwcHggMCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxw IGgzIHsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2lu ZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRl eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEx cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBw eCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsg Zm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7 IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAl OyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFw c2U6Y29sbGFwc2U7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4 IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxl LXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNz bWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJy ZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBD U1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJjOTUzZjkwMGRlOGQ3NzlhYWUyYmYxNjc1 NzdhN2NjOSI7fQ==