ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgd3JpdHRlbiBieSBPdmUgS+V2ZW4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vcmVnaXN0cnk8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgoKICAgIDxwYXJhPgogICAgICBBZnRlciBXaW4zLngsIHRoZSByZWdpc3RyeSBiZWNhbWUgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIFdpbmRvd3MuCiAgICAgIEl0IGlzIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCiAgICAgIFdpbjk1Lzk4L05ULzIwMDAvd2hhdGV2ZXItY29tcGxpYW50IGFwcGxpY2F0aW9ucywgc3RvcmUKICAgICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgZGF0YS4gV2hpbGUgbW9zdCBzYW5lIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyAoYW5kIFdpbmUgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQKICAgICAgbmF0dXJlIG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIFdpbmUKICAgICAgdG8gc3VwcG9ydCBpdCBzb21laG93LgogICAgPC9wYXJhPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGlzIGFuIGVsYWJvcmF0ZSB0cmVlIHN0cnVjdHVyZSwgYW5kIG5vdAogICAgICAgIGV2ZW4gbW9zdCBXaW5kb3dzIHByb2dyYW1tZXJzIGFyZSBmdWxseSBhd2FyZSBvZiBob3cgdGhlCiAgICAgICAgcmVnaXN0cnkgaXMgbGFpZCBvdXQsIHdpdGggaXRzIGRpZmZlcmVudCAiaGl2ZXMiIGFuZCBudW1lcm91cwogICAgICAgIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsIGNvdmVyYWdlIGlzIG91dCBvZiB0aGUgc2NvcGUgb2YKICAgICAgICB0aGlzIGRvY3VtZW50LiBCdXQgaGVyZSBhcmUgdGhlIGJhc2ljIHJlZ2lzdHJ5IGtleXMgeW91IG1pZ2h0CiAgICAgICAgbmVlZCB0byBrbm93IGFib3V0IGZvciBub3cuCiAgICAgIDwvcGFyYT4KCgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0xPQ0FMX01BQ0hJTkU8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnN5c3RlbS5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKICAgICAgICAgICAgICBldmVyeXRoaW5nIHBlcnRhaW5pbmcgdG8gdGhlIGN1cnJlbnQgV2luZG93cwogICAgICAgICAgICAgIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkhLRVlfVVNFUlM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnVzZXIuZGF0PC9maWxlbmFtZT4pIGNvbnRhaW5zCiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIGZvciBldmVyeSB1c2VyIG9mIHRoZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0NMQVNTRVNfUk9PVDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXENsYXNzZXMuCiAgICAgICAgICAgICAgSXQgY29udGFpbnMgZGF0YSBkZXNjcmliaW5nIHRoaW5ncyBsaWtlIGZpbGUKICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMsIE9MRSBkb2N1bWVudCBoYW5kbGVycywgYW5kIENPTSBjbGFzc2VzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgogICAgICAgICAgICAgIHBlcnNvbmFsIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5Vc2luZyBhIFdpbmRvd3MgcmVnaXN0cnk8L3RpdGxlPgogIAogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgcG9pbnQgV2luZSBhdCBhbiBleGlzdGluZyBNUyBXaW5kb3dzIGluc3RhbGxhdGlvbiAoYnkKICAgICAgICBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBpbgogICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgogICAgICAgIDxmaWxlbmFtZT4ud2luZXJjPC9maWxlbmFtZT4pLCB0aGVuIFdpbmUgaXMgYWJsZSB0byBsb2FkCiAgICAgICAgcmVnaXN0cnkgZGF0YSBmcm9tIGl0LiBIb3dldmVyLCBXaW5lIHdpbGwgbm90IHNhdmUgYW55dGhpbmcgdG8KICAgICAgICB0aGUgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5LCBidXQgcmF0aGVyIHRvIGl0cyBvd24gcmVnaXN0cnkKICAgICAgICBmaWxlcyAoc2VlIGJlbG93KS4gT2YgY291cnNlLCBpZiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgdmFsdWUKICAgICAgICBleGlzdHMgaW4gYm90aCB0aGUgV2luZG93cyByZWdpc3RyeSBhbmQgaW4gdGhlIFdpbmUgcmVnaXN0cnksCiAgICAgICAgdGhlbiBXaW5lIHdpbGwgdXNlIHRoZSBsYXR0ZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT2NjYXNpb25hbGx5LCBXaW5lIG1heSBoYXZlIHRyb3VibGUgbG9hZGluZyB0aGUgV2luZG93cwogICAgICAgIHJlZ2lzdHJ5LiBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzCiAgICAgICAgaW5jb25zaXN0ZW50IG9yIGRhbWFnZWQgaW4gc29tZSB3YXkuIElmIHRoYXQgYmVjb21lcyBhCiAgICAgICAgcHJvYmxlbSwgeW91IG1heSB3YW50IHRvIGRvd25sb2FkIHRoZQogICAgICAgIDxmaWxlbmFtZT5yZWdjbGVhbi5leGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBNUyB3ZWJzaXRlIGFuZCB1c2UKICAgICAgICBpdCB0byBjbGVhbiB1cCB0aGUgcmVnaXN0cnkuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWx3YXlzIHVzZQogICAgICAgIDxmaWxlbmFtZT5yZWdlZGl0LmV4ZTwvZmlsZW5hbWU+IHRvIGV4cG9ydCB0aGUgcmVnaXN0cnkgZGF0YQogICAgICAgIHlvdSB3YW50IGludG8gYSB0ZXh0IGZpbGUsIGFuZCB0aGVuIGltcG9ydCBpdCBpbiBXaW5lLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPldpbmUgcmVnaXN0cnkgZGF0YSBmaWxlc3I8L3RpdGxlPgogIAogICAgICA8cGFyYT4KICAgICAgICBJbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIHN1YmRpcmVjdG9yeSBuYW1lZAogICAgICAgIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+LCB3aGVyZSBXaW5lIHdpbGwgdHJ5IHRvIHNhdmUgaXRzCiAgICAgICAgcmVnaXN0cnkgYnkgZGVmYXVsdC4gSXQgc2F2ZXMgaW50byBmb3VyIGZpbGVzLCB3aGljaCBhcmU6CiAgICAgIDwvcGFyYT4KCiAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBIS0VZX0xPQ0FMX01BQ0hJTkUuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlci5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfQ1VSUkVOVF9VU0VSLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPnVzZXJkZWYucmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBIS0VZX1VTRVJTXC5EZWZhdWx0IChpLmUuIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgdXNlciBzZXR0aW5ncykuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFdpbmUgc2F2ZXMgSEtFWV9VU0VSUyB0byB0aGlzIGZpbGUgKGJvdGggY3VycmVudCBhbmQKICAgICAgICAgICAgICBkZWZhdWx0IHVzZXIpLCBidXQgZG9lcyBub3QgbG9hZCBmcm9tIGl0LCB1bmxlc3MKICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPiBpcyBtaXNzaW5nLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgPHBhcmE+CiAgICAgICAgQWxsIG9mIHRoZXNlIGZpbGVzIGFyZSBodW1hbi1yZWFkYWJsZSB0ZXh0IGZpbGVzLCBzbyB1bmxpa2UKICAgICAgICBXaW5kb3dzLCB5b3UgY2FuIGFjdHVhbGx5IHVzZSBhbiBvcmRpbmFyeSB0ZXh0IGVkaXRvciBvbiB0aGVtCiAgICAgICAgaWYgeW91IG11c3QuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgZmlsZXMsIFdpbmUgY2FuIGFsc28gb3B0aW9uYWxseSBsb2FkIGZyb20KICAgICAgICBnbG9iYWwgcmVnaXN0cnkgZmlsZXMgcmVzaWRpbmcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQogICAgICAgIGdsb2JhbCA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gKGkuZS4KICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGM8L2ZpbGVuYW1lPiBpZiB5b3UgY29tcGlsZWQgZnJvbQogICAgICAgIHNvdXJjZSkuIFRoZXNlIGFyZToKICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPndpbmUuc3lzdGVtcmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPkNvbnRhaW5zIEhLRVlfTE9DQUxfTUFDSElORS48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPkNvbnRhaW5zIEhLRVlfVVNFUlMuPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlN5c3RlbSBhZG1pbmlzdHJhdGlvbjwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIFdpdGggdGhlIGFib3ZlIGZpbGUgc3RydWN0dXJlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBzeXN0ZW0KICAgICAgICBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIHNvIHRoYXQgYSBzeXN0ZW0gV2luZQogICAgICAgIGluc3RhbGxhdGlvbiAoYW5kIGFwcGxpY2F0aW9ucykgY2FuIGJlIHNoYXJlZCBieSBhbGwgdGhlCiAgICAgICAgdXNlcnMsIGFuZCBzdGlsbCBsZXQgdGhlIHVzZXJzIGFsbCBoYXZlIHRoZWlyIG93biBwZXJzb25hbGl6ZWQKICAgICAgICBjb25maWd1cmF0aW9uLiBBbiBhZG1pbmlzdHJhdG9yIGNhbiwgYWZ0ZXIgaGF2aW5nIGluc3RhbGxlZAogICAgICAgIFdpbmUgYW5kIGFueSBXaW5kb3dzIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhlIHdhbnRzIHRoZSB1c2VycwogICAgICAgIHRvIGhhdmUgYWNjZXNzIHRvLCBjb3B5IHRoZSByZXN1bHRpbmcKICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+IGFuZAogICAgICAgIDxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPiBvdmVyIHRvIHRoZSBnbG9iYWwgcmVnaXN0cnkKICAgICAgICBmaWxlcyAod2hpY2ggd2UgYXNzdW1lIHdpbGwgcmVzaWRlIGluCiAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjPC9maWxlbmFtZT4gaGVyZSksIHdpdGg6CiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KY2Qgfi8ud2luZQpjcCBzeXN0ZW0ucmVnIC91c3IvbG9jYWwvZXRjL3dpbmUuc3lzdGVtcmVnCmNwIHdpbmUudXNlcnJlZyAvdXNyL2xvY2FsL2V0Yy93aW5lLnVzZXJyZWcKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBwZXJoYXBzIGV2ZW4gc3ltbGluayB0aGVzZSBiYWNrIHRvIHRoZSBhZG1pbmlzdHJhdG9yJ3MKICAgICAgICBhY2NvdW50LCB0byBtYWtlIGl0IGVhc2llciB0byBpbnN0YWxsIGFwcHMgc3lzdGVtLXdpZGUgbGF0ZXI6CiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUuc3lzdGVtcmVnIHN5c3RlbS5yZWcKbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZyB3aW5lLnVzZXJyZWcKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIE5vdGUgdGhhdCB0aGUgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gc2NyaXB0CiAgICAgICAgYWxyZWFkeSBkb2VzIGFsbCBvZiB0aGlzIGZvciB5b3UsIGlmIHlvdSBpbnN0YWxsIFdpbmUgYXMgcm9vdC4KICAgICAgICBJZiB5b3UgdGhlbiBpbnN0YWxsIFdpbmRvd3MgYXBwbGljYXRpb25zIHdoaWxlIGxvZ2dlZCBpbiBhcwogICAgICAgIHJvb3QsIGFsbCB5b3VyIHVzZXJzIHdpbGwgYXV0b21hdGljYWxseSBiZSBhYmxlIHRvIHVzZSB0aGVtLgogICAgICAgIFdoaWxlIHRoZSBhcHBsaWNhdGlvbiBzZXR1cCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGdsb2JhbAogICAgICAgIHJlZ2lzdHJ5LCB0aGUgdXNlcnMnIHBlcnNvbmFsaXplZCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHNhdmVkCiAgICAgICAgaW4gdGhlaXIgb3duIGhvbWUgZGlyZWN0b3JpZXMuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgQnV0IGJlIGNhcmVmdWwgd2l0aCB3aGF0IHlvdSBkbyB3aXRoIHRoZSBhZG1pbmlzdHJhdG9yIGFjY291bnQKICAgICAgICAtIGlmIHlvdSBkbyBjb3B5IG9yIGxpbmsgdGhlIGFkbWluaXN0cmF0b3IncyByZWdpc3RyeSB0byB0aGUKICAgICAgICBnbG9iYWwgcmVnaXN0cnksIGFueSB1c2VyIG1pZ2h0IGJlIGFibGUgdG8gcmVhZCB0aGUKICAgICAgICBhZG1pbmlzdHJhdG9yJ3MgcHJlZmVyZW5jZXMsIHdoaWNoIG1pZ2h0IG5vdCBiZSBnb29kIGlmCiAgICAgICAgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIChwYXNzd29yZHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBldGMpCiAgICAgICAgaXMgc3RvcmVkIHRoZXJlLiBPbmx5IHVzZSB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGluc3RhbGwKICAgICAgICBzb2Z0d2FyZSwgbm90IGZvciBkYWlseSB3b3JrOyB1c2UgYW4gb3JkaW5hcnkgdXNlciBhY2NvdW50IGZvcgogICAgICAgIHRoYXQuCiAgICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIGRlZmF1bHQgcmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgQSBXaW5kb3dzIHJlZ2lzdHJ5IGNvbnRhaW5zIG1hbnkga2V5cyBieSBkZWZhdWx0LCBhbmQgc29tZSBvZgogICAgICAgIHRoZW0gYXJlIG5lY2Vzc2FyeSBmb3IgZXZlbiBpbnN0YWxsZXJzIHRvIG9wZXJhdGUgY29ycmVjdGx5LgogICAgICAgIFRoZSBrZXlzIHRoYXQgdGhlIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0bwogICAgICAgIGluc3RhbGwgYXBwbGljYXRpb25zIGFyZSBkaXN0cmlidXRlZCBpbiBhIGZpbGUgY2FsbGVkCiAgICAgICAgPGZpbGVuYW1lPndpbmVkZWZhdWx0LnJlZzwvZmlsZW5hbWU+LiBJdCBpcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgaW5zdGFsbGVkIGZvciB5b3UgaWYgeW91IHVzZSB0aGUKICAgICAgICA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQsIGJ1dCBpZiB5b3Ugd2FudAogICAgICAgIHRvIGluc3RhbGwgaXQgbWFudWFsbHksIHlvdSBjYW4gZG8gc28gYnkgdXNpbmcgdGhlCiAgICAgICAgPGNvbW1hbmQ+cmVnYXBpPC9jb21tYW5kPiB0b29sLiBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgIGFib3V0IHRoaXMgaW4gdGhlCiAgICAgICAgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vbm8td2luZG93czwvZmlsZW5hbWU+IGRvY3VtZW50IGluIHRoZQogICAgICAgIFdpbmUgZGlzdHJpYnV0aW9uLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlRoZSBbcmVnaXN0cnldIHNlY3Rpb248L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgV2l0aCB0aGUgYWJvdmUgaW5mb3JtYXRpb24gZnJlc2ggaW4gbWluZCwgbGV0J3MgbG9vayBhdCB0aGUKICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4vPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPgogICAgICAgIG9wdGlvbnMgZm9yIGhhbmRsaW5nIHRoZSByZWdpc3RyeS4KICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZEdsb2JhbFJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIGdsb2JhbCByZWdpc3RyeQogICAgICAgICAgICAgIGZpbGVzLCBpZiB0aGV5IGV4aXN0LgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkSG9tZVJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIHVzZXIncyByZWdpc3RyeQogICAgICAgICAgICAgIGZpbGVzIChpbiB0aGUgPGZpbGVuYW1lPi53aW5lPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mCiAgICAgICAgICAgICAgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSkuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRXaW5kb3dzUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciBXaW5lIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHJlZ2lzdHJ5IGRhdGEKICAgICAgICAgICAgICBmcm9tIGEgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5IGluIGFuIGV4aXN0aW5nIE1TIFdpbmRvd3MKICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPldyaXRldG9Ib21lUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciByZWdpc3RyeSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMuIChDdXJyZW50bHksIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUsIHNvIGlmIHlvdSB0dXJuIHRoaXMgb2ZmLCBXaW5lIGNhbm5vdCBzYXZlCiAgICAgICAgICAgICAgdGhlIHJlZ2lzdHJ5IG9uIGRpc2sgYXQgYWxsOyBhZnRlciB5b3UgZXhpdCBXaW5lLCB5b3VyCiAgICAgICAgICAgICAgY2hhbmdlcyB3aWxsIGJlIGxvc3QuKQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Vc2VOZXdGb3JtYXQ8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ic29sZXRlLiBXaW5lIG5vdyBhbHdheXMgdXNlIHRoZSBuZXcKICAgICAgICAgICAgICBmb3JtYXQ7IHN1cHBvcnQgZm9yIHRoZSBvbGQgZm9ybWF0IHdhcyByZW1vdmVkIGEgd2hpbGUKICAgICAgICAgICAgICBhZ28uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlBlcmlvZGljU2F2ZTwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgaXQgc3BlY2lmaWVzCiAgICAgICAgICAgICAgdGhhdCB5b3Ugd2FudCB0aGUgcmVnaXN0cnkgdG8gYmUgc2F2ZWQgdG8gZGlzayBhdCB0aGUKICAgICAgICAgICAgICBnaXZlbiBpbnRlcnZhbC4gSWYgaXQgaXMgbm90IHNldCwgdGhlIHJlZ2lzdHJ5IHdpbGwgb25seQogICAgICAgICAgICAgIGJlIHNhdmVkIHRvIGRpc2sgd2hlbiB0aGUgd2luZXNlcnZlciB0ZXJtaW5hdGVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5TYXZlT25seVVwZGF0ZWRLZXlzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRoZSBlbnRpcmUgcmVnaXN0cnkgaXMgc2F2ZWQgdG8gdGhlCiAgICAgICAgICAgICAgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzLCBvciBvbmx5IHN1YmtleXMgdGhlIHVzZXIgaGF2ZQogICAgICAgICAgICAgIGFjdHVhbGx5IGNoYW5nZWQuIENvbnNpZGVyaW5nIHRoYXQgdGhlIHVzZXIncyByZWdpc3RyeQogICAgICAgICAgICAgIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCByZWdpc3RyeSBmaWxlcyBhbmQgV2luZG93cwogICAgICAgICAgICAgIHJlZ2lzdHJ5IGZpbGVzLCBpdCB1c3VhbGx5IG1ha2VzIHNlbnNlIHRvIG9ubHkgc2F2ZQogICAgICAgICAgICAgIHVzZXItbW9kaWZpZWQgc3Via2V5czsgdGhhdCB3YXksIGNoYW5nZXMgdG8gdGhlIHJlc3Qgb2YKICAgICAgICAgICAgICB0aGUgZ2xvYmFsIG9yIFdpbmRvd3MgcmVnaXN0cmllcyB3aWxsIHN0aWxsIGFmZmVjdCB0aGUKICAgICAgICAgICAgICB1c2VyLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvc2VjdDI+CiAgPC9zZWN0MT4KCjwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQpMb2NhbCB2YXJpYWJsZXM6Cm1vZGU6IHNnbWwKc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJjb25maWd1cmluZy5zZ21sIiAiY2hhcHRlciIgInNlY3QxIiAiIikKRW5kOgotLT4K