# Name: smd_access_keys v0.20 # Type: Admin/Public plugin # Permit access to content for a certain time period/number of access attempts # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE1OiJzbWRfYWNjZXNzX2tleXMiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjAiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjc2OiJQZXJtaXQgYWNjZXNzIHRvIGNvbnRlbnQgZm9yIGEgY2VydGFpbiB0aW1lIHBl cmlvZC9udW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzIjtzOjQ6ImNvZGUiO3M6NDU4MDg6Ii8q KgogKiBzbWRfYWNjZXNzX2tleXMKICoKICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGZv ciBzZWN1cmUgdG9rZW5pemVkIGFjY2VzcyB0byByZXNvdXJjZXMuIEZlYXR1cmVzOgogKiAg LT4gVGltZS1iYXNlZCBvciBhY2Nlc3MgYXR0ZW1wdCBsaW1pdHMKICogIC0+IFVudGFtcGVy YWJsZSBVUkwtYmFzZWQga2V5cwogKiAgLT4gT3B0aW9uYWwgSVAgbG9nZ2luZwogKgogKiBA YXV0aG9yIFN0ZWYgRGF3c29uCiAqIEBsaW5rICAgaHR0cDovL3N0ZWZkYXdzb24uY29tLwog KiBAdG9kbyBBZGQgc2hvcnRjdXQgdG8gc2VuZCBhIG5ld2x5LWdlbmVyYXRlZCBhZG1pbi1z aWRlIGtleSB0byBhIHVzZXI/IChkcm9wZG93biBvZiB1c2VycyArIGUtbWFpbCB0ZW1wbGF0 ZSBpbiBwcmVmcz8pCiAqIEB0b2RvIEFkZCBhdXRvLWRlbGV0aW9uIG9mIGV4cGlyZWQga2V5 cyBwcmVmOgogKiAgICAgICAtPiBGaWxlIGRvd25sb2FkIGtleXMgY2FuIGJlIGRlbGV0ZWQg b24gYW55IGtleSBhY2Nlc3MgKGV4cGlyeSB3aW5kb3cgaXMga25vd24gdmlhIHByZWZzKS4K ICogICAgICAgLT4gT3RoZXIga2V5IGFjY2Vzc2VzIGNhbiBvbmx5IGJlIGRlbGV0ZWQgd2hl biB0aGF0IGtleSBpcyB1c2VkLgogKiAgICAgICAtPiBDb25maWd1cmFibGUgZ3JhY2UgcGVy aW9kIGFmdGVyIGV4cGlyeSwgYmVmb3JlIGRlbGV0aW9uLgogKiBAdG9kbyBPYmZ1c2N0YWVk IFVSTHM/CiAqIEB0b2RvIFF1ZXJ5IGFuIGFjY2VzcyBrZXkgYW5kIHNlcGFyYXRlIGl0IGlu dG8gaXRzIGNvbXBvbmVudCBwYXJ0cyBmb3IgY29udmVuaWVudCB0ZXN0aW5nLgogKi8KaWYg KHR4cGludGVyZmFjZSA9PT0gJ2FkbWluJykgewogICAgZ2xvYmFsICRzbWRfYWtleV9ldmVu dCwgJHNtZF9ha2V5X3N0eWxlcywgJGRidmVyc2lvbjsKCiAgICAkc21kX2FrZXlfZXZlbnQg PSAnc21kX2FrZXknOwogICAgJHNtZF9ha2V5X3N0eWxlcyA9IGFycmF5KAogICAgICAgICds aXN0JyA9PgogICAgICAgICAnLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0nLAogICAg KTsKCiAgICBpZiAodmVyc2lvbl9jb21wYXJlKCRkYnZlcnNpb24sICc0LjYtZGV2JykgPj0g MCkgewogICAgICAgIGFkZF9wcml2cygncHJlZnMuc21kX2FrZXknLCAnMSwyLDMnKTsKICAg IH0KCiAgICBhZGRfcHJpdnMoJHNtZF9ha2V5X2V2ZW50LCAnMScpOwogICAgYWRkX3ByaXZz KCdwbHVnaW5fcHJlZnMuc21kX2FjY2Vzc19rZXlzJywgJzEnKTsKICAgIHJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICRzbWRfYWtleV9ldmVudCwgZ1R4dCgnc21kX2FrZXlfdGFiX25h bWUnKSk7CiAgICByZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FrZXlfZGlzcGF0Y2hlcicsICRz bWRfYWtleV9ldmVudCk7CiAgICByZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FrZXlfd2VsY29t ZScsICdwbHVnaW5fbGlmZWN5Y2xlLnNtZF9hY2Nlc3Nfa2V5cycpOwogICAgcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF9ha2V5X3ByZWZzJywgJ3BsdWdpbl9wcmVmcy5zbWRfYWNjZXNzX2tl eXMnKTsKfQoKLyoqCiAqIEtleXMgdXNlZCBvbiB0aGUgcHJlZnMgc2NyZWVuLgogKgogKiBE aXNwbGF5ZWQgdGhpcyB3YXkgdG8gaGVscCBpZWRfcGx1Z2luX2NvbXBvc2VyIGZpbmQgdGhl bToKICogIGdUeHQoJ3NtZF9ha2V5JykKICogIGdUeHQoJ3NtZF9ha2V5X2ZpbGVfZG93bmxv YWRfZXhwaXJlcycpCiAqICBnVHh0KCdzbWRfYWtleV9zYWx0X2xlbmd0aCcpCiAqICBnVHh0 KCdzbWRfYWtleV9sb2dfaXAnKQogKi8KZ2xvYmFsICRzbWRfYWtleV9wcmVmczsKJHNtZF9h a2V5X3ByZWZzID0gYXJyYXkoCiAgICAnc21kX2FrZXlfZmlsZV9kb3dubG9hZF9leHBpcmVz JyA9PiBhcnJheSgKICAgICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywKICAgICAg ICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICdwb3NpdGlvbicgPT4gMTAs CiAgICAgICAgJ2RlZmF1bHQnICA9PiAnMzYwMCcsCiAgICApLAogICAgJ3NtZF9ha2V5X3Nh bHRfbGVuZ3RoJyA9PiBhcnJheSgKICAgICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0 JywKICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICdwb3NpdGlv bicgPT4gMjAsCiAgICAgICAgJ2RlZmF1bHQnICA9PiAnOCcsCiAgICApLAogICAgJ3NtZF9h a2V5X2xvZ19pcCcgPT4gYXJyYXkoCiAgICAgICAgJ2h0bWwnICAgICA9PiAneWVzbm9yYWRp bycsCiAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAncG9zaXRp b24nID0+IDMwLAogICAgICAgICdkZWZhdWx0JyAgPT4gJzAnLAogICAgKSwKKTsKCmlmICgh ZGVmaW5lZCgnU01EX0FLRVlTJykpIHsKICAgIGRlZmluZSgiU01EX0FLRVlTIiwgJ3NtZF9h a2V5cycpOwp9CgpyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FjY2Vzc19wcm90ZWN0X2Rvd25s b2FkJywgJ2ZpbGVfZG93bmxvYWQnKTsKCi8qKgogKiBBRE1JTiBTSURFIElOVEVSRkFDRQog KiA9PT09PT09PT09PT09PT09PT09PQogKgogKiBKdW1wIG9mZiBwb2ludCBmb3IgZXZlbnQv c3RlcHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGV2dCAocmVxKSBUZXh0cGF0dGVybiBldmVu dAogKiBAcGFyYW0gc3RyaW5nICRzdHAgKHJlcSkgVGV4dHBhdHRlcm4gc3RlcAogKi8KZnVu Y3Rpb24gc21kX2FrZXlfZGlzcGF0Y2hlcigkZXZ0LCAkc3RwKQp7CiAgICBpZiAoISRzdHAg b3IgIWluX2FycmF5KCRzdHAsIGFycmF5KAogICAgICAgICAgICAnc21kX2FrZXlfdGFibGVf aW5zdGFsbCcsCiAgICAgICAgICAgICdzbWRfYWtleV90YWJsZV9yZW1vdmUnLAogICAgICAg ICAgICAnc21kX2FrZXlfY3JlYXRlJywKICAgICAgICAgICAgJ3NtZF9ha2V5X3ByZWZzJywK ICAgICAgICAgICAgJ3NtZF9ha2V5X3ByZWZzYXZlJywKICAgICAgICAgICAgJ3NtZF9ha2V5 X211bHRpX2VkaXQnLAogICAgICAgICAgICAnc21kX2FrZXlfY2hhbmdlX3BhZ2VieScsCiAg ICAgICAgKSkpIHsKICAgICAgICBzbWRfYWtleSgnJyk7CiAgICB9IGVsc2UgJHN0cCgpOwp9 CgovKioKICogQm9vdHN0cmFwIHdoZW4gcGx1Z2luIGluc3RhbGxlZC9kZWxldGVkLgogKgog KiBAcGFyYW0gIHN0cmluZyAkZXZ0IChyZXEpIFRleHRwYXR0ZXJuIGV2ZW50CiAqIEBwYXJh bSAgc3RyaW5nICRzdHAgKHJlcSkgVGV4dHBhdHRlcm4gc3RlcAogKiBAcmV0dXJuIHN0cmlu ZyBOb3RpZmljYXRpb24gbWVzc2FnZQogKi8KZnVuY3Rpb24gc21kX2FrZXlfd2VsY29tZSgk ZXZ0LCAkc3RwKQp7CiAgICAkbXNnID0gJyc7CgogICAgc3dpdGNoICgkc3RwKSB7CiAgICAg ICAgY2FzZSAnaW5zdGFsbGVkJzoKICAgICAgICAgICAgc21kX2FrZXlfdGFibGVfaW5zdGFs bCgwKTsKICAgICAgICAgICAgJG1zZyA9ICdSZXN0cmljdCB5b3VyIFR4cCB3b3JsZCA6LSkn OwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdkZWxldGVkJzoKICAgICAgICAg ICAgc21kX2FrZXlfdGFibGVfcmVtb3ZlKDApOwogICAgICAgICAgICBicmVhazsKICAgIH0K CiAgICByZXR1cm4gJG1zZzsKfQoKLyoqCiAqIE1haW4gYWRtaW4gaW50ZXJmYWNlCiAqCiAq IEBwYXJhbSAgc3RyaW5nICRtc2cgKG9wdCkgRmxhc2ggc3RhdHVzIG1lc3NhZ2UgdG8gZGlz cGxheQogKiBAcmV0dXJuIEhUTUwgUGFnZSBjb250ZW50CiAqLwpmdW5jdGlvbiBzbWRfYWtl eSgkbXNnID0gJycpCnsKICAgIGdsb2JhbCAkc21kX2FrZXlfZXZlbnQsICRzbWRfYWtleV9s aXN0X3BhZ2VieSwgJHNtZF9ha2V5X3N0eWxlcywgJGxvZ2dpbmcsICRzbWRfYWtleV9wcmVm czsKCiAgICBwYWdldG9wKGdUeHQoJ3NtZF9ha2V5X3RhYl9uYW1lJyksICRtc2cpOwoKICAg IGlmIChzbWRfYWtleV90YWJsZV9leGlzdCgxKSkgewogICAgICAgIGV4dHJhY3QoZ3BzYShh cnJheSgncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkp OwogICAgICAgIGlmICgkc29ydCA9PT0gJycpICRzb3J0ID0gZ2V0X3ByZWYoJ3NtZF9ha2V5 X3NvcnRfY29sdW1uJywgJ3RpbWUnKTsKICAgICAgICBpZiAoJGRpciA9PT0gJycpICRkaXIg PSBnZXRfcHJlZignc21kX2FrZXlfc29ydF9kaXInLCAnZGVzYycpOwogICAgICAgICRkaXIg PSAoJGRpciA9PSAnYXNjJykgPyAnYXNjJyA6ICdkZXNjJzsKCiAgICAgICAgc3dpdGNoICgk c29ydCkgewogICAgICAgICAgICBjYXNlICdwYWdlJzoKICAgICAgICAgICAgICAgICRzb3J0 X3NxbCA9ICdwYWdlICcuJGRpci4nLCB0aW1lIGRlc2MnOwogICAgICAgICAgICBicmVhazsK CiAgICAgICAgICAgIGNhc2UgJ3RyaWdnYWgnOgogICAgICAgICAgICAgICAgJHNvcnRfc3Fs ID0gJ3RyaWdnYWggJy4kZGlyLicsIHRpbWUgZGVzYyc7CiAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgY2FzZSAnbWF4aW11bSc6CiAgICAgICAgICAgICAgICAkc29ydF9zcWwg PSAnbWF4aW11bSAnLiRkaXIuJywgdGltZSBkZXNjJzsKICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgICAgICBjYXNlICdhY2Nlc3Nlcyc6CiAgICAgICAgICAgICAgICAkc29ydF9zcWwg PSAnYWNjZXNzZXMgJy4kZGlyLicsIHRpbWUgZGVzYyc7CiAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgY2FzZSAnaXAnOgogICAgICAgICAgICAgICAgJHNvcnRfc3FsID0gJ2lw ICcuJGRpci4nLCB0aW1lIGRlc2MnOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkc29ydCA9ICd0aW1lJzsKICAgICAgICAgICAg ICAgICRzb3J0X3NxbCA9ICd0aW1lICcuJGRpcjsKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgfQoKICAgICAgICBzZXRfcHJlZignc21kX2FrZXlfc29ydF9jb2x1bW4nLCAkc29ydCwg J3NtZF9ha2V5JywgUFJFRl9ISURERU4sICcnLCAwLCBQUkVGX1BSSVZBVEUpOwogICAgICAg IHNldF9wcmVmKCdzbWRfYWtleV9zb3J0X2RpcicsICRkaXIsICdzbWRfYWtleScsIFBSRUZf SElEREVOLCAnJywgMCwgUFJFRl9QUklWQVRFKTsKCiAgICAgICAgJHN3aXRjaF9kaXIgPSAo JGRpciA9PSAnZGVzYycpID8gJ2FzYycgOiAnZGVzYyc7CgogICAgICAgICRjcml0ZXJpYSA9 IDE7CgogICAgICAgIGlmICgkc2VhcmNoX21ldGhvZCBhbmQgJGNyaXQpIHsKICAgICAgICAg ICAgJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goc3RyX3JlcGxhY2UoYXJyYXkoJ1xcJywnJScs J18nLCdcJycpLCBhcnJheSgnXFxcXCcsJ1xcJScsJ1xcXycsICdcXFwnJyksICRjcml0KSk7 CiAgICAgICAgICAgICRjcml0c3FsID0gYXJyYXkoCiAgICAgICAgICAgICAgICAncGFnZScg ICAgID0+ICJwYWdlIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLAogICAgICAgICAgICAgICAg J3RyaWdnYWgnICA9PiAidHJpZ2dhaCBsaWtlICclJGNyaXRfZXNjYXBlZCUnIiwKICAgICAg ICAgICAgICAgICdtYXhpbXVtJyAgPT4gIm1heGltdW0gPSAnJGNyaXRfZXNjYXBlZCciLAog ICAgICAgICAgICAgICAgJ2FjY2Vzc2VzJyA9PiAiYWNjZXNzZXMgPSAnJGNyaXRfZXNjYXBl ZCciLAogICAgICAgICAgICAgICAgJ2lwJyAgICAgICA9PiAiaXAgbGlrZSAnJSRjcml0X2Vz Y2FwZWQlJyIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4 aXN0cygkc2VhcmNoX21ldGhvZCwgJGNyaXRzcWwpKSB7CiAgICAgICAgICAgICAgICAkY3Jp dGVyaWEgPSAkY3JpdHNxbFskc2VhcmNoX21ldGhvZF07CiAgICAgICAgICAgICAgICAkbGlt aXQgPSA1MDA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2VhcmNo X21ldGhvZCA9ICcnOwogICAgICAgICAgICAgICAgJGNyaXQgPSAnJzsKICAgICAgICAgICAg fQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZWFyY2hfbWV0aG9kID0gJyc7CiAg ICAgICAgICAgICRjcml0ID0gJyc7CiAgICAgICAgfQoKICAgICAgICAkdG90YWwgPSBzYWZl X2NvdW50KFNNRF9BS0VZUywgIiRjcml0ZXJpYSIpOwoKICAgICAgICBlY2hvICc8ZGl2IGlk PSInLiRzbWRfYWtleV9ldmVudC4nX2NvbnRyb2wiIGNsYXNzPSJ0eHAtY29udHJvbC1wYW5l bCI+JzsKCiAgICAgICAgaWYgKCR0b3RhbCA8IDEpIHsKICAgICAgICAgICAgaWYgKCRjcml0 ZXJpYSAhPSAxKSB7CiAgICAgICAgICAgICAgICBlY2hvIG4uc21kX2FrZXlfc2VhcmNoX2Zv cm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KICAgICAgICAgICAgICAgICAgICBuLmdyYWYo Z1R4dCgnbm9fcmVzdWx0c19mb3VuZCcpLCAnIGNsYXNzPSJpbmRpY2F0b3IiJykuJzwvZGl2 Pic7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICAkbGltaXQgPSBtYXgoJHNtZF9ha2V5X2xpc3RfcGFnZWJ5LCAxNSk7Cgog ICAgICAgIGxpc3QoJHBhZ2UsICRvZmZzZXQsICRudW1QYWdlcykgPSBwYWdlcigkdG90YWws ICRsaW1pdCwgJHBhZ2UpOwoKICAgICAgICBlY2hvIG4uc21kX2FrZXlfc2VhcmNoX2Zvcm0o JGNyaXQsICRzZWFyY2hfbWV0aG9kKS4nPC9kaXY+JzsKCiAgICAgICAgLy8gUmV0cmlldmUg dGhlIHNlY3JldCBrZXlyaW5nIHRhYmxlIGVudHJpZXMuCiAgICAgICAgJHNlY3JpbmcgPSBz YWZlX3Jvd3MoJyonLCBTTURfQUtFWVMsICIkY3JpdGVyaWEgb3JkZXIgYnkgJHNvcnRfc3Fs IGxpbWl0ICRvZmZzZXQsICRsaW1pdCIpOwoKICAgICAgICAvLyBTZXQgdXAgdGhlIGJ1dHRv bnMgYW5kIGNvbHVtbiBpbmZvLgogICAgICAgICRuZXdidG4gPSAnPGEgY2xhc3M9Im5hdmxp bmsiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBzbWRfYWtleV90b2dnbGVuZXcoKTsiPicu Z1R4dCgnc21kX2FrZXlfYnRuX25ldycpLic8L2E+JzsKICAgICAgICAkcHJlZmJ0biA9ICc8 YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9ha2V5X2V2ZW50LmEuJ3N0 ZXA9c21kX2FrZXlfcHJlZnMiPicuZ1R4dCgnc21kX2FrZXlfYnRuX3ByZWYnKS4nPC9hPic7 CiAgICAgICAgJHNob3dpcCA9IGdldF9wcmVmKCdzbWRfYWtleV9sb2dfaXAnLCAkc21kX2Fr ZXlfcHJlZnNbJ3NtZF9ha2V5X2xvZ19pcCddWydkZWZhdWx0J10sIDEpOwoKICAgICAgICBl Y2hvIDw8PEVPQwo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIHNt ZF9ha2V5X3RvZ2dsZW5ldygpCnsKICAgIGJveCA9IGpRdWVyeSgiI3NtZF9ha2V5X2NyZWF0 ZSIpOwogICAgaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsKICAgICAgICBi b3guc2hvdygpOwogICAgfSBlbHNlIHsKICAgICAgICBib3guaGlkZSgpOwogICAgfQogICAg alF1ZXJ5KCJpbnB1dC5zbWRfZm9jdXMiKS5mb2N1cygpOwogICAgcmV0dXJuIGZhbHNlOwp9 CmpRdWVyeShmdW5jdGlvbigpIHsKICAgIGpRdWVyeSgiI3NtZF9ha2V5X2FkZCIpLmNsaWNr KGZ1bmN0aW9uICgpIHsKICAgICAgICBqUXVlcnkoIiNzbWRfYWtleV9zdGVwIikudmFsKCdz bWRfYWtleV9jcmVhdGUnKTsKICAgICAgICBqUXVlcnkoIiNzbWRfYWtleV9mb3JtIikucmVt b3ZlQXR0cignb25zdWJtaXQnKS5zdWJtaXQoKTsKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CkVP QzsKICAgICAgICAvLyBJbmplY3Qgc3R5bGVzLgogICAgICAgIGVjaG8gJzxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+JyAuICRzbWRfYWtleV9zdHlsZXNbJ2xpc3QnXSAuICc8L3N0eWxlPic7 CgogICAgICAgIC8vIEFjY2VzcyBrZXkgbGlzdC4KICAgICAgICBlY2hvIG4uJzxkaXYgaWQ9 IicuJHNtZF9ha2V5X2V2ZW50LidfY29udGFpbmVyIiBjbGFzcz0idHhwLWNvbnRhaW5lciB0 eHAtbGlzdCI+JzsKICAgICAgICBlY2hvICc8Zm9ybSBuYW1lPSJsb25nZm9ybSIgaWQ9InNt ZF9ha2V5X2Zvcm0iIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiIG9uc3VibWl0 PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nOwogICAg ICAgIGVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwogICAgICAgIGVjaG8gbi4nPHRoZWFkPicK ICAgICAgICAgICAgLm4udHIodGRhKCRuZXdidG4gLiBzcCAuICRwcmVmYnRuLCAnIGNsYXNz PSJub2xpbmUiJykpCiAgICAgICAgICAgIC5uLnRyKAogICAgICAgICAgICAgICAgbi5jb2x1 bW5faGVhZChnVHh0KCdzbWRfYWtleV9wYWdlJyksICdwYWdlJywgJHNtZF9ha2V5X2V2ZW50 LCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdwYWdlJyA9 PSAkc29ydCkgPyAiJGRpciAiIDogJycpLidwYWdlJykuCiAgICAgICAgICAgICAgICBuLmNv bHVtbl9oZWFkKGdUeHQoJ3NtZF9ha2V5X3RyaWdnZXInKSwgJ3RyaWdnYWgnLCAkc21kX2Fr ZXlfZXZlbnQsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgo J3RyaWdnYWgnID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykpLgogICAgICAgICAgICAgICAg bi5jb2x1bW5faGVhZChnVHh0KCdzbWRfYWtleV90aW1lJyksICd0aW1lJywgJHNtZF9ha2V5 X2V2ZW50LCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCd0 aW1lJyA9PSAkc29ydCkgPyAiJGRpciAiIDogJycpLidkYXRlIHRpbWUnKS4KICAgICAgICAg ICAgICAgIG4uaENlbGwoZ1R4dCgnZXhwaXJlcycpLCAnZXhwaXJlcycsICcgY2xhc3M9ImRh dGUgdGltZSInKS4KICAgICAgICAgICAgICAgIG4uY29sdW1uX2hlYWQoZ1R4dCgnc21kX2Fr ZXlfbWF4JyksICdtYXhpbXVtJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVlLCAkc3dpdGNoX2Rp ciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdtYXhpbXVtJyA9PSAkc29ydCkgPyAiJGRp ciAiIDogJycpKS4KICAgICAgICAgICAgICAgIG4uY29sdW1uX2hlYWQoZ1R4dCgnc21kX2Fr ZXlfYWNjZXNzZXMnKSwgJ2FjY2Vzc2VzJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVlLCAkc3dp dGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdhY2Nlc3NlcycgPT0gJHNvcnQp ID8gIiRkaXIgIiA6ICcnKSkuCiAgICAgICAgICAgICAgICAoKCRzaG93aXApID8gbi5jb2x1 bW5faGVhZCgnSVAnLCAnaXAnLCAkc21kX2FrZXlfZXZlbnQsIHRydWUsICRzd2l0Y2hfZGly LCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgoJ2lwJyA9PSAkc29ydCkgPyAiJGRpciAiIDog JycpLidpcCcpIDogJycpLgogICAgICAgICAgICAgICAgbi5oQ2VsbCgnJywgJycsICcgY2xh c3M9Im11bHRpLWVkaXQiJykKICAgICAgICAgICAgKS4KICAgICAgICAgICAgbi4nPC90aGVh ZD4nOwoKICAgICAgICAkbXVsdGlPcHRzID0gYXJyYXkoJ3NtZF9ha2V5X2RlbGV0ZScgPT4g Z1R4dCgnZGVsZXRlJykpOwoKICAgICAgICBlY2hvICc8dGZvb3Q+JyAuIHRyKHRkYSgKICAg ICAgICAgICAgICAgIHNlbGVjdElucHV0KCdzbWRfYWtleV9tdWx0aV9lZGl0JywgJG11bHRp T3B0cywgJycsIHRydWUpCiAgICAgICAgICAgICAgICAubi5lSW5wdXQoJHNtZF9ha2V5X2V2 ZW50KQogICAgICAgICAgICAgICAgLm4uZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnZ28n KSwgJ3NtYWxsZXJib3gnKQogICAgICAgICAgICAsJyBjbGFzcz0ibXVsdGktZWRpdCIgY29s c3Bhbj0iJyAuICgoJHNob3dpcCkgPyA3IDogNikgLiAnIiBzdHlsZT0idGV4dC1hbGlnbjog cmlnaHQ7IGJvcmRlcjogbm9uZTsiJykpOwogICAgICAgIGVjaG8gJzwvdGZvb3Q+JzsKICAg ICAgICBlY2hvICc8dGJvZHk+JzsKCiAgICAgICAgLy8gTmV3IGFjY2VzcyBrZXkgcm93Lgog ICAgICAgIGVjaG8gJzx0ciBpZD0ic21kX2FrZXlfY3JlYXRlIiBjbGFzcz0ic21kX2hpZGRl biI+JzsKICAgICAgICBlY2hvIHRkKGZJbnB1dCgnaGlkZGVuJywgJ3N0ZXAnLCAnc21kX2Fr ZXlfbXVsdGlfZWRpdCcsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF9ha2V5X3N0ZXAnKS5m SW5wdXQoJ3RleHQnLCAnc21kX2FrZXlfbmV3cGFnZScsICcnLCAnc21kX2ZvY3VzJywgJycs ICcnLCAnNjAnKSkKICAgICAgICAgICAgLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfYWtleV90 cmlnZ2FoJywgJycpKQogICAgICAgICAgICAudGQoZklucHV0KCd0ZXh0JywgJ3NtZF9ha2V5 X3RpbWUnLCBzYWZlX3N0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycpLCAnJywgJycsICcn LCAnMjUnKSkKICAgICAgICAgICAgLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfYWtleV9leHBp cmVzJywgJycsICcnLCAnJywgJycsICcyNScpKQogICAgICAgICAgICAudGQoZklucHV0KCd0 ZXh0JywgJ3NtZF9ha2V5X21heGltdW0nLCAnJywgJycsICcnLCAnJywgJzUnKSkKICAgICAg ICAgICAgLnRkKCcmbmJzcDsnKQogICAgICAgICAgICAuICgoJHNob3dpcCkgPyB0ZCgnJm5i c3A7JykgOiAnJykKICAgICAgICAgICAgLnRkKGZJbnB1dCgnc3VibWl0JywgJ3NtZF9ha2V5 X2FkZCcsIGdUeHQoJ2FkZCcpLCAnc21hbGxlcmJveCcsICcnLCAnJywgJycsICcnLCAnc21k X2FrZXlfYWRkJykpOwogICAgICAgIGVjaG8gJzwvdHI+JzsKCiAgICAgICAgLy8gUmVtYWlu aW5nIGFjY2VzcyBrZXlzLgogICAgICAgIGZvcmVhY2ggKCRzZWNyaW5nIGFzICRzZWNpZHgg PT4gJGRhdGEpIHsKICAgICAgICAgICAgaWYgKCRzaG93aXApIHsKICAgICAgICAgICAgICAg ICRpcHMgPSBkb19saXN0KCRkYXRhWydpcCddLCAnICcpOwogICAgICAgICAgICAgICAgJGlw bGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXBzIGFzICRpcCkg ewogICAgICAgICAgICAgICAgICAgICRpcGxpc3RbXSA9ICgkbG9nZ2luZyA9PSAnbm9uZScp ID8gJGlwIDogZUxpbmsoJ2xvZycsICdsb2dfbGlzdCcsICdzZWFyY2hfbWV0aG9kJywgJ2lw JywgJGlwLCAnY3JpdCcsICRpcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgICRka2V5ID0gJGRhdGFbJ3BhZ2UnXS4nfCcuJGRhdGFbJ3RfaGV4J107 CiAgICAgICAgICAgICR0aW1lcGFydHMgPSBkb19saXN0KCRkYXRhWyd0X2hleCddLCAnLScp OwogICAgICAgICAgICAkZXhwaXJ5ID0gKGlzc2V0KCR0aW1lcGFydHNbMV0pKSA/IGhleGRl YygkdGltZXBhcnRzWzFdKSA6ICcnOwoKICAgICAgICAgICAgZWNobyB0cigKICAgICAgICAg ICAgICAgIHRkKCc8YSBocmVmPSInLiRkYXRhWydwYWdlJ10uJyI+Jy4kZGF0YVsncGFnZSdd Lic8L2E+JywgJycsICdwYWdlJykKICAgICAgICAgICAgICAgIC4gdGQoJGRhdGFbJ3RyaWdn YWgnXSkKICAgICAgICAgICAgICAgIC4gdGQoc2FmZV9zdHJmdGltZSgnJVktJW0tJWQgJUg6 JU06JVMnLCAkZGF0YVsndGltZSddKSwgODUsICdkYXRlIHRpbWUnKQogICAgICAgICAgICAg ICAgLiB0ZCggKCgkZXhwaXJ5KSA/IHNhZmVfc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNOiVT JywgJGV4cGlyeSkgOiAnLScpLCA4NSwgJ2RhdGUgdGltZScpCiAgICAgICAgICAgICAgICAu IHRkKCRkYXRhWydtYXhpbXVtJ10pCiAgICAgICAgICAgICAgICAuIHRkKCRkYXRhWydhY2Nl c3NlcyddKQogICAgICAgICAgICAgICAgLiAoICgkc2hvd2lwKSA/IHRkKCB0cmltKGpvaW4o JyAnLCAkaXBsaXN0KSksIDIwLCAnaXAnICkgOiAnJyApCiAgICAgICAgICAgICAgICAuIHRk KCBmSW5wdXQoJ2NoZWNrYm94JywgJ3NlbGVjdGVkW10nLCAkZGtleSwgJ2NoZWNrYm94Jyks ICcnLCAnbXVsdGktZWRpdCcpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVj aG8gJzwvdGJvZHk+JzsKICAgICAgICBlY2hvIGVuZFRhYmxlKCk7CiAgICAgICAgZWNobyAn PC9mb3JtPic7CgogICAgICAgIGVjaG8gJzxkaXYgaWQ9IicuJHNtZF9ha2V5X2V2ZW50Lidf bmF2aWdhdGlvbiIgY2xhc3M9InR4cC1uYXZpZ2F0aW9uIj4nLgogICAgICAgICAgICBuLm5h dl9mb3JtKCRzbWRfYWtleV9ldmVudCwgJHBhZ2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIs ICRjcml0LCAkc2VhcmNoX21ldGhvZCwgJHRvdGFsLCAkbGltaXQpLgoKICAgICAgICAgICAg bi5wYWdlYnlfZm9ybSgkc21kX2FrZXlfZXZlbnQsICRzbWRfYWtleV9saXN0X3BhZ2VieSku CiAgICAgICAgICAgIG4uJzwvZGl2Picubi4nPC9kaXY+JzsKCiAgICB9IGVsc2UgewogICAg ICAgIC8vIFRhYmxlIG5vdCBpbnN0YWxsZWQuCiAgICAgICAgJGJ0bkluc3RhbGwgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYWtleV9ldmVudC5hLidz dGVwPXNtZF9ha2V5X3RhYmxlX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5m SW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzbWRfYWtleV90YmxfaW5zdGFsbF9s YmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPic7CiAgICAgICAgJGJ0blN0eWxlID0gJyBz dHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsKICAgICAgICBlY2hvIHN0YXJ0VGFibGUo J2xpc3QnKTsKICAgICAgICBlY2hvIHRyKHRkYShzdHJvbmcoZ1R4dCgnc21kX2FrZXlfcHJl ZnNfc29tZV90YmwnKSkuYnIuYnIKICAgICAgICAgICAgICAgIC5nVHh0KCdzbWRfYWtleV9w cmVmc19zb21lX2V4cGxhaW4nKS5ici5icgogICAgICAgICAgICAgICAgLmdUeHQoJ3NtZF9h a2V5X3ByZWZzX3NvbWVfb3B0cycpLCAnIGNvbHNwYW49IjIiJykKICAgICAgICApOwogICAg ICAgIGVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsKICAgICAgICBlY2hv IGVuZFRhYmxlKCk7CiAgICB9Cn0KCi8qKgogKiBDaGFuZ2UgYW5kIHN0b3JlIHF0eS1wZXIt cGFnZSB2YWx1ZS4KICovCmZ1bmN0aW9uIHNtZF9ha2V5X2NoYW5nZV9wYWdlYnkoKQp7CiAg ICBldmVudF9jaGFuZ2VfcGFnZWJ5KCdzbWRfYWtleScpOwogICAgc21kX2FrZXkoKTsKfQoK LyoqCiAqIFRoZSBzZWFyY2ggZHJvcGRvd24gbGlzdC4KICoKICogQHBhcmFtICBzdHJpbmcg JGNyaXQgICAocmVxKSBTZWFyY2ggY3JpdGVyaWEKICogQHBhcmFtICBzdHJpbmcgJG1ldGhv ZCAocmVxKSBTZWFyY2ggbWV0aG9kIChmaWVsZCB1c2VkKQogKiBAcmV0dXJuIEhUTUwgU2Vh cmNoIGZvcm0KICovCmZ1bmN0aW9uIHNtZF9ha2V5X3NlYXJjaF9mb3JtKCRjcml0LCAkbWV0 aG9kKQp7CiAgICBnbG9iYWwgJHNtZF9ha2V5X2V2ZW50LCAkc21kX2FrZXlfcHJlZnM7Cgog ICAgJGRvaXAgPSBnZXRfcHJlZignc21kX2FrZXlfbG9nX2lwJywgJHNtZF9ha2V5X3ByZWZz WydzbWRfYWtleV9sb2dfaXAnXVsnZGVmYXVsdCddLCAxKTsKCiAgICAkbWV0aG9kcyA9CWFy cmF5KAogICAgICAgICdwYWdlJyAgICAgPT4gZ1R4dCgnc21kX2FrZXlfcGFnZScpLAogICAg ICAgICd0cmlnZ2FoJyAgPT4gZ1R4dCgnc21kX2FrZXlfdHJpZ2dlcicpLAogICAgICAgICdt YXhpbXVtJyAgPT4gZ1R4dCgnc21kX2FrZXlfbWF4JyksCiAgICAgICAgJ2FjY2Vzc2VzJyA9 PiBnVHh0KCdzbWRfYWtleV9hY2Nlc3NlcycpLAogICAgKTsKCiAgICBpZiAoJGRvaXApIHsK ICAgICAgICAkbWV0aG9kc1snaXAnXSA9IGdUeHQoJ0lQJyk7CiAgICB9CgogICAgcmV0dXJu IHNlYXJjaF9mb3JtKCRzbWRfYWtleV9ldmVudCwgJycsICRjcml0LCAkbWV0aG9kcywgJG1l dGhvZCwgJ3BhZ2UnKTsKfQoKLyoqCiAqIENyZWF0ZSBhIGtleSBmcm9tIHRoZSBhZG1pbiBz aWRlJ3MgJ05ldyBrZXknIGJ1dHRvbi4KICovCmZ1bmN0aW9uIHNtZF9ha2V5X2NyZWF0ZSgp CnsKICAgIGV4dHJhY3QoZ3BzYShhcnJheSgnc21kX2FrZXlfbmV3cGFnZScsICdzbWRfYWtl eV90cmlnZ2FoJywgJ3NtZF9ha2V5X3RpbWUnLCAnc21kX2FrZXlfZXhwaXJlcycsICdzbWRf YWtleV9tYXhpbXVtJykpKTsKCiAgICBpZiAoJHNtZF9ha2V5X25ld3BhZ2UpIHsKICAgICAg ICAvLyBKdXN0IGNhbGwgdGhlIHB1YmxpYyB0YWcgd2l0aCB0aGUgcmVsZXZhbnQgb3B0aW9u cy4KICAgICAgICAka2V5ID0gc21kX2FjY2Vzc19rZXkoCiAgICAgICAgICAgIGFycmF5KAog ICAgICAgICAgICAgICAgJ3VybCcgICAgID0+ICRzbWRfYWtleV9uZXdwYWdlLAogICAgICAg ICAgICAgICAgJ3RyaWdnZXInID0+ICRzbWRfYWtleV90cmlnZ2FoLAogICAgICAgICAgICAg ICAgJ3N0YXJ0JyAgID0+ICRzbWRfYWtleV90aW1lLAogICAgICAgICAgICAgICAgJ2V4cGly ZXMnID0+ICRzbWRfYWtleV9leHBpcmVzLAogICAgICAgICAgICAgICAgJ21heCcgICAgID0+ ICRzbWRfYWtleV9tYXhpbXVtLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAk bXNnID0gZ1R4dCgnc21kX2FrZXlfZ2VuZXJhdGVkJywgYXJyYXkoJ3trZXl9JyA9PiAka2V5 KSk7CiAgICB9IGVsc2UgewogICAgICAgICRtc2cgPSBhcnJheShnVHh0KCdzbWRfYWtleV9u ZWVkX3BhZ2UnKSwgRV9FUlJPUik7CiAgICB9CgogICAgc21kX2FrZXkoJG1zZyk7Cn0KCi8q KgogKiBIYW5kbGUgc3VibWlzc2lvbiBvZiB0aGUgbXVsdGktZWRpdCBkcm9wZG93biBvcHRp b25zLgogKi8KZnVuY3Rpb24gc21kX2FrZXlfbXVsdGlfZWRpdCgpCnsKICAgICRzZWxlY3Rl ZCA9IGdwcygnc2VsZWN0ZWQnKTsKICAgICRvcGVyYXRpb24gPSBncHMoJ3NtZF9ha2V5X211 bHRpX2VkaXQnKTsKICAgICRkZWwgPSAwOwogICAgJG1zZyA9ICcnOwoKICAgIHN3aXRjaCAo JG9wZXJhdGlvbikgewogICAgICAgIGNhc2UgJ3NtZF9ha2V5X2RlbGV0ZSc6CiAgICAgICAg ICAgIGlmICgkc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3Rl ZCBhcyAkc2VsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnfCcs ICRzZWwpOwogICAgICAgICAgICAgICAgICAgICRyZXQgPSBzYWZlX2RlbGV0ZShTTURfQUtF WVMsICJwYWdlID0gJyIgLiAkcGFydHNbMF0gLiAiJyBBTkQgdF9oZXggPSAnIiAuICRwYXJ0 c1sxXSAuICInIik7CiAgICAgICAgICAgICAgICAgICAgJGRlbCA9ICgkcmV0KSA/ICRkZWwr MSA6ICRkZWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbXNnID0gZ1R4 dCgnc21kX2FrZXlfZGVsZXRlZCcsIGFycmF5KCd7ZGVsZXRlZH0nID0+ICRkZWwpKTsKICAg ICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHNtZF9ha2V5KCRtc2cpOwp9 CgovKioKICogRGlzcGxheSB0aGUgcHJlZnMuCiAqCiAqIEByZXR1cm4gSFRNTCBQYWdlIHN1 Yi1jb250ZW50LgogKi8KZnVuY3Rpb24gc21kX2FrZXlfcHJlZnMoKQp7CiAgICBnbG9iYWwg JHNtZF9ha2V5X2V2ZW50LCAkc21kX2FrZXlfcHJlZnM7CgogICAgcGFnZXRvcChnVHh0KCdz bWRfYWtleV9wcmVmX2xlZ2VuZCcpKTsKCiAgICAkb3V0ID0gYXJyYXkoKTsKICAgICRvdXRb XSA9ICc8Zm9ybSBuYW1lPSJzbWRfYWtleV9wcmVmcyIgaWQ9InNtZF9ha2V5X3ByZWZzIiBh Y3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nOwogICAgJG91dFtdID0gZUlucHV0 KCRzbWRfYWtleV9ldmVudCkuc0lucHV0KCdzbWRfYWtleV9wcmVmc2F2ZScpOwogICAgJG91 dFtdID0gc3RhcnRUYWJsZSgnbGlzdCcpOwogICAgJG91dFtdID0gdHIodGRjcyhzdHJvbmco Z1R4dCgnc21kX2FrZXlfcHJlZl9sZWdlbmQnKSksIDIpKTsKICAgIGZvcmVhY2ggKCRzbWRf YWtleV9wcmVmcyBhcyAkaWR4ID0+ICRwcmVmb2JqKSB7CiAgICAgICAgJHN1Ym91dCA9IGFy cmF5KCk7CiAgICAgICAgJHN1Ym91dFtdID0gdGRhKCc8bGFiZWwgZm9yPSInLiRpZHguJyI+ Jy5nVHh0KCRpZHgpLic8L2xhYmVsPicsICcgY2xhc3M9Im5vbGluZSIgc3R5bGU9InRleHQt YWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInKTsKICAgICAgICAkdmFs ID0gZ2V0X3ByZWYoJGlkeCwgJHByZWZvYmpbJ2RlZmF1bHQnXSk7CiAgICAgICAgc3dpdGNo ICgkcHJlZm9ialsnaHRtbCddKSB7CiAgICAgICAgICAgIGNhc2UgJ3RleHRfaW5wdXQnOgog ICAgICAgICAgICAgICAgJHN1Ym91dFtdID0gZklucHV0Q2VsbCgkaWR4LCAkdmFsLCAnJywg JycsICcnLCAkaWR4KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3ll c25vcmFkaW8nOgogICAgICAgICAgICAgICAgJHN1Ym91dFtdID0gdGRhKHllc25vUmFkaW8o JGlkeCwgJHZhbCksJyBjbGFzcz0ibm9saW5lIicpOwogICAgICAgICAgICBicmVhazsKICAg ICAgICB9CiAgICAgICAgJG91dFtdID0gdHIoam9pbihuLCAkc3Vib3V0KSk7CiAgICB9Cgog ICAgJG91dFtdID0gdHIodGRhKCcmbmJzcDsnLCAnIGNsYXNzPSJub2xpbmUiJykgLiB0ZGEo ZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLCAnIGNsYXNz PSJub2xpbmUiJykpOwogICAgJG91dFtdID0gZW5kVGFibGUoKTsKICAgICRvdXRbXSA9ICc8 L2Zvcm0+JzsKCiAgICBlY2hvIGpvaW4obiwgJG91dCk7Cn0KCi8qKgogKiBTYXZlIHRoZSBw cmVmcy4KICovCmZ1bmN0aW9uIHNtZF9ha2V5X3ByZWZzYXZlKCkKewogICAgZ2xvYmFsICRz bWRfYWtleV9ldmVudCwgJHNtZF9ha2V5X3ByZWZzOwoKICAgIGZvcmVhY2ggKCRzbWRfYWtl eV9wcmVmcyBhcyAkaWR4ID0+ICRwcmVmb2JqKSB7CiAgICAgICAgJHZhbCA9IHBzKCRpZHgp OwogICAgICAgIHNldF9wcmVmKCRpZHgsICR2YWwsICRzbWRfYWtleV9ldmVudCwgJHByZWZv YmpbJ3R5cGUnXSwgJHByZWZvYmpbJ2h0bWwnXSwgJHByZWZvYmpbJ3Bvc2l0aW9uJ10pOwog ICAgfQoKICAgICRtc2cgPSBnVHh0KCdzbWRfYWtleV9wcmVmc19zYXZlZCcpOwoKICAgIHNt ZF9ha2V5KCRtc2cpOwp9CgovKioKICogQWRkIHRoZSBzbWRfYWtleXMgdGFibGUgaWYgbm90 IGFscmVhZHkgaW5zdGFsbGVkLgogKgogKiBAcGFyYW0gYm9vbCAkc2hvd3BhbmUgKG9wdCkg V2hldGhlciB0byBvcGVyYXRlIHNpbGVudGx5IG9yIGRpc3BsYXkgdGhlIGFkbWluIGludGVy ZmFjZSBvbiBjb21wbGV0aW9uCiAqLwpmdW5jdGlvbiBzbWRfYWtleV90YWJsZV9pbnN0YWxs KCRzaG93cGFuZSA9ICcxJykKewogICAgZ2xvYmFsICREQjsKCiAgICAkR0xPQkFMU1sndHhw X2Vycl9jb3VudCddID0gMDsKICAgICRyZXQgPSAnJzsKICAgICRzcWwgPSBhcnJheSgpOwoK ICAgIC8vIFVzZSAndHJpZ2dhaCcgYW5kICdtYXhpbXVtJyBiZWNhdXNlICd0cmlnZ2VyJyBh bmQgJ21heCcgYXJlIHJlc2VydmVkIHdvcmRzLgogICAgJHNxbFtdID0gIkNSRUFURSBUQUJM RSBJRiBOT1QgRVhJU1RTIGAiIC4gUEZYIC4gU01EX0FLRVlTIC4gImAgKAogICAgICAgIGBw YWdlYCB2YXJjaGFyKDI1NSkgZGVmYXVsdCAnJywKICAgICAgICBgdF9oZXhgIHZhcmNoYXIo MTcpIGRlZmF1bHQgJycsCiAgICAgICAgYHRpbWVgIGludCgxNCkgZGVmYXVsdCAwLAogICAg ICAgIGBzZWNyZXRgIHZhcmNoYXIoNTExKSBkZWZhdWx0ICcnLAogICAgICAgIGB0cmlnZ2Fo YCB2YXJjaGFyKDI1NSkgZGVmYXVsdCAnJywKICAgICAgICBgbWF4aW11bWAgaW50KDExKSBk ZWZhdWx0IDAsCiAgICAgICAgYGFjY2Vzc2VzYCBpbnQoMTEpIGRlZmF1bHQgMCwKICAgICAg ICBgaXBgIHRleHQsCiAgICAgICAgUFJJTUFSWSBLRVkgKGBwYWdlYCxgdF9oZXhgKQogICAg KSBFTkdJTkU9TXlJU0FNIjsKCiAgICBpZiAoZ3BzKCdkZWJ1ZycpKSB7CiAgICAgICAgZG1w KCRzcWwpOwogICAgfQoKICAgIGZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgewogICAgICAgICRy ZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOwogICAgICAgIGlmICgkcmV0PT09ZmFsc2UpIHsKICAg ICAgICAgICAgJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOwogICAgICAgICAgICBlY2hv ICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIgLiBteXNxbGlfZXJy b3IoJERCLT5saW5rKSAuICI8YnIgLz5cbiI7CiAgICAgICAgICAgIGVjaG8gIjwhLS1cbiAk cXJ5IFxuLS0+XG4iOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTcGl0IG91dCByZXN1bHRz LgogICAgaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgewogICAgICAgIGlm ICgkc2hvd3BhbmUpIHsKICAgICAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF9ha2V5X3RibF9p bnN0YWxsZWQnKTsKICAgICAgICAgICAgc21kX2FrZXkoJG1zZyk7CiAgICAgICAgfQogICAg fSBlbHNlIHsKICAgICAgICBpZiAoJHNob3dwYW5lKSB7CiAgICAgICAgICAgICRtc2cgPSBn VHh0KCdzbWRfYWtleV90Ymxfbm90X2luc3RhbGxlZCcpOwogICAgICAgICAgICBzbWRfYWtl eSgkbXNnKTsKICAgICAgICB9CiAgICB9Cn0KCi8qKgogKiBEcm9wIHNtZF9ha2V5cyB0YWJs ZSBpZiBpbiBkYXRhYmFzZS4KICovCmZ1bmN0aW9uIHNtZF9ha2V5X3RhYmxlX3JlbW92ZSgp CnsKICAgIGdsb2JhbCAkREI7CgogICAgJHJldCA9ICcnOwogICAgJHNxbCA9IGFycmF5KCk7 CiAgICAkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsKCiAgICBpZiAoc21kX2FrZXlf dGFibGVfZXhpc3QoKSkgewogICAgICAgICRzcWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNU UyAiIC5QRlggLiBTTURfQUtFWVMuICI7ICI7CiAgICAgICAgaWYgKGdwcygnZGVidWcnKSkg ewogICAgICAgICAgICBkbXAoJHNxbCk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgk c3FsIGFzICRxcnkpIHsKICAgICAgICAgICAgJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7CiAg ICAgICAgICAgIGlmICgkcmV0PT09ZmFsc2UpIHsKICAgICAgICAgICAgICAgICRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10rKzsKICAgICAgICAgICAgICAgIGVjaG8gIjxiPiIuJEdMT0JB TFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIiAuIG15c3FsaV9lcnJvcigkREItPmxpbmsp IC4gIjxiciAvPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+ XG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkR0xPQkFMU1sn dHhwX2Vycl9jb3VudCddID09IDApIHsKICAgICAgICAkbXNnID0gZ1R4dCgnc21kX2FrZXlf dGJsX3JlbW92ZWQnKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF9h a2V5X3RibF9ub3RfcmVtb3ZlZCcpOwogICAgICAgIHNtZF9ha2V5KCRtc2cpOwogICAgfQp9 CgovKioKICogQ2hlY2sgaWYgdGhlIHNtZF9ha2V5cyB0YWJsZSBleGlzdHMuCiAqCiAqIEBw YXJhbSAgYm9vbCAkdHlwZSAob3B0KSBGdWxsIGNoZWNrICgxKSwgb3IgY29sdW1uIGNvdW50 IGNoZWNrCiAqIEByZXR1cm4gYm9vbCB8IGNvbHVtbiBjb3VudAogKi8KZnVuY3Rpb24gc21k X2FrZXlfdGFibGVfZXhpc3QoJHR5cGUgPSAnJykKewogICAgZ2xvYmFsICRwbHVnaW5zX3Zl ciwgJERCOwoKICAgIC8vIFVwZ3JhZGUgY2hlY2suCiAgICAkdmVyID0gZ2V0X3ByZWYoJ3Nt ZF9ha2V5X2luc3RhbGxlZF92ZXJzaW9uJywgJycpOwoKICAgIGlmICghJHZlciB8fCAkcGx1 Z2luc192ZXJbJ3NtZF9hY2Nlc3Nfa2V5cyddICE9ICR2ZXIpIHsKICAgICAgICAvLyBJbmNy ZWFzZSB0aGUgc2l6ZSBvZiB0aGUgdF9oZXggZmllbGQgdG8gYWxsb3cgZm9yIGV4cGlyeSB0 aW1lcy4KICAgICAgICAkcmV0ID0gQHNhZmVfZmllbGQoIkNIQVJBQ1RFUl9NQVhJTVVNX0xF TkdUSCIsICJJTkZPUk1BVElPTl9TQ0hFTUEuQ09MVU1OUyIsICJ0YWJsZV9uYW1lID0gJyIg LiBQRlggLiBTTURfQUtFWVMgLiAiJyBBTkQgdGFibGVfc2NoZW1hID0gJyIgLiAkREItPmRi IC4gIicgQU5EIGNvbHVtbl9uYW1lID0gJ3RfaGV4JyIpOwoKICAgICAgICBpZiAoJHJldCAh PSAnMTcnKSB7CiAgICAgICAgICAgIHNhZmVfYWx0ZXIoU01EX0FLRVlTLCAiQ0hBTkdFIGB0 X2hleGAgYHRfaGV4YCBWQVJDSEFSKCAxNyApIERFRkFVTFQgJyciKTsKICAgICAgICB9Cgog ICAgICAgIC8vIEluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBzZWNyZXQgZmllbGQgdG8gYWxs b3cgZm9yIGxvbmdlciBrZXlzLgogICAgICAgICRyZXQgPSBAc2FmZV9maWVsZCgiQ0hBUkFD VEVSX01BWElNVU1fTEVOR1RIIiwgIklORk9STUFUSU9OX1NDSEVNQS5DT0xVTU5TIiwgInRh YmxlX25hbWUgPSAnIiAuIFBGWCAuIFNNRF9BS0VZUyAuICInIEFORCB0YWJsZV9zY2hlbWEg PSAnIiAuICREQi0+ZGIgLiAiJyBBTkQgY29sdW1uX25hbWUgPSAnc2VjcmV0JyIpOwoKICAg ICAgICBpZiAoJHJldCAhPSAnNTExJykgewogICAgICAgICAgICBzYWZlX2FsdGVyKFNNRF9B S0VZUywgIkNIQU5HRSBgc2VjcmV0YCBgc2VjcmV0YCBWQVJDSEFSKCA1MTEgKSBERUZBVUxU ICcnIik7CiAgICAgICAgfQoKICAgICAgICBzZXRfcHJlZignc21kX2FrZXlfaW5zdGFsbGVk X3ZlcnNpb24nLCAkcGx1Z2luc192ZXJbJ3NtZF9hY2Nlc3Nfa2V5cyddLCAnc21kX2FrZXkn LCBQUkVGX0hJRERFTiwgJycsIDApOwogICAgfQoKICAgIGlmICgkdHlwZSA9PSAnMScpIHsK ICAgICAgICAkdGJscyA9IGFycmF5KFNNRF9BS0VZUyA9PiA4KTsKICAgICAgICAkb3V0ID0g Y291bnQoJHRibHMpOwogICAgICAgIGZvcmVhY2ggKCR0YmxzIGFzICR0YmwgPT4gJGNvbHMp IHsKICAgICAgICAgICAgaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkg PT0gJGNvbHMpIHsKICAgICAgICAgICAgICAgICRvdXQtLTsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgICByZXR1cm4gKCRvdXQ9PT0wKSA/IDEgOiAwOwogICAgfSBlbHNlIHsK ICAgICAgICByZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9BS0VZUykpOwogICAg fQp9CgovKioKICogQ2FsbGJhY2ssIGlzc3VlZCBqdXN0IGJlZm9yZSBhIGRvd25sb2FkIGlz IGluaXRpYXRlZC4KICoKICogQHBhcmFtICBzdHJpbmcgJGV2dCAocmVxKSBUZXh0cGF0dGVy biBldmVudAogKiBAcGFyYW0gIHN0cmluZyAkc3RwIChyZXEpIFRleHRwYXR0ZXJuIHN0ZXAK ICAqLwpmdW5jdGlvbiBzbWRfYWNjZXNzX3Byb3RlY3RfZG93bmxvYWQoJGV2dCwgJHN0cCkK ewogICAgZ2xvYmFsICRzbWRfYWtleV9wcmVmcywgJGlkLCAkZmlsZV9lcnJvcjsKCiAgICBp ZiAoc21kX2FrZXlfdGFibGVfZXhpc3QoMSkgJiYgIWlzc2V0KCRmaWxlX2Vycm9yKSkgewog ICAgICAgICRmaWxlaWQgPSBpbnR2YWwoJGlkKTsKCiAgICAgICAgLy8gSW4gY2FzZSB0aGUg cGFnZSB3YXMgY2FsbGVkIHdpdGggYSBib2d1cyBmaWxlbmFtZSwgZ2V0IHRoZSAidHJ1ZSIg ZmlsZW5hbWUKICAgICAgICAvLyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgbWFrZSB1cCB0aGUg dmFsaWQgVVJMLgogICAgICAgICRyZWFsX2ZpbGUgPSBzYWZlX2ZpZWxkKCJmaWxlbmFtZSIs ICJ0eHBfZmlsZSIsICJpZD0iLmRvU2xhc2goJGZpbGVpZCkpOwogICAgICAgICRwYWdlID0g ZmlsZWRvd25sb2FkdXJsKCRmaWxlaWQsICRyZWFsX2ZpbGUpOwogICAgICAgICRzZWNyaW5n ID0gc2FmZV9maWVsZCgncGFnZScsIFNNRF9BS0VZUywgInBhZ2U9JyIuZG9TbGFzaCgkcGFn ZSkuIiciKTsKCiAgICAgICAgLy8gT25seSB3YW50IHRvIHByb3RlY3QgcGFnZXMgdGhhdCB3 ZSd2ZSBnZW5lcmF0ZWQgdG9rZW5zIGZvci4KICAgICAgICBpZiAoJHNlY3JpbmcpIHsKICAg ICAgICAgICAgLy8gUGFzcyBpbiBhIGRlZmF1bHQgZXhwaXJ5IGZyb20gdGhlIHByZWYsIGJ1 dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUga2V5J3MgZXhwaXJ5LgogICAgICAgICAg ICByZXR1cm4gc21kX2FjY2Vzc19wcm90ZWN0KAogICAgICAgICAgICAgICAgYXJyYXkoCiAg ICAgICAgICAgICAgICAgICAgJ3RyaWdnZXInID0+ICdmaWxlX2Rvd25sb2FkJywKICAgICAg ICAgICAgICAgICAgICAnZm9yY2UnICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICdl eHBpcmVzJyA9PiBnZXRfcHJlZignc21kX2FrZXlfZmlsZV9kb3dubG9hZF9leHBpcmVzJywg JHNtZF9ha2V5X3ByZWZzWydzbWRfYWtleV9maWxlX2Rvd25sb2FkX2V4cGlyZXMnXVsnZGVm YXVsdCddKSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAg ICB9CgogICAgLy8gUmVtb3RlIGRvd25sb2FkIG5vdCBkb25lIC0gbGVhdmUgdG8gVHhwIHRv IGhhbmRsZSBlcnJvciBvciAibG9jYWwiIGZpbGUgZG93bmxvYWQuCiAgICByZXR1cm47Cn0K Ci8qKgogKiBQVUJMSUMgU0lERSBJTlRFUkZBQ0UKICogPT09PT09PT09PT09PT09PT09PT09 CiAqCiAqIFRhZzogR2VuZXJhdGUgYW4gYWNjZXNzIHRva2VuLgogKgogKiBAcGFyYW0gIGFy cmF5ICRhdHRzICAocmVxKSBUYWcgYXR0cmlidXRlIGxpc3QKICogQHBhcmFtICBhcnJheSAk dGhpbmcgKG9wdCkgVGFnIGNvbnRhaW5lciBjb250ZW50CiAqIEByZXR1cm4gSFRNTAogKi8K ZnVuY3Rpb24gc21kX2FjY2Vzc19rZXkoJGF0dHMsICR0aGluZyA9IG51bGwpCnsKICAgIGds b2JhbCAkc21kX2FrZXlfcHJlZnMsICRzbWRfYWtleV9pbmZvOwoKICAgIC8vIEluIGNhc2Ug dGhpcyB0YWcgaXMgY2FsbGVkIGZyb20gdGhlIGFkbWluIHNpZGUgLSBuZWVkcyBwYXJzZSgp LgogICAgaW5jbHVkZV9vbmNlIHR4cGF0aC4nL3B1Ymxpc2gucGhwJzsKCiAgICBleHRyYWN0 KGxBdHRzKGFycmF5KAogICAgICAgICdzZWNyZXQnICAgICAgID0+ICcnLAogICAgICAgICd1 cmwnICAgICAgICAgID0+ICcnLAogICAgICAgICdzaXRlX25hbWUnICAgID0+ICcxJywKICAg ICAgICAnc2VjdGlvbl9tb2RlJyA9PiAnMCcsCiAgICAgICAgJ3N0YXJ0JyAgICAgICAgPT4g JycsCiAgICAgICAgJ2V4cGlyZXMnICAgICAgPT4gJycsCiAgICAgICAgJ3RyaWdnZXInICAg ICAgPT4gJ3NtZF9ha2V5JywKICAgICAgICAnbWF4JyAgICAgICAgICA9PiAnJywKICAgICAg ICAnZXh0cmEnICAgICAgICA9PiAnJywKICAgICAgICAnZm9ybScgICAgICAgICA9PiAnJywK ICAgICAgICAnc3RyZW5ndGgnICAgICA9PiAnU01EX1NTTF9SQU5EJywgLy8gb3IgU01EX01E NSwgb3IgeW91ciBvd24gc2FsdAogICAgKSwgJGF0dHMpKTsKCiAgICBpZiAoc21kX2FrZXlf dGFibGVfZXhpc3QoMSkpIHsKICAgICAgICAkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICR0 aGluZyA6IGZldGNoX2Zvcm0oJGZvcm0pOwogICAgICAgICR0aGluZyA9IChlbXB0eSgkdGhp bmcpKSA/ICc8dHhwOnNtZF9hY2Nlc3NfaW5mbyBpdGVtPSJrZXkiIC8+JyA6ICR0aGluZzsK CiAgICAgICAgJHRyaWdnZXIgPSB0cmltKCR0cmlnZ2VyKTsKICAgICAgICAkdHJpZ2dlciA9 ICgkdHJpZ2dlciA9PSAnZmlsZV9kb3dubG9hZCcpID8gJycgOiAkdHJpZ2dlcjsKICAgICAg ICAkaGFzU1NMID0gZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0 ZXMnKTsKCiAgICAgICAgJHNtZF9ha2V5X3NhbHRfbGVuZ3RoID0gZ2V0X3ByZWYoJ3NtZF9h a2V5X3NhbHRfbGVuZ3RoJywgJHNtZF9ha2V5X3ByZWZzWydzbWRfYWtleV9zYWx0X2xlbmd0 aCddWydkZWZhdWx0J10pOwoKICAgICAgICAvLyBXaXRob3V0IGEgVVJMLCBhc3N1bWUgY3Vy cmVudCBwYWdlLgogICAgICAgICRwYWdlID0gcnRyaW0oICgoJHVybCkgPyAkdXJsIDogc2Vy dmVyU2V0KCdSRVFVRVNUX1VSSScpKSwgJy8nKTsKCiAgICAgICAgaWYgKCRzaXRlX25hbWUg JiYgKHN0cnBvcygkcGFnZSwgJ2h0dHAnKSAhPT0gMCkpIHsKICAgICAgICAgICAgLy8gQ2Fu J3QgdXNlIHJhdyBodSBzaW5jZSBpdCBjb250YWlucyB0aGUgc3ViZGlyIChhcyBkb2VzIHRo ZSBSRVFVRVNUX1VSSSkKICAgICAgICAgICAgLy8gc28gZHVwbGljYXRlIHBvcnRpb25zIHdv dWxkIG9jY3VyIGluIHRoZSBnZW5lcmF0ZWQgVVJMLgogICAgICAgICAgICAkdXJscGFydHMg PSBwYXJzZV91cmwoaHUpOwogICAgICAgICAgICAkcGFnZSA9ICR1cmxwYXJ0c1snc2NoZW1l J10gLiAnOi8vJyAuICR1cmxwYXJ0c1snaG9zdCddIC4gJHBhZ2U7CiAgICAgICAgfQoKICAg ICAgICBpZiAoISRzZWNyZXQpIHsKICAgICAgICAgICAgaWYgKCRoYXNTU0wpIHsKICAgICAg ICAgICAgICAgICRzZWNyZXQgPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRl cygkc21kX2FrZXlfc2FsdF9sZW5ndGggKiA4KSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAkc2VjcmV0ID0gdW5pcWlkKCcnLCB0cnVlKTsKICAgICAgICAgICAg fQogICAgICAgIH0KCiAgICAgICAgaWYgKCRzdHJlbmd0aCA9PT0gJ1NNRF9TU0xfUkFORCcg JiYgJGhhc1NTTCkgewogICAgICAgICAgICAvLyBOZWVkIHRvIGRpdmlkZSBieSAyIHRvIHJl dGFpbiB0aGUgc2FtZSBrZXkgbGVuZ3RoIGFzIHYwLjF4LCBiZWNhdXNlIGVhY2ggYnl0ZQog ICAgICAgICAgICAvLyBoZXJlIHByb2R1Y2VzIHR3byBoZXggY2hhcmFjdGVycy4KICAgICAg ICAgICAgJHNhbHQgPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyhmbG9v cigkc21kX2FrZXlfc2FsdF9sZW5ndGggLyAyKSkpOwogICAgICAgIH0gZWxzZWlmICgkc3Ry ZW5ndGggPT09ICdTTURfTUQ1JykgIHsKICAgICAgICAgICAgJHNhbHQgPSBzdWJzdHIobWQ1 KHVuaXFpZChtdF9yYW5kKCksIHRydWUpKSwgMCwgJHNtZF9ha2V5X3NhbHRfbGVuZ3RoKTsK ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2FsdCA9IHN1YnN0cigkc3RyZW5ndGgs IDAsICRzbWRfYWtleV9zYWx0X2xlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICAkcGxlbiA9 IHN0cmxlbigkcGFnZSkgJSAzMjsgLy8gQmVjYXVzZSAzMiBpcyB0aGUgc2l6ZSBvZiBhbiBt ZDUgc3RyaW5nIGFuZCB3ZSBkb24ndCB3YW50IHRvIGZhbGwgb2ZmIHRoZSBlbmQuCgogICAg ICAgIC8vIEdlbmVyYXRlIGEgdGltZXN0YW1wLiBUaGUgY2xvY2sgc3RhcnRzIHRpY2tpbmcg ZnJvbSB0aGlzIG1vbWVudC4KICAgICAgICAkdHMgPSAoJHN0YXJ0KSA/IHNhZmVfc3RydG90 aW1lKCRzdGFydCkgOiB0aW1lKCk7CiAgICAgICAgJHRzID0gKCR0cyA9PT0gZmFsc2UpID8g dGltZSgpIDogJHRzOwogICAgICAgICR0X2hleCA9IGRlY2hleCgkdHMpOwoKICAgICAgICAv LyBBbnkgZXhwaXJ5IHRvIGFkZD8KICAgICAgICBpZiAoJGV4cGlyZXMpIHsKICAgICAgICAg ICAgLy8gUmVsYXRpdmUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IHRpbWUsIG9yIGFuIGFic29s dXRlIGV4cGlyeT8KICAgICAgICAgICAgJHJlbCA9IChzdHJwb3MoJGV4cGlyZXMsICcrJykg PT09IDApID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICBpZiAoJHJlbCkgewogICAgICAg ICAgICAgICAgJGV4cCA9IHNhZmVfc3RydG90aW1lKCRleHBpcmVzLCAkdHMpOwogICAgICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGV4cCA9IHNhZmVfc3RydG90aW1lKCRl eHBpcmVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGV4cCAhPT0gZmFsc2Up IHsKICAgICAgICAgICAgICAgICR0X2hleCAuPSAnLScgLiBkZWNoZXgoJGV4cCk7CiAgICAg ICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZS9pbnNlcnQgdGhlIHJlbWFp bmluZyBkYXRhLgogICAgICAgICRleGlzdHMgPSBzYWZlX2ZpZWxkKCdwYWdlJywgU01EX0FL RVlTLCAicGFnZT0nIi5kb1NsYXNoKCRwYWdlKS4iJyBBTkQgdF9oZXg9JyIuZG9TbGFzaCgk dF9oZXgpLiInIik7CiAgICAgICAgJG1heGluZm8gPSAnJzsKCiAgICAgICAgaWYgKCRtYXgp IHsKICAgICAgICAgICAgJG1heGluZm8gPSAiLCBtYXhpbXVtID0gJyIuZG9TbGFzaCgkbWF4 KS4iJywgYWNjZXNzZXMgPSAnMCciOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRleGlzdHMp IHsKICAgICAgICAgICAgc2FmZV91cGRhdGUoU01EX0FLRVlTLCAidHJpZ2dhaD0nIi5kb1Ns YXNoKCR0cmlnZ2VyKS4iJywgdGltZT0nIi5kb1NsYXNoKCR0cykuIicsIHNlY3JldD0nIi5k b1NsYXNoKCRzZWNyZXQpLiInIiAuICRtYXhpbmZvLCAicGFnZT0nIi5kb1NsYXNoKCRwYWdl KS4iJyBBTkQgdF9oZXg9JyIuZG9TbGFzaCgkdF9oZXgpLiInIik7CiAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgc2FmZV9pbnNlcnQoU01EX0FLRVlTLCAicGFnZT0nIi5kb1NsYXNo KCRwYWdlKS4iJywgdF9oZXg9JyIuZG9TbGFzaCgkdF9oZXgpLiInLCB0cmlnZ2FoPSciLmRv U2xhc2goJHRyaWdnZXIpLiInLCBzZWNyZXQ9JyIuZG9TbGFzaCgkc2VjcmV0KS4iJywgdGlt ZT0nIi5kb1NsYXNoKCR0cykuIiciIC4gJG1heGluZm8pOwogICAgICAgIH0KCiAgICAgICAg Ly8gVGFjayBvbiBtYXggaWYgYXBwbGljYWJsZS4KICAgICAgICAkbWF4X3NhZmUgPSAkbWF4 OwogICAgICAgICRtYXggPSAoJG1heCkgPyAnLicuJG1heCA6ICcnOwoKICAgICAgICAvLyBB bmQgYW55IGV4dHJhLgogICAgICAgICRleHRyYXRvayA9ICgkZXh0cmEpID8gJy8nLiRleHRy YSA6ICcnOwoKICAgICAgICAvLyBDcmVhdGUgdGhlIHJhdyB0b2tlbi4uLgogICAgICAgICR0 b2tlbiA9IG1kNSgkc2FsdC4kc2VjcmV0LiRwYWdlLiR0cmlnZ2VyLiR0X2hleC4kbWF4LiRl eHRyYSk7CiAgICAgICAgLy8gLi4uIGFuZCBpbnNlcnQgdGhlIHNhbHQgcGFydHdheSB0aHJv dWdoLgogICAgICAgICRzYWx0eV90b2tlbiA9IHN1YnN0cigkdG9rZW4sIDAsICRwbGVuKSAu ICRzYWx0IC4gc3Vic3RyKCR0b2tlbiwgJHBsZW4pOwogICAgICAgICR0b2tlbnNlcCA9ICgk c2VjdGlvbl9tb2RlKSA/ICc/JyA6ICcvJzsKICAgICAgICAka2V5ID0gJHBhZ2UgLiAoKCR0 cmlnZ2VyKSA/ICR0b2tlbnNlcCAuICR0cmlnZ2VyIDogJycpIC4gJy8nIC4gJHNhbHR5X3Rv a2VuIC4gJy8nIC4gJHRfaGV4IC4gJG1heCAuICRleHRyYXRvazsKCiAgICAgICAgJHNtZF9h a2V5X2luZm8gPSBhcnJheSgKICAgICAgICAgICAgJ2FrX3BhZ2UnICAgICAgPT4gJHBhZ2Us CiAgICAgICAgICAgICdha19leHRyYScgICAgID0+ICRleHRyYSwKICAgICAgICAgICAgJ2Fr X2hleHRpbWUnICAgPT4gJHRfaGV4LAogICAgICAgICAgICAnYWtfaXNzdWVkJyAgICA9PiAk dHMsCiAgICAgICAgICAgICdha19ub3cnICAgICAgID0+IHRpbWUoKSwKICAgICAgICAgICAg J2FrX2V4cGlyZXMnICAgPT4gKCRleHBpcmVzKSA/ICRleHAgOiAnJywKICAgICAgICAgICAg J2FrX3RyaWdnZXInICAgPT4gJHRyaWdnZXIsCiAgICAgICAgICAgICdha19tYXhpbXVtJyAg ID0+ICRtYXhfc2FmZSwKICAgICAgICAgICAgJ2FrX3NlcGFyYXRvcicgPT4gJHRva2Vuc2Vw LAogICAgICAgICAgICAnYWtfa2V5JyAgICAgICA9PiAka2V5LAogICAgICAgICk7CgogICAg ICAgIHJldHVybiBwYXJzZSgkdGhpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICB0cmlnZ2Vy X2Vycm9yKGdUeHQoJ3NtZF9ha2V5X3RibF9ub3RfaW5zdGFsbGVkJyksIEVfVVNFUl9OT1RJ Q0UpOwogICAgfQp9CgovKioKICogVGFnOiBQcm90ZWN0IGEgcGFnZSByZXNvdXJjZS4KICoK ICogVGhlIHJlc291cmNlIGlzIHByb3RlY3RlZCBmb3IgYSBnaXZlbiB0aW1lIGxpbWl0IGZy b20gdGhlIG1vbWVudCB0aGUKICogYWNjZXNzIHRva2VuIGhhcyBiZWVuIGdlbmVyYXRlZC4K ICoKICogRW1iZWQgdGhpcyB0YWcgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZSB0byBwcm90ZWN0 LCBvciB3cmFwIGl0IGFyb3VuZAogKiBwYXJ0IG9mIGEgcGFnZSB0byBwcm90ZWN0LiBUaGUg dW5pcXVlIFVSTCB0byB1bmxvY2sgdGhlIHJlc291cmNlCiAqIGlzIGdlbmVyYXRlZCBieSA8 dHhwOnNtZF9hY2Nlc3Nfa2V5IC8+LgogKgogKiBAcGFyYW0gIGFycmF5ICRhdHRzICAocmVx KSBUYWcgYXR0cmlidXRlIGxpc3QKICogQHBhcmFtICBhcnJheSAkdGhpbmcgKG9wdCkgVGFn IGNvbnRhaW5lciBjb250ZW50CiAqIEByZXR1cm4gSFRNTCBQcm90ZWN0ZWQgcmVzb3VyY2Ug fCBlcnJvcgogKi8KZnVuY3Rpb24gc21kX2FjY2Vzc19wcm90ZWN0KCRhdHRzLCAkdGhpbmcg PSBudWxsKQp7CiAgICBnbG9iYWwgJHNtZF9hY2Nlc3NfZXJyb3IsICRzbWRfYWNjZXNzX2Vy cmNvZGUsICRzbWRfYWtleV9wcm90ZWN0ZWRfaW5mbywgJHNtZF9ha2V5X3ByZWZzLCAkcGVy bWxpbmtfbW9kZSwgJHBsdWdpbnM7CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAg ICAndHJpZ2dlcicgICAgICA9PiAnc21kX2FrZXknLAogICAgICAgICd0cmlnZ2VyX21vZGUn ID0+ICdleGFjdCcsIC8vIGV4YWN0LCBiZWdpbnMsIGVuZHMsIGNvbnRhaW5zCiAgICAgICAg J3NpdGVfbmFtZScgICAgPT4gJzEnLAogICAgICAgICdzZWN0aW9uX21vZGUnID0+ICcwJywK ICAgICAgICAnZm9yY2UnICAgICAgICA9PiAnMCcsCiAgICAgICAgJ2V4cGlyZXMnICAgICAg PT4gJzM2MDAnLCAvLyBpbiBzZWNvbmRzCiAgICApLCAkYXR0cykpOwoKICAgIGlmIChzbWRf YWtleV90YWJsZV9leGlzdCgxKSkgewogICAgICAgICR1cmwgPSBzZXJ2ZXJTZXQoJ1JFUVVF U1RfVVJJJyk7CgogICAgICAgIGlmICgkc2l0ZV9uYW1lICYmIChzdHJwb3MoJHVybCwgaHUp ID09PSBmYWxzZSkpIHsKICAgICAgICAgICAgJHVybHBhcnRzID0gcGFyc2VfdXJsKGh1KTsK ICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIHJhdyBodSBzaW5jZSBpdCBjb250YWlucyB0aGUg c3ViZGlyIChhcyBkb2VzIHRoZSBSRVFVRVNUX1VSSSkKICAgICAgICAgICAgLy8gc28gZHVw bGljYXRlcyB3b3VsZCBvY2N1ciBpbiB0aGUgZ2VuZXJhdGVkIFVSTC4KICAgICAgICAgICAg JHVybCA9ICR1cmxwYXJ0c1snc2NoZW1lJ10gLiAnOi8vJyAuICR1cmxwYXJ0c1snaG9zdCdd IC4gJHVybDsKICAgICAgICB9CgogICAgICAgIGlmICgkc2VjdGlvbl9tb2RlID09ICcxJykg ewogICAgICAgICAgICAkaGFsdmVzID0gZXhwbG9kZSgnPycsICR1cmwpOwogICAgICAgICAg ICAkaGFsZjEgPSBleHBsb2RlKCcvJywgJGhhbHZlc1swXSk7CiAgICAgICAgICAgICRoYWxm MiA9IChpc3NldCgkaGFsdmVzWzFdKSkgPyBleHBsb2RlKCcvJywgJGhhbHZlc1sxXSkgOiBh cnJheSgpOwoKICAgICAgICAgICAgJHBhcnRzID0gYXJyYXlfbWVyZ2UoJGhhbGYxLCAkaGFs ZjIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8n LCAkdXJsKTsKICAgICAgICB9CgogICAgICAgIHRyYWNlX2FkZCgnW3NtZF9hY2Nlc3Nfa2V5 IFVSTCBlbGVtZW50czogJyAuIGpvaW4oJ3wnLCAkcGFydHMpLiddJyk7CgogICAgICAgIC8v IExvb2sgZm9yIG9uZSBvZiB0aGUgdHJpZ2dlcnMgaW4gdGhlIFVSTCBhbmQgYm9tYiBvdXQg aWYgd2UgZmluZCBpdC4KICAgICAgICAkdHJpZ2dlcnMgPSBkb19saXN0KCR0cmlnZ2VyKTsK ICAgICAgICAkdHJpZ2dlciA9ICR0cmlnZ2Vyc1swXTsgLy8gSW5pdGlhbGlzZSB0byB0aGUg Zmlyc3QgdmFsdWUgaW4gY2FzZSBubyBvdGhlcnMgYXJlIGZvdW5kLgoKICAgICAgICAkdHJp Z29mZiA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICgkdHJpZ2dlcnMgYXMgJHRyaWcpIHsK ICAgICAgICAgICAgc3dpdGNoICgkdHJpZ2dlcl9tb2RlKSB7CiAgICAgICAgICAgICAgICBj YXNlICdleGFjdCc6CiAgICAgICAgICAgICAgICAgICAgJHRyaWdvZmYgPSBhcnJheV9zZWFy Y2goJHRyaWcsICRwYXJ0cyk7CiAgICAgICAgICAgICAgICAgICAgJHJlYWxUcmlnID0gJHRy aWc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2JlZ2lu cyc6CiAgICAgICAgICAgICAgICAgICAgJGNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAg ICBmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHN0cnBvcygkcGFydCwgJHRyaWcpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkdHJpZ29mZiA9ICRjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICRyZWFsVHJpZyA9ICRwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGNv dW50Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBjYXNlICdlbmRzJzoKICAgICAgICAgICAgICAgICAgICAkY291bnQg PSAwOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewog ICAgICAgICAgICAgICAgICAgICAgICAkcmUgPSAnLy4rJy5wcmVnX3F1b3RlKCR0cmlnKS4n JC9pJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJHJlLCAkcGFy dCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmlnb2ZmID0gJGNv dW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlYWxUcmlnID0gJHBhcnQ7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2Nv bnRhaW5zJzoKICAgICAgICAgICAgICAgICAgICAkY291bnQgPSAwOwogICAgICAgICAgICAg ICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgICAg ICAgICAkcmUgPSAnLy4qJy5wcmVnX3F1b3RlKCR0cmlnKS4nLiokL2knOwogICAgICAgICAg ICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgkcmUsICRwYXJ0KSA9PT0gMSkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgJHRyaWdvZmYgPSAkY291bnQ7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAkcmVhbFRyaWcgPSAkcGFydDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICRjb3VudCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRyaWdvZmYg IT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAvLyBGb3VuZCBpdCBzbyBzZXQgdGhlIHRy aWdnZXIgdG8gYmUgdGhlIGN1cnJlbnQgaXRlbSBhbmQganVtcCBvdXQuCiAgICAgICAgICAg ICAgICAkdHJpZ29mZiA9ICgkdHJpZ2dlciA9PSAnZmlsZV9kb3dubG9hZCcpID8gJHRyaWdv ZmYgKyAyIDogJHRyaWdvZmY7CiAgICAgICAgICAgICAgICAkdHJpZ2dlciA9ICRyZWFsVHJp ZzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgICB0cmFjZV9hZGQoJ1tzbWRfYWNjZXNzX2tleSB0cmlnZ2VyOiAnIC4gJHRyaWdnZXIg LiAoJHRyaWdvZmYgPyAnIGZvdW5kIGF0ICcgLiAkdHJpZ29mZiA6ICcnKSAuICddJyk7Cgog ICAgICAgICRyZXQgPSBmYWxzZTsKICAgICAgICAkc21kX2FjY2Vzc19lcnJvciA9ICRzbWRf YWNjZXNzX2VycmNvZGUgPSAnJzsKICAgICAgICAkc21kX2FrZXlfc2FsdF9sZW5ndGggPSBn ZXRfcHJlZignc21kX2FrZXlfc2FsdF9sZW5ndGgnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9h a2V5X3NhbHRfbGVuZ3RoJ11bJ2RlZmF1bHQnXSk7CiAgICAgICAgJGRvaXAgPSBnZXRfcHJl Zignc21kX2FrZXlfbG9nX2lwJywgJHNtZF9ha2V5X3ByZWZzWydzbWRfYWtleV9sb2dfaXAn XVsnZGVmYXVsdCddKTsKCiAgICAgICAgaWYgKCR0cmlnb2ZmICE9PSBmYWxzZSkgewogICAg ICAgICAgICAkdG9raWR4ID0gJHRyaWdvZmYgKyAxOwogICAgICAgICAgICAkdGltZWlkeCA9 ICR0cmlnb2ZmICsgMjsKICAgICAgICAgICAgJGV4dHJhaWR4ID0gJHRyaWdvZmYgKyAzOwoK ICAgICAgICAgICAgLy8gT0ssIG9uIGEgdHJpZ2dlciBwYWdlLCBzbyByZWFkIHRoZSB0b2tl biBmcm9tIHRoZSBVUkwuCiAgICAgICAgICAgICR0b2sgPSAoaXNzZXQoJHBhcnRzWyR0b2tp ZHhdKSAmJiBzdHJsZW4oJHBhcnRzWyR0b2tpZHhdKSA9PSBpbnR2YWwoMzIgKyAkc21kX2Fr ZXlfc2FsdF9sZW5ndGgpKSA/ICRwYXJ0c1skdG9raWR4XSA6IDA7CgogICAgICAgICAgICB0 cmFjZV9hZGQoJ1tzbWRfYWNjZXNzX2tleSB0b2tlbjogJyAuICR0b2sgLiddJyk7CgogICAg ICAgICAgICBpZiAoJHRvaykgewogICAgICAgICAgICAgICAgLy8gVGhlIHRva2VuIGlzIHBy ZXNlbnQsIHNvIHJlYWQgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBVUkwuCiAgICAgICAgICAg ICAgICAkdF9oZXggPSAoaXNzZXQoJHBhcnRzWyR0aW1laWR4XSkpID8gJHBhcnRzWyR0aW1l aWR4XSA6IDA7CgogICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgYSBkb3dubG9hZCBsaW1p dD8gRXh0cmFjdCBpdCBpZiBzby4KICAgICAgICAgICAgICAgICR0aW1lcGFydHMgPSBkb19s aXN0KCR0X2hleCwgJy4nKTsKICAgICAgICAgICAgICAgICRtYXggPSAoaXNzZXQoJHRpbWVw YXJ0c1sxXSkpID8gJHRpbWVwYXJ0c1sxXSA6ICcwJzsKICAgICAgICAgICAgICAgICRtYXh0 b2sgPSAoJG1heCkgPyAnLicuJG1heCA6ICcnOwogICAgICAgICAgICAgICAgJHRfaGV4ID0g JHRpbWVwYXJ0c1swXTsKCiAgICAgICAgICAgICAgICAvLyBBbnkgZXh0cmEgaW5mbz8KICAg ICAgICAgICAgICAgICRleHRyYXMgPSAoaXNzZXQoJHBhcnRzWyRleHRyYWlkeF0pKSA/IGFy cmF5X3NsaWNlKCRwYXJ0cywgJGV4dHJhaWR4KSA6IGFycmF5KCk7CgogICAgICAgICAgICAg ICAgLy8gUmVjcmVhdGUgdGhlIG9yaWdpbmFsIHBhZ2UgVVJMLCBzYW5zIC90cmlnZ2VyL3Rv a2VuL3RpbWUuCiAgICAgICAgICAgICAgICBpZiAoJHRyaWdnZXIgPT0gJ2ZpbGVfZG93bmxv YWQnKSB7CiAgICAgICAgICAgICAgICAgICAgJHRyaWdvZmYrKzsKICAgICAgICAgICAgICAg ICAgICAkdHJpZ2dlciA9ICcnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IC8vIGdicF9wZXJtYW5lbnRfbGlua3Mgc2V0cyBtZXNzeSBtb2RlIGJlaGluZCB0aGUgc2Nl bmVzIGJ1dCBzdGlsbCB1c2VzIG5vbi1tZXNzeSBVUkxzCiAgICAgICAgICAgICAgICAvLyBz byBpdCByZXF1aXJlcyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAkZ2JwX3BsID0g KGlzX2FycmF5KCRwbHVnaW5zKSAmJiBpbl9hcnJheSgnZ2JwX3Blcm1hbmVudF9saW5rcycs ICRwbHVnaW5zKSk7CgogICAgICAgICAgICAgICAgaWYgKCRwZXJtbGlua19tb2RlID09ICdt ZXNzeScgJiYgISRnYnBfcGwpIHsKICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB3YW50 IGEgc2xhc2ggYmV0d2VlbiBzaXRlIGFuZCBzdGFydCBvZiBxdWVyeSBwYXJhbXMuCiAgICAg ICAgICAgICAgICAgICAgJHBhZ2UgPSBydHJpbShqb2luKCcvJywgYXJyYXlfc2xpY2UoJHBh cnRzLCAwLCAkdHJpZ29mZi0xKSksICcvJykgLiAkcGFydHNbJHRyaWdvZmYtMV07CiAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRwYWdlID0gcnRyaW0o am9pbignLycsIGFycmF5X3NsaWNlKCRwYXJ0cywgMCwgJHRyaWdvZmYpKSwgJy8nKTsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIHRoZSBVUkwgY29u dGFpbnMgbm9uLWFzY2lpIGNoYXJzLgogICAgICAgICAgICAgICAgJHBhZ2UgPSByYXd1cmxk ZWNvZGUoJHBhZ2UpOwoKICAgICAgICAgICAgICAgIHRyYWNlX2FkZCgnW3NtZF9hY2Nlc3Nf a2V5IHBhZ2UgfCB0aW1lc3RhbXAgfCBtYXggfCBleHRyYXM6ICcgLiBqb2luKCd8JywgYXJy YXkoJHBhZ2UsICR0X2hleCwgJG1heCwgJGV4dHJhcykpIC4gJ10nKTsKCiAgICAgICAgICAg ICAgICBpZiAoJHRfaGV4KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFt cCBpcyBwcmVzZW50LiBOZXh0LCBnZXQgdGhlIHNlY3JldCBrZXkuCiAgICAgICAgICAgICAg ICAgICAgJHNlY3JldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICRzZWNyaW5nID0g c2FmZV9yb3coJyonLCBTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiInIEFO RCB0X2hleCA9ICciLmRvU2xhc2goJHRfaGV4KS4iJyIpOwoKICAgICAgICAgICAgICAgICAg ICBpZiAoJHNlY3JpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlY3JldCA9ICRz ZWNyaW5nWydzZWNyZXQnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3Qg dGhlIHNhbHQgZnJvbSB0aGUgdG9rZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGVu ID0gc3RybGVuKCRwYWdlKSAlIDMyOwogICAgICAgICAgICAgICAgICAgICAgICAkc2FsdCA9 IHN1YnN0cigkdG9rLCAkcGxlbiwgJHNtZF9ha2V5X3NhbHRfbGVuZ3RoKTsKICAgICAgICAg ICAgICAgICAgICAgICAgJHRvayA9IHN1YnN0cigkdG9rLCAwLCAkcGxlbikuc3Vic3RyKCR0 b2ssICRwbGVuKyRzbWRfYWtleV9zYWx0X2xlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICRleHQgPSAoKCRleHRyYXMpID8gdXJsZGVjb2RlKGpvaW4oJy8nLCAkZXh0cmFzKSkg OiAnJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdlbmVyYXRlIHRoZSBvcmln aW5hbCB0b2tlbi4uLgogICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tfdG9rZW4gPSBt ZDUoJHNhbHQuJHNlY3JldC4kcGFnZS4kdHJpZ2dlci4kdF9oZXguJG1heHRvay4kZXh0KTsK CiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX2FkZCgnW3NtZF9hY2Nlc3Nfa2V5IHJl Y29uc3RydWN0ZWQgdG9rZW46ICcgLiAkY2hlY2tfdG9rZW4gLiAnXScpOwoKICAgICAgICAg ICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBvbmUgaW4gdGhl IFVSTC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjaGVja190b2tlbiA9PSAkdG9r KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb2tlbiBpcyB2YWxpZC4gTm93 IGNoZWNrIGlmIHRoZSBwYWdlIGhhcyBleHBpcmVkLgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIElzIHRoZXJlIGFuIGV4cGxpY2l0IGFjY2VzcyBrZXkgZXhwaXJ5PyBFeHRy YWN0IHRoYXQgaWYgc28uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZXBhcnRz ID0gZG9fbGlzdCgkdF9oZXgsICctJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk dF9leHAgPSAoaXNzZXQoJHRpbWVwYXJ0c1sxXSkpID8gaGV4ZGVjKCR0aW1lcGFydHNbMV0p IDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdF9iZWcgPSAkdGltZXBhcnRz WzBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0X2RlYyA9IGhleGRlYygkdF9i ZWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vdyA9IHRpbWUoKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYXMgdGhlIHJlc291cmNlIGJlY29tZSBhdmFp bGFibGUgeWV0PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRub3cgPCAkdF9k ZWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaW5nID09IG51 bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhwX2RpZShnVHh0 KCdzbWRfYWtleV9lcnJfdW5hdmFpbGFibGUnKSwgNDEwKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfdW5hdmFpbGFibGUnOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc21kX2FjY2Vzc19lcnJjb2Rl ID0gNDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gSGFzIHRva2VuJ3MgZXhwaXJ5IGJlZW4gcmVhY2hlZCwgb3IgaXMgJ25vdycgZ3Jl YXRlciB0aGFuICd0aGVuJyAod2hlbiB0b2tlbiBnZW5lcmF0ZWQpICsgZXhwaXJ5IHBlcmlv ZD8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRfZXhwKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0ZXIgPSB0cnVlOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFyZV90byA9ICR0X2V4cDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAkdGVzdGVyID0gKCRleHBpcmVzICE9IDApOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFyZV90byA9ICR0X2RlYyArICRl eHBpcmVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCR0ZXN0ZXIgJiYgKCRub3cgPiAkY29tcGFyZV90 bykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9 PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHBf ZGllKGdUeHQoJ3NtZF9ha2V5X2Vycl9leHBpcmVkJyksIDQxMCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfZXhw aXJlZCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc21kX2Fj Y2Vzc19lcnJjb2RlID0gNDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRvd25sb2FkIGxp bWl0IGhhcyBiZWVuIGV4Y2VlZGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkdnVfcXR5ID0gJHNlY3JpbmdbJ2FjY2Vzc2VzJ107CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgkbWF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoJHZ1X3F0eSA8ICRtYXgpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0ID0gdHJ1ZTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9PSBudWxsKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4cF9kaWUoZ1R4 dCgnc21kX2FrZXlfZXJyX2xpbWl0JyksIDQxMCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJHNtZF9hY2Nlc3NfZXJyb3IgPSAnc21kX2FrZXlf ZXJyX2xpbWl0JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJHNtZF9hY2Nlc3NfZXJyY29kZSA9IDQxMDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0ID0gdHJ1 ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBhY2Nlc3MgY291bnRl ci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZ1X3F0eSsrOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3JhYiB0aGUgSVAgYW5kIGFk ZCBpdCB0byB0aGUgbGlzdCBvZiBJUHMgc28gZmFyLgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoJGRvaXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICRpcHMgPSBkb19saXN0KCRzZWNyaW5nWydpcCddLCAnICcpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlwID0gcmVtb3RlX2FkZHIo KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5fYXJy YXkoJGlwLCAkaXBzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICRpcHNbXSA9ICRpcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpcHVw ID0gIiwgaXA9JyIuZG9TbGFzaCh0cmltKGpvaW4oJyAnLCAkaXBzKSkpLiInIjsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICRpcHVwID0gJyc7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNhZmVfdXBkYXRlKFNNRF9BS0VZUywgImFjY2Vzc2VzPSciLmRvU2xhc2goJHZ1X3F0 eSkuIiciIC4gJGlwdXAsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiInIEFORCB0X2hleCA9 ICciLmRvU2xhc2goJHRfaGV4KS4iJyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gTG9hZCB1cCB0aGUgZ2xvYmFsIGFycmF5IHNvIDx0eHA6c21kX2FjY2Vz c19pbmZvPiBhbmQgPHR4cDppZl9zbWRfYWNjZXNzX2luZm8+IHdvcmsuCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICRzbWRfYWtleV9wcm90ZWN0ZWRfaW5mbyA9IGFy cmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZ2UnICAg ICA9PiAkc2VjcmluZ1sncGFnZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2hleHRpbWUnICA9PiAkc2VjcmluZ1sndF9oZXgnXSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc3N1ZWQnICAgPT4gJHNlY3JpbmdbJ3Rp bWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3cnICAg ICAgPT4gJG5vdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl eHBpcmVzJyAgPT4gJGNvbXBhcmVfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAndHJpZ2dlcicgID0+ICRzZWNyaW5nWyd0cmlnZ2FoJ10sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4aW11bScgID0+ICRzZWNyaW5n WydtYXhpbXVtJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn YWNjZXNzZXMnID0+ICR2dV9xdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZG9pcCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNtZF9ha2V5X3By b3RlY3RlZF9pbmZvWydpcCddID0gJGlwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXh0 cmFzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc21kX2Fr ZXlfcHJvdGVjdGVkX2luZm9bJ2V4dHJhJ10gPSB1cmxkZWNvZGUoam9pbignLycsICRleHRy YXMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg KCRleHRyYXMgYXMgJGlkeCA9PiAkZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAkc21kX2FrZXlfcHJvdGVjdGVkX2luZm9bJ2V4dHJhXycu aW50dmFsKCRpZHgrMSldID0gdXJsZGVjb2RlKCRleHRyYSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9PSBudWxsKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhwX2RpZShnVHh0KCdzbWRfYWtleV9lcnJf aW52YWxpZF90b2tlbicpLCA0MDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc21kX2FjY2Vzc19lcnJv ciA9ICdzbWRfYWtleV9lcnJfaW52YWxpZF90b2tlbic7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJHNtZF9hY2Nlc3NfZXJyY29kZSA9IDQwMzsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaW5nID09 IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4cF9kaWUoZ1R4dCgnc21k X2FrZXlfZXJyX3VuYXV0aG9yaXplZCcpLCA0MDEpOwogICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNtZF9hY2Nlc3NfZXJy b3IgPSAnc21kX2FrZXlfZXJyX3VuYXV0aG9yaXplZCc7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkc21kX2FjY2Vzc19lcnJjb2RlID0gNDAxOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9PSBudWxsKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHR4cF9kaWUoZ1R4dCgnc21kX2FrZXlfZXJyX21pc3NpbmdfdGltZXN0 YW1wJyksIDQwMyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgICAgICAgICAgJHNtZF9hY2Nlc3NfZXJyb3IgPSAnc21kX2FrZXlfZXJyX21pc3Npbmdf dGltZXN0YW1wJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHNtZF9hY2Nlc3NfZXJyY29k ZSA9IDQwMzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9PSBudWxsKSB7 CiAgICAgICAgICAgICAgICAgICAgdHhwX2RpZShnVHh0KCdzbWRfYWtleV9lcnJfYmFkX3Rv a2VuJyksIDQwMyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICRzbWRfYWNjZXNzX2Vycm9yID0gJ3NtZF9ha2V5X2Vycl9iYWRfdG9rZW4nOwogICAg ICAgICAgICAgICAgICAgICRzbWRfYWNjZXNzX2VycmNvZGUgPSA0MDM7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJ ZiB3ZSBhbHdheXMgd2FudCB0byBmb3JiaWQgYWNjZXNzIHRvIHRoaXMgcGFnZSByZWdhcmRs ZXNzIGlmIHRoZSB0cmlnZ2VyIGV4aXN0cy4KICAgICAgICAgICAgaWYgKCRmb3JjZSkgewog ICAgICAgICAgICAgICAgaWYgKCR0aGluZyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAg ICAgdHhwX2RpZShnVHh0KCdzbWRfYWtleV9lcnJfZm9yYmlkZGVuJyksIDQwMSk7CiAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRzbWRfYWNjZXNzX2Vy cm9yID0gJ3NtZF9ha2V5X2Vycl9mb3JiaWRkZW4nOwogICAgICAgICAgICAgICAgICAgICRz bWRfYWNjZXNzX2VycmNvZGUgPSA0MDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gdHJ1ZTsKICAgICAgICAgICAgfQog ICAgICAgIH0KCiAgICAgICAgaWYgKCRzbWRfYWNjZXNzX2Vycm9yIHx8ICRzbWRfYWNjZXNz X2VycmNvZGUpIHsKICAgICAgICAgICAgdHJhY2VfYWRkKCdbc21kX2FjY2Vzc19rZXkgZXJy b3Igc3RhdGU6ICcgLiAkc21kX2FjY2Vzc19lcnJjb2RlIC4gJ3wnIC4gJHNtZF9hY2Nlc3Nf ZXJyb3IgLiAnXScpOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgcmVhY2ggdGhpcyBw b2ludCBpdCdzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBjb250YWluZXIuCiAgICAgICAgcmV0 dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJldCkpOwogICAgfSBlbHNlIHsKICAgICAg ICB0cmlnZ2VyX2Vycm9yKGdUeHQoJ3NtZF9ha2V5X3RibF9ub3RfaW5zdGFsbGVkJyksIEVf VVNFUl9OT1RJQ0UpOwogICAgfQp9CgovKioKICogQ29uZGl0aW9uYWwgdGFnIGZvciBjaGVj a2luZyBlcnJvciBzdGF0dXMgZnJvbSBzbWRfYWNjZXNzX3Byb3RlY3QuCiAqCiAqIEBwYXJh bSAgYXJyYXkgJGF0dHMgIChyZXEpIFRhZyBhdHRyaWJ1dGUgbGlzdAogKiBAcGFyYW0gIGFy cmF5ICR0aGluZyAob3B0KSBUYWcgY29udGFpbmVyIGNvbnRlbnQKICogQHJldHVybiBIVE1M CiAqLwpmdW5jdGlvbiBzbWRfaWZfYWNjZXNzX2Vycm9yKCRhdHRzLCAkdGhpbmcgPSBudWxs KQp7CiAgICBnbG9iYWwgJHNtZF9hY2Nlc3NfZXJyb3IsICRzbWRfYWNjZXNzX2VycmNvZGU7 CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAgICAndHlwZScgICA9PiAnJywKICAg ICAgICAnY29kZScgICA9PiAnJywKICAgICksICRhdHRzKSk7CgogICAgJGVyciA9IGFycmF5 KCk7CiAgICAkY29kZXMgPSBkb19saXN0KCRjb2RlKTsKICAgICR0eXBlcyA9IGRvX2xpc3Qo JHR5cGUpOwoKICAgIGlmICgkc21kX2FjY2Vzc19lcnJvcikgewogICAgICAgIGlmICgkY29k ZSAmJiAkdHlwZSkgewogICAgICAgICAgICAkZXJyWydjb2RlJ10gPSAoaW5fYXJyYXkoJHNt ZF9hY2Nlc3NfZXJyY29kZSwgJGNvZGVzKSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAg ICRlcnJbJ21zZyddID0gKGluX2FycmF5KCRzbWRfYWNjZXNzX2Vycm9yLCAkdHlwZXMpKSA/ IHRydWUgOiBmYWxzZTsKICAgICAgICB9IGVsc2VpZiAoJGNvZGUpIHsKICAgICAgICAgICAg JGVyclsnY29kZSddID0gKGluX2FycmF5KCRzbWRfYWNjZXNzX2VycmNvZGUsICRjb2Rlcykp ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0gZWxzZWlmICgkdHlwZSkgewogICAgICAgICAg ICAkZXJyWydtc2cnXSA9IChpbl9hcnJheSgkc21kX2FjY2Vzc19lcnJvciwgJHR5cGVzKSkg PyB0cnVlIDogZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVyclsnbXNn J10gPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAkb3V0ID0gaW5fYXJyYXkoZmFsc2Us ICRlcnIpID8gZmFsc2UgOiB0cnVlOyAvLyBBTkQgbG9naWMKCiAgICByZXR1cm4gcGFyc2Uo RXZhbEVsc2UoJHRoaW5nLCAkb3V0KSk7Cn0KCi8qKgogKiBEaXNwbGF5IGFjY2VzcyBlcnJv ciBpbmZvcm1hdGlvbi4KICoKICogQHBhcmFtICBhcnJheSAkYXR0cyAgKHJlcSkgVGFnIGF0 dHJpYnV0ZSBsaXN0CiAqIEBwYXJhbSAgYXJyYXkgJHRoaW5nIChvcHQpIFRhZyBjb250YWlu ZXIgY29udGVudAogKiBAcmV0dXJuIEhUTUwKICovCmZ1bmN0aW9uIHNtZF9hY2Nlc3NfZXJy b3IoJGF0dHMsICR0aGluZyA9IG51bGwpCnsKICAgIGdsb2JhbCAkc21kX2FjY2Vzc19lcnJv ciwgJHNtZF9hY2Nlc3NfZXJyY29kZTsKCiAgICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAg ICAgICdpdGVtJyAgICA9PiAnbWVzc2FnZScsCiAgICAgICAgJ21lc3NhZ2UnID0+ICcnLAog ICAgICAgICd3cmFwdGFnJyAgICA9PiAnJywKICAgICAgICAnY2xhc3MnICAgICAgPT4gJycs CiAgICAgICAgJ2h0bWxfaWQnICAgID0+ICcnLAogICAgICAgICdicmVhaycgICAgICA9PiAn JywKICAgICAgICAnYnJlYWtjbGFzcycgPT4gJycsCiAgICApLCAkYXR0cykpOwoKICAgICRv dXQgPSBhcnJheSgpOwogICAgJGl0ZW1zID0gZG9fbGlzdCgkaXRlbSk7CgogICAgaWYgKCRz bWRfYWNjZXNzX2VycmNvZGUgJiYgaW5fYXJyYXkoJ2NvZGUnLCAkaXRlbXMpKSB7CiAgICAg ICAgJG91dFtdID0gJHNtZF9hY2Nlc3NfZXJyY29kZTsKICAgIH0KCiAgICBpZiAoJHNtZF9h Y2Nlc3NfZXJyb3IgJiYgaW5fYXJyYXkoJ21lc3NhZ2UnLCAkaXRlbXMpKSB7CiAgICAgICAg JG91dFtdID0gKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogZ1R4dCgkc21kX2FjY2Vzc19lcnJv cik7CiAgICB9CgogICAgaWYgKCRvdXQpIHsKICAgICAgICByZXR1cm4gZG9XcmFwKCRvdXQs ICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MsICcnLCAnJywgJGh0bWxf aWQpOwogICAgfQoKICAgIHJldHVybiAnJzsKfQoKLyoqCiAqIERpc3BsYXkgcGllY2VzIG9m IGFjY2VzcyBpbmZvcm1hdGlvbiwgZm9yIGN1c3RvbSBmb3JtYXR0ZWQgbWVzc2FnZXMuCiAq CiAqIEBwYXJhbSAgYXJyYXkgJGF0dHMgIChyZXEpIFRhZyBhdHRyaWJ1dGUgbGlzdAogKiBA cGFyYW0gIGFycmF5ICR0aGluZyAob3B0KSBUYWcgY29udGFpbmVyIGNvbnRlbnQKICogQHJl dHVybiBIVE1MCiAqLwpmdW5jdGlvbiBzbWRfYWNjZXNzX2luZm8oJGF0dHMsICR0aGluZyA9 IG51bGwpCnsKICAgIGdsb2JhbCAkc21kX2FrZXlfcHJvdGVjdGVkX2luZm8sICRzbWRfYWtl eV9pbmZvOwoKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICAgJ2l0ZW0nICAgICAg ID0+ICdwYWdlJywKICAgICAgICAnZXNjYXBlJyAgICAgPT4gJ2h0bWwnLAogICAgICAgICdm b3JtYXQnICAgICA9PiAnJVktJW0tJWQgJUg6JU06JVMnLAogICAgICAgICd3cmFwdGFnJyAg ICA9PiAnJywKICAgICAgICAnY2xhc3MnICAgICAgPT4gJycsCiAgICAgICAgJ2h0bWxfaWQn ICAgID0+ICcnLAogICAgICAgICdicmVhaycgICAgICA9PiAnJywKICAgICAgICAnYnJlYWtj bGFzcycgPT4gJycsCiAgICApLCAkYXR0cykpOwoKICAgICRvdXQgPSBhcnJheSgpOwogICAg JGl0ZW1zID0gZG9fbGlzdCgkaXRlbSk7CgogICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpZHgp IHsKICAgICAgICAkYWtfaWR4ID0gJ2FrXycuJGlkeDsKCiAgICAgICAgaWYgKCRzbWRfYWtl eV9wcm90ZWN0ZWRfaW5mbyAmJiBhcnJheV9rZXlfZXhpc3RzKCRpZHgsICRzbWRfYWtleV9w cm90ZWN0ZWRfaW5mbykpIHsKICAgICAgICAgICAgJHZhbCA9ICgkZXNjYXBlID09ICdodG1s JykgPyBodG1sc3BlY2lhbGNoYXJzKCRzbWRfYWtleV9wcm90ZWN0ZWRfaW5mb1skaWR4XSkg OiAkc21kX2FrZXlfcHJvdGVjdGVkX2luZm9bJGlkeF07CiAgICAgICAgICAgIGlmIChpbl9h cnJheSgkaWR4LCBhcnJheSgndGltZScsICdub3cnLCAnZXhwaXJlcycpKSAmJiAkZm9ybWF0 KSB7CiAgICAgICAgICAgICAgICAkdmFsID0gc2FmZV9zdHJmdGltZSgkZm9ybWF0LCAkdmFs KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3V0W10gPSAkdmFsOwogICAgICAgIH0K CiAgICAgICAgaWYgKCRzbWRfYWtleV9pbmZvICYmIGFycmF5X2tleV9leGlzdHMoJGFrX2lk eCwgJHNtZF9ha2V5X2luZm8pKSB7CiAgICAgICAgICAgICR2YWwgPSAoJGVzY2FwZSA9PSAn aHRtbCcpID8gaHRtbHNwZWNpYWxjaGFycygkc21kX2FrZXlfaW5mb1skYWtfaWR4XSkgOiAk c21kX2FrZXlfaW5mb1skYWtfaWR4XTsKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRpZHgs IGFycmF5KCd0aW1lJywgJ25vdycsICdleHBpcmVzJykpICYmICRmb3JtYXQpIHsKICAgICAg ICAgICAgICAgICR2YWwgPSBzYWZlX3N0cmZ0aW1lKCRmb3JtYXQsICR2YWwpOwogICAgICAg ICAgICB9CiAgICAgICAgICAgICRvdXRbXSA9ICR2YWw7CiAgICAgICAgfQogICAgfQoKICAg IGlmICgkb3V0KSB7CiAgICAgICAgcmV0dXJuIGRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJy ZWFrLCAkY2xhc3MsICRicmVha2NsYXNzLCAnJywgJycsICRodG1sX2lkKTsKICAgIH0KCiAg ICByZXR1cm4gJyc7Cn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUi O3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjMxNDU3OiI8aDE+c21kX2FjY2Vz c19rZXlzPC9oMT4KCjxwPlBlcm1pdCBhY2Nlc3MgdG8gZG93bmxvYWRzLCBwYWdlcyBvciBw YXJ0cyBvZiBwYWdlcyBmb3IgYSBjZXJ0YWluIGNvbmZpZ3VyYWJsZSB0aW1lIHBlcmlvZCBh bmQvb3IgZm9yIGEgZGVmaW5lZCBudW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzLiBUaGUgYWNj ZXNzIGtleSBpcyB0YW1wZXItcHJvb2YuPC9wPgoKPGgyPkluc3RhbGxhdGlvbiAvIHVuaW5z dGFsbGF0aW9uPC9oMj4KCjxwIGNsYXNzPSJpbXBvcnRhbnQiPlJlcXVpcmVzIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuNC4wKzwvcD4KCjxwPkRvd25sb2FkIHRoZSBwbHVn aW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5z LzEyMjIvc21kX2FjY2Vzc19rZXlzIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFz dGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gPGVt PkFkbWluLSZndDtQbHVnaW5zPC9lbT4gcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBw bHVnaW4uIFRoZSB0YWJsZSB3aWxsIGJlIGluc3RhbGxlZCBhdXRvbWF0aWNhbGx5IHVubGVz cyB5b3UgdXNlIHRoZSBwbHVnaW4gZnJvbSB0aGUgY2FjaGUgZGlyZWN0b3J5OyBpbiB3aGlj aCBjYXNlLCB2aXNpdCB0aGUgPGVtPkV4dGVuc2lvbnMtJmd0O0FjY2VzcyBrZXlzPC9lbT4g dGFiIGFuZCBjbGljayB0aGUgPGVtPkluc3RhbGwgdGFibGU8L2VtPiBidXR0b24gYmVmb3Jl IHRyeWluZyB0byB1c2UgdGhlIHBsdWdpbi48L3A+Cgo8cD5UbyB1bmluc3RhbGwgdGhlIHBs dWdpbiwgZGVsZXRlIGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2Uu IFRoZSBhY2Nlc3Mga2V5cyB0YWJsZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseS48 L3A+Cgo8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNv bS92aWV3dG9waWMucGhwP2lkPTM1OTk2Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGlu Zm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1 Z2luLjwvcD4KCjxoMj5PdmVydmlldzwvaDI+Cgo8cD5UaGUgcGx1Z2luIGFsbG93cyB5b3Ug dG8gY3JlYXRlIGtleXMgZm9yIGFueSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBh bmQgeW91IGNhbiB0aGVuIHByb3RlY3QgYWxsIG9yIHBhcnQgb2YgdGhhdCA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiBieSBlaXRoZXI6PC9wPgoKPHA+YSkgd3JhcHBpbmcgYSB0 YWcgYXJvdW5kIHRoZSBwYXJ0cyB5b3Ugd2FudCBwcm90ZWN0aW5nPGJyIC8+CmIpIHB1dHRp bmcgYSBwcm90ZWN0aW9uIHRhZyBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlIHRvIHByb3RlY3Qg aXRzIGVudGlyZXR5PGJyIC8+CmMpIGZsYWdnaW5nIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiBhcyBhIGZpbGVfZG93bmxvYWQgd2hlcmVieSBpdCYjODIxNztzIGF1dG9t YXRpY2FsbHkgcmVzdHJpY3RlZCB0byBvbmx5IHRob3NlIGluIHBvc3Nlc3Npb24gb2YgdGhl IGtleTwvcD4KCjxwPkFuIGFjY2VzcyBrZXkgaXMgYSBsb25nIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHRoYXQgbG9va3MgbGlrZSB0aGlzOiA8Y29kZT5zaXRlLmNvbS9zb21l L3Byb3RlY3RlZC91cmwvJmx0O3RyaWdnZXImZ3Q7LyZsdDt0b2tlbiZndDsvJmx0O3RpbWVz dGFtcHMmZ3Q7LiZsdDttYXhfYWNjZXNzZXMmZ3Q7PC9jb2RlPi4gQW55IGRldmlhdGlvbiBv ciBhbHRlcmF0aW9uIG9mIHRoZSB0b2tlbiByZXN1bHRzIGluIHJlamVjdGlvbi4gVGhlIHNl Y3JldCBrZXkgdXNlZCB0byBwcm90ZWN0IHRoZSByZXNvdXJjZXMgY2FuIGJlIGF1dG9tYXRp Y2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBwbHVnaW4gb3Igc3VwcGxpZWQgYnkgeW91LiBBIHVz ZXItY29uZmlndXJhYmxlIHNhbHQgaXMgYXBwbGllZCBhcyB3ZWxsLiBGb3IgYmVzdCByZXN1 bHRzLCBsZXQgdGhlIHBsdWdpbiBjaG9vc2UsIGJlY2F1c2UgdGhlbiBubyB0d28gc2VjcmV0 IGtleXMvc2FsdHMgd2lsbCBldmVyIGJlIHRoZSBzYW1lLCBldmVuIGlmIHRoZXkgcHJvdGVj dCB0aGUgZXhhY3Qgc2FtZSByZXNvdXJjZS48L3A+Cgo8cD5Zb3UgY2FuIHRpbWUtbGltaXQg dGhlIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UgaWYgeW91IGxpa2UgJiM4MjEyOyBmcm9tIHRo ZSBtb21lbnQgdGhlIGtleSBpcyBnZW5lcmF0ZWQgb3IgZnJvbSBzb21lIGFyYml0cmFyeSBw b2ludCBpbiB0aGUgZnV0dXJlICYjODIxMjsgYW5kL29yIHlvdSBjYW4gbGltaXQgdGhlIG51 bWJlciBvZiBhY2Nlc3NlcyAodmlld3MvZG93bmxvYWRzKSB0aGF0IHJlc291cmNlIGNhbiBo YXZlLiBXaGVuIHRoZSByZXNvdXJjZSBoYXMgZXhwaXJlZCwgaXQmIzgyMTc7cyBnb25lLjwv cD4KCjxwPktleXMgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBhZG1pbiBzaWRlIGludGVy ZmFjZSAoPGVtPkV4dGVuc2lvbnMtJmd0O0FjY2VzcyBrZXlzPC9lbT4pIG9yIHZpYSBhIHB1 YmxpYyB0YWcuIFRoZSBsYXR0ZXIgYWxsb3dzIHlvdSB0byBvZmZlciBzZWxmLWtleSBnZW5l cmF0aW9uLCBwZXJoYXBzIGluIHJlc3BvbnNlIHRvIGEgbWVtX3NlbGZfcmVnaXN0ZXIgcmVx dWVzdCBvciB6ZW1fY29udGFjdF9yZWJvcm4gZm9ybSBzdWJtaXNzaW9uLCBvciBmcm9tIGFu IGFkbWluLXNpZGUgZGFzaGJvYXJkLjwvcD4KCjxoMj5UYWc6IDxjb2RlPiZsdDt0eHA6c21k X2FjY2Vzc19rZXkgLyZndDs8L2NvZGU+PC9oMj4KCjxwPkdlbmVyYXRlcyBhbiBhY2Nlc3Mg dG9rZW4gZm9yIGEgZ2l2ZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIENvbmZp Z3VyZSBpdCB1c2luZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9wPgoKPGRsPgoJPGR0 PjxzcGFuPnVybDwvc3Bhbj48L2R0PgoJPGRkPlRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBvZiB0aGUgcmVzb3VyY2UgeW91IHdhbnQgdG8gcHJvdGVjdC4gQ2FuIGJlIGVp dGhlciBhIGZ1bGx5LXF1YWxpZmllZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBv ciByZWxhdGl2ZS48L2RkPgoJPGRkPkRlZmF1bHQ6IHRoZSBjdXJyZW50IHBhZ2U8L2RkPgoJ PGR0PjxzcGFuPnRyaWdnZXI8L3NwYW4+PC9kdD4KCTxkZD5UaGlzIHN0cmluZyBpcyBhZGRl ZCB0byB5b3VyIHVybCBzbyB0aGUgcGx1Z2luIGtub3dzIGl0IGlzIHByb3RlY3RlZCBjb250 ZW50LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+c21kX2FrZXk8L2NvZGU+PC9kZD4KCTxk dD48c3Bhbj5zaXRlX25hbWU8L3NwYW4+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIGF1dG9tYXRp Y2FsbHkgYWRkIHRoZSBzaXRlIG5hbWUgKGh0dHA6Ly9zaXRlLmNvbSkgdG8gdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG9yIG5vdC4gQ2hvb3NlIGZyb206Cgk8ZGw+CgkJ PGRkPjA6IGxlYXZlIHRoZSBzaXRlIG91dDwvZGQ+CgkJPGRkPjE6IGFkZCB0aGUgc2l0ZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiAoYnV0IG9ubHkgaWYgaXRzIG5vdCBpbiB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gYWxyZWFkeSk8L2RkPgoJPC9kbD48 L2RkPgoJPGRkPkRlZmF1bHQ6IDE8L2RkPgoJPGR0PjxzcGFuPnNlY3Rpb25fbW9kZTwvc3Bh bj48L2R0PgoJPGRkPklmIHlvdSBhcmUgdHJ5aW5nIHRvIHByb3RlY3QgYSBzZWN0aW9uIGxh bmRpbmcgcGFnZSAoaS5lLiBub3QgYW4gYXJ0aWNsZSkgdGhlbiB5b3Ugd2lsbCBsaWtlbHkg cmVjZWl2ZSBhIDQwNCBlcnJvciB3aGVuIHRyeWluZyB0byBhY2Nlc3MgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj5zIHRoYXQgZW50aXJlbHkgdXNlICYjODIxNjsvJiM4MjE3OyBh cyB0aGVpciBzZXBhcmF0b3IuIEJ5IHNldHRpbmcgPGNvZGU+c2VjdGlvbl9tb2RlPSZxdW90 OzEmcXVvdDs8L2NvZGU+IHlvdSB0ZWxsIHRoZSBwbHVnaW4gdG8gc2VwYXJhdGUgdGhlIHBh Z2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aGUgYWNjZXNzIGtleSBp bmZvcm1hdGlvbiB3aXRoIGEgJiM4MjE2Oz8mIzgyMTc7IGluc3RlYWQuPC9kZD4KCTxkZD5O b3RlIHRoaXMgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIHBsdWdpbiB3aXRoIHRoZSBtZXNz eSBtb2RlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHN0cnVjdHVyZSwgbm9yIGNh biB5b3UgcGFzcyBhbnkgdHJhZGl0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcGFyYW1ldGVycyB0byB0aGUgcGFnZS4gWW91IGNhbiwgaG93ZXZlciwgZW5jb2RlIHN1 Y2ggcGFyYW1ldGVycyBpbnRvIHRoZSA8Y29kZT5leHRyYTwvY29kZT4gYXJlYSBvZiB0aGUg a2V5LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogMDwvZGQ+Cgk8ZHQ+PHNwYW4+c2VjcmV0PC9zcGFu PjwvZHQ+Cgk8ZGQ+QSBzZWNyZXQga2V5IHVzZWQgdG8gdW5sb2NrIHRoZSBwYWdlLiBDaG9v c2UgYW55IHRleHQgeW91IHdpc2ggaGVyZSBvciBsZWF2ZSBibGFuayB0byBoYXZlIHRoZSBw bHVnaW4gY2hvb3NlIGEgcmFuZG9tIG51bWJlciBmb3IgeW91LjwvZGQ+Cgk8ZHQ+PHNwYW4+ c3RyZW5ndGg8L3NwYW4+PC9kdD4KCTxkZD5UaGUgbWVjaGFuaXNtIHVzZWQgdG8gZ2VuZXJh dGUgdGhlIHNhbHQsIG9yIHRoZSBzYWx0IGl0c2VsZi4gSW4gYWxsIGNhc2VzLCB0aGUgc2Fs dCBsZW5ndGggd2lsbCBiZSBjb25zdHJhaW5lZCBieSB0aGUgcGx1Z2luIHByZWZlcmVuY2Ug dmFsdWUuIENob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L2RkPgoJPGRkPjxj b2RlPlNNRF9TU0xfUkFORDwvY29kZT46IFVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPiYjODIxNztzIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSA8Y29kZT5vcGVuc3NsX3Jh bmRvbV9wc2V1ZG9fYnl0ZXMoKTwvY29kZT4gZnVuY3Rpb24sIGlmIGF2YWlsYWJsZSAocmVx dWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNS4zLjArKS4gSWYgaXQmIzgy MTc7cyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5TTUQ8L3NwYW4+X01ENSBtZWNoYW5pc20uIEl0IGlzIGhpZ2hseSByZWNvbW1l bmRlZCB0byBtaWdyYXRlIHRvIHRoaXMgc2NoZW1lIGlmIGF0IGFsbCBwb3NzaWJsZS48L2Rk PgoJPGRkPjxjb2RlPlNNRF9NRDU8L2NvZGU+OiBVc2Ugc3RhbmRhcmQgPGNvZGU+bWQ1KCk8 L2NvZGU+IGFuZCA8Y29kZT51bmlxaWQoKTwvY29kZT4gZnVuY3Rpb25zLiBUaGVzZSBhcmUg PHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlLCBhbmQgd2Vy ZSB0aGUgZGVmYXVsdCBmb3IgcGx1Z2luIHZlcnNpb25zIHByaW9yIHRvIHYwLjIwLjwvZGQ+ Cgk8ZGQ+PGNvZGU+Jmx0O3lvdXIgb3duIHNhbHQmZ3Q7PC9jb2RlPjogVXNlIHlvdXIgb3du IHNhbHQgdmFsdWUuIFRoaXMgb3B0aW9uIHBlcm1pdHMgeW91IHRvIGdlbmVyYXRlIHlvdXIg b3duIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSBzYWx0IGlmIHlvdSB3aXNoIChlLmcuIHRv IGNvbXB1dGUgc29tZSBzYWx0IHByaW9yIHRvIGNhbGxpbmcgdGhpcyB0YWcgYW5kIGluamVj dGluZyBpdCBoZXJlKS4gPHN0cm9uZz5Zb3VyIHNhbHQgPHNwYW4gY2xhc3M9ImNhcHMiPk1V U1Q8L3NwYW4+IGNoYW5nZSBldmVyeSB0aW1lPC9zdHJvbmc+IHVubGVzcyB5b3UgcmVhbGx5 LCByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIGFuZCB0YWtlIHN1aXRhYmxlIHBy ZWNhdXRpb25zLiBTZWUgPGEgaHJlZj0iI3NtZF9ha2V5X2VnNCI+RXhhbXBsZSA0PC9hPi48 L2RkPgoJPGR0PjxzcGFuPnN0YXJ0PC9zcGFuPjwvZHQ+Cgk8ZGQ+QW4gRW5nbGlzaC1mb3Jt YXR0ZWQgZGF0ZSBzdGFtcCBmcm9tIHdoZW4geW91IHdhbnQgdGhlIHJlc291cmNlIHRvIGJl Y29tZSBhdmFpbGFibGUuIEl0IGlzIG9mdGVuIGJlc3QgdG8gdXNlIDxjb2RlPllZWVktTU1N LUREIEhIOk1NOlNTPC9jb2RlPiBmb3JtYXQgYXMgaXQgaXMgdGhlIGxlYXN0IGFtYmlndW91 cy48L2RkPgoJPGRkPkRlZmF1bHQ6IGVtcHR5IChpLmUuIG5vdyk8L2RkPgoJPGR0PjxzcGFu PmV4cGlyZXM8L3NwYW4+PC9kdD4KCTxkZD5BbiBFbmdsaXNoLWZvcm1hdHRlZCBkYXRlIHN0 YW1wIGF0IHdoaWNoIHlvdSB3aXNoIHRoZSByZXNvdXJjZSB0byBleHBpcmUsIE9SIGFuIG9m ZnNldCBiZWdpbm5pbmcgd2l0aCAmIzgyMTY7KyYjODIxNzssIGZvciBleGFtcGxlIDxjb2Rl PmV4cGlyZXM9JnF1b3Q7KzI0IGhvdXJzJnF1b3Q7PC9jb2RlPjwvZGQ+Cgk8ZGQ+RGVmYXVs dDogZW1wdHkgKGkuZS4gbm8ga2V5IGV4cGlyeTogZ2V0IHRoZSBleHBpcnkgaW5mb3JtYXRp b24gZnJvbSB0aGUgcHJvdGVjdGVkIHJlc291cmNlIGl0c2VsZik8L2RkPgoJPGR0PjxzcGFu Pm1heDwvc3Bhbj48L2R0PgoJPGRkPklmIHlvdSB3aXNoIHRvIGxpbWl0IHRoZSBudW1iZXIg b2YgdGltZXMgdGhpcyByZXNvdXJjZSBjYW4gYmUgcmVxdWVzdGVkLCBzZXQgaXRzIHZhbHVl IGhlcmUuPC9kZD4KCTxkZD5EZWZhdWx0OiB1bnNldCAoaS5lLiB1bmxpbWl0ZWQpPC9kZD4K CTxkdD48c3Bhbj5leHRyYTwvc3Bhbj48L2R0PgoJPGRkPklmIHlvdSB3YW50IHRvIGFkZCBh bnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gKGFmdGVyIHRoZSB0b2tlbikgdGhlbiBzcGVjaWZ5IGl0IGhlcmUuIElmIHNl dCwgYSBzbGFzaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBhbmQgdGhlbiB5b3VyIGdpdmVuIGNvbnRlbnQgd2lsbCBiZSBhcHBlbmRlZC4g SXQmIzgyMTc7cyB1cCB0byB5b3UgdG8gZW5zdXJlIGl0IGlzIHN1aXRhYmx5IGVuY29kZWQu IE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBtdWx0aXBsZSBpdGVtcywgc2VwYXJhdGluZyBlYWNo IHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIgaWYgeW91IHdpc2guIEFkZGl0aW9uYWwgdmFsdWVz IGFkZGVkIHVzaW5nIHRoaXMgYXR0cmlidXRlIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHVz aW5nIHRoZSA8Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfaW5mbyAvJmd0OzwvY29kZT4gdGFn PC9kZD4KPC9kbD4KCjxwPkEgZmV3IHdvcmRzIGFib3V0IHRoaXMgdGFnOjwvcD4KCjxvbD4K CTxsaT5UaGUgY2xvY2sgc3RhcnRzIHRpY2tpbmcgdGhlIG1vbWVudCB0aGUgdG9rZW4gaXMg Z2VuZXJhdGVkIChvciBhdCB0aGUgdGltZSBnaXZlbiBpbiB0aGUgPGNvZGU+c3RhcnQ8L2Nv ZGU+IGF0dHJpYnV0ZSk8L2xpPgoJPGxpPllvdSBjYW4gcGFzcyB0aGUgcmV0dXJuZWQgYWNj ZXNzIGxpbmsgYXJvdW5kIGFzIG9mdGVuIGFzIHlvdSBsaWtlIHRvIGFzIG1hbnkgcGVvcGxl IGFzIHlvdSBsaWtlIGFuZCBpdCYjODIxNztsbCBrZWVwIHdvcmtpbmcgdW50aWwgaXRzIGV4 cGlyeS9hY2Nlc3MgbGltaXQgaXMgbWV0PC9saT4KCTxsaT5FYWNoIHRpbWUgeW91IGNyZWF0 ZSBhIG5ldyB0b2tlbiAoZXZlbiBmb3IgdGhlIHNhbWUgcGFnZSkgYSBuZXcgYWNjZXNzIGNv dW50ZXIgaXMgZ2VuZXJhdGVkOyBhbnkgcHJldmlvdXNseSBjcmVhdGVkIHRva2VucyB0aGF0 IHN0aWxsIGhhdmUgYXZhaWxhYmxlIGFjY2VzcyBhdHRlbXB0cyB3aWxsIGNvbnRpbnVlIHRv IGZ1bmN0aW9uIHVudGlsIHRoZSBsaW1pdCBpcyByZWFjaGVkIG9yIHRoZXkgZXhwaXJlPC9s aT4KCTxsaT5EaXJlY3QgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZmlsZSBkb3du bG9hZHMgY2FuIGJlIHByb3RlY3RlZCB0b28uIEp1c3Qgc3VwcGx5IDxjb2RlPnRyaWdnZXI9 JnF1b3Q7ZmlsZV9kb3dubG9hZCZxdW90OzwvY29kZT4gYW5kIDxjb2RlPnVybD0mcXVvdDsv ZmlsZV9kb3dubG9hZC8mbHQ7aWQmZ3Q7LyZsdDtmaWxlbmFtZSZndDsmcXVvdDs8L2NvZGU+ LiBZb3Ugd2lsbCB0aGVuIG5vdCBiZSBwZXJtaXR0ZWQgdG8gYWNjZXNzIHRoZSBzaXRlLmNv bS9maWxlX2Rvd25sb2FkLzxpZD4gbGluayB3aXRob3V0IHRoZSBhY2Nlc3MgdG9rZW4gYmVp bmcgcHJlc2VudC4gRm9yIHRoaXMgdG8gYmUgZWZmZWN0aXZlIHlvdSBzaG91bGQgbW92ZSB5 b3VyIDxjb2RlPi9maWxlczwvY29kZT4gZGlyZWN0b3J5IG91dCBvZiBhIHdlYi1hY2Nlc3Np YmxlIGxvY2F0aW9uIG9yIGVtcGxveSBhbiAuaHRhY2Nlc3MgZmlsZSB0aGF0IGZvcmJpZHMg YnlwYXNzaW5nIHRoZSA8Y29kZT5zaXRlLmNvbS9maWxlcy8mbHQ7ZmlsZW5hbWUmZ3Q7PC9j b2RlPiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBmb3JtYXQuIE5vdGUgdGhhdCA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBub3JtYWxseSBhbGxvd3MgeW91IHRvIHR5 cGUgYW55dGhpbmcgYWZ0ZXIgdGhlIDxjb2RlPi9pZC88L2NvZGU+IGFzIGEgZmlsZW5hbWUg YW5kIHN0aWxsIHJldHJpZXZlIHRoZSBmaWxlOyBzbWRfYWNjZXNzX2tleSB3aWxsIG5vdDog dGhlIGZpbGVuYW1lIG11c3QgbWF0Y2ggZXhhY3RseTwvbGk+Cgk8bGk+SWYgdGhlIDxjb2Rl PnN0YXJ0PC9jb2RlPiBkYXRlIGlzIG1hbmdsZWQgaW4gYW55IHdheSwgdGhlIGtleSB3aWxs IGJlIGdlbmVyYXRlZCAmIzgyMTY7bm93JiM4MjE3OzwvbGk+Cgk8bGk+SWYgdGhlIDxjb2Rl PmV4cGlyZXM8L2NvZGU+IGlzIG1hbmdsZWQgaW4gYW55IHdheSwgbm8gZXB4aXJ5IHdpbGwg YmUgc2V0PC9saT4KCTxsaT5Zb3VyIHNlY3JldCBrZXkgaXMgc2FsdGVkIHVzaW5nIGEgcmFu ZG9tbHktZ2VuZXJhdGVkIHNhbHQsIG9yIG9uZSBvZiB5b3VyIG93biBjaG9vc2luZy4gVGhl IGRlZmF1bHQgbGVuZ3RoIG9mIHRoZSBzYWx0IGlzIDggY2hhcmFjdGVycyBidXQgeW91IGNh biA8YSBocmVmPSIjc21kX2FrZXlfcHJlZnMiPmFsdGVyIHRoaXMgdmlhIGEgcHJlZjwvYT48 L2xpPgoJPGxpPllvdSBtYXkgY29udHJvbCB0aGUgZXhwaXJ5IHRpbWUgb2YgPGVtPmFsbDwv ZW0+IG9mIHlvdXIgZGlyZWN0IGZpbGVfZG93bmxvYWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj5zIGJ5IGFsdGVyaW5nIGEgPGEgaHJlZj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVm PC9hPjwvbGk+Cjwvb2w+Cgo8aDM+RXhhbXBsZTogQ3JlYXRpbmcgYSBrZXk8L2gzPgoKPHBy ZT48Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5CiAgICAgdXJsPSZxdW90Oy9tdXNpYy9u ZXh0LWJpZy1oaXQmcXVvdDsgdHJpZ2dlcj0mcXVvdDtkZW1vJnF1b3Q7IC8mZ3Q7PC9jb2Rl PjwvcHJlPgoKPHA+VGhpcyBtaWdodCBnZW5lcmF0ZSBhbiBhY2Nlc3MtY29udHJvbGxlZCA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzdWNoIGFzIHRoZSBmb2xsb3dpbmcgKG5l d2xpbmVzIGp1c3QgZm9yIGNsYXJpdHkpOjwvcD4KCjxwcmU+PGNvZGU+aHR0cDovL3NpdGUu Y29tL211c2ljL25leHQtYmlnLWhpdC9kZW1vLwogICAgIDQyYzUzMWQxMzQyM2VlY2FhYWI3 M2EyZGY0M2E4YjdjMzM3YTM2MGEvNGQ5ZDEyYTU8L2NvZGU+PC9wcmU+Cgo8cD5TZW5kIHRo YXQgbGluayB0byB5b3VyIGZyaWVuZCBhbmQgc2hlJiM4MjE3O2xsIGJlIGFibGUgdG8gbGlz dGVuIHRvIHlvdXIgY29vbCBuZXcgZGVtbyBzb25nLjwvcD4KCjxoMj5UYWc6IDxjb2RlPiZs dDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0IC8mZ3Q7PC9jb2RlPjwvaDI+Cgo8cD5PbmNlIHlv dSYjODIxNzt2ZSBnZW5lcmF0ZWQgYSBrZXksIGl0JiM4MjE3O3MgdGltZSB0byBwcm90ZWN0 IGFsbCBvciBwYXJ0IG9mIHlvdXIgY2hvc2VuIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+LjwvcD4KCjx1bD4KCTxsaT5UbyBwcm90ZWN0IGFuIGVudGlyZSBwYWdlLCBwdXQgdGhl IDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0Jmd0OzwvY29kZT4gdGFnIHJpZ2h0 IGF0IHRoZSB0b3AsIGFib3ZlIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkRPQ1RZUEU8L3Nw YW4+PC9saT4KCTxsaT5UbyBvbmx5IHByb3RlY3QgcGFydCBvZiBhIHBhZ2UsIHdyYXAgdGhl IHByb3RlY3RlZCBjb250ZW50IHdpdGggdGhlIHRhZzwvbGk+Cgk8bGk+RmlsZSBkb3dubG9h ZHMgYXJlIGF1dG9tYXRpY2FsbHkgcHJvdGVjdGVkIGlmIHlvdSBoYXZlIGdlbmVyYXRlZCBh IGtleSBmb3IgdGhlbTwvbGk+CjwvdWw+Cgo8cD5Db25maWd1cmUgdGhlIHBsdWdpbiB3aXRo IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8L3A+Cgo8ZGw+Cgk8ZHQ+PHNwYW4+dHJpZ2dl cjwvc3Bhbj48L2R0PgoJPGRkPlRoZSBzYW1lIHRyaWdnZXIgeW91IHNwZWNpZmllZCBpbiB5 b3VyIDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19rZXkgLyZndDs8L2NvZGU+IHRhZy4gWW91 IG1heSBzcGVjaWZ5IGEgcGFydGlhbCB0cmlnZ2VyIGlmIHV0aWxpc2luZyA8Y29kZT50cmln Z2VyX21vZGU8L2NvZGU+LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+c21kX2FrZXk8L2Nv ZGU+PC9kZD4KCTxkdD48c3Bhbj50cmlnZ2VyX21vZGU8L3NwYW4+PC9kdD4KCTxkZD5Vc3Vh bGx5IHlvdSYjODIxNztsbCB3YW50IHRoZSB0cmlnZ2VyIHRvIG1hdGNoIGV4YWN0bHksIGJ1 dCB5b3UgbWF5IHdpc2ggdG8gbWF0Y2ggc29tZSBwYXJ0IG9mIHRoZSB0cmlnZ2VyIChmb3Ig YSBwcmFjdGljYWwgZXhhbXBsZSBvZiB0aGlzLCBzZWUgPGEgaHJlZj0iI3NtZF9ha2V5X2Vn MyI+ZXhhbXBsZSAzPC9hPikuIENob29zZSBmcm9tOgoJPGRsPgoJCTxkZD48c3Ryb25nPmV4 YWN0PC9zdHJvbmc+IDogKGRlZmF1bHQpIGluY29taW5nIHRva2VuJiM4MjE3O3MgdHJpZ2dl ciBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIDxjb2RlPnRyaWdnZXI8L2NvZGU+IGF0dHJpYnV0 ZTwvZGQ+CgkJPGRkPjxzdHJvbmc+YmVnaW5zPC9zdHJvbmc+IDogaW5jb21pbmcgdG9rZW4m IzgyMTc7cyB0cmlnZ2VyIG11c3QgYmVnaW4gd2l0aCA8Y29kZT50cmlnZ2VyPC9jb2RlPjwv ZGQ+CgkJPGRkPjxzdHJvbmc+ZW5kczwvc3Ryb25nPiA6IGluY29taW5nIHRva2VuJiM4MjE3 O3MgdHJpZ2dlciBtdXN0IGVuZCB3aXRoIDxjb2RlPnRyaWdnZXI8L2NvZGU+PC9kZD4KCQk8 ZGQ+PHN0cm9uZz5jb250YWluczwvc3Ryb25nPiA6IGluY29taW5nIHRva2VuJiM4MjE3O3Mg dHJpZ2dlciBtdXN0IGNvbnRhaW4gdGhlIHRleHQgZ2l2ZW4gaW4gPGNvZGU+dHJpZ2dlcjwv Y29kZT48L2RkPgoJPC9kbD48L2RkPgoJPGRkPkRlZmF1bHQ6IDxjb2RlPmV4YWN0PC9jb2Rl PjwvZGQ+Cgk8ZHQ+PHNwYW4+c2l0ZV9uYW1lPC9zcGFuPjwvZHQ+Cgk8ZGQ+QWRkIHRoZSBz aXRlIHByZWZpeCB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gd2hlbiB0 cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJvdGVjdGVkLiBUaGlz IGZ1bmN0aW9ucyBpZGVudGljYWxseSB0byB0aGUgYXR0cmlidXRlIGluIHRoZSA8Y29kZT4m bHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5IC8mZ3Q7PC9jb2RlPiB0YWcgYW5kLCBpZGVhbGx5LCB0 aGV5IHNob3VsZCBtYXRjaC48L2RkPgoJPGRkPkRlZmF1bHQ6IDEgKHllcyk8L2RkPgoJPGR0 PjxzcGFuPnNlY3Rpb25fbW9kZTwvc3Bhbj48L2R0PgoJPGRkPldvcmtzIGluIGFuIGlkZW50 aWNhbCBtYW5uZXIgdG8gdGhlIGF0dHJpYnV0ZSBpbiB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRf YWNjZXNzX2tleSAvJmd0OzwvY29kZT4gdGFnIGFuZCB0aGV5IHNob3VsZCBtYXRjaC48L2Rk PgoJPGRkPkRlZmF1bHQ6IDAgKG5vKTwvZGQ+Cgk8ZHQ+PHNwYW4+Zm9yY2U8L3NwYW4+PC9k dD4KCTxkZD5Db250cm9scyBjb250ZW50IGF2YWlsYWJpbGl0eS4gVGhpcyBpcyBvbmUgbWV0 aG9kIG9mIHB1dHRpbmcgdGhlIHRva2VuIGdlbmVyYXRpb24gdGFnIGFuZCB0aGUgcHJvdGVj dGVkIGNvbnRlbnQgb24gdGhlIHNhbWUgcGFnZS4gQ2hvb3NlIGZyb206Cgk8ZGw+CgkJPGRk PjA6IHBlcm1pdCB0aGUgcmVzb3VyY2UgdG8gYmUgZGlyZWN0bHkgYWNjZXNzaWJsZTwvZGQ+ CgkJPGRkPjE6IHRoZSBjb250ZW50IGlzIHVuYXZhaWxhYmxlIGV2ZW4gaWYgeW91IDxlbT5k b24mIzgyMTc7dDwvZW0+IHNwZWNpZnkgdGhlIGFjY2VzcyB0b2tlbiBpbiB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gKGUuZy4gaWYgeW91IGRpcmVjdGx5IHZpc2l0IDxj b2RlPi9tdXNpYy9uZXh0LWJpZy1oaXQ8L2NvZGU+KTwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+ RGVmYXVsdDogMDwvZGQ+Cgk8ZHQ+PHNwYW4+ZXhwaXJlczwvc3Bhbj48L2R0PgoJPGRkPlRo ZSB0aW1lLCBpbiBzZWNvbmRzLCBhZnRlciB3aGljaCB0aGUgcmVzb3VyY2Ugd2lsbCBjZWFz ZSB0byBiZSBhdmFpbGFibGUuIFNldCB0byAwIGZvciB1bmxpbWl0ZWQgdGltZS48L2RkPgoJ PGRkPklmIHlvdSBoYXZlIHNldCBhbiBleHBpcnkgaW4gdGhlIGtleSBpdHNlbGYsIHRoaXMg YXR0cmlidXRlIGlzIGlnbm9yZWQgd2hlbiB0aGF0IGtleSBpcyBwcmVzZW50ZWQuPC9kZD4K CTxkZD5EZWZhdWx0OiAzNjAwICgxIGhvdXIpPC9kZD4KPC9kbD4KCjxwPihpZiB5b3Ugd2lz aCB0byBsb2cgSVAgYWRkcmVzc2VzIGZvciBlYWNoIGFjY2VzcyBhdHRlbXB0IHlvdSBjYW4g c2V0IHRoZSA8YSBocmVmPSIjc21kX2FrZXlfcHJlZnMiPnByZWY8L2E+KTwvcD4KCjxwPklu IG91ciBtdXNpYyBleGFtcGxlIHlvdSYjODIxNztsbCBwcm9iYWJseSB3YW50IHRvIHB1dCB0 aGUgZm9sbG93aW5nIHRhZyBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlOjwvcD4KCjxwcmU+PGNv ZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX3Byb3RlY3QgZXhwaXJlcz0mcXVvdDs4NjQwMCZxdW90 OyB0cmlnZ2VyPSZxdW90O2RlbW8mcXVvdDsgZm9yY2U9JnF1b3Q7MSZxdW90OyAvJmd0Ozwv Y29kZT48L3ByZT4KCjxwPlNvIG5vYm9keSBjYW4gdmlzaXQgdGhhdCBwYWdlIHVubGVzcyB0 aGV5IGhhdmUgYmVlbiBnaXZlbiBhIHZhbGlkIGFjY2VzcyB0b2tlbiA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPi4gVGhlIHNvbmcgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGxpc3Rl bmluZyBmb3IganVzdCBvbmUgZGF5IGZyb20gdGhlIG1vbWVudCB0aGUgdG9rZW4gaXMgZ2Vu ZXJhdGVkLjwvcD4KCjxwPkFsdGVybmF0aXZlbHksIHlvdSBtaWdodCBhbGxvdyBwZW9wbGUg dG8gc2VlIHRoZSBzdXJyb3VuZGluZyBwYWdlIGFuZCBqdXN0IHdyYXAgdGhlIG1wMyBpdHNl bGYgd2l0aCB0aGUgdGFnOjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX3By b3RlY3QgZXhwaXJlcz0mcXVvdDs4NjQwMCZxdW90OyB0cmlnZ2VyPSZxdW90O2RlbW8mcXVv dDsmZ3Q7CiAgJmx0O29iamVjdCB0eXBlPSZxdW90Oy9hdWRpby9tcGVnJnF1b3Q7IGRhdGE9 JnF1b3Q7L211c2ljL25leHQtYmlnLWhpdC5tcDMmcXVvdDsgLyZndDsKJmx0Oy90eHA6c21k X2FjY2Vzc19wcm90ZWN0Jmd0OzwvY29kZT48L3ByZT4KCjxwPk5vdGUgdGhhdCB5b3UgY2Fu IHByb3RlY3QgYXMgbWFueSBwYXJ0cyBvZiB0aGUgc2FtZSBwYWdlIGFzIHlvdSBsaWtlLCBk aWZmZXJpbmcgb25seSBpbiB0aGUgPGNvZGU+dHJpZ2dlcjwvY29kZT4uIFRoaXMgYWxsb3dz IHlvdSB0byB1bmxvY2sgdmFyaW91cyBwYXJ0cyBvZiB5b3VyIHBhZ2VzIHRvIGRpZmZlcmVu dCBwZW9wbGUgYW5kIHNldCBpbmRpdmlkdWFsIGV4cGlyeSB0aW1lcyBmb3IgZWFjaCBwb3J0 aW9uIG9mIHRoZSBwYWdlLCBvciBzZXQgZXhwaXJ5IHRpbWVzIGluIHRoZSBhY2Nlc3MgdG9r ZW5zIHRoZW1zZWx2ZXMuPC9wPgoKPHA+QW5vdGhlciBvcHRpb24gaXMgaXMgdG8gZWxlY3Qg dG8gY3JlYXRlIHRoZSBhY2Nlc3Mga2V5IGRpcmVjdGx5IGZvciB0aGUgZmlsZV9kb3dubG9h ZCBpdHNlbGYuIElmIHlvdSYjODIxNztyZSBmZWVsaW5nIHBhcmFub2lkIHlvdSBjb3VsZCBk byBib3RoIDotKTwvcD4KCjxoMj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2lmX2FjY2Vzc19l cnJvciAvJmd0OzwvY29kZT48L2gyPgoKPHA+Q29uZGl0aW9uYWwgdGFnIHRoYXQgdHJpZ2dl cnMgdGhlIGNvbnRhaW5lZCBjb250ZW50IGlmIGFjY2VzcyB3YXMgZGVuaWVkIGZvciBzb21l IHJlYXNvbi4gIFN1cHBvcnRzIDxjb2RlPiZsdDt0eHA6ZWxzZSAvJmd0OzwvY29kZT4uIEF0 dHJpYnV0ZXM6PC9wPgoKPGRsPgoJPGR0PjxzcGFuPnR5cGU8L3NwYW4+PC9kdD4KCTxkZD5D b21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGFj Y2VzcyB0eXBlcy4gVGhlIGNvcnJlc3BvbmRpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8 L3NwYW4+IGVycm9yIHN0YXR1cyBjb2RlIHRocm93biBpcyBnaXZlbiBpbiBwYXJlbnRoZXNl czoKCTxkbD4KCQk8ZGQ+PHN0cm9uZz5zbWRfYWtleV9lcnJfYmFkX3Rva2VuPC9zdHJvbmc+ ICg0MDMpIDogaWYgdGhlIGFjY2VzcyB0b2tlbiBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gaXMgdG9vIGxvbmcvc2hvcnQ8L2RkPgoJCTxkZD48c3Ryb25nPnNtZF9h a2V5X2Vycl9leHBpcmVkPC9zdHJvbmc+ICg0MTApIDogIGlmIHRoZSByZXNvdXJjZSBoYXMg cGFzc2VkIGl0cyBleHBpcnk8L2RkPgoJCTxkZD48c3Ryb25nPnNtZF9ha2V5X2Vycl9mb3Ji aWRkZW48L3N0cm9uZz4gKDQwMSkgOiB0cmlnZ2VyZWQgaWYgdGhlIDxjb2RlPmZvcmNlPC9j b2RlPiBhdHRyaWJ1dGUgaXMgc2V0IGFuZCBkaXJlY3QgYWNjZXNzIGhhcyBiZWVuIHJlcXVl c3RlZDwvZGQ+CgkJPGRkPjxzdHJvbmc+c21kX2FrZXlfZXJyX2ludmFsaWRfdG9rZW48L3N0 cm9uZz4gKDQwMykgOiB0aGUgYWNjZXNzIGtleSBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gZG9lc24mIzgyMTc7dCBtYXRjaCB0aGUgb25lIHVzZWQgdG8gcHJvdGVj dCB0aGUgcmVzb3VyY2U8L2RkPgoJCTxkZD48c3Ryb25nPnNtZF9ha2V5X2Vycl9saW1pdDwv c3Ryb25nPiAoNDEwKSA6IHRoZSBudW1iZXIgb2YgcGVybWl0dGVkIHZpZXdzIChzcGVjaWZp ZWQgdmlhIHRoZSA8Y29kZT5tYXg8L2NvZGU+IGF0dHJpYnV0ZSkgaGFzIGJlZW4gZXhjZWVk ZWQ8L2RkPgoJCTxkZD48c3Ryb25nPnNtZF9ha2V5X2Vycl9taXNzaW5nX3RpbWVzdGFtcDwv c3Ryb25nPiAoNDAzKSA6IHRoZSB0aW1lc3RhbXAgcG9ydGlvbiBvZiB0aGUgYWNjZXNzIGtl eSBpcyBtaXNzaW5nIGZyb20gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9k ZD4KCQk8ZGQ+PHN0cm9uZz5zbWRfYWtleV9lcnJfdW5hdmFpbGFibGU8L3N0cm9uZz4gKDQx MCkgOiB0aGUgcmVzb3VyY2UgaXNuJiM4MjE3O3QgeWV0IGF2YWlsYWJsZSAodGhlIHN0YXJ0 IHRpbWUgaGFzbiYjODIxNzt0IGJlZW4gcmVhY2hlZCk8L2RkPgoJCTxkZD48c3Ryb25nPnNt ZF9ha2V5X2Vycl91bmF1dGhvcml6ZWQ8L3N0cm9uZz4gKDQwMSkgOiB0aGUgcmVzb3VyY2Ug aXNuJiM4MjE3O3Qgb25lIHRoYXQgaGFzIGJlZW4gcHJvdGVjdGVkIGJ5IHRoaXMgYWNjZXNz IGtleTwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZHQ+PHNwYW4+Y29kZTwvc3Bhbj48L2R0PgoJPGRk PkNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBhY2Nlc3MgY29k ZXMgZ2l2ZW4gaW4gdGhlIGFib3ZlIGxpc3Q8L2RkPgo8L2RsPgoKPHA+V2l0aG91dCBhbnkg YXR0cmlidXRlcywgdGhlIHRhZyB0cmlnZ2VycyB0aGUgY29udGFpbmVkIGNvbnRlbnQgb24g YW55IGVycm9yLiBJZiB5b3Ugc3BlY2lmeSBtYW55IDxjb2RlPnR5cGU8L2NvZGU+cyB0aGVu IDxlbT5hbnk8L2VtPiBvZiB0aGUgbGlzdGVkIHR5cGVzIHRoYXQgbWF0Y2ggd2lsbCByZXR1 cm4gdHJ1ZS4gVGhlIHNhbWUgZ29lcyBmb3IgPGNvZGU+Y29kZTwvY29kZT5zLiBJZiB5b3Ug dXNlIHRoZSB0d28gaW4gdGFuZGVtIHRoZW4gdGhlIGVycm9yIG11c3QgbWF0Y2ggb25lIG9m IHRoZSB0eXBlcyA8c3BhbiBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBvbmUgb2YgdGhlIGNv ZGVzIHRvIHJldHVybiB0cnVlLjwvcD4KCjxoMj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2Fj Y2Vzc19lcnJvciAvJmd0OzwvY29kZT48L2gyPgoKPHA+RGlzcGxheSBhbiBhY2Nlc3MgZXJy b3IgbWVzc2FnZS9jb2RlLiBUeXBpY2FsbHkgdXNlZCBpbnNpZGUgPGNvZGU+Jmx0O3R4cDpz bWRfaWZfYWNjZXNzX2Vycm9yJmd0OzwvY29kZT4uIEF0dHJpYnV0ZXM6PC9wPgoKPGRsPgoJ PGR0PjxzcGFuPml0ZW08L3NwYW4+PC9kdD4KCTxkZD5XaGljaCBlcnJvciBpbmZvcm1hdGlv biB0byBkaXNwbGF5LiBDb21tYS1zZXBhcmF0ZSB0aGUgdmFsdWVzIGlmIHlvdSB3aXNoIHRv IHVzZSBib3RoLiBDaG9vc2UgZnJvbToKCTxkbD4KCQk8ZGQ+PGNvZGU+bWVzc2FnZTwvY29k ZT46IHRoZSBlcnJvciBzdHJpbmc8L2RkPgoJCTxkZD48Y29kZT5jb2RlPC9jb2RlPjogdGhl IHN0YXR1cyBjb2RlPC9kZD4KCTwvZGw+PC9kZD4KCTxkZD5EZWZhdWx0OiA8Y29kZT5tZXNz YWdlPC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4+bWVzc2FnZTwvc3Bhbj48L2R0PgoJPGRkPkRp c3BsYXkgdGhpcyBtZXNzYWdlIGluc3RlYWQgb2YgdGhlIHBsdWdpbiBkZWZhdWx0IG1lc3Nh Z2UuPC9kZD4KCTxkdD48c3Bhbj53cmFwdGFnPC9zcGFuPjwvZHQ+Cgk8ZGQ+PHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyAod2l0aG91dCBhbmdsZSBicmFja2V0cykgdG8g d3JhcCBhcm91bmQgdGhlIG91dHB1dC48L2RkPgoJPGR0PjxzcGFuPmNsYXNzPC9zcGFuPjwv ZHQ+Cgk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBh cHBseSB0byB0aGUgd3JhcHRhZy48L2RkPgoJPGR0PjxzcGFuPmh0bWxfaWQ8L3NwYW4+PC9k dD4KCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8g dGhlIHdyYXB0YWcuPC9kZD4KCTxkdD48c3Bhbj5icmVhazwvc3Bhbj48L2R0PgoJPGRkPjxz cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgKHdpdGhvdXQgYW5nbGUgYnJhY2tl dHMpIHRvIHdyYXAgYXJvdW5kIGVhY2ggaXRlbS48L2RkPgoJPGR0PjxzcGFuPmJyZWFrY2xh c3M8L3NwYW4+PC9kdD4KCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFz cyBuYW1lIHRvIGFwcGx5IHRvIGVhY2ggYnJlYWsgdGFnPC9kZD4KPC9kbD4KCjxoMj5UYWc6 IDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19pbmZvIC8mZ3Q7PC9jb2RlPjwvaDI+Cgo8cD5E aXNwbGF5IGFjY2VzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjdXJyZW50IHByb3RlY3RlZCBw YWdlLiBBdHRyaWJ1dGVzOjwvcD4KCjxkbD4KCTxkdD48c3Bhbj5pdGVtPC9zcGFuPjwvZHQ+ Cgk8ZGQ+T25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBpdGVtcyAoY29tbWEtZGVsaW1p dGVkKToKCTxkbD4KCQk8ZGQ+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IDogdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCBhY2Nlc3Mg a2V5PC9kZD4KCQk8ZGQ+PHN0cm9uZz50cmlnZ2VyPC9zdHJvbmc+IDogdGhlIHRyaWdnZXIg Zm9yIHRoZSBjdXJyZW50IGtleSwgYXMgZ2l2ZW4gaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+PC9kZD4KCQk8ZGQ+PHN0cm9uZz5tYXhpbXVtPC9zdHJvbmc+IDogdGhl IG1heGltdW0gbnVtYmVyIG9mIGFjY2VzcyBhdHRlbXB0cyBhbGxvd2VkIGZvciB0aGlzIGtl eTwvZGQ+CgkJPGRkPjxzdHJvbmc+YWNjZXNzZXM8L3N0cm9uZz4gOiB0aGUgY3VycmVudCBu dW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoaXMg a2V5PC9kZD4KCQk8ZGQ+PHN0cm9uZz5ub3c8L3N0cm9uZz4gOiB0aGUgcmF3IDxzcGFuIGNs YXNzPSJjYXBzIj5VTklYPC9zcGFuPiB0aW1lc3RhbXAgb2YgdGhlIHRpbWUgdGhlIGFjY2Vz cyBhdHRlbXB0IHdhcyBtYWRlPC9kZD4KCQk8ZGQ+PHN0cm9uZz5pc3N1ZWQ8L3N0cm9uZz4g OiB0aGUgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj5VTklYPC9zcGFuPiB0aW1lc3RhbXAgb2Yg d2hlbiB0aGUgY3VycmVudCBrZXkgd2FzIGNyZWF0ZWQ8L2RkPgoJCTxkZD48c3Ryb25nPmV4 cGlyZXM8L3N0cm9uZz4gOiB0aGUgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj5VTklYPC9zcGFu PiB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgY3VycmVudCBrZXkgZXhwaXJlczwvZGQ+CgkJPGRk PjxzdHJvbmc+aGV4dGltZTwvc3Ryb25nPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VU5J WDwvc3Bhbj4gdGltZXN0YW1wIG9mIHdoZW4gdGhlIGN1cnJlbnQga2V5IHdhcyBjcmVhdGVk LCBlbmNvZGVkIGFzIGEgaGV4IHN0cmluZyAoYXMgdXNlZCBpbiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4pPC9kZD4KCQk8ZGQ+PHN0cm9uZz5pcDwvc3Ryb25nPiA6IHRo ZSBJUCBhZGRyZXNzIG9mIHRoZSByZW1vdGUgYWRkcmVzcyBtYWtpbmcgdGhlIHJlcXVlc3Qg KGlmIGF2YWlsYWJsZSk8L2RkPgoJCTxkZD48c3Ryb25nPmV4dHJhPC9zdHJvbmc+IDogdGhl IGZ1bGwgc3RyaW5nIGFzIGdpdmVuIGluIHRoZSA8Y29kZT5leHRyYTwvY29kZT4gYXR0cmli dXRlPC9kZD4KCQk8ZGQ+PHN0cm9uZz5leHRyYV9OPC9zdHJvbmc+ICh3aGVyZSBOIGlzIGFu IGludGVnZXIgYmVnaW5uaW5nIGF0IDEpIDogaWYgeW91IGhhdmUgc3BlY2lmaWVkIG1hbnkg dmFsdWVzIGluIHlvdXIgPGNvZGU+ZXh0cmE8L2NvZGU+LCBlYWNoIHNlcGFyYXRlZCB3aXRo IGEgc2xhc2gsIHRoaXMgZGlzcGxheXMgdGhlIGdpdmVuIGluZGl2aWR1YWwgaXRlbTwvZGQ+ Cgk8L2RsPjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+cGFnZTwvY29kZT48L2RkPgoJPGR0 PjxzcGFuPmVzY2FwZTwvc3Bhbj48L2R0PgoJPGRkPldoZXRoZXIgdG8gZXNjYXBlIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBlbnRpdGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8 L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+JmFtcDs8L2NvZGU+IGluIHRo ZSBpdGVtLiBTZXQgPGNvZGU+ZXNjYXBlPSZxdW90OyZxdW90OzwvY29kZT4gdG8gdHVybiB0 aGlzIG9mZi48L2RkPgoJPGRkPkRlZnVhbHQ6IDxjb2RlPmh0bWw8L2NvZGU+PC9kZD4KCTxk dD48c3Bhbj5mb3JtYXQ8L3NwYW4+PC9kdD4KCTxkZD5JZiBkaXNwbGF5aW5nIGEgdGltZS1y ZWxhdGVkIGl0ZW0gKG5vdywgaXNzdWVkLCBvciBleHBpcmVzKSB5b3UgY2FuIGZvcm1hdCBp dCB1c2luZyB0aGUgPGEgaHJlZj0iaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9u LnN0cmZ0aW1lLnBocCI+c3RyZnRpbWUoKSBmb3JtYXR0aW5nIGNvZGVzPC9hPi48L2RkPgoJ PGRkPkRlZmF1bHQ6IDxjb2RlPiVZLSVtLSVkICVIOiVNOiVTPC9jb2RlPjwvZGQ+Cgk8ZHQ+ PHNwYW4+d3JhcHRhZzwvc3Bhbj48L2R0PgoJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiB0YWcgKHdpdGhvdXQgYW5nbGUgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIHRo ZSBvdXRwdXQuPC9kZD4KCTxkdD48c3Bhbj5jbGFzczwvc3Bhbj4gOjxiciAvPgo8c3BhbiBj bGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1lIHRvIGFwcGx5IHRvIHRoZSB3cmFw dGFnLjwvZHQ+Cgk8ZHQ+PHNwYW4+aHRtbF9pZDwvc3Bhbj48L2R0PgoJPGRkPjxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCB0byBhcHBseSB0byB0aGUgd3JhcHRhZy48L2Rk PgoJPGR0PjxzcGFuPmJyZWFrPC9zcGFuPjwvZHQ+Cgk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMi PkhUTUw8L3NwYW4+IHRhZyAod2l0aG91dCBhbmdsZSBicmFja2V0cykgdG8gd3JhcCBhcm91 bmQgZWFjaCBpdGVtLjwvZGQ+Cgk8ZHQ+PHNwYW4+YnJlYWtjbGFzczwvc3Bhbj48L2R0PgoJ PGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkg dG8gZWFjaCBicmVhayB0YWcuPC9kZD4KPC9kbD4KCjxoMj5BZG1pbiBzaWRlIGludGVyZmFj ZTwvaDI+Cgo8cD5VbmRlciA8ZW0+RXh0ZW5zaW9ucy0mZ3Q7QWNjZXNzIGtleXM8L2VtPiB5 b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIGFsbCBrZXlzIHRoYXQgaGF2ZSBiZWVuIGdlbmVyYXRl ZC4gWW91IGNhbiBzb3J0IHRoZSBsaXN0IChhc2NlbmRpbmcgb3IgZGVzY2VuZGluZykgYnkg Y2xpY2tpbmcgdGhlIGhlYWRpbmdzIG9yIHlvdSBjYW4gZmlsdGVyIHRoZW0gdXNpbmcgdGhl IHNlbGVjdCBsaXN0IGFuZCB0ZXh0IGJveCBhdCB0aGUgdG9wLiBUaGUgdXN1YWwgbXVsdGkt ZWRpdCB0b29scy9jaGVja2JveGVzIGFyZSBhdmFpbGFibGUgdG8gYWxsb3cgeW91IHRvIGJh dGNoLWRlbGV0ZSBrZXlzLjwvcD4KCjxwPklmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGNyZWF0 ZSBhbiBhY2Nlc3Mga2V5LCBjbGljayA8ZW0+TmV3IGtleTwvZW0+IGFuZCBmaWxsIGluIGFz IG1hbnkgb2YgdGhlIHRleHQgYm94ZXMgYXMgeW91IHdpc2guIFRoZSBvbmx5IG9uZSB0aGF0 IGlzIG1hbmRhdG9yeSBpcyB0aGUgPGVtPlBhZ2U8L2VtPiBib3guIFlvdXIgYWNjZXNzIGtl eSB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlIGFyZWEg Zm9yIHlvdSB0byBjb3B5IGFuZCBwYXN0ZS48L3A+Cgo8cD5BIGZldyB0aGluZ3MgdG8gbm90 ZSBhYm91dCB0aGUgbGlzdDo8L3A+Cgo8dWw+Cgk8bGk+SWYgeW91IGhhdmUgZWxlY3RlZCB0 byBsb2cgSVAgYWRkcmVzc2VzIChzZWUgPGEgaHJlZj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVm czwvYT4pIHRoZSBJUHMgb2YgYWxsIGtleS1iYXNlZCBhY2Nlc3MgYXR0ZW1wdHMgYXJlIGxv Z2dlZC4gRnVydGhlciwgaWYgeW91IGhhdmUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gdmlzaXRvciBsb2dnaW5nIGVuYWJsZWQsIHRoZSBhZGRyZXNzZXMgaW4gdGhlICYjODIx NjtJUCYjODIxNzsgY29sdW1uIGFyZSBoeXBlcmxpbmtlZCB0byB0aGUgVmlzaXRvciBMb2dz IHRvIHNob3cgeW91IGFsbCBhY2Nlc3NlcyBieSB0aGUgY2xpY2tlZCBJUC4gQWx0aG91Z2gg dGhlIHBsdWdpbiBjYW4gcG90ZW50aWFsbHkgaG9sZCBvdmVyIDE2MDAgSVAgYWRkcmVzc2Vz IHRoZSBpbnRlcmZhY2UgbWlnaHQgY3J1bWJsZSBiZWZvcmUgeW91IHJlYWNoIHRoaXMgbGlt aXQgc28gaXQmIzgyMTc7cyBiZXN0IHRvIHRyeSBhbmQgbGltaXQgdGhlIG51bWJlciBvZiBh Y2Nlc3NlcyBwZXIga2V5IHRvIGtlZXAgdGhlIG51bWJlciBvZiBhdHRlbXB0cyBsb3cgYW5k IG1ha2UgdGhlIGludGVyZmFjZSBtYW5hZ2VhYmxlPC9saT4KCTxsaT5UaGUgUGFnZSBpcyBo eXBlcmxpbmtlZCB0byB0aGUgcHJvdGVjdGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IGJ1dCBpdCBkb2VzIDxlbT5ub3Q8L2VtPiBhdHRlbXB0IHRvIGFjY2VzcyBpdCB3aXRo IHRoZSBrZXkuIEl0IGlzIGp1c3QgYSBjb252ZW5pZW5jZSBmb3IgeW91IHRvIGNoZWNrIHRo YXQgdGhlIHBhZ2UgaXMgcHJvdGVjdGVkLiBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIHBh Z2UgdmlhIGl0cyBrZXkgeW91IGNhbiBkbyBzbyBmcm9tIHRoZSBWaXNpdG9yIExvZ3MsIGFz c3VtaW5nIHNvbWVvbmUgaGFzIHRyaWVkIGF0IGxlYXN0IG9uY2UgdG8gYWNjZXNzIHRoZSBy ZXNvdXJjZSAmIzgyMTI7IHlvdSBjYW4ganVzdCBjbGljayB0aGUgcmVsZXZhbnQgdmlzaXRv ciBsb2cgUGFnZSBlbnRyeSB3aGljaCBjb250YWlucyB0aGUgZnVsbCBhY2Nlc3Mga2V5IDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9saT4KCTxsaT5UaGUgbnVtYmVyIG9mIGFj Y2Vzc2VzIG1heSBleGNlZWQgdGhlIG1heGltdW0gcGVybWl0dGVkLiBUaGlzIGlzIGJlY2F1 c2UgYXR0ZW1wdHMgYXJlIGxvZ2dlZCBhbGwgdGhlIHRpbWUgdGhlIHJlc291cmNlIGlzIGF2 YWlsYWJsZSAoaS5lLiBoYXMgbm90IGV4cGlyZWQpLiBSZXN0IGFzc3VyZWQgaWYgdGhlIG1h eGltdW0gYWNjZXNzIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQsIHZpc2l0b3JzIHdpdGggdmFs aWQga2V5cyB3aWxsIDxzcGFuIGNsYXNzPSJjYXBzIj5OT1Q8L3NwYW4+IHNlZSB0aGUgcHJv dGVjdGVkIGNvbnRlbnQsIGV2ZW4gdGhvdWdoIHRoZSBjb3VudGVyIHdpbGwgY29udGludWUg dG8gbG9nIHJlcXVlc3RzLiBZb3UgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGNoZWNr IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBWaXNpdG9yIExvZ3MgZm9yIElQ IGFkZHJlc3NlcyB0aGF0IHRyeSB0byBhY2Nlc3MgYSByZXNvdXJjZSBhZnRlciB0aGUgbGlt aXQgaGFzIGJlZW4gcmVhY2hlZC4gQXMgc29vbiBhcyB0aGUgcmVzb3VyY2UgZXhwaXJlcywg YWNjZXNzIGNvdW50aW5nIGNlYXNlczwvbGk+Cgk8bGk+VGhlIHRyaWdnZXIgZm9yIGZpbGUg ZG93bmxvYWRzIGlzIGVtcHR5LiBUaGlzIGlzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlIHdheSB0 aGUgcGx1Z2luIG9wZXJhdGVzIGJ1dCBpdCBoYXMgYSB1c2VmdWwgYm9udXM6IHlvdSBjYW4g bGVhdmUgdGhlIHRyaWdnZXIgYmxhbmsgaWYgeW91ciBQYWdlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IGNvbnRhaW5zIDxjb2RlPi9maWxlX2Rvd25sb2FkPC9jb2RlPiAoYmVj YXVzZSB0aGUgdHJpZ2dlciBpdHNlbGYgaXMgdGhlIHByZXNlbmNlIG9mIDxjb2RlPmZpbGVf ZG93bmxvYWQ8L2NvZGU+IGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPik8 L2xpPgo8L3VsPgoKPGgyIGlkPSJzbWRfYWtleV9wcmVmcyI+UHJlZmVyZW5jZXM8L2gyPgoK PHA+VGhlIHBsdWdpbiBleHBvc2VzIHNvbWUgZ2xvYmFsIHByZWZlcmVuY2Ugc2V0dGluZ3Mg dGhhdCBnb3Zlcm4gaXRzIG9wZXJhdGlvbjo8L3A+Cgo8ZGw+Cgk8ZHQ+PHNwYW4+RmlsZSBk b3dubG9hZCBleHBpcnkgdGltZTwvc3Bhbj48L2R0PgoJPGRkPlRpbWUsIGluIHNlY29uZHMs IGFmdGVyIHdoaWNoIHlvdXIgZmlsZSBkb3dubG9hZHMgd2lsbCBleHBpcmUsIGZvbGxvd2lu ZyBnZW5lcmF0aW9uIG9mIGFuIGFjY2VzcyBrZXkuPC9kZD4KCTxkZD5EZWZhdWx0OiAzNjAw ICgxIGhvdXIpPC9kZD4KCTxkdD48c3Bhbj5TYWx0IGxlbmd0aDwvc3Bhbj48L2R0PgoJPGRk Pk51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHVzZSBhcyBhIHNhbHQgaW4geW91ciBzZWNyZXQg a2V5LiBUaGUgZGVmYXVsdCBpcyB1c3VhbGx5IGZpbmUgYnV0IGlmIHlvdSB3YW50IHRvIGFs dGVyIHRoaXMgZm9yIGdyZWF0ZXIvcmVkdWNlZCBzZWN1cml0eSB0aGVuIGRvIHNvLiA8c3Bh biBjbGFzcz0iY2FwcyI+SU1QT1JUQU5UPC9zcGFuPjogaWYgeW91IGNoYW5nZSB0aGlzIHZh bHVlLCBhbGwgeW91ciBleGlzdGluZyBhY2Nlc3Mga2V5cyBiZWNvbWUgaW5zdGFudGx5IGlu dmFsaWQuPC9kZD4KCTxkZD5EZWZhdWx0OiA4PC9kZD4KCTxkdD48c3Bhbj5Mb2cgSVAgYWRk cmVzc2VzPC9zcGFuPjwvZHQ+Cgk8ZGQ+V2hldGhlciB5b3Ugd2lzaCB0aGUgcGx1Z2luIHRv IGxvZyB0aGUgSVAgYWRkcmVzcyBvZiBlYWNoIHZpc2l0b3Igd2hvIHRyaWVzIHRvIGFjY2Vz cyBhIHByb3RlY3RlZCByZXNvdXJjZTwvZGQ+Cgk8ZGQ+RGVmYXVsdDogbm88L2RkPgo8L2Rs PgoKPGgyIGlkPSJzbWRfYWtleV9lZzEiPkV4YW1wbGUgMTogUHJvdGVjdCBwYXJ0IG9mIGEg cGFnZTwvaDI+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0CiAgICAg dHJpZ2dlcj0mcXVvdDtsZWFmbGV0cyZxdW90OyBmb3JjZT0mcXVvdDsxJnF1b3Q7IGV4cGly ZXM9JnF1b3Q7ODY0MDAmcXVvdDsmZ3Q7CiAgICZsdDtwJmd0O1lvdXIgbGVhZmxldCBjb250 ZW50cyBnb2VzIGhlcmUmbHQ7L3AmZ3Q7CiZsdDt0eHA6ZWxzZSAvJmd0OwogICAmbHQ7dHhw OnNtZF9pZl9hY2Nlc3NfZXJyb3IKICAgICB0eXBlPSZxdW90O3NtZF9ha2V5X2Vycl9mb3Ji aWRkZW4mcXVvdDsmZ3Q7CiAgICAgICZsdDtwJmd0O0JlZm9yZSB5b3UgY2FuIGRvd25sb2Fk IHRoaXMgaXRlbSwgeW91JiMzOTtsbCBuZWVkCiAgICAgYW4gYWNjZXNzIGtleS4KICAgICAm bHQ7YSBocmVmPSZxdW90OyZsdDt0eHA6c21kX2FjY2Vzc19rZXkgbWF4PSZxdW90OzQmcXVv dDsKICAgICAgICB0cmlnZ2VyPSZxdW90O2xlYWZsZXRzJnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0 O0hlcmUmIzM5O3Mgb25lJmx0Oy9hJmd0OyZsdDsvcCZndDsKICAgJmx0O3R4cDplbHNlIC8m Z3Q7CiAgICAgICZsdDt0eHA6c21kX2FjY2Vzc19lcnJvciBpdGVtPSZxdW90O2NvZGUsIG1l c3NhZ2UmcXVvdDsKICAgICAgICAgIGJyZWFrPSZxdW90O2JyJnF1b3Q7IC8mZ3Q7CiAgICZs dDsvdHhwOnNtZF9pZl9hY2Nlc3NfZXJyb3ImZ3Q7CiZsdDsvdHhwOnNtZF9hY2Nlc3NfcHJv dGVjdCZndDs8L2NvZGU+PC9wcmU+Cgo8aDIgaWQ9InNtZF9ha2V5X2VnMiI+RXhhbXBsZSAy OiBQcm90ZWN0IG11bHRpcGxlIHJlc291cmNlcyB3aXRoIG9uZSB0YWc8L2gyPgoKPHByZT48 Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfcHJvdGVjdAogICAgIHRyaWdnZXI9JnF1b3Q7bGVh ZmxldCwgYm9vayZxdW90OyBleHBpcmVzPSZxdW90Ozg2NDAwJnF1b3Q7Jmd0OwogICAmbHQ7 cCZndDtZb3VyICZsdDt0eHA6c21kX2FjY2Vzc19pbmZvIGl0ZW09JnF1b3Q7dHJpZ2dlciZx dW90OyAvJmd0OwogICAgICAgICAgY29udGVudHMgZ29lcyBoZXJlJmx0Oy9wJmd0OwombHQ7 dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4cDpzbWRfaWZfYWNjZXNzX2Vycm9yJmd0OwogICAg ICAmbHQ7dHhwOnNtZF9hY2Nlc3NfZXJyb3IgaXRlbT0mcXVvdDtjb2RlLCBtZXNzYWdlJnF1 b3Q7CiAgICAgICAgICBicmVhaz0mcXVvdDticiZxdW90OyAvJmd0OwogICAmbHQ7L3R4cDpz bWRfaWZfYWNjZXNzX2Vycm9yJmd0OwombHQ7L3R4cDpzbWRfYWNjZXNzX3Byb3RlY3QmZ3Q7 PC9jb2RlPjwvcHJlPgoKPHA+WW91IGNhbiB1c2Ugc21kX2lmLCBvciBhc3NpZ24gdGhlIG91 dHB1dCBvZiA8Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfaW5mbyZndDs8L2NvZGU+IHRvIGEg PGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSZndDs8L2NvZGU+IGFuZCB1c2UgPGNvZGU+Jmx0O3R4 cDppZl92YXJpYWJsZSZndDs8L2NvZGU+LCB0byBwZXJmb3JtIGNvbmRpdGlvbmFsIGRpc3Bs YXkgb2YgYWNjZXNzIGtleSBpbmZvcm1hdGlvbi48L3A+Cgo8aDIgaWQ9InNtZF9ha2V5X2Vn MyI+RXhhbXBsZSAzOiBJc3N1ZSBhIHJlZ2lzdHJhdGlvbiBhY3RpdmF0aW9uIGNvZGU8L2gy PgoKPHA+SW4geW91ciByZWdpc3RyYXRpb24gZS1tYWlsIGZvcm0sIHlvdSBjb3VsZCBwdXQg c29tZXRoaW5nIGxpa2UgdGhpczo8L3A+Cgo8cHJlPjxjb2RlPlRoYW5rIHlvdSBmb3IgcmVn aXN0ZXJpbmcgd2l0aCAmbHQ7dHhwOnNpdGVfbmFtZSAvJmd0Oy4KVG8gYWN0aXZhdGUgeW91 ciBhY2NvdW50LCBwbGVhc2UgdmlzaXQgdGhlIGZvbGxvd2luZwpsaW5rIHdpdGhpbiB0aGUg bmV4dCAyNCBob3VyczoKJmx0O3R4cDpzbWRfYWNjZXNzX2tleSB1cmw9JnF1b3Q7L2FjY291 bnQvYWN0aXZhdGUvJnF1b3Q7IG1heD0mcXVvdDsxJnF1b3Q7CiAgICAgdHJpZ2dlcj0mIzM5 O3VzZXJfaWQuJmx0O3R4cDphdXRob3IgdGl0bGU9JnF1b3Q7MCZxdW90OyAvJmd0OyYjMzk7 IC8mZ3Q7PC9jb2RlPjwvcHJlPgoKPHA+T25jZSB0aGUgdmlzaXRvciBoYXMgc2lnbmVkIHVw IHRoZXkgYXJlIGUtbWFpbGVkIGEgdW5pcXVlIGFjY2VzcyB0b2tlbiB0byB0aGUgPGNvZGU+ L2FjY291bnQvYWN0aXZhdGU8L2NvZGU+IHBhZ2UuIFlvdSBjYW4gcHJvdGVjdCBpdCBsaWtl IHRoaXM6PC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfcHJvdGVjdCB0cmln Z2VyPSZxdW90O3VzZXJfaWQuJnF1b3Q7CiAgICAgdHJpZ2dlcl9tb2RlPSZxdW90O2JlZ2lu cyZxdW90OyBleHBpcmVzPSZxdW90Ozg2NDAwJnF1b3Q7IGZvcmNlPSZxdW90OzEmcXVvdDsm Z3Q7CiAgICZsdDt0eHA6aGlkZSZndDsgQWN0aXZhdGlvbiBhY3Rpb25zIGNvdWxkIGdvIGhl cmUgJmx0Oy90eHA6aGlkZSZndDsKICAgJmx0O3AmZ3Q7Q29uZ3JhdHVsYXRpb25zLCB5b3Vy IGFjY291bnQgaXMgYWN0aXZhdGVkLiZsdDsvcCZndDsKJmx0O3R4cDplbHNlIC8mZ3Q7CiAg ICZsdDt0eHA6c21kX2FjY2Vzc19lcnJvciAvJmd0OwombHQ7L3R4cDpzbWRfYWNjZXNzX3By b3RlY3QmZ3Q7PC9jb2RlPjwvcHJlPgoKPHA+SWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgZW1w bG95IDxjb2RlPnN0cl9yZXBsYWNlKCk8L2NvZGU+IChvciA8Y29kZT4mbHQ7dHhwOnJhaF9y ZXBsYWNlIC8mZ3Q7PC9jb2RlPikgdG8gcmVtb3ZlIHRoZSA8Y29kZT51c2VyX2lkLjwvY29k ZT4gYW5kIGJlIGxlZnQgd2l0aCB0aGUgdXNlciBuYW1lIG9mIHRoZSByZWdpc3RlcmVkIHVz ZXIgbmFtZSwgc3VpdGFibGUgZm9yIGRpc3BsYXkuIEFsdGVybmF0aXZlbHkgJiM4MjEyOyBh bmQgcGVyaGFwcyBlYXNpZXIgJiM4MjEyOyB5b3UgY291bGQgcGFzcyB0aGUgYXV0aG9yIGFz IGFuIDxjb2RlPmV4dHJhPC9jb2RlPiBwYXJhbWV0ZXIgd2hlbiB0aGUga2V5IGlzIGdlbmVy YXRlZDo8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19rZXkgdXJsPSZxdW90 Oy9hY2NvdW50L2FjdGl2YXRlLyZxdW90OyBtYXg9JnF1b3Q7MSZxdW90OwogICAgIHRyaWdn ZXI9JnF1b3Q7dXNlcl9pZCZxdW90OyBleHRyYT0mIzM5OyZsdDt0eHA6YXV0aG9yIHRpdGxl PSZxdW90OzAmcXVvdDsgLyZndDsmIzM5OyAvJmd0OzwvY29kZT48L3ByZT4KCjxwPlRoaXMg YWxsb3dzIHlvdSB0byB1c2UgdGhlIGRlZmF1bHQgPGNvZGU+dHJpZ2dlcl9tb2RlPC9jb2Rl PiBhbmQgaGFzIHRoZSBiZW5lZml0IHRoYXQgeW91IGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhl IGFkZGl0aW9uYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gdXNpbmcgPGNvZGU+Jmx0O3R4cDpz bWRfYWNjZXNzX2luZm8gaXRlbT0mcXVvdDtleHRyYV8xJnF1b3Q7IC8mZ3Q7PC9jb2RlPi48 L3A+Cgo8cD5UaGUgPGNvZGU+ZXh0cmE8L2NvZGU+IGF0dHJpYnV0ZSBpcyBldmVuIG1vcmUg cG93ZXJmdWwgaWYgeW91IHBhY2sgbW9yZSBpbmZvcm1hdGlvbiBpbnRvIGl0OiA8Y29kZT5l eHRyYT0mIzM5OyZsdDt0eHA6YXV0aG9yIHRpdGxlPSZxdW90OzAmcXVvdDsgLyZndDsvJmx0 O3R4cDpzZWN0aW9uIC8mZ3Q7JiMzOTs8L2NvZGU+LiBZb3UgY2FuIHJldHJpZXZlIGVhY2gg cGllY2UgaW5kaXZpZHVhbGx5OjwvcD4KCjx1bD4KCTxsaT48Y29kZT4mbHQ7dHhwOnNtZF9h Y2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhJnF1b3Q7IC8mZ3Q7PC9jb2RlPiA9Jmd0OyA8 Y29kZT5zZGF3c29uL2FjY291bnQ8L2NvZGU+PC9saT4KCTxsaT48Y29kZT4mbHQ7dHhwOnNt ZF9hY2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhXzEmcXVvdDsgLyZndDs8L2NvZGU+ID0m Z3Q7IDxjb2RlPnNkYXdzb248L2NvZGU+PC9saT4KCTxsaT48Y29kZT4mbHQ7dHhwOnNtZF9h Y2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhXzImcXVvdDsgLyZndDs8L2NvZGU+ID0mZ3Q7 IDxjb2RlPmFjY291bnQ8L2NvZGU+PC9saT4KPC91bD4KCjxwPk5vdGUgdGhhdCB5b3UgY2Fu IG9ubHkgZXh0cmFjdCBlYWNoIHBpZWNlIGluZGl2aWR1YWxseSBpZiB5b3UgdXNlIGEgc2xh c2ggYXMgYSBzZXBhcmF0b3IgaW4geW91ciA8Y29kZT5leHRyYTwvY29kZT4gYXR0cmlidXRl LjwvcD4KCjxoMiBpZD0ic21kX2FrZXlfZWc0Ij5FeGFtcGxlIDQ6IFVzZSB0aGUgc2FtZSBr ZXk8L2gyPgoKPHA+WW91IHdpbGwgb2Z0ZW4gdXNlIHNtZF9hY2Nlc3Nfa2V5IGluIHJlc3Bv bnNlIHRvIGEgdXNlciBhY3Rpb24sIHN1Y2ggYXMgcGF5aW5nIGZvciBhY2Nlc3MgdG8gYSBy ZXNvdXJjZS4gSW4gdGhpcyBzaXR1YXRpb24sIHlvdSB3b3VsZCBub3JtYWxseSBlbWFpbCBh biBhY2Nlc3Mga2V5IHVwb24gc3VjY2Vzc2Z1bCBwYXltZW50LiBCdXQgc29tZXRpbWVzIHlv dSBtYXkgd2lzaCB0byByZXR1cm4gY29udHJvbCB0byB5b3VyIHdlYnNpdGUgYW5kIHNob3cg dGhlIGFjY2VzcyBrZXkgb24tc2NyZWVuIHNvIHRoZXJlIGlzIG5vIHBlcm1hbmVudCByZWNv cmQgb2YgaXQuPC9wPgoKPHA+VGhlIHRyb3VibGUgd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRo YXQgaWYgdGhlIHBlcnNvbiByZWZyZXNoZXMgdGhlIHNjcmVlbiwgdGhleSB3aWxsIGdldCBh IGRpZmZlcmVudCBhY2Nlc3Mga2V5IHRvIHRoZSBzYW1lIHJlc291cmNlLCB0aGVyZWJ5IGVm ZmVjdGl2ZWx5IGhhdmluZyB0aGUgYWJpbGl0eSB0byBnZW5lcmF0ZSB1bmxpbWl0ZWQga2V5 cy4gVGhpcyBpcyB1bmRlc2lyYWJsZS48L3A+Cgo8cD5Gcm9tIHYwLjIwIG9ud2FyZHMsIHlv dSBtYXkgbm93IHNwZWNpZnkgeW91ciBvd24gc2FsdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8g Y3JlYXRlIGEgc3RhdGljIGtleS4gQnV0IGl0IGNvbWVzIHdpdGggc29tZSBpbXBvcnRhbnQg c2VjdXJpdHkgY29uc2lkZXJhdGlvbnM6PC9wPgoKPHVsPgoJPGxpPllvdXIgc2FsdCBpcyBp bmNsdWRlZCBpbiB0aGUgYWNjZXNzIGtleSBpdHNlbGYgYW5kIGlzIHRodXMgcGxhaW5seSB2 aXNpYmxlLiBUaGlzIGlzIG5vdCBub3JtYWxseSBhIHNlY3VyaXR5IGNvbmNlcm4gYmVjYXVz ZSB0aGUgc2VjcmV0IGtleSBwcm90ZWN0cyB0aGUgdG9rZW4sIGJ1dCB0byBtYWtlIGEgZml4 ZWQga2V5IHlvdSBuZWVkIGEgc3RhdGljIHNlY3JldCBrZXkgdG9vLjwvbGk+Cgk8bGk+QSBz dGF0aWMgc2VjcmV0IGtleSA8c3Ryb25nPm11c3Q8L3N0cm9uZz4gc3RpbGwgYmUgdW5pcXVl IHRvIHRoZSB0cmFuc2FjdGlvbi4gTmV2ZXIgc2hhcmUgYSBzZWNyZXQga2V5IGJldHdlZW4g dHJhbnNhY3Rpb25zIG9yIHVzZXJzIG9yIGNvbm5lY3Rpb25zLjwvbGk+Cgk8bGk+WW91IHdp bGwgYWxzbyBuZWVkIHRvIHVzZSBhIHN0YXRpYyA8Y29kZT5zdGFydDwvY29kZT4gZGF0ZSBh bmQgdGltZS4gSW4gdGhpcyBzaXR1YXRpb24sIGEgZ29vZCB2YWx1ZSB0byB1c2Ugd291bGQg YmUgdGhlIG9yZGVyIHRpbWUuPC9saT4KPC91bD4KCjxwPlRvIHVuZGVyc3RhbmQgdGhpcyBm dWxseSwgaXQmIzgyMTc7cyBpbXBvcnRhbnQgdG8gZ3Jhc3AgaG93IGFuIGFjY2VzcyB0b2tl biBpcyBnZW5lcmF0ZWQuIEl0IGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOjwvcD4KCjx1bD4K CTxsaT5BIHNlY3JldCBrZXkgKHJhbmRvbSBzdHJpbmcgb2YgaGV4IGRpZ2l0cyksIHdoaWNo IGlzIHVzdWFsbHkgZ2VuZXJhdGVkIGF0IHJ1bnRpbWUgYW5kIGlzIHVuaXF1ZS48L2xpPgoJ PGxpPkEgc2FsdCAocmFuZG9tIHN0cmluZyBvZiBoZXggZGlnaXRzKSwgYWdhaW4sIHVuaXF1 ZWx5IGdlbmVyYXRlZCBhdCBydW50aW1lLjwvbGk+Cgk8bGk+QSB0aW1lc3RhbXAgKDxzcGFu IGNsYXNzPSJjYXBzIj5ZWVlZPC9zcGFuPi1NTS1ERCBISDptbTpzcykgd2hpY2ggZGVmYXVs dHMgdG8gJiM4MjE2O25vdyYjODIxNzssIGkuZS4gdGhlIHZlcnkgaW5zdGFudCB0aGUgPGNv ZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX2tleSAvJmd0OzwvY29kZT4gdGFnIGlzIHJlbmRlcmVk LjwvbGk+CjwvdWw+Cgo8cD5Bc3N1bWluZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gb2YgdGhlIHJlc291cmNlIGRvZXNuJiM4MjE3O3QgY2hhbmdlLCBpZiBhbGwgdGhy ZWUgb2YgdGhlIGFib3ZlIGNvbXBvbmVudHMgYXJlIGlkZW50aWNhbCBvbiBlYWNoIHBhZ2Ug cmVxdWVzdCwgdGhlIHNhbWUga2V5IHdpbGwgYmUgZ2VuZXJhdGVkLiBBcyB0aGlzIGlzIG91 ciBnb2FsLCBoZXJlLCBsZXQmIzgyMTc7cyBkZXNpZ24gYSBzeXN0ZW0gdG8gZG8gdGhhdDo8 L3A+Cgo8dWw+Cgk8bGk+U2VjcmV0IGtleTogYSBoYXNoIG9mIHRoZSBidXllciYjODIxNztz IHVzZXJuYW1lIGFuZCB0aGUgdHJhbnNhY3Rpb24gSUQsIHBsdXMgYSBmaXhlZCBzZWNyZXQg c3RyaW5nIG9mIHlvdXIgb3duIGNob29zaW5nLjwvbGk+Cgk8bGk+U2FsdDogYSBoYXNoIG9m IHRoZSBidXllciYjODIxNztzIGVtYWlsIGFkZHJlc3MuIFRoZSBsZW5ndGggb2YgdGhpcyBt dXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgaW4gdGhlIDxpPlNh bHQgbGVuZ3RoPC9pPiBwcmVmZXJlbmNlLCBvdGhlcndpc2UgdGhlIHRva2VuIHdpbGwgbm90 IG1hdGNoLjwvbGk+Cgk8bGk+VGltZXN0YW1wOiB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rp b24uPC9saT4KPC91bD4KCjxwPlNvLCBmb3IgYW55IGdpdmVuIHRyYW5zYWN0aW9uLCB0aGUg YWJvdmUgdGhyZWUgaXRlbXMgZG8gbm90IHZhcnkgYW5kIHdpbGwgdGhlcmVmb3JlIGdlbmVy YXRlIHRoZSBzYW1lIGtleS4gQnV0IGEgdHJhbnNhY3Rpb24gdGhhdCBvY2N1cnMgZnJvbSBz b21lb25lIGVsc2UsIGV2ZW4gaWYgaXQmIzgyMTc7cyBhdCB0aGUgZXhhY3Qgc2FtZSBtb21l bnQsIHdpbGwgcHJvZHVjZSBhbiBlbnRpcmVseSBkaWZmZXJlbnQsIHlldCBpbnZhcmlhbnQs IGtleS48L3A+Cgo8cD5TbyBoZXJlJiM4MjE3O3Mgc29tZSBub3QtdmVyeS1zdXBlci1zZWN1 cmUgZXhhbXBsZSBjb2RlLCBhc3N1bWluZyB0aGF0IHlvdSBoYXZlIHRoZSBvcmRlciBpbmZv cm1hdGlvbiBwb3B1bGF0ZWQgaW4gc29tZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiB2YXJpYWJsZXMuIFlvdSBwcm9iYWJseSB3b3VsZG4mIzgyMTc7dCB1c2UgPGNvZGU+bWQ1 KCk8L2NvZGU+IGhlcmUsIGJ1dCBzb21ldGhpbmcgYWx0b2dldGhlciBtb3JlIGNyeXB0b2dy YXBoaWNhbGx5IHNlY3VyZTo8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6dmFyaWFibGUgbmFt ZT0mcXVvdDtzZWNyZXRLZXkmcXVvdDsmZ3Q7Jmx0O3R4cDpwaHAmZ3Q7ZWNobyBtZDUoJHVz ZXJuYW1lIC4gJHR4bklkIC4gJnF1b3Q7SSYjMzk7bUFCYWRTZWNyZXRLZXkmcXVvdDspOyZs dDsvdHhwOnBocCZndDsmbHQ7L3R4cDp2YXJpYWJsZSZndDsKJmx0O3R4cDp2YXJpYWJsZSBu YW1lPSZxdW90O3NhbHQmcXVvdDsmZ3Q7Jmx0O3R4cDpwaHAmZ3Q7ZWNobyBtZDUoJGVtYWls KTsmbHQ7L3R4cDpwaHAmZ3Q7Jmx0Oy90eHA6dmFyaWFibGUmZ3Q7CiZsdDt0eHA6dmFyaWFi bGUgbmFtZT0mcXVvdDt0aW1lc3RhbXAmcXVvdDsmZ3Q7Jmx0O3R4cDpwaHAmZ3Q7ZWNobyAk b3JkZXJUaW1lOyZsdDsvdHhwOnBocCZndDsmbHQ7L3R4cDp2YXJpYWJsZSZndDsKCiZsdDt0 eHA6c21kX2FjY2Vzc19rZXkKICAgdXJsPSYjMzk7Jmx0O3R4cDpzaXRlX3VybCAvJmd0OyZs dDt0eHA6c2VjdGlvbiAvJmd0OyYjMzk7CiAgIHRyaWdnZXI9JnF1b3Q7bXktdHJpZ2dlciZx dW90OwogICBzZWNyZXQ9JiMzOTsmbHQ7dHhwOnZhcmlhYmxlIG5hbWU9JnF1b3Q7c2VjcmV0 S2V5JnF1b3Q7IC8mZ3Q7JiMzOTsKICAgc3RyZW5ndGg9JiMzOTsmbHQ7dHhwOnZhcmlhYmxl IG5hbWU9JnF1b3Q7c2FsdCZxdW90OyAvJmd0OyYjMzk7CiAgIHN0YXJ0PSYjMzk7Jmx0O3R4 cDp2YXJpYWJsZSBuYW1lPSZxdW90O3RpbWVzdGFtcCZxdW90OyAvJmd0OyYjMzk7CiAgIC8m Z3Q7PC9jb2RlPjwvcHJlPgoKPHA+VGEgZGEhPC9wPgoKPGgyPkF1dGhvcjwvaDI+Cgo8cD5X cml0dGVuIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVm IERhd3NvbjwvYT4uPC9wPiI7czozOiJtZDUiO3M6MzI6ImZkZTVjZWZjMGQxZmJjNmQ3Zjli OTI2Y2Q5YWI5ZDQ1IjtzOjg6InRleHRwYWNrIjtzOjMwOTg6IiNAc21kX2FrZXkKI0BsYW5n dWFnZSBlbgpzbWRfYWtleSA9PiBBY2Nlc3Mga2V5cwpzbWRfYWtleV9hY2Nlc3NlcyA9PiBB Y2Nlc3MgYXR0ZW1wdHMKc21kX2FrZXlfYnRuX25ldyA9PiBOZXcga2V5CnNtZF9ha2V5X2J0 bl9wcmVmID0+IFByZWZzCnNtZF9ha2V5X2RlbGV0ZWQgPT4gS2V5cyBkZWxldGVkOiB7ZGVs ZXRlZH0Kc21kX2FrZXlfZXJyX2JhZF90b2tlbiA9PiBNaXNzaW5nIG9yIG1hbmdsZWQgYWNj ZXNzIGtleQpzbWRfYWtleV9lcnJfZXhwaXJlZCA9PiBBY2Nlc3MgZXhwaXJlZApzbWRfYWtl eV9lcnJfZm9yYmlkZGVuID0+IEZvcmJpZGRlbiBhY2Nlc3MKc21kX2FrZXlfZXJyX2ludmFs aWRfdG9rZW4gPT4gSW52YWxpZCBhY2Nlc3Mga2V5CnNtZF9ha2V5X2Vycl9saW1pdCA9PiBB Y2Nlc3MgbGltaXQgcmVhY2hlZApzbWRfYWtleV9lcnJfbWlzc2luZ190aW1lc3RhbXAgPT4g TWlzc2luZyB0aW1lc3RhbXAKc21kX2FrZXlfZXJyX3VuYXV0aG9yaXplZCA9PiBVbmF1dGhv cml6ZWQgYWNjZXNzCnNtZF9ha2V5X2Vycl91bmF2YWlsYWJsZSA9PiBOb3QgYXZhaWxhYmxl CnNtZF9ha2V5X2ZpbGVfZG93bmxvYWRfZXhwaXJlcyA9PiBGaWxlIGRvd25sb2FkIGV4cGly eSB0aW1lIChzZWNvbmRzKQpzbWRfYWtleV9nZW5lcmF0ZWQgPT4gQWNjZXNzIGtleToge2tl eX0Kc21kX2FrZXlfbG9nX2lwID0+IExvZyBJUCBhZGRyZXNzZXMKc21kX2FrZXlfbWF4ID0+ IE1heGltdW0Kc21kX2FrZXlfbmVlZF9wYWdlID0+IFlvdSBuZWVkIHRvIGVudGVyIGEgcGFn ZSBVUkwKc21kX2FrZXlfcGFnZSA9PiBQYWdlCnNtZF9ha2V5X3ByZWZzX3NhdmVkID0+IFBy ZWZlcmVuY2VzIHNhdmVkCnNtZF9ha2V5X3ByZWZzX3NvbWVfZXhwbGFpbiA9PiBUaGlzIGlz IGVpdGhlciBhIG5ldyBpbnN0YWxsYXRpb24gb3IgYSBkaWZmZXJlbnQgdmVyc2lvbjxiciAv Pm9mIHRoZSBwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlLgpzbWRfYWtleV9wcmVmc19z b21lX29wdHMgPT4gQ2xpY2sgIkluc3RhbGwgdGFibGUiIHRvIGFkZCBvciB1cGRhdGUgdGhl IHRhYmxlPGJyIC8+bGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuCnNtZF9h a2V5X3ByZWZzX3NvbWVfdGJsID0+IE5vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuCnNt ZF9ha2V5X3ByZWZfbGVnZW5kID0+IEFjY2VzcyBrZXkgcHJlZmVyZW5jZXMKc21kX2FrZXlf c2FsdF9sZW5ndGggPT4gU2FsdCBsZW5ndGggKGNoYXJhY3RlcnMpCnNtZF9ha2V5X3RhYl9u YW1lID0+IEFjY2VzcyBrZXlzCnNtZF9ha2V5X3RibF9pbnN0YWxsZWQgPT4gVGFibGUgaW5z dGFsbGVkCnNtZF9ha2V5X3RibF9pbnN0YWxsX2xibCA9PiBJbnN0YWxsIHRhYmxlCnNtZF9h a2V5X3RibF9ub3RfaW5zdGFsbGVkID0+IFRhYmxlIG5vdCBpbnN0YWxsZWQKc21kX2FrZXlf dGJsX25vdF9yZW1vdmVkID0+IFRhYmxlIG5vdCByZW1vdmVkCnNtZF9ha2V5X3RibF9yZW1v dmVkID0+IFRhYmxlIHJlbW92ZWQKc21kX2FrZXlfdGltZSA9PiBJc3N1ZWQKc21kX2FrZXlf dHJpZ2dlciA9PiBUcmlnZ2VyCiNAc21kX2FrZXkKI0BsYW5ndWFnZSBlbi1nYgpzbWRfYWtl eSA9PiBBY2Nlc3Mga2V5cwpzbWRfYWtleV9hY2Nlc3NlcyA9PiBBY2Nlc3MgYXR0ZW1wdHMK c21kX2FrZXlfYnRuX25ldyA9PiBOZXcga2V5CnNtZF9ha2V5X2J0bl9wcmVmID0+IFByZWZz CnNtZF9ha2V5X2RlbGV0ZWQgPT4gS2V5cyBkZWxldGVkOiB7ZGVsZXRlZH0Kc21kX2FrZXlf ZXJyX2JhZF90b2tlbiA9PiBNaXNzaW5nIG9yIG1hbmdsZWQgYWNjZXNzIGtleQpzbWRfYWtl eV9lcnJfZXhwaXJlZCA9PiBBY2Nlc3MgZXhwaXJlZApzbWRfYWtleV9lcnJfZm9yYmlkZGVu ID0+IEZvcmJpZGRlbiBhY2Nlc3MKc21kX2FrZXlfZXJyX2ludmFsaWRfdG9rZW4gPT4gSW52 YWxpZCBhY2Nlc3Mga2V5CnNtZF9ha2V5X2Vycl9saW1pdCA9PiBBY2Nlc3MgbGltaXQgcmVh Y2hlZApzbWRfYWtleV9lcnJfbWlzc2luZ190aW1lc3RhbXAgPT4gTWlzc2luZyB0aW1lc3Rh bXAKc21kX2FrZXlfZXJyX3VuYXV0aG9yaXplZCA9PiBVbmF1dGhvcml6ZWQgYWNjZXNzCnNt ZF9ha2V5X2Vycl91bmF2YWlsYWJsZSA9PiBOb3QgYXZhaWxhYmxlCnNtZF9ha2V5X2ZpbGVf ZG93bmxvYWRfZXhwaXJlcyA9PiBGaWxlIGRvd25sb2FkIGV4cGlyeSB0aW1lIChzZWNvbmRz KQpzbWRfYWtleV9nZW5lcmF0ZWQgPT4gQWNjZXNzIGtleToge2tleX0Kc21kX2FrZXlfbG9n X2lwID0+IExvZyBJUCBhZGRyZXNzZXMKc21kX2FrZXlfbWF4ID0+IE1heGltdW0Kc21kX2Fr ZXlfbmVlZF9wYWdlID0+IFlvdSBuZWVkIHRvIGVudGVyIGEgcGFnZSBVUkwKc21kX2FrZXlf cGFnZSA9PiBQYWdlCnNtZF9ha2V5X3ByZWZzX3NhdmVkID0+IFByZWZlcmVuY2VzIHNhdmVk CnNtZF9ha2V5X3ByZWZzX3NvbWVfZXhwbGFpbiA9PiBUaGlzIGlzIGVpdGhlciBhIG5ldyBp bnN0YWxsYXRpb24gb3IgYSBkaWZmZXJlbnQgdmVyc2lvbjxiciAvPm9mIHRoZSBwbHVnaW4g dG8gb25lIHlvdSBoYWQgYmVmb3JlLgpzbWRfYWtleV9wcmVmc19zb21lX29wdHMgPT4gQ2xp Y2sgIkluc3RhbGwgdGFibGUiIHRvIGFkZCBvciB1cGRhdGUgdGhlIHRhYmxlPGJyIC8+bGVh dmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuCnNtZF9ha2V5X3ByZWZzX3NvbWVf dGJsID0+IE5vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuCnNtZF9ha2V5X3ByZWZfbGVn ZW5kID0+IEFjY2VzcyBrZXkgcHJlZmVyZW5jZXMKc21kX2FrZXlfc2FsdF9sZW5ndGggPT4g U2FsdCBsZW5ndGggKGNoYXJhY3RlcnMpCnNtZF9ha2V5X3RhYl9uYW1lID0+IEFjY2VzcyBr ZXlzCnNtZF9ha2V5X3RibF9pbnN0YWxsZWQgPT4gVGFibGUgaW5zdGFsbGVkCnNtZF9ha2V5 X3RibF9pbnN0YWxsX2xibCA9PiBJbnN0YWxsIHRhYmxlCnNtZF9ha2V5X3RibF9ub3RfaW5z dGFsbGVkID0+IFRhYmxlIG5vdCBpbnN0YWxsZWQKc21kX2FrZXlfdGJsX25vdF9yZW1vdmVk ID0+IFRhYmxlIG5vdCByZW1vdmVkCnNtZF9ha2V5X3RibF9yZW1vdmVkID0+IFRhYmxlIHJl bW92ZWQKc21kX2FrZXlfdGltZSA9PiBJc3N1ZWQKc21kX2FrZXlfdHJpZ2dlciA9PiBUcmln Z2VyIjt9