PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PjwhRE9DVFlQRSByc3MgUFVCTElDICItLy9OZXRzY2FwZSBDb21tdW5pY2F0aW9ucy8vRFREIFJTUyAwLjkxLy9FTiIgImh0dHA6Ly9teS5uZXRzY2FwZS5jb20vcHVibGlzaC9mb3JtYXRzL3Jzcy0wLjkxLmR0ZCI+Cjxyc3MgdmVyc2lvbj0iMC45MSI+PGNoYW5uZWw+PHRpdGxlPkZvcnJlc3QgKDAuOC1kZXYpIENoYW5nZXM8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Rm9ycmVzdCAoMC44LWRldikgQ2hhbmdlczwvZGVzY3JpcHRpb24+PGxhbmd1YWdlPmVuLXVzPC9sYW5ndWFnZT4KICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAgICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCgogICAgCiAgCiAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAKCiAgCiAgCiAgCgogIAogICAgCiAgICAgIAogICAgICAgIFNlZSBlYWNoCiAgICAgICAgICBwbHVnaW4KICAgICAgICAgIGZvciBpdHMgZGV0YWlsZWQgY2hhbmdlcy4KICAgICAgICAKICAgICAgCiAgICAgIAoKICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKCiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIHVwZ3JhZGluZyB0byB2MC44CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi05MjQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItOTI0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAgRk9SLTkyNCBSZWFkZGluZyB0aGUgbG9hZGluZyBmcm9tCiAgICAgICAgKGRlZmF1bHQtKWZvcnJlc3QucHJvcGVydGllcyB3aGljaCBnb3QgcmVtb3ZlZCBpbiByNDMwNTg4IHdoZW4gY2xvc2luZyBGT1ItOTE2LgogICAgICAgIFRoYW5rcyBNYXJ0aW4gU3RvY2toYW1tZXIgZm9yIHBvaW50aW5nIGl0IG91dCwgcHJvdmlkaW5nIHVzIHdpdGggYSBwYXRjaCBhbmQgZm9yIHlvdXIKICAgICAgICBjb250cmlidXRpb24uICBUaGFua3MgdG8gTWFydGluIFN0b2NraGFtbWVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi00NDgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDQ4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBXaGVuIHVzaW5nIGh0bWwgYXMgc291cmNlLCB0aGUgImEiIGVsZW1lbnRzIHdlcmUgbm90IHJlbmRlcmVkIHByb3Blcmx5IGlmIGJvdGgKICAgICAgICBAaHJlZiBhbmQgQG5hbWUgYXR0cmlidXRlcy4gQSBzaWRlLWVmZmVjdCBvZiB0aGlzIGZpeCBpcyB0aGF0IG5vdyBhbGwgb3RoZXIKICAgICAgICBhdHRyaWJ1dGVzIHN1Y2ggYXMgQHRpdGxlIG9yIEB0YXJnZXQgYXJlIGNvcGllZCBvdmVyLgogICAgICAgIEFsc28gcmVtb3ZlZCB0aGUgYXV0b21hdGVkIGdlbmVyYXRpb24gb2YgQGlkIGF0dHJpYnV0ZXMgZnJvbSBAbmFtZSBhdHRyaWJ1dGVzLAogICAgICAgIHdoaWNoIGNhbiBsZWFkIHRvIGludmFsaWQgSURzIGFuZCBvdGhlciBjb25mdXNpb24uCiAgICAgICBUaGFua3MgdG8gSmltIERpeG9uLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZPUi05MjAgLSBBZGRpbmdzIG5vdGVzIGhvdyB0bwogICAgICAgIHVwZGF0ZSB0aGUgZGlmZmVyZW50IG1vZHVsZSBjYWxscyBpbgogICAgICAgIGN1c3RvbSBjb2RlLiA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBGT1ItOTIwIE1lcmdpbmcgdGhlIGRlZmF1bHRzIGFuZCBwcm9qZWN0IG1vZHVsZXMgdG8gdGhlIG5ldwogICAgICAgIHByb3BlcnRpZXMgbW9kdWxlLiBZb3UgY2FuIHVzZSBpdCBsaWtlIHtwcm9wZXJ0aWVzOmZvcnJlc3QuaG9tZX0sIHBsZWFzZSByZWZlciB0bwogICAgICAgIHRoZQogICAgICAgIHVwZGF0ZSBkb2N1bWVudGF0aW9uIGhvdyB0bwogICAgICAgIGNoYW5nZSB5b3VyIHtkZWZhdWx0czoqfSB7cHJvamVjdDoqfSBhbmQge2ZvcnJlc3Q6Kn0uPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItODAwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTgwMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgIEZPUi04MDAgLSBtYWtlCiAgICAgICAgZm9ycmVzdC5wcm9wZXJ0aWVzLnhtbCAoYXMgYWdncmVnYXRpb24gb2YgYWxsIHByb3BlcnRpZXMpIGF2aWFibGUgdmlhIGNvY29vbjovLy4KICAgICAgICBUaGUgbGFzdCByZW1haW5pbmcgaXNzdWUgd2FzIGltcGxlbWVudGluZyB0aGUgSXRlcmF0b3IgZ2V0QXR0cmlidXRlTmFtZXMgaW4gdGhlCiAgICAgICAgRm9ycmVzdENvbmZNb2R1bGUuIFRvIHNlZSBhbGwgYXZpYWJsZSBwcm9wZXJ0aWVzIGFkZAogICAgICAgIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4ub3V0cHV0LmlucHV0TW9kdWxlIGFuZCByZXF1ZXN0CiAgICAgICAgY29jb29uOi8vbW9kdWxlLnByb3BlcnRpZXMucHJvcGVydGllcy48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi05MTYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItOTE2KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAgRk9SLTkxNiAtIGFkZGluZyBzaXRlLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlcwogICAgICAgIEFwcGx5aW5nIHBhdGNoZXMgZnJvbSBNYXRoaWV1IENoYW1wbG9uLiBUaGFua3MgTWF0aGlldSBmb3IgeW91ciBjb250cmlidXRpb24uCiAgICAgICAgIFRoYW5rcyB0byBNYXRoaWV1IENoYW1wbG9uLjwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgVXBkYXRlZCB0aGUgCiAgICAgICAgZm9ycmVzdC1jb3JlLnhjb25mIGFuZCBkZWNsYXJlZCB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgYXJlIG5lZWRlZCAKICAgICAgICBmb3IgZmxvdy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZmxvdyBpbiBmb3JyZXN0LiBUaGFua3MgdG8gRGF2aWQgQ3Jvc3NsZXkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBCRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmFibGVkIGkxOG4gYnkgZGVmYXVsdCBpbiBmcmVzaC1zaXRlOiBhcyB0aGUgZGVmYXVsdCBpMThuIGNvbmZpZyBub3cgcmVxdWlyZXMKICAgICAgICBhbiBleHBsaWNpdCBsb2NhbGUgc3BlY2lmaWNhdGlvbiAodXNpbmcgYW4gVVJMIHBhcmFtZXRlciBmb3IgZXhhbXBsZSksIHRoaXMgc2hvdWxkbid0CiAgICAgICAgYWZmZWN0IHBlb3BsZSB3aG8gZG8gbm90IHVzZSBpMThuLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBCRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBDb21wbGV0ZWQgdGhlIGRlIGFuZCBmciB0cmFuc2xhdGlvbnMgb2YgdGhlIGZyZXNoLXNpdGUsIGFkZGVkIGZyIGFuZCBkZQogICAgICAgIHZlcnNpb25zIG9mIHRoZSBpbmRleCBwYWdlIGFzIGV4YW1wbGVzIG9mIGxhbmd1YWdlIHN3aXRjaGluZy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItODg3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQkQKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTg4NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTW92ZWQgTG9jYWxlQWN0aW9uIGFuZCBMb2NhbGVNYXRjaGVyIGNvbmZpZ3VyYXRpb25zIHRvIG1haW4gc2l0ZW1hcCwgYW5kIGNoYW5nZWQKICAgICAgICBJMThuVHJhbnNmb3JtZXIgdXNlIHRvIHRha2UgbG9jYWxlIGluZm8gZnJvbSBlbmNsb3NpbmcgTG9jYWxlQWN0aW9uIGV2ZXJ5d2hlcmUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIEZBUSB0byBleHBsYWluIHRoZSBDb2Nvb24gQ2FjaGUgYW5kIHNvbWUgd2F5cyB0byBlbmhhbmNlIHJlc3BvbnNpdmVuZXNzLgogICAgICAgIEluc3BpcmVkIGJ5IGNvbW1lbnRzIGZyb20gVG9yc3RlbiBTdG9scG1hbm4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgdGhlIGV4cGxhbmF0aW9uIG9mIGludGVncmF0aW5nIAogICAgICAgIERvY0Jvb2sgc291cmNlcyB0byBhbHNvIGV4cGxhaW4KICAgICAgICBob3cgdG8gdXNlIENvbnRlbnQgQXdhcmUgUGlwZWxpbmVzIChTb3VyY2VUeXBlQWN0aW9uKS4KICAgICAgIFRoYW5rcyB0byBCcmlhbiBEdWJlLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgdGhlIEZBUSBhYm91dCBlZmZpY2llbnRseSBnZW5lcmF0aW5nCiAgICAgICAgc2luZ2xlIGRvY3VtZW50cy4KICAgICAgICBVc2UgJ3dnZXQnIG9yIEFudCB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIGZpbGVzLgogICAgICAgVGhhbmtzIHRvIEphbiBNYXRlcm5lLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJldmlldyBhbmQgZW5oYW5jZSB0aGUgCiAgICAgICAgUmVsZWFzZSBkb2MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGRvYyB0byBleHBsYWluCiAgICAgICAgU2tpbnMgYW5kIERpc3BhdGNoZXIgc3RhdHVzLiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCB0byBBcGFjaGUtQW50LTEuNi41IHJlbGVhc2UsIGpzY2gtMC4xLjI4LCBhcGFjaGUtamFrYXJ0YS1jb21tb25zLW5ldC0xLjQuMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi02OTApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY5MCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXNlIGxvY2F0aW9ubWFwIHRvIHJlc29sdmUgaTE4biBjYXRhbG9ndWVzLgogICAgICAgVGhhbmtzIHRvIEJyaWFuIER1YmUuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgRlNPCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1vdmUgZG9jdW1lbnRhdGlvbiBmcm9tIHRleHQgZmlsZSBpbnRvIGhvd3RvCiAgICAgICAgUmVsZWFzZSBkb2MgYW5kIGVuaGFuY2UgaXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZS1hcnJhbmdlIGRvY3VtZW50YXRpb24gbWVudXMsIGFkZGVkIGJlc3QgcHJhY3RpY2UgYW5kIHByb2NlZHVyZXMgc2VjdGlvbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEFHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgeGVyY2VzIHRvIDIuOC4wLCB4bWwtYXBpcyB0byAxLjMuMDMsIGxvZzRqIHRvIDEuMi4xMyBhbmQgZWhjYWNoZSB0byAxLjIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBkb2N1bWVudCBhYm91dCBwcm9qZWN0CiAgICAgICAgcm9sZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTgyNCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04MjQpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEhvd3RvLXYyMCBub3cgcHJvcGVybHkgaGFuZGxlcyBhL0BjbGFzcz1mb3JrIGV0Yy4gYXR0cmlidXRlIHRvIGVuYWJsZQogICAgICAgIGxpbmtzIHRvIG9wZW4gaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuCiAgICAgICBUaGFua3MgdG8gU3RldmUgTWFzb3Zlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi00OTIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDkyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBpbmNvbnNpc3RlbnQgbGluZS1lbmRpbmdzIGluIGNvbW1lbnRzIG9mIGdlbmVyYXRlZCBodG1sLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgaW5pdGlhbCBnbG9zc2FyeSB0byBleHBsYWluCiAgICAgICAgc29tZSBGb3JyZXN0IHRlcm1pbm9sb2d5LgogICAgICAgVGhhbmtzIHRvIEdhdmluLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTc1NikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NTYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImNpdGF0aW9ucyIuIFRoYW5rcyB0byBHYXZpbiBmb3IKICAgICAgICB0dXJuaW5nIHRoZSBjb250cmlidXRpb24gaW50byBhIHBsdWdpbi4KICAgICAgICBVc2UgaW5wdXQgZG9jcyB0aGF0IGFyZSBsaXN0cyBvZiBjaXRhdGlvbnMuCiAgICAgICBUaGFua3MgdG8gUm9zcyBHYXJkbGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTc1NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NTUpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImdsb3NzYXJ5Ii4gVGhhbmtzIHRvIEdhdmluIGZvcgogICAgICAgIHR1cm5pbmcgdGhlIGNvbnRyaWJ1dGlvbiBpbnRvIGEgcGx1Z2luLgogICAgICAgIEVuYWJsZSBnbG9zc2FyeSBpbnB1dDogYSBsaXN0IG9mIHRlY2huaWNhbCB0ZXJtcyBhbmQgZGVmaW5pdGlvbnMuCiAgICAgICBUaGFua3MgdG8gUm9zcyBHYXJkbGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gIm9kdCIuCiAgICAgICAgVXNlIE9wZW5Eb2N1bWVudCBPRFQgYXMgaW5wdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBub3RlIGFib3V0IHVzaW5nIGVudGl0eSBjYXRhbG9ncyBmb3IgRFREcyBldGMuIGZvcgogICAgICAgIHBsdWdpbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBDRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbXByb3ZlZCB0aGUgZXhwbGFuYXRpb24gb2YKICAgICAgICB1c2luZyBwbHVnaW5zOgogICAgICAgIGhvdyB0aGV5IGFyZSBkZWNsYXJlZCwgd2hhdCB2ZXJzaW9uIG9mIGEgcGx1Z2luIGlzIHVzZWQsIHdoYXQgbG9jYXRpb25zIGFyZQogICAgICAgIHNlYXJjaGVkIGZvciBwbHVnaW5zIHNvdXJjZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTg0MCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04NDApCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgdGhlIEZBUSBhYm91dCBlZmZpY2llbnRseSBnZW5lcmF0aW5nCiAgICAgICAgc2luZ2xlIGRvY3VtZW50cy4KICAgICAgIFRoYW5rcyB0byBDbGF5IExlZWRzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBGQVEgYWJvdXQgdXNpbmcgb2xkZXIgdmVyc2lvbnMgb2Ygc3BlY2lmaWMgcGx1Z2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgYWRkCiAgICAgICAgYnkKICAgICAgICBDRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgbmV3IGJ1aWxkIHRhcmdldCAiY2xlYW4tYnVpbGQiLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi04NDIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODQyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgc3VwcG9ydCB0byB0aGUgdGlncmlzIHNraW4gZm9yIGhlYWRlci9tZXRhIHRhZ3MgaW4geGRvYyBpbnB1dCBkb2N1bWVudHMuCiAgICAgICBUaGFua3MgdG8gQnJpYW4gRHViZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQ0QKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWJsZSB0byBkZWNsYXJlCiAgICAgICAgYWRkaXRpb25hbCBzb3VyY2VzIGZvciBwbHVnaW5zLiBBc3Npc3RzIHdpdGggZGV2ZWxvcG1lbnQgb2YgcHJpdmF0ZQogICAgICAgIGFuZCBsb2NhbCBwcm9qZWN0LXNwZWNpZmljIHBsdWdpbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBkZW1vIHBhZ2UgdG8gc2VlZCBzaXRlIGZvciAiVXNpbmcgU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzIChTVkcpIi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgoKCiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTGluayBmcm9tIHdoaXRlYm9hcmQvZm9ycmVzdGRvYy9SRUFETUUudHh0IHRvIHNvbWUgcGFzdCBtYWlsIGRpc2N1c3Npb24KICAgICAgICB0byBlbmNvdXJhZ2UgaXRzIGRldmVsb3BtZW50LiBGb3JyZXN0ZG9jIGlzIGEgSmF2YWRvYy1saWtlL1NvdXJjZWNvZGUvRG9jdW1lbnRhdGlvbgogICAgICAgIG1hbmFnZW1lbnQgc3lzdGVtLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi04MTgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODE4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGb3JyZXN0Ym90IGRlcGxveS5zY3Agd29ya3N0YWdlIG5vdyB1c2VzIGtleWZpbGUvcGFzc3BocmFzZSBpbiBwcmVmZXJlbmNlLAogICAgICAgIHRoZW4gZmFsbGJhY2sgdG8gcmVtb3RlIHBhc3N3b3JkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgcGFnZSBmb3IgdGhhbmtzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgRkFRIGFib3V0IGpvYiBwb3N0aW5ncy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItODA2KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04MDYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJldHJpZXZlIGkxOG4gY2F0YWxvZ3VlIGZyb20gd2hhdGV2ZXIgc2tpbnMgZGlyZWN0b3J5IGlzIGluIHVzZS4KICAgICAgIFRoYW5rcyB0byBUb3JzdGVuIFN0b2xwbWFubi48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBGU08KICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGV4cGxhbmF0aW9uIG9mIHByb2Nlc3NpbmcgdG8gdGhlIHBhdGh1dGlscyBzdHlsZXNoZWV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlIG9wdGlvbmFsIHByaW50aW5nIG9mIGltYWdlIGFsdCB0ZXh0IGluIFBERnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gInNlcnZlclN0YXR1cyIuCiAgICAgICAgVXNlcyB0aGUgU3RhdHVzR2VuZXJhdG9yIHRvIHNob3cgQ29jb29uJ3Mgb3BlcmF0aW5nIGVudmlyb25tZW50CiAgICAgICAgYW5kIHNob3dzIHRoZSBjb250ZW50cyBvZiB0aGUgY2FjaGUgc3RvcmVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NzksRk9SLTc4MCxGT1ItNzIyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NzksRk9SLTc4MCxGT1ItNzIyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGUgdGhlIEZvcnJlc3QgcGx1Z2luIGZvciB0aGUgWE1MbWluZCBYTUwgRWRpdG9yIGF0IAogICAgICAgIHRvb2xzL3h4ZQogICAgICAgVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFdXCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFBsdWdpbjogUGhvdG9HYWxsZXJ5LgogICAgICAgIEF1dG9tYXRlZCB0aGUgaW1hZ2UgdmFyaWFudCAoZS5nLiB0aHVtYiwgc21hbGwpIGNyZWF0aW9uLiBOb3RlIHRoYXQgdGhpcwogICAgICAgIGlzIG5vdAogICAgICAgIGJhY2t3YXJkLWNvbXBhdGlibGUsIHNvIGV4aXN0aW5nIHVzZXJzIG5lZWQgdG8gbW92ZSBvcmlnaW5hbCBpbWFnZXMKICAgICAgICBmcm9tIHRoZSBvbGQgImJpZyIgZGlyZWN0b3J5IGFuZCByZW1vdmUgdGhlICJwcmV2aWV3IiBhbmQgInNtYWxsIiBkaXJlY3Rvcmllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBncmFkZSBvdXIgcGFja2FnZWQgQ29jb29uIHRvIGNvY29vbi0yLjIuMC1kZXYtcjM1MTk5MCBhbmQgZW5oYW5jZWQgdGhlIG5vdGVzCiAgICAgICAgYWJvdXQgaG93IHRvIHVwZ3JhZGUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgc2tpbmNvbmYgcGFyYW1ldGVyICJkaXNhYmxlLWNvcHlyaWdodC1mb290ZXIiIChkZWZhdWx0PWZhbHNlKQogICAgICAgIHRvIG5vdCBzaG93IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIGh0bWwgcGFnZSBmb290ZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQKICAgICAgICAgIChidWcgRk9SLTc3OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NzgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBGQVEgYWJvdXQgCiAgICAgICAgRW5hYmxpbmcgQ29jb29uIENoZWNrc3VtLgogICAgICAgVGhhbmtzIHRvIFBhdWwgS3JvbmVud2V0dGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW50ZXJuYWwgcGx1Z2luICJEZXZUb29scyIuCiAgICAgICAgSW50ZW5kZWQgZm9yIHZhcmlvdXMgZGV2ZWxvcG1lbnQtcmVsYXRlZCB0YXNrcywgZS5nLgogICAgICAgIHB1Ymxpc2ggYSBwYWdlIHRvIHRoZSBsb2NhbCBidWlsZCBkaXJlY3RvcnkgZnJvbSB3aXRoaW4gJ2ZvcnJlc3QgcnVuJy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIG91dHB1dCBwbHVnaW4gIkFuYWtpYSIuCiAgICAgICAgT3V0cHV0IGFzIHRoZSBBbmFraWEgInhkb2MiIGZvcm1hdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGV4cGxhbmF0aW9uIG9mCiAgICAgICAgVXNpbmcgQ29jb29uIHNpdGVtYXAgZXhlY3V0aW9uIGxvZ2dlci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIAogCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuc3VyZSB0aGF0IGNvbnRlbnQgZXhpc3RzIGJlZm9yZSBmb3JyZXN0IHN0YXJ0cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGEgbmV3IHhzbHQgdGVtcGxhdGUgImFkZC5jbGFzcyIgdG8gcHJvcGVybHkgYXBwZW5kIGV4dHJhIGNsYXNzIGF0dHJpYnV0ZXMKICAgICAgICB0byBub3RlfHdhcm5pbmd8Zml4bWV8Y29kZSBlbGVtZW50cyB0byBlbmFibGUgZXh0cmEgQ1NTIGNsYXNzaWZpY2F0aW9uLgogICAgICAgIERpZmYgCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJldmlldyBhbmQgc3luY2hyb25pc2Ugb3VyIENvY29vbiBjb25maWd1cmF0aW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBDRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAicGhwIiB0byBpbnRlZ3JhdGUgcGhwIGNhbGxzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgRkFRICNjcmF3bGVyIHRvIGV4cGxhaW4gaG93IHRoZSBDb2Nvb24gY3Jhd2xlciBnYXRoZXJzIGxpbmtzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgbm90ZXMgYWJvdXQgaG93IHRvIHVzZSB0aGUgSXNzdWUgVHJhY2tlci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIGxlbnlhLnpvbmUgCiAgICAgICAgc2l0ZSB0byB0aGUgZGlzcGF0Y2hlciBzZWN0aW9uIGluIHRoZSBsaXZlIHNpdGVzLiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTmV3IHNraW5jb25mIHBhcmFtZXRlciAiZGlzYWJsZS1jb3B5cmlnaHQtZm9vdGVyIiAoZGVmYXVsdD1mYWxzZSkKICAgICAgICB0byBub3Qgc2hvdyB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBodG1sIHBhZ2UgZm9vdGVyLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGUgdGhlIG5vdGVzIG9uIHBhdGNoIHN1Ym1pc3Npb24uCiAgICAgICAgVGVjaG5pcXVlcyBzdWdnZXN0ZWQgYnkgUmljaGFyZCBDYWxtYmFjaCBhbmQgUm9zcyBHYXJkbGVyLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi01ODgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU4OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgRm9ycmVzdENvbmZNb2R1bGUgYXMgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBjb25maWd1cmF0aW9uIHN5c3RlbS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMzg4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0zODgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEEgImhhbGYgd2F5IiBzb2x1dGlvbiB0byB1c2luZyBwbHVnaW5zIGluIHBsYWNlLiBOb3RlIHRoYXQgaWYgeW91IG1vZGlmeQogICAgICAgIHlvdXIgcGx1Z2luIGNvZGUgeW91IHdpbGwgc3RpbGwgbmVlZCB0byBkbyAiYW50IGxvY2FsLWRlcGxveSIgdG8gc2VlIHRoZQogICAgICAgIGNoYW5nZXMuIFRoaXMgcGF0Y2ggb25seSBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgb24gdGhlCiAgICAgICAgZmlyc3QgcnVuLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi01NjgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTY4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbXByb3ZlZCBmb3JyZXN0Ym90IGRvY3MuCiAgICAgICBUaGFua3MgdG8gUmljaGFyZCBDYWxtYmFjaC48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmhhbmNlIHRoZSBGQVEgI3NpbmdsZS1kb2N1bWVudCBhYm91dCAicHJvamVjdC5zdGFydC11cmkiIHRvIGNvbnRyb2wgd2hpY2ggZmlsZXMgdG8gcHJvY2Vzcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRXhwbGFpbiBob3cgZGV2ZWxvcGVycyBjYW4gYWRkIHNpdGVzIHRvIEV4YW1wbGUgc2l0ZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSByZW1vdmU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSByZW1vdmUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZW1vdmUgeGNvbmYgc3VwcG9ydCBmb3IgcGx1Z2lucy4gQ29jb29uIGhhcyBtb3ZlZCBhd2F5IGZyb20gdGhpcwogICAgICAgIFhDb25mVG9vbFRhc2sgeHBhdGNoIHRlY2huaXF1ZS4KICAgICAgICBEaWZmIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NTEpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzUxKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBWYXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KICAgICAgIFRoYW5rcyB0byBSaWNoYXJkIENhbG1iYWNoLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlZHVjZSBzb21lIGxvZyBtZXNzYWdlcyBkdXBsaWNhdGlvbi4gVGlkeSB1cCB0aGUgbG9nIGNvbmZpZ3VyYXRpb24gZmlsZS4KICAgICAgICBBZGQgYSBjb21tZW50ZWQgZXhhbXBsZSBvZiBhZGRpbmcgY29udGV4dHVhbCBpbmZvIHRvIG90aGVyIGxvZ3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTc3MSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzcxKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbXByb3ZlIHN5bWxpbmsgcmVzb2x1dGlvbiBhbmQgZml4IGluY29ycmVjdCBhcmd1bWVudCBwYXNzaW5nCiAgICAgICAgaW4gdGhlIGJpbi9mb3JyZXN0IHNoZWxsIHNjcmlwdC4KICAgICAgIFRoYW5rcyB0byBSaWNoYXJkIENhbG1iYWNoLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAKCgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgbmV3IHNpdGUgc2VlZGluZyB0YXJnZXRzIGFuZCBhIG5ldyBidXNpbmVzcyBzZWVkIHRhcmdldC4KICAgICAgICBUaGlzIGFsbG93cyBmb3IgaW50ZXJhY3RpdmUgY3JlYXRpb24gb2Ygc2VlZCBzaXRlcyAtIGV4aXN0aW5nCiAgICAgICAgJ2ZvcnJlc3Qgc2VlZCcgYmVoYXZpb3VyIGlzIHVuY2hhbmdlZCB3aGljaCBpcyBlcXVpdmFsZW50IHRvICdmb3JyZXN0IHNlZWQtc2FtcGxlJy4KICAgICAgICBOZXcgb25lcyBhcmUgJ2ZvcnJlc3Qgc2VlZC1idXNpbmVzcycgYW5kICdmb3JyZXN0IHNlZWQtYmFzaWMnLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlIHVzZSBvZiBjb21tb24gY2hhcmFjdGVyIGVudGl0aWVzIGluIHNraW5jb25mLnhtbCwKICAgICAgICBlLmcuIGFjY2VudGVkIGNoYXJhY3RlcnMgYW5kIHRyYWRlbWFyayBzeW1ib2xzLgogICAgICAgVGhhbmtzIHRvIFBhdWwgRGV2aW5lLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgZXRjL1JFTEVBU0VfTk9URVMudHh0CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogIAogICAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgRlNPCiAgICAgICAgOgogICAgICAgIAogICAgICAgICAgICBDaGFuZ2VkIGhhbmRsaW5nIG9mIHRhYmxlIGVsZW1lbnRzIHdpdGggY2xhc3MtYXR0cmlidXRlcyBpbiBzb3VyY2U6CiAgICAgICAgICAgIFRhYmxlIGVsZW1lbnRzIHcvbyBjbGFzcyBlbGVtZW50cyB3aWxsIHJlY2VpdmUgc3RhbmRhcmQgRm9ycmVzdCBzdHlsaW5nIGxpa2UgYmVmb3JlCiAgICAgICAgICAgIChjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjEiIGNsYXNzPSJGb3JyZXN0VGFibGUiKQogICAgICAgICAgICB3aGlsZSBlbGVtZW50cyB0aGF0IGhhdmUgY2xhc3Mgd2lsbCBwYXNzIHVuY2hhbmdlZC4KICAgICAgICAgICAgTm90ZTogVG8gc3R5bGUgdGFibGVzIHdpdGggY2xhc3MgZWxlbWVudHMgbGlrZSBiZWZvcmUgeW91IGhhdmUgdG8gYWRkIHN0eWxpbmcgY29kZQogICAgICAgICAgICBpbiB0aGUgZXh0cmEtY3NzLXNlY3Rpb24gb2Ygc2tpbmNvbmZpZy4KICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgICAKICAgICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICAgICAgRml4ZWQgcHJvYmxlbXMgd2l0aCBkaXNhcHBlYXJpbmcgb2YgaWQtYXR0cmlidXRlcyBpbiBpbWctZWxlbWVudCBhbmQgc2V2ZXJhbCBvdGhlcnMuICAgIAogICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgc2VjdGlvbiBhYm91dCB1c2luZyBuZXcvZXhwZXJpbWVudGFsIGZlYXR1cmVzIChlLmcuIExvY2F0aW9ubWFwLCBEaXNwYXRjaGVyKSB0b2dldGhlciB3aXRoIHBsdWdpbnMuCiAgICAgICAgU2VlIEhvd3RvIEJ1aWxkIFBsdWdpbnMgZG9jLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgc2VjdGlvbiBhYm91dCBtYW5hZ2luZyB0aGUgcGx1Z2lucyBkZXNjcmlwdG9ycyB0bwogICAgICAgIEhvd3RvIEJ1aWxkIFBsdWdpbnMgZG9jLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBuZXcgImNsZWFuIiB0YXJnZXRzLiBEb2luZyAnZm9ycmVzdCBjbGVhbi1zaXRlJyB3aWxsIHJlbW92ZQogICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvamVjdCdzIGdlbmVyYXRlZCBkb2N1bWVudHMgZGlyZWN0b3J5LgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuLXdvcmsnIHdpbGwgcmVtb3ZlIHRoZSBwcm9qZWN0J3Mgd29yayBkaXJlY3RvcmllcwogICAgICAgICh1c3VhbGx5IGJ1aWxkL3RtcCBhbmQgYnVpbGQvd2ViYXBwIHdoaWNoIGluY2x1ZGUgdGhlIENvY29vbiBjYWNoZQogICAgICAgIGFuZCB0aGUgQ29jb29uIGxvZ3MpLgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuJyB3aWxsIHJlbW92ZSBib3RoIHNlY3Rpb25zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIAogICAgICAgIExvY2F0aW9ubWFwU291cmNlRmFjdG9yeS5qYXZhLiBXaXRoIHRoaXMgaXQgaXMgcG9zc2libGUgdG8gcmVxdWVzdCAKICAgICAgICBsb2NhdGlvbm1hcCBzb3VyY2UgdmlhIGxtOi8vbXktbG9jYXRpb24gd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHVzZSBpdCAKICAgICAgICB3aXRob3V0IGNvbnRhY3RpbmcgYSBpbnB1dCBtb2R1bGUgaW4gamF2YSBhbmQgYW55IG90aGVyIGZpbGVzLiBEaWZmIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIHZhcmlhYmxlLmhlbHBlci54c2wgCiAgICAgICAgdG8gdGhlIGNvcmUsIHNob3VsZCBiZSBlbmhhbmNlZCBieSBtYXRjaGluZyB0aGUgCiAgICAgICAgZGVmYXVsdC5mb3JyZXN0LnByb3BlcnRpZXMueG1sLiBUaGlzIHhzbCB3aWxsIHByb2R1Y2UgYWxsIHZhcmlhYmxlcyB3ZSAKICAgICAgICB1c2UgaW4gc2tpbnMgdG8gdGhlIG5ldyBwcm9wZXJ0eSBzeXN0ZW0uIE1vdmVkIHBhdGh1dGlscy54c2wgdG8gdGhlIAogICAgICAgIGNvcmUgZnJvbSB0aGUgc2tpbnMuIERpZmYgCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAgIAogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTc2OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NjgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgQWRkZWQgc2VjdGlvbiAibGlua2luZyB0byBleHRlcm5hbCBjc3MgZmlsZXMiIHRvIGhvd3RvLXN0cnVjdHVyZXItZHNsIGRvYy4KICAgICAgIFRoYW5rcyB0byBQYXVsIEJvbGdlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiAiTm90ZVRha2luZyIuCiAgICAgICAgQWRkcyBhIGZvcm0gdG8gYSBwYWdlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW50ZXIgbm90ZXMgcmVsYXRpbmcgdG8gdGhlIHBhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgQWRkZWQgaGVscGVyIAogICAgICAgIHN0eWxlc2hlZXRzIHRvIGxvY2F0aW9ubWFwIGFuZCBjb3JlIHN0eWxlc2hlZXRzLiBnZW5lcmF0ZUlkLnhzbCAod2lsbCAKICAgICAgICBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCkgYW5kIHJlcGxhY2VDaGFyc0luU3RyaW5nLnhzbCAod2lsbCBmaW5kIGFuZCAKICAgICAgICByZXBsYWNlIGNoYXJhY3RlciBpbiBhIHN0cmluZykgRGlmZiAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBDbGFyaWZ5IHNvbWUgY29uZnVzaW5nIG5vdGVzIGFib3V0IHNpdGUvQGhyZWYgaW4gc2VlZHMgeGRvY3Mvc2l0ZS54bWwgZmlsZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKCiAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItNjk3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY5NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICBGaW5pc2ggcmVuYW1pbmcgb2YgZmlsZXMgZm9yIGEtdG8tYi54c2wgbmFtaW5nIGNvbnZlbnRpb24uIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBDRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgYSBEZXZzIG1lbnUgdG8gdG9vbHMvZm9ycmVzdGJhciB0byBoZWxwIHdpdGggdGVzdGluZyBpbnRlcm1lZGlhdGUKICAgICAgICBDb2Nvb24gcGlwZWxpbmVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi01ODEsRk9SLTcyMCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01ODEsRk9SLTcyMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYW5kIGVuaGFuY2VkIHRoZSBGb3JyZXN0IHBsdWdpbiBmb3IgdGhlIFhNTG1pbmQgWE1MIEVkaXRvciBhdAogICAgICAgIHRvb2xzL3h4ZQogICAgICAgVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTE4MCxGT1ItNzE2KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTE4MCxGT1ItNzE2KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIHRvb2xzL2ZvcnJlc3RiYXIgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBGaXJlZm94LgogICAgICAgVGhhbmtzIHRvIEFkZGlzb24gQmVycnkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRGVzY3JpYmUgdGhlIAogICAgICAgIHN0YXR1cyBtZXNzYWdlcwogICAgICAgIHRoYXQgYXJlIGlzc3VlZCBieSBDb2Nvb24gQ0xJIGR1cmluZyBwcm9jZXNzaW5nIG9mIGVhY2ggZG9jLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSBicm9rZW4tbGlua3MgZmlsZSBpcyBub3cgY29waWVkIGludG8gdG8gdGhlIHNpdGUgcm9vdCBhcwogICAgICAgICJicm9rZW4tbGlua3MueG1sIiBzbyB0aGF0IHdoZW4gYnVpbGRpbmcgd2l0aCBGb3JyZXN0Ym90CiAgICAgICAgeW91IGNhbiBlYXNpbHkgdmlldyBpdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNzEwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03MTApCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENvcnJlY3RseSBoYW5kbGUgdzNjLXhtbC1zY2hlbWEgcnVsZXMgaW4gCiAgICAgICAgU291cmNlVHlwZUFjdGlvbi4KICAgICAgIFRoYW5rcyB0byBKb3NpYXMgVGhvZW55LjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTIwMCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjAwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXZpZXdlZCBhbGwgc2l0ZW1hcHMgdG8gdXNlIGxvY2F0aW9ubWFwIHJlZmVyZW5jZXMgKGxtOikuCiAgICAgICAgQXQgdGhlIHNhbWUgdGltZSB3ZSBjaGFuZ2VkIGZpbGVuYW1lcyBvZiBjb3JlIHN0eWxlc2hlZXRzIHRvIGZvbGxvdyAKICAgICAgICBhIGZpbGVuYW1lIGNvbnZlbnRpb24gKGUuZy4gaHRtbDJkb2N1bWVudC54c2wgPSZndDsgaHRtbC10by1kb2N1bWVudC54c2wpCiAgICAgICAgd2hpY2ggZW5hYmxlcyBhdXRvbWF0ZWQgbG9jYXRpb25tYXAgbWF0Y2hlcy4KICAgICAgICBUaGFua3MgdG8gdGhlIG1hbnkgcGVvcGxlIHdobyB3ZXJlIGludm9sdmVkIHdpdGggYWRkcmVzc2luZyB0aGlzIGlzc3VlLgogICAgICAgIFNlZSB0aGUgY29tbWl0IGxvZ3MgYXNzb2NpYXRlZCB3aXRoIEZPUi0yMDAuCiAgICAgICBUaGFua3MgdG8gQ29tbXVuaXR5LjwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0yMDApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTIwMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIG5vdGVzIGFib3V0IG5hbWluZyBjb252ZW50aW9uIGZvciBsb2NhdGlvbm1hcCByZWZlcmVuY2VzLgogICAgICAgIEdhdGhlcmVkIGZyb20gYSBGb3JyZXN0RnJpZGF5IElSQyBzZXNzaW9uICh0aGFua3MgdG8gVGltIFdpbGxpYW1zIGZvciB3cml0aW5nIHRoZW0gdXApLgogICAgICAgIFNlZSBsb2NhdGlvbm1hcCBkb2NzLgogICAgICAgVGhhbmtzIHRvIENvbW11bml0eS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiWERvYyIuCiAgICAgICAgRm9ycmVzdCB4ZG9jIGlucHV0IHRvIGludGVybmFsIFhIVE1MMi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgoKCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnRlcm5hbCBwbHVnaW4gInhodG1sMiIuIFN0YXJ0ZWQgd29yayBvbiB4aHRtbCBpbiB0aGUgY29yZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGUgb3VyIHBhY2thZ2VkIENvY29vbiB0byBjb2Nvb24tMi4yLjAtZGV2LXIyNzk5ODcgYW5kIGVuaGFuY2VkIHRoZSBub3RlcwogICAgICAgIGFib3V0IGhvdyB0byB1cGdyYWRlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgQWRkZWQgYmFzaWMgaW5zdHJ1Y3Rpb25zIHRvIAogICAgICAgIGRlcGxveSBhbmQgaW5zdGFsbCB0aGUgZm9ycmVzdGJhciBmcm9tIHRoZSBzb3VyY2UgYXMgcmVhZG1lLnR4dERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIFJlbW92ZWQgCiAgICAgICAgdGhlIHByb2plY3QudGhlbWUtZGlyIHByb3BlcnR5IGJ5IGFkZGluZyBpdCB0byB0aGUgbG0gbGlrZSBzdWdnZXN0IGJ5IAogICAgICAgIFJvc3MuIERpZmYgCiAgICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICBDaGFuZ2VkIHRoZSAnbG9jYWwgCiAgICAgICAgZm9ycmVzdCcgY2FwdGlvbiB0byBob3N0OnBvcnQgZm9ybWF0LiBBZGRlZCBsb2NhbGhvc3QgYXMgb3B0aW9uLiBhZGRlZCAKICAgICAgICBzdHJ1Y3R1cmVyIHhtbCB2aWV3IHRvIGRldnMuIERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgQWxsb3dlZCBhcyB3ZWxsIAogICAgICAgIGxvY2FsaG9zdCBhcyBsb2NhbCBhZGRyZXNzIGZvciBqZXR0eSBmb3IgdGhlIGZvcnJlc3RiYXIuIERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNjY2KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi02NjYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENsYXJpZnkgdGhlIEZBUSBhYm91dCB1c2luZwogICAgICAgIHJhdyBIVE1MCiAgICAgICAgZG9jcyB3aXRoIG5vIGRlY29yYXRpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTU1NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01NTUpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSB4bWwgY29tbWVudHMgZnJvbSBzb3VyY2UgZmlsZXMgd2VyZSBub3QgYmVpbmcgZ2VuZXJhdGVkIHRvIHRoZSBvdXRwdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBDb2Nvb24gVmFsaWRhdGlvbiBCbG9jay4gVXNlcyB0cmFuc2Zvcm1lcnMgdG8gZW5hYmxlIFJFTEFYIE5HIHZhbGlkYXRpb24gYW5kCiAgICAgICAgVzNDIFhNTCBTY2hlbWEgdmFsaWRhdGlvbiB1c2luZyBKaW5nIGFuZCBYZXJjZXMuCiAgICAgICAgU2VlIGRvY3VtZW50YXRpb24uCiAgICAgICBUaGFua3MgdG8gUGllciBGdW1hZ2FsbGkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImVjcyIuCiAgICAgICAgVXNlIHRoZSByZXNwb25zZXMgZnJvbSBBbWF6b24gd2ViIHNlcnZpY2VzIChFQ1MpIGFzIGlucHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBXZSBub3cgaGF2ZSBhIHJlZ3VsYXIgMjQtaG91ciBJUkMgc2Vzc2lvbiBvbmNlIHBlciBtb250aC4gRGV2ZWxvcGVycyBnZXQgdG9nZXRoZXIuCiAgICAgICAgU2VlIEZvcnJlc3RGcmlkYXkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi02NjApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY2MCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiBmb3IgTGVueWEgaW50ZWdyYXRpb24uCiAgICAgICBUaGFua3MgdG8gSm9hY2hpbSBCcmVpdHNwcmVjaGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luIGZvciAiQmxvZyIuCiAgICAgICAgVXNlIGFuIFhQYXRoRGlyZWN0b3J5IGdlbmVyYXRvciB0byBwdWJsaXNoIGluZGljZXMgb2YgYXJ0aWNsZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCB0aGUgYmVnaW5uaW5ncyBvZiBhIHNpdGVtYXAgYW5hbHlzaXMgdG9vbCB0byB0aGUgd2hpdGVib2FyZC4KICAgICAgICBEb2Vzbid0IGRvIG11Y2ggYXQgdGhlIG1vbWVudC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gZm9yICJSZXN1bWUiLgogICAgICAgIFVzZSBpbnB1dCBkb2NzIGluIHhtbHJlc3VtZSBmb3JtYXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTU5NykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTk3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW50ZXJuYWwgcGx1Z2luIGZvciAiR29vZ2xlU2l0ZW1hcCIuCiAgICAgICAgQWNjZXNzIGEgbGlzdCBvZiBwYWdlcyBpbiAiR29vZ2xlIFNpdGVtYXAiIGZvcm1hdC4KICAgICAgIFRoYW5rcyB0byBSYXNpayBQYW5kZXkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBXVFAgMC43IGNvbXBhdGFiaWxpdHkgZm9yIEVjbGlwc2UgcGx1Z2luLgogICAgICAgIENsYXJpZnkgaW5zdGFsbGF0aW9uIG5vdGVzLgogICAgICAgVGhhbmtzIHRvIEFsYW4gQ2hhbmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNTcyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU3MikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIENvY29vbiBQcm9maWxlciBibG9jay4gVXNlIHRoaXMgZHVyaW5nIGRldmVsb3BtZW50IHRvIGxpc3QgdGhlCiAgICAgICAgdmFyaW91cyBzaXRlbWFwIHBpcGVsaW5lcyBhbmQgY29tcG9uZW50cyB0aGF0IGFyZSBiZWluZyB1c2VkLCBob3cKICAgICAgICBtdWNoIHRpbWUgd2FzIHVzZWQgYnkgZWFjaCwgd2hldGhlciBlYWNoIGNvbXBvbmVudCB1c2VzIHRoZSBDb2Nvb24KICAgICAgICBjYWNoZSwgYW5kIHNob3cgdGhlIGFjdHVhbCB4bWwgZGF0YS4KICAgICAgICBTZWUgZG9jdW1lbnRhdGlvbi4KICAgICAgICBUaGFua3MgdG8gUm9uIEJsYXNjaGtlIGZvciB0aGUgc3VnZ2VzdGlvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFdXCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERvY3VtZW50aW5nIHNvbWUgb2YgdGhlIGxvY2F0aW9ubWFwIHN5bnRheCBhbmQgbmFtaW5nIGNvbnZlbnRpb25zCiAgICAgICAgYXMgY29tbWVudHMvZXhhbXBsZXMgCiAgICAgICAgdW50aWwgaXQgY2FuIGJlIGRvbmUgbW9yZSBmb3JtYWxseS4KICAgICAgICBTZWUgJ2ZvcnJlc3Qgc2VlZC1zYW1wbGUnIGFuZAogICAgICAgIGxvY2F0aW9ubWFwIGRvY3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2UgbG9jYXRpb25tYXAncyBtb3VudGluZyBjYXBhYmlsaXR5IHRvIGFsbG93IHNlbGVjdGl2ZSBwcm9qZWN0IGxvY2F0aW9uIG92ZXJyaWRlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFdXCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBsb2NhdGlvbm1hcCBzZWxlY3RvciBiYXNlZCBtb3VudGluZyAoYW5kIHByb2plY3QtYmFzZWQgbW91bnRpbmcpLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGxvY2F0aW9ubWFwIG1vdW50aW5nIGNhcGFiaWxpdHkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTY0OSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi02NDkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSBobGluayBhbmQgdmxpbmsgY29sb3JzIHdlcmUgbm90IHNldCBjb3JyZWN0bHkgYnkgU2tpbmNvbmZUcmFuc2Zvcm1lci4KICAgICAgIFRoYW5rcyB0byBEYXZlIEJyb3NpdXMuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNjA0KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTYwNCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgU3luY2hyb25pc2UgdGhlIGFwcGVhcmFuY2Ugb2Ygd2FybmluZywgZml4bWUsIGFuZCBub3RlIGVsZW1lbnRzCiAgICAgICAgaW4gdGhlIHBlbHQgc2tpbi4KICAgICAgIFRoYW5rcyB0byBHYXZpbiBNY0RvbmFsZC48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5oYW5jZWQgbm90ZXMgYWJvdXQgdXNpbmcgcGx1Z2lucy4KICAgICAgIFRoYW5rcyB0byBQaGlsbGlwIEV2ZW5zLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTU5MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01OTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICAgIFRoYW5rcyB0byBhc3Npc3RhbmNlIGZyb20gR2F2aW4gTWNEb25hbGQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGFjdGlvbnMgaW4gdGhlIGxvY2F0aW9ubWFwLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUGx1Z2lucyBjYW4gbm93IGRlZmluZSB0aGVpciBvd24gKi54Y29uZiBmaWxlIHRvIGFkZCBjb25maWd1cmF0aW9uCiAgICAgICAgaW5mb3JtYXRpb24gdG8gY29jb29uLnhjb25mLiBTaW1wbHkgcGxhY2UgeW91ciAqLnhjb25mIGZpbGUgaW4KICAgICAgICBQTFVHSU5fSE9NRS9jb25mLyoueGNvbmYuIE5vdGUgdGhhdCBjaGFuZ2VzIHRvIHRoaXMgY29uZmlndXJhdGlvbgogICAgICAgIGZpbGUgd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgRm9ycmVzdCBoYXMgYmVlbiByZXN0YXJ0ZWQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhbgogICAgICAgICJldmVudHMiCiAgICAgICAgc2VjdGlvbiB0byBvdXIgU1ZOIHRvIGhvbGQgbWF0ZXJpYWxzIGZvciBnYXRoZXJpbmdzIG9mIGRldmVsb3BlcnMgdGhhdAogICAgICAgIGhhdmUgYmVlbiBoZWxkIG91dHNpZGUgdGhlIG1haWxpbmcgbGlzdCBjb21tdW5pdHkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhIG5ldyBkb2N1bWVudAogICAgICAgIEhvdyBiZSBhIEZvcnJlc3QgZGV2ZWxvcGVyLgogICAgICAgIFByb3ZpZGVzIHNvbWUgdGlwcyBhbmQgcHJvY2VkdXJlcyBmb3IgYWxsIGFzcGVjdHMgb2YgdXNpbmcgRm9ycmVzdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTU2OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01NjgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENsYXJpZnkgZG9jdW1lbnRhdGlvbiBmb3IgRm9ycmVzdGJvdC4KICAgICAgIFRoYW5rcyB0byBBZGRpc29uIEJlcnJ5LjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTU4OSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTg5KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiBmb3IgInZvaWNlIi4KICAgICAgICBSZWFkIGEgZG9jdW1lbnQgdXNpbmcgYSB2b2ljZSBlbmFibGVkIGJyb3dzZXIgc3VjaCBhcyBPcGVyYS4KICAgICAgIFRoYW5rcyB0byBUb20gSEFOQVguPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTU5MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01OTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2VkIHRoZSBpbml0aWFsIEVjbGlwc2UgcGx1Z2luIGZvciB1c2luZyBGb3JyZXN0IHZpYSBFY2xpcHNlLgogICAgICAgIFRoaXMgd29yayB3YXMgZW5hYmxlZCB2aWEgYSAiR29vZ2xlIFN1bW1lciBvZiBDb2RlIiBwcm9qZWN0LgogICAgICAgIFNlZSBkb2NzLgogICAgICAgVGhhbmtzIHRvIEFuaWwgUmFtbmFuYW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIAogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICBBZGRlZCBpbmZvcm1hdGlvbiBhYm91dCAKICAgICAgICBob3cgdG8gZGVidWcgZm9ycmVzdCBqYXZhIGNsYXNzZXMgdG8gdGhlIGZhcSBEaWZmIAogICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgQWRkZWQgYSBzaGVsbCBzY3JpcHQgdG8gCiAgICAgICAgZG8gc29tZSBzdGVwcyBvZiB0aGUgY29jb29uIHVwZGF0ZSBwcm9jZXNzLiBTdGlsbCB0aGVyZSBhcmUgc29tZSBzdGVwcyAKICAgICAgICB0aGF0IHNob3VsZCByYXRoZXIgYmUgZG9uZSBieSBhIHNjcmlwdCwgcmF0aGVyIHRoYW4gY29tbWl0dGVyIGludGVyYWN0aW9uLiAKICAgICAgICBVcGRhdGVkIHRoZSByZWFkbWUgdG8gc3RhdGUgdGhhdCBzb21lIHN0ZXBzIGNvdWxkIGJlIGRvbmUgYnkgdGhlIAogICAgICAgIHNjcmlwdC4gRGlmZiAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0yNTMpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjUzKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAgQWRkZWQgbmV3IAogICAgICAgIHNlZWQgdGFyZ2V0cyBzZWVkLWJhc2ljIGFuZCBzZWVkLXNhbXBsZS4gVGhhdCBjbG9zZXMgRk9SLTI1My4gRGlmZiAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi02NzApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjcwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAgRml4ZWQgc2FtcGxlIAogICAgICAgIHNpdGVzIGZyb20gdGhlIHNlZWRUZXN0QnVzaW5lc3MgRk9SLTY3MDogZm9ycmVzdCBzZWVkVGVzdEJ1c2luZXNzOyAKICAgICAgICBmb3JyZXN0IHNpdGUgZmFpbHMgcmVzdW1lIGR0ZCB2YWxpZGF0aW9uIERpZmYgCiAgICAgICAgIFRoYW5rcyB0byBrZXZpbi48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZWZhY3RvcmVkIHRoZSB2aWV3IHJlc29sdmVyIGNvZGUgb2YgdGhlIGludGVybmFsLnZpZXcgcGx1Z2luLiBDcmVhdGVkIGFuIGFjdGlvbiB0aGF0CiAgICAgICAgaXMgZG9pbmcgdGhlIHNhbWUgYXMgYmVmb3JlIHRoZSBjb21iaW5hdGlvbiBvZiBzaXRlbWFwK3hzbC4gQWRkZWQgMiBqYXZhIGNsYXNzZXMgdG8gcGFja2FnZQogICAgICAgIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4uaW50ZXJuYWwudmlldy5hY3Rpbmc6CiAgICAgICAgMS5GYWxsYmFja1Jlc29sdmVyQWN0aW9uLmphdmEyLkZhbGxiYWNrUmVzb2x2ZXJIZWxwZXIuamF2YQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgCiAgICAgICBSZW1vdmVkIHByb2plY3Qudmlldy1kZWZhdWx0VmlldyBwcm9wZXJ0aWVzIGFuZCBhZGRlZCBwcm9qZWN0LnRoZW1lLWV4dGVuc2lvbiBpbnN0ZWFkLiBUaGUgY29tYmluYXRpb24KICAgICAgIG9mIHByb2plY3QudGhlbWUtZXh0ZW5zaW9uIGFuZCBwcm9qZWN0LnRoZW1lIGlzIGVxdWFsIHRvIHByb2plY3Qudmlldy1kZWZhdWx0Vmlldy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgQWRkZWQgbmV3IGVsZW1lbnRzIHRvIG9yZy5hcGFjaGUuZm9ycmVzdC5jb25mLkZvcnJlc3RDb25mTW9kdWxlIG5hbWU9ImRlZmF1bHRzIjoKICAgICAgICB2aWV3LXRoZW1lc3RoZW1lLWV4dHRoZW1lCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgIFJlbW92ZWQgImRlZmF1bHRWaWV3IiBhbmQgYWRkZWQgbmV3IGVsZW1lbnQgdG8gb3JnLmFwYWNoZS5mb3JyZXN0LmNvbmYuRm9ycmVzdENvbmZNb2R1bGUgbmFtZT0icHJvamVjdCI6CiAgICAgICB0aGVtZS1leHQKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgbm9ybWFsaXplLXNwYWNlKCkgdGhlIGZvcnJlc3Q6cHJvcGVydGllcyBiZWZvcmUgcGFyc2luZyB0aGVtIHRvIHRoZSBwaXBlCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkCiAgICAgICAgICAoYnVnIEZPUi02MDMpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjAzKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBkb2N1bWVudCB0byBleHBsYWluIHRoZSBwcm9jZXNzIGZvcgogICAgICAgIEJlY29taW5nIGFuIEFwYWNoZSBGb3JyZXN0CiAgICAgICAgY29tbWl0dGVyLgogICAgICAgVGhhbmtzIHRvIEFkZGlzb24gQmVycnkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVzZSBzZXRzIG9mIHN5bWJvbHMgYXMgeG1sIGVudGl0aWVzIGZvciBjaGFyYWN0ZXIgcmVwbGFjZW1lbnQuCiAgICAgICAgVGhlcmUgaXMgYSBjb3JlIHNldCBhbmQgZWFjaCBwcm9qZWN0IGNhbiBkZWZpbmUgYSBzZXQuCiAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSAiJmFtcDtteXAtdDsiIHRvIHJlcHJlc2VudCB0aGUKICAgICAgICBwcm9qZWN0IG5hbWUgdG9nZXRoZXIgd2l0aCB0cmFkZW1hcmsgc3ltYm9sCiAgICAgICAgIk15IFByb2plY3QgTmFtZSYjODQ4MjsiLgogICAgICAgIFNlZSBGQVEuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgoKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUGx1Z2lucyBjYW4gbm93IGRlZmluZSB0aGVpciBvd24gKi54Y29uZiBmaWxlIHRvIGFkZCBjb25maWd1cmF0aW9uIAogICAgICAgIGluZm9ybWF0aW9uIHRvIGNvY29vbi54Y29uZi4gU2ltcGx5IHBsYWNlIHlvdXIgKi54Y29uZiBmaWxlIGluIAogICAgICAgIFBMVUdJTl9IT01FL2NvbmYvKi54Y29uZi4gTm90ZSB0aGF0IGNoYW5nZXMgdG8gdGhpcyBjb25maWd1cmF0aW9uIAogICAgICAgIGZpbGUgd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgRm9ycmVzdCBoYXMgYmVlbiByZXN0YXJ0ZWQuICAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyBzaXRlIHNlZWRpbmcgbWVjaGFuaXNtLiBZb3UgY2FuIG5vdyBydW4gImZvcnJlc3Qgc2VlZCIgYXMgYmVmb3JlLCBvciB5b3UgY2FuIHJ1bgogICAgICAgICJmb3JyZXN0IHNlZWQtYnVzaW5lc3MiLiBUaGUgbGF0ZXIgd2lsbCBhc2sgYSBudW1iZXIgb2YgcXVlc3Rpb25zIGFib3V0IHRoZSBzaXRlCiAgICAgICAgYmVpbmcgc2VlZGVkIChidXNpbmVzcyBuYW1lLCBkZXNjcmlwdGlvbiBldGMuKSBhbmQgd2lsbCBjcmVhdGUgYSB2ZXJ5IHNpbXBsZSBzaXRlCiAgICAgICAgZGVzaWduZWQgZm9yIGJ1c2luZXNzLiBUbyBxdWlja2x5IHNlZSB0aGUgcmVzdWx0cywgaS5lLiBhdm9pZAogICAgICAgIGFuc3dlcmluZyB0aGUgcXVlc3Rpb25zLCBkbyAiZm9ycmVzdCBzZWVkVGVzdEJ1c2luZXNzIi4gTW9yZSBzZWVkIHNpdGVzIHdpbGwgYmUgYWRkZWQKICAgICAgICBpbiB0aGUgZnV0dXJlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBhIGxvY2F0aW9ubWFwLiBUaGlzIGVuYWJsZXMgY29udGVudCB0byBiZSByZXRyaWV2ZWQgZnJvbSBhIGxvY2F0aW9uCiAgICAgICAgdGhhdCBpcyBkZWZpbmVkIGluIGEgbG9jYXRpb25tYXAgZmlsZS4gQSBwcm9qZWN0LWJhc2VkIGZpbGUgY2FuIGJlIGxvY2F0ZWQgYXQgCiAgICAgICAgUFJPSkVDVF9IT01FL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvbG9jYXRpb25tYXAueG1sIHdoaWxlIGNvcmUgbG9jYXRpb25tYXBzCiAgICAgICAgYXJlIGF0ICRGT1JSRVNUX0hPTUUvbWFpbi93ZWJhcHAvbG9jYXRpb25tYXAtKi54bWwgZmlsZXMuVGhlCiAgICAgICAgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCB0aGUgVVJMIHNlZW4gYnkgdGhlIHVzZXIgbmVlZCBiZWFyIG5vIHJlbGF0aW9uIHRvIHRoZSBsb2NhdGlvbgogICAgICAgIG9mIHRoZSBzb3VyY2UgZG9jdW1lbnQsIHRodXMgRm9ycmVzdCBjYW4gc2VwYXJhdGUgdGhlIGNsaWVudCBVUkwgc3BhY2UgZnJvbSB0aGUgc291cmNlCiAgICAgICAgZG9jdW1lbnQgVVJMIHNwYWNlLiBUaHVzLCB1c2luZyB0aGUgbG9jYXRpb25tYXAgaXQgaXMgcG9zc2libGUgdG8gcHVsbCB0b2dldGhlcgogICAgICAgIGRvY3VtZW50cyBmcm9tIG1hbnkgZGlmZmVyZW50IGxvY2F0aW9ucyBpbnRvIGEgc2luZ2xlIHVuaWZvcm0gc2l0ZS4KICAgICAgICAKICAgICAgICBJbiBhZGRpdGlvbiwgc2luY2UgdGhlIHVzZXIgVVJMIHNwYWNlIGlzIG5vdyB1bmNvbm5lY3RlZCB0byB0aGUgc291cmNlIFVSTCBzcGFjZQogICAgICAgIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgc291cmNlIGRvY3VtZW50cyB3aXRob3V0IGJyZWFraW5nIGFueSBleGlzdGluZyB1c2VyIGxpbmtzLgogICAgICAgIAogICAgICAgIFNlZSBsb2NhdGlvbm1hcCBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIFRoYW5rcyB0byBVbmljbyBIb21tZXMgZm9yIHRoZSBvcmlnaW5hbCBsb2NhdGlvbm1hcCBpbXBsZW1lbnRhdGlvbiB3aGljaAogICAgICAgIHdhcyBhZGRlZCB0byBGb3JyZXN0IGxvbmcgYWdvLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgCiAgICAKICAgIAogICAgICAKICAgICAgICBTZWUgZWFjaAogICAgICAgICAgcGx1Z2luCiAgICAgICAgICBmb3IgaXRzIGRldGFpbGVkIGNoYW5nZXMuCiAgICAgICAgCiAgICAgIAogICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKCiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIHVwZ3JhZGluZyB0byB2MC43CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTgyNCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04MjQpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEhvd3RvLXYyMCBub3cgcHJvcGVybHkgaGFuZGxlcyBhL0BjbGFzcz1mb3JrIGV0Yy4gYXR0cmlidXRlIHRvIGVuYWJsZQogICAgICAgIGxpbmtzIHRvIG9wZW4gaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuCiAgICAgICBUaGFua3MgdG8gU3RldmUgTWFzb3Zlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi04MTgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODE4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGb3JyZXN0Ym90IGRlcGxveS5zY3Agd29ya3N0YWdlIG5vdyB1c2VzIGtleWZpbGUvcGFzc3BocmFzZSBpbiBwcmVmZXJlbmNlLAogICAgICAgIHRoZW4gZmFsbGJhY2sgdG8gcmVtb3RlIHBhc3N3b3JkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICAgICAgQ2hhbmdlZCBoYW5kbGluZyBvZiB0YWJsZSBlbGVtZW50cyB3aXRoIGNsYXNzLWF0dHJpYnV0ZXMgaW4gc291cmNlOgogICAgICAgICAgICBUYWJsZSBlbGVtZW50cyB3L28gY2xhc3MgZWxlbWVudHMgd2lsbCByZWNlaXZlIHN0YW5kYXJkIEZvcnJlc3Qgc3R5bGluZyBsaWtlIGJlZm9yZQogICAgICAgICAgICAoY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSIxIiBjbGFzcz0iRm9ycmVzdFRhYmxlIikKICAgICAgICAgICAgd2hpbGUgZWxlbWVudHMgdGhhdCBoYXZlIGNsYXNzIHdpbGwgcGFzcyB1bmNoYW5nZWQuCiAgICAgICAgICAgIE5vdGU6IFRvIHN0eWxlIHRhYmxlcyB3aXRoIGNsYXNzIGVsZW1lbnRzIGxpa2UgYmVmb3JlIHlvdSBoYXZlIHRvIGFkZCBzdHlsaW5nIGNvZGUKICAgICAgICAgICAgaW4gdGhlIGV4dHJhLWNzcy1zZWN0aW9uIG9mIHNraW5jb25maWcuCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBGU08KICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICAgIEZpeGVkIHByb2JsZW1zIHdpdGggZGlzYXBwZWFyaW5nIG9mIGlkLWF0dHJpYnV0ZXMgaW4gaW1nLWVsZW1lbnQgYW5kIHNldmVyYWwgb3RoZXJzLiAgICAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIG5ldyAiY2xlYW4iIHRhcmdldHMuIERvaW5nICdmb3JyZXN0IGNsZWFuLXNpdGUnIHdpbGwgcmVtb3ZlCiAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm9qZWN0J3MgZ2VuZXJhdGVkIGRvY3VtZW50cyBkaXJlY3RvcnkuCiAgICAgICAgRG9pbmcgJ2ZvcnJlc3QgY2xlYW4td29yaycgd2lsbCByZW1vdmUgdGhlIHByb2plY3QncyB3b3JrIGRpcmVjdG9yaWVzCiAgICAgICAgKHVzdWFsbHkgYnVpbGQvdG1wIGFuZCBidWlsZC93ZWJhcHAgd2hpY2ggaW5jbHVkZSB0aGUgQ29jb29uIGNhY2hlCiAgICAgICAgYW5kIHRoZSBDb2Nvb24gbG9ncykuCiAgICAgICAgRG9pbmcgJ2ZvcnJlc3QgY2xlYW4nIHdpbGwgcmVtb3ZlIGJvdGggc2VjdGlvbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgCiAgICAKICAgICAgCiAgICAgICAgU2VlIGVhY2gKICAgICAgICAgIHBsdWdpbgogICAgICAgICAgZm9yIGl0cyBkZXRhaWxlZCBjaGFuZ2VzLgogICAgICAgIAogICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKCiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIHVwZ3JhZGluZyB0byB2MC43CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTE4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xOCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBDb25maWcgY2hlY2sgZm9yIHRoZSBpOG4gYXR0cmlidXRlIGZvciBpMThuIHRyYW5zZm9ybWVyCgkgIHNvIGl0IGlzIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4KICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJEYWlzeSIuCiAgICAgICAgSW5wdXQgaXMgY29udGVudCByZXRyaWV2ZWQgZnJvbSBhICJEYWlzeSBDTVMgcmVwb3NpdG9yeSIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAiT3Blbk9mZmljZS5vcmciLgogICAgICAgIE91dHB1dCBPT28gd3JpdGVyIGZpbGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIG91dHB1dCBwbHVnaW4gIkNoYXJ0Ii4KICAgICAgICBEcmF3IGNoYXJ0cyB1c2luZyBqQ2hhcnRzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiRGF0YWJhc2UiLgogICAgICAgIFVzZXMgbXVjaCBvZiB0aGUgQ29jb29uIERCIGJsb2NrIGNvZGUgYW5kIGlzIHBhcnQgb2YgYSBsYXJnZXIgZXhwZXJpbWVudAogICAgICAgIHRvIGdldCBDb2Nvb24gYmxvY2tzIHdvcmtpbmcgYXMgRm9ycmVzdCBwbHVnaW5zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmhhbmNlZCB0aGUgTWVzc2FnZSBvZiB0aGUgRGF5IChNT1REKSBmYWNpbGl0eS4KICAgICAgICBTZWUgc2tpbmNvbmYueG1sIGZyb20gYSAic2VlZCIgc2l0ZSBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzLgogICAgICAgIEFwcGVuZCBhIHNtYWxsIHRleHQgc3RyaW5nIGFmdGVyIGh0bWwgdGl0bGUuCiAgICAgICAgQWRkIHRleHQgdG8gYSBwYW5lbCBvbiB0aGUgcGFnZS4KICAgICAgICBTZWxlY3QgZGlmZmVyZW50IG1lc3NhZ2VzIGRlcGVuZGluZyBvbiB0aGUgVVJJIHN0cmluZyBwYXR0ZXJuLgogICAgICAgIFRvIHVzZSBpdCwgZGVjbGFyZSBza2luY29uZmlnLXYwNy0xLmR0ZCBpbiB5b3VyIHNraW5jb25mLnhtbCBmaWxlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0zNTUpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzU1KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgIEVuYWJsZSBza2luY29uZiB0byBzcGVjaWZ5IG9wdGlvbmFsIHBhZ2UgbnVtYmVyIGZvcm1hdCBmb3IgUERGLgogICAgICAgIFRoYW5rcyB0byBDeXJpYXF1ZSBEdXBvaXJpZXV4LjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTUyOCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTI4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgIFBsdWdpbnMgYXJlIG5vdyB2ZXJzaW9uIGNvbnRyb2xsZWQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi01MTQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTUxNCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBEbyBub3QgbGltaXQgc3RhdHVzLnhtbCBjb250ZXh0cyBpbiBwcm9qZWN0SW5mbyBwbHVnaW4uCiAgICAgICAgVGhhbmtzIHRvIEN5cmlhcXVlIER1cG9pcmlldXguPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlICJleHRyYS1jc3MiIGZyb20gc2tpbmNvbmYueG1sIGlzIG5vdyBpbnNlcnRlZCBhdCB0aGUgdmVyeSBlbmQKICAgICAgICBvZiB0aGUgQ1NTLiBUaGF0IGVuYWJsZXMgaXQgdG8gcHJvcGVybHkgb3ZlcnJpZGUgb3RoZXIgZWxlbWVudHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTQ3MCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDcwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXdyb3RlIGV4YW1wbGUgb2YgcmF3IGNvbnRlbnQgaW4gZnJlc2gtc2l0ZSB0byBjb3JyZWN0bHkgZG9jdW1lbnQgdGhlCiAgICAgICAgYmVoYXZpb3VyIGluIDAuNy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZWQgaWh0bWwgZXhhbXBsZSBmcm9tIGZyZXNoLXNpdGUgYW5kIHJlcGxhY2VkIHdpdGggYW4gZXhhbXBsZSBvZiBlbWJlZGRlZCBIVE1MLgogICAgICAgIFRoZSB1c2Ugb2YgaWh0bWwgaXMgbm93IGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGVtYmVkZGVkIEhUTUwuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGEgYnVnIHdpdGggaW5kaXZpZHVhbCAiY3JlZGl0IGltYWdlIiBwbGFjZW1lbnQgaW4gdGhlIHBlbHQgc2tpbi4KICAgICAgICBJZiBvbmUgY3JlZGl0IHdhcyBzcGVjaWZpZWQgdG8gYmUgaW4gdGhlIGFsdGVybmF0aXZlIGxvY2F0aW9uLCB0aGVuCiAgICAgICAgYWxsIGNyZWRpdHMgd2VyZSBwbGFjZWQgdGhlcmUuIEFsc28gYWRkZWQgYSBzZWNvbmQgYWx0ZXJuYXRpdmUgbG9jYXRpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBTcGxpdCBwbHVnaW5zLnhtbCBiZXR3ZWVuIHBsdWdpbnMueG1sIGluIG1haW4gcGx1Z2lucyBkaXIgYW5kCiAgICAgICAgd2hpdGVib2FyZC1wbHVnaW5zLnhtbCBpbiB3aGl0ZWJvYXJkL3BsdWdpbnMgYW5kIGFkZGVkIHJlbGV2YW50IGRvY3MKICAgICAgICB0byBwbHVnaW5zIGluZGV4IHBhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTQ4NykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDg3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgQWRkZWQgaW1wb3J0YW5jZSBhdHRyaWJ1dGUgdG8gYWN0aW9ucyBvbiBzdGF0dXMuZHRkCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGFkZCBwYWdlIGJyZWFrcyB0byBvdXRwdXQuIFNlZSBQYWdlIEJyZWFrcyBGQVEKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItMTg1KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xODUpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFsbG93IHRoZSBzZXJ2aW5nIG9mIHJhdyBTVkcgZmlsZXMgdG8gYWxsb3cgY2xpZW50cyB0byByZW5kZXIgbG9jYWxseS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFBsdWdpbiBkb2NzIGFyZSBub3cgdXBhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIHBsdWdpbiBpcyBkZXBsb3llZC4KICAgICAgICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXBkYXRlIHRoZSBkb2NzIGluZGVwZW5kYW50bHkgYnkgcnVubmluZyB0aGUgCiAgICAgICAgZGVwbG95LWRvY3MgdGFyZ2V0IGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi00MzApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQzMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgKiBVc2VzIHNraW5jb25mLnhtbCB0byBkZXRlcm1pbmUgYmFja2dyb3VuZCBhbmQgYm9yZGVyIGNvbG9yIGZvciBub3Rlcywgd2FybmluZ3MsIGFuZCBmaXhtZXM7CiAgICAgICAgKiBVc2VzIHNraW5jb25mLnhtbCB0byBkZXRlcm1pbmUgYmFja2dyb3VuZCBhbmQgYm9yZGVyIGNvbG9yIGZvciB0YWJsZSBjZWxscyAoaGVhZGVycyBhbmQgZGF0YSk7CiAgICAgICAgKiBIb25vcnMgaGVhZGluZ3MgdHlwZSBzZXQgaW4gc2tpbmNvbmYueG1sIChjbGVhbnx1bmRlcmxpbmVkfGJveGVkKSBhbmQgY29sb3JzIGhlYWRpbmdzIGFjY29yZGluZ2x5OwogICAgICAgICogVXNlcyBza2luY29uZi54bWwgdG8gZGV0ZXJtaW5lIGZvbnQgY29sb3IgZm9yIGxpbmtzLgoKICAgICAgICBJbiBhZGRpdGlvbiwgdGhpcyBwYXRjaCBleHRlbmRzIHRoZSAibGluayIgdGVtcGxhdGUgdG8gYWxzbyBhcHBseSB0byB0aGUgImZvcmsiLCAianVtcCIsIGFuZCAiYSIgZWxlbWVudHMuCiAgICAgICBUaGFua3MgdG8gRmxvcmlhbiBHLiBIYWFzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTQ4MixGT1ItNDU3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQ4MixGT1ItNDU3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBHZW5lcmF0ZSBodG1sL2hlYWQvbWV0YSBlbGVtZW50cyBmcm9tIGRvY3VtZW50LXYyLgogICAgICAgVGhhbmtzIHRvIE1hcmsgRWdnZXJzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4uaW5wdXQubGlzdExvY2F0aW9ucyBwbHVnaW4uCiAgICAgICAgVXNlIGxpc3RzIG9mIGxvY2F0aW9ucyBtYWludGFpbmVkIGluIGEgc2ltcGxlIHhtbCBmb3JtYXQKICAgICAgICBhbmQgdHJhbnNmb3JtIHRoZW0gdG8gZG9jdW1lbnRzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0yODQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjg0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZWluc3RhdGUgZXJyb3IgcmVwb3J0aW5nIGZvciBicm9rZW4gInNpdGU6IiBhbmQgImV4dDoiIGxpbmtzCiAgICAgICAgd2hpY2ggYXJlIGR1ZSB0byBtaXNzaW5nIGVudHJpZXMgaW4gc2l0ZS54bWwgb3IgdHlwb3MgaW4gc2l0ZTogbGlua3MuCiAgICAgICAgVGhlIHRleHQgImVycm9yOiIgaXMgYWxzbyBwcmVwZW5kZWQuCiAgICAgICAgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGJ1ZyBGT1ItMjg0ICJsaW5rIHJld3JpdGluZyBicm9rZW4KICAgICAgICB3aGVuIGxpbmtpbmcgdG8geG1sIHNvdXJjZSB2aWV3cyB3aGljaCBjb250YWluIHNpdGU6IGxpbmtzIi4KICAgICAgICBUaGlzIGxhdHRlciBpc3N1ZSBpcyBoYW5kbGVkIGJ5IHRoZSBjb3JlLiBIb3dldmVyLCBpZgogICAgICAgIHlvdXIgcHJvamVjdCB1c2VzIGEgQ29jb29uCiAgICAgICAgY2xpLnhjb25mCiAgICAgICAgdGhlbiB5b3Ugd2lsbCBuZWVkIGFkZCB0aGUgc2FtZSAiZXhjbHVkZSIgZW50cmllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNDc5KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQ3OSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICBIYW5kbGUgRkFRcyBzZWN0aW9ucyBhbmQgZmFxcyB3aXRoIGJvdGggaG93dG8tdjEuKiBhbmQgaG93dG8tdjIuKiBkb2NzLgogICAgICAgQXBwbHkgcHJvcGVyIHNlY3Rpb24gbnVtYmVyaW5nLgogICAgICAgVGhhbmtzIHRvIE1hcmsgRWdnZXJzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZWQgb2xkIHZlcnNpb25zIG9mIHByZS1yZWxlYXNlIHBsdWdpbnMgZm9sbG93aW5nIHJlbmFtaW5nIHRvIHRoZQogICAgICAgIGNvbnZlbnRpb24gZGVmaW5lZCBpbgogICAgICAgIFBsdWdpbiBJbmZyYXN0cnVjdHVyZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMzg5KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTM4OSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5pbnB1dC5kdGR4IHBsdWdpbiBieSBtb3ZpbmcgZnVuY3Rpb25hbGl0eQogICAgICAgIG91dCBvZiB0aGUgY29yZS4KICAgICAgICBHZW5lcmF0ZXMgRFREIGRvY3VtZW50YXRpb24gdXNpbmcgYSBjdXN0b20gQ29jb29uIEdlbmVyYXRvci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVtb3ZlZCB0aGUgbGVhdGhlci1kZXYgZG9jcyBhbmQgYWRkZWQgdGhlIGJlZ2luaW5nIG9mIHRoZSBWaWV3IHBsdWdpbiBkb2NzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBDaGFuZ2VkIHBsdWdpbiB0ZW1wbGF0ZSBsb2NhdGlvbiB0byB7Zm9ycmVzdC5wbHVnaW5zLmRpcn0vcGx1Z2luVGVtcGxhdGUgCiAgICAgICAgaW4gdGhlIGJ1aWxkLnhtbCBvZiBwbHVnaW5zLyBhbmQgd2hpdGVib2FyZC9wbHVnaW5zLy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlCiAgICAgICAgbmV3IHBsdWdpbnMgaW4gdGhlIHdoaXRlYm9hcmQvcGx1Z2luLyBkaXJlY3RvcnkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFjdGl2YXRlZCBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cyB0byBiZSBjb25maWd1cmVkIHZpYSBhIFZpZXcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHZpZXdIZWxwZXIgcGx1Z2luIGFuZCByZW1vdmVkIGV4cGVyaW1lbnRhbCBsZWF0aGVyIHBsdWdpbi4KICAgICAgICBFbmhhbmNlZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB2aWV3L3ZpZXdIZWxwZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi00NzcpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDc3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbWFnZXMgZ3JvdXAuc3ZnIGFuZCBwcm9qZWN0LnN2ZyB3ZXJlIHJlbmRlcmVkIHdpdGggdGhlIHNoYWRvdyBlZmZlY3Qgc2xpZ2h0bHkgY2xpcHBlZC4gCiAgICAgICAgTmVlZGVkIHRvIGFkZCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGZpbHRlciBlbGVtZW50LgogICAgICAgVGhhbmtzIHRvIEtldmluLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGNvbnRyYWN0cyBhbmQgbnVnZ2V0cyB0byB0aGUgInZpZXciIHBsdWdpbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENyZWF0ZWQgYSBuZXcgcGx1Z2luIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4uaW50ZXJuYWwudmlldyBmcm9tIHRoZSBmYml0cyBjb3JlCiAgICAgICAgYW5kIHJlbW92ZWQgdGhlIGZiaXRzIHBsdWdpbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIEZBUSBhYm91dCAicGFnZUJyZWFrQmVmb3JlIiBhbmQgInBhZ2VCcmVha0FmdGVyIiBjbGFzcyBpbnQgUERGIAogICAgICAgIGRvY3VtZW50cyBhbmQgZGVzY3JpYmUgaG93IHRvIGVuYWJsZSB0aGUgcGFnZSBicmVhayBiZWhhdmlvdXIgaW4gSFRNTAogICAgICAgIGRvY3VtZW50cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVzZSAicGFnZUJyZWFrQmVmb3JlIiBhbmQgInBhZ2VCcmVha0FmdGVyIiBjbGFzcyB0byBzZWN0aW9ucyB0byBmb3JjZSBhCiAgICAgICAgcGFnZSBicmVhayBpbiBQREYgb3V0cHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkCiAgICAgICAgICAoYnVnIEZPUi00NDYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDQ2KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgQWRkZWQgCiAgICAgIEhvdyB0byBjdXN0b21pemUKICAgICAgcHJvY2Vzc2luZyBvZiBodG1sIHNvdXJjZQogICAgICAgVGhhbmtzIHRvIEZlcmRpbmFuZCBTb2V0aGUuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1vdmVkIHN0YXR1cyAiY2hhbmdlcyIgYW5kICJ0b2RvIiBwYWdlIGdlbmVyYXRpb24gdG8gdGhlCiAgICAgICAgb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5pbnB1dC5wcm9qZWN0SW5mbyBwbHVnaW4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTM0NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzQ1KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXggYnJva2VuIGxpbmtzIGluIFRhYmxlIG9mIENvbnRlbnRzIHdoZW4gdGl0bGVzIGNvbnRhaW4gYWNjZW50ZWQgY2hhcmFjdGVycy4KICAgICAgIFRoYW5rcyB0byBDeXJpYXF1ZSBEdXBvaXJpZXV4LjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTE4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xOCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSTE4biB1c2VzIG9yZy5hcGFjaGUuY29jb29uLm1hdGNoaW5nLkxvY2FsZU1hdGNoZXIgaW5zdGVhZCBvZiBpMThuIHRyYW5zZm9ybWVyLgogICAgICAgVGhpcyByZXF1aXJlcyB0aGF0IHlvdXIgc291cmNlIG11c3Qgbm93IGJlIGZvby5sYW5nLnhtbCBpbnN0ZWFkIG9mIGZvb19sYW5nLnhtbAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi00NDUpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQ0NSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgcHJveHkuaG9zdCwgcHJveHkucG9ydCwgcHJveHkudXNlciBhbmQgcHJveHkucGFzc3dvcmQgdG8gYWxsb3cgcGx1Z2luIGRvd25sb2FkcyBmcm9tIGJlaGluZCBhCiAgICAgICAgcHJveHkuCiAgICAgICBUaGFua3MgdG8gQ3lyaWFxdWUgRHVwb2lyaWV1eC48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0yNDYsRk9SLTQzMSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yNDYsRk9SLTQzMSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4IHZhcmlvdXMgYnVncyB3aXRoIEx1Y2VuZSBzZWFyY2guCiAgICAgICBUaGFua3MgdG8gRmxvcmlhbiBHLiBIYWFzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTM3MykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzczKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBhIHBsdWdpbiB0byBoYW5kbGUgaW5wdXQgZG9jdW1lbnRzIGZyb20gTWljcm9zb2Z0IEV4Y2VsLgogICAgICAgVGhhbmtzIHRvIEpvaGFubmVzIFNjaGFlZmVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTQxNykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDE3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmFibGVkIFhJbmNsdWRlIGluIHNpdGUueG1sIGFuZCB0YWJzLnhtbAogICAgICAgVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGV4dGVybmFsIHBsdWdpbiBQT0QtaW5wdXQgdG8gYWxsb3cgUGxhaW4gT2xkIERvY3VtZW50YXRpb24gKFBPRCkgZmlsZXMgdG8KICAgICAgICBiZSBpbmNsdWRlZCBpbiBhIEZvcnJlc3Qgc2l0ZS4KICAgICAgIFRoYW5rcyB0byBSb24gQmxhc2Noa2UuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQUcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBuZWtvZHRkIHRvIDAuMS4xMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSRlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTW92ZWQgUE9EIG91dHB1dCBmcm9tIHRoZSBjb21tb24gc2tpbiB0byBpdHMgb3duIHBsdWdpbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeAogICAgICAgICAgKGJ1ZyBGT1ItMzMwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgREIKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTMzMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgcXVvdGVzIGluIGZvcnJlc3QuYmF0IHNvIGZvcnJlc3QgY2FuIGJlIGluIGEgZGlyZWN0b3J5IHdpdGggc3BhY2VzLgogICAgICAgVGhhbmtzIHRvIEdhcnkgRmVsZG1hbi48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0xMjUpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSRlQKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTEyNSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSB0ZXh0LW91dHB1dCBwbHVnaW4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBXWVNJV1lHIGVkaXRvciBhcyBhIHBsdWdpbiAob25seSB3b3JrcyBpbiBkeW5hbWljIHdlYmFwcHMpLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0zODcpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTM4NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgcGhvdG9HYWxsZXJ5IHBsdWdpbi4KICAgICAgIFRoYW5rcyB0byBK9nJnIFdlcm5lci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgY2FwYWJpbGl0eSB0byBkZXBsb3kgZGlyZWN0bHkgdG8gc2l0ZSBpbiBTVk4gdXNpbmcgImFudCBkZXBsb3kiCiAgICAgICAgZnJvbSB3aXRoaW4gcGx1Z2luIGRpcmVjdG9yeS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHJlbW92ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHJlbW92ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0b3BwZWQgZG9pbmcgZGVsZXRpb24gb2YgdGhlIGNhY2hlLWRpciwgc28gY29uc2VjdXRpdmUgImZvcnJlc3Qgc2l0ZSIgYWN0aW9ucwogICAgICAgIGNhbiBiZSBjYWNoZWQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YWRtaW4gYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmFkbWluIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHRlc3RpbmcgZmFjaWxpdGllcyB0byBwbHVnaW5zIHRvIGZhY2lsaXRhdGUgaW50ZWdyYXRpb24gdGVzdGluZy4gCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSByZW1vdmU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSByZW1vdmUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAgCiAgICAgIE1lcmdlIHhkb2NzIGFuZCByYXcgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHNyYy9kb2N1bWVudC9jb250ZW50L3hkb2NzCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQKICAgICAgICAgIChidWcgRk9SLTM2OSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzY5KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgQWRkZWQgSG93LVRvIFJ1biBGb3JyZXN0IGZyb20gTWF2ZW4uCiAgICAgICBUaGFua3MgdG8gSWFuIFAuIFNwcmluZ2VyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgQWRkZWQgSG93LVRvIEJ1aWxkIGEgcGx1Z2luLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgIFNwbGl0IHBsdWdpbiBkb2N1bWVudGF0aW9uIGJldHdlZW4gCiAgICAgIHVzZXIgYW5kCiAgICAgIGRldmVsb3BlciB0b3BpY3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTE4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xOCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgIExvY2FsZUFjdGlvbiBjaGFuZ2VkIGl0cyBBUEkuIFRoZSAibGFuZyIgdmFsdWUgaXMgImxhbmd1YWdlIiBub3cuIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0zNzApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTM3MCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICBJZ25vcmUgZGlyZWN0b3J5IGxpbmtzIGZvciBhZ2dyZWdhdGlvbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBIb3dUbyBhYm91dAogICAgICAgIGVkaXRpbmcgQ1NTIGluIGEgV1lTSVdZRyBmYXNoaW9uIHVzaW5nIE1vemlsbGEgRmlyZWZveAogICAgICAgIGFuZCBpdHMgRWRpdC1DU1MgcGx1Z2luLgogICAgICAgVGhhbmtzIHRvIEZlcmRpbmFuZCBTb2V0aGUuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGN1c3RvbSB4bWwgc2FtcGxlIGFuZCBwcm9qZWN0IHNpdGVtYXAgdG8gdGhlICdmb3JyZXN0IHNlZWQgc2l0ZScuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQKICAgICAgICAgIChidWcgRk9SLTM1MSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0zNTEpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIAogICAgICAgIEhvdyB0byBtb2RpZnkgdGhlIGNvbG9yIG9mIGdlbmVyYXRlZCBjb3JuZXIgaW1hZ2VzLiAKICAgICAgIFRoYW5rcyB0byBTdGVwaGFuIEUuIFNjaGxpZXJmLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGxpbmtzIHRvIGV4YW1wbGUgd2Vic2l0ZXMgdG8gZGVtb25zdHJhdGUgZWFjaCBhdmFpbGFibGUKICAgICAgICBkZWZhdWx0IHNraW4uIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENoYW5nZWQgQW50IGJ1aWxkIHByb3BlcnR5IG5hbWUgInZlcnNpb24iIHRvICJmb3JyZXN0LnZlcnNpb24iCiAgICAgICAgdG8gcHJldmVudCBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbGQgc3lzdGVtcyB3aGVuIHVzaW5nIHRoZQogICAgICAgIEFudCAiaW1wb3J0IiB0YXNrLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBzb21lIHB1YmxpYyBpZGVudGlmaWVycyAoZm9yIERURC12Mi4wKSB3aGljaCB3ZXJlIHN0aWxsIHBvaW50aW5nCiAgICAgICAgdG8gb2xkIHZlcnNpb25zIG9mIERURHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTMyMikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0zMjIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHRvIHRoZSBkb2N1bWVudC12MjAgRFREIHRvIHN1cHBvcnQgInVzZW1hcCIgYXR0cmlidXRlIGluIGltZyB0YWcuCiAgICAgICAgQWxzbyBhZGRlZCBkZW1vbnN0cmF0aW9uIG9mIGNsaWVudC1zaWRlIGltYWdlbWFwIHRvIHRoZSAic2VlZCBzaXRlIi4KICAgICAgIFRoYW5rcyB0byBUYW1hcmEgSGFycHN0ZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItMzA1KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0zMDUpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIEZBUSB0byBleHBsYWluIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgY2VydGFpbiBsYW5ndWFnZXMuCiAgICAgICBUaGFua3MgdG8gSm9hbyBGZXJyZWlyYS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlIHNpdGVtYXAgcGx1Z2lucy4gUGx1Z2lucyBhbGxvdyBGb3JyZXN0IHRvIGhhdmUgZnVuY3Rpb25hbGl0eQogICAgICAgIGFkZGVkIHRocm91Z2ggdGhlIGFkZGl0aW9uIG9mIHNtYWxsIGNvZGUgYmxvY2tzIChwbHVnaW5zKS4gUGx1Z2lucwogICAgICAgIGFyZSBkb3dubG9hZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIHNpdGUgdGhhdCByZXF1aXJlcyB0aGVtIGlzIGJ1aWx0LgogICAgICAgIFNlZSBFeHRlbmRpbmcgRm9ycmVzdCB3aXRoIFBsdWdpbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGUgZm9wLTAuMjAuNSBqdXN0IHdpdGggb3B0aW9uYWwgamltaSBzdXBwb3J0LgogICAgICAgIFRoaXMgZml4ZXMgdGhlIGlzc3VlIGJ1aWxkaW5nIHRoZSBBcGFjaGUgRk9QIHNpdGUuCiAgICAgICAgUmVwbGFjZSBsaWJyYXJpZXMgdG8gdXNlIHRoZSBjb2Nvb24tMi4yLjAtZGV2IHZlcnNpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAiaHRtbEFyZWEiLgogICAgICAgIE91dHB1dCBwYWdlcyB0aGF0IGVuYWJsZSBlZGl0aW5nIG9mIHRoZSBpbnB1dC4gT25seSBodG1sIGF0IHRoaXMgc3RhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAicnRmIi4KICAgICAgICBPdXRwdXQgZG9jdW1lbnRzIGFzIFJURi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImxvZ3MiLgogICAgICAgIFVzZSB2YXJpb3VzIGxvZ2ZpbGVzIGFzIGlucHV0LiBDdXJyZW50bHkgb25seSBKYXZhIExvZ2dpbmcgQVBJLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0yMDQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjA0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgYnJva2VubGlua3MgZmlsZSBub3cgY29udGFpbnMgcmVmZXJlciBpbmZvcm1hdGlvbi4KICAgICAgICBVcGdyYWRlZCBsaWIvY29yZS9jb2Nvb24uamFyIGFuZCBhZGRlZCBhdHRyaWJ1dGUgInNob3ctcmVmZXJyZXJzIgogICAgICAgIHRvIHRoZSBDb2Nvb24gY2xpLnhjb25mCiAgICAgICBUaGFua3MgdG8gVXBheWF2aXJhLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgSG93LVRvOgogICAgICAgIEhvdyB0byBjcmVhdGUgYSBQREYgZG9jdW1lbnQgZm9yIGVhY2gKICAgICAgICB0YWIgdG8gY3JlYXRlIHN1YmplY3Qtc3BlY2lmaWMgYWdncmVnYXRlZCBkb2N1bWVudHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEphdmEgMS40IGlzIHJlcXVpcmVkCiAgICAgICAgc3RhcnRpbmcgd2l0aCBGb3JyZXN0LTAuNy1kZXYKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAKICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTMxNykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzE3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBkb2Nib29rMmRvY3VtZW50LnhzbDogcmVtb3ZlIHVubmVjZXNzYXJ5IC8gZnJvbSB0ZW1wbGF0ZSBtYXRjaGVzLgogICAgICAgVGhhbmtzIHRvIFNlYW4gV2hlbGxlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0zMTYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTMxNikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgZG9jYm9vazJkb2N1bWVudC54c2w6IGRvY2luZm8gZWxlbWVudC4gbmV2ZXIgaW4gT0FTSVMgRG9jYm9vayBYTUwgRFREIAogICAgICAgVGhhbmtzIHRvIFNlYW4gV2hlbGxlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0zMDgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzA4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBkb2Nib29rMmRvY3VtZW50LnhzbDogaGFuZGxlIHRoZSB4cmVmIGFuZCB4cmVmbGFiZWwuCiAgICAgICBUaGFua3MgdG8gU2VhbiBXaGVsbGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW50ZXJuYWwgcGx1Z2luICJJTVNNYW5pZmVzdCIuCiAgICAgICAgQWx0ZXJuYXRpdmUgbmF2aWdhdGlvbiBtZXRob2QuIEdlbmVyYXRlcyBtZW51IGxpbmtzIGZyb20KICAgICAgICBJTVMgTWFuaWZlc3RzIChMZWFybmluZyBPYmplY3RzKS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUHJvcGVyIHBvc2l0aW9uaW5nIG9mIGljb24vbGlua3MgZm9yIFBERiwgWE1MLCBQT0QsIFByaW50IGNvbnRlbnQKICAgICAgICBvcHRpb25zIG9uIHBlbHQgc2tpbi4KICAgICAgIFRoYW5rcyB0byBBcnR1cm8gVmF6cXVlei48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBBRwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIGNvbW1vbnMtY29sbGVjdGlvbnMgdG8gMy4xLAogICAgICAgIGNvbW1vbnMtbG9nZ2luZyB0byAxLjAuNCwgamNzIHRvIDEuMS1kZXYuMjAwNDA4MTEsIGx1Y2VuZSB0byAxLjQuMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0xMjIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTIyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmFibGUgZW1haWwgYWRkcmVzcyBvYmZ1c2NhdGlvbiB0byBiZSBjb25maWd1cmFibGUgdXNpbmcgdGhlCiAgICAgICAgb2JmdXNjYXRlLW1haWwtdmFsdWUgb3B0aW9uIGluIHNraW5jb25mLnhtbAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0yNjcpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjY3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBbGxvdyBmb3JyZXN0IHRvIHJ1biBpbiBhIHByb2plY3QgZGlyZWN0b3J5IHdpdGggYSBzcGFjZSBpbiB0aGUgbmFtZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeAogICAgICAgICAgKGJ1ZyBGT1ItMjYyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yNjIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE9wZW5vZmZpY2UyZm9ycmVzdDogYWRkIHN1cHBvcnQgZm9yIG1lcmdlZCBjZWxscyBpbiB0YWJsZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICAKICAgICAgICBGaXhlZCB0aGUgZG9tYWluIGJ1ZyBvZiB0aGUgc2VhcmNoYm94IGluIHBlbHQuICAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIAogICAgICAgIEZpeGVkIHRoZSBtZW51IGluIHBlbHQgYnkgYWRkaW5nIGdldE1lbnUuanMgYW5kIGNoYW5naW5nIHRoZSBzaXRlMnhodG1sLnhzbC4gCiAgICAgICAgTm93IHRoZSBjaGFwdGVyIGltYWdlIHdpbGwgZ2V0IGV4cGFuZCBhZ2Fpbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIAogICAgICAgIGdldE1lbnUuanMgLSBmaXhlcyBhIHBhdGggaXNzdWUgYW5kIHRoZSBkb3VibGUgY2xpY2sgYmVoYXZpb3VyIG9mIHBlbHQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICAKICAgICAgICBFeHBsYWluZWQgdGhlIHVzYWdlIG9mIHRoZSBleHRyYS1jc3MgZWxlbWVudCBpbiBza2luY29uZi54bWwgb2YgdGhlIGZyZXNoIHNpdGUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTI2OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yNjgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluaXRpYWwgQ2hhcGVyb24gZ3JhbW1hciBmb3IgbWluaW1hbCBNb2luTW9pbiBXaWtpIHRvIEZvcnJlc3QgeGRvY3MKICAgICAgICB0cmFuc2Zvcm1hdGlvbi4gU291cmNlIGRvY3VtZW50cyB1c2UgdGhlICoubW9pbndpa2kgZmlsZW5hbWUgZXh0ZW5zaW9uLgogICAgICAgVGhhbmtzIHRvIEZhYmlvIFJpbmFsZGkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlcXVlc3RpbmcgbGlua21hcC5odG1sIEZvcnJlc3Qgbm93IHJlbmRlcnMgdGhlIHNpdGUueG1sIAogICAgICAgIGZpbGUgYXMgYSB0YWJsZSBvZiBjb250ZW50cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5vdyB0aGUgKi5paHRtbCBhbmQgKi5jd2lraSBleHRlbnNpb25zIGFyZSBkZXByZWNhdGVkLiAKICAgICAgICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpdCBpcyByZWNvbW1lbmRlZCB0byBzd2l0Y2ggdG8gCiAgICAgICAgKi5odG1sIGFuZCAqLmpzcHdpa2kuIFdpdGggdGhpcyBpdCdzIG5vdyBwb3NzaWJsZSB0byBoYXZlIGEgCiAgICAgICAgc2l0ZSBpbiBzaW1wbGUgaHRtbCwgZWRpdGVkIHdpdGggYW55IGh0bWwgZWRpdG9yLiAKICAgICAgICBUaGUgKi5qc3B3aWtpIGV4dGVuc2lvbiB3YXMgcHV0IHRvIG1ha2UgaXQgY2xlYXIgd2hhdCB0aGUgCiAgICAgICAgZm9ybWF0IGlzIGFib3V0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTmV3IHByb2plY3Qgc2l0ZW1hcCBleHRlbnNpb24gbWVjaGFuaXNtLiBOb3cgaXQgaXMgcG9zc2libGUgdG8gYWRkCiAgICAgICAgYSBwcm9qZWN0IHNpdGVtYXAgdGhhdCBwbHVncyBpbnRvIHRoZSBwcm9jZXNzaW5nIGF0IHRoZSBiZWdpbm5pbmcuCiAgICAgICAgSWYgdGhlIHJlcXVlc3RlZCB1cmwgaXMgcmVzb2x2ZWQgYnkgaXQsIGl0IHdpbGwgc2VydmUgdGhlIGZpbGUgZGlyZWN0bHkuCiAgICAgICAgSWYgdGhlIHJlcXVlc3RlZCB1cmwgd2l0aCB0aGUgZXh0ZW5zaW9uIGNoYW5nZWQgdG8geG1sIGlzIG1hdGNoZWQsIHRoZW4KICAgICAgICBGb3JyZXN0IHdpbGwgdXNlIHRoYXQgcmVzdWx0IGFzIHRoZSBpbnRlcm1lZGlhdGUgZm9ybWF0IGFuZCByZW5kZXIgaXQuCiAgICAgICAgVGhpcyB3aWxsIGVuYWJsZSBwcm9qZWN0LXNwZWNpZmljIHNpdGVtYXBzIHRvIG5vdCBjb2xsaWRlIHdpdGggZnV0dXJlCiAgICAgICAgRm9ycmVzdCB1cGRhdGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0yNjgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjY4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZWxhdGl2ZSBVUklzIHdpdGggYWJzb2x1dGUgcGF0aHMgd2VyZSBicm9rZW4gaW4gdGhlIHNpdGUueG1sCiAgICAgICAgbGlua2luZyBtZWNoYW5pc20uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlLXdyaXRlIHRoZSBDaGFwZXJvbiBncmFtbWFyIGZvciBKU1BXaWtpIHRvIGFkZHJlc3MgYW1iaWd1aXR5IHdpdGgKICAgICAgICBwYXJhZ3JhcGhzIGFuZCBzdWItc2VjdGlvbnMuCiAgICAgICBUaGFua3MgdG8gRmFiaW8gUmluYWxkaS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICAgQWRkZWQgY29uZmlndXJhdGlvbiBmb3IgWE1MTWluZCBYTUwgRWRpdG9yIHRvIHNjcmF0Y2hwYWQuICBPcmlnaW5hbGx5CiAgICAgICAgIGZyb20gc3BsaWtlLmNvbQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0yNDApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjQwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgRW5oYW5jZSB0aGUgZG9jdW1lbnQycG9kIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIG1hbnkgb3RoZXIgZWxlbWVudHMKICAgICAgICAgYW5kIGVuYWJsZSB0aGUgbGluayB0byB0aGlzIGZvcm1hdCB0byBiZSBjb25maWd1cmVkIHZpYSBza2luY29uZi4KICAgICAgICAgU2VlIHRoZSBpc3N1ZSByZXBvcnQgZm9yIHNvbWUgbm90ZXMuCiAgICAgICBUaGFua3MgdG8gUmljayBUZXNzbmVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEF1dG9tYXRpY2FsbHkgYWRkIHNvbWUgbWV0YSBlbGVtZW50cyB0byBoZWFkIG9mIGh0bWwKICAgICAgICAoR2VuZXJhdG9yIG5hbWUsIEZvcnJlc3QgdmVyc2lvbiwgc2tpbiBuYW1lKQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBPcHRpb25hbCBmZWVkYmFjayBsaW5rIGZvciB0aGUgZm9vdGVyIG9mIGFsbCBza2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTmV3IG91dHB1dCBmb3JtYXQgZm9yIFBPRCAodGhlIFBlcmwgY29tbXVuaXR5J3MgUGxhaW4gT2xkIERvY3VtZW50YXRpb24pCiAgICAgICAgdHJpZ2dlcmVkIHVzaW5nIHRoZSAucG9kIGZpbGVuYW1lIGV4dGVuc2lvbi4KICAgICAgICBJbml0aWFsIHdvcmssIG5lZWRzIGVuaGFuY2VtZW50LiBTZWUKICAgICAgICBmb3JyZXN0LWRldgogICAgICAgICAgZGlzY3Vzc2lvbgogICAgICAgVGhhbmtzIHRvIFJpY2sgVGVzc25lci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRWNsaXBzZSBwbHVnaW4gY29kZSBhZGRlZCB0byBzY3JhdGNocGFkIChkb25hdGVkIGJ5IEJ1cnJva2VldCkuCiAgICAgICAgSW5pdGlhbCB3b3JrLCBuZWVkcyBlbmhhbmNlbWVudC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHJlbW92ZQogICAgICAgICAgKGJ1ZyBGT1ItMTgxKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHJlbW92ZQogICAgICAgIGJ5CiAgICAgICAgREIKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTE4MSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgU2tpbnMgImZvcnJlc3QtY3NzIiBhbmQgImF2YWxvbi10aWdyaXMiIGFyZSBkZWxldGVkLiBUaGUKICAgICAgICAidGlncmlzLXN0eWxlIiBpcyByZW5hbWVkIHRvICJ0aWdyaXMiLiBBbGlhc2VzCiAgICAgICAgc2V0IGluIHBsYWNlIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LgogICAgICAgIFRoZSBvbGQgImZvcnJlc3Qtc2l0ZSIgYW5kICJrcnlzYWxpcy1zaXRlIiBza2lucyBhcmUgcmV0YWluZWQgZm9yCiAgICAgICAgYSBsaXR0bGUgd2hpbGUgbG9uZ2VyLAogICAgICAgIGJ1dCBhcmUgZGVwcmVjYXRlZCwgc28gcGxlYXNlIG1vdmUgdG8gb25lIG9mIHRoZSBvdGhlciBza2lucy4KICAgICAgICBTZWUgbm90ZXMgYWJvdXQgRGVmYXVsdCBza2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQUcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBBbnQgMS42LjIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTIxNCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yMTQpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEpDUyBsb2cgbWVzc2FnZXMgZ28gdGhyb3VnaCBjb2Nvb24gaW5zdGVhZCBvZiB0byBzdGRvdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTIyNikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yMjYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEdlbmVyYXRlIHByb3BlciBodG1sIGZvciBmaWd1cmVzIGluIHNpbXBsaWZpZWQgZG9jYm9vay4KICAgICAgIFRoYW5rcyB0byBKb2hhbm5lcyBTY2hhZWZlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0xNzQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTc0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBIYXZlIEBjbGFzcyBhdHRyaWJ1dGUgaW4gRFREIGZvciBldmVyeSBlbGVtZW50LCB3aGljaCBlbmFibGVzIHRoZQogICAgICAgICJleHRyYS1jc3MiIHNlY3Rpb24gaW4gdGhlIHNraW5jb25mIHRvIGJlIHB1dCB0byBnb29kIHVzZS4KICAgICAgICBVcGRhdGVkIGFsbCB2MS4yIERURHMgdG8gYmVjb21lIHYxLjMgRFREcyAoZm9yd2FyZCBjb21wYXRpYmlsaXR5OgogICAgICAgIHYxLjIgZG9jcyB3aWxsIHdvcmsgZmluZSBhcyBWMS4zKS4KICAgICAgICBVcGRhdGVkIHRoZSB2Mi4wYSBEVERzIHRvIGJlY29tZSB2Mi4wIERURHMgKGZvcndhcmQgaW5jb21wYXRpYmlsaXR5OgogICAgICAgIHYxLjIvMS4zIGRvY3MgYXJlIG5vdCBmb3J3YXJkLWNvbXBhdGlibGUgYXMgVjIuMCkuCiAgICAgICAgQWRkZWQgZGVtbyBvZiBleHRyYS1jc3MgdG8gdGhlIHNlZWQgc2l0ZSBhbmQgdXBkYXRlZCBzb21lCiAgICAgICAgc2FtcGxlIGRvY3MgdG8gdXNlIG5ldyB2MS4zIERURHMuCiAgICAgICAgU2VlIHRoZSBzYW1wbGVzIGFuZCByZWZlcmVuY2UgZG9jcy4KICAgICAgICBTZWUgdGhlIGlzc3VlIHJlcG9ydCBmb3IgZnVsbCBsaXN0IG9mIGNoYW5nZXMuCiAgICAgICBUaGFua3MgdG8gUmljayBUZXNzbmVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGEgSG93LVRvOgogICAgICAgIEdlbmVyYXRlIGFuIEFTRiBtaXJyb3JzIHBhZ2UgdXNpbmcKICAgICAgICBpbnRlcmFjdGl2ZSB3ZWIgZm9ybSB1c2luZyBpaHRtbCB0byBpbmNsdWRlIGFkZGl0aW9uYWwgaHRtbAogICAgICAgIGZvcm0gZWxlbWVudHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTIxOSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yMTkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGZvcnJlc3Rib3QgZGVwbG95LnN2biBpbXBsbWVudGF0aW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItMTEzKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMTMpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN1cHBvcnQgcnVubmluZyBGb3JyZXN0IG9uIFdpbjl4LgogICAgICAgVGhhbmtzIHRvIFBpZXJyaWNrIEJyaWhheWUuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTIwNykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjA3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBEb24ndCBjb3B5IHVubmVlZGVkIHByb2plY3QgZmlsZXMgaW4gJ3dhcicgYW5kICd3ZWJhcHAnIHRhcmdldHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi0yMTYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREIKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTIxNikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIG1vcmUgZGVzY3JpcHRpb25zIHRvIGZvcnJlc3QgdGFyZ2V0cy4gIEhpZ2hsaWdodCB0aGUgbW9zdCBjb21tb24gb25lcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMjE4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTIxOCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSBIb3ctVG86CiAgICAgICAgSG93IHRvIGNyZWF0ZSBhIFBERiBkb2N1bWVudCBmb3IgZWFjaAogICAgICAgIHRhYiB0byBjcmVhdGUgc3ViamVjdC1zcGVjaWZpYyBhZ2dyZWdhdGVkIGRvY3VtZW50cy4KICAgICAgIFRoYW5rcyB0byBTdGVwaGFuIEUuIFNjaGxpZXJmLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENyZWF0ZWQgdGhlIEhvdy1UbyBzZWN0aW9uIG9mIHRoZQogICAgICAgIGRvY3VtZW50YXRpb24uIENvbnRpbnVlIERpYW5uYSBTaGFubm9uJ3MgZ29vZCB3b3JrIHdpdGggZGVzaWduaW5nCiAgICAgICAgdGhlIERURHMsIGNvbmNlcHRzLCBhbmQgZG9jdW1lbnRhdGlvbiBlZmZvcnQgYXQgQ29jb29uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0xODIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTgyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgbmV3ICJwZWx0IiBza2luICh1c2VzIENTUyBhbmQgZGl2KS4KICAgICAgICBTZWUgbm90ZXMgYWJvdXQgRGVmYXVsdCBza2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUHJvamVjdHMgY2FuIHVzZSBhIGxvY2FsIENhdGFsb2dNYW5hZ2VyLnByb3BlcnRpZXMgdG8gZGVjbGFyZQogICAgICAgIGFkZGl0aW9uYWwgQ2F0YWxvZ3MgZm9yIERURHMgYW5kIG90aGVyIGVudGl0aWVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbXByb3ZlIGxvb2sgb2YgUERGIHBhZ2VzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0xMzgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTM4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBQREYgcGFnZXMgcmVjZWl2ZSBza2luY29uZiBwcm9wZXJseSAodGhyb3VnaCB0aGUgc2tpbmNvbmYgcGlwZWxpbmUpLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0xNTQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTU0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGQVEgcGFnZSBkb2VzIG5vdCBuZWVkIHRvIHByb3ZpZGUgaXQncyBvd24gZXh0cmEgaW5kZXguCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTE2NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTY1KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBCcm9rZW5saW5rcyBmaWxlIGlzIG5vdyBnZW5lcmF0ZWQgaW4gcHJvamVjdC5ob21lIHJhdGhlciB0aGFuIGZvcnJlc3QuaG9tZQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkCiAgICAgICAgICAoYnVnIEZPUi0xMDcpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTA3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBhIG1lY2hhbmlzbSB0byBlbmFibGUgaW1wb3ZlcmlzaGVkIFhNTCB0b29scyB0aGF0IGRvIG5vdCB1c2UKICAgICAgICB0aGUgQ2F0YWxvZyBFbnRpdHkgUmVzb2x2ZXIgdG8gZmV0Y2ggdGhlIERURHMgZGlyZWN0IGZyb20gdGhlIHdlYnNpdGUuCiAgICAgICAgU2VlIHVwZ3JhZGluZyB0byB2MC42CiAgICAgICAgUGxlYXNlIGhlbHAgdG8gdXBncmFkZSBvdXIgL2R0ZC8uaHRhY2Nlc3MgZmlsZSAoc2VlIGlzc3VlIEZPUi0xMDcpCiAgICAgICAgYW5kIHBsZWFzZSBoZWxwIHRvIGFkZHJlc3MgdGhlIFNWTiBJc3N1ZQogICAgICAgIDEyMzMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTE0MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xNDIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluIHNraW5jb25maWcsIGFkZCBib3gtbG9jYXRpb24gYXR0cmlidXRlIHRvIHNlYXJjaCBlbGVtZW50LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgcmVtb3ZlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgcmVtb3ZlCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZW1vdmUgJ3RlbXBsYXRlJyBza2luOyBiZXR0ZXIgdG8gYmFzZSBhIG5ldyBza2luIG9uIGFuIGV4aXN0aW5nIG9uZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlcGxhY2UgVVJMcyBpbiBhbGwgZG9jcyB0byBiZSBodHRwOi8vZm9ycmVzdC5hcGFjaGUub3JnLwogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0xMzApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTEzMCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIG1pc3NpbmcgeGRvY3MgZnJvbSB0aGUgdmFsaWRhdGUuZXhjbHVkZSBwcm9wZXJ0eS4gQWxsb3dpbmcgdG8gZXhjbHVkZSBmaWxlcy4gCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTExNCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMTQpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEltcHJvdmVkIHJlc29sdmluZyBpbWFnZSByZWZlcmVuY2VzIGluIFBERnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOb3cgQ1NTIGZpbGVzIGFyZSBwYXJzZWQgaW50ZXJuYWxseSwgc28gdGhhdCB0aGUgdXJscyBhcmUgaW5jbHVkZWQgaW4gdGhlIHN0YXRpYwogICAgICAgIHNpdGUgZ2VuZXJhdGlvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRm9ycmVzdCBpcyBub3cgYSB0b3AtbGV2ZWwgQXBhY2hlIHByb2plY3QuIFRoZSBuZXcgd2Vic2l0ZSBpcyBhdAogICAgICAgIGh0dHA6Ly9mb3JyZXN0LmFwYWNoZS5vcmcvCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBMdWNlbmUtaW5kZXggdGFyZ2V0IHdvcmtzLiBJZiBzZWFyY2hAcHJvdmlkZXI9Imx1Y2VuZSIgaXMgc2V0IGNyZWF0ZSBhIHNlYXJjaCBpbmRleC4KICAgICAgICBCdWlsZCBzaXRlIGFuZCBydW4gdGFyZ2V0cyBhcyBwZXIgcHJvamVjdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBmb3JyZXN0LmhvbWUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTE0OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xNDgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgICBGaXggcmVsYXRpdmUgbGlua3MgYW5kIGltYWdlIHJlZmVyZW5jZXMgaW4gYWdncmVnYXRlIHBhZ2VzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi05KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi05KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgIFdvcmtlZCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBpbnRvIGFsbCBza2lucy4KICAgICAgICAgIEZpeGVkIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIEdvb2dsZSBzaXRlIHNlYXJjaC4KICAgICAgICAgIExhdGVyYWwgc2VhcmNoIGJveCB3YXMgaW5jb21wYXRpYmxlIHdpdGggbmV3IHNraW5jb25mLnhtbCBmb3JtYXQuCiAgICAgICBUaGFua3MgdG8gRmxvcmlhbiBHLiBIYWFzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQKICAgICAgICAgIChidWcgRk9SLTkpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgICBBZGRlZCBuZXcgZG9jdW1lbnRhdGlvbiBhYm91dAogICAgICAgIFNlYXJjaGluZyBGb3JyZXN0LWJ1aWx0IGRvY3VtZW50YXRpb24KICAgICAgICB3aGljaCBkZXNjcmliZXMgYm90aCBMdWNlbmUgYW5kIEdvb2dsZSBzZWFyY2guCiAgICAgICBUaGFua3MgdG8gRmxvcmlhbiBHLiBIYWFzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgVXBncmFkZSB0byBjb2Nvb24gMi4xLjUKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHJlbW92ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHJlbW92ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgICBDbGVhbiB1cCBmaXJzdCBMdWNlbmUgc2VhcmNoIGltcGxlbWVudGF0aW9uIGluIEZvcnJlc3QuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBMb2NhdGlvbm1hcCBtb2R1bGVzIGFkZGVkLiAgTm90IGluIHVzZSB5ZXQuCiAgICAgICBUaGFua3MgdG8gVW5pY28gSG9tbWVzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBGb3JyZXN0ZG9jIGNvZGUgYWRkZWQgdG8gc2NyYXRjaHBhZDsgcHJldmlvdXNseSB3YXMgSmFrYXJ0YSBBbGV4YW5kcmlhCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTEyMykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMjMpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZWQgYXV0aG9yIGFuZCBjdnMtaWQgdGFncyBmcm9tIGNvZGUgYW5kIHhkb2NzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVwYWNrIEpldHR5IHdpdGhvdXQgSlNQIHN1cHBvcnQuIE5vdyB3ZSBjYW4gcmVtb3ZlIG9yZy5hcGFjaGUuamFzcGVyLmphcgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmFkbWluIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5hZG1pbiB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1vdmVkIGZvcnJlc3Rib3QyIGZyb20gc2NyYXRjaHBhZCBpbnRvIG1haW4uICBVc2VzIGFudCAxLjYncyAKICAgICAgICAnaW1wb3J0JyB0YXNrIGluc3RlYWQgb2YgWFNMVC9hbnQuICBXZWJhcHAgY29tcGxldGVseQogICAgICAgIHJld3JpdHRlbiB0byB1c2UgSlNUTCwgU3RydXRzLCBKYXZhIHV0aWxpdHkgY2xhc3NlcywgYW5kIAogICAgICAgIE9wZW5TeW1waG9ueSdzIE9TVXNlciBmb3IgZmxleGlibGUgYXV0aGVudGljYXRpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBGb3JyZXN0IGRvZXMgbm90IGNvcHkgYW55dGhpbmcgYXJvdW5kIGFueW1vcmUuIFRoZSBvbmx5IHN0ZXAKICAgICAgICB0byBtYWtlIGl0IHdvcmsgaXMgdG8gaGF2ZSBqYXZhIGNvbXBpbGUgdGhlIGZvcnJlc3QgamFyOyBhbGwKICAgICAgICBvdGhlciByZXNvdXJjZXMgYXJlIHVzZWQgaW4gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTE0NikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xNDYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1vdmVkIGFsbCByZWZlcmVuY2VzIHRvIC8vc2tpbmNvbmZpZyBvdXQgb2YgdGhlIGRvY3VtZW50Mmh0bWwueHNsCiAgICAgICAgaW50byB0aGUgc2l0ZTJ4aHRtbC54c2wgZmlsZS4KICAgICAgICAqIFJhdGlvbmFsaXplZCB0aGUgVGFibGUgb2YgQ29udGVudHMgc3R1ZmYgYnkgY3JlYXRpbmcgYSAidG9jIgogICAgICAgIG1vZGUgaW4gdGhlIGNvbW1vbi94c2x0L2h0bWwvZG9jdW1lbnQyaHRtbC54c2wuIFRoYXQgaXMgdGhlbgogICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBlci1wYWdlIFRvQyBhbmQgdGhlIFRvQyBhdHRhY2hlZCB0byB0aGUgbWVudS4KICAgICAgICAqIFJlbW92ZWQgZXh0cmFuZW91cyBkZWZhdWx0IHhzbCBtYXRjaGVycyBvbiB0aGUgbm9uLWNvbW1vbgogICAgICAgIGRvY3VtZW50Mmh0bWwgYW5kIHNpdGUyeGh0bWwgWFNMcy4gVGhpcyBhbGxvd3MgbWF0Y2hlcwogICAgICAgIGRlZmluZWQgaW4gdGhlIGltcG9ydGVkIHRyYW5zZm9ybWF0aW9uIHNoZWV0cyB0byBtYXRjaAogICAgICAgIChpbXBvcnRlZCBzaGVldHMgaGF2ZSBsb3dlciBwcmVjZWRlbmNlKS4KICAgICAgICAqIERlZmluZWQgYSBjb3VwbGUgb2YgJmx0O2RpdiBpZD0iLi4uIiZndDsgcGxhY2UgaG9sZGVyCiAgICAgICAgdGFncyB1c2VkIGJ5IHRoZSBkb2N1bWVudDJodG1sLiBUaG9zZSBhcmUgdGhlbiBza2lubmVkIGJ5IHRoZQogICAgICAgIHNpdGUyeGh0bWwgc2hlZXRzLgogICAgICAgICogTm90ZTogSWYgeW91IGhhdmUgeW91ciBvd24gc2tpbnMgdGhhdCB3ZXJlIHJlZmVyZW5jaW5nICIkY29uZmlnIiBvcgogICAgICAgICIvL3NraW5jb25maWciIGluIHRoZSBkb2N1bWVudDJodG1sLnhzbCB0aGVuIHlvdSBuZWVkIHRvIG1ha2Ugc2ltaWxhcgogICAgICAgIGNoYW5nZXMuCiAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIEZPUi0xNDYgaXNzdWUgcmVwb3J0LgogICAgICAgVGhhbmtzIHRvIFJpY2sgVGVzc25lci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0xMjApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTIwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgJmx0O2NvcHlyaWdodC1saW5rJmd0OyBlbGVtZW50IHRvIHNraW5jb25mCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSByZW1vdmUKICAgICAgICAgIChidWcgRk9SLTEzMSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSByZW1vdmUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMzEpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSAuZWh0bWwgZmlsZXMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICBVc2UgLmlodG1sIGluc3RlYWQuICBGdXR1cmUgaHRtbCBpbnB1dCBzdXBwb3J0IHdpbGwgYmUKICAgICAgICBiYXNlZCBvbiB0aGlzCiAgICAgICAgZGlzY3Vzc2lvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZSBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UuIFJlcG9ydGVkIGEgY29jb29uIGJ1ZyAjMjg5MzkgCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSByZW1vdmU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSByZW1vdmUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgIFJldmVydCB0aGUgY2hhbmdlcyB0byBhY2Nlc3Mgc2tpbmNvbmYgdXNpbmcgInNraW5jb25mLy8iIGRvbmUgb24gcjEwMjU5CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgCiAgICAgICBmb3JyZXN0LXVzZXIKICAgICAgIG1haWwgbGlzdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEpldHR5IGphciB3YXMgbWlzdGFrZW5seSBjb21waWxlZCBmb3IgamRrIDEuNAogICAgICAgIC0gbm93IHJlLWNvbXBpbGVkIGZvciBqZGsgMS4zIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgcmVtb3ZlCiAgICAgICAgICAoYnVnIEZPUi0xNDApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgcmVtb3ZlCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTQwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGb3JyZXN0LXRhcmdldHMgd2l0aCBhbnQgcHJveHkgaXMgb2Jzb2xldGU7IHVzZSBmb3JyZXN0Ym90IG5vdy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItMTM3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREIKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTEzNykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgJ2J1aWxkIHBhdGNoJyBjb21tYW5kIHVwZGF0ZWQgZm9yIFNWTi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItOSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItOSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29tcGxldGVseSByZXdyaXR0ZW4gTHVjZW5lLWJhc2VkIGluZGV4IGFuZCBzZWFyY2ggZnVuY3Rpb25hbGl0eS4KICAgICAgIFRoYW5rcyB0byBGbG9yaWFuIEcuIEhhYXMuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeAogICAgICAgICAgKGJ1ZyBGT1ItMTM5KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMzkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIHNraW5jb25mIHdhcyBiZWluZyBpZ25vcmVkIGZvciB0aGUgc3ZnIGFuZCBmbyBmb3JtYXRzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0xMzYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTEzNikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgIldhcm5pbmciIHdhcyBtaXN0YWtlbmx5IGxhYmVsZWQgYXMgIk5vdGUiIGluIFBERi4KICAgICAgIFRoYW5rcyB0byBOaWNrIENoYWxrby48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi02OSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIHNpdGUyYm9vay54c2wgaGFuZGxlIGFsbCBtZW51LWl0ZW0gYW5kIG1lbnUgYXR0cmlidXRlcwogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0xMTUpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTE1KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBQcm9wZXIgdGFibGUgYXJvdW5kICdncmFwaGljJyBpbiBzaW1wbGlmaWVkIGRvY2Jvb2suCiAgICAgICBUaGFua3MgdG8gUm9iIEV4bGV5LjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXBsYWNlIGRvY3VtZW50KCkgZnVuY3Rpb24gdG8gZ2V0IHNraW5jb25mIHZhbHVlcyBhbmQgdXNlICIvL3NraW5jb25maWciLgogICAgICAgIEZpeCBvcmRlciBzbyBpdCBjYW4gdmFsaWRhdGUgc2tpbmNvbmYuCiAgICAgICAgVXNlICZsdDtzZWFyY2gvJmd0OyBpbnN0ZWFkIG9mCiAgICAgICAgJmx0O2Rpc2FibGUtc2VhcmNoLyZndDsgJmx0O2Rpc2FibGUtbHVjZW5lLyZndDsKICAgICAgICAmbHQ7c2VhcmNoc2l0ZS1kb21haW4vJmd0OyAmbHQ7c2VhcmNoc2l0ZS1uYW1lLyZndDsuCiAgICAgICAgRml4IHNraW5jb25mLnhzbCBzbyBpdCBwcm9kdWNlcyBhIHByb3BlciBza2luY29uZgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBBRwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIGpldHR5IHRvIDQuMi4xOQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlIHNjcmlwdHMgYW5kIGNvbmZpZyBmaWxlcyB0byBhbGxvdyB1cGdyYWRlIHRvIGNvY29vbiAyLjEuNS1kZXYKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyBzdHlsZXNoZWV0IHRvIGltcG9ydCB0aGUgb3JpZ2luYWwgY29jb29uLnhjb25mIGZpbGUKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0b3Agb3ZlcndyaXRpbmcgc2tpbmNvbmYgYW5kIGNvY29vbi54Y29uZiBvbiB3ZWJhcHAgdGFyZ2V0LgogICAgICAgIExpYnMgd2VyZSBub3QgY29waWVkIG9uIHRoZSB3ZWJhcHAgdGFyZ2V0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTW92ZSBjb250ZXh0IHRhcmdldHMgZnJvbSBmb3JyZXN0LmJ1aWxkLnhtbCB0byB0YXJnZXRzL2NvbnRleHQKICAgICAgICBVc2Ugc2tpbmNvbmYgRFRELgogICAgICAgIFVzZSB4bWx2YWxpZGF0ZSBmb3Igc2tpbmNvbmYuCiAgICAgICAgQ3JlYXRlIHVwZ3JhZGVza2luY29uZi54c2wgZm9yIG9sZCBza2luY29uZi54bWwgZmlsZXMKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSBsYW5ndWFnZSBhbHRlcm5hdGl2ZSBkaXYgZGlzcGxheXMgbGFuZ3VhZ2UgaW4geW91ciBvd24gbGFuZ3VhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERvY2Jvb2sgc3VwcG9ydCBmb3IgcmVmZW50cnkgZWxlbWVudCBhbmQgaXQncyBjaGlsZHJlbi4gIEdlbmVyYWxseSB1c2VkIGZvciBtYW4gcGFnZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBEbyBub3QgY3JlYXRlIFRvQyB1bmxlc3MgaXQgaGFzIGJlZW4gZGVmaW5lZCBvbiB0aGUgc2tpbmNvbmYuCiAgICAgICAgQ2hhbmdlIGxldmVsIGF0dHJpYnV0ZSB0byBtYXgtZGVwdGggYXR0cmlidXRlLgogICAgICAgIEFkZCBhIG1pbi1zZWN0aW9ucyBhdHRyaWJ1dGUgdG8gZGVmaW5lIGEgbWluaW11biBudW1iZXIgb2Ygc2VjdGlvbnMgCiAgICAgICAgYmVmb3JlIGNyZWF0ZSBhIHRvYy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBMYW5ndWFnZSBhbHRlcm5hdGl2ZXMgZGl2LiBUbyB0ZXN0IGl0OgogICAgICAgIGkxOG4tZm9vLmh0bWwKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMTEyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFBhZ2Ugc2l6ZSBhbmQgb3JpZW50YXRpb24gZm9yIHBkZi4KICAgICAgIFRoYW5rcyB0byBGbG9yaWFuIEcuIEhhYXMuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREIKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29udmVydGVkIHJlcG9zaXRvcnkgZnJvbSBDVlMgdG8gU1ZOLgogICAgICAgVGhhbmtzIHRvIEFwYWNoZSBJbmZyYXN0cnVjdHVyZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBncmFkZSB0byBiYXRpayAxLjUuMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGkxOG4gdG8gc2luZ2xlIGZpbGUgY29udGVudC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgVG9DIGVsZW1lbnQgaXMgb3B0aW9uYWwgb24gc2tpbmNvbmYuIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBBRwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIEFudCAxLjYuMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGkxOG4gdG8gdGFicy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFB1dHRpbmcgYSBqZXR0eWNvbmYueG1sIGZpbGUgaW4geW91ciBkb2N1bWVudCBkaXJlY3Rvcnkgd2lsbCBvdmVycmlkZQogICAgICAgIHRoZSBvbmUgc3VwcGxpZWQgaW4gdGhlIGRlZmF1bHQgRm9ycmVzdCBjb250ZXh0LiBBbHNvIG5vIGxvbmdlciBjb3BpZXMgCiAgICAgICAgamV0dHljb25mLnhtbCB0byBidWlsZCBkaXIgKG9uZSBtb3JlIGZpbGUgY2xvc2VyIHRvIG5vIGNvcHlpbmcgOy0pKQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWxsb3cgYSBmdWxsIHVybCBpbWFnZSB0byBiZSBpbmNsdWRlZCBvbiBhIHBkZiBmaWxlLgogICAgICAgIFVzZSBvbmx5IHRtcCBhcyB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBTcGxpdCBidWlsZCBmaWxlIGluIHZhcmlvdXMgcGFydHMgKHdlYmFwcCx3YXIsdmFsaWRhdGUsc2l0ZSkKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN1cHBvcnQgbXVsdGlwbGUgc2tpbiBkZXNjcmlwdG9yIGZpbGVzIHZpYSB0aGUgZm9ycmVzdC5za2lucy5kZXNjcmlwdG9ycyBwcm9wZXJ0eQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1vdmUgYW50ICsgSmV0dHkgdW5kZXIgdG9vbHMgb24gdGhlIGJ1aWxkIHRhcmdldAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIExpYnJhcmllcyBhcmUgbm90IGNvcGllZCBhbnltb3JlIGluIHRoZSBzZXJ2bGV0IGNvbnRleHQgb2YKICAgICAgICB0aGUgZGlzdCBhbmQgb2YgdGhlIHByb2plY3QgYmVpbmcgYnVpbHQ7IHRoZXkgYXJlIGFkZGVkCiAgICAgICAgaW5zdGVhZCB0byB0aGUgY2xhc3NwYXRoIG9mIGpldHR5IGZvciB0aGUgJ3J1bicgdGFyZ2V0IGFuZAogICAgICAgIG9mIHRoZSBDb2Nvb24gQ0xJIGZvciB0aGUgZGVmYXVsdCAnc2l0ZScgdGFyZ2V0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMTA4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0xMDgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyAnY2xlYW4tZGlzdCcgdGFyZ2V0IGZvciBidWlsZC54bWwsIHdoaWNoIGlzIG5vdyB0aGUgZGVmYXVsdCB0YXJnZXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgV3JvbmcgZGlyZWN0b3J5IGJlaW5nIHVzZWQgZm9yIHdpa2kgZ3JhbW1hcnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBncmFkZSB0byBKaW5nIDIwMDMwNjE5LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFZhbGlkYXRpb24gaXMgbm93ICJkeW5hbWljIiwgYnkgc2V0dGluZyB0aGUgcGFyc2VyIGZlYXR1cmUKICAgICAgICAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vZHluYW1pYyIuCiAgICAgICAgVGhpcyBtZWFucyB0aGF0IGRvY3VtZW50cyB3aXRoIERURCBhcmUgZnVsbHkgdmFsaWRhdGVkLAogICAgICAgIHdoaWxlIGRvY3VtZW50cyB3aXRob3V0IERURCBhcmUganVzdCBjaGVja2VkIGZvciB3ZWxsLWZvcm1lZG5lc3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBTa2luY29uZlRyYW5zZm9ybWVyLCB0aGF0IGF1Z21lbnRzIHRoZSBza2luY29uZi54bWwgCiAgICAgICAgYnkgYWRkaW5nIHRoZXNlIGF0dHJpYnV0ZXMgdG8gY29sb3JzIGlmIG5vdCBwcmVzZW50OgogICAgICAgIEBoaWdobGlnaHQsIEBsb3dsaWdodCwgQGZvbnQsIEBsaW5rLCBAdmxpbmssIEBobGluay4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNTkpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU5KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgIFJlbW92ZWQgeG1sMnhodG1sLnhzbCBpbXBvcnQgaW4gcHJvZmlsZTJwYWdlLnhzbCB0aGF0IHdhcyBub3QgdXNlZCAoZmlsZSBub3QgcHJlc2VudCkuCiAgICAgICBUaGFua3MgdG8gSnVhbiBKb3NlIFBhYmxvcy48L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItOTgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTk4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgYnVpbGQgdGFyZ2V0IHRvIGJ1aWxkIGEgd2ViYXBwIHRoYXQgY2FuIGJlIGRpc3RyaWJ1dGVkLgogICAgICAgICJ3YXIiIHRhcmdldCBkZXBlbmRzIG9uICJjb2RlIiB3aGljaCB3aWxsIHByb2R1Y2UgYW4gZGVwbG95YWJsZSB3ZWJhcHAsCiAgICAgICAgInJ1biIgdGFyZ2V0IGRlcGVuZHMgb24gIndlYmFwcC1sb2NhbCIgd2hpY2ggbGVhdmVzIG1hbnkgZmlsZXMgaW4gdGhlIHByb2plY3QKICAgICAgICBkaXJlY3RvcnkgdG8gZWFzZSBlZGl0aW5nIChlLmcuIHNyYywgcmVzb3VyY2VzIGFuZCBza2lucykKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOb3cgc2tpbnMgY2FuIGdldCBhIHN0YWIgYXQgZW5oYW5jaW5nIHNraW5jb25mLnhtbCwgYnkgcGxhY2luZwogICAgICAgIGEgc2tpbmNvbmYueHNsIGZpbGUgaW4gdGhlIHNraW4gZGlyZWN0b3J5LgogICAgICAgIEJ5IGRlZmF1bHQgc29tZSB2YWx1ZXMgYXJlIGFkZGVkIGJ5IHRoZSBjb21tb24gc2tpbiwgbGlrZQogICAgICAgIGRlZmF1bHQgRm9ycmVzdCBjb2xvcnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGdyYWRlIHRvIGNvY29vbiAyLjEuMwoJbmVrb2R0ZCAwLjEuOQoJcmVtb3ZlIGV4Y2FsaWJ1ci1jb25jdXJyZW50LTIwMDIwODIwLmphcgoJcmVtb3ZlIGV4Y2FsaWJ1ci1jbGktMS4wLmphcgoJcmVtb3ZlIGV4Y2FsaWJ1ci1kYXRhc291cmNlLXZtMTItMjAwMjExMjEuamFyCglyZW1vdmUgamFrYXJ0YS1vcm8tMi4wLjYuamFyIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIE9wZW5vZmZpY2UgV3JpdGVyIDEuMSBmaWxlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbnN0ZWFkIG9mIGZvcnJlc3QtdGFyZ2V0cy5lbnQgd2l0aCBBbnQgMS42IEZvcnJlc3QgY2FuIG5vdyBhbHNvIGJlIHVzZWQgd2l0aAogICAgICAgIHRoZSBuZXcgaW1wb3J0IGZhY2lsaXR5OiAmbHQ7aW1wb3J0IGZpbGU9ImZvcnJlc3QtdGFyZ2V0cy54bWwiLyZndDsKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgRml4ZXMgdG8gdGhlIGtyeXNhbGlzIHNraW4gdG8gYnJpbmcgaXQgdXAgdG8gc251ZmYuCiAgICAgICBBZGRlZCBsYXRlcmFsIHNlYXJjaCBiYXIuCiAgICAgICBBZGRlZCBjcmVkaXRzIHNlY3Rpb24uCiAgICAgICBVc2UgYXV0b21hdGljYWxseSBza2lubmFibGUgYm9yZGVycwogICAgICAgRml4IGNvZGUgZm9udCBzaXplLgogICAgICAgT3RoZXIgc21hbGwgZW5oYW5jZW1lbnRzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQXV0b21hdGljIGdlbmVyYXRpb24gb2YgYm9yZGVycyBmcm9tIHNraW4gY29sb3JzIGFuZCBuYW1pbmcgY29udmVudGlvbi4KICAgICAgICBSb3VuZGVkIGFuZCBzdHJhaWdodCA0NSBkZWdyZWVzIGNvcm5lcnMgc3VwcGxpZWQuCgogICAgICAgRm9yIGV4YW1wbGUsIHRvIGdlbmVyYXRlIGEgJ3Inb3VuZGVkIGNvcm5lciBmb3IgJ3Qnb3AgJ2wnZWZ0IHRoZSBzaXplCiAgICAgICBvZiAnNScgcGl4ZWxzIG9mIGJhY2tncm91bmQgJ2hlYWRlcicsIGZvcmVncm91bmQgJ3RhYi1zZWxlY3RlZCcgYW5kCiAgICAgICBib3JkZXIgb2YgJ3RhYi11bnNlbGVjdGVkJyBJIGNhbiBqdXN0IGFzayBmb3I6CgogICAgICAgICAvc2tpbi9pbWFnZXMvcmMtdC1sLTUtMWhlYWRlci0ydGFiLXNlbGVjdGVkLTMtdGFiLXVuc2VsZWN0ZWQucG5nCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZW1vdmVkIGFsbCB2YWxpZGF0aW9uIGluY2x1ZGVzIGFuZCBleGNsdWRlcyBmcm9tIHRoZSBmcmVzaCBzaXRlLAogICAgICAgIGV4Y2VwdCB0aGUgbW9zdCBiYXNpYyBvbmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmVhdHVyZSBpcyB0byAKICAgICAgICBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgImV4dHJhLWNzcyIgdGFnIGluIHNraW5jb25mIGNhbiBjb250YWluIGNzcyB0aGF0IGlzIGluamVjdGVkIGluCiAgICAgICAgZm9ycmVzdC5jc3MsIGFkZGVkIGluIHRoZSBza2lucyBieSBkZWZhdWx0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTmV3IHNlY3Rpb24gaW4gc2tpbmNvbmYgYWJvdXQgY29sb3JzIHVzZWQgYnkgdGhlIHNpdGUuIAogICAgICAgIEVuYWJsZWQgZm9yIGtyeXNhbGlzLXNpdGUgYW5kIHRpZ3Jpcy1zdHlsZS4gCiAgICAgICAgSWYgYSBuZWVkZWQgY29sb3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb25lIGlzIHVzZWQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOb3cgc2tpbiByZXNvdXJjZXMgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHNraW5jb25mLnhtbCBmcm9tIHhzbHQuCiAgICAgICAgRm9yIGV4YW1wbGUgJy9teXNraW4vY3NzL215LmNzcy54c2x0JyBpcyB1c2VkIGJ5IGZvcnJlc3Qgb24gJ3NraW5jb25mLnhtbCcKICAgICAgICB0byBnZXQgJ215LmNzcycKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItOTgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTk4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJdCBpcyBub3cgcG9zc2libGUgdG8gaGF2ZSB0d28gbGV2ZWxzIG9mIHRhYnMuCiAgICAgICBUaGFua3MgdG8gUm9zcyBHYXJkbGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBFeHRlcm5hbCBsaW5rcyBhcmUgbm93IGlkZW50aWZpZWQgYnkgYSBzbWFsbCB0cmFpbGluZyBpY29uLgogICAgICAgIFRoZSBpY29uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBza2luIGFuZCB0aGUgYmVoYXZpb3VyCiAgICAgICAgY2FuIGJlIGRpc2FibGVkIGluIHNraW5jb25mLnhtbC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIG5ldyAndGlncmlzJyBza2luLCBieSB1c2luZyBleGFjdGx5IHRoZSBzYW1lIAogICAgICAgIHNraW4gdmVyc2lvbiAxLjEuIGZyb20gdGhlIHByb2plY3QgU3R5bGUgYXQgaHR0cDovL3N0eWxlLnRpZ3Jpcy5vcmcvLgogICAgICAgIFRoaXMgd2lsbCBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIGF2YWxvbi10aWdyaXMgc2tpbiBpbiBzdWJzZXF1ZW50IHZlcnNpb25zLgogICAgICAgIFRoZSBhdmFsb24tdGlncmlzIHNraW4gaXMgdG8gYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgCiAgICAgICAgZGV2ZWxvcGVkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBQcm9wZXJ0aWVzIGZyb20gJHt1c2VyLmhvbWV9L2ZvcnJlc3QucHJvcGVydGllcyBhcmUgbG9hZGVkLCBhZnRlcgogICAgICAgIHRoZSBwcm9qZWN0J3MgZm9ycmVzdC5wcm9wZXJ0aWVzIGFuZCBiZWZvcmUgdGhlIGRlZmF1bHQtZm9ycmVzdC5wcm9wZXJ0aWVzIGFyZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEFHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgQW50IDEuNi4wCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlZmFjdG9yZWQgZm9ycmVzdGJvdCB0byBvcmdhbml6ZSB3b3Jrc3RhZ2VzIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMuCiAgICAgICAgUHJvcGVydGllcyBuYW1lZCBieSB3b3Jrc3RhZ2UgYW5kIGltcGxlbWVudGF0aW9uIGZvciBjbGFyaXR5IGFuZCB0bwogICAgICAgIHByZXZlbnQgY29uZmxpY3RzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgJ2NsZWFuLXNpdGUnIHRhcmdldCBhcHBlYXJzIGluICdmb3JyZXN0IC1wcm9qZWN0aGVscCcuICBEZWxldGVzCiAgICAgICAgdGVtcCwgd2ViYXBwLCBhbmQgYnJva2VubGlua3MgZmlsZXMgdG9vLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBCZWdhbiBkb2N1bWVudGF0aW9uIGZvciBuZXcgZm9ycmVzdGJvdDsgbW92ZWQgc3RhYmxlIGZvcnJlc3Rib3QgZG9jcwogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi04NyxGT1ItODgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTg3LEZPUi04OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTm93IHNraW5zIHRoYXQgYXJlIGVkaXRlZCBpbiBwbGFjZSBoYXZlIHRoZWlyIG5vbi10cmF2ZXJzYWJsZQogICAgICAgIHJlc291cmNlcyBhbHNvIGNvcGllZCBmb3Igc3RhdGljIHJlbmRlcmluZy4KICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgTmV3IGZpbGUgZm9ybWF0OiAnLmFhcnQnLiBUaGVzZSBhcmUgdGV4dCBmaWxlcyB0aGF0IGFyZSBjb252ZXJ0ZWQKICAgICAgIGF1dG9tYXRpY2FsbHkgYmUgQ29jb29uIGluIFNWRywgaWYgcmVxdWVzdGVkIHdpdGggYSAnLnBuZycgZXh0ZW5zaW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBhbmQgc2VwYXJhdGVkIGluIHRoZWlyIGRpcmVjdG9yeSBhbGwgdGhlIHJlc291cmNlcwogICAgICAgIG5lZWRlZCBieSBDaGFwZXJvbiwgYW5kIG1ha2UgdGhlIHBpcGVsaW5lIGdlbmVyYXRlIHRoZSAKICAgICAgICB4bWwgZ3JhbW1hciB2ZXJzaW9ucyBpZiB1bmF2YWlsYWJsZS4KICAgICAgICBUaGlzIGZpeGVzIHNvbWUgd2lraSByZW5kZXJpbmcgYnVncyBhbmQgbWFrZXMgc2VjdGlvbnMKICAgICAgICBmb2xsb3cgdGhlIGNvcnJlY3QgbGV2ZWwgbmVzdGluZy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5vdyBhbHNvIGFsbCBmb3JyZXN0IC9yZXNvdXJjZXMgYXJlIGVkaXRhYmxlIGluIGZvcnJlc3QuaG9tZQogICAgICAgIGFuZCB0cmFuc2xhdGlvbnMgaW4gdGhlaXIgc291cmNlIHNwYWNlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi04NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODUpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFNraW5zIGFyZSBub3cgZWRpdGFibGUgZGlyZWN0bHkgaW4gRk9SUkVTVF9IT01FLgogICAgICAgVGhhbmtzIHRvIFJvc3MgR2FyZGxlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi04NikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERIVE1MIG1lbnVzIGluIEtyeXNhbGlzIHNraW4gbm93IHdvcmsgb24gYWxsIGxldmVscy4KICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBFbnRpdHkgUmVzb2x2ZXIgZnJvbSBwcmUtcmVsZWFzZSB0byBvZmZpY2lhbAogICAgICAgIHhtbC1jb21tb25zLXJlc29sdmVyLTEuMSByZWxlYXNlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBKZXR0eSB0byA0LjIuMTQKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZWQgdGhlIGRlcHJlY2F0ZWQgQW50IEB0YWdAIHN1YnN0aXR1dGlvbiBtZXRob2QgZm9yIHNraW5zIHRvIAogICAgICAgIHJlZHVjZSBjb3B5aW5nIGZ1cnRoZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgV3JvbmcgZGVmYXVsdCB2YWx1ZSBmb3IgdHJhbnNsYXRpb25zIGRpcmVjdG9yeS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgICBBbGwgcmVzb3VyY2VzIGluIHNraW5zL2NvbW1vbi9pbWFnZXN8c2NyaXB0cyBhcmUgdXNlZCBpZiB0aGUKICAgICAgICAgY29ycmVzcG9uZGluZyByZXNvdXJjZSBpcyBub3QgZm91bmQgaW4gdGhlIHNraW4gYmVpbmcgdXNlZC4gCiAgICAgICAgIE1vdmVkIHVuZGVyIHRoZXNlIGRpcnMgdGhlIGltYWdlcyBhbmQgdGhlIHNjcmlwdHMgdGhhdCB3ZXJlIHBsYWNlZCBieSAKICAgICAgICAgZGVmYXVsdCB1bmRlciByZXNvdXJjZXMvaW1hZ2VzIG9yIGNvcGllZCBpbiBlYWNoIHNraW4sIGFuZCBhZGRlZCBhIAogICAgICAgICB0ZW1wb3Jhcnkgc2l0ZW1hcCBydWxlIHRvIHJvdXRlIHRoZSByZXF1ZXN0IG9mIHRoZSBpbWFnZXMgdG8gdGhlIG5ldwogICAgICAgICBsb2NhdGlvbi4gCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICAgIE1vdmVkIHRoZSBpbWFnZXMgb2YgZnJlc2gtc2l0ZSB0byB0aGUgc3JjL2NvbnRlbnQveGRvY3MgZGlyZWN0b3J5LAogICAgICAgICAgZm9yIHRoZSBuZXcgbGF5b3V0IHRoYXQgaGFzIGJlZW4gZGVjaWRlZCBvbiBmb3JyZXN0LWRldi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgICAgTm93IGltYWdlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIHhkb2NzIGNvbnRlbnQgZGlyIGFzIGlmIHRoZXkKICAgICAgICAgIHdlcmUgaW4gdGhlIHJlc291cmNlcy9pbWFnZXMgZGlyLiBUaGUgbGF0dGVyIHdpbGwgYmUgcGhhc2VkIG91dC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgICAgRml4ZWQgdGhlIGhhbmRsaW5nIG9mIGltYWdlcyBhbmQgcmVzb3VyY2VzIGluIHRoZSByZXNvdXJjZXMueG1hcAogICAgICAgICAgcGlwZWxpbmUsIHRvIGNhdGVyIGZvciB0aGUgbmV3IHN5c3RlbSB0aGF0IGRvZXMgbm90IGNvcHkgZG9jcyBwcmlvcgogICAgICAgICAgdG8gcmVuZGVyaW5nLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBBZGRlZCBhIG5ldyBwcm9wZXJ0eSB0byBmb3JyZXN0LnByb3BlcnRpZXMKICAgICAgICAgICAocHJvamVjdC5yYXctY29udGVudC1kaXI9JHtwcm9qZWN0LmNvbnRlbnQtZGlyfS9jb250ZW50KQogICAgICAgICAgIHRvIGRlZmluZSB3aGVyZSByYXcgZmlsZXMgYXJlIHRvIGJlIHNlcnZlZCBmcm9tLgogICAgICAgICAgIEFsc28gcmVtb3ZlZCB0aGUgaW50ZXJuYWwgcHJvcGVydHkgcmVhbC1jb250ZW50LmRpciB0aGF0IHdhcwogICAgICAgICAgIHVzZWQgaW50ZXJuYWxseSBmb3IgdGhpcyBhbmQgcmVwbGFjZWQgaXQgd2l0aCBhIHJhdy1jb250ZW50LmRpcgogICAgICAgICAgIHByb3BlcnR5LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBNYWpvciB1cGRhdGUgdG8gaW5uZXIgd29ya2luZyBvZiB0aGUga3J5c2FsaXMtc2l0ZSBza2luOiAKICAgICAgICAgIC0gcmVtb3ZlZCBhbGwgdXNlIG9mIHRoZSBzcGFjZXIuZ2lmIGltYWdlCiAgICAgICAgICAtIHJlcGxhY2VkIGFsbCB2aXN1YWwgZW5oYW5jZW1lbnQgaWNvbnMgd2l0aCBjc3MgaWNvbnMKICAgICAgICAgIC0gZml4ZWQgQ1NTIGFuZCBodG1sIHZhbGlkYXRpb24KICAgICAgICAgIC0gcmVkdWNlZCBmaW5hbCBvdXRwdXQgc2l6ZSwgCiAgICAgICAgICAtIHJlbW92ZWQgYWxsIGZvbnQgdGFnIHVzYWdlIGluIGZhdm9yIG9mIGNzcwogICAgICAgICAgLSBhZGRlZCBhdXJhbCAoc3BlZWNoKSBzdHlsZSBpbiBjc3MKICAgICAgICAgIC0gcmVkdWNlZCB1c2FnZSBvZiBuZXN0ZWQgdGFibGVzCiAgICAgICAgICAtIHJlZmFjdG9yZWQgbWFpbiB4aHRtbCBzdHlsZXNoZWV0IHRvIGJlIG1vcmUgY2xlYXIgYW5kIG1haW50YWluYWJsZQogICAgICAgICAgLSByZWZhY3RvcmVkIGNzcyB0byBoYXZlIGEgc2luZ2xlIHNtYWxsIHBsYWNlIHdoZXJlIHRvIGRlZmluZSB0aGUgc2tpbiBjb2xvcnMKICAgICAgICAgIC0gY2hhbmdlZCBpY29ucyB0byBvcmlnaW5hbCBpY29ucyAobWFkZSBieSBtZSBhbmQgbm90IGdvdHRlbiBmcm9tIGVsc2V3aGVyZSkKICAgICAgICAgIC0gcmVtb3ZlZCB1bnVzZWQgaWNvbnMuCiAgICAgICAgICAtIG1hZGUgbG9jYXRpb24gb2YgbWluaXRvYyBjb25maWd1cmFibGUgYXMgInBhZ2UiLCAibWVudSIsIG9yICJib3RoIgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBSZW1vdmVkIGR1cGxpY2F0ZWQgY29weWluZyBvZiBmaWxlcyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSAKICAgICAgICAgIGRpc3Ryby4gTm93IHRoZSBjb21tYW5kLWxpbmUgY29udGV4dCBkaXIgaXMgbGlrZSB0aGUgd2ViYXBwIGNvbnRleHQgZGlyLgogICAgICAgICAgVGhpcyByZWR1Y2VzIEZvcnJlc3QgYnVpbGQgdGltZSBmcm9tIDUzIHRvIDE5IHNlY29uZHMgb24gbXkgc3lzdGVtLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBGaXhlZCBidWcgaW4gdGhlIGF1dG9kb3dubG9hZCBzdXBwb3J0IGZvciBza2lucyB0aGF0IHdhcyBwcmV2ZW50aW5nIAogICAgICAgICAgY3VzdG9tIHNraW5zIGluIHRoZSBwcm9qZWN0IHNvdXJjZSBkaXIgZnJvbSB3b3JraW5nLgogICAgICAgVGhhbmtzIHRvIFNlYmFzdGlhbiBCZXJnbWFubi48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBkb2Nib29rIHZlcnNpb24gNC4xLjIuIEFsbG93cyBpbXBvcnRpbmcgZmlsZXMKCSAgZnJvbSB2YXJpb3VzIGVkaXRvcnMgKE9wZW4gb2ZmaWNlLCBBYml3b3JkKS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgICAgQWRkZWQgZGVmYXVsdCB0cmFuc2xhdGlvbiBmb3IgbWVudSBvbiBmcmVzaC1zaXRlIHNvIGl0IGlzIHVzZWQgCgkgIHdoZW4gdGhlIHVzZXIgbG9jYWxlIGNhbiBub3QgYmUgZm91bmQuCiAgICAgICAgICBTeW5jaHJvbml6ZWQgc29tZSBJMThuIGxhYmVscyBhZnRlciBhIG1vZGlmaWNhdGlvbiBvbiBmcmVzaC1zaXRlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBQYXRjaCBmYWNpbGl0eSB0byBiZSB1c2VkIGJ5IGFueSBjb250cmlidXRvciAoRnJvbSBBbnQncyBwcm9qZWN0KS4KCSAgVG8gdXNlIGl0IHJ1biAiYnVpbGQuW3NofGJhdF0gcGF0Y2giLgogICAgICAgVGhhbmtzIHRvIEphbiBNYXRlcm5lLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgIEFkZGVkIEdlcm1hbiBUcmFuc2xhdGlvbiBmb3IgbWVudSBpbiBmcmVzaC1zaXRlIGV4YW1wbGUgc2VlZC4KICAgICAgIFRoYW5rcyB0byBKYW4gTWF0ZXJuZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgICBQYXRjaGVkIGRpcmVjdG9yeTJib29rLnhzbCB0byBiZSBhYmxlIHRvIHNlcnZlIHJhdyBkb2N1bWVudHMgZnJvbSB0aGUgCiAgICAgICAgICBzaWRlIG1lbnUgKGUuZy4gcGRmKTsgcHJldmlvdXNseSBpdCBhbHdheXMgZ2VuZXJhdGVkIC5odG1sIGxpbmtzLgogICAgICAgVGhhbmtzIHRvIEVyaWMgQlVSR0hBUkQuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFNraW5zIGNhbiBub3cgYmUgcGFja2FnZWQsIGRvd25sb2FkZWQgYW5kIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLgogICAgICAgIFNlZSBkb2N1bWVudGF0aW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgY3JlYXRpb24gb2YgVE9DIHN1cHBvcnQgb24gUERGIGZpbGVzLgoJSW1wcm92ZWQgc28gaXQgdXNlcyB2YWx1ZSBmcm9tIHNraW5jb25maWcueG1sLgoJSW1wcm92ZSBhbGdvcml0bSB0byBkZWZpbmUgZm9udCBzaXplIGZvciBzZWN0aW9uL3N1YnNlY3Rpb24vLi4uCiAgICAgICBUaGFua3MgdG8gRXJpYyBCdXJnaGFyZC48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi05KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi05KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgIEZpcnN0IEkxOG4gaW50ZWdyYXRpb24gZm9yIG1lbnVzIGluIGZvcnJlc3QuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbiB0aGUgZ2VuZXJhdGVkICJjaGFuZ2VzIiBkb2N1bWVudCwgYWRkICJ2ZXJzaW9uXyIgdG8gc2VjdGlvbkBpZAogICAgICAgIGFzIHJlcXVpcmVkIGJ5IGRvY3VtZW50LXYxMi4KICAgICAgICBTb3J0IGFjdGlvbiB0eXBlcyBvcmRlciB0byAiYWRkIiwicmVtb3ZlIiwidXBkYXRlIiwiZml4Ii4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlICd2YWxpZGF0ZS1zaXRlJyBidWlsZCB0YXJnZXQgd2lsbCB2YWxpZGF0ZSB0aGUgaW50ZXJtZWRpYXRlIHhkb2NzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi05KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi05KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbnRlZ3JhdGUgTHVjZW5lIG9uIEZvcnJlc3QuIENoZWNrIHRoZSBidWcgcmVwb3J0IGZvciBtb3JlIGluZm8uCiAgICAgICBUaGFua3MgdG8gUmFt824gUHJhZGVzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTU2KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01NikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgWFNQIHN1cHBvcnQuCglGb3Igb2xkIHNpdGVtYXAueG1hcCBhZGQgdGhpcyB0YWc6CgkmbHQ7bWFwOmdlbmVyYXRvciBuYW1lPSJzZXJ2ZXJwYWdlcyIgCglzcmM9Im9yZy5hcGFjaGUuY29jb29uLmdlbmVyYXRpb24uU2VydmVyUGFnZXNHZW5lcmF0b3IiLyZndDsKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAKCiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi02NiwgRk9SLTYyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY2LCBGT1ItNjIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGUgdG8gQ29jb29uIDIuMS4yLCB3aGljaCBmaXhlcyBhIGJ1ZyB0aGF0IGNhdXNlZCBzb21lCiAgICAgICAgcGFnZXMgaW4gYSBzaXRlIG5vdCB0byBiZSByZW5kZXJlZCBmcm9tIHRoZSBjb21tYW5kLWxpbmUsIGFuZAogICAgICAgIGhhcyBzb21lIGNvc21ldGljIGltcHJvdmVtZW50cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSW4gc2tpbmNvbmYueG1sLCBtYWRlIHByb2plY3QtZGVzY3JpcHRpb24gb3B0aW9uYWwgdG8ga2VlcAogICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCAwLjQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTY3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY3KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBvYmZ1c2NhdGUtbWFpbC1saW5rcyBza2luY29uZi54bWwgb3B0aW9uLCBvbiBieSBkZWZhdWx0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi02NSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi02NSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4IGZvcnJlc3Qtc2l0ZSB0YWJsZXMgYnVnIHRoYXQgYnJva2UgT3BlcmEKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBmb3JyZXN0LmFudHByb3h5LnhtbCBzY3JpcHQgbm93IHByb3Blcmx5IGZhaWxzIHdoZW4gQ29jb29uIGZhaWxzCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIFVSTHMgZm9yIGNvbW1hLXNlcGFyYXRlZCBidWcga2V5cyBpbiBzdGF0dXMueG1sCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTQ3LCBGT1ItNDgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNDcsIEZPUi00OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4IGJ1Z3MgaW4gZm9ycmVzdC5iYXR8c2ggc2NyaXB0cyBlbmNvdW50ZXJlZCB3aGVuIHVzZWQgaW4KICAgICAgICBvZGQgZW52aXJvbm1lbnRzIChwZXJsIGFuZCBXaW45eCkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgJ2ZvcnJlc3QnIGNvbW1hbmQgbm8gbG9uZ2VyIHNvdXJjZXMgL2V0Yy9hbnRyYyBhbmQKICAgICAgICB+Ly5hbnRyYywgd2hpY2ggc29sdmVzIHByb2JsZW1zIG9uIHNvbWUgKm5peCBkaXN0cmlidXRpb25zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgIAoKICAgIAogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIG5ldyBkb2N1bWVudCB0byBmYWNpbGl0YXRlCiAgICAgICAgdXBncmFkaW5nIHRvIHYwLjUKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgU04KICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgQGxhYmVsIHN1cHBvcnQgZm9yIG5vdGUgYW5kIHdhcm5pbmcgZWxlbWVudHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gY2F1c2VkIGJ5IGNhdGFsb2cgRFRECiAgICAgICAgSFRUUCBsb29rdXAuIFRoZSBidWlsZCBoYWQgYW4gZXh0cmEgYW5kIG9sZGVyIHJlc29sdmVyLmphcgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi0zMSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMzEpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeCBjaGFyYWN0ZXIgcmV0dXJuIG9uIGxpbmUgZmVlZCBmb3IgZnJlc2gtc2l0ZSBvbiB0aGUgemlwIGRpc3RyaWJ1dGlvbgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgIE5ldyBwcm9wZXJ0eSAiYnVndHJhY2tpbmctdXJsIiB0byBhbGxvdyBhIGJ1ZyB0cmFja2luZyBzeXN0ZW1zCiAgICAgICAgIG90aGVyIHRoYW4gYnVnemlsbGEuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgQWRkZWQgYSAiZm9ycmVzdCBjbGVhbiIgdGFzayB0aGF0IHJlbW92ZXMgdGhlIHByb2plY3QgYnVpbGQgZGlyZWN0b3J5LgogICAgICAgVGhhbmtzIHRvIEVpcmlrIEJq+HJzbvhzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluIHRoZSBmb3JyZXN0LXNpdGUgc2tpbiBhbmQgZGVyaXZhdGl2ZXMsIGRpc3BsYXkgdGhlIGF1dGhvciBhbmQgdmVyc2lvbiBhdCB0aGUKICAgICAgICBib3R0b20gb2YgdGhlIHBhZ2UsIGFzIGtyeXNhbGlzLXNpdGUgZG9lcy4gIEFsc28gYWRkZWQgcGFyc2luZyBmb3IgQ1ZTIFJldmlzaW9uCiAgICAgICAgdGFncywgc28gJmx0O3ZlcnNpb24mZ3Q7JFJldmlzaW9uOiAxLjI4OCAkJmx0Oy92ZXJzaW9uJmd0OyBjYW4gYmUgdXNlZC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBoYXZlIHZlcnNpb24tc3BlY2lmaWMgb3ZlcnJpZGRlbiBzaXRlbWFwcy4gIEZvcgogICAgICAgIGV4YW1wbGUsIHNyYy9kb2N1bWVudGF0aW9uL3NpdGVtYXAtMC41LnhtYXAgd2lsbCBiZSB1c2VkIGJ5IEZvcnJlc3QgMC41CiAgICAgICAgaW4gcHJlZmVyZW5jZSB0byBhbnkgb3RoZXJzIHByZXNlbnQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiAgVGhpcyBtZWFucyBhCiAgICAgICAgc2l0ZSB3aXRoIG92ZXJyaWRkZW4gc2l0ZW1hcHMgY2FuIGJ1aWxkIHdpdGggQ29jb29uIHZlcnNpb25zIGV4cGVjdGluZwogICAgICAgIGRpZmZlcmVudCBzaXRlbWFwIGZvcm1hdHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBlbWFpbCB0ZW1wbGF0ZSBmb3IgaHRtbCBjb250ZW50IGluIGNvbW1vbiBza2luLgogICAgICAgVGhhbmtzIHRvIERhdmUgQnJvbmRzZW1hLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICAgU3VwcG9ydCBmb3IgdmVyc2lvbiwgdHlwZSBhbmQgbm90aWNlIG9uIGh0bWwgZm9ybWF0LgogICAgICAgVGhhbmtzIHRvIEVpcmlrIEJq+HJzbvhzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTM0KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0zNCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgU3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGNvbW1vbiBza2luLiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeAogICAgICAgICAgKGJ1ZyBGT1ItNDYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQ2KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBidWlsZCBkaXJlY3RvcnkgY3JlYXRlZCBpbiB3cm9uZyBkaXJlY3Rvcmllcy4KICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE9uIGZyZXNoLXNpdGU6CiAgICAgICAgU3luY2hyb25pemUgc2l6ZSBmb3IgZ3JvdXAgYW5kIHByb2plY3QgbG9nby4gCiAgICAgICAgQWRkZWQgZGVzY3JpcHRpb24gb24gc2l0ZS54bWwgZWxlbWVudHMgc28gaXQgZGlzcGxheXMgdG9vbHRpcC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeAogICAgICAgICAgKGJ1ZyBGT1ItNDMpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTQzKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgIFJlbW92ZSBlcnJvcnMgZm9yIGZvcHg6Ym9va21hcmtzIGVsZW1lbnQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTIzKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yMykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGRlc2NyaXB0aW9uIHRvIHtncm91cCwgcHJvamVjdH0gbG9nby4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgU3dpdGNoZWQgb2ZmIHNraW5jb25mLnJuYyB2YWxpZGF0aW9uIHRvIHByb21vdGUgYmV0dGVyIGZvcndhcmRzLWNvbXBhdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGVkIHRvIENvY29vbiAzMC8wOC8yMDAzLCBub3cgd2l0aCBhYmlsaXR5IHRvIGV4Y2x1ZGUgVVJMcyBmcm9tCiAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLCBpbiBjbGkueGNvbmYuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTIwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTIwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgInRpdGxlIiBhdHRyaWJ1dGUgdG8gbWVudSBpdGVtIGxpbmtzIHVzaW5nIHRoZSAiZGVzY3JpcHRpb24iCiAgICAgICAgYXR0cmlidXRlIGZyb20gZW50cmllcyBpbiBzaXRlLnhtbCBvciBib29rLnhtbAogICAgICAgVGhhbmtzIHRvIFJhbGYgSGF1c2VyLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSBnZW5lcmF0ZWQgVGFibGVzIG9mIENvbnRlbnRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHNob3cgYSBjZXJ0YWluCiAgICAgICAgbnVtYmVyIG9mIHNlY3Rpb24gbGV2ZWxzLiBEZWZhdWx0IGlzIHR3byBsZXZlbHMuIExldmVsIDAgbWVhbnMgc2hvdwogICAgICAgIG5vIFRvQyBhdCBhbGwuIFNlZSB0aGUgZnJlc2gtc2l0ZSBza2luY29uZi54bWwgZm9yIGV4YW1wbGUgdXNhZ2UuCiAgICAgICBUaGFua3MgdG8gUmFt824gUHJhZGVzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyAnZXhwYW5kLWR0ZCcgdGFyZ2V0IGZvciBnZW5lcmF0aW5nIG1vbm9saXRoaWMgRFREcyBzdWl0YWJsZSBmb3IgdXNlCiAgICAgICAgaW4gY2F0YWxvZy1pZ25vcmFudCBYTUwgZWRpdG9ycyBzdWNoIGFzIElERUEuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBbGxvdyBpbWFnZXMgdG8gc2NhbGUgb24gcGRmIG91dHB1dC4KICAgICAgIFRoYW5rcyB0byBKLlBpZXRzY2htYW5uLjwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29tbWEgc2VwYXJhdGVkIGJ1Z3MgaGF2ZSBhIGxpbmsgdG8gYnVnemlsbGEgc3lzdGVtcy4KICAgICAgIFRoYW5rcyB0byBKb2VyZyBIZWluaWNrZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERvY2Jvb2sgdGFibGUgaGVhZGVyIGlzIHNoaWZ0ZWQgb25lIGNvbHVtbi4KICAgICAgIFRoYW5rcyB0byBSaW5nbyBkZSBTbWV0LjwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgaWh0bWwgbm93IHdvcmtzIGFnYWluLiBIYWQgdG8gYWRkIGEganRpZHkgY29uZmlndXJhdGlvbiB0aGF0IHByZXZlbnRlZCBpdCB0byBvdXRwdXQKICAgICAgICB0aWRpZXMgaHRtbCB0byB0aGUgcGlwZWxpbmUsIHRodXMgbWFraW5nIHRoZSBzdHlsZXNoZWV0IHVudXNhYmxlLiBBbHNvIGhhZCB0byBmaXgKICAgICAgICB0aGUgc2l0ZW1hcCBzY2hlbWEuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ2xlYW51cCBtYXBzOmNvbXBvbmVudHMgZGVmaW5pdGlvbnMgb24gc3ViLW1hcHMuCiAgICAgICAgUmVtb3ZlIGluZGVudCBhdHRyIGZyb20gdGhlIHhzbDpvdXRwdXQgYXMgaXQgaXMgZGVmaW5lIG9uIHNlcmlhbGl6ZXIuCiAgICAgICAgTW92ZSB4c2w6b3V0cHV0IGZvciAqMmRvY3VtZW50LnhzbCB0byAieG1sLWRvY3VtZW50IiBzZXJpYWxpemVyLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4CiAgICAgICAgICAoYnVnIEZPUi01MSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTEpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIGFic3RyYWN0IGVsZW1lbnQgd2FzIGlnbm9yZWQgZm9yIGh0bWwgb3V0cHV0LgogICAgICAgVGhhbmtzIHRvIEVpcmlrIEJq+HJzbvhzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVbmVzY2FwZSBzdHJpbmdzLCBzbyB0aGV5IGRpc3BsYXkgcHJvcGVybHkgb24gdGhlIHRyYWlsIGZvciBhbGwgc2tpbnMuCiAgICAgICBUaGFua3MgdG8gUmFt824gUHJhZGVzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTQ5KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSkpQCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi00OSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXNlIHN5bmMgdGFzayB0byBjbGVhbiB0aGUgdG1wIGRpcmVjdG9yeSBmb3IgeGRvY3MuCiAgICAgICBUaGFua3MgdG8gRGF2ZSBCcm9uZHNlbWEuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5vdyB0aGUgS3J5c2FsaXMgc2tpbiBoYXMgamF2YXNjcmlwdC1jb2xsYXBzYWJsZSBtZW51cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgc2l0ZS54bWwgY2hhbmdlcyBub3cgcGlja2VkIHVwIHdpdGhvdXQgcmVxdWlyaW5nIGEgcmVsb2FkIG9mIHRoZSB3ZWJhcHAuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgdG8gQ29jb29uIDIwLzcvMDMsIGFuZCB1c2UgdGhlIG5ldyBjb21tYW5kLWxpbmUgKGNsaS54Y29uZiksIHdoaWNoCiAgICAgICAgbWFrZXMgRm9ycmVzdCBzdGF0aWMgcmVuZGVyaW5nIG1vcmUgdGhhbiB0d2ljZSBhcyBmYXN0IGFzIGJlZm9yZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyBJY29ucy4KICAgICAgIFRoYW5rcyB0byBGcmVkZXJpYyBSb2Jlc3luLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKSlAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgIEFkZGVkIGEgdGV4dDJkb2N1bWVudC54c2wgc3R5bGVzaGVldC4gQ29udmVydCB0byB1bml4IGZvcm1hdCBzbyBpdCBzdG9wICAKICAgICAgICAgRU9MIGNoYXJhY3Rlci4gU2ltcGxpZnkgc28gaXQgZG9lcyBub3QgdXNlIGNoYXBlcm9uIGZvcm1hdC4KICAgICAgICAgZm9ybWF0LgogICAgICAgIFRoYW5rcyB0byBEYXZlIEJyb25kc2VtYS48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBTdG9wcGVkIHRoZSByZXdyaXRpbmcgb2YgZXh0ZW5zaW9ucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgQ29jb29uIHRvIC1EICIyMDAzLzA2LzIyIDEyOjAwIi4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBmaWxlcwogICAgICAgIHdpdGggdW5rbm93biBleHRlbnNpb25zIHdlcmUgd3JpdHRlbiB3aXRoICdudWxsJyBhcHBlbmRlZCB0byB0aGVpcgogICAgICAgIGZpbGVuYW1lLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBbGxvdyBhbnkgc29ydCBvZiBjb250ZW50IGluc2lkZSByZXNvdXJjZXMvLCB3aGljaCB3aWxsIGJlCiAgICAgICAgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHNpdGVtYXAgYnV0IG5vdCBhdXRvbWF0aWNhbGx5IGNvcGllZCB0byB0aGUKICAgICAgICBnZW5lcmF0ZWQgc2l0ZSBvdXRwdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhIGZsYWcgZm9yIGVtYWlsIG9iZnVzY2F0aW9uLCBhbmQgdHVybiBpdCBvZmYgYnkgZGVmYXVsdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGJ1ZyB0aGF0IHNob3dlZCB0aGUga3J5c2FsaXMtc2l0ZSBza2luIGluIElFIGJyb3dzZXJzIGZyb20gCiAgICAgICAgYSByZW1vdGUgc2l0ZSB0byBzdGFydCB3aXRoIGEgZm9udCBzaXplIG9mIDEwMC4gCiAgICAgICAgQWxzbyBtYWRlIHRoZSBmb250IHNpemUgc2NyaXB0IGtpY2sgaW4gYXQgdGhlIHN0YXJ0IG9mIHRoZQogICAgICAgIHBhZ2UgcmVuZGVyaW5nLCBhcyBiZWZvcmUgaXQgcmVzaXplZCBvbmx5IGFmdGVyIGFsbCB0aGUgcGFnZQogICAgICAgIHdhcyBsb2FkZWQsIHdoaWNoIHdhcyBub3QgbmljZSB0byBzYXkgdGhlIGxlYXN0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYWx0ZXJuYXRpdmUgbWVudS90YWIgc2VsZWN0aW9uIGFsZ29yaXRobSwgdGhhdCB1c2VzIHRhYiBhdHRyaWJ1dGVzCiAgICAgICAgaW4gc2l0ZS54bWwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHBoeXNpY2FsIHNpdGUgc3RydWN0dXJlIChkaXJlY3RvcmllcykuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluIFBERnMsIHNlY3Rpb24gdGl0bGVzIGFyZSBubyBsb25nZXIgbnVtYmVyZWQvcmVkdWNlZCBpbiBzaXplIGluZGVmaW5pdGVseS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGVkIEZPUCBmcm9tIDAuMjAuNCB0byAwLjIwLjUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGdyYWRlZCBDb2Nvb24gdG8gTTIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1ha2UgRkFRICdRdWVzdGlvbnMnIHNlY3Rpb24gbW9yZSBsZWdpYmxlLCBhbmQgYXZvaWQgZHVwbGljYXRlIG51bWJlcmluZwogICAgICAgIGluIEZBUSBQREYuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIExpbmtzIHRvIHN1YmRpcmVjdG9yaWVzIG5vIGxvbmdlciBibG93IHVwIHRoZSBjb21tYW5kLWxpbmUgcmVuZGVyaW5nLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgJ2JhY2tjb3B5JyBjb21tYW5kIHdpbGwgbm93IGNvcHkgYWxsIHR5cGVzIG9mIGN1c3RvbSBjb250ZW50CiAgICAgICAgKCoueG1hcCwgc2tpbmNvbmYueG1sLCB4ZG9jcywgaW1hZ2VzLCBzdHlsZXNoZWV0cywgRFREcykuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhIEBpbmRleGZpbGUgYXR0cmlidXRlIHRvIHRhYnMueG1sLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzcGVjaWZ5IAogICAgICAgIHdoaWNoIGZpbGUgdGhlIHRhYiBsaW5rcyB0by4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlIGxpbmsgcmV3cml0aW5nIGZvciAqLmVodG1sIGZpbGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlIGxpbmsgcmV3cml0aW5nIGZvciBpbWFnZXMgYW5kIGZpZ3VyZXMgKEBzcmMgYXR0cmlidXRlKS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkICZsdDtlbGFib3JhdGUmZ3Q7IHRvIHRoZSBGQVEgJmx0O3F1ZXN0aW9uJmd0OyBlbGVtZW50LCB3aGljaCBsZXRzIG9uZQogICAgICAgIHByb3ZpZGUgc29tZSBiYWNrZ3JvdW5kIChlbGFib3JhdGlvbikgaW4gdGhlIEZBUSBib2R5IHdpdGhvdXQgY2x1dHRlcmluZwogICAgICAgIHRoZSBGQVEgbGlzdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWxsb3cgcGxhaW4gdGV4dCAoaW5zdGVhZCBvZiBqdXN0IGJsb2NrLWxldmVsIGVsZW1lbnRzKSBpbiB0aGUgRkFRJ3MKICAgICAgICAmbHQ7YW5zd2VyJmd0OyBlbGVtZW50LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBhIGZvcnJlc3QubWF4bWVtb3J5IHByb3BlcnR5IHNwZWNpZnlpbmcgdGhlIG1heGltdW0KICAgICAgICBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgSlZNLiBVc2VmdWwgZm9yIHJlbmRlcmluZyBsYXJnZSBQREZzLgogICAgICAgIEFkZGVkIGZvcnJlc3QuanZtYXJncyBwcm9wZXJ0eSBmb3Igb3RoZXIgSlZNIG9wdGlvbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEdldCBicmVhZGNydW1icyB3b3JraW5nIGluIE1hYyBJRSA1LCBhbmQgZG9uJ3QgY2FwaXRhbGl6ZSB0aGUgZmlyc3QKICAgICAgICBsZXR0ZXIgb2YgZWFjaCBsaW5rIGluIHRoZSBmb3JyZXN0LXNpdGUgc2tpbi4KICAgICAgIFRoYW5rcyB0byBTdGVmYW4gQm9kZXdpZy48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBidWcgd2hlcmUgYWJzb2x1dGUgcGF0aHMgdG8gaW1hZ2VzIHdlcmUgY3JlYXRlZCBpbiB0aGUKICAgICAgICBidWlsZC9zaXRlIGRpcmVjdG9yeS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgR2V0IHRoZSBXaWtpIHN5bnRheCBzdXBwb3J0IHdvcmtpbmcgYWdhaW4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENyZWF0ZWQgbmV3IGRvY3VtZW50LXYxMiBEVEQgbW9kdWxlLCBjb250YWluaW5nIGFsbCBEVEQgaW1wcm92ZW1lbnRzCiAgICAgICAgbWFkZSBzaW5jZSAwLjQgd2FzIHJlbGVhc2VkLCBhbmQgdXNlIGl0IHRvIGRlZmluZSBuZXcgdjEyIHZlcnNpb25zIG9mCiAgICAgICAgYWxsIERURHMgKGRvY3VtZW50LCBob3d0bywgZmFxLCBldGMpLiAgVGhlIGRvYy12MTIgRFREIHJlbW92ZXMgbWFueQogICAgICAgIHJlc3RyaWN0aW9ucyBpbiB0aGUgRFREIHRoYXQgd2VyZSBmb3VuZCB0byBiZSB1bm5lY2Vzc2FyeSwgYW5kIGlzIGNsb3NlcgogICAgICAgIHRvIHRoZSBIVE1MIGNvbnRlbnQgbW9kZWwuICBBIGxpc3Qgb2YgY2hhbmdlcyBjYW4gYmUgZm91bmQgaW4gdGhlIGRvYy12MTIgc2FtcGxlIHBhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIFNOCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIHJlbmRlcmluZyBvZiBpbWFnZXMgaW4gUERGIGZvciBpbWFnZXMgbm90IGxvY2F0ZWQgaW4gdGhlCiAgICAgICAgcmVzb3VyY2VzL2ltYWdlcyBkaXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhdXRvbWF0aWMgKGRvY3R5cGUtdHJpZ2dlcmVkKSBoYW5kbGluZyBvZiB0b2RvIGFuZCBjaGFuZ2VzIFhNTAogICAgICAgIGZpbGVzLCByZWdhcmRsZXNzIG9mIGZpbGUgbmFtZSBvciBsb2NhdGlvbiBpbiB0aGUgZGlyZWN0b3J5IHRyZWUuICBUaGUKICAgICAgICByb290IGNoYW5nZXMuaHRtbCBhbmQgdG9kby5odG1sIGZpbGVzIGFyZSBzdGlsbCBnZW5lcmF0ZWQgZnJvbQogICAgICAgIHN0YXR1cy54bWwuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBPbiB0aGUgZm9ycmVzdGJhciwgYWRkZWQgYSBjb21tdW5pdHkgbWVudSwgbWFkZSAnQXNrU2FtJyBhIHJlc291cmNlcwogICAgICAgIHN1Ym1lbnUsIG1vdmVkIHRoZSBzZWFyY2ggcGFydCB0byB0aGUgcmlnaHQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluIHNraW5zL2NvbW1vbi94c2x0L2h0bWwvdGFiMm1lbnUueHNsLCByZW5hbWVkIHRlbXBsYXRlCiAgICAgICAgJ3Vuc2VsZWN0ZWQtdGFiLWhyZWYnIHRvICdjYWxjdWxhdGUtdGFiLWhyZWYnLCBwb3RlbnRpYWxseSBicmVha2luZyAzcmQKICAgICAgICBwYXJ0eSBza2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4IG1lbnUgYnVnIHdoZXJlIGxpbmtzIHdpdGggI2ZyYWdtZW50IGlkZW50aWZpZXJzIHdvdWxkbid0IGRpc3BsYXkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEdldCBpbWFnZXMgaW4gUERGcyB3b3JraW5nIHdpdGggRk9QIDAuMjAueC4gIFRoaXMgcmVxdWlyZXMgdGhlIHVzZXIgdG8KICAgICAgICBkb3dubG9hZCBqaW1pLmphciBmcm9tIFN1biBhbmQgcGxhY2UgaXQgaW4KICAgICAgICB0aGUgbGliL2NvcmUgKHNyYyBkaXN0cm8pIG9yIFdFQi1JTkYvbGliCiAgICAgICAgKGJpbmFyeSBkaXN0cm8pIGRpcmVjdG9yeS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgT24ga3J5c2FsaXMgc2tpbjogZml4ZWQgcHJpbnQgY3NzLCBhbHNvIHVzaW5nIHRleHQgaW5zdGVhZCBvZgogICAgICAgbG9nb3MgYW5kIGFkZGluZyB0aGUgZm9vdGVyLCBhbmQgY2hhbmdlZCBsaW5rIGNvbG9ycyB0byBibHVlcyBhbmQKICAgICAgIHJlZCBmb3IgYWN0aXZlIGxpbmtzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICBPbiBrcnlzYWxpcyBza2luOiBmaXhlZCBsZWZ0IG5hdmlnYXRpb24gYmFyIGljb25zIGFuZCBzaXppbmcgdXNpbmcgZGl2cwogICAgICAgaW5zdGVhZCBvZiBsaXN0IGVsZW1lbnRzLCBtYWRlIGFsbCBsaW5rcyB1bmRlcmxpbmVkLAogICAgICAgYWRkZWQgc3BhY2UgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0ZXh0LCBhbmQgY2hhbmdlZCBmb250CiAgICAgICBpbmNyZWFzZS1kZWNyZWFzZSBsaW5rcyB0byBidXR0b25zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICBPbiBrcnlzYWxpcyBza2luOiB1c2VycyBjYW4gc2VsZWN0IGZvbnQgc2l6ZSwgcmV3b3JrZWQgbGVmdC1iYXIgaW5jbHVzaW9uCiAgICAgICBvZiBwYWdlIHNlY3Rpb24gdGl0bGVzLCBtYWRlIHRoZW0gb25seSBvbmUgbGV2ZWwgZGVlcCwgbW92ZWQgYnV0dG9ucyBhZnRlcgogICAgICAgdGhlIGxlZnQgbmF2YmFyLCBhZGRlZCBwdWJsaXNoIGRhdGUgb24gdG9wIHJpZ2h0IG5hdmJhci4gCiAgICAgICBGb3IgYm90aCBGb3JyZXN0IGFuZCBrcnlzYWxpcyBza2lucywgYWRkZWQgc2luZ2xlIGJhY2tncm91bmQgcGl4ZWwgbGluZSBiZWxvdwogICAgICAgdW5zZWxlY3RlZCB0YWJzIGFuZCBtYWRlIHNlbGVjdGVkIHRhYiBtb3JlIHByb21pbmVudC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOgogICAgICAgICAgamF2YXgvc2VydmxldC9TZXJ2bGV0SW5wdXRTdHJlYW0gZXJyb3IuCiAgICAgICBUaGFua3MgdG8gSnVhbiBKb3NlIFBhYmxvcy48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5hYmxlZCBtdWx0aXBsZSBvdXRwdXQgbGlua3Mgb24gZWFjaCBwYWdlIChwcmludCAtIHBkZiAtIHhtbCkKICAgICAgICBUaGV5IGNhbiBiZSBlbmFibGVkIGJ5IGFkZGluZyB0aGUgcmVsYXRpdmUgZGlzYWJsZS0qLWxpbmsgZWxlbWVudHMKICAgICAgICBhbmQgc2V0dGluZyB0aGVtIHRvIGZhbHNlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWxsb3cgdXNlcnMgdG8gZGV0ZXJtaW5lIHdoaWNoIFVSTHMgRm9ycmVzdCBzaG91bGQgaWdub3JlLCBieSBvdmVycmlkaW5nCiAgICAgICAgc3R5bGVzaGVldHMvZmlsdGVybGlua3MueHNsIChhbmQgb3RoZXIgc3R5bGVzaGVldHMgaW4gdGhhdAogICAgICAgIGRpcmVjdG9yeSkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGVkIHRvIDIwMDMtMDMtMTEgdmVyc2lvbiBvZiBDb2Nvb24KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRG9jYm9vayBzdHlsZXNoZWV0IGltcHJvdmVtZW50cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZvcnJlc3RiYXIgaXMgbm93IAogICAgICAgIFBob2VuaXggY29tcGF0aWJsZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGxpbmtzIGZvciBib3RoIHBvc3NpYmxlIGxvY2FsIGZvcnJlc3RzIChwb3J0IDgwODAgYW5kIDg4ODgpLAogICAgICAgIGFuZCBtYWtlIHRoZW0gY29uZmlndXJhYmxlIGluIHByb3BlcnRpZXMueG1sLgogICAgICAgIFRoYW5rcyB0byBNYXJrIFZvdnNpIGZvciBwb2ludGluZyBpdCBvdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeCBhIGJ1ZyB3aXRoIGZvcnJlc3QuYW50cHJveHkueG1sIGludHJvZHVjZWQgaW4gMC40LCB3aGljaCBjYXVzZWQKICAgICAgICB1bnJlc29sdmVkICcke3Byb2plY3QuaG9tZX0nIHZhcmlhYmxlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVmYWN0b3JlZCB0aGUgInRyYW5zZm9ybS10by1kb2N1bWVudCIgc2l0ZW1hcCByZXNvdXJjZSB0byBkbyB0aGUKICAgICAgICB0aGUgeGluY2x1ZGUsICBsaW5rcmV3cml0ZXIsIGFuZCBpZGdlbiBzdGVwcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIFhJbmNsdWRlIGNhcGFiaWxpdHkgIHRvIHRoZSBkb2N1bWVudHMuIFJlbWVtYmVyIHRvIAogICAgICAgIGRpc2FibGUgdmFsaWRhdGlvbnMgZm9yIGZpbGVzIHdpdGggeGluY2x1ZGVzIGFzIHRoZSB4aW5jbHVkZSBpcyBub3QKICAgICAgICBwZXJmb3JtZWQgZHVyaW5nIHZhbGlkYXRpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBEb2NCb29rIDQuMiBhbmQgc2ltcGxpZmllZCBEb2NCb29rIDEuMCB0byB0aGUgc2NoZW1hcyBhbmQKICAgICAgICB0byB0aGUgdmFsaWRhdGlvbiBjYXRhbG9ndWUuCiAgICAgICAgQWRkZWQgRG9jYm9vayBhbmQgc2ltcGxpZmllZCBEb2Nib29rIHJlbmRlcmluZyBjYXBhYmlsaXR5IGZvciBkb2N1bWVudHMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgCiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2UgbWVhbmluZ2Z1bCBmcmFnbWVudCBpZGVudGlmaWVycyBpbiBrcnlzYWxpcy1za2luLgogICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29ycmVjdGx5IGlnbm9yZSBAcm9sZT0ncGRmJyBjcmVkaXRzIGluIEhUTUwKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIGtyeXNhbGlzLXNpdGUgc2tpbiBub3cgd29ya3MgYmV0dGVyIHdpdGggbXVsdGktbGV2ZWwgbWVudXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCB0aGUgQ1NTIHZhbGlkYXRpb24gbG9nbywgZml4ZWQgYWxsIHNraW5zJyBDU1MgdG8gdmFsaWRhdGUsCiAgICAgICAgbWlub3IgZml4ZXMgZHVlIHRvIHRoZSBzd2l0Y2ggdG8gZnVsbCBIVE1MLWxvb3NlIERURC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTm9ybWFsaXplIHNwYWNlIGluIGFjcm9ueW0gdGl0bGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBNUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBNYWtlIHRoZSBmb3JyZXN0Ym90IHNoZWxsIHNjcmlwdCB3b3JrIHVuZGVyIEN5Z3dpbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgR290IHNraW5zIHdvcmtpbmcgaW4gdGhlIGZvcnJlc3Rib3QuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGEgbWluaW1hbCB0ZW1wbGF0ZSBza2luLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlIHByb2JsZW0gd2l0aCBzdGFydGluZyBhIG5ldyBmb3JrZWQgSlZNIGlzIHRoYXQgYWxsIAogICAgICAgIHByb3BlcnRpZXMgZ2V0IGxvc3QuICBUaGlzIG1ha2VzIGl0IGFibGUgdG8gdXNlIG9uZSBmb3JyZXN0LnByb3BlcnRpZXMKICAgICAgICBmb3IgYWxsIG11bHRpcGxlIHByb2plY3RzLCBhbmQganVzdCBjcmVhdGUgdGhlIGRvY3MgZnJvbSB0aGVyZS4gCiAgICAgICBUaGFua3MgdG8gQmVyaW4gTG9yaXRzY2guPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlIG1lbnUgaXMgbm93IGxpbWl0ZWQgdG8gb25seSBwYWdlcyBpbiB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgYW5kCiAgICAgICAgYmVsb3cuIAogICAgICAgVGhhbmtzIHRvIEJlcm5oYXJkIEJyYW5kbWFpci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgdGhlIGN3aWtpIHN0eWxlc2hlZXRzIHRoYXQgd2VyZSBtaXNzaW5nIGFuZCBhbiBleGFtcGxlIGluIHRoZQogICAgICAgIGZyZXNoIHNpdGUgc2VlZC4KICAgICAgIFRoYW5rcyB0byBDYXRoeSBadXJhLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBNYWtlIHRoZSBmb3JyZXN0LXNpdGUgYW5kIGtyeXNhbGlzLXNpdGUgc2tpbnMgbW9yZSBwcmludGVyIGZyaWVuZGx5IGJ5CiAgICAgICAgdXNpbmcgQ1NTIG1lZGlhIHR5cGUgdG8gaGlkZSBuYXZpZ2F0aW9ucy4gdGhlIGF2YWxvbi10aWdyaXMgc2tpbiBhbHJlYWR5CiAgICAgICAgd29ya3Mgd2VsbCwgdGhlIGZvcnJlc3Qtc2l0ZSBvbmUgc3RpbGwgbmVlZHMgdHdlYWtpbmcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2UgZnVsbCBsb29zZSBEVEQgc3BlY2lmaWNhdGlvbiBmb3IgaHRtbCBwYWdlcy4KICAgICAgICBUaGlzIGFsc28gbWFrZXMgdGhlIGF2YWxvbi10aWdyaXMgc2tpbiBzaG93IHRoZSBzYW1lIGluIE1vemlsbGEgYW5kIElFLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgU3dpdGNoZWQgYWxsIGxvZ2xldmVscyB0byBFUlJPUi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHBhZ2UgZm9yIEZvcnJlc3RCYXIgb24gdGhlIHNpdGUgd2l0aCBhIHNpbXBsZSBsaW5rIGFuZCBhbiBhdXRvaW5zdGFsbCBsaW5rCiAgICAgICAgdG8gdGhlIGZvcnJlc3RiYXIueHBpIGdlbmVyYXRlZCBieSBHdW1wIGV2ZXJ5IGRheS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29ycmVjdGx5IHNlcnZlIHN3ZiBmaWxlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4IHNpdGU6IGFuZCBleHQ6IHJld3JpdGluZyBpbiBib29rLnhtbCwKICAgICAgICBpaHRtbCwgZWh0bWwgYW5kIGN3aWtpIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgIAoKICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIElmIGJ1aWxkL3dlYmFwcC9jb250ZW50L3hkb2NzLyogaXMgbW9yZSByZWNlbnQgdGhhbgogICAgICAgIHNyYy8qIGVxdWl2YWxlbnQsIGZvcnJlc3Qgd2ViYXBwIHdvbid0IGNsb2JiZXIKICAgICAgICBpdC4gIEEgbmV3IGZvcnJlc3QgYmFja2NvcHkgY29tbWFuZCB3aWxsIGNvcHkKICAgICAgICBidWlsZC93ZWJhcHAvY29udGVudC94ZG9jcyBjb250ZW50IGJhY2sgdG8KICAgICAgICBzcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBmb3JyZXN0LXNpdGUgc2tpbiBpcyBub3cgSFRNTCA0LjAuMSBjb21wbGlhbnQuICBUaGUKICAgICAgICBjb21wbGlhbmNlIHZhbGlkYXRvciBsb2dvIGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aCBhCiAgICAgICAgc2tpbmNvbmYueG1sIGVsZW1lbnQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluZGlyZWN0bHkgcmVmZXJlbmNlZCBmaWxlcyBpbiBza2lucyAoZS5nLiBpbWFnZXMgaW4KICAgICAgICBDU1N1cmwoKSdzKSBhcmUgbm93IGNvcGllZCBhY3Jvc3MgdG8gdGhlIHJlbmRlcmVkIHNpdGUuCiAgICAgICAgUHJldmlvdXNseSwgd2UgcmVsaWVkIG9uIHNwaWRlcmluZyB0byBjb3ZlciB0aGUgVVJJIHNwYWNlLCB3aGljaCBoYXMKICAgICAgICBwcm92ZWQgaW5zdWZmaWNpZW50LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBMb3RzIG9mIEZBUSBpbXByb3ZlbWVudHM6CiAgICAgICAgLUltcHJvdmVkIFVSSSBzcGFjZSBieSB1c2luZyBAaWQgYXR0cmlidXRlcyBhcyB0aGUKICAgICAgICAgICAgI2ZyYWdtZW50LWlkZW50aWZpZXIgZm9yICZsdDtmYXEmZ3Q7IGFuZCAmbHQ7cGFydCZndDsgZWxlbWVudHMuCiAgICAgICAgLU51bWJlciBGQVEgZW50cmllcyBhbmQgY2F0ZWdvcmllcwogICAgICAgIC1BZGRlZCBiYWNrLWxpbmtzIGZyb20gRkFRIGVudHJpZXMgdG8gdGhlIG1lbnUKICAgICAgICAtUHJvY2VzcyB0YWdzIGluICZsdDtxdWVzdGlvbiZndDsgaW4gbWVudSBlbnRyaWVzCiAgICAgICAgLUluZGVudCBGQVEgdGV4dAogICAgICAgIC1GQVEgc2FtcGxlIGFkZGVkIHRvIHNlZWQgcHJvamVjdAogICAgICAgIFRoYW5rcyB0byBKb2VyZyBQaWV0c2NobWFubiBhbmQgUmFsZiBIYXVzZXIgZm9yIHRoZSBzdWdnZXN0aW9ucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE9uIGF2YWxvbi10aWdyaXMgc2tpbiBpdCdzIG5vdyBwb3NzaWJsZSB0byBhZGQgYSBteXNpdGUuY3NzIGZpbGUKICAgICAgICB0byBjdXN0b21pemUgdGhlIHN0eWxlLiBBbiBleGFtcGxlIHRoYXQgY2FuIGJlIHVzZWQgaXMgZnJvbQogICAgICAgIGNoYXBlcm9uLnNmLm5ldC4KICAgICAgICBBbHNvIGFkZGVkIGEgcm91bmRlZCBjb3JuZXIgdG8gcGFyYWdyYXBocywgYW5kIG1hbnkgbWlub3IgZml4ZXMuIAogICAgICAgVGhhbmtzIHRvIFN0ZWZhbiBNaWNoZWxzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCB0aGUgYW5ub3lpbmcgbGluayBoaWdobGlnaHRpbmcgb24gdGhlIGtyeXNhbGlzIHNraW4gCiAgICAgICAgZHVlIHRvIHRoZSBib3JkZXIuIFJlbW92ZWQgdGhlIGJvcmRlciwgbm93IGl0IGhpZ2hsaWdodHMgZmluZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgJmx0O2Fjcm9ueW0mZ3Q7IHRhZy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSBtZWFucyB0byBvdmVycmlkZSB0aGUgY2hlY2sgZm9yIGV4aXN0aW5nIGNvbnRlbnQ6IAogICAgICAgIGZvcnJlc3Qgc2VlZCAtRHNraXAuY29udGVudGNoZWNrPXllcwogICAgICAgIFRoYW5rcyB0byBUb20gS2xhYXNlbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugc3ZnIGZpbGVzIGluc3RlYWQgcG5nIGltYWdlcy4KICAgICAgICBUaGF0IGlzLCBpZiBhbiBpbWFnZSBpcyBmb3VuZCBpbiB0aGUgaW1hZ2VzIGRpciB0aGF0IGlzIHN2ZyBhbmQKICAgICAgICB0aGUgYnJvd3NlcnMgcmVxdWVzdHMgYSBwbmcgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgcG5nIGlzIGNyZWF0ZWQKICAgICAgICBmcm9tIHRoZSBzdmcgYXV0b21hdGljYWxseSB3aXRoIGJhdGlrLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugd2lraSBmaWxlcyBpbiB4ZG9jcyBpbnN0ZWFkIG9mIHhtbCBmaWxlcy4KICAgICAgICBUaGV5IG11c3QgaGF2ZSBhIC5jd2lraSBleHRlbnNpb24sIGFuZCBmb2xsb3cgdGhlIGNoYXBlcm9uIHdpa2kgZm9ybWF0IEFUTS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIHBhcnQgb2YgdGhlIGVkaXRvciBzbyB0aGF0IGl0IG5vdyBjYW4gc2F2ZSBmaWxlcyBpbiB3aWtpIGZvcm1hdC4KICAgICAgICBTdGlsbCBuZWVkcyBtb3JlIHdvcmsuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCBCYXRpayBCbG9jayBzbyB0aGF0IG5vdyBQTkdzIGNhbiBiZSBjcmVhdGVkIGNvcnJlY3RseSBmcm9tIFNWRy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCAiRWRpdCBQYWdlIiBidXR0b24gdG8gZWRpdCB0aGUgY3VycmVudCBwYWdlIGluIENvbXBvc2VyLgogICAgICAgIFN0aWxsIG5lZWRzIGFuIGljb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBodG1sIGZpbGVzIGluIHhkb2NzIGluc3RlYWQgb2YgeG1sIGZpbGVzLgogICAgICAgIFRoZXkgbXVzdCBoYXZlIGFuIC5paHRtbCBleHRlbnNpb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBIVE1MIGZyYWdtZW50IGlkZW50aWZpZXJzIGZvciBzZWN0aW9ucyBhcmUgbm93IG1lYW5pbmdmdWxseSBuYW1lZCwgYmFzZWQKICAgICAgICBvbiB0aGUgc2VjdGlvbiB0aXRsZSwgcmF0aGVyIHRoYW4gZG9jdW1lbnQtaWQoKS1nZW5lcmF0ZWQKICAgICAgICBjaGFyYWN0ZXJzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBzaXRlIHJlZ2VuZXJhdGlvbiBidWdzIHdoZXJlIGNoYW5naW5nIHRoZSBza2luIGluCiAgICAgICAgZm9ycmVzdC5wcm9wZXJ0aWVzIGhhZCBubyBlZmZlY3QgYWZ0ZXIgdGhlIGZpcnN0IGJ1aWxkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFBERiBmb290ZXIgKDEwcHQsIGxpZ2h0LWdyZXkgdGV4dCkuICBpZiBhCiAgICAgICAgc2tpbmNvbmYueG1sICdjcmVkaXQnIGVsZW1lbnQgaGFzIGEgcm9sZT0ncGRmJyBhdHRyaWJ1dGUsIHRoaXMgdGV4dCB3aWxsCiAgICAgICAgYmUgdXNlZCBpbnN0ZWFkLiBUaGFua3MgdG8gS2Vpcm9uIExpZGRsZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTm93IGFsbCBmaWxlcyBpbiBzcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50IChleGNlcHQgeGRvY3MpCiAgICAgICAgYW5kIHNyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMgYXJlIGNvcGllZCBhY3Jvc3MKICAgICAgICB3aGVuIEZvcnJlc3QgZ2VuZXJhdGVzIGEgc3RhdGljIHNpdGUuICBUaGlzIGZpeGVzIHRoZSBwcm9ibGVtIHdoZW4gYW4KICAgICAgICB1bnBhcnNlYWJsZSBmaWxlIGxpbmtzIHRvIGFub3RoZXIsIGFuZCBDb2Nvb24gY2FuJ3QgY3Jhd2wgKGFuZCBoZW5jZQogICAgICAgIGNvcHkpIHRoZSBsaW5rZWQtdG8gZmlsZS4gIEFuIGV4YW1wbGUgb2YgdGhpcyBhcmUgQ1NTCiAgICAgICAgdXJsKCdmb28ucG5nJykgaW1hZ2UgcmVmcyAoc28ga3J5c2FsaXMtc2l0ZSB3aWxsIG5vdyB3b3JrCiAgICAgICAgcHJvcGVybHkpLiAgQWxzbywgbGFyZ2UgYmF0Y2hlcyBvZiBwcmVnZW5lcmF0ZWQgZmlsZXMgbGlrZSBKYXZhZG9jcyB3aWxsCiAgICAgICAgbm93IGJlIGNvcGllZCBhY3Jvc3MgaW5zdGVhZCBvZiBpbmRpdmlkdWFsbHkgdHJhdmVyc2VkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgc2l0ZS54bWwgZmlsZSBpbiBjb250ZW50L3hkb2NzLiAgVGhpcyBpcyB1c2VkIHRvCiAgICAgICAgaW1wbGVtZW50ICZsdDtsaW5rIGhyZWY9InNpdGU6aW50ZXJuYWxVUkkiJmd0OyAnc2VtYW50aWMnIGxpbmtzLAogICAgICAgICZsdDtsaW5rIGhyZWY9ImV4dDpleHRlcm5hbFVSSSImZ3Q7IGFsaWFzZXMgdG8gZXh0ZXJuYWwgbGlua3MsIGFuZAogICAgICAgIHJlbmRlcnMgYm9vay54bWwgZmlsZXMgb2Jzb2xldGUuICBTZWUgTWVudXMgYW5kIExpbmtpbmcgZm9yIG1vcmUgaW5mby4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgIFVwZGF0ZWQgc29tZSBkb2N1bWVudGF0aW9uLCBlc3BlY2lhbGx5IEZvcnJlc3Rib3QgSW50cm9kdWN0aW9uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTm93IGZpbGVzIHByZXNlbnQgaW4gdGhlIGNvbnRlbnQgZGlyIGFyZSBjb3JyZWN0bHkgbGlua2VkIGFuZAogICAgICAgIGNvcGllZCB2ZXJiYXRpbSBieSB0aGUgQ0xJLiBUaGUgd2VsbGtub3duIGZpbGVzIGFyZSBnaXZlbiB3aXRoIHRoZQogICAgICAgIGNvcnJlY3QgbWltZS10eXBlLCBhbmQgbGlua3MgaW4gaHRtbCBhbmQgeG1sIGFyZSBmb2xsb3dlZC4gCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGUgdG8gMjAwMi0xMi0yNiBDb2Nvb24uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVHdlYWtlZCBmb3JyZXN0YmFyLCBhZGRlZCBhIHN1Yi1wcm9qZWN0IG1lbnUgZm9yIEpha2FydGEsIGZpeGVkIAogICAgICAgIGRvd25sb2FkIGxpbmsgYW5kIGFkZGVkIHN1Ym1lbnUgZm9yIHRvb2xzIGFuZCBndW1wLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHJzcyBjYXBhYmlsaXR5IHRvIGNoYW5nZXMgZ2VuZXJhdGlvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBsYXRlc3Qga3J5c2FsaXMtc2l0ZSBza2luLCB1c2luZyBjb21tb24gdGVtcGxhdGVzIHdoZXJlIHBvc3NpYmxlLgogICAgICAgIFRoZXJlIGlzIGEgY2hhbmdlczJyc3Mgc3R5bGVzaGVldCB0aGF0IHN0aWxsIG5lZWRzIHNpdGVtYXAgY2hhbmdlcyB0byBydW4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTm93IGV2ZW4gdGhlIHNlbGVjdGVkIHRhYiByZXRhaW5zIGEgbGluaywgdG8gYmUgYWJsZSB0byBlYXNpbHkgc2VsZWN0CiAgICAgICAgdGhlIG1haW4gcGFnZSBvZiB0aGF0IHRhYiBldmVuIGlmIGl0IGlzICJjdXJyZW50Ii4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGEgYnVnIGluIHRoZSBzZWFyY2ggZm9ybSB3aGVyZSB0aGVyZSB3YXMgbm8gc3BhY2UgYmV0d2VlbiBzZWFyY2gKICAgICAgICB0ZXJtIGFuZCAnc2l0ZTonIHRlcm0uICBTZWFyY2ggZm9ybSBhbHNvIG5vIGxvbmdlciByZXF1aXJlcyBKYXZhc2NyaXB0LgogICAgICAgVGhhbmtzIHRvIE5pY2sgQ2hhbGtvLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFsbG93IHNwZWNpYWwgaGFuZGxpbmcgb2YgdGFiIGhyZWZzIHdpdGggI2FuY2hvciByZWZlcmVuY2VzIGluIHRoZW0uICBCeQogICAgICAgIGRlZmF1bHQsIHN1Y2ggbWVudSBsaW5rcyBhcmUgYWx3YXlzIGNsaWNrYWJsZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYSBidWcgd2hlcmUgdGhlIG5vIG1lbnUgZW50cnkgaXMgJ3NlbGVjdGVkJyB3aGVuIGluIHN1YmRpcmVjdG9yaWVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgYXZhbG9uLXRpZ3JpcyBza2luIGJ5IG1lcmdpbmcgd2hhdCB3YXMgaW4gQ1ZTIGhlcmUgYW5kCiAgICAgICAgd2hhdCB3YXMgdXNlZCBpbiBBdmFsb24gd2l0aCBpdHMgQ29jb29uLWdlbmVyYXRlZCBzaXRlLiAgCiAgICAgICAgVGhlIHZpc3VhbCBlZmZlY3QgaXMgdGhlIHNhbWUgdG8gdGhlIGN1cnJlbnQgZnJhbWV3b3JrIGFuZCBFeGFsaWJ1cgogICAgICAgIEF2YWxvbiBzaXRlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOb3cgZXJyb3IgcmVwb3J0aW5nIGluIENMSSBydW5zIHNob3VsZCB3b3JrIGFuZCBzaG93IHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7CiAgICAgICAgYmVmb3JlIGl0IHdhcyBqdXN0IHJlcG9ydGluZyBbYnJva2VuIGxpbmtdLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgbGF0ZXN0IENvY29vbiBqYXJzOiBjaGFpbiBtZXRhbW9kdWxlIG5hbWUgc2V0IHRvICJmb3JyZXN0IiwKICAgICAgICBhbmQgaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYSBidWcgd2hlcmUgbXVsdGlwbGUgbWVudSBlbnRyaWVzIGFyZSBoaWdobGlnaHRlZCBpZiB0aGUgZmlsZW5hbWVzCiAgICAgICAgc2hhcmUgYSBjb21tb24gcHJlZml4LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgYSBwcm9qZWN0IGxvY2FsLWNhdGFsb2cgYW5kIHRoZSBlbnRpdHkgcmVzb2x2ZXIKICAgICAgICB2ZXJib3NpdHkgbGV2ZWwsIHZpYSBmb3JyZXN0LnByb3BlcnRpZXMgY29uZmlndXJhdGlvbi4gVGhpcyByZXBsYWNlcwogICAgICAgIHRva2VucyBpbiB0aGUgZGVmYXVsdCBjb2Nvb24ueGNvbmYKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYSBidWcgaW4gZm9ycmVzdC5iYXQsIHdoaWNoIHdvdWxkIGZhaWwgaWYgcnVuIGZyb20gYSBkaWZmZXJlbnQKICAgICAgICBkcml2ZSB0byB0aGF0IEZvcnJlc3Qgd2FzIGluc3RhbGxlZCBpbi4KICAgICAgIFRoYW5rcyB0byBPbWFyIEJlbGhhai48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXggYnVnIHdoZXJlIHRoZSB3ZWJhcHAgd291bGQgYnJlYWsgZHVlIHRvIG1pc3NpbmcgWE1MIGphcnMgdW5kZXIgSkRLCiAgICAgICAgMS4yLzEuMy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTW92ZWQgY3JlZGl0IGFuZCBob3N0IGxvZ29zIHRvIGJvdHRvbSBsZWZ0IGNvcm5lciBvbiBmb3JyZXN0LXNpdGUgc2tpbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBNYWtlIHRoZSBzZWVkIHByb2plY3QgdXNlIHRoZSBjb3JyZWN0ICdidWlsdCB3aXRoIEFwYWNoZSBGb3JyZXN0JyBsb2dvCiAgICAgICAgaW5zdGVhZCBvZiBDb2Nvb24gKyBDZW50aXBlZGUgbG9nb3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJld3JpdGUgc2tpbnMgdG8gc2hhcmUgYSBjb21tb24gYmxvY2sgb2YgWFNMVCwgd2hpY2ggaXMgdXNlZCB2aWEKICAgICAgICAmbHQ7eHNsOmltcG9ydCZndDsuIFRoaXMgc2hvdWxkIG1ha2Ugc2tpbiBtYWludGVuYW5jZSBtdWNoIGVhc2llci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHJlbW92ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHJlbW92ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVtb3ZlZCB0aGUgJ2Jhc2ljJyBza2luLCB0byBiZSBzaG9ydGx5IHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIG11Y2ggbW9yZQogICAgICAgIG1haW50YWluYWJsZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSByZW1vdmU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSByZW1vdmUKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlbW92ZWQgc29tZSBpbWFnZXMgKGJ1aWx0LXdpdGgtY29jb29uLmdpZiwgY2VudGlwZWRlLWxvZ28tc21hbGwuZ2lmKQogICAgICAgIGZyb20gdGhlIHNraW5zLCBhbmQgbW92ZWQgdGhlbSB0bwogICAgICAgIHNyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMsIGFzIHRoZXkgYXJlCiAgICAgICAgRm9ycmVzdC1zcGVjaWZpYy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGVuaGFuY2VtZW50cyB0byBzdGF0dXMueG1sIHRvIGNvbXBseSB3aXRoIHRoZSBuZWVkcyBmb3IgYSBjb21wbGV0ZSBzdGF0dXMgZmlsZSwKICAgICAgICBsaWtlIG90aGVyICJTVEFUVVMiIHRleHQgZmlsZXMgYXQgQXBhY2hlLgogICAgICAgIFN0eWxlc2hlZXRzIG5vdCB5ZXQgZG9uZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYnV0dG9ucyBmb3IgbmlnaHRseSBHdW1wIHJ1bnMgYW5kIGxvY2FsIGZvcnJlc3QuIENvcnJlY3RlZCBhbmQgY29tcGxldGVkCiAgICAgICAgZXhpc3RpbmcgaW50ZXJmYWNlLCBhbmQgbWFkZSBidXR0b25zIGZsYXQgKHRoZSBiYXIgaXMgc2xpbW1lciB0b28pLgogICAgICAgIFdlIG5lZWQgaWNvbnMgZm9yIHRoZSBuZXcgYnV0dG9ucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgCiAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBidWcgd2hlcmUgdmFsaWRhdGlvbiBvZiB4ZG9jcyB3YXMgbm90IGRlc2NlbmRpbmcgaW50bwogICAgICAgIHN1Yi1kaXJlY3Rvcmllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGJ1ZyB3aGVyZSBjaGFuZ2VzIHRvIHRoZSBicmVhZGNydW1iIGxpbmtzIGluIHNraW5jb25mLnhtbCB3ZXJlCiAgICAgICAgaWdub3JlZCB1bnRpbCB0aGUgRm9ycmVzdCBiaW5hcnkgd2FzIHJlYnVpbHQsIG9yIHRoZSBwcm9qZWN0CiAgICAgICAgYnVpbGQvdG1wLyBkZWxldGVkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgV2ViYXBwIG5vdyB3b3JrcyB1bmRlciBKREsgMS4zIChwYXJzZXJzIHdlcmVuJ3QgYmVpbmcgY29waWVkKQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAKICAgIAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFNOCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFNvdXJjZUFjdGlvbiBvciB0aGUgc28tY2FsbGVkIAogICAgICAgICdjb250ZW50IGF3YXJlIHBpcGVsaW5lcycgZW5hYmxlcyBjb25kaXRpb25hbCBwcm9jZXNzaW5nIG9mIFhNTAogICAgICAgIGRvY3VtZW50cyBiYXNlZCBvbiB0aGVpciBncmFtbWFyLCBiZWluZyBpbmRpY2F0ZWQgYnkgdGhlaXIgRFRELAogICAgICAgIFhNTCBTY2hlbWEgUEksIHJvb3QgZWxlbWVudCwgb3IgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIChQSSkKICAgICAgICBpbiB0aGUgcHJvbG9nIG9mIHRoZSBkb2N1bWVudC4KICAgICAgIFRoYW5rcyB0byBCcnVubyBEdW1vbi48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSBjb252ZXJ0IGRpciBpbiB0aGUgcmVzb3VyY2VzIHdpdGggc3R5bGVzaGVldHMgYW5kIGJ1aWxkZmlsZQogICAgICAgIHRvIGhlbHAgY29udmVydCBBbmFraWEgYW5kIE1hdmVuLWJhc2VkIHNpdGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgYWRkCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBWYWxpZGF0ZSBwcm9qZWN0IHNpdGVtYXBzIGFuZCBjaG9pY2Ugb2Ygc2tpbgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVmFsaWRhdGlvbiBvZiBpbXBvcnRhbnQgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzIGF0IGJ1aWxkLXRpbWUgdXNpbmcKICAgICAgICBSRUxBWCBORy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIHNlbGVjdGVkIG1lbnUgbGluayAobWVhbnQgdG8gYmUgaW5hY3RpdmUgYW5kIHllbGxvdykKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5vdyBhbiBpZCBhdHRyaWJ1dGUgb24gYW55IFhNTCBlbGVtZW50IGJlbG93ICZsdDtib2R5Jmd0OyB3aWxsIGJlIHJlbmRlcmVkCiAgICAgICAgYXMgYW4gYW5jaG9yIHdoaWNoIGNhbiBiZSBsaW5rZWQgdG8uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCB3ZWJhcHAgcmVkaXJlY3QgcHJvYmxlbXMgdW5kZXIgVG9tY2F0IGFuZCAoc29tZXRpbWVzKSB1bmRlciBKZXR0eS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBhbHBoYSBzeXN0ZW0gZm9yIGVkaXRpbmcgY29udGVudCBpbiB0aGUgd2ViYXBwLgogICAgICAgIFRvIHRyeSBpdCBkbyAiZm9ycmVzdCBydW4iIGFuZCBwb2ludCB0aGUgYnJvd3NlciB0byBodHRwOi8vbG9jYWxob3N0Ojg4ODgvZWRpdC8gIC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYXZhbG9uLXRpZ3JpcyBza2luLgogICAgICAgVGhhbmtzIHRvIFBldGVyIERvbmFsZC48L2Rlc2NyaXB0aW9uPjwvaXRlbT4gCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIHJlbW92ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHJlbW92ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVtb3ZlZCB1bm1haW50YWluZWQgc2tpbnM6IGF2YWxvbi1zaXRlLCBqYWthcnRhLXNpdGUsIHhtbC1hcGFjaGUtc2l0ZSwKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZW1vdmVkIHRoZSBkZXBlbmRlbmN5IHRoYXQgdGhlIGRlZmF1bHQgInNpdGUiIHRhcmdldCBoYWQgb24gY2xlYW4tc2l0ZS4KICAgICAgICBJdCBtZWFucyB0aGF0IHJ1bm5pbmcgICJmb3JyZXN0IiB3aWxsIG5vdCBkZWxldGUgdGhlIGN1cnJlbnQgZmlsZXMgaW4gLi9idWlsZC9zaXRlLyoqIC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+IAogICAgICA8aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBOb3cgQ29jb29uIHNlcnZlcyBhIGZpbGUgZGlyZWN0bHkgaWYgdGhlIGZpbGVuYW1lIG1hdGNoZXMKICAgICAgICB0aGUgb25lIGluIC4vc3JjL2RvY3VtZW50YXRpb24vY29udGVudHMvKiogLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4gICAgICAKICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUHV0IHRoZSBpbnRlcm5hbCBtYXRjaGVzIGluIGEgc2VwYXJhdGUgcGlwZWxpbmUgd2l0aCBpbnRlcm5hbC1vbmx5PSJ0cnVlIi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+ICAgICAgCiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5vdyBzaXRlIGJ1aWxkcyBkbyBub3QgZGVsZXRlIGZpbGVzIGluIGJ1aWxkL3NpdGUgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIAogICAgICAgIEFudCBsaXN0IG9mIGRlZmF1bHQgZXhjbHVkZXMsIGxpa2UgQ1ZTIGluZm8uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPiAgIAogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluY2x1ZGVkIEpldHR5IGluIHRoZSBkaXN0cm8uCiAgICAgICAgdHlwZSAiZm9ycmVzdCBydW4iIHRvIGhhdmUgdGhlIC4vYnVpbGQvd2ViYXBwIGRpciBjb250ZW50cyBiZSBydW4KICAgICAgICBpbiBhIGxvY2FsIHdlYiBzZXJ2ZXIsIHN0YXJ0aW5nIGZyb20gaHR0cDovL2xvY2FsaG9zdDo4ODg4L2luZGV4Lmh0bWwKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSBkb2Nib29rMmRvY3VtZW50LnhzbCBzdHlsZXNoZWV0IHRvIGxpYnJhcnkveHNsdC4KICAgICAgIFRoYW5rcyB0byBLZXZpbiBSb3NzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFhNTCB2YWxpZGF0aW9uIGlzIG5vdyBmdWxseSBjb25maWd1cmFibGUgdGhyb3VnaCBhIGhpZXJhcmNoaWNhbCBzZXQgb2YKICAgICAgICBmb3JyZXN0LnZhbGlkYXRpb24uKntpbmNsdWRlcyxleGNsdWRlcyxmYWlsb25lcnJvcn0KICAgICAgICBwcm9wZXJ0aWVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBWYWxpZGF0ZSBYU0xUcyBpbiB1c2VyIHNraW5zIGFuZCByZXNvdXJjZXMvc3R5bGVzaGVldHMKICAgICAgICBkaXJlY3Rvcmllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgbmV3IGRvY3VtZW50IFN0YW5kYXJkcyBDb21wbGlhbmNlCiAgICAgICAgVGhhbmtzIHRvIFJvYmVydCBLb2JlcmcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgSmluZyAiUkVMQVggTkcgdmFsaWRhdG9yIGluIEphdmEiIGFuZCBpbml0aWFsIGdyYW1tYXIgZm9yCiAgICAgICAgc2tpbmNvbmYueG1sIGZpbGVzLiBUaGVzZSBjb25maWcgZmlsZXMgbm93IGdldCB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBidWlsZC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRW5oYW5jZWQgZm9ycmVzdC1zaXRlIHNraW4ncyB0YWJzLiAgQW55IFVSTCAobm90IGp1c3QgZGlyZWN0b3JpZXMpIGNhbiBub3cKICAgICAgICBiZSB0YWJiZWQgd2l0aCBhIG5ldyAnaHJlZicgYXR0cmlidXRlLiBUaGVyZSBpcyBhbiBpbXByb3ZlZCAnbG9uZ2VzdCBtYXRjaCcKICAgICAgICBhbGdvcml0aG0gZm9yIGRlY2lkaW5nIHdoaWNoIHRhYiBpcyBvbiB3aGljaCBpcyBtb3JlIHJvYnVzdCB0aGFuIHRoZSBvbGQKICAgICAgICBvbmUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGEgYnVnIHdoZXJlIGhhdmluZyBhIHRhYnMueG1sIGxpbmsgdG8gYSBmaWxlIG5vdCBvdGhlcndpc2UgbWVudGlvbmVkCiAgICAgICAgaW4gYm9vay54bWwgY2F1c2VkIGEgYnJva2VuIGxpbmsuICBTZWUKICAgICAgICBmb3JyZXN0LWRldgogICAgICAgICAgZGlzY3Vzc2lvbgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBhbGwgYnJva2VuIGxpbmtzIGluIHRoZSBGb3JyZXN0IHNpdGUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFNpbXBsaWZpZWQgdGhlIHNpdGVtYXAtc3R5bGVzaGVldCBjb250cmFjdC4gIEluc3RlYWQgb2YgJ2RpcicgYW5kCiAgICAgICAgJ3Jlc291cmNlJyBwYXJhbWV0ZXJzIHdpdGggdmFyeWluZyBtZWFuaW5nLCB0aGVyZSBpcyBqdXN0IG9uZSAncGF0aCcKICAgICAgICBwYXJhbWV0ZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFsbG93IHVzZXIgdG8gc3BlY2lmeSB3aGF0IFhNTCBmaWxlcyB0byB2YWxpZGF0ZSB2aWEKICAgICAgICBmb3JyZXN0LnZhbGlkYXRlLntpbmNsdWRlcyxleGNsdWRlc30gcHJvcGVydGllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYnJva2VuIFBERnMgaW4gbW9zdCBzdWJkaXJlY3Rvcmllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgYSBzdWJkaXJlY3RvcnkgdG8gdGhlIHRlbXBsYXRlIHNpdGUgYW5kIGZpeGVkIGFsbCBicm9rZW4gbGlua3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFhNTCBkb2MgZmlsZXMgYXJlIG5vdyB2YWxpZGF0ZWQgYmVmb3JlIHJlbmRlcmluZyB3aXRoIHRoZSAndmFsaWRhdGUnCiAgICAgICAgdGFyZ2V0LiAgVXNlcyBPQVNJUyBjYXRhbG9ncyBwcm92aWRlZCBieSBGb3JyZXN0LCBvcHRpb25hbGx5IGF1Z21lbnRlZCBieQogICAgICAgIHVzZXIgcHJvamVjdCBjYXRhbG9ncy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBubyBsb25nZXIgcmVxdWlyZXMgQW50IHRvIGJlIHByZWluc3RhbGxlZC4gIE5vdywgbm90aGluZwogICAgICAgIGJ1dCBhIEphdmEgaW5zdGFsbGF0aW9uIGlzIG5lZWRlZC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBCdWlsZGluZyBGb3JyZXN0IG5vIGxvbmdlciByZXF1aXJlcyBhIG5ldHdvcmsgY29ubmVjdGlvbiAoZm9yIGRvd25sb2FkaW5nCiAgICAgICAgQ2VudGlwZWRlKS4gIEl0IGlzIGJ1aWxkYWJsZSBieSB0eXBpbmcgJ2FudCcgb3Igd2l0aCB0aGUgcHJvdmlkZWQgYnVpbGQKICAgICAgICBzY3JpcHRzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHdoZW4gcnVubmluZyBvbiBKREsxLjQueAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBbGxvdyB4bWw6c3BhY2U9J3ByZXNlcnZlJyBhdHRyaWJ1dGUgb24gJmx0O3AmZ3Q7IGVsZW1lbnQsIHdoaWNoIHByZXNlcnZlcwogICAgICAgIHNwYWNlIHdpdGhvdXQgdGhlIGNoYW5nZWQgZm9udCBhbmQgYmxvY2sgZGlzcGxheSB0aGF0ICZsdDtjb2RlJmd0OyB1c2VzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgZml4PC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgZml4CiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBGaXhlZCBhIGJ1ZyB3aGVyZSB0aGUgbG9nIGZpbGVzIHdlcmVuJ3QgYmVpbmcgY3JlYXRlZC4gVGhhbmtzIHRvIFZsYWRpbWlyCiAgICAgICAgQm9zc2ljYXJkIGZvciByZXBvcnRpbmcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVzZXIgcHJvamVjdHMgY2FuIG5vdyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb2Nvb24ueGNvbmYgYW5kIGxvZ2tpdC54Y29uZiBmaWxlcywKICAgICAgICBieSBwbGFjaW5nIHRoZXNlIGZpbGVzIGluIHNyYy9kb2N1bWVudGF0aW9uL2NvbmYKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUERGcyBmb3IgZmFxLCBjaGFuZ2VzIGFuZCB0b2RvIG5vdyB3b3JrLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgICJDaGFuZ2UgSGlzdG9yeSIgaW1hZ2VzICh1cGRhdGUuanBnLCBhZGQuanBnIGV0YykgYXJlIG5vdyBwcm92aWRlZCBieQogICAgICAgIGRlZmF1bHQgYnkgRm9ycmVzdCAoaW4gaW1hZ2VzLyksIGFuZCBuZWVkIG5vdCBiZSBzdXBwbGllZCBieSB1c2VyIHByb2plY3RzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVzZXIgcHJvamVjdHMgY2FuIG5vdyBhZGQgY3VzdG9tIGNsYXNzZXMgYW5kIGphcnMgdG8gRm9ycmVzdCBkb2MgYnVpbGRzLgogICAgICAgIFVzZWZ1bCBmb3IgY3VzdG9tIHNpdGVtYXAgY29tcG9uZW50cywgb3Igb3ZlcnJpZGluZyBGb3JyZXN0LXByb3ZpZGVkIGphcnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlIGxvY2F0aW9ucyB3aGVyZSBGb3JyZXN0IGV4cGVjdHMgZG9jIGZpbGVzIHRvIGJlIGlzIG5vdyBjb25maWd1cmFibGUgdmlhCiAgICAgICAgcHJvcGVydGllcywgdGhhdCBjYW4gYmUgc2V0IGluIGZvcnJlc3QucHJvcGVydGllcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKVAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2VyIHByb2plY3RzIG1heSBub3cgc3BlY2lmeSB0aGVpciBvd24gc2l0ZW1hcCwgb3ZlcnJpZGluZyB0aGUKICAgICAgICBGb3JyZXN0LXByb3ZpZGVkIG9uZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTWFkZSBmb3JyZXN0LXNpdGUgc2tpbiBmdWxseSBnZW5lcmljLCB1c2FibGUgd2l0aCBhbnkgcHJvamVjdC4gU2tpbnMgYXJlCiAgICAgICAgY29uZmlndXJlZCB0aHJvdWdoIGFuIGV4dGVybmFsICdza2luY29uZi54bWwnIGZpbGUsIHNwZWNpZmllZCBieSB0aGUKICAgICAgICBwcm9qZWN0LiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGZpeDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGZpeAogICAgICAgIGJ5CiAgICAgICAgSlQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgYnVnIHdoZXJlIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBpbWFnZSB3aGVyZSBnZW5lcmF0ZWQsIG9uZSBmb3IKICAgICAgICBlYWNoIGRpcmVjdG9yeS4gTm93IGFsbCBpbWFnZSBsaW5rcyBhcmUgcGFnZS1yZWxhdGl2ZSwgbGVhZGluZyB0byBhIHNpbmdsZQogICAgICAgIGNvcHkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBmaXg8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBmaXgKICAgICAgICBieQogICAgICAgIEpUCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIHRhYiBsaW5rcywgd2hpY2ggd2VyZSBwcmV2aW91c2x5IGhhcmRjb2RlZCBhbmQgZm9ycmVzdC1zcGVjaWZpYy4gVGhleQogICAgICAgIGFyZSBub3cgcGFnZS1yZWxhdGl2ZS4gdGFicy54bWwgZmlsZSBlbnRyaWVzIG5vIGxvbmdlciBoYXZlIHRvIGVuZCBpbgogICAgICAgICcvJy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgbmV3IGRvY3VtZW50IFlvdXIgUHJvamVjdAogICAgICAgICAgLSBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCB1c2luZyBGb3JyZXN0CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCB0byB0aGUgImZvcnJlc3Qtc2l0ZSIgc2tpbiB0aGUgYWJpbGl0eSB0byBzcGxpdCBzb3VyY2UgY29kZQogICAgICAgIGxhcmdlciB0aGFuIDgwIGNoYXJzIGluIHR3byBvciBtb3JlIGxpbmVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXBsYWNlIHRoZSAiZm9ycmVzdC1zaXRlIiBza2luIHdpdGggdGhlIG5ldyAiYmVydCIKICAgICAgICBza2luLgogICAgICAgVGhhbmtzIHRvIEJlcnQgVmFuIEtldHMuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgYWRkCiAgICAgICAgYnkKICAgICAgICBTTgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCB0aGUgZm9ycmVzdGJvdCAtIGluZnJhc3RydWN0dXJlIGFuZCBjb25maWd1cmF0aW9uIGZvciByZW1vdGUgcHJvamVjdCBidWlsZGluZy4KICAgICAgIFRoYW5rcyB0byBNYXJjIFBvcnRpZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGJyZWFkY3J1bWIgdHJhaWwgc2NyaXB0IGZyb20gdGhlIEF2YWxvbiBzaXRlIHNraW4uCiAgICAgICBUaGFua3MgdG8gTGVvIFNpbW9ucy48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIENvY29vbiB0byAyLjEtZGV2IHRvIHVzZSB4c2x0YyBhbmQgbmV3IENMSSBzdGF0dXMgbWVzc2FnZXMuCiAgICAgICAgTG9ncyBhcmUgaW4gdGhlIGJ1aWxkL3dvcmsvV0VCLUlORi9sb2dzIGRpcmVjdG9yeSBhbmQgdGhlIAogICAgICAgIGxpc3Qgb2YgYnJva2VuIGxpbmtzIGlzIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFNOCiAgICAgICAgOgogICAgICAgIAogICAgICAgIGFkZGVkIE5la29EVEQtYmFzZWQgRFREIGRvY3VtZW50YXRpb24gdXNpbmcgYSBjdXN0b20gQ29jb29uIEdlbmVyYXRvcgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgZHJhZnQgZm9ycmVzdCB0b29sYmFyIGZvciBNb3ppbGxhCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFNOCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEluaXRpYWwgaW1wb3J0IG9mIExpYnJlCiAgICAgICAgZmFjaWxpdHkgLSByZXBsYWNlbWVudCBmb3IgKi9ib29rLnhtbAogICAgICAgVGhhbmtzIHRvIE1hcmMgUG9ydGllci48L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIFNOCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGEgZHJhZnQgRFREIGZvciB0aGUgR3VtcCBEZXNjcmlwdG9yIGZvcnJlc3QueGd1bXAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRm9ycmVzdCB3ZWJzaXRlIGlzIGJlaW5nIGF1dG9tYXRpY2FsbHkgYnVpbHQgYW5kIHB1Ymxpc2hlZCB0byBrcnlzYWxpcy5vcmcKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kZXNpZ24gYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRlc2lnbiBhZGQKICAgICAgICBieQogICAgICAgIEJLCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERlc2lnbmVkIGEgbmV3IHNraW4gZm9yIHRoZSBGb3JyZXN0IGRvY3VtZW50cy4gUGFydGljdWxhciBhdHRlbnRpb24gdG8KICAgICAgICBjcm9zcy1icm93c2VyIGlzc3Vlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCAiRHJlYW0gTGlzdCIgYnkgaGFydmVzdGluZyBzdGF0ZW1lbnRzIGZyb20gdGhlCiAgICAgICAgZm9ycmVzdC1kZXYgbWFpbCBsaXN0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBzaW1wbGUgeHNsIHN0eWxlc2hlZXQgZm9yIGZvcnJlc3QueGd1bXAuCiAgICAgICAgSW4gSUU2IGFuZCBNb3ppbGxhIDYgaXQgcmVuZGVycyB1c2luZyB0aGlzLCBpbiBvbGRlciBvbmVzIGl0IHVzZXMgdGhlCiAgICAgICAgbW9yZSBzaW1wbGlmaWVzIENTUyB2ZXJzaW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBGb3JyZXN0IHRvIEd1bXAgcnVucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIHByZWxpbWluYXJ5IHZlcnNpb24gb2YgYSBzY2FyYWItbGlrZSBza2luLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCBhZGQKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBzaW1wbGUgY3NzIHN0eWxlc2hlZXQgZm9yIGZvcnJlc3QueGd1bXAuCiAgICAgICAgSW4gSUUgYW5kIE1vemlsbGEgNiBpdCByZW5kZXJzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBOS0IKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRml4ZWQgbGlua3MgaW4gRm9ycmVzdCBob21lIHBhZ2UgYW5kIGFkZGVkOiBjb250cmlidXRpbmcsIG1haWxpbmcgbGlzdCwKICAgICAgICBsaXN0IGFyY2hpdmVzLCB3aG8gd2UgYXJlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT4KICAgICAgPGl0ZW0+PHRpdGxlPmJ1aWxkIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5idWlsZCB1cGRhdGUKICAgICAgICBieQogICAgICAgIE5LQgogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGVkIENlbnRpcGVkZSBzdHVmZiB0byBsYXRlc3QgY2hhbmdlczoKICAgICAgICAtIGFkZGVkIGxpYi9lbmRvcnNlZCBkaXIgZm9yIGVuZG9yc2VkIGphcnMgdGhhdCBhcmUgcHV0IGluIGdsb2JhbCBjYWxzc3BhdGgKICAgICAgICAtIGNoYW5nZWQgdGhlIGJ1aWxkIHNjcmlwdHMgdG8gbm90IG1ha2UgZGlyZWN0IHJlZmVyZW5jZSB0byBqYXIgZmlsZXMKICAgICAgICAtIGFkZGVkICJleGFtcGxlcyIgZGlyIGluIHNyYyBhbmQgY3JlYXRpb24gb2YgZXhhbXBsZXMgamFyIGluIGJ1aWxzCiAgICAgICAgLSBhZGRlZCAidGVzdG1vZHVsZSIgdGFyZ2V0IHRvIGJlIHJ1biBiZWZvcmUgY29tbWl0dGluZyBzdHVmZgogICAgICAgIC0gYWRkZWQgImd1bXAiIGJ1aWxkIHRvIGJlIHJ1biBieSBHdW1wCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE1lcmdlZCBmb3JyZXN0IG5lZWRlZCBpbmZvIGluIGZvcnJlc3QueGd1bXAuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YnVpbGQgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgcHJvamVjdCBkZXNjcmlwdG9yOiBub3cgaXQgc2hvdWxkIGJlIHVzYWJsZSBieSBHdW1wLgogICAgICAgIEFkZGVkIGJhc2ljIEZvcnJlc3QgZGVzY3JpcHRvci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgTktCCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFJlZmFjdG9yZWQgc2l0ZSBnZW5lcmF0aW9uIHN0dWZmIHRvIHVzZSBza2luczsgc3RpbGwgbmVlZCB0byBpbnRlZ3JhdGUgd2l0aCB4Zm9ycmVzdCBkZXNjcmlwdG9yLgogICAgICAgIEFkZGVkIGpha2FydGEtc2l0ZSwgeG1sLWFwYWNoZS1zaXRlLCBjb2Nvb24tcHJpbnRlciBza2lucy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAgIDxpdGVtPjx0aXRsZT5idWlsZCBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+YnVpbGQgYWRkCiAgICAgICAgYnkKICAgICAgICBTTgogICAgICAgIDoKICAgICAgICAKICAgICAgICBJbXBvcnRlZCBDZW50aXBlZGUgYXMgYSBidWlsZCBzeXN0ZW0uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuc3VyZSB0aGF0IGluaXRpYWwgRFREcyBhcmUgdmFsaWQgYW5kIHRoYXQgdGhlIGluaXRpYWwgWE1MIGluc3RhbmNlcyBjYW4gYmUKICAgICAgICB2YWxpZGF0ZWQgdXNpbmcgdGhlc2UgRFREcyBhbmQgT0FTSVMgQ2F0YWxvZ3MuCiAgICAgICBUaGFua3MgdG8gU3RldmVuIE5vZWxzLjwvZGVzY3JpcHRpb24+PC9pdGVtPgogICAgICA8aXRlbT48dGl0bGU+YWRtaW4gYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmFkbWluIGFkZAogICAgICAgIGJ5CiAgICAgICAgU00KICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSW5pdGlhbCBJbXBvcnQKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+CiAgICAKICAKIAogIAogIAogIAoKICAKCiAgCgoKICAKICAKICAKCiAgCiAgPGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKCiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIHVwZ3JhZGluZyB0byB2MC44CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItOTI0KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTkyNCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgIEZPUi05MjQgUmVhZGRpbmcgdGhlIGxvYWRpbmcgZnJvbQogICAgICAgIChkZWZhdWx0LSlmb3JyZXN0LnByb3BlcnRpZXMgd2hpY2ggZ290IHJlbW92ZWQgaW4gcjQzMDU4OCB3aGVuIGNsb3NpbmcgRk9SLTkxNi4KICAgICAgICBUaGFua3MgTWFydGluIFN0b2NraGFtbWVyIGZvciBwb2ludGluZyBpdCBvdXQsIHByb3ZpZGluZyB1cyB3aXRoIGEgcGF0Y2ggYW5kIGZvciB5b3VyCiAgICAgICAgY29udHJpYnV0aW9uLiAgVGhhbmtzIHRvIE1hcnRpbiBTdG9ja2hhbW1lci48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBmaXgKICAgICAgICAgIChidWcgRk9SLTQ0OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBmaXgKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi00NDgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFdoZW4gdXNpbmcgaHRtbCBhcyBzb3VyY2UsIHRoZSAiYSIgZWxlbWVudHMgd2VyZSBub3QgcmVuZGVyZWQgcHJvcGVybHkgaWYgYm90aAogICAgICAgIEBocmVmIGFuZCBAbmFtZSBhdHRyaWJ1dGVzLiBBIHNpZGUtZWZmZWN0IG9mIHRoaXMgZml4IGlzIHRoYXQgbm93IGFsbCBvdGhlcgogICAgICAgIGF0dHJpYnV0ZXMgc3VjaCBhcyBAdGl0bGUgb3IgQHRhcmdldCBhcmUgY29waWVkIG92ZXIuCiAgICAgICAgQWxzbyByZW1vdmVkIHRoZSBhdXRvbWF0ZWQgZ2VuZXJhdGlvbiBvZiBAaWQgYXR0cmlidXRlcyBmcm9tIEBuYW1lIGF0dHJpYnV0ZXMsCiAgICAgICAgd2hpY2ggY2FuIGxlYWQgdG8gaW52YWxpZCBJRHMgYW5kIG90aGVyIGNvbmZ1c2lvbi4KICAgICAgIFRoYW5rcyB0byBKaW0gRGl4b24uPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBGT1ItOTIwIC0gQWRkaW5ncyBub3RlcyBob3cgdG8KICAgICAgICB1cGRhdGUgdGhlIGRpZmZlcmVudCBtb2R1bGUgY2FsbHMgaW4KICAgICAgICBjdXN0b20gY29kZS4gPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBGT1ItOTIwIE1lcmdpbmcgdGhlIGRlZmF1bHRzIGFuZCBwcm9qZWN0IG1vZHVsZXMgdG8gdGhlIG5ldwogICAgICAgIHByb3BlcnRpZXMgbW9kdWxlLiBZb3UgY2FuIHVzZSBpdCBsaWtlIHtwcm9wZXJ0aWVzOmZvcnJlc3QuaG9tZX0sIHBsZWFzZSByZWZlciB0bwogICAgICAgIHRoZQogICAgICAgIHVwZGF0ZSBkb2N1bWVudGF0aW9uIGhvdyB0bwogICAgICAgIGNoYW5nZSB5b3VyIHtkZWZhdWx0czoqfSB7cHJvamVjdDoqfSBhbmQge2ZvcnJlc3Q6Kn0uPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi04MDApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODAwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAgRk9SLTgwMCAtIG1ha2UKICAgICAgICBmb3JyZXN0LnByb3BlcnRpZXMueG1sIChhcyBhZ2dyZWdhdGlvbiBvZiBhbGwgcHJvcGVydGllcykgYXZpYWJsZSB2aWEgY29jb29uOi8vLgogICAgICAgIFRoZSBsYXN0IHJlbWFpbmluZyBpc3N1ZSB3YXMgaW1wbGVtZW50aW5nIHRoZSBJdGVyYXRvciBnZXRBdHRyaWJ1dGVOYW1lcyBpbiB0aGUKICAgICAgICBGb3JyZXN0Q29uZk1vZHVsZS4gVG8gc2VlIGFsbCBhdmlhYmxlIHByb3BlcnRpZXMgYWRkCiAgICAgICAgb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5vdXRwdXQuaW5wdXRNb2R1bGUgYW5kIHJlcXVlc3QKICAgICAgICBjb2Nvb246Ly9tb2R1bGUucHJvcGVydGllcy5wcm9wZXJ0aWVzLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItOTE2KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTkxNikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgIEZPUi05MTYgLSBhZGRpbmcgc2l0ZS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKICAgICAgICBBcHBseWluZyBwYXRjaGVzIGZyb20gTWF0aGlldSBDaGFtcGxvbi4gVGhhbmtzIE1hdGhpZXUgZm9yIHlvdXIgY29udHJpYnV0aW9uLgogICAgICAgICBUaGFua3MgdG8gTWF0aGlldSBDaGFtcGxvbi48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICBVcGRhdGVkIHRoZSAKICAgICAgICBmb3JyZXN0LWNvcmUueGNvbmYgYW5kIGRlY2xhcmVkIHRoZSBjb3JlIGNvbXBvbmVudHMgdGhhdCBhcmUgbmVlZGVkIAogICAgICAgIGZvciBmbG93LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBmbG93IGluIGZvcnJlc3QuIFRoYW5rcyB0byBEYXZpZCBDcm9zc2xleS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEJECiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuYWJsZWQgaTE4biBieSBkZWZhdWx0IGluIGZyZXNoLXNpdGU6IGFzIHRoZSBkZWZhdWx0IGkxOG4gY29uZmlnIG5vdyByZXF1aXJlcwogICAgICAgIGFuIGV4cGxpY2l0IGxvY2FsZSBzcGVjaWZpY2F0aW9uICh1c2luZyBhbiBVUkwgcGFyYW1ldGVyIGZvciBleGFtcGxlKSwgdGhpcyBzaG91bGRuJ3QKICAgICAgICBhZmZlY3QgcGVvcGxlIHdobyBkbyBub3QgdXNlIGkxOG4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQkQKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ29tcGxldGVkIHRoZSBkZSBhbmQgZnIgdHJhbnNsYXRpb25zIG9mIHRoZSBmcmVzaC1zaXRlLCBhZGRlZCBmciBhbmQgZGUKICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgaW5kZXggcGFnZSBhcyBleGFtcGxlcyBvZiBsYW5ndWFnZSBzd2l0Y2hpbmcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItODg3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQkQKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTg4NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgTW92ZWQgTG9jYWxlQWN0aW9uIGFuZCBMb2NhbGVNYXRjaGVyIGNvbmZpZ3VyYXRpb25zIHRvIG1haW4gc2l0ZW1hcCwgYW5kIGNoYW5nZWQKICAgICAgICBJMThuVHJhbnNmb3JtZXIgdXNlIHRvIHRha2UgbG9jYWxlIGluZm8gZnJvbSBlbmNsb3NpbmcgTG9jYWxlQWN0aW9uIGV2ZXJ5d2hlcmUuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgRkFRIHRvIGV4cGxhaW4gdGhlIENvY29vbiBDYWNoZSBhbmQgc29tZSB3YXlzIHRvIGVuaGFuY2UgcmVzcG9uc2l2ZW5lc3MuCiAgICAgICAgSW5zcGlyZWQgYnkgY29tbWVudHMgZnJvbSBUb3JzdGVuIFN0b2xwbWFubi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmhhbmNlIHRoZSBleHBsYW5hdGlvbiBvZiBpbnRlZ3JhdGluZyAKICAgICAgICBEb2NCb29rIHNvdXJjZXMgdG8gYWxzbyBleHBsYWluCiAgICAgICAgaG93IHRvIHVzZSBDb250ZW50IEF3YXJlIFBpcGVsaW5lcyAoU291cmNlVHlwZUFjdGlvbikuCiAgICAgICBUaGFua3MgdG8gQnJpYW4gRHViZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgdGhlIEZBUSBhYm91dCBlZmZpY2llbnRseSBnZW5lcmF0aW5nCiAgICAgICAgc2luZ2xlIGRvY3VtZW50cy4KICAgICAgICBVc2UgJ3dnZXQnIG9yIEFudCB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIGZpbGVzLgogICAgICAgVGhhbmtzIHRvIEphbiBNYXRlcm5lLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmV2aWV3IGFuZCBlbmhhbmNlIHRoZSAKICAgICAgICBSZWxlYXNlIGRvYy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBkb2MgdG8gZXhwbGFpbgogICAgICAgIFNraW5zIGFuZCBEaXNwYXRjaGVyIHN0YXR1cy4gCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCB0byBBcGFjaGUtQW50LTEuNi41IHJlbGVhc2UsIGpzY2gtMC4xLjI4LCBhcGFjaGUtamFrYXJ0YS1jb21tb25zLW5ldC0xLjQuMQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTY5MCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjkwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2UgbG9jYXRpb25tYXAgdG8gcmVzb2x2ZSBpMThuIGNhdGFsb2d1ZXMuCiAgICAgICBUaGFua3MgdG8gQnJpYW4gRHViZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICBNb3ZlIGRvY3VtZW50YXRpb24gZnJvbSB0ZXh0IGZpbGUgaW50byBob3d0bwogICAgICAgIFJlbGVhc2UgZG9jIGFuZCBlbmhhbmNlIGl0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZS1hcnJhbmdlIGRvY3VtZW50YXRpb24gbWVudXMsIGFkZGVkIGJlc3QgcHJhY3RpY2UgYW5kIHByb2NlZHVyZXMgc2VjdGlvbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQUcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlZCB4ZXJjZXMgdG8gMi44LjAsIHhtbC1hcGlzIHRvIDEuMy4wMywgbG9nNGogdG8gMS4yLjEzIGFuZCBlaGNhY2hlIHRvIDEuMi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgZG9jdW1lbnQgYWJvdXQgcHJvamVjdAogICAgICAgIHJvbGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTgyNCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04MjQpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEhvd3RvLXYyMCBub3cgcHJvcGVybHkgaGFuZGxlcyBhL0BjbGFzcz1mb3JrIGV0Yy4gYXR0cmlidXRlIHRvIGVuYWJsZQogICAgICAgIGxpbmtzIHRvIG9wZW4gaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuCiAgICAgICBUaGFua3MgdG8gU3RldmUgTWFzb3Zlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTQ5MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi00OTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGluY29uc2lzdGVudCBsaW5lLWVuZGluZ3MgaW4gY29tbWVudHMgb2YgZ2VuZXJhdGVkIGh0bWwuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGluaXRpYWwgZ2xvc3NhcnkgdG8gZXhwbGFpbgogICAgICAgIHNvbWUgRm9ycmVzdCB0ZXJtaW5vbG9neS4KICAgICAgIFRoYW5rcyB0byBHYXZpbi48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTc1NikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NTYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImNpdGF0aW9ucyIuIFRoYW5rcyB0byBHYXZpbiBmb3IKICAgICAgICB0dXJuaW5nIHRoZSBjb250cmlidXRpb24gaW50byBhIHBsdWdpbi4KICAgICAgICBVc2UgaW5wdXQgZG9jcyB0aGF0IGFyZSBsaXN0cyBvZiBjaXRhdGlvbnMuCiAgICAgICBUaGFua3MgdG8gUm9zcyBHYXJkbGVyLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNzU1KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTc1NSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiZ2xvc3NhcnkiLiBUaGFua3MgdG8gR2F2aW4gZm9yCiAgICAgICAgdHVybmluZyB0aGUgY29udHJpYnV0aW9uIGludG8gYSBwbHVnaW4uCiAgICAgICAgRW5hYmxlIGdsb3NzYXJ5IGlucHV0OiBhIGxpc3Qgb2YgdGVjaG5pY2FsIHRlcm1zIGFuZCBkZWZpbml0aW9ucy4KICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJvZHQiLgogICAgICAgIFVzZSBPcGVuRG9jdW1lbnQgT0RUIGFzIGlucHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBub3RlIGFib3V0IHVzaW5nIGVudGl0eSBjYXRhbG9ncyBmb3IgRFREcyBldGMuIGZvcgogICAgICAgIHBsdWdpbnMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgQ0QKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSW1wcm92ZWQgdGhlIGV4cGxhbmF0aW9uIG9mCiAgICAgICAgdXNpbmcgcGx1Z2luczoKICAgICAgICBob3cgdGhleSBhcmUgZGVjbGFyZWQsIHdoYXQgdmVyc2lvbiBvZiBhIHBsdWdpbiBpcyB1c2VkLCB3aGF0IGxvY2F0aW9ucyBhcmUKICAgICAgICBzZWFyY2hlZCBmb3IgcGx1Z2lucyBzb3VyY2VzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTg0MCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi04NDApCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgdGhlIEZBUSBhYm91dCBlZmZpY2llbnRseSBnZW5lcmF0aW5nCiAgICAgICAgc2luZ2xlIGRvY3VtZW50cy4KICAgICAgIFRoYW5rcyB0byBDbGF5IExlZWRzLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIEZBUSBhYm91dCB1c2luZyBvbGRlciB2ZXJzaW9ucyBvZiBzcGVjaWZpYyBwbHVnaW5zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+YnVpbGQgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmJ1aWxkIGFkZAogICAgICAgIGJ5CiAgICAgICAgQ0QKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIG5ldyBidWlsZCB0YXJnZXQgImNsZWFuLWJ1aWxkIi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi04NDIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODQyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgc3VwcG9ydCB0byB0aGUgdGlncmlzIHNraW4gZm9yIGhlYWRlci9tZXRhIHRhZ3MgaW4geGRvYyBpbnB1dCBkb2N1bWVudHMuCiAgICAgICBUaGFua3MgdG8gQnJpYW4gRHViZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIENECiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFibGUgdG8gZGVjbGFyZQogICAgICAgIGFkZGl0aW9uYWwgc291cmNlcyBmb3IgcGx1Z2lucy4gQXNzaXN0cyB3aXRoIGRldmVsb3BtZW50IG9mIHByaXZhdGUKICAgICAgICBhbmQgbG9jYWwgcHJvamVjdC1zcGVjaWZpYyBwbHVnaW5zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBkZW1vIHBhZ2UgdG8gc2VlZCBzaXRlIGZvciAiVXNpbmcgU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzIChTVkcpIi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBMaW5rIGZyb20gd2hpdGVib2FyZC9mb3JyZXN0ZG9jL1JFQURNRS50eHQgdG8gc29tZSBwYXN0IG1haWwgZGlzY3Vzc2lvbgogICAgICAgIHRvIGVuY291cmFnZSBpdHMgZGV2ZWxvcG1lbnQuIEZvcnJlc3Rkb2MgaXMgYSBKYXZhZG9jLWxpa2UvU291cmNlY29kZS9Eb2N1bWVudGF0aW9uCiAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItODE4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTgxOCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgRm9ycmVzdGJvdCBkZXBsb3kuc2NwIHdvcmtzdGFnZSBub3cgdXNlcyBrZXlmaWxlL3Bhc3NwaHJhc2UgaW4gcHJlZmVyZW5jZSwKICAgICAgICB0aGVuIGZhbGxiYWNrIHRvIHJlbW90ZSBwYXNzd29yZC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgcGFnZSBmb3IgdGhhbmtzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBGQVEgYWJvdXQgam9iIHBvc3RpbmdzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTgwNikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItODA2KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXRyaWV2ZSBpMThuIGNhdGFsb2d1ZSBmcm9tIHdoYXRldmVyIHNraW5zIGRpcmVjdG9yeSBpcyBpbiB1c2UuCiAgICAgICBUaGFua3MgdG8gVG9yc3RlbiBTdG9scG1hbm4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBGU08KICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGV4cGxhbmF0aW9uIG9mIHByb2Nlc3NpbmcgdG8gdGhlIHBhdGh1dGlscyBzdHlsZXNoZWV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmFibGUgb3B0aW9uYWwgcHJpbnRpbmcgb2YgaW1hZ2UgYWx0IHRleHQgaW4gUERGcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJzZXJ2ZXJTdGF0dXMiLgogICAgICAgIFVzZXMgdGhlIFN0YXR1c0dlbmVyYXRvciB0byBzaG93IENvY29vbidzIG9wZXJhdGluZyBlbnZpcm9ubWVudAogICAgICAgIGFuZCBzaG93cyB0aGUgY29udGVudHMgb2YgdGhlIGNhY2hlIHN0b3Jlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NzksRk9SLTc4MCxGT1ItNzIyKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi03NzksRk9SLTc4MCxGT1ItNzIyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGRhdGUgdGhlIEZvcnJlc3QgcGx1Z2luIGZvciB0aGUgWE1MbWluZCBYTUwgRWRpdG9yIGF0IAogICAgICAgIHRvb2xzL3h4ZQogICAgICAgVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUGx1Z2luOiBQaG90b0dhbGxlcnkuCiAgICAgICAgQXV0b21hdGVkIHRoZSBpbWFnZSB2YXJpYW50IChlLmcuIHRodW1iLCBzbWFsbCkgY3JlYXRpb24uIE5vdGUgdGhhdCB0aGlzCiAgICAgICAgaXMgbm90CiAgICAgICAgYmFja3dhcmQtY29tcGF0aWJsZSwgc28gZXhpc3RpbmcgdXNlcnMgbmVlZCB0byBtb3ZlIG9yaWdpbmFsIGltYWdlcwogICAgICAgIGZyb20gdGhlIG9sZCAiYmlnIiBkaXJlY3RvcnkgYW5kIHJlbW92ZSB0aGUgInByZXZpZXciIGFuZCAic21hbGwiIGRpcmVjdG9yaWVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZ3JhZGUgb3VyIHBhY2thZ2VkIENvY29vbiB0byBjb2Nvb24tMi4yLjAtZGV2LXIzNTE5OTAgYW5kIGVuaGFuY2VkIHRoZSBub3RlcwogICAgICAgIGFib3V0IGhvdyB0byB1cGdyYWRlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyBza2luY29uZiBwYXJhbWV0ZXIgImRpc2FibGUtY29weXJpZ2h0LWZvb3RlciIgKGRlZmF1bHQ9ZmFsc2UpCiAgICAgICAgdG8gbm90IHNob3cgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gaHRtbCBwYWdlIGZvb3Rlci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkCiAgICAgICAgICAoYnVnIEZPUi03NzgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzc4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgRkFRIGFib3V0IAogICAgICAgIEVuYWJsaW5nIENvY29vbiBDaGVja3N1bS4KICAgICAgIFRoYW5rcyB0byBQYXVsIEtyb25lbndldHRlci48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW50ZXJuYWwgcGx1Z2luICJEZXZUb29scyIuCiAgICAgICAgSW50ZW5kZWQgZm9yIHZhcmlvdXMgZGV2ZWxvcG1lbnQtcmVsYXRlZCB0YXNrcywgZS5nLgogICAgICAgIHB1Ymxpc2ggYSBwYWdlIHRvIHRoZSBsb2NhbCBidWlsZCBkaXJlY3RvcnkgZnJvbSB3aXRoaW4gJ2ZvcnJlc3QgcnVuJy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAiQW5ha2lhIi4KICAgICAgICBPdXRwdXQgYXMgdGhlIEFuYWtpYSAieGRvYyIgZm9ybWF0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBleHBsYW5hdGlvbiBvZgogICAgICAgIFVzaW5nIENvY29vbiBzaXRlbWFwIGV4ZWN1dGlvbiBsb2dnZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuc3VyZSB0aGF0IGNvbnRlbnQgZXhpc3RzIGJlZm9yZSBmb3JyZXN0IHN0YXJ0cy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBKUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgYSBuZXcgeHNsdCB0ZW1wbGF0ZSAiYWRkLmNsYXNzIiB0byBwcm9wZXJseSBhcHBlbmQgZXh0cmEgY2xhc3MgYXR0cmlidXRlcwogICAgICAgIHRvIG5vdGV8d2FybmluZ3xmaXhtZXxjb2RlIGVsZW1lbnRzIHRvIGVuYWJsZSBleHRyYSBDU1MgY2xhc3NpZmljYXRpb24uCiAgICAgICAgRGlmZiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXZpZXcgYW5kIHN5bmNocm9uaXNlIG91ciBDb2Nvb24gY29uZmlndXJhdGlvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBDRAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAicGhwIiB0byBpbnRlZ3JhdGUgcGhwIGNhbGxzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBGQVEgI2NyYXdsZXIgdG8gZXhwbGFpbiBob3cgdGhlIENvY29vbiBjcmF3bGVyIGdhdGhlcnMgbGlua3MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIG5vdGVzIGFib3V0IGhvdyB0byB1c2UgdGhlIElzc3VlIFRyYWNrZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIGxlbnlhLnpvbmUgCiAgICAgICAgc2l0ZSB0byB0aGUgZGlzcGF0Y2hlciBzZWN0aW9uIGluIHRoZSBsaXZlIHNpdGVzLiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBOZXcgc2tpbmNvbmYgcGFyYW1ldGVyICJkaXNhYmxlLWNvcHlyaWdodC1mb290ZXIiIChkZWZhdWx0PWZhbHNlKQogICAgICAgIHRvIG5vdCBzaG93IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIGh0bWwgcGFnZSBmb290ZXIuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVXBkYXRlIHRoZSBub3RlcyBvbiBwYXRjaCBzdWJtaXNzaW9uLgogICAgICAgIFRlY2huaXF1ZXMgc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgQ2FsbWJhY2ggYW5kIFJvc3MgR2FyZGxlci4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi01ODgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU4OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgRm9ycmVzdENvbmZNb2R1bGUgYXMgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBjb25maWd1cmF0aW9uIHN5c3RlbS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi0zODgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTM4OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQSAiaGFsZiB3YXkiIHNvbHV0aW9uIHRvIHVzaW5nIHBsdWdpbnMgaW4gcGxhY2UuIE5vdGUgdGhhdCBpZiB5b3UgbW9kaWZ5CiAgICAgICAgeW91ciBwbHVnaW4gY29kZSB5b3Ugd2lsbCBzdGlsbCBuZWVkIHRvIGRvICJhbnQgbG9jYWwtZGVwbG95IiB0byBzZWUgdGhlCiAgICAgICAgY2hhbmdlcy4gVGhpcyBwYXRjaCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBvbiB0aGUKICAgICAgICBmaXJzdCBydW4uCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNTY4KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU2OCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSW1wcm92ZWQgZm9ycmVzdGJvdCBkb2NzLgogICAgICAgVGhhbmtzIHRvIFJpY2hhcmQgQ2FsbWJhY2guPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmhhbmNlIHRoZSBGQVEgI3NpbmdsZS1kb2N1bWVudCBhYm91dCAicHJvamVjdC5zdGFydC11cmkiIHRvIGNvbnRyb2wgd2hpY2ggZmlsZXMgdG8gcHJvY2Vzcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFeHBsYWluIGhvdyBkZXZlbG9wZXJzIGNhbiBhZGQgc2l0ZXMgdG8gRXhhbXBsZSBzaXRlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgcmVtb3ZlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgcmVtb3ZlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVtb3ZlIHhjb25mIHN1cHBvcnQgZm9yIHBsdWdpbnMuIENvY29vbiBoYXMgbW92ZWQgYXdheSBmcm9tIHRoaXMKICAgICAgICBYQ29uZlRvb2xUYXNrIHhwYXRjaCB0ZWNobmlxdWUuCiAgICAgICAgRGlmZiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NTEpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzUxKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBWYXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KICAgICAgIFRoYW5rcyB0byBSaWNoYXJkIENhbG1iYWNoLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgUmVkdWNlIHNvbWUgbG9nIG1lc3NhZ2VzIGR1cGxpY2F0aW9uLiBUaWR5IHVwIHRoZSBsb2cgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgIEFkZCBhIGNvbW1lbnRlZCBleGFtcGxlIG9mIGFkZGluZyBjb250ZXh0dWFsIGluZm8gdG8gb3RoZXIgbG9ncy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NzEpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTc3MSkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgSW1wcm92ZSBzeW1saW5rIHJlc29sdXRpb24gYW5kIGZpeCBpbmNvcnJlY3QgYXJndW1lbnQgcGFzc2luZwogICAgICAgIGluIHRoZSBiaW4vZm9ycmVzdCBzaGVsbCBzY3JpcHQuCiAgICAgICBUaGFua3MgdG8gUmljaGFyZCBDYWxtYmFjaC48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgbmV3IHNpdGUgc2VlZGluZyB0YXJnZXRzIGFuZCBhIG5ldyBidXNpbmVzcyBzZWVkIHRhcmdldC4KICAgICAgICBUaGlzIGFsbG93cyBmb3IgaW50ZXJhY3RpdmUgY3JlYXRpb24gb2Ygc2VlZCBzaXRlcyAtIGV4aXN0aW5nCiAgICAgICAgJ2ZvcnJlc3Qgc2VlZCcgYmVoYXZpb3VyIGlzIHVuY2hhbmdlZCB3aGljaCBpcyBlcXVpdmFsZW50IHRvICdmb3JyZXN0IHNlZWQtc2FtcGxlJy4KICAgICAgICBOZXcgb25lcyBhcmUgJ2ZvcnJlc3Qgc2VlZC1idXNpbmVzcycgYW5kICdmb3JyZXN0IHNlZWQtYmFzaWMnLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuYWJsZSB1c2Ugb2YgY29tbW9uIGNoYXJhY3RlciBlbnRpdGllcyBpbiBza2luY29uZi54bWwsCiAgICAgICAgZS5nLiBhY2NlbnRlZCBjaGFyYWN0ZXJzIGFuZCB0cmFkZW1hcmsgc3ltYm9scy4KICAgICAgIFRoYW5rcyB0byBQYXVsIERldmluZS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2UgZXRjL1JFTEVBU0VfTk9URVMudHh0CiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgRlNPCiAgICAgICAgOgogICAgICAgIAogICAgICAgICAgICBDaGFuZ2VkIGhhbmRsaW5nIG9mIHRhYmxlIGVsZW1lbnRzIHdpdGggY2xhc3MtYXR0cmlidXRlcyBpbiBzb3VyY2U6CiAgICAgICAgICAgIFRhYmxlIGVsZW1lbnRzIHcvbyBjbGFzcyBlbGVtZW50cyB3aWxsIHJlY2VpdmUgc3RhbmRhcmQgRm9ycmVzdCBzdHlsaW5nIGxpa2UgYmVmb3JlCiAgICAgICAgICAgIChjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjEiIGNsYXNzPSJGb3JyZXN0VGFibGUiKQogICAgICAgICAgICB3aGlsZSBlbGVtZW50cyB0aGF0IGhhdmUgY2xhc3Mgd2lsbCBwYXNzIHVuY2hhbmdlZC4KICAgICAgICAgICAgTm90ZTogVG8gc3R5bGUgdGFibGVzIHdpdGggY2xhc3MgZWxlbWVudHMgbGlrZSBiZWZvcmUgeW91IGhhdmUgdG8gYWRkIHN0eWxpbmcgY29kZQogICAgICAgICAgICBpbiB0aGUgZXh0cmEtY3NzLXNlY3Rpb24gb2Ygc2tpbmNvbmZpZy4KICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEZTTwogICAgICAgIDoKICAgICAgICAKICAgICAgICAgICAgRml4ZWQgcHJvYmxlbXMgd2l0aCBkaXNhcHBlYXJpbmcgb2YgaWQtYXR0cmlidXRlcyBpbiBpbWctZWxlbWVudCBhbmQgc2V2ZXJhbCBvdGhlcnMuICAgIAogICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBzZWN0aW9uIGFib3V0IHVzaW5nIG5ldy9leHBlcmltZW50YWwgZmVhdHVyZXMgKGUuZy4gTG9jYXRpb25tYXAsIERpc3BhdGNoZXIpIHRvZ2V0aGVyIHdpdGggcGx1Z2lucy4KICAgICAgICBTZWUgSG93dG8gQnVpbGQgUGx1Z2lucyBkb2MuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIHNlY3Rpb24gYWJvdXQgbWFuYWdpbmcgdGhlIHBsdWdpbnMgZGVzY3JpcHRvcnMgdG8KICAgICAgICBIb3d0byBCdWlsZCBQbHVnaW5zIGRvYy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBuZXcgImNsZWFuIiB0YXJnZXRzLiBEb2luZyAnZm9ycmVzdCBjbGVhbi1zaXRlJyB3aWxsIHJlbW92ZQogICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvamVjdCdzIGdlbmVyYXRlZCBkb2N1bWVudHMgZGlyZWN0b3J5LgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuLXdvcmsnIHdpbGwgcmVtb3ZlIHRoZSBwcm9qZWN0J3Mgd29yayBkaXJlY3RvcmllcwogICAgICAgICh1c3VhbGx5IGJ1aWxkL3RtcCBhbmQgYnVpbGQvd2ViYXBwIHdoaWNoIGluY2x1ZGUgdGhlIENvY29vbiBjYWNoZQogICAgICAgIGFuZCB0aGUgQ29jb29uIGxvZ3MpLgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuJyB3aWxsIHJlbW92ZSBib3RoIHNlY3Rpb25zLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgICBBZGRlZCAKICAgICAgICBMb2NhdGlvbm1hcFNvdXJjZUZhY3RvcnkuamF2YS4gV2l0aCB0aGlzIGl0IGlzIHBvc3NpYmxlIHRvIHJlcXVlc3QgCiAgICAgICAgbG9jYXRpb25tYXAgc291cmNlIHZpYSBsbTovL215LWxvY2F0aW9uIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB1c2UgaXQgCiAgICAgICAgd2l0aG91dCBjb250YWN0aW5nIGEgaW5wdXQgbW9kdWxlIGluIGphdmEgYW5kIGFueSBvdGhlciBmaWxlcy4gRGlmZiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgQWRkZWQgdmFyaWFibGUuaGVscGVyLnhzbCAKICAgICAgICB0byB0aGUgY29yZSwgc2hvdWxkIGJlIGVuaGFuY2VkIGJ5IG1hdGNoaW5nIHRoZSAKICAgICAgICBkZWZhdWx0LmZvcnJlc3QucHJvcGVydGllcy54bWwuIFRoaXMgeHNsIHdpbGwgcHJvZHVjZSBhbGwgdmFyaWFibGVzIHdlIAogICAgICAgIHVzZSBpbiBza2lucyB0byB0aGUgbmV3IHByb3BlcnR5IHN5c3RlbS4gTW92ZWQgcGF0aHV0aWxzLnhzbCB0byB0aGUgCiAgICAgICAgY29yZSBmcm9tIHRoZSBza2lucy4gRGlmZiAKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi03NjgpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzY4KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgIEFkZGVkIHNlY3Rpb24gImxpbmtpbmcgdG8gZXh0ZXJuYWwgY3NzIGZpbGVzIiB0byBob3d0by1zdHJ1Y3R1cmVyLWRzbCBkb2MuCiAgICAgICBUaGFua3MgdG8gUGF1bCBCb2xnZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiAiTm90ZVRha2luZyIuCiAgICAgICAgQWRkcyBhIGZvcm0gdG8gYSBwYWdlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW50ZXIgbm90ZXMgcmVsYXRpbmcgdG8gdGhlIHBhZ2UuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIGhlbHBlciAKICAgICAgICBzdHlsZXNoZWV0cyB0byBsb2NhdGlvbm1hcCBhbmQgY29yZSBzdHlsZXNoZWV0cy4gZ2VuZXJhdGVJZC54c2wgKHdpbGwgCiAgICAgICAgZ2VuZXJhdGUgYSB1bmlxdWUgaWQpIGFuZCByZXBsYWNlQ2hhcnNJblN0cmluZy54c2wgKHdpbGwgZmluZCBhbmQgCiAgICAgICAgcmVwbGFjZSBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcpIERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgIDoKICAgICAgICAKICAgICAgICBDbGFyaWZ5IHNvbWUgY29uZnVzaW5nIG5vdGVzIGFib3V0IHNpdGUvQGhyZWYgaW4gc2VlZHMgeGRvY3Mvc2l0ZS54bWwgZmlsZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItNjk3KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY5NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICBGaW5pc2ggcmVuYW1pbmcgb2YgZmlsZXMgZm9yIGEtdG8tYi54c2wgbmFtaW5nIGNvbnZlbnRpb24uIAogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIENECiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhIERldnMgbWVudSB0byB0b29scy9mb3JyZXN0YmFyIHRvIGhlbHAgd2l0aCB0ZXN0aW5nIGludGVybWVkaWF0ZQogICAgICAgIENvY29vbiBwaXBlbGluZXMuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNTgxLEZPUi03MjApCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTgxLEZPUi03MjApCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEZpeGVkIGFuZCBlbmhhbmNlZCB0aGUgRm9ycmVzdCBwbHVnaW4gZm9yIHRoZSBYTUxtaW5kIFhNTCBFZGl0b3IgYXQKICAgICAgICB0b29scy94eGUKICAgICAgIFRoYW5rcyB0byBTanVyIE4uIE1vc2hhZ2VuLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItMTgwLEZPUi03MTYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMTgwLEZPUi03MTYpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVwZGF0ZWQgdG9vbHMvZm9ycmVzdGJhciB0byBiZSBjb21wYXRpYmxlIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIEZpcmVmb3guCiAgICAgICBUaGFua3MgdG8gQWRkaXNvbiBCZXJyeS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIERlc2NyaWJlIHRoZSAKICAgICAgICBzdGF0dXMgbWVzc2FnZXMKICAgICAgICB0aGF0IGFyZSBpc3N1ZWQgYnkgQ29jb29uIENMSSBkdXJpbmcgcHJvY2Vzc2luZyBvZiBlYWNoIGRvYy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgVGhlIGJyb2tlbi1saW5rcyBmaWxlIGlzIG5vdyBjb3BpZWQgaW50byB0byB0aGUgc2l0ZSByb290IGFzCiAgICAgICAgImJyb2tlbi1saW5rcy54bWwiIHNvIHRoYXQgd2hlbiBidWlsZGluZyB3aXRoIEZvcnJlc3Rib3QKICAgICAgICB5b3UgY2FuIGVhc2lseSB2aWV3IGl0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTcxMCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNzEwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBDb3JyZWN0bHkgaGFuZGxlIHczYy14bWwtc2NoZW1hIHJ1bGVzIGluIAogICAgICAgIFNvdXJjZVR5cGVBY3Rpb24uCiAgICAgICBUaGFua3MgdG8gSm9zaWFzIFRob2VueS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTIwMCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItMjAwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZXZpZXdlZCBhbGwgc2l0ZW1hcHMgdG8gdXNlIGxvY2F0aW9ubWFwIHJlZmVyZW5jZXMgKGxtOikuCiAgICAgICAgQXQgdGhlIHNhbWUgdGltZSB3ZSBjaGFuZ2VkIGZpbGVuYW1lcyBvZiBjb3JlIHN0eWxlc2hlZXRzIHRvIGZvbGxvdyAKICAgICAgICBhIGZpbGVuYW1lIGNvbnZlbnRpb24gKGUuZy4gaHRtbDJkb2N1bWVudC54c2wgPSZndDsgaHRtbC10by1kb2N1bWVudC54c2wpCiAgICAgICAgd2hpY2ggZW5hYmxlcyBhdXRvbWF0ZWQgbG9jYXRpb25tYXAgbWF0Y2hlcy4KICAgICAgICBUaGFua3MgdG8gdGhlIG1hbnkgcGVvcGxlIHdobyB3ZXJlIGludm9sdmVkIHdpdGggYWRkcmVzc2luZyB0aGlzIGlzc3VlLgogICAgICAgIFNlZSB0aGUgY29tbWl0IGxvZ3MgYXNzb2NpYXRlZCB3aXRoIEZPUi0yMDAuCiAgICAgICBUaGFua3MgdG8gQ29tbXVuaXR5LjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItMjAwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yMDApCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBub3RlcyBhYm91dCBuYW1pbmcgY29udmVudGlvbiBmb3IgbG9jYXRpb25tYXAgcmVmZXJlbmNlcy4KICAgICAgICBHYXRoZXJlZCBmcm9tIGEgRm9ycmVzdEZyaWRheSBJUkMgc2Vzc2lvbiAodGhhbmtzIHRvIFRpbSBXaWxsaWFtcyBmb3Igd3JpdGluZyB0aGVtIHVwKS4KICAgICAgICBTZWUgbG9jYXRpb25tYXAgZG9jcy4KICAgICAgIFRoYW5rcyB0byBDb21tdW5pdHkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiWERvYyIuCiAgICAgICAgRm9ycmVzdCB4ZG9jIGlucHV0IHRvIGludGVybmFsIFhIVE1MMi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiAieGh0bWwyIi4gU3RhcnRlZCB3b3JrIG9uIHhodG1sIGluIHRoZSBjb3JlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIEpKUAogICAgICAgIDoKICAgICAgICAKICAgICAgICBVcGdyYWRlIG91ciBwYWNrYWdlZCBDb2Nvb24gdG8gY29jb29uLTIuMi4wLWRldi1yMjc5OTg3IGFuZCBlbmhhbmNlZCB0aGUgbm90ZXMKICAgICAgICBhYm91dCBob3cgdG8gdXBncmFkZS4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICBBZGRlZCBiYXNpYyBpbnN0cnVjdGlvbnMgdG8gCiAgICAgICAgZGVwbG95IGFuZCBpbnN0YWxsIHRoZSBmb3JyZXN0YmFyIGZyb20gdGhlIHNvdXJjZSBhcyByZWFkbWUudHh0RGlmZiAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIFJlbW92ZWQgCiAgICAgICAgdGhlIHByb2plY3QudGhlbWUtZGlyIHByb3BlcnR5IGJ5IGFkZGluZyBpdCB0byB0aGUgbG0gbGlrZSBzdWdnZXN0IGJ5IAogICAgICAgIFJvc3MuIERpZmYgCiAgICAgICAgIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgQ2hhbmdlZCB0aGUgJ2xvY2FsIAogICAgICAgIGZvcnJlc3QnIGNhcHRpb24gdG8gaG9zdDpwb3J0IGZvcm1hdC4gQWRkZWQgbG9jYWxob3N0IGFzIG9wdGlvbi4gYWRkZWQgCiAgICAgICAgc3RydWN0dXJlciB4bWwgdmlldyB0byBkZXZzLiBEaWZmIAogICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgQWxsb3dlZCBhcyB3ZWxsIAogICAgICAgIGxvY2FsaG9zdCBhcyBsb2NhbCBhZGRyZXNzIGZvciBqZXR0eSBmb3IgdGhlIGZvcnJlc3RiYXIuIERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmRvY3MgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi02NjYpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmRvY3MgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY2NikKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQ2xhcmlmeSB0aGUgRkFRIGFib3V0IHVzaW5nCiAgICAgICAgcmF3IEhUTUwKICAgICAgICBkb2NzIHdpdGggbm8gZGVjb3JhdGlvbi4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi01NTUpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTU1KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBUaGUgeG1sIGNvbW1lbnRzIGZyb20gc291cmNlIGZpbGVzIHdlcmUgbm90IGJlaW5nIGdlbmVyYXRlZCB0byB0aGUgb3V0cHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBDb2Nvb24gVmFsaWRhdGlvbiBCbG9jay4gVXNlcyB0cmFuc2Zvcm1lcnMgdG8gZW5hYmxlIFJFTEFYIE5HIHZhbGlkYXRpb24gYW5kCiAgICAgICAgVzNDIFhNTCBTY2hlbWEgdmFsaWRhdGlvbiB1c2luZyBKaW5nIGFuZCBYZXJjZXMuCiAgICAgICAgU2VlIGRvY3VtZW50YXRpb24uCiAgICAgICBUaGFua3MgdG8gUGllciBGdW1hZ2FsbGkuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiZWNzIi4KICAgICAgICBVc2UgdGhlIHJlc3BvbnNlcyBmcm9tIEFtYXpvbiB3ZWIgc2VydmljZXMgKEVDUykgYXMgaW5wdXQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgV2Ugbm93IGhhdmUgYSByZWd1bGFyIDI0LWhvdXIgSVJDIHNlc3Npb24gb25jZSBwZXIgbW9udGguIERldmVsb3BlcnMgZ2V0IHRvZ2V0aGVyLgogICAgICAgIFNlZSBGb3JyZXN0RnJpZGF5LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTY2MCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjYwKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luIGZvciBMZW55YSBpbnRlZ3JhdGlvbi4KICAgICAgIFRoYW5rcyB0byBKb2FjaGltIEJyZWl0c3ByZWNoZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiBmb3IgIkJsb2ciLgogICAgICAgIFVzZSBhbiBYUGF0aERpcmVjdG9yeSBnZW5lcmF0b3IgdG8gcHVibGlzaCBpbmRpY2VzIG9mIGFydGljbGVzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCB0aGUgYmVnaW5uaW5ncyBvZiBhIHNpdGVtYXAgYW5hbHlzaXMgdG9vbCB0byB0aGUgd2hpdGVib2FyZC4KICAgICAgICBEb2Vzbid0IGRvIG11Y2ggYXQgdGhlIG1vbWVudC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiBmb3IgIlJlc3VtZSIuCiAgICAgICAgVXNlIGlucHV0IGRvY3MgaW4geG1scmVzdW1lIGZvcm1hdC4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkCiAgICAgICAgICAoYnVnIEZPUi01OTcpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBSREcKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTU5NykKICAgICAgICAKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiBmb3IgIkdvb2dsZVNpdGVtYXAiLgogICAgICAgIEFjY2VzcyBhIGxpc3Qgb2YgcGFnZXMgaW4gIkdvb2dsZSBTaXRlbWFwIiBmb3JtYXQuCiAgICAgICBUaGFua3MgdG8gUmFzaWsgUGFuZGV5LjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBXVFAgMC43IGNvbXBhdGFiaWxpdHkgZm9yIEVjbGlwc2UgcGx1Z2luLgogICAgICAgIENsYXJpZnkgaW5zdGFsbGF0aW9uIG5vdGVzLgogICAgICAgVGhhbmtzIHRvIEFsYW4gQ2hhbmRsZXIuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi01NzIpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNTcyKQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGQgQ29jb29uIFByb2ZpbGVyIGJsb2NrLiBVc2UgdGhpcyBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbGlzdCB0aGUKICAgICAgICB2YXJpb3VzIHNpdGVtYXAgcGlwZWxpbmVzIGFuZCBjb21wb25lbnRzIHRoYXQgYXJlIGJlaW5nIHVzZWQsIGhvdwogICAgICAgIG11Y2ggdGltZSB3YXMgdXNlZCBieSBlYWNoLCB3aGV0aGVyIGVhY2ggY29tcG9uZW50IHVzZXMgdGhlIENvY29vbgogICAgICAgIGNhY2hlLCBhbmQgc2hvdyB0aGUgYWN0dWFsIHhtbCBkYXRhLgogICAgICAgIFNlZSBkb2N1bWVudGF0aW9uLgogICAgICAgIFRoYW5rcyB0byBSb24gQmxhc2Noa2UgZm9yIHRoZSBzdWdnZXN0aW9uLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBEb2N1bWVudGluZyBzb21lIG9mIHRoZSBsb2NhdGlvbm1hcCBzeW50YXggYW5kIG5hbWluZyBjb252ZW50aW9ucwogICAgICAgIGFzIGNvbW1lbnRzL2V4YW1wbGVzIAogICAgICAgIHVudGlsIGl0IGNhbiBiZSBkb25lIG1vcmUgZm9ybWFsbHkuCiAgICAgICAgU2VlICdmb3JyZXN0IHNlZWQtc2FtcGxlJyBhbmQKICAgICAgICBsb2NhdGlvbm1hcCBkb2NzLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRXVwogICAgICAgIDoKICAgICAgICAKICAgICAgICBVc2UgbG9jYXRpb25tYXAncyBtb3VudGluZyBjYXBhYmlsaXR5IHRvIGFsbG93IHNlbGVjdGl2ZSBwcm9qZWN0IGxvY2F0aW9uIG92ZXJyaWRlcy4KICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUV1cKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGxvY2F0aW9ubWFwIHNlbGVjdG9yIGJhc2VkIG1vdW50aW5nIChhbmQgcHJvamVjdC1iYXNlZCBtb3VudGluZykuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFdXCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBsb2NhdGlvbm1hcCBtb3VudGluZyBjYXBhYmlsaXR5LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTY0OSkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi02NDkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFRoZSBobGluayBhbmQgdmxpbmsgY29sb3JzIHdlcmUgbm90IHNldCBjb3JyZWN0bHkgYnkgU2tpbmNvbmZUcmFuc2Zvcm1lci4KICAgICAgIFRoYW5rcyB0byBEYXZlIEJyb3NpdXMuPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgdXBkYXRlCiAgICAgICAgICAoYnVnIEZPUi02MDQpCiAgICAgICAgPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgdXBkYXRlCiAgICAgICAgYnkKICAgICAgICBEQwogICAgICAgICAgKGZpeGVzIGJ1ZyBGT1ItNjA0KQogICAgICAgIAogICAgICAgIDoKICAgICAgICAKICAgICAgICBTeW5jaHJvbmlzZSB0aGUgYXBwZWFyYW5jZSBvZiB3YXJuaW5nLCBmaXhtZSwgYW5kIG5vdGUgZWxlbWVudHMKICAgICAgICBpbiB0aGUgcGVsdCBza2luLgogICAgICAgVGhhbmtzIHRvIEdhdmluIE1jRG9uYWxkLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEVuaGFuY2VkIG5vdGVzIGFib3V0IHVzaW5nIHBsdWdpbnMuCiAgICAgICBUaGFua3MgdG8gUGhpbGxpcCBFdmVucy48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTU5MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01OTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICAgIFRoYW5rcyB0byBhc3Npc3RhbmNlIGZyb20gR2F2aW4gTWNEb25hbGQuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgYWN0aW9ucyBpbiB0aGUgbG9jYXRpb25tYXAuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFBsdWdpbnMgY2FuIG5vdyBkZWZpbmUgdGhlaXIgb3duICoueGNvbmYgZmlsZSB0byBhZGQgY29uZmlndXJhdGlvbgogICAgICAgIGluZm9ybWF0aW9uIHRvIGNvY29vbi54Y29uZi4gU2ltcGx5IHBsYWNlIHlvdXIgKi54Y29uZiBmaWxlIGluCiAgICAgICAgUExVR0lOX0hPTUUvY29uZi8qLnhjb25mLiBOb3RlIHRoYXQgY2hhbmdlcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24KICAgICAgICBmaWxlIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIEZvcnJlc3QgaGFzIGJlZW4gcmVzdGFydGVkLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZCBhbgogICAgICAgICJldmVudHMiCiAgICAgICAgc2VjdGlvbiB0byBvdXIgU1ZOIHRvIGhvbGQgbWF0ZXJpYWxzIGZvciBnYXRoZXJpbmdzIG9mIGRldmVsb3BlcnMgdGhhdAogICAgICAgIGhhdmUgYmVlbiBoZWxkIG91dHNpZGUgdGhlIG1haWxpbmcgbGlzdCBjb21tdW5pdHkuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIGFkZAogICAgICAgIGJ5CiAgICAgICAgREMKICAgICAgICA6CiAgICAgICAgCiAgICAgICAgQWRkIGEgbmV3IGRvY3VtZW50CiAgICAgICAgSG93IGJlIGEgRm9ycmVzdCBkZXZlbG9wZXIuCiAgICAgICAgUHJvdmlkZXMgc29tZSB0aXBzIGFuZCBwcm9jZWR1cmVzIGZvciBhbGwgYXNwZWN0cyBvZiB1c2luZyBGb3JyZXN0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTU2OCkKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyB1cGRhdGUKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01NjgpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIENsYXJpZnkgZG9jdW1lbnRhdGlvbiBmb3IgRm9ycmVzdGJvdC4KICAgICAgIFRoYW5rcyB0byBBZGRpc29uIEJlcnJ5LjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZAogICAgICAgICAgKGJ1ZyBGT1ItNTg5KQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01ODkpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBvdXRwdXQgcGx1Z2luIGZvciAidm9pY2UiLgogICAgICAgIFJlYWQgYSBkb2N1bWVudCB1c2luZyBhIHZvaWNlIGVuYWJsZWQgYnJvd3NlciBzdWNoIGFzIE9wZXJhLgogICAgICAgVGhhbmtzIHRvIFRvbSBIQU5BWC48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQKICAgICAgICAgIChidWcgRk9SLTU5MikKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi01OTIpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGU8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBFbmhhbmNlZCB0aGUgaW5pdGlhbCBFY2xpcHNlIHBsdWdpbiBmb3IgdXNpbmcgRm9ycmVzdCB2aWEgRWNsaXBzZS4KICAgICAgICBUaGlzIHdvcmsgd2FzIGVuYWJsZWQgdmlhIGEgIkdvb2dsZSBTdW1tZXIgb2YgQ29kZSIgcHJvamVjdC4KICAgICAgICBTZWUgZG9jcy4KICAgICAgIFRoYW5rcyB0byBBbmlsIFJhbW5hbmFuLjwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5kb2NzIHVwZGF0ZTwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5kb2NzIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgIEFkZGVkIGluZm9ybWF0aW9uIGFib3V0IAogICAgICAgIGhvdyB0byBkZWJ1ZyBmb3JyZXN0IGphdmEgY2xhc3NlcyB0byB0aGUgZmFxIERpZmYgCiAgICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAgQWRkZWQgYSBzaGVsbCBzY3JpcHQgdG8gCiAgICAgICAgZG8gc29tZSBzdGVwcyBvZiB0aGUgY29jb29uIHVwZGF0ZSBwcm9jZXNzLiBTdGlsbCB0aGVyZSBhcmUgc29tZSBzdGVwcyAKICAgICAgICB0aGF0IHNob3VsZCByYXRoZXIgYmUgZG9uZSBieSBhIHNjcmlwdCwgcmF0aGVyIHRoYW4gY29tbWl0dGVyIGludGVyYWN0aW9uLiAKICAgICAgICBVcGRhdGVkIHRoZSByZWFkbWUgdG8gc3RhdGUgdGhhdCBzb21lIHN0ZXBzIGNvdWxkIGJlIGRvbmUgYnkgdGhlIAogICAgICAgIHNjcmlwdC4gRGlmZiAKICAgICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSB1cGRhdGUKICAgICAgICAgIChidWcgRk9SLTI1MykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSB1cGRhdGUKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi0yNTMpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgICBBZGRlZCBuZXcgCiAgICAgICAgc2VlZCB0YXJnZXRzIHNlZWQtYmFzaWMgYW5kIHNlZWQtc2FtcGxlLiBUaGF0IGNsb3NlcyBGT1ItMjUzLiBEaWZmIAogICAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIHVwZGF0ZQogICAgICAgICAgKGJ1ZyBGT1ItNjcwKQogICAgICAgIDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIHVwZGF0ZQogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICAgIChmaXhlcyBidWcgRk9SLTY3MCkKICAgICAgICAKICAgICAgICA6CiAgICAgICAgIEZpeGVkIHNhbXBsZSAKICAgICAgICBzaXRlcyBmcm9tIHRoZSBzZWVkVGVzdEJ1c2luZXNzIEZPUi02NzA6IGZvcnJlc3Qgc2VlZFRlc3RCdXNpbmVzczsgCiAgICAgICAgZm9ycmVzdCBzaXRlIGZhaWxzIHJlc3VtZSBkdGQgdmFsaWRhdGlvbiBEaWZmIAogICAgICAgICBUaGFua3MgdG8ga2V2aW4uPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgICBSZWZhY3RvcmVkIHRoZSB2aWV3IHJlc29sdmVyIGNvZGUgb2YgdGhlIGludGVybmFsLnZpZXcgcGx1Z2luLiBDcmVhdGVkIGFuIGFjdGlvbiB0aGF0CiAgICAgICAgaXMgZG9pbmcgdGhlIHNhbWUgYXMgYmVmb3JlIHRoZSBjb21iaW5hdGlvbiBvZiBzaXRlbWFwK3hzbC4gQWRkZWQgMiBqYXZhIGNsYXNzZXMgdG8gcGFja2FnZQogICAgICAgIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4uaW50ZXJuYWwudmlldy5hY3Rpbmc6CiAgICAgICAgMS5GYWxsYmFja1Jlc29sdmVyQWN0aW9uLmphdmEyLkZhbGxiYWNrUmVzb2x2ZXJIZWxwZXIuamF2YQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFRTCiAgICAgICAgOgogICAgICAgIAogICAgICAgUmVtb3ZlZCBwcm9qZWN0LnZpZXctZGVmYXVsdFZpZXcgcHJvcGVydGllcyBhbmQgYWRkZWQgcHJvamVjdC50aGVtZS1leHRlbnNpb24gaW5zdGVhZC4gVGhlIGNvbWJpbmF0aW9uCiAgICAgICBvZiBwcm9qZWN0LnRoZW1lLWV4dGVuc2lvbiBhbmQgcHJvamVjdC50aGVtZSBpcyBlcXVhbCB0byBwcm9qZWN0LnZpZXctZGVmYXVsdFZpZXcuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgVFMKICAgICAgICA6CiAgICAgICAgCiAgICAgICBBZGRlZCBuZXcgZWxlbWVudHMgdG8gb3JnLmFwYWNoZS5mb3JyZXN0LmNvbmYuRm9ycmVzdENvbmZNb2R1bGUgbmFtZT0iZGVmYXVsdHMiOgogICAgICAgIHZpZXctdGhlbWVzdGhlbWUtZXh0dGhlbWUKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgIFJlbW92ZWQgImRlZmF1bHRWaWV3IiBhbmQgYWRkZWQgbmV3IGVsZW1lbnQgdG8gb3JnLmFwYWNoZS5mb3JyZXN0LmNvbmYuRm9ycmVzdENvbmZNb2R1bGUgbmFtZT0icHJvamVjdCI6CiAgICAgICB0aGVtZS1leHQKICAgICAgPC9kZXNjcmlwdGlvbj48L2l0ZW0+PGl0ZW0+PHRpdGxlPmNvZGUgYWRkPC90aXRsZT48bGluaz5jaGFuZ2VzLmh0bWw8L2xpbms+PGRlc2NyaXB0aW9uPmNvZGUgYWRkCiAgICAgICAgYnkKICAgICAgICBUUwogICAgICAgIDoKICAgICAgICAKICAgICAgIG5vcm1hbGl6ZS1zcGFjZSgpIHRoZSBmb3JyZXN0OnByb3BlcnRpZXMgYmVmb3JlIHBhcnNpbmcgdGhlbSB0byB0aGUgcGlwZQogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+ZG9jcyBhZGQKICAgICAgICAgIChidWcgRk9SLTYwMykKICAgICAgICA8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+ZG9jcyBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgICAoZml4ZXMgYnVnIEZPUi02MDMpCiAgICAgICAgCiAgICAgICAgOgogICAgICAgIAogICAgICAgIEFkZGVkIGRvY3VtZW50IHRvIGV4cGxhaW4gdGhlIHByb2Nlc3MgZm9yCiAgICAgICAgQmVjb21pbmcgYW4gQXBhY2hlIEZvcnJlc3QKICAgICAgICBjb21taXR0ZXIuCiAgICAgICBUaGFua3MgdG8gQWRkaXNvbiBCZXJyeS48L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIERDCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFVzZSBzZXRzIG9mIHN5bWJvbHMgYXMgeG1sIGVudGl0aWVzIGZvciBjaGFyYWN0ZXIgcmVwbGFjZW1lbnQuCiAgICAgICAgVGhlcmUgaXMgYSBjb3JlIHNldCBhbmQgZWFjaCBwcm9qZWN0IGNhbiBkZWZpbmUgYSBzZXQuCiAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSAiJmFtcDtteXAtdDsiIHRvIHJlcHJlc2VudCB0aGUKICAgICAgICBwcm9qZWN0IG5hbWUgdG9nZXRoZXIgd2l0aCB0cmFkZW1hcmsgc3ltYm9sCiAgICAgICAgIk15IFByb2plY3QgTmFtZSYjODQ4MjsiLgogICAgICAgIFNlZSBGQVEuCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIFBsdWdpbnMgY2FuIG5vdyBkZWZpbmUgdGhlaXIgb3duICoueGNvbmYgZmlsZSB0byBhZGQgY29uZmlndXJhdGlvbiAKICAgICAgICBpbmZvcm1hdGlvbiB0byBjb2Nvb24ueGNvbmYuIFNpbXBseSBwbGFjZSB5b3VyICoueGNvbmYgZmlsZSBpbiAKICAgICAgICBQTFVHSU5fSE9NRS9jb25mLyoueGNvbmYuIE5vdGUgdGhhdCBjaGFuZ2VzIHRvIHRoaXMgY29uZmlndXJhdGlvbiAKICAgICAgICBmaWxlIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIEZvcnJlc3QgaGFzIGJlZW4gcmVzdGFydGVkLiAgCiAgICAgIDwvZGVzY3JpcHRpb24+PC9pdGVtPjxpdGVtPjx0aXRsZT5jb2RlIGFkZDwvdGl0bGU+PGxpbms+Y2hhbmdlcy5odG1sPC9saW5rPjxkZXNjcmlwdGlvbj5jb2RlIGFkZAogICAgICAgIGJ5CiAgICAgICAgUkRHCiAgICAgICAgOgogICAgICAgIAogICAgICAgIE5ldyBzaXRlIHNlZWRpbmcgbWVjaGFuaXNtLiBZb3UgY2FuIG5vdyBydW4gImZvcnJlc3Qgc2VlZCIgYXMgYmVmb3JlLCBvciB5b3UgY2FuIHJ1bgogICAgICAgICJmb3JyZXN0IHNlZWQtYnVzaW5lc3MiLiBUaGUgbGF0ZXIgd2lsbCBhc2sgYSBudW1iZXIgb2YgcXVlc3Rpb25zIGFib3V0IHRoZSBzaXRlCiAgICAgICAgYmVpbmcgc2VlZGVkIChidXNpbmVzcyBuYW1lLCBkZXNjcmlwdGlvbiBldGMuKSBhbmQgd2lsbCBjcmVhdGUgYSB2ZXJ5IHNpbXBsZSBzaXRlCiAgICAgICAgZGVzaWduZWQgZm9yIGJ1c2luZXNzLiBUbyBxdWlja2x5IHNlZSB0aGUgcmVzdWx0cywgaS5lLiBhdm9pZAogICAgICAgIGFuc3dlcmluZyB0aGUgcXVlc3Rpb25zLCBkbyAiZm9ycmVzdCBzZWVkVGVzdEJ1c2luZXNzIi4gTW9yZSBzZWVkIHNpdGVzIHdpbGwgYmUgYWRkZWQKICAgICAgICBpbiB0aGUgZnV0dXJlLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48aXRlbT48dGl0bGU+Y29kZSBhZGQ8L3RpdGxlPjxsaW5rPmNoYW5nZXMuaHRtbDwvbGluaz48ZGVzY3JpcHRpb24+Y29kZSBhZGQKICAgICAgICBieQogICAgICAgIFJERwogICAgICAgIDoKICAgICAgICAKICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBhIGxvY2F0aW9ubWFwLiBUaGlzIGVuYWJsZXMgY29udGVudCB0byBiZSByZXRyaWV2ZWQgZnJvbSBhIGxvY2F0aW9uCiAgICAgICAgdGhhdCBpcyBkZWZpbmVkIGluIGEgbG9jYXRpb25tYXAgZmlsZS4gQSBwcm9qZWN0LWJhc2VkIGZpbGUgY2FuIGJlIGxvY2F0ZWQgYXQgCiAgICAgICAgUFJPSkVDVF9IT01FL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvbG9jYXRpb25tYXAueG1sIHdoaWxlIGNvcmUgbG9jYXRpb25tYXBzCiAgICAgICAgYXJlIGF0ICRGT1JSRVNUX0hPTUUvbWFpbi93ZWJhcHAvbG9jYXRpb25tYXAtKi54bWwgZmlsZXMuVGhlCiAgICAgICAgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCB0aGUgVVJMIHNlZW4gYnkgdGhlIHVzZXIgbmVlZCBiZWFyIG5vIHJlbGF0aW9uIHRvIHRoZSBsb2NhdGlvbgogICAgICAgIG9mIHRoZSBzb3VyY2UgZG9jdW1lbnQsIHRodXMgRm9ycmVzdCBjYW4gc2VwYXJhdGUgdGhlIGNsaWVudCBVUkwgc3BhY2UgZnJvbSB0aGUgc291cmNlCiAgICAgICAgZG9jdW1lbnQgVVJMIHNwYWNlLiBUaHVzLCB1c2luZyB0aGUgbG9jYXRpb25tYXAgaXQgaXMgcG9zc2libGUgdG8gcHVsbCB0b2dldGhlcgogICAgICAgIGRvY3VtZW50cyBmcm9tIG1hbnkgZGlmZmVyZW50IGxvY2F0aW9ucyBpbnRvIGEgc2luZ2xlIHVuaWZvcm0gc2l0ZS4KICAgICAgICAKICAgICAgICBJbiBhZGRpdGlvbiwgc2luY2UgdGhlIHVzZXIgVVJMIHNwYWNlIGlzIG5vdyB1bmNvbm5lY3RlZCB0byB0aGUgc291cmNlIFVSTCBzcGFjZQogICAgICAgIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgc291cmNlIGRvY3VtZW50cyB3aXRob3V0IGJyZWFraW5nIGFueSBleGlzdGluZyB1c2VyIGxpbmtzLgogICAgICAgIAogICAgICAgIFNlZSBsb2NhdGlvbm1hcCBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIFRoYW5rcyB0byBVbmljbyBIb21tZXMgZm9yIHRoZSBvcmlnaW5hbCBsb2NhdGlvbm1hcCBpbXBsZW1lbnRhdGlvbiB3aGljaAogICAgICAgIHdhcyBhZGRlZCB0byBGb3JyZXN0IGxvbmcgYWdvLgogICAgICA8L2Rlc2NyaXB0aW9uPjwvaXRlbT48L2NoYW5uZWw+PC9yc3M+