CSAgICAgICBSRUFETUUgZmlsZSBmb3IgbmV0LXNubXAgVmVyc2lvbjogNS43LjMucHJlNQoKRElTQ0xBSU1FUgoKICBUaGUgQXV0aG9ycyBhc3N1bWUgbm8gcmVzcG9uc2liaWxpdHkgZm9yIGRhbWFnZSBvciBsb3NzIG9mIHN5c3RlbQogIHBlcmZvcm1hbmNlIGFzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlc3VsdCBvZiB0aGUgdXNlIG9mIHRoaXMKICBzb2Z0d2FyZS4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IKICBpbXBsaWVkIHdhcnJhbnR5LgoKVEFCTEUgT0YgQ09OVEVOVFMKCiAgRGlzY2xhaW1lcgogIFRhYmxlIE9mIENvbnRlbnRzCiAgSW50cm9kdWN0aW9uCiogU3VwcG9ydGVkIEFyY2hpdGVjdHVyZXMKICBBdmFpbGFiaWxpdHkKICBXZWIgUGFnZQoqIEluc3RhbGxhdGlvbgogIENvcHlpbmcgQW5kIENvcHlyaWdodHMKKiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucwogIEhlbHBpbmcgT3V0CiogQ29kZSBVcGRhdGUgQW5ub3VuY2VtZW50cwoqIE1haWxpbmcgTGlzdHMKICBBZ2VudCBFeHRlbnNpYmlsaXR5CiAgRXhhbXBsZSBBZ2VudCBDb25maWd1cmF0aW9uIGFuZCBVc2FnZQogIENvbmZpZ3VyYXRpb24KICBTdWJtaXR0aW5nIEJ1ZyBSZXBvcnRzCiAgQ2xvc2luZwogIFRoYW5rcwoKICAqID0gUmVxdWlyZWQgUmVhZGluZy4KCklOVFJPRFVDVElPTgoKICBUaGlzIHBhY2thZ2Ugd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIENNVSAyLjEuMi4xIHNubXAgY29kZS4gIEl0CiAgaGFzIGJlZW4gZ3JlYXRseSBtb2RpZmllZCwgcmVzdHJ1Y3R1cmVkLCBlbmhhbmNlZCBhbmQgZml4ZWQuICBJdAogIGhhcmRseSBsb29rcyB0aGUgc2FtZSBhcyBhbnl0aGluZyB0aGF0IENNVSBoYXMgZXZlciByZWxlYXNlZC4gIEl0CiAgd2FzIHJlbmFtZWQgZnJvbSBjbXUtc25tcCB0byB1Y2Qtc25tcCBpbiAxOTk1IGFuZCBsYXRlciByZW5hbWVkIGZyb20KICB1Y2Qtc25tcCB0byBuZXQtc25tcCBpbiBOb3ZlbWJlciAyMDAwLgoKICBUaGlzIFJFQURNRSBmaWxlIHNlcnZlcyBhcyBhIHN0YXJ0aW5nIHBsYWNlIHRvIGxlYXJuIGFib3V0IHRoZQogIHBhY2thZ2UsIGJ1dCB2ZXJ5IGxpdHRsZSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjb250YWluZWQgd2l0aGluCiAgdGhpcyBmaWxlLiAgVGhlIEZBUSBpcyBhbiBleGNlbGxlbnQgcGxhY2UgdG8gc3RhcnQgYXMgd2VsbC4KICBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhIGJ1bmNoIG9mIFJFQURNRSBmaWxlcyBmb3Igc3BlY2lmaWMKICBhcmNoaXRlY3R1cmVzIGFuZCBzcGVjaWZpYyBmZWF0dXJlcy4gIFlvdSBtaWdodCB3aXNoIHRvIGxvb2sgYXQgc29tZQogIG9mIHRoZXNlIG90aGVyIGZpbGVzIGFzIHdlbGwuCgpTVVBQT1JURUQgQVJDSElURUNUVVJFUwoKICBQbGVhc2Ugc2VlIHRoZSBGQVEgZm9yIHRoaXMgaW5mb3JtYXRpb24uCgogIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgY29tcGlsZSBpdCBvbiBvdGhlciBPUyB2ZXJzaW9ucyBhbmQgaXQKICB3b3JrcyBmb3IgeW91IHNvIHdlIGNhbiBhZGQgdGhlbSB0byB0aGUgYWJvdmUgbGlzdC4KCiAgUG9ydGluZzogIFBsZWFzZSEgcmVhZCB0aGUgUE9SVElORyBmaWxlLgoKICBBbHNvIG5vdGUgdGhhdCBtYW55IGFyY2hpdGVjdHVyZSBoYXZlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBSRUFETUUKICBmaWxlcywgc28geW91IHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgb25lIGFwcHJvcHJpYXRlIHRvCiAgeW91ciBwbGF0Zm9ybS4KCkFWQUlMQUJJTElUWQoKICBEb3dubG9hZDoKICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG93bmxvYWQvCiAgICAtIGZ0cDovL2Z0cC5uZXQtc25tcC5vcmcvcHViL3NvdXJjZWZvcmdlL25ldC1zbm1wLwogIFdlYiBwYWdlOgogICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy8KICBQcm9qZWN0IFdpa2k6CiAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvCiAgU291cmNlZm9yZ2UgUHJvamVjdCBwYWdlOgogICAgLSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL25ldC1zbm1wCiAgTWlycm9yczoKICAgIC0gVVM6ICAgICAgICBmdHA6Ly9mdHAuZnJlZXNubXAuY29tL21pcnJvcnMvbmV0LXNubXAvCgogIFRoZSBvbGQgdWNkLXNubXAudWNkYXZpcy5lZHUgd2ViIHNpdGUgYW5kIGZ0cCBzZXJ2ZXIgaXMgbm93CiAgb2ZmbGluZSBhbmQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBhbnkgbG9uZ2VyLgoKV0VCIFBBR0VTCgogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnLwogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbmV0LXNubXAKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpLwoKSU5TVEFMTEFUSU9OCgogIFNlZSB0aGUgSU5TVEFMTCBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBwYWNrYWdlLgoKQ09QWUlORyBBTkQgQ09QWVJJR0hUUwoKICBTZWUgdGhlIENPUFlJTkcgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgcGFja2FnZS4KCkZSRVFVRU5UTFkgQVNLRUQgUVVFU1RJT05TCgogIFNlZSB0aGUgRkFRIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHBhY2thZ2UuCiAgVGhpcyBpcyBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgcHJvamVjdCBXaWtpIGF0CgogICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0ZBUQoKICBzbyB0aGF0IHRoZSB3aWRlciBOZXQtU05NUCBjb21tdW5pdHkgY2FuIGhlbHAgbWFpbnRhaW4gaXQhCgpIRUxQSU5HIE9VVAoKICBUaGlzIGlzIGEgcHJvamVjdCB3b3JrZWQgb24gYnkgcGVvcGxlIGFyb3VuZCB0aGUgbmV0LiAgV2UnZCBsb3ZlCiAgeW91ciBoZWxwLCBidXQgcGxlYXNlIHJlYWQgdGhlIFBPUlRJTkcgZmlsZSBmaXJzdC4gIEFsc28sIHN1YnNjcmliZQogIHRvIHRoZSBuZXQtc25tcC1jb2RlcnMgbGlzdCBkZXNjcmliZWQgYmVsb3cgYW5kIG1lbnRpb24gd2hhdCB5b3UncmUKICBnb2luZyB0byB3b3JrIG9uIHRvIG1ha2Ugc3VyZSBubyBvbmUgZWxzZSBpcyBhbHJlYWR5IGRvaW5nIHNvIQogIFlvdSdsbCBhbHNvIG5lZWQgdG8ga2VlcCB1cCB0byBkYXRlIHdpdGggdGhlIGxhdGVzdCBjb2RlIHNuYXAgc2hvdCwKICB3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSBDVlMgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGZvdW5kIGF0CiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvY3ZzLy4KCiAgQ29udHJpYnV0aW9ucyB0byB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaW4gYW55IGZvcm0gYXJlIGdyZWF0bHkKICBhcHByZWNpYXRlZC4gIFdlIGV4cGVjdCB0aGUgcGFydGllcyBwcm92aWRpbmcgc3VjaCBjb250cmlidXRpb25zIHRvCiAgaGF2ZSB0aGUgcmlnaHQgdG8gY29udHJpYnV0ZSB0aGVtIHRvIHRoZSBOZXQtU05NUCBwcm9qZWN0IG9yIHRoYXQKICB0aGUgcGFydGllcyB0aGF0IGRvIGhhdmUgdGhlIHJpZ2h0IGhhdmUgZGlyZWN0ZWQgdGhlIHBlcnNvbgogIHN1Ym1pdHRpbmcgdGhlIGNvbnRyaWJ1dGlvbiB0byBkbyBzby4gIEluIGFkZGl0aW9uLCBhbGwgY29udHJpYnV0b3JzCiAgbmVlZCB0byBiZSBhd2FyZSB0aGF0IGlmIHRoZSBjb250cmlidXRpb24gaXMgYWNjZXB0ZWQgYW5kCiAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIE5ldC1TTk1QIHByb2plY3QsIGl0IHdpbGwgYmUgcmVkaXN0cmlidXRlZAogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgdXNlZCBmb3IgdGhlIGVudGlyZSBib2R5IG9mCiAgd29yayB0aGF0IGNvbXByaXNlcyB0aGUgTmV0LVNOTVAgcHJvamVjdCAoc2VlIHRoZSBDT1BZSU5HIGZpbGUgZm9yCiAgZGV0YWlscykuICBJZiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IGV2ZXIgY2hhbmdlcyB0aGUgY29udHJpYnV0aW9uCiAgd2lsbCBjb250aW51ZSB0byBiZSByZWxlYXNlZCB1bmRlciBhbnkgbmV3IGxpY2Vuc2VzIGFzIHdlbGwuICBUaGFuawogIHlvdSwgaW4gYWR2YW5jZSwgZm9yIHlvdXIgZ3JhY2lvdXMgY29udHJpYnV0aW9ucy4KCkNPREUgVVBEQVRFIEFOTk9VTkNFTUVOVFMKCiAgU2VlIHRoZSBORVdTIGZpbGUgYW5kIHRoZSBDaGFuZ2VMb2cgZmlsZSBmb3IgZGV0YWlscyBvbiB3aGF0IGhhcwogIGNoYW5nZWQgYmV0d2VlbiByZWxlYXNlcy4KCiAgV2UgaGF0ZSBicm9hZGNhc3RpbmcgYW5ub3VuY2UgbWVzc2FnZXMgdG8gb3RoZXIgbWFpbGluZyBsaXN0cyBhbmQKICBuZXdzZ3JvdXBzLCBzbyB0aGVyZSBpcyBhIG1haWxpbmcgbGlzdCBzZXQgdXAgdG8gaGFuZGxlIHJlbGVhc2UKICBhbm5vdW5jZW1lbnRzLiAgQW55IHRpbWUgd2UgcHV0IG5ldyBzb2Z0d2FyZSBvdXQgZm9yIGZ0cCwgd2UnbGwgbWFpbAogIHRoaXMgZmFjdCB0byBuZXQtc25tcC1hbm5vdW5jZUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQuICBTZWUgdGhlCiAgTUFJTElORyBMSVNUUyBzZWN0aW9uIGRlc2NyaWJlZCBiZWxvdyB0byBzaWduIHVwIGZvciB0aGVzZQogIGFubm91bmNlbWVudHMuCgogIFdlIHdpbGwgcG9zdCBuZXcgYW5ub3VuY2VtZW50cyBvbiBhIHZlcnkgaW5mcmVxdWVudCBiYXNpcyB0byB0aGUKICBvdGhlciBjaGFubmVscyAodGhlIG90aGVyIHNubXAgbWFpbGluZyBsaXN0cyBhbmQgbmV3c2dyb3VwcyBsaWtlCiAgY29tcC5wcm90b2NvbHMuc25tcCksIGJ1dCBvbmx5IGZvciBtYWpvciBjb2RlIHJldmlzaW9ucyBhbmQgbm90IGZvcgogIGJ1Zy1maXggcGF0Y2hlcyBvciBzbWFsbCBmZWF0dXJlIHVwZ3JhZGVzLgoKTUFJTElORyBMSVNUUwoKICBUaGUgbGlzdHM6CgogICAgQSBudW1iZXIgb2YgbWFpbGluZyBsaXN0cyBoYXZlIGJlZW4gY3JlYXRlZCBmb3Igc3VwcG9ydCBvZiB0aGUgcHJvamVjdDoKICAgIFRoZSBtYWluIG9uZXMgYXJlOgoKICAgICAgbmV0LXNubXAtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAtLSBGb3Igb2ZmaWNpYWwgYW5ub3VuY2VtZW50cwogICAgICBuZXQtc25tcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICAgIC0tIEZvciB1c2FnZSBkaXNjdXNzaW9ucwogICAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgIC0tIEZvciBkZXZlbG9wbWVudCBkaXNjdXNzaW9ucwoKICAgIFRoZSAtY29kZXJzIGxpc3QgaXMgaW50ZW5kZWQgZm9yIGRpc2N1c3Npb24gb24gZGV2ZWxvcG1lbnQgb2YgY29kZQogICAgdGhhdCB3aWxsIGJlIHNoaXBwZWQgYXMgcGFydCBvZiB0aGUgcGFja2FnZS4gIFRoZSAtdXNlcnMgbGlzdCBpcwogICAgZm9yIGdlbmVyYWwgZGlzY3Vzc2lvbiBvbiBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhlIHBhY2thZ2UsCiAgICBpbmNsdWRpbmcgaXNzdWVzIHdpdGggY29kaW5nIHVzZXItZGV2ZWxvcGVkIGFwcGxpY2F0aW9ucyAoY2xpZW50cywKICAgIG1hbmFnZXJzLCBNSUIgbW9kdWxlcywgZXRjKS4KCiAgICBQbGVhc2UgZG8gKk5PVCogc2VuZCBtZXNzYWdlcyB0byBib3RoIC11c2VycyBhbmQgLWNvZGVycyBsaXN0cy4KICAgIFRoaXMgaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSwgYW5kIHNpbXBseSBzZXJ2ZXMgdG8gZnVydGhlcgogICAgb3ZlcmxvYWQgKGFuZCBhbm5veSkgdGhlIGNvcmUgZGV2ZWxvcG1lbnQgdGVhbS4gICBJZiBpbiBkb3VidCwKICAgIGp1c3QgdXNlIHRoZSAtdXNlcnMgbGlzdC4KCgogICAgVGhlIG90aGVyIGxpc3RzIG9mIHBvc3NpYmxlIGludGVyZXN0IGFyZToKCiAgICAgIG5ldC1zbm1wLWN2c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICAgICAgLS0gRm9yIGN2cyB1cGRhdGUgYW5ub3VuY2VtZW50cwogICAgICBuZXQtc25tcC1idWdzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgICAgIC0tIEZvciBCdWcgZGF0YWJhc2UgdXBkYXRlIGFubm91bmNlbWVudHMKICAgICAgbmV0LXNubXAtcGF0Y2hlc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICAtLSBGb3IgUGF0Y2ggZGF0YWJhc2UgdXBkYXRlIGFubm91bmNlbWVudHMKCiAgICBQbGVhc2UgZG8gTk9UIHBvc3QgbWVzc2FnZXMgdG8gdGhlc2UgbGlzdHMgKG9yIHRvIHRoZSBhbm5vdW5jZSBsaXN0IGFib3ZlKS4KICAgIEJ1ZyByZXBvcnRzIGFuZCBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdmlhIHRoZSBTb3VyY2UgRm9yZ2UgdHJhY2tlcgogICAgc3lzdGVtLiAgU2VlIHRoZSBtYWluIHByb2plY3Qgd2ViIHBhZ2VzIGZvciBkZXRhaWxzLgoKICAgIFRvIHN1YnNjcmliZSB0byBhbnkgb2YgdGhlc2UgbGlzdHMsIHBsZWFzZSBzZWU6CiAgCiAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2xpc3RzLwoKCiAgQXJjaGl2ZXM6CiAgICBUaGUgYXJjaGl2ZXMgZm9yIHRoZXNlIG1haWxpbmcgbGlzdHMgY2FuIGJlIGZvdW5kIGJ5IGZvbGxvd2luZyBsaW5rcyBhdAoKICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvbGlzdHMvCgpBR0VOVCBFWFRFTlNJQklMSVRZCgogIFRoZSBhZ2VudCB0aGF0IGNvbWVzIHdpdGggdGhpcyBwYWNrYWdlIGlzIGV4dGVuc2libGUgdGhyb3VnaCB1c2Ugb2YKICBzaGVsbCBzY3JpcHRzIGFuZCBvdGhlciBtZXRob2RzLiAgU2VlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbCBwYWdlcwogIChsaWtlIHNubXBkLmNvbmYpIGFuZCBydW4gdGhlIHNubXBjb25mIHBlcmwgc2NyaXB0IGZvciBmdXJ0aGVyIGRldGFpbHMuCgogIFlvdSBjYW4gYWxzbyBleHRlbmQgdGhlIGFnZW50IGJ5IHdyaXRpbmcgQyBjb2RlIGRpcmVjdGx5LiAgVGhlIGFnZW50CiAgaXMgZXh0cmVtZWx5IG1vZHVsYXIgaW4gbmF0dXJlIGFuZCB5b3UgbmVlZCBvbmx5IGNyZWF0ZSBuZXcgZmlsZXMsCiAgcmUtcnVuIGNvbmZpZ3VyZSBhbmQgcmUtY29tcGlsZSAob3IgbGluayBhZ2FpbnN0IGl0cyBsaWJyYXJpZXMpLiAgTm8KICBtb2RpZmljYXRpb24gb2YgdGhlIGRpc3RyaWJ1dGVkIHNvdXJjZSBmaWxlcyBhcmUgbmVjZXNzYXJ5LiAgU2VlIHRoZQogIGZvbGxvd2luZyBmaWxlcyBmb3IgZGV0YWlscyBvbiBob3cgdG8gZ28gYWJvdXQgdGhpczoKICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvLAogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzLyouYwoKICBBbHNvLCBzZWUgdGhlIGxvY2FsL21pYjJjIHByb2dyYW0gYW5kIGl0cyBSRUFETUUgZmlsZSBmb3IgaGVscCBpbgogIHR1cm5pbmcgYSB0ZXh0dWFsIG1pYiBkZXNjcmlwdGlvbiBpbnRvIGEgQyBjb2RlIHRlbXBsYXRlLgoKICBXZSBub3cgc3VwcG9ydCBBZ2VudFggZm9yIHN1YmFnZW50IGV4dGVuc2liaWxpdHkuICBUaGUgbmV0LXNubXAKICBhZ2VudCBjYW4gcnVuIGFzIGJvdGggYSBtYXN0ZXIgYWdlbnQgYW5kIGEgc3ViYWdlbnQuICBBZGRpdGlvbmFsbHksCiAgYSB0b29sa2l0IGlzIHByb3ZpZGVkIHRoYXQgZW5hYmxlcyB1c2VycyBvZiBpdCB0byBlYXNpbHkgZW1iZWQgYQogIGFnZW50eCBjbGllbnQgaW50byBleHRlcm5hbCBhcHBsaWNhdGlvbnMuICBTZWUgdGhlIHR1dG9yaWFsIGF0CiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0LyBmb3IgYW4gZXhhbXBsZSBvZiBob3cKICBnbyBhYm91dCBkb2luZyB0aGlzLgoKQ09ORklHVVJBVElPTgoKICBTZWUgdGhlIG1hbi9zbm1wLmNvbmYuNSBtYW51YWwgcGFnZS4KCiAgRm9yIHRoZSBhZ2VudCwgYWRkaXRpb25hbGx5IHNlZSB0aGUgbWFuL3NubXBkLmNvbmYuNSBtYW51YWwgcGFnZS4KCiAgRm9yIHRoZSBzbm1wdHJhcGQsIHNlZSB0aGUgbWFuL3NubXB0cmFwZC5jb25mLjUgbWFudWFsIHBhZ2UuCgogIFlvdSBjYW4gYWxzbyBydW4gdGhlIHNubXBjb25mIHBlcmwgc2NyaXB0IHRvIGhlbHAgeW91IGNyZWF0ZSBzb21lIG9mCiAgdGhlc2UgZmlsZXMuCgpTVUJNSVRUSU5HIEJVRyBSRVBPUlRTCgogIEltcG9ydGFudDogKlBsZWFzZSogaW5jbHVkZSB3aGF0IHZlcnNpb24gb2YgdGhlIG5ldC1zbm1wIChvcgogIHVjZC1zbm1wKSBwYWNrYWdlIHlvdSBhcmUgdXNpbmcgYW5kIHdoYXQgYXJjaGl0ZWN0dXJlKHMpIHlvdSdyZQogIHVzaW5nLCBhcyB3ZWxsIGFzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGV4YWN0bHkgd2hhdCBpcyB3cm9uZy4KCiAgVG8gc3VibWl0IGEgYnVnIHJlcG9ydCwgcGxlYXNlIHVzZSB0aGUgd2ViIGludGVyZmFjZSBhdAogIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2J1Z3MvLiAgSXQgaXMgYSBmdWxsLWZsZWRnZWQKICBidWctdHJhY2tpbmcgc3lzdGVtIHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gc2VhcmNoIGZvciBhbHJlYWR5CiAgZXhpc3RpbmcgYnVnIHJlcG9ydHMgYXMgd2VsbCBhcyB0cmFjayB0aGUgc3RhdHVzIG9mIHlvdXIgcmVwb3J0IGFzCiAgaXQgaXMgcHJvY2Vzc2VkIGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCgogIElmIHlvdSBpbnRlbmQgdG8gc3VibWl0IGEgcGF0Y2ggYXMgd2VsbCwgcGxlYXNlIHJlYWQgdGhlIFBPUlRJTkcKICBmaWxlIGJlZm9yZSB5b3UgZG8gc28gYW5kIHRoZW4gc3VibWl0IGl0IHRvCiAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvcGF0Y2hlcy8uCgpDTE9TSU5HCgogIFdlIGxvdmUgcGF0Y2hlcy4gIFNlbmQgc29tZSB0byB1cyEgIEJ1dCBiZWZvcmUgeW91IGRvLCBwbGVhc2Ugc2VlCiAgdGhlICdQT1JUSU5HJyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiBoZWxwaW5nIHVzIG91dCB3aXRoIHRoZQogIHByb2Nlc3Mgb2YgaW50ZWdyYXRpbmcgeW91ciBwYXRjaGVzIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXRzIGEgbmV3CiAgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiBvciBhIG5ldyBwb3J0KS4KCiAgQWxzbywgV2UncmUgaW50ZXJlc3RlZCBpZiBhbnlvbmUgYWN0dWFsbHkgdXNlcy9saWtlcy9oYXRlcy93aGF0ZXZlcgogIHRoaXMgcGFja2FnZS4uLiAgTWFpbCB1cyBhIG5vdGUgYW5kIGxldCB1cyBrbm93IHdoYXQgeW91IHRoaW5rIG9mIGl0IQoKICBIYXZlIGZ1biBhbmQgbWF5IGl0IG1ha2UgeW91ciBsaWZlIGVhc2llciwKCiAgICBUaGUgbmV0LXNubXAgZGV2ZWxvcGVycwoKVEhBTktTCgogIFRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdmFyaW91cyBwYXRjaGVzIGFuZAogIGltcHJvdmVtZW50cy4gIFRvIHRoZW0gd2Ugb3dlIG91ciBkZWVwZXN0IHRoYW5rcyAoYW5kIHlvdSBkbyB0b28hKToKCiAgICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFN0ZXZlIFdhbGRidXNzZXIgPHdhbGRidXNzZXJAbmV4dGJlYWNvbi5jb20+CiAgICBEYW4gQS4gRGlja2V5IDxkZGlja2V5QHRyYW5zaXRpb24uY29tPgogICAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAY3NjLmxpdi5hYy51az4KICAgIEdpb3Zhbm5pIFMuIE1hcnpvdCA8Z21hcnpvdEBub3J0ZWxuZXR3b3Jrcy5jb20+CiAgICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFNpbW9uIExlaW5lbiA8c2ltb25AbGltbWF0LnN3aXRjaC5jaD4KICAgIERhdmlkIFQuIFBlcmtpbnMgPGRwZXJraW5zQGRzcGVya2lucy5jb20+CiAgICBNaWtlIFBlcmlrIDxtaWtlcEBjcnQuY29tPgogICAgU2FuamFpIE5hcmFpbiA8bmFyYWluQHRodW1wZXIuYmVsbGNvcmUuY29tPgogICAgZnJhbmN1c0BtZXRzbnkuZGVscGhpLmNvbQogICAgR2FyeSBQYWxtZXIgPGdwYWxtZXJAZnJlZWJzZC5vcmc+CiAgICBNYXJjIEcuIEZvdXJuaWVyIDxzY3JhcHB5QGtpLm5ldD4KICAgIEdhcnkgQS4gSGF5d2FyZCA8Z2FoQGJlbGxjb3JlLmNvbT4KICAgIEplbm5pZmVyIEJyYXkgPGpicmF5QG9yaWdpbi1hdC5jby51az4KICAgIFBoaWxpcCBHdWVudGhlciA8Z3VlbnRoZXJAZ2FjLmVkdT4KICAgIEVsd3luIEIgRGF2aWVzIDxlZGF2aWVzQG9yaWdpbi1hdC5jby51az4KICAgIFNpbW9uIEJ1cmdlIDxzaW1vbmJAdGVsc3RyYS5jb20uYXU+CiAgICBEYXZpZCBQYXVsIFppbW1lcm1hbiA8ZHB6QGFwcGxlLmNvbT4KICAgIEFsYW4gQmF0aWUgPGJhdGllQGFhaHouamYuaW50ZWwuY29tPgogICAgTWljaGFlbCBEb3VnbGFzcyA8bWlrZWRvdWdAdGV4YXMubmV0PgogICAgVGVkIFJ1bGUgPFRlZF9SdWxlQEZMRVhURUNILkNPLlVLPgogICAgQ3JhaWcgQmV2aW5zIDxjcmFpZ2JAYml0Y29tLm5ldC5hdT4KICAgIEFydGhlciBIeXVuIDxhcnRodXJAcHNpLmNvbT4KICAgIENyaXN0aWFuIEVzdGFuIDxDcmlzdGlhbi5Fc3RhbkBuZXQudXRjbHVqLnJvPgogICAgRXVnZW5lIFBvbG92bmlrb3YgPGV1Z2VuQHJkLnpnaWsuemFwb3Jpemh6aGUudWE+CiAgICBKYWtvYiBFbGxlcnN0ZWR0IDxqYWtvYkBkeW5hcmMuc2U+CiAgICBNaWNoYWVsIEouIFNsaWZjYWsgPHNsaWZAYmVsbHNvdXRoLm5ldD4KICAgIEpvbmFzIE9sc3NvbiA8am9sc3NvbkBlcnYuZXJpY3Nzb24uc2U+CiAgICBKYW1lcyBILiBZb3VuZyA8c3lzamh5QGdzdS5lZHU+CiAgICBKZWZmIEpvaG5zb24gPGpiakByZWRoYXQuY29tPgogICAgTWFya2t1IExhdWtrYW5lbiA8bWFybGF1a2tAc3R5YmJhLm50Yy5ub2tpYS5jb20+CiAgICBEZXJlayBTaW1rb3dpYWsgPGRlcmVrc0BrZC1kZXYuY29tPgogICAgRGF2aWQgRi4gTmV3bWFuIDxkbmV3bWFuQGVwbmV0LmNvbT4KICAgIE5pY2sgQW1hdG8gPG5hYW1hdG9AbWVyaXQuZWR1PgogICAgTWlrZSBCYWVyIDxiYWVybUBjYWx3ZWIuY29tPgogICAgUGF0cmljayBMYXdyZW5jZSA8cGpsYXdyZW5jZUB1Y2RhdmlzLmVkdT4KICAgIFJ1c3MgTXVuZHkgPG11bmR5QHRpc2xhYnMuY29tPgogICAgT2xhZnVyIEd1ZG11bmRzc29uIDxvZ3VkQHRpc2xhYnMuY29tPgogICAgRGF2aWQgUmVlZGVyIDxkcmVlZGVyQHRpc2xhYnMuY29tPgogICAgRWQgTGV3aXMgPGxld2lzQHRpc2xhYnMuY29tPgogICAgQmlsbCBCYWJzb24gPHdiYWJzb25AdGlzbGFicy5jb20+CiAgICBDaHJpcyBTbWl0aCA8Y3NtaXRoQHBsYXRmb3JtLmNvbT4KICAgIE1pa2UgTWljaGF1ZCA8bWlrZW1pY2hhdWRAZWFydGhsaW5rLm5ldD4KICAgIEFuZHkgSG9vZCA8YWhvb2RAd2VzdHBhYy5jb20uYXU+CiAgICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CiAgICBCZXJ0IERyaWVodWlzIDxkcmllaHVpc0BwbGF5YmVpbmcub3JnPgogICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyIDxzY2hvZW53QGlici5jcy50dS1icy5kZT4KICAgIEZyYW5rIFN0cmF1c3MgPHN0cmF1c3NAaWJyLmNzLnR1LWJzLmRlPgogICAgUmFnbmFyIEtq+HJzdGFkIDx1Y2RAcmFnbmFyay52ZXN0ZGF0YS5ubz4KICAgIEpvY2hlbiBLbWlldHNjaCA8am9jaGVuLmttaWV0c2NoQHR1LWNsYXVzdGhhbC5kZT4KICAgIEp1bi1pY2hpcm8gaXRvanVuIEhhZ2lubyA8aXRvanVuQGlpamxhYi5uZXQ+CiAgICBKb2huIEwgVmlsbGFsb3ZvcyA8am9obi5sLnZpbGxhbG92b3NAaW50ZWwuY29tPgogICAgQ2hyaXN0b3BoIE1hbW1pdHpzY2ggPENocmlzdG9waC5NYW1taXR6c2NoQHR1LWNsYXVzdGhhbC5kZT4KICAgIEFybmUgT2VzbGVib2UgPEFybmUuT2VzbGVib2VAaXRlbS5udG51Lm5vPgogICAgSmVmZiBDb3VycyA8amVmZkB1bHRyYWRucy5jb20+CiAgICBLYXJsIFNjaGlsa2UgPGthcmxfc2NoaWxrZUBlbGkubmV0PgogICAgSm9obiBOYXlsb24gPGpicG5AY2FtYnJpZGdlYnJvYWRiYW5kLmNvbT4KICAgIEtlbiBIb3Juc3RlaW4gPGtlbmhAY21mLm5ybC5uYXZ5Lm1pbD4KICAgIE1hcnRpbiBPbGRmaWVsZCA8bUBtYWlsLnRjPgogICAgSGFycmllIEhhemV3aW5rZWwgPGhhcnJpZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBNYXJrIEZlcmxhdHRlIDxmZXJsYXR0ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBNYXJ1cyBNZWlzc25lciA8bWFyY3VzbWVpc3NuZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgU3RlcGhhbiBXZW56ZXIgPHN0ZXBoYW53ZW56ZWxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgUm9uIE1ldmlzc2VuIDxyb24ubWV2aXNzZW5AZWVkLmVyaWNzc29uLnNlPgogICAgVC5KLiBNYXRoZXIgPHRqbWF0aGVyQHRqbWF0aGVyLmNvbT4KICAgIENyYWlnIFNldGVyYSA8c2V0ZXJhanVua0BjaGFydGVyLm5ldD4KICAgIEthdHN1aGlzYSBBQkUgPGFiZWthdHN1QGN5c29scy5jb20+CiAgICBBeGVsIEtpdHRlbmJlcmdlciA8QXhlbC5LaXR0ZW5iZXJnZXJAbWF4eGlvLmNvbT4KICAgIEpvaGFubmVzIFNjaG1pZHQtRmlzY2hlciA8anNmQEludGVyRmFjZS1BRy5jb20+CiAgICBKZWZmcmV5IFdhdHNvbiA8bm9zdGF3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEJydWNlIFNoYXcgPEJydWNlLlNoYXdAZ292LmFiLmNhPgogICAgU3RlZmFuIFJhZG1hbiA8c3JhZG1hbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBTdGVwaGVuIEouIEZyaWVkbCA8c2pmcmllZGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQWxleCBCdXJnZXIgPGFsZXhfYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBDaHJpc3RvcGhlIFZhcm9xdWkgPGV4dC5kZXZvdGVhbS52YXJvcXVpQHNuY2YuZnI+CiAgICBTcmlrYW50aCBQaW5kaXByb2xpIDxzcmlwaW5kaXBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgS2V2aW4gR3JhaGFtIDxrZXZncmFoYW03QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIFhpYW9mZW5nIExpbmcgPHhmbGluZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBCcmFuZG9uIEtuaXR0ZXIgPGtuaXR0ZXJiQGJsLi4uPgogICAgQW5kcmV3IEZpbmRsYXkgPGFuZHJldy5maW5kbGF5QHNraWxscy0xc3QuY28udWs+CiAgICBSb24gVGFib3IgPHJ0YWJvckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBQZXRlciBXYXJhc2luIDxkcmctcjNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQm9iIFJvd2xhbmRzIDxyb2JlcnQucm93bGFuZHNAc3VuLmNvbT4KICAgIFBldGVyIEhpY2tzIDxQZXRlci5IaWNrc0BQT0dHUy5DTy5VSz4KICAgIEFuZHkgU21pdGggPHdhc21pdGgzMkBlYXJ0aGxpbmsubmV0PgogICAgTmljayBCYXJrYXMgPG5iYXJrYXNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgogICAgR2VlcnQgRGUgUGV1dGVyIDxnZWVydEBkZXBldXRlci5vcmc+CiAgICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KICAgIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzbWVpc3NuZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQW5kcmV3IFJ1Y2tlciBKb25lcyA8YXJqb25lc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBEYWkuSC4gPGRnLWZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBWbGFkaXNsYXYgQm9nZGFub3YgPHNsYXZhX3JlZ0Buc3lzLmJ5PgogICAgUGV0ZXIgTWFydGluIDxwbm1hcnRpbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBUaG9tYXMgTGFja2V5IDx0ZWxhY2tleUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICBKb2UgQnVlaGxlciA8amJ1ZWhsZXJAc3BpcmVudGNvbS5jb20+CiAgICBBbmRlcnMgUGVyc3NvbiA8YXBlcnNzb25AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgUm9qZXIgPHJvamVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAgIEJhcnQgVmFuIEFzc2NoZSA8YmFydC52YW5hc3NjaGVAZ21haWwuY29tPgogICAgUGFibG8gQ2FyYm9uaSA8cGNhcmJvbmlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CiAgICBCcmlhbiBTaXBvcyA8YnNpcG9zcmtmQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCiAgV2UndmUgcHJvYmFibHkgZm9yZ290dGVuIHBlb3BsZSBvbiB0aGlzIGxpc3QuICBMZXQgdXMga25vdyBpZiB5b3UndmUKICBjb250cmlidXRlZCBjb2RlIGFuZCB3ZSd2ZSBsZWZ0IHlvdSBvdXQuCg==