VGhlIGZvbGxvd2luZyBsaWNlbnNlIGNvdmVycyBhbGwgbWF0ZXJpYWwgcmVtYWluaW5nIGluIHRoaXMgZGlyZWN0b3J5LApleGNlcHQgU2xvd0NSVGVzdC5qYXZhLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IGFuIEFwYWNoZSAyLjAgbGljZW5zZS4KCkNvcHlyaWdodCCpIDE5OTksIFNpbGljb24gR3JhcGhpY3MsIEluYy4gLS0gQUxMIFJJR0hUUyBSRVNFUlZFRAoKUGVybWlzc2lvbiBpcyBncmFudGVkIGZyZWUgb2YgY2hhcmdlIHRvIGNvcHksIG1vZGlmeSwgdXNlIGFuZCBkaXN0cmlidXRlCnRoaXMgc29mdHdhcmUgIHByb3ZpZGVkIHlvdSBpbmNsdWRlIHRoZSBlbnRpcmV0eSBvZiB0aGlzIG5vdGljZSBpbiBhbGwKY29waWVzIG1hZGUuCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQpLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLApXQVJSQU5USUVTIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVApGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuICAgU0dJIEFTU1VNRVMgTk8gUklTSyBBUyBUTyBUSEUKUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFLiAgIFNIT1VMRCBUSEUgU09GVFdBUkUgUFJPVkUKREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBTR0kgQVNTVU1FUyBOTyBDT1NUIE9SIExJQUJJTElUWSBGT1IgQU5ZClNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uICBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMKQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIFNVQkpFQ1QgU09GVFdBUkUgSVMKQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KClVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcsCldJVEhPVVQgTElNSVRBVElPTiwgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgQ09OVFJBQ1QsIE9SCk9USEVSV0lTRSwgU0hBTEwgU0dJIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsCklOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIFdJVEggUkVTUEVDVCBUTyBUSEUKU09GVFdBUkUgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksKU1RPUFBBR0UsIExPU1MgT0YgREFUQSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwKT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTR0kgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GClRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVApBUFBMWSBUTyBMSUFCSUxJVFkgUkVTVUxUSU5HIEZST00gU0dJJ3MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUKTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQpFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVApFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCgpUaGVzZSBsaWNlbnNlIHRlcm1zIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoCnRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhcyBhcHBsaWVkIHRvCmFncmVlbWVudHMgZW50ZXJlZCBpbnRvIGFuZCB0byBiZSBwZXJmb3JtZWQgZW50aXJlbHkgd2l0aGluIENhbGlmb3JuaWEKYmV0d2VlbiBDYWxpZm9ybmlhIHJlc2lkZW50cy4gIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoZXNlIGxpY2Vuc2UKdGVybXMgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMKb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEgKG9yLCBhYnNlbnQgc3ViamVjdCBtYXR0ZXIKanVyaXNkaWN0aW9uIGluIHN1Y2ggY291cnRzLCB0aGUgY291cnRzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhKSwgd2l0aAp2ZW51ZSBseWluZyBleGNsdXNpdmVseSBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuCgpDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgLS0gQUxMIFJJR0hUUyBSRVNFUlZFRAoKUGVybWlzc2lvbiBpcyBncmFudGVkIGZyZWUgb2YgY2hhcmdlIHRvIGNvcHksIG1vZGlmeSwgdXNlIGFuZCBkaXN0cmlidXRlCnRoaXMgc29mdHdhcmUgIHByb3ZpZGVkIHlvdSBpbmNsdWRlIHRoZSBlbnRpcmV0eSBvZiB0aGlzIG5vdGljZSBpbiBhbGwKY29waWVzIG1hZGUuCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQpLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLApXQVJSQU5USUVTIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVApGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuICAgSEVXTEVUVC1QQUNLQVJEIEFTU1VNRVMKTk8gUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFLgpTSE9VTEQgVEhFIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKSEVXTEVUVC1QQUNLQVJEIEFTU1VNRVMgTk8gQ09TVCBPUiBMSUFCSUxJVFkgRk9SIEFOWQpTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiAgVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTCkFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBTVUJKRUNUIFNPRlRXQVJFIElTCkFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCgpVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HLApXSVRIT1VUIExJTUlUQVRJT04sIE5FR0xJR0VOQ0UgT1IgU1RSSUNUIExJQUJJTElUWSksIENPTlRSQUNULCBPUgpPVEhFUldJU0UsIFNIQUxMIEhFV0xFVFQtUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLApJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFClNPRlRXQVJFIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLClNUT1BQQUdFLCBMT1NTIE9GIERBVEEsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMCk9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgSEVXTEVUVC1QQUNLQVJEIFNIQUxMCkhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgUkVTVUxUSU5HCkZST00gSEVXTEVUVC1QQUNLQVJEJ3MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUKTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQpFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVApFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCg==