ICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgd3JpdHRlbiBieSBPdmUgS+V2ZW4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vcmVnaXN0cnk8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgoKICAgIDxwYXJhPgogICAgICBBZnRlciBXaW4zLngsIHRoZSByZWdpc3RyeSBiZWNhbWUgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIFdpbmRvd3MuCiAgICAgIEl0IGlzIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCiAgICAgIFdpbjk1Lzk4L05ULzIwMDAvd2hhdGV2ZXItY29tcGxpYW50IGFwcGxpY2F0aW9ucywgc3RvcmUKICAgICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgZGF0YS4gV2hpbGUgbW9zdCBzYW5lIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyAoYW5kIFdpbmUgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQKICAgICAgbmF0dXJlIG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIFdpbmUKICAgICAgdG8gc3VwcG9ydCBpdCBzb21laG93LgogICAgPC9wYXJhPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGlzIGFuIGVsYWJvcmF0ZSB0cmVlIHN0cnVjdHVyZSwgYW5kIG5vdAogICAgICAgIGV2ZW4gbW9zdCBXaW5kb3dzIHByb2dyYW1tZXJzIGFyZSBmdWxseSBhd2FyZSBvZiBob3cgdGhlCiAgICAgICAgcmVnaXN0cnkgaXMgbGFpZCBvdXQsIHdpdGggaXRzIGRpZmZlcmVudCAiaGl2ZXMiIGFuZCBudW1lcm91cwogICAgICAgIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsIGNvdmVyYWdlIGlzIG91dCBvZiB0aGUgc2NvcGUgb2YKICAgICAgICB0aGlzIGRvY3VtZW50LiBCdXQgaGVyZSBhcmUgdGhlIGJhc2ljIHJlZ2lzdHJ5IGtleXMgeW91IG1pZ2h0CiAgICAgICAgbmVlZCB0byBrbm93IGFib3V0IGZvciBub3cuCiAgICAgIDwvcGFyYT4KCgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0xPQ0FMX01BQ0hJTkU8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnN5c3RlbS5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKICAgICAgICAgICAgICBldmVyeXRoaW5nIHBlcnRhaW5pbmcgdG8gdGhlIGN1cnJlbnQgV2luZG93cwogICAgICAgICAgICAgIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkhLRVlfVVNFUlM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnVzZXIuZGF0PC9maWxlbmFtZT4pIGNvbnRhaW5zCiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIGZvciBldmVyeSB1c2VyIG9mIHRoZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5IS0VZX0NMQVNTRVNfUk9PVDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXENsYXNzZXMuCiAgICAgICAgICAgICAgSXQgY29udGFpbnMgZGF0YSBkZXNjcmliaW5nIHRoaW5ncyBsaWtlIGZpbGUKICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMsIE9MRSBkb2N1bWVudCBoYW5kbGVycywgYW5kIENPTSBjbGFzc2VzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgogICAgICAgICAgICAgIHBlcnNvbmFsIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5Vc2luZyBhIFdpbmRvd3MgcmVnaXN0cnk8L3RpdGxlPgogIAogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgcG9pbnQgV2luZSBhdCBhbiBleGlzdGluZyBNUyBXaW5kb3dzIGluc3RhbGxhdGlvbiAoYnkKICAgICAgICBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBpbgogICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgogICAgICAgIDxmaWxlbmFtZT4ud2luZXJjPC9maWxlbmFtZT4pLCB0aGVuIFdpbmUgaXMgYWJsZSB0byBsb2FkCiAgICAgICAgcmVnaXN0cnkgZGF0YSBmcm9tIGl0LiBIb3dldmVyLCBXaW5lIHdpbGwgbm90IHNhdmUgYW55dGhpbmcgdG8KICAgICAgICB0aGUgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5LCBidXQgcmF0aGVyIHRvIGl0cyBvd24gcmVnaXN0cnkKICAgICAgICBmaWxlcyAoc2VlIGJlbG93KS4gT2YgY291cnNlLCBpZiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgdmFsdWUKICAgICAgICBleGlzdHMgaW4gYm90aCB0aGUgV2luZG93cyByZWdpc3RyeSBhbmQgaW4gdGhlIFdpbmUgcmVnaXN0cnksCiAgICAgICAgdGhlbiBXaW5lIHdpbGwgdXNlIHRoZSBsYXR0ZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT2NjYXNpb25hbGx5LCBXaW5lIG1heSBoYXZlIHRyb3VibGUgbG9hZGluZyB0aGUgV2luZG93cwogICAgICAgIHJlZ2lzdHJ5LiBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzCiAgICAgICAgaW5jb25zaXN0ZW50IG9yIGRhbWFnZWQgaW4gc29tZSB3YXkuIElmIHRoYXQgYmVjb21lcyBhCiAgICAgICAgcHJvYmxlbSwgeW91IG1heSB3YW50IHRvIGRvd25sb2FkIHRoZQogICAgICAgIDxmaWxlbmFtZT5yZWdjbGVhbi5leGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBNUyB3ZWJzaXRlIGFuZCB1c2UKICAgICAgICBpdCB0byBjbGVhbiB1cCB0aGUgcmVnaXN0cnkuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWx3YXlzIHVzZQogICAgICAgIDxmaWxlbmFtZT5yZWdlZGl0LmV4ZTwvZmlsZW5hbWU+IHRvIGV4cG9ydCB0aGUgcmVnaXN0cnkgZGF0YQogICAgICAgIHlvdSB3YW50IGludG8gYSB0ZXh0IGZpbGUsIGFuZCB0aGVuIGltcG9ydCBpdCBpbiBXaW5lLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QyPgoKICAgIDxzZWN0Mj4KICAgICAgPHRpdGxlPldpbmUgcmVnaXN0cnkgZGF0YSBmaWxlczwvdGl0bGU+CiAgCiAgICAgIDxwYXJhPgogICAgICAgIEluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHRoZXJlIGlzIGEgc3ViZGlyZWN0b3J5IG5hbWVkCiAgICAgICAgPGZpbGVuYW1lPi53aW5lPC9maWxlbmFtZT4sIHdoZXJlIFdpbmUgd2lsbCB0cnkgdG8gc2F2ZSBpdHMKICAgICAgICByZWdpc3RyeSBieSBkZWZhdWx0LiBJdCBzYXZlcyBpbnRvIGZvdXIgZmlsZXMsIHdoaWNoIGFyZToKICAgICAgPC9wYXJhPgoKICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPnN5c3RlbS5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfTE9DQUxfTUFDSElORS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9DVVJSRU5UX1VTRVIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfVVNFUlNcLkRlZmF1bHQgKGkuZS4gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICB1c2VyIHNldHRpbmdzKS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgV2luZSBzYXZlcyBIS0VZX1VTRVJTIHRvIHRoaXMgZmlsZSAoYm90aCBjdXJyZW50IGFuZAogICAgICAgICAgICAgIGRlZmF1bHQgdXNlciksIGJ1dCBkb2VzIG5vdCBsb2FkIGZyb20gaXQsIHVubGVzcwogICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyZGVmLnJlZzwvZmlsZW5hbWU+IGlzIG1pc3NpbmcuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICA8cGFyYT4KICAgICAgICBBbGwgb2YgdGhlc2UgZmlsZXMgYXJlIGh1bWFuLXJlYWRhYmxlIHRleHQgZmlsZXMsIHNvIHVubGlrZQogICAgICAgIFdpbmRvd3MsIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGFuIG9yZGluYXJ5IHRleHQgZWRpdG9yIG9uIHRoZW0KICAgICAgICBpZiB5b3UgbXVzdC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVzZSBmaWxlcywgV2luZSBjYW4gYWxzbyBvcHRpb25hbGx5IGxvYWQgZnJvbQogICAgICAgIGdsb2JhbCByZWdpc3RyeSBmaWxlcyByZXNpZGluZyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCiAgICAgICAgZ2xvYmFsIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiAoaS5lLgogICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGlmIHlvdSBjb21waWxlZCBmcm9tCiAgICAgICAgc291cmNlKS4gVGhlc2UgYXJlOgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS5zeXN0ZW1yZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9MT0NBTF9NQUNISU5FLjwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+Q29udGFpbnMgSEtFWV9VU0VSUy48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+U3lzdGVtIGFkbWluaXN0cmF0aW9uPC90aXRsZT4KICAKICAgICAgPHBhcmE+CiAgICAgICAgV2l0aCB0aGUgYWJvdmUgZmlsZSBzdHJ1Y3R1cmUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHN5c3RlbQogICAgICAgIGFkbWluaXN0cmF0b3IgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gc28gdGhhdCBhIHN5c3RlbSBXaW5lCiAgICAgICAgaW5zdGFsbGF0aW9uIChhbmQgYXBwbGljYXRpb25zKSBjYW4gYmUgc2hhcmVkIGJ5IGFsbCB0aGUKICAgICAgICB1c2VycywgYW5kIHN0aWxsIGxldCB0aGUgdXNlcnMgYWxsIGhhdmUgdGhlaXIgb3duIHBlcnNvbmFsaXplZAogICAgICAgIGNvbmZpZ3VyYXRpb24uIEFuIGFkbWluaXN0cmF0b3IgY2FuLCBhZnRlciBoYXZpbmcgaW5zdGFsbGVkCiAgICAgICAgV2luZSBhbmQgYW55IFdpbmRvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgaGUgd2FudHMgdGhlIHVzZXJzCiAgICAgICAgdG8gaGF2ZSBhY2Nlc3MgdG8sIGNvcHkgdGhlIHJlc3VsdGluZwogICAgICAgIDxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT4gYW5kCiAgICAgICAgPGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+IG92ZXIgdG8gdGhlIGdsb2JhbCByZWdpc3RyeQogICAgICAgIGZpbGVzICh3aGljaCB3ZSBhc3N1bWUgd2lsbCByZXNpZGUgaW4KICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGM8L2ZpbGVuYW1lPiBoZXJlKSwgd2l0aDoKICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpjZCB+Ly53aW5lCmNwIHN5c3RlbS5yZWcgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcKY3Agd2luZS51c2VycmVnIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIHBlcmhhcHMgZXZlbiBzeW1saW5rIHRoZXNlIGJhY2sgdG8gdGhlIGFkbWluaXN0cmF0b3IncwogICAgICAgIGFjY291bnQsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGluc3RhbGwgYXBwcyBzeXN0ZW0td2lkZSBsYXRlcjoKICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpsbiAtc2YgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcgc3lzdGVtLnJlZwpsbiAtc2YgL3Vzci9sb2NhbC9ldGMvd2luZS51c2VycmVnIHdpbmUudXNlcnJlZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGF0IHRoZSA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBzY3JpcHQKICAgICAgICBhbHJlYWR5IGRvZXMgYWxsIG9mIHRoaXMgZm9yIHlvdSwgaWYgeW91IGluc3RhbGwgV2luZSBhcyByb290LgogICAgICAgIElmIHlvdSB0aGVuIGluc3RhbGwgV2luZG93cyBhcHBsaWNhdGlvbnMgd2hpbGUgbG9nZ2VkIGluIGFzCiAgICAgICAgcm9vdCwgYWxsIHlvdXIgdXNlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFibGUgdG8gdXNlIHRoZW0uCiAgICAgICAgV2hpbGUgdGhlIGFwcGxpY2F0aW9uIHNldHVwIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsCiAgICAgICAgcmVnaXN0cnksIHRoZSB1c2VycycgcGVyc29uYWxpemVkIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgc2F2ZWQKICAgICAgICBpbiB0aGVpciBvd24gaG9tZSBkaXJlY3Rvcmllcy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBCdXQgYmUgY2FyZWZ1bCB3aXRoIHdoYXQgeW91IGRvIHdpdGggdGhlIGFkbWluaXN0cmF0b3IgYWNjb3VudAogICAgICAgIC0gaWYgeW91IGRvIGNvcHkgb3IgbGluayB0aGUgYWRtaW5pc3RyYXRvcidzIHJlZ2lzdHJ5IHRvIHRoZQogICAgICAgIGdsb2JhbCByZWdpc3RyeSwgYW55IHVzZXIgbWlnaHQgYmUgYWJsZSB0byByZWFkIHRoZQogICAgICAgIGFkbWluaXN0cmF0b3IncyBwcmVmZXJlbmNlcywgd2hpY2ggbWlnaHQgbm90IGJlIGdvb2QgaWYKICAgICAgICBzZW5zaXRpdmUgaW5mb3JtYXRpb24gKHBhc3N3b3JkcywgcGVyc29uYWwgaW5mb3JtYXRpb24sIGV0YykKICAgICAgICBpcyBzdG9yZWQgdGhlcmUuIE9ubHkgdXNlIHRoZSBhZG1pbmlzdHJhdG9yIGFjY291bnQgdG8gaW5zdGFsbAogICAgICAgIHNvZnR3YXJlLCBub3QgZm9yIGRhaWx5IHdvcms7IHVzZSBhbiBvcmRpbmFyeSB1c2VyIGFjY291bnQgZm9yCiAgICAgICAgdGhhdC4KICAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KCiAgICA8c2VjdDI+CiAgICAgIDx0aXRsZT5UaGUgZGVmYXVsdCByZWdpc3RyeTwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBBIFdpbmRvd3MgcmVnaXN0cnkgY29udGFpbnMgbWFueSBrZXlzIGJ5IGRlZmF1bHQsIGFuZCBzb21lIG9mCiAgICAgICAgdGhlbSBhcmUgbmVjZXNzYXJ5IGZvciBldmVuIGluc3RhbGxlcnMgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCiAgICAgICAgVGhlIGtleXMgdGhhdCB0aGUgV2luZSBkZXZlbG9wZXJzIGhhdmUgZm91bmQgbmVjZXNzYXJ5IHRvCiAgICAgICAgaW5zdGFsbCBhcHBsaWNhdGlvbnMgYXJlIGRpc3RyaWJ1dGVkIGluIGEgZmlsZSBjYWxsZWQKICAgICAgICA8ZmlsZW5hbWU+d2luZWRlZmF1bHQucmVnPC9maWxlbmFtZT4uIEl0IGlzIGF1dG9tYXRpY2FsbHkKICAgICAgICBpbnN0YWxsZWQgZm9yIHlvdSBpZiB5b3UgdXNlIHRoZQogICAgICAgIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IHNjcmlwdCwgYnV0IGlmIHlvdSB3YW50CiAgICAgICAgdG8gaW5zdGFsbCBpdCBtYW51YWxseSwgeW91IGNhbiBkbyBzbyBieSB1c2luZyB0aGUKICAgICAgICA8Y29tbWFuZD5yZWdhcGk8L2NvbW1hbmQ+IHRvb2wuIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgYWJvdXQgdGhpcyBpbiB0aGUKICAgICAgICA8ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi9uby13aW5kb3dzPC9maWxlbmFtZT4gZG9jdW1lbnQgaW4gdGhlCiAgICAgICAgV2luZSBkaXN0cmlidXRpb24uCiAgICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CgogICAgPHNlY3QyPgogICAgICA8dGl0bGU+VGhlIFtyZWdpc3RyeV0gc2VjdGlvbjwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBXaXRoIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmcmVzaCBpbiBtaW5kLCBsZXQncyBsb29rIGF0IHRoZQogICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPi88ZmlsZW5hbWU+LndpbmVyYzwvZmlsZW5hbWU+CiAgICAgICAgb3B0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIHJlZ2lzdHJ5LgogICAgICA8L3BhcmE+CgogICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dGVybT5Mb2FkR2xvYmFsUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0byB0cnkgdG8gbG9hZCB0aGUgZ2xvYmFsIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgZmlsZXMsIGlmIHRoZXkgZXhpc3QuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPkxvYWRIb21lUmVnaXN0cnlGaWxlczwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0byB0cnkgdG8gbG9hZCB0aGUgdXNlcidzIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgZmlsZXMgKGluIHRoZSA8ZmlsZW5hbWU+LndpbmU8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YKICAgICAgICAgICAgICB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5KS4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+TG9hZFdpbmRvd3NSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIFdpbmUgd2lsbCBhdHRlbXB0IHRvIGxvYWQgcmVnaXN0cnkgZGF0YQogICAgICAgICAgICAgIGZyb20gYSByZWFsIFdpbmRvd3MgcmVnaXN0cnkgaW4gYW4gZXhpc3RpbmcgTVMgV2luZG93cwogICAgICAgICAgICAgIGluc3RhbGxhdGlvbi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+V3JpdGV0b0hvbWVSZWdpc3RyeUZpbGVzPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHJlZ2lzdHJ5IGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZQogICAgICAgICAgICAgIHVzZXIncyByZWdpc3RyeSBmaWxlcy4gKEN1cnJlbnRseSwgdGhlcmUgaXMgbm8KICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSwgc28gaWYgeW91IHR1cm4gdGhpcyBvZmYsIFdpbmUgY2Fubm90IHNhdmUKICAgICAgICAgICAgICB0aGUgcmVnaXN0cnkgb24gZGlzayBhdCBhbGw7IGFmdGVyIHlvdSBleGl0IFdpbmUsIHlvdXIKICAgICAgICAgICAgICBjaGFuZ2VzIHdpbGwgYmUgbG9zdC4pCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlVzZU5ld0Zvcm1hdDwvdGVybT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuIFdpbmUgbm93IGFsd2F5cyB1c2UgdGhlIG5ldwogICAgICAgICAgICAgIGZvcm1hdDsgc3VwcG9ydCBmb3IgdGhlIG9sZCBmb3JtYXQgd2FzIHJlbW92ZWQgYSB3aGlsZQogICAgICAgICAgICAgIGFnby4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgPHRlcm0+UGVyaW9kaWNTYXZlPC90ZXJtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBpdCBzcGVjaWZpZXMKICAgICAgICAgICAgICB0aGF0IHlvdSB3YW50IHRoZSByZWdpc3RyeSB0byBiZSBzYXZlZCB0byBkaXNrIGF0IHRoZQogICAgICAgICAgICAgIGdpdmVuIGludGVydmFsLiBJZiBpdCBpcyBub3Qgc2V0LCB0aGUgcmVnaXN0cnkgd2lsbCBvbmx5CiAgICAgICAgICAgICAgYmUgc2F2ZWQgdG8gZGlzayB3aGVuIHRoZSB3aW5lc2VydmVyIHRlcm1pbmF0ZXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgIDx0ZXJtPlNhdmVPbmx5VXBkYXRlZEtleXM8L3Rlcm0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIGVudGlyZSByZWdpc3RyeSBpcyBzYXZlZCB0byB0aGUKICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMsIG9yIG9ubHkgc3Via2V5cyB0aGUgdXNlciBoYXZlCiAgICAgICAgICAgICAgYWN0dWFsbHkgY2hhbmdlZC4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgdXNlcidzIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHJlZ2lzdHJ5IGZpbGVzIGFuZCBXaW5kb3dzCiAgICAgICAgICAgICAgcmVnaXN0cnkgZmlsZXMsIGl0IHVzdWFsbHkgbWFrZXMgc2Vuc2UgdG8gb25seSBzYXZlCiAgICAgICAgICAgICAgdXNlci1tb2RpZmllZCBzdWJrZXlzOyB0aGF0IHdheSwgY2hhbmdlcyB0byB0aGUgcmVzdCBvZgogICAgICAgICAgICAgIHRoZSBnbG9iYWwgb3IgV2luZG93cyByZWdpc3RyaWVzIHdpbGwgc3RpbGwgYWZmZWN0IHRoZQogICAgICAgICAgICAgIHVzZXIuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9zZWN0Mj4KICA8L3NlY3QxPgoKPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCkxvY2FsIHZhcmlhYmxlczoKbW9kZTogc2dtbApzZ21sLXBhcmVudC1kb2N1bWVudDooImNvbmZpZ3VyaW5nLnNnbWwiICJjaGFwdGVyIiAic2VjdDEiICIiKQpFbmQ6Ci0tPgo=