LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChDKSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBhbmQgaXRzIGFmZmlsaWF0ZXMKClRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgb3duZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwKSW50ZXJuYXRpb25hbCBMdGQuIGFuZC9vciBpdHMgYWZmaWxpYXRlcyAoIk1hcnZlbGwiKSB1bmRlciB0aGUgZm9sbG93aW5nCmFsdGVybmF0aXZlIGxpY2Vuc2luZyB0ZXJtcy4gIE9uY2UgeW91IGhhdmUgbWFkZSBhbiBlbGVjdGlvbiB0byBkaXN0cmlidXRlIHRoZQpGaWxlIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWx0ZXJuYXRpdmVzLCBwbGVhc2UgKGkpIGRlbGV0ZSB0aGlzCmludHJvZHVjdG9yeSBzdGF0ZW1lbnQgcmVnYXJkaW5nIGxpY2Vuc2UgYWx0ZXJuYXRpdmVzLCAoaWkpIGRlbGV0ZSB0aGUgdHdvCmxpY2Vuc2UgYWx0ZXJuYXRpdmVzIHRoYXQgeW91IGhhdmUgbm90IGVsZWN0ZWQgdG8gdXNlIGFuZCAoaWlpKSBwcmVzZXJ2ZSB0aGUKTWFydmVsbCBjb3B5cmlnaHQgbm90aWNlIGFib3ZlLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTWFydmVsbCBDb21tZXJjaWFsIExpY2Vuc2UgT3B0aW9uCgpJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCBhbmQgeW91IGhhdmUgZW50ZXJlZCBpbnRvIGEgY29tbWVyY2lhbApsaWNlbnNlIGFncmVlbWVudCAoYSAiQ29tbWVyY2lhbCBMaWNlbnNlIikgd2l0aCBNYXJ2ZWxsLCB0aGUgRmlsZSBpcyBsaWNlbnNlZAp0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBhcHBsaWNhYmxlIENvbW1lcmNpYWwgTGljZW5zZS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk1hcnZlbGwgR1BMIExpY2Vuc2UgT3B0aW9uCgpJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yCm1vZGlmeSB0aGlzIEZpbGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MSAodGhlICJHUEwgTGljZW5zZSIpLCBhIGNvcHkgb2Ygd2hpY2ggaXMKYXZhaWxhYmxlIGFsb25nIHdpdGggdGhlIEZpbGUgaW4gdGhlIGxpY2Vuc2UudHh0IGZpbGUgb3IgYnkgd3JpdGluZyB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IG9yCm9uIHRoZSB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgoKVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRVhQUkVTU0xZCkRJU0NMQUlNRUQuICBUaGUgR1BMIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHRoaXMgd2FycmFudHkKZGlzY2xhaW1lci4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24KCklmIHlvdSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IKbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4KUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKICAgICoJUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAoJdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqCVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cglub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCglkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKICAgICoJTmVpdGhlciB0aGUgbmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKCXVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKCXNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwooSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgpBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAooSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgX19JTkNtdkJvYXJkRW52TGliaAojZGVmaW5lIF9fSU5DbXZCb2FyZEVudkxpYmgKCi8qIGRlZmluZXMgKi8KLyogVGhlIGJlbG93IGNvbnN0YW50IG1hY3JvcyBkZWZpbmVzIHRoZSBib2FyZCBJMkMgRUVQUk9NIGRhdGEgb2Zmc2V0cyAqLwoKI2luY2x1ZGUgImN0cmxFbnYvbXZDdHJsRW52TGliLmgiCiNpbmNsdWRlICJtdlN5c0h3Q29uZmlnLmgiCiNpbmNsdWRlICJib2FyZEVudi9tdkJvYXJkRW52U3BlYy5oIgojaW5jbHVkZSAidHdzaS9tdlR3c2kuaCIKCi8qIERVQVJUIHN0dWZmIGZvciBUY2xrIGRldGVjdGlvbiBvbmx5ICovCiNkZWZpbmUgRFVBUlRfQkFVRF9SQVRFCQkJMTE1MjAwCiNkZWZpbmUgTUFYX0NMT0NLX01BUkdJTkUJCTUwMDAwMDAJLyogTWF4aW11bSBkZXRlY3RlZCBjbG9jayBtYXJnaW5lICovCgovKiBWb2ljZSBkZXZpY2VzIGFzc2VtYmx5IG1vZGVzICovCiNkZWZpbmUgREFJU1lfQ0hBSU5fTU9ERQkxCiNkZWZpbmUgRFVBTF9DSElQX1NFTEVDVF9NT0RFICAgMAojZGVmaW5lIElOVEVSUlVQVF9UT19NUFAgICAgICAgIDEKI2RlZmluZSBJTlRFUlJVUFRfVE9fVERNCTAKCiNkZWZpbmUgQk9BUkRfRVRIX1BPUlRfTlVNICBNVl9FVEhfTUFYX1BPUlRTCiNkZWZpbmUgQk9BUkRfRVRIX1NXSVRDSF9QT1JUX05VTQk4CiNkZWZpbmUgQk9BUkRfRVRIX1NXSVRDSF9DUFVQT1JUX05VTQkyCgojZGVmaW5lCU1WX0JPQVJEX01BWF9VU0JfSUYJCTEKI2RlZmluZSBNVl9CT0FSRF9NQVhfTVBQCQkxMgojZGVmaW5lIE1WX0JPQVJEX05BTUVfTEVOICAJCTB4MjAKCi8qCiNkZWZpbmUgTVZfQk9BUkRfQ0ZHX0lTX0dQT05fRU4oY2ZnKQkoY2ZnICYgMHgxKQojZGVmaW5lIE1WX0JPQVJEX0NGR19JU19FUE9OX0VOKGNmZykJKCFNVl9CT0FSRF9DRkdfSVNfRVBPTihjZmcpKQojZGVmaW5lIE1WX0JPQVJEX0NGR19JU19RU0dNSUlfRU4oY2ZnKQkoKGNmZyAmIDB4OCkgJiYgKGNmZyAmIDB4MTApKQojZGVmaW5lIE1WX0JPQVJEX0NGR19JU19TR01JSV9FTihjZmcpCSgoY2ZnICYgMHg4KSAmJiAoIShjZmcgJiAweDEwKSkpCiNkZWZpbmUgTVZfQk9BUkRfQ0ZHX0lTX1NBVEFfRU4oY2ZnKQkoIShjZmcgJiAweDgpKQojZGVmaW5lIE1WX0JPQVJEX0NGR19JU18zRkVfMUdFX0VOKGNmZykJKGNmZyAmIDB4MjApCiNkZWZpbmUgTVZfQk9BUkRfQ0ZHX0lTXzRGRV9FTihjZmcpCSghTVZfQk9BUkRfQ0ZHX0lTXzNGRV8xR0VfRU4oY2ZnKSkKKi8KLyogREJfODhGNjYwMSAgQXZhbnRhIGJvYXJkIGNvbmZpZ3VyYXRpb24gKi8KLyogSlAwCQlNQUMgY29ubmVjdGlvbiAJMCCWIE1BQzAgY29ubmVjdGVkIHRvIEdCRSBQSFkgYW5kIE1BQzEgIGNvbm5lY3RlZCB0byBMUCBTZXJEZXMKCQkJCQkJCTEgliBNQUMwIGNvbm5lY3RlZCB0byBMUCBTZXJEZXMgKi8KI2RlZmluZSBNVl9CT0FSRF82NjAxX0NGR19NQUNfU1JDKGNmZykJKGNmZyAmIDB4MSkKLyogSlAxCUV0aGVybmV0IGNhcGFjaXR5CTAgliBzaW5nbGUgRXRoZXJuZXQgY2hhbm5lbCAoR0JFIG9ubHkpCgkJCQkJCQkxIJYgZHVhbCBFdGguIGNoYW5uZWxzICovCiNkZWZpbmUgTVZfQk9BUkRfNjYwMV9DRkdfRVRIX0NBUChjZmcpCShjZmcgJiAweDIpCi8qIEpQMglMUCBTZXJEZXMgY29ubmVjdGlvbgkwIC0gIExQIFNlckRlcyBjb25uZWN0ZWQgdG8gR0JFIFBIWQoJCQkJCQkJCTEgLSAgTFAgU2VyRGVzIGNvbm5lY3RlZCB0byBTRlAJKi8KI2RlZmluZSBNVl9CT0FSRF82NjAxX0NGR19MUF9TRVJERVNfQ09OX01BU0sJMHg0CiNkZWZpbmUgTVZfQk9BUkRfNjYwMV9DRkdfTFBfU0VSREVTX0NPTihjZmcpCShjZmcgJiBNVl9CT0FSRF82NjAxX0NGR19MUF9TRVJERVNfQ09OX01BU0spCi8qIEpQMwlMUCBTZXJEZXMgbW9kZQkwIC0gIExQIFNlckRlcyBhdCAxLjI1RyBtb2RlCgkJCQkJCTEgLSAgTFAgU2VyRGVzIGF0IDIuNUcgbW9kZSAgICAgKi8KI2RlZmluZSBNVl9CT0FSRF82NjAxX0NGR19MUF9TRVJERVNfTU9ERV9NQVNLCTB4OAojZGVmaW5lIE1WX0JPQVJEXzY2MDFfQ0ZHX0xQX1NFUkRFU19NT0RFKGNmZykJKGNmZyAmIE1WX0JPQVJEXzY2MDFfQ0ZHX0xQX1NFUkRFU19NT0RFX01BU0spCi8qIEpQNAlGWFMgcHJlc2VuY2UgCTAgliBGWFMgcHJlc2VudGVkCgkJCQkJCTEgliBGWFMgbWlzc2luZyAJCQkqLwojZGVmaW5lIE1WX0JPQVJEXzY2MDFfQ0ZHX0ZYU19NQVNLCTB4MTAKI2RlZmluZSBNVl9CT0FSRF82NjAxX0NGR19GWFMoY2ZnKQkoY2ZnICYgTVZfQk9BUkRfNjYwMV9DRkdfRlhTX01BU0spCi8qIEpQNQlQT04gQkVOIHBvbGFyaXR5CTAgliBCRU4gYWN0aXZlIGxvdwoJCQkJCQkJMSCWIEJFTiBhY3RpdmUgaGlnaAkJKi8KI2RlZmluZSBNVl9CT0FSRF82NjAxX0NGR19QT05fUE9MQVJJVFkoY2ZnKQkoY2ZnICYgMHgyMCkKCi8qIEVQUFJPTSBNb2R1bGVzIGRldGVjdGlvbiBpbmZvcm1hdGlvbiAqLwojZGVmaW5lIE1WX0JPQVJEX0NGR19TV19TUkMoY2ZnKQkoY2ZnICYgMHgzKQovKiBTV19TUkMKSlA1IEpQNgogMCAgIDAKCUlmIFFTR01JSSBtb2R1bGUgcHJlc2VudDogTUFDMCA9PiBTd2l0Y2ggPT4gUVNHTUlJCiAwICAgMQoJSWYgUVNHTUlJIG1vZHVsZSBwcmVzZW50OiBNQUMxID0+IFN3aXRjaCA9PiBRU0dNSUkKCUlmIFFTR01JSSBtb2R1bGUgbm90IHByZXNlbnQ6IE1BQzAgPT4gU3dpdGNoID0+IDN4RkUKIDEgICAwCglJZiBRU0dNSUkgbW9kdWxlIHByZXNlbnQ6IE1BQzAgPT4gU3dpdGNoID0+IFFTR01JSS4KCUlmIFFTR01JSSBtb2R1bGUgbm90IHByZXNlbnQ6IE1BQzEgPT4gU3dpdGNoID0+IDN4RkUuCiAxICAgMQoJSWYgUVNHTUlJIG1vZHVsZSBwcmVzZW50OiAoTUFDMCArIE1BQzEpID0+IFN3aXRjaCA9PiBRU0dNSUkKCUlmIFFTR01JSSBtb2R1bGUgbm90IHByZXNlbnQ6IChNQUMwICsgTUFDMSkgPT4gU3dpdGNoID0+IDN4RkUKKi8KI2RlZmluZSBNVl9CT0FSRF9DRkdfU0VSREVTX1NSQyhjZmcpCSgoY2ZnICYgMHhDKT4+MikKLyogU0VSREVTX1NSQwpKUDggSlAxMAogMCAgIDAgICAgTm9uZQogMSAgIDAgICAgU0FUQQogMCAgIDEgICAgU0dNSUkKIDEgICAxICAgIE4vQQoqLwojZGVmaW5lIE1WX0JPQVJEX0NGR19SR01JSUFfU1JDKGNmZykJKChjZmcgJiAweDMwKT4+NCkKLyogUkdNSUlBX1NSQwpKUDExIEpQMTIKIDAgICAgMCAgIE5vbmUKIDEgICAgMCAgIE1BQzAgc291cmNlCiAwICAgIDEgICBNQUMxIHNvdXJjZQogMSAgICAxICAgU3dpdGNoIHBvcnQgNSBzb3VyY2UKKi8KI2RlZmluZSBNVl9CT0FSRF9DRkdfRkVHRVBIWV9TUkMoY2ZnKQkoKGNmZyAmIDB4QzApPj42KQovKiBHRVBIWV9TUkMKSlAxNyBKUDE4CiAwICAgIDAgICBOb25lCiAxICAgIDAgICBNQUMxIHNvdXJjZQogMCAgICAxICAgU3dpdGNoIHBvcnQgNCBzb3VyY2UKIDEgICAgMSAgIFN3aXRjaCBwb3J0IDUgc291cmNlCiovCgojZGVmaW5lIE1WX0JPQVJEX0VFUFJPTV9NT0RVTEVfQUREUgkJMHgyNAojZGVmaW5lIE1WX0JPQVJEX0VFUFJPTV9NT0RVTEVfQUREUl9UWVBFCUFERFI3X0JJVAoKI2RlZmluZSBNVl9CT0FSRF9SR01JSUFfTU9EVUxFX0FERFIJCTB4MjIKI2RlZmluZSBNVl9CT0FSRF9SR01JSUFfTU9EVUxFX0FERFJfVFlQRQlBRERSN19CSVQKI2RlZmluZSBNVl9CT0FSRF9SR01JSUFfTU9EVUxFX01VWF9DSE5VTQkxCgojZGVmaW5lIE1WX0JPQVJEX1JHTUlJQl9NT0RVTEVfQUREUgkJMHgyMAojZGVmaW5lIE1WX0JPQVJEX1JHTUlJQl9NT0RVTEVfQUREUl9UWVBFCUFERFI3X0JJVAojZGVmaW5lIE1WX0JPQVJEX1JHTUlJQl9NT0RVTEVfTVVYX0NITlVNCTEKCiNkZWZpbmUgTVZfQk9BUkRfUVNHTUlJX01PRFVMRV9BRERSCQkweDIzCiNkZWZpbmUgTVZfQk9BUkRfUVNHTUlJX01PRFVMRV9BRERSX1RZUEUJQUREUjdfQklUCiNkZWZpbmUgTVZfQk9BUkRfUVNHTUlJX01PRFVMRV9NVVhfQ0hOVU0JMQoKI2RlZmluZSBNVl9CT0FSRF9HRV9TRlBfTU9EVUxFX0FERFIJCTB4NTAKI2RlZmluZSBNVl9CT0FSRF9HRV9TRlBfTU9EVUxFX0FERFJfVFlQRQlBRERSN19CSVQKI2RlZmluZSBNVl9CT0FSRF9HRV9TRlBfTU9EVUxFX01VWF9DSE5VTQkxCgojZGVmaW5lIE1WX0JPQVJEX1hDVlJfTVVYX0FERFIJCQkweDcwCiNkZWZpbmUgTVZfQk9BUkRfWENWUl9NVVhfQUREUl9UWVBFCQlBRERSN19CSVQKCiNkZWZpbmUgTVZfQk9BUkRfVERNXzc5Ml9BREFQVF9NT0RVTEVfQUREUgkweDI3CiNkZWZpbmUgTVZfQk9BUkRfVERNXzg4MF9NT0RVTEVfQUREUgkJMHgyNgojZGVmaW5lIE1WX0JPQVJEX1RETV8zMjE1X01PRFVMRV9BRERSCQkweDIzCiNkZWZpbmUgTVZfQk9BUkRfVERNX01PRFVMRV9BRERSX1RZUEUJCUFERFI3X0JJVAojZGVmaW5lIE1WX0JPQVJEX1RETV9NT0RVTEVfTVVYX0NITlVNCQkwCgojZGVmaW5lIE1WX0JPQVJEX1NXSVRDSF9TQ0FOX01PREVfU0FUUl9JRFgJMAojZGVmaW5lIE1WX0JPQVJEX1NXSVRDSF9TQ0FOX01PREUoeCkJCSgoeCAmIDEpID09IDEpCiNkZWZpbmUgTVZfQk9BUkRfU1dJVENIX1NDQU5fTU9ERV9NQVNLCQkweDEKCgp0eXBlZGVmIHN0cnVjdCBfYm9hcmREYXRhIHsKCU1WX1UzMiBtYWdpYzsKCU1WX1UxNiBib2FyZElkOwoJTVZfVTggYm9hcmRWZXI7CglNVl9VOCBib2FyZFJldjsKCU1WX1UzMiByZXNlcnZlZDE7CglNVl9VMzIgcmVzZXJ2ZWQyOwp9IEJPQVJEX0RBVEE7Cgp0eXBlZGVmIGVudW0gX2RldkJvYXJkTXBwR3JvdXBDbGFzcyB7CglNVl9CT0FSRF9NUFBfR1JPVVBfMSwKCU1WX0JPQVJEX01QUF9HUk9VUF8yLAoJTVZfQk9BUkRfTVBQX0dST1VQXzMsCglNVl9CT0FSRF9NQVhfTVBQX0dST1VQCn0gTVZfQk9BUkRfTVBQX0dST1VQX0NMQVNTOwoKdHlwZWRlZiBlbnVtIF9kZXZCb2FyZE1wcFR5cGVDbGFzcyB7CglNVl9CT0FSRF9BVVRPLAoJTVZfQk9BUkRfVERNXzJDSCwKCU1WX0JPQVJEX1RETV8zMkNILAoJTVZfQk9BUkRfR0UwLAoJTVZfQk9BUkRfR0UxLAoJTVZfQk9BUkRfU1dfUDUsCglNVl9CT0FSRF9TV19QNiwKCU1WX0JPQVJEX09USEVSCn0gTVZfQk9BUkRfTVBQX1RZUEVfQ0xBU1M7CgojaWZkZWYgTVZfVERNXzJDSEFOTkVMUwojZGVmaW5lIE1WX0JPQVJEX1RETSAJTVZfQk9BUkRfVERNXzJDSAojZWxzZQojZGVmaW5lIE1WX0JPQVJEX1RETQlNVl9CT0FSRF9URE1fMzJDSAojZW5kaWYKCnR5cGVkZWYgZW51bSB7CglNVl9CT0FSRF9NT0RVTEVfVFNfSUQgPSAweDAwMDAxLAoJTVZfQk9BUkRfTU9EVUxFX1FTR01JSV9JRCA9IDB4MDAwMDIsCglNVl9CT0FSRF9NT0RVTEVfU0dNSUlfSUQgPSAweDAwMDA0LAoJTVZfQk9BUkRfTU9EVUxFX0dFX1NGUF9JRCA9IDB4MDAwMDgsCglNVl9CT0FSRF9NT0RVTEVfUkdNSUlBX0lEID0gMHgwMDAxMCwKCU1WX0JPQVJEX01PRFVMRV9SR01JSUJfSUQgPSAweDAwMDIwLAoJTVZfQk9BUkRfTU9EVUxFX01JSUFfSUQgPSAweDAwMDQwLAoJTVZfQk9BUkRfTU9EVUxFX01JSUJfSUQgPSAweDAwMDgwLAoJTVZfQk9BUkRfTU9EVUxFX1RETV8xX0lEID0gMHgwMDEwMCwKCU1WX0JPQVJEX01PRFVMRV9URE1fMl9JRCA9IDB4MDAyMDAsCglNVl9CT0FSRF9NT0RVTEVfVERNXzNfSUQgPSAweDAwNDAwLAoJTVZfQk9BUkRfTU9EVUxFX1RETV80X0lEID0gMHgwMDgwMCwKCU1WX0JPQVJEX01PRFVMRV9HUE9OX0lEID0gMHgwMTAwMCwKCU1WX0JPQVJEX01PRFVMRV9FUE9OX0lEID0gMHgwMjAwMCwKCU1WX0JPQVJEX01PRFVMRV80RkVfUEhZX0lEID0gMHgwNDAwMCwKCU1WX0JPQVJEX01PRFVMRV9GRV9HRV9QSFlfSUQgPSAweDA4MDAwLAoJTVZfQk9BUkRfTU9EVUxFX1NBVEFfSUQgPSAweDEwMDAwLAoJTVZfQk9BUkRfTU9EVUxFX1NESU9fSUQgPSAweDIwMDAwLAoJTVZfQk9BUkRfTU9EVUxFX09USEVSX0lEID0gMHg4MDAwMAp9IE1WX0JPQVJEX01PRFVMRV9JRF9DTEFTUzsKCnR5cGVkZWYgc3RydWN0IF9ib2FyZE1wcFR5cGVJbmZvIHsKCU1WX0JPQVJEX01QUF9UWVBFX0NMQVNTIGJvYXJkTXBwVGRtOwoKCS8qIEV0aGVybmV0IC8gU2F0YSBjb21wbGV4ICAgICAgICAgICAgICAgICAgICAgICovCgkvKiBBIGJpdG1hc2sgb2YgTVZfRVRIX1NBVEFfQ09NUExFWF9PUFRJT05TICAgICAqLwoJTVZfVTMyIGV0aFNhdGFDb21wbGV4T3B0OwoJTVZfVTMyIGV0aFBvcnRzTW9kZTsJLyogYml0bWFzayBvZiBNVl9FVEhfUE9SVF9NT0RFICovCn0gTVZfQk9BUkRfTVBQX1RZUEVfSU5GTzsKCnR5cGVkZWYgZW51bSBfZGV2Qm9hcmRDbGFzcyB7CglCT0FSRF9ERVZfTk9SX0ZMQVNILAoJQk9BUkRfREVWX05BTkRfRkxBU0gsCglCT0FSRF9ERVZfU0VWRU5fU0VHLAoJQk9BUkRfREVWX0ZQR0EsCglCT0FSRF9ERVZfU1JBTSwKCUJPQVJEX0RFVl9TUElfRkxBU0gsCglCT0FSRF9ERVZfT1RIRVIsCn0gTVZfQk9BUkRfREVWX0NMQVNTOwoKdHlwZWRlZiBlbnVtIF9kZXZUd3NpQm9hcmRDbGFzcyB7CglCT0FSRF9UV1NJX1JUQywKCUJPQVJEX0RFVl9UV1NJX0VYUCwKCUJPQVJEX0RFVl9UV1NJX1NBVFIsCglCT0FSRF9UV1NJX01VWCwKCUJPQVJEX1RXU0lfQVVESU9fREVDLAoJQk9BUkRfVFdTSV9PVEhFUgp9IE1WX0JPQVJEX1RXU0lfQ0xBU1M7Cgp0eXBlZGVmIGVudW0gX2RldkdwcEJvYXJkQ2xhc3MgewoJQk9BUkRfR1BQX1JUQywKCUJPQVJEX0dQUF9NVl9TV0lUQ0gsCglCT0FSRF9HUFBfVVNCX1ZCVVMsCglCT0FSRF9HUFBfVVNCX1ZCVVNfRU4sCglCT0FSRF9HUFBfVVNCX09DLAoJQk9BUkRfR1BQX1VTQl9IT1NUX0RFVklDRSwKCUJPQVJEX0dQUF9SRUZfQ0xDSywKCUJPQVJEX0dQUF9WT0lQX1NMSUMsCglCT0FSRF9HUFBfTElGRUxJTkUsCglCT0FSRF9HUFBfQlVUVE9OLAoJQk9BUkRfR1BQX1RTX0JVVFRPTl9DLAoJQk9BUkRfR1BQX1RTX0JVVFRPTl9VLAoJQk9BUkRfR1BQX1RTX0JVVFRPTl9ELAoJQk9BUkRfR1BQX1RTX0JVVFRPTl9MLAoJQk9BUkRfR1BQX1RTX0JVVFRPTl9SLAoJQk9BUkRfR1BQX1BPV0VSX0JVVFRPTiwKCUJPQVJEX0dQUF9SRVNUT1JfQlVUVE9OLAoJQk9BUkRfR1BQX1dQU19CVVRUT04sCglCT0FSRF9HUFBfSEREMF9QT1dFUiwKCUJPQVJEX0dQUF9IREQxX1BPV0VSLAoJQk9BUkRfR1BQX0ZBTl9QT1dFUiwKCUJPQVJEX0dQUF9SRVNFVCwKCUJPQVJEX0dQUF9QT1dFUl9PTl9MRUQsCglCT0FSRF9HUFBfSEREX1BPV0VSLAoJQk9BUkRfR1BQX1NESU9fUE9XRVIsCglCT0FSRF9HUFBfU0RJT19ERVRFQ1QsCglCT0FSRF9HUFBfU0RJT19XUCwKCUJPQVJEX0dQUF9TV0lUQ0hfUEhZX0lOVCwKCUJPQVJEX0dQUF9UU1VfRElSQ1RJT04sCglCT0FSRF9HUFBfUEVYX1JFU0VULAoJQk9BUkRfR1BQX0NPTkYsCglCT0FSRF9HUFBfUE9OX1hWUl9UWCwKCUJPQVJEX0dQUF9TWVNfTEVELAoJQk9BUkRfR1BQX1BPTl9MRUQsCglCT0FSRF9HUFBfUE9OX1hWUl9UWF9QT1dFUiwKCUJPQVJEX0dQUF9QT05fWFZSX1RYX0lORCwKCUJPQVJEX0dQUF9PVEhFUgp9IE1WX0JPQVJEX0dQUF9DTEFTUzsKCnR5cGVkZWYgc3RydWN0IF9kZXZDc0luZm8gewoJTVZfVTggZGV2aWNlQ1M7CglNVl9VMzIgcGFyYW1zOwoJTVZfVTMyIGRldkNsYXNzOwkvKiBNVl9CT0FSRF9ERVZfQ0xBU1MgKi8KCU1WX1U4IGRldldpZHRoOwp9IE1WX0RFVl9DU19JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX2JvYXJkU3dpdGNoSW5mbyB7CglNVl8zMiBzd2l0Y2hJcnE7CglNVl8zMiBzd2l0Y2hQb3J0W0JPQVJEX0VUSF9TV0lUQ0hfUE9SVF9OVU1dOwoJTVZfMzIgY3B1UG9ydDsKCU1WXzMyIGNvbm5lY3RlZFBvcnRbTVZfRVRIX01BWF9QT1JUU107CglNVl8zMiBzbWlTY2FuTW9kZTsKCU1WXzMyIHF1YWRQaHlBZGRyOwoJTVZfVTMyIGZvcmNlTGlua01hc2s7IC8qIEJpdG1hc2sgb2Ygc3dpdGNoIHBvcnRzIHRvIGhhdmUgZm9yY2UgbGluayAoMUdicHMpICovCn0gTVZfQk9BUkRfU1dJVENIX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfYm9hcmRMZWRJbmZvIHsKCU1WX1U4IGFjdGl2ZUxlZHNOdW1iZXI7CglNVl9VOCBsZWRzUG9sYXJpdHk7CS8qICcwJyBvciAnMScgdG8gdHVybiBvbiBsZWQgKi8KCU1WX1U4ICpncHBQaW5OdW07CS8qIFBvaW50ZXIgdG8gR1BQIHZhbHVlcyAqLwp9IE1WX0JPQVJEX0xFRF9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX2JvYXJkR3BwSW5mbyB7CglNVl9CT0FSRF9HUFBfQ0xBU1MgZGV2Q2xhc3M7CglNVl9VOCBncHBQaW5OdW07CglNVl9VOCBhY3RpdmVMb3c7Cn0gTVZfQk9BUkRfR1BQX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfYm9hcmRUd3NpSW5mbyB7CglNVl9CT0FSRF9UV1NJX0NMQVNTIGRldkNsYXNzOwoJTVZfVTggdHdzaURldkFkZHI7CglNVl9VOCB0d3NpRGV2QWRkclR5cGU7Cn0gTVZfQk9BUkRfVFdTSV9JTkZPOwoKdHlwZWRlZiBlbnVtIF9ib2FyZE1hY1NwZWVkIHsKCUJPQVJEX01BQ19TUEVFRF8xME0sCglCT0FSRF9NQUNfU1BFRURfMTAwTSwKCUJPQVJEX01BQ19TUEVFRF8xMDAwTSwKCUJPQVJEX01BQ19TUEVFRF9BVVRPLAp9IE1WX0JPQVJEX01BQ19TUEVFRDsKCnR5cGVkZWYgc3RydWN0IF9ib2FyZE1hY0luZm8gewoJTVZfQk9BUkRfTUFDX1NQRUVEIGJvYXJkTWFjU3BlZWQ7CglNVl9VOCBib2FyZEV0aFNtaUFkZHI7Cn0gTVZfQk9BUkRfTUFDX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfYm9hcmRNcHBJbmZvIHsKCU1WX1UzMiBtcHBHcm91cFtNVl9CT0FSRF9NQVhfTVBQXTsKfSBNVl9CT0FSRF9NUFBfSU5GTzsKCnR5cGVkZWYgZW51bSB7CglCT0FSRF9FUE9OX0NPTkZJRywKCUJPQVJEX0dQT05fQ09ORklHLAoJQk9BUkRfUE9OX05PTkUsCglCT0FSRF9QT05fQVVUTwp9IE1WX0JPQVJEX1BPTl9DT05GSUc7Cgp0eXBlZGVmIHN0cnVjdCB7CglNVl9VOCBzcGlDczsKfSBNVl9CT0FSRF9URE1fSU5GTzsKCnR5cGVkZWYgc3RydWN0IHsKCU1WX1U4IHNwaUlkOwp9IE1WX0JPQVJEX1RETV9TUElfSU5GTzsKCnR5cGVkZWYgZW51bSB7CglCT0FSRF9URE1fU0xJQ184ODAgPSAwLAoJQk9BUkRfVERNX1NMSUNfNzkyLAoJQk9BUkRfVERNX1NMSUNfMzIxNSwKCUJPQVJEX1RETV9TTElDXzg5MCwKCUJPQVJEX1RETV9TTElDX09USEVSLAoJQk9BUkRfVERNX1NMSUNfQ09VTlQKfSBNVl9CT0FSRF9URE1fU0xJQ19UWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgewoJTVZfVTMyCXJlZzsKCU1WX1UzMgltYXNrOwoJTVZfVTMyCXZhbDsKfSBNVl9CT0FSRF9TUEVDX0lOSVQ7Cgp0eXBlZGVmIHN0cnVjdCBfYm9hcmRJbmZvIHsKCWNoYXIgYm9hcmROYW1lW01WX0JPQVJEX05BTUVfTEVOXTsKCU1WX1U4IG51bUJvYXJkTXBwVHlwZVZhbHVlOwoJTVZfQk9BUkRfTVBQX1RZUEVfSU5GTyAqcEJvYXJkTXBwVHlwZVZhbHVlOwoJTVZfVTggbnVtQm9hcmRNcHBDb25maWdWYWx1ZTsKCU1WX0JPQVJEX01QUF9JTkZPICpwQm9hcmRNcHBDb25maWdWYWx1ZTsKCU1WX1UzMiBpbnRzR3BwTWFza0xvdzsKCU1WX1UzMiBpbnRzR3BwTWFza01pZDsKCU1WX1UzMiBpbnRzR3BwTWFza0hpZ2g7CglNVl9VOCBudW1Cb2FyZERldmljZUlmOwoJTVZfREVWX0NTX0lORk8gKnBEZXZDc0luZm87CglNVl9VOCBudW1Cb2FyZFR3c2lEZXY7CglNVl9CT0FSRF9UV1NJX0lORk8gKnBCb2FyZFR3c2lEZXY7CglNVl9VOCBudW1Cb2FyZE1hY0luZm87CglNVl9CT0FSRF9NQUNfSU5GTyAqcEJvYXJkTWFjSW5mbzsKCU1WX1U4IG51bUJvYXJkR3BwSW5mbzsKCU1WX0JPQVJEX0dQUF9JTkZPICpwQm9hcmRHcHBJbmZvOwoJTVZfVTggYWN0aXZlTGVkc051bWJlcjsKCU1WX1U4ICpwTGVkR3BwUGluOwoJTVZfVTggbGVkc1BvbGFyaXR5OwkvKiAnMCcgb3IgJzEnIHRvIHR1cm4gb24gbGVkICovCgoJLyogR1BQIHZhbHVlcyAqLwoJTVZfVTMyIGdwcE91dEVuVmFsTG93OwoJTVZfVTMyIGdwcE91dEVuVmFsTWlkOwoJTVZfVTMyIGdwcE91dEVuVmFsSGlnaDsKCU1WX1UzMiBncHBPdXRWYWxMb3c7CglNVl9VMzIgZ3BwT3V0VmFsTWlkOwoJTVZfVTMyIGdwcE91dFZhbEhpZ2g7CglNVl9VMzIgZ3BwUG9sYXJpdHlWYWxMb3c7CglNVl9VMzIgZ3BwUG9sYXJpdHlWYWxNaWQ7CglNVl9VMzIgZ3BwUG9sYXJpdHlWYWxIaWdoOwoKCS8qIEV4dGVybmFsIFN3aXRjaCBDb25maWd1cmF0aW9uICovCglNVl9CT0FSRF9TV0lUQ0hfSU5GTyAqcFN3aXRjaEluZm87CglNVl9VMzIgc3dpdGNoSW5mb051bTsKCgkvKiBQT04gY29uZmlndXJhdGlvbi4gKi8KCU1WX0JPQVJEX1BPTl9DT05GSUcgcG9uQ29uZmlnVmFsdWU7CgoJLyogVERNIGNvbmZpZ3VyYXRpb24gKi8KCS8qIFdlIGhvbGQgYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBhcnJheSBmb3IgZWFjaCBwb3NzaWJsZSBzbGljIHRoYXQKCSAqKiBjYW4gYmUgY29ubmVjdGVkIHRvIGJvYXJkLgoJICoqIFdoZW4gbW9kdWxlcyBhcmUgc2Nhbm5lZCwgdGhlbiB3ZSBzZWxlY3QgdGhlIGluZGV4IG9mIHRoZSByZWxldmFudAoJICoqIHNsaWMncyBpbmZvcm1hdGlvbiBhcnJheS4KCSAqKiBGb3IgUkQgYW5kIEN1c3RvbWVycyBib2FyZHMgd2Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgYSBzaW5nbGUKCSAqKiBlbnRyeSBvZiB0aGUgYXJyYXlzIGJlbG93LCBhbmQgc2V0IHRoZSBib2FyZFRkbUluZm9JbmRleCB0byAwLgoJICovCglNVl9VOCBudW1Cb2FyZFRkbUluZm9bQk9BUkRfVERNX1NMSUNfQ09VTlRdOwoJTVZfQk9BUkRfVERNX0lORk8gKnBCb2FyZFRkbUludDJDc0luZm9bQk9BUkRfVERNX1NMSUNfQ09VTlRdOwoJTVZfOCBib2FyZFRkbUluZm9JbmRleDsKCgkvKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4gUGVyZm9ybWVkIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCgkqKiBTb0MuICovCglNVl9CT0FSRF9TUEVDX0lOSVQJKnBCb2FyZFNwZWNJbml0OwoKCS8qIERlZXAtSWRsZSBwb3dlciB1cCBkZWxheSAqLwoJTVZfVTMyIGRlZXBJZGxlUHdyVXBEZWxheTsKCgkvKiBOQU5EIGluaXQgcGFyYW1zICovCglNVl9CT09MIG5hbmRGbGFzaFBhcmFtc1ZhbGlkOwoJTVZfVTMyIG5hbmRGbGFzaFJlYWRQYXJhbXM7CglNVl9VMzIgbmFuZEZsYXNoV3JpdGVQYXJhbXM7CglNVl9VMzIgbmFuZEZsYXNoQ29udHJvbDsKCU1WX0JPQVJEX1RETV9TUElfSU5GTyAqcEJvYXJkVGRtU3BpSW5mbzsKCgkvKiBJbmRpY2F0ZXMgaWYgYXV0by1kZXRlY3Rpb24gb2YgbW9kdWxlcyBpcyBlbmFibGVkIG9uIHRoaXMgYm9hcmQuICovCgkvKiBTZXQgdG8gTVZfRkFMU0UgZm9yIGFueSBib2FyZCB0aGF0IGlzIG5vdCBhIERCLiAqLwoJTVZfQk9PTAltb2R1bGVBdXRvRGV0ZWN0Owp9IE1WX0JPQVJEX0lORk87CgovKiBGb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSB3aXRoIExlZ2FjeSBtb2RlICovCiNkZWZpbmUgbXZCb2FyZElzU3dpdGNoQ29ubmVjdGVkKHBvcnQpICAobXZCb2FyZFN3aXRjaENvbm5lY3RlZFBvcnRHZXQocG9ydCkgIT0gLTEpCiNkZWZpbmUgbXZCb2FyZExpbmtTdGF0dXNJcnFHZXQocG9ydCkgICBtdkJvYXJkU3dpdGNoSXJxR2V0KCkKCk1WX1ZPSUQgbXZCb2FyZEVudkluaXQoTVZfVk9JRCk7Ck1WX1UxNiBtdkJvYXJkTW9kZWxHZXQoTVZfVk9JRCk7Ck1WX1UxNiBtdkJvYXJkUmV2R2V0KE1WX1ZPSUQpOwpNVl9TVEFUVVMgbXZCb2FyZE5hbWVHZXQoY2hhciAqcE5hbWVCdWZmKTsKTVZfQk9BUkRfU1BFQ19JTklUICptdkJvYXJkU3BlY0luaXRHZXQoTVZfVk9JRCk7Ck1WX1UzMiBtdkJvYXJkUHdyVXBEZWxheUdldChNVl9WT0lEKTsKTVZfQk9PTCBtdkJvYXJkSXNQb3J0SW5TZ21paShNVl9VMzIgZXRoUG9ydE51bSk7Ck1WX0JPT0wgbXZCb2FyZElzUG9ydEluUmdtaWkoTVZfVTMyIGV0aFBvcnROdW0pOwpNVl9VMzIgbXZCb2FyZEV0aFBvcnRzTW9kZUdldCh2b2lkKTsKTVZfMzIgbXZCb2FyZFBoeUFkZHJHZXQoTVZfVTMyIGV0aFBvcnROdW0pOwpNVl9TVEFUVVMgbXZCb2FyZFBoeUFkZHJTZXQoTVZfVTMyIGV0aFBvcnROdW0sIE1WXzMyIHBoeUFkZHIpOwoKTVZfQk9PTCBtdkJvYXJkU3dpdGNoU25nbENoaXBBZGRNb2RlR2V0KE1WX1ZPSUQpOwpNVl9TVEFUVVMgbXZCb2FyZFN3aXRjaFNuZ2xDaGlwQWRkTW9kZVNldChNVl9CT09MIGVuYWJsZSk7Ck1WXzMyIG12Qm9hcmRTd2l0Y2hJcnFHZXQoTVZfVk9JRCk7Ck1WXzMyIG12Qm9hcmRTd2l0Y2hDb25uZWN0ZWRQb3J0R2V0KE1WX1UzMiBldGhQb3J0TnVtKTsKLyogTWFwIGZyb250IHBhbmVsIGNvbm5lY3RvciBudW1iZXIgdG8gc3dpdGNoIHBvcnQgbnVtYmVyICovCk1WXzMyIG12Qm9hcmRTd2l0Y2hQb3J0R2V0KE1WX1UzMiBzd2l0Y2hJZHgsIE1WX1UzMiBib2FyZFBvcnROdW0pOwpNVl9TVEFUVVMgbXZCb2FyZFN3aXRjaEluZm9VcGRhdGUoTVZfVk9JRCk7Ci8qIE1hcCBmcm9udCBwYW5lbCBjb25uZWN0b3IgbnVtYmVyIHRvIHN3aXRjaCBwb3J0IG51bWJlciAqLwpNVl8zMiBtdkJvYXJkU3dpdGNoUG9ydE1hcChNVl9VMzIgc3dpdGNoSWR4LCBNVl9VMzIgc3dpdGNoUG9ydE51bSk7Ck1WXzMyIG12Qm9hcmRTd2l0Y2hDcHVQb3J0R2V0KE1WX1UzMiBzd2l0Y2hJZHgpOwpNVl9VMzIgbXZCb2FyZFN3aXRjaFBvcnRGb3JjZUxpbmtHZXQoTVZfVTMyIHN3aXRjaElkeCk7Ck1WXzMyIG12Qm9hcmRTbWlTY2FuTW9kZUdldChNVl9VMzIgc3dpdGNoSWR4KTsKTVZfMzIgbXZCb2FyZFF1YWRQaHlBZGRyR2V0KE1WX1UzMiBzd2l0Y2hJZHgpOwpNVl8zMiBtdkJvYXJkU3dpdGNoTnVtUG9ydHNHZXQoTVZfVk9JRCk7Ck1WX0JPT0wgbXZCb2FyZElzUXNnbWlpTW9kdWxlQ29ubmVjdGVkKE1WX1ZPSUQpOwpNVl8zMiBtdkJvYXJkR2VQaHlTd2l0Y2hQb3J0R2V0KE1WX1ZPSUQpOwpNVl8zMiBtdkJvYXJkUmdtaWlBU3dpdGNoUG9ydEdldChNVl9WT0lEKTsKTVZfQk9PTCBtdkJvYXJkUGh5U3BlY0luaXRHZXQoTVZfVTMyICpyZWdPZmYsIE1WX1UzMiAqZGF0YSk7Ck1WX1UzMiBtdkJvYXJkVGNsa0dldChNVl9WT0lEKTsKTVZfVTMyIG12Qm9hcmRTeXNDbGtHZXQoTVZfVk9JRCk7Ck1WX1UzMiBtdkJvYXJkRGVidWdMZWROdW1HZXQoTVZfVTMyIGJvYXJkSWQpOwpNVl9WT0lEIG12Qm9hcmREZWJ1Z0xlZChNVl9VMzIgaGV4TnVtKTsKTVZfMzIgbXZCb2FyR3Bpb1Bpbk51bUdldChNVl9CT0FSRF9HUFBfQ0xBU1MgY2xhc3MsIE1WX1UzMiBpbmRleCk7Ck1WXzMyIG12Qm9hcmRHcGlvUG9sYXJpdHlHZXQoTVZfQk9BUkRfR1BQX0NMQVNTIGNsYXNzKTsKTVZfVk9JRCBtdkJvYXJkUmVzZXQoTVZfVk9JRCk7Ck1WXzMyIG12Qm9hcmRSZXNldEdwaW9QaW5HZXQoTVZfVk9JRCk7Ck1WXzMyIG12Qm9hcmRTRElPR3Bpb1BpbkdldChNVl9CT0FSRF9HUFBfQ0xBU1MgdHlwZSk7Ck1WXzMyIG12Qm9hcmRVU0JWYnVzR3Bpb1BpbkdldChNVl8zMiBkZXZJZCk7Ck1WXzMyIG12Qm9hcmRVU0JWYnVzRW5HcGlvUGluR2V0KE1WXzMyIGRldklkKTsKTVZfVTMyIG12Qm9hcmRHcGlvSW50TWFza0dldChNVl9VMzIgZ3BwR3JwKTsKTVZfMzIgbXZCb2FyZE1wcEdldChNVl9VMzIgbXBwR3JvdXBOdW0pOwpNVl9VMzIgbXZCb2FyZEV0aENvbXBsZXhDb25maWdHZXQoTVZfVk9JRCk7Ck1WX1ZPSUQgbXZCb2FyZEV0aENvbXBsZXhDb25maWdTZXQoTVZfVTMyIGV0aENvbmZpZyk7Ck1WX1UzMiBtdkJvYXJkUG9uQ29uZmlnR2V0KE1WX1ZPSUQpOwpNVl9WT0lEIG12Qm9hcmRQb25Db25maWdTZXQoTVZfVTMyIHBvbkNvbmZpZyk7Ck1WX1UzMiBtdkJvYXJkR3BwQ29uZmlnR2V0KE1WX1ZPSUQpOwpNVl9WT0lEIG12Qm9hcmRNb2R1bGVDb25maWdTZXQoTVZfVTMyIG1vZENvbmZpZyk7Ck1WX1ZPSUQgbXZCb2FyZE1vZHVsZUNvbmZpZ0dldChNVl9VMzIgKm1vZENvbmZpZyk7Ck1WX1ZPSUQgbXZCb2FyZE1wcElkVXBkYXRlKE1WX1ZPSUQpOwpNVl8zMiBtdkJvYXJkVGRtU3BpTW9kZUdldChNVl9WT0lEKTsKTVZfVTggbXZCb2FyZFRkbURldmljZXNDb3VudEdldChNVl9WT0lEKTsKTVZfVTggbXZCb2FyZFRkbVNwaUNzR2V0KE1WX1U4IGRldklkKTsKTVZfVTggbXZCb2FyZFRkbVNwaUlkR2V0KE1WX1ZPSUQpOwpNVl9WT0lEIG12Qm9hcmRNcHBNb2R1bGVUeXBlUHJpbnQoTVZfVk9JRCk7Ck1WX0JPT0wgbXZCb2FyZElzR2JFUG9ydENvbm5lY3RlZChNVl9VMzIgZXRoUG9ydE51bSk7Ck1WXzMyIG12Qm9hcmRHZXREZXZpY2VzTnVtYmVyKE1WX0JPQVJEX0RFVl9DTEFTUyBkZXZDbGFzcyk7Ck1WXzMyIG12Qm9hcmRHZXREZXZpY2VCYXNlQWRkcihNVl8zMiBkZXZOdW0sIE1WX0JPQVJEX0RFVl9DTEFTUyBkZXZDbGFzcyk7Ck1WXzMyIG12Qm9hcmRHZXREZXZpY2VCdXNXaWR0aChNVl8zMiBkZXZOdW0sIE1WX0JPQVJEX0RFVl9DTEFTUyBkZXZDbGFzcyk7Ck1WXzMyIG12Qm9hcmRHZXREZXZpY2VXaWR0aChNVl8zMiBkZXZOdW0sIE1WX0JPQVJEX0RFVl9DTEFTUyBkZXZDbGFzcyk7Ck1WXzMyIG12Qm9hcmRHZXREZXZpY2VXaW5TaXplKE1WXzMyIGRldk51bSwgTVZfQk9BUkRfREVWX0NMQVNTIGRldkNsYXNzKTsKTVZfVTMyIGJvYXJkR2V0RGV2Q1NOdW0oTVZfMzIgZGV2TnVtLCBNVl9CT0FSRF9ERVZfQ0xBU1MgZGV2Q2xhc3MpOwpNVl9VOCBtdkJvYXJkVHdzaUFkZHJUeXBlR2V0KE1WX0JPQVJEX1RXU0lfQ0xBU1MgdHdzaUNsYXNzLCBNVl9VMzIgaW5kZXgpOwpNVl9VOCBtdkJvYXJkVHdzaUFkZHJHZXQoTVZfQk9BUkRfVFdTSV9DTEFTUyB0d3NpQ2xhc3MsIE1WX1UzMiBpbmRleCk7Ck1WXzMyIG12Qm9hcmROYW5kV2lkdGhHZXQoTVZfVk9JRCk7Ck1WX1UzMiBtdkJvYXJkSWRHZXQoTVZfVk9JRCk7Ck1WX0JPQVJEX0lORk8gKm12Qm9hcmRJbmZvR2V0KE1WX1ZPSUQpOwoKTVZfVTggbXZCb2FyZFR3c2lTYXRSR2V0KE1WX1U4IGRldk51bSwgTVZfVTggcmVnTnVtKTsKTVZfU1RBVFVTIG12Qm9hcmRUd3NpU2F0UlNldChNVl9VOCBkZXZOdW0sIE1WX1U4IHJlZ051bSwgTVZfVTggcmVnVmFsKTsKTVZfVTggbXZCb2FyZEZyZXFHZXQoTVZfVk9JRCk7Ck1WX1NUQVRVUyBtdkJvYXJkRnJlcVNldChNVl9VOCBmcmVxVmFsKTsKTVZfVTggbXZCb2FyZFNTQ0dHZXQoTVZfVk9JRCk7Ck1WX1NUQVRVUyBtdkJvYXJkU1NDR1NldChNVl9VOCB2YWwpOwpNVl9VOCBtdkJvYXJkVENsa0dldChNVl9WT0lEKTsKTVZfU1RBVFVTIG12Qm9hcmRUQ2xrU2V0KE1WX1U4IHZhbCk7Ck1WX1U4IG12Qm9hcmRQZXhDbGtHZXQoTVZfVTggcGV4SWYpOwpNVl9TVEFUVVMgbXZCb2FyZFBleENsa1NldChNVl9VOCBwZXhJZiwgTVZfVTggdmFsKTsKTVZfVTggbXZCb2FyZFNhUkwyRXhpc3RHZXQoTVZfVk9JRCk7Ck1WX1U4IG12Qm9hcmRTYVJMMkV4aXN0U2V0KE1WX1U4IHZhbCk7Ck1WX1U4IG12Qm9hcmRQb25HZXQoTVZfVk9JRCk7Ck1WX1NUQVRVUyBtdkJvYXJkUG9uU2V0KE1WX1U4IHZhbCk7CgpNVl9TVEFUVVMgbXZCb2FyZEV0aFNhdGFNb2R1bGVzU2NhbihNVl9VMzIgKm1vZHVsZXMsIE1WX0VUSF9DT01QTEVYX0lGX1NPVVJDRVMgKmV0aFNyY0NmZyk7Ck1WX1NUQVRVUyBtdkJvYXJkSXNTZGlvRW5hYmxlZChNVl9WT0lEKTsKTVZfU1RBVFVTIG12Qm9hcmRUZG1Nb2R1bGVzU2NhbihNVl9WT0lEKTsKTVZfU1RBVFVTIG12Qm9hcmRQb25Nb2R1bGVzU2NhbihNVl9VMzIgKm1vZHVsZXMpOwpNVl9TVEFUVVMgbXZCb2FyZFR3c2lNdXhDaGFubmVsU2V0KE1WX1U4IG11eENoTnVtKTsKTVZfU1RBVFVTIG12Qm9hcmRUd3NpUmVhZEJ5dGVUaHJ1TXV4KE1WX1U4IG11eENoTnVtLCBNVl9VOCBjaE51bSwgTVZfVFdTSV9TTEFWRSAqcFR3c2lTbGF2ZSwgTVZfVTggKmRhdGEpOwpNVl9CT0FSRF9NQUNfU1BFRUQgbXZCb2FyZE1hY1NwZWVkR2V0KE1WX1UzMiBldGhQb3J0TnVtKTsKTVZfU1RBVFVTIG12Qm9hcmRNYWNTcGVlZFNldChNVl9VMzIgZXRoUG9ydE51bSwgTVZfQk9BUkRfTUFDX1NQRUVEIHNwZWVkKTsKTVZfU1RBVFVTIG12Qm9hcmRJc0ludGVybmFsU3dpdGNoQ29ubmVjdGVkKE1WX1UzMiBldGhQb3J0TnVtKTsKTVZfQk9BUkRfTVBQX1RZUEVfQ0xBU1MgbXZCb2FyZE1wcEdyb3VwVHlwZUdldChNVl9CT0FSRF9NUFBfR1JPVVBfQ0xBU1MgbXBwR3JvdXBDbGFzcyk7Ck1WX0JPT0wgbXZCb2FyZE1vZHVsZUF1dG9EZXRlY3RFbmFibGVkKHZvaWQpOwojZW5kaWYgLyogX19JTkNtdkJvYXJkRW52TGliaCAqLwo=