# Name: smd_fuzzy_find v0.11 # Type: Client side plugin # Offers alternative spellings and/or close-matching articles from search terms. # 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: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6InNtZF9mdXp6eV9maW5kIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz Ojc4OiJPZmZlcnMgYWx0ZXJuYXRpdmUgc3BlbGxpbmdzIGFuZC9vciBjbG9zZS1tYXRjaGlu ZyBhcnRpY2xlcyBmcm9tIHNlYXJjaCB0ZXJtcy4iO3M6NDoiY29kZSI7czoxMjk5MzoiZnVu Y3Rpb24gc21kX2Z1enp5X2ZpbmQoJGF0dHMsICR0aGluZz0nJykgew0KCXJlcXVpcmVfcGx1 Z2luKCdzbWRfbGliJyk7DQoNCgkvLyBNTFAgc3VwcG9ydA0KCWdsb2JhbCAkcHJldGV4dCwg JHNtZF9mdXp6TGFuZzsNCgkkc21kX2Z1enpfc3RyID0gYXJyYXkoDQoJCSd0b29fc2hvcnQn ID0+ICdUaGUgdGV4dCB5b3UgYXJlIHNlYXJjaGluZyBmb3IgaXMgcHJvYmFibHkgdG9vIHNo b3J0LiBUcnkgYSBsb25nZXIgd29yZC4gJywNCgkJJ25vX21hdGNoJyA9PiAnU29ycnksIG5v IHJlc3VsdHMgbWF0Y2hlZCAie3NlYXJjaF90ZXJtfSIgZXhhY3RseS4gJywNCgkJJ3N1Z2dl c3QnID0+ICdIZXJlIGFyZSB0aGUgY2xvc2VzdCBtYXRjaGluZyB7dGhpbmdpZXN9IHRoYXQg bWF5IGhlbHAgeW91IGZpbmQgd2hhdCB5b3UgYXJlIGxvb2tpbmcgZm9yOiAnLA0KCQknc3Vn Z2VzdF9qb2luJyA9PiAnYW5kJywNCgkJJ2FydGljbGVzJyA9PiAnYXJ0aWNsZXMnLA0KCQkn d29yZHMnID0+ICd3b3JkcycsDQoJKTsNCgkkc21kX2Z1enpMYW5nID0gbmV3IHNtZF9NTFAo J3NtZF9mdXp6eV9maW5kJywgJ3NtZF9mdXp6JywgJHNtZF9mdXp6X3N0cik7DQoNCglleHRy YWN0KGxBdHRzKGFycmF5KA0KCQknZm9ybScgPT4gJ3NlYXJjaF9yZXN1bHRzJywNCgkJJ3Nl Y3Rpb24nID0+ICcnLA0KCQknY2F0ZWdvcnknID0+ICcnLA0KCQknc3ViY2F0cycgPT4gJzAn LA0KCQknc2VhcmNoX3Rlcm0nID0+ICc/cScsDQoJCSdtYXRjaF93aXRoJyA9PiAnYXJ0aWNs ZTprZXl3b3Jkcztib2R5O2V4Y2VycHQnLA0KCQkndG9sZXJhbmNlJyA9PiAnMicsDQoJCSdt aW5fd29yZF9sZW5ndGgnID0+ICc0JywNCgkJJ2xpbWl0JyA9PiAnd29yZHM6NSwgYXJ0aWNs ZXM6MTAnLA0KCQknY2FzZV9zZW5zaXRpdmUnID0+ICcwJywNCgkJJ3JlZmluZScgPT4gJ21l dGFwaG9uZSwgc291bmRleCcsDQoJCSdzaG93JyA9PiAnd29yZHMsIGFydGljbGVzJywNCgkJ J3N0YXR1cycgPT4gJ2xpdmUsIHN0aWNreScsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCQknbm9f bWF0Y2hfbGFiZWwnID0+ICcjJywNCgkJJ3N1Z2dlc3RfbGFiZWwnID0+ICcjJywNCgkJJ3Rv b19zaG9ydF9sYWJlbCcgPT4gJyMnLA0KCQknbGFiZWx0YWcnID0+ICdwJywNCgkpLCAkYXR0 cykpOw0KDQoJJHNlYXJjaEFsbG93ID0gYXJyYXkoIj9jIiwgIiFjIiwgIj9zIiwgIiFzIiwg Ij90IiwgIiF0IiwgIj9pZCIsICIhaWQiLCAiP3EiLCAiIXEiLCAiP2ZpZWxkIiwgIiFmaWVs ZCIpOw0KCSRyZWZpbmVBbGxvdyA9IGFycmF5KCJtZXRhcGhvbmUiLCAic291bmRleCIpOw0K CSRzaG93QWxsb3cgPSBhcnJheSgiYXJ0aWNsZXMiLCAid29yZHMiKTsNCgkkY29sTmFtZXMg PSBhcnJheSgnS2V5d29yZHMnID0+ICJhcnRpY2xlOmtleXdvcmRzIiwNCgkJCQkJCQknQm9k eScgPT4gImFydGljbGU6Ym9keSIsDQoJCQkJCQkJJ0V4Y2VycHQnID0+ICJhcnRpY2xlOmV4 Y2VycHQiLA0KCQkJCQkJCSdDYXRlZ29yeTEnID0+ICJhcnRpY2xlOmNhdGVnb3J5MSIsDQoJ CQkJCQkJJ0NhdGVnb3J5MicgPT4gImFydGljbGU6Y2F0ZWdvcnkyIiwNCgkJCQkJCQknU2Vj dGlvbicgPT4gImFydGljbGU6c2VjdGlvbiIsDQoJCQkJCQkJJ0lEJyA9PiAiYXJ0aWNsZTpp ZCIsDQoJCQkJCQkJJ0F1dGhvcklEJyA9PiAiYXJ0aWNsZTphdXRob3JpZCIsDQoJCQkJCQkJ J1RpdGxlJyA9PiAiYXJ0aWNsZTp0aXRsZSIsDQoJCQkJCQkJJ2NhdGVnb3J5JyA9PiAiaW1h Z2U6Y2F0ZWdvcnkiLA0KCQkJCQkJCSdhbHQnID0+ICJpbWFnZTphbHQiLA0KCQkJCQkJCSdj YXB0aW9uJyA9PiAiaW1hZ2U6Y2FwdGlvbiIsDQoJCQkJCQkJJ25hbWUnID0+ICJpbWFnZTpu YW1lIiwNCgkJCQkJCQknbWVzc2FnZScgPT4gImNvbW1lbnRzOm1lc3NhZ2UiLA0KCQkJCQkJ CSdlbWFpbCcgPT4gImNvbW1lbnRzOmVtYWlsIiwNCgkJCQkJCQknbmFtZScgPT4gImNvbW1l bnRzOm5hbWUiLA0KCQkJCQkJCSd3ZWInID0+ICJjb21tZW50czp3ZWIiLA0KCQkJCQkJCSk7 DQoNCgkkcGxhY2VzID0gYXJyYXkoJ3RleHRwYXR0ZXJuJyA9PiAiYXJ0aWNsZSIsICd0eHBf aW1hZ2UnID0+ICJpbWFnZSIsICd0eHBfZGlzY3VzcycgPT4gImNvbW1lbnRzIik7DQoJJHNl Y3NpbiA9IGFycmF5KCk7DQoJJGNhdHNpbiA9IGFycmF5KCk7DQoJJHN0YXRzaW4gPSBhcnJh eSgpOw0KCSRmdWxsU2VjTGlzdCA9IGFycmF5KCk7DQoJJG5vdFNlY0xpc3QgPSBhcnJheSgp Ow0KCSRmdWxsQ2F0TGlzdCA9IGFycmF5KCk7DQoJJG5vdENhdExpc3QgPSBhcnJheSgpOw0K CSRmdWxsU3RhdExpc3QgPSBhcnJheSgpOw0KCSRub3RTdGF0TGlzdCA9IGFycmF5KCk7DQoJ JHJlZmluZUxpc3QgPSBhcnJheSgpOw0KCSRkYlRhYmxlcyA9IGFycmF5KCk7DQoJJGRiRmll bGRzID0gYXJyYXkoKTsNCgkkd2hlcmVQYXJ0cyA9IGFycmF5KCk7DQoNCgkvLyBFeHBhbmQg dGhlIGFyZ3MgaW4gY2FzZSB0aGV5J3JlID8gb3IgISBzaG9ydGN1dHMsIGFuZCBkbyBzb21l IHZhbGlkaXR5IGNoZWNraW5nLg0KCSRzZWFyY2hfdGVybSA9IHNtZF9nZXRPcHRzKCRzZWFy Y2hfdGVybSwgJHNlYXJjaEFsbG93LCAiIiwgZmFsc2UpOw0KCSRzZWFyY2hfdGVybSA9ICRz ZWFyY2hfdGVybVswXVswXTsNCglpZiAoJGRlYnVnID4gMSkgew0KCQlkbXAoJHNlYXJjaF90 ZXJtKTsNCgl9DQoJJHJlZmluZSA9IGRvX2xpc3QoJHJlZmluZSk7DQoJZm9yICgkaWR4ID0g MDsgJGlkeCA8IGNvdW50KCRyZWZpbmUpOyAkaWR4KyspIHsNCgkJaWYgKGluX2FycmF5KCRy ZWZpbmVbJGlkeF0sICRyZWZpbmVBbGxvdykpIHsNCgkJCSRyZWZpbmVMaXN0WyRpZHhdID0g JHJlZmluZVskaWR4XTsNCgkJfQ0KCX0NCgkkbWV0YV9zZWFyY2ggPSAoaW5fYXJyYXkoIm1l dGFwaG9uZSIsICRyZWZpbmVMaXN0KSkgPyBtZXRhcGhvbmUoJHNlYXJjaF90ZXJtKSA6ICIi Ow0KCSRzb3VuZF9zZWFyY2ggPSAoaW5fYXJyYXkoInNvdW5kZXgiLCAkcmVmaW5lTGlzdCkp ID8gc291bmRleCgkc2VhcmNoX3Rlcm0pIDogIiI7DQoJJHRvbGVyYW5jZSA9IGludHZhbCgk dG9sZXJhbmNlKTsNCg0KCS8vIG1hdGNoX3dpdGggbmVlZHMgdG8gYmUgYnVpbHQgaW50byBh IHNlcmllcyBvZiBhcnJheXMgb2YgZGF0YWJhc2UgdGFibGVzIGFuZCBjb2x1bW5zDQoJJGxv b2tpbiA9IHNtZF9zcGxpdCgkbWF0Y2hfd2l0aCwgZmFsc2UsICI6LFxzIik7DQoJLy8gTG9v cCBvdmVyIHBhaXJzIG9mIGVsZW1lbnRzDQoJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50 KCRsb29raW4pOyAkaWR4Kz0yKSB7DQoJCSRkYlRhYmxlc1tdID0gYXJyYXlfc2VhcmNoKCRs b29raW5bJGlkeF0sICRwbGFjZXMpOw0KCQkkZGJGaWVsZExpc3QgPSBzbWRfc3BsaXQoJGxv b2tpblskaWR4KzFdLCBmYWxzZSwgIjsiKTsNCgkJJGRiRmllbGQgPSBhcnJheSgpOw0KCQlm b3JlYWNoICgkZGJGaWVsZExpc3QgYXMgJGxvb2tGaWVsZCkgew0KCQkJJGtleSA9IGFycmF5 X3NlYXJjaCgkbG9va2luWyRpZHhdLiI6Ii4kbG9va0ZpZWxkLCAkY29sTmFtZXMpOw0KCQkJ aWYgKCRrZXkpIHsNCgkJCQkkZGJGaWVsZFtdID0gJGtleTsNCgkJCX0gZWxzZSBpZiAoc3Ry cG9zKCRsb29rRmllbGQsICJjdXN0b21fIikgPT09IDApIHsNCgkJCQkkZGJGaWVsZFtdID0g JGxvb2tGaWVsZDsNCgkJCX0NCgkJfQ0KCQkkZGJGaWVsZHNbXSA9ICRkYkZpZWxkOw0KCX0N CglpZiAoY291bnQoJGRiVGFibGVzKSA9PSAwIHx8IGNvdW50KCRkYkZpZWxkcykgPT0gMCkg ew0KCQkkZGJUYWJsZXNbXSA9ICJ0ZXh0cGF0dGVybiI7DQoJCSRkYkZpZWxkc1tdID0gIioi Ow0KCX0NCg0KCSRzaG93TGlzdCA9IGRvX2xpc3QoJHNob3cpOw0KCWZvciAoJGlkeCA9IGNv dW50KCRzaG93TGlzdCk7ICRpZHggPj0gMDsgJGlkeC0tKSB7DQoJCWlmICghaW5fYXJyYXko JHNob3dMaXN0WyRpZHhdLCAkc2hvd0FsbG93KSkgew0KCQkJdW5zZXQoJHNob3dMaXN0WyRp ZHhdKTsNCgkJfQ0KCX0NCgkkbGltaXRCeSA9IGFycmF5KCk7DQoJJGxpbWl0ID0gZG9fbGlz dCgkbGltaXQpOw0KCWZvcmVhY2ggKCRsaW1pdCBhcyAkbGltT3B0aW9uKSB7DQoJCWlmIChp c19udW1lcmljKCRsaW1PcHRpb24pKSB7DQoJCQkkbGltaXRCeVsiYXJ0aWNsZXMiXSA9ICRs aW1PcHRpb247DQoJCQkkbGltaXRCeVsid29yZHMiXSA9ICRsaW1PcHRpb247DQoJCX0gZWxz ZSB7DQoJCQkkbGltc3BsaXQgPSBzbWRfc3BsaXQoJGxpbU9wdGlvbiwgZmFsc2UsICI6Iik7 DQoJCQlpZiAoKGNvdW50KCRsaW1zcGxpdCkgPT0gMikgJiYgKGluX2FycmF5KCRsaW1zcGxp dFswXSwgJHNob3dBbGxvdykpICYmIChpc19udW1lcmljKCRsaW1zcGxpdFsxXSkpKSB7DQoJ CQkJJGxpbWl0QnlbJGxpbXNwbGl0WzBdXSA9ICRsaW1zcGxpdFsxXTsNCgkJCX0NCgkJfQ0K CX0NCgkkdGhpbmdpZXNMMTBuID0gYXJyYXkoKTsNCglmb3JlYWNoICgkc2hvd0xpc3QgYXMg JGl0ZW0pIHsNCgkJJHRoaW5naWVzTDEwbltdID0gJHNtZF9mdXp6TGFuZy0+Z1R4dCgkaXRl bSk7DQoJfQ0KCSR0aGluZ2llcyA9IGltcGxvZGUoIiAiLiRzbWRfZnV6ekxhbmctPmdUeHQo J3N1Z2dlc3Rfam9pbicpLiIgIiwgJHRoaW5naWVzTDEwbik7DQoJJG5vX21hdGNoX2xhYmVs ID0gKCRub19tYXRjaF9sYWJlbCA9PSAiIyIpID8gJHNtZF9mdXp6TGFuZy0+Z1R4dCgnbm9f bWF0Y2gnLCBhcnJheSgie3NlYXJjaF90ZXJtfSIgPT4gJHNlYXJjaF90ZXJtKSkgOiAkbm9f bWF0Y2hfbGFiZWw7DQoJJHN1Z2dlc3RfbGFiZWwgPSAoJHN1Z2dlc3RfbGFiZWwgPT0gIiMi KSA/ICRzbWRfZnV6ekxhbmctPmdUeHQoJ3N1Z2dlc3QnLCBhcnJheSgie3RoaW5naWVzfSIg PT4gJHRoaW5naWVzKSkgOiAkc3VnZ2VzdF9sYWJlbDsNCgkkdG9vX3Nob3J0X2xhYmVsID0g KCR0b29fc2hvcnRfbGFiZWwgPT0gIiMiKSA/ICRzbWRfZnV6ekxhbmctPmdUeHQoJ3Rvb19z aG9ydCcpIDogJHRvb19zaG9ydF9sYWJlbDsNCg0KCS8vIEdldCB0aGUgZG9jdW1lbnQgc3Rh dHVzZXMgdG8gc2VhcmNoDQoJJHN0YXRpaSA9IHNtZF9nZXRPcHRzKCRzdGF0dXMsIGFycmF5 KCIhZmllbGQiKSwgIiIsIGZhbHNlKTsNCgkkZnVsbFN0YXRMaXN0ID0gJHN0YXRpaVswXTsN Cgkkbm90U3RhdExpc3QgPSAkc3RhdGlpWzFdOw0KDQoJJHRtcGEgPSBhcnJheSgpOw0KCWZv ciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZnVsbFN0YXRMaXN0KTsgJGlkeCsrKSB7DQoJ CSR0bXBhW10gPSAiJyIgLmdldFN0YXR1c051bSgkZnVsbFN0YXRMaXN0WyRpZHhdKS4gIici Ow0KCX0NCglpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkkc3RhdHNpbltdID0gInN0YXR1 cyBJTiAoIiAuaW1wbG9kZSgiLCIsICR0bXBhKS4gIikiOw0KCX0NCgkkdG1wYSA9IGFycmF5 KCk7DQoJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRub3RTdGF0TGlzdCk7ICRpZHgr Kykgew0KCQkkdG1wYVtdID0gIiciIC5nZXRTdGF0dXNOdW0oJG5vdFN0YXRMaXN0WyRpZHhd KS4gIiciOw0KCX0NCglpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkkc3RhdHNpbltdID0g InN0YXR1cyBOT1QgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgl9DQoNCglp ZiAoY291bnQoJHN0YXRzaW4pID4gMCkgew0KCQkkd2hlcmVQYXJ0c1tdID0gIigiIC4gaW1w bG9kZSgiIE9SICIsICRzdGF0c2luKSAuICIpIjsNCgl9DQoNCgkkc2VjdGlvbnMgPSBzbWRf Z2V0T3B0cygkc2VjdGlvbiwgYXJyYXkoIj9zIiwgIiFzIiwgIiFmaWVsZCIpLCAiIiwgZmFs c2UpOw0KCSRmdWxsU2VjTGlzdCA9ICRzZWN0aW9uc1swXTsNCgkkbm90U2VjTGlzdCA9ICRz ZWN0aW9uc1sxXTsNCg0KCSRjYXRzID0gc21kX2dldE9wdHMoJGNhdGVnb3J5LCBhcnJheSgi P2MiLCAiIWMiLCAiIWZpZWxkIiksICIiLCBmYWxzZSk7DQoJJGZ1bGxDYXRMaXN0ID0gJGNh dHNbMF07DQoJJG5vdENhdExpc3QgPSAkY2F0c1sxXTsNCg0KCS8vIGluY2x1ZGVkIHNlY3Rp b25zICYgY2F0ZWdvcmllcw0KCWlmIChpbl9hcnJheSgidGV4dHBhdHRlcm4iLCAkZGJUYWJs ZXMpKSB7DQoJCS8vIHNlY3Rpb25zDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4 ID0gMDsgJGlkeCA8IGNvdW50KCRmdWxsU2VjTGlzdCk7ICRpZHgrKykgew0KCQkJJHRtcGFb XSA9ICInIiAuJGZ1bGxTZWNMaXN0WyRpZHhdLiAiJyI7DQoJCX0NCgkJaWYgKGNvdW50KCR0 bXBhKSA+IDApIHsNCgkJCSRzZWNzaW5bXSA9ICJzZWN0aW9uIElOICgiIC5pbXBsb2RlKCIs IiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQkvLyBleGNsdWRlZCBzZWN0aW9ucw0KCQkkdG1w YSA9IGFycmF5KCk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkbm90U2VjTGlz dCk7ICRpZHgrKykgew0KCQkJJHRtcGFbXSA9ICInIiAuJG5vdFNlY0xpc3RbJGlkeF0uICIn IjsNCgkJfQ0KCQlpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkJJHNlY3NpbltdID0gInNl Y3Rpb24gTk9UIElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQlp ZiAoY291bnQoJHNlY3NpbikgPiAwKSB7DQoJCQkkd2hlcmVQYXJ0c1tdID0gIigiIC4gaW1w bG9kZSgiIE9SICIsICRzZWNzaW4pIC4gIikiOw0KCQl9DQoNCgkJLy8gY2F0ZWdvcmllcw0K CQkkdG1wYSA9IGFycmF5KCk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZnVs bENhdExpc3QpOyAkaWR4KyspIHsNCgkJCWlmICgkc3ViY2F0cykgew0KCQkJCSRjYXRlZ3Mg PSBnZXRUcmVlKCRmdWxsQ2F0TGlzdFskaWR4XSwgJ2FydGljbGUnKTsNCgkJCQlmb3IgKCRq ZHggPSAwOyAkamR4IDwgY291bnQoJGNhdGVncyk7ICRqZHgrKykgew0KCQkJCQlpZiAoJGNh dGVnc1skamR4XVsnbmFtZSddICE9ICJyb290Iikgew0KCQkJCQkJJHRtcGFbXSA9ICInIiAu JGNhdGVnc1skamR4XVsnbmFtZSddLiAiJyI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ug ew0KCQkJCSR0bXBhW10gPSAiJyIgLiRmdWxsQ2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0K CQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkdGhlQ2F0cyA9IGltcGxvZGUo IiwiLCAkdG1wYSk7DQoJCQkkY2F0c2luW10gPSAiKCBDYXRlZ29yeTEgSU4gKCIgLiR0aGVD YXRzLiAiKSBPUiBDYXRlZ29yeTIgSU4gKCIgLiR0aGVDYXRzLiAiKSApIjsNCgkJfQ0KDQoJ CS8vIGV4Y2x1ZGVkIGNhdGVnb3JpZXMNCgkJJHRtcGEgPSBhcnJheSgpOw0KCQlmb3IgKCRp ZHggPSAwOyAkaWR4IDwgY291bnQoJG5vdENhdExpc3QpOyAkaWR4KyspIHsNCgkJCWlmICgk c3ViY2F0cykgew0KCQkJCSRjYXRlZ3MgPSBnZXRUcmVlKCRub3RDYXRMaXN0WyRpZHhdLCAn YXJ0aWNsZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsg JGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7 DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJ CQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJG5vdENhdExp c3RbJGlkeF0uICInIjsNCgkJCX0NCgkJfQ0KCQlpZiAoY291bnQoJHRtcGEpID4gMCkgew0K CQkJJHRoZUNhdHMgPSBpbXBsb2RlKCIsIiwgJHRtcGEpOw0KCQkJJGNhdHNpbltdID0gIigg Q2F0ZWdvcnkxIE5PVCBJTiAoIiAuJHRoZUNhdHMuICIpIEFORCBDYXRlZ29yeTIgTk9UIElO ICgiIC4kdGhlQ2F0cy4gIikgKSI7DQoJCX0NCg0KCQlpZiAoY291bnQoJGNhdHNpbikgPiAw KSB7DQoJCQkkd2hlcmVQYXJ0c1tdID0gIigiIC4gaW1wbG9kZSgiIEFORCAiLCAkY2F0c2lu KSAuICIpIjsNCgkJfQ0KDQoJCS8vIGNvbW1lbnRzDQoJCWlmIChpbl9hcnJheSgidHhwX2Rp c2N1c3MiLCRkYlRhYmxlcykpIHsNCgkJCSR3aGVyZVBhcnRzW10gPSAidGV4dHBhdHRlcm4u SUQgPSB0eHBfZGlzY3Vzcy5wYXJlbnRpZCI7DQogICAgICB9DQoJfQ0KDQoJLy8gQ2F0Y2gt YWxsIGZvciB0aGUgd2hlcmUgc3RhdGVtZW50DQoJaWYgKGNvdW50KCR3aGVyZVBhcnRzKSA9 PSAwKSB7DQoJCSR3aGVyZSA9ICIxPTEiOw0KCX0gZWxzZSB7DQoJCSR3aGVyZSA9IGltcGxv ZGUoIiBBTkQgIiwgJHdoZXJlUGFydHMpOw0KCX0NCg0KCWlmICgkZGVidWcgPiAwKSB7DQoJ CWRtcCgkd2hlcmUpOw0KCX0NCg0KCSRvdXQgPSAiIjsNCgkvLyBQZXJmb3JtIHRoZSBzZWFy Y2hlcw0KCSRmaW5kZXIgPSBuZXcgc21kX0Z1enp5RmluZCgkc2VhcmNoX3Rlcm0sICR0b2xl cmFuY2UpOw0KCWlmICgkZmluZGVyLT50b29fc2hvcnRfZXJyKSB7DQoJCSRvdXQgLj0gKCRs YWJlbHRhZyA9PSAiIikgPyAiIiA6ICI8IiAuJGxhYmVsdGFnLiI+IjsNCgkJJG91dCAuPSAk bm9fbWF0Y2hfbGFiZWw7DQoJCSRvdXQgLj0gJHRvb19zaG9ydF9sYWJlbDsNCgkJJG91dCAu PSAoJGxhYmVsdGFnID09ICIiKSA/ICIiIDogIjwvIiAuJGxhYmVsdGFnLiI+IjsNCgl9IGVs c2Ugew0KCQkkY29scyA9ICIqIiAuICgoaW5fYXJyYXkoInRleHRwYXR0ZXJuIiwgJGRiVGFi bGVzKSkgPyAiLCB1bml4X3RpbWVzdGFtcCh0ZXh0cGF0dGVybi5Qb3N0ZWQpIEFTIHVQb3N0 ZWQiIDogIiIpOw0KCQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJGNvbHMsIGltcGxvZGUoJGRi VGFibGVzLCAiLCAiKSwgJHdoZXJlKTsNCgkJaWYgKGluX2FycmF5KCJ0ZXh0cGF0dGVybiIs JGRiVGFibGVzKSkgew0KCQkJJG9wZm9ybSA9IGZldGNoX2Zvcm0oJGZvcm0pOw0KCQl9DQoJ CSRwYWdldXJsID0gc21kX3JlbW92ZVFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCdx Jyk7DQoJCSRhbGxGaWVsZHMgPSAiIjsNCgkJJGFydExpc3QgPSBhcnJheSgpOw0KCQkkd29y ZExpc3QgPSBhcnJheSgpOw0KCQkkdGVybUxpc3QgPSBhcnJheSgpOw0KCQl3aGlsZSgkcm93 ID0gbmV4dFJvdygkcnMpKSB7DQoJCQkkYWxsRmllbGRzID0gIiI7DQoJCQkvLyBKb2luIGFs bCB0aGUgcmVxdWlyZWQgcGxhY2VzIHRvIGxvb2sgaW50byBhIGxvbmcgdGV4dCBibG9jaw0K CQkJZm9yZWFjaCAoJGRiRmllbGQgYXMgJHRoZUZpZWxkKSB7DQoJCQkJJGFsbEZpZWxkcyAu PSAkcm93WyR0aGVGaWVsZF0uIiAiOw0KCQkJfQ0KCQkJLy8gUmVtb3ZlIGJldHdlZW4td29y ZCBwdW5jdHVhdGlvbiBhbmQgcmVwbGFjZSB3aXRoIHNwYWNlDQoJCQkkanVzdENoYXJzID0g Ii9bXmEtekEtWjAtOVwtXCcgXSsvIjsNCgkJCSRhbGxGaWVsZHMgPSBwcmVnX3JlcGxhY2Uo JGp1c3RDaGFycywgJyAnLCAkYWxsRmllbGRzKTsNCgkJCS8vIFNwbGl0IHRoZSByZW1haW5k ZXIgYnkgKHNpbmdsZSBvciBtdWx0aXBsZSkgc3BhY2VzDQoJCQkkd2VyZHMgPSBwcmVnX3Nw bGl0KCcvXHMrLycsICRhbGxGaWVsZHMsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKTsNCgkJ CS8vIC4uLmFuZCByZWNvbnN0aXR1dGUgdGhlIHVuaXF1ZSB3b3JkcyBhcyBhIGh1Z2Ugc3Bh Y2UtZGVsaW1pdGVkIHN0cmluZw0KCQkJJHdlcmRzID0gaW1wbG9kZSgiICIsYXJyYXlfdW5p cXVlKCR3ZXJkcykpOw0KCQkJLy8gVGFrZSBpbnRvIGFjY291bnQgY2FzZSBzZW5zaXRpdml0 eQ0KCQkJJHdlcmRzID0gKCRjYXNlX3NlbnNpdGl2ZSkgPyAkd2VyZHMgOiBzdHJ0b2xvd2Vy KCR3ZXJkcyk7DQoJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCWRtcCgkd2VyZHMpOw0KCQkJ fQ0KDQoJCQkvLyBGaW5kIGNsb3NlIHdvcmQgbWF0Y2hlcw0KCQkJJG1hdGNoZXMgPSAkZmlu ZGVyLT5zZWFyY2goJHdlcmRzKTsNCgkJCWlmICgkZGVidWcgPiAxKSB7DQoJCQkJZG1wKCRt YXRjaGVzKTsNCgkJCX0NCg0KCQkJaWYgKGNvdW50KCRtYXRjaGVzKSA+IDApIHsNCgkJCQkk c2hvcnRlc3REaXN0ID0gMTAwOyAvLyBBIHN0dXBpZGx5IGhpZ2ggbnVtYmVyIHRvIHN0YXJ0 IHdpdGgNCgkJCQkkc2hvcnRlc3RNZXRhRGlzdCA9IC0xOw0KCQkJCSRjbG9zZXN0V29yZCA9 ICIiOw0KCQkJCSRjbG9zZXN0TWV0YVdvcmQgPSAiIjsNCgkJCQkkbWF4X3Rlcm1fbGVuID0g MDsNCgkJCQkvLyBCdWlsZCBhIHVuaXF1ZSBhcnJheSBvZiBjbG9zZXN0IG1hdGNoaW5nIHdv cmRzDQoJCQkJd2hpbGUobGlzdCgkaWR4LCRkaXN0KSA9IGVhY2goJG1hdGNoZXMpKSB7DQoJ CQkJCSR0ZXJtID0gc21kX2dldFdvcmQoJHdlcmRzLCRzZWFyY2hfdGVybSwkaWR4KTsNCg0K CQkJCQkvLyBPbmx5IHdvcmRzIG1lZXRpbmcgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnQgbmVl ZCBhcHBseQ0KCQkJCQkkbWF4X3Rlcm1fbGVuID0gKHN0cmxlbigkdGVybSkgPiAkbWF4X3Rl cm1fbGVuKSA/IHN0cmxlbigkdGVybSkgOiAkbWF4X3Rlcm1fbGVuOw0KCQkJCQlpZiAoc3Ry bGVuKCR0ZXJtKSA8ICRtaW5fd29yZF9sZW5ndGgpIHsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJ CQl9DQoJCQkJCSR0ZXJtID0gKCRjYXNlX3NlbnNpdGl2ZSkgPyAkdGVybSA6IHN0cnRvbG93 ZXIoJHRlcm0pOw0KCQkJCQlpZiAoJGRlYnVnID4gMikgew0KCQkJCQkJZWNobyAkdGVybSAu ICIgIjsNCgkJCQkJfQ0KCQkJCQlpZiAoJGRpc3QgPCAkc2hvcnRlc3REaXN0KSB7DQoJCQkJ CQkkc2hvcnRlc3REaXN0ID0gJGRpc3Q7DQoJCQkJCQkkY2xvc2VzdFdvcmQgPSAkdGVybTsN CgkJCQkJfQ0KCQkJCQlpZiAoJG1ldGFfc2VhcmNoICE9ICIiKSB7DQoJCQkJCQkkbWV0YV90 ZXJtID0gbWV0YXBob25lKCR0ZXJtKTsNCgkJCQkJCWlmICgkZGVidWcgPiAyKSB7DQoJCQkJ CQkJZWNobyAkbWV0YV90ZXJtIC4gIiA6ICIgLiAkbWV0YV9zZWFyY2ggLiIgIi5uOw0KCQkJ CQkJfQ0KCQkJCQkJJGxldkRpc3QgPSBsZXZlbnNodGVpbigkbWV0YV9zZWFyY2gsICRtZXRh X3Rlcm0pOw0KCQkJCQkJaWYgKCRsZXZEaXN0IDw9ICRzaG9ydGVzdE1ldGFEaXN0IHx8ICRz aG9ydGVzdE1ldGFEaXN0IDwgMCkgew0KCQkJCQkJCSRzaG9ydGVzdE1ldGFEaXN0ID0gJGxl dkRpc3Q7DQoJCQkJCQkJJGNsb3Nlc3RNZXRhV29yZCAgPSAkdGVybTsNCgkJCQkJCX0NCgkJ CQkJfQ0KCQkJCX0NCgkJCQkvLyBQaWNrIHRoZSBvbmUgdGhhdCBzb3VuZHMgY2xvc2VzdCB0 byB0aGUgb3JpZ2luYWwNCgkJCQlpZiAodHJpbSgkY2xvc2VzdFdvcmQpICE9ICIiKSB7DQoJ CQkJCSRpZHggPSBtZDUoJGNsb3Nlc3RXb3JkKTsNCgkJCQkJJGJlc3RGaXQgPSAkY2xvc2Vz dFdvcmQ7DQoJCQkJCSRiZXN0RGlzdCA9ICRzaG9ydGVzdERpc3Q7DQoJCQkJCWlmICgkc291 bmRfc2VhcmNoICE9ICIiKSB7DQoJCQkJCQkkc291bmQxID0gbGV2ZW5zaHRlaW4oc291bmRl eCgkY2xvc2VzdFdvcmQpLCAkc291bmRfc2VhcmNoKTsNCgkJCQkJCSRzb3VuZDIgPSBsZXZl bnNodGVpbihzb3VuZGV4KCRjbG9zZXN0TWV0YVdvcmQpLCAkc291bmRfc2VhcmNoKTsNCgkJ CQkJCWlmICgkc291bmQxID49ICRzb3VuZDIpIHsNCgkJCQkJCQkkaWR4ID0gbWQ1KCRjbG9z ZXN0TWV0YVdvcmQpOw0KCQkJCQkJCSRiZXN0Rml0ID0gJGNsb3Nlc3RNZXRhV29yZDsNCgkJ CQkJCQkkYmVzdERpc3QgPSAkc2hvcnRlc3RNZXRhRGlzdDsNCgkJCQkJCX0NCgkJCQkJfQ0K CQkJCQkkd29yZExpc3RbJGlkeF0gPSAkYmVzdEZpdDsNCgkJCQkJJHdvcmREaXN0WyRpZHhd ID0gJGJlc3REaXN0Ow0KCQkJCX0NCgkJCQlpZiAoJGRlYnVnID4gMikgew0KCQkJCQlkbXAo IkJFU1RGSVQ6IiAuJGJlc3RGaXQpOw0KCQkJCX0NCg0KCQkJCS8vIEJ1aWxkIGFuIGFycmF5 IG9mIHVuaXF1ZSBtYXRjaGluZyBhcnRpY2xlcw0KCQkJCWlmICgkbWF4X3Rlcm1fbGVuID49 ICRtaW5fd29yZF9sZW5ndGgpIHsNCgkJCQkJaWYgKGluX2FycmF5KCJ0ZXh0cGF0dGVybiIs ICRkYlRhYmxlcykpIHsNCgkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkJ CX0NCgkJCQkJLy8gVGVtcG9yYXJpbHkgYXNzaWduIHRoZSBjbG9zZXN0IG1hdGNoIHRvIHRo ZSBxdWVyeSBzdHJpbmcgc28gdGhhdA0KCQkJCQkvLyB0aGUgc2VhcmNoX3Jlc3VsdF9leGNl cnB0IGNhbiBoaWxpZ2h0IHRoZSBmb3VuZCB3b3Jkcw0KCQkJCQkkcHJldGV4dFsncSddID0g JHRlcm07DQoJCQkJCSRhcnRMaXN0W10gPSBwYXJzZSgkb3Bmb3JtKTsNCgkJCQkJJHByZXRl eHRbJ3EnXSA9ICRzZWFyY2hfdGVybTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gU29ydCB0 aGUgd29yZCBsaXN0IGluIG9yZGVyIG9mIHJlbGV2YW5jZQ0KCQlpZiAoY291bnQoJHdvcmRM aXN0KSA+IDApIHsNCgkJCWFycmF5X211bHRpc29ydCgkd29yZERpc3QsJHdvcmRMaXN0KTsN CgkJfQ0KDQoJCS8vIE91dHB1dCBzdHVmZiB0byB0aGUgcGFnZQ0KCQkkb3V0IC49ICgkbGFi ZWx0YWcgPT0gIiIpID8gIiIgOiAiPCIgLiRsYWJlbHRhZy4iPiI7DQoJCSRvdXQgLj0gJG5v X21hdGNoX2xhYmVsOw0KCQlpZiAoY291bnQoJHdvcmRMaXN0KSA+IDApIHsNCgkJCSRvdXQg Lj0gKGNvdW50KCRzaG93TGlzdCkgPiAwKSA/ICRzdWdnZXN0X2xhYmVsIDogIiI7DQoNCgkJ CWlmIChpbl9hcnJheSgid29yZHMiLCAkc2hvd0xpc3QpKSB7DQoJCQkJJGN0ciA9IDA7DQoJ CQkJZm9yZWFjaCAoJHdvcmRMaXN0IGFzICRpdGVtKSB7DQoJCQkJCWlmIChhcnJheV9rZXlf ZXhpc3RzKCJ3b3JkcyIsICRsaW1pdEJ5KSAmJiAkY3RyID49ICRsaW1pdEJ5WyJ3b3JkcyJd KSB7DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICc8YSBocmVmPSInLnNt ZF9hZGRRU1ZhcigkcGFnZXVybCwncScsJGl0ZW0pLiciPicuJGl0ZW0uJzwvYT4nLm47DQoJ CQkJCSRjdHIrKzsNCgkJCQl9DQoJCQl9DQoJCQkkb3V0IC49ICgkbGFiZWx0YWcgPT0gIiIp ID8gIiIgOiAiPC8iIC4kbGFiZWx0YWcuIj4iOw0KCQkJaWYgKGluX2FycmF5KCJhcnRpY2xl cyIsICRzaG93TGlzdCkpIHsNCgkJCQkkY3RyID0gMDsNCgkJCQlmb3JlYWNoICgkYXJ0TGlz dCBhcyAkYXJ0KSB7DQoJCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCJhcnRpY2xlcyIsICRs aW1pdEJ5KSAmJiAkY3RyID49ICRsaW1pdEJ5WyJhcnRpY2xlcyJdKSB7DQoJCQkJCQlicmVh azsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICRhcnQ7DQoJCQkJCSRjdHIrKzsNCgkJCQl9DQoJ CQl9DQoJCX0NCgl9DQoJcmV0dXJuICRvdXQ7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo0 OiJoZWxwIjtzOjEwNjEyOiI8aDE+c21kX2Z1enp5X2ZpbmQ8L2gxPgo8cD5Gb3IgbW9yZSBp bmZvcm1hdGlvbiBvbiB1c2FnZSwgYnVncywgZmVhdHVyZXMgZXRjLCBwbGVhc2UgPGEgaHJl Zj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI1MzY3 Ij52aXNpdCB0aGUgZm9ydW0gdGhyZWFkPC9hPi4gRm9yIG90aGVyIHNvZnR3YXJlIGJ5IG1l LCBvciB0byBtYWtlIGEgZG9uYXRpb24sIHNlZSB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPi48L3A+CjxwIGNsYXNzPSJyZXF1aXJl ZCI+UmVxdWlyZXMgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9z bWRfbGliX3YwLjMxLnR4dCI+c21kX2xpYiB2MC4zMTwvYT4gdG8gYmUgaW5zdGFsbGVkIGFu ZCBhY3RpdmF0ZWQuPC9wPjxwPgo8aDIgaWQ9ImNvbnRlbnRzIj5Db250ZW50czwvaDI+Cjx1 bD4KPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KPGxpPjxhIGhy ZWY9IiNhdHRzIj5BdHRyaWJ1dGVzPC9hPgo8dWw+CjxsaT48YSBocmVmPSIjc2VhcmNodGVy bSI+c2VhcmNoX3Rlcm08L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNtYXRjaHdpdGgiPm1hdGNo X3dpdGg8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNzaG93Ij5zaG93PC9hPjwvbGk+CjxsaT48 YSBocmVmPSIjc2VjdGlvbiI+c2VjdGlvbjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI2NhdGVn b3J5Ij5jYXRlZ29yeTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI3N1YmNhdHMiPnN1YmNhdHM8 L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNzdGF0dXMiPnN0YXR1czwvYT48L2xpPgo8bGk+PGEg aHJlZj0iI3RvbGVyYW5jZSI+dG9sZXJhbmNlPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjcmVm aW5lIj5yZWZpbmU8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNjYXNlc2Vuc2l0aXZlIj5jYXNl X3NlbnNpdGl2ZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI21pbndvcmRsZW5ndGgiPm1pbl93 b3JkX2xlbmd0aDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI2xpbWl0Ij5saW1pdDwvYT48L2xp Pgo8bGk+PGEgaHJlZj0iI2Zvcm0iPmZvcm08L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNub21h dGNobGFiZWwiPm5vX21hdGNoX2xhYmVsPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjc3VnZ2Vz dGxhYmVsIj5zdWdnZXN0X2xhYmVsPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjdG9vc2hvcnRs YWJlbCI+dG9vX3Nob3J0X2xhYmVsPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjbGFiZWx0YWci PmxhYmVsdGFnPC9hPjwvbGk+CjwvdWw+PC9saT4KPGxpPjxhIGhyZWY9IiNleGFtcGxlIj5F eGFtcGxlIHVzYWdlPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjaXNzdWVzIj5Lbm93biBpc3N1 ZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvYT48L2xp Pgo8bGk+PGEgaHJlZj0iI2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9saT4KPC91bD4KPGgyIGlk PSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgo8cD5FdmVyIHdhbnRlZCBUWFAncyBzZWFyY2gg ZmFjaWxpdHkgdG8gYmUgYSBsaXR0bGUgbW9yZSwgd2VsbCwgaW5hY2N1cmF0ZT8gV2FudCBu byBtb3JlLiBEZWZpbmUgaG93IGZ1enp5IHlvdXIgc2VhcmNoIGlzLCB3aGVyZSB0byBsb29r IGFuZCBob3cgbXVjaCBvZiBhIG51ZGdlIHRvIG9mZmVyIHlvdXIgc2l0ZSB2aXNpdG9ycyB3 aXRoIHBoYXQgcGhpbmdlcnMuPC9wPgo8cD5SZXN1bHRzIGFyZSBvcmRlcmVkIGJ5IGFwcHJv eGltYXRlIHJlbGV2YW5jeSBhbmQgaXQncyBhdXRvbWF0aWNhbGx5IGNvbnRleHQtc2Vuc2l0 aXZlIGJlY2F1c2UgdGhlIHBvb2wgb2Ygd29yZHMgaXQgY29tcGFyZXMgYWdhaW5zdCBhcmUg ZnJvbSB5b3VyIHNpdGUuIE9uIGEgem9vIHdlYnNpdGUsIHNvbWVvbmUgdHlwaW5nIGluICJs aW5vIiB3b24ndCBnZXQgYXJ0aWNsZXMgYWJvdXQgZmxvb3JpbmcgYnV0IG1vcmUgbGlrZWx5 IGFydGljbGVzIGFib3V0IGxpb25zLCB3aGljaCBpcyB3aGF0IHRoZXkgcmVhbGx5IHdhbnRl ZC4gV2UgaG9wZS48L3A+Cgo8aDIgaWQ9ImF0dHMiPkF0dHJpYnV0ZXM8L2gyPgo8aDMgaWQ9 InNlYXJjaHRlcm0iPjxjb2RlPnNlYXJjaF90ZXJtPC9jb2RlPjwvaDM+CjxwPldoYXQgeW91 IHdvdWxkIGxpa2UgdG8gc2VhcmNoIGZvcjogZWl0aGVyIGEgZml4ZWQgc3RyaW5nIChyYXRo ZXIgcG9pbnRsZXNzISkgb3IgIj9xIiAodGhlIGRlZmF1bHQpLiBNYXliZSBpbiBmdXR1cmUg b3RoZXIgdGhpbmdzIGxpa2UgP2N1c3RvbV9maWVsZCBzbyB5b3UgY2FuIGVtYmVkIHRoaXMg aW4gYW4gYXJ0aWNsZSBhbmQgZG8gcHN1ZWRvLXJlbGF0ZWQtYXJ0aWNsZSBzZWFyY2hlczwv cD4KCjxoMyBpZD0ibWF0Y2h3aXRoIj48Y29kZT5tYXRjaF93aXRoPC9jb2RlPjwvaDM+Cjxw PldoZXJlIHlvdSB3b3VsZCBsaWtlIHRvIGxvb2sgZm9yIGEgbWF0Y2ggKGkuZS4gd2hpY2gg YXJ0aWNsZSBmaWVsZHMpLiBEZWZpbmUgdGhlIG9iamVjdCB5b3Ugd2FudCB0byBsb29rIGlu IChjdXJyZW50bHkgb25seSBhcnRpY2xlIGlzIHN1cHBvcnRlZCkgZm9sbG93ZWQgYnkgYSBj b2xvbiwgdGhlbiBhIHNlbWktY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgcGxhY2VzIHRvIGxv b2s6IDxjb2RlPm1hdGNoX3dpdGg9ImFydGljbGU6a2V5d29yZHM7Ym9keTtleGNlcnB0Ijwv Y29kZT4uIE9wdGlvbnMgYXJlIGtleXdvcmRzLCBib2R5LCBleGNlcnB0LCBjYXRlZ29yeTEs IGNhdGVnb3J5Miwgc2VjdGlvbiwgaWQsIGF1dGhvcmlkLCB0aXRsZSwgY3VzdG9tXzEsIGN1 c3RvbV8yLCBldGMuIERlZmF1bHQgaXMgYXJ0aWNsZTprZXl3b3Jkcztib2R5O2V4Y2VycHQ8 L3A+Cgo8aDMgaWQ9InNob3ciPjxjb2RlPnNob3c8L2NvZGU+PC9oMz4KPHA+V2hhdCB0byBk aXNwbGF5OiB3aGV0aGVyIHRvIGxpc3QgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgYXJ0aWNsZXMs IGNsb3Nlc3QgbWF0Y2hpbmcgc2VhcmNoIHRlcm1zLCBvciBib3RoLiBDaG9pY2VzIGFyZSBh IGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGVpdGhlciA8Y29kZT5hcnRpY2xlczwvY29kZT4g b3IgPGNvZGU+d29yZHM8L2NvZGU+LiBEZWZhdWx0OiAid29yZHMsIGFydGljbGVzIjwvcD4K CjxoMyBpZD0ic2VjdGlvbiI+PGNvZGU+c2VjdGlvbjwvY29kZT48L2gzPgo8cD5MaW1pdCB5 b3VyIHNlYXJjaCByZXN1bHRzIHRvIGEgcGFydGljdWxhciBzZWN0aW9uIG9yIHRocmVlOyBn aXZlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuIFlvdSBjYW4gdXNlID9zIGZvciB0aGUgY3Vy cmVudCBzZWN0aW9uIG9yICFzIGZvciBhbnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgc2Vj dGlvbiwgb3IgdXNlICEgYW5kIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgc2VjdGlvbiB0byBl eGNsdWRlIGl0LiBEZWZhdWx0OiBlbXB0eSAodGhlIHdob2xlIHNpdGUpLjwvcD4KCjxoMyBp ZD0iY2F0ZWdvcnkiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvaDM+CjxwPkxpbWl0IHlvdXIg c2VhcmNoIHJlc3VsdHMgdG8gYSBwYXJ0aWN1bGFyIGNhdGVnb3J5OyBnaXZlIGEgY29tbWEt c2VwYXJhdGVkIGxpc3QuIFlvdSBjYW4gdXNlID9jIGZvciB0aGUgY3VycmVudCBnbG9iYWwg Y2F0ZWdvcnkgb3IgIWMgZm9yIGFueSBleGNlcHQgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVn b3J5LCBvciB1c2UgISBhbmQgdGhlIG5hbWUgb2YgYSBzcGVjaWZpYyBjYXRlZ29yeSB0byBl eGNsdWRlIGl0LiBEZWZhdWx0OiBlbXB0eSAoYWxsIGNhdGVnb3JpZXMpLjwvcD4KCjxoMyBp ZD0ic3ViY2F0cyI+PGNvZGU+c3ViY2F0czwvY29kZT48L2gzPgo8cD5TZXQgdGhpcyB0byAx IHRvIGVuYWJsZSBzZWFyY2hpbmcgb2Ygc3ViLWNhdGVnb3JpZXMgdW5kZXIgdGhlIGdpdmVu IGNhdGVnb3JpZXMuIERlZmF1bHQ6IHVudXNlZC48L3A+Cgo8aDMgaWQ9InN0YXR1cyI+PGNv ZGU+c3RhdHVzPC9jb2RlPjwvaDM+CjxwPlJlc3RyaWN0cyB0aGUgc2VhcmNoIHRvIHBhcnRp Y3VsYXIgdHlwZXMgb2YgZG9jdW1lbnQgc3RhdHVzLiBDaG9vc2UgZnJvbSBkcmFmdCwgaGlk ZGVuLCBwZW5kaW5nLCBsaXZlLCBzdGlja3kuIERlZmF1bHQ6ICJsaXZlLCBzdGlja3kiLjwv cD4KCjxoMyBpZD0idG9sZXJhbmNlIj48Y29kZT50b2xlcmFuY2U8L2NvZGU+PC9oMz4KPHA+ SG93IGZ1enp5IHRoZSBzZWFyY2ggaXMgYW5kIGhvdyBsb25nIHRoZSBtaW5pbXVtIHNlYXJj aCB0ZXJtIGlzIGFsbG93ZWQgdG8gYmUuIEFuIGludGVnZXIgZnJvbSAwICh2ZXJ5IGNsb3Nl IG1hdGNoLCBhbGxvd3Mgc2hvcnQgc2VhcmNoIHdvcmRzKSB0byA1IChwcmV0dHkgbXVjaCBu b3RoaW5nIGxpa2Ugd2hhdCB5b3Ugc2VhcmNoZWQgZm9yIGFuZCBzZWFyY2ggd29yZHMgbXVz dCB0aGVuIGJlIGxvbmdlciwgcm91Z2hseSA+NyBjaGFyYWN0ZXIpLiBQcmFjdGljYWwgdmFs dWVzIGFyZSB1c3VhbGx5IDAsIDEsIDIgKHRoZSBkZWZhdWx0KSwgb3IgcG9zc2libHkgMy48 L3A+Cgo8aDMgaWQ9InJlZmluZSI+PGNvZGU+cmVmaW5lPC9jb2RlPjwvaDM+CjxwPlN3aXRj aCBvbiBzb3VuZGV4IGFuZC9vciBtZXRhcGhvbmUgc3VwcG9ydCBmb3IgY2xvc2VyIG1hdGNo aW5nICh1c3VhbGx5IG9ubHkgb2YgdXNlIGluIEVuZ2xpc2gpLiBVc2UgPGNvZGU+c291bmRl eDwvY29kZT4gb3IgPGNvZGU+bWV0YXBob25lPC9jb2RlPiBvciBib3RoIHNlcGFyYXRlZCBi eSBhIGNvbW1hIHRvIHN3aXRjaCB0aGVtIG9uLiBCb3RoIG9uIGJ5IGRlZmF1bHQuPC9wPgoK PGgzIGlkPSJjYXNlc2Vuc2l0aXZlIj48Y29kZT5jYXNlX3NlbnNpdGl2ZTwvY29kZT48L2gz Pgo8cD5Eb2VzIHdoYXQgaXQgc2F5cyBvbiB0aGUgdGluLiAxPWNhc2Ugc2Vuc2l0aXZlIHNl YXJjaCwgMD1ub3QuIERlZmF1bHQ6IDA8L3A+Cgo8aDMgaWQ9Im1pbndvcmRsZW5ndGgiPjxj b2RlPm1pbl93b3JkX2xlbmd0aDwvY29kZT48L2gzPgo8cD5UaGUgbWluaW11bSB3b3JkIGxl bmd0aCB5b3Ugd2FudCByZXR1cm5pbmcuIERlZmF1bHQ6IDQ8L3A+Cgo8aDMgaWQ9ImxpbWl0 Ij48Y29kZT5saW1pdDwvY29kZT48L2gzPgo8cD5UaGUgbWF4aW11bSBudW1iZXIgb2Ygd29y ZHMgYW5kL29yIGFydGljbGVzIHRvIGRpc3BsYXkuIEdpdmUgaXQgYSBzaW5nbGUgaW50ZWdl ciBhbmQgaXQgbGltaXRzIGJvdGggdG8gdGhlIHNhbWUgdmFsdWUuIFNwZWNpZnlpbmcgPGNv ZGU+YXJ0aWNsZXM6NTwvY29kZT4gd291bGQgcmVtb3ZlIGFueSBsaW1pdCB0byB0aGUgbnVt YmVyIG9mIGFsdGVybmF0aXZlIHNlYXJjaCB3b3JkcyBvZmZlcmVkIGJ1dCB3b3VsZCBsaW1p dCB0aGUgYXJ0aWNsZXMgdG8gYSBtYXhpbXVtIG9mIDUuIFNpbWlsYXJseSwgPGNvZGU+d29y ZHM6NDwvY29kZT4gd291bGQgcmVtb3ZlIHRoZSBhcnRpY2xlIGxpbWl0IGFuZCBvbmx5IHNo b3cgYSBtYXhpbXVtIG9mIDQgYWx0ZXJuYXRpdmUgd29yZHMuIEJvdGggb2YgdGhlc2UgYXJl IHN1YmplY3QgdG8gdGhlaXIgcmVzcGVjdGl2ZSA8YSBocmVmPSIjc2hvdyI+c2hvdzwvYT4g b3B0aW9ucyBiZWluZyBzZXQgb2YgY291cnNlLiBEZWZhdWx0OiA8Y29kZT53b3Jkczo1LCBh cnRpY2xlczoxMDwvY29kZT48L3A+Cgo8aDMgaWQ9ImZvcm0iPjxjb2RlPmZvcm08L2NvZGU+ PC9oMz4KPHA+VGhlIFRYUCBmb3JtIHRvIG91dHB1dCB0aGUgbGlzdCBvZiBhcnRpY2xlcyBp bi4gRGVmYXVsdDogc2VhcmNoX3Jlc3VsdHMuIE5vdGUgdGhhdCAmbHQ7dHhwOnNlYXJjaF9y ZXN1bHRfZXhjZXJwdCAvJmd0OyBpcyBub3cgaG9ub3VyZWQgYXMgY2xvc2VseSBhcyBwb3Nz aWJsZSwgaS5lLiBpZiB0aGUgY2xvc2VzdCB3b3JkcyBhcmUgZm91bmQgaW4gdGhlIGtleXdv cmQsIGJvZHkgb3IgZXhjZXJwdCBmaWVsZHMuIElmIHRoZXkgYXJlIGZvdW5kIGluIGFueSBv dGhlciBsb2NhdGlvbiAoZS5nLiBjdXN0b21fMSkgdGhlIGFydGljbGUgdGl0bGUgd2lsbCBi ZSByZXR1cm5lZCBidXQgdGhlIHNlYXJjaF9yZXN1bHRfZXhjZXJwdCB3aWxsIGJlIGVtcHR5 LiBUaGlzIGlzIGEgbGltaXRhdGlvbiBvZiBzZWFyY2hfcmVzdWx0X2V4Y2VycHQsIG5vdCB0 aGUgcGx1Z2luIGRpcmVjdGx5LjwvcD4KCjxoMyBpZD0ibm9tYXRjaGxhYmVsIj48Y29kZT5u b19tYXRjaF9sYWJlbDwvY29kZT48L2gzPgo8cD5UaGUgcGhyYXNlIHRvIGRpc3BsYXkgd2hl biBubyBtYXRjaGVzIChtYXliZSBub3QgZXZlbiBmdXp6eSBvbmVzISkgYXJlIGZvdW5kLiBE ZWZhdWx0cyB0byB0aGUgTUxQIHN0cmluZyAnbm9fbWF0Y2gnLiBVc2UgPGNvZGU+bm9fbWF0 Y2hfbGFiZWw9IiI8L2NvZGU+IHRvIHR1cm4gaXQgb2ZmLjwvcD4KCjxoMyBpZD0ic3VnZ2Vz dGxhYmVsIj48Y29kZT5zdWdnZXN0X2xhYmVsPC9jb2RlPjwvaDM+CjxwPlRoZSBwaHJhc2Ug dG8gZGlzcGxheSBpbW1lZGlhdGVseSBwcmlvciB0byBzaG93aW5nIGNsb3NlLW1hdGNoaW5n IGFydGljbGVzL3dvcmRzLiBEZWZhdWx0cyB0byB0aGUgTUxQIHN0cmluZyAnc3VnZ2VzdCcu IFVzZSA8Y29kZT5zdWdnZXN0X2xhYmVsPSIiPC9jb2RlPiB0byBzd2l0Y2ggaXQgb2ZmLjwv cD4KCjxoMyBpZD0idG9vc2hvcnRsYWJlbCI+PGNvZGU+dG9vX3Nob3J0X2xhYmVsPC9jb2Rl PjwvaDM+CjxwPlNlYXJjaGVzIG9mIHVuZGVyIGFib3V0IDMgY2hhcmFjdGVycyAoc29tZXRp bWVzIG1vcmUgZGVwZW5kaW5nIG9uIHlvdXIgY29udGVudCkgYXJlIHRvbyBzaG9ydCBmb3Ig YW55IHJlYXNvbmFibGUgZnV6emluZXNzIHRvIGJlIGFwcGxpZWQuIFRoaXMgbWVzc2FnZSBp cyBkaXNwbGF5ZWQgaW4gdGhhdCBjaXJjdW1zdGFuY2UuIERlZmF1bHRzIHRvIHRoZSBNTFAg c3RyaW5nIHRvb19zaG9ydC4gVXNlIDxjb2RlPnRvb19zaG9ydF9sYWJlbD0iIjwvY29kZT4g dG8gc3dpdGNoIGl0IG9mZi48L3A+Cgo8aDMgaWQ9ImxhYmVsdGFnIj48Y29kZT5sYWJlbHRh ZzwvY29kZT48L2gzPgo8cD5UaGUgSFRNTCB0YWcgdG8gd3JhcCBhbnkgbGFiZWwgaW4uIERl ZmF1bHRzIHRvICJwIi48L3A+Cgo8aDIgaWQ9ImV4YW1wbGUiPkV4YW1wbGUgdXNhZ2U8L2gy Pgo8cD5TaW5jZSBpdCdzIG5vdCBhIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIGJ1aWx0 LWluIHNlYXJjaCAoVFhQIHdpbGwgY29tcGxhaW4gaWYgeW91IGRvIG5vdCBpbmNsdWRlIGFu IGFydGljbGUgd2l0aGluIGFuIGlmX3NlYXJjaCB0YWcpIHRoZSBiZXN0IHdheSB0byB1c2Ug aXQgaXMgaW4gY29uanVuY3Rpb24gd2l0aCA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBh dHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTQxNjMiPmNoaF9pZl9kYXRhPC9hPiBpbiBh IHBhZ2UgbGlrZSB0aGlzOjwvcD4KPHByZT4KJmx0O3R4cDppZl9zZWFyY2gmZ3Q7CiAgJmx0 O3R4cDpjaGhfaWZfZGF0YSZndDsKICAgICZsdDtkbCBjbGFzcz0iZXhjZXJwdHMiJmd0Owog ICAgICAmbHQ7dHhwOmFydGljbGUgbGltaXQ9IjgiIGxpc3Rmb3JtPSJleGNlcnB0cyIgLyZn dDsKICAgICZsdDsvZGwmZ3Q7CiAgJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICAmbHQ7ZGwgY2xh c3M9ImV4Y2VycHRzIiZndDsKICAgICAgJmx0O3R4cDpzbWRfZnV6enlfZmluZCBmb3JtPSJl eGNlcnB0cyIgLyZndDsKICAgICZsdDsvZGwmZ3Q7CiAgJmx0Oy90eHA6Y2hoX2lmX2RhdGEm Z3Q7CiZsdDsvdHhwOmlmX3NlYXJjaCZndDsKPC9wcmU+CjxwPlNvIGluIHRoZSBjYXNlIGFu IGV4YWN0IHRlcm0gaXMgZm91bmQsIHRoZSBub3JtYWwgVFhQIHNlYXJjaCBpcyBjYWxsZWQu IElmIGFuIGV4YWN0IHNlYXJjaCB0ZXJtIGlzIG5vdCBmb3VuZCwgc21kX2Z1enp5X2ZpbmQg d2lsbCBoYXZlIGEgZ28uPC9wPgoKPGgyIGlkPSJpc3N1ZXMiPktub3duIGlzc3VlczwvaDI+ CjxwPkhlcmUncyBhIGxpc3Qgb2YgY3VycmVudGx5IGtub3duIGZvaWJsZXMgd2l0aCB0aGUg cGx1Z2luLiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIGZpeGVzIGZvciB0aGVz ZSwgcGxlYXNlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+ c2VuZCB0aGVtIG92ZXI8L2E+LCB0aGFua3MuPC9wPgo8dWw+CjxsaT5TZWFyY2hpbmcgZm9y IGEgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhw P3BpZD0xNDUxMzUjcDE0NTEzNSI+d29yZCB3aXRoIGFuIGFwb3N0cm9waGU8L2E+IGluIGl0 IGNhdXNlcyBvZGQgY2hhcmFjdGVyIGVuY29kaW5nLjwvbGk+CjxsaT5TZWFyY2hpbmcgZm9y IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9w aWQ9MTU1MDI0I3AxNTUwMjQiPm11bHRpcGxlIHdvcmRzPC9hPiBjYW4gbGVhZCB0byBvZGQg cmVzdWx0cy48L2xpPgo8bGk+U29tZXRpbWVzIHRoZXJlIGFyZSA8YSBocmVmPSJodHRwOi8v Zm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTE2MjY3NyNwMTYyNjc3 Ij5vZGQgYWx0ZXJuYXRpdmUgc3VnZ2VzdGlvbnM8L2E+IHRocm93biB1cCB3aGVyZSBpdCB3 aWxsIHBpY2sgbG9uZ2VyLCBvciBwYXJ0LXdvcmRzIG92ZXIgb25lcyB0aGF0IHdlIHdvdWxk IGFzc3VtZSB0byBiZSAiYmV0dGVyIiBzZWxlY3Rpb25zLiBUaGlzIGlzIHByb2JhYmx5IGEg ZmF1bHQgd2l0aCBzbWRfZ2V0V29yZCAoaW4gc21kX2xpYikgYnV0IEkgaGF2ZW4ndCBuYWls ZWQgaXQgZG93biB5ZXQuPC9saT4KPC91bD4KCjxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gyPgo8dWw+CjxsaT4yNiBNYXIgMDcgfCA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vZG93bmxvYWRzL3NtZF9mdXp6eV9maW5kX3YwLjAxLnR4dCI+djAuMDE8L2E+IHwg SW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CjxsaT4zMSBNYXIgMDcgfCA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9mdXp6eV9maW5kX3YwLjAyLnR4dCI+ djAuMDI8L2E+IHwgRml4ZWQgY2FzZSBzZW5zaXRpdml0eS4gU3BlZCB1cCBhbmQgaW1wcm92 ZWQgd29yZGxpc3QgZ2VuZXJhdGlvbi4gQWRkZWQgcmVmaW5lIGF0dHJpYnV0ZSB0byBzd2l0 Y2ggb2ZmIHNvdW5kZXgvbWV0YXBob25lIGlmIHJlcXVpcmVkPC9saT4KPGxpPjA2IEF1ZyAw NyB8IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2Z1enp5 X2ZpbmRfdjAuMDMudHh0Ij52MC4wMzwvYT4gfCBGaXhlZDogbXVsdGktd29yZCBzZWFyY2hp bmcgKHNtZF9nZXRXb3JkIGJ1ZykgYW5kIHNlYXJjaF9yZXN1bHRfZXhjZXJwdC4gQWRkZWQg Y2F0ZWdvcnkgYW5kIHN0YXR1cyBzdXBwb3J0LjwvbGk+CjxsaT4zMCBEZWMgMDcgfCA8YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9mdXp6eV9maW5kX3Yw LjEuemlwIj52MC4xPC9hPiB8IE9mZmljaWFsIGZpcnN0IHJlbGVhc2UuIEFkZGVkIGxhYmVs dGFnIGFuZCBjdXN0b20gZmllbGQgc3VwcG9ydC4gRml4ZWQgYmFkIGNvdW50aW5nIGluIGxp bWl0IGF0dHJpYnV0ZSAodGhhbmtzIEVscyk8L2xpPgo8bGk+MjMgSmFuIDA4IHwgPGEgaHJl Zj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfZnV6enlfZmluZF92MC4x MS50eHQiPnYwLjExPC9hPiB8IEZpeGVkOiBNTFBpbmcgc29tZSBzdHJpbmdzIGJyb2tlIHRo ZSBwbHVnaW4gKHRoYW5rcyBFbHMpPC9saT4KPC91bD4KCjxoMiBpZD0iY3JlZGl0cyI+Q3Jl ZGl0czwvaDI+CjxwPlRoaXMgcGx1Z2luIHdvdWxkbid0IGhhdmUgZXhpc3RlZCB3aXRob3V0 IHRoZSBvcmlnaW5hbCA8YSBocmVmPSJodHRwOi8vZWxvbmVuLmlraS5maS9jb2RlL21pc2Mt bm90ZXMvYXBwci1zZWFyY2gtcGhwL2luZGV4Lmh0bWwiPkZ1enp5IEZpbmQgYWxnb3JpdGht IGJ5IEphcm5vIEVsb25lbjwvYT4uIEFsbCBrdWRvcyB0byBoaW0sIEkganVzdCB3aXNoIEkg dW5kZXJzdG9vZCBob3cgdGhlIGNvZGUgd29ya2VkIDotKSBBbHNvLCBleHRlbmRlZCB0aGFu a3MgdG8gdGhlIGJldGEgdGVzdGVycywgZXNwZWNpYWxseSBFbHMgTGVwZWxhYXJzIGZvciBm ZWVkYmFjayBhbmQgdW5lbmRpbmcgcGF0aWVuY2UgZHVyaW5nIGRldmVsb3BtZW50LiBBbmQg b2YgY291cnNlIFRlYW0gVGV4dFBhdHRlcm4gZm9yIHRoZSBiZXN0IENNUyBvbiB0aGUgcGxh bmV0LjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+CmNvZGUge2NvbG9yOiAjMjA0NjZmfQpwcmUge3BhZGRpbmc6IDAuNWVt IDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQpoMSwg aDIsIGgzLCBoMyBjb2RlIHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6 IGJvbGQ7fQpoMSwgaDIsIGgzIHttYXJnaW4tbGVmdDogLTFlbTt9CmgyLCBoMyB7bWFyZ2lu LXRvcDogMmVtO30KaDEge2ZvbnQtc2l6ZTogM2VtO30KaDIge2ZvbnQtc2l6ZTogMmVtO30K aDMge2ZvbnQtc2l6ZTogMS41ZW07fQpsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7 fQoucmVxdWlyZWQsIC53YXJuaW5nIHtjb2xvcjpyZWQ7fQojZWd0YWIgdGQsI2VndGFiIHRo IHtwYWRkaW5nOi43ZW07IGJvcmRlcjoxcHggc29saWQgIzg4ODt0ZXh0LWFsaWduOmNlbnRl cjt9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSAtLT4KIjtzOjM6Im1k NSI7czozMjoiN2E0MjNjNTNlZTc3ZWRmNDQ0ZjIyNTVmM2YzNDM3NzMiO30=