KiBKaW0gTWNFbHdhaW5lIGZvciB2ZXJ5IHVzZWZ1bCBjb21tZW50cyBhbmQgZGlzY3Vzc2lvbnMKICBhYm91dCB0aGUgZGlsb2dhcml0aG0gYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgoKKiBTaW1vbmUgUGljY2FyZGkgPHBpY2NhcmRpQGZpLmluZm4uaXQ+IGZvciBleHRlbnNpb25zIHRvIHRoZQpoaXN0b2dyYW0gcm91dGluZXMsIGFuZCBwcm92aWRpbmcgdGhlIG50dXBsZSBjb2RlCgoqIE5lbHNvbiBILiBGLiBCZWViZSA8YmVlYmVAbWF0aC51dGFoLmVkdT4gZm9yIHJlZmVyZW5jZXMgYW5kIHRlc3RpbmcKdGhlIHNvZnR3YXJlIG9uIG1hbnkgZGlmZmVyZW50IHBsYXRmb3Jtcy4KCiogVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5ub2Rhay5lZHU+IGZvciBJRUVFIHN1cHBvcnQgZm9yClRydTY0LCBBSVgsIElSSVgsIGZpeGVzIGZvciBvZGVzLCBhbmQgdGVzdGluZwoKKiBUaG9tYXMgV2FsdGVyIDx3YWx0ZXJAcGN0Yy5jaGVtaWUudW5pLWVybGFuZ2VuLmRlPiBmb3IgaGVhcHNvcnQKcm91dGluZXMsIGNob2xlc2t5IGRlY29tcG9zaXRpb24sIGJ1ZyByZXBvcnRzIGFuZCB1c2VmdWwgc3VnZ2VzdGlvbnMKCiogSm9ybWEgT2xhdmkgVORodGluZW4gPGpvdGFodGluQGNjLmh1dC5maT4gZm9yIGNvbXBsZXggYXJpdGhtZXRpYwpmdW5jdGlvbnMKCiogQmFyYWsgUGVhcmxtdXR0ZXIgPGJhcEBjcy51bm0uZWR1PgoKKiBGcmVkZXJpY2sgVy4gV2hlZWxlciA8d2hlZWxlckBjaXByLnJwaS5lZHU+CgoqIEJlcm5kIFBldHJvdml0c2NoIDxiZXJuZEBpY3QudHV3aWVuLmFjLmF0PgoKKiBKYWNlayBQbGlzemthIDxKYWNlay5QbGlzemthQGZ1dy5lZHUucGw+IGZvciBidWcgcmVwb3J0CgoqIE1pY2hlbGUgQ2xhcmsgPGNsYXJrQGNzLnVuYy5lZHU+IGZvciBidWcgcmVwb3J0CgoqIEplZmZyZXkgUnVzc2VsbCBIb3JuZXIgPGpob3JuZXJAY3MudXRrLmVkdT4gZm9yIGluZm9ybWF0aW9uIG9uIENCTEFTCgoqIFJhaHVsIFYuIEhlcndhZGthciA8UkhFUldBREtAdXMub3JhY2xlLmNvbT4gZm9yIHRlc3RpbmcKCiogVHJvbmQgQm8gPGRhdGJAZG5taS5ubz4gZm9yIGJ1ZyByZXBvcnQKCiogSmFuIEthc3ByemFrIDxrYXNAaW5mb3JtYXRpY3MubXVuaS5jej4gZm9yIGJ1ZyByZXBvcnQKCiogRGF2aWQgS2FlbGJsaW5nIDxkcmtAc2dpLmNvbT4gZm9yIHRlc3RpbmcKCiogTWFyayBMZXZlZGFobCA8bWxldmVkYWhsQGZhbGxzY2h1cmNoLmVzeXMuY29tPiBmb3IgYnVnIHJlcG9ydAoKKiBEYXZpZCBCaWxsaW5naHVyc3QgPERhdmlkLkJpbGxpbmdodXJzdEByaW90aW50by5jb20uYXU+IGZvciB0ZXN0aW5nCgoqIEplYW4tQmVybmFyZCBBRERPUiA8amJhZGRvckBzY2EudXFhbS5jYT4gZm9yIGJ1ZyByZXBvcnQKCiogRmFicmljZSBSb3NzaSA8cm9zc2lAdWZybWQuZGF1cGhpbmUuZnI+IGJ1ZyByZXBvcnRzIGFuZCBzdWdnZXN0aW9ucwoKKiBQYXVsIFdhbG1zbGV5IDxwd2FsbXNsZXlAaWVlLm9yZz4gZm9yIGJ1ZyByZXBvcnQgYW5kIHBhdGNoIGZvcgogIGZpeGluZyBtYXRtdWx0LgoKKiBEYXZlIE1vcnJpc29uIDxkYXZlQGJubC5nb3Y+IGZvciBhZHZpY2Ugb24gYnVpbGQgcHJvY2VkdXJlIGFuZAogIHZhcmlvdXMgcGF0Y2hlcywgdGhlIGRpZmYvIG51bWVyaWNhbCBkaWZmZXJlbnRpYXRpb24gcm91dGluZXMsCiAgbXVsdG1pbiBkb2N1bWVudGF0aW9uLCBhbmQgTGFuZGF1IGRpc3RyaWJ1dGlvbgoKKiBCcmV0dCBWaXJlbiA8YnZpcmVuQHN1cGVyay5waHlzaWNzLnN1bnlzYi5lZHU+IGZvciBkZWJ1Z2dpbmcgcXBzcnQuYy4KCiogQ2hyaXN0b3BoZXIgR2FicmllbCA8Y2dhYnJpZWxAZmlyZW56ZS5saW51eC5pdD4gY29udHJpYnV0ZWQgdGhlCiAgZ3NsLWNvbmZpZyBhbmQgZ3NsLm00IHdlIHVzZS4KCiogQyBNIE11cnBoeSA8Qy5NLk11cnBoeUBiYXRoLmFjLnVrPiBwYXRjaCB0byBmaXggdXAgY29uc3RzIGluIGhlYWRlciBmaWxlcwoKKiBCcmFjeSBILiBFbHRvbiBmb3IgY29ycmVjdGluZyBhIHJlZmVyZW5jZSBpbiB0aGUgRkZUIEFsZ29yaXRobXMgZG9jdW1lbnQKCiogVGFkaGcgTydNZWFyYSA8dGFkaGdAbmV0LWNzLnVjZC5pZT4gZm9yIGZpbmRpbmcgYSBidWcgaW4gZ3NsLXJhbmRpc3QKCiogU3RldmUgUm9iYmlucyA8c3RldmVyQGJpYy5tbmkubWNnaWxsLmNhPiBwYXRjaCB0byB3b3JrIGFyb3VuZCBGUF9STkQKICBwcm9ibGVtcyBvbiBUcnU2NCwgdGVzdGluZyBhbmQgb3RoZXIgcGF0Y2hlcy4sIGJ1ZyBmaXggZm9yIG5tX3NpbXBsZXgKICBhbGdvcml0aG0uCgoqIEpvaG4gRmlzaGVyIDxqb2huZmlzaEB1Y2xpbms0LmJlcmtlbGV5LmVkdT4gdGVzdGluZyBvbiBwb3dlcnBjIGxpbnV4IAogIGFuZCBzdXBwb3J0IGZvciBmcC1wcGNsaW51eC5jCgoqIE9LVUpJIFlvc2hpbm9yaSA8b2t1amlAZ251Lm9yZz4gZm9yIGEgcGF0Y2ggZm9yIGZwLXg4NmxpbnV4LmMgZm9yIGxpYmM1CgoqIFBhYmxvIEJpYW51Y2NpIDxwYmlhbkBwY2NwLmNvbS5hcj4gZm9yIHBhdGNoZXMgdG8gY29tcGxleCBtYXRyaXgvdmVjdG9ycwoKKiBUb2J5IFdoaXRlIDx0b3dAdGhlb3IuY2guY2FtLmFjLnVrPiBmb3Igc2V2ZXJhbCBwYXRjaGVzIGFuZAppbXByb3ZlbWVudHMgdG8gdGhlIGRlc2lnbiwgT3BlbkJTRCBzdXBwb3J0CgoqIEJpbGwgQnJvd2VyIDx3YnJvd2VyQGxsLm1pdC5lZHU+IGZvciBidWcgcmVwb3J0IG9uIGdzbC5tNAoKKiBWbGFkaW1pciBLdXNobmlyIDx2a3VzaG5pckBBbGZhY29tLm5ldD4gZm9yIGllZWUgc3VwcG9ydCBmb3IgRnJlZUJTRAoKKiBGIEogRnJhbmtsaW4gPE1FUDk1SkZGQHNoZWZmaWVsZC5hYy51az4gZm9yIHRlc3QgcmVwb3J0cyBhbmQgZGVidWdnaW5nCgoqIEtlaXRoIEJyaWdncyA8YnJpZ2dza0BpbmZvLmJ0LmNvLnVrPiBmb3IgYnVnIHJlcG9ydHMgYW5kIGNvZGUgZm9yCnRoZSBza2V3ZWQgTGV2eSBhbHBoYS1zdGFibGUgdmFyaWF0ZXMgZ3NsX3Jhbl9sZXZ5X3NrZXcKCiogVmluY2UgPHZhdHRlcnZpQG1zdS5lZHU+IGZvciBwZXJtdXRhdGlvbiBpdGVyYXRvciBmdW5jdGlvbnMKCiogSGVucnkgU29ib3RrYSA8c29ib3RrYUBheGVzcy5jb20+IGZvciBpZWVlIHN1cHBvcnQgZm9yIE9TLzIgYW5kIGJ1ZyBmaXhlcwoKKiBSZW15IEJydW5vIDxyZW15LmJydW5vQGxpYmVydHlzdXJmLmZyPiBmb3IgYnVnIGZpeAoKKiBNLiBMYXZhc2FuaSA8bGF2YXNhbmlAY29ubmVjdC5vcmcudWs+IGZvciBidWcgcmVwb3J0cyBhbmQgdGVzdGluZyBvbiBIUFVYMTEKCiogSmFzb24gQmVlZ2FuIDxqYXNvbnRkQGluZGlnby5pZT4gZm9yIE5ldEJTRCBzdXBwb3J0CgoqIFplZ2VyIEtub3BzIDx6ZWdlckBjcy51dS5ubD4gZm9yIGJ1ZyBmaXgKCiogUm9kbmV5IFNwYXJhcGFuaSA8cnNwYXJhcGFAbWN3LmVkdT4gZm9yIERhcndpbiBzdXBwb3J0CgoqIFJhbWluIE5ha2lzYSA8cmFtaW5uYWtpc2FAeWFob28uY29tPiBmb3IgYnVnIHJlcG9ydHMKCiogQWNoaW0gR2FlZGtlIDxhY2hpbUB6cHIudW5pLWtvZWxuLmRlPiBmb3IgYnVnIHJlcG9ydHMgYW5kCnN1Z2dlc3Rpb25zLCBhZGRpdGlvbmFsIGhpc3RvZ3JhbSBjb2RlLCBQeUdTTCBweXRob24gaW50ZXJmYWNlLCAyZApoaXN0b2dyYW0gc3RhdGlzdGljcywgYnVnIGZpeGVzIGZvciBzaW11bGF0ZWQgYW5uZWFsaW5nCgoqIEVyaWMgUm9zZSA8ZXJvc2VAbWVtb3QudW5pYmUuY2g+IGZvciBidWcgcmVwb3J0IGFuZCB1c2VmdWwgdGlwIG9uIGNhc3RpbmcKCiogTSBKb29uYXMgUGlobGFqYSA8anBpaGxhamFAY2MuaGVsc2lua2kuZmk+IGZvciBidWcgcmVwb3J0cwoKKiBBbGJlcnQgQ2hpbiA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPiBmb3IgYnVnIHJlcG9ydHMsIHBhdGNoZXMsIGFuZApwcm92aWRpbmcgSFAtVVggcGxhdGZvcm1zIGZvciB0ZXN0aW5nCgoqIEFzdGVyaW8gR29uemFsZXogPGFnb256YWxlekB1ZGliZXJpY2EuY29tPiBmb3IgYSBidWcgcmVwb3J0IGZvciBtdWx0bWluCgoqIENhcmxvIFBlcmFzc2kgPGNhcmxvQGxpbnV4Lml0PiBmb3IgaW1wbGVtZW50aW5nIHRoZSByYW5kb20gbnVtYmVyCmdlbmVyYXRvcnMgaW4gS251dGgncyBTZW1pbnVtZXJpY2FsIEFsZ29yaXRobXMsIDNyZCBFZC4KCiogRGFuLCBIby1KaW4gPGhqZGFuQHN5czcxMy5rYWlzdC5hYy5rcj4gZm9yIGRpdmlkZWQgZGlmZmVyZW5jZXMgaW50ZXJwb2xhdGlvbgpyb3V0aW5lcwoKKiBTdGVmYW4gS29jaCA8cy5rb2NoQHNlaC16dWVscGljaC5kZT4gZm9yIHVzZWZ1bCBidWcgcmVwb3J0cyBhbmQKZml4ZXMgZm9yIHRoZSBzcGVjaWFsIGZ1bmN0aW9ucwoKKiAgU3p5bW9uIEphcm9zemV3aWN6IDxzakBjcy51bWIuZWR1PiBmb3IgdGhlIGNvbWJpbmF0aW9ucyBtb2R1bGVzCgoqIFRoZWlzIFBldGVyIEhhbnNlbiA8dHBoQGNvbS5kdHUuZGs+IGZpeGVkIHVuY2hlY2tlZCBzdGF0dXMgdmFsdWVzIGluCm11bHRpcm9vdHMKCiogSnVuZ2VtYW5uIE1hcmt1cyA8TWFya3VzLkp1bmdlbWFubkBkZS5ib3NjaC5jb20+IGRvY3VtZW50YXRpb24gZml4ZXMKCiogSGFucyBFLiBQbGVzc2VyIChoYW5zIGRvdCBwbGVzc2VyIGF0IGl0ZiBkb3QgbmxoIGRvdCBubykgbW9yZQpyZWxpYWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBnYW1tYV9pbmMsIG11bHRpZml0IGJ1ZyBmaXhlcwoKKiBBcmluIENoYXVkaHVyaSA8YWNoYXVkaEB1bml0eS5uY3N1LmVkdT4gZG9jdW1lbnRhdGlvbiBidWcgcmVwb3J0cwoKKiBLYXJzdGVuIEhvd2VzIDxrYXJzdGVuQHZpZGVvdHJvbi5jYT4gc2ltYW4gYnVnIGZpeAoKKiBWbGFkaW1pciBTYXZpY2hldiA8dmxhZEBhcmllbC5waHlzLndlc2xleWFuLmVkdT4gYnVnIHJlcG9ydHMKCiogSm9jaGVuIEv8cHBlciA8am9jaGVuQGpvY2hlbi1rdWVwcGVyLmRlPiBkb2MgYnVnIGZpeGVzLCBhZGRpdGlvbmFsCmNvbnN0YW50cwoKKiBKb2huIEtldGNodW0gPGpvaG5rQHF1YWxjb21tLmNvbT4gZm9yIGJ1ZyByZXBvcnRzIGZvciB0aGUgYmxhcyBsaWJyYXJ5CgoqIE5pY29sYXMgRGFybmlzIDxuZGFybmlzQGN2Zi5mcj4gYWRkaXRpb25hbCBwZXJtdXRhdGlvbiBmdW5jdGlvbnMKCiogSmVmZiBTcGlya28gPHNwaXJrb0BsZWhpZ2guZWR1PiBwYXRjaCBmb3IgMWQgbWluaW1pemF0aW9uCgoqIERhdmlkIE5lY2FzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+IGJ1ZyByZXBvcnRzIGFuZCBwYXRjaGVzCmZvciBsaW5lYXIgYWxnZWJyYSwgaW50ZXJwb2xhdGlvbiwgYWRkaXRpb25hbCB0cmlkaWFnb25hbCBzb2x2ZXJzCgoqIDx6dW5kYUAyNGkubmV0PiBmb3IgYnVnIHJlcG9ydAoKKiBDaHJpc3RpYW4gVC4gU3RlaWdpZXMgPGN0c0BkZWJpYW4ub3JnPiBmb3IgZG9jdW1lbnRhdGlvbiBidWcgcmVwb3J0CgoqIEF0YWthbiBHdXJrYW4gPGF0b0Bub3J0aHdlc3Rlcm4uZWR1PiBmb3IgYnVnIHJlcG9ydHMgYW5kIHBhdGNoZXMgZm9yIHRoZSAKcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzLgoKKiBEYXZpZCBSb25pcyA8cm9uaXNAcm9uaXNwYy5jaGVtLm1jZ2lsbC5jYT4gZm9yIGJ1ZyByZXBvcnRzIGFuZApwYXRjaGVzCgoqIENocmlzdGlhbiBULiBTdGVpZ2llcyA8Y3RzQGRlYmlhbi5vcmc+IGZvciBhIGRvY3VtZW50YXRpb24gZml4CgoqIFRldW4gQnVyZ2VycyA8YS5yYnVyZ2Vyc0BmcmVlbGVyLm5sPiBpbXByb3ZlbWVudHMgdG8gY29uZmlndXJlIHNjcmlwdAoKKiBPbGl2aWVyIEFuZHJpZXUgPGFuZHJpZXVAaWptLmp1c3NpZXUuZnI+IGJ1ZyByZXBvcnQgZm9yIENoZWJ5c2NoZXYKbWVtb3J5IGxlYWsKCiogSGlyb3NoaSBJbWFtdXJhIDxoaW1hQGNtdC5pcy50b2hva3UuYWMuanA+IGV4dGVuc2lvbiB0byBwc2koMStpeSkKCiogVGFsaXZlciBIZWF0aCA8dGFsaXZlckBwYXVsLnJ1dGdlcnMuZWR1PiBrZWVwIHRyYWNrIG9mIGJlc3Qgc29sdXRpb24KaW4gc2ltYW5fc29sdmUuCgoqIFRyZXZvciBCbGFja3dlbGwgPHRsYkB0cmV2b3JibGFja3dlbGwuY29tPiBidWcgcmVwb3J0IHRlc3QgY2FzZSBmb3IKU1ZEIGRfbiA9IDAsIGJ1ZyBmaXggdG8gbXQxOTkzNyBnZW5lcmF0b3IKCiogTmljb2xhcyBCb2NrIDxuYm9ja0BidWZmYWxvLmVkdT4gZG9jdW1lbnRhdGlvbiBidWcgcmVwb3J0CgoqIEFsYW4gQXNwdXJ1LUd1emlrIDxhc3B1cnVAb2tyYS5jY2hlbS5CZXJrZWxleS5lZHU+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBQZXRlciBTLiBDaHJpc3RvcGhlciA8cGV0ZXJjQG1pZHdheS51Y2hpY2Fnby5lZHU+IGJ1ZyBmaXggZm9yCnNpbXVsYXRlZCBhbm5lYWxpbmcKCiogR2VuZSBDYXJ0ZXIgPGVjYXJ0ZXJAbWluZHNwcmluZy5jb20+IGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgb24gTWFjT1MgWAoKKiBGYWJpYW4gSmFrb2JzIDxmYWJpYW4uamFrb2JzQHdlYi5kZT4gZml4ZWQgYSBidWcgaW4KZ3NsX2xpbmFsZ19iaWRpYWdfdW5wYWNrX0IsIGFuZCBkb2N1bWVudGF0aW9uIGJ1Zy1maXggZm9yIGJsYXMKCiogR2F2aW4gQ3Jvb2tzIDxnZWNAdGhyZWVwbHVzb25lLmNvbT4gZG9jdW1lbnRhdGlvbiBidWcgZml4LApkaXJpY2hsZXQgZGlzdHJpYnV0aW9uLCBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24KCiogR2VydCBWYW4gZGVuIEV5bmRlIDxndmRleW5kZUBzY2tjZW4uYmU+IGdzbF9sZGV4cCwgZ3NsX2ZyZXhwLCBnc2xfZmNtcAoKKiBSZWluaG9sZCBCYWRlciA8UmVpbmhvbGQuQmFkZXJAbHJ6LW11ZW5jaGVuLmRlPiwgZml4ZXMgZm9yIEhpdGFjaGkgU1I4MDAwCgoqIFNsYXZlbiBQZWxlcyA8cGVsZXNAY25zLnBoeXNpY3MuZ2F0ZWNoLmVkdT4sIGJ1aWxkIG9wdGlvbnMgZm9yCkNvbXBhcSBjYywgZG9jIGJ1ZyBmaXgKCiogRGF2aWQgRmF2aXMtTW9ydGxvY2sgPGQuZmF2aXMtbW9ydGxvY2tAZGlhbC5waXBleC5jb20+IGJ1ZyByZXBvcnQgZm9yCmdzbF9ybmdfdGF1czIgc2VlZGluZwoKKiBBbGV4YW5kZXIgQmFiYW5za3kgPGJhYmFuc2t5QG1haWwucnU+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydCBmb3IgRWkoeCkKCiogVGlhZ28gZGUgUGF1bGEgUGVpeG90byA8Y291bnQwQGZpc3Npb25hdXRob3JpdHkuY29tPiBidWcgcmVwb3J0IGZvciBtdWx0aWZpdAptZW1vcnkgYWxsb2NhdGlvbgoKKiBBZGFtIEpvaGFuc2VuIDxhbWoyNkBoZXJtZXMuY2FtLmFjLnVrPiBidWcgcmVwb3J0IGZvciBlaWdlbnZhbHVlIHJvdXRpbmVzCgoqIFdvbGZnYW5nIEhvZXJtYW5uIDxob3JtYW5ud0Bib3VuLmVkdS50cj4gYnVnIHJlcG9ydCBmb3IgbmllZGVycmVpdGVyIHFybmcKCiogSmVyb21lIEhvdWRheWVyIDxob3VkYXllckBzcGh0LnNhY2xheS5jZWEuZnI+IGJ1ZyByZXBvcnQgZm9yIHRhdXMgc2VlZGluZwoKKiBDb25yYWQgQ3VycnkgPGN3Y3VycnlAb3JjYS5zdC51c20uZWR1PiBidWcgYW5kIGRvY3VtZW50YXRpb24gcmVwb3J0cwoKKiBFcmlrIFNjaG5ldHRlciA8c2NobmV0dGVyQHVuaS10dWViaW5nZW4uZGU+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydHMKCiogTWFhcnRlbiBEZSBNdW5jayA8aW5kaWdvQGtvdG5ldC5vcmc+IGJ1ZyBmaXggZm9yIHZlY3Rvci9tYXRyaXggZ2V0CgoqIEF4ZWwgSHV0dCA8aHV0dEB3aWFzLWJlcmxpbi5kZT4gYnVnIGZpeCBmb3IgUUFXQyBpbnRlZ3JhdGlvbiwKZG9jdW1lbnRhdGlvbiBidWcgZml4CgoqIE1hcnRpbiBKYW5zY2hlIDxqYW5zY2hlQGxpbmcub2hpby1zdGF0ZS5lZHU+IHZhcmlvdXMgYnVnIHJlcG9ydHMKCiogR3JlZ29yeSBTb3lleiA8Zy5zb3llekB1bGcuYWMuYmU+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBBdHRpbGlvIFJpdm9sZGluaSA8cml2b2xkaW5pQG9tYS5iZT4gYnVnIHJlcG9ydCBmb3IgQ0JMQVMgdGVzdHMKCiogVy5NLiBWaXNzZXJzIDx2aXNzZXJzQHRoZW9jaGVtLmt1bi5ubD4gYnVnIHJlcG9ydCBmb3IKZ3NsX2NvbXBsZXhfYXJjY3NjX3JlYWwKCiogUGFvbG8gUmVkYWVsbGkgPHBhb2xvLnJlZGFlbGxpQGxpYmVyby5pdD4gYnVnIHJlcG9ydCBmb3IgY2hlYnlzaGV2CmZ1bmN0aW9ucwoKKiBBbmRyZXcgSG93YXJkIDxhaG93YXJkQHBvbGx1eC51c2MuZWR1PiBidWcgcmVwb3J0IGZvciBnc2xfcmFuX2Rpc2NyZXRlCgoqIEhlaWtvIEJhdWtlIDxIZWlrby5CYXVrZUBQaHlzaWsuVW5pLU1hZ2RlYnVyZy5ERT4gYnVnIHJlcG9ydHMgYW5kIHBhdGNoZXMKZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycwoKKiBWaW5jZW50IFNhY2tzdGVkZXIgPHZpbmNlbnRAc2Fja3N0ZWRlci5jb20+IGJ1ZyByZXBvcnRzIGZvciBNU1ZDNwoKKiBQZXRlciBWZXJ2ZWVyIDx2ZXJ2ZWVyQGVtYmwtaGVpZGVsYmVyZy5kZT4gaW1wcm92ZW1lbnQgdG8gbWVtb3J5CnVzYWdlIG9mIE1JTlBBQ0sgcm91dGluZXMKCiogTWFyaW8gUGVybmljaSA8TWFyaW8uUGVybmljaUBtaS5pbmZuLml0PiBidWcgZml4IGZvcgpnc2xfY29tYmluYXRpb25fdmFsaWQgYW5kIG5ldyBmdW5jdGlvbiBnc2xfcGVybXV0YXRpb25fbWVtY3B5LApkb2MgZml4IGZvciBiZXNzZWwgZnVuY3Rpb25zLCBidWcgZml4IGZvciBnc2xfc2ZfcHNpXzFfaW50LApidWcgcmVwb3J0IGZvciBnc2xfcGVybXV0YXRpb25fY2Fub25pY2FsX3RvX2xpbmVhciwgbGluYWxnClFSUFQgYnVnIHJlcG9ydHMgYW5kIGZpeGVzLCBhbmQgbWFueSBvdGhlciBjb3JyZWN0aW9ucy4KCiogRmFiaW8gQnJ1Z25hcmEgPGJydWduYXJhQGl0Yy5pdD4gcHJvdmlkZWQgYSBtdWNoLW5lZWRlZCBidWcKZml4IGZvciB0aGUgY29uanVnYXRlIGdyYWRpZW50IGFsZ29yaXRobSBtdWx0aWRpbWVuc2lvbmFsCm1pbmltaXNlcnMuCgoqIEtyenlzenRvZiBQYWNodWNraSA8a3JwQGZ1dy5lZHUucGw+IGJ1ZyByZXBvcnQgZm9yIGdzbF9zZl9oeXBlcmdVX2ludAoKKiBDYXJzdGVuIFN2YW5lYm9yZyA8c3ZhbmVib3JAbXBpcC1tYWluei5tcGcuZGU+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBMaWd1byBTb25nIDxsaWd1by5zb25nQHZhbmRlcmJpbHQuZWR1PiBkb2N1bWVudGF0aW9uIGJ1ZyByZXBvcnQKCiogQ2FybG8gRmVycmlnbm8gPGZlcnJpZ25vQHBhLmlhc2YuY25yLml0PiBidWcgcmVwb3J0IGZvciBDR1MgdW5pdHMKCiogR2l1bGlvIEJvdHRhenppIDxib3R0YXp6aUBzc3N1cC5pdD4gbWFueSB1c2VmdWwgYnVnIHJlcG9ydHMKCiogT2xhZiBMZW56IDxvbGVuekBQaHlzaWsuVW5pLUJpZWxlZmVsZC5ERT4gcm5nIGZyd2l0ZS9mcmVhZCwgYnVnIHJlcG9ydHMKCiogSmFtaWUgTG9raWVyIDxqYW1pZUBzaGFyZWFibGUub3JnPiBmb3IgdGVzdGluZwoKKiBHcmFudCBMeXRoZSA8Z3JhbnRAbWF0aHMubGVlZHMuYWMudWs+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBKdXNzaSBQaWl0dWxhaW5lbiA8anBpaXR1bGFAbGluZy5oZWxzaW5raS5maT4gZG9jdW1lbnRhdGlvbiBidWcgcmVwb3J0CgoqIEFhcm9uIFNjaHdlaWdlciA8YXNjaHdlaWdAYnUuZWR1PiBidWcgcmVwb3J0IGZvciBTVkQvY29sdW1uIGJhbGFuY2luZwoKKiBDYXJsbyBGZXJyaWdubyA8ZmVycmlnbm9AcGEuaWFzZi5jbnIuaXQ+IGJ1ZyByZXBvcnQgYWJvdXQgY29uc3QgcHJvYmxlbXMKCiogSnVzc2kgUGlpdHVsYWluZW4gPGpwaWl0dWxhQGxpbmcuaGVsc2lua2kuZmk+IGRvY3VtZW5hdGlvbiBidWcgcmVwb3J0IGZvcgpnc2xfcmFuX2h5cGVyZ2VvbWV0cmljX3BkZgoKKiBCYXMgWm9ldGVrb3V3IDxiYXNAZGViaWFuLm9yZz4gZG9jdW1lbnRhdGlvbiBidWcgcmVwb3J0CgoqIFBhdWwgU3lkbmV5IDxzeWRuZXlAbWF1aS5uZXQ+IGJ1ZyByZXBvcnQgYW5kIHBhdGNoIGZvciBtaW4vYnJlbnQuYwoKKiBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgPGFwb2R0ZWxlQG1jY2FtbW9uLnVjc2QuZWR1PiBwYXRjaCBmb3Igc3BoZXJlLmMKCiogTmVpbCBCdXNob25nIDxidXNob25nQG1oLTQ0MjZiLnVjc2QuZWR1PiBkb2N1bWVudGF0aW9uIHR5cG8gYnVnIHJlcG9ydAoKKiBCcmFkIEJlbGwgPGJyYWRAYXBsLndhc2hpbmd0b24uZWR1PiBkb2N1bWVudGF0aW9uIGJ1ZyByZXBvcnQKCiogQW5kcmVhcyBTY2huZWlkZXIgPDFAYzA3LmRlPiBidWcgcmVwb3J0IGZvciBSMjUwCgoqIEx1aWdpIEJhbGxhYmlvIDxsdWlnaS5iYWxsYWJpb0BmYXN0d2VibmV0Lml0PiBmaXggbTQgcXVvdGluZyBpbiBnc2wubTQKCiogWmJpZ25pZXcgS296YSA8emtvemFAaWZ0LnVuaS53cm9jLnBsPiBkb2N1bWVudGF0aW9uIGJ1ZyBmaXggZm9yIG9kZXMKCiogSmFtZXMgU2NvdHQgPGouc2NvdHRAcnVuYm94LmNvbT4gZml4IGZvciBsaW5hbGcgdGVzdHMgb24gTVNWQwoKKiBS6W1pIEJ1dGVsIDxyLmJ1dGVsQGVwb2MudS1ib3JkZWF1eDEuZnI+IGZpeGVzIGZvciBtdWx0aW1pbiBvdmVyZmxvdwpjb25kaXRpb25zCgoqIEFuZHJpcyBQYXZlbmlzIDxwYXZlbmlzQGxhdG5ldC5sdj4gTWFrZWZpbGUgZml4IGZvciBFWEVFWFQKCiogRGFuaWVsIFdlYmIgPGxpc3RzQGRhbmllbHdlYmIudXM+IGJ1ZyByZXBvcnQgZm9yIHBvdGVudGlhbCBjc3BsaW5lCmRpdmlzaW9uIGJ5IHplcm8KCiogRXdhbGQgU3RhbXAgPHN0YW1wQG1hdGguaHUtYmVybGluLmRlPiBidWdmaXggZm9yIHZlY3Rvci9zd2FwX3NvdXJjZS5jCgoqIEpvZXJnIFdlbnNjaCA8d2Vuc2NoQGluZm9ybWF0aWsudW5pLWhhbGxlLmRlPiAgTFEgZGVjb21wb3NpdGlvbnMKCiogSmFzb24gU3RvdmVyIDxqc3RvdmVyQHNkZi5sb25lc3Rhci5vcmc+IHBhdGNoIGZvciBjZGYvYmV0YS5jLAppbnZlcnNlIGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9ucywgZGlzY3JldGUgY3VtdWxhdGl2ZSBkaXN0cmlidXRpb25zCgoqIFJhbHBoIE1lbmlrb2ZmIDxydG1AbGFubC5nb3Y+IGJ1ZyByZXBvcnQgZm9yIGdzbF9zZl9leHBpbnRfc2NhbGVkCgoqIFlvc2hpa2kgPHl0c3VuZXNhZGFAeWFob28uY28uanA+IGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBOaWdlbCBMb3dyeSA8bmlnZWwtbG93cnlAdWx0cmEuZWNsaXBzZS5jby51az4gZG9jdW1lbnRhdGlvbiBwcm9vZnJlYWRpbmcKCiogR2l1bGlvIEJvdHRhenppIDxib3R0YXp6aUBzc3N1cC5pdD4gY2RmIGZvciBleHBvbmVudGlhbCBwb3dlcgpkaXN0cmlidXRpb24sIGJ1ZyByZXBvcnRzCgoqIFR1b21vIEtlc2tpdGFsbyA8VHVvbW8uS2Vza2l0YWxvQEhVVC5GaT4gbWFueSBpbXByb3ZlbWVudHMgdG8gb2RlLWluaXR2YWwKCiogQnJpdHRvbiBLZXJpbiA8YmtlcmluQGFzZi5hbGFza2EuZWR1PiBkb2N1bWVudGF0aW9uIGJ1ZyByZXBvcnRzCgoqIFBhdHJpY2lvIFJvam8gPHBhdG9AYXN0cm8uY29ybmVsbC5lZHU+IHBhdGNoIGZvciBudW1lcmljYWwKaW5zdGFiaWxpdHkgaW4gaW50ZXJwb2xhdGlvbiBpbnRlZ3JhdGUgZnVuY3Rpb24KCiogRGFtaXIgSGVybWFuIDxoZXJtYW5AbmNiaS5ubG0ubmloLmdvdj4gaW1wcm92ZWQgYWNjdXJhY3kgb2YKaGlzdG9ncmFtIHJhbmdlIGNhbGN1bGF0aW9ucwoKKiBKb2huIFNhbG1vbiA8anNhbG1vbkB0aGVzYWxtb25zLm9yZz4gYnVnIHJlcG9ydCBmb3IgZ3NsX2NoZWJfZXZhbF9uX2VycgoKKiBEaXJrIEVkZGVsYnVldHRlbCA8ZWRkQGRlYmlhbi5vcmc+IGZvciBidWcgcmVwb3J0cyBhbmQgdGVzdGluZywgYW5kCm1haW50YWluaW5nIHRoZSBEZWJpYW4gcGFja2FnZSBmb3IgR1NMLgoKKiBKYXJpIEjka2tpbmVuIDxqYXJpQGNoaXJhbGNvbXAuY29tPiBmb3Igc3ZkIGJ1ZyByZXBvcnRzLCBybmcgYnVnIHJlcG9ydHMKCiogTWFyY28gQ2FuaW5pIDxtYXJjby5jYW5pbmlAZmFzdHdlYm5ldC5pdD4gcGF0Y2ggZm9yIElYUDI0MDAgWHNjYWxlCgoqIEJlbiBLbGVtZW5zIDxrbGVtZW5zQGhzcy5jYWx0ZWNoLmVkdT4gYnVnIHJlcG9ydCBmb3Igc29ydGluZyB2ZWN0b3JzCndpdGggTkFOcwoKKiBQZXRlciBCcm9tbWVyIDxwYnJvQGl0YXAucGh5c2lrLnVuaS1zdHV0dGdhcnQuZGU+IGJ1ZyByZXBvcnQgYW5kIHBhdGNoCmZvciBCcmVudCBtaW5pbWlzYXRpb24gYWxnb3JpdGhtLgoKKiBHYWJyaWVsIFdpdGhpbmd0b24gPGdhYnJpZWwud2l0aGluZ3RvbkB1bWFzc21lZC5lZHU+IHR5cG8gaW4gZG9jcwoKKiBTdGV3YXJ0IFYuIFdyaWdodCA8c3dyaWdodCtnc2xAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXU+IHBhdGNoIGZvciBtaXNzaW5nIApzcGxpbmUgZnVuY3Rpb25zCgoqIFJpY2hhcmQgTWF0aGFyIDxtYXRoYXJAc3Rydy5sZWlkZW51bml2Lm5sPiBhZGRpdGlvbmFsIERlYnllIGZ1bmN0aW9ucyBuPTUsNgoKKiBTdGVmYW4gSmFobiA8c3RlZmFuQGdydWZ0LmRlPiAgYnVnIGZpeCBmb3IgcGVyaW9kaWMgY3ViaWMgc3BsaW5lcyB3aXRoIG49MwoKKiBZb3JhbSBCdXJhayA8eW9yYW1idUBraXRwLnVjc2IuZWR1PiBidWcgcmVwb3J0IGZvciBzY2FsZWQgYmVzc2VsIGZ1bmN0aW9uIEluX3NjYWxlZAoKKiBNYXJpbyBTYW50b3MgPG1ncnNhbnRvc0Bpc3QudXRsLnB0PiBidWcgcmVwb3J0IGZvciBzcGhlcmljYWwgYmVzc2VsIGZ1bmN0aW9uIAoKKiBWaW5jZW50IFBsYWdub2wgPHZpbmNlbnQucGxhZ25vbEBub3JtYWxlc3VwLm9yZz4gYnVnIHJlcG9ydCBmb3IgZ3NsX3JhbmRpc3RfYmlub21pYWxfcGRmCgoqIEpvaG4gSG91Y2sgPGhvdWNrQHNwYWNlLm1pdC5lZHU+IGJ1ZyByZXBvcnQgZm9yIGdzbF9zZl9zeW5jaHJvdHJvbl8xCgoqIEpvY2hlbiBWb3NzIDx2b3NzQHNlZWh1aG4uZGU+IHppZ2d1cmF0IGdhdXNzaWFuIGdlbmVyYXRvcgoKKiBKb2huIEQgTGFtYiA8Si5ELkxhbWJAYnRpbnRlcm5ldC5jb20+IE1hcnNhZ2xpYS1Uc2FuZyBnYW1tYSBnZW5lcmF0b3IKCiogR2l1bGlvIEJvdHRhenppIDxnaXVsaW8uYm90dGF6emlAbGliZXJvLml0PiBpbXByb3ZlZCBleHBvbmVudGlhbApwb3dlciBkaXN0cmlidXRpb24gYW5kIGdzbF9tdWx0aWZpdF9saW5lYXJfZXN0CgoqIENoYXJsZXMgS2FybmV5IDxja2FybmV5QHNhcm5vZmYuY29tPiBhZGRlZCBMZXZhIGJvdW5kcyB0byBnYXVzc2lhbiByYXRpbyBtZXRob2QgZ2VuZXJhdG9yCgoqIFRvcnF1aWwgU29yZW5zb24gPHRvcnF1aWxAZ21haWwuY29tPiBkb2N1bWVudGF0aW9uIGJ1ZyBmaXhlcyBmb3IgRkZUcwoKKiBZYWp1biBXYW5nIDx5YWxkaW5nQGNzLnVzdC5oaz4gLSBidWcgcmVwb3J0IGZvciBtdWx0aWZpdCBuPHAKCiogRXJpayBTY2huZXR0ZXIgPHNjaG5ldHRlckBjY3QubHN1LmVkdT4gLSBwYXRjaCBmb3IgTWFjb3MgWCBvbiBJbnRlbAoKKiBMb3dlbGwgSm9obnNvbiA8bGRqMDBAc2lvLm1pZGNvLm5ldD4gLSBpbXBsZW1lbnRhdGlvbiBvZiBtYXRoaWV1IGZ1bmN0aW9ucwoKKiBCcmlhbiBHbGFkbWFuIDxicmdAZ2xhZG1hbi5wbHVzLmNvbT4gLSB1c2VmdWwgYnVnIHJlcG9ydHMKCiogQi4gTGF6YXJvdiA8YnNsQG1lay5kdHUuZGs+IC0gY29tcGlsYXRpb24gYnVnIHJlcG9ydCBmb3IgcmFuZGlzdAoKKiBIYXJhbGQgTW9zZWJ5IDxoYXJhbGQubW9zZWJ5QGZuaC5ubz4gLSBzcGVjaWFsIGZ1bmN0aW9ucyBidWcgcmVwb3J0cwoKKiBOZWlsIEhhcnZleSA8bmVpbGhhcnZleUBnbWFpbC5jb20+IC0gYnVnIHJlcG9ydCBmb3IgYmV0YSBwZGYKCiogRmVsaXBlIEcuIE5pZXZpbnNraSA8Zi5uaWV2aW5za2lAdW5iLmNhPiAtIGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydAoKKiBEYWlzdWtlIFRPTUlOQUdBIDx0b21pbmFnYUBjYnJjLmpwPiAtIEphcGFuZXNlIHRyYW5zbGF0aW9uIG9mIG1hbnVhbAoKKiBBbmRvbGluZSBCdWNjaW9saW5pIDxhbmRvbGluZV9idWNjaW9saW5pQHdvbWVuLWF0LXdvcmsub3JnPiAtIGRvY3VtZW50YXRpb24gYnVnIGZvciBCTEFTCgoqIERhbmllbCBGYWxzdGVyIDxkZmFsc3RlckBiaW8ubXEuZWR1LmF1PiBidWcgcmVwb3J0IGZvciBmZGlzdF9QaW52CgoqIEdpYW5jYXJsbyBNYXJyYSA8Z2lhbmNhcmxvLm1hcnJhQGJhbmNhZGl0YWxpYS5pdD4gYnVnIHJlcG9ydCBmb3IgTV9QSV80CgoqIEFsYW4gSXJ3aW4gPGlyd2luQGJlbHVnYS5waHlzLnV2aWMuY2E+IGZvciBzYW1wbGUgaW1wbGVtZW50YXRpb24gb2YKaW1wcm92ZWQgQkZHUyBhbGdvcml0aG0uCgoqIExpb25lbCBCYXJuZXR0IDxsaW9uZWxiLm5vc3BhbUBnb29nbGVtYWlsLmNvbT4gZm9yIHBvaW50aW5nIG91dCBhbgplcnJvciBpbiB0aGUgZWxsaXB0aWMgaW50ZWdyYWxzCg==