# Name: smd_wrap v0.10 # Type: Public side plugin # Conditionally transform and wrap stuff with tags and labels # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6InNtZF93cmFwIjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEwIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1OToi Q29uZGl0aW9uYWxseSB0cmFuc2Zvcm0gYW5kIHdyYXAgc3R1ZmYgd2l0aCB0YWdzIGFuZCBs YWJlbHMiO3M6NDoiY29kZSI7czo5NDI2OiIvKioNCiAqIHNtZF93cmFwDQogKg0KICogQSBU ZXh0cGF0dGVybiBDTVMgcGx1Z2luIGZvciB3cmFwcGluZyBjb250ZW50IHdpdGggSFRNTCB0 YWdzLCBsYWJlbHMgYW5kIGF0dHJpYnV0ZXMuDQogKiAgLT4gQWRkcyB3cmFwdGFnIC8gY2xh c3MgLyBodG1sX2lkIC8gbGFiZWwgc3VwcG9ydCByb3VuZCBhbnkgdGFnDQogKiAgLT4gUGVy bWl0cyBhIHJhbmdlIG9mIGZvcm1hdHRpbmcgb3B0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHRo ZSBpdGVtDQogKiAgICAgKGUuZy4gdHJpbSwgZXNjYXBlLCBzYW5pdGl6ZSwgY2hhbmdlIGNh c2UsIGxpbmtpZnksIGZvcm1hdCBkYXRlLA0KICogICAgIHN0cmlwIHRhZ3MsIHNwbGl0IC8g Y29tYmluZSwgcHJvY2VzcyB3aXRoIHRleHRpbGUsIGV0YykuDQogKiAgLT4gSWYgdGhlIGNv bnRlbnQgaXMgZW1wdHksIG5vdGhpbmcgaXMgZGlzcGxheWVkLg0KICogIC0+IFN1cHBvcnRz IDx0eHA6ZWxzZSAvPg0KICoNCiAqIEBhdXRob3IgU3RlZiBEYXdzb24NCiAqIEBsaW5rICAg aHR0cDovL3N0ZWZkYXdzb24uY29tLw0KICovDQoNCi8vIFRPRE86DQovLyAqIEFsbG93IGhp ZGRlbiBwcmVmIHRvIGRldGVybWluZSBkZWZhdWx0IHRyYW5zZm9ybXM/DQoNCmZ1bmN0aW9u IHNtZF93cmFwKCRhdHRzLCAkdGhpbmc9TlVMTCkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgll eHRyYWN0KGxBdHRzKGFycmF5KA0KCQknaXRlbScgICAgICAgID0+ICcnLA0KCQknd3JhcHRh ZycgICAgID0+ICcnLA0KCQknY2xhc3MnICAgICAgID0+ICcnLA0KCQknaHRtbF9pZCcgICAg ID0+ICcnLA0KCQknbGFiZWwnICAgICAgID0+ICcnLA0KCQknbGFiZWx0YWcnICAgID0+ICcn LA0KCQknYXR0cicgICAgICAgID0+ICcnLA0KCQkncHJlZml4JyAgICAgID0+ICcnLA0KCQkn c3VmZml4JyAgICAgID0+ICcnLA0KCQknZm9ybWF0JyAgICAgID0+ICcnLCAvLyBjb252ZW5p ZW5jZSBvbmx5OiBzYW1lIGFzIHRyYW5zZm9ybQ0KCQkndHJhbnNmb3JtJyAgID0+ICcnLA0K CQknZGVsaW0nICAgICAgID0+ICcsJywNCgkJJ3BhcmFtX2RlbGltJyA9PiAnfCcsDQoJCSd0 cmltJyAgICAgICAgPT4gMSwNCgkJJ2RlYnVnJyAgICAgICA9PiAwLA0KCSksJGF0dHMpKTsN Cg0KCS8vIGl0ZW0gYXR0cmlidXRlIHRydW1wcyBjb250YWluZXINCgkkdGhpbmcgPSAoJGl0 ZW0pID8gJGl0ZW0gOiAkdGhpbmc7DQoJJG91dCA9ICcnOw0KDQoJaWYgKCRmb3JtYXQpIHsN CgkJdHJpZ2dlcl9lcnJvcigic21kX3dyYXA6IGZvcm1hdCBhdHRyaWJ1dGUgZGVwcmVjYXRl ZDogdXNlIHRyYW5zZm9ybSBhdHRyaWJ1dGUgaW5zdGVhZC4iLCBFX1VTRVJfTk9USUNFKTsN CgkJJHRyYW5zZm9ybSA9ICRmb3JtYXQ7DQoJfQ0KDQoJLy8gR3JhYiB0aGUgdHJ1ZSBwb3J0 aW9uIG9mIGFueSBjb250YWluZXINCgkkdHJ1ZVBhcnQgPSBFdmFsRWxzZSgkdGhpbmcsIDEp Ow0KDQoJaWYgKCRkZWJ1Zykgew0KCQllY2hvICcrKyBUTyBXUkFQICsrJzsNCgkJZG1wKCRp dGVtKTsNCgl9DQoNCglpZiAoJHRoaW5nKSB7DQoJCS8vIEhhbmRsZSBjdXN0b20gYXR0cmli dXRlcw0KCQlpZiAoJGF0dHIpIHsNCgkJCSRjdXN0b21fYXR0cyA9IGFycmF5KCk7DQoJCQkk YXR0cmlicyA9IGRvX2xpc3QoJGF0dHIpOw0KCQkJZm9yZWFjaCgkYXR0cmlicyBhcyAkYXR0 ZGVmKSB7DQoJCQkJbGlzdCgka2V5LCAkdmFsKSA9IGRvX2xpc3QoJGF0dGRlZiwgJHBhcmFt X2RlbGltKTsNCgkJCQkkY3VzdG9tX2F0dHNbXSA9ICRrZXkgLiAnPSInIC4gJHZhbCAuICci JzsNCgkJCX0NCgkJCSRhdHRyID0gJyAnIC4gam9pbignICcsICRjdXN0b21fYXR0cyk7DQoJ CX0NCg0KCQkvLyBSdW4gdGhlIFR4cCBwYXJzZXIgZmlyc3QNCgkJJG91dCA9IHBhcnNlKCR0 cnVlUGFydCk7DQoJCSRvdXQgPSAkdHJpbSA/IHRyaW0oJG91dCkgOiAkb3V0Ow0KDQoJCWlm ICgkb3V0KSB7DQoJCQkvLyBUb3AgYW5kIHRhaWwgdGhlIG91dHB1dA0KCQkJJG91dCA9ICRw cmVmaXguJG91dC4kc3VmZml4Ow0KDQoJCQkvLyBSZWZvcm1hdCB0aGUgaXRlbSB3aXRoIGFu eSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWF0aW9ucywgaW4gdGhlIHN1cHBsaWVkIG9y ZGVyDQoJCQlpZiAoJHRyYW5zZm9ybSkgew0KCQkJCSRmb3JtYXRzID0gZG9fbGlzdCgkdHJh bnNmb3JtLCAkZGVsaW0pOw0KCQkJCWZvcmVhY2ggKCRmb3JtYXRzIGFzICR4Zm9ybWxpc3Qp IHsNCgkJCQkJLy8gVXNlIGV4cGxvZGUoKSBiZWNhdXNlIGRvX2xpc3QoKSBwZXJmb3JtcyBh IHRyaW0oKSB0aGF0IHdlIGRvbid0IHdhbnQNCgkJCQkJJHhmb3JtID0gZXhwbG9kZSgkcGFy YW1fZGVsaW0sICR4Zm9ybWxpc3QpOw0KCQkJCQkkeHR5cGUgPSBhcnJheV9zaGlmdCgkeGZv cm0pOw0KDQoJCQkJCXN3aXRjaCAoJHh0eXBlKSB7DQoJCQkJCQljYXNlICdhZGQnOg0KCQkJ CQkJCSRwb3MgPSBhcnJheV9zaGlmdCgkeGZvcm0pOw0KCQkJCQkJCSR2YWwgPSAkeGZvcm1b MF07DQoJCQkJCQkJJG91dCA9ICgoJHBvcyA9PSAnYmVmb3JlJyB8fCAkcG9zID09ICdib3Ro JykgPyAkdmFsIDogJycpIC4gJG91dCAuICgoJHBvcyA9PSAnYWZ0ZXInIHx8ICRwb3MgPT0g J2JvdGgnKSA/ICR2YWwgOiAnJyk7DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgJ2Nhc2Un Og0KCQkJCQkJCWZvcmVhY2ggKCR4Zm9ybSBhcyAkYXJnKSB7DQoJCQkJCQkJCWlmICgkYXJn ID09ICJ1cHBlciIpIHsNCgkJCQkJCQkJCSRvdXQgPSBzdHJ0b3VwcGVyKCRvdXQpOw0KCQkJ CQkJCQl9IGVsc2UgaWYgKCRhcmcgPT0gImxvd2VyIikgew0KCQkJCQkJCQkJJG91dCA9IHN0 cnRvbG93ZXIoJG91dCk7DQoJCQkJCQkJCX0gZWxzZSBpZiAoJGFyZyA9PSAidWNmaXJzdCIp IHsNCgkJCQkJCQkJCSRvdXQgPSB1Y2ZpcnN0KCRvdXQpOw0KCQkJCQkJCQl9IGVsc2UgaWYg KCRhcmcgPT0gInVjd29yZHMiKSB7DQoJCQkJCQkJCQkkb3V0ID0gdWN3b3Jkcygkb3V0KTsN CgkJCQkJCQkJfSBlbHNlIGlmICgkYXJnID09ICJ0aXRsZSIpIHsNCgkJCQkJCQkJCS8vIElu ZWxlZ2FudGx5IHBvcnRlZCArIGV4dGVuZGVkIGZvciBVbmljb2RlIGZyb20gRGF2aWQgR291 Y2gncyBKUyB0aXRsZSBjYXNlIHNjcmlwdDogdGhhbmtzDQoJCQkJCQkJCQkvLyBodHRwOi8v aW5kaXZpZGVkLmNvbS9jb2RlL3RvLXRpdGxlLWNhc2UvanMvdG8tdGl0bGUtY2FzZS5qcw0K CQkJCQkJCQkJJGhhc191bmljb2RlID0gQHByZWdfbWF0Y2goJy9ccEwvdScsICdhJyk7DQoN CgkJCQkJCQkJCSRheiA9ICgkaGFzX3VuaWNvZGUpID8gJ1xwe0x1fScgOiAnQS1aJzsNCgkJ CQkJCQkJCSR3cmQgPSAoJGhhc191bmljb2RlKSA/ICcoPzpccHtMfXxccHtNfXxccHtOfXxc cHtQY30pJyA6ICdcdyc7DQoJCQkJCQkJCQkkY2Fwc3JlID0gJy9bJyAuICRheiAuICddK3wm fFsnIC4gJHdyZCAuICddK1suX11bJyAuICR3cmQgLiAnXSsvJzsNCg0KCQkJCQkJCQkJJHNt YWxscyA9IGdldF9wcmVmKCdzbWRfd3JhcF9zbWFsbF93b3JkcycsICdhKG5kP3xzfHQpP3xi KHV0fHkpfGVufGZvcnxpW2ZuXXxvW2Zucl18dChoZXxvKXx2cz9cLj98dmlhJyk7DQoJCQkJ CQkJCQkkc21hbGxyZSA9ICcvXignIC4gJHNtYWxscyAuICcpWyBcLV0vaSc7DQoNCgkJCQkJ CQkJCSRwYXQgPSAnLyhbJyAuICR3cmQgLiAnJmBcJ+KAmOKAmSLigJwuQDpcL1x7XChcWzw+ X10rLT8gKikvJzsNCgkJCQkJCQkJCSRyZXQgPSBhcnJheSgpOw0KCQkJCQkJCQkJcHJlZ19t YXRjaF9hbGwoJHBhdCwgJG91dCwgJG1hdGNoZXMsIFBSRUdfUEFUVEVSTl9PUkRFUnxQUkVH X09GRlNFVF9DQVBUVVJFKTsNCg0KCQkJCQkJCQkJZm9yZWFjaCAoJG1hdGNoZXNbMF0gYXMg JGl0KSB7DQoJCQkJCQkJCQkJJG1hdGNoID0gJGl0WzBdOw0KCQkJCQkJCQkJCSRpbmRleCA9 ICRpdFsxXTsNCgkJCQkJCQkJCQkkaWR4bTIgPSAkaW5kZXggLSAyOw0KCQkJCQkJCQkJCSRs ZW5ndGggPSBzdHJsZW4oJG1hdGNoKTsNCgkJCQkJCQkJCQkkdGl0bGUgPSAkb3V0OyAvLyBD b3B5IHRoZSBvcmlnaW5hbCBzaW5jZSB3ZSdyZSB3b3JraW5nIG9uICRvdXQgZGlyZWN0bHkN Cg0KCQkJCQkJCQkJCS8vIEZ1ZGdlIGJlY2F1c2Ugc3Vic3RyIHdpdGggbmVnYXRpdmUgc3Rh cnQgY291bnRzIGZyb20gZW5kIG9mIHN0cmluZyBpbiBQSFANCgkJCQkJCQkJCQkkaWR4bTEg PSAoKCRpbmRleC0xKSA8IDApID8gMCA6ICRpbmRleCAtIDE7DQoJCQkJCQkJCQkJJG9mZnNl dCA9ICgoJGluZGV4LTEpIDwgMCkgPyAxIDogMjsNCg0KCQkJCQkJCQkJCWlmICgkaW5kZXgg PiAwDQoJCQkJCQkJCQkJCSYmICggJHRpdGxleyRpZHhtMn0gIT09ICI6IiApDQoJCQkJCQkJ CQkJCSYmICggcHJlZ19tYXRjaCgkc21hbGxyZSwgJG1hdGNoKSA+IDAgKQ0KCQkJCQkJCQkJ CSkgew0KCQkJCQkJCQkJCQkkb3V0ID0gc3Vic3RyKCRvdXQsIDAsICRpbmRleCkgLiBzdHJ0 b2xvd2VyKCRtYXRjaCkgLiBzdWJzdHIoJG91dCwgJGluZGV4KyRsZW5ndGgpOw0KCQkJCQkJ CQkJCQljb250aW51ZTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJaWYgKHByZWdfbWF0Y2go Jy9bXCdcIl97KFxbXS8nLCBzdWJzdHIoJHRpdGxlLCAkaWR4bTEsICRvZmZzZXQpKSA+IDAp IHsNCgkJCQkJCQkJCQkJJG91dCA9IHN1YnN0cigkb3V0LCAwLCAkaW5kZXgpIC4gJG1hdGNo ezB9IC4gQHN0cnRvdXBwZXIoJG1hdGNoezF9KSAuIHN1YnN0cigkbWF0Y2gsIDIpLiBzdWJz dHIoJG91dCwgJGluZGV4KyRsZW5ndGgpOw0KCQkJCQkJCQkJCQljb250aW51ZTsNCgkJCQkJ CQkJCQl9DQoJCQkJCQkJCQkJaWYgKA0KCQkJCQkJCQkJCQkoIHByZWdfbWF0Y2goJGNhcHNy ZSwgc3Vic3RyKCRtYXRjaCwgMSkpID4gMCApDQoJCQkJCQkJCQkJCXx8ICggcHJlZ19tYXRj aCgnL1tcXSl9XS8nLCBzdWJzdHIoJHRpdGxlLCAkaWR4bTEsICRvZmZzZXQpKSA+IDAgKQ0K CQkJCQkJCQkJCSkgew0KCQkJCQkJCQkJCQkkb3V0ID0gc3Vic3RyKCRvdXQsIDAsICRpbmRl eCkgLiAkbWF0Y2ggLiBzdWJzdHIoJG91dCwgJGluZGV4KyRsZW5ndGgpOw0KCQkJCQkJCQkJ CQljb250aW51ZTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJJG91dCA9IHN1YnN0cigkb3V0 LCAwLCAkaW5kZXgpIC4gc3RydG91cHBlcigkbWF0Y2h7MH0pIC4gc3Vic3RyKCRtYXRjaCwg MSkgLiBzdWJzdHIoJG91dCwgJGluZGV4KyRsZW5ndGgpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJ CQl9DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdkYXRlJzoNCgkJCQkJ CQkkbmQgPSAoaXNfbnVtZXJpYygkb3V0KSkgPyAkb3V0IDogc3RydG90aW1lKCRvdXQpOw0K CQkJCQkJCWlmICgkbmQgIT09IGZhbHNlKSB7DQoJCQkJCQkJCSRvdXQgPSBzdHJmdGltZSgk eGZvcm1bMF0sICRuZCk7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdl c2NhcGUnOg0KCQkJCQkJCSRmbGFncyA9IDA7DQoJCQkJCQkJZm9yZWFjaCAoJHhmb3JtIGFz ICRhcmcpIHsNCgkJCQkJCQkJc3dpdGNoICgkYXJnKSB7DQoJCQkJCQkJCQljYXNlICdub19x dW90ZXMnOg0KCQkJCQkJCQkJCSRmbGFncyB8PSBFTlRfTk9RVU9URVM7DQoJCQkJCQkJCQli cmVhazsNCgkJCQkJCQkJCWNhc2UgJ2FsbF9xdW90ZXMnOg0KCQkJCQkJCQkJCSRmbGFncyB8 PSBFTlRfUVVPVEVTOw0KCQkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJCQljYXNlICdkb3VibGVf cXVvdGVzJzoNCgkJCQkJCQkJCQkkZmxhZ3MgfD0gRU5UX0NPTVBBVDsNCgkJCQkJCQkJCWJy ZWFrOw0KCQkJCQkJCQkJZGVmYXVsdDoNCgkJCQkJCQkJCQkkZmxhZ3MgfD0gJGFyZzsNCgkJ CQkJCQkJCWJyZWFrOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCSRvdXQgPSBodG1s c3BlY2lhbGNoYXJzKCRvdXQsICRmbGFncyk7DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2Ug J2ZvcmRiJzoNCgkJCQkJCQkkb3V0ID0gZG9TbGFzaCgkb3V0KTsNCgkJCQkJCWJyZWFrOw0K CQkJCQkJY2FzZSAnZm9ybSc6DQoJCQkJCQkJZm9yZWFjaCAoJHhmb3JtIGFzICRhcmcpIHsN CgkJCQkJCQkJJGNvbnRlbnQgPSBmZXRjaF9mb3JtKCRhcmcpOw0KCQkJCQkJCQkkcmVwcyA9 IGFycmF5KA0KCQkJCQkJCQkJJ3tzbWRfd3JhcF9pdH0nID0+ICRvdXQsDQoJCQkJCQkJCSk7 DQoJCQkJCQkJCSRvdXQgPSBwYXJzZShzdHJ0cigkY29udGVudCwgJHJlcHMpKTsNCgkJCQkJ CQl9DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgJ2xpbmsnOg0KCQkJCQkJCS8vIEZyb20g aHR0cDovL2NvZGVzbmlwcGV0cy5qb3llbnQuY29tL3Bvc3RzL3Nob3cvMjEwNA0KCQkJCQkJ CSRwYXQgPSAiQFxiKGh0dHBzPzovLyk/KChbMC05YS16QS1aXyF+KicoKS4mPSskJS1dKzop P1swLTlhLXpBLVpfIX4qJygpLiY9KyQlLV0rXEApPygoWzAtOV17MSwzfVwuKXszfVswLTld ezEsM318KFswLTlhLXpBLVpfIX4qJygpLV0rXC4pKihbMC05YS16QS1aXVswLTlhLXpBLVot XXswLDYxfSk/WzAtOWEtekEtWl1cLlthLXpBLVpdezIsNn0pKDpbMC05XXsxLDR9KT8oKC9b MC05YS16QS1aXyF+KicoKS47PzpcQCY9KyQsJSMtXSspKi8/KUAiOw0KCQkJCQkJCSR0ZXh0 ID0gKGlzc2V0KCR4Zm9ybVswXSkgJiYgJHhmb3JtWzBdICE9ICcnKSA/ICR4Zm9ybVswXSA6 ICckMCc7DQoJCQkJCQkJJG91dCA9IHByZWdfcmVwbGFjZSgkcGF0LCAnPGEgaHJlZj0iJDAi PicuJHRleHQuJzwvYT4nLCAkb3V0KTsNCgkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAnbm9f d2lkb3cnOg0KCQkJCQkJCSRub193aWRvdyA9IGlzc2V0KCR4Zm9ybVswXSkgPyAkeGZvcm1b MF0gOiBAJHByZWZzWyd0aXRsZV9ub193aWRvdyddOw0KCQkJCQkJCSRvdXQgPSAoJG5vX3dp ZG93KSA/IG5vV2lkb3coJG91dCkgOiAkb3V0Ow0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNl ICdyZXBsYWNlJzoNCgkJCQkJCQkkdHlwZSA9ICR4Zm9ybVswXSA/ICR4Zm9ybVswXSA6ICdz dHJpbmcnOyAvLyBzdHJpbmcgLyByZWdleA0KCQkJCQkJCSRmcm9tID0gJHhmb3JtWzFdOw0K CQkJCQkJCSR0byA9IGlzc2V0KCR4Zm9ybVsyXSkgPyAkeGZvcm1bMl0gOiAnJzsNCgkJCQkJ CQkkb3V0ID0gKCR0eXBlPT0ncmVnZXgnKSA/IHByZWdfcmVwbGFjZSgkZnJvbSwgJHRvLCAk b3V0KSA6IHN0cl9yZXBsYWNlKCRmcm9tLCAkdG8sICRvdXQpOw0KCQkJCQkJYnJlYWs7DQoJ CQkJCQljYXNlICdzYW5pdGl6ZSc6DQoJCQkJCQkJaWYgKCR4Zm9ybVswXSA9PSAidXJsIikg ew0KCQkJCQkJCQkkb3V0ID0gc2FuaXRpemVGb3JVcmwoJG91dCk7DQoJCQkJCQkJfSBlbHNl IGlmICgkeGZvcm1bMF0gPT0gImZpbGUiKSB7DQoJCQkJCQkJCSRvdXQgPSBzYW5pdGl6ZUZv ckZpbGUoJG91dCk7DQoJCQkJCQkJfSBlbHNlIGlmICgkeGZvcm1bMF0gPT0gInVybF90aXRs ZSIpIHsNCgkJCQkJCQkJJG91dCA9IHN0cmlwU3BhY2UoJG91dCwgMSk7DQoJCQkJCQkJfQ0K CQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdzcGxpdCc6DQoJCQkJCQkJJHBhcnRzID0gZXhw bG9kZSgkeGZvcm1bMF0sICRvdXQpOw0KCQkJCQkJCWFycmF5X3NoaWZ0KCR4Zm9ybSk7IC8v IFRocm93IGF3YXkgdGhlIHNwbGl0IGNoYXJhY3Rlcg0KCQkJCQkJCSRqb2luY2hhciA9IGFy cmF5X3NoaWZ0KCR4Zm9ybSk7DQoNCgkJCQkJCQkvLyBHcmFiIHRoZSBzcGVjaWZpZWQgcGFy dHMgdG8gcmV0dXJuDQoJCQkJCQkJJHJldHN0ciA9IGFycmF5KCk7DQoJCQkJCQkJJG51bVBh cnRzID0gY291bnQoJHBhcnRzKTsNCgkJCQkJCQlmb3JlYWNoICgkeGZvcm0gYXMgJGlkeCkg ew0KCQkJCQkJCQkkYWRkaXQgPSB0cnVlOw0KCQkJCQkJCQlpZiAoJGlkeCA9PSAnYWxsJykg ew0KCQkJCQkJCQkJJHJldHN0ciA9IGFycmF5X21lcmdlKCRyZXRzdHIsICRwYXJ0cyk7DQoJ CQkJCQkJCQkkYWRkaXQgPSBmYWxzZTsNCgkJCQkJCQkJfSBlbHNlIGlmICgkaWR4ID09ICds YXN0Jykgew0KCQkJCQkJCQkJJGlkeCA9ICRudW1QYXJ0czsNCgkJCQkJCQkJfSBlbHNlIGlm ICgkaWR4ID09ICdyYW5kJykgew0KCQkJCQkJCQkJJGlkeCA9IG10X3JhbmQoMSwgJG51bVBh cnRzKTsNCgkJCQkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGlkeCwgJy0nKSA9PT0gMCkgew0K CQkJCQkJCQkJLy8gTmVnYXRpdmUgb2Zmc2V0OiBjb3VudCBmcm9tIHRoZSBlbmQ6IC0xID0g bGFzdCwgLTIgPSBwZW51bHRpbWF0ZSwgZXRjDQoJCQkJCQkJCQkvLyBUaGUgKzEgaXMgdG8g Y291bnRlciB0aGUgZmFjdCB3ZSBzdWJ0cmFjdCBvbmUgaW4gYSBtb21lbnQuIERhbW4gemVy byBpbmRpY2VzDQoJCQkJCQkJCQkkaWR4ID0gJG51bVBhcnRzIC0gc3Vic3RyKCRpZHgsIDEp ICsgMTsNCgkJCQkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGlkeCwgJz4nKSA9PT0gMCkgew0K CQkJCQkJCQkJJHJldHN0ciA9IGFycmF5X21lcmdlKCRyZXRzdHIsIGFycmF5X3NsaWNlKCRw YXJ0cywgc3Vic3RyKCRpZHgsIDEpKSk7DQoJCQkJCQkJCQkkYWRkaXQgPSBmYWxzZTsNCgkJ CQkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGlkeCwgJzwnKSA9PT0gMCkgew0KCQkJCQkJCQkJ JHJldHN0ciA9IGFycmF5X21lcmdlKCRyZXRzdHIsIGFycmF5X3NsaWNlKCRwYXJ0cywgMCwg c3Vic3RyKCRpZHgsIDEpIC0gMSApKTsNCgkJCQkJCQkJCSRhZGRpdCA9IGZhbHNlOw0KCQkJ CQkJCQl9DQoJCQkJCQkJCS8vIFN1YnRyYWN0IG9uZSBiZWNhdXNlIHRoZSBpbnB1dCBpcyAn aHVtYW4nDQoJCQkJCQkJCS8vIGUuZy4gc3BsaXR8LnwrfDF8MyA9PSByZXR1cm4gdGhlIDFz dCBhbmQgM3JkIHBhcnRzID09ICRwYXJ0c1swXSArICRwYXJ0c1syXQ0KCQkJCQkJCQlpZiAo JGFkZGl0KSB7DQoJCQkJCQkJCQkkcmV0c3RyW10gPSAkcGFydHNbJGlkeC0xXTsNCgkJCQkJ CQkJfQ0KCQkJCQkJCX0NCg0KCQkJCQkJCSRvdXQgPSBqb2luKCRqb2luY2hhciwgJHJldHN0 cik7DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgJ3N0cmlwX3RhZ3MnOg0KCQkJCQkJCSRv dXQgPSBzdHJpcF90YWdzKCRvdXQpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICd0ZXh0 aWxlJzoNCgkJCQkJCQlpbmNsdWRlX29uY2UgdHhwYXRoLicvbGliL2NsYXNzVGV4dGlsZS5w aHAnOw0KCQkJCQkJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsNCgkJCQkJCQkkb3V0ID0g JHRleHRpbGUtPlRleHRpbGVUaGlzKCRvdXQpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNl ICd0cmltJzoNCgkJCQkJCQkkY2hhcmxpc3QgPSBpc3NldCgkeGZvcm1bMF0pID8gJHhmb3Jt WzBdIDogJyc7DQoJCQkJCQkJJG91dCA9ICgkY2hhcmxpc3QpID8gdHJpbSgkb3V0LCAkY2hh cmxpc3QpIDogdHJpbSgkb3V0KTsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ fQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgMCkpOw0K CQl9DQoJfQ0KDQoJcmV0dXJuICgkb3V0KSA/IGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0YWcp LmRvVGFnKCRvdXQsICR3cmFwdGFnLCAkY2xhc3MsICRhdHRyLCAkaHRtbF9pZCkgOiAnJzsN Cn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3Mi O3M6MToiMCI7czo0OiJoZWxwIjtzOjE1ODQzOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgx PnNtZF93cmFwPC9oMT4KCgk8cD5XcmFwIHRleHQgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+ SFRNTDwvc3Bhbj4sIGNsYXNzLCBwcmVmaXgsIHN1ZmZpeCwgYW5kIGFwcGx5IHRyYW5mb3Jt cyB0byBpdCBpbiB0aGUgcHJvY2VzcyAobGlua2lmeSwgZm9ybWF0IGFzIGRhdGUsIHRyaW0s IGVzY2FwZSwgc2FuaXRpemUsIGV0YykuPC9wPgoKCTxwPklmIHRoZSBpdGVtIHlvdSBhcmUg aW50ZW5kaW5nIHRvIHdyYXAgaXMgZW1wdHkgLyBub24tZXhpc3RlbnQgdGhlbiBubyB3cmFw IGlzIGFwcGxpZWQgYW5kIG5vdGhpbmcgaXMgZGlzcGxheWVkLiBUaGlzIG1ha2VzIGl0IGFu IGlkZWFsIGNhbmRpZGF0ZSBmb3IgcGxhY2luZyBhcm91bmQgb3RoZXIgdGFncyBhbmQgc2F2 ZXMgaGF2aW5nIHRvIGRvIHRoZSAmIzgyMjA7YXNzaWduIGNvbnRlbnQgdG8gPGNvZGU+Jmx0 O3R4cDp2YXJpYWJsZSZndDs8L2NvZGU+LCBjaGVjayBpZiB2YXJpYWJsZSBleGlzdHMmIzgy MjE7IGRhbmNlLiA8Y29kZT4mbHQ7dHhwOmVsc2UgLyZndDs8L2NvZGU+IGlzIHN1cHBvcnRl ZCBzbyB5b3UgbWF5IHRha2UgYWN0aW9uIGlmIHRoZSBjb250YWluZWQgY29udGVudCBpcyBl bXB0eS48L3A+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkg PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9h Pi4gVGhhbmtzIHRvIHRoZSBqYWtvYiBmb3IgbWFraW5nIGEgYnVzaW5lc3MgY2FzZSBmb3Ig Y3JlYXRpbmcgdGhpcyBwbHVnaW4sIGFuZCBvZiBjb3Vyc2UgdGhlIGFkaV93cmFwIHBsdWdp biBmb3IgaW5zcGlyYXRpb24uPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxh dGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVm PSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTI0Mi9zbWRfd3JhcCI+dGV4dHBh dHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9z dyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhbmUs IGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwg dGhlIHBsdWdpbiwgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIDxlbT5BZG1p bi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2U8L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNzE2NyI+Zm9y dW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2Vz cyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPlRhZzogPGNvZGU+Jmx0 O3R4cDpzbWRfd3JhcCZndDs8L2NvZGU+PC9oMj4KCgk8cD5XcmFwIHRoZSA8Y29kZT5pdGVt PC9jb2RlPiBvciB0YWcmIzgyMTc7cyBjb250YWluZXIgd2l0aCBzdGFuZGFyZCBUeHAgPGNv ZGU+d3JhcHRhZzwvY29kZT4gcGFyYXBoZXJuYWxpYS4gVGhlIGNvbnRlbnQgaXMgcGFyc2Vk IHNvIHlvdSBjYW4gaW5jbHVkZSBvdGhlciBUeHAgdGFncy4gSWYgdGhlIHJlc3VsdHMgb2Yg dGhlIHBhcnNlIHJldHVybiBub3RoaW5nLCB0aGUgcGx1Z2luIGRvZXMgbm90aGluZywgdGhv dWdoIHlvdSBtYXkgZmlyZSBhbiBvcHRpb25hbCA8Y29kZT4mbHQ7dHhwOmVsc2UgLyZndDs8 L2NvZGU+IGlmIHlvdSB3aXNoLiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgY29uZmlndXJl IHRoZSBwbHVnaW46PC9wPgoKCTxkbD4KCQk8ZHQ+PHN0cm9uZz5pdGVtPC9zdHJvbmc+PC9k dD4KCQk8ZGQ+VGhlIHRoaW5nIHRvIHdyYXAuIENhbiBiZSB0ZXh0LCBhIHRhZy1pbi10YWcg b3Igc29tZSA8Y29kZT57cmVwbGFjZW1lbnR9PC9jb2RlPiBmcm9tIG90aGVyIHNtZF8gcGx1 Z2lucy4gSWYgbm90IHNwZWNpZmVkLCB0aGUgY29udGFpbmVyIGlzIHVzZWQgYXMgaW5wdXQu PC9kZD4KCQk8ZHQ+PHN0cm9uZz53cmFwdGFnPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+V3JhcCB0 aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgYXJvdW5kIHRoZSBpdGVt LiBTcGVjaWZ5IGl0IHdpdGhvdXQgYW5nbGUgYnJhY2tldHMsIGUuZy4gPGNvZGU+d3JhcHRh Zz0mcXVvdDtzcGFuJnF1b3Q7PC9jb2RlPjwvZGQ+CgkJPGR0PjxzdHJvbmc+Y2xhc3M8L3N0 cm9uZz48L2R0PgoJCTxkZD5Bc3NpZ24gdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9z cGFuPiBjbGFzcyB0byB0aGUgd3JhcHRhZy4gVW51c2VkIGlmIDxjb2RlPndyYXB0YWc8L2Nv ZGU+IGlzIGVtcHR5LjwvZGQ+CgkJPGR0PjxzdHJvbmc+aHRtbF9pZDwvc3Ryb25nPjwvZHQ+ CgkJPGRkPkFzc2lnbiB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiA8Y29k ZT5pZDwvY29kZT4gdmFsdWUgdG8gdGhlIHdyYXB0YWcuIFVudXNlZCBpZiA8Y29kZT53cmFw dGFnPC9jb2RlPiBpcyBlbXB0eS48L2RkPgoJCTxkdD48c3Ryb25nPmF0dHI8L3N0cm9uZz48 L2R0PgoJCTxkZD5TdXBwbHkgeW91ciBvd24gbmFtZT12YWx1ZSBwYWlycyB0byBhZGQgdG8g dGhlIHdyYXB0YWcuIEZvciBleGFtcGxlLCA8Y29kZT5hdHRyPSZxdW90O3JlbHxleHRlcm5h bCwgdGl0bGV8TXkgdXNlZnVsIHBvcHVwIHRpdGxlJnF1b3Q7PC9jb2RlPiB3b3VsZCBhZGQg PGNvZGU+cmVsPSZxdW90O2V4dGVybmFsJnF1b3Q7IHRpdGxlPSZxdW90O015IHVzZWZ1bCBw b3B1cCB0aXRsZSZxdW90OzwvY29kZT4gYXMgYXR0cmlidXRlcyB0byB0aGUgd3JhcHRhZy48 L2RkPgoJCTxkdD48c3Ryb25nPmxhYmVsPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+UHV0IHRoaXMg dGV4dCBhcyBhIGhlYWRpbmcgLyBsYWJlbCBiZWZvcmUgdGhlIGl0ZW0uPC9kZD4KCQk8ZHQ+ PHN0cm9uZz5sYWJlbHRhZzwvc3Ryb25nPjwvZHQ+CgkJPGRkPldyYXAgdGhlIGxhYmVsIHdp dGggdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnLiBTcGVjaWZ5IHdp dGhvdXQgYW5nbGUgYnJhY2tldHMsIGUuZy4gPGNvZGU+bGFiZWx0YWc9JnF1b3Q7aDQmcXVv dDs8L2NvZGU+PC9kZD4KCQk8ZHQ+PHN0cm9uZz50cmltPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+ U3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSBpdGVtIDxl bT5iZWZvcmU8L2VtPiBpdCBoYXMgcHJlZml4IGFuZCBzdWZmaXggYXBwbGllZC4gVXNlIDxj b2RlPnRyaW09JnF1b3Q7MCZxdW90OzwvY29kZT4gdG8gdHVybiB0aGlzIGZlYXR1cmUgb2Zm LjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDE8L2RkPgoJCTxkdD48c3Ryb25nPnByZWZpeDwvc3Ry b25nPjwvZHQ+CgkJPGRkPlB1dCB0aGlzIHRleHQgYmVmb3JlIHRoZSBpdGVtLiBJdCBpcyBw cmVwZW5kZWQgPGVtPnByaW9yPC9lbT4gdG8gdGhlIGl0ZW0gYmVpbmcgcGFzc2VkIHRocm91 Z2ggYW55IDxjb2RlPnRyYW5zZm9ybTwvY29kZT4gY2hhaW4uPC9kZD4KCQk8ZHQ+PHN0cm9u Zz5zdWZmaXg8L3N0cm9uZz48L2R0PgoJCTxkZD5QdXQgdGhpcyB0ZXh0IGFmdGVyIHRoZSBp dGVtLiBJdCBpcyBhcHBlbmRlZCA8ZW0+cHJpb3I8L2VtPiB0byB0aGUgaXRlbSBiZWluZyBw YXNzZWQgdGhyb3VnaCBhbnkgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiBjaGFpbi48L2RkPgoJ CTxkdD48c3Ryb25nPnRyYW5zZm9ybTwvc3Ryb25nPjwvZHQ+CgkJPGRkPkFwcGx5IHRyYW5z Zm9ybWF0aW9ucyB0byB0aGUgaXRlbS4gVHJhbnNmb3JtcyBjYW4gYmUgY2hhaW5lZCBhbmQg YXJlIGFwcGxpZWQgaW4gb3JkZXIsIGVhY2ggb25lIHNlcGFyYXRlZCBieSA8Y29kZT5kZWxp bTwvY29kZT4uIFRyYW5zZm9ybSBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSA8Y29kZT5w YXJhbV9kZWxpbTwvY29kZT4uIFRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtcyBhcmUgZGVmaW5l ZCAoc2VlIHRoZSA8YSBocmVmPSIjc21kX3dyYXBfZWciPmV4YW1wbGVzPC9hPiBmb3IgbW9y ZSBpbmZvcm1hdGlvbikgOgoJPGRsPgoJCTxkZD48c3Ryb25nPmFkZDwvc3Ryb25nPiAmIzgy MTI7IGFwcGVuZCBzb21lIHRleHQgdG8gdGhlIGl0ZW0uIFRoaXMgaXMgPGVtPm5vdDwvZW0+ IHRoZSBzYW1lIGFzIHVzaW5nIHByZWZpeCAvIHN1ZmZpeCBiZWNhdXNlIHRoZSA8Y29kZT5h ZGQ8L2NvZGU+IHRyYW5zZm9ybSBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgY2hhaW4gYXQg YW55IHBvaW50LiBVc2UgdGhlIHNlY29uZCBhcmd1bWVudCB0byBkZXRlcm1pbmUgaW4gd2hp Y2ggcG9zaXRpb24gdG8gYWRkIHRoZSBuZXcgdGV4dDsgdGhlIHRleHQgaXRzZWxmIGlzIHRo ZSB0aGlyZCBhcmd1bWVudC4gSGVyZSBhcmUgdGhlIHBvc2l0aW9uYWwgb3B0aW9uczoKCTxk bD4KCQk8ZGQ+PHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4gJiM4MjEyOyBhZGQgdGhlIHRleHQg YXQgdGhlIHN0YXJ0IG9mIHRoZSBpdGVtLjwvZGQ+CgkJPGRkPjxzdHJvbmc+YWZ0ZXI8L3N0 cm9uZz4gJiM4MjEyOyBhZGQgdGhlIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaXRlbS48L2Rk PgoJCTxkZD48c3Ryb25nPmJvdGg8L3N0cm9uZz4gJiM4MjEyOyBhZGQgdGhlIHRleHQgYXQg Ym90aCBzdGFydCBhbmQgZW5kIG9mIHRoZSBpdGVtLjwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRk PjxzdHJvbmc+Y2FzZTwvc3Ryb25nPiAmIzgyMTI7IGNoYW5nZSB0aGUgY2FzZSBvZiB0aGUg aXRlbS4gWW91IG1heSBjaGFpbiBjYXNlIHRyYW5zZm9ybXMgaW4gc2VxdWVuY2UsIGUuZy4g PGNvZGU+dHJhbnNmb3JtPSZxdW90O2Nhc2V8bG93ZXJ8dWNmaXJzdCZxdW90OzwvY29kZT4u IENob29zZSBmcm9tOgoJPGRsPgoJCTxkZD48c3Ryb25nPnVwcGVyPC9zdHJvbmc+ICYjODIx MjsgdXBwZXIgY2FzZS48L2RkPgoJCTxkZD48c3Ryb25nPmxvd2VyPC9zdHJvbmc+ICYjODIx MjsgbG93ZXIgY2FzZS48L2RkPgoJCTxkZD48c3Ryb25nPnVjZmlyc3Q8L3N0cm9uZz4gJiM4 MjEyOyB1cHBlciBjYXNlIGZpcnN0IGNoYXJhY3RlciBvZiBzZW50ZW5jZS48L2RkPgoJCTxk ZD48c3Ryb25nPnVjd29yZHM8L3N0cm9uZz4gJiM4MjEyOyB1cHBlciBjYXNlIGZpcnN0IGNo YXJhY3RlciBvZiBldmVyeSB3b3JkLjwvZGQ+CgkJPGRkPjxzdHJvbmc+dGl0bGU8L3N0cm9u Zz4gJiM4MjEyOyBpbnRlbGxpZ2VudChpc2gpIHZlcnNpb24gb2YgdWN3b3JkcyB0aGF0IGln bm9yZXMgc21hbGwgd29yZHMgYW5kIHRyaWVzIHRvIGxlYXZlIGludGVudGlvbmFsIGZpcnN0 LWxvd2VyLWNhc2Ugd29yZHMgKGUuZy4gaVBob25lKSBhbG9uZS4gV29ya3MgYmVzdCBvbiBF bmdsaXNoIGJ1dCBkb2VzIHN1cHBvcnQgVW5pY29kZSB1cCB0byBhIHBvaW50LiBZb3UgY2Fu IHNwZWNpZnkgeW91ciBvd24gbGlzdCBvZiB3b3JkcyBieSBjcmVhdGluZyBhIGhpZGRlbiBw cmVmIGNhbGxlZCA8c3Ryb25nPnNtZF93cmFwX3NtYWxsX3dvcmRzPC9zdHJvbmc+LiBMaXN0 IGVhY2ggd29yZCBzZXBhcmF0ZWQgYnkgYSBwaXBlLiBZb3UgbWF5IHVzZSByZWdleCBzdHJp bmdzIGlmIHlvdSB3aXNoIGJ1dCA8ZW0+bm8gc2FuaXRpemF0aW9uIGlzIGRvbmU8L2VtPiBz byBiZSBjYXJlZnVsISBUaGUgZGVmYXVsdCBsaXN0IG9mIGlnbm9yZWQgc2hvcnQgd29yZHMg YXJlOiA8Y29kZT5hfGFufGFuZHxhc3xhdHxidXR8Ynl8ZW58Zm9yfGlmfGlufG9mfG9ufG9y fHRoZXx0b3x2cz9bLl0/fHZpYTwvY29kZT48L2RkPgoJPC9kbD48L2RkPgoJCTxkZD48c3Ry b25nPmRhdGU8L3N0cm9uZz4gJiM4MjEyOyB0cmVhdCB0aGUgaXRlbSBhcyBhIGRhdGUgYW5k IGZvcm1hdCBpdCBhY2NvcmRpbmcgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly9waHAubmV0L21h bnVhbC9lbi9mdW5jdGlvbi5zdHJmdGltZS5waHAiPnN0cmZ0aW1lKCk8L2E+IGNvbXBhdGli bGUgc3RyaW5nIGdpdmVuIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gVGhlIGl0ZW0gY2FuIGVp dGhlciBiZSBhIG51bWVyaWMgKDxzcGFuIGNsYXNzPSJjYXBzIj5VTklYPC9zcGFuPikgdGlt ZXN0YW1wIG9yIGFuIDxlbT5FbmdsaXNoPC9lbT4gZGF0ZSBzdHJpbmcgaW4gYW4gYWNjZXB0 YWJsZSBmb3JtYXQuIEZvciBkYXRldGltZSBmaWVsZHMgeW91IGNvdWxkIHNwbGl0IHRoZSBz dHJpbmcgZmlyc3QganVzdCB0byBnZXQgdGhlIGRhdGUgcG9ydGlvbi48L2RkPgoJCTxkZD48 c3Ryb25nPmVzY2FwZTwvc3Ryb25nPiAmIzgyMTI7IHJ1biB0aGUgaXRlbSB0aHJvdWdoIDxj b2RlPmh0bWxzcGVjaWFsY2hhcnMoKTwvY29kZT4uIFVzZSBhZGRpdGlvbmFsIHBhcmFtZXRl cnMgdG8gbGlzdCBvcHRpb25hbCA8YSBocmVmPSJodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4v ZnVuY3Rpb24uaHRtbHNwZWNpYWxjaGFycy5waHAiPmZsYWdzPC9hPiBvciB1c2UgYW55IG9m IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCB2YWx1ZXM6Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+bm9f cXVvdGVzPC9zdHJvbmc+ICYjODIxMjsgPGNvZGU+RU5UX05PUVVPVEVTPC9jb2RlPjwvZGQ+ CgkJPGRkPjxzdHJvbmc+ZG91YmxlX3F1b3Rlczwvc3Ryb25nPiAmIzgyMTI7IDxjb2RlPkVO VF9DT01QQVQ8L2NvZGU+PC9kZD4KCQk8ZGQ+PHN0cm9uZz5hbGxfcXVvdGVzPC9zdHJvbmc+ ICYjODIxMjsgPGNvZGU+RU5UX1FVT1RFUzwvY29kZT48L2RkPgoJPC9kbD48L2RkPgoJCTxk ZD48c3Ryb25nPmZvcmRiPC9zdHJvbmc+ICYjODIxMjsgcnVuIHRoZSBpdGVtIHRocm91Z2gg VHhwJiM4MjE3O3MgPGNvZGU+ZG9TbGFzaCgpPC9jb2RlPi4gQWx3YXlzIGNvbnNpZGVyIHVz aW5nIHRoaXMgaWYgeW91IGFyZSBwb3N0aW5nIHRoZSBpdGVtIGJhY2sgdG8gdGhlIGRhdGFi YXNlIChiZXdhcmUgdGhhdCBvdGhlciBwbHVnaW5zIG1heSBkbyB0aGlzIGZvciB5b3UsIHNv IGJlIGNhcmVmdWwgbm90IHRvIGR1cGxpY2F0ZSBpdCBvciB5b3UmIzgyMTc7bGwgZ2V0IGJh Y2tzbGFzaGVzIHdoZXJlIHRoZXJlIHNob3VsZG4mIzgyMTc7dCBiZSBiYWNrc2xhc2hlcyku PC9kZD4KCQk8ZGQ+PHN0cm9uZz5mb3JtPC9zdHJvbmc+ICYjODIxMjsgcGFzcyB0aGUgaXRl bSB0aHJvdWdoIHRoZSBub21pbmF0ZWQgZm9ybXMuIFNwZWNpZnkgZWFjaCBmb3JtIGFzIGFu IGFyZ3VtZW50LCBhbmQgaW5zaWRlIHRob3NlIGZvcm1zIHBsYWNlIDxjb2RlPntzbWRfd3Jh cF9pdH08L2NvZGU+IHdoZXJlIHlvdSB3aXNoIHRoZSBpdGVtIHRvIGJlIGluc2VydGVkLjwv ZGQ+CgkJPGRkPjxzdHJvbmc+bGluazwvc3Ryb25nPiAmIzgyMTI7IHR1cm4gdGhlIGl0ZW0g aW50byBhIGNsaWNrYWJsZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBhbmNob3Iu IFdpdGhvdXQgYW4gYXJndW1lbnQsIHRoZSBsaW5rIHRleHQgd2lsbCBiZSB0aGUgbGluayBp dHNlbGYuIElmIHlvdSBzcGVjaWZ5IGFuIGFyZ3VtZW50LCB0aGUgbGluayB0ZXh0IHdpbGwg YmUgc2V0IHRvIHdoYXRldmVyIHlvdSBjaG9vc2UuPC9kZD4KCQk8ZGQ+PHN0cm9uZz5ub193 aWRvdzwvc3Ryb25nPiAmIzgyMTI7IHdoZXRoZXIgdG8gYWxsb3cgdGhlIGxhc3Qgd29yZCBv ZiB0aGUgaXRlbSB0byB3b3JkLXdyYXAgdG8gdGhlIG5leHQgbGluZS4gSWYgeW91IHNwZWNp ZnkgMCBhcyB0aGUgYXJndW1lbnQsIHdvcmQtd3JhcCB3aWxsIGJlIGFsbG93ZWQuIFNwZWNp ZnlpbmcgMSBtZWFucyB0aGUgbGFzdCB3b3JkIHdpbGwgbmV2ZXIgYmUgYWxsb3dlZCB0byB3 cmFwIG9uIGl0cyBvd24uIFdpdGhvdXQgYW4gYXJndW1lbnQsIHRoZSBBZHZhbmNlZCBQcmVm IGRldGVybWluZXMgdGhlIGJlaGF2aW91ci48L2RkPgoJCTxkZD48c3Ryb25nPnJlcGxhY2U8 L3N0cm9uZz4gJiM4MjEyOyBmaW5kIGEgc3RyaW5nIG9yIHJlZ2V4IGFuZCByZXBsYWNlIGl0 IHdpdGggc29tZXRoaW5nIGVsc2UuIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmU6Cgk8ZGw+ CgkJPGRkPjE6IDxzdHJvbmc+dHlwZTwvc3Ryb25nPiBlaXRoZXIgPGNvZGU+c3RyaW5nPC9j b2RlPiAob3Igb21pdHRlZCkgZm9yIGEgcmVndWxhciByZXBsYWNlLCBvciA8Y29kZT5yZWdl eDwvY29kZT4gZm9yIGEgcmVndWxhciBleHByZXNzaW9uPC9kZD4KCQk8ZGQ+MjogPHN0cm9u Zz5mcm9tPC9zdHJvbmc+IHRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci4gSWYgdXNpbmcgYSBy ZWdleCwgeW91IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBzcGVjaWZ5IHRoZSBy ZWd1bGFyIGV4cHJlc3Npb24gZGVsaW1pdGVycyBhcyB3ZWxsIG9yIHlvdSYjODIxNztsbCBn ZXQgYW4gZXJyb3I8L2RkPgoJCTxkZD4zOiA8c3Ryb25nPnRvPC9zdHJvbmc+IHRoZSB0ZXh0 IHdpdGggd2hpY2ggdG8gcmVwbGFjZSBhbnkgZm91bmQgc3RyaW5ncy4gSWYgb21pdGVkLCB0 aGUgZm91bmQgc3RyaW5ncyB3aWxsIHNpbXBseSBiZSByZW1vdmVkPC9kZD4KCTwvZGw+PC9k ZD4KCQk8ZGQ+PHN0cm9uZz5zYW5pdGl6ZTwvc3Ryb25nPiAmIzgyMTI7IGNsZWFuIHRoZSBp dGVtIGVpdGhlciBmb3I6Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+dXJsPC9zdHJvbmc+ICYjODIx MjsgYWRkcmVzcyBiYXIgdXNlLjwvZGQ+CgkJPGRkPjxzdHJvbmc+ZmlsZTwvc3Ryb25nPiAm IzgyMTI7IGZpbGVuYW1lIHVzZS48L2RkPgoJCTxkZD48c3Ryb25nPnVybF90aXRsZTwvc3Ry b25nPiAmIzgyMTI7IHVzZSBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRp dGxlLjwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPjxzdHJvbmc+c3BsaXQ8L3N0cm9uZz4gJiM4 MjEyOyBzcGxpdCB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gY2hhcmFjdGVyKHMpIGFuZCByZXR1 cm4gb25lIG9yIG1vcmUgcGFydHMsIG9wdGlvbmFsbHkgam9pbmVkIGJ5IHRoZSBnaXZlbiBj aGFyYWN0ZXJzLiBBcmd1bWVudHM6Cgk8ZGw+CgkJPGRkPjE6IDxzdHJvbmc+c3BsaXQgY2hh cmFjdGVyKHMpPC9zdHJvbmc+PC9kZD4KCQk8ZGQ+MjogPHN0cm9uZz5qb2luIGNoYXJhY3Rl cihzKTwvc3Ryb25nPjwvZGQ+CgkJPGRkPjMrOiB3aGljaCBwaWVjZXMgdG8gcmV0dXJuLCBl YWNoIHNlcGFyYXRlZCBieSA8Y29kZT5wYXJhbV9kZWxpbTwvY29kZT4uIFlvdSBjYW4gZWl0 aGVyIHVzZSBudW1lcmljIGluZGljZXMgdG8gc3BlY2lmeSBkaXNjcmV0ZSBwYXJ0cywgZS5n LiA8Y29kZT4xfDQ8L2NvZGU+IHJldHVybnMgdGhlIGZpcnN0IGFuZCA0dGggcGFydHMuIFlv dSBjYW4gc3BlY2lmeSBuZWdhdGl2ZSBudW1iZXJzIHRvIGdldCBwYXJ0cyBzdGFydGluZyBm cm9tIHRoZSBlbmQsIGUuZy4gPGNvZGU+LTF8LTI8L2NvZGU+IHJldHVybnMgdGhlIGxhc3Qg YW5kIHBlbnVsdGltYXRlIGVsZW1lbnRzLiA8Y29kZT5sYXN0PC9jb2RlPiBpcyBhIHN5bm9u eW0gZm9yIDxjb2RlPi0xPC9jb2RlPiwgPGNvZGU+YWxsPC9jb2RlPiByZXR1cm5zIGV2ZXJ5 IHBpZWNlLCBhbmQgPGNvZGU+cmFuZDwvY29kZT4gY2hvb3NlcyBvbmUgcGllY2UgYXQgcmFu ZG9tLiBJbiBhZGRpdGlvbiB5b3UgY2FuIGFsc28gdXNlIGdyZWF0ZXItdGhhbiBhbmQgbGVz cy10aGFuIHN5bWJvbHMgYmVmb3JlIGEgdmFsdWUgdG8gb25seSByZXR1cm4gZWxlbWVudHMg IGhpZ2hlciBvciBsb3dlciB0aGFuIHRoZSBnaXZlbiB2YWx1ZSwgZS5nLiA8Y29kZT4mZ3Q7 MjwvY29kZT4gcmV0dXJucyB0aGUgM3JkLCA0dGgsIDV0aCwmIzgyMzA7IGVsZW1lbnRzLiBT ZWUgPGEgaHJlZj0iI3NtZF93cmFwX2VnMyI+ZXhhbXBsZSAzPC9hPiBmb3IgZGV0YWlscy48 L2RkPgoJPC9kbD48L2RkPgoJCTxkZD48c3Ryb25nPnN0cmlwX3RhZ3M8L3N0cm9uZz4gJiM4 MjEyOyByZW1vdmUgYWxsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiAvIDxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IHRhZ3MgZnJvbSB0aGUgaXRlbS48L2RkPgoJCTxk ZD48c3Ryb25nPnRleHRpbGU8L3N0cm9uZz4gJiM4MjEyOyBwYXNzIHRoZSBpdGVtIHRocm91 Z2ggdGhlIFRleHRpbGUgcHJvY2Vzc29yLjwvZGQ+CgkJPGRkPjxzdHJvbmc+dHJpbTwvc3Ry b25nPiAmIzgyMTI7IHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBjaGFyYWN0ZXJzIGZy b20gdGhlIGl0ZW0uIFNwZWNpZnkgYSBsaXN0IG9mIGNoYXJhY3RlcnMgYXMgdGhlIGFyZ3Vt ZW50LiBXaXRob3V0IGFuIGFyZ3VtZW50LCB3aGl0ZXNwYWNlIHdpbGwgYmUgcmVtb3ZlZC48 L2RkPgoJPC9kbD48L2RkPgoJCTxkdD48c3Ryb25nPmRlbGltPC9zdHJvbmc+PC9kdD4KCQk8 ZGQ+VGhlIHBsdWdpbiBkZWxpbWl0ZXIuPC9kZD4KCQk8ZGQ+RGVmYXVsdDogY29tbWEgKCwp PC9kZD4KCQk8ZHQ+PHN0cm9uZz5wYXJhbV9kZWxpbTwvc3Ryb25nPjwvZHQ+CgkJPGRkPlRo ZSBhcmd1bWVudCBkZWxpbWl0ZXIuPC9kZD4KCQk8ZGQ+RGVmYXVsdDogcGlwZSAofCk8L2Rk PgoJCTxkdD48c3Ryb25nPmRlYnVnPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+RGlzcGxheSB0aGUg aXRlbSB0aGUgdGFnIGlzIHRyeWluZyB0byB3cmFwLjwvZGQ+Cgk8L2RsPgoKCTxoMiBpZD0i c21kX3dyYXBfZWciPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9InNtZF93cmFwX2VnMSI+RXhh bXBsZSAxOiBMaW5rIGFuY2hvcjwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7dHhwOnZhcmlhYmxlIG5hbWU9JnF1b3Q7d2lraSZxdW90OyB2YWx1 ZT0mcXVvdDtodHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kmcXVvdDsgLyZndDsKJmx0O3R4 cDpzbWRfd3JhcCB3cmFwdGFnPSZxdW90O2RpdiZxdW90OyBjbGFzcz0mcXVvdDtleHRlcm5h bCZxdW90OwogICAgIHRyYW5zZm9ybT0mcXVvdDtsaW5rfFRleHRwYXR0ZXJuIGRvY3VtZW50 YXRpb24mcXVvdDsmZ3Q7CiAgICZsdDt0eHA6dmFyaWFibGUgbmFtZT0mcXVvdDt3aWtpJnF1 b3Q7IC8mZ3Q7CiZsdDsvdHhwOnNtZF93cmFwJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlk PSJzbWRfd3JhcF9lZzIiPkV4YW1wbGUgMjogRGF0ZSBmb3JtYXR0aW5nPC9oMz4KCgk8cD5O b3RpY2UgdGhhdCBiZWNhdXNlIHdlJiM4MjE3O3JlIHVzaW5nIGEgY29tbWEgaW4gdGhlIGZv cm1hdHRlZCBzdHJpbmcsIHRoZSA8Y29kZT5kZWxpbTwvY29kZT4gbmVlZHMgdG8gYmUgYWx0 ZXJlZCB0byBzb21lIG90aGVyIChpbiB0aGlzIGNhc2UgYXJiaXRyYXJ5KSBzdHJpbmc6PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRf d3JhcCBkZWxpbT0mcXVvdDtAJnF1b3Q7CiAgICAgdHJhbnNmb3JtPSZxdW90O2RhdGV8JUEs ICVkICVCLCAlWSAlbDolTSVwJnF1b3Q7Jmd0OwoyMDExLTktMTIgMDU6MzA6MDAKJmx0Oy90 eHA6c21kX3dyYXAmZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9InNtZF93cmFwX2VnMyI+ RXhhbXBsZSAzOiBTcGxpdCBhbmQgam9pbjwvaDM+CgoJPHA+UmV0dXJuIGEgZmlsZW5hbWUg ZXh0ZW5zaW9uLiBOb3RpY2Ugbm8gam9pbiBjaGFyYWN0ZXIgaXMgc3BlY2lmaWVkIGluIHRo ZSB0aGlyZCBhcmd1bWVudCAoYWx0aG91Z2ggaXQgZG9lc24mIzgyMTc7dCBodXJ0IHRvIGlu Y2x1ZGUgb25lOyBpdCB3b24mIzgyMTc7dCBiZSB1c2VkIGluIHRoaXMgY2FzZSk6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfd3Jh cCB0cmFuc2Zvcm09JnF1b3Q7c3BsaXR8Lnx8bGFzdCZxdW90OwogICAgIGl0ZW09JnF1b3Q7 L3BhdGgvdG8vc29tZS9yZWFsbHkuYmlnLmZpbGUubmFtZS5qcGcmcXVvdDsgLyZndDsKPC9j b2RlPjwvcHJlPgoKCTxwPlJldHVybiB0aGUgZmlsZSBwYXRoIGFuZCBmaWxlbmFtZSBleHRl bnNpb24sIHNlcGFyYXRlZCBieSBjb2xvbiAoPGNvZGU+bGFzdDwvY29kZT4gaXMgdGhlIHNh bWUgYXMgPGNvZGU+LTE8L2NvZGU+KSA6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfd3JhcCB0cmFuc2Zvcm09JnF1b3Q7c3BsaXR8 Lnw6fDF8LTEmcXVvdDsmZ3Q7Ci9wYXRoL3RvL3NvbWUvcmVhbGx5LmJpZy5maWxlLm5hbWUu anBnCiZsdDsvdHhwOnNtZF93cmFwJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+U3BsaXQgdGhl IGRhdGUgcG9ydGlvbiBvZiBhIGNvbWJpbmVkIGRhdGV0aW1lIGFuZCBmb3JtYXQgaXQ6PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRf d3JhcCBkZWxpbT0mcXVvdDtAJnF1b3Q7CiAgICAgdHJhbnNmb3JtPSZxdW90O3NwbGl0fCB8 fDEgQCBkYXRlfCVBLCAlZCAlQiwgJVkmcXVvdDsmZ3Q7CjIwMTEtOS0xMiAwNTozMDowMAom bHQ7L3R4cDpzbWRfd3JhcCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk1ha2UgYW4gPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGxpc3QgZnJvbSBzb21lIG90aGVyIG1hcmt1cCBz eXN0ZW06PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpzbWRfd3JhcCB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7CiAgICAgdHJhbnNmb3JtPSZx dW90O3NwbGl0fCN8Jmx0Oy9saSZndDsmbHQ7bGkmZ3Q7fCZndDsxLCBhZGR8YmVmb3JlfCZs dDtsaSZndDssIGFkZHxhZnRlcnwmbHQ7L2xpJmd0OyZxdW90OyZndDsKIyBGaXJzdAojIFNl Y29uZAojIFRoaXJkCiMgRm91cnRoCiZsdDsvdHhwOnNtZF93cmFwJmd0Owo8L2NvZGU+PC9w cmU+CgoJPHA+QSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGUgYWJvdXQgdGhpcyBleGFtcGxl OjwvcD4KCgk8dWw+CgkJPGxpPlRoZSA8Y29kZT5hZGQ8L2NvZGU+IHRyYW5zZm9ybSBpcyB1 c2VkIGluc3RlYWQgb2YgcHJlZml4IC8gc3VmZml4LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxh dHRlciBwYWlyIGJlY29tZSBwYXJ0IG9mIHRoZSBpdGVtL2NvbnRhaW5lciBhbmQgYXJlIHRo ZW4gc3BsaXQgd2l0aCB0aGUgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiBhdHRyaWJ1dGUuIElu IHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGFkZCB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdz IGFmdGVyd2FyZHMuPC9saT4KCQk8bGk+U3BsaXR0aW5nIGF0ICYjODIxNjsjJiM4MjE3OyBy ZW5kZXJzIGFuIGVtcHR5IGVsZW1lbnQgYmVmb3JlIHRoZSAmIzgyMjA7Rmlyc3QmIzgyMjE7 IGVudHJ5LCBzbyB0aGUgdHJhbnNmb3JtIGlzIGluc3RydWN0ZWQgdG8gcmV0dXJuIGl0ZW1z IDxjb2RlPiZndDsxPC9jb2RlPi48L2xpPgoJPC91bD4KCgk8aDMgaWQ9InNtZF93cmFwX2Vn NCI+RXhhbXBsZSA0OiB3aXRoIHNtZF9xdWVyeSB7cmVwbGFjZW1lbnRzfTwvaDM+CgoJPHA+ V3JhcCB0aGUgY3VzdG9tXzYgdmFsdWUgd2l0aCBhIGRpdiBhbmQgc2FuaXRpemUgaXQgZm9y IHVzZSBpbiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBJZiBjdXN0b21fNiBp cyBlbXB0eSwgbm90aGluZyB3b3VsZCBiZSBkaXNwbGF5ZWQuPC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfcXVlcnkgcXVlcnk9JnF1 b3Q7U0VMRUNUICogRlJPTSB3aGVyZXZlciZxdW90OyZndDsKICAgJmx0O3R4cDpzbWRfd3Jh cCBpdGVtPSZxdW90O3tjdXN0b21fNn0mcXVvdDsgd3JhcHRhZz0mcXVvdDtkaXYmcXVvdDsK ICAgICB0cmFuc2Zvcm09JnF1b3Q7c2FuaXRpemV8dXJsJnF1b3Q7IC8mZ3Q7CiZsdDsvdHhw OnNtZF9xdWVyeSZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlvdSB3YW50ZWQgdG8gdHJh cCB0aGUgY29uZGl0aW9uIHdoZW4gY3VzdG9tXzYgbWlnaHQgYmUgZW1wdHk6PC9wPgoKPHBy ZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfcXVlcnkg cXVlcnk9JnF1b3Q7U0VMRUNUICogRlJPTSB3aGVyZXZlciZxdW90OyZndDsKICAgJmx0O3R4 cDpzbWRfd3JhcCB3cmFwdGFnPSZxdW90O2RpdiZxdW90OyB0cmFuc2Zvcm09JnF1b3Q7c2Fu aXRpemV8dXJsJnF1b3Q7Jmd0OwogICAgICB7Y3VzdG9tXzZ9CiAgICZsdDt0eHA6ZWxzZSAv Jmd0OwogICAgICAmbHQ7cCZndDtTb3JyeSwgY3VzdG9tXzYgaXMgZW1wdHkmbHQ7L3AmZ3Q7 CiAgICZsdDsvdHhwOnNtZF93cmFwJmd0OwombHQ7L3R4cDpzbWRfcXVlcnkmZ3Q7CjwvY29k ZT48L3ByZT4KCgk8aDMgaWQ9InNtZF93cmFwX2VnNSI+RXhhbXBsZSA1OiBmaW5kIC8gcmVw bGFjZTwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7 dHhwOnNtZF93cmFwCiAgICAgdHJhbnNmb3JtPSZxdW90O3JlcGxhY2V8fGZveHxiYWRnZXIm cXVvdDsmZ3Q7CkZhcmV3ZWxsIG15IGZveCwgaXQmIzM5O3MgYmVlbiBmdW4hCiZsdDsvdHhw OnNtZF93cmFwJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Tm90ZSB0aGF0IHRoZSAybmQgcGFy YW1ldGVyICgmIzgyMTY7dHlwZSYjODIxNzspIGhhcyBiZWVuIG9taXR0ZWQuIFlvdSBjb3Vs ZCBzcGVjaWZ5ICYjODIxNjtzdHJpbmcmIzgyMTc7IGhlcmUgaWYgeW91IHdpc2hlZC48L3A+ CgoJPGgyPkNoYW5nZWxvZzwvaDI+CgoJPHA+MjIgTm92IDIwMTEgfCAwLjEwIHwgSW5pdGlh bCByZWxlYXNlPC9wPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0t Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUg O30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUg IkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAj ZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWln aHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5OmJsb2NrOyBtYXJn aW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBmb250 OiAyMnB4IEdlb3JnaWEsIHNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsg fQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRp bmc6MTBweCAwIDA7IGZvbnQ6IDE4cHggR2VvcmdpYSwgc2VyaWY7IH0KI3NtZF9oZWxwIGgz IHsgZm9udDogYm9sZCAxM3B4IEdlb3JnaWEsIHNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4 OyBtYXJnaW46IDIwcHggMCAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB9CiNzbWRf aGVscCBoNCB7IGZvbnQ6IGJvbGQgMTJweCBHZW9yZ2lhLCBzZXJpZjsgbGV0dGVyLXNwYWNp bmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg fQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFu ZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hl bHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRv bToxZW07IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgfQojc21kX2hlbHAgdGQsICNzbWRf aGVscCB0aCB7IGJvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtOyB9CiNzbWRf aGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRh bnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAz MHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQojc21kX2hlbHAg ZGwgZGQgeyBtYXJnaW46MnB4IDE1cHg7IH0KI3NtZF9oZWxwIGRsIGRkOmJlZm9yZSB7IGNv bnRlbnQ6ICJcMjAyMlwwMGEwIjsgfQojc21kX2hlbHAgZGwgZGQgZGwgeyBwYWRkaW5nOiAw IDE1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6 MzoibWQ1IjtzOjMyOiJiNjNjNDc4MjUxMjhkZDAyMGYwMzE1NjgxZWE2NDQ4YiI7fQ==