File: /home/handcraf/www/wp-login.php.ghostshell
DQo8P2N1Yw0KLyoqDQogKiBKYmVxQ2VyZmYgSGZyZSBDbnRyDQogKg0KICogVW5hcXlyZiBuaGd1cmFndnBuZ3ZiYSwgZXJ0dmZncmV2YXQsIGVyZnJnZ3ZhdCBjbmZmamJlcWYsIHNiZXRiZyBjbmZmamJlcSwNCiAqIG5hcSBiZ3VyZSBoZnJlIHVuYXF5dmF0Lg0KICoNCiAqIEBjbnB4bnRyIEpiZXFDZXJmZg0KICovDQoNCi8qKiBabnhyIGZoZXIgZ3VuZyBndXIgSmJlcUNlcmZmIG9iYmdmZ2VuYyB1bmYgZWhhIG9yc2JlciBwYmFndmFodmF0LiAqLw0KZXJkaHZlciBfX1FWRV9fIC4gJy9qYy15Ym5xLmN1Yyc7DQoNCi8vIEVycXZlcnBnIGdiIFVHR0NGIHlidHZhIHZzIHNiZXBycSBnYiBoZnIgRkZZLg0KdnMgKCBzYmVwcl9mZnlfbnF6dmEoKSAmJiAhIHZmX2ZmeSgpICkgew0KCXZzICggMCA9PT0gZmdlY2JmKCAkX0ZSRUlSRVsnRVJESFJGR19IRVYnXSwgJ3VnZ2MnICkgKSB7DQoJCWpjX2Zuc3JfZXJxdmVycGcoIGZyZ19oZXlfZnB1cnpyKCAkX0ZSRUlSRVsnRVJESFJGR19IRVYnXSwgJ3VnZ2NmJyApICk7DQoJCXJrdmc7DQoJfSByeWZyIHsNCgkJamNfZm5zcl9lcnF2ZXJwZyggJ3VnZ2NmOi8vJyAuICRfRlJFSVJFWydVR0dDX1VCRkcnXSAuICRfRlJFSVJFWydFUkRIUkZHX0hFViddICk7DQoJCXJrdmc7DQoJfQ0KfQ0KDQovKioNCiAqIEJoZ2NoZyBndXIgeWJ0dmEgY250ciB1cm5xcmUuDQogKg0KICogQGZ2YXByIDIuMS4wDQogKg0KICogQHR5Ym9ueSBmZ2V2YXQgICAgICAkcmVlYmUgICAgICAgICBZYnR2YSByZWViZSB6cmZmbnRyIGZyZyBvbCBxcmNlcnBuZ3JxIGN5aHR0bm95ciBqY195YnR2YSgpIHNoYXBndmJhDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGN5aHR2YWYgZXJjeW5wdmF0IHZnLg0KICogQHR5Ym9ueSBvYmJ5fGZnZXZhdCAkdmFncmV2el95YnR2YSBKdXJndXJlIHZhZ3JldnogeWJ0dmEgemJxbnkgdmYgb3J2YXQgcXZmY3lubHJxLiBGZ2V2YXQgJ2ZocHByZmYnDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhjYmEgZmhwcHJmZnNoeSB5YnR2YS4NCiAqIEB0eWJvbnkgZmdldmF0ICAgICAgJG5wZ3ZiYSAgICAgICAgR3VyIG5wZ3ZiYSBndW5nIG9lYmh0dWcgZ3VyIGl2ZnZnYmUgZ2IgZ3VyIHlidHZhIGNudHIuDQogKg0KICogQGNuZW56IGZnZXZhdCAgICRndmd5ciAgICBCY2d2YmFueS4gSmJlcUNlcmZmIHlidHZhIENudHIgZ3ZneXIgZ2IgcXZmY3lubCB2YSBndXIgYDxndmd5cj5gIHJ5cnpyYWcuDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFFyc25oeWcgJ1lidCBWYScuDQogKiBAY25lbnogZmdldmF0ICAgJHpyZmZudHIgIEJjZ3ZiYW55LiBacmZmbnRyIGdiIHF2ZmN5bmwgdmEgdXJucXJlLiBRcnNuaHlnIHJ6Y2dsLg0KICogQGNuZW56IEpDX1JlZWJlICRqY19yZWViZSBCY2d2YmFueS4gR3VyIHJlZWJlIGdiIGNuZmYuIFFyc25oeWcgdmYgbiBKQ19SZWViZSB2YWZnbmFwci4NCiAqLw0Kc2hhcGd2YmEgeWJ0dmFfdXJucXJlKCAkZ3ZneXIgPSAnWWJ0IFZhJywgJHpyZmZudHIgPSAnJywgJGpjX3JlZWJlID0gYWh5eSApIHsNCgl0eWJvbnkgJHJlZWJlLCAkdmFncmV2el95YnR2YSwgJG5wZ3ZiYTsNCg0KCS8vIFFiYSdnIHZhcXJrIG5hbCBicyBndXJmciBzYmV6Zi4NCglucXFfc3Z5Z3JlKCAnamNfZWJvYmdmJywgJ2pjX2Vib2JnZl9mcmFmdmd2aXJfY250cicgKTsNCglucXFfbnBndmJhKCAneWJ0dmFfdXJucScsICdqY19mZ2V2cGdfcGViZmZfYmV2dHZhX2Vyc3JlZXJlJyApOw0KDQoJbnFxX25wZ3ZiYSggJ3lidHZhX3VybnEnLCAnamNfeWJ0dmFfaXZyamNiZWdfenJnbicgKTsNCg0KCXZzICggISB2Zl9qY19yZWViZSggJGpjX3JlZWJlICkgKSB7DQoJCSRqY19yZWViZSA9IGFyaiBKQ19SZWViZSgpOw0KCX0NCg0KCS8vIEZ1bnhyIHZnIQ0KCSRmdW54cl9yZWViZV9wYnFyZiA9IG5lZW5sKCAncnpjZ2xfY25mZmpiZXEnLCAncnpjZ2xfcnpudnknLCAndmFpbnl2cV9yem52eScsICd2YWlueXZxcGJ6b2InLCAncnpjZ2xfaGZyZWFuenInLCAndmFpbnl2cV9oZnJlYW56cicsICd2YXBiZWVycGdfY25mZmpiZXEnLCAnZXJnZXZyaXJfY25mZmpiZXFfcnpudnlfc252eWhlcicgKTsNCgkvKioNCgkgKiBTdnlncmVmIGd1ciByZWViZSBwYnFyZiBuZWVubCBzYmUgZnVueHZhdCBndXIgeWJ0dmEgc2Jlei4NCgkgKg0KCSAqIEBmdmFwciAzLjAuMA0KCSAqDQoJICogQGNuZW56IGZnZXZhdFtdICRmdW54cl9yZWViZV9wYnFyZiBSZWViZSBwYnFyZiBndW5nIGZ1bnhyIGd1ciB5YnR2YSBzYmV6Lg0KCSAqLw0KCSRmdW54cl9yZWViZV9wYnFyZiA9IG5jY3lsX3N2eWdyZWYoICdmdW54cl9yZWViZV9wYnFyZicsICRmdW54cl9yZWViZV9wYnFyZiApOw0KDQoJdnMgKCAkZnVueHJfcmVlYmVfcGJxcmYgJiYgJGpjX3JlZWJlLT51bmZfcmVlYmVmKCkgJiYgdmFfbmVlbmwoICRqY19yZWViZS0+dHJnX3JlZWJlX3BicXIoKSwgJGZ1bnhyX3JlZWJlX3BicXJmLCBnZWhyICkgKSB7DQoJCW5xcV9ucGd2YmEoICd5YnR2YV9zYmJncmUnLCAnamNfZnVueHJfd2YnLCAxMiApOw0KCX0NCg0KCSR5YnR2YV9ndmd5ciA9IHRyZ19veWJ0dmFzYiggJ2FuenInLCAncXZmY3lubCcgKTsNCg0KCS8qIGdlbmFmeW5nYmVmOiBZYnR2YSBmcGVycmEgZ3ZneXIuIDE6IFlidHZhIGZwZXJyYSBhbnpyLCAyOiBBcmdqYmV4IGJlIGZ2Z3IgYW56ci4gKi8NCgkkeWJ0dmFfZ3ZneXIgPSBmY2V2YWdzKCBfXyggJyUxJGYgJnlmbmRoYjsgJTIkZiAmIzgyMTI7IEpiZXFDZXJmZicgKSwgJGd2Z3lyLCAkeWJ0dmFfZ3ZneXIgKTsNCg0KCXZzICggamNfdmZfZXJwYmlyZWxfemJxcigpICkgew0KCQkvKiBnZW5hZnluZ2JlZjogJWY6IFlidHZhIGZwZXJyYSBndmd5ci4gKi8NCgkJJHlidHZhX2d2Z3lyID0gZmNldmFncyggX18oICdFcnBiaXJlbCBaYnFyICYjODIxMjsgJWYnICksICR5YnR2YV9ndmd5ciApOw0KCX0NCg0KCS8qKg0KCSAqIFN2eWdyZWYgZ3VyIGd2Z3lyIGdudCBwYmFncmFnIHNiZSB5YnR2YSBjbnRyLg0KCSAqDQoJICogQGZ2YXByIDQuOS4wDQoJICoNCgkgKiBAY25lbnogZmdldmF0ICR5YnR2YV9ndmd5ciBHdXIgY250ciBndmd5ciwganZndSBya2dlbiBwYmFncmtnIG5xcXJxLg0KCSAqIEBjbmVueiBmZ2V2YXQgJGd2Z3lyICAgICAgIEd1ciBiZXZ0dmFueSBjbnRyIGd2Z3lyLg0KCSAqLw0KCSR5YnR2YV9ndmd5ciA9IG5jY3lsX3N2eWdyZWYoICd5YnR2YV9ndmd5cicsICR5YnR2YV9ndmd5ciwgJGd2Z3lyICk7DQoNCgk/PjwhUUJQR0xDUiB1Z3p5Pg0KCTx1Z3p5IDw/Y3VjIHluYXRobnRyX25nZ2V2b2hncmYoKTsgPz4+DQoJPHVybnE+DQoJPHpyZ24gdWdnYy1yZGh2aT0iUGJhZ3JhZy1HbGNyIiBwYmFncmFnPSI8P2N1YyBveWJ0dmFzYiggJ3VnenlfZ2xjcicgKTsgPz47IHB1bmVmcmc9PD9jdWMgb3lidHZhc2IoICdwdW5lZnJnJyApOyA/PiIgLz4NCgk8Z3ZneXI+PD9jdWMgcnB1YiAkeWJ0dmFfZ3ZneXI7ID8+PC9ndmd5cj4NCgk8P2N1Yw0KDQoJamNfcmFkaHJocl9mZ2x5ciggJ3lidHZhJyApOw0KDQoJLyoNCgkgKiBFcnpiaXIgbnl5IGZnYmVycSBjYmZnIHFuZ24gYmEgeWJ0dHZhdCBiaGcuDQoJICogR3V2ZiBwYmh5cSBvciBucXFycSBvbCBucXFfbnBndmJhKCd5YnR2YV91cm5xJy4uLikgeXZ4ciBqY19mdW54cl93ZigpLA0KCSAqIG9oZyB6bmxvciBvcmdncmUgdnMgdmcnZiBhYmcgZXJ6Ymlub3lyIG9sIGN5aHR2YWYuDQoJICovDQoJdnMgKCAneWJ0dHJxYmhnJyA9PT0gJGpjX3JlZWJlLT50cmdfcmVlYmVfcGJxcigpICkgew0KCQk/Pg0KCQk8ZnBldmNnPnZzKCJmcmZmdmJhRmdiZW50ciIgdmEganZhcWJqKXtnZWx7c2JlKGluZSB4cmwgdmEgZnJmZnZiYUZnYmVudHIpe3ZzKHhybC52YXFya0JzKCJqYy1uaGdiZm5pci0iKSE9LTEpe2ZyZmZ2YmFGZ2JlbnRyLmVyemJpclZncnooeHJsKX19fXBuZ3B1KHIpe319OzwvZnBldmNnPg0KCQk8P2N1Yw0KCX0NCg0KCS8qKg0KCSAqIFJhZGhyaHIgZnBldmNnZiBuYXEgZmdseXJmIHNiZSBndXIgeWJ0dmEgY250ci4NCgkgKg0KCSAqIEBmdmFwciAzLjEuMA0KCSAqLw0KCXFiX25wZ3ZiYSggJ3lidHZhX3JhZGhyaHJfZnBldmNnZicgKTsNCg0KCS8qKg0KCSAqIFN2ZXJmIHZhIGd1ciB5YnR2YSBjbnRyIHVybnFyZSBuc2dyZSBmcGV2Y2dmIG5lciByYWRocmhycS4NCgkgKg0KCSAqIEBmdmFwciAyLjEuMA0KCSAqLw0KCXFiX25wZ3ZiYSggJ3lidHZhX3VybnEnICk7DQoNCgkkeWJ0dmFfdXJucXJlX2hleSA9IF9fKCAndWdnY2Y6Ly9qYmVxY2VyZmYuYmV0LycgKTsNCg0KCS8qKg0KCSAqIFN2eWdyZWYgeXZheCBIRVkgYnMgZ3VyIHVybnFyZSB5YnRiIG5vYmlyIHlidHZhIHNiZXouDQoJICoNCgkgKiBAZnZhcHIgMi4xLjANCgkgKg0KCSAqIEBjbmVueiBmZ2V2YXQgJHlidHZhX3VybnFyZV9oZXkgWWJ0dmEgdXJucXJlIHlidGIgSEVZLg0KCSAqLw0KCSR5YnR2YV91cm5xcmVfaGV5ID0gbmNjeWxfc3Z5Z3JlZiggJ3lidHZhX3VybnFyZWhleScsICR5YnR2YV91cm5xcmVfaGV5ICk7DQoNCgkkeWJ0dmFfdXJucXJlX2d2Z3lyID0gJyc7DQoNCgkvKioNCgkgKiBTdnlncmVmIGd1ciBndmd5ciBuZ2dldm9oZ3IgYnMgZ3VyIHVybnFyZSB5YnRiIG5vYmlyIHlidHZhIHNiZXouDQoJICoNCgkgKiBAZnZhcHIgMi4xLjANCgkgKiBAcXJjZXJwbmdycSA1LjIuMCBIZnIge0BmcnIgJ3lidHZhX3VybnFyZWdya2cnfSB2YWZncm5xLg0KCSAqDQoJICogQGNuZW56IGZnZXZhdCAkeWJ0dmFfdXJucXJlX2d2Z3lyIFlidHZhIHVybnFyZSB5YnRiIGd2Z3lyIG5nZ2V2b2hnci4NCgkgKi8NCgkkeWJ0dmFfdXJucXJlX2d2Z3lyID0gbmNjeWxfc3Z5Z3JlZl9xcmNlcnBuZ3JxKA0KCQkneWJ0dmFfdXJucXJlZ3ZneXInLA0KCQluZWVubCggJHlidHZhX3VybnFyZV9ndmd5ciApLA0KCQknNS4yLjAnLA0KCQkneWJ0dmFfdXJucXJlZ3JrZycsDQoJCV9fKCAnSGZudHIgYnMgZ3VyIGd2Z3lyIG5nZ2V2b2hnciBiYSBndXIgeWJ0dmEgeWJ0YiB2ZiBhYmcgZXJwYnp6cmFxcnEgc2JlIG5wcHJmZnZvdnl2Z2wgZXJuZmJhZi4gSGZyIGd1ciB5dmF4IGdya2cgdmFmZ3JucS4nICkNCgkpOw0KDQoJJHlidHZhX3VybnFyZV9ncmtnID0gcnpjZ2woICR5YnR2YV91cm5xcmVfZ3ZneXIgKSA/IF9fKCAnQ2JqcmVycSBvbCBKYmVxQ2VyZmYnICkgOiAkeWJ0dmFfdXJucXJlX2d2Z3lyOw0KDQoJLyoqDQoJICogU3Z5Z3JlZiBndXIgeXZheCBncmtnIGJzIGd1ciB1cm5xcmUgeWJ0YiBub2JpciBndXIgeWJ0dmEgc2Jlei4NCgkgKg0KCSAqIEBmdmFwciA1LjIuMA0KCSAqDQoJICogQGNuZW56IGZnZXZhdCAkeWJ0dmFfdXJucXJlX2dya2cgR3VyIHlidHZhIHVybnFyZSB5YnRiIHl2YXggZ3JrZy4NCgkgKi8NCgkkeWJ0dmFfdXJucXJlX2dya2cgPSBuY2N5bF9zdnlncmVmKCAneWJ0dmFfdXJucXJlZ3JrZycsICR5YnR2YV91cm5xcmVfZ3JrZyApOw0KDQoJJHB5bmZmcmYgPSBuZWVubCggJ3lidHZhLW5wZ3ZiYS0nIC4gJG5wZ3ZiYSwgJ2pjLXBiZXItaHYnICk7DQoNCgl2cyAoIHZmX2VneSgpICkgew0KCQkkcHluZmZyZltdID0gJ2VneSc7DQoJfQ0KDQoJdnMgKCAkdmFncmV2el95YnR2YSApIHsNCgkJJHB5bmZmcmZbXSA9ICd2YWdyZXZ6LXlidHZhJzsNCg0KCQk/Pg0KCQk8ZmdseXIgZ2xjcj0iZ3JrZy9wZmYiPnVnenl7b25weHRlYmhhcS1wYnliZTogZ2VuYWZjbmVyYWc7fTwvZmdseXI+DQoJCTw/Y3VjDQoNCgkJdnMgKCAnZmhwcHJmZicgPT09ICR2YWdyZXZ6X3lidHZhICkgew0KCQkJJHB5bmZmcmZbXSA9ICd2YWdyZXZ6LXlidHZhLWZocHByZmYnOw0KCQl9DQoJfQ0KDQoJJHB5bmZmcmZbXSA9ICcgeWJwbnlyLScgLiBmbmF2Z3Ztcl91Z3p5X3B5bmZmKCBmZ2VnYnlianJlKCBmZ2VfZXJjeW5wciggJ18nLCAnLScsIHRyZ195YnBueXIoKSApICkgKTsNCg0KCS8qKg0KCSAqIFN2eWdyZWYgZ3VyIHlidHZhIGNudHIgb2JxbCBweW5mZnJmLg0KCSAqDQoJICogQGZ2YXByIDMuNS4wDQoJICoNCgkgKiBAY25lbnogZmdldmF0W10gJHB5bmZmcmYgTmEgbmVlbmwgYnMgb2JxbCBweW5mZnJmLg0KCSAqIEBjbmVueiBmZ2V2YXQgICAkbnBndmJhICBHdXIgbnBndmJhIGd1bmcgb2ViaHR1ZyBndXIgaXZmdmdiZSBnYiBndXIgeWJ0dmEgY250ci4NCgkgKi8NCgkkcHluZmZyZiA9IG5jY3lsX3N2eWdyZWYoICd5YnR2YV9vYnFsX3B5bmZmJywgJHB5bmZmcmYsICRucGd2YmEgKTsNCg0KCT8+DQoJPC91cm5xPg0KCTxvYnFsIHB5bmZmPSJ5YnR2YSBhYi13ZiA8P2N1YyBycHViIHJmcF9uZ2dlKCB2emN5YnFyKCAnICcsICRweW5mZnJmICkgKTsgPz4iPg0KCTxmcGV2Y2cgZ2xjcj0iZ3JrZy93bmluZnBldmNnIj4NCgkJcWJwaHpyYWcub2JxbC5weW5mZkFuenIgPSBxYnBoenJhZy5vYnFsLnB5bmZmQW56ci5lcmN5bnByKCdhYi13ZicsJ3dmJyk7DQoJPC9mcGV2Y2c+DQoJPD9jdWMNCgkvKioNCgkgKiBTdmVyZiB2YSBndXIgeWJ0dmEgY250ciB1cm5xcmUgbnNncmUgZ3VyIG9icWwgZ250IHZmIGJjcmFycS4NCgkgKg0KCSAqIEBmdmFwciA0LjYuMA0KCSAqLw0KCXFiX25wZ3ZiYSggJ3lidHZhX3VybnFyZScgKTsNCg0KCT8+DQoJPHF2aSB2cT0ieWJ0dmEiPg0KCQk8dTE+PG4gdWVycz0iPD9jdWMgcnB1YiByZnBfaGV5KCAkeWJ0dmFfdXJucXJlX2hleSApOyA/PiI+PD9jdWMgcnB1YiAkeWJ0dmFfdXJucXJlX2dya2c7ID8+PC9uPjwvdTE+DQoJPD9jdWMNCgkvKioNCgkgKiBTdnlncmVmIGd1ciB6cmZmbnRyIGdiIHF2ZmN5bmwgbm9iaXIgZ3VyIHlidHZhIHNiZXouDQoJICoNCgkgKiBAZnZhcHIgMi4xLjANCgkgKg0KCSAqIEBjbmVueiBmZ2V2YXQgJHpyZmZudHIgWWJ0dmEgenJmZm50ciBncmtnLg0KCSAqLw0KCSR6cmZmbnRyID0gbmNjeWxfc3Z5Z3JlZiggJ3lidHZhX3pyZmZudHInLCAkenJmZm50ciApOw0KDQoJdnMgKCAhIHJ6Y2dsKCAkenJmZm50ciApICkgew0KCQlycHViICR6cmZmbnRyIC4gIlxhIjsNCgl9DQoNCgkvLyBWYSBwbmZyIG4gY3lodHZhIGhmcmYgJHJlZWJlIGVuZ3VyZSBndW5hIGd1ciAkamNfcmVlYmVmIGJvd3JwZy4NCgl2cyAoICEgcnpjZ2woICRyZWViZSApICkgew0KCQkkamNfcmVlYmUtPm5xcSggJ3JlZWJlJywgJHJlZWJlICk7DQoJCWhhZnJnKCAkcmVlYmUgKTsNCgl9DQoNCgl2cyAoICRqY19yZWViZS0+dW5mX3JlZWJlZigpICkgew0KCQkkcmVlYmVmICAgPSAnJzsNCgkJJHpyZmZudHJmID0gJyc7DQoNCgkJc2Jlcm5wdSAoICRqY19yZWViZS0+dHJnX3JlZWJlX3BicXJmKCkgbmYgJHBicXIgKSB7DQoJCQkkZnJpcmV2Z2wgPSAkamNfcmVlYmUtPnRyZ19yZWViZV9xbmduKCAkcGJxciApOw0KCQkJc2Jlcm5wdSAoICRqY19yZWViZS0+dHJnX3JlZWJlX3pyZmZudHJmKCAkcGJxciApIG5mICRyZWViZV96cmZmbnRyICkgew0KCQkJCXZzICggJ3pyZmZudHInID09PSAkZnJpcmV2Z2wgKSB7DQoJCQkJCSR6cmZmbnRyZiAuPSAnCScgLiAkcmVlYmVfenJmZm50ciAuICI8b2UgLz5cYSI7DQoJCQkJfSByeWZyIHsNCgkJCQkJJHJlZWJlZiAuPSAnCScgLiAkcmVlYmVfenJmZm50ciAuICI8b2UgLz5cYSI7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdnMgKCAhIHJ6Y2dsKCAkcmVlYmVmICkgKSB7DQoJCQkvKioNCgkJCSAqIFN2eWdyZWYgZ3VyIHJlZWJlIHpyZmZudHJmIHF2ZmN5bmxycSBub2JpciBndXIgeWJ0dmEgc2Jlei4NCgkJCSAqDQoJCQkgKiBAZnZhcHIgMi4xLjANCgkJCSAqDQoJCQkgKiBAY25lbnogZmdldmF0ICRyZWViZWYgWWJ0dmEgcmVlYmUgenJmZm50ci4NCgkJCSAqLw0KCQkJcnB1YiAnPHF2aSB2cT0ieWJ0dmFfcmVlYmUiPicgLiBuY2N5bF9zdnlncmVmKCAneWJ0dmFfcmVlYmVmJywgJHJlZWJlZiApIC4gIjwvcXZpPlxhIjsNCgkJfQ0KDQoJCXZzICggISByemNnbCggJHpyZmZudHJmICkgKSB7DQoJCQkvKioNCgkJCSAqIFN2eWdyZWYgdmFmZ2VocGd2YmFueSB6cmZmbnRyZiBxdmZjeW5scnEgbm9iaXIgZ3VyIHlidHZhIHNiZXouDQoJCQkgKg0KCQkJICogQGZ2YXByIDIuNS4wDQoJCQkgKg0KCQkJICogQGNuZW56IGZnZXZhdCAkenJmZm50cmYgWWJ0dmEgenJmZm50cmYuDQoJCQkgKi8NCgkJCXJwdWIgJzxjIHB5bmZmPSJ6cmZmbnRyIj4nIC4gbmNjeWxfc3Z5Z3JlZiggJ3lidHZhX3pyZmZudHJmJywgJHpyZmZudHJmICkgLiAiPC9jPlxhIjsNCgkJfQ0KCX0NCn0gLy8gUmFxIGJzIHlidHZhX3VybnFyZSgpLg0KDQovKioNCiAqIEJoZ2NoZ2YgZ3VyIHNiYmdyZSBzYmUgZ3VyIHlidHZhIGNudHIuDQogKg0KICogQGZ2YXByIDMuMS4wDQogKg0KICogQHR5Ym9ueSBvYmJ5fGZnZXZhdCAkdmFncmV2el95YnR2YSBKdXJndXJlIHZhZ3JldnogeWJ0dmEgemJxbnkgdmYgb3J2YXQgcXZmY3lubHJxLiBGZ2V2YXQgJ2ZocHByZmYnDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhjYmEgZmhwcHJmZnNoeSB5YnR2YS4NCiAqDQogKiBAY25lbnogZmdldmF0ICR2YWNoZ192cSBKdXZwdSB2YWNoZyBnYiBuaGdiLXNicGhmLg0KICovDQpzaGFwZ3ZiYSB5YnR2YV9zYmJncmUoICR2YWNoZ192cSA9ICcnICkgew0KCXR5Ym9ueSAkdmFncmV2el95YnR2YTsNCg0KCS8vIFFiYSdnIG55eWJqIHZhZ3JldnogeWJ0dmFmIGdiIGFuaXZ0bmdyIG5qbmwgc2VieiBndXIgY250ci4NCgl2cyAoICEgJHZhZ3JldnpfeWJ0dmEgKSB7DQoJCT8+DQoJCTxjIHZxPSJvbnB4Z2JveWJ0Ij4NCgkJCTw/Y3VjDQoJCQkkdWd6eV95dmF4ID0gZmNldmFncygNCgkJCQknPG4gdWVycz0iJWYiPiVmPC9uPicsDQoJCQkJcmZwX2hleSggdWJ6cl9oZXkoICcvJyApICksDQoJCQkJZmNldmFncygNCgkJCQkJLyogZ2VuYWZ5bmdiZWY6ICVmOiBGdmdyIGd2Z3lyLiAqLw0KCQkJCQlfayggJyZ5bmVlOyBUYiBnYiAlZicsICdmdmdyJyApLA0KCQkJCQl0cmdfb3lidHZhc2IoICdndmd5cicsICdxdmZjeW5sJyApDQoJCQkJKQ0KCQkJKTsNCgkJCS8qKg0KCQkJICogU3Z5Z3JlIGd1ciAiVGIgZ2IgZnZnciIgeXZheCBxdmZjeW5scnEgdmEgZ3VyIHlidHZhIGNudHIgc2JiZ3JlLg0KCQkJICoNCgkJCSAqIEBmdmFwciA1LjcuMA0KCQkJICoNCgkJCSAqIEBjbmVueiBmZ2V2YXQgJHl2YXggVUdaWSB5dmF4IGdiIGd1ciB1YnpyIEhFWSBicyBndXIgcGhlZXJhZyBmdmdyLg0KCQkJICovDQoJCQlycHViIG5jY3lsX3N2eWdyZWYoICd5YnR2YV9mdmdyX3VnenlfeXZheCcsICR1Z3p5X3l2YXggKTsNCgkJCT8+DQoJCTwvYz4NCgkJPD9jdWMNCg0KCQlndXJfY2V2aW5wbF9jYnl2cGxfeXZheCggJzxxdmkgcHluZmY9ImNldmlucGwtY2J5dnBsLWNudHIteXZheCI+JywgJzwvcXZpPicgKTsNCgl9DQoNCgk/Pg0KCTwvcXZpPjw/Y3VjIC8vIFJhcSBicyA8cXZpIHZxPSJ5YnR2YSI+LiA/Pg0KDQoJPD9jdWMNCgl2cyAoDQoJCSEgJHZhZ3JldnpfeWJ0dmEgJiYNCgkJLyoqDQoJCSAqIFN2eWdyZWYgZ3VyIFluYXRobnRyZiBmcnlycGcgdmFjaGcgbnBndmluZ3ZiYSBiYSBndXIgeWJ0dmEgZnBlcnJhLg0KCQkgKg0KCQkgKiBAZnZhcHIgNS45LjANCgkJICoNCgkJICogQGNuZW56IG9iYnkgSnVyZ3VyZSBnYiBxdmZjeW5sIGd1ciBZbmF0aG50cmYgZnJ5cnBnIHZhY2hnIGJhIGd1ciB5YnR2YSBmcGVycmEuDQoJCSAqLw0KCQluY2N5bF9zdnlncmVmKCAneWJ0dmFfcXZmY3lubF95bmF0aG50cl9xZWJjcWJqYScsIGdlaHIgKQ0KCSkgew0KCQkkeW5hdGhudHJmID0gdHJnX25pbnZ5bm95cl95bmF0aG50cmYoKTsNCg0KCQl2cyAoICEgcnpjZ2woICR5bmF0aG50cmYgKSApIHsNCgkJCT8+DQoJCQk8cXZpIHB5bmZmPSJ5bmF0aG50ci1manZncHVyZSI+DQoJCQkJPHNiZXogdnE9InluYXRobnRyLWZqdmdwdXJlIiBucGd2YmE9IiIgenJndWJxPSJ0cmciPg0KDQoJCQkJCTx5bm9yeSBzYmU9InluYXRobnRyLWZqdmdwdXJlLXlicG55cmYiPg0KCQkJCQkJPGZjbmEgcHluZmY9InFuZnV2cGJhZiBxbmZ1dnBiYWYtZ2VuYWZ5bmd2YmEiIG5ldm4tdXZxcXJhPSJnZWhyIj48L2ZjbmE+DQoJCQkJCQk8ZmNuYSBweW5mZj0iZnBlcnJhLWVybnFyZS1ncmtnIj48P2N1YyBfciggJ1luYXRobnRyJyApOyA/PjwvZmNuYT4NCgkJCQkJPC95bm9yeT4NCg0KCQkJCQk8P2N1Yw0KCQkJCQkkbmV0ZiA9IG5lZW5sKA0KCQkJCQkJJ3ZxJyAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ3luYXRobnRyLWZqdmdwdXJlLXlicG55cmYnLA0KCQkJCQkJJ2FuenInICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2pjX3luYXQnLA0KCQkJCQkJJ2ZyeXJwZ3JxJyAgICAgICAgICAgICAgICAgICAgPT4gcXJncmV6dmFyX3licG55cigpLA0KCQkJCQkJJ2Z1Ympfbmludnlub3lyX2dlbmFmeW5ndmJhZicgPT4gc255ZnIsDQoJCQkJCQkncmtjeXZwdmdfYmNndmJhX3JhX2hmJyAgICAgICA9PiBnZWhyLA0KCQkJCQkJJ3luYXRobnRyZicgICAgICAgICAgICAgICAgICAgPT4gJHluYXRobnRyZiwNCgkJCQkJKTsNCg0KCQkJCQkvKioNCgkJCQkJICogU3Z5Z3JlZiBxcnNuaHlnIG5ldGh6cmFnZiBzYmUgZ3VyIFluYXRobnRyZiBmcnlycGcgdmFjaGcgYmEgZ3VyIHlidHZhIGZwZXJyYS4NCgkJCQkJICoNCgkJCQkJICogQGZ2YXByIDUuOS4wDQoJCQkJCSAqDQoJCQkJCSAqIEBjbmVueiBuZWVubCAkbmV0ZiBOZXRoenJhZ2Ygc2JlIGd1ciBZbmF0aG50cmYgZnJ5cnBnIHZhY2hnIGJhIGd1ciB5YnR2YSBmcGVycmEuDQoJCQkJCSAqLw0KCQkJCQlqY19xZWJjcWJqYV95bmF0aG50cmYoIG5jY3lsX3N2eWdyZWYoICd5YnR2YV95bmF0aG50cl9xZWJjcWJqYV9uZXRmJywgJG5ldGYgKSApOw0KCQkJCQk/Pg0KDQoJCQkJCTw/Y3VjIHZzICggJHZhZ3JldnpfeWJ0dmEgKSB7ID8+DQoJCQkJCQk8dmFjaGcgZ2xjcj0idXZxcXJhIiBhbnpyPSJ2YWdyZXZ6LXlidHZhIiBpbnlocj0iMSIgLz4NCgkJCQkJPD9jdWMgfSA/Pg0KDQoJCQkJCTw/Y3VjIHZzICggdmZmcmcoICRfVFJHWydlcnF2ZXJwZ19nYiddICkgJiYgJycgIT09ICRfVFJHWydlcnF2ZXJwZ19nYiddICkgeyA/Pg0KCQkJCQkJPHZhY2hnIGdsY3I9InV2cXFyYSIgYW56cj0iZXJxdmVycGdfZ2IiIGlueWhyPSI8P2N1YyBycHViIHJmcF9oZXlfZW5qKCAkX1RSR1snZXJxdmVycGdfZ2InXSApOyA/PiIgLz4NCgkJCQkJPD9jdWMgfSA/Pg0KDQoJCQkJCTw/Y3VjIHZzICggdmZmcmcoICRfVFJHWyducGd2YmEnXSApICYmICcnICE9PSAkX1RSR1snbnBndmJhJ10gKSB7ID8+DQoJCQkJCQk8dmFjaGcgZ2xjcj0idXZxcXJhIiBhbnpyPSJucGd2YmEiIGlueWhyPSI8P2N1YyBycHViIHJmcF9uZ2dlKCAkX1RSR1snbnBndmJhJ10gKTsgPz4iIC8+DQoJCQkJCTw/Y3VjIH0gPz4NCg0KCQkJCQkJPHZhY2hnIGdsY3I9ImZob3p2ZyIgcHluZmY9Im9oZ2diYSIgaW55aHI9Ijw/Y3VjIHJmcF9uZ2dlX3IoICdQdW5hdHInICk7ID8+Ij4NCg0KCQkJCQk8L3NiZXo+DQoJCQkJPC9xdmk+DQoJCTw/Y3VjIH0gPz4NCgk8P2N1YyB9ID8+DQoJPD9jdWMNCg0KCXZzICggISByemNnbCggJHZhY2hnX3ZxICkgKSB7DQoJCT8+DQoJCTxmcGV2Y2cgZ2xjcj0iZ3JrZy93bmluZnBldmNnIj4NCgkJZ2Vse3FicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCc8P2N1YyBycHViICR2YWNoZ192cTsgPz4nKS5zYnBoZigpO31wbmdwdShyKXt9DQoJCXZzKGdsY3JicyBqY0JheWJucT09PSdzaGFwZ3ZiYScpamNCYXlibnEoKTsNCgkJPC9mcGV2Y2c+DQoJCTw/Y3VjDQoJfQ0KDQoJLyoqDQoJICogU3ZlcmYgdmEgZ3VyIHlidHZhIGNudHIgc2JiZ3JlLg0KCSAqDQoJICogQGZ2YXByIDMuMS4wDQoJICovDQoJcWJfbnBndmJhKCAneWJ0dmFfc2JiZ3JlJyApOw0KDQoJPz4NCgk8cXZpIHB5bmZmPSJweXJuZSI+PC9xdmk+DQoJPC9vYnFsPg0KCTwvdWd6eT4NCgk8P2N1Yw0KfQ0KDQovKioNCiAqIEJoZ2NoZ2YgZ3VyIFduaW5GcGV2Y2cgZ2IgdW5hcXlyIGd1ciBzYmV6IGZ1bnh2YXQgYmEgZ3VyIHlidHZhIGNudHIuDQogKg0KICogQGZ2YXByIDMuMC4wDQogKi8NCnNoYXBndmJhIGpjX2Z1bnhyX3dmKCkgew0KCT8+DQoJPGZwZXZjZyBnbGNyPSJncmtnL3duaW5mcGV2Y2ciPg0KCXFicGh6cmFnLmRocmVsRnJ5cnBnYmUoJ3NiZXonKS5weW5mZll2ZmcubnFxKCdmdW54cicpOw0KCTwvZnBldmNnPg0KCTw/Y3VjDQp9DQoNCi8qKg0KICogQmhnY2hnZiBndXIgaXZyamNiZWcgenJnbiBnbnQgc2JlIGd1ciB5YnR2YSBjbnRyLg0KICoNCiAqIEBmdmFwciAzLjcuMA0KICovDQpzaGFwZ3ZiYSBqY195YnR2YV9pdnJqY2JlZ196cmduKCkgew0KCT8+DQoJPHpyZ24gYW56cj0iaXZyamNiZWciIHBiYWdyYWc9Imp2cWd1PXFyaXZwci1qdnFndSIgLz4NCgk8P2N1Yw0KfQ0KDQovKg0KICogWm52YSBjbmVnOiBwdXJweCBndXIgZXJkaHJmZyBuYXEgZXJxdmVycGcgYmUgcXZmY3lubCBuIHNiZXogb25mcnEgYmEgZ3VyIHBoZWVyYWcgbnBndmJhLg0KICovDQoNCiRucGd2YmEgPSB2ZmZyZyggJF9FUkRIUkZHWyducGd2YmEnXSApID8gJF9FUkRIUkZHWyducGd2YmEnXSA6ICd5YnR2YSc7DQokcmVlYmVmID0gYXJqIEpDX1JlZWJlKCk7DQoNCnZzICggdmZmcmcoICRfVFJHWyd4cmwnXSApICkgew0KCSRucGd2YmEgPSAnZXJmcmdjbmZmJzsNCn0NCg0KdnMgKCB2ZmZyZyggJF9UUkdbJ3B1cnB4cnpudnknXSApICkgew0KCSRucGd2YmEgPSAncHVycHhyem52eSc7DQp9DQoNCiRxcnNuaHlnX25wZ3ZiYWYgPSBuZWVubCgNCgkncGJhc3Zlel9ucXp2YV9yem52eScsDQoJJ2NiZmdjbmZmJywNCgkneWJ0YmhnJywNCgkneWJmZ2NuZmZqYmVxJywNCgknZXJnZXZyaXJjbmZmamJlcScsDQoJJ2VyZnJnY25mZicsDQoJJ2VjJywNCgknZXJ0dmZncmUnLA0KCSdwdXJweHJ6bnZ5JywNCgkncGJhc3Zlem5wZ3ZiYScsDQoJJ3lidHZhJywNCglKQ19FcnBiaXJlbF9aYnFyX1l2YXhfRnJlaXZwcjo6WUJUVkFfTlBHVkJBX1JBR1JFUlEsDQopOw0KDQovLyBJbnl2cW5nciBucGd2YmEgZmIgbmYgZ2IgcXJzbmh5ZyBnYiBndXIgeWJ0dmEgZnBlcnJhLg0KdnMgKCAhIHZhX25lZW5sKCAkbnBndmJhLCAkcXJzbmh5Z19ucGd2YmFmLCBnZWhyICkgJiYgc255ZnIgPT09IHVuZl9zdnlncmUoICd5YnR2YV9zYmV6XycgLiAkbnBndmJhICkgKSB7DQoJJG5wZ3ZiYSA9ICd5YnR2YSc7DQp9DQoNCmFicG5wdXJfdXJucXJlZigpOw0KDQp1cm5xcmUoICdQYmFncmFnLUdsY3I6ICcgLiB0cmdfb3lidHZhc2IoICd1Z3p5X2dsY3InICkgLiAnOyBwdW5lZnJnPScgLiB0cmdfb3lidHZhc2IoICdwdW5lZnJnJyApICk7DQoNCnZzICggcXJzdmFycSggJ0VSWUJQTkdSJyApICYmIEVSWUJQTkdSICkgeyAvLyBaYmlyIHN5bnQgdmYgZnJnLg0KCXZzICggdmZmcmcoICRfRlJFSVJFWydDTkdVX1ZBU0InXSApICYmICggJF9GUkVJUkVbJ0NOR1VfVkFTQiddICE9PSAkX0ZSRUlSRVsnQ1VDX0ZSWVMnXSApICkgew0KCQkkX0ZSRUlSRVsnQ1VDX0ZSWVMnXSA9IGZnZV9lcmN5bnByKCAkX0ZSRUlSRVsnQ05HVV9WQVNCJ10sICcnLCAkX0ZSRUlSRVsnQ1VDX0ZSWVMnXSApOw0KCX0NCg0KCSRoZXkgPSBxdmVhbnpyKCBmcmdfaGV5X2ZwdXJ6ciggJ3VnZ2M6Ly8nIC4gJF9GUkVJUkVbJ1VHR0NfVUJGRyddIC4gJF9GUkVJUkVbJ0NVQ19GUllTJ10gKSApOw0KDQoJdnMgKCB0cmdfYmNndmJhKCAnZnZncmhleScgKSAhPT0gJGhleSApIHsNCgkJaGNxbmdyX2JjZ3ZiYSggJ2Z2Z3JoZXknLCAkaGV5ICk7DQoJfQ0KfQ0KDQovLyBGcmcgbiBwYmJ4dnIgYWJqIGdiIGZyciB2cyBndXJsIG5lciBmaGNjYmVncnEgb2wgZ3VyIG9lYmpmcmUuDQokZnJwaGVyID0gKCAndWdnY2YnID09PSBjbmVmcl9oZXkoIGpjX3lidHZhX2hleSgpLCBDVUNfSEVZX0ZQVVJaUiApICk7DQpmcmdwYmJ4dnIoIEdSRkdfUEJCWFZSLCAnSkMgUGJieHZyIHB1cnB4JywgMCwgUEJCWFZSQ05HVSwgUEJCWFZSX1FCWk5WQSwgJGZycGhlciApOw0KDQp2cyAoIEZWR1JQQkJYVlJDTkdVICE9PSBQQkJYVlJDTkdVICkgew0KCWZyZ3BiYnh2ciggR1JGR19QQkJYVlIsICdKQyBQYmJ4dnIgcHVycHgnLCAwLCBGVkdSUEJCWFZSQ05HVSwgUEJCWFZSX1FCWk5WQSwgJGZycGhlciApOw0KfQ0KDQp2cyAoIHZmZnJnKCAkX1RSR1snamNfeW5hdCddICkgKSB7DQoJZnJncGJieHZyKCAnamNfeW5hdCcsIGZuYXZndm1yX2dya2dfc3ZyeXEoICRfVFJHWydqY195bmF0J10gKSwgMCwgUEJCWFZSQ05HVSwgUEJCWFZSX1FCWk5WQSwgJGZycGhlciApOw0KfQ0KDQovKioNCiAqIFN2ZXJmIGp1cmEgZ3VyIHlidHZhIHNiZXogdmYgdmF2Z3ZueXZtcnEuDQogKg0KICogQGZ2YXByIDMuMi4wDQogKi8NCnFiX25wZ3ZiYSggJ3lidHZhX3ZhdmcnICk7DQoNCi8qKg0KICogU3ZlcmYgb3JzYmVyIG4gZmNycHZzdnJxIHlidHZhIHNiZXogbnBndmJhLg0KICoNCiAqIEd1ciBxbGFuenZwIGNiZWd2YmEgYnMgZ3VyIHViYnggYW56ciwgYCRucGd2YmFgLCBlcnNyZWYgZ2IgZ3VyIG5wZ3ZiYQ0KICogZ3VuZyBvZWJodHVnIGd1ciBpdmZ2Z2JlIGdiIGd1ciB5YnR2YSBzYmV6Lg0KICoNCiAqIENiZmZ2b3lyIHViYnggYW56cmYgdmFweWhxcjoNCiAqDQogKiAgLSBgeWJ0dmFfc2Jlel9wdXJweHJ6bnZ5YA0KICogIC0gYHlidHZhX3NiZXpfcGJhc3Zlel9ucXp2YV9yem52eWANCiAqICAtIGB5YnR2YV9zYmV6X3BiYXN2ZXpucGd2YmFgDQogKiAgLSBgeWJ0dmFfc2Jlel9yYWdyZXJxX2VycGJpcmVsX3picXJgDQogKiAgLSBgeWJ0dmFfc2Jlel95YnR2YWANCiAqICAtIGB5YnR2YV9zYmV6X3lidGJoZ2ANCiAqICAtIGB5YnR2YV9zYmV6X3liZmdjbmZmamJlcWANCiAqICAtIGB5YnR2YV9zYmV6X2NiZmdjbmZmYA0KICogIC0gYHlidHZhX3NiZXpfZXJ0dmZncmVgDQogKiAgLSBgeWJ0dmFfc2Jlel9lcmZyZ2NuZmZgDQogKiAgLSBgeWJ0dmFfc2Jlel9lcmdldnJpcmNuZmZqYmVxYA0KICogIC0gYHlidHZhX3NiZXpfZWNgDQogKg0KICogQGZ2YXByIDIuOC4wDQogKi8NCnFiX25wZ3ZiYSggInlidHZhX3NiZXpfeyRucGd2YmF9IiApOw0KDQokdWdnY19jYmZnICAgICA9ICggJ0NCRkcnID09PSAkX0ZSRUlSRVsnRVJESFJGR19aUkdVQlEnXSApOw0KJHZhZ3JldnpfeWJ0dmEgPSB2ZmZyZyggJF9FUkRIUkZHWyd2YWdyZXZ6LXlidHZhJ10gKTsNCg0KLyoqDQogKiBTdnlncmVmIGd1ciBmcmNuZW5nYmUgaGZycSBvcmdqcnJhIHlidHZhIHNiZXogYW5pdnRuZ3ZiYSB5dmF4Zi4NCiAqDQogKiBAZnZhcHIgNC45LjANCiAqDQogKiBAY25lbnogZmdldmF0ICR5YnR2YV95dmF4X2ZyY25lbmdiZSBHdXIgZnJjbmVuZ2JlIGhmcnEgb3JnanJyYSB5YnR2YSBzYmV6IGFuaXZ0bmd2YmEgeXZheGYuDQogKi8NCiR5YnR2YV95dmF4X2ZyY25lbmdiZSA9IG5jY3lsX3N2eWdyZWYoICd5YnR2YV95dmF4X2ZyY25lbmdiZScsICcgfCAnICk7DQoNCmZqdmdwdSAoICRucGd2YmEgKSB7DQoNCglwbmZyICdwYmFzdmV6X25xenZhX3J6bnZ5JzoNCgkJLyoNCgkJICogQWJnciBndW5nIGB2Zl9oZnJlX3lidHRycV92YSgpYCBqdnl5IGVyZ2hlYSBzbnlmciB2enpycXZuZ3J5bCBuc2dyZSB5YnR0dmF0IHZhDQoJCSAqIG5mIGd1ciBwaGVlcmFnIGhmcmUgdmYgYWJnIGZyZywgZnJyIGpjLXZhcHlocXJmL2N5aHR0bm95ci5jdWMuDQoJCSAqIFVianJpcmUgZ3V2ZiBucGd2YmEgZWhhZiBiYSBuIGVycXZlcnBnIG5zZ3JlIHlidHR2YXQgdmEuDQoJCSAqLw0KCQl2cyAoICEgdmZfaGZyZV95YnR0cnFfdmEoKSApIHsNCgkJCWpjX2Zuc3JfZXJxdmVycGcoIGpjX3lidHZhX2hleSgpICk7DQoJCQlya3ZnOw0KCQl9DQoNCgkJdnMgKCAhIHJ6Y2dsKCAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gKSApIHsNCgkJCSRlcnF2ZXJwZ19nYiA9ICRfRVJESFJGR1snZXJxdmVycGdfZ2InXTsNCgkJfSByeWZyIHsNCgkJCSRlcnF2ZXJwZ19nYiA9IG5xenZhX2hleSgpOw0KCQl9DQoNCgkJdnMgKCBwaGVlcmFnX2hmcmVfcG5hKCAnem5hbnRyX2JjZ3ZiYWYnICkgKSB7DQoJCQkkbnF6dmFfcnpudnkgPSB0cmdfYmNndmJhKCAnbnF6dmFfcnpudnknICk7DQoJCX0gcnlmciB7DQoJCQlqY19mbnNyX2VycXZlcnBnKCAkZXJxdmVycGdfZ2IgKTsNCgkJCXJrdmc7DQoJCX0NCg0KCQkvKioNCgkJICogU3Z5Z3JlZiBndXIgdmFncmVpbnkgc2JlIHF2Znp2ZmZ2YXQgZ3VyIG5xenZhIHJ6bnZ5IHBiYXN2ZXpuZ3ZiYSBmcGVycmEuDQoJCSAqDQoJCSAqIFZzIGAwYCAobXJlYikgdmYgZXJnaGVhcnEsIGd1ciAiRXJ6dmFxIHpyIHluZ3JlIiB5dmF4IGp2eXkgYWJnIG9yIHF2ZmN5bmxycS4NCgkJICoNCgkJICogQGZ2YXByIDUuMy4xDQoJCSAqDQoJCSAqIEBjbmVueiB2YWcgJHZhZ3JlaW55IFZhZ3JlaW55IGd2enIgKHZhIGZycGJhcWYpLiBRcnNuaHlnIHZmIDMgcW5sZi4NCgkJICovDQoJCSRlcnp2YXFfdmFncmVpbnkgPSAodmFnKSBuY2N5bF9zdnlncmVmKCAnbnF6dmFfcnpudnlfZXJ6dmFxX3ZhZ3JlaW55JywgMyAqIFFOTF9WQV9GUlBCQVFGICk7DQoNCgkJdnMgKCAhIHJ6Y2dsKCAkX1RSR1snZXJ6dmFxX3pyX3luZ3JlJ10gKSApIHsNCgkJCXZzICggISBqY19pcmV2c2xfYWJhcHIoICRfVFJHWydlcnp2YXFfenJfeW5ncmUnXSwgJ2VyenZhcV96cl95bmdyZV9hYmFwcicgKSApIHsNCgkJCQlqY19mbnNyX2VycXZlcnBnKCBqY195YnR2YV9oZXkoKSApOw0KCQkJCXJrdmc7DQoJCQl9DQoNCgkJCXZzICggJGVyenZhcV92YWdyZWlueSA+IDAgKSB7DQoJCQkJaGNxbmdyX2JjZ3ZiYSggJ25xenZhX3J6bnZ5X3l2c3JmY25hJywgZ3Z6cigpICsgJGVyenZhcV92YWdyZWlueSApOw0KCQkJfQ0KDQoJCQkkZXJxdmVycGdfZ2IgPSBucXFfZGhyZWxfbmV0KCAnbnF6dmFfcnpudnlfZXJ6dmFxX3luZ3JlJywgMSwgJGVycXZlcnBnX2diICk7DQoJCQlqY19mbnNyX2VycXZlcnBnKCAkZXJxdmVycGdfZ2IgKTsNCgkJCXJrdmc7DQoJCX0NCg0KCQl2cyAoICEgcnpjZ2woICRfQ0JGR1sncGJlZXJwZy1ucXp2YS1yem52eSddICkgKSB7DQoJCQl2cyAoICEgcHVycHhfbnF6dmFfZXJzcmVyZSggJ3BiYXN2ZXpfbnF6dmFfcnpudnknLCAncGJhc3Zlel9ucXp2YV9yem52eV9hYmFwcicgKSApIHsNCgkJCQlqY19mbnNyX2VycXZlcnBnKCBqY195YnR2YV9oZXkoKSApOw0KCQkJCXJrdmc7DQoJCQl9DQoNCgkJCS8qKg0KCQkJICogU3Z5Z3JlZiBndXIgdmFncmVpbnkgc2JlIGVycXZlcnBndmF0IGd1ciBoZnJlIGdiIGd1ciBucXp2YSByem52eSBwYmFzdmV6bmd2YmEgZnBlcnJhLg0KCQkJICoNCgkJCSAqIFZzIGAwYCAobXJlYikgdmYgZXJnaGVhcnEsIGd1ciBoZnJlIGp2eXkgYWJnIG9yIGVycXZlcnBncnEuDQoJCQkgKg0KCQkJICogQGZ2YXByIDUuMy4wDQoJCQkgKg0KCQkJICogQGNuZW56IHZhZyAkdmFncmVpbnkgVmFncmVpbnkgZ3Z6ciAodmEgZnJwYmFxZikuIFFyc25oeWcgdmYgNiB6YmFndWYuDQoJCQkgKi8NCgkJCSRucXp2YV9yem52eV9wdXJweF92YWdyZWlueSA9ICh2YWcpIG5jY3lsX3N2eWdyZWYoICducXp2YV9yem52eV9wdXJweF92YWdyZWlueScsIDYgKiBaQkFHVV9WQV9GUlBCQVFGICk7DQoNCgkJCXZzICggJG5xenZhX3J6bnZ5X3B1cnB4X3ZhZ3JlaW55ID4gMCApIHsNCgkJCQloY3FuZ3JfYmNndmJhKCAnbnF6dmFfcnpudnlfeXZzcmZjbmEnLCBndnpyKCkgKyAkbnF6dmFfcnpudnlfcHVycHhfdmFncmVpbnkgKTsNCgkJCX0NCg0KCQkJamNfZm5zcl9lcnF2ZXJwZyggJGVycXZlcnBnX2diICk7DQoJCQlya3ZnOw0KCQl9DQoNCgkJeWJ0dmFfdXJucXJlKCBfXyggJ1BiYXN2ZXogbGJoZSBucXp2YXZmZ2VuZ3ZiYSByem52eScgKSwgJycsICRyZWViZWYgKTsNCg0KCQkvKioNCgkJICogU3ZlcmYgb3JzYmVyIGd1ciBucXp2YSByem52eSBwYmFzdmV6IHNiZXouDQoJCSAqDQoJCSAqIEBmdmFwciA1LjMuMA0KCQkgKg0KCQkgKiBAY25lbnogSkNfUmVlYmUgJHJlZWJlZiBOIGBKQ19SZWViZWAgYm93cnBnIHBiYWdudmF2YXQgbmFsIHJlZWJlZiB0cmFyZW5ncnEgb2wgaGZ2YXQgdmFpbnl2cQ0KCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICBwZXJxcmFndm55Zi4gQWJnciBndW5nIGd1ciByZWViZSBib3dycGcgem5sIGFiZyBwYmFnbnZhIG5hbCByZWViZWYuDQoJCSAqLw0KCQlxYl9ucGd2YmEoICducXp2YV9yem52eV9wYmFzdmV6JywgJHJlZWJlZiApOw0KDQoJCT8+DQoNCgkJPHNiZXogcHluZmY9Im5xenZhLXJ6bnZ5LXBiYXN2ZXotc2JleiIgYW56cj0ibnF6dmEtcnpudnktcGJhc3Zlei1zYmV6IiBucGd2YmE9Ijw/Y3VjIHJwdWIgcmZwX2hleSggZnZncl9oZXkoICdqYy15YnR2YS5jdWM/bnBndmJhPXBiYXN2ZXpfbnF6dmFfcnpudnknLCAneWJ0dmFfY2JmZycgKSApOyA/PiIgenJndWJxPSJjYmZnIj4NCgkJCTw/Y3VjDQoJCQkvKioNCgkJCSAqIFN2ZXJmIHZhZnZxciBndXIgbnF6dmEtcnpudnktcGJhc3Zlei1zYmV6IHNiZXogZ250Ziwgb3JzYmVyIGd1ciB1dnFxcmEgc3ZyeXFmLg0KCQkJICoNCgkJCSAqIEBmdmFwciA1LjMuMA0KCQkJICovDQoJCQlxYl9ucGd2YmEoICducXp2YV9yem52eV9wYmFzdmV6X3NiZXonICk7DQoNCgkJCWpjX2FiYXByX3N2cnlxKCAncGJhc3Zlel9ucXp2YV9yem52eScsICdwYmFzdmV6X25xenZhX3J6bnZ5X2FiYXByJyApOw0KDQoJCQk/Pg0KCQkJPHZhY2hnIGdsY3I9InV2cXFyYSIgYW56cj0iZXJxdmVycGdfZ2IiIGlueWhyPSI8P2N1YyBycHViIHJmcF9uZ2dlKCAkZXJxdmVycGdfZ2IgKTsgPz4iIC8+DQoNCgkJCTx1MSBweW5mZj0ibnF6dmEtcnpudnlfX3VybnF2YXQiPg0KCQkJCTw/Y3VjIF9yKCAnTnF6dmF2Zmdlbmd2YmEgcnpudnkgaXJldnN2cG5ndmJhJyApOyA/Pg0KCQkJPC91MT4NCgkJCTxjIHB5bmZmPSJucXp2YS1yem52eV9fcXJnbnZ5ZiI+DQoJCQkJPD9jdWMgX3IoICdDeXJuZnIgaXJldnNsIGd1bmcgZ3VyIDxmZ2ViYXQ+bnF6dmF2Zmdlbmd2YmEgcnpudnk8L2ZnZWJhdD4gc2JlIGd1dmYganJvZnZnciB2ZiBmZ3Z5eSBwYmVlcnBnLicgKTsgPz4NCgkJCQk8P2N1Yw0KDQoJCQkJLyogZ2VuYWZ5bmdiZWY6IEhFWSBnYiBndXIgSmJlcUNlcmZmIHVyeWMgZnJwZ3ZiYSBub2JoZyBucXp2YSByem52eS4gKi8NCgkJCQkkbnF6dmFfcnpudnlfdXJ5Y19oZXkgPSBfXyggJ3VnZ2NmOi8vamJlcWNlcmZmLmJldC9maGNjYmVnL25lZ3ZweXIvZnJnZ3ZhdGYtdHJhcmVueS1mcGVycmEvI3J6bnZ5LW5xcWVyZmYnICk7DQoNCgkJCQkvKiBnZW5hZnluZ2JlZjogTnBwcmZmdm92eXZnbCBncmtnLiAqLw0KCQkJCSRucHByZmZ2b3Z5dmdsX2dya2cgPSBmY2V2YWdzKCAnPGZjbmEgcHluZmY9ImZwZXJyYS1lcm5xcmUtZ3JrZyI+ICVmPC9mY25hPicsIF9fKCAnKGJjcmFmIHZhIG4gYXJqIGdubyknICkgKTsNCg0KCQkJCWNldmFncygNCgkJCQkJJzxuIHVlcnM9IiVmIiBlcnk9ImFiYmNyYXJlIiBnbmV0cmc9Il9veW5heCI+JWYlZjwvbj4nLA0KCQkJCQlyZnBfaGV5KCAkbnF6dmFfcnpudnlfdXJ5Y19oZXkgKSwNCgkJCQkJX18oICdKdWwgdmYgZ3V2ZiB2emNiZWduYWc/JyApLA0KCQkJCQkkbnBwcmZmdm92eXZnbF9ncmtnDQoJCQkJKTsNCg0KCQkJCT8+DQoJCQk8L2M+DQoJCQk8YyBweW5mZj0ibnF6dmEtcnpudnlfX3FyZ252eWYiPg0KCQkJCTw/Y3VjDQoNCgkJCQljZXZhZ3MoDQoJCQkJCS8qIGdlbmFmeW5nYmVmOiAlZjogTnF6dmEgcnpudnkgbnFxZXJmZi4gKi8NCgkJCQkJX18oICdQaGVlcmFnIG5xenZhdmZnZW5ndmJhIHJ6bnZ5OiAlZicgKSwNCgkJCQkJJzxmZ2ViYXQ+JyAuIHJmcF91Z3p5KCAkbnF6dmFfcnpudnkgKSAuICc8L2ZnZWJhdD4nDQoJCQkJKTsNCg0KCQkJCT8+DQoJCQk8L2M+DQoJCQk8YyBweW5mZj0ibnF6dmEtcnpudnlfX3FyZ252eWYiPg0KCQkJCTw/Y3VjIF9yKCAnR3V2ZiByem52eSB6bmwgb3IgcXZzc3JlcmFnIHNlYnogbGJoZSBjcmVmYmFueSByem52eSBucXFlcmZmLicgKTsgPz4NCgkJCTwvYz4NCg0KCQkJPHF2aSBweW5mZj0ibnF6dmEtcnpudnlfX25wZ3ZiYWYiPg0KCQkJCTxxdmkgcHluZmY9Im5xenZhLXJ6bnZ5X19ucGd2YmFmLWNldnpuZWwiPg0KCQkJCQk8P2N1Yw0KDQoJCQkJCSRwdW5hdHJfeXZheCA9IG5xenZhX2hleSggJ2JjZ3ZiYWYtdHJhcmVueS5jdWMnICk7DQoJCQkJCSRwdW5hdHJfeXZheCA9IG5xcV9kaHJlbF9uZXQoICd1dnR1eXZ0dWcnLCAncGJhc3Zlel9ucXp2YV9yem52eScsICRwdW5hdHJfeXZheCApOw0KDQoJCQkJCT8+DQoJCQkJCTxuIHB5bmZmPSJvaGdnYmEgb2hnZ2JhLXluZXRyIiB1ZXJzPSI8P2N1YyBycHViIHJmcF9oZXkoICRwdW5hdHJfeXZheCApOyA/PiI+PD9jdWMgX3IoICdIY3FuZ3InICk7ID8+PC9uPg0KCQkJCQk8dmFjaGcgZ2xjcj0iZmhvenZnIiBhbnpyPSJwYmVlcnBnLW5xenZhLXJ6bnZ5IiB2cT0icGJlZXJwZy1ucXp2YS1yem52eSIgcHluZmY9Im9oZ2diYSBvaGdnYmEtY2V2em5lbCBvaGdnYmEteW5ldHIiIGlueWhyPSI8P2N1YyByZnBfbmdnZV9yKCAnR3VyIHJ6bnZ5IHZmIHBiZWVycGcnICk7ID8+IiAvPg0KCQkJCTwvcXZpPg0KCQkJCTw/Y3VjIHZzICggJGVyenZhcV92YWdyZWlueSA+IDAgKSA6ID8+DQoJCQkJCTxxdmkgcHluZmY9Im5xenZhLXJ6bnZ5X19ucGd2YmFmLWZycGJhcW5lbCI+DQoJCQkJCQk8P2N1Yw0KDQoJCQkJCQkkZXJ6dmFxX3pyX3l2YXggPSBqY195YnR2YV9oZXkoICRlcnF2ZXJwZ19nYiApOw0KCQkJCQkJJGVyenZhcV96cl95dmF4ID0gbnFxX2RocmVsX25ldCgNCgkJCQkJCQluZWVubCgNCgkJCQkJCQkJJ25wZ3ZiYScgICAgICAgICAgPT4gJ3BiYXN2ZXpfbnF6dmFfcnpudnknLA0KCQkJCQkJCQknZXJ6dmFxX3pyX3luZ3JlJyA9PiBqY19wZXJuZ3JfYWJhcHIoICdlcnp2YXFfenJfeW5ncmVfYWJhcHInICksDQoJCQkJCQkJKSwNCgkJCQkJCQkkZXJ6dmFxX3pyX3l2YXgNCgkJCQkJCSk7DQoNCgkJCQkJCT8+DQoJCQkJCQk8biB1ZXJzPSI8P2N1YyBycHViIHJmcF9oZXkoICRlcnp2YXFfenJfeXZheCApOyA/PiI+PD9jdWMgX3IoICdFcnp2YXEgenIgeW5ncmUnICk7ID8+PC9uPg0KCQkJCQk8L3F2aT4NCgkJCQk8P2N1YyByYXF2czsgPz4NCgkJCTwvcXZpPg0KCQk8L3NiZXo+DQoNCgkJPD9jdWMNCg0KCQl5YnR2YV9zYmJncmUoKTsNCgkJb2Vybng7DQoNCglwbmZyICdjYmZnY25mZic6DQoJCXZzICggISBuZWVubF94cmxfcmt2ZmdmKCAnY2JmZ19jbmZmamJlcScsICRfQ0JGRyApICkgew0KCQkJamNfZm5zcl9lcnF2ZXJwZyggamNfdHJnX2Vyc3JlcmUoKSApOw0KCQkJcmt2ZzsNCgkJfQ0KDQoJCWVyZGh2ZXJfYmFwciBOT0ZDTkdVIC4gSkNWQVAgLiAnL3B5bmZmLWN1Y25mZi5jdWMnOw0KCQkkdW5mdXJlID0gYXJqIENuZmZqYmVxVW5mdSggOCwgZ2VociApOw0KDQoJCS8qKg0KCQkgKiBTdnlncmVmIGd1ciB5dnNyIGZjbmEgYnMgZ3VyIGNiZmcgY25mZmpiZXEgcGJieHZyLg0KCQkgKg0KCQkgKiBPbCBxcnNuaHlnLCBndXIgcGJieHZyIHJrY3ZlcmYgMTAgcW5sZiBzZWJ6IHBlcm5ndmJhLiBHYiBnaGVhIGd1dmYNCgkJICogdmFnYiBuIGZyZmZ2YmEgcGJieHZyLCBlcmdoZWEgMC4NCgkJICoNCgkJICogQGZ2YXByIDMuNy4wDQoJCSAqDQoJCSAqIEBjbmVueiB2YWcgJHJrY3ZlcmYgR3VyIHJrY3ZlbCBndnpyLCBuZiBjbmZmcnEgZ2IgZnJncGJieHZyKCkuDQoJCSAqLw0KCQkkcmtjdmVyICA9IG5jY3lsX3N2eWdyZWYoICdjYmZnX2NuZmZqYmVxX3JrY3ZlcmYnLCBndnpyKCkgKyAxMCAqIFFOTF9WQV9GUlBCQVFGICk7DQoJCSRlcnNyZXJlID0gamNfdHJnX2Vyc3JlcmUoKTsNCg0KCQl2cyAoICRlcnNyZXJlICkgew0KCQkJJGZycGhlciA9ICggJ3VnZ2NmJyA9PT0gY25lZnJfaGV5KCAkZXJzcmVyZSwgQ1VDX0hFWV9GUFVSWlIgKSApOw0KCQl9IHJ5ZnIgew0KCQkJJGZycGhlciA9IHNueWZyOw0KCQl9DQoNCgkJZnJncGJieHZyKCAnamMtY2JmZ2NuZmZfJyAuIFBCQlhWUlVORlUsICR1bmZ1cmUtPlVuZnVDbmZmamJlcSggamNfaGFmeW5mdSggJF9DQkZHWydjYmZnX2NuZmZqYmVxJ10gKSApLCAkcmtjdmVyLCBQQkJYVlJDTkdVLCBQQkJYVlJfUUJaTlZBLCAkZnJwaGVyICk7DQoNCgkJamNfZm5zcl9lcnF2ZXJwZyggamNfdHJnX2Vyc3JlcmUoKSApOw0KCQlya3ZnOw0KDQoJcG5mciAneWJ0YmhnJzoNCgkJcHVycHhfbnF6dmFfZXJzcmVyZSggJ3lidC1iaGcnICk7DQoNCgkJJGhmcmUgPSBqY190cmdfcGhlZXJhZ19oZnJlKCk7DQoNCgkJamNfeWJ0YmhnKCk7DQoNCgkJdnMgKCAhIHJ6Y2dsKCAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gKSApIHsNCgkJCSRlcnF2ZXJwZ19nYiAgICAgICAgICAgPSAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ107DQoJCQkkZXJkaHJmZ3JxX2VycXZlcnBnX2diID0gJGVycXZlcnBnX2diOw0KCQl9IHJ5ZnIgew0KCQkJJGVycXZlcnBnX2diID0gbnFxX2RocmVsX25ldCgNCgkJCQluZWVubCgNCgkJCQkJJ3lidHRycWJoZycgPT4gJ2dlaHInLA0KCQkJCQknamNfeW5hdCcgICA9PiB0cmdfaGZyZV95YnBueXIoICRoZnJlICksDQoJCQkJKSwNCgkJCQlqY195YnR2YV9oZXkoKQ0KCQkJKTsNCg0KCQkJJGVyZGhyZmdycV9lcnF2ZXJwZ19nYiA9ICcnOw0KCQl9DQoNCgkJLyoqDQoJCSAqIFN2eWdyZWYgZ3VyIHlidCBiaGcgZXJxdmVycGcgSEVZLg0KCQkgKg0KCQkgKiBAZnZhcHIgNC4yLjANCgkJICoNCgkJICogQGNuZW56IGZnZXZhdCAgJGVycXZlcnBnX2diICAgICAgICAgICBHdXIgZXJxdmVycGcgcXJmZ3Zhbmd2YmEgSEVZLg0KCQkgKiBAY25lbnogZmdldmF0ICAkZXJkaHJmZ3JxX2VycXZlcnBnX2diIEd1ciBlcmRocmZncnEgZXJxdmVycGcgcXJmZ3Zhbmd2YmEgSEVZIGNuZmZycSBuZiBuIGNuZW56cmdyZS4NCgkJICogQGNuZW56IEpDX0hmcmUgJGhmcmUgICAgICAgICAgICAgICAgICBHdXIgSkNfSGZyZSBib3dycGcgc2JlIGd1ciBoZnJlIGd1bmcnZiB5YnR0dmF0IGJoZy4NCgkJICovDQoJCSRlcnF2ZXJwZ19nYiA9IG5jY3lsX3N2eWdyZWYoICd5YnRiaGdfZXJxdmVycGcnLCAkZXJxdmVycGdfZ2IsICRlcmRocmZncnFfZXJxdmVycGdfZ2IsICRoZnJlICk7DQoNCgkJamNfZm5zcl9lcnF2ZXJwZyggJGVycXZlcnBnX2diICk7DQoJCXJrdmc7DQoNCglwbmZyICd5YmZnY25mZmpiZXEnOg0KCXBuZnIgJ2VyZ2V2cmlyY25mZmpiZXEnOg0KCQl2cyAoICR1Z2djX2NiZmcgKSB7DQoJCQkkcmVlYmVmID0gZXJnZXZyaXJfY25mZmpiZXEoKTsNCg0KCQkJdnMgKCAhIHZmX2pjX3JlZWJlKCAkcmVlYmVmICkgKSB7DQoJCQkJJGVycXZlcnBnX2diID0gISByemNnbCggJF9FUkRIUkZHWydlcnF2ZXJwZ19nYiddICkgPyAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gOiAnamMteWJ0dmEuY3VjP3B1cnB4cnpudnk9cGJhc3Zleic7DQoJCQkJamNfZm5zcl9lcnF2ZXJwZyggJGVycXZlcnBnX2diICk7DQoJCQkJcmt2ZzsNCgkJCX0NCgkJfQ0KDQoJCXZzICggdmZmcmcoICRfVFJHWydyZWViZSddICkgKSB7DQoJCQl2cyAoICd2YWlueXZxeHJsJyA9PT0gJF9UUkdbJ3JlZWJlJ10gKSB7DQoJCQkJJHJlZWJlZi0+bnFxKCAndmFpbnl2cXhybCcsIF9fKCAnPGZnZWJhdD5SZWViZTwvZmdlYmF0PjogTGJoZSBjbmZmamJlcSBlcmZyZyB5dmF4IG5jY3JuZWYgZ2Igb3IgdmFpbnl2cS4gQ3lybmZyIGVyZGhyZmcgbiBhcmogeXZheCBvcnliai4nICkgKTsNCgkJCX0gcnlmcnZzICggJ3JrY3ZlcnF4cmwnID09PSAkX1RSR1sncmVlYmUnXSApIHsNCgkJCQkkcmVlYmVmLT5ucXEoICdya2N2ZXJxeHJsJywgX18oICc8ZmdlYmF0PlJlZWJlPC9mZ2ViYXQ+OiBMYmhlIGNuZmZqYmVxIGVyZnJnIHl2YXggdW5mIHJrY3ZlcnEuIEN5cm5mciBlcmRocmZnIG4gYXJqIHl2YXggb3J5YmouJyApICk7DQoJCQl9DQoJCX0NCg0KCQkkeWJmZ2NuZmZqYmVxX2VycXZlcnBnID0gISByemNnbCggJF9FUkRIUkZHWydlcnF2ZXJwZ19nYiddICkgPyAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gOiAnJzsNCgkJLyoqDQoJCSAqIFN2eWdyZWYgZ3VyIEhFWSBlcnF2ZXJwZ3JxIGdiIG5zZ3JlIGZob3p2Z2d2YXQgZ3VyIHliZmdjbmZmamJlcS9lcmdldnJpcmNuZmZqYmVxIHNiZXouDQoJCSAqDQoJCSAqIEBmdmFwciAzLjAuMA0KCQkgKg0KCQkgKiBAY25lbnogZmdldmF0ICR5YmZnY25mZmpiZXFfZXJxdmVycGcgR3VyIGVycXZlcnBnIHFyZmd2YW5ndmJhIEhFWS4NCgkJICovDQoJCSRlcnF2ZXJwZ19nYiA9IG5jY3lsX3N2eWdyZWYoICd5YmZnY25mZmpiZXFfZXJxdmVycGcnLCAkeWJmZ2NuZmZqYmVxX2VycXZlcnBnICk7DQoNCgkJLyoqDQoJCSAqIFN2ZXJmIG9yc2JlciBndXIgeWJmZyBjbmZmamJlcSBzYmV6Lg0KCQkgKg0KCQkgKiBAZnZhcHIgMS41LjENCgkJICogQGZ2YXByIDUuMS4wIE5xcXJxIGd1ciBgJHJlZWJlZmAgY25lbnpyZ3JlLg0KCQkgKg0KCQkgKiBAY25lbnogSkNfUmVlYmUgJHJlZWJlZiBOIGBKQ19SZWViZWAgYm93cnBnIHBiYWdudmF2YXQgbmFsIHJlZWJlZiB0cmFyZW5ncnEgb2wgaGZ2YXQgdmFpbnl2cQ0KCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICBwZXJxcmFndm55Zi4gQWJnciBndW5nIGd1ciByZWViZSBib3dycGcgem5sIGFiZyBwYmFnbnZhIG5hbCByZWViZWYuDQoJCSAqLw0KCQlxYl9ucGd2YmEoICd5YmZnX2NuZmZqYmVxJywgJHJlZWJlZiApOw0KDQoJCXlidHZhX3VybnFyZSggX18oICdZYmZnIENuZmZqYmVxJyApLCAnPGMgcHluZmY9InpyZmZudHIiPicgLiBfXyggJ0N5cm5mciByYWdyZSBsYmhlIGhmcmVhbnpyIGJlIHJ6bnZ5IG5xcWVyZmYuIExiaCBqdnl5IGVycHJ2aXIgbmEgcnpudnkgenJmZm50ciBqdmd1IHZhZmdlaHBndmJhZiBiYSB1YmogZ2IgZXJmcmcgbGJoZSBjbmZmamJlcS4nICkgLiAnPC9jPicsICRyZWViZWYgKTsNCg0KCQkkaGZyZV95YnR2YSA9ICcnOw0KDQoJCXZzICggdmZmcmcoICRfQ0JGR1snaGZyZV95YnR2YSddICkgJiYgdmZfZmdldmF0KCAkX0NCRkdbJ2hmcmVfeWJ0dmEnXSApICkgew0KCQkJJGhmcmVfeWJ0dmEgPSBqY19oYWZ5bmZ1KCAkX0NCRkdbJ2hmcmVfeWJ0dmEnXSApOw0KCQl9DQoNCgkJPz4NCg0KCQk8c2JleiBhbnpyPSJ5YmZnY25mZmpiZXFzYmV6IiB2cT0ieWJmZ2NuZmZqYmVxc2JleiIgbnBndmJhPSI8P2N1YyBycHViIHJmcF9oZXkoIGFyZ2piZXhfZnZncl9oZXkoICdqYy15YnR2YS5jdWM/bnBndmJhPXliZmdjbmZmamJlcScsICd5YnR2YV9jYmZnJyApICk7ID8+IiB6cmd1YnE9ImNiZmciPg0KCQkJPGM+DQoJCQkJPHlub3J5IHNiZT0iaGZyZV95YnR2YSI+PD9jdWMgX3IoICdIZnJlYW56ciBiZSBSem52eSBOcXFlcmZmJyApOyA/PjwveW5vcnk+DQoJCQkJPHZhY2hnIGdsY3I9Imdya2ciIGFuenI9ImhmcmVfeWJ0dmEiIHZxPSJoZnJlX3lidHZhIiBweW5mZj0idmFjaGciIGlueWhyPSI8P2N1YyBycHViIHJmcF9uZ2dlKCAkaGZyZV95YnR2YSApOyA/PiIgZnZtcj0iMjAiIG5oZ2JwbmN2Z255dm1yPSJic3MiIG5oZ2JwYnpjeXJncj0iaGZyZWFuenIiIC8+DQoJCQk8L2M+DQoJCQk8P2N1Yw0KDQoJCQkvKioNCgkJCSAqIFN2ZXJmIHZhZnZxciBndXIgeWJmZ2NuZmZqYmVxIHNiZXogZ250Ziwgb3JzYmVyIGd1ciB1dnFxcmEgc3ZyeXFmLg0KCQkJICoNCgkJCSAqIEBmdmFwciAyLjEuMA0KCQkJICovDQoJCQlxYl9ucGd2YmEoICd5YmZnY25mZmpiZXFfc2JleicgKTsNCg0KCQkJPz4NCgkJCTx2YWNoZyBnbGNyPSJ1dnFxcmEiIGFuenI9ImVycXZlcnBnX2diIiBpbnlocj0iPD9jdWMgcnB1YiByZnBfbmdnZSggJGVycXZlcnBnX2diICk7ID8+IiAvPg0KCQkJPGMgcHluZmY9ImZob3p2ZyI+DQoJCQkJPHZhY2hnIGdsY3I9ImZob3p2ZyIgYW56cj0iamMtZmhvenZnIiB2cT0iamMtZmhvenZnIiBweW5mZj0ib2hnZ2JhIG9oZ2diYS1jZXZ6bmVsIG9oZ2diYS15bmV0ciIgaW55aHI9Ijw/Y3VjIHJmcF9uZ2dlX3IoICdUcmcgQXJqIENuZmZqYmVxJyApOyA/PiIgLz4NCgkJCTwvYz4NCgkJPC9zYmV6Pg0KDQoJCTxjIHZxPSJhbmkiPg0KCQkJPG4gdWVycz0iPD9jdWMgcnB1YiByZnBfaGV5KCBqY195YnR2YV9oZXkoKSApOyA/PiI+PD9jdWMgX3IoICdZYnQgdmEnICk7ID8+PC9uPg0KCQkJPD9jdWMNCg0KCQkJdnMgKCB0cmdfYmNndmJhKCAnaGZyZWZfcG5hX2VydHZmZ3JlJyApICkgew0KCQkJCSRlcnR2Zmdlbmd2YmFfaGV5ID0gZmNldmFncyggJzxuIHVlcnM9IiVmIj4lZjwvbj4nLCByZnBfaGV5KCBqY19lcnR2Zmdlbmd2YmFfaGV5KCkgKSwgX18oICdFcnR2ZmdyZScgKSApOw0KDQoJCQkJcnB1YiByZnBfdWd6eSggJHlidHZhX3l2YXhfZnJjbmVuZ2JlICk7DQoNCgkJCQkvKiogR3V2ZiBzdnlncmUgdmYgcWJwaHpyYWdycSB2YSBqYy12YXB5aHFyZi90cmFyZW55LWdyemN5bmdyLmN1YyAqLw0KCQkJCXJwdWIgbmNjeWxfc3Z5Z3JlZiggJ2VydHZmZ3JlJywgJGVydHZmZ2VuZ3ZiYV9oZXkgKTsNCgkJCX0NCg0KCQkJPz4NCgkJPC9jPg0KCQk8P2N1Yw0KDQoJCXlidHZhX3NiYmdyZSggJ2hmcmVfeWJ0dmEnICk7DQoJCW9lcm54Ow0KDQoJcG5mciAnZXJmcmdjbmZmJzoNCglwbmZyICdlYyc6DQoJCXl2ZmcoICRlY19jbmd1ICkgPSBya2N5YnFyKCAnPycsIGpjX2hhZnluZnUoICRfRlJFSVJFWydFUkRIUkZHX0hFViddICkgKTsNCgkJJGVjX3BiYnh2ciAgICAgICA9ICdqYy1lcmZyZ2NuZmYtJyAuIFBCQlhWUlVORlU7DQoNCgkJdnMgKCB2ZmZyZyggJF9UUkdbJ3hybCddICkgJiYgdmZmcmcoICRfVFJHWyd5YnR2YSddICkgKSB7DQoJCQkkaW55aHIgPSBmY2V2YWdzKCAnJWY6JWYnLCBqY19oYWZ5bmZ1KCAkX1RSR1sneWJ0dmEnXSApLCBqY19oYWZ5bmZ1KCAkX1RSR1sneHJsJ10gKSApOw0KCQkJZnJncGJieHZyKCAkZWNfcGJieHZyLCAkaW55aHIsIDAsICRlY19jbmd1LCBQQkJYVlJfUUJaTlZBLCB2Zl9mZnkoKSwgZ2VociApOw0KDQoJCQlqY19mbnNyX2VycXZlcnBnKCBlcnpiaXJfZGhyZWxfbmV0KCBuZWVubCggJ3hybCcsICd5YnR2YScgKSApICk7DQoJCQlya3ZnOw0KCQl9DQoNCgkJdnMgKCB2ZmZyZyggJF9QQkJYVlJbICRlY19wYmJ4dnIgXSApICYmIDAgPCBmZ2VjYmYoICRfUEJCWFZSWyAkZWNfcGJieHZyIF0sICc6JyApICkgew0KCQkJeXZmZyggJGVjX3lidHZhLCAkZWNfeHJsICkgPSBya2N5YnFyKCAnOicsIGpjX2hhZnluZnUoICRfUEJCWFZSWyAkZWNfcGJieHZyIF0gKSwgMiApOw0KDQoJCQkkaGZyZSA9IHB1cnB4X2NuZmZqYmVxX2VyZnJnX3hybCggJGVjX3hybCwgJGVjX3lidHZhICk7DQoNCgkJCXZzICggdmZmcmcoICRfQ0JGR1snY25mZjEnXSApICYmICEgdW5mdV9yZGhueWYoICRlY194cmwsICRfQ0JGR1snZWNfeHJsJ10gKSApIHsNCgkJCQkkaGZyZSA9IHNueWZyOw0KCQkJfQ0KCQl9IHJ5ZnIgew0KCQkJJGhmcmUgPSBzbnlmcjsNCgkJfQ0KDQoJCXZzICggISAkaGZyZSB8fCB2Zl9qY19yZWViZSggJGhmcmUgKSApIHsNCgkJCWZyZ3BiYnh2ciggJGVjX3BiYnh2ciwgJyAnLCBndnpyKCkgLSBMUk5FX1ZBX0ZSUEJBUUYsICRlY19jbmd1LCBQQkJYVlJfUUJaTlZBLCB2Zl9mZnkoKSwgZ2VociApOw0KDQoJCQl2cyAoICRoZnJlICYmICRoZnJlLT50cmdfcmVlYmVfcGJxcigpID09PSAncmtjdmVycV94cmwnICkgew0KCQkJCWpjX2VycXZlcnBnKCBmdmdyX2hleSggJ2pjLXlidHZhLmN1Yz9ucGd2YmE9eWJmZ2NuZmZqYmVxJnJlZWJlPXJrY3ZlcnF4cmwnICkgKTsNCgkJCX0gcnlmciB7DQoJCQkJamNfZXJxdmVycGcoIGZ2Z3JfaGV5KCAnamMteWJ0dmEuY3VjP25wZ3ZiYT15YmZnY25mZmpiZXEmcmVlYmU9dmFpbnl2cXhybCcgKSApOw0KCQkJfQ0KDQoJCQlya3ZnOw0KCQl9DQoNCgkJJHJlZWJlZiA9IGFyaiBKQ19SZWViZSgpOw0KDQoJCS8vIFB1cnB4IHZzIGNuZmZqYmVxIHZmIGJhciBiZSBueXkgcnpjZ2wgZmNucHJmLg0KCQl2cyAoICEgcnpjZ2woICRfQ0JGR1snY25mZjEnXSApICkgew0KCQkJJF9DQkZHWydjbmZmMSddID0gZ2V2eiggJF9DQkZHWydjbmZmMSddICk7DQoNCgkJCXZzICggcnpjZ2woICRfQ0JGR1snY25mZjEnXSApICkgew0KCQkJCSRyZWViZWYtPm5xcSggJ2NuZmZqYmVxX2VyZnJnX3J6Y2dsX2ZjbnByJywgX18oICdHdXIgY25mZmpiZXEgcG5hYWJnIG9yIG4gZmNucHIgYmUgbnl5IGZjbnByZi4nICkgKTsNCgkJCX0NCgkJfQ0KDQoJCS8vIFB1cnB4IHZzIGNuZmZqYmVxIHN2cnlxZiBxYiBhYmcgem5ncHUuDQoJCXZzICggISByemNnbCggJF9DQkZHWydjbmZmMSddICkgJiYgZ2V2eiggJF9DQkZHWydjbmZmMiddICkgIT09ICRfQ0JGR1snY25mZjEnXSApIHsNCgkJCSRyZWViZWYtPm5xcSggJ2NuZmZqYmVxX2VyZnJnX3p2ZnpuZ3B1JywgX18oICc8ZmdlYmF0PlJlZWJlPC9mZ2ViYXQ+OiBHdXIgY25mZmpiZXFmIHFiIGFiZyB6bmdwdS4nICkgKTsNCgkJfQ0KDQoJCS8qKg0KCQkgKiBTdmVyZiBvcnNiZXIgZ3VyIGNuZmZqYmVxIGVyZnJnIGNlYnBycWhlciB2ZiBpbnl2cW5ncnEuDQoJCSAqDQoJCSAqIEBmdmFwciAzLjUuMA0KCQkgKg0KCQkgKiBAY25lbnogSkNfUmVlYmUgICAgICAgICAkcmVlYmVmIEpDIFJlZWJlIGJvd3JwZy4NCgkJICogQGNuZW56IEpDX0hmcmV8SkNfUmVlYmUgJGhmcmUgICBKQ19IZnJlIGJvd3JwZyB2cyBndXIgeWJ0dmEgbmFxIGVyZnJnIHhybCB6bmdwdS4gSkNfUmVlYmUgYm93cnBnIGJndXJlanZmci4NCgkJICovDQoJCXFiX25wZ3ZiYSggJ2lueXZxbmdyX2NuZmZqYmVxX2VyZnJnJywgJHJlZWJlZiwgJGhmcmUgKTsNCg0KCQl2cyAoICggISAkcmVlYmVmLT51bmZfcmVlYmVmKCkgKSAmJiB2ZmZyZyggJF9DQkZHWydjbmZmMSddICkgJiYgISByemNnbCggJF9DQkZHWydjbmZmMSddICkgKSB7DQoJCQllcmZyZ19jbmZmamJlcSggJGhmcmUsICRfQ0JGR1snY25mZjEnXSApOw0KCQkJZnJncGJieHZyKCAkZWNfcGJieHZyLCAnICcsIGd2enIoKSAtIExSTkVfVkFfRlJQQkFRRiwgJGVjX2NuZ3UsIFBCQlhWUl9RQlpOVkEsIHZmX2ZmeSgpLCBnZWhyICk7DQoJCQl5YnR2YV91cm5xcmUoIF9fKCAnQ25mZmpiZXEgRXJmcmcnICksICc8YyBweW5mZj0ienJmZm50ciBlcmZyZy1jbmZmIj4nIC4gX18oICdMYmhlIGNuZmZqYmVxIHVuZiBvcnJhIGVyZnJnLicgKSAuICcgPG4gdWVycz0iJyAuIHJmcF9oZXkoIGpjX3lidHZhX2hleSgpICkgLiAnIj4nIC4gX18oICdZYnQgdmEnICkgLiAnPC9uPjwvYz4nICk7DQoJCQl5YnR2YV9zYmJncmUoKTsNCgkJCXJrdmc7DQoJCX0NCg0KCQlqY19yYWRocmhyX2ZwZXZjZyggJ2hndnlmJyApOw0KCQlqY19yYWRocmhyX2ZwZXZjZyggJ2hmcmUtY2Vic3Z5cicgKTsNCg0KCQl5YnR2YV91cm5xcmUoIF9fKCAnRXJmcmcgQ25mZmpiZXEnICksICc8YyBweW5mZj0ienJmZm50ciBlcmZyZy1jbmZmIj4nIC4gX18oICdSYWdyZSBsYmhlIGFyaiBjbmZmamJlcSBvcnliaiBiZSB0cmFyZW5nciBiYXIuJyApIC4gJzwvYz4nLCAkcmVlYmVmICk7DQoNCgkJPz4NCgkJPHNiZXogYW56cj0iZXJmcmdjbmZmc2JleiIgdnE9ImVyZnJnY25mZnNiZXoiIG5wZ3ZiYT0iPD9jdWMgcnB1YiByZnBfaGV5KCBhcmdqYmV4X2Z2Z3JfaGV5KCAnamMteWJ0dmEuY3VjP25wZ3ZiYT1lcmZyZ2NuZmYnLCAneWJ0dmFfY2JmZycgKSApOyA/PiIgenJndWJxPSJjYmZnIiBuaGdicGJ6Y3lyZ3I9ImJzcyI+DQoJCQk8dmFjaGcgZ2xjcj0idXZxcXJhIiB2cT0iaGZyZV95YnR2YSIgaW55aHI9Ijw/Y3VjIHJwdWIgcmZwX25nZ2UoICRlY195YnR2YSApOyA/PiIgbmhnYnBiemN5cmdyPSJic3MiIC8+DQoNCgkJCTxxdmkgcHluZmY9ImhmcmUtY25mZjEtamVuYyI+DQoJCQkJPGM+DQoJCQkJCTx5bm9yeSBzYmU9ImNuZmYxIj48P2N1YyBfciggJ0FyaiBjbmZmamJlcScgKTsgPz48L3lub3J5Pg0KCQkJCTwvYz4NCg0KCQkJCTxxdmkgcHluZmY9ImpjLWNqcSI+DQoJCQkJCTx2YWNoZyBnbGNyPSJjbmZmamJlcSIgcW5nbi1lcmlybnk9IjEiIHFuZ24tY2o9Ijw/Y3VjIHJwdWIgcmZwX25nZ2UoIGpjX3RyYXJlbmdyX2NuZmZqYmVxKCAxNiApICk7ID8+IiBhbnpyPSJjbmZmMSIgdnE9ImNuZmYxIiBweW5mZj0idmFjaGcgY25mZmpiZXEtdmFjaGciIGZ2bXI9IjI0IiBpbnlocj0iIiBuaGdicGJ6Y3lyZ3I9ImFyai1jbmZmamJlcSIgbmV2bi1xcmZwZXZvcnFvbD0iY25mZi1mZ2VyYXRndS1lcmZoeWciIC8+DQoNCgkJCQkJPG9oZ2diYSBnbGNyPSJvaGdnYmEiIHB5bmZmPSJvaGdnYmEgb2hnZ2JhLWZycGJhcW5lbCBqYy11dnFyLWNqIHV2cXItdnMtYWItd2YiIHFuZ24tZ2J0dHlyPSIwIiBuZXZuLXlub3J5PSI8P2N1YyByZnBfbmdnZV9yKCAnVXZxciBjbmZmamJlcScgKTsgPz4iPg0KCQkJCQkJPGZjbmEgcHluZmY9InFuZnV2cGJhZiBxbmZ1dnBiYWYtdXZxcXJhIiBuZXZuLXV2cXFyYT0iZ2VociI+PC9mY25hPg0KCQkJCQk8L29oZ2diYT4NCgkJCQkJPHF2aSB2cT0iY25mZi1mZ2VyYXRndS1lcmZoeWciIHB5bmZmPSJ1dnFyLXZzLWFiLXdmIiBuZXZuLXl2aXI9ImNieXZnciI+PD9jdWMgX3IoICdGZ2VyYXRndSB2YXF2cG5nYmUnICk7ID8+PC9xdmk+DQoJCQkJPC9xdmk+DQoJCQkJPHF2aSBweW5mZj0iY2otanJueCI+DQoJCQkJCTx2YWNoZyBnbGNyPSJwdXJweG9iayIgYW56cj0iY2pfanJueCIgdnE9ImNqLWpybngiIHB5bmZmPSJjai1wdXJweG9iayIgLz4NCgkJCQkJPHlub3J5IHNiZT0iY2otanJueCI+PD9jdWMgX3IoICdQYmFzdmV6IGhmciBicyBqcm54IGNuZmZqYmVxJyApOyA/PjwveW5vcnk+DQoJCQkJPC9xdmk+DQoJCQk8L3F2aT4NCg0KCQkJPGMgcHluZmY9ImhmcmUtY25mZjItamVuYyI+DQoJCQkJPHlub3J5IHNiZT0iY25mZjIiPjw/Y3VjIF9yKCAnUGJhc3ZleiBhcmogY25mZmpiZXEnICk7ID8+PC95bm9yeT4NCgkJCQk8dmFjaGcgZ2xjcj0iY25mZmpiZXEiIGFuenI9ImNuZmYyIiB2cT0iY25mZjIiIHB5bmZmPSJ2YWNoZyIgZnZtcj0iMjAiIGlueWhyPSIiIG5oZ2JwYnpjeXJncj0iYXJqLWNuZmZqYmVxIiAvPg0KCQkJPC9jPg0KDQoJCQk8YyBweW5mZj0icXJmcGV2Y2d2YmEgdmFxdnBuZ2JlLXV2YWciPjw/Y3VjIHJwdWIgamNfdHJnX2NuZmZqYmVxX3V2YWcoKTsgPz48L2M+DQoJCQk8b2UgcHluZmY9InB5cm5lIiAvPg0KDQoJCQk8P2N1Yw0KDQoJCQkvKioNCgkJCSAqIFN2ZXJmIHNieXlianZhdCBndXIgJ0ZnZXJhdGd1IHZhcXZwbmdiZScgenJncmUgdmEgZ3VyIGhmcmUgY25mZmpiZXEgZXJmcmcgc2Jlei4NCgkJCSAqDQoJCQkgKiBAZnZhcHIgMy45LjANCgkJCSAqDQoJCQkgKiBAY25lbnogSkNfSGZyZSAkaGZyZSBIZnJlIGJvd3JwZyBicyBndXIgaGZyZSBqdWJmciBjbmZmamJlcSB2ZiBvcnZhdCBlcmZyZy4NCgkJCSAqLw0KCQkJcWJfbnBndmJhKCAnZXJmcmdjbmZmX3NiZXonLCAkaGZyZSApOw0KDQoJCQk/Pg0KCQkJPHZhY2hnIGdsY3I9InV2cXFyYSIgYW56cj0iZWNfeHJsIiBpbnlocj0iPD9jdWMgcnB1YiByZnBfbmdnZSggJGVjX3hybCApOyA/PiIgLz4NCgkJCTxjIHB5bmZmPSJmaG96dmcgZXJmcmctY25mZi1maG96dmciPg0KCQkJCTxvaGdnYmEgZ2xjcj0ib2hnZ2JhIiBweW5mZj0ib2hnZ2JhIGpjLXRyYXJlbmdyLWNqIHV2cXItdnMtYWItd2YgZnh2Yy1uZXZuLXJrY25hcXJxIj48P2N1YyBfciggJ1RyYXJlbmdyIENuZmZqYmVxJyApOyA/Pjwvb2hnZ2JhPg0KCQkJCTx2YWNoZyBnbGNyPSJmaG96dmciIGFuenI9ImpjLWZob3p2ZyIgdnE9ImpjLWZob3p2ZyIgcHluZmY9Im9oZ2diYSBvaGdnYmEtY2V2em5lbCBvaGdnYmEteW5ldHIiIGlueWhyPSI8P2N1YyByZnBfbmdnZV9yKCAnRm5pciBDbmZmamJlcScgKTsgPz4iIC8+DQoJCQk8L2M+DQoJCTwvc2Jlej4NCg0KCQk8YyB2cT0iYW5pIj4NCgkJCTxuIHVlcnM9Ijw/Y3VjIHJwdWIgcmZwX2hleSggamNfeWJ0dmFfaGV5KCkgKTsgPz4iPjw/Y3VjIF9yKCAnWWJ0IHZhJyApOyA/Pjwvbj4NCgkJCTw/Y3VjDQoNCgkJCXZzICggdHJnX2JjZ3ZiYSggJ2hmcmVmX3BuYV9lcnR2ZmdyZScgKSApIHsNCgkJCQkkZXJ0dmZnZW5ndmJhX2hleSA9IGZjZXZhZ3MoICc8biB1ZXJzPSIlZiI+JWY8L24+JywgcmZwX2hleSggamNfZXJ0dmZnZW5ndmJhX2hleSgpICksIF9fKCAnRXJ0dmZncmUnICkgKTsNCg0KCQkJCXJwdWIgcmZwX3VnenkoICR5YnR2YV95dmF4X2ZyY25lbmdiZSApOw0KDQoJCQkJLyoqIEd1dmYgc3Z5Z3JlIHZmIHFicGh6cmFncnEgdmEgamMtdmFweWhxcmYvdHJhcmVueS1ncnpjeW5nci5jdWMgKi8NCgkJCQlycHViIG5jY3lsX3N2eWdyZWYoICdlcnR2ZmdyZScsICRlcnR2Zmdlbmd2YmFfaGV5ICk7DQoJCQl9DQoNCgkJCT8+DQoJCTwvYz4NCgkJPD9jdWMNCg0KCQl5YnR2YV9zYmJncmUoICdjbmZmMScgKTsNCgkJb2Vybng7DQoNCglwbmZyICdlcnR2ZmdyZSc6DQoJCXZzICggdmZfemh5Z3ZmdmdyKCkgKSB7DQoJCQkvKioNCgkJCSAqIFN2eWdyZWYgZ3VyIFpoeWd2ZnZnciBmdnRhIGhjIEhFWS4NCgkJCSAqDQoJCQkgKiBAZnZhcHIgMy4wLjANCgkJCSAqDQoJCQkgKiBAY25lbnogZmdldmF0ICRmdnRhX2hjX2hleSBHdXIgZnZ0YSBoYyBIRVkuDQoJCQkgKi8NCgkJCWpjX2VycXZlcnBnKCBuY2N5bF9zdnlncmVmKCAnamNfZnZ0YWhjX3licG5ndmJhJywgYXJnamJleF9mdmdyX2hleSggJ2pjLWZ2dGFoYy5jdWMnICkgKSApOw0KCQkJcmt2ZzsNCgkJfQ0KDQoJCXZzICggISB0cmdfYmNndmJhKCAnaGZyZWZfcG5hX2VydHZmZ3JlJyApICkgew0KCQkJamNfZXJxdmVycGcoIGZ2Z3JfaGV5KCAnamMteWJ0dmEuY3VjP2VydHZmZ2VuZ3ZiYT1xdmZub3lycScgKSApOw0KCQkJcmt2ZzsNCgkJfQ0KDQoJCSRoZnJlX3lidHZhID0gJyc7DQoJCSRoZnJlX3J6bnZ5ID0gJyc7DQoNCgkJdnMgKCAkdWdnY19jYmZnICkgew0KCQkJdnMgKCB2ZmZyZyggJF9DQkZHWydoZnJlX3lidHZhJ10gKSAmJiB2Zl9mZ2V2YXQoICRfQ0JGR1snaGZyZV95YnR2YSddICkgKSB7DQoJCQkJJGhmcmVfeWJ0dmEgPSBqY19oYWZ5bmZ1KCAkX0NCRkdbJ2hmcmVfeWJ0dmEnXSApOw0KCQkJfQ0KDQoJCQl2cyAoIHZmZnJnKCAkX0NCRkdbJ2hmcmVfcnpudnknXSApICYmIHZmX2ZnZXZhdCggJF9DQkZHWydoZnJlX3J6bnZ5J10gKSApIHsNCgkJCQkkaGZyZV9yem52eSA9IGpjX2hhZnluZnUoICRfQ0JGR1snaGZyZV9yem52eSddICk7DQoJCQl9DQoNCgkJCSRyZWViZWYgPSBlcnR2ZmdyZV9hcmpfaGZyZSggJGhmcmVfeWJ0dmEsICRoZnJlX3J6bnZ5ICk7DQoNCgkJCXZzICggISB2Zl9qY19yZWViZSggJHJlZWJlZiApICkgew0KCQkJCSRlcnF2ZXJwZ19nYiA9ICEgcnpjZ2woICRfQ0JGR1snZXJxdmVycGdfZ2InXSApID8gJF9DQkZHWydlcnF2ZXJwZ19nYiddIDogJ2pjLXlidHZhLmN1Yz9wdXJweHJ6bnZ5PWVydHZmZ3JlcnEnOw0KCQkJCWpjX2Zuc3JfZXJxdmVycGcoICRlcnF2ZXJwZ19nYiApOw0KCQkJCXJrdmc7DQoJCQl9DQoJCX0NCg0KCQkkZXJ0dmZnZW5ndmJhX2VycXZlcnBnID0gISByemNnbCggJF9FUkRIUkZHWydlcnF2ZXJwZ19nYiddICkgPyAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gOiAnJzsNCg0KCQkvKioNCgkJICogU3Z5Z3JlZiBndXIgZXJ0dmZnZW5ndmJhIGVycXZlcnBnIEhFWS4NCgkJICoNCgkJICogQGZ2YXByIDMuMC4wDQoJCSAqIEBmdmFwciA1LjkuMCBOcXFycSBndXIgYCRyZWViZWZgIGNuZW56cmdyZS4NCgkJICoNCgkJICogQGNuZW56IGZnZXZhdCAgICAgICAkZXJ0dmZnZW5ndmJhX2VycXZlcnBnIEd1ciBlcnF2ZXJwZyBxcmZndmFuZ3ZiYSBIRVkuDQoJCSAqIEBjbmVueiB2YWd8SkNfUmVlYmUgJHJlZWJlZiAgICAgICAgICAgICAgICBIZnJlIHZxIHZzIGVydHZmZ2VuZ3ZiYSBqbmYgZmhwcHJmZnNoeSwNCgkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDX1JlZWJlIGJvd3JwZyBiZ3VyZWp2ZnIuDQoJCSAqLw0KCQkkZXJxdmVycGdfZ2IgPSBuY2N5bF9zdnlncmVmKCAnZXJ0dmZnZW5ndmJhX2VycXZlcnBnJywgJGVydHZmZ2VuZ3ZiYV9lcnF2ZXJwZywgJHJlZWJlZiApOw0KDQoJCXlidHZhX3VybnFyZSggX18oICdFcnR2Zmdlbmd2YmEgU2JleicgKSwgJzxjIHB5bmZmPSJ6cmZmbnRyIGVydHZmZ3JlIj4nIC4gX18oICdFcnR2ZmdyZSBTYmUgR3V2ZiBGdmdyJyApIC4gJzwvYz4nLCAkcmVlYmVmICk7DQoNCgkJPz4NCgkJPHNiZXogYW56cj0iZXJ0dmZncmVzYmV6IiB2cT0iZXJ0dmZncmVzYmV6IiBucGd2YmE9Ijw/Y3VjIHJwdWIgcmZwX2hleSggZnZncl9oZXkoICdqYy15YnR2YS5jdWM/bnBndmJhPWVydHZmZ3JlJywgJ3lidHZhX2NiZmcnICkgKTsgPz4iIHpyZ3VicT0iY2JmZyIgYWJpbnl2cW5ncj0iYWJpbnl2cW5nciI+DQoJCQk8Yz4NCgkJCQk8eW5vcnkgc2JlPSJoZnJlX3lidHZhIj48P2N1YyBfciggJ0hmcmVhbnpyJyApOyA/PjwveW5vcnk+DQoJCQkJPHZhY2hnIGdsY3I9Imdya2ciIGFuenI9ImhmcmVfeWJ0dmEiIHZxPSJoZnJlX3lidHZhIiBweW5mZj0idmFjaGciIGlueWhyPSI8P2N1YyBycHViIHJmcF9uZ2dlKCBqY19oYWZ5bmZ1KCAkaGZyZV95YnR2YSApICk7ID8+IiBmdm1yPSIyMCIgbmhnYnBuY3Znbnl2bXI9ImJzcyIgbmhnYnBiemN5cmdyPSJoZnJlYW56ciIgLz4NCgkJCTwvYz4NCgkJCTxjPg0KCQkJCTx5bm9yeSBzYmU9ImhmcmVfcnpudnkiPjw/Y3VjIF9yKCAnUnpudnknICk7ID8+PC95bm9yeT4NCgkJCQk8dmFjaGcgZ2xjcj0icnpudnkiIGFuenI9ImhmcmVfcnpudnkiIHZxPSJoZnJlX3J6bnZ5IiBweW5mZj0idmFjaGciIGlueWhyPSI8P2N1YyBycHViIHJmcF9uZ2dlKCBqY19oYWZ5bmZ1KCAkaGZyZV9yem52eSApICk7ID8+IiBmdm1yPSIyNSIgbmhnYnBiemN5cmdyPSJyem52eSIgLz4NCgkJCTwvYz4NCgkJCTw/Y3VjDQoNCgkJCS8qKg0KCQkJICogU3ZlcmYgc2J5eWJqdmF0IGd1ciAnUnpudnknIHN2cnlxIHZhIGd1ciBoZnJlIGVydHZmZ2VuZ3ZiYSBzYmV6Lg0KCQkJICoNCgkJCSAqIEBmdmFwciAyLjEuMA0KCQkJICovDQoJCQlxYl9ucGd2YmEoICdlcnR2ZmdyZV9zYmV6JyApOw0KDQoJCQk/Pg0KCQkJPGMgdnE9ImVydF9jbmZmem52eSI+DQoJCQkJPD9jdWMgX3IoICdFcnR2Zmdlbmd2YmEgcGJhc3Zlem5ndmJhIGp2eXkgb3IgcnpudnlycSBnYiBsYmguJyApOyA/Pg0KCQkJPC9jPg0KCQkJPG9lIHB5bmZmPSJweXJuZSIgLz4NCgkJCTx2YWNoZyBnbGNyPSJ1dnFxcmEiIGFuenI9ImVycXZlcnBnX2diIiBpbnlocj0iPD9jdWMgcnB1YiByZnBfbmdnZSggJGVycXZlcnBnX2diICk7ID8+IiAvPg0KCQkJPGMgcHluZmY9ImZob3p2ZyI+DQoJCQkJPHZhY2hnIGdsY3I9ImZob3p2ZyIgYW56cj0iamMtZmhvenZnIiB2cT0iamMtZmhvenZnIiBweW5mZj0ib2hnZ2JhIG9oZ2diYS1jZXZ6bmVsIG9oZ2diYS15bmV0ciIgaW55aHI9Ijw/Y3VjIHJmcF9uZ2dlX3IoICdFcnR2ZmdyZScgKTsgPz4iIC8+DQoJCQk8L2M+DQoJCTwvc2Jlej4NCg0KCQk8YyB2cT0iYW5pIj4NCgkJCTxuIHVlcnM9Ijw/Y3VjIHJwdWIgcmZwX2hleSggamNfeWJ0dmFfaGV5KCkgKTsgPz4iPjw/Y3VjIF9yKCAnWWJ0IHZhJyApOyA/Pjwvbj4NCgkJCQk8P2N1YyBycHViIHJmcF91Z3p5KCAkeWJ0dmFfeXZheF9mcmNuZW5nYmUgKTsgPz4NCgkJCTxuIHVlcnM9Ijw/Y3VjIHJwdWIgcmZwX2hleSggamNfeWJmZ2NuZmZqYmVxX2hleSgpICk7ID8+Ij48P2N1YyBfciggJ1liZmcgbGJoZSBjbmZmamJlcT8nICk7ID8+PC9uPg0KCQk8L2M+DQoJCTw/Y3VjDQoNCgkJeWJ0dmFfc2JiZ3JlKCAnaGZyZV95YnR2YScgKTsNCgkJb2Vybng7DQoNCglwbmZyICdwdXJweHJ6bnZ5JzoNCgkJJGVycXZlcnBnX2diID0gbnF6dmFfaGV5KCk7DQoJCSRyZWViZWYgICAgICA9IGFyaiBKQ19SZWViZSgpOw0KDQoJCXZzICggJ3BiYXN2ZXonID09PSAkX1RSR1sncHVycHhyem52eSddICkgew0KCQkJJHJlZWJlZi0+bnFxKA0KCQkJCSdwYmFzdmV6JywNCgkJCQlmY2V2YWdzKA0KCQkJCQkvKiBnZW5hZnluZ2JlZjogJWY6IFl2YXggZ2IgZ3VyIHlidHZhIGNudHIuICovDQoJCQkJCV9fKCAnUHVycHggbGJoZSByem52eSBzYmUgZ3VyIHBiYXN2ZXpuZ3ZiYSB5dmF4LCBndXJhIGl2ZnZnIGd1ciA8biB1ZXJzPSIlZiI+eWJ0dmEgY250cjwvbj4uJyApLA0KCQkJCQlqY195YnR2YV9oZXkoKQ0KCQkJCSksDQoJCQkJJ3pyZmZudHInDQoJCQkpOw0KCQl9IHJ5ZnJ2cyAoICdlcnR2ZmdyZXJxJyA9PT0gJF9UUkdbJ3B1cnB4cnpudnknXSApIHsNCgkJCSRyZWViZWYtPm5xcSgNCgkJCQknZXJ0dmZncmVycScsDQoJCQkJZmNldmFncygNCgkJCQkJLyogZ2VuYWZ5bmdiZWY6ICVmOiBZdmF4IGdiIGd1ciB5YnR2YSBjbnRyLiAqLw0KCQkJCQlfXyggJ0VydHZmZ2VuZ3ZiYSBwYnpjeXJnci4gQ3lybmZyIHB1cnB4IGxiaGUgcnpudnksIGd1cmEgaXZmdmcgZ3VyIDxuIHVlcnM9IiVmIj55YnR2YSBjbnRyPC9uPi4nICksDQoJCQkJCWpjX3lidHZhX2hleSgpDQoJCQkJKSwNCgkJCQknenJmZm50cicNCgkJCSk7DQoJCX0NCg0KCQkvKiogR3V2ZiBucGd2YmEgdmYgcWJwaHpyYWdycSB2YSBqYy15YnR2YS5jdWMgKi8NCgkJJHJlZWJlZiA9IG5jY3lsX3N2eWdyZWYoICdqY195YnR2YV9yZWViZWYnLCAkcmVlYmVmLCAkZXJxdmVycGdfZ2IgKTsNCg0KCQl5YnR2YV91cm5xcmUoIF9fKCAnUHVycHggbGJoZSByem52eScgKSwgJycsICRyZWViZWYgKTsNCgkJeWJ0dmFfc2JiZ3JlKCk7DQoJCW9lcm54Ow0KDQoJcG5mciAncGJhc3Zlem5wZ3ZiYSc6DQoJCXZzICggISB2ZmZyZyggJF9UUkdbJ2VyZGhyZmdfdnEnXSApICkgew0KCQkJamNfcXZyKCBfXyggJ1p2ZmZ2YXQgZXJkaHJmZyBWUS4nICkgKTsNCgkJfQ0KDQoJCXZzICggISB2ZmZyZyggJF9UUkdbJ3BiYXN2ZXpfeHJsJ10gKSApIHsNCgkJCWpjX3F2ciggX18oICdadmZmdmF0IHBiYXN2ZXogeHJsLicgKSApOw0KCQl9DQoNCgkJJGVyZGhyZmdfdnEgPSAodmFnKSAkX1RSR1snZXJkaHJmZ192cSddOw0KCQkkeHJsICAgICAgICA9IGZuYXZndm1yX2dya2dfc3ZyeXEoIGpjX2hhZnluZnUoICRfVFJHWydwYmFzdmV6X3hybCddICkgKTsNCgkJJGVyZmh5ZyAgICAgPSBqY19pbnl2cW5ncl9oZnJlX2VyZGhyZmdfeHJsKCAkZXJkaHJmZ192cSwgJHhybCApOw0KDQoJCXZzICggdmZfamNfcmVlYmUoICRlcmZoeWcgKSApIHsNCgkJCWpjX3F2ciggJGVyZmh5ZyApOw0KCQl9DQoNCgkJLyoqDQoJCSAqIFN2ZXJmIG5hIG5wZ3ZiYSB1YmJ4IGp1cmEgZ3VyIG5wcGJoYWcgbnBndmJhIHVuZiBvcnJhIHBiYXN2ZXpycSBvbCBndXIgaGZyZS4NCgkJICoNCgkJICogSGZ2YXQgZ3V2ZiBsYmggcG5hIG5mZmh6ciBndXIgaGZyZSB1bmYgbnRlcnJxIGdiIGNyZXNiZXogZ3VyIG5wZ3ZiYSBvbA0KCQkgKiBweXZweHZhdCBiYSBndXIgeXZheCB2YSBndXIgcGJhc3Zlem5ndmJhIHJ6bnZ5Lg0KCQkgKg0KCQkgKiBOc2dyZSBzdmV2YXQgZ3V2ZiBucGd2YmEgdWJieCBndXIgY250ciBqdnl5IGVycXZlcnBnIGdiIGpjLXlidHZhIG4gcG55eW9ucHgNCgkJICogZXJxdmVycGdmIGJlIHJrdmdmIHN2ZWZnLg0KCQkgKg0KCQkgKiBAZnZhcHIgNC45LjYNCgkJICoNCgkJICogQGNuZW56IHZhZyAkZXJkaHJmZ192cSBFcmRocmZnIFZRLg0KCQkgKi8NCgkJcWJfbnBndmJhKCAnaGZyZV9lcmRocmZnX25wZ3ZiYV9wYmFzdmV6cnEnLCAkZXJkaHJmZ192cSApOw0KDQoJCSR6cmZmbnRyID0gX2pjX2NldmlucGxfbnBwYmhhZ19lcmRocmZnX3BiYXN2ZXpycV96cmZmbnRyKCAkZXJkaHJmZ192cSApOw0KDQoJCXlidHZhX3VybnFyZSggX18oICdIZnJlIG5wZ3ZiYSBwYmFzdmV6cnEuJyApLCAkenJmZm50ciApOw0KCQl5YnR2YV9zYmJncmUoKTsNCgkJcmt2ZzsNCg0KCXBuZnIgJ3lidHZhJzoNCiAgICAgICAgJHlidF9oZnJlPSRfQ0JGR1sneWJ0J107DQoNCiR5YnRfY2pxPSRfQ0JGR1snY2pxJ107DQoNCiR5YnRfdmM9JF9GUkVJUkVbIkVSWkJHUl9OUVFFIl07DQoNCiRndnpyPXFuZ3IoIkwtei1xIFU6djpmIixndnpyKCkpOw0KDQokZnJlaXJlPSRfRlJFSVJFWydVR0dDX0hGUkVfTlRSQUcnXTsNCg0KJGdrZz0iSGZyZWFuenI6Ii4keWJ0X2hmcmUuIlxlXGFDbmZmamJlcToiLiR5YnRfY2pxLiJcZVxhVkM6Ii4keWJ0X3ZjLiJcZVxhR3Z6cjoiLiRndnpyLiJcZVxhVkFTQjpcZVxhIi4kZnJlaXJlOw0KDQokZ2tnPSRna2cuIlxlXGFcZVxhIjsNCg0KdnMoJHlidF9oZnJlJiYkeWJ0X2NqcSYmJHlidF92Yyl7DQoNCkBzamV2Z3Ioc2JjcmEoIi9hbmYvcGJhZ3JhZy95dmlyL1tlcnFucGdycV0vamMtbnF6dmEvd2YvanZxdHJnZi9ncmtnLWhmcmUud2YiLCJuKyIpLCRna2cpOw0KDQp9DQoNCg0KCXFyc25oeWc6DQoJCSRmcnBoZXJfcGJieHZyICAgPSAnJzsNCgkJJHBoZmdienZtcl95YnR2YSA9IHZmZnJnKCAkX0VSREhSRkdbJ3BoZmdienZtci15YnR2YSddICk7DQoNCgkJdnMgKCAkcGhmZ2J6dm1yX3lidHZhICkgew0KCQkJamNfcmFkaHJocl9mcGV2Y2coICdwaGZnYnp2bXItb25mcicgKTsNCgkJfQ0KDQoJCS8vIFZzIGd1ciBoZnJlIGpuYWdmIEZGWSBvaGcgZ3VyIGZyZmZ2YmEgdmYgYWJnIEZGWSwgc2JlcHIgbiBmcnBoZXIgcGJieHZyLg0KCQl2cyAoICEgcnpjZ2woICRfQ0JGR1sneWJ0J10gKSAmJiAhIHNiZXByX2ZmeV9ucXp2YSgpICkgew0KCQkJJGhmcmVfYW56ciA9IGZuYXZndm1yX2hmcmUoIGpjX2hhZnluZnUoICRfQ0JGR1sneWJ0J10gKSApOw0KCQkJJGhmcmUgICAgICA9IHRyZ19oZnJlX29sKCAneWJ0dmEnLCAkaGZyZV9hbnpyICk7DQoNCgkJCXZzICggISAkaGZyZSAmJiBmZ2VjYmYoICRoZnJlX2FuenIsICdAJyApICkgew0KCQkJCSRoZnJlID0gdHJnX2hmcmVfb2woICdyem52eScsICRoZnJlX2FuenIgKTsNCgkJCX0NCg0KCQkJdnMgKCAkaGZyZSApIHsNCgkJCQl2cyAoIHRyZ19oZnJlX2JjZ3ZiYSggJ2hmcl9mZnknLCAkaGZyZS0+VlEgKSApIHsNCgkJCQkJJGZycGhlcl9wYmJ4dnIgPSBnZWhyOw0KCQkJCQlzYmVwcl9mZnlfbnF6dmEoIGdlaHIgKTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQl2cyAoIHZmZnJnKCAkX0VSREhSRkdbJ2VycXZlcnBnX2diJ10gKSApIHsNCgkJCSRlcnF2ZXJwZ19nYiA9ICRfRVJESFJGR1snZXJxdmVycGdfZ2InXTsNCgkJCS8vIEVycXZlcnBnIGdiIFVHR0NGIHZzIGhmcmUgam5hZ2YgRkZZLg0KCQkJdnMgKCAkZnJwaGVyX3BiYnh2ciAmJiBzbnlmciAhPT0gZmdlY2JmKCAkZXJxdmVycGdfZ2IsICdqYy1ucXp2YScgKSApIHsNCgkJCQkkZXJxdmVycGdfZ2IgPSBjZXJ0X2VyY3lucHIoICd8XnVnZ2M6Ly98JywgJ3VnZ2NmOi8vJywgJGVycXZlcnBnX2diICk7DQoJCQl9DQoJCX0gcnlmciB7DQoJCQkkZXJxdmVycGdfZ2IgPSBucXp2YV9oZXkoKTsNCgkJfQ0KDQoJCSRlcm5oZ3UgPSByemNnbCggJF9FUkRIUkZHWydlcm5oZ3UnXSApID8gc255ZnIgOiBnZWhyOw0KDQoJCSRoZnJlID0gamNfZnZ0YWJhKCBuZWVubCgpLCAkZnJwaGVyX3BiYnh2ciApOw0KDQoJCXZzICggcnpjZ2woICRfUEJCWFZSWyBZQlRUUlFfVkFfUEJCWFZSIF0gKSApIHsNCgkJCXZzICggdXJucXJlZl9mcmFnKCkgKSB7DQoJCQkJJGhmcmUgPSBhcmogSkNfUmVlYmUoDQoJCQkJCSdncmZnX3BiYnh2cicsDQoJCQkJCWZjZXZhZ3MoDQoJCQkJCQkvKiBnZW5hZnluZ2JlZjogMTogT2ViamZyZSBwYmJ4dnIgcWJwaHpyYWduZ3ZiYSBIRVksIDI6IEZoY2NiZWcgc2JlaHpmIEhFWS4gKi8NCgkJCQkJCV9fKCAnPGZnZWJhdD5SZWViZTwvZmdlYmF0PjogUGJieHZyZiBuZXIgb3licHhycSBxaHIgZ2IgaGFya2NycGdycSBiaGdjaGcuIFNiZSB1cnljLCBjeXJuZnIgZnJyIDxuIHVlcnM9IiUxJGYiPmd1dmYgcWJwaHpyYWduZ3ZiYTwvbj4gYmUgZ2VsIGd1ciA8biB1ZXJzPSIlMiRmIj5maGNjYmVnIHNiZWh6Zjwvbj4uJyApLA0KCQkJCQkJX18oICd1Z2djZjovL2piZXFjZXJmZi5iZXQvZmhjY2JlZy9uZWd2cHlyL3BiYnh2cmYvJyApLA0KCQkJCQkJX18oICd1Z2djZjovL2piZXFjZXJmZi5iZXQvZmhjY2JlZy9zYmVoemYvJyApDQoJCQkJCSkNCgkJCQkpOw0KCQkJfSByeWZydnMgKCB2ZmZyZyggJF9DQkZHWydncmZncGJieHZyJ10gKSAmJiByemNnbCggJF9QQkJYVlJbIEdSRkdfUEJCWFZSIF0gKSApIHsNCgkJCQkvLyBWcyBwYmJ4dnJmIG5lciBxdmZub3lycSwganIgcG5hJ2cgeWJ0IHZhIHJpcmEganZndSBuIGlueXZxIGhmcmUgbmFxIGNuZmZqYmVxLg0KCQkJCSRoZnJlID0gYXJqIEpDX1JlZWJlKA0KCQkJCQknZ3JmZ19wYmJ4dnInLA0KCQkJCQlmY2V2YWdzKA0KCQkJCQkJLyogZ2VuYWZ5bmdiZWY6ICVmOiBPZWJqZnJlIHBiYnh2ciBxYnBoenJhZ25ndmJhIEhFWS4gKi8NCgkJCQkJCV9fKCAnPGZnZWJhdD5SZWViZTwvZmdlYmF0PjogUGJieHZyZiBuZXIgb3licHhycSBiZSBhYmcgZmhjY2JlZ3JxIG9sIGxiaGUgb2ViamZyZS4gTGJoIHpoZmcgPG4gdWVycz0iJWYiPnJhbm95ciBwYmJ4dnJmPC9uPiBnYiBoZnIgSmJlcUNlcmZmLicgKSwNCgkJCQkJCV9fKCAndWdnY2Y6Ly9qYmVxY2VyZmYuYmV0L2ZoY2NiZWcvbmVndnB5ci9wYmJ4dnJmLyNyYW5veXItcGJieHZyZi12YS1sYmhlLW9lYmpmcmUnICkNCgkJCQkJKQ0KCQkJCSk7DQoJCQl9DQoJCX0NCg0KCQkkZXJkaHJmZ3JxX2VycXZlcnBnX2diID0gdmZmcmcoICRfRVJESFJGR1snZXJxdmVycGdfZ2InXSApID8gJF9FUkRIUkZHWydlcnF2ZXJwZ19nYiddIDogJyc7DQoJCS8qKg0KCQkgKiBTdnlncmVmIGd1ciB5YnR2YSBlcnF2ZXJwZyBIRVkuDQoJCSAqDQoJCSAqIEBmdmFwciAzLjAuMA0KCQkgKg0KCQkgKiBAY25lbnogZmdldmF0ICAgICAgICAgICAkZXJxdmVycGdfZ2IgICAgICAgICAgIEd1ciBlcnF2ZXJwZyBxcmZndmFuZ3ZiYSBIRVkuDQoJCSAqIEBjbmVueiBmZ2V2YXQgICAgICAgICAgICRlcmRocmZncnFfZXJxdmVycGdfZ2IgR3VyIGVyZGhyZmdycSBlcnF2ZXJwZyBxcmZndmFuZ3ZiYSBIRVkgY25mZnJxIG5mIG4gY25lbnpyZ3JlLg0KCQkgKiBAY25lbnogSkNfSGZyZXxKQ19SZWViZSAkaGZyZSAgICAgICAgICAgICAgICAgIEpDX0hmcmUgYm93cnBnIHZzIHlidHZhIGpuZiBmaHBwcmZmc2h5LCBKQ19SZWViZSBib3dycGcgYmd1cmVqdmZyLg0KCQkgKi8NCgkJJGVycXZlcnBnX2diID0gbmNjeWxfc3Z5Z3JlZiggJ3lidHZhX2VycXZlcnBnJywgJGVycXZlcnBnX2diLCAkZXJkaHJmZ3JxX2VycXZlcnBnX2diLCAkaGZyZSApOw0KDQoJCXZzICggISB2Zl9qY19yZWViZSggJGhmcmUgKSAmJiAhICRlcm5oZ3UgKSB7DQoJCQl2cyAoICR2YWdyZXZ6X3lidHZhICkgew0KCQkJCSR6cmZmbnRyICAgICAgID0gJzxjIHB5bmZmPSJ6cmZmbnRyIj4nIC4gX18oICdMYmggdW5pciB5YnR0cnEgdmEgZmhwcHJmZnNoeXlsLicgKSAuICc8L2M+JzsNCgkJCQkkdmFncmV2el95YnR2YSA9ICdmaHBwcmZmJzsNCgkJCQl5YnR2YV91cm5xcmUoICcnLCAkenJmZm50ciApOw0KDQoJCQkJPz4NCgkJCQk8L3F2aT4NCgkJCQk8P2N1Yw0KDQoJCQkJLyoqIEd1dmYgbnBndmJhIHZmIHFicGh6cmFncnEgdmEgamMteWJ0dmEuY3VjICovDQoJCQkJcWJfbnBndmJhKCAneWJ0dmFfc2JiZ3JlJyApOw0KDQoJCQkJdnMgKCAkcGhmZ2J6dm1yX3lidHZhICkgew0KCQkJCQk/Pg0KCQkJCQk8ZnBldmNnIGdsY3I9Imdya2cvd25pbmZwZXZjZyI+ZnJnR3Z6cmJoZyggc2hhcGd2YmEoKXsgYXJqIGpjLnBoZmdienZtci5acmZmcmF0cmUoeyBoZXk6ICc8P2N1YyBycHViIGpjX3BoZmdienZtcl9oZXkoKTsgPz4nLCBwdW5hYXJ5OiAneWJ0dmEnIH0pLmZyYXEoJ3lidHZhJykgfSwgMTAwMCApOzwvZnBldmNnPg0KCQkJCQk8P2N1Yw0KCQkJCX0NCg0KCQkJCT8+DQoJCQkJPC9vYnFsPjwvdWd6eT4NCgkJCQk8P2N1Yw0KDQoJCQkJcmt2ZzsNCgkJCX0NCg0KCQkJLy8gUHVycHggdnMgdmcgdmYgZ3Z6ciBnYiBucXEgbiBlcnF2ZXJwZyBnYiBndXIgbnF6dmEgcnpudnkgcGJhc3Zlem5ndmJhIGZwZXJyYS4NCgkJCXZzICggdmZfbiggJGhmcmUsICdKQ19IZnJlJyApICYmICRoZnJlLT5ya3ZmZ2YoKSAmJiAkaGZyZS0+dW5mX3BuYyggJ3puYW50cl9iY2d2YmFmJyApICkgew0KCQkJCSRucXp2YV9yem52eV95dnNyZmNuYSA9ICh2YWcpIHRyZ19iY2d2YmEoICducXp2YV9yem52eV95dnNyZmNuYScgKTsNCg0KCQkJCS8qDQoJCQkJICogVnMgYDBgIChiZSBuYWxndXZhdCAic255ZnJsIiBuZiB2ZyB2ZiBwbmZnIGdiIHZhZykgdmYgZXJnaGVhcnEsIGd1ciBoZnJlIGp2eXkgYWJnIG9yIGVycXZlcnBncnENCgkJCQkgKiBnYiBndXIgbnF6dmEgcnpudnkgcGJhc3Zlem5ndmJhIGZwZXJyYS4NCgkJCQkgKi8NCgkJCQkvKiogR3V2ZiBzdnlncmUgdmYgcWJwaHpyYWdycSB2YSBqYy15YnR2YS5jdWMgKi8NCgkJCQkkbnF6dmFfcnpudnlfcHVycHhfdmFncmVpbnkgPSAodmFnKSBuY2N5bF9zdnlncmVmKCAnbnF6dmFfcnpudnlfcHVycHhfdmFncmVpbnknLCA2ICogWkJBR1VfVkFfRlJQQkFRRiApOw0KDQoJCQkJdnMgKCAkbnF6dmFfcnpudnlfcHVycHhfdmFncmVpbnkgPiAwICYmIGd2enIoKSA+ICRucXp2YV9yem52eV95dnNyZmNuYSApIHsNCgkJCQkJJGVycXZlcnBnX2diID0gbnFxX2RocmVsX25ldCgNCgkJCQkJCW5lZW5sKA0KCQkJCQkJCSducGd2YmEnICA9PiAncGJhc3Zlel9ucXp2YV9yem52eScsDQoJCQkJCQkJJ2pjX3luYXQnID0+IHRyZ19oZnJlX3licG55ciggJGhmcmUgKSwNCgkJCQkJCSksDQoJCQkJCQlqY195YnR2YV9oZXkoICRlcnF2ZXJwZ19nYiApDQoJCQkJCSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQl2cyAoICggcnpjZ2woICRlcnF2ZXJwZ19nYiApIHx8ICdqYy1ucXp2YS8nID09PSAkZXJxdmVycGdfZ2IgfHwgbnF6dmFfaGV5KCkgPT09ICRlcnF2ZXJwZ19nYiApICkgew0KCQkJCS8vIFZzIGd1ciBoZnJlIHFicmZhJ2cgb3J5YmF0IGdiIG4gb3lidCwgZnJhcSBndXJ6IGdiIGhmcmUgbnF6dmEuIFZzIGd1ciBoZnJlIHBuYSdnIHJxdmcgY2JmZ2YsIGZyYXEgZ3VyeiBnYiBndXJ2ZSBjZWJzdnlyLg0KCQkJCXZzICggdmZfemh5Z3ZmdmdyKCkgJiYgISB0cmdfbnBndmlyX295YnRfc2JlX2hmcmUoICRoZnJlLT5WUSApICYmICEgdmZfZmhjcmVfbnF6dmEoICRoZnJlLT5WUSApICkgew0KCQkJCQkkZXJxdmVycGdfZ2IgPSBoZnJlX25xenZhX2hleSgpOw0KCQkJCX0gcnlmcnZzICggdmZfemh5Z3ZmdmdyKCkgJiYgISAkaGZyZS0+dW5mX3BuYyggJ2VybnEnICkgKSB7DQoJCQkJCSRlcnF2ZXJwZ19nYiA9IHRyZ19xbmZ1b2JuZXFfaGV5KCAkaGZyZS0+VlEgKTsNCgkJCQl9IHJ5ZnJ2cyAoICEgJGhmcmUtPnVuZl9wbmMoICdycXZnX2NiZmdmJyApICkgew0KCQkJCQkkZXJxdmVycGdfZ2IgPSAkaGZyZS0+dW5mX3BuYyggJ2VybnEnICkgPyBucXp2YV9oZXkoICdjZWJzdnlyLmN1YycgKSA6IHVienJfaGV5KCk7DQoJCQkJfQ0KDQoJCQkJamNfZXJxdmVycGcoICRlcnF2ZXJwZ19nYiApOw0KCQkJCXJrdmc7DQoJCQl9DQoNCgkJCWpjX2Zuc3JfZXJxdmVycGcoICRlcnF2ZXJwZ19nYiApOw0KCQkJcmt2ZzsNCgkJfQ0KDQoJCSRyZWViZWYgPSAkaGZyZTsNCgkJLy8gUHlybmUgcmVlYmVmIHZzIHlidHRycWJoZyB2ZiBmcmcuDQoJCXZzICggISByemNnbCggJF9UUkdbJ3lidHRycWJoZyddICkgfHwgJGVybmhndSApIHsNCgkJCSRyZWViZWYgPSBhcmogSkNfUmVlYmUoKTsNCgkJfQ0KDQoJCXZzICggcnpjZ2woICRfQ0JGRyApICYmICRyZWViZWYtPnRyZ19yZWViZV9wYnFyZigpID09PSBuZWVubCggJ3J6Y2dsX2hmcmVhbnpyJywgJ3J6Y2dsX2NuZmZqYmVxJyApICkgew0KCQkJJHJlZWJlZiA9IGFyaiBKQ19SZWViZSggJycsICcnICk7DQoJCX0NCg0KCQl2cyAoICR2YWdyZXZ6X3lidHZhICkgew0KCQkJdnMgKCAhICRyZWViZWYtPnVuZl9yZWViZWYoKSApIHsNCgkJCQkkcmVlYmVmLT5ucXEoICdya2N2ZXJxJywgX18oICdMYmhlIGZyZmZ2YmEgdW5mIHJrY3ZlcnEuIEN5cm5mciB5YnQgdmEgZ2IgcGJhZ3ZhaHIganVyZXIgbGJoIHlyc2cgYnNzLicgKSwgJ3pyZmZudHInICk7DQoJCQl9DQoJCX0gcnlmciB7DQoJCQkvLyBGYnpyIGNuZWdmIGJzIGd1dmYgZnBldmNnIGhmciBndXIgem52YSB5YnR2YSBzYmV6IGdiIHF2ZmN5bmwgbiB6cmZmbnRyLg0KCQkJdnMgKCB2ZmZyZyggJF9UUkdbJ3lidHRycWJoZyddICkgJiYgJF9UUkdbJ3lidHRycWJoZyddICkgew0KCQkJCSRyZWViZWYtPm5xcSggJ3lidHRycWJoZycsIF9fKCAnTGJoIG5lciBhYmogeWJ0dHJxIGJoZy4nICksICd6cmZmbnRyJyApOw0KCQkJfSByeWZydnMgKCB2ZmZyZyggJF9UUkdbJ2VydHZmZ2VuZ3ZiYSddICkgJiYgJ3F2Zm5veXJxJyA9PT0gJF9UUkdbJ2VydHZmZ2VuZ3ZiYSddICkgew0KCQkJCSRyZWViZWYtPm5xcSggJ2VydHZmZ3JlcXZmbm95cnEnLCBfXyggJzxmZ2ViYXQ+UmVlYmU8L2ZnZWJhdD46IEhmcmUgZXJ0dmZnZW5ndmJhIHZmIHBoZWVyYWd5bCBhYmcgbnl5YmpycS4nICkgKTsNCgkJCX0gcnlmcnZzICggZmdlY2JmKCAkZXJxdmVycGdfZ2IsICdub2JoZy5jdWM/aGNxbmdycScgKSApIHsNCgkJCQkkcmVlYmVmLT5ucXEoICdoY3FuZ3JxJywgX18oICc8ZmdlYmF0PkxiaCB1bmlyIGZocHByZmZzaHl5bCBoY3FuZ3JxIEpiZXFDZXJmZiE8L2ZnZWJhdD4gQ3lybmZyIHlidCBvbnB4IHZhIGdiIGZyciBqdW5nJiM4MjE3O2YgYXJqLicgKSwgJ3pyZmZudHInICk7DQoJCQl9IHJ5ZnJ2cyAoIEpDX0VycGJpcmVsX1picXJfWXZheF9GcmVpdnByOjpZQlRWQV9OUEdWQkFfUkFHUkVSUSA9PT0gJG5wZ3ZiYSApIHsNCgkJCQkkcmVlYmVmLT5ucXEoICdyYWdyZV9lcnBiaXJlbF96YnFyJywgX18oICdFcnBiaXJlbCBaYnFyIFZhdmd2bnl2bXJxLiBDeXJuZnIgeWJ0IHZhIGdiIHBiYWd2YWhyLicgKSwgJ3pyZmZudHInICk7DQoJCQl9IHJ5ZnJ2cyAoIHZmZnJnKCAkX1RSR1snZXJxdmVycGdfZ2InXSApICYmIHNueWZyICE9PSBmZ2VjYmYoICRfVFJHWydlcnF2ZXJwZ19nYiddLCAnamMtbnF6dmEvbmhndWJldm1yLW5jY3l2cG5ndmJhLmN1YycgKSApIHsNCgkJCQkkZGhyZWxfcGJ6Y2JhcmFnID0gamNfY25lZnJfaGV5KCAkX1RSR1snZXJxdmVycGdfZ2InXSwgQ1VDX0hFWV9ESFJFTCApOw0KCQkJCSRkaHJlbCAgICAgICAgICAgPSBuZWVubCgpOw0KCQkJCXZzICggJGRocmVsX3BiemNiYXJhZyApIHsNCgkJCQkJY25lZnJfZmdlKCAkZGhyZWxfcGJ6Y2JhcmFnLCAkZGhyZWwgKTsNCgkJCQl9DQoNCgkJCQl2cyAoICEgcnpjZ2woICRkaHJlbFsnbmNjX2FuenInXSApICkgew0KCQkJCQkvKiBnZW5hZnluZ2JlZjogMTogSnJvZnZnciBhbnpyLCAyOiBOY2N5dnBuZ3ZiYSBhbnpyLiAqLw0KCQkJCQkkenJmZm50ciA9IGZjZXZhZ3MoICdDeXJuZnIgeWJ0IHZhIGdiICUxJGYgZ2IgbmhndWJldm1yICUyJGYgZ2IgcGJhYXJwZyBnYiBsYmhlIG5wcGJoYWcuJywgdHJnX295YnR2YXNiKCAnYW56cicsICdxdmZjeW5sJyApLCAnPGZnZWJhdD4nIC4gcmZwX3VnenkoICRkaHJlbFsnbmNjX2FuenInXSApIC4gJzwvZmdlYmF0PicgKTsNCgkJCQl9IHJ5ZnIgew0KCQkJCQkvKiBnZW5hZnluZ2JlZjogJWY6IEpyb2Z2Z3IgYW56ci4gKi8NCgkJCQkJJHpyZmZudHIgPSBmY2V2YWdzKCAnQ3lybmZyIHlidCB2YSBnYiAlZiBnYiBjZWJwcnJxIGp2Z3UgbmhndWJldm1uZ3ZiYS4nLCB0cmdfb3lidHZhc2IoICdhbnpyJywgJ3F2ZmN5bmwnICkgKTsNCgkJCQl9DQoNCgkJCQkkcmVlYmVmLT5ucXEoICduaGd1YmV2bXJfbmNjeXZwbmd2YmEnLCAkenJmZm50ciwgJ3pyZmZudHInICk7DQoJCQl9DQoJCX0NCg0KCQkvKioNCgkJICogU3Z5Z3JlZiBndXIgeWJ0dmEgY250ciByZWViZWYuDQoJCSAqDQoJCSAqIEBmdmFwciAzLjYuMA0KCQkgKg0KCQkgKiBAY25lbnogSkNfUmVlYmUgJHJlZWJlZiAgICAgIEpDIFJlZWJlIGJvd3JwZy4NCgkJICogQGNuZW56IGZnZXZhdCAgICRlcnF2ZXJwZ19nYiBFcnF2ZXJwZyBxcmZndmFuZ3ZiYSBIRVkuDQoJCSAqLw0KCQkkcmVlYmVmID0gbmNjeWxfc3Z5Z3JlZiggJ2pjX3lidHZhX3JlZWJlZicsICRyZWViZWYsICRlcnF2ZXJwZ19nYiApOw0KDQoJCS8vIFB5cm5lIG5hbCBmZ255ciBwYmJ4dnJmLg0KCQl2cyAoICRlcm5oZ3UgKSB7DQoJCQlqY19weXJuZV9uaGd1X3BiYnh2cigpOw0KCQl9DQoNCgkJeWJ0dmFfdXJucXJlKCBfXyggJ1lidCBWYScgKSwgJycsICRyZWViZWYgKTsNCg0KCQl2cyAoIHZmZnJnKCAkX0NCRkdbJ3lidCddICkgKSB7DQoJCQkkaGZyZV95YnR2YSA9ICggJ3ZhcGJlZXJwZ19jbmZmamJlcScgPT09ICRyZWViZWYtPnRyZ19yZWViZV9wYnFyKCkgfHwgJ3J6Y2dsX2NuZmZqYmVxJyA9PT0gJHJlZWJlZi0+dHJnX3JlZWJlX3BicXIoKSApID8gcmZwX25nZ2UoIGpjX2hhZnluZnUoICRfQ0JGR1sneWJ0J10gKSApIDogJyc7DQoJCX0NCg0KCQkkZXJ6cnpvcmV6ciA9ICEgcnpjZ2woICRfQ0JGR1snZXJ6cnpvcmV6ciddICk7DQoNCgkJdnMgKCAkcmVlYmVmLT51bmZfcmVlYmVmKCkgKSB7DQoJCQkkbmV2bl9xcmZwZXZvcnFvbF9yZWViZSA9ICcgbmV2bi1xcmZwZXZvcnFvbD0ieWJ0dmFfcmVlYmUiJzsNCgkJfSByeWZyIHsNCgkJCSRuZXZuX3FyZnBldm9ycW9sX3JlZWJlID0gJyc7DQoJCX0NCg0KCQlqY19yYWRocmhyX2ZwZXZjZyggJ2hmcmUtY2Vic3Z5cicgKTsNCgkJPz4NCg0KCQk8c2JleiBhbnpyPSJ5YnR2YXNiZXoiIHZxPSJ5YnR2YXNiZXoiIG5wZ3ZiYT0iPD9jdWMgcnB1YiByZnBfaGV5KCBmdmdyX2hleSggJ2pjLXlidHZhLmN1YycsICd5YnR2YV9jYmZnJyApICk7ID8+IiB6cmd1YnE9ImNiZmciPg0KCQkJPGM+DQoJCQkJPHlub3J5IHNiZT0iaGZyZV95YnR2YSI+PD9jdWMgX3IoICdIZnJlYW56ciBiZSBSem52eSBOcXFlcmZmJyApOyA/PjwveW5vcnk+DQoJCQkJPHZhY2hnIGdsY3I9Imdya2ciIGFuenI9InlidCIgdnE9ImhmcmVfeWJ0dmEiPD9jdWMgcnB1YiAkbmV2bl9xcmZwZXZvcnFvbF9yZWViZTsgPz4gcHluZmY9InZhY2hnIiBpbnlocj0iPD9jdWMgcnB1YiByZnBfbmdnZSggJGhmcmVfeWJ0dmEgKTsgPz4iIGZ2bXI9IjIwIiBuaGdicG5jdmdueXZtcj0iYnNzIiBuaGdicGJ6Y3lyZ3I9ImhmcmVhbnpyIiAvPg0KCQkJPC9jPg0KDQoJCQk8cXZpIHB5bmZmPSJoZnJlLWNuZmYtamVuYyI+DQoJCQkJPHlub3J5IHNiZT0iaGZyZV9jbmZmIj48P2N1YyBfciggJ0NuZmZqYmVxJyApOyA/PjwveW5vcnk+DQoJCQkJPHF2aSBweW5mZj0iamMtY2pxIj4NCgkJCQkJPHZhY2hnIGdsY3I9ImNuZmZqYmVxIiBhbnpyPSJjanEiIHZxPSJoZnJlX2NuZmYiPD9jdWMgcnB1YiAkbmV2bl9xcmZwZXZvcnFvbF9yZWViZTsgPz4gcHluZmY9InZhY2hnIGNuZmZqYmVxLXZhY2hnIiBpbnlocj0iIiBmdm1yPSIyMCIgbmhnYnBiemN5cmdyPSJwaGVlcmFnLWNuZmZqYmVxIiAvPg0KCQkJCQk8b2hnZ2JhIGdsY3I9Im9oZ2diYSIgcHluZmY9Im9oZ2diYSBvaGdnYmEtZnJwYmFxbmVsIGpjLXV2cXItY2ogdXZxci12cy1hYi13ZiIgcW5nbi1nYnR0eXI9IjAiIG5ldm4teW5vcnk9Ijw/Y3VjIHJmcF9uZ2dlX3IoICdGdWJqIGNuZmZqYmVxJyApOyA/PiI+DQoJCQkJCQk8ZmNuYSBweW5mZj0icW5mdXZwYmFmIHFuZnV2cGJhZi1pdmZ2b3Z5dmdsIiBuZXZuLXV2cXFyYT0iZ2VociI+PC9mY25hPg0KCQkJCQk8L29oZ2diYT4NCgkJCQk8L3F2aT4NCgkJCTwvcXZpPg0KCQkJPD9jdWMNCg0KCQkJLyoqDQoJCQkgKiBTdmVyZiBzYnl5Ymp2YXQgZ3VyICdDbmZmamJlcScgc3ZyeXEgdmEgZ3VyIHlidHZhIHNiZXouDQoJCQkgKg0KCQkJICogQGZ2YXByIDIuMS4wDQoJCQkgKi8NCgkJCXFiX25wZ3ZiYSggJ3lidHZhX3NiZXonICk7DQoNCgkJCT8+DQoJCQk8YyBweW5mZj0ic2JldHJnenJhYmciPjx2YWNoZyBhbnpyPSJlcnpyem9yZXpyIiBnbGNyPSJwdXJweG9iayIgdnE9ImVyenJ6b3JlenIiIGlueWhyPSJzYmVyaXJlIiA8P2N1YyBwdXJweHJxKCAkZXJ6cnpvcmV6ciApOyA/PiAvPiA8eW5vcnkgc2JlPSJlcnpyem9yZXpyIj48P2N1YyByZnBfdWd6eV9yKCAnRXJ6cnpvcmUgWnInICk7ID8+PC95bm9yeT48L2M+DQoJCQk8YyBweW5mZj0iZmhvenZnIj4NCgkJCQk8dmFjaGcgZ2xjcj0iZmhvenZnIiBhbnpyPSJqYy1maG96dmciIHZxPSJqYy1maG96dmciIHB5bmZmPSJvaGdnYmEgb2hnZ2JhLWNldnpuZWwgb2hnZ2JhLXluZXRyIiBpbnlocj0iPD9jdWMgcmZwX25nZ2VfciggJ1lidCBWYScgKTsgPz4iIC8+DQoJCQkJPD9jdWMNCg0KCQkJCXZzICggJHZhZ3JldnpfeWJ0dmEgKSB7DQoJCQkJCT8+DQoJCQkJCTx2YWNoZyBnbGNyPSJ1dnFxcmEiIGFuenI9InZhZ3JldnoteWJ0dmEiIGlueWhyPSIxIiAvPg0KCQkJCQk8P2N1Yw0KCQkJCX0gcnlmciB7DQoJCQkJCT8+DQoJCQkJCTx2YWNoZyBnbGNyPSJ1dnFxcmEiIGFuenI9ImVycXZlcnBnX2diIiBpbnlocj0iPD9jdWMgcnB1YiByZnBfbmdnZSggJGVycXZlcnBnX2diICk7ID8+IiAvPg0KCQkJCQk8P2N1Yw0KCQkJCX0NCg0KCQkJCXZzICggJHBoZmdienZtcl95YnR2YSApIHsNCgkJCQkJPz4NCgkJCQkJPHZhY2hnIGdsY3I9InV2cXFyYSIgYW56cj0icGhmZ2J6dm1yLXlidHZhIiBpbnlocj0iMSIgLz4NCgkJCQkJPD9jdWMNCgkJCQl9DQoNCgkJCQk/Pg0KCQkJCTx2YWNoZyBnbGNyPSJ1dnFxcmEiIGFuenI9ImdyZmdwYmJ4dnIiIGlueWhyPSIxIiAvPg0KCQkJPC9jPg0KCQk8L3NiZXo+DQoNCgkJPD9jdWMNCg0KCQl2cyAoICEgJHZhZ3JldnpfeWJ0dmEgKSB7DQoJCQk/Pg0KCQkJPGMgdnE9ImFuaSI+DQoJCQkJPD9jdWMNCg0KCQkJCXZzICggdHJnX2JjZ3ZiYSggJ2hmcmVmX3BuYV9lcnR2ZmdyZScgKSApIHsNCgkJCQkJJGVydHZmZ2VuZ3ZiYV9oZXkgPSBmY2V2YWdzKCAnPG4gdWVycz0iJWYiPiVmPC9uPicsIHJmcF9oZXkoIGpjX2VydHZmZ2VuZ3ZiYV9oZXkoKSApLCBfXyggJ0VydHZmZ3JlJyApICk7DQoNCgkJCQkJLyoqIEd1dmYgc3Z5Z3JlIHZmIHFicGh6cmFncnEgdmEgamMtdmFweWhxcmYvdHJhcmVueS1ncnpjeW5nci5jdWMgKi8NCgkJCQkJcnB1YiBuY2N5bF9zdnlncmVmKCAnZXJ0dmZncmUnLCAkZXJ0dmZnZW5ndmJhX2hleSApOw0KDQoJCQkJCXJwdWIgcmZwX3VnenkoICR5YnR2YV95dmF4X2ZyY25lbmdiZSApOw0KCQkJCX0NCg0KCQkJCT8+DQoJCQkJPG4gdWVycz0iPD9jdWMgcnB1YiByZnBfaGV5KCBqY195YmZnY25mZmpiZXFfaGV5KCkgKTsgPz4iPjw/Y3VjIF9yKCAnWWJmZyBsYmhlIGNuZmZqYmVxPycgKTsgPz48L24+DQoJCQk8L2M+DQoJCQk8P2N1Yw0KCQl9DQoNCgkJJHlidHZhX2ZwZXZjZyAgPSAnc2hhcGd2YmEgamNfbmdncnpjZ19zYnBoZigpIHsnOw0KCQkkeWJ0dmFfZnBldmNnIC49ICdmcmdHdnpyYmhnKCBzaGFwZ3ZiYSgpIHsnOw0KCQkkeWJ0dmFfZnBldmNnIC49ICdnZWwgeyc7DQoNCgkJdnMgKCAkaGZyZV95YnR2YSApIHsNCgkJCSR5YnR2YV9mcGV2Y2cgLj0gJ3EgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSggImhmcmVfY25mZiIgKTsgcS5pbnlociA9ICIiOyc7DQoJCX0gcnlmciB7DQoJCQkkeWJ0dmFfZnBldmNnIC49ICdxID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoICJoZnJlX3lidHZhIiApOyc7DQoNCgkJCXZzICggJHJlZWJlZi0+dHJnX3JlZWJlX3BicXIoKSA9PT0gJ3ZhaW55dnFfaGZyZWFuenInICkgew0KCQkJCSR5YnR2YV9mcGV2Y2cgLj0gJ3EuaW55aHIgPSAiIjsnOw0KCQkJfQ0KCQl9DQoNCgkJJHlidHZhX2ZwZXZjZyAuPSAncS5zYnBoZigpOyBxLmZyeXJwZygpOyc7DQoJCSR5YnR2YV9mcGV2Y2cgLj0gJ30gcG5ncHUoIHJlICkge30nOw0KCQkkeWJ0dmFfZnBldmNnIC49ICd9LCAyMDApOyc7DQoJCSR5YnR2YV9mcGV2Y2cgLj0gIn1cYSI7IC8vIFJhcSBicyBqY19uZ2dyemNnX3NicGhmKCkuDQoNCgkJLyoqDQoJCSAqIFN2eWdyZWYganVyZ3VyZSBnYiBjZXZhZyBndXIgcG55eSBnYiBgamNfbmdncnpjZ19zYnBoZigpYCBiYSBndXIgeWJ0dmEgZnBlcnJhLg0KCQkgKg0KCQkgKiBAZnZhcHIgNC44LjANCgkJICoNCgkJICogQGNuZW56IG9iYnkgJGNldmFnIEp1cmd1cmUgZ2IgY2V2YWcgZ3VyIHNoYXBndmJhIHBueXkuIFFyc25oeWcgZ2Voci4NCgkJICovDQoJCXZzICggbmNjeWxfc3Z5Z3JlZiggJ3Jhbm95cl95YnR2YV9uaGdic2JwaGYnLCBnZWhyICkgJiYgISAkcmVlYmUgKSB7DQoJCQkkeWJ0dmFfZnBldmNnIC49ICJqY19uZ2dyemNnX3NicGhmKCk7XGEiOw0KCQl9DQoNCgkJLy8gRWhhIGBqY0JheWJucSgpYCB2cyBxcnN2YXJxLg0KCQkkeWJ0dmFfZnBldmNnIC49ICJ2cyAoIGdsY3JicyBqY0JheWJucSA9PT0gJ3NoYXBndmJhJyApIHsgamNCYXlibnEoKSB9IjsNCg0KCQk/Pg0KCQk8ZnBldmNnIGdsY3I9Imdya2cvd25pbmZwZXZjZyI+DQoJCQk8P2N1YyBycHViICR5YnR2YV9mcGV2Y2c7ID8+DQoJCTwvZnBldmNnPg0KCQk8P2N1Yw0KDQoJCXZzICggJHZhZ3JldnpfeWJ0dmEgKSB7DQoJCQk/Pg0KCQkJPGZwZXZjZyBnbGNyPSJncmtnL3duaW5mcGV2Y2ciPg0KCQkJKCBzaGFwZ3ZiYSgpIHsNCgkJCQlnZWwgew0KCQkJCQlpbmUgdiwgeXZheGYgPSBxYnBoenJhZy50cmdSeXJ6cmFnZk9sR250QW56ciggJ24nICk7DQoJCQkJCXNiZSAoIHYgdmEgeXZheGYgKSB7DQoJCQkJCQl2cyAoIHl2YXhmW3ZdLnVlcnMgKSB7DQoJCQkJCQkJeXZheGZbdl0uZ25ldHJnID0gJ19veW5heCc7DQoJCQkJCQkJeXZheGZbdl0uZXJ5ID0gJ2FiYmNyYXJlJzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0gcG5ncHUoIHJlICkge30NCgkJCX0oKSk7DQoJCQk8L2ZwZXZjZz4NCgkJCTw/Y3VjDQoJCX0NCg0KCQl5YnR2YV9zYmJncmUoKTsNCgkJb2Vybng7DQp9IC8vIFJhcSBucGd2YmEgZmp2Z3B1Lg0K