# Name: smd_remote_file v0.42 # Type: Admin/Client side plugin # Allows remote URL files to be handled from the Files tab # 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: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InNtZF9yZW1vdGVfZmlsZSI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC40MiI7czoxMToiZGVzY3JpcHRpb24i O3M6NTY6IkFsbG93cyByZW1vdGUgVVJMIGZpbGVzIHRvIGJlIGhhbmRsZWQgZnJvbSB0aGUg RmlsZXMgdGFiIjtzOjQ6ImNvZGUiO3M6MTQ1NzI6Ii8vIHNtZF9yZW1vdGVfZmlsZSBieSBT dGVmIERhd3Nvbg0KDQovLyBZdWsgOi0oDQpnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJz Ow0KJHNtZF9yZW1vdGVfZmlsZV92YXJzID0gYXJyYXkoDQoJJ21zZycgPT4gJycsDQoJJ21p bl90eHBfdmVyJyA9PiAnNC4wLjYnLA0KKTsNCg0KaWYgKHR4cGludGVyZmFjZSA9PT0gJ2Fk bWluJyAmJiBncHMoJ2V2ZW50JykgPT09ICJmaWxlIikgew0KCWlmICh2ZXJzaW9uX2NvbXBh cmUodHhwX3ZlcnNpb24sICRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbWluX3R4cF92ZXInXSwg Ij49IikpIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9yZXBsYWNl JywgJ2ZpbGUnLCAnc21kX3JlbW90ZV9maWxlX3JlcGxhY2UnKTsNCgkJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9yZW1vdGVfZmlsZV91cGRhdGUnLCAnZmlsZScsICdmaWxlX3NhdmUnKTsN CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9jcmVhdGUnLCAnZmlsZScs ICdzbWRfcmVtb3RlX2ZpbGVfY3JlYXRlJywgMSk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfcmVtb3RlX2ZpbGUnLCAnZmlsZScpOw0KCX0gZWxzZSB7DQoJCXRyaWdnZXJfZXJyb3Io Z1R4dCgndHhwX3ZlcnNpb24nKSAuICIgIiAuJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtaW5f dHhwX3ZlciddLiAiIHJlcXVpcmVkLiIpOw0KCX0NCn0NCg0KaWYgKHR4cGludGVyZmFjZSA9 PT0gJ3B1YmxpYycpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9kb3dubG9h ZCcsICdmaWxlX2Rvd25sb2FkJyk7DQp9DQoNCi8vIEJsb3ctYnktYmxvdyBlcXVpdmFsZW50 IG9mIGZpbGVfZG93bmxvYWRfbGluaywganVzdCBhIHJlbW90ZS1hd2FyZSB2ZXJzaW9uLg0K Ly8gQWRkcyB0aGUgY2hvb3NlIG9wdGlvbi4gRGVmYXVsdHMgdG8gMCAoID0gcmFuZG9tLCBm b3IgbG9hZCBiYWxhbmNpbmcpLiBTcGVjaWZ5DQovLyBhbnkgaGlnaGVyIGludGVnZXIgdG8g Z3JhYiB0aGF0IHBhcnRpY3VsYXIgZW50cnkgZnJvbSB0aGUgZmlsZSAoaWYgaXQgZXhpc3Rz LCBlbHNlIHVzZSAxc3QpDQpmdW5jdGlvbiBzbWRfZmlsZV9kb3dubG9hZF9saW5rKCRhdHRz LCAkdGhpbmcpIHsNCglnbG9iYWwgJHRoaXNmaWxlOw0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSdmaWxlbmFtZScgPT4gJycsDQoJCSdpZCcgPT4gJycsDQoJCSdjaG9vc2UnID0+ICcw JywNCgkJJ3Nob3dfbGluaycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCgkvLyBSZW1vdmUg dGhlIGV4dHJhIGF0dHJpYnV0ZXMgbm90IGluIHRoZSBvcmlnaW5hbCB0YWcNCgl1bnNldCgk YXR0c1snc2hvd19saW5rJ10pOw0KCXVuc2V0KCRhdHRzWydjaG9vc2UnXSk7DQoNCgkka2V5 cyA9IGFycmF5KCJzbWRfY2hvb3NlIiA9PiAkY2hvb3NlKTsNCgkkb3V0ID0gZmlsZV9kb3du bG9hZF9saW5rKCRhdHRzLCAkdGhpbmcpOw0KDQoJaWYgKHN0cnBvcygkb3V0LCAiLmxpbmsi KSkgew0KCQkkb3JpZ0xpbmsgPSBleHBsb2RlKCciJywgJG91dCk7DQoJCSRvcmlnTGlua1sx XSA9ICgoJHNob3dfbGluaykgPyAkb3JpZ0xpbmtbMV0gOiBzdHJfcmVwbGFjZSgiLmxpbmsi LCAiIiwgJG9yaWdMaW5rWzFdKSkgLiBqb2luX3FzKCRrZXlzKTsgLy8gV2lsbCBpZ25vcmUg am9pbl9xcyBpZiBjaG9vc2UgaXMgMA0KCQkkb3V0ID0gaW1wbG9kZSgnIicsICRvcmlnTGlu ayk7DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyBFcXVpdmFsZW50IHRvIGZpbGVfZG93 bmxvYWRfbmFtZSBidXQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSAubGluaw0KZnVuY3Rpb24g c21kX2ZpbGVfZG93bmxvYWRfbmFtZSgkYXR0cykgew0KCWdsb2JhbCAkdGhpc2ZpbGU7DQoJ ZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3Nob3dfbGluaycgPT4gJzAnLA0KCSksICRhdHRz KSk7DQoJYXNzZXJ0X2ZpbGUoKTsNCglyZXR1cm4gKCRzaG93X2xpbmspID8gJHRoaXNmaWxl WydmaWxlbmFtZSddIDogc3RyX3JlcGxhY2UoIi5saW5rIiwgIiIsICR0aGlzZmlsZVsnZmls ZW5hbWUnXSk7DQp9DQoNCi8vIEFkZCBhbiBpbWFnZSB0byB0aGUgZG93bmxvYWQgZm9ybSB3 aGljaCwgYnkgZGVmYXVsdCwgaXMgYmFzZWQgb24gdGhlIGZpbGVuYW1lIG9mIHRoZSBkb3du bG9hZCBpdHNlbGYNCmZ1bmN0aW9uIHNtZF9maWxlX2Rvd25sb2FkX2ltYWdlKCRhdHRzKSB7 DQoJZ2xvYmFsICR0aGlzZmlsZTsNCglhc3NlcnRfZmlsZSgpOw0KDQoJZXh0cmFjdChsQXR0 cyhhcnJheSgNCgkJJ2ZpbGVuYW1lJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2V4dGVu c2lvbicgPT4gJ2pwZycsDQoJCSdpZm1pc3NpbmcnID0+ICc/cmVmJywNCgkJJ3RodW1iJyA9 PiAnMCcsDQoJCSdjbGFzcycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkpLCAkYXR0 cykpOw0KCSRmaWxlbGluayA9ICR0aGlzZmlsZVsnZmlsZW5hbWUnXTsNCglpZiAoJGZpbGVu YW1lID09ICIiKSB7DQoJCSRmaWxlbmFtZSA9ICRmaWxlbGluazsNCgl9DQoJJGZpbGVuYW1l ID0gc3RyX3JlcGxhY2UoIi5saW5rIiwgIiIsICRmaWxlbmFtZSkgLiAoKCRleHRlbnNpb249 PSIiKSA/ICcnIDogJy4nLiRleHRlbnNpb24pOw0KDQoJJGltZyA9ICcnOw0KCWlmICgkaWQp IHsNCgkJJGltZyA9ICgkdGh1bWI9PTApID8gQGltYWdlKGFycmF5KCJpZCIgPT4gJGlkLCAi Y2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ICR3cmFwdGFnKSkgOiBAdGh1bWJuYWls KGFycmF5KCJpZCIgPT4gJGlkLCAiY2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ICR3 cmFwdGFnKSk7DQoJfSBlbHNlIGlmICgoc3RycG9zKCRmaWxlbmFtZSwgImh0dHA6Ly8iKSA9 PT0gMCkgfHwgKHN0cnBvcygkZmlsZW5hbWUsICIvIikgPT09IDApKSB7DQoJCSRpbWcgPSAo KCR3cmFwdGFnPT0iIikgPyAnJyA6ICc8Jy4kd3JhcHRhZy4gKCgkY2xhc3M9PSIiKSA/ICcn IDogJyBjbGFzcz0iJy4kY2xhc3MuJyInKSAuJz4nKSAuICc8aW1nIHNyYz0iJy4kZmlsZW5h bWUuJyInLiAoKCR3cmFwdGFnPT0iIiAmJiAkY2xhc3MpID8gJyBjbGFzcz0iJy4kY2xhc3Mu JyInIDogJycpIC4gJy8+Jy4gKCgkd3JhcHRhZz09IiIpID8gJycgOiAnPC8nLiR3cmFwdGFn Lic+Jyk7DQoJfSBlbHNlIHsNCgkJJGltZyA9ICgkdGh1bWI9PTApID8gQGltYWdlKGFycmF5 KCJuYW1lIiA9PiAkZmlsZW5hbWUsICJjbGFzcyIgPT4gJGNsYXNzLCAid3JhcHRhZyIgPT4g JHdyYXB0YWcpKSA6IEB0aHVtYm5haWwoYXJyYXkoIm5hbWUiID0+ICRmaWxlbmFtZSwgImNs YXNzIiA9PiAkY2xhc3MsICJ3cmFwdGFnIiA9PiAkd3JhcHRhZykpOw0KCX0NCgkkd3JhcHBl ciA9ICgoJHdyYXB0YWc9PSIiKSA/ICdAQFJFUEwnIDogJzwnLiR3cmFwdGFnLiAoKCRjbGFz cz09IiIpID8gJycgOiAnIGNsYXNzPSInLiRjbGFzcy4nIicpIC4nPkBAUkVQTDwvJy4kd3Jh cHRhZy4nPicpOw0KCWlmIChzdHJwb3MoJGlmbWlzc2luZywgIj9yZWYiKSA9PT0gMCkgew0K CQkkZGlzcGxheSA9ICgkaWQpID8gJGlkIDogJGZpbGVuYW1lOw0KCQkkbWlzc2luZyA9IHN0 cl9yZXBsYWNlKCJAQFJFUEwiLCAkZGlzcGxheSwgJHdyYXBwZXIpOw0KCX0gZWxzZSBpZiAo c3RycG9zKCRpZm1pc3NpbmcsICI/aW1hZ2UiKSA9PT0gMCkgew0KCQkkaW1nUGFydHMgPSBl eHBsb2RlKCI6IiwgJGlmbWlzc2luZyk7DQoJCWlmIChjb3VudCgkaW1nUGFydHMpID09IDIp IHsNCgkJCSRpbWdPcHRzID0gYXJyYXkoKTsNCgkJCWlmKGlzX251bWVyaWMoJGltZ1BhcnRz WzFdKSkgew0KCQkJCSRpbWdPcHRzWyJpZCJdID0gJGltZ1BhcnRzWzFdOw0KCQkJfSBlbHNl IHsNCgkJCQkkaW1nT3B0c1sibmFtZSJdID0gJGltZ1BhcnRzWzFdOw0KCQkJfQ0KCQkJJG1p c3NpbmcgPSBzdHJfcmVwbGFjZSgiQEBSRVBMIiwgKCgkdGh1bWI9PTApID8gQGltYWdlKCRp bWdPcHRzKSA6IEB0aHVtYm5haWwoJGltZ09wdHMpKSwgJHdyYXBwZXIpOw0KCQl9IGVsc2Ug ew0KCQkJJG1pc3NpbmcgPSAiIjsNCgkJfQ0KCX0gZWxzZSBpZiAoJGlmbWlzc2luZyA9PSAi Iikgew0KCQkkbWlzc2luZyA9ICIiOw0KCX0gZWxzZSB7DQoJCSRtaXNzaW5nID0gc3RyX3Jl cGxhY2UoIkBAUkVQTCIsICRpZm1pc3NpbmcsICR3cmFwcGVyKTsNCgl9DQoJcmV0dXJuICgk aW1nKSA/ICRpbWcgOiAkbWlzc2luZzsNCn0NCg0KLy8gR2VuZXJpYyBjYWxsYmFjayB3aGlj aCBpcyBmaXJlZCBfYWZ0ZXJfIHRoZSBGaWxlcyBwYWdlIGhhcyBsb2FkZWQuDQovLyBQZXJm b3JtcyBkaXNwbGF5IGNsZWFudXAvaW5zZXJ0aW9uIGFuZCBwb3N0IHByb2Nlc3Npbmcgb2Yg YW55IGZpbGUgaW5zZXJ0cy9lZGl0cw0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlKCRldmVu dCwgJHN0ZXApIHsNCglnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJJGhlbHBM aW5rID0gJzxhIHRhcmdldD0iX2JsYW5rIicuDQoJCQknIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9zbWRfcmVtb3RlX2ZpbGVfdXJsX3BvcHVwIicuDQoJCQknIG9uY2xpY2s9InBv cFdpbih0aGlzLmhyZWYpOyByZXR1cm4gZmFsc2U7IiBjbGFzcz0icG9waGVscCI+PzwvYT4n Ow0KCWlmICgkc3RlcCA9PSAiZmlsZV9lZGl0IiB8fCAkc3RlcCA9PSAiZmlsZV9yZXBsYWNl Iikgew0KCQkkaWQgPSBhc3NlcnRfaW50KGdwcygnaWQnKSk7DQoJCSRycyA9IHNhZmVfcm93 KCdmaWxlbmFtZScsJ3R4cF9maWxlJywnaWQgPSAnLiAkaWQpOw0KCQlpZiAoc3RycG9zKCRy c1snZmlsZW5hbWUnXSwgIi5saW5rIikgIT09IGZhbHNlKSB7DQoJCQkkdWxfZm9ybSA9IHRy aW0oZm9ybShlSW5wdXQoJ2ZpbGUnKS4gc0lucHV0KCdzbWRfcmVtb3RlX2ZpbGVfcmVwbGFj ZScpLiBoSW5wdXQoJ2lkJywkaWQpLg0KCQkJCQlncmFmKCdBZGQgVVJMJy5zcC4kaGVscExp bmsuc3AuZklucHV0KCd0ZXh0JywgJ3NtZF9yZW1vdGVfdXJsJywgJycsICdlZGl0JywgJ0Vu dGVyIGEgVVJMIHRvIGFkZCB0byB0aGlzIGZpbGUnLCAnJywgJzMyJykuc3AuDQoJCQkJCQki T3ZlcndyaXRlOiIuc3AuY2hlY2tib3goJ3NtZF9yZW1vdGVfYmxhdCcsICdzbWRfcmVtb3Rl X2JsYXQnLCAwKS5zcC4NCgkJCQkJCWZJbnB1dCgnc3VibWl0JywgJycsICdVcGxvYWQnLCAn c21hbGxlcmJveCcpKQ0KCQkJCSwgJ3RleHQtYWxpZ246IGNlbnRlcjsnKSk7DQoJCQllY2hv IHNtZF9yZW1vdGVfanMoJyQoIi51cGxvYWQtZm9ybSIpLnJlcGxhY2VXaXRoKFwnJy4kdWxf Zm9ybS4nXCcpOycpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJHVsX2Zvcm0gPSB0cmltKGZvcm0o ZUlucHV0KCdmaWxlJykuIHNJbnB1dCgnc21kX3JlbW90ZV9maWxlX2NyZWF0ZScpLg0KCQkJ CQlncmFmKCdvciBVUkwnLnNwLiRoZWxwTGluay5zcC5mSW5wdXQoJ3RleHQnLCAnc21kX3Jl bW90ZV91cmwnLCAnJywgJ2VkaXQnLCAnRW50ZXIgYSBVUkwgdG8gdXBsb2FkIHRvIFRYUCcs ICcnLCAnMzInKS5zcC4NCgkJCQkJCWZJbnB1dCgnc3VibWl0JywgJycsICdVcGxvYWQnLCAn c21hbGxlcmJveCcpKQ0KCQkJCSwgJ3RleHQtYWxpZ246IGNlbnRlcjsnKSk7DQoJCWVjaG8g c21kX3JlbW90ZV9qcygnJCgiLnVwbG9hZC1mb3JtIikuYXBwZW5kKFwnJy4kdWxfZm9ybS4n XCcpOycpOw0KCX0NCg0KCWlmICgkc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddICE9ICIi KSB7DQoJCWVjaG8gc21kX3JlbW90ZV9qcygnJCgiI25hdi1wcmltYXJ5IHRhYmxlIHRkOmVx KDApIikuYXBwZW5kKFwnJy4kc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddLidcJyk7Jyk7 DQoJfQ0KfQ0KDQovLyBXaGVuIGEgZmlsZSBpcyAicmVwbGFjZWQiIHdpdGggYSBuZXcgVVJM IHRoZSBleGlzdGluZyBmaWxlIG5hbWUgbXVzdCByZW1haW4NCi8vIHVuY2hhbmdlZC4gQnkg ZGVmYXVsdCB0aGUgbmV3IFVSTCBpcyBhcHBlbmRlZCB0byB0aGUgLmxpbmsgZmlsZSB1bmxl c3MgdGhlICdvdmVyd3JpdGUnDQovLyBjaGVja2JveCBpcyBzZXQNCmZ1bmN0aW9uIHNtZF9y ZW1vdGVfZmlsZV9yZXBsYWNlKCkgew0KCWdsb2JhbCAkZmlsZV9iYXNlX3BhdGgsICRzbWRf cmVtb3RlX2ZpbGVfdmFyczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc21kX3JlbW90ZV91 cmwnLCAnc21kX3JlbW90ZV9ibGF0JywgJ2lkJykpKTsNCgkkaWQgPSBhc3NlcnRfaW50KCRp ZCk7DQoJJHVybCA9IHRyaW0oJHNtZF9yZW1vdGVfdXJsKTsNCgkkcnMgPSBzYWZlX3Jvdygn ZmlsZW5hbWUnLCd0eHBfZmlsZScsJ2lkID0gJy4kaWQpOw0KDQoJaWYgKHN0cnBvcygkcnNb J2ZpbGVuYW1lJ10sICIubGluayIpICE9PSBmYWxzZSkgew0KCQlpZiAoc3RycG9zKCR1cmws ICJodHRwIikgPT09IDApIHsNCgkJCSR3cml0ZU1vZGUgPSAoJHNtZF9yZW1vdGVfYmxhdCkg PyAidyIgOiAiYSI7DQoJCQkkZGVzdF9maWxlcGF0aCA9IGJ1aWxkX2ZpbGVfcGF0aCgkZmls ZV9iYXNlX3BhdGgsICRyc1snZmlsZW5hbWUnXSk7DQoJCQlzbWRfcmVtb3RlX2ZpbGVfd3Jp dGUoJGRlc3RfZmlsZXBhdGgsICRyc1snZmlsZW5hbWUnXSwgJHVybCwgJHdyaXRlTW9kZSk7 DQoJCX0gZWxzZSB7DQoJCQkkc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgn ZmlsZV91cGxvYWRfZmFpbGVkJykgLiAoKGVtcHR5KCRzbWRfcmVtb3RlX3VybCkpID8gJyAt ICcuZ1R4dCgndXBsb2FkX2Vycl9ub19maWxlJykgOiAnJyk7DQoJCX0NCgl9DQp9DQoNCi8v IEV2ZXJ5IHRpbWUgYSBmaWxlIGlzIHNhdmVkL2VkaXRlZCwgVFhQIHJlY2FsY3VsYXRlcyBp dHMgc2l6ZSBmcm9tIHRoZSByZWFsIGZpbGUgKGdycnIpLg0KLy8gVGhpcyBpcyB1bmRlc2ly YWJsZSBzbyBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzaXplIG9mIHRoZSByZW1vdGUgVVJM IGZpbGUgaW5zdGVhZC4NCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV91cGRhdGUoKSB7DQoJ ZXh0cmFjdChncHNhKGFycmF5KCdpZCcpKSk7DQoJc21kX3JlbW90ZV9zZXRfc2l6ZSgkaWQp Ow0KfQ0KDQovLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBUWFAgZGF0YWJhc2UgZmls ZSB0byB0aGF0IG9mIGl0cyBjb3JyZXNwb25kaW5nICJyZWFsIiByZW1vdGUgVVJMIGZpbGUg c2l6ZQ0KZnVuY3Rpb24gc21kX3JlbW90ZV9zZXRfc2l6ZSgkaWRfb3JfZmlsZSkgew0KCWds b2JhbCAkZmlsZV9iYXNlX3BhdGg7DQoNCglpZiAoaXNfbnVtZXJpYygkaWRfb3JfZmlsZSkp IHsNCgkJJGZpbGVuYW1lID0gdHJpbShzYWZlX2ZpZWxkKCJmaWxlbmFtZSIsICJ0eHBfZmls ZSIsICJpZD0iLmludHZhbCgkaWRfb3JfZmlsZSkpKTsNCgl9IGVsc2Ugew0KCQkkZmlsZW5h bWUgPSB0cmltKGRvU2xhc2goJGlkX29yX2ZpbGUpKTsNCgl9DQoJaWYgKHN0cnBvcygkZmls ZW5hbWUsICIubGluayIpKSB7DQoJCSRmaWxlcGF0aCA9IGJ1aWxkX2ZpbGVfcGF0aCgkZmls ZV9iYXNlX3BhdGgsICRmaWxlbmFtZSk7DQoJCSR1cmwgPSBzbWRfcmVtb3RlX2ZpbGVfbGlz dCgkZmlsZXBhdGgsIDEsIDEpOw0KCQlpZiAoY291bnQoJHVybCkgPiAwKSB7DQoJCQkkaGRy cyA9IHNtZF9nZXRfaGVhZGVycygkdXJsWzBdLCAxKTsNCgkJCSRzaXplID0gKCRoZHJzID09 PSBmYWxzZSB8fCAhaXNzZXQoJGhkcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pKSA/IDEgOiAkaGRy c1snY29udGVudC1sZW5ndGgnXTsNCgkJCXNhZmVfdXBkYXRlKCJ0eHBfZmlsZSIsICJzaXpl PSIuJHNpemUsICJmaWxlbmFtZT0nIi4kZmlsZW5hbWUuIiciKTsNCgkJfQ0KCX0NCn0NCg0K Ly8gQ2FsbGJhY2sgZm9yIHVwbG9hZGluZyBhIFVSTCBmcm9tIHRoZSBGaWxlcyB0YWINCmZ1 bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV9jcmVhdGUoKSB7DQoJZ2xvYmFsICRmaWxlX2Jhc2Vf cGF0aCwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NtZF9yZW1vdGVfdXJsJywnY2F0ZWdvcnknLCdwZXJtaXNzaW9ucycsJ2Rlc2Ny aXB0aW9uJykpKSk7DQoNCgkkdXJsID0gdHJpbSgkc21kX3JlbW90ZV91cmwpOw0KCS8vIE9u bHkgaW50ZXJjZXB0IHJlbW90ZSBmaWxlczsgbGVhdmUgZXZlcnl0aGluZyBlbHNlIGZvciBU WFAgdG8gbWFuYWdlDQoJaWYgKHN0cnBvcygkdXJsLCAiaHR0cCIpID09PSAwKSB7DQoJCSRo ZHJzID0gc21kX2dldF9oZWFkZXJzKCR1cmwsIDEpOw0KCQkkc2l6ZSA9ICgkaGRycyA9PT0g ZmFsc2UgfHwgIWlzc2V0KCRoZHJzWydjb250ZW50LWxlbmd0aCddKSkgPyAxIDogJGhkcnNb J2NvbnRlbnQtbGVuZ3RoJ107DQoNCgkJLy8gTWFrZSBhIGZpbGVuYW1lIGFuZCBmdWxsIHBh dGg6IHVuZW5jb2RlZA0KCQkkZGVzdF9maWxlbmFtZSA9IGJhc2VuYW1lKHVybGRlY29kZSgk dXJsKSkuIi5saW5rIjsNCgkJJGRlc3RfZmlsZXBhdGggPSBidWlsZF9maWxlX3BhdGgoJGZp bGVfYmFzZV9wYXRoLCAkZGVzdF9maWxlbmFtZSk7DQoNCgkJaWYgKGZpbGVfZXhpc3RzKCRk ZXN0X2ZpbGVwYXRoKSkgew0KCQkJc21kX3JlbW90ZV9maWxlX3dyaXRlKCRkZXN0X2ZpbGVw YXRoLCAkZGVzdF9maWxlbmFtZSwgJHVybCk7DQoJCX0gZWxzZSB7DQoJCQkvLyBGaWxlIGRv ZXNuJ3QgZXhpc3Qgc28gY3JlYXRlIGl0IGFuZCBwdXQgdGhlIFVSTCBpbnNpZGUNCgkJCSR0 bXAgPSB0ZW1wbmFtKCIvdG1wIiwgInNtZF8iKTsNCgkJCSRoYW5kbGUgPSBmb3BlbigkdG1w LCAidyIpOw0KCQkJZndyaXRlKCRoYW5kbGUsICR1cmwubik7DQoJCQlmY2xvc2UoJGhhbmRs ZSk7DQoJCQlyZW5hbWUoJHRtcCwgJGRlc3RfZmlsZXBhdGgpOw0KDQoJCQkvLyBBZGQgdGhl IGZpbGUgdG8gVFhQDQoJCQkkcmV0ID0gc2FmZV9pbnNlcnQoInR4cF9maWxlIiwNCgkJCQki ZmlsZW5hbWUgPSAnJGRlc3RfZmlsZW5hbWUnLA0KCQkJCSBjYXRlZ29yeSA9ICckY2F0ZWdv cnknLA0KCQkJCSBwZXJtaXNzaW9ucyA9ICckcGVybWlzc2lvbnMnLA0KCQkJCSBkZXNjcmlw dGlvbiA9ICckZGVzY3JpcHRpb24nLA0KCQkJCSBzaXplID0gJyRzaXplJywNCgkJCQkgY3Jl YXRlZCA9IG5vdygpLA0KCQkJCSBtb2RpZmllZCA9IG5vdygpDQoJCQkiKTsNCgkJCSRzbWRf cmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdmaWxlX3VwbG9hZGVkJywgYXJyYXko J3tuYW1lfScgPT4gdXJsZGVjb2RlKCR1cmwpKSk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkc21k X3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykg LiAoKGVtcHR5KCRzbWRfcmVtb3RlX3VybCkpID8gJyAtICcuZ1R4dCgndXBsb2FkX2Vycl9u b19maWxlJykgOiAnJyk7DQoJfQ0KfQ0KDQovLyBBcHBlbmQgYSBVUkwgdG8gdGhlIGdpdmVu IGZpbGUuIElmIHdyaXRlTW9kZT0idyIgdGhlIHdob2xlIGZpbGUgaXMgcmVwbGFjZWQNCmZ1 bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV93cml0ZSgkZmlsZXBhdGgsICRmaWxlbmFtZSwgJHVy bCwgJHdyaXRlTW9kZT0iYSIpIHsNCglnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0K DQoJLy8gUmVhZCB0aGUgd2hvbGUgZmlsZSBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBhZGQg dGhlIFVSTCBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5DQoJJGxpbmVzID0gc21kX3JlbW90 ZV9maWxlX2xpc3QoJGZpbGVwYXRoLCAwLCAxKTsNCglpZiAoIWluX2FycmF5KCR1cmwsICRs aW5lcykgfHwgJHdyaXRlTW9kZSA9PSAidyIpIHsNCgkJJGhhbmRsZSA9IGZvcGVuKCRmaWxl cGF0aCwgJHdyaXRlTW9kZSk7DQoJCWZ3cml0ZSgkaGFuZGxlLCAkdXJsLm4pOw0KCQlmY2xv c2UoJGhhbmRsZSk7DQoJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdm aWxlX3VwbG9hZGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gdXJsZGVjb2RlKCR1cmwpKSk7DQoJ fSBlbHNlIHsNCgkJJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXSA9IGdUeHQoJ2ZpbGVf YWxyZWFkeS1leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiB1cmxkZWNvZGUoJHVybCkpKTsN Cgl9DQoJLy8gU2V0IHRoZSBzaXplIGp1c3QgaW4gY2FzZQ0KCXNtZF9yZW1vdGVfc2V0X3Np emUoJGZpbGVuYW1lKTsNCn0NCg0KLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGNob3Nl biBmaWxlIChmdWxsIHBhdGggcmVxdWlyZWQpIGFuZCBnZXQgbGluZXMgZnJvbSB3aXRoaW4s IGFkZGluZyB0aGVtIHRvIGFuIGFycmF5Lg0KLy8gICRvZmZzZXQgaXMgd2hlcmUgdG8gc3Rh cnQgZnJvbS4gTm9ybWFsbHkgMSA9IDFzdCByb3csIDIgPSAybmQgcm93IGFuZCBzbyBvbi4g MCA9IGEgcmFuZG9tIHJvdy4NCi8vICAkcXR5IHNwZWNpZmllcyBob3cgbWFueSByb3dzIHRv IHB1bGwuIDAgPSB1bmxpbWl0ZWQuDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2ZpbGVfbGlzdCgk Zm5hbWUsICRxdHk9MSwgJG9mZnNldD0wKSB7DQoJJG91dCA9IGFycmF5KCk7DQoJaWYgKGZp bGVfZXhpc3RzKCRmbmFtZSkpIHsNCgkJJGZkID0gZm9wZW4oJGZuYW1lLCAiciIpOw0KCQkv LyBSZWFkIHRoZSB3aG9sZSBmaWxlIGluICh5ZXMgdGhlcmUncyB0aGUgZmlsZSgpIGNhbGws IGJ1dCBmZ2V0cygpIGlzIHN1cHBvc2VkbHkgcXVpY2tlciBvbiB0eHQgZmlsZXMpDQoJCXdo aWxlICghZmVvZigkZmQpKSB7DQoJCQkkbGluZSA9IHJ0cmltKGZnZXRzKCRmZCkpOw0KCQkJ aWYgKCRsaW5lICE9ICIiKSB7DQoJCQkgICAkbGluZXNbXSA9ICRsaW5lOw0KCQkJfQ0KCQl9 DQoJCWZjbG9zZSAoJGZkKTsNCgkJaWYgKCRvZmZzZXQgPT0gMCkgew0KCQkJc2h1ZmZsZSgk bGluZXMpOw0KCQkJJG9mZnNldCA9IDE7DQoJCX0NCgkJJG9mZnNldCA9ICgkb2Zmc2V0ID4g Y291bnQoJGxpbmVzKSkgPyAxIDogJG9mZnNldDsNCgkJJG91dCA9ICgkcXR5ID09IDApID8g JGxpbmVzIDogYXJyYXlfc2xpY2UoJGxpbmVzLCAkb2Zmc2V0LTEsICRxdHkpOw0KCX0NCgly ZXR1cm4gJG91dDsNCn0NCg0KLy8gQ2FsbGVkIGp1c3QgYmVmb3JlIGEgZG93bmxvYWQgaXMg aW5pdGlhdGVkDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2Rvd25sb2FkKCRldmVudCwgJHN0ZXAp IHsNCglnbG9iYWwgJHByZXRleHQsICRpZCwgJGZpbGVfYmFzZV9wYXRoLCAkZmlsZV9lcnJv cjsNCg0KCWlmICghaXNzZXQoJGZpbGVfZXJyb3IpKSB7DQoJCS8vIEdldCB0aGUgInRydWUi IGZpbGVuYW1lICh1bmZvcnR1bmF0ZWx5IGZyb20gdGhlIGRhdGFiYXNlID0gMSBleHRyYSBx dWVyeSkuDQoJCSRyZWFsX2ZpbGUgPSBzYWZlX3JvdygiZmlsZW5hbWUsIHNpemUiLCAidHhw X2ZpbGUiLCAiaWQ9Ii5pbnR2YWwoJGlkKSk7DQoJCWlmIChzdHJwb3MoJHJlYWxfZmlsZVsn ZmlsZW5hbWUnXSwgIi5saW5rIikgPiAwKSB7DQoJCQkkY2hvb3NlID0gMDsNCgkJCS8vIEdl dCBhbnkgb3ZlcnJpZGluZyB2YWx1ZSBvZiBzbWRfY2hvb3NlIGZyb20gdGhlIHF1ZXJ5IHN0 cmluZw0KCQkJaWYgKCRwcmV0ZXh0WydxcyddKSB7DQoJCQkJbGlzdCgkcWtleSwgJHF2YWwp ID0gZXhwbG9kZSgiPSIsICRwcmV0ZXh0WydxcyddKTsNCgkJCQlpZiAoJHFrZXkgPT0gInNt ZF9jaG9vc2UiKSB7DQoJCQkJCWlmICgkcXZhbCA+IDApIHsNCgkJCQkJCSRjaG9vc2UgPSBp bnR2YWwoJHF2YWwpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gVGhlIGZpbGUgc2l6 ZSwgaG93ZXZlciwgaXMgdGhhdCBvZiB0aGUgcmVtb3RlIGZpbGUNCgkJCSRyZW1vdGVVUkwg PSBzbWRfcmVtb3RlX2ZpbGVfbGlzdChidWlsZF9maWxlX3BhdGgoJGZpbGVfYmFzZV9wYXRo LCAkcmVhbF9maWxlWydmaWxlbmFtZSddKSwgMSwgJGNob29zZSk7DQoJCQlpZiAoY291bnQo JHJlbW90ZVVSTCkgPiAwKSB7DQoJCQkJJHVybCA9ICRyZW1vdGVVUkxbMF07DQoJCQkJLy8g VGVzdCB0aGUgZmlsZSBleGlzdHM6IHNsb3csIGJ1dCByZWR1Y2VzIGZhbHNlIGRvd25sb2Fk IGNvdW50IGluY3JlbWVudHMNCgkJCQkkaGRycyA9IHNtZF9nZXRfaGVhZGVycygkdXJsLCAx KTsNCgkJCQkkYWxsa2V5ID0gc3RydG9sb3dlcihpbXBsb2RlKCIgIiwgYXJyYXlfa2V5cygk aGRycykpKTsNCgkJCQlpZiAoc3RycG9zKCRhbGxrZXksICIyMDAiKSA+IDAgJiYgc3RycG9z KCRhbGxrZXksICJvayIpID4gMCkgew0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRp b246IEZpbGUgRG93bmxvYWQnKTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxp Y2F0aW9uL29jdGV0LXN0cmVhbScpOw0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRp b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gYmFzZW5hbWUoJHJlYWxfZmlsZVsnZmls ZW5hbWUnXSkgLiAnIjsgc2l6ZSA9ICInLiRyZWFsX2ZpbGVbJ3NpemUnXS4nIicpOw0KCQkJ CQkvLyBGaXggZm9yIGxhbWUgSUUgNiBwZGYgYnVnIG9uIHNlcnZlcnMgY29uZmlndXJlZCB0 byBzZW5kIGNhY2hlIGhlYWRlcnMNCgkJCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2 YXRlJyk7DQoJCQkJCUBpbmlfc2V0KCJ6bGliLm91dHB1dF9jb21wcmVzc2lvbiIsICJPZmYi KTsNCgkJCQkJQHNldF90aW1lX2xpbWl0KDApOw0KCQkJCQlAaWdub3JlX3VzZXJfYWJvcnQo dHJ1ZSk7DQoNCgkJCQkJLy8gSGFuZC1vZmYgdG8gdGhlIHJlbW90ZSBmaWxlDQoJCQkJCWhl YWRlcignTG9jYXRpb246ICcgLiAkdXJsKTsNCg0KCQkJCQkvLyByZWNvcmQgZG93bmxvYWQg aWYgdGhlIGZpbGUgc2l6ZXMgbWF0Y2gNCgkJCQkJaWYgKGludHZhbCgkaGRyc1snY29udGVu dC1sZW5ndGgnXSkgPT0gaW50dmFsKCRyZWFsX2ZpbGVbJ3NpemUnXSkpIHsNCgkJCQkJCXNh ZmVfdXBkYXRlKCJ0eHBfZmlsZSIsICJkb3dubG9hZHM9ZG93bmxvYWRzKzEiLCAnaWQ9Jy5p bnR2YWwoJGlkKSk7DQoJCQkJCQlsb2dfaGl0KCcyMDAnKTsNCgkJCQkJfQ0KCQkJCQkvLyBy ZW1vdGUgZG93bmxvYWQgZG9uZTogZ2FtZSBvdmVyDQoJCQkJCWV4aXQoMCk7DQoNCgkJCQl9 IGVsc2Ugew0KCQkJCQkkZmlsZV9lcnJvciA9IDQwNDsNCgkJCQl9DQoJCQl9IGVsc2Ugew0K CQkJCSRmaWxlX2Vycm9yID0gNDA0Ow0KCQkJfQ0KCQl9DQoJfQ0KCS8vIHJlbW90ZSBkb3du bG9hZCBub3QgZG9uZSAtIGxlYXZlIHRvIFRYUCB0byBoYW5kbGUgZXJyb3Igb3IgImxvY2Fs IiBmaWxlIGRvd25sb2FkDQoJcmV0dXJuOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2pz KCRjb250ZW50KSB7DQoJJG91dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ Jy5uOw0KCSRvdXQgLj0gJGNvbnRlbnQubjsNCgkkb3V0IC49ICc8L3NjcmlwdD4nLm47DQoJ cmV0dXJuICRvdXQ7DQp9DQoNCi8vIFBIUDQgZW11bGF0aW9uKGlzaCkgb2YgUEhQNSdzIGdl dF9oZWFkZXJzKCkuIFN0b2xlbiBmcm9tIHBocC5uZXQgYW5kIG1vZGRlZA0KZnVuY3Rpb24g c21kX2dldF9oZWFkZXJzKCR1cmwsICRmb3JtYXQ9MCkgew0KCWlmICghJHVybCkgew0KCQly ZXR1cm4gZmFsc2U7DQoJfQ0KCSR1aW5mbz1wYXJzZV91cmwoJHVybCk7DQoJJGhlYWRlcnMg PSBhcnJheSgpOw0KCWlmIChpc19jYWxsYWJsZSgnY2hlY2tkbnNycicpICYmICFjaGVja2Ru c3JyKCR1aW5mb1snaG9zdCddLicuJywnTVgnKSAmJiAhY2hlY2tkbnNycigkdWluZm9bJ2hv c3QnXS4nLicsJ0EnKSkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSRwb3J0ID0gaXNzZXQo JHVpbmZvWydwb3J0J10pID8gJHVpbmZvWydwb3J0J10gOiA4MDsNCgkkZnA9ZnNvY2tvcGVu KCR1aW5mb1snaG9zdCddLCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyLCA1KTsNCg0KCWlmKCRm cCkgew0KCQkkaGVhZCA9ICJHRVQgIi5AJHVpbmZvWydwYXRoJ10uIj8iLkAkdWluZm9bJ3F1 ZXJ5J10uIiBIVFRQLzEuMFxyXG4iOw0KCQkkaGVhZCAuPSAiSG9zdDogIi5AJHVpbmZvWydo b3N0J10uIjoiLiRwb3J0LiJcclxuIjsNCgkJJGhlYWQgLj0gIkNvbm5lY3Rpb246IENsb3Nl XHJcbiI7DQoJCSRoZWFkIC49ICJBY2NlcHQ6ICovKlxyXG4iOw0KCQlpZiAoQCR1aW5mb1sn dXNlciddKSB7DQoJCQkkaGVhZCAuPSAiQXV0aG9yaXphdGlvbjogQmFzaWMgIi5iYXNlNjRf ZW5jb2RlKCR1aW5mb1sndXNlciddLic6Jy4kdWluZm9bJ3Bhc3MnXSkuIlxyXG4iOw0KCQl9 DQoJCSRoZWFkIC49ICJcclxuIjsNCgkJZnB1dHMoJGZwLCAkaGVhZCk7DQoJCSRlb2hlYWRl ciA9IGZhbHNlOw0KCQl3aGlsZSghZmVvZigkZnApIG9yICgkZW9oZWFkZXI9PXRydWUpKSB7 DQoJCQlpZigkaGVhZGVyPWZnZXRzKCRmcCwgMTAyNCkpIHsNCgkJCQlpZiAoJGhlYWRlciA9 PSAiXHJcbiIpIHsNCgkJCQkJJGVvaGVhZGVyID0gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQkJ fSBlbHNlIHsNCgkJCQkJJGhlYWRlciA9IHRyaW0oJGhlYWRlcik7DQoJCQkJfQ0KCQkJCWlm KCRmb3JtYXQgPT0gMSkgew0KCQkJCQkka2V5ID0gc3RydG9sb3dlcihhcnJheV9zaGlmdChl eHBsb2RlKCc6ICcsJGhlYWRlcikpKTsNCgkJCQkJaWYoJGtleSA9PSAkaGVhZGVyKSB7DQoJ CQkJCQkkaGVhZGVyc1tdID0gJGhlYWRlcjsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRoZWFk ZXJzWyRrZXldPXN1YnN0cigkaGVhZGVyLHN0cmxlbigka2V5KSsyKTsNCgkJCQkJfQ0KCQkJ CQl1bnNldCgka2V5KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaGVhZGVyc1tdID0gJGhlYWRl cjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRoZWFkZXJzOw0KDQoJfSBlbHNlIHsN CgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAi O3M6MTk0Mjg6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5z bWRfcmVtb3RlX2ZpbGU8L2gxPgoKCTxoMiBpZD0ib3ZlcnZpZXciPk92ZXJ2aWV3PC9oMj4K Cgk8cD5VcGxvYWRpbmcgbGFyZ2UgZmlsZXMgdGhyb3VnaCBUZXh0UGF0dGVybiYjODIxNztz IEZpbGVzIHRhYiBpcyBoaXQgYW5kIG1pc3MgZGVwZW5kaW5nIG9uIHRoZSBzaXplIC8gdHlw ZSBvZiBmaWxlLCB0aGUgc2VydmVyIGxpbWl0cyBhbmQgc28gb24uIFNvbWV0aW1lcyB5b3Ug anVzdCBkb24mIzgyMTc7dCBoYXZlIHRoZSBiYW5kd2lkdGggYXZhaWxhYmxlIHRvIGhvc3Qg bWVkaWEgY29udGVudC48L3A+CgoJPHA+VGhpcmQgcGFydHkgc2l0ZXMgc3VjaCBhcyBmaWxl ZGVuLmNvbSBvZmZlciB0aGUgYWJpbGl0eSB0byB1cGxvYWQgZmFpcmx5IHNpemVhYmxlIGZp bGVzIGFuZCB0aGVuIGZyZWVseSBob3RsaW5rIHRvIHRoZW0gKHdpdGhpbiBxdWl0ZSBnZW5l cm91cyBiYW5kd2lkdGggbGltaXRzKSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQuIFRha2UgYWR2 YW50YWdlIG9mIHRoaXMgc2VydmljZSBieSBpbnRlZ3JhdGluZyB0aGUgcmVtb3RlIGZpbGVz IGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGlzIHBsdWdpbi48 L3A+CgoJPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgoKCTx1bD4KCQk8bGk+PGEg aHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjYXV0 aG9yIj5BdXRob3I8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGwiPkluc3RhbGxh dGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNwcmVyZXEi PlByZS1yZXF1aXNpdGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNmaWxlc3RhYiI+VGhl IEZpbGVzIHRhYjwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbXVsdGlwbGVzIj5NdWx0aXBs ZSBwZXJzb25hbGl0aWVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiN1c2FnZSI+VGFnIHVz YWdlPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjZmRsIj5zbWRfZmlsZV9kb3dubG9hZF9s aW5rPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNmZG4iPnNtZF9maWxlX2Rvd25sb2FkX25h bWU8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2ZkaSI+c21kX2ZpbGVfZG93bmxvYWRfaW1h Z2U8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2hvd2l0d29ya3MiPkhv dyBpdCB3b3JrczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjZXhhbXBsZXMiPkV4YW1wbGVz PC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvYT48L2xp PgoJCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+Q3JlZGl0czwvYT48L2xpPgoJPC91bD4KCgk8 aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5NYW5hZ2UgbGlu a3MgdG8gdGhpcmQgcGFydHkgZmlsZXMgZGlyZWN0bHkgZnJvbSB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gRmlsZXMgdGFiLCBhcyBpZiB0aGV5IHdlcmUgbmF0aXZlbHkg aW5zaWRlIFRleHRQYXR0ZXJuLiBDYXRlZ29yeSAvIGRlc2NyaXB0aW9uIC8gc3RhdHVzIC8g ZG93bmxvYWQgY291bnQgYWxsIHN1cHBvcnRlZDwvbGk+CgkJPGxpPlVzZSBzdGFuZGFyZCA8 Y29kZT4mbHQ7dHhwOmZpbGVfZG93bmxvYWRfbGlzdCAvJmd0OzwvY29kZT4gdGFncyB0byBi dWlsZCBsaXN0cyBvZiBsb2NhbCBhbmQgcmVtb3RlIGZpbGVzPC9saT4KCQk8bGk+VGhyZWUg bmV3IHRhZ3M6IDxjb2RlPiZsdDt0eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayZndDs8L2Nv ZGU+IGZvciBjaG9vc2luZyBzcGVjaWZpYyByZW1vdGUgZmlsZXMsIDxjb2RlPiZsdDt0eHA6 c21kX2ZpbGVfZG93bmxvYWRfbmFtZSZndDs8L2NvZGU+IGZvciBzaG93aW5nIHJlbW90ZSBm aWxlIG5hbWVzIGFuZCA8Y29kZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlJmd0 OzwvY29kZT4gZm9yIHNob3dpbmcgaW1hZ2VzIGJhc2VkIG9uIHRoZSBmaWxlbmFtZSBvZiB0 aGUgZG93bmxvYWQ8L2xpPgoJCTxsaT5VcGxvYWQgaWRlbnRpY2FsIGZpbGVzIHRvIG1vcmUg dGhhbiBvbmUgcGxhY2Ugb24gdGhlIHdlYiBhbmQgdGVsbCA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiB0aGUgdmFyaW91cyBhbHRlcm5hdGl2ZXMuIDxjb2RlPmZpbGVfZG93bmxv YWRfbGluazwvY29kZT4gYW5kIDxjb2RlPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+ IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGxvY2F0aW9uIHRvIGhlbHAgbG9hZC1iYWxhbmNlIHlv dXIgYXZhaWxhYmxlIGJhbmR3aWR0aDwvbGk+CgkJPGxpPk5vIG1vZGlmaWNhdGlvbnMgdG8g dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRhdGFiYXNlOiBqdXN0IGEgYmVh dXRpZnVsIGNoZWF0IHN1Z2dlc3RlZCBieSBydXVkICh0aGFua3MhKTwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIgc29m dHdhcmUgYnkgbWUsIG9yIHRvIG1ha2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4KCgk8aDIg aWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiBhbmQgVW5pbnN0YWxsYXRpb248L2gyPgoKCTxw IGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dFBhdHRlcm4gdjQuMC42IG9yIGdyZWF0 ZXIgaW5zdGFsbGVkLjwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVy IDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85MDEvc21kX3JlbW90 ZV9maWxlIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50 byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lu cyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNDY3 MyI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gcmVtb3Zl IHRoZSBwbHVnaW4sIHNpbXBseSBkZWxldGUgaXQgZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdp bnMgdGFiLjwvcD4KCgk8aDIgaWQ9InByZXJlcSI+UHJlLXJlcXVpc2l0ZXM8L2gyPgoKCTxw PkNob29zZSBhbnkgdGhpcmQgcGFydHkgZmlsZSBob3N0ZXIgdGhhdCBvZmZlcnMgZnJlZSBk b3dubG9hZHMgb2YgeW91ciBzdHVmZi4gQ3JlYXRlIGFuIGFjY291bnQsIHVwbG9hZCBmaWxl cyB0byBpdCwgYW5kIG1ha2Ugc3VyZSB5b3Uga25vdyBob3cgdG8gZ2V0IERpcmVjdCBMaW5r IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBmcm9tIHRoZWlyIGludGVyZmFjZSAo aXQmIzgyMTc7cyB1c3VhbGx5IGZhaXJseSBvYnZpb3VzKS4gWW91JiM4MjE3O2xsIG5lZWQg dGhlc2UgdG8gcGFzdGUgaW50byBUZXh0UGF0dGVybi48L3A+CgoJPHA+VGhlbiBzaW1wbHkg aG9wIG92ZXIgdG8gdGhlIDxhIGhyZWY9IiNmaWxlc3RhYiI+RmlsZXMgdGFiPC9hPiB0byBn ZXQgc3RhcnRlZC48L3A+CgoJPGgyIGlkPSJmaWxlc3RhYiI+VGhlIEZpbGVzIHRhYjwvaDI+ CgoJPHA+VGhlIHBsdWdpbiBhZGRzIG9uZSBpbnB1dCBmb3JtIGZpZWxkIHRvIHRoZSBGaWxl cyB0YWIuIEZyb20geW91ciB0aGlyZCBwYXJ0eSBzaXRlKHMpIG9mIGNob2ljZSwgc2ltcGx5 IGNvcHkgYSB3ZWItZnJpZW5kbHkgKGkuZS4gdXJsLWVuY29kZWQpIGhvdGxpbmsgYW5kIHBh c3RlIGl0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGJveC4gWW91 IGNhbiB1c3VhbGx5IHRlbGwgaWYgdGhlIGxpbmsgaXMgdXJsLWVuY29kZWQgYmVjYXVzZSBp dCYjODIxNztsbCBwcm9iYWJseSBoYXZlIDxjb2RlPiUyMDwvY29kZT4gaW4gcGxhY2Ugb2Yg YW55IHNwYWNlcyBpbiB0aGUgZmlsZW5hbWUuIFRoZSBkaXJlY3RvcnkgcGFydCBpcywgaG93 ZXZlciwgPGVtPm5vdDwvZW0+IHVzdWFsbHkgZW5jb2RlZCAoaS5lLiBhbnkgZm9yd2FyZCBz bGFzaGVzIGFuZCBjb2xvbnMgZXRjIHJlbWFpbikuPC9wPgoKCTxwPkEgdHlwaWNhbCBmaWxl IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOjwvcD4KCjxwcmU+aHR0cDovL3d3dy5maWxlZGVuLmNv bS9maWxlcy8yMDA3LzExLzEvCiAgICAgMTIzNDU2Ny9IZXJlJTIwaXMlMjBzb21lJTIwbXVz aWMubXAzCjwvcHJlPgoKCTxwPlRoZSBsaW5rIG11c3QgYmUgYW4gYWJzb2x1dGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIGJlZ2lubmluZyA8Y29kZT5odHRwOi8vPC9jb2Rl Pi4gT25jZSB5b3UgaGF2ZSBwYXN0ZWQgaXQgaW4sIGhpdCBVcGxvYWQgbmV4dCB0byB0aGUg Ym94IGFuZCBhIG5ldyBzcGVjaWFsICYjODIxNjtsaW5rJiM4MjE3OyBmaWxlIHdpbGwgYmUg Y3JlYXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPi4gSXQgdGFrZXMgb24g dGhlIGZpbGVuYW1lIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB5b3VyIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+ICh3aXRoIDxjb2RlPi5saW5rPC9jb2RlPiBhZGRlZCkuIFNv IGluIHRoZSBleGFtcGxlIGFib3ZlLCBhIG5ldyBmaWxlIGNhbGxlZCA8Y29kZT5IZXJlIGlz IHNvbWUgbXVzaWMubXAzLmxpbms8L2NvZGU+IHdpbGwgYmUgbWFkZSBpbiB5b3VyIHN0YW5k YXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZpbGVzIGRpcmVjdG9yeS48L3A+ CgoJPHA+VGhlIG5ldyAmIzgyMjA7ZmlsZSYjODIyMTsgd2lsbCBhcHBlYXIgaW4gdGhlIGxp c3QganVzdCBsaWtlIGFueSByZWFsIGZpbGUgaW4gVGV4dFBhdHRlcm4uIFlvdSBjYW4gZWRp dCBpdCB0byBhZGQgYSBkZXNjcmlwdGlvbiwgY2F0ZWdvcnksIHNldCBpdHMgc3RhdHVzOiBl dmVyeXRoaW5nIHlvdSBjYW4gZG8gd2l0aCBhIGNvbnZlbnRpb25hbCBmaWxlLiBKdXN0IGRv biYjODIxNzt0IHJlbmFtZSBpdCE8L3A+CgoJPGgyIGlkPSJtdWx0aXBsZXMiPk11bHRpcGxl IHBlcnNvbmFsaXRpZXM8L2gyPgoKCTxwPlRoaXJkIHBhcnR5IHNpdGVzIGRvbiYjODIxNzt0 IGdpdmUgeW91IHNvbWV0aGluZyBmb3Igbm90aGluZzsgdGhleSBub3JtYWxseSBoYXZlIGEg YmFuZHdpZHRoIGNhcCwganVzdCBsaWtlIHlvdXIgd2ViIGhvc3RlciBwcm9iYWJseSBkb2Vz LiBJZiB5b3Ugd2FudCB0byBkaXN0cmlidXRlIHlvdXIgbXVzaWMgb3IgbGF0ZXN0IHZpZGVv LCBhIGZldyB0aG91c2FuZCBoaXRzIHBlciBtb250aCBhbmQgeW91ciBiYW5kd2lkdGggaXMg Z29uZS48L3A+CgoJPHA+U28gc3ByZWFkIHRoZSBsb2FkIGFyb3VuZCB0aGUgSW50ZXJuZXQu IEdldCBhY2NvdW50cyBhdCB2YXJpb3VzIHRoaXJkIHBhcnR5IHNpdGVzIGFuZCB1cGxvYWQg ZXhhY3RseSB0aGUgc2FtZSBmaWxlIChtYWtlIHN1cmUgdGhlIGZpbGVuYW1lcyBhcmUgaWRl bnRpY2FsICYjODIxMTsgaW5jbHVkaW5nIGNhU2UgU2Vuc0lUaXZJdFkpLiBUaGVuIGp1c3Qg cGFzdGUgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBpbnRvIHRoZSB1cGxv YWQgYm94OiBzbWRfcmVtb3RlX2ZpbGUgd2lsbCBvbmx5IG1haW50YWluIG9uZSBwaHlzaWNh bCBmaWxlIHdpdGhpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBidXQgd2lsbCBo b2xkIGRldGFpbHMgb2YgeW91ciBvdGhlciBjb3BpZXMgZm9yIHlvdS4gVXNpbmcgZWl0aGVy IHRoZSBzdGFuZGFyZCA8Y29kZT5maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IG9yIHRoZSBu ZXcgPGEgaHJlZj0iI2ZkbCI+c21kX2ZpbGVfZG93bmxvYWRfbGluazwvYT4gdGFnIHdpbGwg cmFuZG9tbHkgcGljayBvbmUgb2YgeW91ciBkb3dubG9hZCBsb2NhdGlvbnMgYXNzb2NpYXRl ZCB3aXRoIGVhY2ggZmlsZSBldmVyeSB0aW1lIHRoZSBwYWdlIGxvYWRzLCBzcHJlYWRpbmcg eW91ciBiYW5kd2lkdGggdXNhZ2UuPC9wPgoKCTxwPldoZW4geW91IHNlbGVjdCBhIC5saW5r IGZpbGUgZm9yIGVkaXRpbmcgZnJvbSB0aGUgRmlsZXMgdGFiLCB5b3Ugd2lsbCBzZWUgYSBk aWFsb2cgYm94IGF0IHRoZSBib3R0b20gZm9yIGFkZGluZyBtb3JlIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+cyB0byB5b3VyIGZpbGUuIFBhc3RlIHRoZSB1cmwtZW5jb2RlZCBk aXJlY3QgbGluayBmaWxlIG5hbWUgaW50byB0aGUgYm94IGFuZCBoaXQgVXBsb2FkIHRvIGFw cGVuZCBpdCB0byB0aGUgZXhpc3Rpbmcgb25lLiBJZiB5b3UgY2hlY2sgdGhlIE92ZXJ3cml0 ZSBib3ggdGhlbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4geW91IHN1cHBs eSB3aWxsIG92ZXJ3cml0ZSA8ZW0+YWxsPC9lbT4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj5zIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBmaWxlLiBJdCBkb2VzIHRoaXMgd2l0 aG91dCB3YXJuaW5nLCBzbyBjb25zaWRlciB0aGlzIGEgd2FybmluZyE8L3A+CgoJPGgyIGlk PSJ1c2FnZSI+VGFnIHVzYWdlPC9oMj4KCgk8aDMgY2xhc3M9InRhZyAiIGlkPSJmZGwiPnNt ZF9maWxlX2Rvd25sb2FkX2xpbms8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+QW4g ZXhhY3QgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHN0YW5kYXJkIDxjb2RlPiZsdDt0 eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0OzwvY29kZT4gdGFnLCB3aXRoIHR3byBleHRyYSBv cHRpb25zLiBVc2UgdGhlIHRhZyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB5b3Ugd291 bGQgbm9ybWFsbHkuIFRoZSBvbmx5IHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoaXMgdGFnJiM4 MjE3O3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdGhhdCBpdCB3aWxsIHJlbW92ZSBhbnkgPGNv ZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgdGhlIGZpbGUgbmFtZXMgaW4gdGhlIHB1 YmxpYyBpbnRlcmZhY2UgKHRoZSA8Y29kZT4ubGluazwvY29kZT4gc3VmZml4ZXMgYWx3YXlz IHJlbWFpbiB2aXNpYmxlIGluIHRoZSBGaWxlcyB0YWIgdG8gcmVtaW5kIHlvdSkuIFRoZSA8 Y29kZT4ubGluazwvY29kZT4gY2FuIGJlIHJlaW5zdGF0ZWQgd2l0aCB0aGUgPGEgaHJlZj0i I2ZkbHNob3dsaW5rIj5zaG93X2xpbms8L2E+IGF0dHJpYnV0ZS48L3A+CgoJPGg0IGNsYXNz PSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2g0PgoKCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+aWQ8L3NwYW4+IDogdGhlIElE IG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGxpbmsgdG8uIElmIGxlZnQgYmxhbmssIGl0IGNh biBiZSBzdXBwbGllZCBmcm9tIHdoYXRldmVyIGlzIGJldHdlZW4gdGhlIG9wZW5pbmcgYW5k IGNsb3NpbmcgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5maWxlbmFt ZTwvc3Bhbj4gOiB0aGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gbGluayB0 by4gSWYgbGVmdCBibGFuaywgaXQgY2FuIGJlIHN1cHBsaWVkIGZyb20gd2hhdGV2ZXIgaXMg YmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWcuIElmIGJvdGggZmlsZW5hbWUg YW5kIElEIGFyZSBzcGVjaWZpZWQsIElEIHRha2VzIHByZWNlZGVuY2U8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmNob29zZTwvc3Bhbj4gOiBnb3Zlcm5zIGhvdyB0byBj aG9vc2Ugd2hpY2ggcmVtb3RlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIHNl cnZlLiBJZiB1c2luZyB0aGUgc3RhbmRhcmQgPGNvZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9j b2RlPiB0YWcgKG9yIGJ5IGRlZmF1bHQgaW4gdGhpcyB0YWcpLCBpdCBpcyBzZXQgdG8gPGNv ZGU+MDwvY29kZT4gd2hpY2ggbWVhbnMgJiM4MjE2O3JhbmRvbWx5IHBpY2sgYSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBmcm9tIHRob3NlIEkmIzgyMTc7dmUgdXBsb2FkZWQg Zm9yIHRoaXMgZmlsZSYjODIxNzsgKHdoZXJlIHdvdWxkIGFuIHNtZF8gcGx1Z2luIGJlIHdp dGhvdXQgYSByYW5kb20gb3B0aW9uLCBlaD8hKS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBo aWdoZXIgbnVtYmVyIHRvIHBpY2sgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNsb3QuIFNvIDxjb2RlPmNob29zZT0mcXVvdDsxJnF1 b3Q7PC9jb2RlPiB3aWxsIGFsd2F5cyBzZWxlY3QgdGhlIDFzdCBmaWxlIHlvdSB1cGxvYWRl ZCBhbmQgZGVsaXZlciB0aGF0OyA8Y29kZT5jaG9vc2U9JnF1b3Q7MiZxdW90OzwvY29kZT4g dGhlIHNlY29uZDsgYW5kIHNvIG9uLiBJZiB5b3Ugc3BlY2lmeSBhIG51bWJlciBiaWdnZXIg dGhhbiB0aGUgbnVtYmVyIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBzdG9y ZWQgYWdhaW5zdCBhIGZpbGUsIGl0IHBpY2tzIHRoZSBmaXJzdCBvbmUgeW91IHVwbG9hZGVk LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+c2hvd19saW5rPC9zcGFuPiA6 IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNoIGhpZGVzIHRoZSA8Y29kZT4ubGluazwvY29k ZT4gb24gdGhlIGVuZCBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMuIFNldCBp dCB0byAxIHRvIG1ha2UgdGhlIHRhZyBiZWhhdmUgbGlrZSB0aGUgYnVpbHQtaW4gPGNvZGU+ ZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFn ICIgaWQ9ImZkbiI+c21kX2ZpbGVfZG93bmxvYWRfbmFtZTwvaDM+CgoJPHAgY2xhc3M9InRh Zy1zdW1tYXJ5Ij5BbiBleGFjdCBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgc3RhbmRh cmQgPGNvZGU+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX25hbWUmZ3Q7PC9jb2RlPiB0YWcsIGJ1 dCB3aXRoIG9uZSBhdHRyaWJ1dGUuIFRoaXMgdGFnJiM4MjE3O3MgZGVmYXVsdCBiZWhhdmlv dXIgd2lsbCByZW1vdmUgYW55IDxjb2RlPi5saW5rPC9jb2RlPiBvbiB0aGUgZW5kIG9mIGZp bGUgbmFtZXMuPC9wPgoKCTxoNCBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRy aWJ1dGVzPC9oND4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+c2hvd19s aW5rPC9zcGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNoIGhpZGVzIHRoZSA8Y29k ZT4ubGluazwvY29kZT4gb24gdGhlIGVuZCBvZiBmaWxlIG5hbWVzLiBTZXQgaXQgdG8gMSB0 byBtYWtlIHRoZSB0YWcgYmVoYXZlIGxpa2UgdGhlIGJ1aWx0LWluIDxjb2RlPmZpbGVfZG93 bmxvYWRfbmFtZTwvY29kZT48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyAiIGlkPSJm ZGkiPnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1h cnkiPldoZW4gbGlua2luZyB0byBleHRlcm5hbCBjb250ZW50IChlc3BlY2lhbGx5IG1lZGlh IGZpbGVzKSBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gbWFrZSBhIG1pbmkgaW1hZ2UgdG8gZ28g d2l0aCBpdCwgc3VjaCBhcyBhIHN0aWxsIGZyb20gYSBtb3ZpZSBvciBzb21lIGFydHdvcmsg Zm9yIGFuIG1wMyB0cmFjay4gWW91IGNhbiBvZiBjb3Vyc2UgZW1iZWQgYSA8Y29kZT4mbHQ7 dHhwOmltYWdlJmd0OzwvY29kZT4gdGFnIGluIHlvdXIgZG93bmxvYWQgZm9ybSwgYnV0IHRo YXQgd2lsbCBnaXZlIGEgc3RhdGljIGltYWdlIGZvciBlYWNoIGZpbGUuIFRoaXMgdGFnIGNh biBiZSB1c2VkIHRvIGRpc3BsYXkgaW1hZ2VzIHRoYXQgdmFyeSB3aXRoIHRoZSBmaWxlbmFt ZSBvZiB0aGUgcmVtb3RlIChvciBsb2NhbCBvZiBjb3Vyc2UpIGZpbGUuPC9wPgoKCTxwPlRv IHVzZSBpdCwganVzdCB1cGxvYWQgYW4gaW1hZ2UgKGJ5IGRlZmF1bHQgYSBqcGcpIHZpYSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIEltYWdlcyB0YWIgYW5kIGdp dmUgaXQgdGhlIGV4YWN0IHNhbWUgZmlsZW5hbWUgYXMgdGhlIHJlbW90ZSBmaWxlIGl0IHJl cHJlc2VudHMsIHBsdXMgaXRzIG5vcm1hbCBpbWFnZSBmaWxlIGV4dGVuc2lvbi4gaS5lLiBp ZiB5b3VyIHJlbW90ZSBmaWxlIHdhcyA8Y29kZT5NYW4gYW5kIGJveS5tcGc8L2NvZGU+IHlv dSB3b3VsZCB1cGxvYWQgYW4gaW1hZ2UgYW5kIG5hbWUgaXQgPGNvZGU+TWFuIGFuZCBib3ku bXBnLmpwZzwvY29kZT4uIERvIHRoaXMgZm9yIGVhY2ggZmlsZSBhbmQgdGhlbiB1c2UgdGhp cyB0YWcgdG8gZGlzcGxheSB0aGVtLjwvcD4KCgk8cD5CeSBkZWZhdWx0LCBpZiBhbnkgaW1h Z2UgZG9lc24mIzgyMTc7dCBleGlzdCwgdGhlIHRhZyBvdXRwdXRzIHRoZSBpbWFnZSBmaWxl bmFtZSBpbnN0ZWFkIChpZiB1c2luZyB0aGUgPGNvZGU+ZmlsZW5hbWU8L2NvZGU+KSBvciB0 aGUgaWQgKGlmIHVzaW5nIHRoZSA8Y29kZT5pZDwvY29kZT4pLiBUaGlzIGJlaGF2aW91ciBj YW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8Y29kZT5pZm1pc3Npbmc8L2NvZGU+IG9wdGlv bi48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8 L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ aWQ8L3NwYW4+IDogdGhlIElEIG9mIGFuIGltYWdlIHRvIGRpc3BsYXk8L2xpPgoJPC91bD4K CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZmlsZW5h bWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIGFuIGltYWdlIHRvIGRpc3BsYXkuIElmIGJv dGggZmlsZW5hbWUgYW5kIElEIGFyZSBzcGVjaWZpZWQsIElEIHRha2VzIHByZWNlZGVuY2Uu IE5vdGUgdGhhdCBpbiB0aGlzIGFuZCA8Y29kZT5pZDwvY29kZT4gbW9kZXMsIHRoZSB0YWcg aXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgPGNvZGU+Jmx0O3R4cDppbWFnZSZndDs8L2Nv ZGU+LiBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkg dGhlIGltYWdlIGZpbGUgPGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPiwgYXMgaXQgZG9lcyB0aGF0 IGZvciB5b3UgYnkgZGVmYXVsdCBpZiB5b3UgdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5KUEc8 L3NwYW4+cyBhbmQgeW91IGNhbiBzcGVjaWZ5IHRodW1ibmFpbHMgaW5zdGVhZCB1c2luZyA8 Y29kZT50aHVtYjwvY29kZT48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZXh0ZW5zaW9uPC9zcGFuPiA6IHNhdmVzIHlvdSBo YXZpbmcgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gaW4gdGhlIDxjb2RlPmZpbGVu YW1lPC9jb2RlPiBwYXJhbWV0ZXIuIEVudGVyIGl0IGhlcmUgPGVtPndpdGhvdXQ8L2VtPiB0 aGUgZG90LiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byA8Y29kZT5leHRlbnNpb249JnF1b3Q7 anBnJnF1b3Q7PC9jb2RlPjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50aHVtYjwvc3Bhbj4gOiBzZXQgdG8gMCBieSBkZWZh dWx0LCB3aGljaCBtZWFucyB1c2UgdGhlIGZ1bGwgc2l6ZSBpbWFnZS4gSWYgeW91IGhhdmUg Y3JlYXRlZCB0aHVtYm5haWxzIHlvdSBtYXkgdXNlIDxjb2RlPnRodW1iPSZxdW90OzEmcXVv dDs8L2NvZGU+IHRvIHVzZSB0aG9zZSBpbnN0ZWFkPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlmbWlzc2luZzwvc3Bhbj4g OiB3aGVuIGFuIGltYWdlIGZpbGUgaXMgbWlzc2luZywgdGhpcyBvcHRpb24mIzgyMTc7cyBk ZWZhdWx0IHNldHRpbmcgb2YgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9yZWYmcXVvdDs8L2Nv ZGU+IHdpbGwgZGlzcGxheSBlaXRoZXIgdGhlIGltYWdlIGZpbGVuYW1lIG9yIGl0cyBJRCBp ZiBpdCB3YXMgdXNlZC4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IGEgZGVkaWNh dGVkICYjODIxNjtubyBwaWMmIzgyMTc7IGltYWdlIGJ5IHVwbG9hZGluZyBvbmUgYW5kIHVz aW5nIHRoZSBzcGVjaWFsIGNvZGUgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9pbWFnZTpJRF9v cl9uYW1lJnF1b3Q7PC9jb2RlPiAoZS5nLiA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P2ltYWdl OjMyJnF1b3Q7PC9jb2RlPiBvciA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P2ltYWdlOk5vUGlj LmpwZyZxdW90OzwvY29kZT4pLiBJZiBub3QgdXNpbmcgdGhlIHNwZWNpYWwgY29kZXMsIHB1 dCBhbnkgdGV4dCB5b3UgbGlrZSBoZXJlLCBmb3IgZXhhbXBsZSA8Y29kZT5pZm1pc3Npbmc9 JnF1b3Q7Tm8gaW1hZ2UgeWV0JnF1b3Q7PC9jb2RlPi4gVXNlIDxjb2RlPmlmbWlzc2luZz0m cXVvdDsmcXVvdDs8L2NvZGU+IHRvIG91dHB1dCBub3RoaW5nIGluIHRoZSBldmVudCBvZiBh IG1pc3NpbmcgaW1hZ2U8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+d3JhcHRhZzwvc3Bhbj4gOiB0aGUgdGFnIHRvIHdyYXAg YXJvdW5kIHRoZSBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gU3BlY2lmeSBpdCB3aXRoIG5vIGFu Z2xlIG1hcmtlcnMsIGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDtwJnF1b3Q7PC9jb2RlPi4g RGVmYXVsdHMgdG8gZW1wdHkgKGkuZS4gbm8gd3JhcHRhZyk8L2xpPgoJPC91bD4KCTx1bCBj bGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y2xhc3M8L3NwYW4+ IDogdGhlIGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGltYWdlLiBJZiB1c2luZyA8Y29k ZT53cmFwdGFnPC9jb2RlPiB0aGUgY2xhc3MgaXMgYXBwbGllZCB0byB0aGUgc3Vycm91bmRp bmcgdGFnLiBJZiBpdCBpcyBvbWl0dGVkIHRoZSBjbGFzcyBpcyBhcHBsaWVkIGRpcmVjdGx5 IHRvIHRoZSBpbWFnZS4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpPC9saT4KCTwv dWw+CgoJPGgyIGlkPSJob3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8L2gyPgoKCTxwPkZvciB0 aGUgY3VyaW91cywgdGhlIHBsdWdpbiBqdXN0IGNyZWF0ZXMgYSBkdW1teSB0ZXh0IGZpbGUg d2l0aCB0aGUgbmFtZSBvZiB5b3VyIGZpbGUgcGx1cyB0aGUgc3BlY2lhbCBzdWZmaXggPGNv ZGU+Lmxpbms8L2NvZGU+IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYSBzdGFuZGFyZCBmaWxl LiBFdmVyeSB0aW1lIHlvdSBhZGQgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBv ZiB0aGUgc2FtZSBuYW1lIGl0IGlzIGFkZGVkIGFzIGEgbmV3IGxpbmUgd2l0aGluIHRoaXMg ZmlsZS48L3A+CgoJPHA+VGhpcyBtZWFucyB5b3UgY2FuIHNodWZmbGUgdGhlIG9yZGVyIG9m IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cywgZGVsZXRlIHJlbW90ZSBmaWxlcyBv ciBlZGl0IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgZGlyZWN0bHkgaWYg eW91IHNvIHdpc2ggYnkgc2ltcGx5IGRvd25sb2FkaW5nIHRoZSByZWxldmFudCAubGluayBm aWxlIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBzZXJ2ZXIsIGVk aXRpbmcgaXQgYW5kIHJlLXVwbG9hZGluZyBpdC4gQXMgbG9uZyBhcyB5b3UgbWFrZSBzdXJl IHlvdSBoYXZlIG9uZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBwZXIgbGluZSBl dmVyeXRoaW5nIHdpbGwgd29yay48L3A+CgoJPHA+SW5jaWRlbnRhbGx5LCB0aGUgcmVhbCBm aWxlIHNpemUgaXMgcmUtcmVhZCAoZnJvbSB0aGUgMXN0IGZpbGUgbGlzdGVkIGluIHRoZSAu bGluayBmaWxlKSBldmVyeSB0aW1lIHRoZSBsb2NhbCBmaWxlIGlzIGVkaXRlZCBiZWNhdXNl IG90aGVyd2lzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBvdmVyd3JpdGVzIGl0 IHdpdGggdGhlIHNpemUgb2YgdGhlIGR1bW15IHRleHQgZmlsZS4gVGhpcyBoYXMgcG90ZW50 aWFsIHJhbWlmaWNhdGlvbnMgd2hlbiBkb3dubG9hZGluZyBiZWNhdXNlIDxlbT50aGUgcGx1 Z2luIGNoZWNrcyB0aGF0IHRoZSByZW1vdGUgZmlsZSBzaXplIG1hdGNoZXMgdGhlIG9uZSBp biB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50ZXJmYWNlIGJlZm9yZSBz ZXJ2aW5nIHRoZSBmaWxlPC9lbT4uIElmIG9uZSBvZiB5b3VyIHVwbG9hZGVkIGZpbGVzIGlz IGEgZGlmZmVyZW50IHNpemUgaXQgd2lsbCByZWZ1c2UgdG8gZG93bmxvYWQuPC9wPgoKCTxw PlRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gdHJ5IHRvIG1haW50YWluIGRvd25sb2FkIGNv dW50IGludGVncml0eS4gSW5zdGVhZCBvZiBkaXNoaW5nIG91dCBhIHN0YW5kYXJkIDQwNCBt ZXNzYWdlLCBzb21lIHNlcnZlcnMgd2lsbCByZWRpcmVjdCB0byBhbiBpbWFnZSBvciA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZmlsZSB0byB0ZWxsIHlvdSB0aGF0IGEgZmls ZSBpcyBtaXNzaW5nLiBUaGlzIHJldHVybnMgYSBzdGF0dXMgY29kZSBvZiAmIzgyMTc7MjAw IE9LJiM4MjE3OyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkb3dubG9hZCBvZiB0aGUgcmVwbGFj ZW1lbnQgY29udGVudCB3ZW50IG9rLCBidXQgaW4gdGhpcyBjYXNlIHdlIGRvIDxlbT5ub3Q8 L2VtPiB3YW50IHRvIGluY3JlbWVudCB0aGUgY291bnRlcjsgdGhlIGZpbGUmIzgyMTc7cyBz dGlsbCBtaXNzaW5nIGFmdGVyIGFsbCEgVW5kZXIgcmFyZSBjaXJjdW1zdGFuY2VzIHlvdSBt aWdodCBmaW5kIHRoYXQgdGhlIHByb3ZpZGVyIHJldHVybnMgY29udGVudCBleGFjdGx5IHRo ZSBzYW1lIGxlbmd0aCBhcyB0aGUgZmlsZSBpdHNlbGYgYW5kIHRoZSBjb3VudCB3b3VsZCB0 aGVuIGJlIHdyb25nbHkgaW5jcmVtZW50ZWQuIFByYWN0aWNhbGx5LCB5b3VyIGZpbGUgaXMg Z29pbmcgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlaXIgcmVwbGFjZW1lbnQgc28gaXQgd29uJiM4 MjE3O3QgbWF0dGVyLjwvcD4KCgk8cD5Ob3RlIHRoYXQgdGhlICYjODIxNjtkb3dubG9hZCYj ODIxNzsgbGluayBuZXh0IHRvIGVhY2ggZmlsZSBvbiB0aGUgRmlsZXMgdGFiIG9mIHRoZSBh ZG1pbiBpbnRlcmZhY2UgYWx3YXlzIGNob29zZXMgYSByYW5kb20gZmlsZSBmcm9tIHRob3Nl IHVwbG9hZGVkIHdpdGggdGhhdCBuYW1lLjwvcD4KCgk8cD5Lbm93biBpc3N1ZTogSWYgZWRp dGluZyBhICYjODIyMDtub3JtYWwmIzgyMjE7IGZpbGUgKG5vdCBhIC5saW5rKSBhbmQgeW91 IGhpdCB0aGUgVXBsb2FkIGJ1dHRvbiA8ZW0+d2l0aG91dCBzcGVjaWZ5aW5nIGEgZmlsZTwv ZW0+LCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdXBsb2FkIGJveCBkb2Vz IG5vdCBhcHBlYXIgb24gdGhlIEZpbGUgTGlzdCBwYWdlLiBIaXR0aW5nIHRoZSBGaWxlcyB0 YWIgYWdhaW4gb3IgcGVyZm9ybWluZyBzb21lIG90aGVyIGFjdGlvbiByZS1pbnN0YXRlcyBp dC4gKnNocnVnKjwvcD4KCgk8aDIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwvaDI+CgoJPGgz IGlkPSJlZzEiPkV4YW1wbGUgMTwvaDM+CgoJPHA+SW4geW91ciA8Y29kZT5maWxlczwvY29k ZT4gZm9ybTo8L3A+Cgo8cHJlPiZsdDt0eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0OwogJmx0 O3R4cDpzbWRfZmlsZV9kb3dubG9hZF9uYW1lIC8mZ3Q7IFsmbHQ7dHhwOmZpbGVfZG93bmxv YWRfc2l6ZQogICAgIGZvcm1hdD0mcXVvdDthdXRvJnF1b3Q7IGRlY2ltYWxzPSZxdW90OzIm cXVvdDsgLyZndDtdCiZsdDsvdHhwOmZpbGVfZG93bmxvYWRfbGluayZndDsKPC9wcmU+CgoJ PGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+Cgo8cHJlPiZsdDt0eHA6c21kX2ZpbGVfZG93 bmxvYWRfbGluayBjaG9vc2U9JnF1b3Q7MiZxdW90OwogICAgIHNob3dfbGluaz0mcXVvdDsx JnF1b3Q7IC8mZ3Q7CjwvcHJlPgoKCTxwPldpbGwgYWx3YXlzIHNlbGVjdCB0aGUgMm5kIDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGZyb20gdGhvc2UgdXBsb2FkZWQgZm9yIGVh Y2ggZmlsZS4gU2hvd3MgdGhlIDxjb2RlPi5saW5rPC9jb2RlPiBvbiB0aGUgZW5kIG9mIGVh Y2ggcmVtb3RlIGZpbGUuPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFtcGxlIDM8L2gzPgoKPHBy ZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiAmbHQ7dHhwOnNtZF9maWxl X2Rvd25sb2FkX2ltYWdlIGlmbWlzc2luZz0mcXVvdDtTb3JyeSwgbm8gaW1hZ2UgZm91bmQm cXVvdDsKICAgICB3cmFwdGFnPSZxdW90O3NwYW4mcXVvdDsgY2xhc3M9JnF1b3Q7ZGxvYWQm cXVvdDsgLyZndDsKJmx0Oy90eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayZndDsKPC9wcmU+ CgoJPHA+RGlzcGxheXMgYW4gaW1hZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIChwbHVzIC5qcGcp IGFzIHRoZSByZW1vdGUgZmlsZS4gVGhlIGltYWdlIGlzIGNsaWNrYWJsZSB0byBhbGxvdyB0 aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkIGJ1dCBpZiB0aGUgaW1hZ2UgaXMgbm90IGZvdW5k LCB0aGUgdGV4dCAmIzgyMjA7U29ycnksIG5vIGltYWdlIGZvdW5kJiM4MjIxOyB3aWxsIGJl IGRpc3BsYXllZCBpbnN0ZWFkICh0aGUgdGV4dCBpcyBhbHNvIGNsaWNrYWJsZSkuIFdyYXBz IHRoZSBpbWcgb3IgdGV4dCBpbiA8Y29kZT4mbHQ7c3BhbiZndDs8L2NvZGU+IHRhZ3Mgd2l0 aCBhIGNsYXNzIG9mIDxjb2RlPmRsb2FkPC9jb2RlPi48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vs b2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMiBOb3YgMDcgfCAwLjEgfCBJbml0 aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4wNCBEZWMgMDcgfCAwLjIgfCBBZGRlZCBkb3dubG9h ZCBjb3VudGVyIGFuZCBzb21lIGJldHRlciBzdGF0dXMgbWVzc2FnZXM8L2xpPgoJCTxsaT4w NCBEZWMgMDcgfCAwLjMgfCBSZW1vdmVkIC5saW5rIHdoZW4gdXNpbmcgPGNvZGU+c21kX2Zp bGVfZG93bmxvYWRfbGluazwvY29kZT4gOyBhZGRlZCA8Y29kZT5zaG93X2xpbms8L2NvZGU+ IGF0dHJpYnV0ZSA7IGltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGNvZGUgOyBkb3dubG9hZCBj b3VudCBvbmx5IGluY3JlYXNlcyBpZiBmaWxlIHNpemVzIG1hdGNoPC9saT4KCQk8bGk+MDUg RGVjIDA3IHwgMC4zMSB8IEZpbGUgaXMgY2hlY2tlZCBmb3IgZXJyb3IgY29uZGl0aW9uIHBy aW9yIHRvIGRvd25sb2FkIGluIGxpbmUgd2l0aCBjb3JlIGNoYW5nZXNldCByMjcyMCAodGhh bmtzIE1hcnkpICYjODIxMTsgY2FuIGJlIHJlbW92ZWQgd2hlbiA0LjAuNiBpcyByZWxlYXNl ZDwvbGk+CgkJPGxpPjEyIERlYyAwNyB8IDAuMzIgfCBFbmhhbmNlZCBpZm1pc3NpbmcgdG8g aW5jbHVkZSBpbWFnZSBzdXBwb3J0OyBjaGFuZ2VkIHRoZSA/ZmlsZSBhdHRyaWJ1dGUgdG8g P3JlZiAoaXQmIzgyMTc7cyBhIGJldHRlciBuYW1lKTwvbGk+CgkJPGxpPjAzIEZlYiAwOCB8 IDAuNCB8IFJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMC42IDsg cmVtb3ZlZCBlcnJvciBjaGVjayBmcm9tIHYwLjMxIDsgYWRkZWQvaW1wcm92ZWQgcmVwbGFj ZSByZW1vdGUgZmlsZSA7IHJlZHVjZWQgdGltZW91dCBmb3IgYWNjZXNzaW5nIHJlbW90ZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byB0cnkgYW5kIHByZXZlbnQgdWdseSB3 YXJuaW5nczwvbGk+CgkJPGxpPjAyIEFwciAwOCB8IDAuNDEgfCBBZGRlZCBzbWRfZmlsZV9k b3dubG9hZF9uYW1lICh0aGFua3MgYXN3aWhhcnQpPC9saT4KCQk8bGk+MDkgQXByIDA4IHwg MC40MiB8IEZpeGVkIG1pbm9yIGVkZ2UgY2FzZSBidWcgaW4gc21kX2ZpbGVfZG93bmxvYWRf bGluazwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+ SSBjYW5ub3QgcG9zc2libHkgY2xhaW0gYWxsIHRoZSBjcmVkaXQgZm9yIHRoaXMgaHVuayBv ZiBjb2RlLiBUaGUgcGx1Z2luIHdvdWxkIG5vdCBoYXZlIGV4aXN0ZWQgaWYgaXQgd2VyZW4m IzgyMTc7dCBmb3IgdGhlIGFtYXppbmcgbWluZCBvZiBSdXVkIHZhbiBNZWxpY2suIEhlIHN1 Z2dlc3RlZCBhIHZlcnkgY2xldmVyIHNvbHV0aW9uIHRvIG15IHJlbW90ZSBmaWxlIHByZWRp Y2FtZW50LiBJIGJ1aWx0IG9uIHRoYXQsIGV4dGVuZGVkIGl0LCByZWZpbmVkIGl0LCBwbHVn aW5pc2VkIGl0IGFuZCBnYXZlIGl0IHRvIHlvdS4gTWFueSB0aGFua3MgdG8gUnV1ZCBmb3Ig dGhlIGF3ZXNvbWUgc3VwcG9ydCBoZSBvZmZlcnMgdGhlIGNvbW11bml0eSwgYW5kIGFsc28g dG8gV2V0IGZvciBoaXMgYXNzaXN0YW5jZSB3aXRoIGhlbHBpbmcgbWUgdW5kZXJzdGFuZCB0 aGUgY29yZS48L3A+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NT IC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIC5yZXF1aXJlZCB7 IGNvbG9yOnJlZDsgcGFkZGluZzouNWVtIDA7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9o ZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCAuYXR0LW5hbWUgeyBmb250LXdl aWdodDpib2xkOyB9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDog MTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3Vu ZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQt d2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xv cjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRk aW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNv bG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBz b2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3Nt ZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsg Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNz bWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2Vy aWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJv cmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6 ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMg eyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBs ZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQtdHJhbnNmb3JtOiB1 cHBlcmNhc2U7fQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7 czozOiJtZDUiO3M6MzI6IjhjY2IyODFmZmY5ZDFjOTNjMWI5MGFjNWFlMWIxZjU5Ijt9