# jk_sqlicious v0.2 # Makes use of Del.icio.us bookmarks through Mysqlicious # Jeff Khonsary # http://fillip.ca # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjY6ImF1dGhvciI7czoxMzoiSmVmZiBL aG9uc2FyeSI7czoxMDoiYXV0aG9yX3VyaSI7czoxNjoiaHR0cDovL2ZpbGxpcC5jYSI7czox MToiZGVzY3JpcHRpb24iO3M6MTExOiJNYWtlcyB1c2Ugb2YgRGVsLmljaW8udXMgYm9va21h cmtzIHRocm91Z2ggPGEgaHJlZj0iaHR0cDovL25hbm92aXZpZC5jb20vcHJvamVjdHMvbXlz cWxpY2lvdXMvIj5NeXNxbGljaW91czwvYT4iO3M6NDoidHlwZSI7aTowO3M6NDoibmFtZSI7 czoxMjoiamtfc3FsaWNpb3VzIjtzOjQ6ImhlbHAiO3M6MzE0MjoiCgk8cD5BbHRob3VnaCB0 aGVyZSBhcmUgYSBmZXcgZGVsLmljaW8udXMgVGV4dHBhdHRlcm4gcGx1Z2lucyBvdXQgdGhl cmUsIG1vc3QgdXNlIFJTUyB0byBkaXNwbGF5IGxpbmtzLiBXaGlsZSBncmVhdCBmb3IgbWFu eSB0aGluZ3MsIGZlZWRpbmcgbGlua3MgdGhyb3VnaCBSU1MgaXMgYSBiaXQgc2xvdy4gRW50 ZXIgPGEgaHJlZj0iaHR0cDovL25hbm92aXZpZC5jb20vcHJvamVjdHMvbXlzcWxpY2lvdXMv Ij5NeXNxbGljaW91czwvYT4sIGEgcGhwIHNjcmlwdCB0aGF0IGltcG9ydHMgbGlua3MgaW50 byBhIG15c3FsIGRhdGFiYXNlIGZyb20gZGVsaWNpb3VzLCBhbmQgY2FuIGJlIHNldCB0byBy dW4gb24gYSBjcm9uIGpvYi4gIFRoaXMgcGx1Z2luLCBqa19zcWxpY2lvdXMsIHRhcHMgaW50 byB0aGUgZnVuY3Rpb25hbGl0eSBvZiBNeXNxbGljaW91cyB0byBkaXNwbGF5IGJvdGggbGlu a3MgYW5kIHRhZ3MgaW4geW91ciBkZWxpY2lvdXMgYWNjb3VudC4gSXQgaXMgcHJvYmFibHkg bW9zdCB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgbGFyZ2VyIG51bWJlcnMgb2Ygc29ydGVkIGxp bmtzLjwvcD4KCgk8cD5Vc2FnZSBvZiB0aGlzIHBsdWdpbiBkZXBlbmRzIG9uIGEgd29ya2lu ZyBpbnN0YWxsYXRpb24gb2YgTXlzcWxpY2lvdXMsIGFuZCBhIHRhYmxlIG9mIGxpbmtzLCAm IzgyMjA7ZGVsaWNpb3VzJiM4MjIxOywgd2l0aGluIHlvdXIgVGV4dHBhdHRlcm4gZGF0YWJh c2UuICBEaXNwbGF5IG9mIGxpbmtzIHVzZXMgYSBxdWVyeSBzdHJpbmcgcGFzc2VkIHZpYSB0 aGUgVVJMLCBhbmQgbWF5IGJyZWFrIGlmIHlvdSBoYXZlIG90aGVyIHBsdWlnaW5zIHJ1bm5p bmcgdGhhdCBhbHRlciB0aGUgcXVlcnkgc3RyaW5nIG9yIGRvIG5vdCB1c2UgY2xlYW4gVVJM cy4gIElmIHlvdSBmaW5kIHNvbWUgdXNlIGluIHRoaXMgcGx1Z2luLCBjb25zaWRlciBtYWtp bmcgYSBkb25hdGlvbiB0byBvdXIgcHVibGlzaGluZyBwcm9qZWN0IDxhIGhyZWY9Imh0dHA6 Ly9maWxsaXAuY2EiPkZpbGxpcDwvYT4mIzgyMTI7ZG9uYXRpb25zIHdpbGwgZW5jb3VyYWdl IGRldmVsb3BtZW50IG9mIHRoaXMgcGx1Z2luIGJleW9uZCBteSBvd24gbmVlZHMuPC9wPgoK CTxwPkZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czo8L3A+CgoJPGJyLz48YnIgLz4KCgk8aDQ+ c3FsaWNpb3VzX2xpbmtzPC9oND4KCgk8cD5JZiBhIHRhZyBvciB0YWcgaXMgc2V0LCB0aGlz IGZ1bmN0aW9uIHdpbGwgZGlzcGxheSB0aGUgYXNzb2NpYXRlZCBsaW5rcyBpbiBhbiBvcmRl cmVkIGxpc3QuIEF0dHJpYnV0ZXMgaW5jbHVkZTogPHN0cm9uZz5kZWZhdWx0X3RhZzwvc3Ry b25nPiwgPHN0cm9uZz5saW1pdDwvc3Ryb25nPiwgPHN0cm9uZz5mb3JtPC9zdHJvbmc+LCBh bmQgPHN0cm9uZz5zb3J0Ynk8L3N0cm9uZz4uIFNvcnRieSBjYW4gYmUgc2V0IGVpdGhlciB0 aXRsZSBvciBkYXRlLjwvcD4KCgk8YnIvPgoKCTxoND5zcWxpY2lvdXNfbGlua3NfY291bnQ8 L2g0PgoKCTxwPlRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHRvdGFsIG51bWJlciBvZiBs aW5rcyBpbiB0aGUgZGF0YWJhc2UuPC9wPgoKCTxici8+CgoJPGg0PnNxbGljaW91c190YWdz PC9oND4KCgk8cD5UaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSB0YWdzIHN0b3JlZCBpbiB0 aGUgc3lzdGVtIGFzIGFuIGFscGhhYmV0aWNhbCBvcmRlcmVkIGxpc3QuIEF0dHJpYnV0ZXMg aW5jbHVkZTogPHN0cm9uZz5leGNsdWRlPC9zdHJvbmc+LCA8c3Ryb25nPmJ1bmRsZXI8L3N0 cm9uZz4sIDxzdHJvbmc+c3BhY2VyPC9zdHJvbmc+LCA8c3Ryb25nPmxpbWl0PC9zdHJvbmc+ LjwvcD4KCgk8cD48c3Ryb25nPmV4Y2x1ZGU8L3N0cm9uZz4gd2lsbCBleGNsdWRlIGFueSB0 YWcgdGhhdCBjb250YWlucyB0aGUgY2hhcmFjdGVyIG9mIHN5bWJvbC48L3A+CgoJPHA+PHN0 cm9uZz5idW5kbGVyPC9zdHJvbmc+IGF0dGVtcHRzIHRvIGJ1bmRsZSB0YWdzIGJhc2VkIG9u IHRhZyBuYW1lLiBJbiB0aGUgYWJzZW5jZSBvZiBhIHdheSBvZiBhY2Nlc3NpbmcgYWN0dWFs IGJ1bmRsZXMgdmlhIHRoZSBkZWxpY2lvdXMgQVBJLCB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVz IGEgZmFpcmx5IHJpZ2lkIG5hbWluZyBzY2hlbWUgdGhhdCB1c2UgYSBjaGFyYWN0ZXIgKGEg cGVyaW9kIG9yIGh5cGhlbiwgZm9yIGV4YW1wbGUpIHRvIHNlcGFyYXRlIGEgaGllcmFyY2h5 IG9mIHRhZ3MuICBJdCBhaW4mIzgyMTc7dCBwZXJmZWN0LCBidXQgaXQgd29ya3MuICBFeGFt cGxlLCB1c2luZyAmIzgyMjE7LiYjODIyMTsgYXMgdGhlIGJ1bmRsZXI6IGNtcy50ZXh0cGF0 dGVybiwgY21zLnRleHRwYXR0ZXJuLnBsdWdpbnMsIGNtcy53b3JkcHJlc3MsIGNtcy53b3Jk cGF0dGVybi48L3A+CgoJPGJyLz4KCgk8aDQ+c3FsaWNpb3VzX3JlbGF0ZWRfdGFnczwvaDQ+ CgoJPHA+VGhpcyBhdHRlbXB0cyB0byB1c2UgdGhlIG5hbWluZyBzY2hlbWUgb2YgeW91ciB0 YWdzIHRvIGRpc3BsYXkgdGFncyByZWxhdGVkIHRvIHRob3NlIGN1cnJlbnRseSBiZWluZyBk aXNwbGF5ZWQuIFJlbGF0ZWQgdGFncyBhcmUgZGlzcGxheWVkIGFzIHVuLWFscGhhYmV0aWNh bCBvcmRlcmVkIGxpc3QuIEF0dHJpYnV0ZXMgaW5jbHVkZTogPHN0cm9uZz5kZWZhdWx0X3Rh Zzwvc3Ryb25nPiwgPHN0cm9uZz5leGNsdWRlPC9zdHJvbmc+LCA8c3Ryb25nPnNwYWNlcjwv c3Ryb25nPiwgPHN0cm9uZz5saW1pdDwvc3Ryb25nPi48L3A+CgoJPGg0PnNxbGljaW91c19p Zl90YWdzPC9oND4KCgk8cD5JZiBhIHRhZyBoYXMgYmVlbiBzZXQgdmlhIHRoZSBVUkwsIHRo aXMgZnVuY3Rpb24gd2lsbCBvdXRwdXQgd2hhdCBpcyBjb250YWluZWQgd2l0aGluIHRoZSB3 cmFwcGVyLiBBdHRyaWJ1dGVzIGluY2x1ZGU6IDxzdHJvbmc+ZWxzZTwvc3Ryb25nPi48L3A+ CgoJPGJyLz4KCgk8aDQ+c3FsaWNpb3VzX2N1cnJlbnRfdGFnczwvaDQ+CgoJPHA+SWYgYSB0 YWcgb3IgdGFncyBoYXZlIGJlZW4gc2V0IHZpYSB0aGUgVVJMLCB0aGlzIGZ1bmN0aW9uIHdp bGwgZGlzcGxheSB0aGVtIGFzIGFuIG9yZGVyZWQgbGlzdC4gRWFjaCB0YWcgZGlzcGxheWVk IGNhbiB0aGVuIGJlIGNsaWNrZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIHRoZSBVUkwuIEF0 dHJpYnV0ZXMgaW5jbHVkZTogPHN0cm9uZz5zcGFjZXI8L3N0cm9uZz4uPC9wPgoKCiI7czo0 OiJjb2RlIjtzOjc3NzI6IgpmdW5jdGlvbiBhZGRfdGFnKCR0YWcsICRzcGFjZXI9JycpIHsK ICAkdGFnID0gc3RyX3JlcGxhY2UoJyAnLCAkc3BhY2VyLCAkdGFnKTsKICAkdXJsID0naHR0 cDovLycuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwog ICR0YWdzID0gZ3BzKCd0YWdzJyk7CiAgaWYgKCFzdHJwb3MoJHVybCwgJHRhZykpIHsKICAg ICR1cmwgPSAkdXJsLiIrJHRhZyI7CiAgfQogIHJldHVybiAkdXJsOwp9CgpmdW5jdGlvbiBz dWJ0cmFjdF90YWcoJHRhZykgewogICR1cmwgPSdodHRwOi8vJy4kX1NFUlZFUlsnSFRUUF9I T1NUJ10uJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgJHRhZ3MgPSBncHMoJ3RhZ3MnKTsK ICBpZiAoc3RycG9zKCR1cmwsICR0YWcpKSB7CiAgICAkdXJsID0gc3RyX3JlcGxhY2UoICIr JHRhZyIsICcnLCAkdXJsKTsKICAgICR1cmwgPSBzdHJfcmVwbGFjZSgkdGFnLCAnJywgJHVy bCk7CiAgICAkdXJsID0gc3RyX3JlcGxhY2UoJz0rJywgJz0nLCAkdXJsKTsKICB9CiAgcmV0 dXJuICR1cmw7Cn0KCmZ1bmN0aW9uIG5ld190YWcoJHRhZykgewogICR1cmwgPSdodHRwOi8v Jy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgJHVy bCA9IHByZWdfcmVwbGFjZSgnL1w/KC4qKS8nLCcnLCR1cmwpOwogICR1cmwgPSAkdXJsLic/ dGFncz0nLiR0YWc7CiAgcmV0dXJuICR1cmw7Cn0KCmZ1bmN0aW9uIHNxbGljaW91c19jdXJy ZW50X3RhZ3MoJGF0dHMpIHsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAnb3V0cHV0JyA9 PiAxLAogICAgJ3NwYWNlcicgPT4gJycKICAgICApLCRhdHRzKSk7CgogIAkvLyBncmFiIHRo ZSB0YWdzCiAgICAkdGFncyA9IGdwcygndGFncycpOwoKICAgIGlmICghZW1wdHkoJHRhZ3Mp KSB7CiAgICAgICR0YWdzID0gZXhwbG9kZSgnICcsICR0YWdzKTsKICAgICAgc29ydCgkdGFn cyk7CgogICAgICBpZiAoJG91dHB1dCkgewogICAgICAgIGZvcmVhY2ggKCR0YWdzIGFzICR0 YWcpIHsKICAgICAgICAgICRvdXRbXSA9IGhyZWYoc3RyX3JlcGxhY2UoJHNwYWNlciwgJyAn LCAkdGFnKSwgc3VidHJhY3RfdGFnKCR0YWcpKTsKICAgICAgICB9CiAgICAgICAgJHRhZ3Mg PSBkb1dyYXAoJG91dCwgJ29sJywgJ2xpJywgJ2N1cnJlbnQtdGFncycpOwogICAgICB9CiAg ICAgIHJldHVybiAkdGFnczsKICAgIH0KICAgIGVsc2VpZiAoISRvdXRwdXQpIHJldHVybiBh cnJheSgpOwogICAgZWxzZSByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHNxbGljaW91c19s aW5rcygkYXR0cykgewoJZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICdsaW1pdCcgPT4gMTAw MCwKICAgICdkZWZhdWx0X3RhZycgPT4gJycsCiAgICAnc29ydGJ5JyA9PiAndGl0bGUnLAog ICAgJ2Zvcm0nID0+ICdwbGFpbmxpbmtzJywKCQkpLCRhdHRzKSk7CgogICR0YWdzID0gc3Fs aWNpb3VzX2N1cnJlbnRfdGFncyhhcnJheSgnb3V0cHV0Jz0+MCkpOwogIGlmKGVtcHR5KCR0 YWdzKSkgewogICAgJHRhZ3MgPSBhcnJheSgkZGVmYXVsdF90YWcpOwogIH0KCiAgICBmb3Jl YWNoKCR0YWdzIGFzICR0YWcpIHsKICAgICAgJHF1ZXJ5W10gPSAiVFJJTShsZWFkaW5nICd+ JyBmcm9tIHRhZ3MpIExJS0UgJyUkdGFnJSciOwogICAgfQoKICAgIGlmICgkc29ydGJ5ID09 ICdkYXRlJykgJG9yZGVyID0gIk9SREVSIEJZIGRhdGUgQVNDICI7CiAgICBlbHNlICRvcmRl ciA9ICJPUkRFUiBCWSBUUklNKGxlYWRpbmcgJ1RoZSAnIGZyb20gZGVzY3JpcHRpb24pIEFT QyAiOwoKICAgICRsaW5rcyA9IHNhZmVfcm93cygnZGVzY3JpcHRpb24sIHVybCwgZXh0ZW5k ZWQnLCdkZWxpY2lvdXMnLGpvaW4oJyBBTkQgJywgJHF1ZXJ5KS4kb3JkZXIuIiBMSU1JVCAk bGltaXQiKTsKICAgICRmb3JtID0gZmV0Y2goJ0Zvcm0nLCd0eHBfZm9ybScsJ25hbWUnLCRm b3JtKTsKCiAgCWlmKCEkZm9ybSkgeyByZXR1cm4gJ05vIGZvcm0gc3BlY2lmaWVkJzsgfQoK ICAgIGVsc2VpZighZW1wdHkoJGxpbmtzKSkgewogICAgICBmb3JlYWNoKCRsaW5rcyBhcyAk aXRlbSkgewogICAgICAgICRsaW5rbmFtZSA9IGh0bWxlbnRpdGllcygkaXRlbVsnZGVzY3Jp cHRpb24nXSk7CiAgICAgICAgJHVybCA9ICRpdGVtWyd1cmwnXTsKICAgICAgICAkZGVzY3Jp cHRpb24gPSBpc3NldCgkaXRlbVsnZXh0ZW5kZWQnXSkgPyBodG1sZW50aXRpZXMoJGl0ZW1b J2Rlc2NyaXB0aW9uJ10pIDogJyc7CgogICAgICAgICRsaW5rID0gJzxhIGhyZWY9IicuJHVy bC4nIj4nLiRsaW5rbmFtZS4nPC9hPic7CiAgICAgICAgJGxpbmtkZXNjdGl0bGUgPSAnPGEg aHJlZj0iJy4kdXJsLiciIHRpdGxlPSInLiRkZXNjcmlwdGlvbi4nIj4nLiRsaW5rbmFtZS4n PC9hPic7CiAgICAgICAgJG91dCA9IHN0cl9yZXBsYWNlKCI8dHhwOmxpbmsgLz4iLCAkbGlu aywgJGZvcm0pOwogICAgICAgICRvdXQgPSBzdHJfcmVwbGFjZSgiPHR4cDpsaW5rX3VybCAv PiIsICR1cmwsICRvdXQpOwogICAgICAgICRvdXQgPSBzdHJfcmVwbGFjZSgiPHR4cDpsaW5r X2Rlc2NyaXB0aW9uIC8+IiwgJGRlc2NyaXB0aW9uLCAkb3V0KTsKCiAgICAgICAgJG91dGxp c3RbXSA9ICRvdXQ7CiAgICAgIH0KCiAgICAgIGlmICghZW1wdHkoJG91dGxpc3QpKSB7CiAg ICAgICAgcmV0dXJuIGRvV3JhcCgkb3V0bGlzdCwgJ29sJywgJ2xpJywgJ2xpbmstcmVzdWx0 cycpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24g c3FsaWNpb3VzX2xpbmtzX2NvdW50KCRhdHRzKSB7CiAgZXh0cmFjdChsQXR0cyhhcnJheSgK ICAgICdsaW1pdCcgPT4gMTAwMCwKICAgICdkZWZhdWx0X3RhZycgPT4gJycsCiAgICAndG90 YWwnID0+IDAsCgkJKSwkYXR0cykpOwoKICBpZiAoISR0b3RhbCkgewoKICAkdGFncyA9IHNx bGljaW91c19jdXJyZW50X3RhZ3MoYXJyYXkoJ291dHB1dCc9PjApKTsKICBpZihlbXB0eSgk dGFncykpIHsKICAgICR0YWdzID0gYXJyYXkoJGRlZmF1bHRfdGFnKTsKICB9CgogICAgZm9y ZWFjaCgkdGFncyBhcyAkdGFnKSB7CiAgICAgICRxdWVyeVtdID0gInRhZ3MgTElLRSAnJSR0 YWclJyI7CiAgICB9CgogICAgJGNvdW50ID0gc2FmZV9jb3VudCgnZGVsaWNpb3VzJyxqb2lu KCcgQU5EICcsICRxdWVyeSkuIkxJTUlUICRsaW1pdCIpOwogIH0KCiAgZWxzZSAgJGNvdW50 ID0gc2FmZV9jb3VudCgnZGVsaWNpb3VzJywnaWQgaXMgbm90IE5VTEwnKTsKCiAgcmV0dXJu ICRjb3VudDsKfQoKZnVuY3Rpb24gc3FsaWNpb3VzX3JlbGF0ZWRfdGFncygkYXR0cykgewog IGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAnZGVmYXVsdF90YWcnID0+ICcnLAogICAgJ3Nw YWNlcicgPT4gJy0nLAogICAgJ2xpbWl0JyA9PiAnMjUnLAogICAgJ2J1bmRsZXInID0+ICcg JywKCQkpLCRhdHRzKSk7CgogICR0YWdzID0gc3FsaWNpb3VzX2N1cnJlbnRfdGFncyhhcnJh eSgnb3V0cHV0Jz0+MCkpOwogIGlmKGVtcHR5KCR0YWdzKSkgewogICAgJHRhZ3MgPSBhcnJh eSgkZGVmYXVsdF90YWcpOwogIH0KCiAgZm9yZWFjaCgkdGFncyBhcyAkdGFnKSB7CiAgICAk cXVlcnlbXSA9ICJ0YWdzIExJS0UgJyUkdGFnJSciOwogIH0KCiAgJHJzID0gZ2V0VGhpbmdz KCJTRUxFQ1QgRElTVElOQ1QgdGFncyBGUk9NIGRlbGljaW91cyBXSEVSRSAiLmpvaW4oJyBB TkQgJywgJHF1ZXJ5KS4iIExJTUlUICRsaW1pdCIpOwoKICBpZiAoIWVtcHR5KCRycykpIHsK ICAgIGZvcmVhY2ggKCRycyBhcyAkcm93KSB7CiAgICAgICRyb3cgPSBleHBsb2RlKCcgJywg dHJpbSgkcm93KSk7CiAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJHJfdGFncykgewogICAgICAg ICRyX3RhZ3MgPSBleHBsb2RlKCRidW5kbGVyLCAkcl90YWdzKTsKICAgICAgICBmb3JlYWNo ICgkcl90YWdzIGFzICRyX3RhZykgewogICAgICAgICAgJHJlbGF0ZWRfdGFnc1tdID0gJHJf dGFnOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgaWYgKCFlbXB0eSgkcmVsYXRl ZF90YWdzKSkgewogICAgJHJlbGF0ZWRfdGFncyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlx dWUoJHJlbGF0ZWRfdGFncykpOwogICAgZm9yICgkaT0wOyAkaSA8IGNvdW50KCRyZWxhdGVk X3RhZ3MpOyAkaSsrKSB7CiAgICAgICRyZWxhdGVkX3RhZ3NbJGldID0gc3RyX3JlcGxhY2Uo J34nLCAnJywgJHJlbGF0ZWRfdGFnc1skaV0pOwogICAgICBpZiAoIWluX2FycmF5KCRyZWxh dGVkX3RhZ3NbJGldLCAkdGFncykpIHsKICAgICAgICAgICRyZWxhdGVkX3RhZ3NbJGldID0g c3RyX3JlcGxhY2UoJHNwYWNlciwgJyAnLCAkcmVsYXRlZF90YWdzWyRpXSk7CiAgICAgICAg ICAkb3V0bGlzdFtdID0gJHJlbGF0ZWRfdGFnc1skaV07CiAgICAgIH0KICAgIH0KICAgIGlm ICghZW1wdHkoJG91dGxpc3QpKSB7CiAgICAgICRvdXRsaXN0ID0gYXJyYXlfdW5pcXVlKCRv dXRsaXN0KTsKICAgICAgbmF0Y2FzZXNvcnQoJG91dGxpc3QpOwogICAgICAkb3V0bGlzdCA9 IGFycmF5X3ZhbHVlcygkb3V0bGlzdCk7CiAgICAgIGZvciAoJGk9MDsgJGkgPCAkbGltaXQ7 ICRpKyspIHsKICAgICAgICAgICRvdXRbXSA9ICB0YWcoaHJlZigkb3V0bGlzdFskaV0sIGFk ZF90YWcoJG91dGxpc3RbJGldLCAkc3BhY2VyKSksICdsaScpOwogICAgICB9CiAgICAgICRv dXQgPSAnPG9sIGNsYXNzPSJyZWxhdGVkLXRhZ3MiPicuaW1wbG9kZShuLCAkb3V0KS5uLic8 L29sPic7CiAgICAgIHJldHVybiAkb3V0OwogICAgfQogICAgZWxzZSByZXR1cm4gZmFsc2U7 CiAgfQogIGVsc2UgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBzcWxpY2lvdXNfdGFncygk YXR0cywgJHRoaW5nKSB7CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdsaW1pdCcgPT4gIjEw MCIsCiAgICAgICAgJ2V4Y2x1ZGUnID0+ICdzeXN0ZW0nLAogICAgICAgICdzcGFjZXInID0+ ICcnLAogICAgICAgICdjb2x1bW5zJyA9PiBmYWxzZSwKICAgICAgICAnYnVuZGxlcicgPT4g JycsCgkJKSwkYXR0cykpOwoKICAgIGlmICghZW1wdHkoJGV4Y2x1ZGUpKSB7CiAgICAkZXhj bHVkZSA9IGV4cGxvZGUoJywnLCAkZXhjbHVkZSk7CiAgICBmb3JlYWNoKCRleGNsdWRlIGFz ICRleGNsdWRlZF90YWcpIHsKICAgICAgJHF1ZXJ5W10gPSAidGFncyBOT1QgTElLRSAnJSIu dHJpbSgkZXhjbHVkZWRfdGFnKS4iJSciOwogICAgfQogICAgJGV4Y2x1ZGUgPSAnQU5EICcu am9pbignIEFORCAnLCAkcXVlcnkpOwogICAgfQogICAgZWxzZSAkZXhjbHVkZSA9ICcnOwoK ICAgICRycyA9IGdldFRoaW5ncygiU0VMRUNUIERJU1RJTkNUIHRhZ3MgRlJPTSBkZWxpY2lv dXMgV0hFUkUgdGFncyBpcyBub3QgTlVMTCAkZXhjbHVkZSBMSU1JVCAkbGltaXQiKTsKCiAg ICBpZiAoIWVtcHR5KCRycykpIHsKCiAgICAgZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsKICAg ICAgICRyb3cgPSBleHBsb2RlKCcgJywgdHJpbSgkcm93KSk7CiAgICAgICBmb3JlYWNoICgk cm93IGFzICR0YWcpIHsKICAgICAgICAgJHRhZ3NbXSA9ICR0YWc7CiAgICAgICB9CiAgICAg fQoKICAgICAkdGFncyA9IGFycmF5X3VuaXF1ZSgkdGFncyk7CiAgICAgc29ydCgkdGFncyk7 CgogICAgIGlmICghZW1wdHkoJGJ1bmRsZXIpKSB7CiAgICAgICAkb3V0ID0gc3FsaWNpb3Vz X3RhZ3NfYnVuZGxlKCR0YWdzLCAkc3BhY2VyLCAkYnVuZGxlcik7CiAgICAgfQogICAgIGVs c2UgewogICAgICAgZm9yICgkaT0wOyAkaSA8IGNvdW50KCR0YWdzKTsgJGkrKykgewogICAg ICAgICAkb3V0W10gPSB0LnRhZyhocmVmKHN0cl9yZXBsYWNlKCRzcGFjZXIsICcgJywgJHRh Z3NbJGldKSwKICAgICAgICAgICAgICAgICAgICAgIG5ld190YWcoJHRhZ3NbJGldKSksICds aScpOwogICAgICAgfQogICAgIH0KICAgICAkb3V0ID0gbi5pbXBsb2RlKG4sICRvdXQpLm4u Jzwvb2w+JzsKICAgICAkb3V0ID0gc3RyX3JlcGxhY2UoJzwvbGk+Jy5uLic8b2w+Jywgbi4n PG9sPicsICRvdXQpOwogICAgIGlmICgkY29sdW1ucyA9PSB0cnVlKSB7CiAgICAgICAkb3V0 ID0gZXhwbG9kZSgnPC9vbD48L2xpPicsICRvdXQpOwogICAgICAgZm9yICgkaT0wOyAkaSA8 IGNvdW50KCRvdXQpOyAkaSsrKSB7CiAgICAgICAgIGlmICgkaSA9PSBjZWlsKChjb3VudCgk b3V0KS0xKS8yKSApIHsKICAgICAgICAgICAkb3V0WyRpXSA9ICdtaWQ8L29sPjwvbGk+Jy4k b3V0WyRpXTsKICAgICAgICAgIH0KICAgICAgIH0KICAgICAgICRvdXQgPSBpbXBsb2RlKCc8 L29sPjwvbGk+JywgJG91dCk7CiAgICAgICAkb3V0ID0gc3RyX3JlcGxhY2UoJ21pZDwvb2w+ PC9saT4nLCAnPC9vbD48L2xpPicubi4nPC9vbD4nLm4uJzxvbD4nLm4sICRvdXQpOwogICAg IH0KICAgICAkb3V0ID0gc3RyX3JlcGxhY2UoJzwvb2w+PC9saT48L29sPjwvbGk+JywgJzwv b2w+PC9saT4nLCAkb3V0KTsKICAgICByZXR1cm4gJG91dDsKICB9CiAgZWxzZSByZXR1cm4g ZmFsc2U7Cn0KCmZ1bmN0aW9uIHNxbGljaW91c190YWdzX2J1bmRsZSgkdGFncywgJHNwYWNl ciwgJGJ1bmRsZXIpIHsKICAkdW5pcXVlX3RhZ3MgPSBhcnJheSgpOwogIGZvciAoJGk9MDsg JGkgPCBjb3VudCgkdGFncyk7ICRpKyspIHsKICAgICR0YWdzWyRpXSA9IGV4cGxvZGUoJGJ1 bmRsZXIsICR0YWdzWyRpXSk7CiAgfQogIGZvciAoJGk9MDsgJGkgPCBjb3VudCgkdGFncyk7 ICRpKyspIHsKICAgIGlmIChjb3VudCgkdGFnc1skaV0pID4gMSkgewogICAgICBmb3IgKCRq PTA7ICRqIDwgMjsgJGorKykgewogICAgICAgIGlmICghaW5fYXJyYXkoJHRhZ3NbJGldWyRq XSwgJHVuaXF1ZV90YWdzKSkgewogICAgICAgICAgaWYgKEAhYXJyYXlfa2V5X2V4aXN0cygk aiwkdGFnc1skaS0xXSkgfHwKICAgICAgICAgICAgICBAJHRhZ3NbJGldWyRqLTFdICE9PSBA JHRhZ3NbJGktMV1bJGotMV0pIHsKICAgICAgICAgICAgJG91dFtdID0gJzxvbD4nOwogICAg ICAgICAgfQogICAgICAgICAgJG91dFtdID0gdC50YWcoaHJlZihzdHJfcmVwbGFjZSgkc3Bh Y2VyLCAnICcsICR0YWdzWyRpXVskal0pLAogICAgICAgICAgICAgICAgICAgICAgIG5ld190 YWcoJHRhZ3NbJGldWyRqXSkpLCAnbGknKTsKICAgICAgICAgIGlmIChAIWFycmF5X2tleV9l eGlzdHMoJGosJHRhZ3NbJGkrMV0pIHx8CiAgICAgICAgICAgICAgQCR0YWdzWyRpXVskai0x XSAhPT0gQCR0YWdzWyRpKzFdWyRqLTFdKSB7CiAgICAgICAgICAgICRvdXRbXSA9ICc8L29s PjwvbGk+JzsKICAgICAgICAgIH0KICAgICAgICAgICR1bmlxdWVfdGFnc1tdID0gJHRhZ3Nb JGldWyRqXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGVsc2VpZiAoIWluX2FycmF5 KCR0YWdzWyRpXVswXSwgJHVuaXF1ZV90YWdzKSkgewogICAgICAgICAgaWYgKCR0YWdzWyRp XVswXSAhPT0gQCR0YWdzWyRpLTFdWzBdICYmCiAgICAgICAgICAgICAgZW5kKCRvdXQpICE9 PSAnPC9vbD48L2xpPicpIHsKICAgICAgICAgICAgJG91dFtdID0gJzwvb2w+PC9saT4nOwog ICAgICAgICAgfQogICAgICAkb3V0W10gPSB0YWcoaHJlZihzdHJfcmVwbGFjZSgkc3BhY2Vy LCAnICcsICR0YWdzWyRpXVswXSksCiAgICAgICAgICAgICAgICAgICBuZXdfdGFnKCR0YWdz WyRpXVswXSkpLCAnbGknKTsKICAgICAgJHVuaXF1ZV90YWdzW10gPSAkdGFnc1skaV1bMF07 CiAgICB9CiAgfQogIHJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiBzcWxpY2lvdXNfaWZfdGFn cygkYXR0cywgJGVuY2xvc2VkKSB7CiAgaWYgKCFlbXB0eSgkX0dFVFsndGFncyddKSkgewog ICAgICByZXR1cm4gcGFyc2UoJGVuY2xvc2VkKTsKICB9CiAgZWxzZSByZXR1cm4gJGF0dHNb J2Vsc2UnXTsKfQoKIjtzOjM6Im1kNSI7czozMjoiMThkMGRiYTI4OGZlYTA4Yjc3NjEyNTFj ZjIwYjZkMTUiO30=