VGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGhhdmUgbWFkZSBsYXJnZSBjb250cmlidXRpb25zCnRvIHRoZSBwdWJsaWMgdmVyc2lvbiBvZiBQcm90b2NvbCBCdWZmZXJzLgoKT3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uOgogIFNhbmpheSBHaGVtYXdhdCA8c2FuamF5QGdvb2dsZS5jb20+CiAgSmVmZiBEZWFuIDxqZWZmQGdvb2dsZS5jb20+CiAgRGFuaWVsIER1bGl0eiA8ZGFuaWVsQGdvb2dsZS5jb20+CiAgQ3JhaWcgU2lsdmVyc3RlaW4KICBQYXVsIEhhYWhyIDxoYWFockBnb29nbGUuY29tPgogIENvcmV5IEFuZGVyc29uIDxjb3JpbkBnb29nbGUuY29tPgogIChhbmQgbWFueSBvdGhlcnMpCgpQcm90bzIgQysrIGFuZCBKYXZhIHByaW1hcnkgYXV0aG9yOgogIEtlbnRvbiBWYXJkYSA8a2VudG9uQGdvb2dsZS5jb20+CgpQcm90bzIgUHl0aG9uIHByaW1hcnkgYXV0aG9yczoKICBXaWxsIFJvYmluc29uIDxyb2JpbnNvbkBnb29nbGUuY29tPgogIFBldGFyIFBldHJvdiA8cGV0YXJAZ29vZ2xlLmNvbT4KCkxhcmdlIGNvZGUgY29udHJpYnV0aW9uczoKICBKb3NlcGggU2Nob3JyIDxqc2Nob3JyQGdvb2dsZS5jb20+CiAgV2VuYm8gWmh1IDx3ZW5ib3pAZ29vZ2xlLmNvbT4KCkxhcmdlIHF1YW50aXR5IG9mIGNvZGUgcmV2aWV3czoKICBTY290dCBCcnVjZSA8c2JydWNlQGdvb2dsZS5jb20+CiAgRnJhbmsgWWVsbGluCiAgTmVhbCBOb3J3aXR6IDxubm9yd2l0ekBnb29nbGUuY29tPgogIEplZmZyZXkgWWFzc2tpbiA8anlhc3NraW5AZ29vZ2xlLmNvbT4KICBBbWJyb3NlIEZlaW5zdGVpbiA8YW1icm9zZUBnb29nbGUuY29tPgoKRG9jdW1lbnRhdGlvbjoKICBMaXNhIENhcmV5IDxsY2FyZXlAZ29vZ2xlLmNvbT4KCk1hdmVuIHBhY2thZ2luZzoKICBHcmVnb3J5IEtpY2sgPGdha0Bnb29nbGUuY29tPgoKUGF0Y2ggY29udHJpYnV0b3JzOgogIEtldmluIEtvIDxrZXZpbi5zLmtvQGdtYWlsLmNvbT4KICAgICogU21hbGwgcGF0Y2ggdG8gaGFuZGxlIHRyYWlsaW5nIHNsYXNoZXMgaW4gLS1wcm90b19wYXRoIGZsYWcuCiAgSm9oYW4gRXVwaHJvc2luZSA8cHJvcHB5QGFtaW5jaGUuY29tPgogICAgKiBTbWFsbCBwYXRjaCB0byBmaXggUHlodG9uIENhbGxNZXRob2QoKS4KICBVbHJpY2ggS3VuaXR6IDxrdW5lQGRlaW5lLXRhbGVyLmRlPgogICAgKiBTbWFsbCBvcHRpbWl6YXRpb25zIHRvIFB5dGhvbiBzZXJpYWxpemF0aW9uLgogIExlYW5kcm8gTHVjYXJlbGxhIDxsbHVjYXhAZ21haWwuY29tPgogICAgKiBWSSBzeW50YXggaGlnaGxpZ2h0aW5nIHR3ZWFrcy4KICAgICogRml4IGNvbXBpbGVyIHRvIG5vdCBtYWtlIG91dHB1dCBleGVjdXRhYmxlLgogIERpbGlwIEpvc2VwaCA8ZGlsaXAuYW50b255Lmpvc2VwaEBnbWFpbC5jb20+CiAgICAqIEhldXJpc3RpYyBkZXRlY3Rpb24gb2Ygc3ViLW1lc3NhZ2VzIHdoZW4gcHJpbnRpbmcgdW5rbm93biBmaWVsZHMgaW4KICAgICAgdGV4dCBmb3JtYXQuCiAgQnJpYW4gQXRraW5zb24gPG5haXJiNzc0QGdtYWlsLmNvbT4KICAgICogQWRkZWQgQE92ZXJyaWRlIGFubm90YXRpb24gdG8gZ2VuZXJhdGVkIEphdmEgY29kZSB3aGVyZSBhcHByb3ByaWF0ZS4KICBWaW5jZW50IENob2luaehyZSA8Q2hvaW5pZXJlLlZpbmNlbnRAaHlkcm8ucWMuY2E+CiAgICAqIFRydTY0IHN1cHBvcnQuCiAgTW9udHkgVGF5bG9yIDxtb250eS50YXlsb3JAZ21haWwuY29tPgogICAgKiBTb2xhcmlzIDEwICsgU3VuIFN0dWRpbyBmaXguCiAgQWxlayBTdG9ybSA8YWxlay5zdG9ybUBnbWFpbC5jb20+CiAgICAqIFNsaWNpbmcgc3VwcG9ydCBmb3IgcmVwZWF0ZWQgc2NhbGFyIGZpZWxkcyBmb3IgdGhlIFB5dGhvbiBBUEkuCiAgT2xlZyBTbW9sc2t5IDxvbGVnLnNtb2xza3lAZ21haWwuY29tPgogICAgKiBNUyBWaXN1YWwgU3R1ZGlvIGVycm9yIGZvcm1hdCBvcHRpb24uCiAgQnJpYW4gT2xzb24gPGJyaWFub2xzb25AZ29vZ2xlLmNvbT4KICAgICogZ3ppcC96bGliIEkvTyBzdXBwb3J0LgogIE1pY2hhZWwgUG9vbGUgPG1kcG9vbGVAdHJvaWx1cy5vcmc+CiAgICAqIEZpeGVkIHdhcm5pbmdzIGFib3V0IGdlbmVyYXRlZCBjb25zdHJ1Y3RvcnMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nCiAgICAgIGFsbCBmaWVsZHMgKG9ubHkgcHJlc2VudCB3aXRoIGNlcnRhaW4gY29tcGlsZXIgc2V0dGluZ3MpLgogICAgKiBBZGRlZCBnZW5lcmF0aW9uIG9mIGZpZWxkIG51bWJlciBjb25zdGFudHMuCiAgV2luayBTYXZpbGxlIDx3aW5rQGdvb2dsZS5jb20+CiAgICAqIEZpeGVkIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIHByb2JsZW0gaW4gbG9nZ2luZyBjb2RlLgo=