# Name: smd_calendar v0.42 # Type: Client side plugin # Calendar / event / schedule system with events as TXP articles # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDIiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjY2MDI0OiIvLyBCYXNlZCBvbiBtZHBfY2Fs ZW5kYXIgLSB0aGFua3MgTWFyc2hhbGwhDQppZiggJGRhdGUgPSBncHMoJ2RhdGUnKSApIHsN CgkkX0dFVFsnbW9udGgnXSA9ICRkYXRlOw0KfQ0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJHZh cmlhYmxlLCAkcHJlZnMsICRzbWRfY2FsX2ZsYWcsICRzbWRfZGF0ZSwgJHNtZF9jYWxpbmZv LCAkc21kX2NhbF91Y2xzOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUnID0+ ICdhbnknLA0KCQknc2l6ZScgPT4gJ2xhcmdlJywNCgkJJ2V4cGlyZWQnID0+ICcnLA0KCQkn Y2F0ZWdvcnknID0+ICcnLA0KCQknc2VjdGlvbicgPT4gJycsDQoJCSdhdXRob3InID0+ICcn LA0KCQkncmVhbG5hbWUnID0+ICcnLA0KCQknc3RhdHVzJyA9PiAnbGl2ZScsDQoJCSdzaG93 YWxsJyA9PiAnMCcsDQoJCSdzdGF0aWMnID0+ICcnLA0KCQknZm9ybScgPT4gJycsDQoJCSdz cGFuZm9ybScgPT4gJ1NNRF9TQU1FJywNCgkJJ3JlY3VyZm9ybScgPT4gJ1NNRF9TQU1FJywN CgkJJ2NlbGxmb3JtJyA9PiAnJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJCSdza2lwZmll bGQnID0+ICcnLA0KCQknb21pdGZpZWxkJyA9PiAnJywNCgkJJ2V4dHJhZmllbGQnID0+ICcn LA0KCQknZXh0cmFzdHJpY3QnID0+ICcwJywNCgkJJ2RhdGVmaWVsZHMnID0+ICcnLA0KCQkn c2hvd3NraXBwZWQnID0+ICcwJywNCgkJJ3Nob3dzcGFubmVkJyA9PiAnMScsDQoJCSdob2xp ZGF5cycgPT4gJycsDQoJCSdob2xpZGF5ZmxhZ3MnID0+ICdzdGFuZGFyZCcsDQoJCSdjbGFz c2xldmVscycgPT4gJ2NlbGwsIGV2ZW50JywNCgkJJ2xpbmtwb3N0ZWQnID0+ICdyZWN1ciwg bXVsdGksIG11bHRpcHJldiwgbXVsdGlsYXN0JywNCgkJJ2NsYXNzcHJlZml4ZXMnID0+ICdz bWRfY2FsXywgc21kX2NhbF9ldl8nLA0KCQknY2xhc3MnID0+ICcnLA0KCQkncm93Y2xhc3Mn ID0+ICcnLA0KCQknY2VsbGNsYXNzJyA9PiAnJywNCgkJJ2VtcHR5Y2xhc3MnID0+ICdlbXB0 eScsDQoJCSdpc293ZWVrY2xhc3MnID0+ICd3ZWVrJywNCgkJJ25hdmNsYXNzJyA9PiAnbmF2 cHJldiwgbmF2bmV4dCcsDQoJCSduYXZhcnJvdycgPT4gJyYjNjA7LCAmIzYyOycsDQoJCSdu YXZpZCcgPT4gJycsDQoJCSdldmVudGNsYXNzZXMnID0+ICdjYXRlZ29yeScsDQoJCSdldmVu dHdyYXB0YWcnID0+ICdzcGFuJywNCgkJJ3NlbGVjdCcgPT4gJycsDQoJCSdzZWxlY3RidG4n ID0+ICcnLA0KCQknbXljbGFzcycgPT4gJycsDQoJCSdteXdyYXB0YWcnID0+ICcnLA0KCQkn aWQnID0+ICcnLA0KCQknd2VlaycgPT4gJycsDQoJCSdtb250aCcgPT4gJycsDQoJCSd5ZWFy JyA9PiAnJywNCgkJJ3JlbWFwJyA9PiAnJywNCgkJJ3llYXJ3aWR0aCcgPT4gJzAnLA0KCQkn aXNvd2Vla3MnID0+ICcnLA0KCQknZGF5Zm9ybWF0JyA9PiAnQUJCUicsDQoJCSdtb250aGZv cm1hdCcgPT4gJ0ZVTEwnLA0KCQknZmlyc3RkYXknID0+IDAsDQoJCSdtYWludGFpbicgPT4g J2NhbGlkJywNCgkJJ25hbWV2YWwnID0+ICcnLA0KCQknZ210JyA9PiAwLA0KCQknbGFuZycg PT4gJycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkpLCAkYXR0cykpOw0KDQoJJGZ1dHVyZSA9ICgg JHRpbWUgIT0gJ3Bhc3QnICkgPyB0cnVlIDogZmFsc2U7IC8vIERldGVybWluZSBoZWFkaW5n IHN0eWxlDQoJJHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0dXMgOiAnbGl2ZSc7IC8vIGlu IGNhc2Ugc3RhdHVzIGlzIGVtcHR5DQoJJGZpcnN0ZGF5ID0gKCRpc293ZWVrcyA9PSAnJykg PyAkZmlyc3RkYXkgOiAxOw0KCSRzcGFuZm9ybSA9ICgkc3BhbmZvcm0gPT0gJ1NNRF9TQU1F JykgPyAkZm9ybSA6ICRzcGFuZm9ybTsNCgkkcmVjdXJmb3JtID0gKCRyZWN1cmZvcm0gPT0g J1NNRF9TQU1FJykgPyAkZm9ybSA6ICRyZWN1cmZvcm07DQoJJGNlbGxmb3JtID0gKGVtcHR5 KCRjZWxsZm9ybSkpID8gJycgOiBmZXRjaF9mb3JtKCRjZWxsZm9ybSk7DQoJJGZyb250cGFn ZSA9ICgkc2VjdGlvbj09JycgJiYgJHByZXRleHRbJ3MnXT09J2RlZmF1bHQnKSA/IHRydWUg OiBmYWxzZTsNCg0KCS8vIFNldCB1cCB0aGUgY2xhc3MgcHJlZml4ZXMNCgkkY2xldnMgPSBk b19saXN0KCRjbGFzc2xldmVscyk7DQoJJGNscyA9IGRvX2xpc3QoJGNsYXNzcHJlZml4ZXMp Ow0KCSRjbHNfcGZ4ID0gJGV2Y19wZnggPSAkY2xzWzBdOw0KCWlmIChjb3VudCgkY2xzKSA+ IDEpew0KCQkkZXZjX3BmeCA9ICRjbHNbMV07DQoJfQ0KDQoJLy8gU2V0IHVwIHRoZSBuYXYg Y2xhc3MoZXMpDQoJJG1haW50YWluID0gZG9fbGlzdCgkbWFpbnRhaW4pOw0KCSRuYXZhcnJv dyA9IGRvX2xpc3QoJG5hdmFycm93KTsNCgkkbmF2cGFyciA9ICRuYXZhcnJvd1swXTsNCgkk bmF2bmFyciA9IChjb3VudCgkbmF2YXJyb3cpID4gMSkgPyAkbmF2YXJyb3dbMV0gOiAkbmF2 YXJyb3dbMF07DQoJJG5hdmNsYXNzID0gZG9fbGlzdCgkbmF2Y2xhc3MpOw0KCSRuYXZwY2xh c3MgPSAkbmF2Y2xhc3NbMF07DQoJJG5hdm5jbGFzcyA9IChjb3VudCgkbmF2Y2xhc3MpID4g MSkgPyAkbmF2Y2xhc3NbMV0gOiAkbmF2Y2xhc3NbMF07DQoNCgkvLyBGaWx0ZXJzDQoJJGZv cHRzID0gYXJyYXkoKTsNCgkkY2F0U1FMID0gJHNlY1NRTCA9ICRhdXRoU1FMID0gJGZwU1FM ID0gJyc7DQoJaWYoJGNhdGVnb3J5KSB7DQoJCSRmb3B0c1snYyddID0gJGNhdGVnb3J5Ow0K CQkkY2F0U1FMID0gZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGNhdGVn b3J5KSkpKTsNCgkJJGNhdFNRTCA9ICIgQU5EICggQ2F0ZWdvcnkxIElOICgiLiRjYXRTUUwu IikgT1IgQ2F0ZWdvcnkyIElOICgiLiRjYXRTUUwuIikgKSAiOw0KCX0NCglpZigkc2VjdGlv bikgew0KCQkkc2VjcyA9IGRvX2xpc3QoJHNlY3Rpb24pOw0KCQkkc21kX2NhbGluZm9bJ3Mn XSA9ICRzZWNzWzBdOw0KCQkkc2VjU1FMID0gZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNo KCRzZWNzKSkpOw0KCQkkc2VjU1FMID0gIiBBTkQgU2VjdGlvbiBJTiAoIi4kc2VjU1FMLiIp ICI7DQoJfQ0KCWlmKCRyZWFsbmFtZSkgew0KCQkkYXV0aG9ycyA9IHNhZmVfY29sdW1uKCdu YW1lJywgJ3R4cF91c2VycycsICdSZWFsTmFtZSBJTiAoJy4gZG9RdW90ZShqb2luKCInLCci LCBkb0FycmF5KGRvX2xpc3QoJHJlYWxuYW1lKSwgJ3VybGRlY29kZScpKSkgLicpJyApOw0K CQkkYXV0aG9yID0gam9pbignLCcsICRhdXRob3JzKTsNCgl9DQoJaWYoJGF1dGhvcikgew0K CQkkZm9wdHNbJ2F1dGhvciddID0gaHRtbGVudGl0aWVzKGdwcygnYXV0aG9yJykpOw0KCQkk YXV0aFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRhdXRob3Ip KSkpOw0KCQkkYXV0aFNRTCA9ICIgQU5EIEF1dGhvcklEIElOICgiLiRhdXRoU1FMLiIpICI7 DQoJfQ0KCWlmICgkZnJvbnRwYWdlICYmICEkc2hvd2FsbCkgew0KCQkkZnBTUUwgPSBmaWx0 ZXJGcm9udFBhZ2UoKTsNCgl9DQoJJHNtZF9jYWxpbmZvWydhcnRpZCddID0gJHRoaXNhcnRp Y2xlWyd0aGlzaWQnXTsNCgkkc21kX2NhbGluZm9bJ2FydGl0bGUnXSA9ICR0aGlzYXJ0aWNs ZVsndXJsX3RpdGxlJ107DQoJJG5hbWV2YWwgPSBkb19saXN0KCRuYW1ldmFsKTsNCglmb3Jl YWNoICgkbmFtZXZhbCBhcyAkbnYpIHsNCgkJJG52ID0gZXhwbG9kZSgiPSIsICRudik7DQoJ CWlmICgkbnZbMF0pIHsNCgkJCSRmb3B0c1skbnZbMF1dID0gKChpc3NldCgkbnZbMV0pKSA/ ICRudlsxXSA6ICcnKTsNCgkJfQ0KCX0NCgkkc3RhdHVzID0gZG9fbGlzdCgkc3RhdHVzKTsN Cgkkc3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMgYXMgJHN0YXQpIHsNCgkJ aWYgKGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0gZWxzZSBpZiAoaXNfbnVt ZXJpYygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJCX0gZWxzZSB7DQoJCQkk c3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9DQoJJHN0YXRpID0gIiBT dGF0dXMgSU4gKCIuam9pbignLCcsICRzdGF0aSkuIikiOw0KDQoJJGV4cGlyZWQgPSAoJGV4 cGlyZWQpID8gJGV4cGlyZWQgOiAkcHJlZnNbJ3B1Ymxpc2hfZXhwaXJlZF9hcnRpY2xlcydd Ow0KCSRleHBpcmVkID0gKCgkZXhwaXJlZCkgPyAnJyA6ICcgQU5EIChub3coKSA8PSBFeHBp cmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4nKScpOw0KCSRldmVudGNsYXNzZXMg PSBkb19saXN0KCRldmVudGNsYXNzZXMpOw0KCSRob2xpZGF5ZmxhZ3MgPSBkb19saXN0KCRo b2xpZGF5ZmxhZ3MpOw0KCSRsaW5rcG9zdGVkID0gZG9fbGlzdCgkbGlua3Bvc3RlZCk7DQoJ JGRhdGVmaWVsZHMgPSBkb19saXN0KCRkYXRlZmllbGRzKTsNCg0KCS8vIFdvcmsgb3V0IHRo ZSBmaXJzdCBhbmQgbGFzdCBwb3N0cyB0byBkZXRlcm1pbmUgdGhlIHllYXIgcmFuZ2UgLSBw cm9iYWJseSBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcyB0aGFuIDMgcXVlcmllcw0KCSRm aWx0ID0gJHN0YXRpIC4gKCgkY2F0ZWdvcnkpID8gJGNhdFNRTCA6ICcnKSAuICgoJHNlY3Rp b24pID8gJHNlY1NRTCA6ICcnKSAuICgoJGF1dGhvcikgPyAkYXV0aFNRTCA6ICcnKSAuICRm cFNRTDsNCgkkZWFybGllc3QgPSBzYWZlX2ZpZWxkKCd1bml4X3RpbWVzdGFtcChQb3N0ZWQp IEFTIHVQb3N0ZWQnLCAndGV4dHBhdHRlcm4nLCAkZmlsdCAuJyBPUkRFUiBCWSBQb3N0ZWQg QVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSRscCA9IHNhZmVfZmllbGQoJ3VuaXhfdGlt ZXN0YW1wKFBvc3RlZCkgQVMgdVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRmaWx0IC4nIE9S REVSIEJZIFBvc3RlZCBERVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSRsbSA9IHNhZmVf ZmllbGQoJ3VuaXhfdGltZXN0YW1wKExhc3RNb2QpIEFTIHVMYXN0TW9kJywgJ3RleHRwYXR0 ZXJuJywgJGZpbHQgLicgT1JERVIgQlkgTGFzdE1vZCBERVNDIExJTUlUIDAsIDEnLCAkZGVi dWcpOw0KCSRsYXRlc3QgPSAoJHRpbWU9PSJwYXN0IikgPyB0aW1lKCkgOiAoKCRscCA+ICRs bSkgPyAkbHAgOiAkbG0pOw0KDQoJJHllYXJ3aWR0aCA9IGRvX2xpc3QoJHllYXJ3aWR0aCk7 DQoJJHllYXJ3aWR0aFswXSA9IChlbXB0eSgkeWVhcndpZHRoWzBdKSkgPyAwIDogJHllYXJ3 aWR0aFswXTsNCglpZiAoY291bnQoJHllYXJ3aWR0aCkgPT0gMSkgew0KCQkkeWVhcndpZHRo WzFdID0gJHllYXJ3aWR0aFswXTsNCgl9DQoJJHVzZW5vdyA9IGFycmF5KGZhbHNlLGZhbHNl KTsNCglmb3JlYWNoICgkeWVhcndpZHRoIGFzICR5cmlkeCA9PiAkeXJpdGVtKSB7DQoJCWlm IChzdHJwb3MoJHlyaXRlbSwiYyIpICE9PSBmYWxzZSkgew0KCQkJJHllYXJ3aWR0aFskeXJp ZHhdID0gaW50dmFsKCR5cml0ZW0pOw0KCQkJJHVzZW5vd1skeXJpZHhdID0gdHJ1ZTsNCgkJ fQ0KCX0NCg0KCS8vIFJlbWFwIHcvbS95IHRvIG90aGVyIHZhcnMgaWYgcmVxdWlyZWQNCgkk cmVtYXAgPSBkb19saXN0KCRyZW1hcCk7DQoJJGRtYXAgPSBhcnJheSgieSIgPT4gInkiLCAi bSIgPT4gIm0iLCAidyIgPT4gInciKTsNCglmb3JlYWNoICgkcmVtYXAgYXMgJGRwYWlyKSB7 DQoJCSRkcGFpciA9IGRvX2xpc3QoJGRwYWlyLCAnOicpOw0KCQkkZG1hcFskZHBhaXJbMF1d ID0gKGlzc2V0KCRkcGFpclsxXSkpID8gJGRwYWlyWzFdIDogJGRwYWlyWzBdOw0KCX0NCgkk ZWFybGllc3QgPSBkYXRlKCJZIiwgc3RydG90aW1lKCItIi4keWVhcndpZHRoWzBdLiIgeWVh ciIsICggKGVtcHR5KCRlYXJsaWVzdCkgfHwgJHVzZW5vd1swXT09dHJ1ZSkgPyB0aW1lKCkg OiAkZWFybGllc3QpICkgKTsNCgkkbGF0ZXN0ID0gZGF0ZSgiWSIsIHN0cnRvdGltZSgiKyIu JHllYXJ3aWR0aFsxXS4iIHllYXIiLCAoIChlbXB0eSgkbGF0ZXN0KSB8fCAkdXNlbm93WzFd PT10cnVlKSA/IHRpbWUoKSA6ICRsYXRlc3QpICkgKTsNCg0KCS8vIENoZWNrIHRoZSBVUkwg Zm9yIGN1cnJlbnQgZGF0ZSBhbmQgY2FsZW5kYXIgdGFyZ2V0IGluZm8NCgkkaW5fY2FsaWQg PSBncHMoJ2NhbGlkJyk7DQoJJGluX3llYXIgPSAoZ3BzKCRkbWFwWyJ5Il0pIGFuZCBpc19u dW1lcmljKGdwcygkZG1hcFsieSJdKSkpID8gKGludClncHMoJGRtYXBbInkiXSkgOiAnJzsN CgkkaW5fbW9udGggPSAoZ3BzKCRkbWFwWyJtIl0pIGFuZCBpc19udW1lcmljKGdwcygkZG1h cFsibSJdKSkpID8gKGludClncHMoJGRtYXBbIm0iXSkgOiAnJzsNCgkkaW5fd2VlayA9IChn cHMoJGRtYXBbInciXSkgYW5kIGlzX251bWVyaWMoZ3BzKCRkbWFwWyJ3Il0pKSkgPyAoaW50 KWdwcygkZG1hcFsidyJdKSA6ICcnOw0KDQoJaWYoJHN0YXRpYykgeyAvLyBpZiB3ZSdyZSBz dGF0aWMgdy9vIGFueSBzdXBwbGllZCB2YXJzLCB1c2UgdGhlIGN1cnJlbnQgZGF0ZQ0KCQlp ZighJHllYXIpIHsgJHllYXIgPSBzYWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJCWlmKCEkbW9u dGgpIHsgJG1vbnRoID0gc2FmZV9zdHJmdGltZSgnJW0nKTsgfQ0KCX0gZWxzZSB7IC8vIG90 aGVyd2lzZSB1c2UgY3VycmVudCBkYXRlIG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIGVsc2UN CgkJaWYoICRpZCA9PSAkaW5fY2FsaWQgKSB7IC8vIHVzZSBpbmNvbWluZw0KCQkJJHllYXIg PSAoJGluX3llYXIpID8gJGluX3llYXIgOiAoKCR5ZWFyKSA/ICR5ZWFyIDogc2FmZV9zdHJm dGltZSgnJVknKSk7DQoJCQkkbW9udGggPSAoJGluX21vbnRoKSA/ICRpbl9tb250aCA6ICgo JG1vbnRoKSA/ICRtb250aCA6IHNhZmVfc3RyZnRpbWUoJyVtJykpOw0KCQkJLy8gSWYgd2Vl ayBpcyB1c2VkLCBhZGp1c3QgbW9udGggc28gaXQgZW5jb21wYXNzZXMgdGhlIGdpdmVuIHdl ZWsNCgkJCSR3ZWVrID0gJGluX3dlZWs7DQoJCQlpZiAoJHdlZWspIHsNCgkJCQkkbW9udGgg PSBzYWZlX3N0cmZ0aW1lKCIlbSIsIHN0cnRvdGltZSgkeWVhci4iVyIuc3RyX3BhZCgkd2Vl aywgMiwgJzAnLCBTVFJfUEFEX0xFRlQpKSk7IC8vIEdldCB0aGUgbW9udGggZnJvbSB0aGUg d2Vlaw0KCQkJfQ0KCQl9IGVsc2UgeyAvLyB1c2UgY3VycmVudA0KCQkJaWYoISR5ZWFyKSB7 ICR5ZWFyID0gc2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQkJaWYoISRtb250aCkgeyAkbW9u dGggPSBzYWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJCQlpZigkd2VlaykgeyAkbW9udGggPSBz YWZlX3N0cmZ0aW1lKCIlbSIsIHN0cnRvdGltZSgkeWVhci4iVyIuc3RyX3BhZCgkd2Vlaywg MiwgJzAnLCBTVFJfUEFEX0xFRlQpKSk7IH0NCgkJfQ0KCX0NCgkkc21kX2NhbGluZm9bJ2lk J10gPSAoJGluX2NhbGlkKSA/ICRpbl9jYWxpZCA6ICRpZDsNCgkkc21kX2RhdGVbJ3knXSA9 ICR5ZWFyOyAkc21kX2RhdGVbJ20nXSA9ICRtb250aDsgLy8gJHdlZWsvZGF5L2lzb3llYXIg YXJlIHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCS8vIFRoZSB0aW1lcyBpbiB0aGUgREIgYXJl IHN0b3JlZCB1c2luZyB0aGUgc2VydmVyJ3MgbG9jYWwgdGltZSwgc28gd2UgZG9uJ3QNCgkv LyB3YW50IHRvIGFkanVzdCBhbnl0aGluZyAoc2luY2UgbWt0aW1lIHVzZXMgdGhlIHNlcnZl cidzIGxvY2FsIHRpbWUpLg0KCS8vVE9ETzogV29ycnkgYWJvdXQgZ210IC8gZHN0DQoJJHRz X2ZpcnN0ID0gbWt0aW1lKDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIpOw0KCSR0c19sYXN0 ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0ZSgndCcsJHRzX2ZpcnN0KSwgJHll YXIpOw0KDQoJJGV4dHJhc3FsID0gJGNhdFNRTCAuICRzZWNTUUwgLiAkYXV0aFNRTCAuICRm cFNRTDsNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IGJyZWFrOw0KCQljYXNl ICJmdXR1cmUiIDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA+IENVUkRBVEUoKSI7IGJy ZWFrOw0KCQlkZWZhdWx0IDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA8IENVUkRBVEUo KSI7IGJyZWFrOyAvLyBUaGUgcGFzdA0KCX0NCg0KCS8vIEhvbGlkYXlzIGFyZSBnbG9iYWwg J2V4Y2x1c2lvbnMnLCBlaXRoZXIgZGVmaW5lZCBkaXJlY3RseSBvciBpbiBhIHR4cDp2YXJp YWJsZQ0KCSRob2xpZGF5cyA9IGRvX2xpc3QoJGhvbGlkYXlzKTsNCgkkdHhwaG9scyA9IGRv X2xpc3QoJGhvbGlkYXlzWzBdLCAiOiIpOw0KCWlmICgkdHhwaG9sc1swXSA9PSAidHhwdmFy Iikgew0KCQkkaG9saWRheXMgPSBkb19saXN0KCR2YXJpYWJsZVskdHhwaG9sc1sxXV0pOw0K CX0NCgkvLyBGb3JjZSBlYWNoIGhvbGlkYXkgdG8gYSBrbm93biBmb3JtYXQuIEhvbGlkYXlz IHdpdGhvdXQgeWVhcnMgdXNlIGN1cnJlbnQgeWVhcg0KCWZvcmVhY2ggKCRob2xpZGF5cyBh cyAka2V5ID0+ICR2YWwpIHsNCgkJaWYgKGVtcHR5KCR2YWwpKSBjb250aW51ZTsNCgkJJG51 bXBhcnRzID0gcHJlZ19tYXRjaCgnL14oW1xkXHddKykuPyhbXGRcd10rKS4/KFtcZFx3XSsp PyQvJywgJHZhbCwgJHBhcnRzKTsNCg0KCQlpZiAoJG51bXBhcnRzKSB7DQoJCQlpZiAoY291 bnQoJHBhcnRzKSA9PSAzKSB7DQoJCQkJJHBhcnRzWzNdID0gJHllYXI7DQogICAgICAgICB9 DQoJCQkkdmFsID0gc3RyX3BhZCgkcGFydHNbMV0sIDIsICcwJywgU1RSX1BBRF9MRUZUKS4n LScuc3RyX3BhZCgkcGFydHNbMl0sIDIsICcwJywgU1RSX1BBRF9MRUZUKS4nLScuJHBhcnRz WzNdOw0KCQl9DQoJCSRob2xpZGF5c1ska2V5XSA9IGRhdGUoImQtTS1ZIiwgc3RydG90aW1l KCR2YWwpKTsNCgl9DQoNCglpZiAoJGRlYnVnID4gMCAmJiAhZW1wdHkoJGhvbGlkYXlzKSAm JiAkaG9saWRheXNbMF0gIT0gJycpIHsNCgkJZWNobyAiKysgSE9MSURBWVMgKysgIjsNCgkJ ZG1wKCRob2xpZGF5cyk7DQoJfQ0KDQoJLy8gR2V0IGFsbCBtYXRjaGluZyBhcnRpY2xlcyBp biAoYW5kIGJlZm9yZSkgdGhpcyBtb250aA0KCSRldmVudHMgPSBhcnJheSgpOw0KCSRzcWwy ID0gJHN0YXRpIC4gIiBIQVZJTkcgdVBvc3RlZCA8PSAiLiR0c19sYXN0IC4gJGV4cGlyZWQg LiAkZXh0cmFzcWwgLiIgT1JERVIgQlkgUG9zdGVkIEFTQyI7DQoJJGdyYWJDb2xzID0gJyos IHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFz dE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVz JzsNCgkkZXZsaXN0ID0gc2FmZV9yb3dzKCRncmFiQ29scywgJ3RleHRwYXR0ZXJuJywgJHNx bDIsICRkZWJ1Zyk7DQoJYXJ0aWNsZV9wdXNoKCk7DQoNCgkvLyBJZiBhbnkgZXZlbnRzIHJl Y3VyIGFuZCBmYWxsIHdpdGhpbiB0aGUgY3VycmVudCBtb250aCwgYWRkIHRob3NlIGFzIHdl bGwNCgkvLyBJZiBhbnkgZGF0ZXMgYXJlIHRvIGJlIGV4Y2x1ZGVkLCB0aGUgZW50cnkgaXMg c2tpcHBlZCBVTkxFU1Mgc2hvd3NraXBwZWQgaW5kaWNhdGVzIG90aGVyd2lzZQ0KCWZvcmVh Y2ggKCRldmxpc3QgYXMgJHJvdykgew0KCQkkaWR4ID0gMDsgLy8gSW4gY2FzZSB0aGUgMXN0 IGRheSBvZiB0aGUgbW9udGggaXMgYSBjb250aW51YXRpb24gb2YgYW4gZXZlbnQgZnJvbSB0 aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBtb250aA0KCQkkc3RhcnQgPSAoIWVtcHR5KCRkYXRl ZmllbGRzWzBdKSAmJiAhZW1wdHkoJHJvd1skZGF0ZWZpZWxkc1swXV0pICYmICgkc3RkdCA9 IHN0cnRvdGltZSgkcm93WyRkYXRlZmllbGRzWzBdXSkpICE9PSBmYWxzZSkgPyAkc3RkdCA6 ICRyb3dbJ3VQb3N0ZWQnXTsNCgkJJHN0YXJ0X2RhdGUgPSBkYXRlKCJZLW0tZCIsICRzdGFy dCk7IC8vIEZvciByZWN1cnJpbmcvc3Bhbm5lZCBldmVudHMgb24gYSBtaW5pY2FsLCB0aGlz IGlzIHRoZSBldmVudCB0aGUgY2VsbCBsaW5rcyB0bw0KCQkkcmVhbF9lbmQgPSAoaXNzZXQo JGRhdGVmaWVsZHNbMV0pICYmICFlbXB0eSgkcm93WyRkYXRlZmllbGRzWzFdXSkgJiYgKCRl bmR0ID0gc3RydG90aW1lKCRyb3dbJGRhdGVmaWVsZHNbMV1dKSkgIT09IGZhbHNlKSA/ICRl bmR0IDogJHJvd1sndUV4cGlyZXMnXTsNCg0KCQkvLyBJZiBlbmQgPCBzdGFydCB0aGUgdXNl ci1zcGVjaWZpZWQgZGF0ZXMgY2Fubm90IGJlIHRydXN0ZWQNCgkJaWYgKCRyZWFsX2VuZCAh PSAwICYmICRyZWFsX2VuZCA8PSAkc3RhcnQpIHsNCgkJCSRzdGFydCA9ICRyb3dbJ3VQb3N0 ZWQnXTsNCgkJCSRyZWFsX2VuZCA9ICRyb3dbJ3VFeHBpcmVzJ107DQoJCQl0cmlnZ2VyX2Vy cm9yKCdFeHBpcnkgY2Fubm90IGJlIGJlZm9yZSBzdGFydCBkYXRlIGluICInLiRyb3dbJ1Rp dGxlJ10uJyI6IGlnbm9yZWQnLCBFX1VTRVJfV0FSTklORyk7DQoJCX0NCg0KCQkkZW5kID0g KCRyZWFsX2VuZCAhPSAwICYmICRyZWFsX2VuZCA8ICR0c19sYXN0KSA/ICRyZWFsX2VuZCA6 ICR0c19sYXN0Ow0KCQkkcmVhbF9kaWZmID0gKCRyZWFsX2VuZD09MCkgPyAwIDogJHJlYWxf ZW5kIC0gJHN0YXJ0Ow0KCQkkZmFrZV9kaWZmID0gc3RydG90aW1lKGRhdGUoIlktTS1kIiwg JHJlYWxfZW5kKSAuICIgMjM6NTk6NTkiKTsNCgkJJGRpZmYgPSAoJHJlYWxfZW5kPT0wKSA/ IDAgOiAkZmFrZV9kaWZmIC0gJHN0YXJ0Ow0KCQkkc21kX2NhbF9mbGFnID0gJHNtZF9jYWxf dWNscyA9IGFycmF5KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCWVjaG8gJysrIEVW RU5UIFNUQVJUIC8vIEVORCAvLyBSRUFMIEVORCArKyc7DQoJCQlkbXAoJHJvd1snVGl0bGUn XSk7DQoJCQlkbXAoZGF0ZSgnZC1NLVkgSDppOnMnLCAkc3RhcnQpIC4nIC8vICcuIGRhdGUo J2QtTS1ZIEg6aTpzJywgJGVuZCkgLicgLy8gJy4gZGF0ZSgnZC1NLVkgSDppOnMnLCAkcmVh bF9lbmQpKTsNCgkJCWlmICgkZGVidWcgPiAyKSB7DQoJCQkJZG1wKCRyb3cpOw0KCQkJfQ0K CQl9DQoNCgkJJG11bHRpID0gKCRyZWFsX2VuZCA+ICRzdGFydCAmJiAkcmVhbF9lbmQgPiAk dHNfZmlyc3QgJiYgKGRhdGUoImQtbS1ZIiwgJHJlYWxfZW5kKSAhPSBkYXRlKCJkLW0tWSIs ICRzdGFydCkpKSA/IHRydWUgOiBmYWxzZTsNCgkJJHJlY3VyID0gKGVtcHR5KCRyb3dbJHN0 ZXBmaWVsZF0pKSA/IGZhbHNlIDogdHJ1ZTsNCgkJJGhvbF9oaXQgPSBpbl9hcnJheShkYXRl KCJkLU0tWSIsICRzdGFydCksICRob2xpZGF5cyk7DQoJCSRldmNsYXNzZXMgPSBhcnJheSgp Ow0KCQlmb3JlYWNoICgkZXZlbnRjbGFzc2VzIGFzICRldmNscykgew0KCQkJc3dpdGNoICgk ZXZjbHMpIHsNCgkJCQljYXNlICIiOg0KCQkJCQlicmVhazsNCgkJCQljYXNlICJnY2F0IjoN CgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydjJ10pICYmICFlbXB0eSgkcHJldGV4dFsnYydd KSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHByZXRleHRbJ2MnXTsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJjYXRlZ29yeSI6DQoJCQkJCWlmIChpc3Nl dCgkcm93WydDYXRlZ29yeTEnXSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MSddKSkgew0K CQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1snQ2F0ZWdvcnkxJ107DQoJCQkJ CX0NCgkJCQkJaWYgKGlzc2V0KCRyb3dbJ0NhdGVnb3J5MiddKSAmJiAhZW1wdHkoJHJvd1sn Q2F0ZWdvcnkyJ10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjX3BmeC4kcm93WydD YXRlZ29yeTInXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJzZWN0aW9uIjoN CgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydzJ10pICYmICFlbXB0eSgkcHJldGV4dFsncydd KSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHByZXRleHRbJ3MnXTsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJhdXRob3IiOg0KCQkJCQlpZiAoaXNzZXQo JHByZXRleHRbJ2F1dGhvciddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2F1dGhvciddKSkgew0K CQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHByZXRleHRbJ2F1dGhvciddOw0KCQkJ CQl9DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCWlmIChpc3NldCgkcm93WyRl dmNsc10pICYmICFlbXB0eSgkcm93WyRldmNsc10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10g PSAkZXZjX3BmeC4kcm93WyRldmNsc107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9DQoJ CX0NCgkJJGV2Y2xhc3NlcyA9ICgkZXZjbGFzc2VzKSA/ICcgJy4gam9pbignICcsICRldmNs YXNzZXMpIDogJyc7DQoJCSRpZ25vcmUgPSAkb21pdCA9ICRjZmxhZyA9IGFycmF5KCk7DQoN CgkJaWYgKCRkZWJ1ZyA+IDEgJiYgJGV2Y2xhc3Nlcykgew0KCQkJZWNobyAnKysgRVZFTlQg Q0xBU1NFUyArKyc7DQoJCQlkbXAoJGV2Y2xhc3Nlcyk7DQoJCX0NCg0KCQkvLyBFdmVudHMg dGhhdCBzdGFydCBvciBhcmUgYWRkZWQgdGhpcyBtb250aA0KCQlpZiAoJHN0YXJ0IDwgJGVu ZCAmJiAkc3RhcnQgPiAkdHNfZmlyc3QpIHsNCgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJv dyk7DQoJCQkvLyBhIHN0YW5kYXJkIGV2ZW50IG9yIHN0YXJ0IG9mIGEgbXVsdGkNCgkJCWlm ICgkc2hvd3NwYW5uZWQgJiYgJG11bHRpICYmICEkcmVjdXIpIHsNCgkJCQkkc21kX2NhbF9m bGFnW10gPSAnbXVsdGlmaXJzdCc7DQoJCQl9DQoJCQlpZiAoJHJlY3VyKSB7DQoJCQkJJHNt ZF9jYWxfZmxhZ1tdID0gJ3JlY3VyZmlyc3QnOw0KCQkJfQ0KCQkJaWYgKCEkc21kX2NhbF9m bGFnKSB7DQoJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ3N0YW5kYXJkJzsNCgkJCX0NCgkJCWlm ICggKCAkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdzKSAmJiBp bl9hcnJheSgnbXVsdGlmaXJzdCcsJHNtZF9jYWxfZmxhZykgKSB8fCAoICRob2xfaGl0ICYm ICFpbl9hcnJheSgnc3RhbmRhcmQnLCRob2xpZGF5ZmxhZ3MpICYmIGluX2FycmF5KCdzdGFu ZGFyZCcsJHNtZF9jYWxfZmxhZykgKSApIHsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2Fu Y2VsJzsNCgkJCX0NCgkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsNCgkJ CQkkY2ZsYWdbXSA9ICRjbHNfcGZ4LiRpdGVtOw0KCQkJfQ0KDQoJCQkkaWR4ID0gJHNtZF9k YXRlWydkJ10gPSAoaW50KXN0cmZ0aW1lKCclZCcsICRzdGFydCk7DQoJCQkkc21kX2RhdGVb J3cnXSA9IHN0cmZ0aW1lKCclVicsICRzdGFydCk7DQoJCQkkc21kX2RhdGVbJ2l5J10gPSBz dHJmdGltZSgnJUcnLCAkc3RhcnQpOw0KCQkJJG9wID0gKCR0aGluZykgPyBwYXJzZSgkdGhp bmcpIDogKCgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHNpemU9PSJzbWFsbCIp ID8gJycgOiBocmVmKCRyb3dbJ1RpdGxlJ10sIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxl PSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5 KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgo JGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykp IDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCSRzbWRf Y2FsX2ZsYWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCgkJfQ0KDQoJ CS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJheSBmb3IgdGhpcyBldmVudA0KCQlpZiAoJHNraXBm aWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcnKSB7DQoJCQkkaWdub3JlcyA9IGRvX2xp c3QoJHJvd1skc2tpcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkaWdub3JlcyBhcyAkdmFsKSB7 DQoJCQkJJGlncm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCk7DQoJCQkJZm9yZWFj aCAoJGlncm5nIGFzICR0aGV2YWwpIHsNCgkJCQkJJGlnbm9yZVtdID0gZGF0ZSgiZC1NLVki LCAkdGhldmFsKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEga25vd24gZm9ybWF0DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJCS8vIEdlbmVyYXRlIGFuIG9taXQgYXJyYXkgZm9yIHRoaXMgZXZl bnQNCgkJaWYgKCRvbWl0ZmllbGQgJiYgJHJvd1skb21pdGZpZWxkXSAhPSAnJykgew0KCQkJ JG9taXRzID0gZG9fbGlzdCgkcm93WyRvbWl0ZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRvbWl0 cyBhcyAkdmFsKSB7DQoJCQkJJG9tcm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCk7 DQoJCQkJZm9yZWFjaCAoJG9tcm5nIGFzICR0aGV2YWwpIHsNCgkJCQkJJG9taXRbXSA9IGRh dGUoImQtTS1ZIiwgJHRoZXZhbCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICgkZGVidWcg PiAxICYmICgkaWdub3JlIHx8ICRvbWl0KSkgew0KCQkJZWNobyAnKysgT01JVFRFRCBEQVRF UyArKyc7DQoJCQlkbXAoJG9taXQpOw0KCQkJZWNobyAnKysgQ0FOQ0VMTEVEIERBVEVTICsr JzsNCgkJCWRtcCgkaWdub3JlKTsNCgkJfQ0KCQkvLyBDYWxjdWxhdGUgdGhlIGRhdGUgb2Zm c2V0cyBhbmQgY2hlY2sgcmVjdXJyaW5nIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBt b250aCBvZiBpbnRlcmVzdA0KCQlpZiAoJHN0ZXBmaWVsZCAmJiAkcm93WyRzdGVwZmllbGRd ICE9ICcnKSB7DQoJCQkkZnJlcSA9IGRvX2xpc3QoJHJvd1skc3RlcGZpZWxkXSk7DQoJCQlm b3JlYWNoICgkZnJlcSBhcyAkaW50ZXJ2YWwpIHsNCgkJCQkkbWF4X2xvb3AgPSA5OTk5OTsg Ly8gWXVrLCBidXQgcHJhY3RpY2FsbHkgbGltaXRsZXNzDQoJCQkJJG9yaWdlcnZhbCA9ICRp bnRlcnZhbDsNCgkJCQkkaW50ZXJ2YWwgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwgZGF0ZSgn RicsIGdtbWt0aW1lKDAsMCwwLCRtb250aCwxKSksICRpbnRlcnZhbCk7DQoJCQkJJGludGVy dmFsID0gc3RyX3JlcGxhY2UoIj95ZWFyIiwgJHllYXIsICRpbnRlcnZhbCk7DQoJCQkJaWYg KHN0cnBvcygkaW50ZXJ2YWwsICJsYXN0IikgPT09IDApIHsNCgkJCQkJJGludGVydmFsID0g ZGF0ZSgibCwgRiBqUyBZIiwgc3RydG90aW1lKCRpbnRlcnZhbCwgbWt0aW1lKDEyLCAwLCAw LCBkYXRlKCJuIixta3RpbWUoMCwwLDAsJG1vbnRoLDEsJHllYXIpKSsxLCAxLCAkeWVhcikp KTsNCgkJCQkJJG1heF9sb29wID0gMTsNCgkJCQl9IGVsc2UgaWYgKHN0cnBvcygkaW50ZXJ2 YWwsICJmaXJzdCIpID09PSAwKSB7DQoJCQkJCSRpbnRlcnZhbCA9IGRhdGUoImwsIEYgalMg WSIsIHN0cnRvdGltZSgkaW50ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgkbW9udGg+MSkg PyAkbW9udGgtMSA6IDEyKSwgZGF0ZSgidCIsbWt0aW1lKDAsMCwwLCRtb250aC0xLDEsKCgk bW9udGg9PTEpID8gJHllYXItMTogJHllYXIpKSksICgoJG1vbnRoPT0xKSA/ICR5ZWFyLTE6 ICR5ZWFyKSkpKTsNCgkJCQkJJG1heF9sb29wID0gMTsNCgkJCQl9DQoJCQkJJHRzX2xvb3Ag PSAwOw0KCQkJCSR0c19jdXJyID0gJHN0YXJ0Ow0KCQkJCWlmIChzdHJwb3MoJG9yaWdlcnZh bCwgIj9tb250aCIpIHx8IHN0cnBvcygkb3JpZ2VydmFsLCAiP3llYXIiKSkgew0KCQkJCQkk bWF4X2xvb3AgPSAxOw0KICAgICAgICAgICAgfQ0KDQoJCQkJd2hpbGUgKCR0c19jdXJyIDwg JGVuZCAmJiAkdHNfbG9vcCA8ICRtYXhfbG9vcCkgew0KCQkJCQlpZiAoJG1heF9sb29wID09 IDEpIHsNCgkJCQkJCSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCk7DQoJCQkJCQkk dHNfY3VyciA9ICgkdHNfY3VyciA8ICRzdGFydCB8fCAkdHNfY3VyciA+ICRlbmQpID8gJHN0 YXJ0IDogJHRzX2N1cnI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkdHNfY3VyciA9IHN0cnRv dGltZSgkaW50ZXJ2YWwsICR0c19jdXJyKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJHRzX2N1cnIg PT09IGZhbHNlKSB7DQoJCQkJCQkkdHNfbG9vcCsrOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0g ZWxzZSB7DQoJCQkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQkJCWRtcCgiSU5URVJWQUw6 ICIuIGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHRzX2N1cnIpKTsNCgkJCQkJCX0NCgkJCQkJCWlm ICgkdHNfY3VyciA8ICRlbmQgJiYgJHRzX2N1cnIgPj0gJHRzX2ZpcnN0ICYmICR0c19jdXJy ICE9ICRzdGFydCkgew0KCQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBDaGVjayBpdCBp c24ndCBhIGhvbGlkYXkgb3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVsYXRlQXJ0aWNs ZURhdGEoJHJvdyk7DQoJCQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9IChpbnQpc3Ry ZnRpbWUoJyVkJywgJHRzX2N1cnIpOw0KCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1 cic7DQoJCQkJCQkJJHRoaXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdHNfY3Vycik7DQoJCQkJ CQkJJG9taXRfbWUgPSBpbl9hcnJheSgkdGhpc2RhdGUsICRvbWl0KTsNCgkJCQkJCQkkc2hv d19tZSA9ICFpbl9hcnJheSgkdGhpc2RhdGUsICRpZ25vcmUpOw0KCQkJCQkJCSRob2xfaGl0 ID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkaG9saWRheXMpOw0KCQkJCQkJCSRzaG93X2hvbCA9 ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ3JlY3VyJywkaG9saWRheWZsYWdzKSApID8gZmFs c2UgOiB0cnVlOw0KCQkJCQkJCWlmICggJG9taXRfbWUgKSB7DQoJCQkJCQkJCSRzbWRfY2Fs X2ZsYWdbXSA9ICdvbWl0JzsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKCAoISRzaG93X21lIHx8 ICEkc2hvd19ob2wpICYmICEkb21pdF9tZSApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1td ID0gJ2NhbmNlbCc7DQoJCQkJCQkJfQ0KCQkJCQkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcg YXMgJGl0ZW0pIHsNCgkJCQkJCQkJJGNmbGFnW10gPSAkY2xzX3BmeC4kaXRlbTsNCgkJCQkJ CQl9DQoNCgkJCQkJCQkvLyBDcmVhdGUgdGhlIGV2ZW50cyB0aGF0IGFwcGVhciBpbiB0aGUg Y2VsbCBidXQgb25seSBpZiB0aGV5J3ZlIG5vdCBhcHBlYXJlZCBiZWZvcmUsIG9yIGFyZSB0 byBiZSBpZ25vcmVkL29taXR0ZWQNCgkJCQkJCQlpZiAoISRvbWl0X21lKSB7DQoJCQkJCQkJ CWlmICgoJHNob3dfbWUgJiYgJHNob3dfaG9sKSB8fCAkc2hvd3NraXBwZWQpIHsNCgkJCQkJ CQkJCSRzbWRfZGF0ZVsnZCddID0gJGlkeDsNCgkJCQkJCQkJCSRzbWRfZGF0ZVsndyddID0g c3RyZnRpbWUoJyVWJywgJHRzX2N1cnIpOw0KCQkJCQkJCQkJJHNtZF9kYXRlWydpeSddID0g c3RyZnRpbWUoJyVHJywgJHRzX2N1cnIpOw0KCQkJCQkJCQkJJG9wID0gKCRyZWN1cmZvcm0p ID8gcGFyc2VfZm9ybSgkcmVjdXJmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykg OiAoKCRzaXplPT0ic21hbGwiKSA/ICcnIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlu a3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoJCQkJCQkJ CX0NCgkJCQkJCQl9DQoJCQkJCQkJJHVzZWQgPSBhcnJheSgpOw0KCQkJCQkJCWlmIChpc3Nl dCgkZXZlbnRzWyRpZHhdKSAmJiAkZXZlbnRzWyRpZHhdICE9IE5VTEwpIHsNCgkJCQkJCQkJ Zm9yZWFjaCAoJGV2ZW50c1skaWR4XSBhcyAkZXYpIHsNCgkJCQkJCQkJCSR1c2VkW10gPSAk ZXZbJ2V2J107DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVu dHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0gPT0gTlVMTCB8fCAhaW5fYXJyYXkoJG9wLCAk dXNlZCkpIHsNCgkJCQkJCQkJJGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3As ICdmbGFnJyA9PiAkc21kX2NhbF9mbGFnLCAnY2xhc3NlcycgPT4gKCgkY2ZsYWcpID8gam9p bignICcsYXJyYXlfbWVyZ2UoJGNmbGFnLCAkc21kX2NhbF91Y2xzKSkgOiAnJykuJGV2Y2xh c3NlcywgJ3Bvc3RlZCcgPT4gJHN0YXJ0X2RhdGUpOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21k X2NhbF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCQkJCQl9 DQoJCQkJCQkkdHNfbG9vcCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2UgaWYg KCRzaG93c3Bhbm5lZCAmJiAkbXVsdGkpIHsNCgkJCS8vIE5vbi1yZWN1cnJpbmcgZXZlbnRz IG1heSBzcGFuIG1vcmUgdGhhbiBvbmUgZGF0ZSBidXQgdGhleSBtdXN0IHN0aWxsIHJlc3Bl Y3QgaWdub3JlZCBkYXRlcyBhbmQgaG9saWRheXMNCgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEo JHJvdyk7DQoJCQkkbGFzdGRheSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJGVuZCk7DQoJCQkk cmVhbF9sYXN0ZGF5ID0gKGludClzdHJmdGltZSgnJWQnLCAkcmVhbF9lbmQpOw0KCQkJd2hp bGUgKCsrJGlkeCA8PSAkbGFzdGRheSkgew0KCQkJCSRvcCA9ICcnOw0KCQkJCSRtdWx0aWZs YWcgPSAoJGlkeD09JHJlYWxfbGFzdGRheSkgPyAnbXVsdGlsYXN0JyA6ICgoJGlkeD09MSkg PyAnbXVsdGlwcmV2JyA6ICdtdWx0aScpOw0KCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICRtdWx0 aWZsYWc7DQoJCQkJJHRoaXN0aW1lID0gZ21ta3RpbWUoMCwgMCwgMCwgJG1vbnRoLCAkaWR4 LCAkeWVhcik7DQoJCQkJJHRoaXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdGhpc3RpbWUpOw0K CQkJCSRvbWl0X21lID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkb21pdCk7DQoJCQkJJHNob3df bWUgPSAhaW5fYXJyYXkoJHRoaXNkYXRlLCAkaWdub3JlKTsNCgkJCQkkaG9sX2hpdCA9IGlu X2FycmF5KCR0aGlzZGF0ZSwgJGhvbGlkYXlzKTsNCgkJCQkkc2hvd19ob2wgPSAoJGhvbF9o aXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlmbGFncykgKSA/IGZhbHNlIDogdHJ1 ZTsNCgkJCQlpZiAoICRvbWl0X21lICkgew0KCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnb21p dCc7DQoJCQkJfQ0KCQkJCWlmICggKCEkc2hvd19tZSB8fCAhJHNob3dfaG9sKSAmJiAhJG9t aXRfbWUgKSB7DQoJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJCX0NCgkJ CQlmb3JlYWNoICgkc21kX2NhbF9mbGFnIGFzICRpdGVtKSB7DQoJCQkJCSRjZmxhZ1tdID0g JGNsc19wZnguJGl0ZW07DQoJCQkJfQ0KCQkJCS8vIENyZWF0ZSB0aGUgc3Bhbm5lZCBldmVu dCB0aGF0IGFwcGVhcnMgaW4gdGhlIGNlbGwNCgkJCQlpZiAoISRvbWl0X21lKSB7DQoJCQkJ CWlmICggKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJ CQkkc21kX2RhdGVbJ2QnXSA9ICRpZHg7DQoJCQkJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0 aW1lKCclVicsICR0aGlzdGltZSk7DQoJCQkJCQkkc21kX2RhdGVbJ2l5J10gPSBzdHJmdGlt ZSgnJUcnLCAkdGhpc3RpbWUpOw0KCQkJCQkJJG9wID0gKCRzcGFuZm9ybSkgPyBwYXJzZV9m b3JtKCRzcGFuZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogKCgkc2l6ZT09 InNtYWxsIikgPyAnJyA6IGhyZWYoJyZyYXJyOycsIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRp dGxlPSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkZXZl bnRzWyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ2ZsYWcnID0+ICRzbWRfY2FsX2Zs YWcsICdjbGFzc2VzJyA9PiAoKCRjZmxhZykgPyBqb2luKCcgJyxhcnJheV9tZXJnZSgkY2Zs YWcsICRzbWRfY2FsX3VjbHMpKSA6ICcnKS4kZXZjbGFzc2VzLCAncG9zdGVkJyA9PiAkc3Rh cnRfZGF0ZSk7DQoJCQkJJHNtZF9jYWxfZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMg PSBhcnJheSgpOw0KCQkJfQ0KCQl9DQoJCS8vIEFkZCBhbnkgZXh0cmEgZGF0ZXMgZm9yIHRo aXMgZXZlbnQgdGhhdCBhcmUgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoDQoJCWlmICgkZXh0 cmFmaWVsZCAmJiAkcm93WyRleHRyYWZpZWxkXSAhPSAnJykgew0KCQkJJHh0cmEgPSBkb19s aXN0KCRyb3dbJGV4dHJhZmllbGRdKTsNCgkJCSRldl9ociA9IGRhdGUoJ0gnLCAkc3RhcnQp Ow0KCQkJJGV2X21uID0gZGF0ZSgnaScsICRzdGFydCk7DQoJCQkkZXZfc2MgPSBkYXRlKCdz JywgJHN0YXJ0KTsNCgkJCSRzdGFtcG9mZiA9IChpbnQpKDM2MDAqJGV2X2hyKSArIChpbnQp KDYwKiRldl9tbikgKyAoaW50KSRldl9zYzsNCgkJCWZvcmVhY2ggKCR4dHJhIGFzICR2YWwp IHsNCgkJCQlpZiAoc3RycG9zKCR2YWwsICIrIikgPT09IGZhbHNlKSB7DQoJCQkJCSRleHJu ZyA9IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwpOw0KCQkJCQkkdmFsID0gZGF0ZSgiWS1t LWQiLCAkZXhybmdbMF0pOw0KCQkJCQkkc3BpZHRoID0gY291bnQoJGV4cm5nKTsNCgkJCQkJ JHNwZXggPSAwOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRjaGsgPSAkc2hvd3NwYW5uZWQgJiYg ISRyZWN1cjsNCgkJCQkJJHNwaWR0aCA9ICRjaGsgPyBjZWlsKCRkaWZmIC8gKDYwKjYwKjI0 KSkgOiAxOyAvLyBkYXlzIGJldHdlZW4gZGF0ZXMNCgkJCQkJJHZhbCA9IHJ0cmltKCR2YWws ICcrJyk7DQoJCQkJCSRzcGV4ID0gJGNoayA/IDEgOiAwOw0KCQkJCX0NCg0KCQkJCWZvciAo JGpkeCA9IDE7ICRqZHggPD0gJHNwaWR0aDsgJGpkeCsrKSB7DQoJCQkJCSR0bSA9IHN0cnRv dGltZSgkdmFsIC4gKCgkamR4PT0xKSA/ICcnIDogJysnLigkamR4LTEpLicgZGF5cycpKTsN CgkJCQkJaWYgKCRkaWZmID4gMCAmJiAkamR4ID09IDEpIHsNCgkJCQkJCSRleHBzdGFtcCA9 ICR0bSskc3RhbXBvZmYrJHJlYWxfZGlmZjsNCgkJCQkJfQ0KCQkJCQkkaWR4ID0gJHNtZF9k YXRlWydkJ10gPSAoaW50KXN0cmZ0aW1lKCclZCcsICR0bSk7DQoJCQkJCSRkdCA9IGRhdGUo IlktbS1kIiwgJHRtKTsNCgkJCQkJJGxzdCA9ICgkZXh0cmFzdHJpY3QpID8gJGVuZCA6ICR0 c19sYXN0Ow0KCQkJCQlpZiAoJHRtIDwgJGxzdCAmJiAkdG0gPj0gJHRzX2ZpcnN0KSB7DQoJ CQkJCQkkZmFrZXJvdyA9ICRyb3c7DQoJCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBkYXRl KCJZLW0tZCBIOmk6cyIsICR0bSskc3RhbXBvZmYpOw0KCQkJCQkJJGZha2Vyb3dbJ3VQb3N0 ZWQnXSA9ICR0bSskc3RhbXBvZmY7DQoJCQkJCQlpZiAoJGRpZmY+MCkgew0KCQkJCQkJCSRm YWtlcm93WydFeHBpcmVzJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICRleHBzdGFtcCk7DQoJ CQkJCQkJJGZha2Vyb3dbJ3VFeHBpcmVzJ10gPSAkZXhwc3RhbXA7DQoJCQkJCQl9DQoNCgkJ CQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJGZha2Vyb3cpOw0KCQkJCQkJJHNtZF9jYWxfZmxh Z1tdID0gJ2V4dHJhJzsNCgkJCQkJCSRjZmxhZ1tdID0gJGNsc19wZnguJ2V4dHJhJzsNCgkJ CQkJCSRvbWl0X21lID0gZmFsc2U7DQoJCQkJCQkkc2hvd19tZSA9ICRzaG93X2hvbCA9IHRy dWU7DQoJCQkJCQlpZiAoJHNwZXgpIHsNCgkJCQkJCQkkbXVsdGlmbGFnID0gKCRqZHg9PTEp ID8gJ211bHRpZmlyc3QnIDogKCgkamR4PT0kc3BpZHRoKSA/ICdtdWx0aWxhc3QnIDogKCgk aWR4PT0xKSA/ICdtdWx0aXByZXYnIDogJ211bHRpJykpOw0KCQkJCQkJCSR0aGlzZGF0ZSA9 IGRhdGUoImQtTS1ZIiwgJHRtKTsNCgkJCQkJCQkkb21pdF9tZSA9IGluX2FycmF5KCR0aGlz ZGF0ZSwgJG9taXQpOw0KCQkJCQkJCSRzaG93X21lID0gIWluX2FycmF5KCR0aGlzZGF0ZSwg JGlnbm9yZSk7DQoJCQkJCQkJJGhvbF9oaXQgPSBpbl9hcnJheSgkdGhpc2RhdGUsICRob2xp ZGF5cyk7DQoJCQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9hcnJheSgnbXVs dGknLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJCQkJaWYgKCRvbWl0 X21lKSB7DQoJCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdvbWl0JzsNCgkJCQkJCQl9DQoJ CQkJCQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19ob2wpICYmICEkb21pdF9tZSApIHsN CgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQkJCQkJfQ0KCQkJCQkJ CSRzbWRfY2FsX2ZsYWdbXSA9ICRtdWx0aWZsYWc7DQoJCQkJCQkJJGNmbGFnW10gPSAkY2xz X3BmeC4kbXVsdGlmbGFnOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKCEkb21pdF9tZSkgew0KCQkJ CQkJCWlmICggKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJ CQkJCQkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoJyVWJywgJHRtKTsNCgkJCQkJCQkJ JHNtZF9kYXRlWydpeSddID0gc3RyZnRpbWUoJyVHJywgJHRtKTsNCgkJCQkJCQkJJG9wID0g KCRzcGV4ICYmICRzcGFuZm9ybSkgPyBwYXJzZV9mb3JtKCRzcGFuZm9ybSkgOiAoKCR0aGlu ZykgPyBwYXJzZSgkdGhpbmcpIDogKCgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgo JHNpemU9PSJzbWFsbCIpID8gJycgOiBocmVmKCgoJHNwZXggJiYgJGpkeD4xKSA/ICcmcmFy cjsnIDogJHJvd1snVGl0bGUnXSksIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRy b3dbJ1RpdGxlJ10uJyInKSkgKSk7DQoJCQkJCQkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5 KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgo JGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykp IDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRkdCk7DQoJCQkJCQkJCSRzbWRfY2Fs X2ZsYWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCgkJCQkJCQl9DQoJ CQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJYXJ0aWNsZV9wb3AoKTsN Cg0KCWlmICgkZGVidWcgPiAxICYmICRldmVudHMpIHsNCgkJZWNobyAnKysgQUxMIEVWRU5U UyArKyc7DQoJCWRtcCgkZXZlbnRzKTsNCgl9DQoNCgkvLyBHZW5lcmF0ZSB0aGUgY2FsZW5k YXINCglpZiggJHNpemUgPT0gInNtYWxsIiApIHsNCgkJJGNhbGVuZGFyID0gbmV3IFNNRF9T bWFsbF9DYWxlbmRhcigkeWVhciwgJG1vbnRoLCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNhdGVn b3J5KTsNCgl9IGVsc2Ugew0KCQkkY2FsZW5kYXIgPSBuZXcgU01EX0NhbGVuZGFyKCR5ZWFy LCAkbW9udGgsICRldmVudHMpOw0KCX0NCgkkY2FsZW5kYXItPnNldFdlZWsoJHdlZWspOw0K CSRjYWxlbmRhci0+c2V0R01UKCRnbXQpOw0KCSRjYWxlbmRhci0+c2V0TGFuZygkbGFuZyk7 DQoJJGNhbGVuZGFyLT5zZXRDbGFzc0xldmVscygkY2xldnMpOw0KCSRjYWxlbmRhci0+c2V0 Q2xhc3NQcmVmaXgoJGNsc19wZngpOw0KCSRjYWxlbmRhci0+c2V0RXZlbnRXcmFwdGFnKCRl dmVudHdyYXB0YWcpOw0KCSRjYWxlbmRhci0+c2V0Q2VsbEZvcm0oJGNlbGxmb3JtKTsNCgkk Y2FsZW5kYXItPnNldE1ZV3JhcHRhZygkbXl3cmFwdGFnKTsNCgkkY2FsZW5kYXItPnNldFRh YmxlSUQoJGlkKTsNCgkkY2FsZW5kYXItPnNldFRhYmxlQ2xhc3MoJGNsYXNzKTsNCgkkY2Fs ZW5kYXItPnNldFJvd0NsYXNzKCRyb3djbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRDZWxsQ2xh c3MoJGNlbGxjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRFbXB0eUNsYXNzKCRlbXB0eWNsYXNz KTsNCgkkY2FsZW5kYXItPnNldElTT1dlZWtDbGFzcygkaXNvd2Vla2NsYXNzKTsNCgkkY2Fs ZW5kYXItPnNldE5hdkluZm8oJG5hdnBjbGFzcywkbmF2bmNsYXNzLCRuYXZwYXJyLCRuYXZu YXJyLCRuYXZpZCk7DQoJJGNhbGVuZGFyLT5zZXROYXZLZWVwKCRtYWludGFpbik7DQoJJGNh bGVuZGFyLT5zZXRNWUNsYXNzKCRteWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3Jt YXQoJGRheWZvcm1hdCwgImQiKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJG1vbnRo Zm9ybWF0LCAibSIpOw0KCSRjYWxlbmRhci0+c2V0UmVtYXAoJGRtYXApOw0KCSRjYWxlbmRh ci0+c2V0U2hvd0lTT1dlZWsoJGlzb3dlZWtzKTsNCgkkY2FsZW5kYXItPnNldEVZZWFyKCRl YXJsaWVzdCk7DQoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0KTsNCgkkY2FsZW5kYXIt PnNldEZpbHRlck9wdHMoJGZvcHRzKTsNCgkkY2FsZW5kYXItPnNldEhvbGlkYXlzKCRob2xp ZGF5cyk7DQoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlzdCgkc2VsZWN0KSwgJHNl bGVjdGJ0bik7DQoJJGNhbGVuZGFyLT5zZXRGaXJzdERheU9mV2VlaygkZmlyc3RkYXkpOw0K CSRjYWxlbmRhci0+c2V0TGlua1Bvc3RlZCgkbGlua3Bvc3RlZCk7DQoNCglyZXR1cm4gJGNh bGVuZGFyLT5kaXNwbGF5KCRzdGF0aWMsICRmdXR1cmUpOw0KfQ0KDQpjbGFzcyBTTURfQ2Fs ZW5kYXIgZXh0ZW5kcyBTTURfUmF3X0NhbGVuZGFyIHsNCgkvLyBPdmVycmlkZSBDb25zdHJ1 Y3Rvcg0KCS8vIFBlcm1pdHMgbXVsdGlwbGUgZXZlbnRzIHRvIHNob3cgcGVyIGRheQ0KCWZ1 bmN0aW9uIFNNRF9DYWxlbmRhcigkeWVhciwkbW9udGgsJGV2ZW50cykgew0KCQkkdGhpcy0+ ZXZlbnRzID0gJGV2ZW50czsNCgkJJHRoaXMtPlNNRF9SYXdfQ2FsZW5kYXIoJHllYXIsJG1v bnRoKTsNCgl9DQoNCgkvLyBPdmVycmlkZSBkc3BEYXlDZWxsIHRvIGRpc3BsYXkgc3R1ZmYg cmlnaHQNCglmdW5jdGlvbiBkc3BEYXlDZWxsKCR0aGVkYXkpIHsNCgkJZ2xvYmFsICRzbWRf Y2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9jYWxfdWNscywgJHNtZF9kYXRlOw0KDQoJ CSRzbWRfY2FsX2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCgkJJGhhc2FydGlj bGUgPSBpc3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXldKTsNCgkJJHRoZWRhdGUgPSBnbW1r dGltZSgwLCAwLCAwLCAkdGhpcy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKTsNCgkJ JGhvbF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLU0tWSIsICR0aGVkYXRlKSwgJHRoaXMtPmhv bGlkYXlzKTsNCgkJaWYgKCRoYXNhcnRpY2xlKSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAn ZXZlbnQnOw0KCQl9DQoJCWlmICgkaG9sX2hpdCkgew0KCQkJJHNtZF9jYWxfZmxhZ1tdID0g J2hvbHMnOw0KCQl9DQoJCSRjZmxhZyA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfY2Fs X2ZsYWcgYXMgJGl0ZW0pIHsNCgkJCSRjZmxhZ1tdID0gJHRoaXMtPmNsc19wZnguJGl0ZW07 DQoJCX0NCgkJJHRkY2xhc3MgPSB0cmltKCR0aGlzLT5jZWxsY2xhc3MgLiAoKCRjZmxhZykg PyAnICcuam9pbignICcsICRjZmxhZykgOiAnJykpOw0KCQkkcnVubmluZ2NsYXNzID0gKGlu X2FycmF5KCJjZWxsIiwgJHRoaXMtPmNsc19sZXYpIHx8IGluX2FycmF5KCJjZWxscGx1cyIs ICR0aGlzLT5jbHNfbGV2KSkgPyBleHBsb2RlKCcgJywgJHRkY2xhc3MpIDogYXJyYXkoKTsN CgkJaWYoJHRoaXMtPnllYXIgPT0gZGF0ZSgnWScsdGltZSgpK3R6X29mZnNldCgpICkgYW5k ICR0aGlzLT5tb250aCA9PSBkYXRlKCduJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRo ZWRheSA9PSBkYXRlKCdqJyx0aW1lKCkrdHpfb2Zmc2V0KCkpICkgew0KCQkJJHNtZF9jYWxf ZmxhZ1tdID0gJ3RvZGF5JzsNCgkJCSRydW5uaW5nY2xhc3NbXSA9ICR0aGlzLT5jbHNfcGZ4 Lid0b2RheSc7DQoJCX0NCg0KCQkkb3V0ID0gJGZsYWdzID0gYXJyYXkoKTsNCgkJJGZvdXQg PSBhcnJheSgnc3RhbmRhcmQnPT5hcnJheSgpLCdyZWN1cic9PmFycmF5KCksJ3JlY3VyZmly c3QnPT5hcnJheSgpLCdtdWx0aWZpcnN0Jz0+YXJyYXkoKSwnbXVsdGknPT5hcnJheSgpLCdt dWx0aXByZXYnPT5hcnJheSgpLCdtdWx0aWxhc3QnPT5hcnJheSgpLCdjYW5jZWwnPT5hcnJh eSgpLCdleHRyYSc9PmFycmF5KCkpOw0KCQlpZiAoZW1wdHkoJHRoaXMtPmNlbGxmb3JtKSkg ew0KCQkJJG91dFtdID0gaGVkKCR0aGVkYXksNCk7DQoJCX0NCgkJaWYoIGlzc2V0KCR0aGlz LT5ldmVudHNbJHRoZWRheV0pICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2ZW50 c1skdGhlZGF5XTsNCgkJCWZvcmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJCSRl dmNsYXNzID0gdHJpbSgkZXZbJ2NsYXNzZXMnXSk7DQoJCQkJJGZsYWdzID0gYXJyYXlfbWVy Z2UoJGZsYWdzLCAkZXZbJ2ZsYWcnXSk7DQoJCQkJaWYgKGluX2FycmF5KCJjZWxscGx1cyIs ICR0aGlzLT5jbHNfbGV2KSkgew0KCQkJCQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2Y2xh c3MpIGFzICRldmMpIHsNCgkJCQkJCSRydW5uaW5nY2xhc3NbXT0gJGV2YzsNCgkJCQkJfQ0K CQkJCX0NCgkJCQkkY2xzID0gKCRldmNsYXNzICYmIGluX2FycmF5KCJldmVudCIsICR0aGlz LT5jbHNfbGV2KSkgPyAnIGNsYXNzPSInLnRyaW0oJGV2Y2xhc3MpLiciJyA6ICcnOw0KCQkJ CSRvcCA9ICgkdGhpcy0+ZXZ3cmFwdGFnKSA/IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndy YXB0YWcsICRjbHMpIDogJGV2WydldiddOw0KCQkJCWZvcmVhY2ggKCRldlsnZmxhZyddIGFz ICRmbGV2KSB7DQoJCQkJCSRmb3V0WyRmbGV2XVtdID0gJG9wOw0KCQkJCX0NCgkJCQkkb3V0 W10gPSAkb3A7DQoJCQl9DQoJCX0NCg0KCQkvLyBBbWFsZ2FtYXRlIHRoZSBldmVudC1sZXZl bCBjbGFzc2VzIGFuZCBjZWxsLWxldmVsIGNsYXNzZXMgaWYgcmVxdWlyZWQNCgkJJHJ1bm5p bmdjbGFzcyA9IGFycmF5X3VuaXF1ZSgkcnVubmluZ2NsYXNzKTsNCgkJaWYgKGluX2FycmF5 KCJjZWxscGx1cyIsICR0aGlzLT5jbHNfbGV2KSkgew0KCQkJJHNtZF9jYWxfZmxhZyA9IGFy cmF5X21lcmdlKCRzbWRfY2FsX2ZsYWcsICRmbGFncyk7DQoJCX0NCg0KCQlpZiAoJHRoaXMt PmNlbGxmb3JtKSB7DQoJCQkkdGhpc3RpbWUgPSBnbW1rdGltZSgwLCAwLCAwLCAkdGhpcy0+ bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKTsNCgkJCSRzbWRfY2FsaW5mb1snaWQnXSA9 ICR0aGlzLT50YWJsZUlEOw0KCQkJJHNtZF9kYXRlWyd5J10gPSAkdGhpcy0+eWVhcjsNCgkJ CSRzbWRfZGF0ZVsnbSddID0gJHRoaXMtPm1vbnRoOw0KCQkJJHNtZF9kYXRlWyd3J10gPSBz dHJmdGltZSgiJVYiLCAkdGhpc3RpbWUpOw0KCQkJJHNtZF9kYXRlWydpeSddID0gc3RyZnRp bWUoIiVHIiwgJHRoaXN0aW1lKTsNCgkJCSRzbWRfZGF0ZVsnZCddID0gJHRoZWRheTsNCgkJ CSRyZXBzID0gYXJyYXkoDQoJCQkJJ3tzdGFuZGFyZH0nID0+IGpvaW4oJycsJGZvdXRbJ3N0 YW5kYXJkJ10pLA0KCQkJCSd7cmVjdXJ9JyA9PiBqb2luKCcnLCRmb3V0WydyZWN1ciddKSwN CgkJCQkne3JlY3VyZmlyc3R9JyA9PiBqb2luKCcnLCRmb3V0WydyZWN1cmZpcnN0J10pLA0K CQkJCSd7YWxscmVjdXJ9JyA9PiBqb2luKCcnLGFycmF5X21lcmdlKCRmb3V0WydyZWN1cidd LCAkZm91dFsncmVjdXJmaXJzdCddKSksDQoJCQkJJ3ttdWx0aWZpcnN0fScgPT4gam9pbign JywkZm91dFsnbXVsdGlmaXJzdCddKSwNCgkJCQkne211bHRpcHJldn0nID0+IGpvaW4oJycs JGZvdXRbJ211bHRpcHJldiddKSwNCgkJCQkne211bHRpfScgPT4gam9pbignJywkZm91dFsn bXVsdGlsYXN0J10pLA0KCQkJCSd7bXVsdGlsYXN0fScgPT4gam9pbignJywkZm91dFsnbXVs dGlsYXN0J10pLA0KCQkJCSd7YWxsbXVsdGl9JyA9PiBqb2luKCcnLGFycmF5X21lcmdlKCRm b3V0WydtdWx0aWZpcnN0J10sJGZvdXRbJ211bHRpJ10sJGZvdXRbJ211bHRpcHJldiddLCRm b3V0WydtdWx0aWxhc3QnXSkpLA0KCQkJCSd7Y2FuY2VsfScgPT4gam9pbignJywkZm91dFsn Y2FuY2VsJ10pLA0KCQkJCSd7ZXh0cmF9JyA9PiBqb2luKCcnLCRmb3V0WydleHRyYSddKSwN CgkJCQkne2V2ZW50c30nID0+IGpvaW4oJycsJG91dCksDQoJCQkJJ3tkYXl9JyA9PiAkdGhl ZGF5LA0KCQkJCSd7d2Vla2RheX0nID0+ICgoaXNfYXJyYXkoJHRoaXMtPmRheU5hbWVGbXQp KSA/ICR0aGlzLT5kYXlOYW1lc1tkYXRlKCd3JywkdGhpc3RpbWUpXSA6IHN0cmZ0aW1lKCR0 aGlzLT5kYXlOYW1lRm10LCAkdGhpc3RpbWUpKSwNCgkJCQkne3dlZWt9JyA9PiAkc21kX2Rh dGVbJ3cnXSwNCgkJCQkne21vbnRofScgPT4gJHRoaXMtPm1vbnRoLA0KCQkJCSd7bW9udGhu YW1lfScgPT4gKChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkpID8gJHRoaXMtPm10aE5h bWVzW2RhdGUoJ24nLCR0aGlzdGltZSldIDogc3RyZnRpbWUoJHRoaXMtPm10aE5hbWVGbXQs ICR0aGlzdGltZSkpLA0KCQkJCSd7eWVhcn0nID0+ICR0aGlzLT55ZWFyLA0KCQkJCSd7c2hv cnR5ZWFyfScgPT4gc3RyZnRpbWUoIiV5IiwgJHRoaXN0aW1lKSwNCgkJCQkne2lzb3llYXJ9 JyA9PiAkc21kX2RhdGVbJ2l5J10sDQoJCQkJJ3tzaG9ydGlzb3llYXJ9JyA9PiBzdHJmdGlt ZSgiJWciLCAkdGhpc3RpbWUpLA0KCQkJKTsNCgkJCSRjZWxsb3V0ID0gcGFyc2Uoc3RydHIo JHRoaXMtPmNlbGxmb3JtLCAkcmVwcykpOw0KCQkJJGNhcnJheSA9IGFycmF5X21lcmdlKCRy dW5uaW5nY2xhc3MsICRzbWRfY2FsX3VjbHMpOw0KCQkJJHNtZF9jYWxfdWNscyA9IGFycmF5 KCk7DQoNCgkJCXJldHVybiBkb1RhZygkY2VsbG91dCwndGQnLGpvaW4oJyAnLCRjYXJyYXkp KTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBkb1RhZyhqb2luKCcnLCRvdXQpLCd0ZCcsam9p bignICcsJHJ1bm5pbmdjbGFzcykpOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24gZGlzcGxheSgk c3RhdGljPWZhbHNlLCAkZnV0dXJlPWZhbHNlKSB7DQoJCSRpZCA9ICgkdGhpcy0+dGFibGVJ RCkgPyAnIGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCQkkY1tdID0gJHRoaXMt PmRzcEhlYWRlcigkc3RhdGljLCAkZnV0dXJlKTsNCgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlO YW1lcygpOw0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGxzKCk7DQoNCgkJcmV0dXJuIGRv VGFnKGpvaW4oJycsJGMpLCd0YWJsZScsJHRoaXMtPnRhYmxlY2xhc3MsJGlkKTsNCgl9DQoN CglmdW5jdGlvbiBkc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSkgew0KCQlnbG9iYWwgJHBy ZXRleHQsICRzbWRfY2FsaW5mbzsNCg0KCQkkY3Vycm1vID0gJHRoaXMtPm1vbnRoOw0KCQkk Y3VycnlyID0gJHRoaXMtPnllYXI7DQoJCSRuYXZwY2xhc3MgPSAkdGhpcy0+Z2V0TmF2SW5m bygicGMiKTsNCgkJJG5hdm5jbGFzcyA9ICR0aGlzLT5nZXROYXZJbmZvKCJuYyIpOw0KCQkk bmF2cGFycm93ID0gJHRoaXMtPmdldE5hdkluZm8oInBhIik7DQoJCSRuYXZuYXJyb3cgPSAk dGhpcy0+Z2V0TmF2SW5mbygibmEiKTsNCgkJJG5hdmlkID0gJHRoaXMtPmdldE5hdkluZm8o ImlkIik7DQoJCSRuYXZwY2xhc3MgPSAoJG5hdnBjbGFzcykgPyAnIGNsYXNzPSInLiRuYXZw Y2xhc3MuJyInIDogJyc7DQoJCSRuYXZuY2xhc3MgPSAoJG5hdm5jbGFzcykgPyAnIGNsYXNz PSInLiRuYXZuY2xhc3MuJyInIDogJyc7DQoJCSRmb3B0cyA9ICR0aGlzLT5mb3B0czsNCg0K CQkkc2VjID0gKGlzc2V0KCRzbWRfY2FsaW5mb1sncyddKSAmJiAhZW1wdHkoJHNtZF9jYWxp bmZvWydzJ10pKSA/ICRzbWRfY2FsaW5mb1sncyddIDogJyc7DQoJCWZvcmVhY2ggKCR0aGlz LT5tYWludGFpbiBhcyAkY29sKSB7DQoJCQlzd2l0Y2ggKCRjb2wpIHsNCgkJCQljYXNlICJz ZWN0aW9uIjoNCgkJCQkJJHNlYyA9ICgkcHJldGV4dFsncyddKSA/ICRwcmV0ZXh0WydzJ10g OiAkc2VjOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJhcnRpY2xlIjoNCgkJCQkJaWYgKCRw cmV0ZXh0WydpZCddKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgnaWQnID0+ICRwcmV0ZXh0 WydpZCddKSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJjYXRl Z29yeSI6DQoJCQkJCWlmICgkcHJldGV4dFsnYyddKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJh eSgnYycgPT4gJHByZXRleHRbJ2MnXSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7 DQoJCQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkJaWYgKGdwcygnYXV0aG9yJykpIHsNCgkJCQkJ CSRmb3B0cyA9IGFycmF5KCdhdXRob3InID0+IGdwcygnYXV0aG9yJykpICsgJGZvcHRzOw0K CQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgInBnIjoNCgkJCQkJaWYgKCRwcmV0ZXh0 WydwZyddKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgncGcnID0+ICRwcmV0ZXh0WydwZydd KSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJjYWxpZCI6DQoJ CQkJCWlmICgkdGhpcy0+dGFibGVJRCkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2NhbGlk JyA9PiAkdGhpcy0+dGFibGVJRCkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJ CQkJZGVmYXVsdDoNCgkJCQkJaWYgKGdwcygkY29sKSkgew0KCQkJCQkJJGZvcHRzID0gYXJy YXkoJGNvbCA9PiBncHMoJGNvbCkpICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0K CQkJfQ0KCQl9DQoJCSRmb3B0cyA9IGFycmF5X3VuaXF1ZSgkZm9wdHMpOw0KCQkkZmlsdGVy cyA9IGFycmF5KCk7DQoJCSRmaWx0ZXJIaWQgPSBhcnJheSgpOw0KCQlpZiAoISRzdGF0aWMp IHsNCgkJCWZvcmVhY2goJGZvcHRzIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRmaWx0ZXJz W10gPSAka2V5Lic9Jy4kdmFsOw0KCQkJCSRmaWx0ZXJIaWRbXSA9IGhJbnB1dCgka2V5LCAk dmFsKTsNCgkJCX0NCgkJfQ0KCQkkZmlsdGVyVVJMID0gam9pbihhLCAkZmlsdGVycyk7DQoN CgkJLy8gV2VlayBzZWxlY3QgbGlzdA0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd3ZWVr JykgJiYgISRzdGF0aWMpIHsNCgkJCSRjdXJyd2sgPSAoJHRoaXMtPndlZWspID8gJHRoaXMt PndlZWsgOiBkYXRlKCdXJywgc3RydG90aW1lKCRjdXJyeXIuIi0iLiRjdXJybW8uIi0xIDEy OjAwIikpOw0KCQkJZm9yICggJGlkeCA9IDE7ICRpZHggPD0gNTM7ICRpZHgrKyApIHsNCgkJ CQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4ID09ICRj dXJyd2sgKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCSRvcHRp b250YWdzW10gPSBkb1RhZygkdGhpcy0+c2VscGZ4Wyd3ZWVrJ10uc3RyX3BhZCgkaWR4LCAy LCAnMCcsIFNUUl9QQURfTEVGVCkuJHRoaXMtPnNlbHNmeFsnd2VlayddLCAnb3B0aW9uJywg JycsICR0YWdhdHRzKTsNCgkJCX0NCgkJCSRzZWxlY3RvcltdID0gZG9UYWcoam9pbihuLCAk b3B0aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhp cy0+bXljbGFzcyksICcgbmFtZT0iJy4kdGhpcy0+cmVtYXBbJ3cnXS4nIicuKCgkdGhpcy0+ c2VsYnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3VibWl0KCkiJyksICcnKQ0KICAgCQkJCS4g KCgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSkgPyAnJyA6IGhJbnB1dCgkdGhpcy0+cmVt YXBbJ3knXSwgJGN1cnJ5cikpOw0KCQkJJG9wdGlvbnRhZ3MgPSBhcnJheSgpOyAvLyBCbGFu ayBvdXQNCgkJfQ0KDQoJCS8vIE1vbnRoIHNlbGVjdCBsaXN0IC0gbm90ZSBta3RpbWUgaGFz IHRoZSBkYXkgZm9yY2VkIHRvIDEuIElmIG5vdCB5b3UgZ2V0DQoJCS8vIGJpemFycmUgcmVw ZWF0ZWQgbW9udGggbmFtZXMgb24gdGhlIDMxc3Qgb2Ygc29tZSBtb250aHMgOi1cDQoJCWlm ICghJHRoaXMtPnVzZVNlbGVjdG9yKCd3ZWVrJykpIHsNCgkJCWlmICgkdGhpcy0+dXNlU2Vs ZWN0b3IoJ21vbnRoJykgJiYgISRzdGF0aWMpIHsNCgkJCQlmb3IgKCAkaWR4ID0gMTsgJGlk eCA8PSAxMjsgJGlkeCsrICkgew0KCQkJCQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4n Iic7DQoJCQkJCWlmICggJGlkeCA9PSAkY3Vycm1vICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3Rl ZD0ic2VsZWN0ZWQiJzsNCgkJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCR0aGlzLT5zZWxw ZnhbJ21vbnRoJ10uKChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkpID8gJHRoaXMtPm10 aE5hbWVzW2RhdGUoJ24nLGdtbWt0aW1lKDEyLDAsMCwkaWR4LDEpKV0gOiBzdHJmdGltZSgk dGhpcy0+bXRoTmFtZUZtdCwgZ21ta3RpbWUoMTIsMCwwLCRpZHgsMSkpKS4kdGhpcy0+c2Vs c2Z4Wydtb250aCddLCAnb3B0aW9uJywgJycsICR0YWdhdHRzKTsNCgkJCQl9DQoJCQkJJHNl bGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwgJ3NlbGVjdCcsICgoJHRo aXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwgJyBuYW1lPSInLiR0aGlz LT5yZW1hcFsnbSddLiciJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJz dWJtaXQoKSInKSwgJycpDQoJICAgCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXIn KSkgPyAnJyA6IGhJbnB1dCgkdGhpcy0+cmVtYXBbJ3knXSwgJGN1cnJ5cikpOw0KCQkJCSRv cHRpb250YWdzID0gYXJyYXkoKTsgLy8gQmxhbmsgb3V0DQoJCQl9IGVsc2Ugew0KCQkJCSRz ZWxlY3RvcltdID0gZG9UYWcoJHRoaXMtPmdldE1vbnRoTmFtZSgpLCAnc3BhbicsICgoJHRo aXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCQl9DQoJCX0NCg0K CQkvLyBZZWFyIHNlbGVjdCBsaXN0DQoJCSR5MCA9ICR0aGlzLT5leXI7DQoJCSR5MSA9ICR0 aGlzLT5seXI7DQoJCWlmICgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSAmJiAoJHkwICE9 ICR5MSkgJiYgISRzdGF0aWMpIHsNCgkJCWZvciAoICRpZHggPSAkeTA7ICRpZHggPD0gJHkx OyAkaWR4KysgKSB7DQoJCQkJJHRhZ2F0dHMgPSAnIHZhbHVlPSInLiRpZHguJyInOw0KCQkJ CWlmICggJGlkeCA9PSAkY3VycnlyICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJzsNCgkJCQkkb3B0aW9udGFnc1tdID0gZG9UYWcoJHRoaXMtPnNlbHBmeFsneWVhcidd LiRpZHguJHRoaXMtPnNlbHNmeFsneWVhciddLCAnb3B0aW9uJywgJycsICR0YWdhdHRzKTsN CgkJCX0NCgkJCSRzZWxlY3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0aW9udGFncyksICdz ZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcyksICcg bmFtZT0iJy4kdGhpcy0+cmVtYXBbJ3knXS4nIicuKCgkdGhpcy0+c2VsYnRuKSA/ICcnIDog JyBvbmNoYW5nZT0ic3VibWl0KCkiJyksICcnKQ0KCQkJCQkuICgoJHRoaXMtPnVzZVNlbGVj dG9yKCdtb250aCcpIHx8ICR0aGlzLT51c2VTZWxlY3Rvcignd2VlaycpKSA/ICcnIDogaElu cHV0KCR0aGlzLT5yZW1hcFsnbSddLCAkY3Vycm1vKSk7DQoJCX0gZWxzZSB7DQoJCQkkc2Vs ZWN0b3JbXSA9IGRvVGFnKCRjdXJyeXIsICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ ICcnIDogJHRoaXMtPm15Y2xhc3MpKTsNCgkJfQ0KDQoJCSRleHRyYXMgPSAnJzsNCgkJaWYg KCEkc3RhdGljICYmICggJHRoaXMtPnVzZVNlbGVjdG9yKCdtb250aCcpIHx8ICR0aGlzLT51 c2VTZWxlY3RvcigneWVhcicpICkpIHsNCgkJCWlmICgkdGhpcy0+c2VsYnRuKSB7DQoJCQkJ JGV4dHJhcyAuPSBkb1RhZygnJywgJ2lucHV0JywgJ3NtZF9jYWxfaW5wdXQnLCAnIHR5cGU9 InN1Ym1pdCIgdmFsdWU9IicuJHRoaXMtPnNlbGJ0bi4nIicpOw0KCQkJfQ0KCQkJJGV4dHJh cyAuPSBqb2luKCcnLCAkZmlsdGVySGlkKTsNCgkJfQ0KDQoJCSR1cmxwID0gcGFyc2VfdXJs KCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddKTsNCgkJJHNlbGVjdG9yID0gJzxmb3JtIGFjdGlv bj0iJy4kdXJscFsncGF0aCddLiciIG1ldGhvZD0iZ2V0IicuKCgkbmF2aWQpID8gJyBpZD0i Jy4kbmF2aWQuJyInIDogJycpLic+Jy5kb1RhZyhqb2luKHNwLCAkc2VsZWN0b3IpLiRleHRy YXMsICR0aGlzLT5teXdyYXB0YWcsICR0aGlzLT5teWNsYXNzKS4nPC9mb3JtPic7DQoNCgkJ JG5hdl9iYWNrX2xpbmsgPSAkdGhpcy0+bmF2aWdhdGlvbigkY3VycnlyLCAkY3Vycm1vLCAn LScsICRmaWx0ZXJVUkwsICRzZWMpOw0KCQkkbmF2X2Z3ZF9saW5rICA9ICR0aGlzLT5uYXZp Z2F0aW9uKCRjdXJyeXIsICRjdXJybW8sICcrJywgJGZpbHRlclVSTCwgJHNlYyk7DQoNCgkJ JG5hdl9iYWNrID0gKCEkc3RhdGljICYmICRuYXZfYmFja19saW5rKSA/ICc8YSBocmVmPSIn LiRuYXZfYmFja19saW5rLiciJy4kbmF2cGNsYXNzLic+Jy4kbmF2cGFycm93Lic8L2E+JyA6 ICcmbmJzcDsnOw0KCQkkbmF2X2Z3ZCAgPSAoISRzdGF0aWMgJiYgJGZ1dHVyZSAmJiAkbmF2 X2Z3ZF9saW5rKSA/ICc8YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZuY2xhc3Mu Jz4nLiRuYXZuYXJyb3cuJzwvYT4nIDogJyZuYnNwOyc7DQoNCgkJJGNbXSA9IGRvVGFnKCRu YXZfYmFjaywndGgnKTsNCgkJJGNbXSA9ICc8dGggY29sc3Bhbj0iJy4oKCR0aGlzLT5zaG93 SVNPV2VlaykgPyA2IDogNSkuJyI+Jy4kc2VsZWN0b3IuJzwvdGg+JzsNCgkJJGNbXSA9IGRv VGFnKCRuYXZfZndkLCd0aCcpOw0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRjKSwndHIn LCAnc21kX2NhbF9uYXZyb3cnKTsNCgl9DQoNCglmdW5jdGlvbiBuYXZpZ2F0aW9uKCR5ZWFy LCRtb250aCwkZGlyZWN0aW9uLCRmbHQsJHNlYz0nJykgew0KCQlnbG9iYWwgJHBlcm1saW5r X21vZGU7DQoNCgkJaWYoJGRpcmVjdGlvbiA9PSAnLScpIHsNCgkJCWlmKCRtb250aCAtIDEg PCAxKSB7DQoJCQkJJG1vbnRoID0gMTI7DQoJCQkJJHllYXIgLT0gMTsNCgkJCX0gZWxzZSB7 DQoJCQkJJG1vbnRoIC09IDE7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlpZigkbW9udGggKyAx ID4gMTIpIHsNCgkJCQkkbW9udGggPSAxOw0KCQkJCSR5ZWFyICs9IDE7DQoJCQl9IGVsc2Ug ew0KCQkJCSRtb250aCArPSAxOw0KCQkJfQ0KCQl9DQoNCgkJLy8gQWJvcnQgaWYgd2UncmUg YWJvdXQgdG8gZ28gb3V0IG9mIHJhbmdlDQoJCWlmICgkeWVhciA8ICR0aGlzLT5leXIgfHwg JHllYXIgPiAkdGhpcy0+bHlyKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCgkJJGZsdCA9ICgk Zmx0KSA/IGEuJGZsdCA6ICcnOw0KCQlpZigkcGVybWxpbmtfbW9kZSAhPSAnbWVzc3knKSB7 DQoJCQkkdXJsID0gJyc7DQoJCQlpZiAoJHNlYyAmJiBzdHJwb3MoJHBlcm1saW5rX21vZGUs ICdzZWN0aW9uJyAhPT0gZmFsc2UpKSB7DQoJCQkJJHVybCA9IGh1LiRzZWMuJy8nLigoJHBl cm1saW5rX21vZGU9PSdzZWN0aW9uX2lkX3RpdGxlJykgPyAkc21kX2NhbGluZm9bJ2FydGlk J10gOiAnJykuJHNtZF9jYWxpbmZvWydhcnRpdGxlJ107DQoJCQl9DQoJCQlyZXR1cm4gJHVy bC4iPyIuJHRoaXMtPnJlbWFwWydtJ10uIj0kbW9udGgiLmEuJHRoaXMtPnJlbWFwWyd5J10u Ij0keWVhciIuJGZsdDsNCgkJfSBlbHNlIHsgLy8gZm9yIG1lc3N5IFVSTHMgd2UgbmVlZCB0 byBidWlsZCB0aGUgZW50aXJlIHJlcXVlc3Qgc3RyaW5nIGZpcnN0LCB0aGVuIHRhY2sgb24g dGhlIHJlc3QNCgkJCSRvdXQgPSBtYWtlT3V0KCdpZCcsJ3MnLCdjJywncScsJ3BnJywncCcs J21vbnRoJyk7DQoJCQkkb3V0WydzJ10gPSAoJHNlYykgPyAkc2VjIDogJG91dFsncyddOw0K CQkJJHIgPSAnPyc7DQoJCQlmb3JlYWNoKCRvdXQgYXMgJGtleSA9PiAkdmFsICkgew0KCQkJ CSRyIC49ICgkdmFsKSA/ICIka2V5PSR2YWwiLmEgOiAnJzsNCgkJCX0NCgkJCXJldHVybiAk ci4kdGhpcy0+cmVtYXBbJ20nXS4iPSRtb250aCIuYS4kdGhpcy0+cmVtYXBbJ3knXS4iPSR5 ZWFyIi4kZmx0Ow0KCQl9DQoJfQ0KfQ0KDQpjbGFzcyBTTURfU21hbGxfQ2FsZW5kYXIgZXh0 ZW5kcyBTTURfQ2FsZW5kYXIgew0KCXZhciAkc2VjdGlvbiA9ICcnOw0KCXZhciAkY2F0ZWdv cnkgPSAnJzsNCglmdW5jdGlvbiBTTURfU21hbGxfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRl dmVudHMsJHNlY3Rpb24sJGNhdGVnb3J5KSB7DQoJCSR0aGlzLT5zZWN0aW9uID0gJHNlY3Rp b247DQoJCSR0aGlzLT5jYXRlZ29yeSA9ICRjYXRlZ29yeTsNCgkJJHRoaXMtPlNNRF9DYWxl bmRhcigkeWVhciwkbW9udGgsJGV2ZW50cyk7DQoJfQ0KDQoJZnVuY3Rpb24gZHNwRGF5Q2Vs bCgkdGhlZGF5KSB7DQoJCWdsb2JhbCAkcGVybWxpbmtfbW9kZTsNCgkJJGhhc2FydGljbGUg PSBpc3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXldKTsNCgkJJGNsYXNzID0gYXJyYXkoKTsN CgkJJHRkY2xhc3MgPSAkdGhpcy0+Y2VsbGNsYXNzLicgJy4gKCgkaGFzYXJ0aWNsZSkgPyAk dGhpcy0+Y2xzX3BmeC4nZXZlbnQnIDogJycpOw0KCQlpZiAodHJpbSgkdGRjbGFzcykgIT0g IiIpIHsNCgkJCSRjbGFzc1tdID0gJHRkY2xhc3M7DQoJCX0NCgkJaWYgKChpbl9hcnJheSgg ZGF0ZSgnZC1NLVknLCBnbW1rdGltZSggMCwgMCwgMCwgJHRoaXMtPm1vbnRoLCAkdGhlZGF5 LCAkdGhpcy0+eWVhcikgKSwgJHRoaXMtPmhvbGlkYXlzKSkgKSB7DQoJCQkkY2xhc3NbXSA9 ICR0aGlzLT5jbHNfcGZ4Lidob2xzJzsNCgkJfQ0KCQlpZigkdGhpcy0+eWVhciA9PSBkYXRl KCdZJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09IGRhdGUoJ24n LHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2onLHRpbWUoKSt0 el9vZmZzZXQoKSkgKSB7DQoJCQkkY2xhc3NbXSA9ICR0aGlzLT5jbHNfcGZ4Lid0b2RheSc7 DQoJCX0NCg0KCQlpZiggaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSkgKSB7DQoJCQkk ZGF5c19ldmVudHMgPSAkdGhpcy0+ZXZlbnRzWyR0aGVkYXldOw0KCQkJZm9yZWFjaCgkZGF5 c19ldmVudHMgYXMgJGV2KSB7DQoJCQkJJGV2Y2xhc3MgPSB0cmltKCRldlsnY2xhc3Nlcydd KTsNCgkJCQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2Y2xhc3MpIGFzICRldmMpIHsNCgkJ CQkJJGNsYXNzW109ICRldmM7DQoJCQkJfQ0KDQoJCQkJJG91dFtdID0gKCR0aGlzLT5ldndy YXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMtPmV2d3JhcHRhZywgKCgkZXZjbGFzcykg PyAnIGNsYXNzPSInLnRyaW0oJGV2Y2xhc3MpLiciJyA6ICcnKSkgOiAkZXZbJ2V2J107DQoJ CQl9DQoJCQkkdXNlX3Bvc3RlZCA9IGZhbHNlOw0KCQkJZm9yZWFjaCAoJHRoaXMtPmxpbmtw b3N0ZWQgYXMgJGRsaW5rcykgew0KCQkJCWlmIChpbl9hcnJheSgkZGxpbmtzLCAkY2xhc3Mp KSB7DQoJCQkJCSR1c2VfcG9zdGVkID0gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJ fQ0KCQkJaWYoICRwZXJtbGlua19tb2RlICE9ICd5ZWFyX21vbnRoX2RheV90aXRsZScgKSB7 DQoJCQkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/ICRldlsncG9zdGVkJ10gOiAkdGhp cy0+eWVhci4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGlzLT5tb250aCkuJy0nLiR0aGlz LT5kb3VibGVkaWdpdCgkdGhlZGF5KTsNCgkJCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4nP2Rh dGU9Jy4kbGlua2RhdGU7DQoJCQkJaWYoJHRoaXMtPnNlY3Rpb24pIHsgJGhyZWYgPSAkaHJl Zi5hLidzPScuJHRoaXMtPnNlY3Rpb247IH0NCgkJCQlpZigkdGhpcy0+Y2F0ZWdvcnkpIHsg JGhyZWYgPSAkaHJlZi5hLidjPScuJHRoaXMtPmNhdGVnb3J5OyB9DQoJCQkJJGhyZWYgLj0g JyInOw0KCQkJfSBlbHNlIHsNCgkJCQkkc2VjdGlvbiA9ICgkdGhpcy0+c2VjdGlvbikgPyAk dGhpcy0+c2VjdGlvbi4nLycgOiAnJzsNCgkJCQkkbGlua2RhdGUgPSAoJHVzZV9wb3N0ZWQp ID8gcHJlZ19yZXBsYWNlKCItIiwgIi8iLCAkZXZbJ3Bvc3RlZCddKSA6ICR0aGlzLT55ZWFy LicvJy4kdGhpcy0+ZG91YmxlZGlnaXQoJHRoaXMtPm1vbnRoKS4nLycuJHRoaXMtPmRvdWJs ZWRpZ2l0KCR0aGVkYXkpOw0KCQkJCSRocmVmID0gJyBocmVmPSInLmh1LiRzZWN0aW9uLiRs aW5rZGF0ZS4nIic7DQoJCQl9DQoNCgkJCSRjW10gPSBkb1RhZygkdGhlZGF5LmpvaW4oJycs JG91dCksJ2EnLCcnLCRocmVmKTsNCgkJfSBlbHNlIHsNCgkJCSRjW10gPSAkdGhlZGF5Ow0K CQl9DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0ZCcsam9pbignICcsJGNsYXNz KSk7DQoJfQ0KDQoJZnVuY3Rpb24gZG91YmxlZGlnaXQoJG4pIHsNCgkJaWYoJG4gPCAxMCkg eyAkbiA9ICcwJy4oaW50KSRuOyB9DQoJCXJldHVybiAkbjsNCgl9DQoNCn0NCg0KLyoqDQoq IEJhc2ljIENhbGVuZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiogaHR0cDovL3d3dy5vc2Nhcm0u b3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0aG9yIE9zY2FyIE1lcmlkYQ0K KiBAY3JlYXRlZCBKYW4gMTggMjAwNA0KKi8NCmNsYXNzIFNNRF9SYXdfQ2FsZW5kYXIgew0K dmFyICRnbXQgPSAxLCAkbGFuZzsNCnZhciAkeWVhciwgJGV5ciwgJGx5ciwgJG1vbnRoLCAk d2VlazsNCnZhciAkZGF5TmFtZUZtdCwgJG10aE5hbWVGbXQsICRkYXlOYW1lcywgJG10aE5h bWVzLCAkc3RhcnREYXksICRlbmREYXksICRmaXJzdERheU9mV2VlayA9IDAsICRzdGFydE9m ZnNldCA9IDA7DQp2YXIgJHNlbGVjdG9ycywgJHNlbGJ0biwgJHNlbHBmeCwgJHNlbHNmeDsN CnZhciAkc2hvd0lTT1dlZWssICRJU09XZWVrSGVhZCwgJElTT1dlZWtDZWxsOw0KdmFyICRj bHNfbGV2LCAkY2xzX3BmeCwgJGZvcHRzOw0KdmFyICRldndyYXB0YWcsICRteXdyYXB0YWc7 DQp2YXIgJHJvd2NsYXNzLCAkY2VsbGNsYXNzLCAkZW1wdHljbGFzcywgJGlzb2NsYXNzLCAk bXljbGFzcywgJHRhYmxlSUQ7DQp2YXIgJG5hdnBjbGFzcywgJG5hdm5jbGFzcywgJG5hdnBh cnJvdywgJG5hdm5hcnJvdywgJG5hdmlkOw0KdmFyICRob2xpZGF5cywgJGxpbmtwb3N0ZWQs ICRjZWxsZm9ybSwgJG1haW50YWluLCAkcmVtYXA7DQovKioNCiogQ29uc3RydWN0b3INCioN CiogQHBhcmFtIGludGVnZXIsIHllYXINCiogQHBhcmFtIGludGVnZXIsIG1vbnRoDQoqIEBy ZXR1cm4gb2JqZWN0DQoqIEBwdWJsaWMNCiovDQpmdW5jdGlvbiBTTURfUmF3X0NhbGVuZGFy ICgkeXIsICRtbykgew0KCSR0aGlzLT5zZXRZZWFyKCR5cik7DQoJJHRoaXMtPnNldE1vbnRo KCRtbyk7DQoJJHRoaXMtPnNldENsYXNzUHJlZml4KCdzbWRfY2FsXycpOw0KDQoJJHRoaXMt PnN0YXJ0VGltZSA9IHN0cnRvdGltZSggIiR5ci0kbW8tMDEgMDA6MDAiICk7DQoJJHRoaXMt PnN0YXJ0RGF5CT0gZGF0ZSggJ0QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPmVu ZERheSA9IGRhdGUoICd0JywgJHRoaXMtPnN0YXJ0VGltZSApOw0KCSR0aGlzLT5lbmRUaW1l ICAgPSBzdHJ0b3RpbWUoICIkeXItJG1vLSIuJHRoaXMtPmVuZERheS4iIDIzOjU5IiApOw0K DQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVhJywgJ2QnKTsNCgkkdGhpcy0+c2V0TmFtZUZv cm1hdCgnJUInLCAnbScpOw0KCSR0aGlzLT5zZXRGaXJzdERheU9mV2VlaygwKTsNCgkkdGhp cy0+c2V0U2hvd0lTT1dlZWsoJycpOw0KCSR0aGlzLT5zZXRUYWJsZUlEKCcnKTsNCgkkdGhp cy0+c2V0VGFibGVDbGFzcygnJyk7DQp9DQovLyA9PT0gZW5kIENhbGVuZGFyID09PQ0KLy8g R2V0dGVycw0KZnVuY3Rpb24gdXNlU2VsZWN0b3IoJHZhbCkgeyByZXR1cm4gaW5fYXJyYXko JHZhbCwgJHRoaXMtPnNlbGVjdG9ycyk7IH0NCmZ1bmN0aW9uIGdldERheU5hbWUoJGRheSkg eyByZXR1cm4gKCR0aGlzLT5kYXlOYW1lc1skZGF5JTddKTsgfQ0KZnVuY3Rpb24gZ2V0TW9u dGhOYW1lKCkgew0KCWlmIChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkpIHsNCgkJcmV0 dXJuICR0aGlzLT5tdGhOYW1lc1tkYXRlKCduJywkdGhpcy0+c3RhcnRUaW1lKV07DQoJfSBl bHNlIHsNCgkJcmV0dXJuIHN0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCAkdGhpcy0+c3Rh cnRUaW1lKTsNCgl9DQp9DQpmdW5jdGlvbiBnZXROYXZJbmZvKCR0eXBlKSB7DQoJJHIgPSAn JzsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgImlkIjogJHIgPSAkdGhpcy0+bmF2aWQ7 IGJyZWFrOw0KCQljYXNlICJwYyI6ICRyID0gJHRoaXMtPm5hdnBjbGFzczsgYnJlYWs7DQoJ CWNhc2UgIm5jIjogJHIgPSAkdGhpcy0+bmF2bmNsYXNzOyBicmVhazsNCgkJY2FzZSAicGEi OiAkciA9ICR0aGlzLT5uYXZwYXJyb3c7IGJyZWFrOw0KCQljYXNlICJuYSI6ICRyID0gJHRo aXMtPm5hdm5hcnJvdzsgYnJlYWs7DQoJfQ0KCXJldHVybiAkcjsNCn0NCi8vIFNldHRlcnMN CmZ1bmN0aW9uIHNldEdNVCgkYil7ICR0aGlzLT5nbXQgPSAkYjsgfQ0KZnVuY3Rpb24gc2V0 TGFuZygkY29kZSl7ICR0aGlzLT5sYW5nID0gJGNvZGU7IH0NCmZ1bmN0aW9uIHNldENlbGxG b3JtKCRmcm0peyAkdGhpcy0+Y2VsbGZvcm0gPSAkZnJtOyB9DQpmdW5jdGlvbiBzZXRUYWJs ZUlEKCRpZCl7ICR0aGlzLT50YWJsZUlEID0gJGlkOyB9DQpmdW5jdGlvbiBzZXRZZWFyKCR5 cil7ICR0aGlzLT55ZWFyID0gJHlyOyB9DQpmdW5jdGlvbiBzZXRFWWVhcigkeXIpeyAkdGhp cy0+ZXlyID0gJHlyOyB9DQpmdW5jdGlvbiBzZXRMWWVhcigkeXIpeyAkdGhpcy0+bHlyID0g JHlyOyB9DQpmdW5jdGlvbiBzZXRNb250aCgkbXRoKXsgJHRoaXMtPm1vbnRoID0gKGludCkk bXRoOyB9DQpmdW5jdGlvbiBzZXRXZWVrKCR3ayl7DQoJaWYgKCR3aykgew0KCQkkd2sgPSBz dHJfcGFkKCR3aywgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkdGhpcy0+d2VlayA9ICR3 azsNCgkJJHRoaXMtPm1vbnRoID0gc2FmZV9zdHJmdGltZSgiJW0iLCBzdHJ0b3RpbWUoJHRo aXMtPnllYXIuIlciLiR3aykpOw0KCX0NCn0NCmZ1bmN0aW9uIHNldE5hdktlZXAoJGFyKXsg JHRoaXMtPm1haW50YWluID0gJGFyOyB9DQpmdW5jdGlvbiBzZXRTaG93SVNPV2VlaygkdmFs KSB7DQoJJHRoaXMtPnNob3dJU09XZWVrID0gKCR2YWwpID8gdHJ1ZSA6IGZhbHNlOw0KCWlm ICgkdmFsKSB7DQoJCSR2YWwgPSBkb19saXN0KCR2YWwpOw0KCQkkdGhpcy0+SVNPV2Vla0hl YWQgPSAkdmFsWzBdOw0KCQkkdGhpcy0+SVNPV2Vla0NlbGwgPSAoaXNzZXQoJHZhbFsxXSkp ID8gJHZhbFsxXSA6ICd7d2Vla30nOw0KCX0NCn0NCmZ1bmN0aW9uIHNldFJlbWFwKCRtYXAp eyAkdGhpcy0+cmVtYXAgPSAkbWFwOyB9DQpmdW5jdGlvbiBzZXRDbGFzc0xldmVscygkY2xz KXsgJHRoaXMtPmNsc19sZXYgPSAkY2xzOyB9DQpmdW5jdGlvbiBzZXRDbGFzc1ByZWZpeCgk Y2xzKXsgJHRoaXMtPmNsc19wZnggPSAkY2xzOyB9DQpmdW5jdGlvbiBzZXRFdmVudFdyYXB0 YWcoJHdyYXApeyAkdGhpcy0+ZXZ3cmFwdGFnID0gJHdyYXA7IH0NCmZ1bmN0aW9uIHNldE1Z V3JhcHRhZygkd3JhcCl7ICR0aGlzLT5teXdyYXB0YWcgPSAkd3JhcDsgfQ0KZnVuY3Rpb24g c2V0VGFibGVDbGFzcygkY2xzKSB7ICR0aGlzLT50YWJsZWNsYXNzID0gKCRjbHMpID8gJHRo aXMtPmNsc19wZnguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRSb3dDbGFzcygkY2xzKXsg JHRoaXMtPnJvd2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9 DQpmdW5jdGlvbiBzZXRDZWxsQ2xhc3MoJGNscyl7ICR0aGlzLT5jZWxsY2xhc3MgPSAoJGNs cykgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldEVtcHR5Q2xh c3MoJGNscyl7ICR0aGlzLT5lbXB0eWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZngu JGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRJU09XZWVrQ2xhc3MoJGNscyl7ICR0aGlzLT5p c29jbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rp b24gc2V0TmF2SW5mbygkY2xzcCwgJGNsc24sICRhcnJwLCAkYXJybiwgJG5pZCl7DQoJJHRo aXMtPm5hdnBjbGFzcyA9ICgkY2xzcCkgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzcCA6ICcnOw0K CSR0aGlzLT5uYXZuY2xhc3MgPSAoJGNsc24pID8gJHRoaXMtPmNsc19wZnguJGNsc24gOiAn JzsNCgkkdGhpcy0+bmF2cGFycm93ID0gKCRhcnJwKSA/ICRhcnJwIDogJyc7DQoJJHRoaXMt Pm5hdm5hcnJvdyA9ICgkYXJybikgPyAkYXJybiA6ICcnOw0KCSR0aGlzLT5uYXZpZCA9ICgk bmlkKSA/ICR0aGlzLT5jbHNfcGZ4LiRuaWQgOiAnJzsNCn0NCmZ1bmN0aW9uIHNldE1ZQ2xh c3MoJGNscyl7ICR0aGlzLT5teWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNs cyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRGaWx0ZXJPcHRzKCRmKSB7ICR0aGlzLT5mb3B0cyA9 ICRmOyB9DQpmdW5jdGlvbiBzZXRMaW5rUG9zdGVkKCRkbCkgew0KCWZvcmVhY2ggKCRkbCBh cyAkZHZhbCkgew0KCQkkdGhpcy0+bGlua3Bvc3RlZFtdID0gJHRoaXMtPmNsc19wZnguJGR2 YWw7DQoJfQ0KfQ0KZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRoaXMtPmhvbGlk YXlzID0gJGhvbHM7IH0NCmZ1bmN0aW9uIHNldFNlbGVjdG9ycygkc2VsLCAkYnRuKSB7DQoJ Zm9yZWFjaCAoJHNlbCBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCSRzZWxwYXJ0cyA9IGV4cGxv ZGUoIjoiLCAkaXRlbSk7DQoJCSRzZWxbJGlkeF0gPSAkc2VscGFydHNbMF07DQoJCSR0aGlz LT5zZWxwZnhbJHNlbHBhcnRzWzBdXSA9IChpc3NldCgkc2VscGFydHNbMV0pKSA/ICRzZWxw YXJ0c1sxXSA6ICcnOw0KCQkkdGhpcy0+c2Vsc2Z4WyRzZWxwYXJ0c1swXV0gPSAoaXNzZXQo JHNlbHBhcnRzWzJdKSkgPyAkc2VscGFydHNbMl0gOiAnJzsNCgl9DQoJJHRoaXMtPnNlbGVj dG9ycyA9ICRzZWw7DQoJJHRoaXMtPnNlbGJ0biA9ICRidG47DQp9DQpmdW5jdGlvbiBzZXRG aXJzdERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5maXJzdERheU9mV2VlayA9ICgoaW50KSRk IDw9IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50KSRkIDogMDsNCg0KCSR0aGlzLT5zdGFy dE9mZnNldCA9IGRhdGUoICd3JywgJHRoaXMtPnN0YXJ0VGltZSApLSR0aGlzLT5maXJzdERh eU9mV2VlazsNCglpZiAoICR0aGlzLT5zdGFydE9mZnNldCA8IDAgKSB7DQoJCSR0aGlzLT5z dGFydE9mZnNldCA9IDcgLSBhYnMoJHRoaXMtPnN0YXJ0T2Zmc2V0KTsNCgl9DQp9DQovKioN CiogZnJtOiBhbnkgdmFsaWQgUEhQIHN0cmZ0aW1lKCkgc3RyaW5nIG9yIEFCQlIvRlVMTA0K KiB0eXA6IGQgdG8gc2V0IGRheSwgbSB0byBzZXQgbW9udGggZm9ybWF0DQoqLw0KZnVuY3Rp b24gc2V0TmFtZUZvcm1hdCgkZnJtLCAkdHlwPSJkIikgew0KCXN3aXRjaCAoJGZybSkgew0K CQljYXNlICJmdWxsIjoNCgkJY2FzZSAiRlVMTCI6DQoJCQkkZm10ID0gKCR0eXAgPT0gJ2Qn KSA/ICIlQSIgOiAiJUIiOw0KCQkJYnJlYWs7DQoJCWNhc2UgImFiYnIiOg0KCQljYXNlICJB QkJSIjoNCgkJCSRmbXQgPSAoJHR5cCA9PSAnZCcpID8gIiVhIiA6ICIlYiI7DQoJCQlicmVh azsNCgkJZGVmYXVsdDoNCgkJCWlmIChzdHJwb3MoJGZybSwgJyUnKSA9PT0gMCkgew0KCQkJ CSRmbXQgPSAkZnJtOw0KCQkJfSBlbHNlIHsNCgkJCQkkZnJtID0gdHJpbSgkZnJtLCAne30n KTsNCgkJCQkkZnJtID0gZG9fbGlzdCgkZnJtKTsNCgkJCQkkZm10ID0gJGZybTsNCgkJCX0N CgkJCWJyZWFrOw0KCX0NCg0KCWlmICgkdHlwID09ICJkIikgew0KCQkkdGhpcy0+ZGF5TmFt ZUZtdCA9ICRmbXQ7DQoJCSR0aGlzLT5kYXlOYW1lcyA9IGFycmF5KCk7DQoNCgkJLy8gVGhp cyBpcyBkb25lIHRvIG1ha2Ugc3VyZSBTdW5kYXkgaXMgYWx3YXlzIHRoZSBmaXJzdCBkYXkg b2Ygb3VyIGFycmF5DQoJCS8vIFVuaXggdGltZSBnZXRzIGEgbGl0dGxlIGZ1bmt5IGF0IHRo ZSBiZWdpbm5pbmcgZGVwZW5kaW5nIHVwb24gdGhlIHRpbWV6b25lLg0KCQkkc2VydmVyb2Zm c2V0ID0gZ21ta3RpbWUoMCwwLDApIC0gbWt0aW1lKDAsMCwwKTsNCgkJJHN0YXJ0ID0gKCRz ZXJ2ZXJvZmZzZXQgPCAwKSA/IDQgOiAzOw0KCQkkZW5kID0gJHN0YXJ0ICsgNzsNCgkJZm9y KCRpPSRzdGFydDsgJGk8JGVuZDsgJGkrKykgew0KCQkJaWYgKGlzX2FycmF5KCRmbXQpKSB7 DQoJCQkJJHRoaXMtPmRheU5hbWVzW10gPSAkZm10WyRpLSRzdGFydF07DQoJCQl9IGVsc2Ug ew0KCQkJCSR0aGlzLT5kYXlOYW1lc1tdID0gdWNmaXJzdChzYWZlX3N0cmZ0aW1lKCRmbXQs IDg2NDAwKiRpIC0gdHpfb2Zmc2V0KCksICR0aGlzLT5nbXQsICR0aGlzLT5sYW5nICkpOw0K CQkJfQ0KCQl9DQoJfSBlbHNlIHsNCgkJJHRoaXMtPm10aE5hbWVGbXQgPSAkZm10Ow0KCQkk dGhpcy0+bXRoTmFtZXMgPSBhcnJheSgpOw0KCQlmb3IgKCRpPTA7ICRpPDEyOyAkaSsrKSB7 DQoJCQlpZiAoaXNfYXJyYXkoJGZtdCkpIHsNCgkJCQkkdGhpcy0+bXRoTmFtZXNbJGkrMV0g PSAkZm10WyRpXTsNCgkJCX0gZWxzZSB7DQoJCQkJJHRoaXMtPm10aE5hbWVzWyRpKzFdID0g dWNmaXJzdChzYWZlX3N0cmZ0aW1lKCRmbXQsIDg2NDAwKiRpIC0gdHpfb2Zmc2V0KCksICR0 aGlzLT5nbXQsICR0aGlzLT5sYW5nICkpOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KLyoqDQoqIFJl dHVybiBtYXJrdXAgZm9yIGRpc3BsYXlpbmcgdGhlIGNhbGVuZGFyLg0KKiBAcmV0dXJuDQoq IEBwdWJsaWMNCiovDQpmdW5jdGlvbiBkaXNwbGF5ICggKSB7DQoJJGlkID0gKCR0aGlzLT50 YWJsZUlEKSA/ICcgaWQ9IicuJHRoaXMtPnRhYmxlSUQuJyInIDogJyc7DQoJJGNbXSA9ICc8 dGFibGUnLiRpZC4nPic7DQoJJGNbXSA9ICR0aGlzLT5kc3BEYXlOYW1lcygpOw0KCSRjW10g PSAkdGhpcy0+ZHNwRGF5Q2VsbHMoKTsNCgkkY1tdID0gJzwvdGFibGU+JzsNCg0KCXJldHVy biBqb2luKCcnLCRjKTsNCn0NCi8vID09PSBlbmQgZGlzcGxheSA9PT0NCi8qKg0KKiBEaXNw bGF5cyB0aGUgcm93IG9mIGRheSBuYW1lcy4NCiogQHJldHVybiBzdHJpbmcNCiogQHByaXZh dGUNCiovDQpmdW5jdGlvbiBkc3BEYXlOYW1lcyAoICkgew0KCSRjW10gPSAnPHRyIGNsYXNz PSJzbWRfY2FsX2RheW5hbWVzIj4nOw0KDQoJJGkgPSAkdGhpcy0+Zmlyc3REYXlPZldlZWs7 DQoJJGogPSAwOyAvLyBjb3VudCBudW1iZXIgb2YgZGF5cyBkaXNwbGF5ZWQNCgkkZW5kID0g ZmFsc2U7DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSRjW10gPSAiPHRoPiIu JHRoaXMtPklTT1dlZWtIZWFkLiI8L3RoPiI7DQoJfQ0KCWZvcigkaiA9IDA7ICRqPD02OyAk aisrLCAkaSsrKSB7DQoJCWlmKCRpID09IDcpIHsgJGkgPSAwOyB9DQoJCSRjW10gPSAnPHRo PicuJHRoaXMtPmdldERheU5hbWUoJGkpLiI8L3RoPiI7DQoJfQ0KDQoJJGNbXSA9ICc8L3Ry Pic7DQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09IGVuZCBkc3BEYXlOYW1lcyA9 PT0NCi8qKg0KKiBEaXNwbGF5cyBhbGwgZGF5IGNlbGxzIGZvciB0aGUgbW9udGgNCioNCiog QHJldHVybiBzdHJpbmcNCiogQHByaXZhdGUNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxscyAo ICkgew0KCSRpID0gMDsgLy8gY2VsbCBjb3VudGVyDQoJJGVtcHR5Q2xhc3MgPSAkdGhpcy0+ ZW1wdHljbGFzczsNCgkkaXNvQ2xhc3MgPSAkdGhpcy0+aXNvY2xhc3M7DQoJJHJvd0NsYXNz ID0gJHRoaXMtPnJvd2NsYXNzOw0KCSRyb3dDbGFzcyA9ICgkcm93Q2xhc3MpID8gJyBjbGFz cz0iJy4kcm93Q2xhc3MuJyInIDogJyc7DQoNCgkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+ JzsNCg0KCWlmICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJJHJlcHMgPSBhcnJheSgNCgkJ CSd7d2Vla30nID0+IGRhdGUoJ1cnLCAkdGhpcy0+c3RhcnRUaW1lKSwNCgkJCSd7bW9udGh9 JyA9PiBkYXRlKCduJywgJHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne3llYXJ9JyA9PiBkYXRl KCdZJywgJHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne2lzb3llYXJ9JyA9PiBkYXRlKCdvJywg JHRoaXMtPnN0YXJ0VGltZSksDQoJCSk7DQoJCSR3a2NlbGwgPSBzdHJ0cigkdGhpcy0+SVNP V2Vla0NlbGwsICRyZXBzKTsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0NsYXNzLici PicuJHdrY2VsbC4nPC90ZD4nOw0KCX0NCgkvLyBmaXJzdCBkaXNwbGF5IGVtcHR5IGNlbGxz IGJhc2VkIG9uIHdoYXQgd2Vla2RheSB0aGUgbW9udGggc3RhcnRzIGluDQoJZm9yKCAkaj0w OyAkajwkdGhpcy0+c3RhcnRPZmZzZXQ7ICRqKysgKQl7DQoJCSRpKys7DQoJCSRjW10gPSAn PHRkIGNsYXNzPSInLiRlbXB0eUNsYXNzLiciPiZuYnNwOzwvdGQ+JzsNCgl9IC8vIGVuZCBv ZmZzZXQgY2VsbHMNCg0KCS8vIHdyaXRlIG91dCB0aGUgcmVzdCBvZiB0aGUgZGF5cywgYXQg ZWFjaCBzdW5kYXksIHN0YXJ0IGEgbmV3IHJvdy4NCglmb3IoICRkPTE7ICRkPD0kdGhpcy0+ ZW5kRGF5OyAkZCsrICkgew0KCQkkaSsrOw0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGwo ICRkICk7DQoJCWlmICggJGklNyA9PSAwICkgeyAkY1tdID0gJzwvdHI+JzsgfQ0KCQlpZiAo ICRkPCR0aGlzLT5lbmREYXkgJiYgJGklNyA9PSAwICkgew0KCQkJJGNbXSA9ICc8dHInLiRy b3dDbGFzcy4nPic7DQoJCQlpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCQkJJHRoZVRp bWUgPSBzdHJ0b3RpbWUoJHRoaXMtPnllYXIuIi0iLiR0aGlzLT5tb250aC4iLSIuKGludCko JGQgKyAxKSAuIiAwMDowMCIpOw0KCQkJCSRyZXBzID0gYXJyYXkoDQoJCQkJCSd7d2Vla30n ID0+IGRhdGUoJ1cnLCAkdGhlVGltZSksDQoJCQkJCSd7bW9udGh9JyA9PiBkYXRlKCduJywg JHRoZVRpbWUpLA0KCQkJCQkne3llYXJ9JyA9PiBkYXRlKCdZJywgJHRoZVRpbWUpLA0KCQkJ CQkne2lzb3llYXJ9JyA9PiBkYXRlKCdvJywgJHRoZVRpbWUpLA0KCQkJCSk7DQoJCQkJJHdr Y2VsbCA9IHN0cnRyKCR0aGlzLT5JU09XZWVrQ2VsbCwgJHJlcHMpOw0KCQkJCSRjW10gPSAn PHRkIGNsYXNzPSInLiRpc29DbGFzcy4nIj4nLiR3a2NlbGwuJzwvdGQ+JzsNCgkJCX0NCgkJ fQ0KCX0NCgkvLyBmaWxsIGluIHRoZSBmaW5hbCByb3cNCgkkbGVmdCA9IDcgLSAoICRpJTcg KTsNCglpZiAoICRsZWZ0IDwgNykJew0KCQlmb3IgKCAkaj0wOyAkajwkbGVmdDsgJGorKyAp CXsNCgkJICAkY1tdID0gJzx0ZCBjbGFzcz0iJy4kZW1wdHlDbGFzcy4nIj4mbmJzcDs8L3Rk Pic7DQoJCX0NCgkJJGNbXSA9ICJcblx0PC90cj4iOw0KCX0NCglyZXR1cm4gam9pbignJywk Yyk7DQp9DQovLyA9PT0gZW5kIGRzcERheUNlbGxzID09PQ0KLyoqDQoqIG91dHB1dHMgdGhl IGNvbnRlbnRzIGZvciBhIGdpdmVuIGRheQ0KKg0KKiBAcGFyYW0gaW50ZWdlciwgZGF5DQoq IEBhYnN0cmFjdA0KKi8NCmZ1bmN0aW9uIGRzcERheUNlbGwgKCAkZGF5ICkgew0KCXJldHVy biAnPHRkPicuJGRheS4nPC90ZD4nOw0KfQ0KLy8gPT09IGVuZCBkYXlDZWxsID09PQ0KfSAv LyBlbmQgY2xhc3MNCg0KLy8gUGVyZm9ybSBvbmUgb2YgMiB0eXBlcyBvZiB0ZXN0OiBhIGZs YWctYmFzZWQgdGVzdCwgb3IgYW4gaW5mby1iYXNlZCB0ZXN0DQpmdW5jdGlvbiBzbWRfaWZf Y2FsKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9jYWxfZmxhZywgJHNtZF9jYWxp bmZvLCAkc21kX2RhdGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknZmxhZycgPT4g JycsDQoJCSdjYWxpZCcgPT4gJycsDQoJCSdpc295ZWFyJyA9PiAnJywNCgkJJ3llYXInID0+ ICcnLA0KCQknbW9udGgnID0+ICcnLA0KCQknd2VlaycgPT4gJycsDQoJCSdkYXknID0+ICcn LA0KCQknbG9naWMnID0+ICdvcicsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSksICRhdHRzKSk7 DQoNCgkkZmxhZyA9IGRvX2xpc3QoJGZsYWcpOw0KCSRjdHIgPSAkbnVtID0gMDsNCg0KCWlm ICgkZGVidWcpIHsNCgkJZG1wKCRhdHRzKTsNCgl9DQoNCglpZiAoJGZsYWcgJiYgJGZsYWdb MF0gIT0gJycpIHsNCgkJJG51bSArPSBjb3VudCgkZmxhZyk7DQoJCWZvcmVhY2ggKCRmbGFn IGFzICR3aGF0bm90KSB7DQoJCQlpZiAoZW1wdHkoJHdoYXRub3QpKSBjb250aW51ZTsNCgkJ CSRjdHIgKz0gKGluX2FycmF5KCR3aGF0bm90LCAkc21kX2NhbF9mbGFnKSB8fCAoJHdoYXRu b3QgPT0gJ1NNRF9BTlknICYmICFlbXB0eSgkc21kX2NhbF9mbGFnKSkpID8gMSA6IDA7DQoJ CX0NCgl9DQoJaWYgKCRjYWxpZCkgew0KCQkkbnVtKys7DQoJCSRjdHIgKz0gKCRzbWRfY2Fs aW5mb1snaWQnXSA9PT0gJGNhbGlkKSA/IDEgOiAwOw0KCX0NCglmb3JlYWNoIChhcnJheSgi aXkiID0+ICJpc295ZWFyIiwgInkiID0+ICJ5ZWFyIiwgIm0iID0+ICJtb250aCIsICJ3IiA9 PiAid2VlayIsICJkIiA9PiAiZGF5IikgYXMgJGlkeCA9PiAkdGVzdCkgew0KCQkkdGVzdGVy ID0gJCR0ZXN0Ow0KCQkkY29tcGFyZSA9ICRzbWRfZGF0ZVskaWR4XTsNCg0KCQlpZiAoJHRl c3Rlcikgew0KCQkJJG51bSsrOw0KCQkJcHJlZ19tYXRjaCgnLyhbIT08Pl0rKT8oW1xkXSsp LycsICR0ZXN0ZXIsICRtYXRjaGVzKTsNCgkJCWlmICgkZGVidWcpIHsNCgkJCQlkbXAoIlRF U1QgSUY6ICIuICRjb21wYXJlLiAoKCRtYXRjaGVzWzFdKSA/ICRtYXRjaGVzWzFdIDogJz0n KSAuICRtYXRjaGVzWzJdICk7DQoJCQl9DQoJCQlzd2l0Y2ggKCRtYXRjaGVzWzFdKSB7DQoJ CQkJY2FzZSAiISI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlIT0kbWF0Y2hlc1syXSkgPyAx IDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPiI6DQoJCQkJCSRjdHIgKz0gKCRjb21w YXJlPiRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI+PSI6 DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPj0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJ YnJlYWs7DQoJCQkJY2FzZSAiPCI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPCRtYXRjaGVz WzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI8PSI6DQoJCQkJCSRjdHIg Kz0gKCRjb21wYXJlPD0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJ ZGVmYXVsdDoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmU9PSRtYXRjaGVzWzJdKSA/IDEgOiAw Ow0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkkcmVzdWx0ID0gKCgkY3RyID09PSAk bnVtICYmICRsb2dpYyA9PSAiYW5kIikgfHwgJGN0ciA+IDAgJiYgJGxvZ2ljID09ICJvciIp ID8gdHJ1ZSA6IGZhbHNlOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRyZXN1 bHQpKTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbF9pbmZvKCRhdHRzKSB7DQoJZ2xvYmFsICRw cmV0ZXh0LCAkdGhpc2FydGljbGUsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNt ZF9kYXRlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnID0+ICdmbGFnJywN CgkJJ2pvaW4nID0+ICcgJywNCgkJJ2pvaW5fcHJlZml4JyA9PiAnU01EX0FVVE8nLA0KCQkn aHRtbCcgPT4gMCwNCgkJJ2VzY2FwZScgPT4gJ2h0bWwnLA0KCSksICRhdHRzKSk7DQoNCgkv LyBUeXBlOiAwPWRhdGUsIDE9c21kX2NhbGluZm8sIDI9cHJldGV4dCwgMz10aGlzYXJ0aWNs ZSwgNChvciBvdGhlcik9dXNlciB2YWx1ZQ0KCSRtYXAgPSBhcnJheSgNCgkJJ3llYXInID0+ IGFycmF5KDAsICd5JywpLA0KCQknaXNveWVhcicgPT4gYXJyYXkoMCwgJ2l5JywgJ3knKSwN CgkJJ21vbnRoJyA9PiBhcnJheSgwLCAnbScpLA0KCQknd2VlaycgPT4gYXJyYXkoMCwgJ3cn KSwNCgkJJ2RheScgPT4gYXJyYXkoMCwgJ2QnKSwNCgkJJ3NlY3Rpb24nID0+IGFycmF5KDMs ICcnLCAncycpLA0KCQknY2F0ZWdvcnkxJyA9PiBhcnJheSgzLCAnJywgJ2MnKSwNCgkJJ2Nh dGVnb3J5MicgPT4gYXJyYXkoMywgJycsICdjJyksDQoJCSd0aGlzaWQnID0+IGFycmF5KDMs ICd0aGlzaWQnLCAnaWQnKSwNCgkJJ2FydGljbGUnID0+IGFycmF5KDEsICdhcnRpZCcsICdp ZCcpLA0KCQknY2FsaWQnID0+IGFycmF5KDEsICdpZCcsICdjYWxpZCcpLA0KCQknY2F0ZWdv cnknID0+IGFycmF5KDIsICdjJyksDQoJCSdyZWFsbmFtZScgPT4gYXJyYXkoMiwgJ2F1dGhv cicpLA0KCSk7DQoJJGpvaW4gPSAoJGh0bWwpID8gYSA6ICRqb2luOyAvLyBodG1sIG1vZGUg Zm9yY2VzIGFtcGVyc2FuZCBqb2luDQoJJHR5cGUgPSBkb19saXN0KCR0eXBlKTsNCgkkcmV0 ID0gYXJyYXkoKTsNCglmb3JlYWNoICgkdHlwZSBhcyAkaXRlbSkgew0KCQkkcHRzID0gZG9f bGlzdCgkaXRlbSwgJzonKTsNCgkJJGl0ZW0gPSAkcHRzWzBdOw0KDQoJCWlmIChlbXB0eSgk aXRlbSkpIGNvbnRpbnVlOw0KCQkvLyBEZWZhdWx0IGh0bWwgaWQNCgkJJGhpZCA9IChpc3Nl dCgkbWFwWyRpdGVtXSkpID8gKChpc3NldCgkbWFwWyRpdGVtXVsyXSkpID8gJG1hcFskaXRl bV1bMl0gOiAkbWFwWyRpdGVtXVsxXSkgOiAkaXRlbTsNCgkJLy8gVXNlci1zcGVjaWZpZWQg aHRtbGlkIG92ZXJyaWRlcyBpdA0KCQkkaGlkID0gKGNvdW50KCRwdHMpID4gMSAmJiAhZW1w dHkoJHB0c1sxXSkpID8gJHB0c1sxXSA6ICRoaWQ7DQoJCWlmICgkaXRlbSA9PSAiZmxhZyIp IHsNCgkJCSRyZXRbXSA9ICgoJGpvaW5fcHJlZml4PT0iU01EX0FVVE8iKSA/ICRqb2luIDog JycpLmpvaW4oJGpvaW4sICRzbWRfY2FsX2ZsYWcpOw0KCQl9IGVsc2UgaWYgKCRpdGVtID09 ICJhdXRob3IiIHx8ICRpdGVtID09ICJyZWFsbmFtZSIpIHsNCgkJCSRjdXJyYXV0aG9yID0g KCR0aGlzYXJ0aWNsZSA9PSBOVUxMKSA/ICcnIDogYXV0aG9yKGFycmF5KCkpOw0KCQkJaWYg KCRjdXJyYXV0aG9yKSB7DQoJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcn KSAuICRjdXJyYXV0aG9yOw0KCQkJfQ0KCQl9IGVsc2UgaWYgKCRpdGVtID09ICJzIikgew0K CQkJJHNlYyA9ICghZW1wdHkoJHByZXRleHRbJ3MnXSkpID8gJHByZXRleHRbJ3MnXSA6ICgo aXNzZXQoJHNtZF9jYWxpbmZvWydzJ10pICYmICFlbXB0eSgkc21kX2NhbGluZm9bJ3MnXSkp ID8gJHNtZF9jYWxpbmZvWydzJ10gOiAnJyk7DQoJCQlpZiAoJHNlYykgew0KCQkJCSRyZXRb XSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc2VjOw0KCQkJfQ0KCQl9IGVsc2Ug aWYgKGlzc2V0KCRtYXBbJGl0ZW1dKSkgew0KCQkJJHR5cCA9ICRtYXBbJGl0ZW1dWzBdOw0K CQkJJGlkeCA9IGVtcHR5KCRtYXBbJGl0ZW1dWzFdKSA/ICRpdGVtIDogJG1hcFskaXRlbV1b MV07DQoJCQlzd2l0Y2ggKCR0eXApIHsNCgkJCQljYXNlIDA6DQoJCQkJCWlmICgkc21kX2Rh dGVbJGlkeF0pIHsNCgkJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykg LiAkc21kX2RhdGVbJGlkeF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0K CQkJCQlpZiAoIWVtcHR5KCRzbWRfY2FsaW5mb1skaWR4XSkpIHsNCgkJCQkJCSRyZXRbXSA9 ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc21kX2NhbGluZm9bJGlkeF07DQoJCQkJ CX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQlpZiAoIWVtcHR5KCRwcmV0ZXh0 WyRpZHhdKSkgew0KCQkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAu ICRwcmV0ZXh0WyRpZHhdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMzoNCgkJ CQkJaWYgKCR0aGlzYXJ0aWNsZSAhPSBOVUxMICYmIGlzc2V0KCR0aGlzYXJ0aWNsZVskaWR4 XSkgJiYgIWVtcHR5KCR0aGlzYXJ0aWNsZVskaWR4XSkpIHsNCgkJCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkdGhpc2FydGljbGVbJGlkeF07DQoJCQkJCX0N CgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygkaXRl bSwgJHByZXRleHQpKSB7DQoJCQlpZiAoJHByZXRleHRbJGl0ZW1dKSB7DQoJCQkJJHJldFtd ID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICRwcmV0ZXh0WyRpdGVtXTsNCgkJCX0N CgkJfSBlbHNlIHsNCgkJCWlmICgkdGhpc2FydGljbGUgIT0gTlVMTCAmJiBpc3NldCgkdGhp c2FydGljbGVbJGl0ZW1dKSAmJiAhZW1wdHkoJHRoaXNhcnRpY2xlWyRpdGVtXSkpIHsNCgkJ CQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHRoaXNhcnRpY2xlWyRp dGVtXTsNCgkJCX0NCgkJfQ0KCX0NCgkkcmV0ID0gYXJyYXlfdW5pcXVlKCRyZXQpOw0KCSRv dXQgPSAoKCRqb2luX3ByZWZpeD09IlNNRF9BVVRPIikgPyAoKCRodG1sKSA/ICc/JyA6ICcn KSA6ICRqb2luX3ByZWZpeCkuam9pbigkam9pbiwgJHJldCk7DQoJcmV0dXJuICgkZXNjYXBl PT0naHRtbCcpID8gaHRtbHNwZWNpYWxjaGFycygkb3V0KSA6ICRvdXQ7DQp9DQoNCmZ1bmN0 aW9uIHNtZF9jYWxfbm93KCRhdHRzKSB7DQoJZ2xvYmFsICRkYXRlZm9ybWF0Ow0KDQoJZXh0 cmFjdChsQXR0cyhhcnJheSgNCgkJJ2Zvcm1hdCcgPT4gJGRhdGVmb3JtYXQsDQoJCSdub3cn ID0+ICcnLA0KCQknb2Zmc2V0JyA9PiAnJywNCgkJJ2dtdCcgPT4gJycsDQoJCSdsYW5nJyA9 PiAnJywNCgkpLCAkYXR0cykpOw0KDQoJJHRoZURheSA9IChncHMoJ2QnKSAmJiBpc19udW1l cmljKGdwcygnZCcpKSkgPyAoaW50KWdwcygnZCcpIDogc2FmZV9zdHJmdGltZSgnJWQnKTsN CgkkdGhlTW9udGggPSAoZ3BzKCdtJykgJiYgaXNfbnVtZXJpYyhncHMoJ20nKSkpID8gKGlu dClncHMoJ20nKSA6IHNhZmVfc3RyZnRpbWUoJyVtJyk7DQoJJHRoZVllYXIgPSAoZ3BzKCd5 JykgJiYgaXNfbnVtZXJpYyhncHMoJ3knKSkpID8gKGludClncHMoJ3knKSA6IHNhZmVfc3Ry ZnRpbWUoJyVZJyk7DQoJaWYgKCRub3cpIHsNCgkJJG5vdyA9IHN0cl9yZXBsYWNlKCI/bW9u dGgiLCBkYXRlKCdGJywgZ21ta3RpbWUoMTIsMCwwLCR0aGVNb250aCwkdGhlRGF5LCR0aGVZ ZWFyKSksICRub3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj95ZWFyIiwgJHRoZVllYXIs ICRub3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj9kYXkiLCAkdGhlRGF5LCAkbm93KTsN CgkJJG5vdyA9IHN0cnRvdGltZSgkbm93KTsNCgl9IGVsc2Ugew0KCQkkbm93ID0gdGltZSgp Ow0KCX0NCg0KCWlmICgkb2Zmc2V0KSB7DQoJCSRub3cgPSBzdHJ0b3RpbWUoJG9mZnNldCwg JG5vdyk7DQoJfQ0KDQoJcmV0dXJuIHNhZmVfc3RyZnRpbWUoJGZvcm1hdCwgJG5vdywgJGdt dCwgJGxhbmcpOw0KfQ0KDQovLyBTZXQgdXNlci1kZWZpbmVkIGNsYXNzZXMgZm9yIGEgY2Vs bA0KZnVuY3Rpb24gc21kX2NhbF9jbGFzcygkYXR0cykgew0KCWdsb2JhbCAkc21kX2NhbF91 Y2xzOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0KCSksICRh dHRzKSk7DQoNCgkkbmFtZSA9IGRvX2xpc3QoJG5hbWUpOw0KCSRzbWRfY2FsX3VjbHMgPSBh cnJheV9tZXJnZSgkc21kX2NhbF91Y2xzLCAkbmFtZSk7DQp9DQoNCi8vIDx0eHA6YXJ0aWNs ZV9jdXN0b20gLz4gcmVwbGFjZW1lbnQoaXNoKSB0YWcgdGhhdCB1bmRlcnN0YW5kcyBob3cg dG8gaGFuZGxlIHJlY3VycmluZyBldmVudHMNCmZ1bmN0aW9uIHNtZF9hcnRpY2xlX2V2ZW50 KCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkcHJldGV4dCwgJHRoaXNw YWdlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUnID0+ICdhbnknLA0KCQkn dHlwZScgPT4gJ3N0YW5kYXJkLHJlY3VyLG11bHRpJywNCgkJJ2V4cGlyZWQnID0+ICcnLA0K CQknaWQnID0+ICcnLA0KCQknY2F0ZWdvcnknID0+ICcnLA0KCQknc2VjdGlvbicgPT4gJycs DQoJCSdhdXRob3InID0+ICcnLA0KCQkncmVhbG5hbWUnID0+ICcnLA0KCQknc3RhdHVzJyA9 PiAnbGl2ZScsDQoJCSdzb3J0JyA9PiAnJywNCgkJJ2Zvcm0nID0+ICcnLA0KCQknc3RlcGZp ZWxkJyA9PiAnJywNCgkJJ3NraXBmaWVsZCcgPT4gJycsDQoJCSdvbWl0ZmllbGQnID0+ICcn LA0KCQknZXh0cmFmaWVsZCcgPT4gJycsDQoJCSdhbGxzcGFubmVkJyA9PiAnMCcsDQoJCSdk YXRlZmllbGRzJyA9PiAnJywNCgkJJ21vbnRoJyA9PiAnJywNCgkJJ2Zyb20nID0+ICcnLA0K CQkndG8nID0+ICcnLA0KCQknb2Zmc2V0JyA9PiAwLA0KCQknbGltaXQnID0+ICcxMCcsDQoJ CSdldmVudGxpbWl0JyA9PiAnMTAnLA0KCQkncGFnaW5nJyA9PiAnMScsDQoJCSdwYWdlYnkn ID0+ICcnLA0KCQkncGdvbmx5JyA9PiAnJywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknYnJl YWsnID0+ICcnLA0KCQknY2xhc3MnID0+ICcnLA0KCQknZGVidWcnID0+IDAsDQoJKSwgJGF0 dHMpKTsNCg0KCS8vIFBoYXNlIDEgZmlsdGVycw0KCSRmaWx0U1FMID0gJHN1YlNRTCA9IGFy cmF5KCk7DQoJaWYoJGNhdGVnb3J5KSB7DQoJCSR0bXAgPSBkb1F1b3RlKGpvaW4oIicsJyIs IGRvU2xhc2goZG9fbGlzdCgkY2F0ZWdvcnkpKSkpOw0KCQkkZmlsdFNRTFtdID0gJyggQ2F0 ZWdvcnkxIElOICgnLiR0bXAuJykgT1IgQ2F0ZWdvcnkyIElOICgnLiR0bXAuJykgKSc7DQoJ fQ0KCWlmKCRzZWN0aW9uKSB7DQoJCSRmaWx0U1FMW10gPSAnU2VjdGlvbiBJTiAoJy5kb1F1 b3RlKGpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgkc2VjdGlvbikpKSkuJyknOw0KCX0N CglpZigkcmVhbG5hbWUpIHsNCgkJJGF1dGhvcnMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0 eHBfdXNlcnMnLCAnUmVhbE5hbWUgSU4gKCcuIGRvUXVvdGUoam9pbigiJywnIiwgZG9BcnJh eShkb19saXN0KCRyZWFsbmFtZSksICd1cmxkZWNvZGUnKSkpIC4nKScgKTsNCgkJJGF1dGhv ciA9IGpvaW4oJywnLCAkYXV0aG9ycyk7DQoJfQ0KCWlmKCRhdXRob3IpIHsNCgkJJGZpbHRT UUxbXSA9ICdBdXRob3JJRCBJTiAoJy5kb1F1b3RlKGpvaW4oIicsJyIsIGRvU2xhc2goZG9f bGlzdCgkYXV0aG9yKSkpKS4nKSc7DQoJfQ0KCWlmKCRpZCkgew0KCQkkZmlsdFNRTFtdID0g J0lEIElOICgnLmpvaW4oJywnLCBhcnJheV9tYXAoJ2ludHZhbCcsIGRvX2xpc3QoJGlkKSkp LicpJzsNCgl9DQoJJHR5cGUgPSBkb19saXN0KCR0eXBlKTsNCgkkcGFnZWJ5ID0gKGVtcHR5 KCRwYWdlYnkpID8gJGxpbWl0IDogJHBhZ2VieSk7DQoNCglmb3JlYWNoICgkdHlwZSBhcyAk ZXZ0eXApIHsNCgkJc3dpdGNoKCRldnR5cCkgew0KCQkJY2FzZSAnc3RhbmRhcmQnOg0KCQkJ CWlmICgkc3RlcGZpZWxkKSB7DQoJCQkJCSRzdWJTUUxbXSA9ICIoIi4kc3RlcGZpZWxkLiIg PSAnJyBBTkQgRXhwaXJlcyA9ICIuTlVMTERBVEVUSU1FLiIpIjsNCgkJCQl9DQoJCQkJYnJl YWs7DQoJCQljYXNlICdyZWN1cic6DQoJCQkJaWYgKCRzdGVwZmllbGQpIHsNCgkJCQkJJHN1 YlNRTFtdID0gIigiLiRzdGVwZmllbGQuIiAhPSAnJykiOw0KCQkJCX0NCgkJCQlicmVhazsN CgkJCWNhc2UgJ211bHRpJzoNCgkJCQlpZiAoJHN0ZXBmaWVsZCkgew0KCQkJCQkkc3ViU1FM W10gPSAiKCIuJHN0ZXBmaWVsZC4iID0gJycgQU5EIEV4cGlyZXMgIT0gIi5OVUxMREFURVRJ TUUuIikiOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJfQ0KCX0NCglpZiAoJHN1YlNRTCkgew0K CQkkZmlsdFNRTFtdID0gJygnLmpvaW4oJyBPUiAnLCAkc3ViU1FMKS4nKSc7DQoJfQ0KDQoJ JHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0dXMgOiAnbGl2ZSc7IC8vIGluIGNhc2Ugc3Rh dHVzIGhhcyBiZWVuIGVtcHRpZWQNCgkkc3RhdHVzID0gZG9fbGlzdCgkc3RhdHVzKTsNCgkk c3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMgYXMgJHN0YXQpIHsNCgkJaWYg KGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0gZWxzZSBpZiAoaXNfbnVtZXJp Yygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJCX0gZWxzZSB7DQoJCQkkc3Rh dGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9DQoJJGZpbHRTUUxbXSA9ICdT dGF0dXMgSU4gKCcuZG9RdW90ZShqb2luKCInLCciLCAkc3RhdGkpKS4nKSc7DQoNCgkkZXhw aXJlZCA9ICgkZXhwaXJlZCkgPyAkZXhwaXJlZCA6ICRwcmVmc1sncHVibGlzaF9leHBpcmVk X2FydGljbGVzJ107DQoJaWYgKCEkZXhwaXJlZCkgew0KCQkkZmlsdFNRTFtdID0gJyhub3co KSA8PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4nKSc7DQoJfQ0KDQoJ Ly8gU29ydGluZyBydWxlczogZGF0YSBpcyBzb3J0ZWQgb25jZSBhcyBpdCBpcyBleHRyYWN0 ZWQgdmlhIFNRTCBhbmQgdGhlbiBhZ2FpbiBhZnRlciB0aGUgZmFrZSBkYXRlcyBoYXZlIGJl ZW4gaW5zZXJ0ZWQNCgkkc29ydCA9IChlbXB0eSgkc29ydCkpID8gJ1Bvc3RlZCBhc2MnIDog JHNvcnQ7DQoJJHNvcnQgPSBkb19saXN0KCRzb3J0KTsNCgkkc29ydFByZWZpeCA9ICJTT1JU XyI7DQoJJHNvcnRPcmRlciA9IGFycmF5KCk7DQoJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNv dW50KCRzb3J0KTsgJGlkeCsrKSB7DQoJCSRzb3J0aWVzID0gZXhwbG9kZSgnICcsICRzb3J0 WyRpZHhdKTsNCgkJaWYgKGNvdW50KCRzb3J0aWVzKSA8PSAxKSB7DQoJCQkkc29ydGllc1sx XSA9ICJhc2MiOw0KCQl9DQoJCSRzb3J0aWVzWzFdID0gJHNvcnRQcmVmaXguKCgkc29ydGll c1sxXSA9PSAiZGVzYyIpID8gJ0RFU0MnIDogJ0FTQycpOw0KCQkkc29ydE9yZGVyW10gPSBh cnJheSgiYnkiID0+ICRzb3J0aWVzWzBdLCAiZGlyIiA9PiAkc29ydGllc1sxXSk7DQoJfQ0K DQoJJGZpbHRTUUwgPSBqb2luKCcgQU5EICcsICRmaWx0U1FMKTsNCgkkZmlsdFNRTCAuPSAn IE9SREVSIEJZICcuam9pbignLCcsZG9TbGFzaCgkc29ydCkpOw0KDQoJJGdyYWJDb2xzID0g JyosIHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAo TGFzdE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBp cmVzJzsNCgkkZXZsaXN0ID0gc2FmZV9yb3dzKCRncmFiQ29scywgJ3RleHRwYXR0ZXJuJywg JGZpbHRTUUwsICRkZWJ1Zyk7DQoNCglpZiAoJGRlYnVnPjIpIHsNCgkJZWNobyAiKysgUkVD T1JEIFNFVCArKyI7DQoJCWRtcCgkZXZsaXN0KTsNCgl9DQoJJGFsbF9ldnMgPSAkZXZfdGFs bHkgPSBhcnJheSgpOw0KCSRub3cgPSB0aW1lKCk7DQoNCgkkZXZlbnRsaW1pdCA9IGRvX2xp c3QoJGV2ZW50bGltaXQpOw0KCWlmIChjb3VudCgkZXZlbnRsaW1pdCkgPT0gMSkgew0KCQkk ZXZlbnRsaW1pdFsxXSA9ICRldmVudGxpbWl0WzBdOw0KCX0NCg0KCSRkYXRlZmllbGRzID0g ZG9fbGlzdCgkZGF0ZWZpZWxkcyk7DQoNCgkvLyBQaGFzZSAyOiBleHBhbmQgYW55IHJlY3Vy cmluZyBkYXRlcyBhbmQgY29sbGF0ZSBhbGwgZXZlbnRzIHRoYXQgZmFsbCB3aXRoaW4gdGhl IGFsbG90ZWQgcmFuZ2VzDQoJZm9yZWFjaCAoJGV2bGlzdCBhcyAkcm93KSB7DQoJCSRldl9w b3N0ZWQgPSAoIWVtcHR5KCRkYXRlZmllbGRzWzBdKSAmJiAhZW1wdHkoJHJvd1skZGF0ZWZp ZWxkc1swXV0pICYmICgkc3RkdCA9IHN0cnRvdGltZSgkcm93WyRkYXRlZmllbGRzWzBdXSkp ICE9PSBmYWxzZSkgPyAkc3RkdCA6ICRyb3dbJ3VQb3N0ZWQnXTsNCgkJJGV2X2V4cGlyZXMg PSAoaXNzZXQoJGRhdGVmaWVsZHNbMV0pICYmICFlbXB0eSgkcm93WyRkYXRlZmllbGRzWzFd XSkgJiYgKCRlbmR0ID0gc3RydG90aW1lKCRyb3dbJGRhdGVmaWVsZHNbMV1dKSkgIT09IGZh bHNlKSA/ICRlbmR0IDogJHJvd1sndUV4cGlyZXMnXTsNCg0KCQkvLyBJZiBlbmQgPCBzdGFy dCB0aGUgdXNlci1zcGVjaWZpZWQgZGF0ZXMgY2Fubm90IGJlIHRydXN0ZWQNCgkJaWYgKCRl dl9leHBpcmVzICE9IDAgJiYgJGV2X2V4cGlyZXMgPD0gJGV2X3Bvc3RlZCkgew0KCQkJJGV2 X3Bvc3RlZCA9ICRyb3dbJ3VQb3N0ZWQnXTsNCgkJCSRldl9leHBpcmVzID0gJHJvd1sndUV4 cGlyZXMnXTsNCgkJCXRyaWdnZXJfZXJyb3IoJ0V4cGlyeSBjYW5ub3QgYmUgYmVmb3JlIHN0 YXJ0IGRhdGUgaW4gIicuJHJvd1snVGl0bGUnXS4nIjogaWdub3JlZCcsIEVfVVNFUl9XQVJO SU5HKTsNCgkJfQ0KDQoJCS8vIFJld3JpdGUgdGhlIHN0YXJ0L2VuZCBkYXRlcyBpbiBjYXNl IHRoZXkgYXJlIHVzZXItZGVmaW5lZA0KCQkkcm93Wyd1UG9zdGVkJ10gPSAkZXZfcG9zdGVk Ow0KCQkkcm93WydQb3N0ZWQnXSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgJGV2X3Bvc3RlZCk7 DQoJCSRyb3dbJ3VFeHBpcmVzJ10gPSAkZXZfZXhwaXJlczsNCgkJJHJvd1snRXhwaXJlcydd ID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkZXZfZXhwaXJlcyk7DQoNCgkJJGRpZmYgPSAoJGV2 X2V4cGlyZXMgPT0gMCkgPyAwIDogJGV2X2V4cGlyZXMgLSAkZXZfcG9zdGVkOw0KCQkkZXZf bW9udGggPSBkYXRlKCdtJywgJGV2X3Bvc3RlZCk7DQoJCSRldl95ZWFyID0gZGF0ZSgnWScs ICRldl9wb3N0ZWQpOw0KCQkkZXZfaHIgPSBkYXRlKCdIJywgJGV2X3Bvc3RlZCk7DQoJCSRl dl9tbiA9IGRhdGUoJ2knLCAkZXZfcG9zdGVkKTsNCgkJJGV2X3NjID0gZGF0ZSgncycsICRl dl9wb3N0ZWQpOw0KCQkkaWdub3JlID0gYXJyYXkoKTsNCg0KCQkvLyBHZW5lcmF0ZSBhIHNr aXAgYXJyYXkgZm9yIHRoaXMgZXZlbnQNCgkJaWYgKCRza2lwZmllbGQgJiYgJHJvd1skc2tp cGZpZWxkXSAhPSAnJykgew0KCQkJJGlnbm9yZXMgPSBkb19saXN0KCRyb3dbJHNraXBmaWVs ZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZXMgYXMgJHZhbCkgew0KCQkJCSRpZ3JuZyA9IHNt ZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwpOw0KCQkJCWZvcmVhY2ggKCRpZ3JuZyBhcyAkdGhl dmFsKSB7DQoJCQkJCSRpZ25vcmVbXSA9IGRhdGUoImQtTS1ZIiwgJHRoZXZhbCk7IC8vIEZv cmNlIGVhY2ggZGF0ZSB0byBhIGtub3duIGZvcm1hdA0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkv LyBBcHBlbmQgYW55IG9taXR0ZWQgZXZlbnRzDQoJCWlmICgkb21pdGZpZWxkICYmICRyb3db JG9taXRmaWVsZF0gIT0gJycpIHsNCgkJCSRvbWl0cyA9IGRvX2xpc3QoJHJvd1skb21pdGZp ZWxkXSk7DQoJCQlmb3JlYWNoICgkb21pdHMgYXMgJHZhbCkgew0KCQkJCSRvbXJuZyA9IHNt ZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwpOw0KCQkJCWZvcmVhY2ggKCRvbXJuZyBhcyAkdGhl dmFsKSB7DQoJCQkJCSRpZ25vcmVbXSA9IGRhdGUoImQtTS1ZIiwgJHRoZXZhbCk7DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJCWlmICgkZGVidWcgPiAxICYmICRpZ25vcmUpIHsNCgkJCWVjaG8g JysrIElHTk9SRUQgREFURVMgKysnOw0KCQkJZG1wKCRpZ25vcmUpOw0KCQl9DQoNCgkJLy8g RG9lcyB0aGUgZXZlbnQgZGVzZXJ2ZSB0byBiZSBpbiB0aGUgcmVzdWx0cz8NCgkJaWYgKHNt ZF9pbmNsdWRlX2V2ZW50KCRldl9wb3N0ZWQsICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJv bSwgJHRvLCAkbW9udGgpKSB7DQoJCQkkYWxsX2V2c1tdID0gJHJvdzsNCgkJCSRldl90YWxs eVskcm93Wyd1UG9zdGVkJ11dID0gKGlzc2V0KCRldl90YWxseVskcm93Wyd1UG9zdGVkJ11d KSkgPyAkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSsxIDogMTsNCgkJfQ0KDQoJCS8vIEFk ZCBhbnkgZXh0cmEgZGF0ZXMgZm9yIHRoaXMgZXZlbnQNCgkJaWYgKCRleHRyYWZpZWxkICYm ICRyb3dbJGV4dHJhZmllbGRdICE9ICcnKSB7DQoJCQkkeHRyYSA9IGRvX2xpc3QoJHJvd1sk ZXh0cmFmaWVsZF0pOw0KCQkJJHh0cmFzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCR4dHJh IGFzICR2YWwpIHsNCgkJCQkkeHRyYXMgPSBhcnJheV9tZXJnZSgkeHRyYXMsIHNtZF9leHBh bmRfZGF0ZXJhbmdlKCR2YWwsICIlWS0lYi0lZCIpKTsNCgkJCX0NCgkJCSRzdGFtcG9mZiA9 IChpbnQpKDM2MDAqJGV2X2hyKSArIChpbnQpKDYwKiRldl9tbikgKyAoaW50KSRldl9zYzsN CgkJCWZvcmVhY2ggKCR4dHJhcyBhcyAkdmFsKSB7DQoJCQkJJHZhbCA9IHJ0cmltKCR2YWws ICcrJyk7DQoJCQkJJHRtID0gc3RydG90aW1lKCR2YWwpOw0KDQoJCQkJLy8gTm8gJGlnbm9y ZSBmb3IgYWRkaXRpb25hbCBldmVudHMsIGFzIHRoZXkgYWx3YXlzIHNob3cgdXANCgkJCQlp ZiAoc21kX2luY2x1ZGVfZXZlbnQoJHRtKyRzdGFtcG9mZiwgJG5vdywgYXJyYXkoKSwgJHRp bWUsICRmcm9tLCAkdG8sICRtb250aCkpIHsNCgkJCQkJJGZha2Vyb3cgPSAkcm93Ow0KCQkJ CQkkZmFrZXJvd1snUG9zdGVkJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICR0bSskc3RhbXBv ZmYpOw0KCQkJCQkkZmFrZXJvd1sndVBvc3RlZCddID0gJHRtKyRzdGFtcG9mZjsNCgkJCQkJ aWYgKCRkaWZmID4gMCkgew0KCQkJCQkJJGZha2Vyb3dbJ0V4cGlyZXMnXSA9IGRhdGUoIlkt bS1kIEg6aTpzIiwgJHRtKyRzdGFtcG9mZiskZGlmZik7DQoJCQkJCQkkZmFrZXJvd1sndUV4 cGlyZXMnXSA9ICR0bSskc3RhbXBvZmYrJGRpZmY7DQoJCQkJCX0NCgkJCQkJJGFsbF9ldnNb XSA9ICRmYWtlcm93Ow0KCQkJCQkkZXZfdGFsbHlbJGZha2Vyb3dbJ3VQb3N0ZWQnXV0gPSAo aXNzZXQoJGV2X3RhbGx5WyRmYWtlcm93Wyd1UG9zdGVkJ11dKSkgPyAkZXZfdGFsbHlbJGZh a2Vyb3dbJ3VQb3N0ZWQnXV0rMSA6IDE7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKCRz dGVwZmllbGQgJiYgJHJvd1skc3RlcGZpZWxkXSAhPSAnJykgew0KCQkJJGZyZXEgPSBkb19s aXN0KCRyb3dbJHN0ZXBmaWVsZF0pOw0KCQkJJG1vbnRobHkgPSBmYWxzZTsNCgkJCSRjc3Rh bXAgPSAkZXZfcG9zdGVkOw0KCQkJJGN1cnJtb250aCA9ICRldl9tb250aDsNCgkJCSRjdXJy eWVhciA9ICRldl95ZWFyOw0KCQkJZm9yZWFjaCAoJGZyZXEgYXMgJGludGVydmFsKSB7DQoJ CQkJJGZha2Vyb3cgPSAkcm93Ow0KCQkJCSRzdGFtcG9mZiA9IDA7DQoJCQkJZm9yKCRpZHgg PSAwOyAkaWR4IDwgOTk5OTk7ICRpZHgrKykgew0KCQkJCQkkbHN0YW1wID0gJGNzdGFtcDsN CgkJCQkJaWYgKChpc3NldCgkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSkgJiYgKCRldl90 YWxseVskcm93Wyd1UG9zdGVkJ11dID49ICRldmVudGxpbWl0WzBdKSkgfHwgKCR0byAmJiAk Y3N0YW1wID4gc3RydG90aW1lKCR0bykpKSB7DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJ CQkkaXZhbCA9IHN0cl9yZXBsYWNlKCI/bW9udGgiLCBkYXRlKCdGJywgZ21ta3RpbWUoMCww LDAsJGN1cnJtb250aCwxKSksICRpbnRlcnZhbCk7DQoJCQkJCSRpdmFsID0gc3RyX3JlcGxh Y2UoIj95ZWFyIiwgJGN1cnJ5ZWFyLCAkaXZhbCk7DQoNCgkJCQkJaWYgKHN0cnBvcygkaXZh bCwgImxhc3QiKSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBz dHJ0b3RpbWUoJGl2YWwsIG1rdGltZSgxMiwgMCwgMCwgZGF0ZSgibiIsbWt0aW1lKDAsMCww LCRjdXJybW9udGgsMSwkY3VycnllYXIpKSsxLCAxLCAkY3VycnllYXIpKSk7DQoJCQkJCQkk bW9udGhseSA9IHRydWU7DQoJCQkJCX0gZWxzZSBpZiAoc3RycG9zKCRpdmFsLCAiZmlyc3Qi KSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBzdHJ0b3RpbWUo JGl2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgkY3Vycm1vbnRoPjEpID8gJGN1cnJtb250aC0x IDogMTIpLCBkYXRlKCJ0Iixta3RpbWUoMCwwLDAsJGN1cnJtb250aC0xLDEsKCgkY3Vycm1v bnRoPT0xKSA/ICRjdXJyeWVhci0xOiAkY3VycnllYXIpKSksICgoJGN1cnJtb250aD09MSkg PyAkY3VycnllYXItMTogJGN1cnJ5ZWFyKSkpKTsNCgkJCQkJCSRtb250aGx5ID0gdHJ1ZTsN CgkJCQkJfQ0KCQkJCQlpZiAoc3RycG9zKCRpbnRlcnZhbCwgIj9tb250aCIpIHx8IHN0cnBv cygkaW50ZXJ2YWwsICI/eWVhciIpKSB7DQoJCQkJCQkkbW9udGhseSA9IHRydWU7DQoJICAg ICAgICAgICAgfQ0KDQoJCQkJCWlmICgkbW9udGhseSkgew0KCQkJCQkJJGNzdGFtcCA9IHN0 cnRvdGltZSgkaXZhbCk7DQoJCQkJCQkkc3RhbXBvZmYgPSAoJHN0YW1wb2ZmPT0wKSA/IChp bnQpKDM2MDAqJGV2X2hyKSArIChpbnQpKDYwKiRldl9tbikgKyAoaW50KSRldl9zYyA6ICRz dGFtcG9mZjsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjc3RhbXAgPSBzdHJ0b3RpbWUoJGl2 YWwsICRjc3RhbXApOw0KCQkJCQl9DQoNCgkJCQkJLy8gVGhpcyBrbHVkZ2UgdGFrZXMgYWNj b3VudCBvZiB0aW1lc3RhbXBzIGxpa2UgImxhc3QgVGh1cnNkYXkiIChvZiB0aGUgbW9udGgp LiBUaGUgbGFzdCAnd2hhdGV2ZXIgZGF5JyBvZg0KCQkJCQkvLyBhIG1vbnRoIGNhbiBvbmx5 IGJlIGEgbWF4aW11bSBvZiAzMSBkYXlzIGJlZm9yZSB0aGUgbGFzdCB0aW1lc3RhbXAgd2Ug c2F3LCBzbyBjaGVjayBmb3IgdGhhdCAoKy8tIDEwIG1pbnMpDQoJCQkJCSRkaWZmc3RhbXAg PSAkY3N0YW1wIC0gJGxzdGFtcDsNCgkJCQkJaWYgKCRkaWZmc3RhbXAgPCAwKSB7DQoJCQkJ CQlpZiAoJGRpZmZzdGFtcCA+IC0oNjAqNjAqMjQqMzEpKzYwMCkgew0KCQkJCQkJCSRjc3Rh bXAgPSBmYWxzZTsgLy8gU29tZSAnbGFzdCB3ZWVrZGF5JyBvZiB0aGUgcHJldmlvdXMgbW9u dGgNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJYnJlYWs7IC8vIFBIUF9JTlRfTUFYIGV4Y2Vl ZGVkDQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKCRjc3RhbXAgIT09IGZhbHNlKSB7DQoJ CQkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQkJCWRtcCgiSU5URVJWQUw6ICIuICRjc3Rh bXAgLiAnIC8vICcgLmRhdGUoJ2QtTS1ZIEg6aTpzJywgJGNzdGFtcCkpOw0KCQkJCQkJfQ0K DQoJCQkJCQlpZiAoKCRjc3RhbXAgPCAkZXZfZXhwaXJlcyB8fCAkZXZfZXhwaXJlcyA9PSAn MCcpICYmICgkY3N0YW1wICE9ICRldl9wb3N0ZWQpKSB7DQoJCQkJCQkJJHNob3dfbWUgPSBz bWRfaW5jbHVkZV9ldmVudCgkY3N0YW1wLCAkbm93LCAkaWdub3JlLCAkdGltZSwgJGZyb20s ICR0bywgJG1vbnRoKTsNCgkJCQkJCQlpZiAoJHNob3dfbWUpIHsNCgkJCQkJCQkJJGZha2Vy b3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkY3N0YW1wKyRzdGFtcG9mZik7 DQoJCQkJCQkJCSRmYWtlcm93Wyd1UG9zdGVkJ10gPSAkY3N0YW1wKyRzdGFtcG9mZjsNCgkJ CQkJCQkJJGFsbF9ldnNbXSA9ICRmYWtlcm93Ow0KCQkJCQkJCQkkZXZfdGFsbHlbJHJvd1sn dVBvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSkpID8gJGV2 X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0rMSA6IDE7DQoJCQkJCQkJfQ0KCQkJCQkJfSBlbHNl IHsNCgkJCQkJCQlicmVhazsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBJbmNyZW1lbnQg dGhlIG1vbnRoL3llYXIgcmVhZHkgZm9yIHRoZSBuZXh0IGludGVydmFsDQoJCQkJCWlmICgk bW9udGhseSkgew0KCQkJCQkJJGN1cnJ5ZWFyID0gKCRjdXJybW9udGg9PTEyKSA/ICRjdXJy eWVhcisxIDogJGN1cnJ5ZWFyOw0KCQkJCQkJJGN1cnJtb250aCA9ICgkY3Vycm1vbnRoPT0x MikgPyAxIDogJGN1cnJtb250aCsxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkZGVidWc+ MSkgew0KCQkJCQlpZiAoaXNzZXQoJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0pKSB7DQoJ CQkJCQlkbXAoIlRBTExZOiAiLiAkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSk7DQoJCQkJ CX0NCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGFsbHNwYW5uZWQgJiYgZGF0ZSgiZC1t LVkiLCAkZXZfZXhwaXJlcykgIT0gZGF0ZSgiZC1tLVkiLCAkZXZfcG9zdGVkKSkgew0KCQkJ JHBvc3RkYXRlID0gZGF0ZSgiZC1tLVkiLCAkZXZfcG9zdGVkKTsNCgkJCSRmYWtlX2RpZmYg PSBzdHJ0b3RpbWUoZGF0ZSgiWS1NLWQiLCAkZXZfZXhwaXJlcykgLiAiIDIzOjU5OjU5Iik7 DQoJCQkkZGlmZiA9ICgkZXZfZXhwaXJlcz09MCkgPyAwIDogJGZha2VfZGlmZiAtICRldl9w b3N0ZWQ7DQoJCQkkc3BpZHRoID0gY2VpbCgkZGlmZiAvICg2MCo2MCoyNCkpOyAvLyBkYXlz IGJldHdlZW4gZGF0ZXMNCgkJCWZvciAoJGpkeCA9IDE7ICRqZHggPD0gJHNwaWR0aDsgJGpk eCsrKSB7DQoJCQkJJHRtID0gc3RydG90aW1lKCRwb3N0ZGF0ZS4nKycuJGpkeC4nIGRheXMn KTsNCgkJCQkkc2hvd19tZSA9IHNtZF9pbmNsdWRlX2V2ZW50KCR0bSwgJG5vdywgJGlnbm9y ZSwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCk7DQoJCQkJaWYgKCRzaG93X21lKSB7DQoJ CQkJCSRmYWtlcm93ID0gJHJvdzsNCgkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgi WS1tLWQgSDppOnMiLCAkdG0pOw0KCQkJCQkkZmFrZXJvd1sndVBvc3RlZCddID0gJHRtOw0K CQkJCQkkYWxsX2V2c1tdID0gJGZha2Vyb3c7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJ aWYgKCRkZWJ1Zz4yKSB7DQoJCWVjaG8gIisrIFBSRS1TT1JURUQgKysiOw0KCQlkbXAoJGFs bF9ldnMpOw0KCX0NCg0KCS8vIE1ha2UgdXAgYW4gYXJyYXlfbXVsdGlzb3J0IGFyZyBsaXN0 IGFuZCBleGVjdXRlIGl0DQoJZm9yZWFjaCgkYWxsX2V2cyBhcyAka2V5ID0+ICRyb3cpIHsN CgkJZm9yZWFjaCAoJHJvdyBhcyAkaWRlbnRpZmllciA9PiAkaXRlbSkgew0KCQkJJHZhcm5h bWUgPSAiY29sXyIuJGlkZW50aWZpZXI7DQoJCQkkeyR2YXJuYW1lfVska2V5XSA9ICRpdGVt Ow0KCQl9DQoJfQ0KCWlmKGNvdW50KCRhbGxfZXZzKSA+IDApIHsNCgkJZm9yICgkaWR4ID0g MDsgJGlkeCA8IGNvdW50KCRzb3J0T3JkZXIpOyAkaWR4KyspIHsNCgkJCSRzb3J0YXJnc1td ID0gJyRjb2xfJy4kc29ydE9yZGVyWyRpZHhdWydieSddOw0KCQkJJHNvcnRhcmdzW10gPSAk c29ydE9yZGVyWyRpZHhdWydkaXInXTsNCgkJfQ0KCQkkc29ydGl0ID0gJ2FycmF5X211bHRp c29ydCgnLmltcGxvZGUoIiwgIiwkc29ydGFyZ3MpLicsICRhbGxfZXZzKTsnOw0KCQlldmFs KCRzb3J0aXQpOw0KCX0NCg0KCWlmICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBQT1NULVNP UlRFRCArKyI7DQoJCWRtcCgkYWxsX2V2cyk7DQoJfQ0KDQoJLy8gSGFuZGxlIHBhZ2luZw0K CWlmICgkcGFnaW5nKSB7DQoJCSRncmFuZF90b3RhbCA9IGNvdW50KCRhbGxfZXZzKTsNCgkJ JHRvdGFsID0gJGdyYW5kX3RvdGFsIC0gJG9mZnNldDsNCgkJJG51bVBhZ2VzID0gY2VpbCgk dG90YWwvJHBhZ2VieSk7DQoJCSRwZyA9ICghJHByZXRleHRbJ3BnJ10pID8gMSA6ICRwcmV0 ZXh0WydwZyddOw0KCQkkcGdvZmZzZXQgPSAkb2Zmc2V0ICsgKCgkcGcgLSAxKSAqICRwYWdl YnkpOw0KCQkvLyBzZW5kIHBhZ2luZyBpbmZvIHRvIHR4cDpuZXdlciBhbmQgdHhwOm9sZGVy DQoJCSRwYWdlb3V0WydwZyddID0gJHBnOw0KCQkkcGFnZW91dFsnbnVtUGFnZXMnXSA9ICRu dW1QYWdlczsNCgkJJHBhZ2VvdXRbJ3MnXSA9ICRwcmV0ZXh0WydzJ107DQoJCSRwYWdlb3V0 WydjJ10gPSAkcHJldGV4dFsnYyddOw0KCQkkcGFnZW91dFsnZ3JhbmRfdG90YWwnXSA9ICRn cmFuZF90b3RhbDsNCgkJJHBhZ2VvdXRbJ3RvdGFsJ10gPSAkdG90YWw7DQoNCgkJaWYgKGVt cHR5KCR0aGlzcGFnZSkpDQoJCQkkdGhpc3BhZ2UgPSAkcGFnZW91dDsNCgkJaWYgKCRwZ29u bHkpDQoJCQlyZXR1cm47DQoJfSBlbHNlIHsNCgkJJHBnb2Zmc2V0ID0gJG9mZnNldDsNCgl9 DQoNCgkvLyBQaGFzZSAzOiBpdGVyYXRlIG92ZXIgdGhlIG5ldyBhcnJheSBvYmV5aW5nIGFu eSBvZmZzZXQvbGltaXQuIEFueXRoaW5nIGluIHRoZSByYW5nZSBnZXRzIHBvcHVsYXRlZCBh bmQgcGFyc2VkDQoJJG91dCA9IGFycmF5KCk7DQoJJGN0ciA9IDA7DQoJYXJ0aWNsZV9wdXNo KCk7DQoJZm9yZWFjaCAoJGFsbF9ldnMgYXMgJGlkeCA9PiAkcm93KSB7DQoJCWlmICgkaWR4 ID49ICRwZ29mZnNldCAmJiAkY3RyIDwgJGxpbWl0KSB7DQoJCQlwb3B1bGF0ZUFydGljbGVE YXRhKCRyb3cpOw0KCQkJJG91dFtdID0gKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogKCgk Zm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6IGhyZWYoJHJvd1snUG9zdGVkJ10sIHBlcm1s aW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRyb3dbJ1RpdGxlJ10uJyInKSApOw0KCQkJJGN0 cisrOw0KCQl9DQoJfQ0KCWFydGljbGVfcG9wKCk7DQoJcmV0dXJuIGRvV3JhcCgkb3V0LCAk d3JhcHRhZywgJGJyZWFrLCAkY2xhc3MpOw0KfQ0KDQovLyBDaGVjayB0aGUgcGFzc2VkIHRp bWVzdGFtcCBhZ2FpbnN0IGV2ZXJ5IHRpbWUgcmVzdHJpY3Rpb24gYW5kIHJldHVybiB0cnVl IGlmIGl0IHBhc3NlcyB0aGVtIGFsbA0KZnVuY3Rpb24gc21kX2luY2x1ZGVfZXZlbnQoJHRz LCAkbm93LCAkaWduLCAkdGltZSwgJGZyb20sICR0bywgJG1vbnRoKSB7DQoJJHNob3cgPSBh cnJheSgpOw0KCSRzaG93W10gPSAhaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkdHMpLCAkaWdu KTsNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IjogYnJlYWs7DQoJCWNhc2UgImZ1 dHVyZSI6ICRzaG93W10gPSAoJHRzID4gJG5vdykgPyB0cnVlIDogZmFsc2U7IGJyZWFrOw0K CQlkZWZhdWx0IDogJHNob3dbXSA9ICgkdHMgPCAkbm93KSA/IHRydWUgOiBmYWxzZTsgYnJl YWs7IC8vIFRoZSBwYXN0DQoJfQ0KCWlmICgkZnJvbSkgeyAkc2hvd1tdID0gKCR0cyA+PSBz dHJ0b3RpbWUoJGZyb20pKSA/IHRydWUgOiBmYWxzZTsgfQ0KCWlmICgkdG8pIHsgJHNob3db XSA9ICgkdHMgPD0gc3RydG90aW1lKCR0bykpID8gdHJ1ZSA6IGZhbHNlOyB9DQoJaWYgKCRt b250aCkgeyAkc2hvd1tdID0gKGRhdGUoIlktbSIsICR0cykgPT0gJG1vbnRoKSA/IHRydWUg OiBmYWxzZTsgfQ0KDQoJcmV0dXJuICghaW5fYXJyYXkoMCwgJHNob3cpKSA/IHRydWUgOiBm YWxzZTsNCn0NCg0KLy8gQ29udmVydCBkYXRlIHJhbmdlcyBsaWtlIDI0LU9jdC0wOCA9PiA1 LU5vdi0wOCB0byBhbiBhcnJheSBvZiBkaXNjcmV0ZSBkYXRlIGVudGl0aWVzDQpmdW5jdGlv biBzbWRfZXhwYW5kX2RhdGVyYW5nZSgkcm5nLCAkZm10PSclcycpIHsNCgkkb3V0ID0gYXJy YXkoKTsNCgkkcm5nID0gZG9fbGlzdCgkcm5nLCAiPT4iKTsNCglpZiAoY291bnQoJHJuZykg PiAxKSB7DQoJCSRkaWZmID0gc3RydG90aW1lKCRybmdbMV0pIC0gc3RydG90aW1lKCRybmdb MF0pOw0KCQkkZGlmZmRheXMgPSBjZWlsKCRkaWZmIC8gKDYwKjYwKjI0KSk7IC8vIGRheXMg YmV0d2VlbiBkYXRlcw0KCQlmb3IgKCRqZHggPSAwOyAkamR4IDw9ICRkaWZmZGF5czsgJGpk eCsrKSB7DQoJCQkkb3V0W10gPSBzdHJmdGltZSgkZm10LCBzdHJ0b3RpbWUoJHJuZ1swXSAu ICgoJGpkeD09MCkgPyAnJyA6ICcrJy4kamR4LicgZGF5cycpKSk7DQoJCX0NCgl9IGVsc2Ug ew0KCQkkb3V0W10gPSBzdHJmdGltZSgkZm10LCBzdHJ0b3RpbWUoJHJuZ1swXSkpOw0KCX0N CglyZXR1cm4gJG91dDsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6 IjUiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjY1NDk0OiIJPHA+PGRpdiBp ZD0ic21kX2hlbHAiPjwvcD4KCgk8aDEgaWQ9InRvcCI+c21kX2NhbGVuZGFyPC9oMT4KCgk8 cD5SZW5kZXIgYSBjYWxlbmRhciB3aXRoIG9uZSBvciBtb3JlIGFydGljbGVzIGFzIGV2ZW50 cyBvbiBlYWNoIGRheS4gVXNlZnVsIGZvciBnaWcgZ3VpZGVzLCAmIzgyMjA7d2hhdCYjODIx NztzIG9uJiM4MjIxOyBvciBzY2hlZHVsaW5nIGFwcHMuPC9wPgoKCTxoMiBpZD0iZmVhdHVy ZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1bGwtc2l6ZSAvIG1pbmkgPGEgaHJl Zj0iI3NtZGNhbCI+Y2FsZW5kYXI8L2E+IGJ5IG1vbnRoLCB3aXRoIG9wdGlvbmFsIDxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWs8L2xpPgoJCTxsaT5OYXY6IG5leHQvcHJl diBtb250aCBvciBtb250aC95ZWFyIGRyb3Bkb3duLiBZZWFyIHJhbmdlIGNhbiBiZSBmcm9t IGZpcnN0L2xhc3QgYXJ0aWNsZSBvciArLy0gTiB5ZWFycyBpbiBlaXRoZXIgZGlyZWN0aW9u PC9saT4KCQk8bGk+T25lIGFydGljbGUgPSBvbmUgZXZlbnQsIG5hdGl2ZSB0byA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPjogUG9zdGVkIGRhdGUgPSB0aGUgZGF0ZSBpdCBhcHBl YXJzIGluIHRoZSBjYWxlbmRhciAodW5sZXNzIG92ZXJyaWRkZW4pPC9saT4KCQk8bGk+Rmls dGVyIGV2ZW50cyBieSBjYXRlZ29yeSAvIHNlY3Rpb24gLyBhdXRob3IgLyBzdGF0dXMgLyB0 aW1lIG9yIGV4cGlyeTwvbGk+CgkJPGxpPkN1c3RvbSBmaWVsZCB0byBzcGVjaWZ5IGV2ZW50 IGZyZXF1ZW5jeSAoMSB3ZWVrIC8gMTAgZGF5cyAvIDMgbW9udGhzIC8gZXRjKTwvbGk+CgkJ PGxpPkN1c3RvbSBmaWVsZHMgZm9yIGluL2V4Y2x1c2lvbnMgKGEgbGlzdCBvZiBkYXRlcyBv biB3aGljaCB0aGF0IGV2ZW50IGlzIChyZSlzY2hlZHVsZWQvY2FuY2VsbGVkL29taXR0ZWQp PC9saT4KCQk8bGk+TXVsdGktZGF5IHNwYW5uZWQgZXZlbnRzIGJhc2VkIG9uIHRoZSBhcnRp Y2xl4oCZcyBleHBpcnk8L2xpPgoJCTxsaT5EaXNwbGF5IGZ1dHVyZSwgZXhwaXJlZCBvciBz dGlja3kgZXZlbnRzPC9saT4KCQk8bGk+SG9saWRheXMgb24gYSBwZXItY2FsZW5kYXIgYmFz aXM8L2xpPgoJCTxsaT5FYWNoIGV2ZW50IGNhbiBiZSBwYXNzZWQgdG8gYSBmb3JtL2NvbnRh aW5lciBzbyB5b3UgY2FuIGJ1aWxkIGl0IHlvdXIgd2F5LiBTcGFubmVkIGFuZC9vciByZWN1 cnJpbmcgZXZlbnRzIGNhbiBiZSBzZW50IHRvIGEgc2VwYXJhdGUgZm9ybS4gT3Igc2VuZCB0 aGUgZW50aXJlIGNlbGwgdG8gYSBmb3JtPC9saT4KCQk8bGk+PGEgaHJlZj0iI2lmY2FsIj5D b25kaXRpb25hbDwvYT4gdGVzdHMgZm9yIGZsYWdzIGFuZCBkYXRlcyBzbyB5b3UgY2FuIGJ1 aWxkIHlvdXIgb3duIGxvZ2ljPC9saT4KCQk8bGk+VGFibGUtLCByb3ctLCBjZWxsLSwgYW5k IGV2ZW50LWxldmVsIGNsYXNzZXMgZm9yIGluZGljYXRpbmcgZGlmZmVyZW50IHNjZW5hcmlv czsgY3VzdG9tIGNsYXNzZXMgY2FuIGJlIGRlZmluZWQ8L2xpPgoJCTxsaT5UYWdzIHRvIDxh IGhyZWY9IiNhcnRldiI+ZGlzcGxheSByZWN1cnJpbmcgZXZlbnRzPC9hPiA7IGV2ZW50L2Nh bGVuZGFyIDxhIGhyZWY9IiNjYWxpbmZvIj5jaGFyYWN0ZXJpc3RpY3M8L2E+IDsgb3IgdGhl IDxhIGhyZWY9IiNjYWxub3ciPmN1cnJlbnQgZGF0ZS90aW1lPC9hPjwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0iYXV0aG9yIj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD48YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4gSm9p bnRseSBmdW5kZWQgYnkgZ2VuZXJvdXMgZG9uYXRvcnM6IG1yZGFsZSwgd29vZiwgamFrb2Is IHJlbm9iaXJkIGFuZCBqb2ViYWljaC4gQmFzZWQgb3JpZ2luYWxseSBvbiBtZHBfY2FsZW5k YXIuIEFsbCBwcm9wcyB0byB0aGUgb3JpZ2luYWwgYXV0aG9yLCBhbmQgb2YgY291cnNlIHRo ZSBjbGFzcyB1cG9uIHdoaWNoIHRoZSBjYWxlbmRhciBpcyBiYXNlZC4gQW5kIG5vdCBmb3Jn ZXR0aW5nIG91ciBhd2Vzb21lIFRleHRwYXR0ZXJuIGRldnMgd2hvIGNvbnRpbnVlIHRvIHB1 c2ggdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPiB0byB0aGUgc3RhcnMuPC9w PgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gy PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC4wLjcrPC9w PgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDov L3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwNTIvc21kX2NhbGVuZGFyIj50ZXh0cGF0dGVy bi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5z b2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFu ZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yOTM3NSI+Zm9ydW0gdGhyZWFkPC9h PiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndp c2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0 aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLjwvcD4KCgk8aDIgaWQ9Im5hbWluZyI+TmFt aW5nIGNvbnZlbnRpb248L2gyPgoKCTxwPlRoZSBjb3JlIG9mIHRoZSBwbHVnaW4gaXMgdGhl IHNtZF9jYWxlbmRhciB0YWcsIHdoaWNoIHJlbmRlcnMgYSBzdGFuZGFyZCBjYWxlbmRhciB3 aXRoIGVhY2ggY2VsbCBjb250YWluaW5nIG9uZSBvciBtb3JlIGV2ZW50cy4gQmVmb3JlIGRp dmluZyBpbnRvIHRoZSB0YWdzIHRoZXJlJiM4MjE3O3MgYSBsaXR0bGUgYml0IG9mIG5vbWVu Y2xhdHVyZSB0byBncmFzcDo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ Y2FsaWQ8L3NwYW4+IDogeW91IG1heSBwdXQgbW9yZSB0aGFuIG9uZSBjYWxlbmRhciBvbiBh IHBhZ2U6IGVhY2ggY2FuIGJlIHVuaXF1ZWx5IHJlZmVyZW5jZWQgd2l0aCBhIGNhbGVuZGFy IElEPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGw8L3NwYW4+IDogYSBzcGVj aWZpYyBkYXkgb24gdGhlIGNhbGVuZGFyIGluIGEgcGFydGljdWxhciBtb250aC95ZWFyPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50PC9zcGFuPiA6IGFuIGFydGljbGUu IEl0JiM4MjE3O3MgYmVzdCB0byB1c2UgYSBkZWRpY2F0ZWQgc2VjdGlvbiBmb3IgZXZlbnRz IHRvIGtlZXAgdGhpbmdzIG5lYXRlciwgYnV0IHlvdSBjYW4gZGlzcGxheSBldmVudHMgZnJv bSBtb3JlIHRoYW4gb25lIHNlY3Rpb24gaWYgeW91IHdpc2guIEFueSBhcnRpY2xlIHdyaXR0 ZW4gaW4gdGhlIGdpdmVuIHNlY3Rpb24ocykgd2lsbCBhcHBlYXIgb24gdGhlIGNhbGVuZGFy IGFzIGxvbmcgYXMgaXRzIGV4cGlyeSBoYXNuJiM4MjE3O3QgYmVlbiBtZXQuIE1vcmUgdGhh biBvbmUgZXZlbnQgbWF5IGFwcGVhciBpbiBlYWNoIGNlbGw8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Y2VsbCBmbGFnPC9zcGFuPiA6IGEgc2VyaWVzIG9mIGZsYWdzIGFyZSB1 c2VkIHRvIGxhYmVsIGVhY2ggY2VsbCBhY2NvcmRpbmcgdG8gd2hhdCBpdCBjb250YWlucy4g Q2VsbHMgY2FuIGVpdGhlciBiZSA8Y29kZT5lbXB0eTwvY29kZT4gKGkuZS4gbm8gZGF0ZTog dGhlIGZpbGxlciBjZWxscyBhdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBtb250aCksIHRoZXkg Y2FuIGJlIGEgcmVndWxhciBkYXkgKG5vIGZsYWcpLCB0aGV5IGNhbiBjb250YWluIGFuIDxj b2RlPmV2ZW50PC9jb2RlPiwgb3IgbWF5IGJlIGEgaG9saWRheSAoPGEgaHJlZj0iI2hvbGlk YXlzIj5ob2xzPC9hPik8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnQgZmxh Zzwvc3Bhbj4gOiBlYWNoIGNlbGwgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgZXZlbnRzLiBF dmVudHMgY2FuIGVpdGhlciBiZSA8YSBocmVmPSIjZXZlbnRzIj5zdGFuZGFyZDwvYT4sIHRo ZXkgY2FuIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXI8L2E+LCB0aGV5IGNhbiBzcGFuIG1vcmUg dGhhbiBvbmUgZGF5ICg8YSBocmVmPSIjbXVsdGkiPm11bHRpPC9hPiksIGRhdGVzIGNhbiBi ZSB1bnNjaGVkdWxlZCBvciBvbWl0dGVkICg8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWwgLyBv bWl0PC9hPikgZnJvbSB0aGUgY2FsZW5kYXIsIG9yIDxhIGhyZWY9IiNleHRyYSI+ZXh0cmE8 L2E+IGRhdGVzIGNhbiBiZSBhZGRlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5j bGFzcyBsZXZlbDwvc3Bhbj4gOiAoZXhwbG9yZWQgaW4gdGhlIDxhIGhyZWY9IiNhdHRzdHls ZXMiPmNsYXNzbGV2ZWxzPC9hPiBhdHRyaWJ1dGUpLiBFYWNoIGZsYWdnZWQgY2VsbCBjYW4g YmUgZ2l2ZW4gYSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBiYXNlZCBv biBpdHMgZmxhZyBuYW1lKHMpLiBUaGUgY2xhc3MgbmFtZXMgYXJlIHNpbXBseSBlYWNoIGZs YWcgbmFtZSBwcmVmaXhlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbiBpbiB0aGUgPGNvZGU+Y2xh c3NwcmVmaXhlczwvY29kZT4gYXR0cmlidXRlLiBTdWNoIGNsYXNzZXM6Cgk8dWw+CgkJPGxp PmFwcGVhciBpbiBhIGNlbGwsIHNvIHlvdSBjYW4gc3R5bGUgdGhlIHdob2xlIGNlbGw8L2xp PgoJCTxsaT5hcHBlYXIgb24gZWFjaCBldmVudCwgc28geW91IGNhbiBzdHlsZSBwYXJ0aWN1 bGFyIHR5cGVzIG9mIGV2ZW50PC9saT4KCQk8bGk+bWF5IGJlICYjODIxNjtjb3BpZWQmIzgy MTc7IGZyb20gdGhlIGV2ZW50IHRvIHRoZSBjZWxsIGl0c2VsZiwgc28geW91IGNhbiBzdHls ZSB0aGUgd2hvbGUgY2VsbCBiYXNlZCBvbiB0aGUgZXZlbnRzIGl0IGNvbnRhaW5zPC9saT4K CTwvdWw+PC9saT4KCTwvdWw+CgoJPHA+RmxhZ3MgcHJvdmlkZSBpbmZvcm1hdGlvbiA8ZW0+ YWJvdXQ8L2VtPiB0aGUgY2VsbCAvIGV2ZW50ICAmIzgyMTI7IGFuZCBjYW4gYmUgdGVzdGVk IHdpdGggdGhlIGNvbmRpdGlvbmFsIHRhZyAmIzgyMTI7IHdoaWxlIHRoZSBjb3JyZXNwb25k aW5nIGNsYXNzIG5hbWVzIGFyZSBqdXN0IHRoZXJlIGZvciB5b3VyIDxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+IHVzZS48L3A+CgoJPHA+V2hlbiBhc3NpZ25lZCBhcyBjbGFzc2Vz LCBmbGFncyA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0YWtlIHRoZSAmIzgyMTY7Y2xhc3Mm IzgyMTc7IHByZWZpeCAoaS5lLiB0aGUgMXN0IGl0ZW0gZ2l2ZW4gaW4gc21kX2NhbGVuZGFy JiM4MjE3O3MgPGNvZGU+Y2xhc3NwcmVmaXhlczwvY29kZT4gYXR0cmlidXRlKSAmIzgyMTI7 IHdoZXRoZXIgdGhleSBhcHBlYXIgYXQgdGhlIDxlbT5ldmVudDwvZW0+IG9yIDxlbT5jZWxs PC9lbT4gbGV2ZWxzLiBUaGUgb25seSBjbGFzc2VzIHRoYXQgdGFrZSB0aGUgb3B0aW9uYWwg Mm5kICYjODIxNjtldmVudCYjODIxNzsgcHJlZml4IGFyZSB0aGUgZmllbGRzIHlvdSBzcGVj aWZ5IGluIHRoZSA8Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJ PHA+SXQmIzgyMTc7cyBhbHNvIHdvcnRoIGJlYXJpbmcgaW4gbWluZCB0aGUgPGEgaHJlZj0i I2RhdGVzIj5kYXRlIGNhdmVhdHM8L2E+IHRoYXQgbWF5IHdlbGwgYml0ZSB5b3UuPC9wPgoK CTxoMiBpZD0iZXZlbnRzIj5TdGFuZGFyZCBjZWxscyBhbmQgZXZlbnRzPC9oMj4KCgk8cD5U aGUgZm9sbG93aW5nIGN1bXVsYXRpdmUgbmFtaW5nIHJ1bGVzIGFwcGx5OjwvcD4KCgk8dWw+ CgkJPGxpPk5vcm1hbCAoZGF5KSBjZWxscyBkb24mIzgyMTc7dCBoYXZlIGEgY2xhc3MgYXNz aWduZWQgdG8gdGhlbSB1bmxlc3MgeW91IHNwZWNpZnkgb25lIHdpdGggPGNvZGU+Y2VsbGNs YXNzPC9jb2RlPjwvbGk+CgkJPGxpPkFueSBjZWxsIHRoYXQgY29udGFpbnMgYW4gZXZlbnQg KG9mIGFueSB0eXBlKSBpcyBmbGFnZ2VkIGFzIGFuIDxjb2RlPmV2ZW50PC9jb2RlPjwvbGk+ CgkJPGxpPkFueSBjZWxsIHRoYXQgZmFsbHMgb24gYSBob2xpZGF5IGlzIGdpdmVuIHRoZSBm bGFnIDxjb2RlPmhvbHM8L2NvZGU+PC9saT4KCQk8bGk+VGhlIGN1cnJlbnQgZGF5IGlzIGdp dmVuIHRoZSBmbGFnIDxjb2RlPnRvZGF5PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPkEgc2lu Z2xlIGV2ZW50IChha2EgYXJ0aWNsZSkgd2l0aCBhIFBvc3RlZCBkYXRlIHdpbGwgYmUgZmxh Z2dlZCA8Y29kZT5zdGFuZGFyZDwvY29kZT4sIHVubGVzcyBpdCByZWN1cnMgb3Igc3BhbnMg bW9yZSB0aGFuIG9uZSBkYXkuPC9wPgoKCTxoMiBpZD0icmVjdXIiPlJlY3VycmluZyBldmVu dHM8L2gyPgoKCTxwPklmIHlvdSBoYXZlIG5vbWluYXRlZCBhIGZpZWxkIGFzIHlvdXIgPGNv ZGU+c3RlcGZpZWxkPC9jb2RlPiB5b3UgbWF5IGVudGVyIGEgY29tbWEtc2VwYXJhdGVkIGxp c3Qgb2YgZnJlcXVlbmNpZXMgYXQgd2hpY2ggdGhlIGV2ZW50IGlzIHRvIHJlcGVhdC4gVGhl IGZvcm1hdCBvZiB0aGUgcmVwZXRpdGlvbiBpcyA8c3Ryb25nPm51bWJlciBpbnRlcnZhbDwv c3Ryb25nPiwgZS5nLiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8Y29kZT4xMCBkYXlzPC9j b2RlPiBvciA8Y29kZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVnaW4gd2lsbCBkbyBpdHMg YmVzdCB0byBmaWd1cmUgb3V0IHdoYXQgeW91IG1lYW4uIFNlZSA8YSBocmVmPSJodHRwOi8v d3d3LmdudS5vcmcvc29mdHdhcmUvdGFyL21hbnVhbC9odG1sX25vZGUvRGF0ZS1pbnB1dC1m b3JtYXRzLmh0bWwiPmRhdGUgaW5wdXQgZm9ybWF0czwvYT4gZm9yIG1vcmUuPC9wPgoKCTxw PkEgZmV3IHBvaW50czo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5zZWNvbmQgdHVlc2RheTwv Y29kZT4gd2lsbCBzaG93IGFuIGV2ZW50IDxlbT5ldmVyeTwvZW0+IDJuZCBUdWVzZGF5IGZy b20gdGhlIHN0YXJ0IGRhdGUgKGkuZS4gZm9ydG5pZ2h0bHkpPC9saT4KCQk8bGk+PGNvZGU+ c2Vjb25kIHR1ZXNkYXkgP21vbnRoID95ZWFyPC9jb2RlPiB3aWxsIHN1YnN0aXR1dGUgdGhl IGN1cnJlbnQgbW9udGggYW5kIHllYXIgaW4gZmlyc3QsIGFuZCA8ZW0+dGhlbjwvZW0+IGNh bGN1bGF0ZSB0aGUgZGF0ZSwgcmVzdWx0aW5nIGluIHRoZSBldmVudCBvbmx5IHJlY3Vycmlu ZyBvbiB0aGUgMm5kIFR1ZXNkYXkgb2YgZWFjaCBtb250aC4gWW91IDxzdHJvbmc+bXVzdDwv c3Ryb25nPiB1c2UgYm90aCA8Y29kZT4/bW9udGg8L2NvZGU+IGFuZCA8Y29kZT4/eWVhcjwv Y29kZT4gaWYgeW91IGNob29zZSB0aGlzIHR5cGUgb2YgZGF0ZSBvciB5b3VyIGV2ZW50IHdv biYjODIxNzt0IGFwcGVhcjwvbGk+CgkJPGxpPjxjb2RlPjIwID9tb250aDwvY29kZT4gd2ls bCBzaG93IHRoZSBldmVudCBvbiB0aGUgMjB0aCBvZiBldmVyeSBtb250aDwvbGk+CgkJPGxp PnRoaW5ncyBsaWtlIDxjb2RlPmZpcnN0IHRodXJzZGF5PC9jb2RlPiBvciA8Y29kZT5sYXN0 IGZyaWRheTwvY29kZT4gZG9uJiM4MjE3O3QgbmVlZCB0aGUgPGNvZGU+P21vbnRoPC9jb2Rl PiBvciA8Y29kZT4/eWVhcjwvY29kZT4gYmVjYXVzZSB0aGV5IGNhbiA8ZW0+b25seTwvZW0+ IG9jY3VyIG1vbnRobHksIGFuZCB3aWxsIG9ubHkgc2hvdyB0aGUgZXZlbnQgb24gdGhlIGdp dmVuIGZpcnN0L2xhc3QgZGF5IG9mIHRoZSBtb250aDwvbGk+Cgk8L3VsPgoKCTxwPklmIHlv dSBjYW4gZmluZCBhIHVzZSBmb3IgaXQsIHlvdSBtYXkgc3BlY2lmeSBtdWx0aXBsZSBmcmVx dWVuY2llcywgZm9yIGV4YW1wbGUgPGNvZGU+MyBkYXlzLCAxIHdlZWs8L2NvZGU+LiBUaGF0 IG1lYW5zIHlvdSB3b3VsZCBzZWUgdGhlIGV2ZW50IG9uIHRoZSAxc3QgZGF5LCB0aGVuIHRo ZSAzcmQsIDZ0aCwgN3RoLCA5dGgsIDEydGgsIDE0dGgsIDE1dGgsIDE4dGgsIDIxc3QsIDI0 dGgmIzgyMzA7IGRheXMgdGhlcmVhZnRlci4gTm90ZSB0aGF0IHRoZSBldmVudCBvbmx5IG9j Y3VycyBvbmNlIG9uIHRoZSAyMXN0IGRheSBldmVuIHRob3VnaCB0aGUgdHdvIGZyZXF1ZW5j aWVzIGNsYXNoLjwvcD4KCgk8cD5SZWN1ciBydWxlczo8L3A+CgoJPHVsPgoJCTxsaT5UaGUg cmVwZXRpdGlvbiB3aWxsIGNvbnRpbnVlIGZvcmV2ZXI8c3VwIGNsYXNzPSJmb290bm90ZSI+ PGEgaHJlZj0iI2ZuNjg1MDQzMzMxNDliYTczOTI4ZDlhZSI+MTwvYT48L3N1cD4gdW5sZXNz IHlvdSBzcGVjaWZ5IGFuIGV4cGlyeSB0aW1lPC9saT4KCQk8bGk+VGhlIHZlcnkgZmlyc3Qg ZXZlbnQgb2YgYSByZWN1cnJpbmcgc2V0IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJl Y3VyZmlyc3Q8L2NvZGU+PC9saT4KCQk8bGk+RWFjaCBmb2xsb3dpbmcgY2VsbCB0aGF0IGNv bnRhaW5zIGEgcmVjdXJyaW5nIGV2ZW50IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJl Y3VyPC9jb2RlPjwvbGk+CgkJPGxpPkJvdGggZmxhZ3MgYXJlIGFwcGxpZWQgdG8gdGhlIGV2 ZW50IGFzIGNsYXNzZXMgdXNpbmcgdGhlIGNsYXNzIHByZWZpeDwvbGk+CgkJPGxpPlJlcGVh dGVkIGV2ZW50cyBtYXkgYmUgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGVkIG9yIG9taXR0 ZWQ8L2E+IG9uIGEgcGVyLWRhdGUgYmFzaXM8L2xpPgoJPC91bD4KCgk8cCBjbGFzcz0ic21h bGwiIGlkPSJmbjY4NTA0MzMzMTQ5YmE3MzkyOGQ5YWUiPjxzdXA+MTwvc3VwPiAmIzgyMTY7 Zm9yZXZlciYjODIxNzsgaXMgbGltaXRlZCB0byA5OTk5OSByZWN1cnJlbmNlcyBwZXIgZXZl bnQsIG9yIDI3NCB5ZWFycyYjODIxNzsgd29ydGggb2YgZGFpbHkgZXZlbnRzLiBFaXRoZXIg PHNwYW4gY2xhc3M9ImNhcHMiPlVOSVg8L3NwYW4+IHdpbGwgcnVuIG91dCBvZiBkYXRlcyBv ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5 IGxvbmcgYmVmb3JlIHlvdSByZWFjaCB0aGlzIGxpbWl0IDotKTwvcD4KCgk8aDIgaWQ9Im11 bHRpIj5NdWx0aS1kYXkgKHNwYW5uZWQpIGV2ZW50czwvaDI+CgoJPHA+QW55IGV2ZW50IHRo YXQgaGFzOjwvcD4KCgk8dWw+CgkJPGxpPmEgc3RhcnQgZGF0ZTwvbGk+CgkJPGxpPmFuIGV4 cGlyeSBkYXRlIHRoYXQgaXMgYSBkYXkgb3IgbW9yZSBsYXRlciB0aGFuIHRoZSBzdGFydCBk YXRlLCBhbmQ8L2xpPgoJCTxsaT48ZW0+ZG9lcyBub3Q8L2VtPiBoYXZlIGFueSByZXBldGl0 aW9uIGluIGl0cyA8Y29kZT5zdGVwZmllbGQ8L2NvZGU+PC9saT4KCTwvdWw+CgoJPHA+aXMg ZmxhZ2dlZCBhcyBhIDxjb2RlPm11bHRpPC9jb2RlPi4gQnkgZGVmYXVsdCB0aGUgZmlyc3Qg ZXZlbnQgaXMgZGlzcGxheWVkIGluIGZ1bGwgYW5kIGVhY2ggJiM4MjE2O2NvbnRpbnVhdGlv biYjODIxNzsgZXZlbnQgaXMgc2hvd24gb25seSBhcyBhIHJpZ2h0IGFycm93IGluIHN1YnNl cXVlbnQgY2VsbHMuIEV2ZW50cyBtYXkgc3BhbiBtb250aHMgb3IgeWVhcnMgYW5kIHRoZSBw bHVnaW4gZmlndXJlcyBldmVyeXRoaW5nIG91dCB1c2luZyBmbGFnIHJ1bGVzOjwvcD4KCgk8 dWw+CgkJPGxpPlRoZSBmaXJzdCBjZWxsIG9mIGEgc3Bhbm5lZCBzZXQgaXMgPGNvZGU+bXVs dGlmaXJzdDwvY29kZT48L2xpPgoJCTxsaT5UaGUgbGFzdCBjZWxsIGlzIDxjb2RlPm11bHRp bGFzdDwvY29kZT48L2xpPgoJCTxsaT5FdmVyeSBvdGhlciBjZWxsIGlzIGEgPGNvZGU+bXVs dGk8L2NvZGU+IDxlbT5leGNlcHQ8L2VtPiBpZiB0aGUgZXZlbnQgcm9sbHMgb3ZlciBpbnRv IHRoZSBuZXh0IG1vbnRoLiBJbiB0aGF0IGNhc2UsIHRoZSBlbnRyeSBvbiB0aGUgMXN0IG9m IHRoZSBtb250aCBpcyBhIDxjb2RlPm11bHRpcHJldjwvY29kZT4gdG8gaW5kaWNhdGUgaXQg YmVsb25ncyB0byBhIHByZXZpb3VzIGV2ZW50PC9saT4KCQk8bGk+SWYgdGhlIDFzdCBkYXkg b2YgdGhlIG1vbnRoIGlzIHRoZSBsYXN0IGRheSBvZiB0aGUgZXZlbnQsIHRoZSA8Y29kZT5t dWx0aXByZXY8L2NvZGU+IGlzIGRyb3BwZWQgaW4gZmF2b3VyIG9mIDxjb2RlPm11bHRpbGFz dDwvY29kZT48L2xpPgoJPC91bD4KCgk8cD5Td2l0Y2ggb2ZmIHNwYW5uaW5nIGNvbXBsZXRl bHkgd2l0aCA8Y29kZT5zaG93c3Bhbm5lZD0mcXVvdDswJnF1b3Q7PC9jb2RlPi4gRXZlbnRz IHRoYXQgaGF2ZSBhbiBleHBpcnkgYXJlIHRoZW4ganVzdCBzdGFuZGFyZCBldmVudHMuPC9w PgoKCTxwPiYjODIxNjtDb250aW51YXRpb24mIzgyMTc7IGNlbGxzIG1heSBiZSBwcm9jZXNz ZWQgd2l0aCBhIHNlcGFyYXRlIGZvcm0gKDxjb2RlPnNwYW5mb3JtPC9jb2RlPikuIElmIHlv dSBjaG9vc2Ugbm90IHRvIHVzZSBhIDxjb2RlPnNwYW5mb3JtPC9jb2RlPiwgdGhlIHN0YW5k YXJkIDxjb2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB3aWxsIGJlIHVzZWQgYW5kIHlv dSB3aWxsIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZGlmZmVyZW50IG11bHRp IGZsYWdzIHlvdXJzZWxmIHVzaW5nIHRoZSA8YSBocmVmPSIjaWZjYWwiPmNvbmRpdGlvbmFs IHRhZzwvYT4uPC9wPgoKCTxwPllvdSBjYW4gYWxzbyA8YSBocmVmPSIjY2FuY2VsIj5jYW5j ZWwgb3Igb21pdDwvYT4gZGF5cyBvZiBhIHNwYW5uZWQgZXZlbnQgaW4gdGhlIHNhbWUgbWFu bmVyIGFzIHlvdSBkbyB3aXRoIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJyaW5nIGV2ZW50czwv YT4sIGV4Y2VwdCB5b3UgY2Fubm90IGNhbmNlbCB0aGUgZmlyc3QgZGF5OyB5b3Ugc2hvdWxk IG1vdmUgdGhlIGV2ZW50IHN0YXJ0IGRhdGUgYW5kIGFwb2xvZ2lzZSE8L3A+CgoJPGgyIGlk PSJjYW5jZWwiPkNhbmNlbGxpbmcgYW5kIG9taXR0aW5nIGV2ZW50czwvaDI+CgoJPHA+UGxh bnMgY2hhbmdlIGFuZCB5b3UgbWF5IGZpbmQgdGhhdCBhIGdpZyBoYXMgdG8gYmUgY2FuY2Vs bGVkLiBQZXJoYXBzIHlvdSBhZHZlcnRpc2UgYSB3ZWVrbHkgYm9vdCBmYWlyIGJ1dCB0aGUg ZmllbGQgaXMgd2F0ZXJsb2dnZWQgb25lIHdlZWsuIE5vIHByb2JsZW06IG5vbWluYXRlIGEg PGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBpbiB5b3VyIDxjb2RlPnNtZF9jYWxlbmRhcjwvY29k ZT4gdGFnIGFuZCBlbnRlciB0aGUgZGF0ZSBvZiB0aGUgY2FuY2VsbGVkIGV2ZW50LjwvcD4K Cgk8cD5PciB5b3UgbWlnaHQgcnVuIGEgdGhlYXRyZSB3ZWIgc2l0ZSB0aGF0IGhhcyBhIHRo cmVlLXdlZWsgcHJvZHVjdGlvbiBwZXJmb3JtYW5jZSBvbiB3ZWVrbmlnaHRzIG9ubHkuIElu c3RlYWQgb2Ygc2V0dGluZyB1cCB0aHJlZSBzZXBhcmF0ZSBldmVudHMgJiM4MjEyOyBvbmUg Zm9yIGVhY2ggd2VlayAmIzgyMTI7IG5vbWluYXRlIGFuIDxjb2RlPm9taXRmaWVsZDwvY29k ZT4gYW5kIGxpc3QgdGhlIGRhdGVzIG9uIHdoaWNoIHRoZSBwZXJmb3JtYW5jZSBkb2VzIG5v dCBhaXIuIE9taXR0ZWQgZGF0ZXMgd2lsbCBub3QsIHVuZGVyIGFueSBjaXJjdW1zdGFuY2Vz LCBhcHBlYXIgb24gdGhlIGNhbGVuZGFyIGFuZCB0aGV5IG92ZXJyaWRlIGNhbmNlbGxlZCBk YXRlcy9ob2xpZGF5cy4gSWYgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IG1vZGUgaXMgdXNlZCwg eW91IHdpbGwgaG93ZXZlciBzZWUgYSBjZWxsIGZsYWcgbGFiZWxsZWQgPGNvZGU+b21pdDwv Y29kZT4gKHBsdXMgY2xhc3MgcHJlZml4KSBpbiBjYXNlIHlvdSBkbyB3aXNoIHRvIHN0eWxl IHN1Y2ggY2VsbHMuPC9wPgoKCTxwPlRvIHNwZWNpZnkgdGhlIGRhdGVzIGluIGVpdGhlciBm aWVsZCwgdXNlIGFueSBhY2NlcHRhYmxlIGRhdGUgZm9ybWF0LCBidXQgZGVyaXZhdGl2ZXMg b2YgZGQtbW9udGhuYW1lLXl5eXkgb3IgbW9udGhuYW1lLWRkLXl5eXkgYXJlIHRoZSBtb3N0 IHVuYW1iaWd1b3VzIHRvIGF2b2lkIHByb2JsZW1zIChlLmcuIGlzIDxjb2RlPjEvNTwvY29k ZT4gSmFuIDV0aCBvciBNYXkgMXN0KS4gWW91IGNhbiBzcGVjaWZ5IGFzIG1hbnkgY2FuY2Vs bGF0aW9ucyBvciBvbWlzc2lvbnMgYXMgeW91IGxpa2U7IGNvbW1hLXNlcGFyYXRlIGVhY2gg b25lLiBZb3UgbWF5IGFsc28gc3BlY2lmeSByYW5nZXMgb2YgZGF0ZXMgdG8gb21pdC9jYW5j ZWwgYnkgdXNpbmcgdGhlIG5vdGF0aW9uIDxjb2RlPnN0YXJ0IGRhdGUgPSZndDsgZW5kIGRh dGU8L2NvZGU+LjwvcD4KCgk8cD5CeSBkZWZhdWx0LCBjYW5jZWxsZWQgZXZlbnRzIHdpbGwg bm90IGFwcGVhciBvbiB0aGUgY2FsZW5kYXIuIElmIHlvdSB1c2UgPGNvZGU+c2hvd3NraXBw ZWQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdGhlIGV2ZW50IHdpbGwgYXBwZWFyIGluIHRoZSBj ZWxsIGFzIG5vcm1hbCBhbmQgdGhlIDxjb2RlPmNhbmNlbDwvY29kZT4gZmxhZyB3aWxsIGFw cGx5IHRvIHRoZSBldmVudCAoYW5kIGNlbGwgaWYgeW91IGNob29zZSkgc28geW91IG1heSBk ZXRlY3Qvc3R5bGUgaXQuPC9wPgoKCTxoMiBpZD0iZXh0cmEiPkV4dHJhIGRhdGVzPC9oMj4K Cgk8cD5XaGVuIGV2ZW50cyBhcmUgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGVkPC9hPiB5 b3UgbWF5IGVsZWN0IHRvIHJlc2NoZWR1bGUgdGhlIGV2ZW50IG9uIGEgZGlmZmVyZW50IGRh dGUgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IHdpdGggaWRlbnRp Y2FsIGRldGFpbHMuIFVzZSB0aGUgPGNvZGU+ZXh0cmFmaWVsZDwvY29kZT4gdG8gc2ltcGx5 IGFkZCBpdCB0byB0aGUgY2FsZW5kYXIgb24gaXRzIG5ldyBkYXkuIFlvdSBtaWdodCBhbHNv IHVzZSB0aGlzIGZlYXR1cmUgaWYgeW91IGhhdmUgYSA8YSBocmVmPSIjcmVjdXIiPnJlY3Vy cmluZzwvYT4gZXZlbnQgb24gdGhlIDFzdCBvZiBldmVyeSBtb250aCBidXQgZm9yIHNvbWUg cmVhc29uIHlvdSBoYXZlIHRvIG1vdmUgb25lIG9mIHRoZSBldmVudHMgYSBkYXkgb3IgdHdv LiBTaW1wbHkgY2FuY2VsIHRoZSBvZmZlbmRpbmcgZGF0ZSBhbmQgYWRkIHRoZSBuZXcgZGF0 ZSB1c2luZyA8Y29kZT5leHRyYWZpZWxkPC9jb2RlPi48L3A+CgoJPHA+VGhlIGxpc3Qgb2Yg ZGF0ZXMgY2FuIGJlIGluIGFueSBzdGFuZGFyZCBkYXRlIGZvcm1hdCAoaW5jbHVkaW5nIGRh dGUgcmFuZ2VzIHVzaW5nIDxjb2RlPnN0YXJ0ID0mZ3Q7IGVuZDwvY29kZT4pLiBUaGV5IHdp bGwgYmUgYWRkZWQgdG8gdGhlIGNhbGVuZGFyIGFuZCBmbGFnZ2VkIGFzIDxjb2RlPmV4dHJh PC9jb2RlPi4gQWxzbyBzZWUgdGhlIDxjb2RlPmV4dHJhc3RyaWN0PC9jb2RlPiBhdHRyaWJ1 dGUuPC9wPgoKCTxwPklmIHlvdXIgb3JpZ2luYWwgZXZlbnQgc3BhbnMgbW9yZSB0aGFuIG9u ZSBkYXksIHlvdSBtYXkgZWxlY3QgdG8gc2NoZWR1bGUgdGhlIGVudGlyZSBibG9jayBhZ2Fp bi4gQWRkIGEgJiM4MjE2OysmIzgyMTc7IGFmdGVyIGFueSBkYXRlIHlvdSB3aXNoIHRvIHJl cGVhdCBpbiBpdHMgZW50aXJldHksIGUuZy4gPGNvZGU+MjAwOS1NYXItMTIrLCAyMDA5LUp1 bi0xOCssIDIwMDktRmViLTE5PC9jb2RlPiB3b3VsZCBjb3B5IHRoZSBlbnRpcmUgZXZlbnQg YmxvY2sgdG8gTWFyY2ggYW5kIEp1bmUsIGJ1dCBvbmx5IHRoZSAxc3QgZGF0ZSB0byBGZWIg MTl0aC4gRXZlbnRzL2NlbGxzIGFyZSBmbGFnZ2VkIGFzIGJvdGggPGNvZGU+ZXh0cmE8L2Nv ZGU+IGFuZCA8Y29kZT5tdWx0aTwvY29kZT4gd2hlcmUgYXBwbGljYWJsZS48L3A+CgoJPHA+ Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+aWYgeW91IHNjaGVkdWxlIGFuIGV4dHJhIGV2ZW50 IG9uIGEgZGF5IHRoYXQgYWxyZWFkeSBjb250YWlucyB0aGUgc2FtZSBldmVudCAocGVyaGFw cyBvbiBhIHNwYW5uZWQgb3IgcmVjdXJyaW5nIGRhdGUpIHlvdSBtYXkgc2VlIHR3byBpZGVu dGljYWwgZXZlbnRzIG9uIHRoZSBzYW1lIGRheS4gVHJ5IGFuZCBhdm9pZCB0aGlzLCB1bmxl c3MgaXQmIzgyMTc7cyB5b3VyIGludGVuZGVkIGJlaGF2aW91cjwvbGk+CgkJPGxpPmRhdGUg cmFuZ2VzIGFuZCB0aGUgJiM4MjE2OysmIzgyMTc7IHN5bnRheCBhcmUgbXV0dWFsbHkgZXhs Y3VzaXZlIG9uIGFueSBkYXRlIChlLmcuIDxjb2RlPjIwMDktTWFyLTEwKyA9Jmd0OyAyMDA5 LU1hci0xNTwvY29kZT4gaXMgaWxsZWdhbCk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImhvbGlk YXlzIj5Ib2xpZGF5czwvaDI+CgoJPHA+UHVibGljIGhvbGlkYXlzIG5lZWQgbm90IGJlIGEg bnVpc2FuY2UgdG8geW91ciBldmVudHMuIEdpdmUgdGhlIHBsdWdpbiBhIGhvbGlkYXkgbGlz dCBhbmQgaXQmIzgyMTc7bGwgbWFrZSBzdXJlIGFueSByZWN1cnJpbmcgb3IgbXVsdGkgZXZl bnRzIGFyZSBub3Qgc2NoZWR1bGVkIG9uIHRob3NlIGRheXMuIDxhIGhyZWY9IiNldmVudHMi PlN0YW5kYXJkPC9hPiBvbmUtb2ZmIGV2ZW50cyBhcmUgcGVybWl0dGVkIGJ5IGRlZmF1bHQg YmVjYXVzZSB5b3UgbWlnaHQgd2FudCB0byBvcmdhbmlzZSBhIHNwZWNpYWwgZXZlbnQgb24g dGhhdCBkYXksIHRob3VnaCB5b3UgY2FuIGZvcmJpZCB0aG9zZSB0b28gaWYgeW91IHdpc2gu PC9wPgoKCTxwPlRoZSBsaXN0IG9mIGRhdGVzIHlvdSBzcGVjaWZ5IGNhbiBiZSBlbnRlcmVk IGRpcmVjdGx5IGluIGEgc3RyaW5nIGluIHRoZSA8Y29kZT5ob2xpZGF5czwvY29kZT4gYXR0 cmlidXRlIG9yIGluIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT46PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDp2YXJp YWJsZSBuYW1lPSZxdW90O25hdF9ob2xzJnF1b3Q7CiAgICAgdmFsdWU9JnF1b3Q7RGVjIDI1 LCAyNiBEZWMsIDMxL0RlYywgSmFuLTEsCiAgICAgICAgTWF5IDQgMjAwOSwgMjAwOS0wOC0z MSZxdW90OyAvJmd0OwombHQ7dHhwOnNtZF9jYWxlbmRhciBob2xpZGF5cz0mcXVvdDt0eHB2 YXI6bmF0X2hvbHMmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgbGlzdCBz aG93cyBzb21lIG9mIHRoZSB2YXJpZXR5IGFuZCBicmVhZHRoIG9mIGZvcm1hdHMgdGhlIHBs dWdpbiBhbGxvd3MuIFRoZXJlIGFyZSBtb3JlLiBOb3RlIHRoYXQgdGhlIGV2ZW50cyB3aXRo b3V0IGEgeWVhciBvY2N1ciBvbiB0aGUgc2FtZSBkYXRlIGV2ZXJ5IHllYXIsIHdoZXJlYXMg dGhlIG9uZXMgd2l0aCBhIHllYXIgd2lsbCBvbmx5IG9jY3VyIG9uIHRoYXQgc3BlY2lmaWMg ZGF0ZS48L3A+CgoJPHA+T25jZSB5b3VyIGRhdGVzIGFyZSBkZWZpbmVkIHlvdSBjYW4gY29u dHJvbCB3aGljaCBldmVudHMgYXJlIGFsbG93ZWQgdG8gZmFsbCBvbiB0aG9zZSBkYXRlcyB2 aWEgPGNvZGU+aG9saWRheWZsYWdzPC9jb2RlPi4gQ29tYmluaW5nIHRoYXQgYXR0cmlidXRl LCA8Y29kZT5zaG93c3Bhbm5lZDwvY29kZT4sIDxjb2RlPnNob3dza2lwcGVkPC9jb2RlPiBh bmQgdGhlIGZvcm1zICYjODIxMjsgYWxvbmcgd2l0aCB0aGUgY29uZGl0aW9uYWwgdGFnICYj ODIxMjsgY2FuIGdpdmUgYSB3aWRlIHZhcmlldHkgb2Ygd2F5cyB0byBkaXNwbGF5IGV2ZW50 cyBhbmQgY2VsbHMuPC9wPgoKCTxwPkhvbGlkYXkgY2VsbHMgYXJlIGdpdmVuIHRoZSBmbGFn IDxjb2RlPmhvbHM8L2NvZGU+LCBhbmQgYW55IGV2ZW50IHRoYXQgaXMgbm90IHNwZWNpZmlj YWxseSBwZXJtaXR0ZWQgYnkgdGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gaXMgYXV0 b21hdGljYWxseSBhc3NpZ25lZCBhIDxjb2RlPmNhbmNlbDwvY29kZT4gZmxhZyBpZiBpdCBm YWxscyBvbiBvbmUgb2YgdGhlIGRheXMuIE9taXR0ZWQgZGF0ZXMgd2lsbCwgaG93ZXZlciwg Y2F1c2UgdGhlIDxjb2RlPmNhbmNlbDwvY29kZT4gZmxhZyB0byBiZSByZW1vdmVkLjwvcD4K Cgk8aDIgaWQ9InNtZGNhbCI+PGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2Nv ZGU+PC9oMj4KCgk8cD5QdXQgdGhpcyB0YWcgd2hlcmV2ZXIgeW91IHdhbnQgeW91ciBjYWxl bmRhciB0byBhcHBlYXIuIFVzZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdG8gY29udHJv bCBpdHMgb3V0cHV0IGRpc3BsYXkgYW5kIHVzZSB0aGUgPGEgaHJlZj0iI2F0dHN0eWxlcyI+ c3R5bGUgYXR0cmlidXRlczwvYT4gdG8gZGV0ZXJtaW5lIGhvdyB0byBhcHBseSBzdHlsZXMg dG8gdGhlIHZhcmlvdXMgZXZlbnRzIGFuZCBjZWxscy48L3A+CgoJPGgzIGNsYXNzPSJhdHRz ICIgaWQ9ImF0dHJpYnV0ZXMiPk1haW4gYXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+c2l6ZTwvc3Bhbj4gOiBjYWxlbmRhciBzaXplLCA8Y29kZT5s YXJnZTwvY29kZT4gb3IgPGNvZGU+c21hbGw8L2NvZGU+LiBUaGUgc21hbGwgaXMgbW9yZSBn ZWFyZWQgdG93YXJkcyBhIG1pbmljYWwsIGFsdGhvdWdoIGZ1bmN0aW9uYWxseSB0aGVyZSA8 YSBocmVmPSIjc2l6ZWRpZmYiPmlzbiYjODIxNzt0IG11Y2ggYmV0d2VlbiB0aGVtPC9hPi4g RGVmYXVsdDogPGNvZGU+bGFyZ2U8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnRpbWU8L3NwYW4+IDogc2hvdyA8Y29kZT5wYXN0PC9jb2RlPiwgPGNvZGU+ZnV0dXJl PC9jb2RlPiwgb3IgPGNvZGU+YW55PC9jb2RlPiBldmVudC4gRGVmYXVsdDogPGNvZGU+YW55 PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHBpcmVkPC9zcGFuPiA6 IGhpZGUgKDxjb2RlPjA8L2NvZGU+KSBvciBzaG93ICg8Y29kZT4xPC9jb2RlPikgZXhwaXJl ZCBldmVudHMuIExlYXZlIGJsYW5rIHRvIHVzZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gQWR2YW5jZWQgUHJlZmVyZW5jZSAmIzgyMTY7UHVibGlzaCBleHBpcmVkIGFy dGljbGVzJiM4MjE3OzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5maXJzdGRheTwv c3Bhbj4gOiB0aGUgMXN0IGRheSBvZiB0aGUgd2VlayB0byBzaG93IGluIHRoZSBjYWxlbmRh ci4gMD1TdW5kYXksIDE9TW9uZGF5ICYjODIzMDsgNj1TYXR1cmRheS4gRGVmYXVsdDogMDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXlmb3JtYXQ8L3NwYW4+IDogdGhlIHdh eSBpbiB3aGljaCB0aGUgZGF5IG5hbWVzIGFyZSByZW5kZXJlZC4gPGNvZGU+QUJCUjwvY29k ZT4gKHRoZSBkZWZhdWx0KSBzaG93cyB0aGUgZGF5cyBhcyBNb24sIFR1ZSwgV2VkLCBldGMg b3IgPGNvZGU+RlVMTDwvY29kZT4gcmVuZGVycyB0aGVpciBmdWxsIG5hbWVzLiBBbHRlcm5h dGl2ZWx5LCBzdXBwbHkgYW55IHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91azIucGhwLm5ldC9z dHJmdGltZSI+c3RyZnRpbWUoKTwvYT4gY29kZXMgdG8gdXNlIHRoYXQgaW5zdGVhZC4gTG9j YWxlLXNwZWNpZmljIG5hbWVzIGFyZSByZXR1cm5lZC48ZGl2IGNsYXNzPSJicmVhayI+WW91 IGNhbiBoYXJkLWNvZGUgeW91ciBvd24gZGF5IG5hbWVzOyB3cml0ZSBlYWNoIGl0ZW0gYXMg YSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBzdXJyb3VuZGVkIGJ5IDxjb2RlPnt9PC9jb2RlPiBi cmFja2V0cy4gSWYgeW91IHdhbnRlZCB0d28tbGV0dGVyIEdlcm1hbiB3ZWVrIGRheXMgeW91 IGNvdWxkIHVzZTogPGNvZGU+ZGF5Zm9ybWF0PSZxdW90O3tTbyxNbyxEaSxNaSxEbyxGcixT YX0mcXVvdDs8L2NvZGU+LiBUaGUgZmlyc3QgZGF5IGluIHRoZSBsaXN0IDxzdHJvbmc+bXVz dDwvc3Ryb25nPiByZXByZXNlbnQgU3VuZGF5IG9yIHRoaW5ncyB3aWxsIGJyZWFrPC9kaXY+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoZm9ybWF0PC9zcGFuPiA6IHRo ZSB3YXkgaW4gd2hpY2ggdGhlIG1vbnRoIG5hbWVzIGFyZSByZW5kZXJlZC4gPGNvZGU+RlVM TDwvY29kZT4gKHRoZSBkZWZhdWx0KSBzaG93cyB0aGUgZnVsbCBtb250aCBuYW1lcyBvciA8 Y29kZT5BQkJSPC9jb2RlPiByZW5kZXJzIHRoZWlyIGFiYnJldmlhdGVkIG5hbWVzLiBBbHRl cm5hdGl2ZWx5LCBzdXBwbHkgYW55IHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91azIucGhwLm5l dC9zdHJmdGltZSI+c3RyZnRpbWUoKTwvYT4gY29kZXMgdG8gdXNlIHRoYXQgaW5zdGVhZC4g TG9jYWxlLXNwZWNpZmljIG5hbWVzIGFyZSByZXR1cm5lZC48ZGl2IGNsYXNzPSJicmVhayI+ WW91IGNhbiBoYXJkLWNvZGUgeW91ciBvd24gbW9udGggbmFtZXM7IHdyaXRlIGVhY2ggaXRl bSBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHN1cnJvdW5kZWQgYnkgPGNvZGU+e308L2Nv ZGU+IGJyYWNrZXRzLiBJZiB5b3Ugd2FudGVkIHNpbmdsZS1sZXR0ZXIgbW9udGggbmFtZXMg eW91IGNvdWxkIHVzZTogPGNvZGU+bW9udGhmb3JtYXQ9JnF1b3Q7e0osRixNLEEsTSxKLEos QSxTLE8sTixEfSZxdW90OzwvY29kZT4uIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgbGlzdCA8 c3Ryb25nPm11c3Q8L3N0cm9uZz4gcmVwcmVzZW50IEphbnVhcnkgb3IgdGhpbmdzIHdpbGwg YnJlYWs8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2VsZWN0PC9zcGFu PiA6IHVzZSBhIHNlbGVjdCBkcm9wZG93biBmb3IgcmFwaWQgYWNjZXNzIHRvIHdlZWtzLCBt b250aHMgb3IgeWVhcnMgaW5zdGVhZCBvZiBzZWVpbmcganVzdCB0aGUgbmFtZXMuIERlZmF1 bHQ6IHVuc2V0LCBidXQgeW91IG1heSBtYWtlIGEgKGNvbW1hLXNlcGFyYXRlZCkgbGlzdCBm cm9tIGVpdGhlciA8Y29kZT53ZWVrPC9jb2RlPiAvIDxjb2RlPm1vbnRoPC9jb2RlPiBvciA8 Y29kZT55ZWFyPC9jb2RlPiAod2VlayBhbmQgbW9udGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZSkuPGRpdiBjbGFzcz0iYnJlYWsiPllvdSBtYXkgYWxzbyBzcGVjaWZ5IHVwIHRvIHR3byBl eHRyYSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSA8Y29kZT46PC9jb2RlPiBjaGFycy4gVGhl c2UgYWRkIHRleHQgaW4gZnJvbnQgb2YgYW5kIGJlaGluZCB0aGUgd2Vlay9tb250aC95ZWFy LCByZXNwZWN0aXZlbHkuIEZvciBleGFtcGxlOiA8Y29kZT5zZWxlY3Q9JnF1b3Q7d2VlazpX RUVLIywgeWVhcjombHQ7OiZndDsmcXVvdDs8L2NvZGU+IHdvdWxkIHJlbmRlciBhIHNlbGVj dCBsaXN0IHdpdGggZW50cmllcyB0aGF0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOiA8Y29kZT5X RUVLIzE1ICZsdDsyMDA5Jmd0OzwvY29kZT48L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+c2VsZWN0YnRuPC9zcGFuPiA6IGJ5IGRlZmF1bHQsIHRoZSBzZWxlY3QgZHJv cGRvd25zIHdpbGwgYXV0by1zdWJtaXQgd2hlbiB0aGV5IGFyZSBjaGFuZ2VkLiBJZiB5b3Ug cHJlZmVyIGEgZGVkaWNhdGVkIHN1Ym1pdCBidXR0b24sIGdpdmUgdGhlIHRleHQgeW91IHdp c2ggdG8gYXBwZWFyIG9uIHRoZSBidXR0b24gaGVyZS4gVGhlIGJ1dHRvbiBoYXMgYSBmaXhl ZCBjbGFzcyBvZiA8Y29kZT5zbWRfY2FsX2lucHV0PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5pc293ZWVrczwvc3Bhbj4gOiBzaG93IDxzcGFuIGNsYXNzPSJjYXBz Ij5JU088L3NwYW4+IHdlZWsgbnVtYmVycyBhcyBhIGNvbHVtbiBhdCB0aGUgc3RhcnQgb2Yg dGhlIGNhbGVuZGFyLiBBbnkgdGV4dCBpbiB0aGlzIGF0dHJpYnV0ZSBlbmFibGVzIHRoZSBm ZWF0dXJlLCBhbmQgYmVjb21lcyB0aGUgaGVhZGluZyBvZiB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPklTTzwvc3Bhbj4gd2VlayBjb2x1bW4uIFlvdSBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0 IHdlZWsgbnVtYmVyIGluIGVhY2ggY2VsbCBieSBhZGRpbmcgYSBjb21tYSBhbmQgc29tZSB0 ZXh0OyB3aGF0ZXZlciB5b3UgZW50ZXIgd2lsbCBiZSBwdXQgaW4gZWFjaCA8c3BhbiBjbGFz cz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGNlbGwuIFVzZSB0aGUgcmVwbGFjZW1lbnQgY29k ZXMgPGNvZGU+e3dlZWt9PC9jb2RlPiwgPGNvZGU+e21vbnRofTwvY29kZT4sIDxjb2RlPnt5 ZWFyfTwvY29kZT4gb3IgPGNvZGU+e2lzb3llYXJ9PC9jb2RlPiBpbiB5b3VyIG1hcmt1cCB0 byBpbnNlcnQgdGhlIHJlbGV2YW50IGluZm8uIDxkaXYgY2xhc3M9ImJyZWFrIj5FeGFtcGxl OiA8Y29kZT5pc293ZWVrcz0mcXVvdDt3aywgI3t3ZWVrfSZxdW90OzwvY29kZT4gd2lsbCBy ZW5kZXIgJiM4MjE2O3drJiM4MjE3OyBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4gYW5kIHNv bWV0aGluZyBsaWtlIDxjb2RlPiMyNDwvY29kZT4sIDxjb2RlPiMyNTwvY29kZT4sIDxjb2Rl PiMyNjwvY29kZT4mIzgyMzA7IGJlbmVhdGggaXQuIElmIHRoZSBmaXJzdCBpdGVtIGlzIG9t aXR0ZWQsIHRoZXJlIHdpbGwgYmUgbm8gY29sdW1uIGhlYWRpbmcuPC9kaXY+PGRpdiBjbGFz cz0iYnJlYWsiPk5vdGUgdGhhdCBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgPGNvZGU+ Zmlyc3RkYXk8L2NvZGU+IHdpbGwgYmUgZm9yY2VkIHRvIHN0YXJ0IG9uIGEgTW9uZGF5IGFz IGdvdmVybmVkIGJ5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiBzcGVjaWZp Y2F0aW9uLiBEZWZhdWx0OiB1bnNldDwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zdGF0dXM8L3NwYW4+IDogZXZlbnRzIGluIHRoaXMgbGlzdCBvZiBzdGF0dXMgYXJl IHB1Ymxpc2hlZC4gRGVmYXVsdDogPGNvZGU+bGl2ZTwvY29kZT48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2F0ZWdvcnk8L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlz IGxpc3Qgb2YgY2F0ZWdvcmllcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+c2VjdGlvbjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlz dCBvZiBzZWN0aW9ucy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+YXV0aG9yPC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIGF1 dGhvciBsb2dpbiBuYW1lcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+cmVhbG5hbWU8L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGxpc3Qg b2YgYXV0aG9yIFJlYWwgTmFtZXMgKG5vdGU6IGFkZHMgb25lIGV4dHJhIHF1ZXJ5KS4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2hvd2FsbDwvc3Bh bj4gOiBpZiB5b3VyIGNhbGVuZGFyIGFwcGVhcnMgb24gdGhlIGZyb250IHBhZ2UgYW5kIHlv dSBoYXZlIDxlbT5ub3Q8L2VtPiB1c2VkIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRy aWJ1dGUgdGhlIGNhbGVuZGFyIG9ubHkgc2hvd3MgZXZlbnRzIGZyb20gc2VjdGlvbnMgdGhh dCBoYXZlIHRoZWlyIDxjb2RlPk9uIGZyb250IHBhZ2U8L2NvZGU+IHJhZGlvIGJ1dHRvbiBz ZXQuIFVzZSA8Y29kZT5zaG93YWxsPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIHNob3cgYWxs IGV2ZW50cyBmcm9tIGFsbCBzZWN0aW9ucyBvbiBmcm9udCBwYWdlIGNhbGVuZGFyczwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRvIGFwcGx5IHRvIHRoZSB0YWJsZSB0aGF0IGhvbGRz IHRoZSBjYWxlbmRhci4gVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIDxjb2RlPmNhbGlkPC9jb2RlPi4gRGVmYXVsdDog dW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmF2aWQ8L3NwYW4+IDogdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCB0byBhcHBseSB0byB0aGUgcHJl di9uZXh0L21vbnRoL3llYXIgbmF2aWdhdGlvbiBmb3JtLiBEZWZhdWx0OiB1bnNldDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYXZhcnJvdzwvc3Bhbj4gOiBjb21tYS1zZXBh cmF0ZWQgcGFpciBvZiBpdGVtcyB5b3Ugd2FudCB0byBhcHBlYXIgYXMgcHJldi9uZXh0IGFy cm93cyBpbiB0aGUgY2FsZW5kYXIuIERlZmF1bHQ6IDxjb2RlPiZhbXA7IzYwOywgJmFtcDsj NjI7PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4g OiBzdGFydCB0aGUgY2FsZW5kYXIgb24gdGhpcyBtb250aCBmcm9tIDEgKEphbnVhcnkpIHRv IDEyIChEZWNlbWJlcikuIE5vcm1hbCBjYWxlbmRhciBuYXZpZ2F0aW9uIG92ZXJyaWRlcyB0 aGlzIHZhbHVlLiBJZiA8Y29kZT5zdGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMgbW9udGgg YmVjb21lcyB0aGUgb25seSBvbmUgeW91IG1heSB2aWV3LiBJZiB1bnNldCwgYW5kIG5vIDxj b2RlPm09PC9jb2RlPiB2YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiBsaW5lLCB0aGUgY3VycmVudCBtb250aCBpcyB1c2VkPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPndlZWs8L3NwYW4+IDogc3RhcnQgdGhlIGNhbGVuZGFyIGR1 cmluZyB0aGUgbW9udGggY29udGFpbmluZyB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088 L3NwYW4+IHdlZWsgKGZyb20gMSB0byA1MykuIElnbm9yZWQgaWYgPGNvZGU+c3RhdGljPC9j b2RlPiBvciBvbmUgb2YgdGhlIGNhbGVuZGFyIG5hdmlnYXRpb24gY29udHJvbHMgaXMgdXNl ZC4gSWYgYSA8Y29kZT53PTwvY29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGdpdmVuIHdlZWsgb3ZlcnJpZGVzIGFu eSBtb250aCB2YWx1ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyPC9zcGFu PiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBhdCB0aGlzIDQtZGlnaXQgeWVhci4gTm9ybWFsIGNh bGVuZGFyIG5hdmlnYXRpb24gb3ZlcnJpZGVzIHRoaXMgdmFsdWUuIElmIDxjb2RlPnN0YXRp YzwvY29kZT4gaXMgdXNlZCwgdGhpcyB5ZWFyIGJlY29tZXMgdGhlIG9ubHkgb25lIHlvdSBt YXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8Y29kZT55PTwvY29kZT4gdmFsdWUgYXBwZWFy cyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1cnJl bnQgeWVhciBpcyB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnllYXJ3aWR0 aDwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHRoYXQgc3BlY2lmaWVzIGhvdyBt YW55IHllYXJzIHlvdXIgY2FsZW5kYXIgc3BhbnMuIFRoZSBkZWZhdWx0ICgwKSB1c2VzIHRo ZSBlYXJsaWVzdCAocG9zdGVkKSBldmVudCBpbiB0aGUgc2VjdGlvbiBhcyB0aGUgZWFybGll c3QgeWVhciwgYW5kIHRoZSBsYXRlc3QgKG1vZGlmaWVkIG9yIHBvc3RlZCwgd2hpY2hldmVy IGlzIGdyZWF0ZXIpIGV2ZW50IGFzIHRoZSBsYXRlc3QgeWVhci4gWW91IHdpbGwgbm90IGJl IHBlcm1pdHRlZCB0byBuYXZpZ2F0ZSB0aGUgY2FsZW5kYXIgb3V0c2lkZSB0aGlzIHJhbmdl LjxkaXYgY2xhc3M9ImJyZWFrIj5UbyB3aWRlbiB0aGUgcmFuZ2UsIHNwZWNpZnkgc29tZSB2 YWx1ZXMsIGZvciBleGFtcGxlIDxjb2RlPnllYXJ3aWR0aD0mcXVvdDsyLDQmcXVvdDs8L2Nv ZGU+IHdpbGwgc3VidHJhY3QgMiB3aG9sZSB5ZWFycyBmcm9tIHRoZSBlYXJsaWVzdCBldmVu dCBhbmQgYWRkIDQgd2hvbGUgeWVhcnMgdG8gdGhlIGxhdGVzdCBldmVudC4gSWYgeW91IHNw ZWNpZnkgYSBzaW5nbGUgbnVtYmVyLCB0aGF0IHZhbHVlIHdpbGwgYmUgdXNlZCB0byBleHBh bmQgdGhlIHJhbmdlIGVxdWFsbHkgaW4gYm90aCBkaXJlY3Rpb25zLjwvZGl2PjxkaXYgY2xh c3M9ImJyZWFrIj4gSWYgeW91IGFkZCAmIzgyMTY7YyYjODIxNzsgdG8gZWl0aGVyIHZhbHVl IHRoZSBjdXJyZW50IHllYXIgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBlYXJsaWVzdCBvciBs YXRlc3QgZXZlbnQsIGUuZy4gPGNvZGU+eWVhcndpZHRoPSZxdW90OzIsNGMmcXVvdDs8L2Nv ZGU+IHdpbGwgc3VidHJhY3QgMiB5ZWFycyBmcm9tIHRoZSBlYXJsaWVzdCBldmVudCBhbmQg YWRkIDQgd2hvbGUgeWVhcnMgdG8gdG9kYXkmIzgyMTc7cyBkYXRlPC9kaXY+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnJlbWFwPC9zcGFuPiA6IHdoZW4gZGVhbGluZyB3aXRo IG11bHRpcGxlIGNhbGVuZGFycyBvbiBhIHBhZ2UgaXQgaXMgb2Z0ZW4gYmVuZWZpY2lhbCB0 byB1c2UgZGlmZmVyZW50IG5hbWVzIGZvciA8Y29kZT53PTwvY29kZT4sIDxjb2RlPm09PC9j b2RlPiBvciA8Y29kZT55PTwvY29kZT4gaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHNvIHlvdSBjYW4gbmF2aWdhdGUgY2FsZW5kYXJzIGluZGl2aWR1YWxseS4gUmVu YW1lIHRoZSB3LCBtLCAmYW1wOyB5IHZhcmlhYmxlcywgZm9yIGV4YW1wbGU6IDxjb2RlPnJl bWFwPSZxdW90O3c6d2ssIHk6eXImcXVvdDs8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmZvcm08L3NwYW4+IDogdXNlIHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gZm9ybSB0byBwcm9jZXNzIGVhY2ggZXZlbnQuIElmIHRoZSBjYWxlbmRhciB0 YWcgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBpdCB3aWxsIGJlIHVzZWQgaW4gcHJlZmVyZW5j ZSB0byB0aGUgZm9ybS4gSWYgbmVpdGhlciBhcmUgdXNlZCwgYSBkZWZhdWx0IGlzIHVzZWQg KExhcmdlOiBoeXBlcmxpbmtlZCBhcnRpY2xlIHRpdGxlLCBTbWFsbDogZW1wdHkgZXZlbnQp PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNwYW5mb3JtPC9zcGFuPiA6IHJlbmRl ciBzcGFubmVkIGV2ZW50cyBkaWZmZXJlbnRseSB0byBzdGFuZGFyZCBldmVudHM7IHRoZXkg dXN1YWxseSB1c2UgdGhlIHNhbWUgPGNvZGU+Zm9ybTwvY29kZT4vY29udGFpbmVyLiBJZiBu ZWl0aGVyIGFyZSBzcGVjaWZpZWQsIGEgcmlnaHQtYXJyb3cgd2lsbCBiZSB1c2VkIHRvIGlu ZGljYXRlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgZGF5JiM4MjE3O3MgZXZlbnQu IE5vdGUgdGhlIGZpcnN0IGRheSBvZiBhIHNwYW5uZWQgc2V0IGlzIDxlbT5ub3Q8L2VtPiBw YXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3JtPC9jb2RlPjsgb25seSBjb250aW51YXRpb24g Y2VsbHMgYXJlIHBhc3NlZCB0byBpdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5y ZWN1cmZvcm08L3NwYW4+IDogcmVuZGVyIHJlY3VycmluZyBldmVudHMgZGlmZmVyZW50bHkg dG8gc3RhbmRhcmQgZXZlbnRzLiBUaGUgZmlyc3QgZXZlbnQgb2YgYSByZWN1cnJpbmcgc2V0 IGlzIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdG8gPGNvZGU+cmVjdXJmb3JtPC9jb2RlPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jZWxsZm9ybTwvc3Bhbj4gKDxzcGFuIGNsYXNz PSJyZXF1aXJlZCI+b25seSBvbiBsYXJnZSBjYWxlbmRhcnM8L3NwYW4+KSA6IHVzZSB0aGlz IGlmIHlvdSB3aXNoIHRvIGJ1aWxkIGVhY2ggY2VsbCBlbnRpcmVseSBmcm9tIHNjcmF0Y2gu IFRoZXJlIGFyZSBzb21lIDxhIGhyZWY9IiNjZWxsZm9ybSI+cmVwbGFjZW1lbnQgdmFyaWFi bGVzPC9hPiB5b3UgY2FuIHVzZSB0byBpbnNlcnQgZHluYW1pYyBwaWVjZXMgb2YgaW5mb3Jt YXRpb24gaW4geW91ciBjZWxsczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGVw ZmllbGQ8L3NwYW4+IDogdGhlIElEIG9mIGEgZmllbGQgd2l0aGluIHdoaWNoIGFuIGV2ZW50 IG1heSBiZSB0b2xkIHRvIHJlcGVhdC4gTm90ZSBpdCBpcyB0aGUgZmllbGQmIzgyMTc7cyBJ RCA8ZW0+bm90IGl0cyBuYW1lPC9lbT4sIHNvIGZvciBjdXN0b20gZmllbGRzIHlvdSBtdXN0 IHVzZSA8Y29kZT5jdXN0b21fMTwvY29kZT4gb3IgPGNvZGU+Y3VzdG9tXzI8L2NvZGU+IGV0 Yy4gV2l0aG91dCB0aGlzIGF0dHJpYnV0ZSwgbm8gPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJp bmcgZXZlbnRzPC9hPiBtYXkgYmUgZGVmaW5lZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5vbWl0ZmllbGQ8L3NwYW4+IDogdGhlIElEIChub3QgbmFtZSkgb2YgYSBmaWVsZCB0 aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IGlzIHRv IGJlIDxhIGhyZWY9IiNjYW5jZWwiPm9taXR0ZWQ8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgKG5vdCBuYW1lKSBvZiBhIGZp ZWxkIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGRhdGVzIG9uIHdoaWNoIHRoaXMgZXZlbnQg aXMgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGVkPC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5leHRyYWZpZWxkPC9zcGFuPiA6IHRoZSBJRCAobm90IG5hbWUpIG9mIGEg ZmllbGQgZnJvbSB3aGljaCBhIGxpc3Qgb2YgPGEgaHJlZj0iI2V4dHJhIj5hZGRpdGlvbmFs IGV2ZW50IGRhdGVzPC9hPiBtYXkgYmUgZ2l2ZW47IHRoZSBzYW1lIGV2ZW50IGRldGFpbHMg d2lsbCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBkYXkocyk8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+ZXh0cmFzdHJpY3Q8L3NwYW4+IDogYW55IGRhdGVzIGluIDxjb2RlPmV4dHJh ZmllbGQ8L2NvZGU+IGF1dG9tYXRpY2FsbHkgYXBwZWFyIG9uIHRoZSBjYWxlbmRhciwgYnV0 IHlvdSBtYXkgY2hvb3NlIHRvIHJlc3RyaWN0IG5ldyBkYXRlcyBmcm9tIGFwcGVhcmluZyBh ZnRlciB0aGUgZXZlbnQmIzgyMTc7cyBleHBpcnkgZGF0ZSBieSBzZXR0aW5nIDxjb2RlPmV4 dHJhc3RyaWN0PSZxdW90OzEmcXVvdDs8L2NvZGU+LiBEZWZhdWx0OiAwPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dza2lwcGVkPC9zcGFuPiA6IHNob3cgKDEpIG9yIGhp ZGUgKDApIGNhbmNlbGxlZCBldmVudHMgb24gdGhlIGNhbGVuZGFyLiBEZWZhdWx0OiAwPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dzcGFubmVkPC9zcGFuPiA6IHNob3cg KDEpIG9yIGhpZGUgKDApIHNwYW5uZWQgZXZlbnRzIG9uIHRoZSBjYWxlbmRhci4gRGVmYXVs dDogMTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXRlZmllbGRzPC9zcGFuPiA6 IHRoZSBJRHMgKG5vdCBuYW1lcykgb2YgdXAgdG8gdHdvIGZpZWxkcyBmcm9tIHdoaWNoIHBv c3RlZCBhbmQgZXhwaXJ5IGRhdGUgc3RhbXBzIG1heSBiZSBnaXZlbi4gQ29tbWEtc2VwYXJh dGUgdGhlIGZpZWxkIG5hbWVzOyB0aGUgZmlyc3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSBQb3N0 ZWQgZGF0ZSBhbmQgdGhlIHNlY29uZCBhcyB0aGUgRXhwaXJ5LiBJZiBlaXRoZXIgaXMgb21p dHRlZCBvciBtYW5nbGVkLCB0aGUgYXJ0aWNsZSYjODIxNztzICYjODIyMDtyZWFsJiM4MjIx OyBwb3N0ZWQvZXhwaXJ5IGRhdGUgd2lsbCBiZSB1c2VkIGluc3RlYWQuIElmIHRoZSBleHBp cnkgZGF0ZSBvY2N1cnMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCB5b3VyIGRhdGVmaWVsZHMg d2lsbCBiZSBpZ25vcmVkIGFuZCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheXM8L3NwYW4+IDogbGlzdCBvZiBkYXRlcyB0 aGF0IGFyZSBkZWNyZWVkIGFzIDxhIGhyZWY9IiNob2xpZGF5cyI+aG9saWRheXM8L2E+LiBN YXkgYmUgZGVmZXJyZWQgdG8gYSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2Rl PiwgaW4gd2hpY2ggY2FzZSBkZWZpbmUgeW91ciBsaXN0IGluIGEgbmFtZWQgdmFyaWFibGUg YW5kIHVzZSA8Y29kZT5ob2xpZGF5cz0mcXVvdDt0eHB2YXI6bXlfdmFyX25hbWUmcXVvdDs8 L2NvZGU+IHRvIHJlYWQgdGhlbSBpbnRvIHRoZSBwbHVnaW48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+aG9saWRheWZsYWdzPC9zcGFuPiA6IHBlcm1pdCBjZXJ0YWluIDxhIGhy ZWY9IiNuYW1pbmciPmV2ZW50IGZsYWdzPC9hPiB0byBiZSBzY2hlZHVsZWQgb24gaG9saWRh eXMuIERlZmF1bHQ6IDxjb2RlPnN0YW5kYXJkPC9jb2RlPiAoaS5lLiBzdGFuZGFyZCBvbmUt b2ZmIGV2ZW50cykgYnV0IG90aGVycyBtYXkgYmUgbGlzdGVkIGFzIHdlbGwuIENob29zZSBm cm9tIDxjb2RlPnN0YW5kYXJkPC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+IG9yIDxjb2Rl Pm11bHRpPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5saW5rcG9zdGVk PC9zcGFuPiAoPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5vbmx5IG9uIHNtYWxsIGNhbGVuZGFy czwvc3Bhbj4pIDogZWFjaCBjZWxsIHRoYXQgY29udGFpbnMgYW4gPGEgaHJlZj0iI25hbWlu ZyI+ZXZlbnQgZmxhZzwvYT4gb2YgdGhlIGdpdmVuIHR5cGUocykgd2lsbCBoYXZlIGl0cyBk YXkgbnVtYmVyIGxpbmtlZCB0byB0aGUgZXZlbnQmIzgyMTc7cyB0cnVlIHN0YXJ0IGRhdGUg aW5zdGVhZCBvZiB0aGUgY2VsbCYjODIxNztzIGRhdGUuIFRodXMsIGlmIHlvdSBoYXZlIGEg d2Vla2x5IGV2ZW50IHRoYXQgc3RhcnRzIG9uIHRoZSAyMHRoIERlY2VtYmVyIDIwMDgsIHNl dHRpbmcgPGNvZGU+bGlua3Bvc3RlZD0mcXVvdDtyZWN1ciZxdW90OzwvY29kZT4gd2lsbCBj YXVzZSB0aGUgbGluayB0byBiZSA8Y29kZT5kYXRlPTIwMDgtMTItMjA8L2NvZGU+IGV2ZXJ5 IHdlZWsuIFRoaXMgYWxsb3dzIHlvdSB0byBhbHdheXMgbGluayB0byBhIHZhbGlkIGFydGlj bGUvZXZlbnQuIFdpdGhvdXQgbGlua3Bvc3RlZCwgdGhlIGRhdGVzIHdvdWxkIGJlIDIwMDgt MTItMjAsIDIwMDgtMTItMjcsIDIwMDktMDEtMDMsIGFuZCBzbyBvbi4gRGVmYXVsdDogPGNv ZGU+cmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFzdDwvY29kZT4gKGkuZS4gYW55 IHJlY3VycmluZyBvciBzcGFubmVkIGV2ZW50KS4gTm90ZSB0aGF0IGlmIG1vcmUgdGhhbiBv bmUgZXZlbnQgb2NjdXJzIGluIHRoZSBjZWxsLCB0aGUgbGluayB3aWxsIG9ubHkgYmUgdG8g dGhlIGZpcnN0IGV2ZW50IHRoZSBwbHVnaW4gZmluZHM8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+bWFpbnRhaW48L3NwYW4+IDoga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBz dGF0ZSBvZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gd2hlbiBuYXZpZ2F0 aW5nIHRoZSBjYWxlbmRhciB1c2luZyB0aGUgbmV4dC9wcmV2IG9yIG1vbnRoL3llYXIgc2Vs ZWN0IGxpc3RzLiBJdGVtcyB0aGF0IHlvdSB3YW50IHRvIHByZXNlcnZlIHNob3VsZCBiZSBj b21tYS1zZXBhcmF0ZWQuIENob29zZSBmcm9tIDxjb2RlPmNhbGlkPC9jb2RlPiwgPGNvZGU+ c2VjdGlvbjwvY29kZT4sIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiwgPGNvZGU+YXV0aG9yPC9j b2RlPiwgPGNvZGU+YXJ0aWNsZTwvY29kZT4sIDxjb2RlPnBnPC9jb2RlPiBvciB5b3VyIG93 biA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZS4gRGVmYXVsdDogPGNv ZGU+Y2FsaWQ8L2NvZGU+LjxkaXYgY2xhc3M9ImJyZWFrIj5Vc2UgPGNvZGU+bWFpbnRhaW49 JnF1b3Q7c2VjdGlvbiwgYXJ0aWNsZSwgY2FsaWQmcXVvdDs8L2NvZGU+IGlmIHlvdSBoYXZl IGFuIGluZGl2aWR1YWwgYXJ0aWNsZSBwYWdlIHdpdGggYSBjYWxlbmRhciBpbiBhIHNpZGVi YXIsIHNvIHRoZSBjdXJyZW50bHkgdmlld2VkIGFydGljbGUgd2lsbCByZW1haW4gaW4gdmll dyB3aGVuIGNoYW5naW5nIGRhdGUuIElmIHlvdSB3aXNoIHRvIG1haW50YWluIHN0YXRlIHlv dXJzZWxmIG9yIGRvIHNvbWV0aGluZyBleG90aWMsIGVtcHR5IHRoaXMgYXR0cmlidXRlIGZp cnN0IHRvIGF2b2lkIHdlaXJkbmVzczwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5uYW1ldmFsPC9zcGFuPiA6IGFkZCB5b3VyIG93biBuYW1lL3ZhbHVlIHBhaXJzIHRv IHRoZSBjYWxlbmRhciYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBl LmcuIDxjb2RlPm5hbWV2YWw9JnF1b3Q7dHJhY2tlcj1teWNhbCwga2VlcD0xJnF1b3Q7PC9j b2RlPiB3b3VsZCBhZGQgPGNvZGU+P3RyYWNrZXI9bXljYWwmYW1wO2tlZXA9MTwvY29kZT4g dG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBVc2VmdWwgaWYgeW91IHdh bnQgdG8gPGNvZGU+bWFpbnRhaW48L2NvZGU+IHNvbWUgdmFsdWVzIHdoaWNoIHlvdSBjYW4m IzgyMTc7dCBhZGQgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG9uIHBh Z2UgbG9hZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0aWM8L3NwYW4+IDog Zm9yY2UgdGhlIGNhbGVuZGFyIHRvIGJlIGZpeGVkIHRvIG9uZSBtb250aC95ZWFyIChpLmUu IG5vIG5hdmlnYXRpb24pLiBNb250aCBhbmQgeWVhciBkZWNpZGVkIGJ5IGF0dHJpYnV0ZXMg PGNvZGU+bW9udGg8L2NvZGU+IGFuZCA8Y29kZT55ZWFyPC9jb2RlPiBvciAmIzgyMTI7IGlm IG9taXR0ZWQgJiM4MjEyOyB0aGUgY3VycmVudCBkYXRlIHdpbGwgYmUgdXNlZDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5nbXQ8L3NwYW4+IDogY3VycmVudGx5IHVudXNlZCwg cGVuZGluZyByZXZpZXc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFuZzwvc3Bh bj4gOiBjdXJyZW50bHkgdW51c2VkLCBwZW5kaW5nIHJldmlldzwvbGk+Cgk8L3VsPgoKCTxo MyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzdHlsZXMiPlN0eWxlIGF0dHJpYnV0ZXM8L2gzPgoK CTxwPk9uY2UgeW91IGhhdmUgdHdlYWtlZCB5b3VyIGJhc2ljIGNhbGVuZGFyIGFzIGRlc2Ny aWJlZCBhYm92ZSB5b3UgY2FuIHN0eWxlIGl0IHVzaW5nIHRoZXNlIGF0dHJpYnV0ZXM6PC9w PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzbGV2ZWxzPC9zcGFuPiA6 IGNsYXNzZXMgY2FuIGJlIGFwcGxpZWQgdG8gZXZlbnRzLCBjZWxscywgb3IgYm90aC4gWW91 IG1heSBhbHNvIHByb21vdGUgKGkuZS4gY29weSkgYWxsIGV2ZW50LWxldmVsIGNsYXNzZXMg dGhhdCBvY2N1ciBpbiBhIGRheSB0byB0aGUgY2VsbCBsZXZlbCBzbyB5b3UgY2FuIGNvbG91 ciB0aGUgY2VsbCBiYXNlZCBvbiB0aGUgZXZlbnRzIHRoYXQgaXQgY29udGFpbnMuIFVzZSBh bnkgb2YgPGNvZGU+ZXZlbnQ8L2NvZGU+LCA8Y29kZT5jZWxsPC9jb2RlPiwgb3IgPGNvZGU+ Y2VsbHBsdXM8L2NvZGU+IChmb3IgY29weWluZyB1bmlxdWUgZXZlbnQgY2xhc3NlcyB0byB0 aGUgY2VsbCkuIE5vdGUgeW91IHNob3VsZCBub3QgdXNlIDxjb2RlPmNlbGw8L2NvZGU+IGFu ZCA8Y29kZT5jZWxscGx1czwvY29kZT4gdG9nZXRoZXIgYmVjYXVzZSB0aGUgbGF0dGVyIG92 ZXJyaWRlcyB0aGUgZm9ybWVyLiBEZWZhdWx0OiA8Y29kZT5jZWxsLCBldmVudDwvY29kZT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3NwcmVmaXhlczwvc3Bhbj4gOiBh IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHVwIHRvIHR3byBwcmVmaXhlcyB0byBhcHBseSB0 byB5b3VyIGNsYXNzIG5hbWVzLiBUaGUgZmlyc3QgcHJlZml4IGlzIGFwcGxpZWQgdG8gY2Vs bC1sZXZlbCBjbGFzc2VzIChhbmQgZmxhZ3MpIGFuZCB0aGUgc2Vjb25kIHByZWZpeCBpcyBh cHBsaWVkIHRvIGV2ZW50IGNsYXNzZXMgKHNlZSA8Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+ KS4gSWYgeW91IG9ubHkgc3BlY2lmeSBvbmUgcHJlZml4LCBpdCB3aWxsIGJlIHVzZWQgZm9y IGJvdGguIElmIHlvdSB1c2UgPGNvZGU+Y2xhc3NwcmVmaXhlcz0mcXVvdDsmcXVvdDs8L2Nv ZGU+IHRoZW4gbm8gcHJlZml4ZXMgd2lsbCBiZSB1c2VkIGF0IGFsbC4gRGVmYXVsdDogPGNv ZGU+c21kX2NhbF8sIHNtZF9jYWxfZXZfPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY2FsZW5kYXIg dGFibGUgaXRzZWxmLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5yb3djbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSBvZiBlYWNoIHRhYmxlIHJv dy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbGNs YXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIG9mIGVhY2ggdGFibGUgY2VsbC4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZW1wdHljbGFzczwvc3Bh bj4gOiB0aGUgY2xhc3MgbmFtZSBvZiBhbnkgY2VsbHMgdGhhdCBkb24mIzgyMTc7dCBjb250 YWluIGEgZGF5IG51bWJlciAoaS5lLiB0aGUgYmxhbmsgY2VsbHMgYXQgdGhlIHN0YXJ0IGFu ZCBlbmQgb2YgYSBtb250aCkuIERlZmF1bHQ6IDxjb2RlPmVtcHR5PC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pc293ZWVrY2xhc3M8L3NwYW4+IDogdGhlIGNsYXNz IG5hbWUgb2YgZWFjaCBjZWxsIGNvbnRhaW5pbmcgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklT Tzwvc3Bhbj4gd2Vlay4gRGVmYXVsdDogPGNvZGU+d2VlazwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bmF2Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgb2Yg dGhlIHByZXYvbmV4dCBtb250aCBuYXYgYXJyb3dzLiBJZiBhIGNvbW1hLXNlcGFyYXRlZCBs aXN0IGlzIHVzZWQsIHRoZSBmaXJzdCBpdGVtIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGNs YXNzIG9mIHRoZSBwcmV2aW91cyBtb250aCwgdGhlIDJuZCBpdGVtIG9mIHRoZSBuZXh0IG1v bnRoLiBJZiBhIHNpbmdsZSB2YWx1ZSBpcyB1c2VkLCBib3RoIGNsYXNzIG5hbWVzIHdpbGwg YmUgdGhlIHNhbWUuIERlZmF1bHQ6IDxjb2RlPm5hdnByZXYsIG5hdm5leHQ8L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm15Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNz IG5hbWUgb2YgYm90aCB0aGUgbW9udGggYW5kIHllYXIgaW4gdGhlIGNhbGVuZGFyIGhlYWRl ciAoZWl0aGVyIHRoZSA8Y29kZT4mbHQ7c3BhbiZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDtz ZWxlY3QmZ3Q7PC9jb2RlPiB0YWdzKS4gSWYgPGNvZGU+bXl3cmFwdGFnPC9jb2RlPiBpcyB1 c2VkLCB0aGUgY2xhc3MgaXMgYXBwbGllZCB0byB0aGUgd3JhcHRhZyBpbnN0ZWFkLiBEZWZh dWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudGNsYXNzZXM8 L3NwYW4+IDogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcyB0byBhZGQgYXMgY2xh c3NlcyB0byBlYWNoIGV2ZW50IChlYWNoIHByZWZpeGVkIHdpdGggdGhlIGV2ZW50IHByZWZp eCkuIEl0IGRlZmF1bHRzIHRvIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiBzbyBpdCBhZGRzIHRo ZSBDYXRlZ29yeTEgYW5kIDIgbmFtZXMgYXMgY2xhc3MgaWRlbnRpZmllcnMgdG8gZWFjaCBl dmVudC48ZGl2IGNsYXNzPSJicmVhayI+SWYgeW91IHdpc2ggdG8gZXh0ZW5kIG9yIGFsdGVy IHRoaXMsIGdpdmUgYSBsaXN0IG9mIGZpZWxkcyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRv IHRoZSBldmVudCAoZS5nLiA8Y29kZT5ldmVudGNsYXNzZXM9JnF1b3Q7SUQsIEF1dGhvcklE LCBjdXN0b21fNSZxdW90OzwvY29kZT4gd291bGQgYWRkIHRocmVlIGNsYXNzZXMgdG8gZWFj aCBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudCYjODIxNztzIElELCBpdHMgYXV0 aG9yIChsb2dpbikgbmFtZSBhbmQgdGhlIGNvbnRlbnRzIG9mIGN1c3RvbV81KS4gSWYgeW91 IHVzZSA8Y29kZT5jZWxscGx1czwvY29kZT4sIHRoZXNlIGNsYXNzZXMgd2lsbCBiZSBjb3Bp ZWQgdG8gdGhlIGNlbGwgbGV2ZWwuPC9kaXY+PGRpdiBjbGFzcz0iYnJlYWsiPlNvbWUgc3Bl Y2lhbCBuYW1lcyBleGlzdDogPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IHJldHVybnMgYm90aCBD YXRlZ29yeTEgYW5kIENhdGVnb3J5MiAoaWYgc2V0KTsgPGNvZGU+Z2NhdDwvY29kZT4gd2ls bCByZXR1cm4gdGhlIGN1cnJlbnQgJiM4MjE2O2dsb2JhbCYjODIxNzsgY2F0ZWdvcnkgKGlm IGZpbHRlcmluZyBieSBjYXRlZ29yeSk7IDxjb2RlPmF1dGhvcjwvY29kZT4gcmV0dXJucyB0 aGUgYXV0aG9yIElEIChpZiBmaWx0ZXJpbmcgYnkgYXV0aG9yKTsgPGNvZGU+c2VjdGlvbjwv Y29kZT4gZ2l2ZXMgdGhlIGN1cnJlbnQgc2VjdGlvbjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5ldmVudHdyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3 aXRob3V0IGl0cyBicmFja2V0cywgdG8gd3JhcCBlYWNoIGV2ZW50IHdpdGguIERlZmF1bHQ6 IDxjb2RlPnNwYW48L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm15d3Jh cHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcsIHdpdGhvdXQgaXRzIGJyYWNrZXRzLCB0 byB3cmFwIGFyb3VuZCA8ZW0+Ym90aDwvZW0+IG1vbnRoICsgeWVhciBkcm9wZG93biBzZWxl Y3QgbGlzdHMgYW5kIHN1Ym1pdCBidXR0b24gKGl0IHdyYXBzIHRoZSBsb3QsIGNvbWJpbmVk KS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNlbGxmb3JtIj5Vc2lu ZyBhIDxjb2RlPmNlbGxmb3JtPC9jb2RlPiB3aXRoIHJlcGxhY2VtZW50IHZhcmlhYmxlczwv aDI+CgoJPHA+SWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGxheW91dCBvZiB0aGUgZGVm YXVsdCBjZWxsLCB5b3UgY2FuIGRvIGl0IHlvdXJzZWxmIHdpdGggdGhlIDxjb2RlPmNlbGxm b3JtPC9jb2RlPiBhdHRyaWJ1dGUuIFRoZSBjZWxscyBhcmUgZ2VuZXJhdGVkIDxlbT5sYXN0 PC9lbT4sIHNvIGJ5IHRoZSB0aW1lIHRoZSBwbHVnaW4gcmVhY2hlcyB0aGlzIGF0dHJpYnV0 ZSwgYWxsIGV2ZW50cyBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYnkgYW55IG9mIHlv dXIgZm9ybXMvY29udGFpbmVycy48L3A+CgoJPHA+VG8gYnVpbGQgeW91ciBvd24gY2VsbHMg eW91IG9mdGVuIG5lZWQgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgZXZlbnRzIHRoYXQgZmFs bCBvbiBhIHBhcnRpY3VsYXIgZGF5OyBvciB0aGUgd2VlaywgbW9udGggb3IgZGF5IG51bWJl cnMsIGV0Yy4gU28gJiM4MjEyOyBpbiBhZGRpdGlvbiB0byB5b3VyIHVzdWFsIG1hcmt1cCBh bmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyAmIzgyMTI7IHlvdSBtYXkg YWxzbyBpbnNlcnQgYW55IG9mIHRoZSBmb2xsb3dpbmcgJiM4MjE2O3JlcGxhY2VtZW50cyYj ODIxNzsgdG8gaGF2ZSB0aGUgcmVsZXZhbnQgdmFsdWUgaW5zZXJ0ZWQgYXQgdGhhdCBwbGFj ZSBpbiB0aGUgY2VsbDo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT57ZGF5fTwvY29kZT4gOiBj dXJyZW50IGRheSAoYXMgYSBudW1iZXIgZnJvbSAxIHRvIDMxKTwvbGk+CgkJPGxpPjxjb2Rl Pnt3ZWVrZGF5fTwvY29kZT4gOiBjdXJyZW50IHdlZWtkYXkgYXMgYSB3b3JkIGluIHRoZSBs b2NhbCBsYW5ndWFnZSwgb3IgZnJvbSB5b3VyIDxjb2RlPmRheWZvcm1hdDwvY29kZT4gbGlz dDwvbGk+CgkJPGxpPjxjb2RlPnt3ZWVrfTwvY29kZT4gOiBjdXJyZW50IDxzcGFuIGNsYXNz PSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVyPC9saT4KCQk8bGk+PGNvZGU+e21vbnRo fTwvY29kZT4gOiBjdXJyZW50IG1vbnRoIChhcyBhIG51bWJlciBmcm9tIDEgdG8gMTIpPC9s aT4KCQk8bGk+PGNvZGU+e21vbnRobmFtZX08L2NvZGU+IDogbW9udGggbmFtZSBpbiB0aGUg bG9jYWwgbGFuZ3VhZ2UsIG9yIGZyb20geW91ciA8Y29kZT5tb250aGZvcm1hdDwvY29kZT4g bGlzdDwvbGk+CgkJPGxpPjxjb2RlPnt5ZWFyfTwvY29kZT4gOiBjdXJyZW50IHllYXIgKDQg ZGlnaXRzKTwvbGk+CgkJPGxpPjxjb2RlPntzaG9ydHllYXJ9PC9jb2RlPiA6IGN1cnJlbnQg eWVhciAoMiBkaWdpdHMpPC9saT4KCQk8bGk+PGNvZGU+e2lzb3llYXJ9PC9jb2RlPiA6IGN1 cnJlbnQgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4geWVhciAoNCBkaWdpdHMpPC9s aT4KCQk8bGk+PGNvZGU+e3Nob3J0aXNveWVhcn08L2NvZGU+IDogY3VycmVudCA8c3BhbiBj bGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB5ZWFyICgyIGRpZ2l0cyk8L2xpPgoJCTxsaT48Y29k ZT57ZXZlbnRzfTwvY29kZT4gOiBhbGwgZXZlbnRzIGZvciB0aGUgZGF5PC9saT4KCQk8bGk+ PGNvZGU+e3N0YW5kYXJkfTwvY29kZT4gOiBvbmx5IHN0YW5kYXJkIGV2ZW50czwvbGk+CgkJ PGxpPjxjb2RlPntyZWN1cmZpcnN0fTwvY29kZT4gLyA8Y29kZT57cmVjdXJ9PC9jb2RlPiA6 IHRoZSBjaG9zZW4gdHlwZSBvZiByZWN1cnJpbmcgZXZlbnQ8L2xpPgoJCTxsaT48Y29kZT57 YWxscmVjdXJ9PC9jb2RlPiA6IGFsbCByZWN1cnJpbmcgZXZlbnRzIGZvciB0aGUgZGF5PC9s aT4KCQk8bGk+PGNvZGU+e211bHRpZmlyc3R9PC9jb2RlPiAvIDxjb2RlPnttdWx0aX08L2Nv ZGU+IC8gPGNvZGU+e211bHRpcHJldn08L2NvZGU+IC8gPGNvZGU+e211bHRpbGFzdH08L2Nv ZGU+IDogdGhlIGNob3NlbiB0eXBlIG9mIG11bHRpIGV2ZW50PC9saT4KCQk8bGk+PGNvZGU+ e2FsbG11bHRpfTwvY29kZT4gOiBhbGwgbXVsdGkgZXZlbnRzIGZvciB0aGUgZGF5PC9saT4K CQk8bGk+PGNvZGU+e2NhbmNlbH08L2NvZGU+IDogb25seSBjYW5jZWxsZWQgZXZlbnRzPC9s aT4KCQk8bGk+PGNvZGU+e2V4dHJhfTwvY29kZT4gOiBvbmx5IGV4dHJhIGV2ZW50czwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0ic2l6ZWRpZmYiPkRpZmZlcmVuY2VzIGJldHdlZW4gbGFyZ2Ug YW5kIHNtYWxsIGNhbGVuZGFyczwvaDI+CgoJPHA+Tm90IGEgbG90ISBCdXQgdGhlcmUgYXJl IHNvbWUgc3VidGxldGllczo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5jZWxsZm9ybTwvY29k ZT4gY2Fubm90IGJlIHVzZWQgb24gYSBzbWFsbCBjYWxlbmRhcjwvbGk+CgkJPGxpPkJ5IGRl ZmF1bHQsIG5vIGV2ZW50cyBhcmUgcGxhY2VkIGluIHRoZSBzbWFsbCBjYWxlbmRhci4gWW91 IGNhbiBhZGQgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCBiZWNhdXNlIHlvdSBjYW4gdXNl IHRoZSBzYW1lIGZvcm0vY29udGFpbmVyIG1lY2hhbmlzbSBhcyB0aGUgbGFyZ2UgY2FsZW5k YXI8L2xpPgoJCTxsaT5UaGUgb25seSB0aGluZyByZW5kZXJlZCBpbiBhIHNtYWxsIGNhbGVu ZGFyIGNlbGwgaXMgdGhlIGh5cGVybGlua2VkIGRhdGUgYW5kIGFueSA8YSBocmVmPSIjbmFt aW5nIj5mbGFnczwvYT4gc28geW91IGNhbiBzdHlsZSB0aGUgYm94ZXM8L2xpPgoJCTxsaT48 Y29kZT5jbGFzc2xldmVsczwvY29kZT4gYXJlIGlnbm9yZWQ6IGV2ZXJ5dGhpbmcgaXMgYXV0 b21hdGljYWxseSBhc3NpZ25lZCBhdCB0aGUgY2VsbCBsZXZlbCAoaS5lLiA8Y29kZT5jZWxs cGx1czwvY29kZT4gaXMgc2V0KTwvbGk+CgkJPGxpPjxjb2RlPmV2ZW50Y2xhc3NlczwvY29k ZT4gYXJlIHN0aWxsIGhvbm91cmVkIGlmIHlvdSB3aXNoIHRvIHVzZSBhIDxjb2RlPmZvcm08 L2NvZGU+IHRvIHByb2Nlc3MgdGhlbSB5b3Vyc2VsZjwvbGk+CgkJPGxpPlRoZSBzbWFsbCBj YWxlbmRhciBvdXRwdXRzIHllYXItbW9udGgtZGF5LXRpdGxlIG9yIG1lc3N5IHBlcm1saW5r cyBvbmx5PC9saT4KCTwvdWw+CgoJPHA+QXNpZGUgZnJvbSB0aGF0IHRoZXkmIzgyMTc7cmUg cHJldHR5IG11Y2ggaWRlbnRpY2FsLjwvcD4KCgk8aDIgaWQ9ImlmY2FsIj5UYWc6IDxjb2Rl PiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+PC9oMj4KCgk8cD5UaGlzIGNvbmRpdGlv bmFsIHRhZyBhbGxvd3MgeW91ICYjODIxMjsgaW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm1z ICAmIzgyMTI7IHRvIHRlc3QgY2VydGFpbiBjb25kaXRpb25zIG9mIHRoZSBjdXJyZW50IGV2 ZW50L2NlbGwuIEZvciBlbmhhbmNlZCBjb25kaXRpb25hbCBjaGVja2luZyAocGVyaGFwcyBp biBjb25qdW5jdGlvbiB3aXRoIDxhIGhyZWY9IiNjYWxub3ciPnNtZF9jYWxfbm93PC9hPiks IGNvbnNpZGVyIHRoZSBzbWRfaWYgcGx1Z2luLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBp ZD0iYXR0c2lmY2FsIj5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5mbGFnPC9zcGFuPiA6IHRoZSBjZWxsIG9yIGV2ZW50IGZsYWcocykgeW91IHdh bnQgdG8gdGVzdCwgZWFjaCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxj b2RlPmV2ZW50PC9jb2RlPiwgPGNvZGU+c3RhbmRhcmQ8L2NvZGU+LCA8Y29kZT5yZWN1cmZp cnN0PC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+LCA8Y29kZT5tdWx0aWZpcnN0PC9jb2Rl PiwgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPiwgPGNvZGU+bXVsdGk8L2NvZGU+LCA8Y29kZT5t dWx0aXByZXY8L2NvZGU+LCA8Y29kZT5jYW5jZWw8L2NvZGU+LCA8Y29kZT5vbWl0PC9jb2Rl PiwgPGNvZGU+ZXh0cmE8L2NvZGU+LCA8Y29kZT5ob2xzPC9jb2RlPiwgPGNvZGU+dG9kYXk8 L2NvZGU+LCBvciB0aGUgc3BlY2lhbCBmbGFnIDxjb2RlPlNNRF9BTlk8L2NvZGU+IHdoaWNo IHdpbGwgdHJpZ2dlciBpZiB0aGUgY2VsbCBvciBldmVudCBjb250YWlucyBhbnkgb2YgdGhl IGFib3ZlLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5j YWxpZDwvc3Bhbj4gOiB0aGUgY2FsZW5kYXIgSUQgeW91IHdpc2ggdG8gY2hlY2sgZm9yIGEg bWF0Y2guIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnll YXI8L3NwYW4+IDogdGhlIHllYXIgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXNveWVhcjwvc3Bhbj4g OiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4geWVhciB0aGUgY3VycmVudCBj ZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5tb250aDwvc3Bhbj4gOiB0aGUgbW9udGggbnVtYmVyICgxLTEyKSB0aGF0IHRoZSBj dXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPndlZWs8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088 L3NwYW4+IHdlZWsgbnVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZGF5PC9zcGFuPiA6 IHRoZSBkYXkgbnVtYmVyIHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVu c2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxvZ2ljPC9zcGFuPiA6IHdoZXRo ZXIgeW91IHdhbnQgdG8gY2hlY2sgaWYgPGVtPmFsbDwvZW0+IHRlc3RzIHlvdSBub21pbmF0 ZWQgYXJlIHRydWUgaW4gdGhlIGN1cnJlbnQgY2VsbCAoPGNvZGU+bG9naWM9JnF1b3Q7YW5k JnF1b3Q7PC9jb2RlPikgb3IgPGVtPmF0IGxlYXN0IG9uZTwvZW0+IG9mIHRoZSB0ZXN0cyBp cyB0cnVlICg8Y29kZT5sb2dpYz0mcXVvdDtvciZxdW90OzwvY29kZT4pLiBEZWZhdWx0OiA8 Y29kZT5vcjwvY29kZT48L2xpPgoJPC91bD4KCgk8cD4mIzgyMTY7QW5kJiM4MjE3OyBsb2dp YyBpcyBnb29kIGZvciBjaGVja2luZyBpZiB0aGUgY2VsbCBpcyBvZiBhIGNlcnRhaW4gdHlw ZSA8c3BhbiBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBpcyBsYXRlciB0aGFuIHRoZSAxNXRo IG9mIHRoZSBtb250aCwgZm9yIGV4YW1wbGUuPC9wPgoKCTxwPlJ1ZGltZW50YXJ5IGNvbXBh cmF0b3JzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSA8Y29kZT4oaXNvKXllYXI8L2NvZGU+LCA8 Y29kZT5tb250aDwvY29kZT4sIDxjb2RlPndlZWs8L2NvZGU+IGFuZCA8Y29kZT5kYXk8L2Nv ZGU+IGF0dHJpYnV0ZXMuIE5vcm1hbGx5IHRoZSB2YWx1ZSB5b3Ugc3VwcGx5IHdpbGwgYmUg dGVzdGVkIGZvciBhbiBleGFjdCBtYXRjaCBidXQgaWYgeW91IHByZWZpeCBpdCB3aXRoIG9u ZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhlbiB0aGUgYmVoYXZp b3VyIGNoYW5nZXM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Jmd0OzwvY29kZT4gdGVzdHMg aWYgYXR0cmlidXRlIGlzIDxlbT5ncmVhdGVyIHRoYW48L2VtPiB0aGUgZ2l2ZW4gdmFsdWUg KGUuZy4gPGNvZGU+eWVhcj0mcXVvdDsmZ3Q7MjAwOCZxdW90OzwvY29kZT4pPC9saT4KCQk8 bGk+PGNvZGU+Jmd0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+Z3JlYXRl ciB0aGFuIG9yIGVxdWFsIHRvPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPm1v bnRoPSZxdW90OyZndDs9NyZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PGNvZGU+Jmx0Ozwv Y29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5sZXNzIHRoYW48L2VtPiB0aGUgZ2l2 ZW4gdmFsdWUgKGUuZy4gPGNvZGU+ZGF5PSZxdW90OyZsdDsxNSZxdW90OzwvY29kZT4pPC9s aT4KCQk8bGk+PGNvZGU+Jmx0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+ bGVzcyB0aGFuIG9yIGVxdWFsIHRvPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2Rl Pm1vbnRoPSZxdW90OyZsdDs9NSZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PGNvZGU+ITwv Y29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5ub3Q8L2VtPiB0aGUgZ2l2ZW4gdmFs dWUgKGUuZy4gPGNvZGU+ZGF5PSZxdW90OyExNSZxdW90OzwvY29kZT4pPC9saT4KCTwvdWw+ CgoJPGgyIGlkPSJjYWxpbmZvIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8m Z3Q7PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm1zLCB1c2Ug dGhpcyB0YWcgdG8gb3V0cHV0IGNlcnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgZXZlbnQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2FsaW5mbyI+QXR0 cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dHlwZTwvc3Bh bj4gOiB0aGUgdHlwZShzKSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byByZXR1cm4sIGVh Y2ggc2VwYXJhdGVkIGJ5IGEgY29tbWEuIENob29zZSBmcm9tOiA8Y29kZT5mbGFnPC9jb2Rl PiwgPGNvZGU+Y2FsaWQ8L2NvZGU+LCA8Y29kZT4oaXNvKXllYXI8L2NvZGU+IC8gPGNvZGU+ bW9udGg8L2NvZGU+IC8gPGNvZGU+d2VlazwvY29kZT4gLyA8Y29kZT5kYXk8L2NvZGU+LCA8 Y29kZT5zPC9jb2RlPiAoY3VycmVudCBzZWN0aW9uKSAvIDxjb2RlPmNhdGVnb3J5PC9jb2Rl PiAvIDxjb2RlPmF1dGhvcjwvY29kZT4gKG9yIDxjb2RlPnJlYWxuYW1lPC9jb2RlPiksIDxj b2RlPmFydGljbGU8L2NvZGU+IChpZCBvZiB0aGUgY3VycmVudGx5IHZpZXdlZCBhcnRpY2xl KSwgb3IgYW55IG90aGVyIGFydGljbGUgdmFyaWFibGUgc3VjaCBhcyA8Y29kZT5zZWN0aW9u PC9jb2RlPiAodGhlIGN1cnJlbnQgYXJ0aWNsZSYjODIxNztzIHNlY3Rpb24pLCA8Y29kZT5h dXRob3JpZDwvY29kZT4sIDxjb2RlPmFydGljbGVfaW1hZ2U8L2NvZGU+LCBldGM8ZGl2IGNs YXNzPSJicmVhayI+SWYgdXNpbmcgdGhlIDxjb2RlPmh0bWw8L2NvZGU+IGF0dHJpYnV0ZSwg eW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIG5hbWUgeW91IHdhbnQgdGhlIHZhcmlh YmxlIHRvIGFwcGVhciBhcyBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g c3RyaW5nLiBUaGUgdmFyaWFibGVzIGFsbCB0YWtlIG9uIHNlbnNpYmxlIGRlZmF1bHRzIChl LmcuICYjODIxNjtzZWN0aW9uJiM4MjE3OyBiZWNvbWVzIDxjb2RlPj9zPSZsdDtzZWN0aW9u IG5hbWUmZ3Q7PC9jb2RlPiwgJiM4MjE2O2NhdGVnb3J5MSYjODIxNzsgYmVjb21lcyA8Y29k ZT4/Yz0mbHQ7Y2F0ZWdvcnkxIG5hbWUmZ3Q7PC9jb2RlPiwgZXRjKSBidXQgaWYsIHNheSwg eW91IHdhbnRlZCBjYXRlZ29yeTEgdG8gYmUga25vd24gYXMgPGNvZGU+dGhlX2NhdDwvY29k ZT4geW91IGNvdWxkIHdyaXRlIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIHR5cGU9JnF1 b3Q7Y2F0Z2Vvcnk6dGhlX2NhdCZxdW90OyBodG1sPSZxdW90OzEmcXVvdDsgLyZndDs8L2Nv ZGU+LiBZb3Ugd291bGQgdGhlbiBzZWUgPGNvZGU+P3RoZV9jYXQ9Jmx0O2NhdGVnb3J5MSBu YW1lJmd0OzwvY29kZT48L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+am9p bjwvc3Bhbj4gOiB0aGUgY2hhcmFjdGVycyB5b3Ugd2FudCB0byB1c2UgdG8gc2VwYXJhdGUg ZWFjaCBpdGVtIHlvdSBhc2tlZCBmb3IuIE5vdGUgaXQgaXMgdGhlIGNoYXJhY3RlcnMgPGVt PmJldHdlZW48L2VtPiBlYWNoIGl0ZW0gc28gdGhlIHZlcnkgZmlyc3QgZW50cnkgd2lsbCA8 c3Ryb25nPm5vdDwvc3Ryb25nPiBoYXZlIHRoZSA8Y29kZT5qb2luPC9jb2RlPiBpbiBmcm9u dCBvZiBpdCAoc2VlIDxjb2RlPmpvaW5fcHJlZml4PC9jb2RlPikuIERlZmF1bHQ6IGEgc3Bh Y2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+am9pbl9wcmVmaXg8L3NwYW4+IDog dGhlIHN0cmluZyB5b3Ugd2FudCB0byBwdXQgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IGl0ZW0g aW4gdGhlIHJldHVybmVkIGxpc3QuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIGF0dHJp YnV0ZSBpdCBkZWZhdWx0cyB0byA8Y29kZT5TTURfQVVUTzwvY29kZT4gd2hpY2ggdHJpZXMg dG8gYmUgY2xldmVyOgoJPHVsPgoJCTxsaT5pZiB1c2luZyA8Y29kZT50eXBlPSZxdW90O2Zs YWcmcXVvdDs8L2NvZGU+IHRoZSBqb2luX3ByZWZpeCBpcyBzZXQgdG8gdGhlIHNhbWUgYXMg PGNvZGU+am9pbjwvY29kZT4uIFRodXMgd2l0aCA8Y29kZT5qb2luPSZxdW90OyBjYWxfJnF1 b3Q7PC9jb2RlPiB5b3UgbWlnaHQgZ2V0IDxjb2RlPiBjYWxfbXVsdGkgY2FsX3RvZGF5IGNh bF9ob2xzPC9jb2RlPjwvbGk+CgkJPGxpPmlmIHVzaW5nIDxjb2RlPmh0bWw9JnF1b3Q7MSZx dW90OzwvY29kZT4gdGhlIGpvaW5fcHJlZml4IGlzIHNldCB0byBhIHF1ZXN0aW9uIG1hcmss IHRodXM6IDxjb2RlPnR5cGU9JnF1b3Q7bW9udGgseWVhcixjYXRlZ29yeSZxdW90OyBodG1s PSZxdW90OzEmcXVvdDs8L2NvZGU+IG1pZ2h0IHJlbmRlciA8Y29kZT4/bT0xMiZhbXA7eT0y MDA4JmFtcDtjPWdpZ3M8L2NvZGU+LCB3aGljaCBjYW4gYmUgcHV0IHN0cmFpZ2h0IG9uIHRo ZSBlbmQgb2YgYW4gYW5jaG9yPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmh0bWw8L3NwYW4+IDogSWYgc2V0IHRvIDxjb2RlPjE8L2NvZGU+LCByZXR1cm5z IG5vdCBvbmx5IHRoZSB2YWx1ZXMgeW91IHNwZWNpZmllZCBidXQgdGhlaXIgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUgbmFtZXMgYXMgd2VsbCwgZ2l2aW5nIHlv dSB0aGUgZW50aXJlIHN0cmluZyBhcyBhIHZhbGlkIHNldCBvZiA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBwYXJhbWV0ZXJzIHdoaWNoIGNhbiBiZSBhZGRlZCB0byBhbiBhbmNo b3IuIEl0IG92ZXJyaWRlcyB0aGUgPGNvZGU+am9pbjwvY29kZT4gYXR0cmlidXRlIGFuZCBz ZXRzIGl0IHRvIGFuIGFtcGVyc2FuZC4gRGVmYXVsdDogMC48ZGl2IGNsYXNzPSJicmVhayI+ VGhpcyBhdHRyaWJ1dGUgaXMgdXNlZnVsIGlmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBvd24g Y29udGVudCBpbnNpZGUgZWFjaCBjZWxsIHZpYSBhIDxjb2RlPmZvcm08L2NvZGU+IGFuZCB3 aXNoIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHNlYXJjaCBlbnZpcm9ubWVudC4gSWYgeW91 IGFsbG93IHBlb3BsZSB0byBmaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IG9yIGF1dGhvciB5 b3UgY2FuIHVzZSB0aGlzIHRvIHJldHVybiB0aGUgJiM4MjE2O2N1cnJlbnQmIzgyMTc7IHN0 YXRlIG9mIGNlcnRhaW4gdmFyaWFibGVzIHNvIHlvdSBjYW4gcGFzcyB0aGVtIHRvIHRoZSBu ZXh0IHBhZ2UgYW5kIG1haW50YWluIHN0YXRlPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmVzY2FwZTwvc3Bhbj4gOiBlc2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IGVudGl0aWVzIHN1Y2ggYXMgPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2RlPiZn dDs8L2NvZGU+IGFuZCA8Y29kZT4mYW1wOzwvY29kZT4gZm9yIHBhZ2UgdmFsaWRhdGlvbiBw dXJwb3Nlcy4gU2V0IHRvIDxjb2RlPmVzY2FwZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIHR1 cm4gaXQgb2ZmLiBEZWZhdWx0OiA8Y29kZT5odG1sPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxo MiBpZD0iY2FsY2xhc3MiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2NsYXNzIC8mZ3Q7 PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm1zLCB1c2UgdGhp cyB0YWcgdG8gYWRkIGEgbGlzdCBvZiBjbGFzc2VzIHRvIHRoZSBjdXJyZW50IGNlbGwvZXZl bnQuIFZlcnkgdXNlZnVsIGlmIGJ1aWxkaW5nIGNlbGxzIHlvdXJzZWxmIGJlY2F1c2UgaW5z aWRlIGEgPGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbDwvYT4gdGFnIHlvdSBjb3VsZCBh ZGQgcGFydGljdWxhciBjbGFzcyBuYW1lcyBiYXNlZCBvbiBzb21lIHZhbHVlIGluIGEgY2Vs bC48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxjbGFzcyI+QXR0cmlidXRl czwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmFtZTwvc3Bhbj4gOiBh IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzbmFtZXMgdG8gYWRkIHRvIHRoZSBjdXJy ZW50IGNlbGwvZXZlbnQuIFRoZXNlIGFyZSA8c3Ryb25nPm5vdDwvc3Ryb25nPiBzdWJqZWN0 IHRvIGFueSA8Y29kZT5jbGFzc3ByZWZpeGVzPC9jb2RlPiBzbyB3aWxsIGFsd2F5cyBhcHBl YXIgZXhhY3RseSBhcyB5b3Ugd3JpdGUgdGhlbTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY2Fs bm93Ij5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+PC9oMj4K Cgk8cD5SZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLCBmb3JtYXR0ZWQgaG93ZXZlciB5 b3UgcGxlYXNlLiBVc2VmdWwgZm9yIGV4dHJhY3RpbmcgcGFydHMgb2YgdGhlIGN1cnJlbnQg c3lzdGVtIHRpbWVzdGFtcCB0byBjb21wYXJlIHRoaW5ncyB2aWEgb3RoZXIgY29uZGl0aW9u YWwgcGx1Z2lucyBvciB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfaWZfY2FsJmd0OzwvY29kZT4g dGFnLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbG5vdyI+QXR0cmlidXRl czwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6 IHRoZSB3YXkgeW91IHdhbnQgdGhlIGRhdGUvdGltZSByZXByZXNlbnRlZC4gVXNlIGFueSB2 YWxpZCA8YSBocmVmPSJodHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8 L2E+IHN0cmluZy4gRGVmYXVsdHMgdG8gdGhlIGRhdGUgZm9ybWF0IHlvdSBzZXQgaW4gQmFz aWMgUHJlZnM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bm93PC9zcGFuPiA6IGlm IHlvdSBkb24mIzgyMTc7dCB3YW50IHRoZSB0aW1lIHRvIGJlLCB1bW0sICYjODIxNjtub3cm IzgyMTc7IHlvdSBjYW4gc3RhdGUgd2hhdCB0aW1lICYjODIxNjtub3cmIzgyMTc7IGlzISBV c2UgYW55IHN0YW5kYXJkIGRhdGUvdGltZSBmb3JtYXQuICBEZWZhdWx0OiB0aGUgdGltZSBh dCB3aGljaCB5b3UgY2FsbCB0aGUgdGFnLjxkaXYgY2xhc3M9ImJyZWFrIj5Zb3UgbWF5IGFs c28gdXNlIHRoZSBjb2RlcyA8Y29kZT4/ZGF5PC9jb2RlPiwgPGNvZGU+P21vbnRoPC9jb2Rl PiBvciA8Y29kZT4/eWVhcjwvY29kZT4gaW4geW91ciB0aW1lIHN0cmluZyB3aGljaCB3aWxs IGRvIG9uZSBvZiB0d28gdGhpbmdzOgoJPHVsPgoJCTxsaT5yZXBsYWNlIHRoZSBjb2RlcyB3 aXRoIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBwYXJhbWV0ZXJzIDxjb2Rl PmQ9PC9jb2RlPiwgPGNvZGU+bT08L2NvZGU+IG9yIDxjb2RlPnk9PC9jb2RlPiwgaWYgdGhl eSBhcmUgYmVpbmcgdXNlZDwvbGk+CgkJPGxpPnVzZSB0aGUgY3VycmVudCBkYXksIG1vbnRo IG9yIHllYXIgKGkuZS4gdGhlIHBhcnRzIG9mIHRvZGF5JiM4MjE3O3MgZGF0ZSk8YnIgLz4K PC9kaXY+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm9mZnNl dDwvc3Bhbj4gOiBhbiBvZmZzZXQgaW50byB0aGUgZnV0dXJlIHRoYXQgeW91IHdpc2ggdG8g YXBwbHkgdG8gPGNvZGU+bm93PC9jb2RlPi4gZS5nLiA8Y29kZT4yIG1vbnRoczwvY29kZT4u IFNlZSA8YSBocmVmPSIjZWc2Ij5FeGFtcGxlIDY8L2E+IGZvciBhIHByYWN0aWNhbCBhcHBs aWNhdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5nbXQ8L3NwYW4+IDogcmV0dXJuIGVpdGhlciBsb2NhbCB0aW1lICg8Y29kZT4wPC9jb2Rl PikgYWNjb3JkaW5nIHRvIHRoZSB0aW1lIHpvbmUgc2V0IGluIEJhc2ljIFByZWZzLCBvciA8 c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiB0aW1lICg8Y29kZT4xPC9jb2RlPikuIERl ZmF1bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFuZzwvc3Bhbj4gOiBh biA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiBsYW5ndWFnZSBjb2RlIHRoYXQgZm9y bWF0cyB0aW1lIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2Ug KG9yIGxvY2FsZSkgYXMgZGVmaW5lZCBieSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlh Lm9yZy93aWtpL0lTT182MzkiPjxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IDYzOTwv YT4uIERlZmF1bHQ6IHVuc2V0IChpLmUuIHVzZSB0aGUgdmFsdWUgYXMgc3RhdGVkIGluIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHByZWZzKTwvbGk+Cgk8L3VsPgoKCTxoMiBp ZD0iYXJ0ZXYiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCAvJmd0Ozwv Y29kZT48L2gyPgoKCTxwPldoZW4geW91IGNyZWF0ZSBldmVudHMsIHRoZXkgcmVhbGx5IG9u bHkgZXhpc3Qgb25jZSBhcyBhIHNpbmdsZSBhcnRpY2xlOyB0aGUgcmVwZXRpdGlvbiBpcyBh IHRyaWNrLiBUaHVzIHRoZSBidWlsdC1pbiBhcnRpY2xlIHRhZ3Mgb25seSBzaG93IHRoZSBz aW5nbGUsIHJlYWwgYXJ0aWNsZXMuPC9wPgoKCTxwPlRoaXMgdGFnICYjODIxMjsgc2ltaWxh ciBpbiBmdW5jdGlvbiB0byA8Y29kZT4mbHQ7dHhwOmFydGljbGVfY3VzdG9tIC8mZ3Q7PC9j b2RlPiAmIzgyMTI7IGFsbG93cyB5b3UgdG8gc2VlIHJlY3VycmluZyBhcnRpY2xlcyBhcyBp ZiB0aGV5IHdlcmUgJiM4MjE2O3JlYWwmIzgyMTc7IGFydGljbGVzIGluIHRoZSBkYXRhYmFz ZS4gSW5zaWRlIHRoZSB0YWcmIzgyMTc7cyA8Y29kZT5mb3JtPC9jb2RlPiBvciBjb250YWlu ZXIgeW91IGNhbiB1c2UgYWxsIGV4aXN0aW5nIGFydGljbGUgdGFncyB0byBkaXNwbGF5IGFu eSBpbmZvcm1hdGlvbiB5b3UgbGlrZSBhYm91dCBlYWNoICYjODIxNjt2aXJ0dWFsJiM4MjE3 OyBhcnRpY2xlLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2FydGV2Ij5BdHRy aWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGVwZmllbGQ8 L3NwYW4+IDogc2FtZSBhcyBzbWRfY2FsZW5kYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2tpcGZpZWxkPC9zcGFuPiA6IHNhbWUgYXMgc21kX2NhbGVuZGFyPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm9taXRmaWVsZDwvc3Bhbj4gOiBzYW1lIGFzIHNtZF9j YWxlbmRhcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHRyYWZpZWxkPC9zcGFu PiA6IHNhbWUgYXMgc21kX2NhbGVuZGFyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmRhdGVmaWVsZHM8L3NwYW4+IDogc2FtZSBhcyBzbWRfY2FsZW5kYXI8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+YWxsc3Bhbm5lZDwvc3Bhbj4gOiBub3JtYWxseSwgYW55IGV2 ZW50IHRoYXQgaGFzIGEgc3RhcnQgZGF0ZSBpbiB0aGUgcGFzdCB3aWxsIGJlIG9taXR0ZWQg ZnJvbSB0aGUgbGlzdC4gV2hlbiBkZWFsaW5nIHdpdGggc3Bhbm5lZCBldmVudHMsIHlvdSBt YXkgd2lzaCB0byBzaG93IHJlbWFpbmluZyBkYXlzIGluIGEgQnJvYWR3YXkgc2hvdyYjODIx NztzIHNjaGVkdWxlIGV2ZW4gdGhvdWdoIHRoZSBldmVudCBzdGFydGVkIHNvbWUgbW9udGhz IGFnby4gU2V0IDxjb2RlPmFsbHNwYW5uZWQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdG8gZG8g dGhpcy4gRGVmYXVsdDogMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9z cGFuPiA6IHRoZSB0eXBlcyBvZiBldmVudCB0byBkaXNwbGF5LiBEZWZhdWx0OiA8Y29kZT5z dGFuZGFyZCwgcmVjdXIsIG11bHRpPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zZWN0aW9uPC9zcGFuPiA6IHJlc3RyaWN0IHRoZSBldmVudHMgdG8gYSBsaXN0IG9m IHNlY3Rpb25zLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5jYXRlZ29yeTwvc3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgbGlzdCBvZiBj YXRlZ29yaWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5hdXRob3I8L3NwYW4+IDogcmVzdHJpY3QgdGhlIGV2ZW50cyB0byBhIGxpc3Qgb2YgYXV0 aG9yIGxvZ2luIG5hbWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5yZWFsbmFtZTwvc3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgbGlz dCBvZiBhdXRob3IgUmVhbCBOYW1lcyAobm90ZTogYWRkcyBvbmUgZXh0cmEgcXVlcnkpLiBE ZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4g OiByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgbGlzdCBvZiBhcnRpY2xlIElEcy4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdHVzPC9zcGFuPiA6 IHJlc3RyaWN0IHRoZSBldmVudHMgdG8gdGhpcyBsaXN0IG9mIGFydGljbGUgc3RhdHVzLiBE ZWZhdWx0OiA8Y29kZT5saXZlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5leHBpcmVkPC9zcGFuPiA6IGRlZmluaXRpdmVseSBoaWRlICgwKSBvciBzaG93ICgxKSBl eHBpcmVkIGV2ZW50cy4gTGVhdmUgYmxhbmsgdG8gdXNlIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBBZHZhbmNlZCBQcmVmZXJlbmNlICYjODIxNjtQdWJsaXNoIGV4cGly ZWQgYXJ0aWNsZXMmIzgyMTc7PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8 L3NwYW4+IDogb25seSBzaG93IGV2ZW50cyBpbiB0aGlzIHRpbWUgZnJhbWUuIENob29zZSBm cm9tIDxjb2RlPmFueTwvY29kZT4sIDxjb2RlPmZ1dHVyZTwvY29kZT4gb3IgPGNvZGU+cGFz dDwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPmFueTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+bW9udGg8L3NwYW4+IDogb25seSBzaG93IGV2ZW50cyB0aGF0IG9jY3Vy IGluIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tbW0uIERlZmF1 bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZyb208L3NwYW4+IDog b25seSBzaG93IGV2ZW50cyBmcm9tIHRoaXMgc3RhcnQgZGF0ZS4gQ2FuIGJlIGFueSB2YWxp ZCBkYXRlIGZvcm1hdC4gRGVmYXVsdDogdW5zZXQgKGkuZS4gYWxsIGRhdGVzKTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50bzwvc3Bhbj4gOiBvbmx5IHNob3cgZXZlbnRzIHVw IHRvIHRoaXMgZW5kIGRhdGUuIENhbiBiZSBhbnkgdmFsaWQgZGF0ZSBmb3JtYXQuIERlZmF1 bHQ6IHVuc2V0IChpLmUuIGFsbCBkYXRlcyk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c29ydDwvc3Bhbj4gOiBvcmRlciB0aGUgZXZlbnRzIGJ5IHRoaXMgY29sdW1uLiBUaGUg bW9zdCB1c2VmdWwgdmFsdWUgaXMgdGhlIGRlZmF1bHQ6IDxjb2RlPlBvc3RlZCBhc2M8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDogcGFzcyBl YWNoIG1hdGNoaW5nIGV2ZW50IHRvIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBmb3JtLiBEZWZhdWx0OiB1bnNldC4gTm90ZSB0aGF0IHVzaW5nIHRoZSBjb250 YWluZXIgb3ZlcnJpZGVzIHRoaXMgYXR0cmlidXRlLCBhbmQgaWYgeW91IHNwZWNpZnkgbmVp dGhlciBhIGZvcm0gbm9yIGNvbnRhaW5lciwgeW91IHdpbGwgc2VlIGEgbGlzdCBvZiBhcnRp Y2xlIHBvc3RlZCBkYXRlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYWdpbmc8 L3NwYW4+IDogdW5saWtlIGFydGljbGVfY3VzdG9tLCBldmVudHMgZnJvbSB0aGUgc21kX2Fy dGljbGVfZXZlbnQgdGFnIG1heSBiZSBwYWdlZCB1c2luZyA8Y29kZT4mbHQ7dHhwOm9sZGVy IC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpuZXdlciAvJmd0OzwvY29kZT4uIElm IHlvdSB3aXNoIHRvIHNob3cgYW4gZXZlbnQgbGlzdCBvbiB0aGUgc2FtZSBwYWdlIGFzIGEg c3RhbmRhcmQgYXJ0aWNsZSBsaXN0LCB0aGUgb2xkZXIvbmV3ZXIgdGFncyB3aWxsIG5hdmln YXRlIGJvdGggbGlzdHMgc2ltdWx0YW5lb3VzbHkgc28geW91IG1heSBuZWVkIHRvIHR1cm4g cGFnaW5nIG9uICgxKSBvciBvZmYgKDApLiBEZWZhdWx0OiAxPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPm9mZnNldDwvc3Bhbj4gOiBiZWdpbiBkaXNwbGF5aW5nIGV2ZW50cyBm cm9tIHRoaXMgcG9zaXRpb24sIGluc3RlYWQgb2YgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxp c3Qgb2YgZXZlbnRzLiBEZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmxpbWl0PC9zcGFuPiA6IG9ubHkgc2hvdyB0aGlzIG1hbnkgZXZlbnRzIG1heGltdW0gPHN0 cm9uZz5wZXIgcGFnZTwvc3Ryb25nPiwgaS5lLiB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0byBk aXNwbGF5LCB3aGV0aGVyIHRoZXkgY29tZSBmcm9tIG9uZSAmIzgyMTY7cmVhbCYjODIxNzsg YXJ0aWNsZSBvciBtYW55LiBEZWZhdWx0OiAxMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5ldmVudGxpbWl0PC9zcGFuPiA6IG9ubHkgc2hvdyB0aGlzIG1hbnkgZXZlbnRzIG1h eGltdW0sIDxzdHJvbmc+cGVyIGV2ZW50PC9zdHJvbmc+LiBTbyBpZiB5b3UgaGF2ZSBhIHdl ZWtseSByZXBlYXRlZCBldmVudCB0aGF0IGxhc3RzIGZvciBmb3VyIG1vbnRocyBhbmQgeW91 IHNldCA8Y29kZT5ldmVudGxpbWl0PSZxdW90OzYmcXVvdDs8L2NvZGU+IHlvdSB3aWxsIG9u bHkgc2VlIGEgbWF4aW11bSBvZiA2IGV2ZW50cyBmcm9tIGV2ZXJ5IGFydGljbGUgY29udGFp bmluZyByZXBldGl0aW9uLiBUaGUgcmFuZ2UgKHN0YXJ0IGFuZCBlbmQgZGF0ZSkgaXMgZGV0 ZXJtaW5lZCBieSBvdGhlciBwbHVnaW4gYXR0cmlidXRlcy4gRGVmYXVsdDogMTA8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cGFnZWJ5PC9zcGFuPiA6IGVzb3RlcmljIHBhZ2lu ZyBmZWF0dXJlLCBpZGVudGljYWwgdG8gPGNvZGU+Jmx0O3R4cDphcnRpY2xlIC8mZ3Q7PC9j b2RlPi4gRGVmYXVsdDogc2FtZSBhcyA8Y29kZT5saW1pdDwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+cGdvbmx5PC9zcGFuPiA6IHNldCB0byA8Y29kZT4xPC9jb2Rl PiB0byBwZXJmb3JtIHRoZSBwYWdpbmcgYWN0aW9uIHdpdGhvdXQgZGlzcGxheWluZyBhbnl0 aGluZy4gUHJvYmFibHkgdXNlbGVzcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgd2l0aG91 dCBicmFja2V0cyB0byB3cmFwIHRoZSBsaXN0IGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcg dG8gc2VwYXJhdGUgZWFjaCBpdGVtIHdpdGguIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBhcHBseSB0byB0aGUgd3JhcHRhZy4gRGVmYXVsdDog dW5zZXQ8L2xpPgoJPC91bD4KCgk8cD5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGlzIHRh ZyBleGVjdXRlcyBpbiAzLXBoYXNlczo8L3A+CgoJPG9sPgoJCTxsaT5QcmUtZmlsdGVyOiBh bGwgZXZlbnRzIHRoYXQgbWF0Y2ggPGNvZGU+dHlwZTwvY29kZT4sIDxjb2RlPmNhdGVnb3J5 PC9jb2RlPiwgPGNvZGU+c2VjdGlvbjwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29kZT4sIDxj b2RlPnN0YXR1czwvY29kZT4sIDxjb2RlPmlkPC9jb2RlPiwgYW5kIDxjb2RlPmV4cGlyZWQ8 L2NvZGU+IGFyZSBleHRyYWN0ZWQ8L2xpPgoJCTxsaT5UaW1lLWZpbHRlcjogYW55ICYjODIy MDt0aW1lLWJhc2VkJiM4MjIxOyBhdHRyaWJ1dGVzIGFyZSB0aGVuIGFwcGxpZWQgdG8gdGhl IGFib3ZlIGxpc3QuIEF0IHRoaXMgcG9pbnQsIGFueSA8Y29kZT5leHRyYWZpZWxkPC9jb2Rl PiwgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPiwgPGNvZGU+b21pdGZpZWxkPC9jb2RlPiwgb3Ig PGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBhcmUgY2FsY3VsYXRlZCB0byBmaW5kIHJlcGVhdGVk IGRhdGVzICh1cCB0byBhcyBtYW55IGFzIDxjb2RlPmV2ZW50bGltaXQ8L2NvZGU+IGFsbG93 cyBvciB0aGUgY2FsY3VsYXRpb24gZXhjZWVkcyB0aGUgZXZlbnQmIzgyMTc7cyBleHBpcnkg dGltZSkuIFRoZSBhdHRyaWJ1dGVzIDxjb2RlPnRpbWU8L2NvZGU+LCA8Y29kZT5tb250aDwv Y29kZT4sIDxjb2RlPmZyb208L2NvZGU+LCBhbmQgPGNvZGU+dG88L2NvZGU+IGFyZSB1c2Vk IHRvIHJlZmluZSB0aGUgZmlsdHJhdGlvbiBoZXJlPC9saT4KCQk8bGk+T3V0cHV0OiB3aGF0 ZXZlciB0aGUgcHJldmlvdXMgcGhhc2VzIGhhdmUgbGVmdCBiZWhpbmQgaXMgc3ViamVjdCB0 byBhbnkgPGNvZGU+cGFnaW5nPC9jb2RlPiwgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNv ZGU+bGltaXQ8L2NvZGU+IHlvdSBtYXkgaGF2ZSBzcGVjaWZpZWQsIHRoZW4gd3JhcHBlZCBh bmQgZGlzcGxheWVkPC9saT4KCTwvb2w+CgoJPGgyIGlkPSJkYXRlcyI+RGF0ZSBnb3RjaGFz PC9oMj4KCgk8cD5JZiB0aGVyZSB3YXMgb25lIGdsb2JhbCB0aW1lIHpvbmUgdGhlIHdvcmxk IHdvdWxkIGJlIHNpbXBsZXIuIFNhZGx5LCB3ZSBhbGwgbGl2ZSBpbiBkaWZmZXJlbnQgcGxh Y2VzIGFuZCB0aGUgSW50ZXJuZXQgQmVhdCBoYXNuJiM4MjE3O3QgcmVhbGx5IHRha2VuIG9m Zi4gRXZlbiBtb3JlIHNhZGx5LCBjZXJ0YWluIHBlb3BsZSBpbiBwb3dlciBkZWNyZWUgdGhh dCB0d2ljZSBhIHllYXIgc29tZSBjb3VudHJpZXMgbXVzdCBhbHRlciB0aGVpciBjbG9ja3Mg dG8gPGVtPlNhdmUgRGF5bGlnaHQ8L2VtPi48L3A+CgoJPHA+PHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gZG9lcyBpdHMgYmVzdCB0byBzaGllbGQgeW91IGZyb20gdGhpcyBtYXlo ZW0gYnkgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgeW91ciBsb2NhbGUsIHRpbWUgb2Zmc2V0 LCBhbmQgd2hlbiA8c3BhbiBjbGFzcz0iY2FwcyI+RFNUPC9zcGFuPiBhcHBsaWVzIGluIHlv dXIgdGltZSB6b25lIChub3QgZm9yZ2V0dGluZyB0aGUgdGltZSB6b25lIG9mIHlvdXIgc2Vy dmVyIGlmIGl0IGhhcHBlbnMgdG8gYmUgbm93aGVyZSBuZWFyIHlvdSkuIEFuZCB0aGVyZWlu IGxpZXMgdGhlIHJ1Yi48L3A+CgoJPHA+Rm9yIGEgY2FsZW5kYXIgc3lzdGVtLCB3aGVuIHlv dSBzYXkgYW4gZXZlbnQgaXMgZ29pbmcgdG8gb2NjdXIgYXQgOHBtIGluIHNpeCBtb250aHMm IzgyMTc7IHRpbWUsIHBlc2t5IERheWxpZ2h0IFNhdmluZ3MgbWF5IHRoZW4gYmUgaW4gZWZm ZWN0IGFuZCB5b3VyIGV2ZW50IHdpbGwgYXBwZWFyIGFuIGhvdXIgJiM4MjE2O29mZiYjODIx NzsgKGl0IG1heSBsb29rIHdyb25nIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UgYXMgd2VsbCBh cyBpbiB5b3VyIGNhbGVuZGFyLCBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmdzKS48L3A+CgoJ PHA+QWxzbywgaWYgeW91ciBzZXJ2ZXIgb3IgeW91ciBvZmZpY2UgaXMgcmVsb2NhdGVkIGFu ZCB5b3UgaGF2ZSB0byBhZGp1c3QgdGltZSB6b25lLCBhbGwgeW91ciBiZWF1dGlmdWxseSBj cmFmdGVkIGRhdGVzIHdpbGwgYmUgc2hpZnRlZC4gVGhleSYjODIxNztyZSBub3QgYWN0dWFs bHkgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2UgdW5sZXNzIHlvdSBlZGl0IGFuIGFydGljbGUg YW5kIHJlLXNhdmUgaXQsIGJ1dCB0aGV5IDxlbT5hcHBlYXI8L2VtPiB0byBoYXZlIHNoaWZ0 ZWQgYmVjYXVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpcyB0cnlpbmcgdG8g c2hpZWxkIHlvdSBmcm9tIHRpbWUgYnVyZWF1Y3JhY3kgaW4gYSB3b3JsZCBnb25lIG1hZC48 L3A+CgoJPHA+VW5mb3J0dW5hdGVseSB0aGVyZSBpcyBsaXR0bGUgd2UgY2FuIGRvIGFib3V0 IHRoaXMgYXQgdGhlIG1vbWVudCB1bnRpbCB0aGUgd2F5IGRhdGVzIGFyZSBoYW5kbGVkIGlu IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IChvciB0aGUgd29ybGQhKSBpcyBjaGFu Z2VkLiBCdXQgdGhlcmUgYXJlIHNvbWUgc2V0dGluZ3MgdGhhdCB5b3UgY2FuIHBsYXkgd2l0 aCB0byB0cnkgYW5kIG1ha2Ugc2Vuc2Ugb2YgaXQgYWxsLiBOYW1lbHkgdGhlIDxjb2RlPmdt dDwvY29kZT4gYXR0cmlidXRlIGluIGFueSBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiYjODIxNztzIGRhdGUtYmFzZWQgdGFncyBzdWNoIGFzIDxjb2RlPiZsdDt0eHA6cG9z dGVkIC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpleHBpcmVzIC8mZ3Q7PC9jb2Rl Pi4gT3IgdHJ5IHVzaW5nIHlvdXIgb3duIDxjb2RlPmRhdGVmaWVsZHM8L2NvZGU+LiBTb21l dGltZXMgZmlkZGxpbmcgd2l0aCB0aGF0IGFuZCB0aGUgdGltZSB6b25lL0RTVCBmbGFncyB3 aWxsIGhlbHAuIE90aGVyIHRpbWVzIHlvdSYjODIxNztsbCBnZXQgaW4gYSByaWdodCBvbGQg bWVzcy48L3A+CgoJPHA+SWYgYWxsIHRoYXQgZmFpbHMsIHRoZSBjb25kaXRpb25hbCB0YWcg bWF5IGJlIGFibGUgdG8gaGVscCB5b3UgY29tcGFyZSBkYXRlcyBhbmQgYXBwbHkgZGlmZmVy ZW50IGF0dHJpYnV0ZXMgZGVwZW5kaW5nIG9uIHRoZSBkYXkgb2YgdGhlIHllYXIuIEZhaWxp bmcgdGhhdCwganVzdCB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gYW5kIHJl ZnVzZSB0byBvYnNlcnZlIDxzcGFuIGNsYXNzPSJjYXBzIj5EU1Q8L3NwYW4+IDotKTwvcD4K Cgk8aDIgY2xhc3M9ImV4YW1wbGVzIj5FeGFtcGxlczwvaDI+CgoJPGgzIGlkPSJlZzEiPkV4 YW1wbGUgMTwvaDM+CgoJPHA+VGhlIGJlYXV0eSBvZiB0aGUgcGx1Z2luIGlzIHRoYXQgeW91 IGhhdmUgdGhlIGVudGlyZSBhcnNlbmFsIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBpZiB5b3UgY2hvb3NlIHRvIHVzZSBhIDxjb2Rl PmZvcm08L2NvZGU+LiBUaHVzIHlvdSBjYW4gc2V0IHRoZSBhcnRpY2xlJiM4MjE3O3Mgc3Rh cnQgYW5kIGVuZCBkYXRlcyB0byB0aGUgc2FtZSBkYXkgYW5kIHNldCB0aGUgc3RhcnQgYW5k IGVuZCB0aW1lcyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZXZlbnQu IFlvdSBjYW4gdGhlbiB1c2Ugc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpwb3N0ZWQgLyZndDs8 L2NvZGU+IG9yIDxjb2RlPiZsdDt0eHA6ZXhwaXJlcyAvJmd0OzwvY29kZT4gdGFncyB3aXRo IHZhcmlvdXMgPGNvZGU+Zm9ybWF0PC9jb2RlPiBzdHJpbmdzIHRvIHJlbmRlciB0aGUgZXZl bnQmIzgyMTc7cyBjcml0ZXJpYS48L3A+CgoJPHA+U2ltaWxhcmx5IHlvdSBjYW4gdXNlIGFu eSBvdGhlciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdzIHRvIHNob3cgYXMg bXVjaCBvciBhcyBsaXR0bGUgZGV0YWlsIGFzIHlvdSBsaWtlIGluIHRoZSBjYWxlbmRhciBj ZWxsLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0 eHA6c21kX2NhbGVuZGFyIHNlY3Rpb249JnF1b3Q7ZXZlbnRzJnF1b3Q7Jmd0OwombHQ7ZGl2 Jmd0OwogICBFdmVudDogJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7 Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDticiAvJmd0OyZsdDt0eHA6ZXhjZXJwdCAv Jmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUmcXVvdDsmZ3Q7 CiAgIFN0YXJ0OiAmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsgLyZn dDsKJmx0Oy9kaXYmZ3Q7CiZsdDtkaXYgY2xhc3M9JnF1b3Q7ZXZ0aW1lJnF1b3Q7Jmd0Owog ICBFbmQ6ICZsdDt0eHA6ZXhwaXJlcyBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsgLyZndDsK Jmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9jYWxlbmRhciZndDsKPC9jb2RlPjwvcHJlPgoK CTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI8L2gzPgoKCTxwPlVzaW5nIHRoZSBjb25kaXRpb25h bCB0YWcgeW91IGNhbiB0YWtlIGFjdGlvbiBpZiBjZXJ0YWluIGV2ZW50cyBjb250YWluIHBh cnRpY3VsYXIgZmxhZ3MuIFRoaXMgZXhhbXBsZSBhbHNvIHNob3cgYSBjb21wbGV0ZWx5IHVz ZWxlc3MgbWFubmVyIG9mIGVtcGxveWluZyA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfbm93IC8m Z3Q7PC9jb2RlPi48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2Nr Ij5UaW1lIGlzOiAmbHQ7dHhwOnNtZF9jYWxfbm93IGZvcm1hdD0mcXVvdDslVCZxdW90OyAv Jmd0OwombHQ7dHhwOnNtZF9jYWxlbmRhciBmb3JtPSZxdW90O2V2Zm9ybSZxdW90OwogICAg IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMyZxdW90OyBza2lwZmllbGQ9JnF1b3Q7Y3VzdG9t XzYmcXVvdDsKICAgICBzcGFuZm9ybT0mcXVvdDttdWx0aXMmcXVvdDsgLyZndDsKPC9jb2Rl PjwvcHJlPgoKCTxwPkluIGZvcm0gPGNvZGU+ZXZmb3JtPC9jb2RlPjo8L3A+Cgo8cHJlIGNs YXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9jYWwgZmxh Zz0mcXVvdDtyZWN1ciZxdW90OyZndDsKICAmbHQ7dHhwOnBlcm1saW5rJmd0OyhSRUNVUikm bHQ7L3R4cDpwZXJtbGluayZndDsKJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICZsdDt0eHA6cGVy bWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAm bHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aWZpcnN0JnF1b3Q7Jmd0OwogICAg ICAmbHQ7c3BhbiBjbGFzcz0mcXVvdDtyaWdodCZxdW90OyZndDsmYW1wO2xhcXVvOy0tJmx0 Oy9zcGFuJmd0OwogICAmbHQ7L3R4cDpzbWRfaWZfY2FsJmd0OwogICAmbHQ7dHhwOnNtZF9p Zl9jYWwgZmxhZz0mcXVvdDtyZWN1cmZpcnN0JnF1b3Q7Jmd0OwogICAgICAmbHQ7c3BhbiZn dDtPbmUgb2YgbWFueS4uLiZsdDsvc3BhbiZndDsKICAgJmx0Oy90eHA6c21kX2lmX2NhbCZn dDsKJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkFuZCBpbiBm b3JtIDxjb2RlPm11bHRpczwvY29kZT46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGksIG11 bHRpcHJldiZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDstLSZhbXA7cmFxdW87 LS0mbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKJmx0O3R4 cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGlsYXN0JnF1b3Q7Jmd0OwogICAmbHQ7dHhw OnBlcm1saW5rJmd0OwogICAgICAmbHQ7c3BhbiBjbGFzcz0mcXVvdDtsZWZ0JnF1b3Q7Jmd0 Oy0tJmFtcDtyYXF1bzsmbHQ7L3NwYW4mZ3Q7IEVORCAmbHQ7dHhwOnRpdGxlIC8mZ3Q7CiAg ICZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPHA+Tm90aWNlIHRoYXQgPGNvZGU+bXVsdGlmaXJzdDwvY29kZT4gaXMgdGVz dGVkIGluc2lkZSB0aGUgc2FtZSBmb3JtIGFzIHN0YW5kYXJkIGV2ZW50cy4gVGhpcyBpcyBi ZWNhdXNlIG9ubHkgPGVtPmNvbnRpbnVhdGlvbiBzcGFubmVkIGNlbGxzPC9lbT4gYXJlIHBh c3NlZCB0byB0aGUgPGNvZGU+c3BhbmZvcm08L2NvZGU+OyB0aGUgZmlyc3QgZXZlbnQgb2Yg YSBzcGFubmVkIGdyb3VwIGlzIGp1c3QgbGlrZSBhbnkgc3RhbmRhcmQgZXZlbnQuIFNpbWls YXJseSwgaWYgeW91IGhhZCBiZWVuIHVzaW5nIDxjb2RlPnJlY3VyZm9ybTwvY29kZT4gdGhl IGZpcnN0IGV2ZW50IG9mIHRoZSByZWN1cnJpbmcgc2V0IHdvdWxkIGJlIHByb2Nlc3NlZCBp biB0aGUgdXN1YWwgZm9ybS9jb250YWluZXIgYW5kIGV2ZXJ5IHN1YnNlcXVlbnQgZXZlbnQg d291bGQgYmUgcGFzc2VkIHRvIHRoZSBkZWRpY2F0ZWQgZm9ybS48L3A+CgoJPGgzIGlkPSJl ZzMiPkV4YW1wbGUgMzwvaDM+CgoJPHA+WW91IGNvdWxkIHVzZSB0aGUgY2FsZW5kYXIgdGFn cyB0byBvdXRwdXQgdmFyaW91cyBwaWVjZXMgb2YgZmxhZyBpbmZvcm1hdGlvbiB0byBidWls ZCB5b3VyIG93biBjbGFzcyBuYW1lcy4gVGhpcyBleGFtcGxlIGFsc28gZGVtb25zdHJhdGVz IHRoZSA8Y29kZT5odG1sPC9jb2RlPiBhdHRyaWJ1dGUgb2YgPGNvZGU+Jmx0O3R4cDpzbWRf Y2FsX2luZm8gLyZndDs8L2NvZGU+IHRvIGJ1aWxkIHVwIGEgcXVlcnkgc3RyaW5nIHRoYXQg aXMgcGFzc2VkIGFsb25nIHdpdGggYW4gZXZlbnQmIzgyMTc7cyA8Y29kZT5jYXRlZ29yeTE8 L2NvZGU+IHdoZW4gYSB2aXNpdG9yIGNsaWNrcyB0aGUgYW5jaG9yLjwvcD4KCgk8cD5UaGlz IGFsbG93cyB5b3VyIHNpdGUgdmlzaXRvcnMgdG8gZmlsdGVyIGV2ZW50cyBieSBjYXRlZ29y eSB3aGlsZSByZXRhaW5pbmcgdGhlIGFiaWxpdHkgdG8gc2hvdyB0aGUgY2FsZW5kYXIgZm9y IHRoZSBjdXJyZW50IG1vbnRoL3llYXIgYW5kIHNlY3Rpb24gdGhleSBhcmUgdmlld2luZyBp bnN0ZWFkIG9mIGRyb3BwaW5nIGJhY2sgdG8gdGhlIGN1cnJlbnQgbW9udGgveWVhciBsaWtl IG90aGVyIGNhbGVuZGFyIHN5c3RlbXMgb2Z0ZW4gZG8uPC9wPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgaXNvd2Vla3M9 JnF1b3Q7V0VFSyMmcXVvdDsKICAgICB5ZWFyd2lkdGg9JnF1b3Q7MCwyJnF1b3Q7IHNlbGVj dD0mcXVvdDt5ZWFyLCBtb250aCZxdW90OwogICAgIHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21f MSZxdW90OyBza2lwZmllbGQ9JnF1b3Q7Y3VzdG9tXzImcXVvdDsKICAgICBzaG93c2tpcHBl ZD0mcXVvdDsxJnF1b3Q7IGV4cGlyZWQ9JnF1b3Q7MSZxdW90OyZndDsKICAgJmx0O3NwYW4g Y2xhc3M9JnF1b3Q7Jmx0O3R4cDpzbWRfY2FsX2luZm8gam9pbj0mcXVvdDsgY2FsXyZxdW90 OyAvJmd0OyZxdW90OyZndDsKICAgICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRp dGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICAgICZsdDthIGhyZWY9JnF1b3Q7 P2M9Jmx0O3R4cDpjYXRlZ29yeTEKICAgICAgICAgLyZndDsmYW1wOyZsdDt0eHA6c21kX2Nh bF9pbmZvIHR5cGU9JnF1b3Q7cywgeWVhciwKICAgICAgICAgbW9udGgsIGNhbGlkJnF1b3Q7 IGh0bWw9JnF1b3Q7MSZxdW90OyBqb2luX3ByZWZpeD0mcXVvdDsmcXVvdDsKICAgICAgICAg LyZndDsmcXVvdDsmZ3Q7Jmx0O3R4cDpjYXRlZ29yeTEgdGl0bGU9JnF1b3Q7MSZxdW90OyAv Jmd0OyZsdDsvYSZndDsKICAgJmx0Oy9zcGFuJmd0OwombHQ7L3R4cDpzbWRfY2FsZW5kYXIm Z3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaGF0IGlzIGFsc28gdXNlZnVsIGFib3V0IHRoZSA8 Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT4gdGFnIGlzIHRoYXQgaWYg YSBwYXJ0aWN1bGFyIHZhbHVlIGlzIG5vdCBzZXQgaXQgd2lsbCA8ZW0+bm90PC9lbT4gYmUg aW5jbHVkZWQgaW4gdGhlIG91dHB1dC48L3A+CgoJPGgzIGlkPSJlZzQiPkV4YW1wbGUgNDwv aDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aDImZ3Q7 VXBjb21pbmcgRXZlbnRzJmx0Oy9oMiZndDsKJmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCBz dGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O2RsJnF1 b3Q7IHRpbWU9JnF1b3Q7ZnV0dXJlJnF1b3Q7IGV2ZW50bGltaXQ9JnF1b3Q7NSZxdW90OyZn dDsKICAgJmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICAgJmx0O2R0Jmd0OyZsdDt0eHA6 cG9zdGVkIGZvcm1hdD0mcXVvdDslQiAlWSZxdW90OyAvJmd0OyZsdDsvZHQmZ3Q7CiAgICZs dDsvdHhwOmlmX2RpZmZlcmVudCZndDsKICAgJmx0O2RkJmd0OwogICAgICAmbHQ7dHhwOnBl cm1saW5rJmd0OyZsdDt0eHA6dGl0bGUvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAg ICAmbHQ7dHhwOnBvc3RlZCAvJmd0OwogICAmbHQ7L2RkJmd0OwombHQ7L3R4cDpzbWRfYXJ0 aWNsZV9ldmVudCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgbGlzdHMgdGhlIG5leHQg NSB1cGNvbWluZyAmIzgyMTI7IHJlY3VycmluZyAmIzgyMTI7IGV2ZW50cywgcGx1cyBhbnkg c3RhbmRhcmQgYW5kIHNwYW5uZWQgZXZlbnRzLCBmb3JtYXR0aW5nIHRoZW0gYXMgYSBkZWZp bml0aW9uIGxpc3QuIElmIHlvdSBhZGQgcGFnaW5hdGlvbiB0YWdzIHlvdSBjYW4gZmxpcCB0 aHJvdWdoIGFsbCB0aGUgZXZlbnRzOyB0aGV5IHdpbGwgYmUgZGlzcGxheWVkIDEwIGF0IGEg dGltZSBvbiBlYWNoIHBhZ2UgKGlmIHlvdSB3YW50IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2gg cGFnZSB5b3UgYXJlIG9uIGFzIHlvdSBmbGlwIHRocm91Z2ggYSBjYWxlbmRhciB0aGF0IGlz IGluIGEgc2lkZWJhciwgYWRkIDxjb2RlPnBnPC9jb2RlPiB0byB0aGUgPGNvZGU+bWFpbnRh aW48L2NvZGU+IGF0dHJpYnV0ZSBpbiB5b3VyIGNhbGVuZGFyKS48L3A+CgoJPHA+Tm90ZSB0 aGUgaHlwZXJsaW5rZWQgdGl0bGUgc2hvd24gaGVyZSB3aWxsIGRpc3BsYXkgdGhlICYjODIx NjtyZWFsJiM4MjE3OyBhcnRpY2xlIHdoZW4gY2xpY2tlZC4gSWYgeW91IHdhbnRlZCB0byBh bGxvdyBwZW9wbGUgdG8gYm9vayBhbiBldmVudCBvbiB5b3VyIGluZGl2aWR1YWwgYXJ0aWNs ZSwgdHJ5IHRoaXM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+Jmx0O3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7CiAmbHQ7dHhwOmFydGljbGUg bGltaXQ9JnF1b3Q7MSZxdW90OyZndDsKICAmbHQ7aDMmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0 OyZsdDsvaDMmZ3Q7CiAgJmx0O3R4cDpib2R5IC8mZ3Q7CiAgJmx0O3AmZ3Q7UGxlYXNlIGNo b29zZSBhIGRhdGUgdG8gYm9vazombHQ7L3AmZ3Q7CiAgJmx0O3NlbGVjdCZndDsKICAmbHQ7 dHhwOnNtZF9hcnRpY2xlX2V2ZW50IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90Owog ICAgdHlwZT0mcXVvdDtyZWN1ciZxdW90OyBpZD0mIzM5OyZsdDt0eHA6YXJ0aWNsZV9pZCAv Jmd0OyYjMzk7Jmd0OwogICAgJmx0O29wdGlvbgogICAgIHZhbHVlPSYjMzk7Jmx0O3R4cDpw b3N0ZWQgZm9ybWF0PSZxdW90OyVHLSVtLSVkJnF1b3Q7LyZndDsmIzM5OyZndDsKICAgICAg Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVtICVkLCAkRyZxdW90OyAvJmd0OwogICAg Jmx0Oy9vcHRpb24mZ3Q7CiAgJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CiAgJmx0 Oy9zZWxlY3QmZ3Q7CiAmbHQ7L3R4cDphcnRpY2xlJmd0OwombHQ7L3R4cDppZl9pbmRpdmlk dWFsX2FydGljbGUmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaXRoIHNvbWUgY3VubmluZyB5 b3UgY291bGQgZXZlbiBhZGQgdGhlICYjODIxNjt2aXJ0dWFsJiM4MjE3OyBkYXRlIHRoYXQg dGhleSBjaG9zZSBpbiB5b3VyIG9yaWdpbmFsIGFydGljbGVfZXZlbnQgbGlzdCBhbmQgcGFz cyBpdCBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIHRvIHlv dXIgaW5kaXZpZHVhbCBhcnRpY2xlIHdoZXJlIHlvdSBjb3VsZCByZWFkIHRoZSB2YWx1ZSBh bmQgcHJlLXNlbGVjdCB0aGUgZGF0ZSBmb3IgdGhlIHZpc3Rvci48L3A+CgoJPGgzIGlkPSJl ZzUiPkV4YW1wbGUgNTwvaDM+CgoJPHA+SG93IGFib3V0IGJlaW5nIGFibGUgdG8gb3V0cHV0 IHlvdXIgZXZlbnRzIGluIGlDYWwgZm9ybWF0IHNvIG90aGVyIHBlb3BsZSBjYW4gc3luYyB0 aGVpciBjYWxlbmRhcnMgdG8geW91cnM/IFB1dCB0aGlzIGluIGEgbmV3IFBhZ2UgdGVtcGxh dGUgaW4gaXRzIG93biBTZWN0aW9uOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPkJFR0lOOlZDQUxFTkRBUgpWRVJTSU9OOjIuMApYLVdSLUNBTE5BTUU6 R2lncyBDYWxlbmRhcgpQUk9ESUQ6LS8vQXBwbGUgQ29tcHV0ZXIsIEluYy8vaUNhbCAxLjUv L0VOClgtV1ItVElNRVpPTkU6RXVyb3BlL0xvbmRvbgombHQ7dHhwOnNtZF9hcnRpY2xlX2V2 ZW50IGZvcm09JnF1b3Q7aWNzaXRlbSZxdW90OyB0aW1lPSZxdW90O2FueSZxdW90OwpzZWN0 aW9uPSZxdW90O2dpZ3MmcXVvdDsgbGltaXQ9JnF1b3Q7MTAwMCZxdW90OyZndDsKIEJFR0lO OlZFVkVOVAogRFRTVEFSVDombHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JVklbSVkVCVI JWklcyZxdW90OyAvJmd0OwogRFRFTkQ6Jmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDsl WSVtJWRUJUglaSVzJnF1b3Q7IC8mZ3Q7CiBTVU1NQVJZOiZsdDt0eHA6dGl0bGUgLyZndDsK IEVORDpWRVZFTlQKJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CkVORDpWQ0FMRU5E QVIKPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgd2lsbCBvdXRwdXQgYW4gaUNhbC1mb3JtYXR0 ZWQgZ2lnIGxpc3QgKHJlcGVhdGVkIG9yIG90aGVyd2lzZSkuIElmIHlvdSBnb3QgZnJlYWt5 IHdpdGggaXQgYW5kIGFkZGVkIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaW5zaWRlIHRoZSB0 ZW1wbGF0ZSB5b3UgY291bGQgZXZlbiByZWFkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHZhcmlhYmxlcyBhbmQgcGx1ZyB0aGVtIGluLiBUaHVzIHlvdSBjb3VsZCBsaW5r IHRvIGl0IGRpcmVjdGx5IG9mZiB0aGUgY2FsZW5kYXIgaXRzZWxmLCBwYXNzIGluIHRoZSBz ZWN0aW9uLCBjYXRlZ29yeSBvciBldmVudCBpbmZvIGFuZCBoYXZlIGEgY3VzdG9taXNlZCBp Q2FsIHN0cmVhbSBwdW1wZWQgb3V0IG9mIFRleHRwYXR0ZXJuLjwvcD4KCgk8cD5UaGFua3Mg dG8gd29vZiBmb3IgYnJpbmdpbmcgdGhlIG9yaWdpbmFsIDxhIGhyZWY9Imh0dHA6Ly9kZS1v bmxpbmUuY28udWsvMjAwNi8wNS8wNS90ZXh0cGF0dGVybi1hbmQtaWNhbCI+RGF2aWQgRW1l cnk8L2E+IGFydGljbGUgdG8gbXkgYXR0ZW50aW9uLjwvcD4KCgk8aDMgaWQ9ImVnNiI+RXhh bXBsZSA2PC9oMz4KCgk8cD5Vc2luZyB0aGUgPGNvZGU+bm93PC9jb2RlPiBhbmQgPGNvZGU+ b2Zmc2V0PC9jb2RlPiBhdHRyaWJ1dGVzIG9mIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cg LyZndDs8L2NvZGU+IHlvdSBjYW4gZWZmZWN0aXZlbHkgc2V0ICYjODIxNjtub3cmIzgyMTc7 IHRvIGJlIGFueSB0aW1lIHlvdSBsaWtlIGFuZCBtYWtlIGNhbGN1bGF0aW9ucyBiYXNlZCBv biBhIHBhcnRpY3VsYXIgZGF0ZS48L3A+CgoJPHA+UGx1Z2dpbmcgdGhlIDxjb2RlPj9tb250 aDwvY29kZT4gYW5kIDxjb2RlPj95ZWFyPC9jb2RlPiBjb2RlcyBpbiBhbGxvd3MgeW91IHRv IG1ha2UgPGNvZGU+Jmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCAvJmd0OzwvY29kZT4gdHJh Y2sgdGhlIGNhbGVuZGFyLiBTbyB5b3UgY2FuIGF1dG9tYXRpY2FsbHkgc2hvdyBvbmx5IHRo ZSBldmVudHMgdGhhdCBvY2N1ciBpbiB0aGUgbW9udGggdGhlIHZpc2l0b3IgaXMgYnJvd3Np bmcgdmlhIHRoZSBjYWxlbmRhcjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9jYWxlbmRhciBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9t XzEmcXVvdDsgLyZndDsKJmx0O2gyJmd0O0V2ZW50cyB0aGlzIG1vbnRoJmx0Oy9oMiZndDsK Jmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVv dDsKICAgICBmcm9tPSYjMzk7Jmx0O3R4cDpzbWRfY2FsX25vdyBub3c9JnF1b3Q7MDEtP21v bnRoLT95ZWFyJnF1b3Q7IC8mZ3Q7JiMzOTsKICAgICB0bz0mIzM5OyZsdDt0eHA6c21kX2Nh bF9ub3cgbm93PSZxdW90Oz9tb250aC0/eWVhciZxdW90OwogICAgICAgIG9mZnNldD0mcXVv dDsxIG1vbnRoJnF1b3Q7IC8mZ3Q7JiMzOTsgdGltZT0mcXVvdDthbnkmcXVvdDsgd3JhcHRh Zz0mcXVvdDt1bCZxdW90OyZndDsKJmx0O2xpJmd0OyZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0 O2ImZ3Q7Jmx0O3R4cDp0aXRsZS8mZ3Q7Jmx0Oy9iJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0 OyZsdDsvbGkmZ3Q7CiZsdDsvdHhwOnNtZF9hcnRpY2xlX2V2ZW50Jmd0Owo8L2NvZGU+PC9w cmU+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4K PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9 CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJD b3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZG RkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3Jk ZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5 OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hl bHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6ICMwMGM7IHRleHQtZGVj b3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmct Ym90dG9tOjFweDt9CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBj b2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHgg c29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6 ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0 LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNv bGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBH ZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMDc5OyBmb250 OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1h cmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0 aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4 dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdo dDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2Vl ZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkw JTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0 ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAw O30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAg LnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHgg NXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5 bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSAtLT4KIjtzOjM6Im1kNSI7czozMjoi ZjU4ZDc3YjFkOTVhMjczNTU3N2E0OTBlZDU4ODI5NWQiO30=