VGhpcyBmaWxlIGxpc3RzIHBlb3BsZSB3aG8gaGF2ZSBjb250cmlidXRlZCB0byB0Y3BkdW1wOgoKVGhlIGN1cnJlbnQgbWFpbnRhaW5lcnM6CglCaWxsIEZlbm5lcgkJCTxmZW5uZXJAcmVzZWFyY2guYXR0LmNvbT4KICAgICAgICBEYXZpZCBZb3VuZyAgICAgICAgICAgICAgICAgICAgIDxkeW91bmdAcG9ib3guY29tPgoJRnVsdmlvIFJpc3NvCQkJPHJpc3NvQHBvbGl0by5pdD4KCUd1eSBIYXJyaXMJIAkJPGd1eUBhbHVtLm1pdC5lZHU+CglIYW5uZXMgR3JlZGxlcgkJCTxoYW5uZXNAanVuaXBlci5uZXQ+CglKdW4taWNoaXJvIGl0b2p1biBIYWdpbm8JPGl0b2p1bkBpaWpsYWIubmV0PgoJTWljaGFlbCBSaWNoYXJkc29uCSAJPG1jckBzYW5kZWxtYW4ub3R0YXdhLm9uLmNhPgoKQWRkaXRpb25hbCBwZW9wbGUgd2hvIGhhdmUgY29udHJpYnV0ZWQgcGF0Y2hlczoKCiAgICAgICAgQWFyb24gQ2FtcGJlbGwgICAgICAgICAgICAgICAgICA8YWFyb25AYXJib3IubmV0PgoJQWxmcmVkbyBBbmRyZXMJCQk8YWFuZHJlc0BzMjFzZWMuY29tPgoJQWxiZXJ0IENoaW4JCQk8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgoJQW5kcmV3IEJyb3duCQkJPGF0YXRhdEBhdGF0ZG90Lm5ldD4KCUFuZHJldyBDaHVyY2gJCQk8YW5kcmV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCUFuZHJldyBIaW50egkJCTxhZGhpbnR6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCUFuZHJldyBUcmlkZ2VsbAkJCTx0cmlkZ2VAbGludXhjYXJlLmNvbT4KICAgICAgICBBbmR5IEhlZmZlcm5hbiAgICAgICAgICAgICAgICAgIDxhaGhAanVuaXBlci5uZXQ+CglBcmthZGl1c3ogTWlza2lld2ljeiAJCTxtaXNpZWtAcGxkLm9yZy5wbD4KCUFybWFuZG8gTC4gQ2FybyBKci4JCTxhY2Fyb0BtYWlsLmVlY2lzLnVkZWwuZWR1PgoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvCTxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KCUF0c3VzaGkgT25vZQkJCTxvbm9lQG5ldGJzZC5vcmc+CglCZW4gU21pdGh1cnN0CQkJPGJlbkBzY2llbnRpYS5kZW1vbi5jby51az4KCUJyZW50IEwuIEJhdGVzCQkJPGJsYmF0ZXNAdmlneWFuLmNvbT4KCUJyaWFuIEdpbnNiYWNoCQkJPGdpbnNiYWNoQGNyYXkuY29tPgoJQnJ1Y2UgTS4gU2ltcHNvbgkJPGJtc0BzcGMub3JnPgoJQ2FybGVzIEtpc2hpbW90byBCaXNiZSAgICAgICAgICA8Y2tpc2hpbW9AYWMudXBjLmVzPgoJQ2hhcmxpZSBMZW5haGFuCQkJPGNsZW5haGFuQGZvcnRyZXNzdGVjaC5jb20+CglDaGFybGVzIE0uIEhhbm51bQkJPG15Y3JvZnRAbmV0YnNkLm9yZz4KCUNocmlzIENvZ2RvbgkJCTxjaHJpc0Bjb2dkb24ub3JnPgoJQ2hyaXMgRy4gRGVtZXRyaW91CQk8Y2dkQG5ldGJzZC5vcmc+CglDaHJpc3RpYW4gU2lldmVycwkJPGNfc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CglDaHJpcyBKZXBld2F5CQkJPGplcGV3YXlAYmxhc3RlZC1oZWF0aC5jb20+CglDaHJpcyBMYXJzb24JCQk8Y2xhcnNvbkBrZXJnb3RoLmNvbT4KCUNyYWlnIFJvZHJpZ3VlcwkJCTxyb2RyaWdjQG1lZGlhb25lLm5ldD4KCUNyaXN0IEouIENsYXJrCQkJPGNqY2xhcmtAYWx1bS5taXQuZWR1PgoJRGFuaWVsIEhhZ2VydHkgCQkJPGhhZ0BhaS5taXQuZWR1PgoJRGFycmVuIFJlZWQJCQk8ZGFycmVuckByZWVkLndhdHRsZS5pZC5hdT4KCURhdmlkIEJpbmRlcm1hbgkJCTxkLmJpbmRlcm1hbkB2aXJnaW4ubmV0PgoJRGF2aWQgU21pdGgJCQk8ZHNtaXRoQHJlZGhhdC5jb20+CglEYXZpZCBZb3VuZwkJCTxkeW91bmdAb2pjdGVjaC5jb20+CglEb24gRWJyaWdodAkJCTxEb24uRWJyaWdodEBjb21wdXdhcmUuY29tPgoJRWRkaWUgS29obGVyCQkJPHhleGRAc291cmNlZm9yZ2UubmV0PgoJRnJhbmNpcyBEdXBvbnQJCQk8RnJhbmNpcy5EdXBvbnRAZW5zdC1icmV0YWduZS5mcj4KCUZyYW5jaXNjbyBNYXRpYXMgQ3VlbmNhLUFjdW5hCTxtY3VlbmNhQGdlb3JnZS5ydXRnZXJzLmVkdT4KCUZyYW5rIFZvbGYJCQk8dm9sZkBvYXNpcy5JQUVodi5ubD4KCUZ1bHZpbyBSaXNzbwkJCTxyaXNzb0Bwb2xpdG8uaXQ+CglHZW9yZ2UgQmFrb3MJCQk8Z2Jha29zQGlzdHMuZGFydG1vdXRoLmVkdT4KCUdlcmFsZCBDb21icwkJCTxnZXJhbGRAZXRoZXJlYWwuY29tPgoJR2VydCBEb2VyaW5nCQkJPGdlcnRAZ3JlZW5pZS5tdWMuZGU+CiAgICAgICAgR3JlZyBTdGFyayAgICAgICAgICAgICAgICAgICAgICA8Z3NzdGFya0BtaXQuZWR1PgoJR2lsYmVydCBSYW1pcmV6IEpyLgkJPGdyYW1AeGlleGllLm9yZz4KCUdpc2xlIFZhbmVtCQkJPGdpdmFAYmduZXR0Lm5vPgogICAgICAgIEhhbm5lcyBWaWVydGVsICAgICAgICAgICAgICAgICAgPGh2aWVydGVsQGp1bmlwZXIubmV0PgoJSGFuayBMZWluaW5nZXIJCQk8dGNwZHVtcC13b3JrZXJzQHByb2dyZXNzaXZlLWNvbXAuY29tPgoJSGFycnkgUmFheW1ha2VycwkJPGhhcnJ5ckBjb25uZWN0LmNvbS5hdT4KCUhlaW56LUFkbyBBcm5vbGRzCQk8QWRvLkFybm9sZHNAZGhtLXN5c3RlbXMuZGU+CglIZW5kcmlrIFNjaG9segkJCTxoZW5kcmlrQHNjaG9sei5uZXQ+CglJYW4gTWNEb25hbGQJCQk8aW1jZG56bEBnbWFpbC5jb20+CiAgICAgICAgSmFjZWsgVG9iaWFzeiAgICAgICAgICAgICAgICAgICA8SmFjZWsuVG9iaWFzekBhdG0uY29tLnBsPgoJSmFrb2IgU2NobHl0ZXIJCQk8amFrb2JAb3BlbmJzZC5vcmc+CglKYW4gT3JhdmVjCQkJPHdzeEB3c3g2Lm5ldD4KCUphc29uIFIuIFRob3JwZQkJCTx0aG9ycGVqQG5ldGJzZC5vcmc+CglKZWZmZXJzb24gT2dhdGEgCQk8am9nYXRhQG5vZGMubm9hYS5nb3Y+CglKZWZmcmV5IEh1dHplbG1hbgkJPGpodXR6QGNtdS5lZHU+CglKZXNwZXIgUGV0ZXJzb24JCQk8amVzcGVyQGVuZGFjZS5jb20+CglKaW0gSHV0Y2hpbnMJCQk8amltQGNhLnNhbmRpYS5nb3Y+CiAgICAgICAgSm9uYXRoYW4gSGV1c3NlciAgICAgICAgICAgICAgICA8am9ubnlAZHJ1Z3BoaXNoLmNoPgoJVGF0dXlhIEppbm1laQkJCTxqaW5tZWlAa2FtZS5uZXQ+CglK+HJnZW4gVGhvbXNlbgkJCTxqdGhAanRoLm5ldD4gCglKdWxpYW4gQ293bGV5CQkJPGp1bGlhbkBsYXZhLm5ldD4KCUthYXJ0aGlrIFNpdmFrdW1hcgkJPGthYXJ0aGlrQHRvcnJlbnRuZXQuY29tPgoJS2F6dXNoaSBTdWd5bwkJCTxzdWd5b0BwYi5qcC5uZWMuY29tPgoJS2VsbHkgQ2FybWljaGFlbAkJPGtjYXJtaWNoQGlwYXBwLmNvbT4KCUtlbiBIb3Juc3RlaW4JCQk8a2VuaEBjbWYubnJsLm5hdnkubWlsPgoJS2V2aW4gU3RldmVzCQkJPHN0ZXZlc2tAcG9ib3guY29tPgoJS2xhdXMgS2xlaW4JCQk8a2xlaW5rQHJlemlwcm96aXRhZXQuZGU+CiAJS3JpcyBLZW5uYXdheQkJCTxrcmlzQGZyZWVic2Qub3JnPgoJS3J6eXN6dG9mIEhhbGFzYQkJPGtoY0BwbS53YXcucGw+CglMYXJyeSBMaWxlCQkJPGxpbGVAc3RkaW8uY29tPgoJTGVubmVydCBCdXl0ZW5oZWsgCQk8YnV5dGVuaEBnbnUub3JnPgoJTG9yaXMgRGVnaW9hbm5pCQkJPGxvcmlzQG5ldGdyb3VwLXNlcnYucG9saXRvLml0PgoJTG92ZSBI9nJucXVpc3QtxXN0cmFuZAkJPGxoYUBzdGFja2VuLmt0aC5zZT4KCU1hY2llaiBXLiBSb3p5Y2tpCQk8bWFjcm9AZHMyLnBnLmdkYS5wbD4KCU1hbnUgUGF0aGFrCQkJPG1hcGF0aGFrQGNpc2NvLmNvbT4KCU1hcmMgQS4gTGVobWFubgkJCTxwY2dAZ29vZi5jb20+CglNYXJrIEVsbHpleSBUaG9tYXMJCTxtYXJrQGFja2Vycy5uZXQ+CglNYXJrbyBLaWlza2lsYQkJCTxjYXJuaWxAY3MudHV0LmZpPgoJTWFya3VzIFNjaPZwZmxpbgkJPHNjaG9lcGZsaW5Ac291cmNlZm9yZ2UubmV0PgoJTWFyc2hhbGwgUm9zZQkJCTxtcm9zZUBkYmMubXR2aWV3LmNhLnVzPgoJTWFydGluIEh1c2VtYW5uCQkJPG1hcnRpbkBuZXRic2Qub3JnPgoJTWF4IExhaWVyCQkJPG1heEBsb3ZlMnBhcnR5Lm5ldD4KCU1pY2hhZWwgTWFkb3JlCQkJPG1tYWRvcmVAdHVyYm9saW51eC5jb20+CglNaWNoYWVsIFNoYWxheWVmZgkJPG1pY2tleUBvcGVuYnNkLm9yZz4KCU1pY2hhZWwgU2hpZWxkcwkJCTxzaGllbGRzQG1zcmwuY29tPgoJTWljaGFlbCBULiBTdG9sYXJjaHVrCQk8bXRzQG9mZi50bz4KCU1pY2hlbGUgIm15ZGVjYXkiIE1hcmNoZXR0bwk8c21hcmNoZXR0bzFAdGluLml0PgoJTW9ucm9lIFdpbGxpYW1zIAkJPG1vbnJvZUBwb2JveC5jb20+CglNb3Rvbm9yaSBTaGluZG8JCQk8bXNoaW5kb0Btc2hpbmRvLm5ldD4KCU5hdGhhbiBKLiBXaWxsaWFtcwkJPG5hdGhhbndATUlULkVEVT4KCU5hdGhhbmllbCBDb3VwZXItTm9sZXMJCTxOYXRoYW5pZWxAaXNpMS50Y2Npc2kuY29tPgoJTmVpbCBULiBTcHJpbmcJCQk8Ymx1ZWhhbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CglOaWVscyBQcm92b3MJCQk8cHJvdm9zQG9wZW5ic2Qub3JnPgoJTmlja29sYWkgWmVsZG92aWNoCQk8a29seWFATUlULkVEVT4KICAgICAgICBOaWNvbGFzIEZlcnJlcm8gICAgICAgICAgICAgICAgIDx0b29yb3BAYmFieWxvLm5ldD4KCU5vcml0b3NoaSBEZW1penUJCTxkZW1penVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJT2xhZiBLaXJjaCAJCQk8b2tpckBjYWxkZXJhLmRlPgoJT25ubyB2YW4gZGVyIExpbmRlbgkJPG9ubm9Ac2ltcGxleC5ubD4KCVBhc2NhbCBIZW5uZXF1aW4gCQk8cGFzY2FsLmhlbm5lcXVpbkBpbnQtZXZyeS5mcj4KCVBhc3Zvcm4gQm9vbm1hcmsJCTxib29ubWFya0BqdW5pcGVyLm5ldD4KCVBhdWwgTXVuZHQJCQk8bGV0aGFsQGxpbnV4LXNoLm9yZz4KCVBhdWwgUy4gVHJhaW5hCQkJPHBzdEBmcmVlYnNkLm9yZz4KCVBhdmxpbiBSYWRvc2xhdm92CQk8cGF2bGluQGljaXIub3JnPgoJUGVra2EgU2F2b2xhIAkJCTxwZWtrYXNAbmV0Y29yZS5maT4JCglQZXRlciBGYWxlcwkJCTxwZXRlckBmYWxlcy1sb3JlbnoubmV0PgoJUGV0ZXIgSmVyZW15CQkJPHBldGVyLmplcmVteUBhbGNhdGVsLmNvbS5hdT4KCQkJCQk8cGZodW50QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCVBoaWwgV29vZAkJCTxjcHdAbGFubC5nb3Y+CglSYWZhbCBNYXN6a293c2tpCQk8cnptQGljbS5lZHUucGw+CglSYXBoYWVsIFJhaW1iYXVsdAkJPHJhcGhhZWwucmFpbWJhdWx0QG5ldGFzcS5jb20+CglSaWNrIENoZW5nICAgICAgICAgICAgICAgICAgICAgIDxyY2hlbmdAanVuaXBlci5uZXQ+CglSaWNrIEpvbmVzCQkJPHJpY2suam9uZXMyQGhwLmNvbT4KCVJpY2sgV2F0c29uCQkJPHdhdHNvbnJpY2tAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJUm9iIEJyYXVuCQkJPGJicmF1bkBzeW5hY2submV0PgoJUm9kZXJpY2sgU2NoZXJ0bGVyCQk8cm9kZXJpY2tAYXJnb24ub3JnPgoJU2FtaSBGYXJpbgkJCTxzYWZhcmlAaWtpLmZpPgoJU2NvdHQgUm9zZQkJCTxzeWJlcnB1bmtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJU2ViYXN0aWFuIEtyYWhtZXIJCTxrcmFobWVyQGNzLnVuaS1wb3RzZGFtLmRlPgoJU2ViYXN0aWVuIFZpbmNlbnQJCTxzdmluY2VudEBpZGVtcy5mcj4KCVNldGggV2Vic3RlcgkJCTxzd2Vic3RlckBzc3QubGwubWl0LmVkdT4KCVNoaW5zdWtlIFN1enVraQkJCTxzdXpAa2FtZS5uZXQ+CglTdGVpbmFyIEhhdWcJCQk8c3RoYXVnQG5ldGhlbHAubm8+CiAgICAgICAgU3dhbWluYXRoYW4gQ2hhbmRyYXNla2FyYW4gICAgICA8Y2hhbmRlckBqdW5pcGVyLm5ldD4KCVRha2FzaGkgWWFtYW1vdG8JCTx5YW10QG13ZC5iaWdsb2JlLm5lLmpwPgoJVGVycnkgS2VubmVkeQkJCTx0ZXJyeUB0bWsuY29tPgoJVGltbyBLb3NraWFoZGUKCVRvbnkgTGkJCQkJPHRsaUBwcm9ja2V0LmNvbT4KCVVucyBMaWRlcgkJCTx1bnNsaWRlckBtaXJhbmRhLm9yZz4KCVZpY3RvciBPcHBsZW1hbgkJCTxvcHBsZW1hbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CglXZXNsZXkgR3JpZmZpbgkJCTx3Z3JpZmZpbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CglXaWxiZXJ0IGRlIEdyYWFmCQk8d2lsYmVydGRnQGhldG5ldC5ubD4KCVllbiBZZW4gTGltCglZb3NoaWZ1bWkgTmlzaGlkYQoKVGhlIG9yaWdpbmFsIExCTCBjcmV3OgoJU3RldmUgTWNDYW5uZQoJQ3JhaWcgTGVyZXMKCVZhbiBKYWNvYnNvbgo=