From eadbfae20efaad7f069bb3588e9a48a92ecef09e Mon Sep 17 00:00:00 2001 From: Nick Nicholas Date: Mon, 29 Jul 2024 22:02:40 +1000 Subject: [PATCH] allow linebreaks in attachment Bin64: https://github.com/metanorma/metanorma-standoc/issues/900 --- spec/isodoc/presentation_xml_metadata_spec.rb | 173 +++++++++++++++++- 1 file changed, 172 insertions(+), 1 deletion(-) diff --git a/spec/isodoc/presentation_xml_metadata_spec.rb b/spec/isodoc/presentation_xml_metadata_spec.rb index f6fa6a96..44f09313 100644 --- a/spec/isodoc/presentation_xml_metadata_spec.rb +++ b/spec/isodoc/presentation_xml_metadata_spec.rb @@ -429,7 +429,178 @@ FileUtils.rm_rf("_test_attachments") input = <<~INPUT - data:text/html;base64,cmVxdWlyZSAidmNyIgoKVkNSLmNvbmZpZ3VyZSBkbyB8Y29uZmlnfAogIGNvbmZpZy5jYXNzZXR0ZV9saWJyYXJ5X2RpciA9ICJzcGVjL3Zjcl9jYXNzZXR0ZXMiCiAgY29uZmlnLmhvb2tfaW50byA6d2VibW9jawogIGNvbmZpZy5kZWZhdWx0X2Nhc3NldHRlX29wdGlvbnMgPSB7CiAgICBjbGVhbl9vdXRkYXRlZF9odHRwX2ludGVyYWN0aW9uczogdHJ1ZSwKICAgIHJlX3JlY29yZF9pbnRlcnZhbDogMTUxMjAwMCwKICAgIHJlY29yZDogOm9uY2UsCiAgfQplbmQKCnJlcXVpcmUgInNpbXBsZWNvdiIKU2ltcGxlQ292LnN0YXJ0IGRvCiAgYWRkX2ZpbHRlciAiL3NwZWMvIgplbmQKCnJlcXVpcmUgImJ1bmRsZXIvc2V0dXAiCnJlcXVpcmUgImFzY2lpZG9jdG9yIgpyZXF1aXJlICJtZXRhbm9ybWEtc3RhbmRvYyIKcmVxdWlyZSAicnNwZWMvbWF0Y2hlcnMiCnJlcXVpcmUgImVxdWl2YWxlbnQteG1sIgpyZXF1aXJlICJtZXRhbm9ybWEvc3RhbmRvYyIKCkRpcltGaWxlLmV4cGFuZF9wYXRoKCIuL3N1cHBvcnQvKiovKiovKi5yYiIsIF9fZGlyX18pXQogIC5zb3J0LmVhY2ggeyB8ZnwgcmVxdWlyZSBmIH0KClJTcGVjLmNvbmZpZ3VyZSBkbyB8Y29uZmlnfAogICMgRW5hYmxlIGZsYWdzIGxpa2UgLS1vbmx5LWZhaWx1cmVzIGFuZCAtLW5leHQtZmFpbHVyZQogIGNvbmZpZy5leGFtcGxlX3N0YXR1c19wZXJzaXN0ZW5jZV9maWxlX3BhdGggPSAiLnJzcGVjX3N0YXR1cyIKCiAgIyBEaXNhYmxlIFJTcGVjIGV4cG9zaW5nIG1ldGhvZHMgZ2xvYmFsbHkgb24gYE1vZHVsZWAgYW5kIGBtYWluYAogIGNvbmZpZy5kaXNhYmxlX21vbmtleV9wYXRjaGluZyEKCiAgY29uZmlnLmV4cGVjdF93aXRoIDpyc3BlYyBkbyB8Y3wKICAgIGMuc3ludGF4ID0gOmV4cGVjdAogIGVuZAoKICBjb25maWcuYXJvdW5kIDplYWNoIGRvIHxleGFtcGxlfAogICAgZXhhbXBsZS5ydW4KICByZXNjdWUgU3lzdGVtRXhpdAogICAgZmFpbCAiVW5leHBlY3RlZCBleGl0IGVuY291bnRlcmVkIgogIGVuZAplbmQKCk9QVElPTlMgPSBbYmFja2VuZDogOnN0YW5kb2MsIGhlYWRlcl9mb290ZXI6IHRydWUsIGFncmVlX3RvX3Rlcm1zOiB0cnVlXS5mcmVlemUKCmRlZiBzdHJpcF9ndWlkKHhtbCkKICB4bWwuZ3N1YiglcnsgaWQ9Il9bXiJdKyJ9LCAnIGlkPSJfIicpCiAgICAuZ3N1YiglcnsgdGFyZ2V0PSJfW14iXSsifSwgJyB0YXJnZXQ9Il8iJykKZW5kCgpkZWYgc3RyaXBfc3JjKHhtbCkKICB4bWwuZ3N1YigvXHNzcmM9IlteIl0rIi8sICcgc3JjPSJfIicpCmVuZAoKWFNMID0gTm9rb2dpcmk6OlhTTFQoPDx+WFNMLmZyZWV6ZSkKICA8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgICA8eHNsOm91dHB1dCBtZXRob2Q9InhtbCIgZW5jb2Rpbmc9IlVURi04IiBpbmRlbnQ9InllcyIvPgogICAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgogICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CiAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4iLz4KICAgIDwveHNsOnRlbXBsYXRlPgogIDwveHNsOnN0eWxlc2hlZXQ+ClhTTAoKZGVmIHhtbHBwKHhtbCkKICBjID0gSFRNTEVudGl0aWVzLm5ldwogIHhtbCAmJj0geG1sLnNwbGl0KC8oJlxTKz87KS8pLm1hcCBkbyB8bnwKICAgIGlmIC9eJlxTKz87JC8ubWF0Y2g/KG4pCiAgICAgIGMuZW5jb2RlKGMuZGVjb2RlKG4pLCA6aGV4YWRlY2ltYWwpCiAgICBlbHNlIG4KICAgIGVuZAogIGVuZC5qb2luCiAgWFNMLnRyYW5zZm9ybShOb2tvZ2lyaTo6WE1MKHhtbCwgJjpub2JsYW5rcykpCiAgICAudG9feG1sKGluZGVudDogMiwgZW5jb2Rpbmc6ICJVVEYtOCIpCiAgICAuZ3N1Yiglcns8ZmV0Y2hlZD5bXjxdKzwvZmV0Y2hlZD59LCAiPGZldGNoZWQvPiIpCiAgICAuZ3N1Yiglcnsgc2NoZW1hLXZlcnNpb249IlteIl0rIn0sICIiKQplbmQKCkFTQ0lJRE9DX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogIDpub2RvYzoKICA6bm92YWxpZDoKICA6bm8taXNvYmliOgogIDpkYXRhLXVyaS1pbWFnZTogZmFsc2UKCkhEUgoKRFVNQlFVT1RFX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogIDpub2RvYzoKICA6bm92YWxpZDoKICA6bm8taXNvYmliOgogIDpzbWFydHF1b3RlczogZmFsc2UKCkhEUgoKSVNPQklCX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogIDpub2RvYzoKICA6bm92YWxpZDoKICA6bm8taXNvYmliLWNhY2hlOgoKSERSCgpGTFVTSF9DQUNIRV9JU09CSUJfQkxBTktfSERSID0gPDx+SERSLmZyZWV6ZQogID0gRG9jdW1lbnQgdGl0bGUKICBBdXRob3IKICA6ZG9jZmlsZTogdGVzdC5hZG9jCiAgOm5vZG9jOgogIDpub3ZhbGlkOgogIDpmbHVzaC1jYWNoZXM6CgpIRFIKCkNBQ0hFRF9JU09CSUJfQkxBTktfSERSID0gPDx+SERSLmZyZWV6ZQogID0gRG9jdW1lbnQgdGl0bGUKICBBdXRob3IKICA6ZG9jZmlsZTogdGVzdC5hZG9jCiAgOm5vZG9jOgogIDpub3ZhbGlkOgoKSERSCgpMT0NBTF9DQUNIRURfSVNPQklCX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogIDpub2RvYzoKICA6bm92YWxpZDoKICA6bG9jYWwtY2FjaGU6CgpIRFIKCkxPQ0FMX09OTFlfQ0FDSEVEX0lTT0JJQl9CTEFOS19IRFIgPSA8PH5IRFIuZnJlZXplCiAgPSBEb2N1bWVudCB0aXRsZQogIEF1dGhvcgogIDpkb2NmaWxlOiB0ZXN0LmFkb2MKICA6bm9kb2M6CiAgOm5vdmFsaWQ6CiAgOmxvY2FsLWNhY2hlLW9ubHk6CgpIRFIKClZBTElEQVRJTkdfQkxBTktfSERSID0gPDx+SERSLmZyZWV6ZQogID0gRG9jdW1lbnQgdGl0bGUKICBBdXRob3IKICA6ZG9jZmlsZTogdGVzdC5hZG9jCiAgOm5vZG9jOgogIDpuby1pc29iaWI6CgpIRFIKCk5PUk1fUkVGX0JPSUxFUlBMQVRFID0gPDx+SERSLmZyZWV6ZQogIDxwIGlkPSJfIj5UaGUgZm9sbG93aW5nIGRvY3VtZW50cyBhcmUgcmVmZXJyZWQgdG8gaW4gdGhlIHRleHQgaW4gc3VjaCBhIHdheSB0aGF0IHNvbWUgb3IgYWxsIG9mIHRoZWlyIGNvbnRlbnQgY29uc3RpdHV0ZXMgcmVxdWlyZW1lbnRzIG9mIHRoaXMgZG9jdW1lbnQuIEZvciBkYXRlZCByZWZlcmVuY2VzLCBvbmx5IHRoZSBlZGl0aW9uIGNpdGVkIGFwcGxpZXMuIEZvciB1bmRhdGVkIHJlZmVyZW5jZXMsIHRoZSBsYXRlc3QgZWRpdGlvbiBvZiB0aGUgcmVmZXJlbmNlZCBkb2N1bWVudCAoaW5jbHVkaW5nIGFueSBhbWVuZG1lbnRzKSBhcHBsaWVzLjwvcD4KSERSCgpCTEFOS19IRFIgPSA8PH4iSERSIi5mcmVlemUKICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogIDxzdGFuZGFyZC1kb2N1bWVudCB4bWxucz0iaHR0cHM6Ly93d3cubWV0YW5vcm1hLm9yZy9ucy9zdGFuZG9jIiB2ZXJzaW9uPSIje01ldGFub3JtYTo6U3RhbmRvYzo6VkVSU0lPTn0iIHR5cGU9InNlbWFudGljIj4KICA8YmliZGF0YSB0eXBlPSJzdGFuZGFyZCI+CiAgPHRpdGxlIGxhbmd1YWdlPSJlbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIj5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+CiAgICA8bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPgogICAgPHNjcmlwdD5MYXRuPC9zY3JpcHQ+CiAgICA8c3RhdHVzPjxzdGFnZT5wdWJsaXNoZWQ8L3N0YWdlPjwvc3RhdHVzPgogICAgPGNvcHlyaWdodD4KICAgICAgPGZyb20+I3tUaW1lLm5ldy55ZWFyfTwvZnJvbT4KICAgIDwvY29weXJpZ2h0PgogICAgPGV4dD4KICAgIDxkb2N0eXBlPnN0YW5kYXJkPC9kb2N0eXBlPgogICAgPC9leHQ+CiAgPC9iaWJkYXRhPgogICAgPG1ldGFub3JtYS1leHRlbnNpb24+CiAgICA8cHJlc2VudGF0aW9uLW1ldGFkYXRhPgogICAgICA8bmFtZT5UT0MgSGVhZGluZyBMZXZlbHM8L25hbWU+CiAgICAgIDx2YWx1ZT4yPC92YWx1ZT4KICAgIDwvcHJlc2VudGF0aW9uLW1ldGFkYXRhPgogICAgPHByZXNlbnRhdGlvbi1tZXRhZGF0YT4KICAgICAgPG5hbWU+SFRNTCBUT0MgSGVhZGluZyBMZXZlbHM8L25hbWU+CiAgICAgIDx2YWx1ZT4yPC92YWx1ZT4KICAgIDwvcHJlc2VudGF0aW9uLW1ldGFkYXRhPgogICAgPHByZXNlbnRhdGlvbi1tZXRhZGF0YT4KICAgICAgPG5hbWU+RE9DIFRPQyBIZWFkaW5nIExldmVsczwvbmFtZT4KICAgICAgPHZhbHVlPjI8L3ZhbHVlPgogICAgPC9wcmVzZW50YXRpb24tbWV0YWRhdGE+CiAgICA8cHJlc2VudGF0aW9uLW1ldGFkYXRhPgogICAgICA8bmFtZT5QREYgVE9DIEhlYWRpbmcgTGV2ZWxzPC9uYW1lPgogICAgICA8dmFsdWU+MjwvdmFsdWU+CiAgICA8L3ByZXNlbnRhdGlvbi1tZXRhZGF0YT4KICA8L21ldGFub3JtYS1leHRlbnNpb24+CkhEUgoKQkxBTktfTUVUQU5PUk1BX0hEUiA9IDw8fiJIRFIiLmZyZWV6ZQogIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjxodG1sPjxib2R5PgogIDxzdGFuZGFyZC1kb2N1bWVudCB4bWxucz0iaHR0cHM6Ly93d3cubWV0YW5vcm1hLm9yZy9ucy9zdGFuZG9jIiB2ZXJzaW9uPSIje01ldGFub3JtYTo6U3RhbmRvYzo6VkVSU0lPTn0iIHR5cGU9InNlbWFudGljIj4KICA8YmliZGF0YSB0eXBlPSJzdGFuZGFyZCI+CiAgPHRpdGxlIGxhbmd1YWdlPSJlbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIj5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+CiAgICA8bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPgogICAgPHNjcmlwdD5MYXRuPC9zY3JpcHQ+CiAgICA8c3RhdHVzPjxzdGFnZT5wdWJsaXNoZWQ8L3N0YWdlPjwvc3RhdHVzPgogICAgPGNvcHlyaWdodD4KICAgICAgPGZyb20+I3tUaW1lLm5ldy55ZWFyfTwvZnJvbT4KICAgIDwvY29weXJpZ2h0PgogICAgPGV4dD4KICAgIDxkb2N0eXBlPmFydGljbGU8L2RvY3R5cGU+CiAgICA8L2V4dD4KICA8L2JpYmRhdGE+CkhEUgoKSFRNTF9IRFIgPSA8PH5IRFIuZnJlZXplCiAgPGh0bWwgeG1sbnM6ZXB1Yj0iaHR0cDovL3d3dy5pZHBmLm9yZy8yMDA3L29wcyI+CiAgICA8aGVhZD4KICAgICAgPHRpdGxlPnRlc3Q8L3RpdGxlPgogICAgPC9oZWFkPgogICAgPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9ImJsdWUiIHZsaW5rPSIjOTU0RjcyIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUtc2VjdGlvbiI+CiAgICAgICAgPHA+JiMxNjA7PC9wPgogICAgICA8L2Rpdj4KICAgICAgPGJyLz4KICAgICAgPGRpdiBjbGFzcz0icHJlZmF0b3J5LXNlY3Rpb24iPgogICAgICAgIDxwPiYjMTYwOzwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxici8+CiAgICAgIDxkaXYgY2xhc3M9Im1haW4tc2VjdGlvbiI+CkhEUgoKV09SRF9IRFIgPSA8PH5IRFIuZnJlZXplCiAgPGh0bWwgeG1sbnM6ZXB1Yj0iaHR0cDovL3d3dy5pZHBmLm9yZy8yMDA3L29wcyI+CiAgICA8aGVhZD4KICAgICAgPHRpdGxlPnRlc3Q8L3RpdGxlPgogICAgPC9oZWFkPgogICAgPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9ImJsdWUiIHZsaW5rPSIjOTU0RjcyIj4KICAgICAgPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4KICAgICAgICA8cD4mIzE2MDs8L3A+CiAgICAgIDwvZGl2PgogICAgICA8YnIgY2xlYXI9ImFsbCIgY2xhc3M9InNlY3Rpb24iLz4KICAgICAgPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24yIj4KICAgICAgICA8cD4mIzE2MDs8L3A+CiAgICAgIDwvZGl2PgogICAgICA8YnIgY2xlYXI9ImFsbCIgY2xhc3M9InNlY3Rpb24iLz4KICAgICAgPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24zIj4KSERSCgpkZWYgZXhhbXBsZXNfcGF0aChwYXRoKQogIEZpbGUuam9pbihGaWxlLmV4cGFuZF9wYXRoKCIuL2V4YW1wbGVzIiwgX19kaXJfXyksIHBhdGgpCmVuZAoKZGVmIGZpeHR1cmVzX3BhdGgocGF0aCkKICBGaWxlLmpvaW4oRmlsZS5leHBhbmRfcGF0aCgiLi9maXh0dXJlcyIsIF9fZGlyX18pLCBwYXRoKQplbmQKCmRlZiBzdHViX2ZldGNoX3JlZigqKm9wdHMpCiAgeG1sID0gIiIKCiAgaGl0ID0gZG91YmxlKCJoaXQiKQogIGV4cGVjdChoaXQpLnRvIHJlY2VpdmUoOltdKS53aXRoKCJ0aXRsZSIpIGRvCiAgICBOb2tvZ2lyaTo6WE1MKHhtbCkuYXQoIi8vZG9jaWRlbnRpZmllciIpLmNvbnRlbnQKICBlbmQuYXRfbGVhc3QoOm9uY2UpCgogIGhpdF9pbnN0YW5jZSA9IGRvdWJsZSgiaGl0X2luc3RhbmNlIikKICBleHBlY3QoaGl0X2luc3RhbmNlKS50byByZWNlaXZlKDpoaXQpLmFuZF9yZXR1cm4oaGl0KS5hdF9sZWFzdCg6b25jZSkKICBleHBlY3QoaGl0X2luc3RhbmNlKS50byByZWNlaXZlKDp0b194bWwpIGRvIHxidWlsZGVyLCBvcHR8CiAgICBleHBlY3QoYnVpbGRlcikudG8gYmVfaW5zdGFuY2Vfb2YgTm9rb2dpcmk6OlhNTDo6QnVpbGRlcgogICAgZXhwZWN0KG9wdCkudG8gZXEgb3B0cwogICAgYnVpbGRlciA8PCB4bWwKICBlbmQuYXRfbGVhc3QgOm9uY2UKCiAgaGl0X3BhZ2UgPSBkb3VibGUoImhpdF9wYWdlIikKICBleHBlY3QoaGl0X3BhZ2UpLnRvIHJlY2VpdmUoOmZpcnN0KS5hbmRfcmV0dXJuKGhpdF9pbnN0YW5jZSkuYXRfbGVhc3QgOm9uY2UKCiAgaGl0X3BhZ2VzID0gZG91YmxlKCJoaXRfcGFnZXMiKQogIGV4cGVjdChoaXRfcGFnZXMpLnRvIHJlY2VpdmUoOmZpcnN0KS5hbmRfcmV0dXJuKGhpdF9wYWdlKS5hdF9sZWFzdCA6b25jZQoKICBleHBlY3QoUmVsYXRvbklzbzo6SXNvQmlibGlvZ3JhcGh5KS50byByZWNlaXZlKDpzZWFyY2gpCiAgICAuYW5kX3dyYXBfb3JpZ2luYWwgZG8gfHNlYXJjaCwgKmFyZ3N8CiAgICBjb2RlID0gYXJnc1swXQogICAgZXhwZWN0KGNvZGUpLnRvIGJlX2luc3RhbmNlX29mIFN0cmluZwogICAgeG1sID0gZ2V0X3htbChzZWFyY2gsIGNvZGUsIG9wdHMpCiAgICBoaXRfcGFnZXMKICBlbmQuYXRfbGVhc3QgOm9uY2UKZW5kCgpwcml2YXRlCgpkZWYgZ2V0X3htbChzZWFyY2gsIGNvZGUsIG9wdHMpCiAgYyA9IGNvZGUuZ3N1YiglcntbL1xzOi1dfSwgIl8iKS5zdWIoJXJ7XyskfSwgIiIpLmRvd25jYXNlCiAgZmlsZSA9IGV4YW1wbGVzX3BhdGgoIiN7W2MsIG9wdHMua2V5cy5qb2luKCdfJyldLmpvaW4gJ18nfS54bWwiKQogIGlmIEZpbGUuZXhpc3Q/IGZpbGUKICAgIEZpbGUucmVhZCBmaWxlCiAgZWxzZQogICAgeG1sID0gc2VhcmNoLmNhbGwoY29kZSkmLmZpcnN0Ji5maXJzdCYudG9feG1sIG5pbCwgb3B0cwogICAgRmlsZS53cml0ZSBmaWxlLCB4bWwKICAgIHhtbAogIGVuZAplbmQKCmRlZiBtb2NrX29wZW5fdXJpKGNvZGUpCiAgZXhwZWN0KE9wZW5VUkkpLnRvIHJlY2VpdmUoOm9wZW5fdXJpKS5hbmRfd3JhcF9vcmlnaW5hbCBkbyB8bSwgKmFyZ3N8CiAgICAjIGV4cGVjdChhcmdzWzBdKS50byBiZV9pbnN0YW5jZV9vZiBTdHJpbmcKICAgIGZpbGUgPSBleGFtcGxlc19wYXRoKCIje2NvZGUudHIoJy0nLCAnXycpfS5odG1sIikKICAgIEZpbGUud3JpdGUgZmlsZSwgbS5jYWxsKCphcmdzKS5yZWFkIHVubGVzcyBGaWxlLmV4aXN0PyBmaWxlCiAgICBGaWxlLnJlYWQgZmlsZSwgZW5jb2Rpbmc6ICJ1dGYtOCIKICBlbmQuYXRfbGVhc3QgOm9uY2UKZW5kCgpkZWYgbWV0YW5vcm1hX3Byb2Nlc3MoaW5wdXQpCiAgTWV0YW5vcm1hOjpJbnB1dDo6QXNjaWlkb2MKICAgIC5uZXcKICAgIC5wcm9jZXNzKGlucHV0LCAidGVzdC5hZG9jIiwgOnN0YW5kb2MpCmVuZAoKZGVmIHhtbF9zdHJpbmdfY29uZW50KHhtbCkKICBzdHJpcF9ndWlkKE5va29naXJpOjpIVE1MKHhtbCkudG9fcykKZW5kCg== + data:text/html;base64,cmVxdWlyZSAidmNyIgoKVkNSLmNvbmZpZ3VyZS +BkbyB8Y29uZmlnfAogIGNvbmZpZy5jYXNzZXR0ZV9saWJyYXJ5X2RpciA9IC +JzcGVjL3Zjcl9jYXNzZXR0ZXMiCiAgY29uZmlnLmhvb2tfaW50byA6d2VibW +9jawogIGNvbmZpZy5kZWZhdWx0X2Nhc3NldHRlX29wdGlvbnMgPSB7CiAgIC +BjbGVhbl9vdXRkYXRlZF9odHRwX2ludGVyYWN0aW9uczogdHJ1ZSwKICAgIH +JlX3JlY29yZF9pbnRlcnZhbDogMTUxMjAwMCwKICAgIHJlY29yZDogOm9uY2 +UsCiAgfQplbmQKCnJlcXVpcmUgInNpbXBsZWNvdiIKU2ltcGxlQ292LnN0YX +J0IGRvCiAgYWRkX2ZpbHRlciAiL3NwZWMvIgplbmQKCnJlcXVpcmUgImJ1bm +RsZXIvc2V0dXAiCnJlcXVpcmUgImFzY2lpZG9jdG9yIgpyZXF1aXJlICJtZX +Rhbm9ybWEtc3RhbmRvYyIKcmVxdWlyZSAicnNwZWMvbWF0Y2hlcnMiCnJlcX +VpcmUgImVxdWl2YWxlbnQteG1sIgpyZXF1aXJlICJtZXRhbm9ybWEvc3Rhbm +RvYyIKcmVxdWlyZSAieG1sLWMxNG4iCgpEaXJbRmlsZS5leHBhbmRfcGF0aC +giLi9zdXBwb3J0LyoqLyoqLyoucmIiLCBfX2Rpcl9fKV0KICAuc29ydC5lYW +NoIHsgfGZ8IHJlcXVpcmUgZiB9CgpSU3BlYy5jb25maWd1cmUgZG8gfGNvbm +ZpZ3wKICAjIEVuYWJsZSBmbGFncyBsaWtlIC0tb25seS1mYWlsdXJlcyBhbm +QgLS1uZXh0LWZhaWx1cmUKICBjb25maWcuZXhhbXBsZV9zdGF0dXNfcGVyc2 +lzdGVuY2VfZmlsZV9wYXRoID0gIi5yc3BlY19zdGF0dXMiCgogICMgRGlzYW +JsZSBSU3BlYyBleHBvc2luZyBtZXRob2RzIGdsb2JhbGx5IG9uIGBNb2R1bG +VgIGFuZCBgbWFpbmAKICBjb25maWcuZGlzYWJsZV9tb25rZXlfcGF0Y2hpbm +chCgogIGNvbmZpZy5leHBlY3Rfd2l0aCA6cnNwZWMgZG8gfGN8CiAgICBjLn +N5bnRheCA9IDpleHBlY3QKICBlbmQKCiAgY29uZmlnLmFyb3VuZCA6ZWFjaC +BkbyB8ZXhhbXBsZXwKICAgIGV4YW1wbGUucnVuCiAgcmVzY3VlIFN5c3RlbU +V4aXQKICAgIGZhaWwgIlVuZXhwZWN0ZWQgZXhpdCBlbmNvdW50ZXJlZCIKIC +BlbmQKZW5kCgpPUFRJT05TID0gW2JhY2tlbmQ6IDpzdGFuZG9jLCBoZWFkZX +JfZm9vdGVyOiB0cnVlLCBhZ3JlZV90b190ZXJtczogdHJ1ZV0uZnJlZXplCg +pkZWYgc3RyaXBfZ3VpZCh4bWwpCiAgeG1sLmdzdWIoJXJ7IGlkPSJfW14iXS +sifSwgJyBpZD0iXyInKQogICAgLmdzdWIoJXJ7IHRhcmdldD0iX1teIl0rIn +0sICcgdGFyZ2V0PSJfIicpCiAgICAuZ3N1Yiglcns8ZmV0Y2hlZD5bXjxdKz +wvZmV0Y2hlZD59LCAiPGZldGNoZWQvPiIpCiAgICAuZ3N1Yiglcnsgc2NoZW +1hLXZlcnNpb249IlteIl0rIn0sICIiKQplbmQKCmRlZiBzdHJpcF9zcmMoeG +1sKQogIHhtbC5nc3ViKC9cc3NyYz0iW14iXSsiLywgJyBzcmM9Il8iJykKZW +5kCgpYU0wgPSBOb2tvZ2lyaTo6WFNMVCg8PH5YU0wuZnJlZXplKQogIDx4c2 +w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3 +d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KICAgIDx4c2w6b3V0cH +V0IG1ldGhvZD0ieG1sIiBlbmNvZGluZz0iVVRGLTgiIGluZGVudD0ieWVzIi +8+CiAgICA8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIi8+CiAgICA8eH +NsOnRlbXBsYXRlIG1hdGNoPSIvIj4KICAgICAgPHhzbDpjb3B5LW9mIHNlbG +VjdD0iLiIvPgogICAgPC94c2w6dGVtcGxhdGU+CiAgPC94c2w6c3R5bGVzaG +VldD4KWFNMCgpBU0NJSURPQ19CTEFOS19IRFIgPSA8PH5IRFIuZnJlZXplCi +AgPSBEb2N1bWVudCB0aXRsZQogIEF1dGhvcgogIDpkb2NmaWxlOiB0ZXN0Lm +Fkb2MKICA6bm9kb2M6CiAgOm5vdmFsaWQ6CiAgOm5vLWlzb2JpYjoKICA6ZG +F0YS11cmktaW1hZ2U6IGZhbHNlCgpIRFIKCkRVTUJRVU9URV9CTEFOS19IRF +IgPSA8PH5IRFIuZnJlZXplCiAgPSBEb2N1bWVudCB0aXRsZQogIEF1dGhvcg +ogIDpkb2NmaWxlOiB0ZXN0LmFkb2MKICA6bm9kb2M6CiAgOm5vdmFsaWQ6Ci +AgOm5vLWlzb2JpYjoKICA6c21hcnRxdW90ZXM6IGZhbHNlCgpIRFIKCklTT0 +JJQl9CTEFOS19IRFIgPSA8PH5IRFIuZnJlZXplCiAgPSBEb2N1bWVudCB0aX +RsZQogIEF1dGhvcgogIDpkb2NmaWxlOiB0ZXN0LmFkb2MKICA6bm9kb2M6Ci +AgOm5vdmFsaWQ6CiAgOm5vLWlzb2JpYi1jYWNoZToKCkhEUgoKRkxVU0hfQ0 +FDSEVfSVNPQklCX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3 +VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogID +pub2RvYzoKICA6bm92YWxpZDoKICA6Zmx1c2gtY2FjaGVzOgoKSERSCgpDQU +NIRURfSVNPQklCX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3 +VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogID +pub2RvYzoKICA6bm92YWxpZDoKCkhEUgoKTE9DQUxfQ0FDSEVEX0lTT0JJQl +9CTEFOS19IRFIgPSA8PH5IRFIuZnJlZXplCiAgPSBEb2N1bWVudCB0aXRsZQ +ogIEF1dGhvcgogIDpkb2NmaWxlOiB0ZXN0LmFkb2MKICA6bm9kb2M6CiAgOm +5vdmFsaWQ6CiAgOmxvY2FsLWNhY2hlOgoKSERSCgpMT0NBTF9PTkxZX0NBQ0 +hFRF9JU09CSUJfQkxBTktfSERSID0gPDx+SERSLmZyZWV6ZQogID0gRG9jdW +1lbnQgdGl0bGUKICBBdXRob3IKICA6ZG9jZmlsZTogdGVzdC5hZG9jCiAgOm +5vZG9jOgogIDpub3ZhbGlkOgogIDpsb2NhbC1jYWNoZS1vbmx5OgoKSERSCg +pWQUxJREFUSU5HX0JMQU5LX0hEUiA9IDw8fkhEUi5mcmVlemUKICA9IERvY3 +VtZW50IHRpdGxlCiAgQXV0aG9yCiAgOmRvY2ZpbGU6IHRlc3QuYWRvYwogID +pub2RvYzoKICA6bm8taXNvYmliOgoKSERSCgpOT1JNX1JFRl9CT0lMRVJQTE +FURSA9IDw8fkhEUi5mcmVlemUKICA8cCBpZD0iXyI+VGhlIGZvbGxvd2luZy +Bkb2N1bWVudHMgYXJlIHJlZmVycmVkIHRvIGluIHRoZSB0ZXh0IGluIHN1Y2 +ggYSB3YXkgdGhhdCBzb21lIG9yIGFsbCBvZiB0aGVpciBjb250ZW50IGNvbn +N0aXR1dGVzIHJlcXVpcmVtZW50cyBvZiB0aGlzIGRvY3VtZW50LiBGb3IgZG +F0ZWQgcmVmZXJlbmNlcywgb25seSB0aGUgZWRpdGlvbiBjaXRlZCBhcHBsaW +VzLiBGb3IgdW5kYXRlZCByZWZlcmVuY2VzLCB0aGUgbGF0ZXN0IGVkaXRpb2 +4gb2YgdGhlIHJlZmVyZW5jZWQgZG9jdW1lbnQgKGluY2x1ZGluZyBhbnkgYW +1lbmRtZW50cykgYXBwbGllcy48L3A+CkhEUgoKQkxBTktfSERSID0gPDx+Ik +hEUiIuZnJlZXplCiAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVV +RGLTgiPz4KICA8c3RhbmRhcmQtZG9jdW1lbnQgeG1sbnM9Imh0dHBzOi8vd3 +d3Lm1ldGFub3JtYS5vcmcvbnMvc3RhbmRvYyIgdmVyc2lvbj0iI3tNZXRhbm +9ybWE6OlN0YW5kb2M6OlZFUlNJT059IiB0eXBlPSJzZW1hbnRpYyI+CiAgPG +JpYmRhdGEgdHlwZT0ic3RhbmRhcmQiPgogIDx0aXRsZSBsYW5ndWFnZT0iZW +4iIGZvcm1hdD0idGV4dC9wbGFpbiI+RG9jdW1lbnQgdGl0bGU8L3RpdGxlPg +ogICAgPGxhbmd1YWdlPmVuPC9sYW5ndWFnZT4KICAgIDxzY3JpcHQ+TGF0bj +wvc2NyaXB0PgogICAgPHN0YXR1cz48c3RhZ2U+cHVibGlzaGVkPC9zdGFnZT +48L3N0YXR1cz4KICAgIDxjb3B5cmlnaHQ+CiAgICAgIDxmcm9tPiN7VGltZS +5uZXcueWVhcn08L2Zyb20+CiAgICA8L2NvcHlyaWdodD4KICAgIDxleHQ+Ci +AgICA8ZG9jdHlwZT5zdGFuZGFyZDwvZG9jdHlwZT4KICAgIDwvZXh0PgogID +wvYmliZGF0YT4KICAgIDxtZXRhbm9ybWEtZXh0ZW5zaW9uPgogICAgPHByZX +NlbnRhdGlvbi1tZXRhZGF0YT4KICAgICAgPG5hbWU+VE9DIEhlYWRpbmcgTG +V2ZWxzPC9uYW1lPgogICAgICA8dmFsdWU+MjwvdmFsdWU+CiAgICA8L3ByZX +NlbnRhdGlvbi1tZXRhZGF0YT4KICAgIDxwcmVzZW50YXRpb24tbWV0YWRhdG +E+CiAgICAgIDxuYW1lPkhUTUwgVE9DIEhlYWRpbmcgTGV2ZWxzPC9uYW1lPg +ogICAgICA8dmFsdWU+MjwvdmFsdWU+CiAgICA8L3ByZXNlbnRhdGlvbi1tZX +RhZGF0YT4KICAgIDxwcmVzZW50YXRpb24tbWV0YWRhdGE+CiAgICAgIDxuYW +1lPkRPQyBUT0MgSGVhZGluZyBMZXZlbHM8L25hbWU+CiAgICAgIDx2YWx1ZT +4yPC92YWx1ZT4KICAgIDwvcHJlc2VudGF0aW9uLW1ldGFkYXRhPgogICAgPH +ByZXNlbnRhdGlvbi1tZXRhZGF0YT4KICAgICAgPG5hbWU+UERGIFRPQyBIZW +FkaW5nIExldmVsczwvbmFtZT4KICAgICAgPHZhbHVlPjI8L3ZhbHVlPgogIC +AgPC9wcmVzZW50YXRpb24tbWV0YWRhdGE+CiAgPC9tZXRhbm9ybWEtZXh0ZW +5zaW9uPgpIRFIKCkJMQU5LX01FVEFOT1JNQV9IRFIgPSA8PH4iSERSIi5mcm +VlemUKICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTU +wgNC4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi +9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+CiAgPD94bWwgdmVyc2lvbj0iMS4wIi +BlbmNvZGluZz0iVVRGLTgiPz48aHRtbD48Ym9keT4KICA8c3RhbmRhcmQtZG +9jdW1lbnQgeG1sbnM9Imh0dHBzOi8vd3d3Lm1ldGFub3JtYS5vcmcvbnMvc3 +RhbmRvYyIgdmVyc2lvbj0iI3tNZXRhbm9ybWE6OlN0YW5kb2M6OlZFUlNJT0 +59IiB0eXBlPSJzZW1hbnRpYyI+CiAgPGJpYmRhdGEgdHlwZT0ic3RhbmRhcm +QiPgogIDx0aXRsZSBsYW5ndWFnZT0iZW4iIGZvcm1hdD0idGV4dC9wbGFpbi +I+RG9jdW1lbnQgdGl0bGU8L3RpdGxlPgogICAgPGxhbmd1YWdlPmVuPC9sYW +5ndWFnZT4KICAgIDxzY3JpcHQ+TGF0bjwvc2NyaXB0PgogICAgPHN0YXR1cz +48c3RhZ2U+cHVibGlzaGVkPC9zdGFnZT48L3N0YXR1cz4KICAgIDxjb3B5cm +lnaHQ+CiAgICAgIDxmcm9tPiN7VGltZS5uZXcueWVhcn08L2Zyb20+CiAgIC +A8L2NvcHlyaWdodD4KICAgIDxleHQ+CiAgICA8ZG9jdHlwZT5hcnRpY2xlPC +9kb2N0eXBlPgogICAgPC9leHQ+CiAgPC9iaWJkYXRhPgpIRFIKCkhUTUxfSE +RSID0gPDx+SERSLmZyZWV6ZQogIDxodG1sIHhtbG5zOmVwdWI9Imh0dHA6Ly +93d3cuaWRwZi5vcmcvMjAwNy9vcHMiPgogICAgPGhlYWQ+CiAgICAgIDx0aX +RsZT50ZXN0PC90aXRsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5IGxhbmc9Ik +VOLVVTIiBsaW5rPSJibHVlIiB2bGluaz0iIzk1NEY3MiI+CiAgICAgIDxkaX +YgY2xhc3M9InRpdGxlLXNlY3Rpb24iPgogICAgICAgIDxwPiYjMTYwOzwvcD +4KICAgICAgPC9kaXY+CiAgICAgIDxici8+CiAgICAgIDxkaXYgY2xhc3M9In +ByZWZhdG9yeS1zZWN0aW9uIj4KICAgICAgICA8cD4mIzE2MDs8L3A+CiAgIC +AgIDwvZGl2PgogICAgICA8YnIvPgogICAgICA8ZGl2IGNsYXNzPSJtYWluLX +NlY3Rpb24iPgpIRFIKCldPUkRfSERSID0gPDx+SERSLmZyZWV6ZQogIDxodG +1sIHhtbG5zOmVwdWI9Imh0dHA6Ly93d3cuaWRwZi5vcmcvMjAwNy9vcHMiPg +ogICAgPGhlYWQ+CiAgICAgIDx0aXRsZT50ZXN0PC90aXRsZT4KICAgIDwvaG +VhZD4KICAgIDxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPSJibHVlIiB2bGluaz +0iIzk1NEY3MiI+CiAgICAgIDxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+Ci +AgICAgICAgPHA+JiMxNjA7PC9wPgogICAgICA8L2Rpdj4KICAgICAgPGJyIG +NsZWFyPSJhbGwiIGNsYXNzPSJzZWN0aW9uIi8+CiAgICAgIDxkaXYgY2xhc3 +M9IldvcmRTZWN0aW9uMiI+CiAgICAgICAgPHA+JiMxNjA7PC9wPgogICAgIC +A8L2Rpdj4KICAgICAgPGJyIGNsZWFyPSJhbGwiIGNsYXNzPSJzZWN0aW9uIi +8+CiAgICAgIDxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMyI+CkhEUgoKZGVmIG +V4YW1wbGVzX3BhdGgocGF0aCkKICBGaWxlLmpvaW4oRmlsZS5leHBhbmRfcG +F0aCgiLi9leGFtcGxlcyIsIF9fZGlyX18pLCBwYXRoKQplbmQKCmRlZiBmaX +h0dXJlc19wYXRoKHBhdGgpCiAgRmlsZS5qb2luKEZpbGUuZXhwYW5kX3BhdG +goIi4vZml4dHVyZXMiLCBfX2Rpcl9fKSwgcGF0aCkKZW5kCgpkZWYgc3R1Yl +9mZXRjaF9yZWYoKipvcHRzKQogIHhtbCA9ICIiCgogIGhpdCA9IGRvdWJsZS +giaGl0IikKICBleHBlY3QoaGl0KS50byByZWNlaXZlKDpbXSkud2l0aCgidG +l0bGUiKSBkbwogICAgTm9rb2dpcmk6OlhNTCh4bWwpLmF0KCIvL2RvY2lkZW +50aWZpZXIiKS5jb250ZW50CiAgZW5kLmF0X2xlYXN0KDpvbmNlKQoKICBoaX +RfaW5zdGFuY2UgPSBkb3VibGUoImhpdF9pbnN0YW5jZSIpCiAgZXhwZWN0KG +hpdF9pbnN0YW5jZSkudG8gcmVjZWl2ZSg6aGl0KS5hbmRfcmV0dXJuKGhpdC +kuYXRfbGVhc3QoOm9uY2UpCiAgZXhwZWN0KGhpdF9pbnN0YW5jZSkudG8gcm +VjZWl2ZSg6dG9feG1sKSBkbyB8YnVpbGRlciwgb3B0fAogICAgZXhwZWN0KG +J1aWxkZXIpLnRvIGJlX2luc3RhbmNlX29mIE5va29naXJpOjpYTUw6OkJ1aW +xkZXIKICAgIGV4cGVjdChvcHQpLnRvIGVxIG9wdHMKICAgIGJ1aWxkZXIgPD +wgeG1sCiAgZW5kLmF0X2xlYXN0IDpvbmNlCgogIGhpdF9wYWdlID0gZG91Ym +xlKCJoaXRfcGFnZSIpCiAgZXhwZWN0KGhpdF9wYWdlKS50byByZWNlaXZlKD +pmaXJzdCkuYW5kX3JldHVybihoaXRfaW5zdGFuY2UpLmF0X2xlYXN0IDpvbm +NlCgogIGhpdF9wYWdlcyA9IGRvdWJsZSgiaGl0X3BhZ2VzIikKICBleHBlY3 +QoaGl0X3BhZ2VzKS50byByZWNlaXZlKDpmaXJzdCkuYW5kX3JldHVybihoaX +RfcGFnZSkuYXRfbGVhc3QgOm9uY2UKCiAgZXhwZWN0KFJlbGF0b25Jc286Ok +lzb0JpYmxpb2dyYXBoeSkudG8gcmVjZWl2ZSg6c2VhcmNoKQogICAgLmFuZF +93cmFwX29yaWdpbmFsIGRvIHxzZWFyY2gsICphcmdzfAogICAgY29kZSA9IG +FyZ3NbMF0KICAgIGV4cGVjdChjb2RlKS50byBiZV9pbnN0YW5jZV9vZiBTdH +JpbmcKICAgIHhtbCA9IGdldF94bWwoc2VhcmNoLCBjb2RlLCBvcHRzKQogIC +AgaGl0X3BhZ2VzCiAgZW5kLmF0X2xlYXN0IDpvbmNlCmVuZAoKcHJpdmF0ZQ +oKZGVmIGdldF94bWwoc2VhcmNoLCBjb2RlLCBvcHRzKQogIGMgPSBjb2RlLm +dzdWIoJXJ7Wy9cczotXX0sICJfIikuc3ViKCVye18rJH0sICIiKS5kb3duY2 +FzZQogIGZpbGUgPSBleGFtcGxlc19wYXRoKCIje1tjLCBvcHRzLmtleXMuam +9pbignXycpXS5qb2luICdfJ30ueG1sIikKICBpZiBGaWxlLmV4aXN0PyBmaW +xlCiAgICBGaWxlLnJlYWQgZmlsZQogIGVsc2UKICAgIHhtbCA9IHNlYXJjaC +5jYWxsKGNvZGUpJi5maXJzdCYuZmlyc3QmLnRvX3htbCBuaWwsIG9wdHMKIC +AgIEZpbGUud3JpdGUgZmlsZSwgeG1sCiAgICB4bWwKICBlbmQKZW5kCgpkZW +YgbW9ja19vcGVuX3VyaShjb2RlKQogIGV4cGVjdChPcGVuVVJJKS50byByZW +NlaXZlKDpvcGVuX3VyaSkuYW5kX3dyYXBfb3JpZ2luYWwgZG8gfG0sICphcm +dzfAogICAgIyBleHBlY3QoYXJnc1swXSkudG8gYmVfaW5zdGFuY2Vfb2YgU3 +RyaW5nCiAgICBmaWxlID0gZXhhbXBsZXNfcGF0aCgiI3tjb2RlLnRyKCctJy +wgJ18nKX0uaHRtbCIpCiAgICBGaWxlLndyaXRlIGZpbGUsIG0uY2FsbCgqYX +JncykucmVhZCB1bmxlc3MgRmlsZS5leGlzdD8gZmlsZQogICAgRmlsZS5yZW +FkIGZpbGUsIGVuY29kaW5nOiAidXRmLTgiCiAgZW5kLmF0X2xlYXN0IDpvbm +NlCmVuZAoKZGVmIG1ldGFub3JtYV9wcm9jZXNzKGlucHV0KQogIE1ldGFub3 +JtYTo6SW5wdXQ6OkFzY2lpZG9jCiAgICAubmV3CiAgICAucHJvY2Vzcyhpbn +B1dCwgInRlc3QuYWRvYyIsIDpzdGFuZG9jKQplbmQKCmRlZiB4bWxfc3RyaW +5nX2NvbmVudCh4bWwpCiAgc3RyaXBfZ3VpZChOb2tvZ2lyaTo6SFRNTCh4bW +wpLnRvX3MpCmVuZAo= +
Split-it-right sample divider