ZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQppbmRleCA3ODVlMWUxLi41MWMyMzc4IDEwMDY0NAotLS0gYS9OT1RJQ0UKKysrIGIvTk9USUNFCkBAIC0xLDQgKzEsNCBAQAotIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorIChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKZGlmZiAtLWdpdCBhL3NyYy9DTWFrZUxpc3RzLnR4dCBiL3NyYy9DTWFrZUxpc3RzLnR4dAppbmRleCAwYzAyNDdjLi4wZmU5MzlkIDEwMDY0NAotLS0gYS9zcmMvQ01ha2VMaXN0cy50eHQKKysrIGIvc3JjL0NNYWtlTGlzdHMudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBwcm9qZWN0KHpsaWIgQykKIAotc2V0KFZFUlNJT04gIjEuMi44IikKK3NldChWRVJTSU9OICIxLjIuMTEiKQogCiBvcHRpb24oQVNNNjg2ICJFbmFibGUgYnVpbGRpbmcgaTY4NiBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiIpCiBvcHRpb24oQU1ENjQgIkVuYWJsZSBidWlsZGluZyBhbWQ2NCBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiIpCmRpZmYgLS1naXQgYS9zcmMvQ2hhbmdlTG9nIGIvc3JjL0NoYW5nZUxvZwppbmRleCBmMjJhYWJhLi4zMDE5OWE2IDEwMDY0NAotLS0gYS9zcmMvQ2hhbmdlTG9nCisrKyBiL3NyYy9DaGFuZ2VMb2cKQEAgLTEsMTAgKzEsNTMgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0NoYW5nZXMgaW4gMS4yLjExICgxNSBKYW4gMjAxNykKKy0gRml4IGRlZmxhdGUgc3RvcmVkIGJ1ZyB3aGVuIHB1bGxpbmcgbGFzdCBibG9jayBmcm9tIHdpbmRvdworLSBQZXJtaXQgaW1tZWRpYXRlIGRlZmxhdGVQYXJhbXMgY2hhbmdlcyBiZWZvcmUgYW55IGRlZmxhdGUgaW5wdXQKKworQ2hhbmdlcyBpbiAxLjIuMTAgKDIgSmFuIDIwMTcpCistIEF2b2lkIHdhcm5pbmdzIG9uIHNucHJpbnRmKCkgcmV0dXJuIHZhbHVlCistIEZpeCBidWcgaW4gZGVmbGF0ZV9zdG9yZWQoKSBmb3IgemVyby1sZW5ndGggaW5wdXQKKy0gRml4IGJ1ZyBpbiBnendyaXRlLmMgdGhhdCBwcm9kdWNlZCBjb3JydXB0IGd6aXAgZmlsZXMKKy0gUmVtb3ZlIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBiZWZvcmUgY29weWluZyB0aGVtIGluIE1ha2VmaWxlLmluCistIEFkZCB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIGFzc2VtYmxlciBjb2RlCisKK0NoYW5nZXMgaW4gMS4yLjkgKDMxIERlYyAyMDE2KQorLSBGaXggY29udHJpYi9taW5pemlwIHRvIHBlcm1pdCB1bnppcHBpbmcgd2l0aCBkZXNrdG9wIEFQSSBbWm91em91XQorLSBJbXByb3ZlIGNvbnRyaWIvYmxhc3QgdG8gcmV0dXJuIHVudXNlZCBieXRlcworLSBBc3N1cmUgdGhhdCBnem9mZnNldCgpIGlzIGNvcnJlY3Qgd2hlbiBhcHBlbmRpbmcKKy0gSW1wcm92ZSBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkgdG8gc3VwcG9ydCBsYXJnZSBsZW5ndGhzCistIEZpeCBidWcgaW4gdGVzdC9leGFtcGxlLmMgd2hlcmUgZXJyb3IgY29kZSBub3Qgc2F2ZWQKKy0gUmVtZWR5IENvdmVyaXR5IHdhcm5pbmcgW1JhbmRlcnMtUGVocnNvbl0KKy0gSW1wcm92ZSBzcGVlZCBvZiBnenByaW50ZigpIGluIHRyYW5zcGFyZW50IG1vZGUKKy0gRml4IGluZmxhdGVJbml0MigpIGJ1ZyB3aGVuIHdpbmRvd0JpdHMgaXMgMTYgb3IgMzIKKy0gQ2hhbmdlIERFQlVHIG1hY3JvIHRvIFpMSUJfREVCVUcKKy0gQXZvaWQgdW5pbml0aWFsaXplZCBhY2Nlc3MgYnkgZ3pjbG9zZV93KCkKKy0gQWxsb3cgYnVpbGRpbmcgemxpYiBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5CistIEZpeCBidWcgdGhhdCBhY2NlcHRlZCBpbnZhbGlkIHpsaWIgaGVhZGVyIHdoZW4gd2luZG93Qml0cyBpcyB6ZXJvCistIEZpeCBnenNlZWsoKSBwcm9ibGVtIG9uIE1pbkdXIGR1ZSB0byBidWdneSBfbHNlZWtpNjQgdGhlcmUKKy0gTG9vcCBvbiB3cml0ZSgpIGNhbGxzIGluIGd6d3JpdGUuYyBpbiBjYXNlIG9mIG5vbi1ibG9ja2luZyBJL08KKy0gQWRkIC0td2FybiAoLXcpIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgbW9yZSBjb21waWxlciB3YXJuaW5ncworLSBSZWplY3QgYSB3aW5kb3cgc2l6ZSBvZiAyNTYgYnl0ZXMgaWYgbm90IHVzaW5nIHRoZSB6bGliIHdyYXBwZXIKKy0gRml4IGJ1ZyB3aGVuIGxldmVsIDAgdXNlZCB3aXRoIFpfSFVGRk1BTiBvciBaX1JMRQorLSBBZGQgLS1kZWJ1ZyAoLWQpIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSB0byBkZWZpbmUgWkxJQl9ERUJVRworLSBGaXggYnVncyBpbiBjcmVhdGluZyBhIHZlcnkgbGFyZ2UgZ3ppcCBoZWFkZXIKKy0gQWRkIHVuY29tcHJlc3MyKCkgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgdGhlIGlucHV0IHNpemUgdXNlZAorLSBBc3N1cmUgdGhhdCBkZWZsYXRlUGFyYW1zKCkgd2lsbCBub3Qgc3dpdGNoIGZ1bmN0aW9ucyBtaWQtYmxvY2sKKy0gRHJhbWF0aWNhbGx5IHNwZWVkIHVwIGRlZmxhdGlvbiBmb3IgbGV2ZWwgMCAoc3RvcmluZykKKy0gQWRkIGd6ZnJlYWQoKSwgZHVwbGljYXRpbmcgdGhlIGludGVyZmFjZSBvZiBmcmVhZCgpCistIEFkZCBnemZ3cml0ZSgpLCBkdXBsaWNhdGluZyB0aGUgaW50ZXJmYWNlIG9mIGZ3cml0ZSgpCistIEFkZCBkZWZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIFVzZSBzbnByaW50ZigpIGZvciBsYXRlciB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgQworLSBGaXggKkluaXQgbWFjcm9zIHRvIHVzZSB6XyBwcmVmaXggd2hlbiByZXF1ZXN0ZWQKKy0gUmVwbGFjZSBhczQwMCB3aXRoIG9zNDAwIGZvciBPUy80MDAgc3VwcG9ydCBbTW9ubmVyYXRdCistIEFkZCBjcmMzMl96KCkgYW5kIGFkbGVyMzJfeigpIGZ1bmN0aW9ucyB3aXRoIHNpemVfdCBsZW5ndGhzCistIFVwZGF0ZSBWaXN1YWwgU3R1ZGlvIHByb2plY3QgZmlsZXMgW0FyYUhhYW5dCisKIENoYW5nZXMgaW4gMS4yLjggKDI4IEFwciAyMDEzKQogLSBVcGRhdGUgY29udHJpYi9taW5pemlwL2lvd2luMzIuYyBmb3IgV2luZG93cyBSVCBbVm9sbGFudF0KIC0gRG8gbm90IGZvcmNlIFpfQ09OU1QgZm9yIEMrKwotLSBDbGVhbiB1cCBjb250cmliL3ZzdHVkaW8gW1Jvp10KKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb8OfXQogLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaAogLSBGaXggbWl4ZWQgbGluZSBlbmRpbmdzIGluIGNvbnRyaWIvdnN0dWRpbwogCkBAIC0zNCw3ICs3Nyw3IEBACiAtIENsZWFuIHVwIHRoZSB1c2FnZSBvZiB6X2NvbnN0IGFuZCByZXNwZWN0IGNvbnN0IHVzYWdlIHdpdGhpbiB6bGliCiAtIENsZWFuIHVwIGV4YW1wbGVzL2d6bG9nLltjaF0gY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50IHR5cGVzCiAtIEF2b2lkIHNoaWZ0IGVxdWFsIHRvIGJpdHMgaW4gdHlwZSAoY2F1c2VkIGVuZGxlc3MgbG9vcCkKLS0gRml4IHVuaW50aWFsaXplZCB2YWx1ZSBidWcgaW4gZ3pwdXRjKCkgaW50cm9kdWNlZCBieSBjb25zdCBwYXRjaGVzCistIEZpeCB1bmluaXRpYWxpemVkIHZhbHVlIGJ1ZyBpbiBnenB1dGMoKSBpbnRyb2R1Y2VkIGJ5IGNvbnN0IHBhdGNoZXMKIC0gRml4IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGluIGV4YW1wbGVzL3pyYW4uYyBbTm9yXQogLSBGaXggYnVnIHdoZXJlIGd6b3BlbigpLCBnemNsb3NlKCkgd291bGQgd3JpdGUgYW4gZW1wdHkgZmlsZQogLSBGaXggYnVnIGluIGd6Y2xvc2UoKSB3aGVuIGd6d3JpdGUoKSBydW5zIG91dCBvZiBtZW1vcnkKQEAgLTE5NCw3ICsyMzcsNyBAQAogLSBBZGQgYSB0cmFuc3BhcmVudCB3cml0ZSBtb2RlIHRvIGd6b3BlbigpIHdoZW4gJ1QnIGlzIGluIHRoZSBtb2RlCiAtIFVwZGF0ZSBweXRob24gbGluayBpbiB6bGliIG1hbiBwYWdlCiAtIEdldCBpbmZmaXhlZC5oIGFuZCBNQUtFRklYRUQgcmVzdWx0IHRvIG1hdGNoCi0tIEFkZCBhIC4vY29uZmlnIC0tc29sbyBvcHRpb24gdG8gbWFrZSB6bGliIHN1YnNldCB3aXRoIG5vIGxpYmFyeSB1c2UKKy0gQWRkIGEgLi9jb25maWcgLS1zb2xvIG9wdGlvbiB0byBtYWtlIHpsaWIgc3Vic2V0IHdpdGggbm8gbGlicmFyeSB1c2UKIC0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCiAtIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKIC0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKQEAgLTU2NCw3ICs2MDcsNyBAQAogLSBVcGRhdGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCiAtIFVzZSAtZlBJQyBmb3Igc2hhcmVkIGJ1aWxkIGluIGNvbmZpZ3VyZSBbVGVyZWRlc2FpLCBOaWNob2xzb25dCiAtIFVzZSBvbmx5IG1ham9yIHZlcnNpb24gbnVtYmVyIGZvciBsaWJ6LnNvIG9uIElSSVggYW5kIE9TRjEgW1JlaW5ob2xkdHNlbl0KLS0gVXNlIGZkb3BlbigpIChub3QgX2Zkb3BlbigpKSBmb3IgSW50ZXJpeCBpbiB6dXRpbC5oIFtCimNrXQorLSBVc2UgZmRvcGVuKCkgKG5vdCBfZmRvcGVuKCkpIGZvciBJbnRlcml4IGluIHp1dGlsLmggW0LDpGNrXQogLSBBZGQgc29tZSBGQVEgZW50cmllcyBhYm91dCB0aGUgY29udHJpYiBkaXJlY3RvcnkKIC0gVXBkYXRlIHRoZSBNVlMgcXVlc3Rpb24gaW4gdGhlIEZBUQogLSBBdm9pZCBleHRyYW5lb3VzIHJlYWRzIGFmdGVyIEVPRiBpbiBnemlvLmMgW0Jyb3duXQpAQCAtMTE3OCw3ICsxMjIxLDcgQEAKICAgICAgICAgMzg2IGFzbSBjb2RlIHJlcGxhY2luZyBsb25nZXN0X21hdGNoKCkuCiAgICBjb250cmliL2lvc3RyZWFtLyBieSBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KICAgICAgICAgQSBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlIHRvIHRoZSB6bGliIGd6KiBmdW5jdGlvbnMKLSAgIGNvbnRyaWIvaW9zdHJlYW0yLyAgYnkgVHlnZSBM+HZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4KKyAgIGNvbnRyaWIvaW9zdHJlYW0yLyAgYnkgVHlnZSBMw7h2c2V0IDxUeWdlLkxvdnNldEBjbXIubm8+CiAgICAgICAgIEFub3RoZXIgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZQogICAgY29udHJpYi91bnRnei8gIGJ5ICJQZWRybyBBLiBBcmFuZGEgR3V0aVxpcnJleiIgPHBhYWdAdGlkLmVzPgogICAgICAgICBBIHZlcnkgc2ltcGxlIHRhci5neiBmaWxlIGV4dHJhY3RvciB1c2luZyB6bGliCkBAIC0xMjY3LDcgKzEzMTAsNyBAQAogLSBmaXggYXJyYXkgb3ZlcmxheSBpbiBkZWZsYXRlLmMgd2hpY2ggc29tZXRpbWVzIGNhdXNlZCBiYWQgY29tcHJlc3NlZCBkYXRhCiAtIGZpeCBpbmZsYXRlIGJ1ZyB3aXRoIGVtcHR5IHN0b3JlZCBibG9jawogLSBmaXggTVNET1MgbWVkaXVtIG1vZGVsIHdoaWNoIHdhcyBicm9rZW4gaW4gMC45OQotLSBmaXggZGVmbGF0ZVBhcmFtcygpIHdoaWNoIGNvdWxkIGdlbmVyYXRlZCBiYWQgY29tcHJlc3NlZCBkYXRhLgorLSBmaXggZGVmbGF0ZVBhcmFtcygpIHdoaWNoIGNvdWxkIGdlbmVyYXRlIGJhZCBjb21wcmVzc2VkIGRhdGEuCiAtIEJ5dGVmIGlzIGRlZmluZSdkIGluc3RlYWQgb2YgdHlwZWRlZidlZCAod29yayBhcm91bmQgQm9ybGFuZCBidWcpCiAtIGFkZGVkIGFuIElOREVYIGZpbGUKIC0gbmV3IG1ha2VmaWxlcyBmb3IgREpHUFAgKE1ha2VmaWxlLmRqMiksIDMyLWJpdCBCb3JsYW5kIChNYWtlZmlsZS5iMzIpLApkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluIGIvc3JjL01ha2VmaWxlLmluCmluZGV4IGM2MWFhMzAuLjVhNzc5NDkgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5pbgorKysgYi9zcmMvTWFrZWZpbGUuaW4KQEAgLTEsNSArMSw1IEBACiAjIE1ha2VmaWxlIGZvciB6bGliCi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAKICMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKQEAgLTIwLDcgKzIwLDcgQEAKIAogQ0ZMQUdTPS1PCiAjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03Ci0jQ0ZMQUdTPS1nIC1EREVCVUcKKyNDRkxBR1M9LWcgLURaTElCX0RFQlVHCiAjQ0ZMQUdTPS1PMyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XY29udmVyc2lvbiBcCiAjICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogU1RBVElDTElCPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuOAorU0hBUkVETElCVj1saWJ6LnNvLjEuMi4xMQogU0hBUkVETElCTT1saWJ6LnNvLjEKIExJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIApAQCAtNTMsNiArNTMsOSBAQAogbWFuZGlyID0gJHtwcmVmaXh9L3NoYXJlL21hbgogbWFuM2RpciA9ICR7bWFuZGlyfS9tYW4zCiBwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCitTUkNESVI9CitaSU5DPQorWklOQ09VVD0tSS4KIAogT0JKWiA9IGFkbGVyMzIubyBjcmMzMi5vIGRlZmxhdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8genV0aWwubwogT0JKRyA9IGNvbXByZXNzLm8gdW5jb21wci5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubwpAQCAtMTEzLDggKzExNiw4IEBACiAJZmk7IFwKIAlybSAtZiAkJFRNUDY0CiAKLWluZmNvdmVyLm86IHRlc3QvaW5mY292ZXIuYyB6bGliLmggemNvbmYuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9pbmZjb3Zlci5jCitpbmZjb3Zlci5vOiAkKFNSQ0RJUil0ZXN0L2luZmNvdmVyLmMgJChTUkNESVIpemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgJChaSU5DT1VUKSAtYyAtbyAkQCAkKFNSQ0RJUil0ZXN0L2luZmNvdmVyLmMKIAogaW5mY292ZXI6IGluZmNvdmVyLm8gbGliei5hCiAJJChDQykgJChDRkxBR1MpIC1vICRAIGluZmNvdmVyLm8gbGliei5hCkBAIC0xNDAsMjQgKzE0MywxNDAgQEAKIAltdiBfbWF0Y2gubyBtYXRjaC5sbwogCXJtIC1mIF9tYXRjaC5zCiAKLWV4YW1wbGUubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvZXhhbXBsZS5jCitleGFtcGxlLm86ICQoU1JDRElSKXRlc3QvZXhhbXBsZS5jICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpICQoWklOQ09VVCkgLWMgLW8gJEAgJChTUkNESVIpdGVzdC9leGFtcGxlLmMKIAotbWluaWd6aXAubzogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L21pbmlnemlwLmMKK21pbmlnemlwLm86ICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1jIC1vICRAICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYwogCi1leGFtcGxlNjQubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKK2V4YW1wbGU2NC5vOiAkKFNSQ0RJUil0ZXN0L2V4YW1wbGUuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgJChTUkNESVIpdGVzdC9leGFtcGxlLmMKIAotbWluaWd6aXA2NC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCittaW5pZ3ppcDY0Lm86ICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgJChTUkNESVIpdGVzdC9taW5pZ3ppcC5jCiAKLS5TVUZGSVhFUzogLmxvCiAKLS5jLmxvOgorYWRsZXIzMi5vOiAkKFNSQ0RJUilhZGxlcjMyLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilhZGxlcjMyLmMKKworY3JjMzIubzogJChTUkNESVIpY3JjMzIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWNyYzMyLmMKKworZGVmbGF0ZS5vOiAkKFNSQ0RJUilkZWZsYXRlLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilkZWZsYXRlLmMKKworaW5mYmFjay5vOiAkKFNSQ0RJUilpbmZiYWNrLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilpbmZiYWNrLmMKKworaW5mZmFzdC5vOiAkKFNSQ0RJUilpbmZmYXN0LmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilpbmZmYXN0LmMKKworaW5mbGF0ZS5vOiAkKFNSQ0RJUilpbmZsYXRlLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilpbmZsYXRlLmMKKworaW5mdHJlZXMubzogJChTUkNESVIpaW5mdHJlZXMuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZnRyZWVzLmMKKwordHJlZXMubzogJChTUkNESVIpdHJlZXMuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKXRyZWVzLmMKKworenV0aWwubzogJChTUkNESVIpenV0aWwuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKXp1dGlsLmMKKworY29tcHJlc3MubzogJChTUkNESVIpY29tcHJlc3MuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWNvbXByZXNzLmMKKwordW5jb21wci5vOiAkKFNSQ0RJUil1bmNvbXByLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUil1bmNvbXByLmMKKworZ3pjbG9zZS5vOiAkKFNSQ0RJUilnemNsb3NlLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilnemNsb3NlLmMKKworZ3psaWIubzogJChTUkNESVIpZ3psaWIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWd6bGliLmMKKworZ3pyZWFkLm86ICQoU1JDRElSKWd6cmVhZC5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpZ3pyZWFkLmMKKworZ3p3cml0ZS5vOiAkKFNSQ0RJUilnendyaXRlLmMKKwkkKENDKSAkKENGTEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilnendyaXRlLmMKKworCithZGxlcjMyLmxvOiAkKFNSQ0RJUilhZGxlcjMyLmMKIAktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCi0JJChDQykgJChTRkxBR1MpIC1EUElDIC1jIC1vIG9ianMvJCoubyAkPAotCS1AbXYgb2Jqcy8kKi5vICRACisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9hZGxlcjMyLm8gJChTUkNESVIpYWRsZXIzMi5jCisJLUBtdiBvYmpzL2FkbGVyMzIubyAkQAorCitjcmMzMi5sbzogJChTUkNESVIpY3JjMzIuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2NyYzMyLm8gJChTUkNESVIpY3JjMzIuYworCS1AbXYgb2Jqcy9jcmMzMi5vICRACisKK2RlZmxhdGUubG86ICQoU1JDRElSKWRlZmxhdGUuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2RlZmxhdGUubyAkKFNSQ0RJUilkZWZsYXRlLmMKKwktQG12IG9ianMvZGVmbGF0ZS5vICRACisKK2luZmJhY2subG86ICQoU1JDRElSKWluZmJhY2suYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2luZmJhY2subyAkKFNSQ0RJUilpbmZiYWNrLmMKKwktQG12IG9ianMvaW5mYmFjay5vICRACisKK2luZmZhc3QubG86ICQoU1JDRElSKWluZmZhc3QuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2luZmZhc3QubyAkKFNSQ0RJUilpbmZmYXN0LmMKKwktQG12IG9ianMvaW5mZmFzdC5vICRACisKK2luZmxhdGUubG86ICQoU1JDRElSKWluZmxhdGUuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2luZmxhdGUubyAkKFNSQ0RJUilpbmZsYXRlLmMKKwktQG12IG9ianMvaW5mbGF0ZS5vICRACisKK2luZnRyZWVzLmxvOiAkKFNSQ0RJUilpbmZ0cmVlcy5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mdHJlZXMubyAkKFNSQ0RJUilpbmZ0cmVlcy5jCisJLUBtdiBvYmpzL2luZnRyZWVzLm8gJEAKKwordHJlZXMubG86ICQoU1JDRElSKXRyZWVzLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy90cmVlcy5vICQoU1JDRElSKXRyZWVzLmMKKwktQG12IG9ianMvdHJlZXMubyAkQAorCit6dXRpbC5sbzogJChTUkNESVIpenV0aWwuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL3p1dGlsLm8gJChTUkNESVIpenV0aWwuYworCS1AbXYgb2Jqcy96dXRpbC5vICRACisKK2NvbXByZXNzLmxvOiAkKFNSQ0RJUiljb21wcmVzcy5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvY29tcHJlc3MubyAkKFNSQ0RJUiljb21wcmVzcy5jCisJLUBtdiBvYmpzL2NvbXByZXNzLm8gJEAKKwordW5jb21wci5sbzogJChTUkNESVIpdW5jb21wci5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvdW5jb21wci5vICQoU1JDRElSKXVuY29tcHIuYworCS1AbXYgb2Jqcy91bmNvbXByLm8gJEAKKworZ3pjbG9zZS5sbzogJChTUkNESVIpZ3pjbG9zZS5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvZ3pjbG9zZS5vICQoU1JDRElSKWd6Y2xvc2UuYworCS1AbXYgb2Jqcy9nemNsb3NlLm8gJEAKKworZ3psaWIubG86ICQoU1JDRElSKWd6bGliLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nemxpYi5vICQoU1JDRElSKWd6bGliLmMKKwktQG12IG9ianMvZ3psaWIubyAkQAorCitnenJlYWQubG86ICQoU1JDRElSKWd6cmVhZC5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvZ3pyZWFkLm8gJChTUkNESVIpZ3pyZWFkLmMKKwktQG12IG9ianMvZ3pyZWFkLm8gJEAKKworZ3p3cml0ZS5sbzogJChTUkNESVIpZ3p3cml0ZS5jCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvZ3p3cml0ZS5vICQoU1JDRElSKWd6d3JpdGUuYworCS1AbXYgb2Jqcy9nendyaXRlLm8gJEAKKwogCiBwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouYQogCSQoTERTSEFSRUQpICQoU0ZMQUdTKSAtbyAkQCAkKFBJQ19PQkpTKSAkKExEU0hBUkVETElCQykgJChMREZMQUdTKQpAQCAtMTkwLDEwICszMDksMTIgQEAKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgZmkKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCiAJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCisJcm0gLWYgJChERVNURElSKSQobGliZGlyKS8kKFNUQVRJQ0xJQikKIAljcCAkKFNUQVRJQ0xJQikgJChERVNURElSKSQobGliZGlyKQogCWNobW9kIDY0NCAkKERFU1RESVIpJChsaWJkaXIpLyQoU1RBVElDTElCKQogCS1AKCQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKIAktQGlmIHRlc3QgLW4gIiQoU0hBUkVETElCVikiOyB0aGVuIFwKKwkgIHJtIC1mICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJWKTsgXAogCSAgY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBcCiAJICBlY2hvICJjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikiOyBcCiAJICBjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCkBAIC0yMDMsOCArMzI0LDEwIEBACiAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAogCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQotCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQorCXJtIC1mICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMworCWNwICQoU1JDRElSKXpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQogCWNobW9kIDY0NCAkKERFU1RESVIpJChtYW4zZGlyKS96bGliLjMKKwlybSAtZiAkKERFU1RESVIpJChwa2djb25maWdkaXIpL3psaWIucGMKIAljcCB6bGliLnBjICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKIAljaG1vZCA2NDQgJChERVNURElSKSQocGtnY29uZmlnZGlyKS96bGliLnBjCiAjIFRoZSByYW5saWIgaW4gaW5zdGFsbCBpcyBuZWVkZWQgb24gTmVYVFNURVAgd2hpY2ggY2hlY2tzIGZpbGUgdGltZXMKQEAgLTIxMiw3ICszMzUsOCBAQAogCiBpbnN0YWxsOiBpbnN0YWxsLWxpYnMKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKSAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoaW5jbHVkZWRpcik7IGZpCi0JY3AgemxpYi5oIHpjb25mLmggJChERVNURElSKSQoaW5jbHVkZWRpcikKKwlybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96bGliLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvemNvbmYuaAorCWNwICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpCiAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3psaWIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96Y29uZi5oCiAKIHVuaW5zdGFsbDoKQEAgLTIyNiwxOCArMzUwLDE4IEBACiAKIGRvY3M6IHpsaWIuMy5wZGYKIAotemxpYi4zLnBkZjogemxpYi4zCi0JZ3JvZmYgLW1hbmRvYyAtZiBIIC1UIHBzIHpsaWIuMyB8IHBzMnBkZiAtIHpsaWIuMy5wZGYKK3psaWIuMy5wZGY6ICQoU1JDRElSKXpsaWIuMworCWdyb2ZmIC1tYW5kb2MgLWYgSCAtVCBwcyAkKFNSQ0RJUil6bGliLjMgfCBwczJwZGYgLSAkQAogCi16Y29uZi5oLmNtYWtlaW46IHpjb25mLmguaW4KK3pjb25mLmguY21ha2VpbjogJChTUkNESVIpemNvbmYuaC5pbgogCS1AIFRFTVBGSUxFPXpjb25maF8kJDsgXAogCWVjaG8gIi8jZGVmaW5lIFpDT05GX0gvIGFcXFxcXG4jY21ha2VkZWZpbmUgWl9QUkVGSVhcXFxcXG4jY21ha2VkZWZpbmUgWl9IQVZFX1VOSVNURF9IXG4iID4+ICQkVEVNUEZJTEUgJiZcCi0Jc2VkIC1mICQkVEVNUEZJTEUgemNvbmYuaC5pbiA+IHpjb25mLmguY21ha2VpbiAmJlwKLQl0b3VjaCAtciB6Y29uZi5oLmluIHpjb25mLmguY21ha2VpbiAmJlwKKwlzZWQgLWYgJCRURU1QRklMRSAkKFNSQ0RJUil6Y29uZi5oLmluID4gJEAgJiZcCisJdG91Y2ggLXIgJChTUkNESVIpemNvbmYuaC5pbiAkQCAmJlwKIAlybSAkJFRFTVBGSUxFCiAKLXpjb25mOiB6Y29uZi5oLmluCi0JY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCit6Y29uZjogJChTUkNESVIpemNvbmYuaC5pbgorCWNwIC1wICQoU1JDRElSKXpjb25mLmguaW4gemNvbmYuaAogCiBtb3N0bHljbGVhbjogY2xlYW4KIGNsZWFuOgpAQCAtMjU1LDM0ICszNzksMzIgQEAKIGRpc3RjbGVhbjogY2xlYW4gemNvbmYgemNvbmYuaC5jbWFrZWluIGRvY3MKIAlybSAtZiBNYWtlZmlsZSB6bGliLnBjIGNvbmZpZ3VyZS5sb2cKIAktQHJtIC1mIC5EU19TdG9yZQotCS1AcHJpbnRmICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iXG4nID4gTWFrZWZpbGUKLQktQHByaW50ZiAnXG5kaXN0Y2xlYW46XG5cdG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuXG4nID4+IE1ha2VmaWxlCi0JLUB0b3VjaCAtciBNYWtlZmlsZS5pbiBNYWtlZmlsZQorCUBpZiBbIC1mIE1ha2VmaWxlLmluIF07IHRoZW4gXAorCXByaW50ZiAnYWxsOlxuXHQtQGVjaG8gIlBsZWFzZSB1c2UgLi9jb25maWd1cmUgZmlyc3QuICBUaGFuayB5b3UuIlxuJyA+IE1ha2VmaWxlIDsgXAorCXByaW50ZiAnXG5kaXN0Y2xlYW46XG5cdG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuXG4nID4+IE1ha2VmaWxlIDsgXAorCXRvdWNoIC1yICQoU1JDRElSKU1ha2VmaWxlLmluIE1ha2VmaWxlIDsgZmkKKwlAaWYgWyAhIC1mIHpjb25mLmguaW4gXTsgdGhlbiBybSAtZiB6Y29uZi5oIHpjb25mLmguY21ha2VpbiA7IGZpCisJQGlmIFsgISAtZiB6bGliLjMgXTsgdGhlbiBybSAtZiB6bGliLjMucGRmIDsgZmkKIAogdGFnczoKLQlldGFncyAqLltjaF0KKwlldGFncyAkKFNSQ0RJUikqLltjaF0KIAotZGVwZW5kOgotCW1ha2VkZXBlbmQgLS0gJChDRkxBR1MpIC0tICouW2NoXQorYWRsZXIzMi5vIHp1dGlsLm86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmgKK2d6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubzogJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpZ3pndXRzLmgKK2NvbXByZXNzLm8gZXhhbXBsZS5vIG1pbmlnemlwLm8gdW5jb21wci5vOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorY3JjMzIubzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUiljcmMzMi5oCitkZWZsYXRlLm86ICQoU1JDRElSKWRlZmxhdGUuaCAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitpbmZiYWNrLm8gaW5mbGF0ZS5vOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmggJChTUkNESVIpaW5mbGF0ZS5oICQoU1JDRElSKWluZmZhc3QuaCAkKFNSQ0RJUilpbmZmaXhlZC5oCitpbmZmYXN0Lm86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJlZXMuaCAkKFNSQ0RJUilpbmZsYXRlLmggJChTUkNESVIpaW5mZmFzdC5oCitpbmZ0cmVlcy5vOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmgKK3RyZWVzLm86ICQoU1JDRElSKWRlZmxhdGUuaCAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKXRyZWVzLmgKIAotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1hZGxlcjMyLm8genV0aWwubzogenV0aWwuaCB6bGliLmggemNvbmYuaAotZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAotY29tcHJlc3MubyBleGFtcGxlLm8gbWluaWd6aXAubyB1bmNvbXByLm86IHpsaWIuaCB6Y29uZi5oCi1jcmMzMi5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKLWRlZmxhdGUubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWluZmJhY2subyBpbmZsYXRlLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oIGluZmZpeGVkLmgKLWluZmZhc3QubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZnRyZWVzLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAotdHJlZXMubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmggdHJlZXMuaAotCi1hZGxlcjMyLmxvIHp1dGlsLmxvOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCi1nemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBnendyaXRlLmxvOiB6bGliLmggemNvbmYuaCBnemd1dHMuaAotY29tcHJlc3MubG8gZXhhbXBsZS5sbyBtaW5pZ3ppcC5sbyB1bmNvbXByLmxvOiB6bGliLmggemNvbmYuaAotY3JjMzIubG86IHp1dGlsLmggemxpYi5oIHpjb25mLmggY3JjMzIuaAotZGVmbGF0ZS5sbzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWluZmJhY2subG8gaW5mbGF0ZS5sbzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmggaW5mZml4ZWQuaAotaW5mZmFzdC5sbzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZnRyZWVzLmxvOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKLXRyZWVzLmxvOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaCB0cmVlcy5oCithZGxlcjMyLmxvIHp1dGlsLmxvOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBnendyaXRlLmxvOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilnemd1dHMuaAorY29tcHJlc3MubG8gZXhhbXBsZS5sbyBtaW5pZ3ppcC5sbyB1bmNvbXByLmxvOiAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorY3JjMzIubG86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpY3JjMzIuaAorZGVmbGF0ZS5sbzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmgKK2luZmJhY2subG8gaW5mbGF0ZS5sbzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmggJChTUkNESVIpaW5mZml4ZWQuaAoraW5mZmFzdC5sbzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmgKK2luZnRyZWVzLmxvOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmgKK3RyZWVzLmxvOiAkKFNSQ0RJUilkZWZsYXRlLmggJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUil0cmVlcy5oCmRpZmYgLS1naXQgYS9zcmMvUkVBRE1FIGIvc3JjL1JFQURNRQppbmRleCA1Y2E5ZDEyLi41MTEwNmRlIDEwMDY0NAotLS0gYS9zcmMvUkVBRE1FCisrKyBiL3NyYy9SRUFETUUKQEAgLTEsNiArMSw2IEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFSWQogCi16bGliIDEuMi44IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcworemxpYiAxLjIuMTEgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kCkBAIC0zMSw3ICszMSw3IEBACiBpc3N1ZSBvZiBEci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0CiBodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCiAKLVRoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuOCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBDaGFuZ2VMb2cuCitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjExIGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApAQCAtODQsNyArODQsNyBAQAogCiBDb3B5cmlnaHQgbm90aWNlOgogCi0gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpkaWZmIC0tZ2l0IGEvc3JjL2FkbGVyMzIuYyBiL3NyYy9hZGxlcjMyLmMKaW5kZXggYTg2OGYwNy4uZDBiZTQzOCAxMDA2NDQKLS0tIGEvc3JjL2FkbGVyMzIuYworKysgYi9zcmMvYWRsZXIzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogYWRsZXIzMi5jIC0tIGNvbXB1dGUgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExLCAyMDE2IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC03LDExICs3LDkgQEAKIAogI2luY2x1ZGUgInp1dGlsLmgiCiAKLSNkZWZpbmUgbG9jYWwgc3RhdGljCi0KIGxvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOwogCi0jZGVmaW5lIEJBU0UgNjU1MjEgICAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBCQVNFIDY1NTIxVSAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1BWCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIApAQCAtNjIsMTAgKzYwLDEwIEBACiAjZW5kaWYKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotdUxvbmcgWkVYUE9SVCBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbikKK3VMb25nIFpFWFBPUlQgYWRsZXIzMl96KGFkbGVyLCBidWYsIGxlbikKICAgICB1TG9uZyBhZGxlcjsKICAgICBjb25zdCBCeXRlZiAqYnVmOwotICAgIHVJbnQgbGVuOworICAgIHpfc2l6ZV90IGxlbjsKIHsKICAgICB1bnNpZ25lZCBsb25nIHN1bTI7CiAgICAgdW5zaWduZWQgbjsKQEAgLTEzMyw2ICsxMzEsMTUgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcgWkVYUE9SVCBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbikKKyAgICB1TG9uZyBhZGxlcjsKKyAgICBjb25zdCBCeXRlZiAqYnVmOworICAgIHVJbnQgbGVuOworeworICAgIHJldHVybiBhZGxlcjMyX3ooYWRsZXIsIGJ1ZiwgbGVuKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMikKICAgICB1TG9uZyBhZGxlcjE7CiAgICAgdUxvbmcgYWRsZXIyOwpAQCAtMTU2LDcgKzE2Myw3IEBACiAgICAgc3VtMiArPSAoKGFkbGVyMSA+PiAxNikgJiAweGZmZmYpICsgKChhZGxlcjIgPj4gMTYpICYgMHhmZmZmKSArIEJBU0UgLSByZW07CiAgICAgaWYgKHN1bTEgPj0gQkFTRSkgc3VtMSAtPSBCQVNFOwogICAgIGlmIChzdW0xID49IEJBU0UpIHN1bTEgLT0gQkFTRTsKLSAgICBpZiAoc3VtMiA+PSAoQkFTRSA8PCAxKSkgc3VtMiAtPSAoQkFTRSA8PCAxKTsKKyAgICBpZiAoc3VtMiA+PSAoKHVuc2lnbmVkIGxvbmcpQkFTRSA8PCAxKSkgc3VtMiAtPSAoKHVuc2lnbmVkIGxvbmcpQkFTRSA8PCAxKTsKICAgICBpZiAoc3VtMiA+PSBCQVNFKSBzdW0yIC09IEJBU0U7CiAgICAgcmV0dXJuIHN1bTEgfCAoc3VtMiA8PCAxNik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYXM0MDAvYm5kc3JjIGIvc3JjL2FzNDAwL2JuZHNyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4MTRmZC4uMDAwMDAwMAotLS0gYS9zcmMvYXM0MDAvYm5kc3JjCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLVNUUlBHTUVYUCBQR01MVkwoKkNVUlJFTlQpIFNJR05BVFVSRSgnWkxJQicpCi0KLS8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KLS8qICAgVmVyc2lvbiAxLjEuMyBlbnRyeSBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgQURMRVIzMiAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImFkbGVyMzIiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBDT01QUkVTUyAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiY29tcHJlc3MiKQotICBFWFBPUlQgU1lNQk9MKCJjb21wcmVzczIiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBDUkMzMiAgICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiY3JjMzIiKQotICBFWFBPUlQgU1lNQk9MKCJnZXRfY3JjX3RhYmxlIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgREVGTEFURSAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImRlZmxhdGUiKQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlRW5kIikKLSAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVNldERpY3Rpb25hcnkiKQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlQ29weSIpCi0gIEVYUE9SVCBTWU1CT0woImRlZmxhdGVSZXNldCIpCi0gIEVYUE9SVCBTWU1CT0woImRlZmxhdGVQYXJhbXMiKQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlUHJpbWUiKQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlSW5pdF8iKQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlSW5pdDJfIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgR1pJTyAgICAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImd6b3BlbiIpCi0gIEVYUE9SVCBTWU1CT0woImd6ZG9wZW4iKQotICBFWFBPUlQgU1lNQk9MKCJnenNldHBhcmFtcyIpCi0gIEVYUE9SVCBTWU1CT0woImd6cmVhZCIpCi0gIEVYUE9SVCBTWU1CT0woImd6d3JpdGUiKQotICBFWFBPUlQgU1lNQk9MKCJnenByaW50ZiIpCi0gIEVYUE9SVCBTWU1CT0woImd6cHV0cyIpCi0gIEVYUE9SVCBTWU1CT0woImd6Z2V0cyIpCi0gIEVYUE9SVCBTWU1CT0woImd6cHV0YyIpCi0gIEVYUE9SVCBTWU1CT0woImd6Z2V0YyIpCi0gIEVYUE9SVCBTWU1CT0woImd6Zmx1c2giKQotICBFWFBPUlQgU1lNQk9MKCJnenNlZWsiKQotICBFWFBPUlQgU1lNQk9MKCJnenJld2luZCIpCi0gIEVYUE9SVCBTWU1CT0woImd6dGVsbCIpCi0gIEVYUE9SVCBTWU1CT0woImd6ZW9mIikKLSAgRVhQT1JUIFNZTUJPTCgiZ3pjbG9zZSIpCi0gIEVYUE9SVCBTWU1CT0woImd6ZXJyb3IiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBJTkZMQVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZSIpCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVFbmQiKQotICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlU2V0RGljdGlvbmFyeSIpCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVTeW5jIikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVJlc2V0IikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUluaXRfIikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUluaXQyXyIpCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVTeW5jUG9pbnQiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBVTkNPTVBSICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgidW5jb21wcmVzcyIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIFpVVElMICAgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJ6bGliVmVyc2lvbiIpCi0gIEVYUE9SVCBTWU1CT0woInpFcnJvciIpCi0KLS8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KLS8qICAgVmVyc2lvbiAxLjIuMSBhZGRpdGlvbmFsIGVudHJ5IHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgQ09NUFJFU1MgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImNvbXByZXNzQm91bmQiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBERUZMQVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZUJvdW5kIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgR1pJTyAgICAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImd6dW5nZXRjIikKLSAgRVhQT1JUIFNZTUJPTCgiZ3pjbGVhcmVyciIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIElORkJBQ0sgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlQmFjayIpCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVCYWNrRW5kIikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUJhY2tJbml0XyIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIElORkxBVEUgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlQ29weSIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIFpVVElMICAgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJ6bGliQ29tcGlsZUZsYWdzIikKLQotLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLwotLyogICBWZXJzaW9uIDEuMi41IGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBBRExFUjMyICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiYWRsZXIzMl9jb21iaW5lIikKLSAgRVhQT1JUIFNZTUJPTCgiYWRsZXIzMl9jb21iaW5lNjQiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBDUkMzMiAgICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiY3JjMzJfY29tYmluZSIpCi0gIEVYUE9SVCBTWU1CT0woImNyYzMyX2NvbWJpbmU2NCIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIEdaTElCICAgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJnemJ1ZmZlciIpCi0gIEVYUE9SVCBTWU1CT0woImd6b2Zmc2V0IikKLSAgRVhQT1JUIFNZTUJPTCgiZ3pvZmZzZXQ2NCIpCi0gIEVYUE9SVCBTWU1CT0woImd6b3BlbjY0IikKLSAgRVhQT1JUIFNZTUJPTCgiZ3pzZWVrNjQiKQotICBFWFBPUlQgU1lNQk9MKCJnenRlbGw2NCIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIEdaUkVBRCAgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJnemNsb3NlX3IiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBHWldSSVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiZ3pjbG9zZV93IikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAqTU9EVUxFICAgICAgSU5GTEFURSAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVNYXJrIikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVByaW1lIikKLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVJlc2V0MiIpCi0gIEVYUE9SVCBTWU1CT0woImluZmxhdGVVbmRlcm1pbmUiKQotCi0vKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCi0vKiAgIFZlcnNpb24gMS4yLjYgYWRkaXRpb25hbCBlbnRyeSBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIERFRkxBVEUgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlUmVzZXRLZWVwIikKLSAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVBlbmRpbmciKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBHWldSSVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiZ3pnZXRjXyIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgKk1PRFVMRSAgICAgIElORkxBVEUgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlUmVzZXRLZWVwIikKLQotLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLwotLyogICBWZXJzaW9uIDEuMi44IGFkZGl0aW9uYWwgZW50cnkgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICpNT0RVTEUgICAgICBJTkZMQVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUdldERpY3Rpb25hcnkiKQotCi1FTkRQR01FWFAKZGlmZiAtLWdpdCBhL3NyYy9hczQwMC9jb21waWxlLmNscCBiL3NyYy9hczQwMC9jb21waWxlLmNscApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmNDdjNi4uMDAwMDAwMAotLS0gYS9zcmMvYXM0MDAvY29tcGlsZS5jbHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgWkxJQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENvbXBpbGUgc291cmNlcyBpbnRvIG1vZHVsZXMgYW5kIGxpbmsgdGhlbSBpbnRvIGEgc2VydmljZSBwcm9ncmFtLiAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAgICAgICAgICAgIFBHTQotCi0vKiAgICAgIENvbmZpZ3VyYXRpb24gYWRqdXN0YWJsZSBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgRENMICAgICAgICBWQVIoJlNSQ0xJQikgVFlQRSgqQ0hBUikgTEVOKDEwKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdaTElCJykgICAgICAgICAgICAgICAgICAgICAgICAgLyogU291cmNlIGxpYnJhcnkuICovCi0gICAgICAgICAgICAgRENMICAgICAgICBWQVIoJlNSQ0ZJTEUpIFRZUEUoKkNIQVIpIExFTigxMCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSgnU09VUkNFUycpICAgICAgICAgICAgICAgICAgICAgIC8qIFNvdXJjZSBtZW1iZXIgZmlsZS4gKi8KLSAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmQ1RMRklMRSkgVFlQRSgqQ0hBUikgTEVOKDEwKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdUT09MUycpICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBtZW1iZXIgZmlsZS4gKi8KLQotICAgICAgICAgICAgIERDTCAgICAgICAgVkFSKCZNT0RMSUIpIFRZUEUoKkNIQVIpIExFTigxMCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSgnWkxJQicpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZHVsZSBsaWJyYXJ5LiAqLwotCi0gICAgICAgICAgICAgRENMICAgICAgICBWQVIoJlNSVkxJQikgVFlQRSgqQ0hBUikgTEVOKDEwKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdMR1BMJykgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmljZSBwcm9ncmFtIGxpYnJhcnkuICovCi0KLSAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmQ0ZMQUdTKSBUWVBFKCpDSEFSKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdPUFRJTUlaRSg0MCknKSAgICAgICAgICAgICAgICAgLyogQ29tcGlsZSBvcHRpb25zLiAqLwotCi0gICAgICAgICAgICAgRENMICAgICAgICBWQVIoJlRHVFJMUykgVFlQRSgqQ0hBUikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSgnVjVSM00wJykgICAgICAgICAgICAgICAgICAgICAgIC8qIFRhcmdldCByZWxlYXNlLiAqLwotCi0KLS8qICAgICAgV29ya2luZyBzdG9yYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmQ01ETEVOKSBUWVBFKCpERUMpIExFTigxNSA1KSBWQUxVRSgzMDApICAgIC8qIENvbW1hbmQgbGVuZ3RoLiAqLwotICAgICAgICAgICAgIERDTCAgICAgICAgVkFSKCZDTUQpIFRZUEUoKkNIQVIpIExFTig1MTIpCi0gICAgICAgICAgICAgRENMICAgICAgICBWQVIoJkZJWERDTUQpIFRZUEUoKkNIQVIpIExFTig1MTIpCi0KLQotLyogICAgICBDb21waWxlIHNvdXJjZXMgaW50byBtb2R1bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZGSVhEQ01EKSBWQUxVRSgnQ1JUQ01PRCcgKkJDQVQgJkNGTEFHUyAqQkNBVCAgICAgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICdTWVNJRkNPUFQoKklGUzY0SU8pJyAqQkNBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICAgICAgICAgICAgICAgICAgICAnREVGSU5FKCcnX0xBUkdFRklMRTY0X1NPVVJDRScnJyAqQkNBVCAgICAgICAgICAgICAgICAgKwotICAgICAgICAgICAgICAgICAgICAgICAgJycnX0xGUzY0X0xBUkdFRklMRT0xJycpIFRHVFJMUygnICpUQ0FUICZUR1RSTFMgKlRDQVQgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICcpIFNSQ0ZJTEUoJyAqVENBVCAmU1JDTElCICpUQ0FUICcvJyAqVENBVCAgICAgICAgICAgICArCi0gICAgICAgICAgICAgICAgICAgICAgICAmU1JDRklMRSAqVENBVCAnKSBNT0RVTEUoJyAqVENBVCAmTU9ETElCICpUQ0FUICcvJykKLQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0FETEVSMzIpJykKLSAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKLQotICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCZGSVhEQ01EICpUQ0FUICdDT01QUkVTUyknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0NSQzMyKScpCi0gICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCi0KLSAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgmRklYRENNRCAqVENBVCAnREVGTEFURSknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0daQ0xPU0UpJykKLSAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKLQotICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCZGSVhEQ01EICpUQ0FUICdHWkxJQiknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0daUkVBRCknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0daV1JJVEUpJykKLSAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKLQotICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCZGSVhEQ01EICpUQ0FUICdJTkZCQUNLKScpCi0gICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCi0KLSAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgmRklYRENNRCAqVENBVCAnSU5GRkFTVCknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ0lORkxBVEUpJykKLSAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKLQotICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCZGSVhEQ01EICpUQ0FUICdJTkZUUkVFUyknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ1RSRUVTKScpCi0gICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCi0KLSAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgmRklYRENNRCAqVENBVCAnVU5DT01QUiknKQotICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQotCi0gICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJkZJWERDTUQgKlRDQVQgJ1pVVElMKScpCi0gICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCi0KLQotLyogICAgICBMaW5rIG1vZHVsZXMgaW50byBhIHNlcnZpY2UgcHJvZ3JhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgIENSVFNSVlBHTSAgU1JWUEdNKCZTUlZMSUIvWkxJQikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEUoJk1PRExJQi9BRExFUjMyICAgICAmTU9ETElCL0NPTVBSRVNTICAgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNT0RMSUIvQ1JDMzIgICAgICAgJk1PRExJQi9ERUZMQVRFICAgICArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTU9ETElCL0daQ0xPU0UgICAgICZNT0RMSUIvR1pMSUIgICAgICAgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1PRExJQi9HWlJFQUQgICAgICAmTU9ETElCL0daV1JJVEUgICAgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNT0RMSUIvSU5GQkFDSyAgICAgJk1PRExJQi9JTkZGQVNUICAgICArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTU9ETElCL0lORkxBVEUgICAgICZNT0RMSUIvSU5GVFJFRVMgICAgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1PRExJQi9UUkVFUyAgICAgICAmTU9ETElCL1VOQ09NUFIgICAgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNT0RMSUIvWlVUSUwpICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNSQ0ZJTEUoJlNSQ0xJQi8mQ1RMRklMRSkgU1JDTUJSKEJORFNSQykgICAgICAgKwotICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUKCdaTElCIDEuMi44JykgVEdUUkxTKCZUR1RSTFMpCi0KLSAgICAgICAgICAgICBFTkRQR00KZGlmZiAtLWdpdCBhL3NyYy9hczQwMC9yZWFkbWUudHh0IGIvc3JjL2FzNDAwL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWQ5M2IuLjAwMDAwMDAKLS0tIGEvc3JjL2FzNDAwL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotICAgICAgICBaTElCIHZlcnNpb24gMS4yLjggZm9yIEFTNDAwIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMKLQotSSkgRnJvbSBhbiBBUzQwMCAqU0FWRiBmaWxlOgotCi0xKSAgICAgIFVucGFja2luZyBhcmNoaXZlIHRvIGFuIEFTNDAwIHNhdmUgZmlsZQotCi1PbiB0aGUgQVM0MDA6Ci0KLV8gICAgICAgQ3JlYXRlIHRoZSBaTElCIEFTNDAwIGxpYnJhcnk6Ci0KLSAgICAgICAgQ1JUTElCIExJQihaTElCKSBUWVBFKCpQUk9EKSBURVhUKCdaTElCIGNvbXByZXNzaW9uIEFQSSBsaWJyYXJ5JykKLQotXyAgICAgICBDcmVhdGUgYSB3b3JrIHNhdmUgZmlsZSwgZm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICBDUlRTQVZGIEZJTEUoWkxJQi9aTElCU0FWRikKLQotT24gYSBQQyBjb25uZWN0ZWQgdG8gdGhlIHRhcmdldCBBUzQwMDoKLQotXyAgICAgICBVbnBhY2sgdGhlIHNhdmUgZmlsZSBpbWFnZSB0byBhIFBDIGZpbGUgIlpMSUJTQVZGIgotXyAgICAgICBVcGxvYWQgdGhpcyBmaWxlIGludG8gdGhlIHNhdmUgZmlsZSBvbiB0aGUgQVM0MDAsIGZvciBleGFtcGxlCi0gICAgICAgICAgICAgICAgdXNpbmcgZnRwIGluIEJJTkFSWSBtb2RlLgotCi0KLTIpICAgICAgUG9wdWxhdGluZyB0aGUgWkxJQiBBUzQwMCBzb3VyY2UgbGlicmFyeQotCi1PbiB0aGUgQVM0MDA6Ci0KLV8gICAgICAgRXh0cmFjdCB0aGUgc2F2ZWQgb2JqZWN0cyBpbnRvIHRoZSBaTElCIEFTNDAwIGxpYnJhcnkgdXNpbmc6Ci0KLVJTVE9CSiBPQkooKkFMTCkgU0FWTElCKFpMSUIpIERFVigqU0FWRikgU0FWRihaTElCL1pMSUJTQVZGKSBSU1RMSUIoWkxJQikKLQotCi0zKSAgICAgIEN1c3RvbWl6ZSBpbnN0YWxsYXRpb246Ci0KLV8gICAgICAgRWRpdCBDTCBtZW1iZXIgWkxJQi9UT09MUyhDT01QSUxFKSBhbmQgY2hhbmdlIHBhcmFtZXRlcnMgaWYgbmVlZGVkLAotICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgY29tbWVudHMuCi0KLV8gICAgICAgQ29tcGlsZSB0aGlzIG1lbWJlciB3aXRoOgotCi0gICAgICAgIENSVENMUEdNIFBHTShaTElCL0NPTVBJTEUpIFNSQ0ZJTEUoWkxJQi9UT09MUykgU1JDTUJSKENPTVBJTEUpCi0KLQotNCkgICAgICBDb21waWxlIGFuZCBnZW5lcmF0ZSB0aGUgc2VydmljZSBwcm9ncmFtOgotCi1fICAgICAgIFRoaXMgY2FuIG5vdyBiZSBkb25lIGJ5IGV4ZWN1dGluZzoKLQotICAgICAgICBDQUxMIFBHTShaTElCL0NPTVBJTEUpCi0KLQotCi1JSSkgRnJvbSB0aGUgb3JpZ2luYWwgc291cmNlIGRpc3RyaWJ1dGlvbjoKLQotMSkgICAgICBPbiB0aGUgQVM0MDAsIGNyZWF0ZSB0aGUgc291cmNlIGxpYnJhcnk6Ci0KLSAgICAgICAgQ1JUTElCIExJQihaTElCKSBUWVBFKCpQUk9EKSBURVhUKCdaTElCIGNvbXByZXNzaW9uIEFQSSBsaWJyYXJ5JykKLQotMikgICAgICBDcmVhdGUgdGhlIHNvdXJjZSBmaWxlczoKLQotICAgICAgICBDUlRTUkNQRiBGSUxFKFpMSUIvU09VUkNFUykgUkNETEVOKDExMikgVEVYVCgnWkxJQiBsaWJyYXJ5IG1vZHVsZXMnKQotICAgICAgICBDUlRTUkNQRiBGSUxFKFpMSUIvSCkgICAgICAgUkNETEVOKDExMikgVEVYVCgnWkxJQiBsaWJyYXJ5IGluY2x1ZGVzJykKLSAgICAgICAgQ1JUU1JDUEYgRklMRShaTElCL1RPT0xTKSAgIFJDRExFTigxMTIpIFRFWFQoJ1pMSUIgbGlicmFyeSBjb250cm9sIHV0aWxpdGllcycpCi0KLTMpICAgICAgRnJvbSB0aGUgbWFjaGluZSBob3N0aW5nIHRoZSBkaXN0cmlidXRpb24gZmlsZXMsIHVwbG9hZCB0aGVtICh3aXRoCi0gICAgICAgICAgICAgICAgRlRQIGluIHRleHQgbW9kZSwgZm9yIGV4YW1wbGUpIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOgotCi0gICAgT3JpZ2luYWwgICAgQVM0MDAgICBBUzQwMCAgICBBUzQwMCBBUzQwMAotICAgIGZpbGUgICAgICAgIGZpbGUgICAgbWVtYmVyICAgdHlwZSAgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICBTT1VSQ0VTICAgICAgICAgICAgICAgIE9yaWdpbmFsIFpMSUIgQyBzdWJwcm9ncmFtIHNvdXJjZXMKLSAgICBhZGxlcjMyLmMgICAgICAgICAgIEFETEVSMzIgIEMgICAgIFpMSUIgLSBDb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGR0YSBzdHJtCi0gICAgY29tcHJlc3MuYyAgICAgICAgICBDT01QUkVTUyBDICAgICBaTElCIC0gQ29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gICAgY3JjMzIuYyAgICAgICAgICAgICBDUkMzMiAgICBDICAgICBaTElCIC0gQ29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAgICBkZWZsYXRlLmMgICAgICAgICAgIERFRkxBVEUgIEMgICAgIFpMSUIgLSBDb21wcmVzcyBkYXRhIHVzaW5nIHRoZSBkZWZsYXRpb24gYWxnb3JpdGhtCi0gICAgZ3pjbG9zZS5jICAgICAgICAgICBHWkNMT1NFICBDICAgICBaTElCIC0gQ2xvc2UgLmd6IGZpbGVzCi0gICAgZ3psaWIuYyAgICAgICAgICAgICBHWkxJQiAgICBDICAgICBaTElCIC0gTWlzY2VsbGFuZW91cyAuZ3ogZmlsZXMgSU8gc3VwcG9ydAotICAgIGd6cmVhZC5jICAgICAgICAgICAgR1pSRUFEICAgQyAgICAgWkxJQiAtIFJlYWQgLmd6IGZpbGVzCi0gICAgZ3p3cml0ZS5jICAgICAgICAgICBHWldSSVRFICBDICAgICBaTElCIC0gV3JpdGUgLmd6IGZpbGVzCi0gICAgaW5mYmFjay5jICAgICAgICAgICBJTkZCQUNLICBDICAgICBaTElCIC0gSW5mbGF0ZSB1c2luZyBhIGNhbGxiYWNrIGludGVyZmFjZQotICAgIGluZmZhc3QuYyAgICAgICAgICAgSU5GRkFTVCAgQyAgICAgWkxJQiAtIEZhc3QgcHJvYy4gbGl0ZXJhbHMgJiBsZW5ndGgvZGlzdGFuY2UgcGFpcnMKLSAgICBpbmZsYXRlLmMgICAgICAgICAgIElORkxBVEUgIEMgICAgIFpMSUIgLSBJbnRlcmZhY2UgdG8gaW5mbGF0ZSBtb2R1bGVzCi0gICAgaW5mdHJlZXMuYyAgICAgICAgICBJTkZUUkVFUyBDICAgICBaTElCIC0gR2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kZQotICAgIHRyZWVzLmMgICAgICAgICAgICAgVFJFRVMgICAgQyAgICAgWkxJQiAtIE91dHB1dCBkZWZsYXRlZCBkYXRhIHVzaW5nIEh1ZmZtYW4gY29kaW5nCi0gICAgdW5jb21wci5jICAgICAgICAgICBVTkNPTVBSICBDICAgICBaTElCIC0gRGVjb21wcmVzcyBhIG1lbW9yeSBidWZmZXIKLSAgICB6dXRpbC5jICAgICAgICAgICAgIFpVVElMICAgIEMgICAgIFpMSUIgLSBUYXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgSCAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbCBaTElCIEMgYW5kIElMRS9SUEcgaW5jbHVkZSBmaWxlcwotICAgIGNyYzMyLmggICAgICAgICAgICAgQ1JDMzIgICAgQyAgICAgWkxJQiAtIENSQzMyIHRhYmxlcwotICAgIGRlZmxhdGUuaCAgICAgICAgICAgREVGTEFURSAgQyAgICAgWkxJQiAtIEludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlCi0gICAgZ3pndXRzLmggICAgICAgICAgICBHWkdVVFMgICBDICAgICBaTElCIC0gRGVmaW5pdGlvbnMgZm9yIHRoZSBnemNsb3NlIG1vZHVsZQotICAgIGluZmZhc3QuaCAgICAgICAgICAgSU5GRkFTVCAgQyAgICAgWkxJQiAtIEhlYWRlciB0byB1c2UgaW5mZmFzdC5jCi0gICAgaW5mZml4ZWQuaCAgICAgICAgICBJTkZGSVhFRCBDICAgICBaTElCIC0gVGFibGUgZm9yIGRlY29kaW5nIGZpeGVkIGNvZGVzCi0gICAgaW5mbGF0ZS5oICAgICAgICAgICBJTkZMQVRFICBDICAgICBaTElCIC0gSW50ZXJuYWwgaW5mbGF0ZSBzdGF0ZSBkZWZpbml0aW9ucwotICAgIGluZnRyZWVzLmggICAgICAgICAgSU5GVFJFRVMgQyAgICAgWkxJQiAtIEhlYWRlciB0byB1c2UgaW5mdHJlZXMuYwotICAgIHRyZWVzLmggICAgICAgICAgICAgVFJFRVMgICAgQyAgICAgWkxJQiAtIENyZWF0ZWQgYXV0b21hdGljYWxseSB3aXRoIC1ER0VOX1RSRUVTX0gKLSAgICB6Y29uZi5oICAgICAgICAgICAgIFpDT05GICAgIEMgICAgIFpMSUIgLSBDb21wcmVzc2lvbiBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24KLSAgICB6bGliLmggICAgICAgICAgICAgIFpMSUIgICAgIEMgICAgIFpMSUIgLSBDb21wcmVzc2lvbiBsaWJyYXJ5IEMgdXNlciBpbnRlcmZhY2UKLSAgICBhczQwMC96bGliLmluYyAgICAgIFpMSUIuSU5DIFJQR0xFIFpMSUIgLSBDb21wcmVzc2lvbiBsaWJyYXJ5IElMRSBSUEcgdXNlciBpbnRlcmZhY2UKLSAgICB6dXRpbC5oICAgICAgICAgICAgIFpVVElMICAgIEMgICAgIFpMSUIgLSBJbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICBUT09MUyAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIHNvdXJjZSBzb2Z0d2FyZSAmIEFTLzQwMCBSRUFETUUKLSAgICBhczQwMC9ibmRzcmMgICAgICAgIEJORFNSQyAgICAgICAgIEVudHJ5IHBvaW50IGV4cG9ydGF0aW9uIGxpc3QKLSAgICBhczQwMC9jb21waWxlLmNscCAgIENPTVBJTEUgIENMUCAgIENvbXBpbGUgc291cmNlcyAmIGdlbmVyYXRlIHNlcnZpY2UgcHJvZ3JhbQotICAgIGFzNDAwL3JlYWRtZS50eHQgICAgUkVBRE1FICAgVFhUICAgSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucwotCi00KSAgICAgIENvbnRpbnVlIGFzIGluIEkpMykuCi0KLQotCi0KLU5vdGVzOiAgRm9yIEFTNDAwIElMRSBSUEcgcHJvZ3JhbW1lcnMsIGEgL2NvcHkgbWVtYmVyIGRlZmluaW5nIHRoZSBaTElCCi0gICAgICAgICAgICAgICAgQVBJIHByb3RvdHlwZXMgZm9yIElMRSBSUEcgY2FuIGJlIGZvdW5kIGluIFpMSUIvSChaTElCLklOQykuCi0gICAgICAgICAgICAgICAgUGxlYXNlIHJlYWQgY29tbWVudHMgaW4gdGhpcyBtZW1iZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLSAgICAgICAgUmVtZW1iZXIgdGhhdCBtb3N0IGZvcmVpZ24gdGV4dHVhbCBkYXRhIGFyZSBBU0NJSSBjb2RlZDogdGhpcwotICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhbmRsZSBjb252ZXJzaW9uIGZyb20vdG8gQVNDSUksIHNvCi0gICAgICAgICAgICAgICAgdGV4dCBkYXRhIGNvZGUgY29udmVyc2lvbnMgbXVzdCBiZSBkb25lIGV4cGxpY2l0ZWx5LgotCi0gICAgICAgIE1haW5seSBmb3IgdGhlIHJlYXNvbiBhYm92ZSwgYWx3YXlzIG9wZW4gemlwcGVkIGZpbGVzIGluIGJpbmFyeSBtb2RlLgpkaWZmIC0tZ2l0IGEvc3JjL2FzNDAwL3psaWIuaW5jIGIvc3JjL2FzNDAwL3psaWIuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzQxYTZkLi4wMDAwMDAwCi0tLSBhL3NyYy9hczQwMC96bGliLmluYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0gICAgICAqICBaTElCLklOQyAtIEludGVyZmFjZSB0byB0aGUgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgICAgICoKLSAgICAgICogIElMRSBSUEc0MDAgdmVyc2lvbiBieSBQYXRyaWNrIE1vbm5lcmF0LCBEQVRBU1BIRVJFLgotICAgICAgKiAgVmVyc2lvbiAxLjIuOAotICAgICAgKgotICAgICAgKgotICAgICAgKiAgV0FSTklORzoKLSAgICAgICogICAgIFByb2NlZHVyZXMgaW5mbGF0ZUluaXQoKSwgaW5mbGF0ZUluaXQyKCksIGRlZmxhdGVJbml0KCksCi0gICAgICAqICAgICAgICAgZGVmbGF0ZUluaXQyKCkgYW5kIGluZmxhdGVCYWNrSW5pdCgpIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGgKLSAgICAgICogICAgICAgICB0d28gYWRkaXRpb25hbCBhcmd1bWVudHM6Ci0gICAgICAqICAgICAgICAgdGhlIHBhY2thZ2UgdmVyc2lvbiBzdHJpbmcgYW5kIHRoZSBzdHJlYW0gY29udHJvbCBzdHJ1Y3R1cmUuCi0gICAgICAqICAgICAgICAgc2l6ZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBSUEcgbGFja3Mgc29tZSBtYWNybyBmZWF0dXJlLgotICAgICAgKiAgICAgICAgIENhbGwgdGhlc2UgcHJvY2VkdXJlcyBhczoKLSAgICAgICogICAgICAgICAgICAgaW5mbGF0ZUluaXQoLi4uOiBaTElCX1ZFUlNJT046ICVzaXplKHpfc3RyZWFtKSkKLSAgICAgICoKLSAgICAgIC9pZiBub3QgZGVmaW5lZChaTElCX0hfKQotICAgICAgL2RlZmluZSBaTElCX0hfCi0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMKLSAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAqCi0gICAgICAqICBWZXJzaW9uaW5nIGluZm9ybWF0aW9uLgotICAgICAgKgotICAgICBEIFpMSUJfVkVSU0lPTiAgICBDICAgICAgICAgICAgICAgICAgICcxLjIuOCcKLSAgICAgRCBaTElCX1ZFUk5VTSAgICAgQyAgICAgICAgICAgICAgICAgICBYJzEyODAnCi0gICAgIEQgWkxJQl9WRVJfTUFKT1IgIEMgICAgICAgICAgICAgICAgICAgMQotICAgICBEIFpMSUJfVkVSX01JTk9SICBDICAgICAgICAgICAgICAgICAgIDIKLSAgICAgRCBaTElCX1ZFUl9SRVZJU0lPTi4uLgotICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDgKLSAgICAgRCBaTElCX1ZFUl9TVUJSRVZJU0lPTi4uLgotICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICoKLSAgICAgICogIE90aGVyIGVxdWF0ZXMuCi0gICAgICAqCi0gICAgIEQgWl9OT19GTFVTSCAgICAgIEMgICAgICAgICAgICAgICAgICAgMAotICAgICBEIFpfUEFSVElBTF9GTFVTSC4uLgotICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDEKLSAgICAgRCBaX1NZTkNfRkxVU0ggICAgQyAgICAgICAgICAgICAgICAgICAyCi0gICAgIEQgWl9GVUxMX0ZMVVNIICAgIEMgICAgICAgICAgICAgICAgICAgMwotICAgICBEIFpfRklOSVNIICAgICAgICBDICAgICAgICAgICAgICAgICAgIDQKLSAgICAgRCBaX0JMT0NLICAgICAgICAgQyAgICAgICAgICAgICAgICAgICA1Ci0gICAgIEQgWl9UUkVFUyAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgNgotICAgICAgKgotICAgICBEIFpfT0sgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKLSAgICAgRCBaX1NUUkVBTV9FTkQgICAgQyAgICAgICAgICAgICAgICAgICAxCi0gICAgIEQgWl9ORUVEX0RJQ1QgICAgIEMgICAgICAgICAgICAgICAgICAgMgotICAgICBEIFpfRVJSTk8gICAgICAgICBDICAgICAgICAgICAgICAgICAgIC0xCi0gICAgIEQgWl9TVFJFQU1fRVJST1IgIEMgICAgICAgICAgICAgICAgICAgLTIKLSAgICAgRCBaX0RBVEFfRVJST1IgICAgQyAgICAgICAgICAgICAgICAgICAtMwotICAgICBEIFpfTUVNX0VSUk9SICAgICBDICAgICAgICAgICAgICAgICAgIC00Ci0gICAgIEQgWl9CVUZfRVJST1IgICAgIEMgICAgICAgICAgICAgICAgICAgLTUKLSAgICAgRFpfVkVSU0lPTl9FUlJPUiAgQyAgICAgICAgICAgICAgICAgICAtNgotICAgICAgKgotICAgICBEIFpfTk9fQ09NUFJFU1NJT04uLi4KLSAgICAgRCAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAwCi0gICAgIEQgWl9CRVNUX1NQRUVEICAgIEMgICAgICAgICAgICAgICAgICAgMQotICAgICBEIFpfQkVTVF9DT01QUkVTU0lPTi4uLgotICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDkKLSAgICAgRCBaX0RFRkFVTFRfQ09NUFJFU1NJT04uLi4KLSAgICAgRCAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAtMQotICAgICAgKgotICAgICBEIFpfRklMVEVSRUQgICAgICBDICAgICAgICAgICAgICAgICAgIDEKLSAgICAgRCBaX0hVRkZNQU5fT05MWSAgQyAgICAgICAgICAgICAgICAgICAyCi0gICAgIEQgWl9STEUgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMwotICAgICBEIFpfREVGQVVMVF9TVFJBVEVHWS4uLgotICAgICBEICAgICAgICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICoKLSAgICAgRCBaX0JJTkFSWSAgICAgICAgQyAgICAgICAgICAgICAgICAgICAwCi0gICAgIEQgWl9BU0NJSSAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMQotICAgICBEIFpfVU5LTk9XTiAgICAgICBDICAgICAgICAgICAgICAgICAgIDIKLSAgICAgICoKLSAgICAgRCBaX0RFRkxBVEVEICAgICAgQyAgICAgICAgICAgICAgICAgICA4Ci0gICAgICAqCi0gICAgIEQgWl9OVUxMICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAotICAgICAgKgotICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcwotICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICoKLSAgICAgRCB6X3N0cmVhbXAgICAgICAgUyAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdCBwdHIKLSAgICAgRCBnekZpbGUgICAgICAgICAgUyAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgel9vZmZfdCAgICAgICAgIFMgICAgICAgICAgICAgMTBpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBvZmZzZXRzCi0gICAgIEQgel9vZmY2NF90ICAgICAgIFMgICAgICAgICAgICAgMjBpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBvZmZzZXRzCi0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVzCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKgotICAgICAgKiAgVGhlIEdaSVAgZW5jb2RlL2RlY29kZSBzdHJlYW0gc3VwcG9ydCBzdHJ1Y3R1cmUuCi0gICAgICAqCi0gICAgIEQgel9zdHJlYW0gICAgICAgIERTICAgICAgICAgICAgICAgICAgYWxpZ24gYmFzZWQoel9zdHJlYW1wKQotICAgICBEICB6c19uZXh0X2luICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0IGlucHV0IGJ5dGUKLSAgICAgRCAgenNfYXZhaWxfaW4gICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSBjbnQgYXQgbmV4dF9pbgotICAgICBEICB6c190b3RhbF9pbiAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBieXRlcyByZWFkCi0gICAgIEQgIHpzX25leHRfb3V0ICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBidWZmZXIgcHRyCi0gICAgIEQgIHpzX2F2YWlsX291dCAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb20gbGVmdCBAIG5leHRfb3V0Ci0gICAgIEQgIHpzX3RvdGFsX291dCAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIGJ5dGVzIHdyaXR0ZW4KLSAgICAgRCAgenNfbXNnICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCBlcnJtc2cgb3IgbnVsbAotICAgICBEICB6c19zdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCBzdGF0ZQotICAgICBEICB6c196YWxsb2MgICAgICAgICAgICAgICAgICAgICAgKiAgIHByb2NwdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQuIHN0YXRlIGFsbG9jYXRvcgotICAgICBEICB6c19mcmVlICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHByb2NwdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQuIHN0YXRlIGRlYWxsb2MuCi0gICAgIEQgIHpzX29wYXF1ZSAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhdGUgYWxsb2MuIGRhdGEKLSAgICAgRCAgenNfZGF0YV90eXBlICAgICAgICAgICAgICAgICAxMGkgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDL0JJTiBiZXN0IGd1ZXNzCi0gICAgIEQgIHpzX2FkbGVyICAgICAgICAgICAgICAgICAgICAgMTB1IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuY29tcHIuIGFkbGVyMzIgdmFsCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0ci4gYWxpZ25tZW50Ci0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb24gcHJvdG90eXBlcwotICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICoKLSAgICAgRCBjb21wcmVzcyAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdjb21wcmVzcycpCi0gICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGJ1ZmZlcgotICAgICBEICBkZXN0TGVuICAgICAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBsZW5ndGgKLSAgICAgRCAgc291cmNlICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBjb25zdCBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgU291cmNlIGJ1ZmZlcgotICAgICBEICBzb3VyY2VMZW4gICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgbGVuZ3RoCi0gICAgICAqCi0gICAgIEQgY29tcHJlc3MyICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnY29tcHJlc3MyJykKLSAgICAgRCAgZGVzdCAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gYnVmZmVyCi0gICAgIEQgIGRlc3RMZW4gICAgICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGxlbmd0aAotICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBTb3VyY2UgYnVmZmVyCi0gICAgIEQgIHNvdXJjZUxlbiAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBsZW5ndGgKLSAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKLSAgICAgICoKLSAgICAgRCBjb21wcmVzc0JvdW5kICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdjb21wcmVzc0JvdW5kJykKLSAgICAgRCAgc291cmNlTGVuICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZQotICAgICAgKgotICAgICBEIHVuY29tcHJlc3MgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ3VuY29tcHJlc3MnKQotICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgRCAgZGVzdExlbiAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gbGVuZ3RoCi0gICAgIEQgIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIFNvdXJjZSBidWZmZXIKLSAgICAgRCAgc291cmNlTGVuICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIGxlbmd0aAotICAgICAgKgotICAgICAgL2lmIG5vdCBkZWZpbmVkKExBUkdFX0ZJTEVTKQotICAgICBEIGd6b3BlbiAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b3BlbicpCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShnekZpbGUpCi0gICAgIEQgIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIEZpbGUgcGF0aG5hbWUKLSAgICAgRCAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgT3BlbiBtb2RlCi0gICAgICAvZWxzZQotICAgICBEIGd6b3BlbiAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b3BlbjY0JykKLSAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKGd6RmlsZSkKLSAgICAgRCAgcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgRmlsZSBwYXRobmFtZQotICAgICBEICBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBPcGVuIG1vZGUKLSAgICAgICoKLSAgICAgRCBnem9wZW42NCAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9wZW42NCcpCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShnekZpbGUpCi0gICAgIEQgIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIEZpbGUgcGF0aG5hbWUKLSAgICAgRCAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgT3BlbiBtb2RlCi0gICAgICAvZW5kaWYKLSAgICAgICoKLSAgICAgRCBnemRvcGVuICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnemRvcGVuJykKLSAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKGd6RmlsZSkKLSAgICAgRCAgZmQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBkZXNjcmlwdG9yCi0gICAgIEQgIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIE9wZW4gbW9kZQotICAgICAgKgotICAgICBEIGd6YnVmZmVyICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2d6YnVmZmVyJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUKLSAgICAgICoKLSAgICAgRCBnenNldHBhcmFtcyAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnenNldHBhcmFtcycpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlCi0gICAgIEQgIHN0cmF0ZWd5ICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUKLSAgICAgICoKLSAgICAgRCBnenJlYWQgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnenJlYWQnKQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgQnVmZmVyCi0gICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKLSAgICAgICoKLSAgICAgRCBnendyaXRlICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdnendyaXRlJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIEJ1ZmZlcgotICAgICBEICBsZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCi0gICAgICAqCi0gICAgIEQgZ3pwdXRzICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZ3pwdXRzJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIFN0cmluZyB0byBvdXRwdXQKLSAgICAgICoKLSAgICAgRCBnemdldHMgICAgICAgICAgUFIgICAgICAgICAgICAgICogICBleHRwcm9jKCdnemdldHMnKQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgUmVhZCBidWZmZXIKLSAgICAgRCAgbGVuICAgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAotICAgICAgKgotICAgICBEIGd6cHV0YyAgICAgICAgICBQUiAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2d6cHV0YycpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICBEICBjICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gd3JpdGUKLSAgICAgICoKLSAgICAgRCBnemdldGMgICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemdldGMnKQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgICoKLSAgICAgRCBnemdldGNfICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemdldGNfJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgIEQgZ3p1bmdldGMgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3p1bmdldGMnKQotICAgICBEICBjICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gcHVzaAotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgICoKLSAgICAgRCBnemZsdXNoICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemZsdXNoJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgb2YgZmx1c2gKLSAgICAgICoKLSAgICAgIC9pZiBub3QgZGVmaW5lZChMQVJHRV9GSUxFUykKLSAgICAgRCBnenNlZWsgICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnenNlZWsnKQotICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmZfdCkKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZSh6X29mZl90KSAgICAgICAgICAgICAgICAgIE9mZnNldAotICAgICBEICB3aGVuY2UgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW4KLSAgICAgIC9lbHNlCi0gICAgIEQgZ3pzZWVrICAgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3pzZWVrNjQnKQotICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmZfdCkKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZSh6X29mZl90KSAgICAgICAgICAgICAgICAgIE9mZnNldAotICAgICBEICB3aGVuY2UgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW4KLSAgICAgICoKLSAgICAgRCBnenNlZWs2NCAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnenNlZWs2NCcpCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X29mZjY0X3QpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICBEICBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2Uoel9vZmY2NF90KSAgICAgICAgICAgICAgICBPZmZzZXQKLSAgICAgRCAgd2hlbmNlICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luCi0gICAgICAvZW5kaWYKLSAgICAgICoKLSAgICAgRCBnenJld2luZCAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnenJld2luZCcpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICAgKgotICAgICAgL2lmIG5vdCBkZWZpbmVkKExBUkdFX0ZJTEVTKQotICAgICBEIGd6dGVsbCAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6dGVsbCcpCi0gICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X29mZl90KQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgIC9lbHNlCi0gICAgIEQgZ3p0ZWxsICAgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3p0ZWxsNjQnKQotICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmZfdCkKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgIEQgZ3p0ZWxsNjQgICAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3p0ZWxsNjQnKQotICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmY2NF90KQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgIC9lbmRpZgotICAgICAgKgotICAgICAgL2lmIG5vdCBkZWZpbmVkKExBUkdFX0ZJTEVTKQotICAgICBEIGd6b2Zmc2V0ICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b2Zmc2V0JykKLSAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmX3QpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICAgL2Vsc2UKLSAgICAgRCBnem9mZnNldCAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9mZnNldDY0JykKLSAgICAgRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfb2ZmX3QpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICAgKgotICAgICBEIGd6b2Zmc2V0NjQgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6b2Zmc2V0NjQnKQotICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmY2NF90KQotICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKLSAgICAgIC9lbmRpZgotICAgICAgKgotICAgICBEIGd6ZW9mICAgICAgICAgICBQUiAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2d6ZW9mJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgIEQgZ3pjbG9zZV9yICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZV9yJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgIEQgZ3pjbG9zZV93ICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZV93JykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgIEQgZ3pjbG9zZSAgICAgICAgIFBSICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnZ3pjbG9zZScpCi0gICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgotICAgICAgKgotICAgICBEIGd6ZXJyb3IgICAgICAgICBQUiAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2d6ZXJyb3InKSAgICAgICAgICAgICAgICAgICBFcnJvciBzdHJpbmcKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgIEQgIGVycm51bSAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGNvZGUKLSAgICAgICoKLSAgICAgRCBnemNsZWFyZXJyICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnemNsZWFyZXJyJykKLSAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCi0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAqCi0gICAgIEQgemxpYlZlcnNpb24gICAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnemxpYlZlcnNpb24nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCi0gICAgICAqCi0gICAgIEQgZGVmbGF0ZUluaXQgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZUluaXRfJykgICAgICAgICAgICAgIEluaXQuIGNvbXByZXNzaW9uCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQotICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAotICAgICBEICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBWZXJzaW9uIHN0cmluZwotICAgICBEICBzdHJlYW1fc2l6ZSAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0gc3RydWN0LiBzaXplCi0gICAgICAqCi0gICAgIEQgZGVmbGF0ZSAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZScpICAgICAgICAgICAgICAgICAgIENvbXByZXNzIGRhdGEKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCi0gICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoIHR5cGUgcmVxdWlyZWQKLSAgICAgICoKLSAgICAgRCBkZWZsYXRlRW5kICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlRW5kJykgICAgICAgICAgICAgICAgVGVybWluLiBjb21wcmVzc2lvbgotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KLSAgICAgICoKLSAgICAgRCBpbmZsYXRlSW5pdCAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlSW5pdF8nKSAgICAgICAgICAgICAgSW5pdC4gZXhwYW5zaW9uCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKLSAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQotICAgICAgKgotICAgICBEIGluZmxhdGUgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGUnKSAgICAgICAgICAgICAgICAgICBFeHBhbmQgZGF0YQotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoIHR5cGUgcmVxdWlyZWQKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlRW5kICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlRW5kJykgICAgICAgICAgICAgICAgVGVybWluLiBleHBhbnNpb24KLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQotICAgICAgKgotICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICogICAgICAgICAgICAgICAgICAgICAgICBBZHZhbmNlZCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKgotICAgICBEIGRlZmxhdGVJbml0MiAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVJbml0Ml8nKSAgICAgICAgICAgICBJbml0LiBjb21wcmVzc2lvbgotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KLSAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKLSAgICAgRCAgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbWV0aG9kCi0gICAgIEQgIHdpbmRvd0JpdHMgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZzIod2luZG93IHNpemUpCi0gICAgIEQgIG1lbUxldmVsICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbS9jbXByZXNzIHRyYWRlb2ZmCi0gICAgIEQgIHN0cmF0ZWd5ICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0YXRlZ3kKLSAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKLSAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQotICAgICAgKgotICAgICBEIGRlZmxhdGVTZXREaWN0aW9uYXJ5Li4uCi0gICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZVNldERpY3Rpb25hcnknKSAgICAgIEluaXQuIGRpY3Rpb25hcnkKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCi0gICAgIEQgIGRpY3Rpb25hcnkgICAgICAgICAgICAgICAgNjU1MzUgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIERpY3Rpb25hcnkgYnl0ZXMKLSAgICAgRCAgZGljdExlbmd0aCAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGljdGlvbmFyeSBsZW5ndGgKLSAgICAgICoKLSAgICAgRCBkZWZsYXRlQ29weSAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlQ29weScpICAgICAgICAgICAgICAgQ29tcHJlc3Mgc3RybSAyIHN0cm0KLSAgICAgRCAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gc3RyZWFtCi0gICAgIEQgIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBzdHJlYW0KLSAgICAgICoKLSAgICAgRCBkZWZsYXRlUmVzZXQgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlUmVzZXQnKSAgICAgICAgICAgICAgRW5kIGFuZCBpbml0LiBzdHJlYW0KLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCi0gICAgICAqCi0gICAgIEQgZGVmbGF0ZVBhcmFtcyAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZVBhcmFtcycpICAgICAgICAgICAgIENoYW5nZSBsZXZlbCAmIHN0cmF0Ci0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQotICAgICBEICBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAotICAgICBEICBzdHJhdGVneSAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdGF0ZWd5Ci0gICAgICAqCi0gICAgIEQgZGVmbGF0ZUJvdW5kICAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnZGVmbGF0ZUJvdW5kJykgICAgICAgICAgICAgIENoYW5nZSBsZXZlbCAmIHN0cmF0Ci0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQotICAgICBEICBzb3VyY2VsZW4gICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBsZXZlbAotICAgICAgKgotICAgICBEIGRlZmxhdGVQZW5kaW5nICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVQZW5kaW5nJykgICAgICAgICAgICBDaGFuZ2UgbGV2ZWwgJiBzdHJhdAotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KLSAgICAgRCAgcGVuZGluZyAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZyBieXRlcwotICAgICBEICBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nIGJpdHMKLSAgICAgICoKLSAgICAgRCBkZWZsYXRlUHJpbWUgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlUHJpbWUnKSAgICAgICAgICAgICAgQ2hhbmdlIGxldmVsICYgc3RyYXQKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCi0gICAgIEQgIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgYml0cyB0byBpbnNlcnQKLSAgICAgRCAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyB0byBpbnNlcnQKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlSW5pdDIgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlSW5pdDJfJykgICAgICAgICAgICAgSW5pdC4gZXhwYW5zaW9uCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgRCAgd2luZG93Qml0cyAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nMih3aW5kb3cgc2l6ZSkKLSAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKLSAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQotICAgICAgKgotICAgICBEIGluZmxhdGVTZXREaWN0aW9uYXJ5Li4uCi0gICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVNldERpY3Rpb25hcnknKSAgICAgIEluaXQuIGRpY3Rpb25hcnkKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQotICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCi0gICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZUdldERpY3Rpb25hcnkuLi4KLSAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlR2V0RGljdGlvbmFyeScpICAgICAgR2V0IGRpY3Rpb25hcnkKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQotICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCi0gICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZVN5bmMgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVN5bmMnKSAgICAgICAgICAgICAgIFN5bmMuIGV4cGFuc2lvbgotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZUNvcHkgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZUNvcHknKQotICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBzdHJlYW0KLSAgICAgRCAgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIHN0cmVhbQotICAgICAgKgotICAgICBEIGluZmxhdGVSZXNldCAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVSZXNldCcpICAgICAgICAgICAgICBFbmQgYW5kIGluaXQuIHN0cmVhbQotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZVJlc2V0MiAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVJlc2V0MicpICAgICAgICAgICAgIEVuZCBhbmQgaW5pdC4gc3RyZWFtCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgRCAgd2luZG93Qml0cyAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nMihidWZmZXIgc2l6ZSkKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlUHJpbWUgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlUHJpbWUnKSAgICAgICAgICAgICAgSW5zZXJ0IGJpdHMKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQotICAgICBEICBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgY291bnQKLSAgICAgRCAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyB0byBpbnNlcnQKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlTWFyayAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlTWFyaycpICAgICAgICAgICAgICAgR2V0IGluZmxhdGUgaW5mbwotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZUJhY2tJbml0Li4uCi0gICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZUJhY2tJbml0XycpCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgRCAgd2luZG93Qml0cyAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nMihidWZmZXIgc2l6ZSkKLSAgICAgRCAgd2luZG93ICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgQnVmZmVyCi0gICAgIEQgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCi0gICAgIEQgIHN0cmVhbV9zaXplICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBzdHJ1Y3QuIHNpemUKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlQmFjayAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlQmFjaycpCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgRCAgaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBwcm9jcHRyICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgZnVuY3Rpb24KLSAgICAgRCAgaW5fZGVzYyAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgZGVzY3JpcHRvcgotICAgICBEICBvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIHByb2NwdHIgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgZnVuY3Rpb24KLSAgICAgRCAgb3V0X2Rlc2MgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGRlc2NyaXB0b3IKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlQmFja0VuZCAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlQmFja0VuZCcpCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgICoKLSAgICAgRCB6bGliQ29tcGlsZUZsYWdzLi4uCi0gICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnemxpYkNvbXBpbGVGbGFncycpCi0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrc3VtIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAqCi0gICAgIEQgYWRsZXIzMiAgICAgICAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnYWRsZXIzMicpICAgICAgICAgICAgICAgICAgIE5ldyBjaGVja3N1bQotICAgICBEICBhZGxlciAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbGQgY2hlY2tzdW0KLSAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBjb25zdCBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgQnl0ZXMgdG8gYWNjdW11bGF0ZQotICAgICBEICBsZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCi0gICAgICAqCi0gICAgIEQgY3JjMzIgICAgICAgICAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnY3JjMzInKSAgICAgICAgICAgICAgICAgICAgIE5ldyBjaGVja3N1bQotICAgICBEICBjcmMgICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbGQgY2hlY2tzdW0KLSAgICAgRCAgYnVmICAgICAgICAgICAgICAgICAgICAgICA2NTUzNSAgICBjb25zdCBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgQnl0ZXMgdG8gYWNjdW11bGF0ZQotICAgICBEICBsZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCi0gICAgICAqCi0gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgKiAgICAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb24gcHJvdG90eXBlcwotICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICoKLSAgICAgRCB6RXJyb3IgICAgICAgICAgUFIgICAgICAgICAgICAgICogICBleHRwcm9jKCd6RXJyb3InKSAgICAgICAgICAgICAgICAgICAgRXJyb3Igc3RyaW5nCi0gICAgIEQgIGVyciAgICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGNvZGUKLSAgICAgICoKLSAgICAgRCBpbmZsYXRlU3luY1BvaW50Li4uCi0gICAgIEQgICAgICAgICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVN5bmNQb2ludCcpCi0gICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KLSAgICAgICoKLSAgICAgRCBnZXRfY3JjX3RhYmxlICAgUFIgICAgICAgICAgICAgICogICBleHRwcm9jKCdnZXRfY3JjX3RhYmxlJykgICAgICAgICAgICAgUHRyIHRvIHVsb25ncwotICAgICAgKgotICAgICBEIGluZmxhdGVVbmRlcm1pbmUuLi4KLSAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlVW5kZXJtaW5lJykKLSAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQotICAgICBEICBhcmcgICAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlCi0gICAgICAqCi0gICAgIEQgaW5mbGF0ZVJlc2V0S2VlcC4uLgotICAgICBEICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVSZXNldEtlZXAnKSAgICAgICAgICBFbmQgYW5kIGluaXQuIHN0cmVhbQotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgICAqCi0gICAgIEQgZGVmbGF0ZVJlc2V0S2VlcC4uLgotICAgICBEICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVSZXNldEtlZXAnKSAgICAgICAgICBFbmQgYW5kIGluaXQuIHN0cmVhbQotICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCi0gICAgICAqCi0gICAgICAvZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb21wcmVzcy5jIGIvc3JjL2NvbXByZXNzLmMKaW5kZXggNmU5NzYyNi4uZTJkYjQwNCAxMDA2NDQKLS0tIGEvc3JjL2NvbXByZXNzLmMKKysrIGIvc3JjL2NvbXByZXNzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBjb21wcmVzcy5jIC0tIGNvbXByZXNzIGEgbWVtb3J5IGJ1ZmZlcgotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDE0LCAyMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0yOCwxNiArMjgsMTEgQEAKIHsKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsKKyAgICBjb25zdCB1SW50IG1heCA9ICh1SW50KS0xOworICAgIHVMb25nIGxlZnQ7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwotICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKLSNpZmRlZiBNQVhTRUdfNjRLCi0gICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KLSAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9pbiAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKLSNlbmRpZgotICAgIHN0cmVhbS5uZXh0X291dCA9IGRlc3Q7Ci0gICAgc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpkZXN0TGVuOwotICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX291dCAhPSAqZGVzdExlbikgcmV0dXJuIFpfQlVGX0VSUk9SOworICAgIGxlZnQgPSAqZGVzdExlbjsKKyAgICAqZGVzdExlbiA9IDA7CiAKICAgICBzdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKICAgICBzdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CkBAIC00NiwxNSArNDEsMjYgQEAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmc3RyZWFtLCBsZXZlbCk7CiAgICAgaWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOwogCi0gICAgZXJyID0gZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgZGVmbGF0ZUVuZCgmc3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIGVyciA9PSBaX09LID8gWl9CVUZfRVJST1IgOiBlcnI7Ci0gICAgfQotICAgICpkZXN0TGVuID0gc3RyZWFtLnRvdGFsX291dDsKKyAgICBzdHJlYW0ubmV4dF9vdXQgPSBkZXN0OworICAgIHN0cmVhbS5hdmFpbF9vdXQgPSAwOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CisgICAgc3RyZWFtLmF2YWlsX2luID0gMDsKIAotICAgIGVyciA9IGRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0gICAgcmV0dXJuIGVycjsKKyAgICBkbyB7CisgICAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBsZWZ0ID4gKHVMb25nKW1heCA/IG1heCA6ICh1SW50KWxlZnQ7CisgICAgICAgICAgICBsZWZ0IC09IHN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdHJlYW0uYXZhaWxfaW4gPSBzb3VyY2VMZW4gPiAodUxvbmcpbWF4ID8gbWF4IDogKHVJbnQpc291cmNlTGVuOworICAgICAgICAgICAgc291cmNlTGVuIC09IHN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgfQorICAgICAgICBlcnIgPSBkZWZsYXRlKCZzdHJlYW0sIHNvdXJjZUxlbiA/IFpfTk9fRkxVU0ggOiBaX0ZJTklTSCk7CisgICAgfSB3aGlsZSAoZXJyID09IFpfT0spOworCisgICAgKmRlc3RMZW4gPSBzdHJlYW0udG90YWxfb3V0OworICAgIGRlZmxhdGVFbmQoJnN0cmVhbSk7CisgICAgcmV0dXJuIGVyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogZXJyOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9jb25maWd1cmUgYi9zcmMvY29uZmlndXJlCmluZGV4IGI3N2E4YTguLmU5NzRkMWYgMTAwNzU1Ci0tLSBhL3NyYy9jb25maWd1cmUKKysrIGIvc3JjL2NvbmZpZ3VyZQpAQCAtMTgsNiArMTgsMTggQEAKIGVjaG8gJDAgJCogPj4gY29uZmlndXJlLmxvZwogZGF0ZSA+PiBjb25maWd1cmUubG9nCiAKKyMgZ2V0IHNvdXJjZSBkaXJlY3RvcnkKK1NSQ0RJUj1gZGlybmFtZSAkMGAKK2lmIHRlc3QgJFNSQ0RJUiA9ICIuIjsgdGhlbgorICAgIFpJTkM9IiIKKyAgICBaSU5DT1VUPSItSS4iCisgICAgU1JDRElSPSIiCitlbHNlCisgICAgWklOQz0nLWluY2x1ZGUgemNvbmYuaCcKKyAgICBaSU5DT1VUPSctSS4gLUkkKFNSQ0RJUiknCisgICAgU1JDRElSPSIkU1JDRElSLyIKK2ZpCisKICMgc2V0IGNvbW1hbmQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbgogaWYgWyAtbiAiJHtDSE9TVH0iIF07IHRoZW4KICAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCkBAIC0yOCwxMCArNDAsMTAgQEAKIFNUQVRJQ0xJQj1saWJ6LmEKIAogIyBleHRyYWN0IHpsaWIgdmVyc2lvbiBudW1iZXJzIGZyb20gemxpYi5oCi1WRVI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGAKLVZFUjM9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXFwuWzAtOV0qXCkuKi9cMS9wJyA8IHpsaWIuaGAKLVZFUjI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKLVZFUjE9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKK1ZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAorVkVSMz1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcXC5bMC05XSpcKS4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAorVkVSMj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAorVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcKVxcLi4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAogCiAjIGVzdGFibGlzaCBjb21tYW5kcyBmb3IgbGlicmFyeSBidWlsZGluZwogaWYgIiR7Q1JPU1NfUFJFRklYfWFyIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KQEAgLTczLDYgKzg1LDggQEAKIHpjb25zdD0wCiBidWlsZDY0PTAKIGdjYz0wCit3YXJuPTAKK2RlYnVnPTAKIG9sZF9jYz0iJENDIgogb2xkX2NmbGFncz0iJENGTEFHUyIKIE9CSkM9JyQoT0JKWikgJChPQkpHKScKQEAgLTEyMSw2ICsxMzUsOCBAQAogICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OwogICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1sb2NhbHN0YXRlZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OwogICAgIC1jKiB8IC0tY29uc3QpIHpjb25zdD0xOyBzaGlmdCA7OworICAgIC13KiB8IC0td2Fybikgd2Fybj0xOyBzaGlmdCA7OworICAgIC1kKiB8IC0tZGVidWcpIGRlYnVnPTE7IHNoaWZ0IDs7CiAgICAgKikKICAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCkBAIC0xNTksMzQgKzE3NSw0MiBAQAogZXNhYwogY2FzZSBgJGNjIC12IDI+JjFgIGluCiAgICpnY2MqKSBnY2M9MSA7OworICAqY2xhbmcqKSBnY2M9MSA7OwogZXNhYwogCiBzaG93ICRjYyAtYyAkdGVzdC5jCiBpZiB0ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICR0ZXN0LmMpID4+IGNvbmZpZ3VyZS5sb2cgMj4mMTsgdGhlbgogICBlY2hvIC4uLiB1c2luZyBnY2MgPj4gY29uZmlndXJlLmxvZwogICBDQz0iJGNjIgotICBDRkxBR1M9IiR7Q0ZMQUdTLS1PM30gJHtBUkNIU30iCisgIENGTEFHUz0iJHtDRkxBR1MtLU8zfSIKICAgU0ZMQUdTPSIke0NGTEFHUy0tTzN9IC1mUElDIgotICBMREZMQUdTPSIke0xERkxBR1N9ICR7QVJDSFN9IgorICBpZiB0ZXN0ICIkQVJDSFMiOyB0aGVuCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gJHtBUkNIU30iCisgICAgTERGTEFHUz0iJHtMREZMQUdTfSAke0FSQ0hTfSIKKyAgZmkKICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKICAgZmkKLSAgaWYgdGVzdCAiJHtaTElCR0NDV0FSTn0iID0gIllFUyI7IHRoZW4KKyAgaWYgdGVzdCAiJHdhcm4iIC1lcSAxOyB0aGVuCiAgICAgaWYgdGVzdCAiJHpjb25zdCIgLWVxIDE7IHRoZW4KICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVdjYXN0LXF1YWwgLXBlZGFudGljIC1EWkxJQl9DT05TVCIKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKICAgICBmaQogICBmaQorICBpZiB0ZXN0ICRkZWJ1ZyAtZXEgMTsgdGhlbgorICAgIENGTEFHUz0iJHtDRkxBR1N9IC1EWkxJQl9ERUJVRyIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRFpMSUJfREVCVUciCisgIGZpCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCiAgIGNhc2UgIiR1bmFtZSIgaW4KICAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCBzb2xhcmlzKikKLSAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCwke1NSQ0RJUn16bGliLm1hcCJ9IDs7CiAgICpCU0QgfCAqYnNkKiB8IERyYWdvbkZseSkKLSAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCwke1NSQ0RJUn16bGliLm1hcCJ9CiAgICAgICAgIExEQ09ORklHPSJsZGNvbmZpZyAtbSIgOzsKICAgQ1lHV0lOKiB8IEN5Z3dpbiogfCBjeWd3aW4qIHwgT1MvMiopCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKQEAgLTI4Nyw2ICszMTEsOSBAQAogICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgZmkKICAgICAgICAgIGZpCisgICAgICAgICBpZiB0ZXN0IC1uICIkWklOQyI7IHRoZW4KKyAgICAgICAgICAgICBaSU5DPSctSS0gLUkuIC1JJChTUkNESVIpJworICAgICAgICAgZmkKICAgICAgICAgIDs7CiAgIFN1bk9TXCA0KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzIgLVBJQyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzIifQpAQCAtMzM3LDE2ICszNjQsMTYgQEAKICAgfQogICBlY2hvIC0gdXNpbmcgYW55IG91dHB1dCBmcm9tIGNvbXBpbGVyIHRvIGluZGljYXRlIGFuIGVycm9yID4+IGNvbmZpZ3VyZS5sb2cKIGVsc2UKLXRyeSgpCi17Ci0gIHNob3cgJCoKLSAgKCAkKiApID4+IGNvbmZpZ3VyZS5sb2cgMj4mMQotICByZXQ9JD8KLSAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCi0gICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9nCi0gIGZpCi0gIHJldHVybiAkcmV0Ci19CisgIHRyeSgpCisgIHsKKyAgICBzaG93ICQqCisgICAgKCAkKiApID4+IGNvbmZpZ3VyZS5sb2cgMj4mMQorICAgIHJldD0kPworICAgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9nCisgICAgZmkKKyAgICByZXR1cm4gJHJldAorICB9CiBmaQogCiB0cnlib3RoKCkKQEAgLTQyMiw2ICs0NDksNjUgQEAKIAogZWNobyA+PiBjb25maWd1cmUubG9nCiAKKyMgY2hlY2sgZm9yIHNpemVfdAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitzaXplX3QgZHVtbXkgPSAwOworRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyBmb3Igc2l6ZV90Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgbmVlZF9zaXpldD0wCitlbHNlCisgIGVjaG8gIkNoZWNraW5nIGZvciBzaXplX3QuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIG5lZWRfc2l6ZXQ9MQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZmluZCB0aGUgc2l6ZV90IGludGVnZXIgdHlwZSwgaWYgbmVlZGVkCitpZiB0ZXN0ICRuZWVkX3NpemV0IC1lcSAxOyB0aGVuCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKK2xvbmcgbG9uZyBkdW1teSA9IDA7CitFT0YKKyAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgbG9uZyBsb25nLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKHZvaWQpIHsKKyAgICBpZiAoc2l6ZW9mKHZvaWQgKikgPD0gc2l6ZW9mKGludCkpIHB1dHMoImludCIpOworICAgIGVsc2UgaWYgKHNpemVvZih2b2lkICopIDw9IHNpemVvZihsb25nKSkgcHV0cygibG9uZyIpOworICAgIGVsc2UgcHV0cygiel9sb25nbG9uZyIpOworICAgIHJldHVybiAwOworfQorRU9GCisgIGVsc2UKKyAgICBlY2hvICJDaGVja2luZyBmb3IgbG9uZyBsb25nLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4odm9pZCkgeworICAgIGlmIChzaXplb2Yodm9pZCAqKSA8PSBzaXplb2YoaW50KSkgcHV0cygiaW50Iik7CisgICAgZWxzZSBwdXRzKCJsb25nIik7CisgICAgcmV0dXJuIDA7Cit9CitFT0YKKyAgZmkKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBzaXpldD1gLi8kdGVzdGAKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYSBwb2ludGVyLXNpemUgaW50ZWdlciB0eXBlLi4uIiAkc2l6ZXQiLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlbHNlCisgICAgZWNobyAiRmFpbGVkIHRvIGZpbmQgYSBwb2ludGVyLXNpemUgaW50ZWdlciB0eXBlLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGxlYXZlIDEKKyAgZmkKK2ZpCisKK2lmIHRlc3QgJG5lZWRfc2l6ZXQgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TSVpFX1Q9JHtzaXpldH0iCisgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fU0laRV9UPSR7c2l6ZXR9IgorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKICMgY2hlY2sgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgYW5kIGlmIG5vbmUsIGNoZWNrIGZvciBmc2Vla28oKQogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNDcwLDcgKzU1Niw3IEBACiBmaQogCiAjIGNvcHkgY2xlYW4gemNvbmYuaCBmb3Igc3Vic2VxdWVudCBlZGl0cwotY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCitjcCAtcCAke1NSQ0RJUn16Y29uZi5oLmluIHpjb25mLmgKIAogZWNobyA+PiBjb25maWd1cmUubG9nCiAKQEAgLTc2NCw2ICs4NTAsNyBAQAogZWNobyBURVNUID0gJFRFU1QgPj4gY29uZmlndXJlLmxvZwogZWNobyBWRVIgPSAkVkVSID4+IGNvbmZpZ3VyZS5sb2cKIGVjaG8gWl9VNCA9ICRaX1U0ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1JDRElSID0gJFNSQ0RJUiA+PiBjb25maWd1cmUubG9nCiBlY2hvIGV4ZWNfcHJlZml4ID0gJGV4ZWNfcHJlZml4ID4+IGNvbmZpZ3VyZS5sb2cKIGVjaG8gaW5jbHVkZWRpciA9ICRpbmNsdWRlZGlyID4+IGNvbmZpZ3VyZS5sb2cKIGVjaG8gbGliZGlyID0gJGxpYmRpciA+PiBjb25maWd1cmUubG9nCkBAIC03NzMsNyArODYwLDcgQEAKIGVjaG8gdW5hbWUgPSAkdW5hbWUgPj4gY29uZmlndXJlLmxvZwogCiAjIHVkcGF0ZSBNYWtlZmlsZSB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwotc2VkIDwgTWFrZWZpbGUuaW4gIgorc2VkIDwgJHtTUkNESVJ9TWFrZWZpbGUuaW4gIgogL15DQyAqPS9zIz0uKiM9JENDIwogL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCiAvXlNGTEFHUyAqPS9zIz0uKiM9JFNGTEFHUyMKQEAgLTc5MCw2ICs4NzcsOSBAQAogL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIwogL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCiAvXkVYRSAqPS9zIz0uKiM9JEVYRSMKKy9eU1JDRElSICo9L3MjPS4qIz0kU1JDRElSIworL15aSU5DICo9L3MjPS4qIz0kWklOQyMKKy9eWklOQ09VVCAqPS9zIz0uKiM9JFpJTkNPVVQjCiAvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKIC9eZXhlY19wcmVmaXggKj0vcyM9LiojPSRleGVjX3ByZWZpeCMKIC9ebGliZGlyICo9L3MjPS4qIz0kbGliZGlyIwpAQCAtODAzLDcgKzg5Myw3IEBACiAiID4gTWFrZWZpbGUKIAogIyBjcmVhdGUgemxpYi5wYyB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwotc2VkIDwgemxpYi5wYy5pbiAiCitzZWQgPCAke1NSQ0RJUn16bGliLnBjLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwogL15DUFAgKj0vcyM9LiojPSRDUFAjCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9SRUFETUUuY29udHJpYiBiL3NyYy9jb250cmliL1JFQURNRS5jb250cmliCmluZGV4IGM2NjM0OWIuLmE0MTFkNWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL1JFQURNRS5jb250cmliCisrKyBiL3NyYy9jb250cmliL1JFQURNRS5jb250cmliCkBAIC0zOCw3ICszOCw3IEBACiBpb3N0cmVhbS8gICBieSBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KICAgICAgICAgQSBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlIHRvIHRoZSB6bGliIGd6KiBmdW5jdGlvbnMKIAotaW9zdHJlYW0yLyAgYnkgVHlnZSBM+HZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4KK2lvc3RyZWFtMi8gIGJ5IFR5Z2UgTMO4dnNldCA8VHlnZS5Mb3ZzZXRAY21yLm5vPgogICAgICAgICBBbm90aGVyIEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UKIAogaW9zdHJlYW0zLyAgYnkgTHVkd2lnIFNjaHdhcmR0IDxzY2h3YXJkdEBzdW4uYWMuemE+CkBAIC01OCw3ICs1OCw3IEBACiBtaW5pemlwLyAgICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+CiAgICAgICAgIE1pbmkgemlwIGFuZCB1bnppcCBiYXNlZCBvbiB6bGliCiAgICAgICAgIEluY2x1ZGVzIFppcDY0IHN1cHBvcnQgYnkgTWF0aGlhcyBTdmVuc3NvbiA8bWF0aGlhc0ByZXN1bHQ0Mi5jb20+Ci0gICAgICAgIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL3VuemlwLmh0bWwKKyAgICAgICAgU2VlIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sCiAKIHBhc2NhbC8gICAgIGJ5IEJvYiBEZWxsYWNhIDxib2JkbEB4dHJhLmNvLm56PiBldCBhbC4KICAgICAgICAgU3VwcG9ydCBmb3IgUGFzY2FsCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9hZGEvemxpYi1zdHJlYW1zLmFkcyBiL3NyYy9jb250cmliL2FkYS96bGliLXN0cmVhbXMuYWRzCmluZGV4IGYwMTkzYzYuLjhlMjZjZDQgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2FkYS96bGliLXN0cmVhbXMuYWRzCisrKyBiL3NyYy9jb250cmliL2FkYS96bGliLXN0cmVhbXMuYWRzCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICBNb2RlICAgOiBpbiAgICAgRmx1c2hfTW9kZSA6PSBTeW5jX0ZsdXNoKTsKICAgIC0tICBGbHVzaCB0aGUgd3JpdHRlbiBkYXRhIHRvIHRoZSBiYWNrIHN0cmVhbSwKICAgIC0tICBhbGwgZGF0YSBwbGFjZWQgdG8gdGhlIGNvbXByZXNzb3IgaXMgZmx1c2hpbmcgdG8gdGhlIEJhY2sgc3RyZWFtLgotICAgLS0gIFNob3VsZCBub3QgYmUgdXNlZCB1bnRpbGwgbmVjZXNzYXJ5LCBiZWNvdXNlIGl0IGlzIGRlY3JlYXNpbmcKKyAgIC0tICBTaG91bGQgbm90IGJlIHVzZWQgdW50aWwgbmVjZXNzYXJ5LCBiZWNhdXNlIGl0IGlzIGRlY3JlYXNpbmcKICAgIC0tICBjb21wcmVzc2lvbi4KIAogICAgZnVuY3Rpb24gUmVhZF9Ub3RhbF9JbiAoU3RyZWFtIDogaW4gU3RyZWFtX1R5cGUpIHJldHVybiBDb3VudDsKQEAgLTk3LDEzICs5NywxMyBAQAogICAgICAgUmVzdF9MYXN0ICA6IFN0cmVhbV9FbGVtZW50X09mZnNldDsKICAgICAgIC0tICBCdWZmZXIgZm9yIFJlYWQgb3BlcmF0aW9uLgogICAgICAgLS0gIFdlIG5lZWQgdG8gaGF2ZSB0aGlzIGJ1ZmZlciBpbiB0aGUgcmVjb3JkCi0gICAgICAtLSAgYmVjb3VzZSBub3QgYWxsIHJlYWQgZGF0YSBmcm9tIGJhY2sgc3RyZWFtCisgICAgICAtLSAgYmVjYXVzZSBub3QgYWxsIHJlYWQgZGF0YSBmcm9tIGJhY2sgc3RyZWFtCiAgICAgICAtLSAgY291bGQgYmUgcHJvY2Vzc2VkIGR1cmluZyB0aGUgcmVhZCBvcGVyYXRpb24uCiAKICAgICAgIEJ1ZmZlcl9TaXplIDogU3RyZWFtX0VsZW1lbnRfT2Zmc2V0OwogICAgICAgLS0gIEJ1ZmZlciBzaXplIGZvciB3cml0ZSBvcGVyYXRpb24uCiAgICAgICAtLSAgV2UgZG8gbm90IG5lZWQgdG8gaGF2ZSB0aGlzIGJ1ZmZlcgotICAgICAgLS0gIGluIHRoZSByZWNvcmQgYmVjb3VzZSBhbGwgZGF0YSBjb3VsZCBiZQorICAgICAgLS0gIGluIHRoZSByZWNvcmQgYmVjYXVzZSBhbGwgZGF0YSBjb3VsZCBiZQogICAgICAgLS0gIHByb2Nlc3NlZCBpbiB0aGUgd3JpdGUgb3BlcmF0aW9uLgogCiAgICAgICBCYWNrICAgICAgIDogU3RyZWFtX0FjY2VzczsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYS96bGliLXRoaW4uYWRzIGIvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMKaW5kZXggZDQ0MDdlYi4uODEwMTczYyAxMDA2NDQKLS0tIGEvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMKKysrIGIvc3JjL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMKQEAgLTQzNiw3ICs0MzYsNyBAQAogCiAgICBwcmFnbWEgSW1wb3J0IChDLCBpbmZsYXRlQmFja0luaXQsICJpbmZsYXRlQmFja0luaXRfIik7CiAKLSAgIC0tICBJIHN0b3BwZWQgYmluZGluZyB0aGUgaW5mbGF0ZUJhY2sgcm91dGluZXMsIGJlY291c2UgcmVhbGl6ZSB0aGF0CisgICAtLSAgSSBzdG9wcGVkIGJpbmRpbmcgdGhlIGluZmxhdGVCYWNrIHJvdXRpbmVzLCBiZWNhdXNlIHJlYWxpemUgdGhhdAogICAgLS0gIGl0IGRvZXMgbm90IHN1cHBvcnQgemxpYiBhbmQgZ3ppcCBoZWFkZXJzIGZvciBub3csIGFuZCBoYXZlIG5vCiAgICAtLSAgc3ltbWV0cmljIGRlZmxhdGVCYWNrIHJvdXRpbmVzLgogICAgLS0gIFpMaWItQWRhIGlzIHN5bW1ldHJpYyByZWdhcmRpbmcgZGVmbGF0ZS9pbmZsYXRlIGRhdGEgdHJhbnNmb3JtYXRpb24KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2JsYXN0L2JsYXN0LmMgYi9zcmMvY29udHJpYi9ibGFzdC9ibGFzdC5jCmluZGV4IDY5ZWYwZmUuLmU2ZTY1OTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2JsYXN0L2JsYXN0LmMKKysrIGIvc3JjL2NvbnRyaWIvYmxhc3QvYmxhc3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIGJsYXN0LmMKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAxMiBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGJsYXN0LmgKLSAqIHZlcnNpb24gMS4yLCAyNCBPY3QgMjAxMgorICogdmVyc2lvbiAxLjMsIDI0IEF1ZyAyMDEzCiAgKgogICogYmxhc3QuYyBkZWNvbXByZXNzZXMgZGF0YSBjb21wcmVzc2VkIGJ5IHRoZSBQS1dhcmUgQ29tcHJlc3Npb24gTGlicmFyeS4KICAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHRoZSBleHBsb2RlKCkgZnVuY3Rpb24gb2YKQEAgLTI0LDggKzI0LDEyIEBACiAgKiAxLjEgIDE2IEZlYiAyMDAzICAgICAtIEZpeGVkIGRpc3RhbmNlIGNoZWNrIGZvciA+IDQgR0IgdW5jb21wcmVzc2VkIGRhdGEKICAqIDEuMiAgMjQgT2N0IDIwMTIgICAgIC0gQWRkIG5vdGUgYWJvdXQgdXNpbmcgYmluYXJ5IG1vZGUgaW4gc3RkaW8KICAqICAgICAgICAgICAgICAgICAgICAgIC0gRml4IGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudGx5IHNpZ25lZCBpbnRlZ2VycworICogMS4zICAyNCBBdWcgMjAxMyAgICAgLSBSZXR1cm4gdW51c2VkIGlucHV0IGZyb20gYmxhc3QoKQorICogICAgICAgICAgICAgICAgICAgICAgLSBGaXggdGVzdCBjb2RlIHRvIGNvcnJlY3RseSByZXBvcnQgdW51c2VkIGlucHV0CisgKiAgICAgICAgICAgICAgICAgICAgICAtIEVuYWJsZSB0aGUgcHJvdmlzaW9uIG9mIGluaXRpYWwgaW5wdXQgdG8gYmxhc3QoKQogICovCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAgICAgLyogZm9yIE5VTEwgKi8KICNpbmNsdWRlIDxzZXRqbXAuaD4gICAgICAgICAgICAgLyogZm9yIHNldGptcCgpLCBsb25nam1wKCksIGFuZCBqbXBfYnVmICovCiAjaW5jbHVkZSAiYmxhc3QuaCIgICAgICAgICAgICAgIC8qIHByb3RvdHlwZSBmb3IgYmxhc3QoKSAqLwogCkBAIC0yNTYsNyArMjYwLDcgQEAKICAqICAgbmV4dCwgMCBmb3IgbGl0ZXJhbHMsIDEgZm9yIGxlbmd0aC9kaXN0YW5jZS4KICAqCiAgKiAtIElmIGxpdGVyYWxzIGFyZSB1bmNvZGVkLCB0aGVuIHRoZSBuZXh0IGVpZ2h0IGJpdHMgYXJlIHRoZSBsaXRlcmFsLCBpbiB0aGUKLSAqICAgbm9ybWFsIGJpdCBvcmRlciBpbiB0aCBzdHJlYW0sIGkuZS4gbm8gYml0LXJldmVyc2FsIGlzIG5lZWRlZC4gU2ltaWxhcmx5LAorICogICBub3JtYWwgYml0IG9yZGVyIGluIHRoZSBzdHJlYW0sIGkuZS4gbm8gYml0LXJldmVyc2FsIGlzIG5lZWRlZC4gU2ltaWxhcmx5LAogICogICBubyBiaXQgcmV2ZXJzYWwgaXMgbmVlZGVkIGZvciBlaXRoZXIgdGhlIGxlbmd0aCBleHRyYSBiaXRzIG9yIHRoZSBkaXN0YW5jZQogICogICBleHRyYSBiaXRzLgogICoKQEAgLTM3Niw3ICszODAsOCBAQAogfQogCiAvKiBTZWUgY29tbWVudHMgaW4gYmxhc3QuaCAqLwotaW50IGJsYXN0KGJsYXN0X2luIGluZnVuLCB2b2lkICppbmhvdywgYmxhc3Rfb3V0IG91dGZ1biwgdm9pZCAqb3V0aG93KQoraW50IGJsYXN0KGJsYXN0X2luIGluZnVuLCB2b2lkICppbmhvdywgYmxhc3Rfb3V0IG91dGZ1biwgdm9pZCAqb3V0aG93LAorICAgICAgICAgIHVuc2lnbmVkICpsZWZ0LCB1bnNpZ25lZCBjaGFyICoqaW4pCiB7CiAgICAgc3RydWN0IHN0YXRlIHM7ICAgICAgICAgICAgIC8qIGlucHV0L291dHB1dCBzdGF0ZSAqLwogICAgIGludCBlcnI7ICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgKi8KQEAgLTM4NCw3ICszODksMTIgQEAKICAgICAvKiBpbml0aWFsaXplIGlucHV0IHN0YXRlICovCiAgICAgcy5pbmZ1biA9IGluZnVuOwogICAgIHMuaW5ob3cgPSBpbmhvdzsKLSAgICBzLmxlZnQgPSAwOworICAgIGlmIChsZWZ0ICE9IE5VTEwgJiYgKmxlZnQpIHsKKyAgICAgICAgcy5sZWZ0ID0gKmxlZnQ7CisgICAgICAgIHMuaW4gPSAqaW47CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcy5sZWZ0ID0gMDsKICAgICBzLmJpdGJ1ZiA9IDA7CiAgICAgcy5iaXRjbnQgPSAwOwogCkBAIC00MDAsNiArNDEwLDEyIEBACiAgICAgZWxzZQogICAgICAgICBlcnIgPSBkZWNvbXAoJnMpOyAgICAgICAgICAgICAgIC8qIGRlY29tcHJlc3MgKi8KIAorICAgIC8qIHJldHVybiB1bnVzZWQgaW5wdXQgKi8KKyAgICBpZiAobGVmdCAhPSBOVUxMKQorICAgICAgICAqbGVmdCA9IHMubGVmdDsKKyAgICBpZiAoaW4gIT0gTlVMTCkKKyAgICAgICAgKmluID0gcy5sZWZ0ID8gcy5pbiA6IE5VTEw7CisKICAgICAvKiB3cml0ZSBhbnkgbGVmdG92ZXIgb3V0cHV0IGFuZCB1cGRhdGUgdGhlIGVycm9yIGNvZGUgaWYgbmVlZGVkICovCiAgICAgaWYgKGVyciAhPSAxICYmIHMubmV4dCAmJiBzLm91dGZ1bihzLm91dGhvdywgcy5vdXQsIHMubmV4dCkgJiYgZXJyID09IDApCiAgICAgICAgIGVyciA9IDE7CkBAIC00MjksMTYgKzQ0NSwyMCBAQAogLyogRGVjb21wcmVzcyBhIFBLV2FyZSBDb21wcmVzc2lvbiBMaWJyYXJ5IHN0cmVhbSBmcm9tIHN0ZGluIHRvIHN0ZG91dCAqLwogaW50IG1haW4odm9pZCkKIHsKLSAgICBpbnQgcmV0LCBuOworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgbGVmdDsKIAogICAgIC8qIGRlY29tcHJlc3MgdG8gc3Rkb3V0ICovCi0gICAgcmV0ID0gYmxhc3QoaW5mLCBzdGRpbiwgb3V0Ziwgc3Rkb3V0KTsKLSAgICBpZiAocmV0ICE9IDApIGZwcmludGYoc3RkZXJyLCAiYmxhc3QgZXJyb3I6ICVkXG4iLCByZXQpOworICAgIGxlZnQgPSAwOworICAgIHJldCA9IGJsYXN0KGluZiwgc3RkaW4sIG91dGYsIHN0ZG91dCwgJmxlZnQsIE5VTEwpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJibGFzdCBlcnJvcjogJWRcbiIsIHJldCk7CiAKLSAgICAvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBsZWZ0b3ZlciBieXRlcyAqLwotICAgIG4gPSAwOwotICAgIHdoaWxlIChnZXRjaGFyKCkgIT0gRU9GKSBuKys7Ci0gICAgaWYgKG4pIGZwcmludGYoc3RkZXJyLCAiYmxhc3Qgd2FybmluZzogJWQgdW51c2VkIGJ5dGVzIG9mIGlucHV0XG4iLCBuKTsKKyAgICAvKiBjb3VudCBhbnkgbGVmdG92ZXIgYnl0ZXMgKi8KKyAgICB3aGlsZSAoZ2V0Y2hhcigpICE9IEVPRikKKyAgICAgICAgbGVmdCsrOworICAgIGlmIChsZWZ0KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJsYXN0IHdhcm5pbmc6ICV1IHVudXNlZCBieXRlcyBvZiBpbnB1dFxuIiwgbGVmdCk7CiAKICAgICAvKiByZXR1cm4gYmxhc3QoKSBlcnJvciBjb2RlICovCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2JsYXN0L2JsYXN0LmggYi9zcmMvY29udHJpYi9ibGFzdC9ibGFzdC5oCmluZGV4IDY1OGNmZDMuLjZjZjY1ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2JsYXN0L2JsYXN0LmgKKysrIGIvc3JjL2NvbnRyaWIvYmxhc3QvYmxhc3QuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJsYXN0LmggLS0gaW50ZXJmYWNlIGZvciBibGFzdC5jCi0gIENvcHlyaWdodCAoQykgMjAwMywgMjAxMiBNYXJrIEFkbGVyCi0gIHZlcnNpb24gMS4yLCAyNCBPY3QgMjAxMgorICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgorICB2ZXJzaW9uIDEuMywgMjQgQXVnIDIwMTMKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTQyLDcgKzQyLDggQEAKICAqLwogCiAKLWludCBibGFzdChibGFzdF9pbiBpbmZ1biwgdm9pZCAqaW5ob3csIGJsYXN0X291dCBvdXRmdW4sIHZvaWQgKm91dGhvdyk7CitpbnQgYmxhc3QoYmxhc3RfaW4gaW5mdW4sIHZvaWQgKmluaG93LCBibGFzdF9vdXQgb3V0ZnVuLCB2b2lkICpvdXRob3csCisgICAgICAgICAgdW5zaWduZWQgKmxlZnQsIHVuc2lnbmVkIGNoYXIgKippbik7CiAvKiBEZWNvbXByZXNzIGlucHV0IHRvIG91dHB1dCB1c2luZyB0aGUgcHJvdmlkZWQgaW5mdW4oKSBhbmQgb3V0ZnVuKCkgY2FsbHMuCiAgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGJsYXN0KCkgaXMgemVyby4gIElmIHRoZXJlIGlzIGFuIGVycm9yIGluCiAgKiB0aGUgc291cmNlIGRhdGEsIGkuZS4gaXQgaXMgbm90IGluIHRoZSBwcm9wZXIgZm9ybWF0LCB0aGVuIGEgbmVnYXRpdmUgdmFsdWUKQEAgLTU1LDEyICs1NiwxOSBAQAogICogYW4gaW5wdXQgZXJyb3IuICAoYmxhc3QoKSBvbmx5IGFza3MgZm9yIGlucHV0IGlmIGl0IG5lZWRzIGl0LikgIGluaG93IGlzIGZvcgogICogdXNlIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBwYXNzIGFuIGlucHV0IGRlc2NyaXB0b3IgdG8gaW5mdW4oKSwgaWYgZGVzaXJlZC4KICAqCisgKiBJZiBsZWZ0IGFuZCBpbiBhcmUgbm90IE5VTEwgYW5kICpsZWZ0IGlzIG5vdCB6ZXJvIHdoZW4gYmxhc3QoKSBpcyBjYWxsZWQsCisgKiB0aGVuIHRoZSAqbGVmdCBieXRlcyBhcmUgKmluIGFyZSBjb25zdW1lZCBmb3IgaW5wdXQgYmVmb3JlIGluZnVuKCkgaXMgdXNlZC4KKyAqCiAgKiBUaGUgb3V0cHV0IGZ1bmN0aW9uIGlzIGludm9rZWQ6IGVyciA9IG91dGZ1bihob3csIGJ1ZiwgbGVuKSwgd2hlcmUgdGhlIGJ5dGVzCiAgKiB0byBiZSB3cml0dGVuIGFyZSBidWZbMC4ubGVuLTFdLiAgSWYgZXJyIGlzIG5vdCB6ZXJvLCB0aGVuIGJsYXN0KCkgcmV0dXJucwogICogd2l0aCBhbiBvdXRwdXQgZXJyb3IuICBvdXRmdW4oKSBpcyBhbHdheXMgY2FsbGVkIHdpdGggbGVuIDw9IDQwOTYuICBvdXRob3cKICAqIGlzIGZvciB1c2UgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHBhc3MgYW4gb3V0cHV0IGRlc2NyaXB0b3IgdG8gb3V0ZnVuKCksIGlmCiAgKiBkZXNpcmVkLgogICoKKyAqIElmIHRoZXJlIGlzIGFueSB1bnVzZWQgaW5wdXQsICpsZWZ0IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZQorICogcmVhZCBhbmQgKmluIHBvaW50cyB0byB0aGVtLiAgT3RoZXJ3aXNlICpsZWZ0IGlzIHNldCB0byB6ZXJvIGFuZCAqaW4gaXMgc2V0CisgKiB0byBOVUxMLiAgSWYgbGVmdCBvciBpbiBhcmUgTlVMTCwgdGhlbiB0aGV5IGFyZSBub3Qgc2V0LgorICoKICAqIFRoZSByZXR1cm4gY29kZXMgYXJlOgogICoKICAqICAgMjogIHJhbiBvdXQgb2YgaW5wdXQgYmVmb3JlIGNvbXBsZXRpbmcgZGVjb21wcmVzc2lvbgpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvZGVscGhpL1pMaWIucGFzIGIvc3JjL2NvbnRyaWIvZGVscGhpL1pMaWIucGFzCmluZGV4IGE1Nzk5NzQuLjA2MGUxOTkgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2RlbHBoaS9aTGliLnBhcworKysgYi9zcmMvY29udHJpYi9kZWxwaGkvWkxpYi5wYXMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICBjb25zdCBPdXRCdWY6IFBvaW50ZXI7IEJ1ZlNpemU6IEludGVnZXIpOwogCiBjb25zdAotICB6bGliX3ZlcnNpb24gPSAnMS4yLjgnOworICB6bGliX3ZlcnNpb24gPSAnMS4yLjExJzsKIAogdHlwZQogICBFWmxpYkVycm9yID0gY2xhc3MoRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Vbml0VGVzdHMuY3MgYi9zcmMvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvVW5pdFRlc3RzLmNzCmluZGV4IGIyNzNkNTQuLjQ0Zjc2MzMgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Vbml0VGVzdHMuY3MKKysrIGIvc3JjL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL1VuaXRUZXN0cy5jcwpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgICAgIHB1YmxpYyB2b2lkIEluZm9fVmVyc2lvbigpDQogICAgICAgICB7DQogICAgICAgICAgICAgSW5mbyBpbmZvID0gbmV3IEluZm8oKTsNCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIjEuMi44IiwgSW5mby5WZXJzaW9uKTsNCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIjEuMi4xMSIsIEluZm8uVmVyc2lvbik7DQogICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMyLCBpbmZvLlNpemVPZlVJbnQpOw0KICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzMiwgaW5mby5TaXplT2ZVTG9uZyk7DQogICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMyLCBpbmZvLlNpemVPZlBvaW50ZXIpOw0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMgYi9zcmMvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5jCmluZGV4IDRhNzNhZDIuLjVmNGE3NjcgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMKKysrIGIvc3JjL2NvbnRyaWIvaW5mYmFjazkvaW5mdHJlZTkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWU5LmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgTUFYQklUUyAxNQogCiBjb25zdCBjaGFyIGluZmxhdGU5X2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZTkgMS4yLjggQ29weXJpZ2h0IDE5OTUtMjAxMyBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGU5IDEuMi4xMSBDb3B5cmlnaHQgMTk5NS0yMDE3IE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNjQsNyArNjQsNyBAQAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjksIDEyOSwgMTI5LCAxMjksCiAgICAgICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzIsIDEzMiwgMTMyLCAxMzIsCi0gICAgICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTQ0LCA3MiwgNzh9OworICAgICAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDE0NCwgNzcsIDIwMn07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMzEgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksCiAgICAgICAgIDY1LCA5NywgMTI5LCAxOTMsIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvY29uZmlndXJlLmFjIGIvc3JjL2NvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMKaW5kZXggODI3YTRlMC4uNWIxMTk3MCAxMDA2NDQKLS0tIGEvc3JjL2NvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMKQEAgLTEsNyArMSw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCiAKLUFDX0lOSVQoW21pbml6aXBdLCBbMS4yLjhdLCBbYnVnemlsbGEucmVkaGF0LmNvbV0pCitBQ19JTklUKFttaW5pemlwXSwgWzEuMi4xMV0sIFtidWd6aWxsYS5yZWRoYXQuY29tXSkKIEFDX0NPTkZJR19TUkNESVIoW21pbml6aXAuY10pCiBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKIExUX0lOSVQKZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL21pbml6aXAvaW93aW4zMi5jIGIvc3JjL2NvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMKaW5kZXggYTQ2ZDk2Yy4uMjc0ZjM5ZSAxMDA2NDQKLS0tIGEvc3JjL2NvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMKKysrIGIvc3JjL2NvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMKQEAgLTI2LDggKzI2LDkgQEAKICNlbmRpZgogCiAKKy8vIHNlZSBJbmNsdWRlL3NoYXJlZC93aW5hcGlmYW1pbHkuaCBpbiB0aGUgV2luZG93cyBLaXQKICNpZiBkZWZpbmVkKFdJTkFQSV9GQU1JTFlfUEFSVElUSU9OKSAmJiAoIShkZWZpbmVkKElPV0lOMzJfVVNJTkdfV0lOUlRfQVBJKSkpCi0jaWYgV0lOQVBJX0ZBTUlMWV9QQVJUSVRJT04oV0lOQVBJX1BBUlRJVElPTl9BUFApCisjaWYgV0lOQVBJX0ZBTUlMWV9PTkVfUEFSVElUSU9OKFdJTkFQSV9GQU1JTFksIFdJTkFQSV9QQVJUSVRJT05fQVBQKQogI2RlZmluZSBJT1dJTjMyX1VTSU5HX1dJTlJUX0FQSSAxCiAjZW5kaWYKICNlbmRpZgpAQCAtMjQzLDcgKzI0NCw3IEBACiAgICAgcmV0dXJuIFNldEZpbGVQb2ludGVyRXgoaEZpbGUsIHBvcywgbmV3UG9zLCBkd01vdmVNZXRob2QpOwogI2Vsc2UKICAgICBMT05HIGxIaWdoID0gcG9zLkhpZ2hQYXJ0OwotICAgIERXT1JEIGR3TmV3UG9zID0gU2V0RmlsZVBvaW50ZXIoaEZpbGUsIHBvcy5Mb3dQYXJ0LCAmbEhpZ2gsIEZJTEVfQ1VSUkVOVCk7CisgICAgRFdPUkQgZHdOZXdQb3MgPSBTZXRGaWxlUG9pbnRlcihoRmlsZSwgcG9zLkxvd1BhcnQsICZsSGlnaCwgZHdNb3ZlTWV0aG9kKTsKICAgICBCT09MIGZPayA9IFRSVUU7CiAgICAgaWYgKGR3TmV3UG9zID09IDB4RkZGRkZGRkYpCiAgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBOT19FUlJPUikKQEAgLTM3MCw3ICszNzEsNyBAQAogICAgIHsKICAgICAgICAgTEFSR0VfSU5URUdFUiBwb3M7CiAgICAgICAgIHBvcy5RdWFkUGFydCA9IG9mZnNldDsKLSAgICAgICAgaWYgKCFNeVNldEZpbGVQb2ludGVyRXgoaEZpbGUsIHBvcywgTlVMTCwgRklMRV9DVVJSRU5UKSkKKyAgICAgICAgaWYgKCFNeVNldEZpbGVQb2ludGVyRXgoaEZpbGUsIHBvcywgTlVMTCwgZHdNb3ZlTWV0aG9kKSkKICAgICAgICAgewogICAgICAgICAgICAgRFdPUkQgZHdFcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgICAgICgoV0lOMzJGSUxFX0lPV0lOKilzdHJlYW0pIC0+IGVycm9yPShpbnQpZHdFcnI7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmMgYi9zcmMvY29udHJpYi9taW5pemlwL3VuemlwLmMKaW5kZXggOTA5MzUwNC4uYmNmYjk0MSAxMDA2NDQKLS0tIGEvc3JjL2NvbnRyaWIvbWluaXppcC91bnppcC5jCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvdW56aXAuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4gRU9GCiAgICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCisgICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgb3BlbmVkIGZvciByZWFkaW5nLgogKi8KIAogCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9taW5pemlwL3ppcC5jIGIvc3JjL2NvbnRyaWIvbWluaXppcC96aXAuYwppbmRleCBlYTU0ODUzLi40NGU4OGE5IDEwMDY0NAotLS0gYS9zcmMvY29udHJpYi9taW5pemlwL3ppcC5jCisrKyBiL3NyYy9jb250cmliL21pbml6aXAvemlwLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAgIE9jdC0yMDA5IC0gTWF0aGlhcyBTdmVuc3NvbiAtIERpZCBzb21lIGNvZGUgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgdG8gZ2V0IGJldHRlciBvdmVydmlldyBvZiBzb21lIGZ1bmN0aW9ucy4KICAgIE9jdC0yMDA5IC0gTWF0aGlhcyBTdmVuc3NvbiAtIEFkZGVkIHppcFJlbW92ZUV4dHJhSW5mb0Jsb2NrIHRvIHN0cmlwIGV4dHJhIGZpZWxkIGRhdGEgZnJvbSBpdHMgWklQNjQgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXNlZCB3aGVuIHJlY3JldGluZyB6aXAgYXJjaGl2ZSB3aXRoIFJBVyB3aGVuIGRlbGV0aW5nIGl0ZW1zIGZyb20gYSB6aXAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSVA2NCBkYXRhIGlzIGF1dG9tYXRpY2x5IGFkZGVkIHRvIGl0ZW1zIHRoYXQgbmVlZHMgaXQsIGFuZCBleGlzdGluZyBaSVA2NCBkYXRhIG5lZWQgdG8gYmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpJUDY0IGRhdGEgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBpdGVtcyB0aGF0IG5lZWRzIGl0LCBhbmQgZXhpc3RpbmcgWklQNjQgZGF0YSBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICBPY3QtMjAwOSAtIE1hdGhpYXMgU3ZlbnNzb24gLSBBZGRlZCBzdXBwb3J0IGZvciBCWklQMiBhcyBjb21wcmVzc2lvbiBtb2RlIChiemlwMiBsaWIgaXMgcmVxdWlyZWQpCiAgICBKYW4tMjAxMCAtIGJhY2sgdG8gdW56aXAgYW5kIG1pbml6aXAgMS4wIG5hbWUgc2NoZW1lLCB3aXRoIGNvbXBhdGliaWxpdHkgbGF5ZXIKIApAQCAtMTE2LDcgKzExNiw3IEBACiAgIHN0cnVjdCBsaW5rZWRsaXN0X2RhdGFibG9ja19pbnRlcm5hbF9zKiBuZXh0X2RhdGFibG9jazsKICAgdUxvbmcgIGF2YWlsX2luX3RoaXNfYmxvY2s7CiAgIHVMb25nICBmaWxsZWRfaW5fdGhpc19ibG9jazsKLSAgdUxvbmcgIHVudXNlZDsgLyogZm9yIGZ1dHVyZSB1c2UgYW5kIGFsaWduZW1lbnQgKi8KKyAgdUxvbmcgIHVudXNlZDsgLyogZm9yIGZ1dHVyZSB1c2UgYW5kIGFsaWdubWVudCAqLwogICB1bnNpZ25lZCBjaGFyIGRhdGFbU0laRURBVEFfSU5EQVRBQkxPQ0tdOwogfSBsaW5rZWRsaXN0X2RhdGFibG9ja19pbnRlcm5hbDsKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgY3VyZmlsZTY0X2luZm8gY2k7ICAgICAgICAgICAgLyogaW5mbyBvbiB0aGUgZmlsZSBjdXJyZXRseSB3cml0aW5nICovCiAKICAgICBaUE9TNjRfVCBiZWdpbl9wb3M7ICAgICAgICAgICAgLyogcG9zaXRpb24gb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgemlwZmlsZSAqLwotICAgIFpQT1M2NF9UIGFkZF9wb3NpdGlvbl93aGVuX3dyaXR0aW5nX29mZnNldDsKKyAgICBaUE9TNjRfVCBhZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldDsKICAgICBaUE9TNjRfVCBudW1iZXJfZW50cnk7CiAKICNpZm5kZWYgTk9fQURERklMRUlORVhJU1RJTkdaSVAKQEAgLTgwNyw3ICs4MDcsNyBAQAogICB9CiAKICAgYnl0ZV9iZWZvcmVfdGhlX3ppcGZpbGUgPSBjZW50cmFsX3BvcyAtIChvZmZzZXRfY2VudHJhbF9kaXIrc2l6ZV9jZW50cmFsX2Rpcik7Ci0gIHB6aWluaXQtPmFkZF9wb3NpdGlvbl93aGVuX3dyaXR0aW5nX29mZnNldCA9IGJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlOworICBwemlpbml0LT5hZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldCA9IGJ5dGVfYmVmb3JlX3RoZV96aXBmaWxlOwogCiAgIHsKICAgICBaUE9TNjRfVCBzaXplX2NlbnRyYWxfZGlyX3RvX3JlYWQgPSBzaXplX2NlbnRyYWxfZGlyOwpAQCAtODc1LDcgKzg3NSw3IEBACiAgICAgemlpbml0LmluX29wZW5lZF9maWxlX2luemlwID0gMDsKICAgICB6aWluaXQuY2kuc3RyZWFtX2luaXRpYWxpc2VkID0gMDsKICAgICB6aWluaXQubnVtYmVyX2VudHJ5ID0gMDsKLSAgICB6aWluaXQuYWRkX3Bvc2l0aW9uX3doZW5fd3JpdHRpbmdfb2Zmc2V0ID0gMDsKKyAgICB6aWluaXQuYWRkX3Bvc2l0aW9uX3doZW5fd3JpdGluZ19vZmZzZXQgPSAwOwogICAgIGluaXRfbGlua2VkbGlzdCgmKHppaW5pdC5jZW50cmFsX2RpcikpOwogCiAKQEAgLTExNjQsNyArMTE2NCw3IEBACiAgICAgaWYoemktPmNpLnBvc19sb2NhbF9oZWFkZXIgPj0gMHhmZmZmZmZmZikKICAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzQyLCh1TG9uZykweGZmZmZmZmZmLDQpOwogICAgIGVsc2UKLSAgICAgIHppcDY0bG9jYWxfcHV0VmFsdWVfaW5tZW1vcnkoemktPmNpLmNlbnRyYWxfaGVhZGVyKzQyLCh1TG9uZyl6aS0+Y2kucG9zX2xvY2FsX2hlYWRlciAtIHppLT5hZGRfcG9zaXRpb25fd2hlbl93cml0dGluZ19vZmZzZXQsNCk7CisgICAgICB6aXA2NGxvY2FsX3B1dFZhbHVlX2lubWVtb3J5KHppLT5jaS5jZW50cmFsX2hlYWRlcis0MiwodUxvbmcpemktPmNpLnBvc19sb2NhbF9oZWFkZXIgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdGluZ19vZmZzZXQsNCk7CiAKICAgICBmb3IgKGk9MDtpPHNpemVfZmlsZW5hbWU7aSsrKQogICAgICAgICAqKHppLT5jaS5jZW50cmFsX2hlYWRlcitTSVpFQ0VOVFJBTEhFQURFUitpKSA9ICooZmlsZW5hbWUraSk7CkBAIC0xNzU1LDcgKzE3NTUsNyBAQAogaW50IFdyaXRlX1ppcDY0RW5kT2ZDZW50cmFsRGlyZWN0b3J5TG9jYXRvcih6aXA2NF9pbnRlcm5hbCogemksIFpQT1M2NF9UIHppcDY0ZW9jZF9wb3NfaW56aXApCiB7CiAgIGludCBlcnIgPSBaSVBfT0s7Ci0gIFpQT1M2NF9UIHBvcyA9IHppcDY0ZW9jZF9wb3NfaW56aXAgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdHRpbmdfb2Zmc2V0OworICBaUE9TNjRfVCBwb3MgPSB6aXA2NGVvY2RfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OwogCiAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCh1TG9uZylaSVA2NEVORExPQ0hFQURFUk1BR0lDLDQpOwogCkBAIC0xODA4LDcgKzE4MDgsNyBAQAogCiAgIGlmIChlcnI9PVpJUF9PSykgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KICAgewotICAgIFpQT1M2NF9UIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXR0aW5nX29mZnNldDsKKyAgICBaUE9TNjRfVCBwb3MgPSBjZW50cmFsZGlyX3Bvc19pbnppcCAtIHppLT5hZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldDsKICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgKFpQT1M2NF9UKXBvcyw4KTsKICAgfQogICByZXR1cm4gZXJyOwpAQCAtMTg0OSwxMyArMTg0OSwxMyBAQAogCiAgIGlmIChlcnI9PVpJUF9PSykgLyogb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXIgKi8KICAgewotICAgIFpQT1M2NF9UIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXR0aW5nX29mZnNldDsKKyAgICBaUE9TNjRfVCBwb3MgPSBjZW50cmFsZGlyX3Bvc19pbnppcCAtIHppLT5hZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldDsKICAgICBpZihwb3MgPj0gMHhmZmZmZmZmZikKICAgICB7CiAgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgKHVMb25nKTB4ZmZmZmZmZmYsNCk7CiAgICAgfQogICAgIGVsc2UKLSAgICAgIGVyciA9IHppcDY0bG9jYWxfcHV0VmFsdWUoJnppLT56X2ZpbGVmdW5jLHppLT5maWxlc3RyZWFtLCAodUxvbmcpKGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXR0aW5nX29mZnNldCksNCk7CisgICAgICBlcnIgPSB6aXA2NGxvY2FsX3B1dFZhbHVlKCZ6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSwgKHVMb25nKShjZW50cmFsZGlyX3Bvc19pbnppcCAtIHppLT5hZGRfcG9zaXRpb25fd2hlbl93cml0aW5nX29mZnNldCksNCk7CiAgIH0KIAogICAgcmV0dXJuIGVycjsKQEAgLTE5MjEsNyArMTkyMSw3IEBACiAgICAgfQogICAgIGZyZWVfbGlua2VkbGlzdCgmKHppLT5jZW50cmFsX2RpcikpOwogCi0gICAgcG9zID0gY2VudHJhbGRpcl9wb3NfaW56aXAgLSB6aS0+YWRkX3Bvc2l0aW9uX3doZW5fd3JpdHRpbmdfb2Zmc2V0OworICAgIHBvcyA9IGNlbnRyYWxkaXJfcG9zX2luemlwIC0gemktPmFkZF9wb3NpdGlvbl93aGVuX3dyaXRpbmdfb2Zmc2V0OwogICAgIGlmKHBvcyA+PSAweGZmZmZmZmZmIHx8IHppLT5udW1iZXJfZW50cnkgPiAweEZGRkYpCiAgICAgewogICAgICAgWlBPUzY0X1QgWmlwNjRFT0NEcG9zID0gWlRFTEw2NCh6aS0+el9maWxlZnVuYyx6aS0+ZmlsZXN0cmVhbSk7CmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMgYi9zcmMvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKaW5kZXggZTZhMDc4Mi4uYTBkZmYxMSAxMDA2NDQKLS0tIGEvc3JjL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCisrKyBiL3NyYy9jb250cmliL3Bhc2NhbC96bGlicGFzLnBhcwpAQCAtMTAsOCArMTAsOCBAQAogaW50ZXJmYWNlCiAKIGNvbnN0Ci0gIFpMSUJfVkVSU0lPTiA9ICcxLjIuOCc7Ci0gIFpMSUJfVkVSTlVNICA9ICQxMjgwOworICBaTElCX1ZFUlNJT04gPSAnMS4yLjExJzsKKyAgWkxJQl9WRVJOVU0gID0gJDEyYTA7CiAKIHR5cGUKICAgYWxsb2NfZnVuYyA9IGZ1bmN0aW9uKG9wYXF1ZTogUG9pbnRlcjsgaXRlbXMsIHNpemU6IEludGVnZXIpOiBQb2ludGVyOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvcHVmZi9wdWZmLmMgYi9zcmMvY29udHJpYi9wdWZmL3B1ZmYuYwppbmRleCBiYTU4NDgzLi5jNmM5MGQ3IDEwMDY0NAotLS0gYS9zcmMvY29udHJpYi9wdWZmL3B1ZmYuYworKysgYi9zcmMvY29udHJpYi9wdWZmL3B1ZmYuYwpAQCAtMTcsNyArMTcsNyBAQAogICogQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgY29tZXMgZnJvbSB0aGUgc3RhY2suICBUaGUgc3RhY2sgcmVxdWlyZWQKICAqIGlzIGxlc3MgdGhhbiAySyBieXRlcy4gIFRoaXMgY29kZSBpcyBjb21wYXRpYmxlIHdpdGggMTYtYml0IGludCdzIGFuZAogICogYXNzdW1lcyB0aGF0IGxvbmcncyBhcmUgYXQgbGVhc3QgMzIgYml0cy4gIHB1ZmYuYyB1c2VzIHRoZSBzaG9ydCBkYXRhIHR5cGUsCi0gKiBhc3N1bWVkIHRvIGJlIDE2IGJpdHMsIGZvciBhcnJheXMgaW4gb3JkZXIgdG8gdG8gY29uc2VydmUgbWVtb3J5LiAgVGhlIGNvZGUKKyAqIGFzc3VtZWQgdG8gYmUgMTYgYml0cywgZm9yIGFycmF5cyBpbiBvcmRlciB0byBjb25zZXJ2ZSBtZW1vcnkuICBUaGUgY29kZQogICogd29ya3Mgd2hldGhlciBpbnRlZ2VycyBhcmUgc3RvcmVkIGJpZyBlbmRpYW4gb3IgbGl0dGxlIGVuZGlhbi4KICAqCiAgKiBJbiB0aGUgY29tbWVudHMgYmVsb3cgYXJlICJGb3JtYXQgbm90ZXMiIHRoYXQgZGVzY3JpYmUgdGhlIGluZmxhdGUgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvdnN0dWRpby9yZWFkbWUudHh0IGIvc3JjL2NvbnRyaWIvdnN0dWRpby9yZWFkbWUudHh0CmluZGV4IGJmZGNkOWQuLmY2N2VhZTggMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vcmVhZG1lLnR4dAorKysgYi9zcmMvY29udHJpYi92c3R1ZGlvL3JlYWRtZS50eHQKQEAgLTEsNCArMSw0IEBACi1CdWlsZGluZyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBETEwgdmVyc2lvbnMgb2YgWmxpYiAxLjIuOA0KK0J1aWxkaW5nIGluc3RydWN0aW9ucyBmb3IgdGhlIERMTCB2ZXJzaW9ucyBvZiBabGliIDEuMi4xMQ0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogDQogVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdHMgdGhhdCBidWlsZCB6bGliIGFuZCBtaW5pemlwIHVzaW5nDQpAQCAtMTYsNyArMTYsNyBAQAogDQogQnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciBWaXN1YWwgU3R1ZGlvIDIwMDggKDMyIGJpdHMgb3IgNjQgYml0cykNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gVW5jb21wcmVzcyBjdXJyZW50IHpsaWIsIGluY2x1ZGluZyBhbGwgY29udHJpYi8qIGZpbGVzDQorLSBEZWNvbXByZXNzIGN1cnJlbnQgemxpYiwgaW5jbHVkaW5nIGFsbCBjb250cmliLyogZmlsZXMNCiAtIENvbXBpbGUgYXNzZW1ibHkgY29kZSAod2l0aCBWaXN1YWwgU3R1ZGlvIENvbW1hbmQgUHJvbXB0KSBieSBydW5uaW5nOg0KICAgIGJsZF9tbDY0LmJhdCAoaW4gY29udHJpYlxtYXNteDY0KQ0KICAgIGJsZF9tbDMyLmJhdCAoaW4gY29udHJpYlxtYXNteDg2KQ0KQEAgLTI1LDE0ICsyNSwyNCBAQAogDQogQnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciBWaXN1YWwgU3R1ZGlvIDIwMTAgKDMyIGJpdHMgb3IgNjQgYml0cykNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gVW5jb21wcmVzcyBjdXJyZW50IHpsaWIsIGluY2x1ZGluZyBhbGwgY29udHJpYi8qIGZpbGVzDQorLSBEZWNvbXByZXNzIGN1cnJlbnQgemxpYiwgaW5jbHVkaW5nIGFsbCBjb250cmliLyogZmlsZXMNCiAtIE9wZW4gY29udHJpYlx2c3R1ZGlvXHZjMTBcemxpYnZjLnNsbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMTANCiANCiBCdWlsZCBpbnN0cnVjdGlvbnMgZm9yIFZpc3VhbCBTdHVkaW8gMjAxMiAoMzIgYml0cyBvciA2NCBiaXRzKQ0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLSBVbmNvbXByZXNzIGN1cnJlbnQgemxpYiwgaW5jbHVkaW5nIGFsbCBjb250cmliLyogZmlsZXMNCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KIC0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxMVx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMg0KIA0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDEzICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxMlx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMw0KKw0KK0J1aWxkIGluc3RydWN0aW9ucyBmb3IgVmlzdWFsIFN0dWRpbyAyMDE1ICgzMiBiaXRzIG9yIDY0IGJpdHMpDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistIERlY29tcHJlc3MgY3VycmVudCB6bGliLCBpbmNsdWRpbmcgYWxsIGNvbnRyaWIvKiBmaWxlcw0KKy0gT3BlbiBjb250cmliXHZzdHVkaW9cdmMxNFx6bGlidmMuc2xuIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxNQ0KKw0KIA0KIEltcG9ydGFudA0KIC0tLS0tLS0tLQ0KQEAgLTYzLDMgKzczLDYgQEAKIA0KIEdpbGxlcyBWb2xsYW50DQogaW5mb0B3aW5pbWFnZS5jb20NCisNCitWaXN1YWwgU3R1ZGlvIDIwMTMgYW5kIDIwMTUgUHJvamVjdHMgZnJvbSBTZWFuIEh1bnQNCitzZWFuZGh1bnRfN0B5YWhvby5jb20NCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYi5yYyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjCmluZGV4IDczZjY0NzYuLmZlZTE3N2EgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjCkBAIC0yLDggKzIsOCBAQAogDQogI2RlZmluZSBJRFJfVkVSU0lPTjEgIDENCiBJRFJfVkVSU0lPTjEJVkVSU0lPTklORk8JTU9WRUFCTEUgSU1QVVJFIExPQURPTkNBTEwgRElTQ0FSREFCTEUNCi0gIEZJTEVWRVJTSU9OCSAxLDIsOCwwDQotICBQUk9EVUNUVkVSU0lPTiAxLDIsOCwwDQorICBGSUxFVkVSU0lPTgkgMSwgMiwgMTEsIDANCisgIFBST0RVQ1RWRVJTSU9OIDEsIDIsIDExLCAwDQogICBGSUxFRkxBR1NNQVNLCVZTX0ZGSV9GSUxFRkxBR1NNQVNLDQogICBGSUxFRkxBR1MJMA0KICAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyDQpAQCAtMTcsMTIgKzE3LDEyIEBACiANCiAgICAgQkVHSU4NCiAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgInpsaWIgZGF0YSBjb21wcmVzc2lvbiBhbmQgWklQIGZpbGUgSS9PIGxpYnJhcnlcMCINCi0gICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjhcMCINCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjExXDAiDQogICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsCSJ6bGliXDAiDQogICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLAkiemxpYndhcGkuZGxsXDAiDQogICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiDQogICAgICAgVkFMVUUgIkNvbW1lbnRzIiwiRExMIHN1cHBvcnQgYnkgQWxlc3NhbmRybyBJYWNvcGV0dGkgJiBHaWxsZXMgVm9sbGFudFwwIg0KLSAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICIoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgJiBNYXJrIEFkbGVyXDAiDQorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIihDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCINCiAgICAgRU5EDQogICBFTkQNCiAgIEJMT0NLICJWYXJGaWxlSW5mbyINCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYnZjLmRlZiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuZGVmCmluZGV4IDYzNjcwNDYuLjU0ZTY4M2QgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuZGVmCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMC96bGlidmMuZGVmCkBAIC0xLDcgKzEsNyBAQAogTElCUkFSWQ0KIDsgemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeQ0KIA0KLVZFUlNJT04JCTEuMi44DQorVkVSU0lPTgkJMS4yDQogDQogRVhQT1JUUw0KICAgICAgICAgYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMQ0KQEAgLTE0MSwzICsxNDEsMTMgQEAKIDsgemxpYjEgdjEuMi44IGFkZGVkOg0KICAgICAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNjYNCiAgICAgICAgIGd6dnByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY3DQorDQorOyB6bGliMSB2MS4yLjkgYWRkZWQ6DQorICAgICAgICBpbmZsYXRlQ29kZXNVc2VkICAgICAgICAgICAgICAgICAgICAgICAgQDE2OA0KKyAgICAgICAgaW5mbGF0ZVZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjkNCisgICAgICAgIHVuY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcwDQorICAgICAgICBnemZyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MQ0KKyAgICAgICAgZ3pmd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzINCisgICAgICAgIGRlZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTczDQorICAgICAgICBhZGxlcjMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NA0KKyAgICAgICAgY3JjMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzUNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYi5yYyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGliLnJjCmluZGV4IDczZjY0NzYuLmZlZTE3N2EgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGliLnJjCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGliLnJjCkBAIC0yLDggKzIsOCBAQAogDQogI2RlZmluZSBJRFJfVkVSU0lPTjEgIDENCiBJRFJfVkVSU0lPTjEJVkVSU0lPTklORk8JTU9WRUFCTEUgSU1QVVJFIExPQURPTkNBTEwgRElTQ0FSREFCTEUNCi0gIEZJTEVWRVJTSU9OCSAxLDIsOCwwDQotICBQUk9EVUNUVkVSU0lPTiAxLDIsOCwwDQorICBGSUxFVkVSU0lPTgkgMSwgMiwgMTEsIDANCisgIFBST0RVQ1RWRVJTSU9OIDEsIDIsIDExLCAwDQogICBGSUxFRkxBR1NNQVNLCVZTX0ZGSV9GSUxFRkxBR1NNQVNLDQogICBGSUxFRkxBR1MJMA0KICAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyDQpAQCAtMTcsMTIgKzE3LDEyIEBACiANCiAgICAgQkVHSU4NCiAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgInpsaWIgZGF0YSBjb21wcmVzc2lvbiBhbmQgWklQIGZpbGUgSS9PIGxpYnJhcnlcMCINCi0gICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjhcMCINCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjExXDAiDQogICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsCSJ6bGliXDAiDQogICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLAkiemxpYndhcGkuZGxsXDAiDQogICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiDQogICAgICAgVkFMVUUgIkNvbW1lbnRzIiwiRExMIHN1cHBvcnQgYnkgQWxlc3NhbmRybyBJYWNvcGV0dGkgJiBHaWxsZXMgVm9sbGFudFwwIg0KLSAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICIoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgJiBNYXJrIEFkbGVyXDAiDQorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIihDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCINCiAgICAgRU5EDQogICBFTkQNCiAgIEJMT0NLICJWYXJGaWxlSW5mbyINCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjMTEvemxpYnZjLmRlZiBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMuZGVmCmluZGV4IDYzNjcwNDYuLjU0ZTY4M2QgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMuZGVmCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmMxMS96bGlidmMuZGVmCkBAIC0xLDcgKzEsNyBAQAogTElCUkFSWQ0KIDsgemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeQ0KIA0KLVZFUlNJT04JCTEuMi44DQorVkVSU0lPTgkJMS4yDQogDQogRVhQT1JUUw0KICAgICAgICAgYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMQ0KQEAgLTE0MSwzICsxNDEsMTMgQEAKIDsgemxpYjEgdjEuMi44IGFkZGVkOg0KICAgICAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgICAgICAgICAgICAgICAgICAgIEAxNjYNCiAgICAgICAgIGd6dnByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTY3DQorDQorOyB6bGliMSB2MS4yLjkgYWRkZWQ6DQorICAgICAgICBpbmZsYXRlQ29kZXNVc2VkICAgICAgICAgICAgICAgICAgICAgICAgQDE2OA0KKyAgICAgICAgaW5mbGF0ZVZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgICAgIEAxNjkNCisgICAgICAgIHVuY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcwDQorICAgICAgICBnemZyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MQ0KKyAgICAgICAgZ3pmd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzINCisgICAgICAgIGRlZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTczDQorICAgICAgICBhZGxlcjMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3NA0KKyAgICAgICAgY3JjMzJfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzUNCmRpZmYgLS1naXQgYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYi5yYwppbmRleCA3M2Y2NDc2Li5mZWUxNzdhIDEwMDY0NAotLS0gYS9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjCisrKyBiL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWIucmMKQEAgLTIsOCArMiw4IEBACiANCiAjZGVmaW5lIElEUl9WRVJTSU9OMSAgMQ0KIElEUl9WRVJTSU9OMQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQ0KLSAgRklMRVZFUlNJT04JIDEsMiw4LDANCi0gIFBST0RVQ1RWRVJTSU9OIDEsMiw4LDANCisgIEZJTEVWRVJTSU9OCSAxLCAyLCAxMSwgMA0KKyAgUFJPRFVDVFZFUlNJT04gMSwgMiwgMTEsIDANCiAgIEZJTEVGTEFHU01BU0sJVlNfRkZJX0ZJTEVGTEFHU01BU0sNCiAgIEZJTEVGTEFHUwkwDQogICBGSUxFT1MJVk9TX0RPU19XSU5ET1dTMzINCkBAIC0xNywxMiArMTcsMTIgQEAKIA0KICAgICBCRUdJTg0KICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiemxpYiBkYXRhIGNvbXByZXNzaW9uIGFuZCBaSVAgZmlsZSBJL08gbGlicmFyeVwwIg0KLSAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsCSIxLjIuOFwwIg0KKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsCSIxLjIuMTFcMCINCiAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwJInpsaWJcMCINCiAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsCSJ6bGlid2FwaS5kbGxcMCINCiAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLAkiWkxpYi5ETExcMCINCiAgICAgICBWQUxVRSAiQ29tbWVudHMiLCJETEwgc3VwcG9ydCBieSBBbGVzc2FuZHJvIElhY29wZXR0aSAmIEdpbGxlcyBWb2xsYW50XDAiDQotICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIihDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCINCisgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5ICYgTWFyayBBZGxlclwwIg0KICAgICBFTkQNCiAgIEVORA0KICAgQkxPQ0sgIlZhckZpbGVJbmZvIg0KZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWJ2Yy5kZWYgYi9zcmMvY29udHJpYi92c3R1ZGlvL3ZjOS96bGlidmMuZGVmCmluZGV4IDYzNjcwNDYuLjU0ZTY4M2QgMTAwNjQ0Ci0tLSBhL3NyYy9jb250cmliL3ZzdHVkaW8vdmM5L3psaWJ2Yy5kZWYKKysrIGIvc3JjL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYnZjLmRlZgpAQCAtMSw3ICsxLDcgQEAKIExJQlJBUlkNCiA7IHpsaWIgZGF0YSBjb21wcmVzc2lvbiBhbmQgWklQIGZpbGUgSS9PIGxpYnJhcnkNCiANCi1WRVJTSU9OCQkxLjIuOA0KK1ZFUlNJT04JCTEuMg0KIA0KIEVYUE9SVFMNCiAgICAgICAgIGFkbGVyMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDENCkBAIC0xNDEsMyArMTQxLDEzIEBACiA7IHpsaWIxIHYxLjIuOCBhZGRlZDoNCiAgICAgICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5ICAgICAgICAgICAgICAgICAgICBAMTY2DQogICAgICAgICBnenZwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE2Nw0KKw0KKzsgemxpYjEgdjEuMi45IGFkZGVkOg0KKyAgICAgICAgaW5mbGF0ZUNvZGVzVXNlZCAgICAgICAgICAgICAgICAgICAgICAgIEAxNjgNCisgICAgICAgIGluZmxhdGVWYWxpZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICBAMTY5DQorICAgICAgICB1bmNvbXByZXNzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDE3MA0KKyAgICAgICAgZ3pmcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzENCisgICAgICAgIGd6ZndyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTcyDQorICAgICAgICBkZWZsYXRlR2V0RGljdGlvbmFyeSAgICAgICAgICAgICAgICAgICAgQDE3Mw0KKyAgICAgICAgYWRsZXIzMl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxNzQNCisgICAgICAgIGNyYzMyX3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMTc1DQpkaWZmIC0tZ2l0IGEvc3JjL2NyYzMyLmMgYi9zcmMvY3JjMzIuYwppbmRleCA5NzlhNzE5Li45NTgwNDQwIDEwMDY0NAotLS0gYS9zcmMvY3JjMzIuYworKysgYi9zcmMvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyLCAyMDE2IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTMwLDE3ICszMCwxNSBAQAogCiAjaW5jbHVkZSAienV0aWwuaCIgICAgICAvKiBmb3IgU1REQyBhbmQgRkFSIGRlZmluaXRpb25zICovCiAKLSNkZWZpbmUgbG9jYWwgc3RhdGljCi0KIC8qIERlZmluaXRpb25zIGZvciBkb2luZyB0aGUgY3JjIGZvdXIgZGF0YSBieXRlcyBhdCBhIHRpbWUuICovCiAjaWYgIWRlZmluZWQoTk9CWUZPVVIpICYmIGRlZmluZWQoWl9VNCkKICMgIGRlZmluZSBCWUZPVVIKICNlbmRpZgogI2lmZGVmIEJZRk9VUgogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9saXR0bGUgT0YoKHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgel9zaXplX3QpKTsKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHpfc2l6ZV90KSk7CiAjICBkZWZpbmUgVEJMUyA4CiAjZWxzZQogIyAgZGVmaW5lIFRCTFMgMQpAQCAtMjAxLDEwICsxOTksMTAgQEAKICNkZWZpbmUgRE84IERPMTsgRE8xOyBETzE7IERPMTsgRE8xOyBETzE7IERPMTsgRE8xCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVuc2lnbmVkIGxvbmcgWkVYUE9SVCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQordW5zaWduZWQgbG9uZyBaRVhQT1JUIGNyYzMyX3ooY3JjLCBidWYsIGxlbikKICAgICB1bnNpZ25lZCBsb25nIGNyYzsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwotICAgIHVJbnQgbGVuOworICAgIHpfc2l6ZV90IGxlbjsKIHsKICAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDBVTDsKIApAQCAtMjM1LDggKzIzMywyOSBAQAogICAgIHJldHVybiBjcmMgXiAweGZmZmZmZmZmVUw7CiB9CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3Vuc2lnbmVkIGxvbmcgWkVYUE9SVCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQorICAgIHVuc2lnbmVkIGxvbmcgY3JjOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CisgICAgdUludCBsZW47Cit7CisgICAgcmV0dXJuIGNyYzMyX3ooY3JjLCBidWYsIGxlbik7Cit9CisKICNpZmRlZiBCWUZPVVIKIAorLyoKKyAgIFRoaXMgQllGT1VSIGNvZGUgYWNjZXNzZXMgdGhlIHBhc3NlZCB1bnNpZ25lZCBjaGFyICogYnVmZmVyIHdpdGggYSAzMi1iaXQKKyAgIGludGVnZXIgcG9pbnRlciB0eXBlLiBUaGlzIHZpb2xhdGVzIHRoZSBzdHJpY3QgYWxpYXNpbmcgcnVsZSwgd2hlcmUgYQorICAgY29tcGlsZXIgY2FuIGFzc3VtZSwgZm9yIG9wdGltaXphdGlvbiBwdXJwb3NlcywgdGhhdCB0d28gcG9pbnRlcnMgdG8KKyAgIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHR5cGVzIHdvbid0IGV2ZXIgcG9pbnQgdG8gdGhlIHNhbWUgbWVtb3J5LiBUaGlzIGNhbgorICAgbWFuaWZlc3QgYXMgYSBwcm9ibGVtIG9ubHkgaWYgb25lIG9mIHRoZSBwb2ludGVycyBpcyB3cml0dGVuIHRvLiBUaGlzIGNvZGUKKyAgIG9ubHkgcmVhZHMgZnJvbSB0aG9zZSBwb2ludGVycy4gU28gbG9uZyBhcyB0aGlzIGNvZGUgcmVtYWlucyBpc29sYXRlZCBpbgorICAgdGhpcyBjb21waWxhdGlvbiB1bml0LCB0aGVyZSB3b24ndCBiZSBhIHByb2JsZW0uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBjb2RlCisgICBzaG91bGQgbm90IGJlIGNvcGllZCBhbmQgcGFzdGVkIGludG8gYSBjb21waWxhdGlvbiB1bml0IGluIHdoaWNoIG90aGVyIGNvZGUKKyAgIHdyaXRlcyB0byB0aGUgYnVmZmVyIHRoYXQgaXMgcGFzc2VkIHRvIHRoZXNlIHJvdXRpbmVzLgorICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgRE9MSVQ0IGMgXj0gKmJ1ZjQrKzsgXAogICAgICAgICBjID0gY3JjX3RhYmxlWzNdW2MgJiAweGZmXSBeIGNyY190YWJsZVsyXVsoYyA+PiA4KSAmIDB4ZmZdIF4gXApAQCAtMjQ3LDcgKzI2Niw3IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2xpdHRsZShjcmMsIGJ1ZiwgbGVuKQogICAgIHVuc2lnbmVkIGxvbmcgY3JjOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7Ci0gICAgdW5zaWduZWQgbGVuOworICAgIHpfc2l6ZV90IGxlbjsKIHsKICAgICByZWdpc3RlciB6X2NyY190IGM7CiAgICAgcmVnaXN0ZXIgY29uc3Qgel9jcmNfdCBGQVIgKmJ1ZjQ7CkBAIC0yNzgsNyArMjk3LDcgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBET0JJRzQgYyBePSAqKytidWY0OyBcCisjZGVmaW5lIERPQklHNCBjIF49ICpidWY0Kys7IFwKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVtjICYgMHhmZl0gXiBjcmNfdGFibGVbNV1bKGMgPj4gOCkgJiAweGZmXSBeIFwKICAgICAgICAgICAgIGNyY190YWJsZVs2XVsoYyA+PiAxNikgJiAweGZmXSBeIGNyY190YWJsZVs3XVtjID4+IDI0XQogI2RlZmluZSBET0JJRzMyIERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsgRE9CSUc0CkBAIC0yODcsNyArMzA2LDcgQEAKIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnKGNyYywgYnVmLCBsZW4pCiAgICAgdW5zaWduZWQgbG9uZyBjcmM7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47CisgICAgel9zaXplX3QgbGVuOwogewogICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKICAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKQEAgLTMwMCw3ICszMTksNiBAQAogICAgIH0KIAogICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7Ci0gICAgYnVmNC0tOwogICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9CSUczMjsKICAgICAgICAgbGVuIC09IDMyOwpAQCAtMzA5LDcgKzMyNyw2IEBACiAgICAgICAgIERPQklHNDsKICAgICAgICAgbGVuIC09IDQ7CiAgICAgfQotICAgIGJ1ZjQrKzsKICAgICBidWYgPSAoY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKilidWY0OwogCiAgICAgaWYgKGxlbikgZG8gewpkaWZmIC0tZ2l0IGEvc3JjL2RlZmxhdGUuYyBiL3NyYy9kZWZsYXRlLmMKaW5kZXggNjk2OTU3Ny4uMWVjNzYxNCAxMDA2NDQKLS0tIGEvc3JjL2RlZmxhdGUuYworKysgYi9zcmMvZGVmbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAiZGVmbGF0ZS5oIgogCiBjb25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBkZWZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOworICAgIiBkZWZsYXRlIDEuMi4xMSBDb3B5cmlnaHQgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNzMsNiArNzMsOCBAQAogdHlwZWRlZiBibG9ja19zdGF0ZSAoKmNvbXByZXNzX2Z1bmMpIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKIC8qIENvbXByZXNzaW9uIGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSBibG9jayBzdGF0ZSBhZnRlciB0aGUgY2FsbC4gKi8KIAorbG9jYWwgaW50IGRlZmxhdGVTdGF0ZUNoZWNrICAgICAgT0YoKHpfc3RyZWFtcCBzdHJtKSk7Citsb2NhbCB2b2lkIHNsaWRlX2hhc2ggICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCB2b2lkIGZpbGxfd2luZG93ICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX3N0b3JlZCBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7CiBsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX2Zhc3QgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7CkBAIC04NCwxNSArODYsMTYgQEAKIGxvY2FsIHZvaWQgbG1faW5pdCAgICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgcHV0U2hvcnRNU0IgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHVJbnQgYikpOwogbG9jYWwgdm9pZCBmbHVzaF9wZW5kaW5nICBPRigoel9zdHJlYW1wIHN0cm0pKTsKLWxvY2FsIGludCByZWFkX2J1ZiAgICAgICAgT0YoKHpfc3RyZWFtcCBzdHJtLCBCeXRlZiAqYnVmLCB1bnNpZ25lZCBzaXplKSk7Citsb2NhbCB1bnNpZ25lZCByZWFkX2J1ZiAgIE9GKCh6X3N0cmVhbXAgc3RybSwgQnl0ZWYgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkpOwogI2lmZGVmIEFTTVYKKyMgIHByYWdtYSBtZXNzYWdlKCJBc3NlbWJsZXIgY29kZSBtYXkgaGF2ZSBidWdzIC0tIHVzZSBhdCB5b3VyIG93biByaXNrIikKICAgICAgIHZvaWQgbWF0Y2hfaW5pdCBPRigodm9pZCkpOyAvKiBhc20gY29kZSBpbml0aWFsaXphdGlvbiAqLwogICAgICAgdUludCBsb25nZXN0X21hdGNoICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBjdXJfbWF0Y2gpKTsKICNlbHNlCiBsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogI2VuZGlmCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIFpMSUJfREVCVUcKIGxvY2FsICB2b2lkIGNoZWNrX21hdGNoIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIHN0YXJ0LCBJUG9zIG1hdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpKTsKICNlbmRpZgpAQCAtMTQ4LDIxICsxNTEsMTQgQEAKICAqIG1lYW5pbmcuCiAgKi8KIAotI2RlZmluZSBFUVVBTCAwCi0vKiByZXN1bHQgb2YgbWVtY21wIGZvciBlcXVhbCBzdHJpbmdzICovCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAotc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCiAvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0ggKi8KLSNkZWZpbmUgUkFOSyhmKSAoKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApKQorI2RlZmluZSBSQU5LKGYpICgoKGYpICogMikgLSAoKGYpID4gNCA/IDkgOiAwKSkKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCi0gKiAgICBpbnB1dCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUKLSAqICAgIHByZXZpb3VzIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUgaW5wdXQKKyAqICAgIGNoYXJhY3RlcnMsIHNvIHRoYXQgYSBydW5uaW5nIGhhc2gga2V5IGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBwcmV2aW91cworICogICAga2V5IGluc3RlYWQgb2YgY29tcGxldGUgcmVjYWxjdWxhdGlvbiBlYWNoIHRpbWUuCiAgKi8KICNkZWZpbmUgVVBEQVRFX0hBU0gocyxoLGMpIChoID0gKCgoaCk8PHMtPmhhc2hfc2hpZnQpIF4gKGMpKSAmIHMtPmhhc2hfbWFzaykKIApAQCAtMTczLDkgKzE2OSw5IEBACiAgKiB0aGUgcHJldmlvdXMgbGVuZ3RoIG9mIHRoZSBoYXNoIGNoYWluLgogICogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggLURGQVNURVNULCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgZm9yY2VkCiAgKiB0byAxLCBhbmQgbm8gaGFzaCBjaGFpbnMgYXJlIG1haW50YWluZWQuCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCi0gKiAgICBpbnB1dCBjaGFyYWN0ZXJzIGFuZCB0aGUgZmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQKLSAqICAgIChleGNlcHQgZm9yIHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1dCBmaWxlKS4KKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUgaW5wdXQKKyAqICAgIGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZCAoZXhjZXB0IGZvcgorICogICAgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCiAjaWZkZWYgRkFTVEVTVAogI2RlZmluZSBJTlNFUlRfU1RSSU5HKHMsIHN0ciwgbWF0Y2hfaGVhZCkgXApAQCAtMTk3LDYgKzE5MywzNyBAQAogICAgIHMtPmhlYWRbcy0+aGFzaF9zaXplLTFdID0gTklMOyBcCiAgICAgem1lbXplcm8oKEJ5dGVmICopcy0+aGVhZCwgKHVuc2lnbmVkKShzLT5oYXNoX3NpemUtMSkqc2l6ZW9mKCpzLT5oZWFkKSk7CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogU2xpZGUgdGhlIGhhc2ggdGFibGUgd2hlbiBzbGlkaW5nIHRoZSB3aW5kb3cgZG93biAoY291bGQgYmUgYXZvaWRlZCB3aXRoIDMyCisgKiBiaXQgdmFsdWVzIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZSkuIFdlIHNsaWRlIGV2ZW4gd2hlbiBsZXZlbCA9PSAwIHRvCisgKiBrZWVwIHRoZSBoYXNoIHRhYmxlIGNvbnNpc3RlbnQgaWYgd2Ugc3dpdGNoIGJhY2sgdG8gbGV2ZWwgPiAwIGxhdGVyLgorICovCitsb2NhbCB2b2lkIHNsaWRlX2hhc2gocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAgIHVuc2lnbmVkIG4sIG07CisgICAgUG9zZiAqcDsKKyAgICB1SW50IHdzaXplID0gcy0+d19zaXplOworCisgICAgbiA9IHMtPmhhc2hfc2l6ZTsKKyAgICBwID0gJnMtPmhlYWRbbl07CisgICAgZG8geworICAgICAgICBtID0gKi0tcDsKKyAgICAgICAgKnAgPSAoUG9zKShtID49IHdzaXplID8gbSAtIHdzaXplIDogTklMKTsKKyAgICB9IHdoaWxlICgtLW4pOworICAgIG4gPSB3c2l6ZTsKKyNpZm5kZWYgRkFTVEVTVAorICAgIHAgPSAmcy0+cHJldltuXTsKKyAgICBkbyB7CisgICAgICAgIG0gPSAqLS1wOworICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtIC0gd3NpemUgOiBOSUwpOworICAgICAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBjaGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dAorICAgICAgICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLgorICAgICAgICAgKi8KKyAgICB9IHdoaWxlICgtLW4pOworI2VuZGlmCit9CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVJbml0XyhzdHJtLCBsZXZlbCwgdmVyc2lvbiwgc3RyZWFtX3NpemUpCiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC0yNzAsNyArMjk3LDcgQEAKICNlbmRpZgogICAgIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8CiAgICAgICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8Ci0gICAgICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKKyAgICAgICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9GSVhFRCB8fCAod2luZG93Qml0cyA9PSA4ICYmIHdyYXAgIT0gMSkpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KICAgICBpZiAod2luZG93Qml0cyA9PSA4KSB3aW5kb3dCaXRzID0gOTsgIC8qIHVudGlsIDI1Ni1ieXRlIHdpbmRvdyBidWcgZml4ZWQgKi8KQEAgLTI3OCwxNCArMzA1LDE1IEBACiAgICAgaWYgKHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKXM7CiAgICAgcy0+c3RybSA9IHN0cm07CisgICAgcy0+c3RhdHVzID0gSU5JVF9TVEFURTsgICAgIC8qIHRvIHBhc3Mgc3RhdGUgdGVzdCBpbiBkZWZsYXRlUmVzZXQoKSAqLwogCiAgICAgcy0+d3JhcCA9IHdyYXA7CiAgICAgcy0+Z3poZWFkID0gWl9OVUxMOwotICAgIHMtPndfYml0cyA9IHdpbmRvd0JpdHM7CisgICAgcy0+d19iaXRzID0gKHVJbnQpd2luZG93Qml0czsKICAgICBzLT53X3NpemUgPSAxIDw8IHMtPndfYml0czsKICAgICBzLT53X21hc2sgPSBzLT53X3NpemUgLSAxOwogCi0gICAgcy0+aGFzaF9iaXRzID0gbWVtTGV2ZWwgKyA3OworICAgIHMtPmhhc2hfYml0cyA9ICh1SW50KW1lbUxldmVsICsgNzsKICAgICBzLT5oYXNoX3NpemUgPSAxIDw8IHMtPmhhc2hfYml0czsKICAgICBzLT5oYXNoX21hc2sgPSBzLT5oYXNoX3NpemUgLSAxOwogICAgIHMtPmhhc2hfc2hpZnQgPSAgKChzLT5oYXNoX2JpdHMrTUlOX01BVENILTEpL01JTl9NQVRDSCk7CkBAIC0zMTksNiArMzQ3LDMxIEBACiAgICAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTsKIH0KIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ2hlY2sgZm9yIGEgdmFsaWQgZGVmbGF0ZSBzdHJlYW0gc3RhdGUuIFJldHVybiAwIGlmIG9rLCAxIGlmIG5vdC4KKyAqLworbG9jYWwgaW50IGRlZmxhdGVTdGF0ZUNoZWNrIChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8CisgICAgICAgIHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmIChzID09IFpfTlVMTCB8fCBzLT5zdHJtICE9IHN0cm0gfHwgKHMtPnN0YXR1cyAhPSBJTklUX1NUQVRFICYmCisjaWZkZWYgR1pJUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBHWklQX1NUQVRFICYmCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gRVhUUkFfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gTkFNRV9TVEFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBDT01NRU5UX1NUQVRFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IEhDUkNfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gQlVTWV9TVEFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgKHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC0zMzEsNyArMzg0LDcgQEAKICAgICB1bnNpZ25lZCBhdmFpbDsKICAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMKQorICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHMgPSBzdHJtLT5zdGF0ZTsKICAgICB3cmFwID0gcy0+d3JhcDsKQEAgLTM4OSwxMyArNDQyLDM0IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVHZXREaWN0aW9uYXJ5IChzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIEJ5dGVmICpkaWN0aW9uYXJ5OworICAgIHVJbnQgICpkaWN0TGVuZ3RoOworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgdUludCBsZW47CisKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgbGVuID0gcy0+c3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQ7CisgICAgaWYgKGxlbiA+IHMtPndfc2l6ZSkKKyAgICAgICAgbGVuID0gcy0+d19zaXplOworICAgIGlmIChkaWN0aW9uYXJ5ICE9IFpfTlVMTCAmJiBsZW4pCisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSwgcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgLSBsZW4sIGxlbik7CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExlbmd0aCA9IGxlbjsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCB8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KIApAQCAtNDEwLDcgKzQ4NCwxMSBAQAogICAgIGlmIChzLT53cmFwIDwgMCkgewogICAgICAgICBzLT53cmFwID0gLXMtPndyYXA7IC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovCiAgICAgfQotICAgIHMtPnN0YXR1cyA9IHMtPndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTsKKyAgICBzLT5zdGF0dXMgPQorI2lmZGVmIEdaSVAKKyAgICAgICAgcy0+d3JhcCA9PSAyID8gR1pJUF9TVEFURSA6CisjZW5kaWYKKyAgICAgICAgcy0+d3JhcCA/IElOSVRfU1RBVEUgOiBCVVNZX1NUQVRFOwogICAgIHN0cm0tPmFkbGVyID0KICNpZmRlZiBHWklQCiAgICAgICAgIHMtPndyYXAgPT0gMiA/IGNyYzMyKDBMLCBaX05VTEwsIDApIDoKQEAgLTQ0MCw4ICs1MTgsOCBAQAogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGd6X2hlYWRlcnAgaGVhZDsKIHsKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgaWYgKHN0cm0tPnN0YXRlLT53cmFwICE9IDIpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgc3RybS0+c3RhdGUtPndyYXAgIT0gMikKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPnN0YXRlLT5nemhlYWQgPSBoZWFkOwogICAgIHJldHVybiBaX09LOwogfQpAQCAtNDUyLDcgKzUzMCw3IEBACiAgICAgaW50ICpiaXRzOwogICAgIHpfc3RyZWFtcCBzdHJtOwogewotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBpZiAocGVuZGluZyAhPSBaX05VTEwpCiAgICAgICAgICpwZW5kaW5nID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CiAgICAgaWYgKGJpdHMgIT0gWl9OVUxMKQpAQCAtNDY5LDcgKzU0Nyw3IEBACiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgcHV0OwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHMgPSBzdHJtLT5zdGF0ZTsKICAgICBpZiAoKEJ5dGVmICopKHMtPmRfYnVmKSA8IHMtPnBlbmRpbmdfb3V0ICsgKChCdWZfc2l6ZSArIDcpID4+IDMpKQogICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CkBAIC00OTQsOSArNTcyLDggQEAKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNvbXByZXNzX2Z1bmMgZnVuYzsKLSAgICBpbnQgZXJyID0gWl9PSzsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzID0gc3RybS0+c3RhdGU7CiAKICNpZmRlZiBGQVNURVNUCkBAIC01MTAsMTMgKzU4NywyMiBAQAogICAgIGZ1bmMgPSBjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5mdW5jOwogCiAgICAgaWYgKChzdHJhdGVneSAhPSBzLT5zdHJhdGVneSB8fCBmdW5jICE9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLmZ1bmMpICYmCi0gICAgICAgIHN0cm0tPnRvdGFsX2luICE9IDApIHsKKyAgICAgICAgcy0+aGlnaF93YXRlcikgewogICAgICAgICAvKiBGbHVzaCB0aGUgbGFzdCBidWZmZXI6ICovCi0gICAgICAgIGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7Ci0gICAgICAgIGlmIChlcnIgPT0gWl9CVUZfRVJST1IgJiYgcy0+cGVuZGluZyA9PSAwKQotICAgICAgICAgICAgZXJyID0gWl9PSzsKKyAgICAgICAgaW50IGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApCisgICAgICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CiAgICAgfQogICAgIGlmIChzLT5sZXZlbCAhPSBsZXZlbCkgeworICAgICAgICBpZiAocy0+bGV2ZWwgPT0gMCAmJiBzLT5tYXRjaGVzICE9IDApIHsKKyAgICAgICAgICAgIGlmIChzLT5tYXRjaGVzID09IDEpCisgICAgICAgICAgICAgICAgc2xpZGVfaGFzaChzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDTEVBUl9IQVNIKHMpOworICAgICAgICAgICAgcy0+bWF0Y2hlcyA9IDA7CisgICAgICAgIH0KICAgICAgICAgcy0+bGV2ZWwgPSBsZXZlbDsKICAgICAgICAgcy0+bWF4X2xhenlfbWF0Y2ggICA9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLm1heF9sYXp5OwogICAgICAgICBzLT5nb29kX21hdGNoICAgICAgID0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0uZ29vZF9sZW5ndGg7CkBAIC01MjQsNyArNjEwLDcgQEAKICAgICAgICAgcy0+bWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLm1heF9jaGFpbjsKICAgICB9CiAgICAgcy0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKLSAgICByZXR1cm4gZXJyOworICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC01MzcsMTIgKzYyMywxMiBAQAogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgcyA9IHN0cm0tPnN0YXRlOwotICAgIHMtPmdvb2RfbWF0Y2ggPSBnb29kX2xlbmd0aDsKLSAgICBzLT5tYXhfbGF6eV9tYXRjaCA9IG1heF9sYXp5OworICAgIHMtPmdvb2RfbWF0Y2ggPSAodUludClnb29kX2xlbmd0aDsKKyAgICBzLT5tYXhfbGF6eV9tYXRjaCA9ICh1SW50KW1heF9sYXp5OwogICAgIHMtPm5pY2VfbWF0Y2ggPSBuaWNlX2xlbmd0aDsKLSAgICBzLT5tYXhfY2hhaW5fbGVuZ3RoID0gbWF4X2NoYWluOworICAgIHMtPm1heF9jaGFpbl9sZW5ndGggPSAodUludCltYXhfY2hhaW47CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTU2OSwxNCArNjU1LDEzIEBACiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICB1TG9uZyBjb21wbGVuLCB3cmFwbGVuOwotICAgIEJ5dGVmICpzdHI7CiAKICAgICAvKiBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQgZm9yIGNvbXByZXNzZWQgZGF0YSAqLwogICAgIGNvbXBsZW4gPSBzb3VyY2VMZW4gKwogICAgICAgICAgICAgICAoKHNvdXJjZUxlbiArIDcpID4+IDMpICsgKChzb3VyY2VMZW4gKyA2MykgPj4gNikgKyA1OwogCiAgICAgLyogaWYgY2FuJ3QgZ2V0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgcGx1cyB6bGliIHdyYXBwZXIgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKQorICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZW4gKyA2OwogCiAgICAgLyogY29tcHV0ZSB3cmFwcGVyIGxlbmd0aCAqLwpAQCAtNTg4LDkgKzY3MywxMSBAQAogICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6bGliIHdyYXBwZXIgKi8KICAgICAgICAgd3JhcGxlbiA9IDYgKyAocy0+c3Ryc3RhcnQgPyA0IDogMCk7CiAgICAgICAgIGJyZWFrOworI2lmZGVmIEdaSVAKICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3ppcCB3cmFwcGVyICovCiAgICAgICAgIHdyYXBsZW4gPSAxODsKICAgICAgICAgaWYgKHMtPmd6aGVhZCAhPSBaX05VTEwpIHsgICAgICAgICAgLyogdXNlci1zdXBwbGllZCBnemlwIGhlYWRlciAqLworICAgICAgICAgICAgQnl0ZWYgKnN0cjsKICAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkKICAgICAgICAgICAgICAgICB3cmFwbGVuICs9IDIgKyBzLT5nemhlYWQtPmV4dHJhX2xlbjsKICAgICAgICAgICAgIHN0ciA9IHMtPmd6aGVhZC0+bmFtZTsKQEAgLTYwNyw2ICs2OTQsNyBAQAogICAgICAgICAgICAgICAgIHdyYXBsZW4gKz0gMjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgY29tcGlsZXIgaGFwcGluZXNzICovCiAgICAgICAgIHdyYXBsZW4gPSA2OwogICAgIH0KQEAgLTYzNCwxMCArNzIyLDEwIEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0IGdvZXMKLSAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQKLSAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5uZXh0X291dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50byBpdC4KLSAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS4KKyAqIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0LCBleGNlcHQgZm9yCisgKiBzb21lIGRlZmxhdGVfc3RvcmVkKCkgb3V0cHV0LCBnb2VzIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzbyBzb21lCisgKiBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBsYXJnZQorICogc3RybS0+bmV4dF9vdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGludG8gaXQuIChTZWUgYWxzbyByZWFkX2J1ZigpKS4KICAqLwogbG9jYWwgdm9pZCBmbHVzaF9wZW5kaW5nKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC02NTQsMTMgKzc0MiwyMyBAQAogICAgIHN0cm0tPm5leHRfb3V0ICArPSBsZW47CiAgICAgcy0+cGVuZGluZ19vdXQgICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9vdXQgKz0gbGVuOwotICAgIHN0cm0tPmF2YWlsX291dCAgLT0gbGVuOwotICAgIHMtPnBlbmRpbmcgLT0gbGVuOworICAgIHN0cm0tPmF2YWlsX291dCAtPSBsZW47CisgICAgcy0+cGVuZGluZyAgICAgIC09IGxlbjsKICAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CiAgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CiAgICAgfQogfQogCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFVwZGF0ZSB0aGUgaGVhZGVyIENSQyB3aXRoIHRoZSBieXRlcyBzLT5wZW5kaW5nX2J1ZltiZWcuLnMtPnBlbmRpbmcgLSAxXS4KKyAqLworI2RlZmluZSBIQ1JDX1VQREFURShiZWcpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYyAmJiBzLT5wZW5kaW5nID4gKGJlZykpIFwKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgKGJlZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyAtIChiZWcpKTsgXAorICAgIH0gd2hpbGUgKDApCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGUgKHN0cm0sIGZsdXNoKQogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtNjY5LDIwMyArNzY3LDIxIEBACiAgICAgaW50IG9sZF9mbHVzaDsgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8Ci0gICAgICAgIGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgfQogICAgIHMgPSBzdHJtLT5zdGF0ZTsKIAogICAgIGlmIChzdHJtLT5uZXh0X291dCA9PSBaX05VTEwgfHwKLSAgICAgICAgKHN0cm0tPm5leHRfaW4gPT0gWl9OVUxMICYmIHN0cm0tPmF2YWlsX2luICE9IDApIHx8CisgICAgICAgIChzdHJtLT5hdmFpbF9pbiAhPSAwICYmIHN0cm0tPm5leHRfaW4gPT0gWl9OVUxMKSB8fAogICAgICAgICAocy0+c3RhdHVzID09IEZJTklTSF9TVEFURSAmJiBmbHVzaCAhPSBaX0ZJTklTSCkpIHsKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgfQogICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCkgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAKLSAgICBzLT5zdHJtID0gc3RybTsgLyoganVzdCBpbiBjYXNlICovCiAgICAgb2xkX2ZsdXNoID0gcy0+bGFzdF9mbHVzaDsKICAgICBzLT5sYXN0X2ZsdXNoID0gZmx1c2g7CiAKLSAgICAvKiBXcml0ZSB0aGUgaGVhZGVyICovCi0gICAgaWYgKHMtPnN0YXR1cyA9PSBJTklUX1NUQVRFKSB7Ci0jaWZkZWYgR1pJUAotICAgICAgICBpZiAocy0+d3JhcCA9PSAyKSB7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgcHV0X2J5dGUocywgMzEpOwotICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMsIDgpOwotICAgICAgICAgICAgaWYgKHMtPmd6aGVhZCA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5sZXZlbCA9PSA5ID8gMiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7Ci0gICAgICAgICAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7Ci0gICAgICAgICAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLT5nemhlYWQtPnRleHQgPyAxIDogMCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmhjcmMgPyAyIDogMCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmV4dHJhID09IFpfTlVMTCA/IDAgOiA0KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+bmFtZSA9PSBaX05VTEwgPyAwIDogOCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmNvbW1lbnQgPT0gWl9OVUxMID8gMCA6IDE2KQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkocy0+Z3poZWFkLT50aW1lICYgMHhmZikpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDgpICYgMHhmZikpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDE2KSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHMtPmd6aGVhZC0+dGltZSA+PiAyNCkgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+bGV2ZWwgPT0gOSA/IDIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogMCkpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+b3MgJiAweGZmKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+Z3poZWFkLT5leHRyYV9sZW4gJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICAgcHV0X2J5dGUocywgKHMtPmd6aGVhZC0+ZXh0cmFfbGVuID4+IDgpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpCi0gICAgICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcpOwotICAgICAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOwotICAgICAgICAgICAgICAgIHMtPnN0YXR1cyA9IEVYVFJBX1NUQVRFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICB1SW50IGhlYWRlciA9IChaX0RFRkxBVEVEICsgKChzLT53X2JpdHMtOCk8PDQpKSA8PCA4OwotICAgICAgICAgICAgdUludCBsZXZlbF9mbGFnczsKLQotICAgICAgICAgICAgaWYgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMikKLSAgICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChzLT5sZXZlbCA8IDYpCi0gICAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAocy0+bGV2ZWwgPT0gNikKLSAgICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOwotICAgICAgICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTsKLSAgICAgICAgICAgIGlmIChzLT5zdHJzdGFydCAhPSAwKSBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7Ci0gICAgICAgICAgICBoZWFkZXIgKz0gMzEgLSAoaGVhZGVyICUgMzEpOwotCi0gICAgICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOwotICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKLQotICAgICAgICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovCi0gICAgICAgICAgICBpZiAocy0+c3Ryc3RhcnQgIT0gMCkgewotICAgICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciA+PiAxNikpOwotICAgICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciAmIDB4ZmZmZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIEdaSVAKLSAgICBpZiAocy0+c3RhdHVzID09IEVYVFJBX1NUQVRFKSB7Ci0gICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgewotICAgICAgICAgICAgdUludCBiZWcgPSBzLT5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwotCi0gICAgICAgICAgICB3aGlsZSAocy0+Z3ppbmRleCA8IChzLT5nemhlYWQtPmV4dHJhX2xlbiAmIDB4ZmZmZikpIHsKLSAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMgJiYgcy0+cGVuZGluZyA+IGJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgYmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gYmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKLSAgICAgICAgICAgICAgICAgICAgYmVnID0gcy0+cGVuZGluZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5nemhlYWQtPmV4dHJhW3MtPmd6aW5kZXhdKTsKLSAgICAgICAgICAgICAgICBzLT5nemluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjICYmIHMtPnBlbmRpbmcgPiBiZWcpCi0gICAgICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGluZ19idWYgKyBiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gYmVnKTsKLSAgICAgICAgICAgIGlmIChzLT5nemluZGV4ID09IHMtPmd6aGVhZC0+ZXh0cmFfbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+Z3ppbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgcy0+c3RhdHVzID0gTkFNRV9TVEFURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzLT5zdGF0dXMgPSBOQU1FX1NUQVRFOwotICAgIH0KLSAgICBpZiAocy0+c3RhdHVzID09IE5BTUVfU1RBVEUpIHsKLSAgICAgICAgaWYgKHMtPmd6aGVhZC0+bmFtZSAhPSBaX05VTEwpIHsKLSAgICAgICAgICAgIHVJbnQgYmVnID0gcy0+cGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KLSAgICAgICAgICAgIGludCB2YWw7Ci0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMgJiYgcy0+cGVuZGluZyA+IGJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgYmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gYmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKLSAgICAgICAgICAgICAgICAgICAgYmVnID0gcy0+cGVuZGluZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbCA9IHMtPmd6aGVhZC0+bmFtZVtzLT5nemluZGV4KytdOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7Ci0gICAgICAgICAgICB9IHdoaWxlICh2YWwgIT0gMCk7Ci0gICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjICYmIHMtPnBlbmRpbmcgPiBiZWcpCi0gICAgICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGluZ19idWYgKyBiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gYmVnKTsKLSAgICAgICAgICAgIGlmICh2YWwgPT0gMCkgewotICAgICAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOwotICAgICAgICAgICAgICAgIHMtPnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcy0+c3RhdHVzID0gQ09NTUVOVF9TVEFURTsKLSAgICB9Ci0gICAgaWYgKHMtPnN0YXR1cyA9PSBDT01NRU5UX1NUQVRFKSB7Ci0gICAgICAgIGlmIChzLT5nemhlYWQtPmNvbW1lbnQgIT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICB1SW50IGJlZyA9IHMtPnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCi0gICAgICAgICAgICBpbnQgdmFsOwotCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjICYmIHMtPnBlbmRpbmcgPiBiZWcpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1ZiArIGJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyAtIGJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7Ci0gICAgICAgICAgICAgICAgICAgIGJlZyA9IHMtPnBlbmRpbmc7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nID09IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YWwgPSBzLT5nemhlYWQtPmNvbW1lbnRbcy0+Z3ppbmRleCsrXTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwotICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9IDApOwotICAgICAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYyAmJiBzLT5wZW5kaW5nID4gYmVnKQotICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgYmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyAtIGJlZyk7Ci0gICAgICAgICAgICBpZiAodmFsID09IDApCi0gICAgICAgICAgICAgICAgcy0+c3RhdHVzID0gSENSQ19TVEFURTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzLT5zdGF0dXMgPSBIQ1JDX1NUQVRFOwotICAgIH0KLSAgICBpZiAocy0+c3RhdHVzID09IEhDUkNfU1RBVEUpIHsKLSAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYykgewotICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgKyAyID4gcy0+cGVuZGluZ19idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwotICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgKyAyIDw9IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoc3RybS0+YWRsZXIgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzdHJtLT5hZGxlciA+PiA4KSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIHMtPnN0YXR1cyA9IEJVU1lfU1RBVEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8qIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUgKi8KICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CiAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CkBAIC04OTQsMTUgKzgxMCwxOTcgQEAKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQogCisgICAgLyogV3JpdGUgdGhlIGhlYWRlciAqLworICAgIGlmIChzLT5zdGF0dXMgPT0gSU5JVF9TVEFURSkgeworICAgICAgICAvKiB6bGliIGhlYWRlciAqLworICAgICAgICB1SW50IGhlYWRlciA9IChaX0RFRkxBVEVEICsgKChzLT53X2JpdHMtOCk8PDQpKSA8PCA4OworICAgICAgICB1SW50IGxldmVsX2ZsYWdzOworCisgICAgICAgIGlmIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIpCisgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDA7CisgICAgICAgIGVsc2UgaWYgKHMtPmxldmVsIDwgNikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKKyAgICAgICAgZWxzZSBpZiAocy0+bGV2ZWwgPT0gNikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOworICAgICAgICBoZWFkZXIgfD0gKGxldmVsX2ZsYWdzIDw8IDYpOworICAgICAgICBpZiAocy0+c3Ryc3RhcnQgIT0gMCkgaGVhZGVyIHw9IFBSRVNFVF9ESUNUOworICAgICAgICBoZWFkZXIgKz0gMzEgLSAoaGVhZGVyICUgMzEpOworCisgICAgICAgIHB1dFNob3J0TVNCKHMsIGhlYWRlcik7CisKKyAgICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovCisgICAgICAgIGlmIChzLT5zdHJzdGFydCAhPSAwKSB7CisgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCAodUludCkoc3RybS0+YWRsZXIgPj4gMTYpKTsKKyAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciAmIDB4ZmZmZikpOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKKworICAgICAgICAvKiBDb21wcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYW4gZW1wdHkgcGVuZGluZyBidWZmZXIgKi8KKyAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgR1pJUAorICAgIGlmIChzLT5zdGF0dXMgPT0gR1pJUF9TVEFURSkgeworICAgICAgICAvKiBnemlwIGhlYWRlciAqLworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBwdXRfYnl0ZShzLCAzMSk7CisgICAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CisgICAgICAgIHB1dF9ieXRlKHMsIDgpOworICAgICAgICBpZiAocy0+Z3poZWFkID09IFpfTlVMTCkgeworICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOworICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmxldmVsID09IDkgPyAyIDoKKyAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPworICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCBPU19DT0RFKTsKKyAgICAgICAgICAgIHMtPnN0YXR1cyA9IEJVU1lfU1RBVEU7CisKKyAgICAgICAgICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5nIGJ1ZmZlciAqLworICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAocy0+Z3poZWFkLT50ZXh0ID8gMSA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmhjcmMgPyAyIDogMCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+ZXh0cmEgPT0gWl9OVUxMID8gMCA6IDQpICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPm5hbWUgPT0gWl9OVUxMID8gMCA6IDgpICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmNvbW1lbnQgPT0gWl9OVUxMID8gMCA6IDE2KQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKShzLT5nemhlYWQtPnRpbWUgJiAweGZmKSk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHMtPmd6aGVhZC0+dGltZSA+PiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDE2KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDI0KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmxldmVsID09IDkgPyAyIDoKKyAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPworICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5nemhlYWQtPm9zICYgMHhmZik7CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5nemhlYWQtPmV4dHJhX2xlbiAmIDB4ZmYpOworICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLT5nemhlYWQtPmV4dHJhX2xlbiA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYykKKyAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcpOworICAgICAgICAgICAgcy0+Z3ppbmRleCA9IDA7CisgICAgICAgICAgICBzLT5zdGF0dXMgPSBFWFRSQV9TVEFURTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocy0+c3RhdHVzID09IEVYVFJBX1NUQVRFKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgeworICAgICAgICAgICAgdWxnIGJlZyA9IHMtPnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLworICAgICAgICAgICAgdUludCBsZWZ0ID0gKHMtPmd6aGVhZC0+ZXh0cmFfbGVuICYgMHhmZmZmKSAtIHMtPmd6aW5kZXg7CisgICAgICAgICAgICB3aGlsZSAocy0+cGVuZGluZyArIGxlZnQgPiBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAgICAgdUludCBjb3B5ID0gcy0+cGVuZGluZ19idWZfc2l6ZSAtIHMtPnBlbmRpbmc7CisgICAgICAgICAgICAgICAgem1lbWNweShzLT5wZW5kaW5nX2J1ZiArIHMtPnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzLT5nemhlYWQtPmV4dHJhICsgcy0+Z3ppbmRleCwgY29weSk7CisgICAgICAgICAgICAgICAgcy0+cGVuZGluZyA9IHMtPnBlbmRpbmdfYnVmX3NpemU7CisgICAgICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAgICAgICAgICAgICBzLT5nemluZGV4ICs9IGNvcHk7CisgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJlZyA9IDA7CisgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgem1lbWNweShzLT5wZW5kaW5nX2J1ZiArIHMtPnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgIHMtPmd6aGVhZC0+ZXh0cmEgKyBzLT5nemluZGV4LCBsZWZ0KTsKKyAgICAgICAgICAgIHMtPnBlbmRpbmcgKz0gbGVmdDsKKyAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICBzLT5nemluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBzLT5zdGF0dXMgPSBOQU1FX1NUQVRFOworICAgIH0KKyAgICBpZiAocy0+c3RhdHVzID09IE5BTUVfU1RBVEUpIHsKKyAgICAgICAgaWYgKHMtPmd6aGVhZC0+bmFtZSAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgIHVsZyBiZWcgPSBzLT5wZW5kaW5nOyAgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KKyAgICAgICAgICAgIGludCB2YWw7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOworICAgICAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiZWcgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWwgPSBzLT5nemhlYWQtPm5hbWVbcy0+Z3ppbmRleCsrXTsKKyAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOworICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9IDApOworICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIHMtPnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gQ09NTUVOVF9TVEFURSkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5jb21tZW50ICE9IFpfTlVMTCkgeworICAgICAgICAgICAgdWxnIGJlZyA9IHMtPnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLworICAgICAgICAgICAgaW50IHZhbDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJlZyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbCA9IHMtPmd6aGVhZC0+Y29tbWVudFtzLT5nemluZGV4KytdOworICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CisgICAgICAgICAgICB9IHdoaWxlICh2YWwgIT0gMCk7CisgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOworICAgICAgICB9CisgICAgICAgIHMtPnN0YXR1cyA9IEhDUkNfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gSENSQ19TVEFURSkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKSB7CisgICAgICAgICAgICBpZiAocy0+cGVuZGluZyArIDIgPiBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKHN0cm0tPmFkbGVyICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzdHJtLT5hZGxlciA+PiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKKworICAgICAgICAvKiBDb21wcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYW4gZW1wdHkgcGVuZGluZyBidWZmZXIgKi8KKyAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9yIGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS4KICAgICAgKi8KICAgICBpZiAoc3RybS0+YXZhaWxfaW4gIT0gMCB8fCBzLT5sb29rYWhlYWQgIT0gMCB8fAogICAgICAgICAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJiBzLT5zdGF0dXMgIT0gRklOSVNIX1NUQVRFKSkgewogICAgICAgICBibG9ja19zdGF0ZSBic3RhdGU7CiAKLSAgICAgICAgYnN0YXRlID0gcy0+c3RyYXRlZ3kgPT0gWl9IVUZGTUFOX09OTFkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDoKLSAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICgqKGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLmZ1bmMpKShzLCBmbHVzaCkpOworICAgICAgICBic3RhdGUgPSBzLT5sZXZlbCA9PSAwID8gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpIDoKKyAgICAgICAgICAgICAgICAgcy0+c3RyYXRlZ3kgPT0gWl9IVUZGTUFOX09OTFkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDoKKyAgICAgICAgICAgICAgICAgcy0+c3RyYXRlZ3kgPT0gWl9STEUgPyBkZWZsYXRlX3JsZShzLCBmbHVzaCkgOgorICAgICAgICAgICAgICAgICAoKihjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5mdW5jKSkocywgZmx1c2gpOwogCiAgICAgICAgIGlmIChic3RhdGUgPT0gZmluaXNoX3N0YXJ0ZWQgfHwgYnN0YXRlID09IGZpbmlzaF9kb25lKSB7CiAgICAgICAgICAgICBzLT5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7CkBAIC05NDQsNyArMTA0Miw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgQXNzZXJ0KHN0cm0tPmF2YWlsX291dCA+IDAsICJidWcyIik7CiAKICAgICBpZiAoZmx1c2ggIT0gWl9GSU5JU0gpIHJldHVybiBaX09LOwogICAgIGlmIChzLT53cmFwIDw9IDApIHJldHVybiBaX1NUUkVBTV9FTkQ7CkBAIC05ODEsMTggKzEwNzgsOSBAQAogewogICAgIGludCBzdGF0dXM7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKICAgICBzdGF0dXMgPSBzdHJtLT5zdGF0ZS0+c3RhdHVzOwotICAgIGlmIChzdGF0dXMgIT0gSU5JVF9TVEFURSAmJgotICAgICAgICBzdGF0dXMgIT0gRVhUUkFfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IE5BTUVfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IENPTU1FTlRfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IEhDUkNfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IEJVU1lfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IEZJTklTSF9TVEFURSkgewotICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIH0KIAogICAgIC8qIERlYWxsb2NhdGUgaW4gcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uczogKi8KICAgICBUUllfRlJFRShzdHJtLCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19idWYpOwpAQCAtMTAyMyw3ICsxMTExLDcgQEAKICAgICB1c2hmICpvdmVybGF5OwogCiAKLSAgICBpZiAoc291cmNlID09IFpfTlVMTCB8fCBkZXN0ID09IFpfTlVMTCB8fCBzb3VyY2UtPnN0YXRlID09IFpfTlVMTCkgeworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzb3VyY2UpIHx8IGRlc3QgPT0gWl9OVUxMKSB7CiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB9CiAKQEAgLTEwNzMsNyArMTE2MSw3IEBACiAgKiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+bmV4dF9pbiBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC4KICAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLgogICovCi1sb2NhbCBpbnQgcmVhZF9idWYoc3RybSwgYnVmLCBzaXplKQorbG9jYWwgdW5zaWduZWQgcmVhZF9idWYoc3RybSwgYnVmLCBzaXplKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIEJ5dGVmICpidWY7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTEwOTcsNyArMTE4NSw3IEBACiAgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKIAotICAgIHJldHVybiAoaW50KWxlbjsKKyAgICByZXR1cm4gbGVuOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTExNTEsOSArMTIzOSw5IEBACiB7CiAgICAgdW5zaWduZWQgY2hhaW5fbGVuZ3RoID0gcy0+bWF4X2NoYWluX2xlbmd0aDsvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi8KICAgICByZWdpc3RlciBCeXRlZiAqc2NhbiA9IHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqLwotICAgIHJlZ2lzdGVyIEJ5dGVmICptYXRjaDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoZWQgc3RyaW5nICovCisgICAgcmVnaXN0ZXIgQnl0ZWYgKm1hdGNoOyAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqLwogICAgIHJlZ2lzdGVyIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KLSAgICBpbnQgYmVzdF9sZW4gPSBzLT5wcmV2X2xlbmd0aDsgICAgICAgICAgICAgIC8qIGJlc3QgbWF0Y2ggbGVuZ3RoIHNvIGZhciAqLworICAgIGludCBiZXN0X2xlbiA9IChpbnQpcy0+cHJldl9sZW5ndGg7ICAgICAgICAgLyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovCiAgICAgaW50IG5pY2VfbWF0Y2ggPSBzLT5uaWNlX21hdGNoOyAgICAgICAgICAgICAvKiBzdG9wIGlmIG1hdGNoIGxvbmcgZW5vdWdoICovCiAgICAgSVBvcyBsaW1pdCA9IHMtPnN0cnN0YXJ0ID4gKElQb3MpTUFYX0RJU1QocykgPwogICAgICAgICBzLT5zdHJzdGFydCAtIChJUG9zKU1BWF9ESVNUKHMpIDogTklMOwpAQCAtMTE4OCw3ICsxMjc2LDcgQEAKICAgICAvKiBEbyBub3QgbG9vayBmb3IgbWF0Y2hlcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIFRoaXMgaXMgbmVjZXNzYXJ5CiAgICAgICogdG8gbWFrZSBkZWZsYXRlIGRldGVybWluaXN0aWMuCiAgICAgICovCi0gICAgaWYgKCh1SW50KW5pY2VfbWF0Y2ggPiBzLT5sb29rYWhlYWQpIG5pY2VfbWF0Y2ggPSBzLT5sb29rYWhlYWQ7CisgICAgaWYgKCh1SW50KW5pY2VfbWF0Y2ggPiBzLT5sb29rYWhlYWQpIG5pY2VfbWF0Y2ggPSAoaW50KXMtPmxvb2thaGVhZDsKIAogICAgIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplLU1JTl9MT09LQUhFQUQsICJuZWVkIGxvb2thaGVhZCIpOwogCkBAIC0xMzQ5LDcgKzE0MzcsMTEgQEAKIAogI2VuZGlmIC8qIEZBU1RFU1QgKi8KIAotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRworCisjZGVmaW5lIEVRVUFMIDAKKy8qIHJlc3VsdCBvZiBtZW1jbXAgZm9yIGVxdWFsIHN0cmluZ3MgKi8KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDaGVjayB0aGF0IHRoZSBtYXRjaCBhdCBtYXRjaF9zdGFydCBpcyBpbmRlZWQgYSBtYXRjaC4KICAqLwpAQCAtMTM3NSw3ICsxNDY3LDcgQEAKIH0KICNlbHNlCiAjICBkZWZpbmUgY2hlY2tfbWF0Y2gocywgc3RhcnQsIG1hdGNoLCBsZW5ndGgpCi0jZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBaTElCX0RFQlVHICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRmlsbCB0aGUgd2luZG93IHdoZW4gdGhlIGxvb2thaGVhZCBiZWNvbWVzIGluc3VmZmljaWVudC4KQEAgLTEzOTAsOCArMTQ4Miw3IEBACiBsb2NhbCB2b2lkIGZpbGxfd2luZG93KHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBuLCBtOwotICAgIHJlZ2lzdGVyIFBvc2YgKnA7CisgICAgdW5zaWduZWQgbjsKICAgICB1bnNpZ25lZCBtb3JlOyAgICAvKiBBbW91bnQgb2YgZnJlZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuICovCiAgICAgdUludCB3c2l6ZSA9IHMtPndfc2l6ZTsKIApAQCAtMTQxOCwzNSArMTUwOSwxMSBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHMtPnN0cnN0YXJ0ID49IHdzaXplK01BWF9ESVNUKHMpKSB7CiAKLSAgICAgICAgICAgIHptZW1jcHkocy0+d2luZG93LCBzLT53aW5kb3crd3NpemUsICh1bnNpZ25lZCl3c2l6ZSk7CisgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93K3dzaXplLCAodW5zaWduZWQpd3NpemUgLSBtb3JlKTsKICAgICAgICAgICAgIHMtPm1hdGNoX3N0YXJ0IC09IHdzaXplOwogICAgICAgICAgICAgcy0+c3Ryc3RhcnQgICAgLT0gd3NpemU7IC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovCiAgICAgICAgICAgICBzLT5ibG9ja19zdGFydCAtPSAobG9uZykgd3NpemU7Ci0KLSAgICAgICAgICAgIC8qIFNsaWRlIHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIgYml0IHZhbHVlcwotICAgICAgICAgICAgICAgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDAKLSAgICAgICAgICAgICAgIHRvIGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDAKLSAgICAgICAgICAgICAgIGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBpcyBub3QgYW4gb3B0aW1hbCB1c2FnZSBvZgotICAgICAgICAgICAgICAgemxpYiwgc28gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHBhdGhvbG9naWNhbCBjYXNlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbiA9IHMtPmhhc2hfc2l6ZTsKLSAgICAgICAgICAgIHAgPSAmcy0+aGVhZFtuXTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBtID0gKi0tcDsKLSAgICAgICAgICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtLXdzaXplIDogTklMKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7Ci0KLSAgICAgICAgICAgIG4gPSB3c2l6ZTsKLSNpZm5kZWYgRkFTVEVTVAotICAgICAgICAgICAgcCA9ICZzLT5wcmV2W25dOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG0gPSAqLS1wOwotICAgICAgICAgICAgICAgICpwID0gKFBvcykobSA+PSB3c2l6ZSA/IG0td3NpemUgOiBOSUwpOwotICAgICAgICAgICAgICAgIC8qIElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0Ci0gICAgICAgICAgICAgICAgICogaXRzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgdXNlZC4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7Ci0jZW5kaWYKKyAgICAgICAgICAgIHNsaWRlX2hhc2gocyk7CiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9CiAgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSBicmVhazsKQEAgLTE1NTIsNzAgKzE2MTksMTk5IEBACiAgICBpZiAocy0+c3RybS0+YXZhaWxfb3V0ID09IDApIHJldHVybiAobGFzdCkgPyBmaW5pc2hfc3RhcnRlZCA6IG5lZWRfbW9yZTsgXAogfQogCisvKiBNYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggaW4gZGVmbGF0ZSBmb3JtYXQgKG5vdCBpbmNsdWRpbmcgaGVhZGVyKS4gKi8KKyNkZWZpbmUgTUFYX1NUT1JFRCA2NTUzNQorCisvKiBNaW5pbXVtIG9mIGEgYW5kIGIuICovCisjZGVmaW5lIE1JTihhLCBiKSAoKGEpID4gKGIpID8gKGIpIDogKGEpKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuCiAgKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS4KLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IHNpbmNlCi0gKiB1bmNvbXByZXNzaWJsZSBkYXRhIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZAotICogb25seSBmb3IgdGhlIGxldmVsPTAgY29tcHJlc3Npb24gb3B0aW9uLgotICogTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGF2b2lkIGV4dHJhIGNvcHlpbmcgZnJvbQotICogd2luZG93IHRvIHBlbmRpbmdfYnVmLgorICoKKyAqIEluIGNhc2UgZGVmbGF0ZVBhcmFtcygpIGlzIHVzZWQgdG8gbGF0ZXIgc3dpdGNoIHRvIGEgbm9uLXplcm8gY29tcHJlc3Npb24KKyAqIGxldmVsLCBzLT5tYXRjaGVzIChvdGhlcndpc2UgdW51c2VkIHdoZW4gc3RvcmluZykga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlcgorICogb2YgaGFzaCB0YWJsZSBzbGlkZXMgdG8gcGVyZm9ybS4gSWYgcy0+bWF0Y2hlcyBpcyAxLCB0aGVuIG9uZSBoYXNoIHRhYmxlCisgKiBzbGlkZSB3aWxsIGJlIGRvbmUgd2hlbiBzd2l0Y2hpbmcuIElmIHMtPm1hdGNoZXMgaXMgMiwgdGhlIG1heGltdW0gdmFsdWUKKyAqIGFsbG93ZWQgaGVyZSwgdGhlbiB0aGUgaGFzaCB0YWJsZSB3aWxsIGJlIGNsZWFyZWQsIHNpbmNlIHR3byBvciBtb3JlIHNsaWRlcworICogaXMgdGhlIHNhbWUgYXMgYSBjbGVhci4KKyAqCisgKiBkZWZsYXRlX3N0b3JlZCgpIGlzIHdyaXR0ZW4gdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0aW1lcyBhbiBpbnB1dCBieXRlIGlzCisgKiBjb3BpZWQuIEl0IGlzIG1vc3QgZWZmaWNpZW50IHdpdGggbGFyZ2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCB3aGljaAorICogbWF4aW1pemVzIHRoZSBvcHBvcnR1bml0ZXMgdG8gaGF2ZSBhIHNpbmdsZSBjb3B5IGZyb20gbmV4dF9pbiB0byBuZXh0X291dC4KICAqLwogbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgZmx1c2g7CiB7Ci0gICAgLyogU3RvcmVkIGJsb2NrcyBhcmUgbGltaXRlZCB0byAweGZmZmYgYnl0ZXMsIHBlbmRpbmdfYnVmIGlzIGxpbWl0ZWQKLSAgICAgKiB0byBwZW5kaW5nX2J1Zl9zaXplLCBhbmQgZWFjaCBzdG9yZWQgYmxvY2sgaGFzIGEgNSBieXRlIGhlYWRlcjoKKyAgICAvKiBTbWFsbGVzdCB3b3J0aHkgYmxvY2sgc2l6ZSB3aGVuIG5vdCBmbHVzaGluZyBvciBmaW5pc2hpbmcuIEJ5IGRlZmF1bHQKKyAgICAgKiB0aGlzIGlzIDMySy4gVGhpcyBjYW4gYmUgYXMgc21hbGwgYXMgNTA3IGJ5dGVzIGZvciBtZW1MZXZlbCA9PSAxLiBGb3IKKyAgICAgKiBsYXJnZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIHRoZSBzdG9yZWQgYmxvY2sgc2l6ZSB3aWxsIGJlIGxhcmdlci4KICAgICAgKi8KLSAgICB1bGcgbWF4X2Jsb2NrX3NpemUgPSAweGZmZmY7Ci0gICAgdWxnIG1heF9zdGFydDsKKyAgICB1bnNpZ25lZCBtaW5fYmxvY2sgPSBNSU4ocy0+cGVuZGluZ19idWZfc2l6ZSAtIDUsIHMtPndfc2l6ZSk7CiAKLSAgICBpZiAobWF4X2Jsb2NrX3NpemUgPiBzLT5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewotICAgICAgICBtYXhfYmxvY2tfc2l6ZSA9IHMtPnBlbmRpbmdfYnVmX3NpemUgLSA1OwotICAgIH0KLQotICAgIC8qIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlucHV0IHRvIG91dHB1dDogKi8KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8qIEZpbGwgdGhlIHdpbmRvdyBhcyBtdWNoIGFzIHBvc3NpYmxlOiAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IDEpIHsKLQotICAgICAgICAgICAgQXNzZXJ0KHMtPnN0cnN0YXJ0IDwgcy0+d19zaXplK01BWF9ESVNUKHMpIHx8Ci0gICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplLCAic2xpZGUgdG9vIGxhdGUiKTsKLQotICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDAgJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgcmV0dXJuIG5lZWRfbW9yZTsKLQotICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KLSAgICAgICAgfQotICAgICAgICBBc3NlcnQocy0+YmxvY2tfc3RhcnQgPj0gMEwsICJibG9jayBnb25lIik7Ci0KLSAgICAgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bG9va2FoZWFkOwotICAgICAgICBzLT5sb29rYWhlYWQgPSAwOwotCi0gICAgICAgIC8qIEVtaXQgYSBzdG9yZWQgYmxvY2sgaWYgcGVuZGluZ19idWYgd2lsbCBiZSBmdWxsOiAqLwotICAgICAgICBtYXhfc3RhcnQgPSBzLT5ibG9ja19zdGFydCArIG1heF9ibG9ja19zaXplOwotICAgICAgICBpZiAocy0+c3Ryc3RhcnQgPT0gMCB8fCAodWxnKXMtPnN0cnN0YXJ0ID49IG1heF9zdGFydCkgewotICAgICAgICAgICAgLyogc3Ryc3RhcnQgPT0gMCBpcyBwb3NzaWJsZSB3aGVuIHdyYXBhcm91bmQgb24gMTYtYml0IG1hY2hpbmUgKi8KLSAgICAgICAgICAgIHMtPmxvb2thaGVhZCA9ICh1SW50KShzLT5zdHJzdGFydCAtIG1heF9zdGFydCk7Ci0gICAgICAgICAgICBzLT5zdHJzdGFydCA9ICh1SW50KW1heF9zdGFydDsKLSAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwotICAgICAgICB9Ci0gICAgICAgIC8qIEZsdXNoIGlmIHdlIG1heSBoYXZlIHRvIHNsaWRlLCBvdGhlcndpc2UgYmxvY2tfc3RhcnQgbWF5IGJlY29tZQotICAgICAgICAgKiBuZWdhdGl2ZSBhbmQgdGhlIGRhdGEgd2lsbCBiZSBnb25lOgorICAgIC8qIENvcHkgYXMgbWFueSBtaW5fYmxvY2sgb3IgbGFyZ2VyIHN0b3JlZCBibG9ja3MgZGlyZWN0bHkgdG8gbmV4dF9vdXQgYXMKKyAgICAgKiBwb3NzaWJsZS4gSWYgZmx1c2hpbmcsIGNvcHkgdGhlIHJlbWFpbmluZyBhdmFpbGFibGUgaW5wdXQgdG8gbmV4dF9vdXQgYXMKKyAgICAgKiBzdG9yZWQgYmxvY2tzLCBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuCisgICAgICovCisgICAgdW5zaWduZWQgbGVuLCBsZWZ0LCBoYXZlLCBsYXN0ID0gMDsKKyAgICB1bnNpZ25lZCB1c2VkID0gcy0+c3RybS0+YXZhaWxfaW47CisgICAgZG8geworICAgICAgICAvKiBTZXQgbGVuIHRvIHRoZSBtYXhpbXVtIHNpemUgYmxvY2sgdGhhdCB3ZSBjYW4gY29weSBkaXJlY3RseSB3aXRoIHRoZQorICAgICAgICAgKiBhdmFpbGFibGUgaW5wdXQgZGF0YSBhbmQgb3V0cHV0IHNwYWNlLiBTZXQgbGVmdCB0byBob3cgbXVjaCBvZiB0aGF0CisgICAgICAgICAqIHdvdWxkIGJlIGNvcGllZCBmcm9tIHdoYXQncyBsZWZ0IGluIHRoZSB3aW5kb3cuCiAgICAgICAgICAqLwotICAgICAgICBpZiAocy0+c3Ryc3RhcnQgLSAodUludClzLT5ibG9ja19zdGFydCA+PSBNQVhfRElTVChzKSkgewotICAgICAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgICAgIGxlbiA9IE1BWF9TVE9SRUQ7ICAgICAgIC8qIG1heGltdW0gZGVmbGF0ZSBzdG9yZWQgYmxvY2sgbGVuZ3RoICovCisgICAgICAgIGhhdmUgPSAocy0+YmlfdmFsaWQgKyA0MikgPj4gMzsgICAgICAgICAvKiBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzICovCisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9vdXQgPCBoYXZlKSAgICAgICAgICAvKiBuZWVkIHJvb20gZm9yIGhlYWRlciAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBpbiBhdmFpbF9vdXQ6ICovCisgICAgICAgIGhhdmUgPSBzLT5zdHJtLT5hdmFpbF9vdXQgLSBoYXZlOworICAgICAgICBsZWZ0ID0gcy0+c3Ryc3RhcnQgLSBzLT5ibG9ja19zdGFydDsgICAgLyogYnl0ZXMgbGVmdCBpbiB3aW5kb3cgKi8KKyAgICAgICAgaWYgKGxlbiA+ICh1bGcpbGVmdCArIHMtPnN0cm0tPmF2YWlsX2luKQorICAgICAgICAgICAgbGVuID0gbGVmdCArIHMtPnN0cm0tPmF2YWlsX2luOyAgICAgLyogbGltaXQgbGVuIHRvIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAobGVuID4gaGF2ZSkKKyAgICAgICAgICAgIGxlbiA9IGhhdmU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpbWl0IGxlbiB0byB0aGUgb3V0cHV0ICovCisKKyAgICAgICAgLyogSWYgdGhlIHN0b3JlZCBibG9jayB3b3VsZCBiZSBsZXNzIHRoYW4gbWluX2Jsb2NrIGluIGxlbmd0aCwgb3IgaWYKKyAgICAgICAgICogdW5hYmxlIHRvIGNvcHkgYWxsIG9mIHRoZSBhdmFpbGFibGUgaW5wdXQgd2hlbiBmbHVzaGluZywgdGhlbiB0cnkKKyAgICAgICAgICogY29weWluZyB0byB0aGUgd2luZG93IGFuZCB0aGUgcGVuZGluZyBidWZmZXIgaW5zdGVhZC4gQWxzbyBkb24ndAorICAgICAgICAgKiB3cml0ZSBhbiBlbXB0eSBibG9jayB3aGVuIGZsdXNoaW5nIC0tIGRlZmxhdGUoKSBkb2VzIHRoYXQuCisgICAgICAgICAqLworICAgICAgICBpZiAobGVuIDwgbWluX2Jsb2NrICYmICgobGVuID09IDAgJiYgZmx1c2ggIT0gWl9GSU5JU0gpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoID09IFpfTk9fRkxVU0ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICE9IGxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBNYWtlIGEgZHVtbXkgc3RvcmVkIGJsb2NrIGluIHBlbmRpbmcgdG8gZ2V0IHRoZSBoZWFkZXIgYnl0ZXMsCisgICAgICAgICAqIGluY2x1ZGluZyBhbnkgcGVuZGluZyBiaXRzLiBUaGlzIGFsc28gdXBkYXRlcyB0aGUgZGVidWdnaW5nIGNvdW50cy4KKyAgICAgICAgICovCisgICAgICAgIGxhc3QgPSBmbHVzaCA9PSBaX0ZJTklTSCAmJiBsZW4gPT0gbGVmdCArIHMtPnN0cm0tPmF2YWlsX2luID8gMSA6IDA7CisgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgKGNoYXIgKikwLCAwTCwgbGFzdCk7CisKKyAgICAgICAgLyogUmVwbGFjZSB0aGUgbGVuZ3RocyBpbiB0aGUgZHVtbXkgc3RvcmVkIGJsb2NrIHdpdGggbGVuLiAqLworICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gNF0gPSBsZW47CisgICAgICAgIHMtPnBlbmRpbmdfYnVmW3MtPnBlbmRpbmcgLSAzXSA9IGxlbiA+PiA4OworICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gMl0gPSB+bGVuOworICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gMV0gPSB+bGVuID4+IDg7CisKKyAgICAgICAgLyogV3JpdGUgdGhlIHN0b3JlZCBibG9jayBoZWFkZXIgYnl0ZXMuICovCisgICAgICAgIGZsdXNoX3BlbmRpbmcocy0+c3RybSk7CisKKyNpZmRlZiBaTElCX0RFQlVHCisgICAgICAgIC8qIFVwZGF0ZSBkZWJ1Z2dpbmcgY291bnRzIGZvciB0aGUgZGF0YSBhYm91dCB0byBiZSBjb3BpZWQuICovCisgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IGxlbiA8PCAzOworICAgICAgICBzLT5iaXRzX3NlbnQgKz0gbGVuIDw8IDM7CisjZW5kaWYKKworICAgICAgICAvKiBDb3B5IHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSB3aW5kb3cgdG8gbmV4dF9vdXQuICovCisgICAgICAgIGlmIChsZWZ0KSB7CisgICAgICAgICAgICBpZiAobGVmdCA+IGxlbikKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbGVuOworICAgICAgICAgICAgem1lbWNweShzLT5zdHJtLT5uZXh0X291dCwgcy0+d2luZG93ICsgcy0+YmxvY2tfc3RhcnQsIGxlZnQpOworICAgICAgICAgICAgcy0+c3RybS0+bmV4dF9vdXQgKz0gbGVmdDsKKyAgICAgICAgICAgIHMtPnN0cm0tPmF2YWlsX291dCAtPSBsZWZ0OworICAgICAgICAgICAgcy0+c3RybS0+dG90YWxfb3V0ICs9IGxlZnQ7CisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCArPSBsZWZ0OworICAgICAgICAgICAgbGVuIC09IGxlZnQ7CiAgICAgICAgIH0KKworICAgICAgICAvKiBDb3B5IHVuY29tcHJlc3NlZCBieXRlcyBkaXJlY3RseSBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQsIHVwZGF0aW5nCisgICAgICAgICAqIHRoZSBjaGVjayB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChsZW4pIHsKKyAgICAgICAgICAgIHJlYWRfYnVmKHMtPnN0cm0sIHMtPnN0cm0tPm5leHRfb3V0LCBsZW4pOworICAgICAgICAgICAgcy0+c3RybS0+bmV4dF9vdXQgKz0gbGVuOworICAgICAgICAgICAgcy0+c3RybS0+YXZhaWxfb3V0IC09IGxlbjsKKyAgICAgICAgICAgIHMtPnN0cm0tPnRvdGFsX291dCArPSBsZW47CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChsYXN0ID09IDApOworCisgICAgLyogVXBkYXRlIHRoZSBzbGlkaW5nIHdpbmRvdyB3aXRoIHRoZSBsYXN0IHMtPndfc2l6ZSBieXRlcyBvZiB0aGUgY29waWVkCisgICAgICogZGF0YSwgb3IgYXBwZW5kIGFsbCBvZiB0aGUgY29waWVkIGRhdGEgdG8gdGhlIGV4aXN0aW5nIHdpbmRvdyBpZiBsZXNzCisgICAgICogdGhhbiBzLT53X3NpemUgYnl0ZXMgd2VyZSBjb3BpZWQuIEFsc28gdXBkYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8KKyAgICAgKiBpbnNlcnQgaW4gdGhlIGhhc2ggdGFibGVzLCBpbiB0aGUgZXZlbnQgdGhhdCBkZWZsYXRlUGFyYW1zKCkgc3dpdGNoZXMgdG8KKyAgICAgKiBhIG5vbi16ZXJvIGNvbXByZXNzaW9uIGxldmVsLgorICAgICAqLworICAgIHVzZWQgLT0gcy0+c3RybS0+YXZhaWxfaW47ICAgICAgLyogbnVtYmVyIG9mIGlucHV0IGJ5dGVzIGRpcmVjdGx5IGNvcGllZCAqLworICAgIGlmICh1c2VkKSB7CisgICAgICAgIC8qIElmIGFueSBpbnB1dCB3YXMgdXNlZCwgdGhlbiBubyB1bnVzZWQgaW5wdXQgcmVtYWlucyBpbiB0aGUgd2luZG93LAorICAgICAgICAgKiB0aGVyZWZvcmUgcy0+YmxvY2tfc3RhcnQgPT0gcy0+c3Ryc3RhcnQuCisgICAgICAgICAqLworICAgICAgICBpZiAodXNlZCA+PSBzLT53X3NpemUpIHsgICAgLyogc3VwcGxhbnQgdGhlIHByZXZpb3VzIGhpc3RvcnkgKi8KKyAgICAgICAgICAgIHMtPm1hdGNoZXMgPSAyOyAgICAgICAgIC8qIGNsZWFyIGhhc2ggKi8KKyAgICAgICAgICAgIHptZW1jcHkocy0+d2luZG93LCBzLT5zdHJtLT5uZXh0X2luIC0gcy0+d19zaXplLCBzLT53X3NpemUpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSBzLT53X3NpemU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAocy0+d2luZG93X3NpemUgLSBzLT5zdHJzdGFydCA8PSB1c2VkKSB7CisgICAgICAgICAgICAgICAgLyogU2xpZGUgdGhlIHdpbmRvdyBkb3duLiAqLworICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0IC09IHMtPndfc2l6ZTsKKyAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoZXMgPCAyKQorICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaGVzKys7ICAgLyogYWRkIGEgcGVuZGluZyBzbGlkZV9oYXNoKCkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptZW1jcHkocy0+d2luZG93ICsgcy0+c3Ryc3RhcnQsIHMtPnN0cm0tPm5leHRfaW4gLSB1c2VkLCB1c2VkKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ICs9IHVzZWQ7CisgICAgICAgIH0KKyAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSBzLT5zdHJzdGFydDsKKyAgICAgICAgcy0+aW5zZXJ0ICs9IE1JTih1c2VkLCBzLT53X3NpemUgLSBzLT5pbnNlcnQpOwogICAgIH0KLSAgICBzLT5pbnNlcnQgPSAwOwotICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgewotICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICBpZiAocy0+aGlnaF93YXRlciA8IHMtPnN0cnN0YXJ0KQorICAgICAgICBzLT5oaWdoX3dhdGVyID0gcy0+c3Ryc3RhcnQ7CisKKyAgICAvKiBJZiB0aGUgbGFzdCBibG9jayB3YXMgd3JpdHRlbiB0byBuZXh0X291dCwgdGhlbiBkb25lLiAqLworICAgIGlmIChsYXN0KQogICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisKKyAgICAvKiBJZiBmbHVzaGluZyBhbmQgYWxsIGlucHV0IGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGRvbmUuICovCisgICAgaWYgKGZsdXNoICE9IFpfTk9fRkxVU0ggJiYgZmx1c2ggIT0gWl9GSU5JU0ggJiYKKyAgICAgICAgcy0+c3RybS0+YXZhaWxfaW4gPT0gMCAmJiAobG9uZylzLT5zdHJzdGFydCA9PSBzLT5ibG9ja19zdGFydCkKKyAgICAgICAgcmV0dXJuIGJsb2NrX2RvbmU7CisKKyAgICAvKiBGaWxsIHRoZSB3aW5kb3cgd2l0aCBhbnkgcmVtYWluaW5nIGlucHV0LiAqLworICAgIGhhdmUgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPnN0cnN0YXJ0IC0gMTsKKyAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPiBoYXZlICYmIHMtPmJsb2NrX3N0YXJ0ID49IChsb25nKXMtPndfc2l6ZSkgeworICAgICAgICAvKiBTbGlkZSB0aGUgd2luZG93IGRvd24uICovCisgICAgICAgIHMtPmJsb2NrX3N0YXJ0IC09IHMtPndfc2l6ZTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgLT0gcy0+d19zaXplOworICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7CisgICAgICAgIGlmIChzLT5tYXRjaGVzIDwgMikKKyAgICAgICAgICAgIHMtPm1hdGNoZXMrKzsgICAgICAgICAgIC8qIGFkZCBhIHBlbmRpbmcgc2xpZGVfaGFzaCgpICovCisgICAgICAgIGhhdmUgKz0gcy0+d19zaXplOyAgICAgICAgICAvKiBtb3JlIHNwYWNlIG5vdyAqLwogICAgIH0KLSAgICBpZiAoKGxvbmcpcy0+c3Ryc3RhcnQgPiBzLT5ibG9ja19zdGFydCkKLSAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7Ci0gICAgcmV0dXJuIGJsb2NrX2RvbmU7CisgICAgaWYgKGhhdmUgPiBzLT5zdHJtLT5hdmFpbF9pbikKKyAgICAgICAgaGF2ZSA9IHMtPnN0cm0tPmF2YWlsX2luOworICAgIGlmIChoYXZlKSB7CisgICAgICAgIHJlYWRfYnVmKHMtPnN0cm0sIHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0LCBoYXZlKTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgKz0gaGF2ZTsKKyAgICB9CisgICAgaWYgKHMtPmhpZ2hfd2F0ZXIgPCBzLT5zdHJzdGFydCkKKyAgICAgICAgcy0+aGlnaF93YXRlciA9IHMtPnN0cnN0YXJ0OworCisgICAgLyogVGhlcmUgd2FzIG5vdCBlbm91Z2ggYXZhaWxfb3V0IHRvIHdyaXRlIGEgY29tcGxldGUgd29ydGh5IG9yIGZsdXNoZWQKKyAgICAgKiBzdG9yZWQgYmxvY2sgdG8gbmV4dF9vdXQuIFdyaXRlIGEgc3RvcmVkIGJsb2NrIHRvIHBlbmRpbmcgaW5zdGVhZCwgaWYgd2UKKyAgICAgKiBoYXZlIGVub3VnaCBpbnB1dCBmb3IgYSB3b3J0aHkgYmxvY2ssIG9yIGlmIGZsdXNoaW5nIGFuZCB0aGVyZSBpcyBlbm91Z2gKKyAgICAgKiByb29tIGZvciB0aGUgcmVtYWluaW5nIGlucHV0IGFzIGEgc3RvcmVkIGJsb2NrIGluIHRoZSBwZW5kaW5nIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBoYXZlID0gKHMtPmJpX3ZhbGlkICsgNDIpID4+IDM7ICAgICAgICAgLyogbnVtYmVyIG9mIGhlYWRlciBieXRlcyAqLworICAgICAgICAvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBpbiBwZW5kaW5nOiAqLworICAgIGhhdmUgPSBNSU4ocy0+cGVuZGluZ19idWZfc2l6ZSAtIGhhdmUsIE1BWF9TVE9SRUQpOworICAgIG1pbl9ibG9jayA9IE1JTihoYXZlLCBzLT53X3NpemUpOworICAgIGxlZnQgPSBzLT5zdHJzdGFydCAtIHMtPmJsb2NrX3N0YXJ0OworICAgIGlmIChsZWZ0ID49IG1pbl9ibG9jayB8fAorICAgICAgICAoKGxlZnQgfHwgZmx1c2ggPT0gWl9GSU5JU0gpICYmIGZsdXNoICE9IFpfTk9fRkxVU0ggJiYKKyAgICAgICAgIHMtPnN0cm0tPmF2YWlsX2luID09IDAgJiYgbGVmdCA8PSBoYXZlKSkgeworICAgICAgICBsZW4gPSBNSU4obGVmdCwgaGF2ZSk7CisgICAgICAgIGxhc3QgPSBmbHVzaCA9PSBaX0ZJTklTSCAmJiBzLT5zdHJtLT5hdmFpbF9pbiA9PSAwICYmCisgICAgICAgICAgICAgICBsZW4gPT0gbGVmdCA/IDEgOiAwOworICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIChjaGFyZiAqKXMtPndpbmRvdyArIHMtPmJsb2NrX3N0YXJ0LCBsZW4sIGxhc3QpOworICAgICAgICBzLT5ibG9ja19zdGFydCArPSBsZW47CisgICAgICAgIGZsdXNoX3BlbmRpbmcocy0+c3RybSk7CisgICAgfQorCisgICAgLyogV2UndmUgZG9uZSBhbGwgd2UgY2FuIHdpdGggdGhlIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0LiAqLworICAgIHJldHVybiBsYXN0ID8gZmluaXNoX3N0YXJ0ZWQgOiBuZWVkX21vcmU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTg5Miw3ICsyMDg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpOwotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChpbnQpKHN0cmVuZCAtIHNjYW4pOworICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtICh1SW50KShzdHJlbmQgLSBzY2FuKTsKICAgICAgICAgICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID4gcy0+bG9va2FoZWFkKQogICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5sb29rYWhlYWQ7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZGVmbGF0ZS5oIGIvc3JjL2RlZmxhdGUuaAppbmRleCBjZTAyOTllLi4yM2VjZGQzIDEwMDY0NAotLS0gYS9zcmMvZGVmbGF0ZS5oCisrKyBiL3NyYy9kZWZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmggLS0gaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC01MSwxMyArNTEsMTYgQEAKICNkZWZpbmUgQnVmX3NpemUgMTYKIC8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi8KIAotI2RlZmluZSBJTklUX1NUQVRFICAgIDQyCi0jZGVmaW5lIEVYVFJBX1NUQVRFICAgNjkKLSNkZWZpbmUgTkFNRV9TVEFURSAgICA3MwotI2RlZmluZSBDT01NRU5UX1NUQVRFIDkxCi0jZGVmaW5lIEhDUkNfU1RBVEUgICAxMDMKLSNkZWZpbmUgQlVTWV9TVEFURSAgIDExMwotI2RlZmluZSBGSU5JU0hfU1RBVEUgNjY2CisjZGVmaW5lIElOSVRfU1RBVEUgICAgNDIgICAgLyogemxpYiBoZWFkZXIgLT4gQlVTWV9TVEFURSAqLworI2lmZGVmIEdaSVAKKyMgIGRlZmluZSBHWklQX1NUQVRFICA1NyAgICAvKiBnemlwIGhlYWRlciAtPiBCVVNZX1NUQVRFIHwgRVhUUkFfU1RBVEUgKi8KKyNlbmRpZgorI2RlZmluZSBFWFRSQV9TVEFURSAgIDY5ICAgIC8qIGd6aXAgZXh0cmEgYmxvY2sgLT4gTkFNRV9TVEFURSAqLworI2RlZmluZSBOQU1FX1NUQVRFICAgIDczICAgIC8qIGd6aXAgZmlsZSBuYW1lIC0+IENPTU1FTlRfU1RBVEUgKi8KKyNkZWZpbmUgQ09NTUVOVF9TVEFURSA5MSAgICAvKiBnemlwIGNvbW1lbnQgLT4gSENSQ19TVEFURSAqLworI2RlZmluZSBIQ1JDX1NUQVRFICAgMTAzICAgIC8qIGd6aXAgaGVhZGVyIENSQyAtPiBCVVNZX1NUQVRFICovCisjZGVmaW5lIEJVU1lfU1RBVEUgICAxMTMgICAgLyogZGVmbGF0ZSAtPiBGSU5JU0hfU1RBVEUgKi8KKyNkZWZpbmUgRklOSVNIX1NUQVRFIDY2NiAgICAvKiBzdHJlYW0gY29tcGxldGUgKi8KIC8qIFN0cmVhbSBzdGF0dXMgKi8KIAogCkBAIC04Myw3ICs4Niw3IEBACiB0eXBlZGVmIHN0cnVjdCB0cmVlX2Rlc2NfcyB7CiAgICAgY3RfZGF0YSAqZHluX3RyZWU7ICAgICAgICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovCiAgICAgaW50ICAgICBtYXhfY29kZTsgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KLSAgICBzdGF0aWNfdHJlZV9kZXNjICpzdGF0X2Rlc2M7IC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB0cmVlICovCisgICAgY29uc3Qgc3RhdGljX3RyZWVfZGVzYyAqc3RhdF9kZXNjOyAgLyogdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHRyZWUgKi8KIH0gRkFSIHRyZWVfZGVzYzsKIAogdHlwZWRlZiB1c2ggUG9zOwpAQCAtMTAwLDEwICsxMDMsMTAgQEAKICAgICBCeXRlZiAqcGVuZGluZ19idWY7ICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqLwogICAgIHVsZyAgIHBlbmRpbmdfYnVmX3NpemU7IC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi8KICAgICBCeXRlZiAqcGVuZGluZ19vdXQ7ICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqLwotICAgIHVJbnQgICBwZW5kaW5nOyAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqLworICAgIHVsZyAgIHBlbmRpbmc7ICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqLwogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwotICAgIHVJbnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCisgICAgdWxnICAgZ3ppbmRleDsgICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi8KICAgICBCeXRlICBtZXRob2Q7ICAgICAgICAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqLwogICAgIGludCAgIGxhc3RfZmx1c2g7ICAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi8KIApAQCAtMjQ5LDcgKzI1Miw3IEBACiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwogICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgdWxnIGNvbXByZXNzZWRfbGVuOyAvKiB0b3RhbCBiaXQgbGVuZ3RoIG9mIGNvbXByZXNzZWQgZmlsZSBtb2QgMl4zMiAqLwogICAgIHVsZyBiaXRzX3NlbnQ7ICAgICAgLyogYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGRhdGEgc2VudCBtb2QgMl4zMiAqLwogI2VuZGlmCkBAIC0yNzUsNyArMjc4LDcgQEAKIC8qIE91dHB1dCBhIGJ5dGUgb24gdGhlIHN0cmVhbS4KICAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ19idWYuCiAgKi8KLSNkZWZpbmUgcHV0X2J5dGUocywgYykge3MtPnBlbmRpbmdfYnVmW3MtPnBlbmRpbmcrK10gPSAoYyk7fQorI2RlZmluZSBwdXRfYnl0ZShzLCBjKSB7cy0+cGVuZGluZ19idWZbcy0+cGVuZGluZysrXSA9IChCeXRlZikoYyk7fQogCiAKICNkZWZpbmUgTUlOX0xPT0tBSEVBRCAoTUFYX01BVENIK01JTl9NQVRDSCsxKQpAQCAtMzA5LDcgKzMxMiw3IEBACiAgKiB1c2VkLgogICovCiAKLSNpZm5kZWYgREVCVUcKKyNpZm5kZWYgWkxJQl9ERUJVRwogLyogSW5saW5lIHZlcnNpb25zIG9mIF90cl90YWxseSBmb3Igc3BlZWQ6ICovCiAKICNpZiBkZWZpbmVkKEdFTl9UUkVFU19IKSB8fCAhZGVmaW5lZChTVERDKQpAQCAtMzI4LDggKzMzMSw4IEBACiAgICAgZmx1c2ggPSAocy0+bGFzdF9saXQgPT0gcy0+bGl0X2J1ZnNpemUtMSk7IFwKICAgIH0KICMgZGVmaW5lIF90cl90YWxseV9kaXN0KHMsIGRpc3RhbmNlLCBsZW5ndGgsIGZsdXNoKSBcCi0gIHsgdWNoIGxlbiA9IChsZW5ndGgpOyBcCi0gICAgdXNoIGRpc3QgPSAoZGlzdGFuY2UpOyBcCisgIHsgdWNoIGxlbiA9ICh1Y2gpKGxlbmd0aCk7IFwKKyAgICB1c2ggZGlzdCA9ICh1c2gpKGRpc3RhbmNlKTsgXAogICAgIHMtPmRfYnVmW3MtPmxhc3RfbGl0XSA9IGRpc3Q7IFwKICAgICBzLT5sX2J1ZltzLT5sYXN0X2xpdCsrXSA9IGxlbjsgXAogICAgIGRpc3QtLTsgXApkaWZmIC0tZ2l0IGEvc3JjL2V4YW1wbGVzL2d1bi5jIGIvc3JjL2V4YW1wbGVzL2d1bi5jCmluZGV4IDg5ZTQ4NGYuLmJlNDRmYTUgMTAwNjQ0Ci0tLSBhL3NyYy9leGFtcGxlcy9ndW4uYworKysgYi9zcmMvZXhhbXBsZXMvZ3VuLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgIGVuZC1vZi1maWxlLCB0aGV5IGNhbm5vdCBiZSBjb25jYW50ZW5hdGVkLiAgSWYgYSBVbml4IGNvbXByZXNzIHN0cmVhbSBpcwogICAgZW5jb3VudGVyZWQgaW4gYW4gaW5wdXQgZmlsZSwgaXQgaXMgdGhlIGxhc3Qgc3RyZWFtIGluIHRoYXQgZmlsZS4KIAotICAgTGlrZSBndW56aXAgYW5kIHVuY29tcHJlc3MsIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIG9yaWduYWwgY29tcHJlc3NlZAorICAgTGlrZSBndW56aXAgYW5kIHVuY29tcHJlc3MsIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIG9yaWdpbmFsIGNvbXByZXNzZWQKICAgIGZpbGUgYXJlIG1haW50YWluZWQgaW4gdGhlIGZpbmFsIHVuY29tcHJlc3NlZCBmaWxlLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhlCiAgICB1c2VyIHBlcm1pc3Npb25zIGFsbG93IGl0LgogCmRpZmYgLS1naXQgYS9zcmMvZXhhbXBsZXMvZ3psb2cuYyBiL3NyYy9leGFtcGxlcy9nemxvZy5jCmluZGV4IDkyMmY4NzguLmI4YzI5MjcgMTAwNjQ0Ci0tLSBhL3NyYy9leGFtcGxlcy9nemxvZy5jCisrKyBiL3NyYy9leGFtcGxlcy9nemxvZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIGd6bG9nLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAxMiBNYXJrIEFkbGVyLCBhbGwgcmlnaHRzIHJlc2VydmVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgsIDIwMTIsIDIwMTYgTWFyayBBZGxlciwgYWxsIHJpZ2h0cyByZXNlcnZlZAogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGd6bG9nLmgKICAqIHZlcnNpb24gMi4yLCAxNCBBdWcgMjAxMgogICovCkBAIC0yNDMsNyArMjQzLDcgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKIAogLyogTWFjcm8gZm9yIGRlYnVnZ2luZyB0byBkZXRlcm1pbmlzdGljYWxseSBmb3JjZSByZWNvdmVyeSBvcGVyYXRpb25zICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBHWkxPR19ERUJVRwogICAgICNpbmNsdWRlIDxzZXRqbXAuaD4gICAgICAgICAvKiBsb25nam1wICovCiAgICAgam1wX2J1ZiBnemxvZ19qdW1wOyAgICAgICAgIC8qIHdoZXJlIHRvIGdvIGJhY2sgdG8gKi8KICAgICBpbnQgZ3psb2dfYmFpbCA9IDA7ICAgICAgICAgLyogd2hpY2ggcG9pbnQgdG8gYmFpbCBhdCAoMS4uOCkgKi8KZGlmZiAtLWdpdCBhL3NyYy9leGFtcGxlcy96cmFuLmMgYi9zcmMvZXhhbXBsZXMvenJhbi5jCmluZGV4IDI3OGY5YWQuLjRmZWM2NTkgMTAwNjQ0Ci0tLSBhL3NyYy9leGFtcGxlcy96cmFuLmMKKysrIGIvc3JjL2V4YW1wbGVzL3pyYW4uYwpAQCAtMjcsNyArMjcsNyBAQAogICAgZ3Jvd3MgYXMgbmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSBwb2ludHMuCiAKICAgIFRvIHVzZSB0aGUgaW5kZXgsIGFuIG9mZnNldCBpbiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaXMgcHJvdmlkZWQsIGZvciB3aGljaAotICAgdGhlIGxhdGVzdCBhY2NlZXMgcG9pbnQgYXQgb3IgcHJlY2VkaW5nIHRoYXQgb2Zmc2V0IGlzIGxvY2F0ZWQgaW4gdGhlIGluZGV4LgorICAgdGhlIGxhdGVzdCBhY2Nlc3MgcG9pbnQgYXQgb3IgcHJlY2VkaW5nIHRoYXQgb2Zmc2V0IGlzIGxvY2F0ZWQgaW4gdGhlIGluZGV4LgogICAgVGhlIGlucHV0IGZpbGUgaXMgcG9zaXRpb25lZCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIGluIHRoZSBpbmRleCwgYW5kIGlmCiAgICBuZWNlc3NhcnkgdGhlIGZpcnN0IGZldyBiaXRzIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBmaWxlLgogICAgaW5mbGF0ZSBpcyBpbml0aWFsaXplZCB3aXRoIHRob3NlIGJpdHMgYW5kIHRoZSAzMksgb2YgdW5jb21wcmVzc2VkIGRhdGEsIGFuZApkaWZmIC0tZ2l0IGEvc3JjL2d6Z3V0cy5oIGIvc3JjL2d6Z3V0cy5oCmluZGV4IGQ4NzY1OWQuLjk5MGE0ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9nemd1dHMuaAorKysgYi9zcmMvZ3pndXRzLmgKQEAgLTEsNSArMSw1IEBACiAvKiBnemd1dHMuaCAtLSB6bGliIGludGVybmFsIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgZ3oqIG9wZXJhdGlvbnMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTYgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI1LDYgKzI1LDEwIEBACiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICMgIGluY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorIyAgZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKICNpZmRlZiBfV0lOMzIKQEAgLTM1LDYgKzM5LDEwIEBACiAjICBpbmNsdWRlIDxpby5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgZGVmaW5lIFdJREVDSEFSCisjZW5kaWYKKwogI2lmZGVmIFdJTkFQSV9GQU1JTFkKICMgIGRlZmluZSBvcGVuIF9vcGVuCiAjICBkZWZpbmUgcmVhZCBfcmVhZApAQCAtOTUsMTggKzEwMywxOSBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0vKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVpcmVkIGluIEM5OSwgeWV0IHN0aWxsIG5vdCBzdXBwb3J0ZWQgYnkKLSAgIE1pY3Jvc29mdCBtb3JlIHRoYW4gYSBkZWNhZGUgbGF0ZXIhKSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZSBudWxsCi0gICB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorLyogdW5saWtlIHNucHJpbnRmICh3aGljaCBpcyByZXF1aXJlZCBpbiBDOTkpLCBfc25wcmludGYgZG9lcyBub3QgZ3VhcmFudGVlCisgICBudWxsIHRlcm1pbmF0aW9uIG9mIHRoZSByZXN1bHQgLS0gaG93ZXZlciB0aGlzIGlzIG9ubHkgdXNlZCBpbiBnemxpYi5jIHdoZXJlCiAgICB0aGUgcmVzdWx0IGlzIGFzc3VyZWQgdG8gZml0IGluIHRoZSBzcGFjZSBwcm92aWRlZCAqLwotI2lmZGVmIF9NU0NfVkVSCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTAwCiAjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKIAogI2lmbmRlZiBsb2NhbAogIyAgZGVmaW5lIGxvY2FsIHN0YXRpYwogI2VuZGlmCi0vKiBjb21waWxlIHdpdGggLURsb2NhbCBpZiB5b3VyIGRlYnVnZ2VyIGNhbid0IGZpbmQgc3RhdGljIHN5bWJvbHMgKi8KKy8qIHNpbmNlICJzdGF0aWMiIGlzIHVzZWQgdG8gbWVhbiB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgdGhpbmdzIGluIEMsIHdlCisgICBkZWZpbmUgImxvY2FsIiBmb3IgdGhlIG5vbi1zdGF0aWMgbWVhbmluZyBvZiAic3RhdGljIiwgZm9yIHJlYWRhYmlsaXR5CisgICAoY29tcGlsZSB3aXRoIC1EbG9jYWwgaWYgeW91ciBkZWJ1Z2dlciBjYW4ndCBmaW5kIHN0YXRpYyBzeW1ib2xzKSAqLwogCiAvKiBneiogZnVuY3Rpb25zIGFsd2F5cyB1c2UgbGlicmFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLwogI2lmbmRlZiBTVERDCkBAIC0xNzAsNyArMTc5LDcgQEAKICAgICBjaGFyICpwYXRoOyAgICAgICAgICAgICAvKiBwYXRoIG9yIGZkIGZvciBlcnJvciBtZXNzYWdlcyAqLwogICAgIHVuc2lnbmVkIHNpemU7ICAgICAgICAgIC8qIGJ1ZmZlciBzaXplLCB6ZXJvIGlmIG5vdCBhbGxvY2F0ZWQgeWV0ICovCiAgICAgdW5zaWduZWQgd2FudDsgICAgICAgICAgLyogcmVxdWVzdGVkIGJ1ZmZlciBzaXplLCBkZWZhdWx0IGlzIEdaQlVGU0laRSAqLwotICAgIHVuc2lnbmVkIGNoYXIgKmluOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGNoYXIgKmluOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gd3JpdGluZykgKi8KICAgICB1bnNpZ25lZCBjaGFyICpvdXQ7ICAgICAvKiBvdXRwdXQgYnVmZmVyIChkb3VibGUtc2l6ZWQgd2hlbiByZWFkaW5nKSAqLwogICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIDAgaWYgcHJvY2Vzc2luZyBnemlwLCAxIGlmIHRyYW5zcGFyZW50ICovCiAgICAgICAgIC8qIGp1c3QgZm9yIHJlYWRpbmcgKi8KZGlmZiAtLWdpdCBhL3NyYy9nemxpYi5jIGIvc3JjL2d6bGliLmMKaW5kZXggZmFlMjAyZS4uNDEwNWU2YSAxMDA2NDQKLS0tIGEvc3JjL2d6bGliLmMKKysrIGIvc3JjL2d6bGliLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIGd6bGliLmMgLS0gemxpYiBmdW5jdGlvbnMgY29tbW9uIHRvIHJlYWRpbmcgYW5kIHdyaXRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAjaW5jbHVkZSAiZ3pndXRzLmgiCiAKLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQogIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAogI2Vsc2UKICNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMApAQCAtOTQsNyArOTQsNyBAQAogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwotICAgIHNpemVfdCBsZW47CisgICAgel9zaXplX3QgbGVuOwogICAgIGludCBvZmxhZzsKICNpZmRlZiBPX0NMT0VYRUMKICAgICBpbnQgY2xvZXhlYyA9IDA7CkBAIC0xODgsMTAgKzE4OCwxMCBAQAogICAgIH0KIAogICAgIC8qIHNhdmUgdGhlIHBhdGggbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSNpZmRlZiBfV0lOMzIKKyNpZmRlZiBXSURFQ0hBUgogICAgIGlmIChmZCA9PSAtMikgewogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCBwYXRoLCAwKTsKLSAgICAgICAgaWYgKGxlbiA9PSAoc2l6ZV90KS0xKQorICAgICAgICBpZiAobGVuID09ICh6X3NpemVfdCktMSkKICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgfQogICAgIGVsc2UKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICBmcmVlKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotI2lmZGVmIF9XSU4zMgorI2lmZGVmIFdJREVDSEFSCiAgICAgaWYgKGZkID09IC0yKQogICAgICAgICBpZiAobGVuKQogICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOwpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgZWxzZQogI2VuZGlmCiAjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKLSAgICAgICAgc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisgICAgICAgICh2b2lkKXNucHJpbnRmKHN0YXRlLT5wYXRoLCBsZW4gKyAxLCAiJXMiLCAoY29uc3QgY2hhciAqKXBhdGgpOwogI2Vsc2UKICAgICAgICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRoKTsKICNlbmRpZgpAQCAtMjM5LDcgKzIzOSw3IEBACiAKICAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzIChvciBqdXN0IHVzZSBmZCkgKi8KICAgICBzdGF0ZS0+ZmQgPSBmZCA+IC0xID8gZmQgOiAoCi0jaWZkZWYgX1dJTjMyCisjaWZkZWYgV0lERUNIQVIKICAgICAgICAgZmQgPT0gLTIgPyBfd29wZW4ocGF0aCwgb2ZsYWcsIDA2NjYpIDoKICNlbmRpZgogICAgICAgICBvcGVuKChjb25zdCBjaGFyICopcGF0aCwgb2ZsYWcsIDA2NjYpKTsKQEAgLTI0OCw4ICsyNDgsMTAgQEAKICAgICAgICAgZnJlZShzdGF0ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfQVBQRU5EKQorICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9BUFBFTkQpIHsKKyAgICAgICAgTFNFRUsoc3RhdGUtPmZkLCAwLCBTRUVLX0VORCk7ICAvKiBzbyBnem9mZnNldCgpIGlzIGNvcnJlY3QgKi8KICAgICAgICAgc3RhdGUtPm1vZGUgPSBHWl9XUklURTsgICAgICAgICAvKiBzaW1wbGlmeSBsYXRlciBjaGVja3MgKi8KKyAgICB9CiAKICAgICAvKiBzYXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGZvciByZXdpbmRpbmcgKG9ubHkgaWYgcmVhZGluZykgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewpAQCAtMjkxLDcgKzI5Myw3IEBACiAgICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gKGNoYXIgKiltYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0gICAgc25wcmludGYocGF0aCwgNyArIDMgKiBzaXplb2YoaW50KSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAodm9pZClzbnByaW50ZihwYXRoLCA3ICsgMyAqIHNpemVvZihpbnQpLCAiPGZkOiVkPiIsIGZkKTsKICNlbHNlCiAgICAgc3ByaW50ZihwYXRoLCAiPGZkOiVkPiIsIGZkKTsgICAvKiBmb3IgZGVidWdnaW5nICovCiAjZW5kaWYKQEAgLTMwMSw3ICszMDMsNyBAQAogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCi0jaWZkZWYgX1dJTjMyCisjaWZkZWYgV0lERUNIQVIKIGd6RmlsZSBaRVhQT1JUIGd6b3Blbl93KHBhdGgsIG1vZGUpCiAgICAgY29uc3Qgd2NoYXJfdCAqcGF0aDsKICAgICBjb25zdCBjaGFyICptb2RlOwpAQCAtMzI5LDYgKzMzMSw4IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIGFuZCBzZXQgcmVxdWVzdGVkIHNpemUgKi8KKyAgICBpZiAoKHNpemUgPDwgMSkgPCBzaXplKQorICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAvKiBuZWVkIHRvIGJlIGFibGUgdG8gZG91YmxlIGl0ICovCiAgICAgaWYgKHNpemUgPCAyKQogICAgICAgICBzaXplID0gMjsgICAgICAgICAgICAgICAvKiBuZWVkIHR3byBieXRlcyB0byBjaGVjayBtYWdpYyBoZWFkZXIgKi8KICAgICBzdGF0ZS0+d2FudCA9IHNpemU7CkBAIC02MDQsMTQgKzYwOCwxMyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0gICAgc25wcmludGYoc3RhdGUtPm1zZywgc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMywKLSAgICAgICAgICAgICAiJXMlcyVzIiwgc3RhdGUtPnBhdGgsICI6ICIsIG1zZyk7CisgICAgKHZvaWQpc25wcmludGYoc3RhdGUtPm1zZywgc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMywKKyAgICAgICAgICAgICAgICAgICAiJXMlcyVzIiwgc3RhdGUtPnBhdGgsICI6ICIsIG1zZyk7CiAjZWxzZQogICAgIHN0cmNweShzdGF0ZS0+bXNnLCBzdGF0ZS0+cGF0aCk7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csICI6ICIpOwogICAgIHN0cmNhdChzdGF0ZS0+bXNnLCBtc2cpOwogI2VuZGlmCi0gICAgcmV0dXJuOwogfQogCiAjaWZuZGVmIElOVF9NQVgKZGlmZiAtLWdpdCBhL3NyYy9nenJlYWQuYyBiL3NyYy9nenJlYWQuYwppbmRleCBiZjQ1MzhlLi45NTZiOTFlIDEwMDY0NAotLS0gYS9zcmMvZ3pyZWFkLmMKKysrIGIvc3JjL2d6cmVhZC5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTIsNiArMTIsNyBAQAogbG9jYWwgaW50IGd6X2RlY29tcCBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfZmV0Y2ggT0YoKGd6X3N0YXRlcCkpOwogbG9jYWwgaW50IGd6X3NraXAgT0YoKGd6X3N0YXRlcCwgel9vZmY2NF90KSk7Citsb2NhbCB6X3NpemVfdCBnel9yZWFkIE9GKChnel9zdGF0ZXAsIHZvaWRwLCB6X3NpemVfdCkpOwogCiAvKiBVc2UgcmVhZCgpIHRvIGxvYWQgYSBidWZmZXIgLS0gcmV0dXJuIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIFJlYWQgZnJvbQogICAgc3RhdGUtPmZkLCBhbmQgdXBkYXRlIHN0YXRlLT5lb2YsIHN0YXRlLT5lcnIsIGFuZCBzdGF0ZS0+bXNnIGFzIGFwcHJvcHJpYXRlLgpAQCAtMjQsMTMgKzI1LDE3IEBACiAgICAgdW5zaWduZWQgKmhhdmU7CiB7CiAgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnZXQsIG1heCA9ICgodW5zaWduZWQpLTEgPj4gMikgKyAxOwogCiAgICAgKmhhdmUgPSAwOwogICAgIGRvIHsKLSAgICAgICAgcmV0ID0gcmVhZChzdGF0ZS0+ZmQsIGJ1ZiArICpoYXZlLCBsZW4gLSAqaGF2ZSk7CisgICAgICAgIGdldCA9IGxlbiAtICpoYXZlOworICAgICAgICBpZiAoZ2V0ID4gbWF4KQorICAgICAgICAgICAgZ2V0ID0gbWF4OworICAgICAgICByZXQgPSByZWFkKHN0YXRlLT5mZCwgYnVmICsgKmhhdmUsIGdldCk7CiAgICAgICAgIGlmIChyZXQgPD0gMCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAqaGF2ZSArPSByZXQ7CisgICAgICAgICpoYXZlICs9ICh1bnNpZ25lZClyZXQ7CiAgICAgfSB3aGlsZSAoKmhhdmUgPCBsZW4pOwogICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CkBAIC05NCwxMCArOTksOCBAQAogICAgICAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CiAgICAgICAgIHN0YXRlLT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKICAgICAgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5pbiAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTI4NCwzMyArMjg3LDE3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIC0tIHNlZSB6bGliLmggLS0gKi8KLWludCBaRVhQT1JUIGd6cmVhZChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIHVuc2lnbmVkIGdvdCwgbjsKKy8qIFJlYWQgbGVuIGJ5dGVzIGludG8gYnVmIGZyb20gZmlsZSwgb3IgbGVzcyB0aGFuIGxlbiB1cCB0byB0aGUgZW5kIG9mIHRoZQorICAgaW5wdXQuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAgSWYgemVybyBpcyByZXR1cm5lZCwgZWl0aGVyIHRoZQorICAgZW5kIG9mIGZpbGUgd2FzIHJlYWNoZWQsIG9yIHRoZXJlIHdhcyBhbiBlcnJvci4gIHN0YXRlLT5lcnIgbXVzdCBiZQorICAgY29uc3VsdGVkIGluIHRoYXQgY2FzZSB0byBkZXRlcm1pbmUgd2hpY2guICovCitsb2NhbCB6X3NpemVfdCBnel9yZWFkKHN0YXRlLCBidWYsIGxlbikKICAgICBnel9zdGF0ZXAgc3RhdGU7Ci0gICAgel9zdHJlYW1wIHN0cm07Ci0KLSAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCi0gICAgaWYgKGZpbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwotICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLQotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8Ci0gICAgICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KLSAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwotICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBsZW47Cit7CisgICAgel9zaXplX3QgZ290OworICAgIHVuc2lnbmVkIG47CiAKICAgICAvKiBpZiBsZW4gaXMgemVybywgYXZvaWQgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucyAqLwogICAgIGlmIChsZW4gPT0gMCkKQEAgLTMyMCwzMiArMzA3LDM4IEBACiAgICAgaWYgKHN0YXRlLT5zZWVrKSB7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8qIGdldCBsZW4gYnl0ZXMgdG8gYnVmLCBvciBsZXNzIHRoYW4gbGVuIGlmIGF0IHRoZSBlbmQgKi8KICAgICBnb3QgPSAwOwogICAgIGRvIHsKKyAgICAgICAgLyogc2V0IG4gdG8gdGhlIG1heGltdW0gYW1vdW50IG9mIGxlbiB0aGF0IGZpdHMgaW4gYW4gdW5zaWduZWQgaW50ICovCisgICAgICAgIG4gPSAtMTsKKyAgICAgICAgaWYgKG4gPiBsZW4pCisgICAgICAgICAgICBuID0gbGVuOworCiAgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCiAgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7Ci0gICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZSA+IGxlbiA/IGxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSA8IG4pCisgICAgICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CiAgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKICAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKICAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCi0gICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDApIHsKICAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgIC8qIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLyogbmVlZCBvdXRwdXQgZGF0YSAtLSBmb3Igc21hbGwgbGVuIG9yIG5ldyBzdHJlYW0gbG9hZCB1cCBvdXIgb3V0cHV0CiAgICAgICAgICAgIGJ1ZmZlciAqLwotICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IExPT0sgfHwgbGVuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyB8fCBuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwogICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gY29weSBhYm92ZSAqLwogICAgICAgICAgICAgLyogdGhlIGNvcHkgYWJvdmUgYXNzdXJlcyB0aGF0IHdlIHdpbGwgbGVhdmUgd2l0aCBzcGFjZSBpbiB0aGUKICAgICAgICAgICAgICAgIG91dHB1dCBidWZmZXIsIGFsbG93aW5nIGF0IGxlYXN0IG9uZSBnenVuZ2V0YygpIHRvIHN1Y2NlZWQgKi8KQEAgLTM1MywxNiArMzQ2LDE2IEBACiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICovCi0gICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgKHVuc2lnbmVkIGNoYXIgKilidWYsIGxlbiwgJm4pID09IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbiwgJm4pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwotICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOwotICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKyAgICAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX291dCA9IG47CisgICAgICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwogICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CiAgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgfQpAQCAtMzc0LDggKzM2Nyw3NSBAQAogICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICB9IHdoaWxlIChsZW4pOwogCi0gICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKHdpbGwgZml0IGluIGludCkgKi8KLSAgICByZXR1cm4gKGludClnb3Q7CisgICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKi8KKyAgICByZXR1cm4gZ290OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnenJlYWQoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdm9pZHAgYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIGEgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLCAicmVxdWVzdCBkb2VzIG5vdCBmaXQgaW4gYW4gaW50Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiByZWFkIGxlbiBvciBmZXdlciBieXRlcyB0byBidWYgKi8KKyAgICBsZW4gPSBnel9yZWFkKHN0YXRlLCBidWYsIGxlbik7CisKKyAgICAvKiBjaGVjayBmb3IgYW4gZXJyb3IgKi8KKyAgICBpZiAobGVuID09IDAgJiYgc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKHRoaXMgaXMgYXNzdXJlZCB0byBmaXQgaW4gYW4gaW50KSAqLworICAgIHJldHVybiAoaW50KWxlbjsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9zaXplX3QgWkVYUE9SVCBnemZyZWFkKGJ1Ziwgc2l6ZSwgbml0ZW1zLCBmaWxlKQorICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBzaXplOworICAgIHpfc2l6ZV90IG5pdGVtczsKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X3NpemVfdCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY29tcHV0ZSBieXRlcyB0byByZWFkIC0tIGVycm9yIG9uIG92ZXJmbG93ICovCisgICAgbGVuID0gbml0ZW1zICogc2l6ZTsKKyAgICBpZiAoc2l6ZSAmJiBsZW4gLyBzaXplICE9IG5pdGVtcykgeworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsICJyZXF1ZXN0IGRvZXMgbm90IGZpdCBpbiBhIHNpemVfdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiByZWFkIGxlbiBvciBmZXdlciBieXRlcyB0byBidWYsIHJldHVybiB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgcmVhZCAqLworICAgIHJldHVybiBsZW4gPyBnel9yZWFkKHN0YXRlLCBidWYsIGxlbikgLyBzaXplIDogMDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDA4LDggKzQ2OCw4IEBACiAgICAgICAgIHJldHVybiAqKHN0YXRlLT54Lm5leHQpKys7CiAgICAgfQogCi0gICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkgZ3pyZWFkKCkgKi8KLSAgICByZXQgPSBnenJlYWQoZmlsZSwgYnVmLCAxKTsKKyAgICAvKiBub3RoaW5nIHRoZXJlIC0tIHRyeSBnel9yZWFkKCkgKi8KKyAgICByZXQgPSBnel9yZWFkKHN0YXRlLCBidWYsIDEpOwogICAgIHJldHVybiByZXQgPCAxID8gLTEgOiBidWZbMF07CiB9CiAKQEAgLTQ1MSw3ICs1MTEsNyBAQAogICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKICAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDE7CiAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKLSAgICAgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hhciljOwogICAgICAgICBzdGF0ZS0+eC5wb3MtLTsKICAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgICAgICByZXR1cm4gYzsKQEAgLTQ3Myw3ICs1MzMsNyBAQAogICAgIH0KICAgICBzdGF0ZS0+eC5oYXZlKys7CiAgICAgc3RhdGUtPngubmV4dC0tOwotICAgIHN0YXRlLT54Lm5leHRbMF0gPSBjOworICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hhciljOwogICAgIHN0YXRlLT54LnBvcy0tOwogICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICByZXR1cm4gYzsKZGlmZiAtLWdpdCBhL3NyYy9nendyaXRlLmMgYi9zcmMvZ3p3cml0ZS5jCmluZGV4IGFhNzY3ZmIuLmM3YjU2NTEgMTAwNjQ0Ci0tLSBhL3NyYy9nendyaXRlLmMKKysrIGIvc3JjL2d6d3JpdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksMTcgKzksMTkgQEAKIGxvY2FsIGludCBnel9pbml0IE9GKChnel9zdGF0ZXApKTsKIGxvY2FsIGludCBnel9jb21wIE9GKChnel9zdGF0ZXAsIGludCkpOwogbG9jYWwgaW50IGd6X3plcm8gT0YoKGd6X3N0YXRlcCwgel9vZmY2NF90KSk7Citsb2NhbCB6X3NpemVfdCBnel93cml0ZSBPRigoZ3pfc3RhdGVwLCB2b2lkcGMsIHpfc2l6ZV90KSk7CiAKIC8qIEluaXRpYWxpemUgc3RhdGUgZm9yIHdyaXRpbmcgYSBnemlwIGZpbGUuICBNYXJrIGluaXRpYWxpemF0aW9uIGJ5IHNldHRpbmcKLSAgIHN0YXRlLT5zaXplIHRvIG5vbi16ZXJvLiAgUmV0dXJuIC0xIG9uIGZhaWx1cmUgb3IgMCBvbiBzdWNjZXNzLiAqLworICAgc3RhdGUtPnNpemUgdG8gbm9uLXplcm8uICBSZXR1cm4gLTEgb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciAwIG9uCisgICBzdWNjZXNzLiAqLwogbG9jYWwgaW50IGd6X2luaXQoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIGludCByZXQ7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIC8qIGFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLwotICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBidWZmZXIgKGRvdWJsZSBzaXplIGZvciBnenByaW50ZikgKi8KKyAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwpIHsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC00Nyw2ICs0OSw3IEBACiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IE5VTEw7CiAgICAgfQogCiAgICAgLyogbWFyayBzdGF0ZSBhcyBpbml0aWFsaXplZCAqLwpAQCAtNjIsMTcgKzY1LDE3IEBACiB9CiAKIC8qIENvbXByZXNzIHdoYXRldmVyIGlzIGF0IGF2YWlsX2luIGFuZCBuZXh0X2luIGFuZCB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUuCi0gICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0byB0aGUgb3V0cHV0IGZpbGUsIG90aGVyd2lzZSAwLgotICAgZmx1c2ggaXMgYXNzdW1lZCB0byBiZSBhIHZhbGlkIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpfRklOSVNILAotICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAgSWYgZ3otPmRpcmVjdAotICAgaXMgdHJ1ZSwgdGhlbiBzaW1wbHkgd3JpdGUgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQgY29tcHJlc3NpbmcsIGFuZAotICAgaWdub3JlIGZsdXNoLiAqLworICAgUmV0dXJuIC0xIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdG8gdGhlIG91dHB1dCBmaWxlIG9yIGlmIGd6X2luaXQoKQorICAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5LCBvdGhlcndpc2UgMC4gIGZsdXNoIGlzIGFzc3VtZWQgdG8gYmUgYSB2YWxpZAorICAgZGVmbGF0ZSgpIGZsdXNoIHZhbHVlLiAgSWYgZmx1c2ggaXMgWl9GSU5JU0gsIHRoZW4gdGhlIGRlZmxhdGUoKSBzdGF0ZSBpcworICAgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICBJZiBnei0+ZGlyZWN0IGlzIHRydWUsIHRoZW4gc2ltcGx5IHdyaXRlCisgICB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aG91dCBjb21wcmVzc2luZywgYW5kIGlnbm9yZSBmbHVzaC4gKi8KIGxvY2FsIGludCBnel9jb21wKHN0YXRlLCBmbHVzaCkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgaW50IGZsdXNoOwogewotICAgIGludCByZXQsIGdvdDsKLSAgICB1bnNpZ25lZCBoYXZlOworICAgIGludCByZXQsIHdyaXQ7CisgICAgdW5zaWduZWQgaGF2ZSwgcHV0LCBtYXggPSAoKHVuc2lnbmVkKS0xID4+IDIpICsgMTsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCiAgICAgLyogYWxsb2NhdGUgbWVtb3J5IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwpAQCAtODEsMTIgKzg0LDE2IEBACiAKICAgICAvKiB3cml0ZSBkaXJlY3RseSBpZiByZXF1ZXN0ZWQgKi8KICAgICBpZiAoc3RhdGUtPmRpcmVjdCkgewotICAgICAgICBnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICAgICAgaWYgKGdvdCA8IDAgfHwgKHVuc2lnbmVkKWdvdCAhPSBzdHJtLT5hdmFpbF9pbikgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBwdXQgPSBzdHJtLT5hdmFpbF9pbiA+IG1heCA/IG1heCA6IHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgd3JpdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgcHV0KTsKKyAgICAgICAgICAgIGlmICh3cml0IDwgMCkgeworICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gLT0gKHVuc2lnbmVkKXdyaXQ7CisgICAgICAgICAgICBzdHJtLT5uZXh0X2luICs9IHdyaXQ7CiAgICAgICAgIH0KLSAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTk3LDE3ICsxMDQsMjEgQEAKICAgICAgICAgICAgZG9pbmcgWl9GSU5JU0ggdGhlbiBkb24ndCB3cml0ZSB1bnRpbCB3ZSBnZXQgdG8gWl9TVFJFQU1fRU5EICovCiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCB8fCAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJgogICAgICAgICAgICAgKGZsdXNoICE9IFpfRklOSVNIIHx8IHJldCA9PSBaX1NUUkVBTV9FTkQpKSkgewotICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0KTsKLSAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+eC5uZXh0LCBoYXZlKSkgPCAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdvdCAhPSBoYXZlKSkgewotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgd2hpbGUgKHN0cm0tPm5leHRfb3V0ID4gc3RhdGUtPngubmV4dCkgeworICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCA+IChpbnQpbWF4ID8gbWF4IDoKKyAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCk7CisgICAgICAgICAgICAgICAgd3JpdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPngubmV4dCwgcHV0KTsKKyAgICAgICAgICAgICAgICBpZiAod3JpdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IHdyaXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDApIHsKICAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBjb21wcmVzcyAqLwpAQCAtMTI5LDcgKzE0MCw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIENvbXByZXNzIGxlbiB6ZXJvcyB0byBvdXRwdXQuICBSZXR1cm4gLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4gKi8KKy8qIENvbXByZXNzIGxlbiB6ZXJvcyB0byBvdXRwdXQuICBSZXR1cm4gLTEgb24gYSB3cml0ZSBlcnJvciBvciBtZW1vcnkKKyAgIGFsbG9jYXRpb24gZmFpbHVyZSBieSBnel9jb21wKCksIG9yIDAgb24gc3VjY2Vzcy4gKi8KIGxvY2FsIGludCBnel96ZXJvKHN0YXRlLCBsZW4pCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfb2ZmNjRfdCBsZW47CkBAIC0xNjEsMzIgKzE3MywxNCBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiAtLSBzZWUgemxpYi5oIC0tICovCi1pbnQgWkVYUE9SVCBnendyaXRlKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwYyBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIHVuc2lnbmVkIHB1dCA9IGxlbjsKKy8qIFdyaXRlIGxlbiBieXRlcyBmcm9tIGJ1ZiB0byBmaWxlLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gIElmCisgICB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbGVzcyB0aGFuIGxlbiwgdGhlbiB0aGVyZSB3YXMgYW4gZXJyb3IuICovCitsb2NhbCB6X3NpemVfdCBnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwotICAgIHpfc3RyZWFtcCBzdHJtOwotCi0gICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwotICAgIGlmIChmaWxlID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwotICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLQotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KLSAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwotICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZHBjIGJ1ZjsKKyAgICB6X3NpemVfdCBsZW47Cit7CisgICAgel9zaXplX3QgcHV0ID0gbGVuOwogCiAgICAgLyogaWYgbGVuIGlzIHplcm8sIGF2b2lkIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMgKi8KICAgICBpZiAobGVuID09IDApCkBAIC0yMDksMTQgKzIwMywxNSBAQAogICAgICAgICBkbyB7CiAgICAgICAgICAgICB1bnNpZ25lZCBoYXZlLCBjb3B5OwogCi0gICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKLSAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0ZS0+aW4pOworICAgICAgICAgICAgaWYgKHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cm0ubmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdGF0ZS0+c3RybS5uZXh0X2luICsgc3RhdGUtPnN0cm0uYXZhaWxfaW4pIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pbik7CiAgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOwogICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCiAgICAgICAgICAgICAgICAgY29weSA9IGxlbjsKICAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOwotICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luICs9IGNvcHk7CiAgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gY29weTsKICAgICAgICAgICAgIGJ1ZiA9IChjb25zdCBjaGFyICopYnVmICsgY29weTsKICAgICAgICAgICAgIGxlbiAtPSBjb3B5OwpAQCAtMjI2LDE5ICsyMjEsODMgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIGNvbnN1bWUgd2hhdGV2ZXIncyBsZWZ0IGluIHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICBpZiAoc3RhdGUtPnN0cm0uYXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvKiBkaXJlY3RseSBjb21wcmVzcyB1c2VyIGJ1ZmZlciB0byBmaWxlICovCi0gICAgICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOwotICAgICAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7Ci0gICAgICAgIHN0YXRlLT54LnBvcyArPSBsZW47Ci0gICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSAodW5zaWduZWQpLTE7CisgICAgICAgICAgICBpZiAobiA+IGxlbikKKyAgICAgICAgICAgICAgICBuID0gbGVuOworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSBuOworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgfSB3aGlsZSAobGVuKTsKICAgICB9CiAKLSAgICAvKiBpbnB1dCB3YXMgYWxsIGJ1ZmZlcmVkIG9yIGNvbXByZXNzZWQgKHB1dCB3aWxsIGZpdCBpbiBpbnQpICovCi0gICAgcmV0dXJuIChpbnQpcHV0OworICAgIC8qIGlucHV0IHdhcyBhbGwgYnVmZmVyZWQgb3IgY29tcHJlc3NlZCAqLworICAgIHJldHVybiBwdXQ7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdm9pZHBjIGJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIGEgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiB3cml0ZSBsZW4gYnl0ZXMgZnJvbSBidWYgKHRoZSByZXR1cm4gdmFsdWUgd2lsbCBmaXQgaW4gYW4gaW50KSAqLworICAgIHJldHVybiAoaW50KWd6X3dyaXRlKHN0YXRlLCBidWYsIGxlbik7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK3pfc2l6ZV90IFpFWFBPUlQgZ3pmd3JpdGUoYnVmLCBzaXplLCBuaXRlbXMsIGZpbGUpCisgICAgdm9pZHBjIGJ1ZjsKKyAgICB6X3NpemVfdCBzaXplOworICAgIHpfc2l6ZV90IG5pdGVtczsKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X3NpemVfdCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNvbXB1dGUgYnl0ZXMgdG8gcmVhZCAtLSBlcnJvciBvbiBvdmVyZmxvdyAqLworICAgIGxlbiA9IG5pdGVtcyAqIHNpemU7CisgICAgaWYgKHNpemUgJiYgbGVuIC8gc2l6ZSAhPSBuaXRlbXMpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLCAicmVxdWVzdCBkb2VzIG5vdCBmaXQgaW4gYSBzaXplX3QiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogd3JpdGUgbGVuIGJ5dGVzIHRvIGJ1ZiwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZnVsbCBpdGVtcyB3cml0dGVuICovCisgICAgcmV0dXJuIGxlbiA/IGd6X3dyaXRlKHN0YXRlLCBidWYsIGxlbikgLyBzaXplIDogMDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMjc1LDcgKzMzNCw3IEBACiAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwogICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CiAgICAgICAgIGlmIChoYXZlIDwgc3RhdGUtPnNpemUpIHsKLSAgICAgICAgICAgIHN0YXRlLT5pbltoYXZlXSA9IGM7CisgICAgICAgICAgICBzdGF0ZS0+aW5baGF2ZV0gPSAodW5zaWduZWQgY2hhciljOwogICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4rKzsKICAgICAgICAgICAgIHN0YXRlLT54LnBvcysrOwogICAgICAgICAgICAgcmV0dXJuIGMgJiAweGZmOwpAQCAtMjgzLDggKzM0Miw4IEBACiAgICAgfQogCiAgICAgLyogbm8gcm9vbSBpbiBidWZmZXIgb3Igbm90IGluaXRpYWxpemVkLCB1c2UgZ3pfd3JpdGUoKSAqLwotICAgIGJ1ZlswXSA9IGM7Ci0gICAgaWYgKGd6d3JpdGUoZmlsZSwgYnVmLCAxKSAhPSAxKQorICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKWM7CisgICAgaWYgKGd6X3dyaXRlKHN0YXRlLCBidWYsIDEpICE9IDEpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gYyAmIDB4ZmY7CiB9CkBAIC0yOTUsMTEgKzM1NCwyMSBAQAogICAgIGNvbnN0IGNoYXIgKnN0cjsKIHsKICAgICBpbnQgcmV0OwotICAgIHVuc2lnbmVkIGxlbjsKKyAgICB6X3NpemVfdCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogd3JpdGUgc3RyaW5nICovCi0gICAgbGVuID0gKHVuc2lnbmVkKXN0cmxlbihzdHIpOwotICAgIHJldCA9IGd6d3JpdGUoZmlsZSwgc3RyLCBsZW4pOworICAgIGxlbiA9IHN0cmxlbihzdHIpOworICAgIHJldCA9IGd6X3dyaXRlKHN0YXRlLCBzdHIsIGxlbik7CiAgICAgcmV0dXJuIHJldCA9PSAwICYmIGxlbiAhPSAwID8gLTEgOiByZXQ7CiB9CiAKQEAgLTMwOSw2MyArMzc4LDczIEBACiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewotICAgIGludCBzaXplLCBsZW47CisgICAgaW50IGxlbjsKKyAgICB1bnNpZ25lZCBsZWZ0OworICAgIGNoYXIgKm5leHQ7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwogICAgIGlmIChmaWxlID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCiAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAogICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyIHNwYWNlICovCiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKIAogICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KICAgICBpZiAoc3RhdGUtPnNlZWspIHsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwogICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKICAgICB9CiAKLSAgICAvKiBjb25zdW1lIHdoYXRldmVyJ3MgbGVmdCBpbiB0aGUgaW5wdXQgYnVmZmVyICovCi0gICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4gbGVuICovCi0gICAgc2l6ZSA9IChpbnQpKHN0YXRlLT5zaXplKTsKLSAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKKyAgICAvKiBkbyB0aGUgcHJpbnRmKCkgaW50byB0aGUgaW5wdXQgYnVmZmVyLCBwdXQgbGVuZ3RoIGluIGxlbiAtLSB0aGUgaW5wdXQKKyAgICAgICBidWZmZXIgaXMgZG91YmxlLXNpemVkIGp1c3QgZm9yIHRoaXMgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIGd1YXJhbnRlZWQgdG8KKyAgICAgICBiZSBzdGF0ZS0+c2l6ZSBieXRlcyBhdmFpbGFibGUgYWZ0ZXIgdGhlIGN1cnJlbnQgY29udGVudHMgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICBuZXh0ID0gKGNoYXIgKikoc3RhdGUtPmluICsgKHN0cm0tPm5leHRfaW4gLSBzdGF0ZS0+aW4pICsgc3RybS0+YXZhaWxfaW4pOworICAgIG5leHRbc3RhdGUtPnNpemUgLSAxXSA9IDA7CiAjaWZkZWYgTk9fdnNucHJpbnRmCiAjICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgdmEpOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCi0gICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKKyAgICAodm9pZCl2c3ByaW50ZihuZXh0LCBmb3JtYXQsIHZhKTsKKyAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHN0YXRlLT5zaXplOyBsZW4rKykKKyAgICAgICAgaWYgKG5leHRbbGVuXSA9PSAwKSBicmVhazsKICMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKKyAgICBsZW4gPSB2c3ByaW50ZihuZXh0LCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOwotICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKKyAgICAodm9pZCl2c25wcmludGYobmV4dCwgc3RhdGUtPnNpemUsIGZvcm1hdCwgdmEpOworICAgIGxlbiA9IHN0cmxlbihuZXh0KTsKICMgIGVsc2UKLSAgICBsZW4gPSB2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gdnNucHJpbnRmKG5leHQsIHN0YXRlLT5zaXplLCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZW5kaWYKIAogICAgIC8qIGNoZWNrIHRoYXQgcHJpbnRmKCkgcmVzdWx0cyBmaXQgaW4gYnVmZmVyICovCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSAoaW50KXNpemUgfHwgc3RhdGUtPmluW3NpemUgLSAxXSAhPSAwKQorICAgIGlmIChsZW4gPT0gMCB8fCAodW5zaWduZWQpbGVuID49IHN0YXRlLT5zaXplIHx8IG5leHRbc3RhdGUtPnNpemUgLSAxXSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KLSAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47Ci0gICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgY29tcHJlc3MgZmlyc3QgaGFsZiBpZiBwYXN0IHRoYXQgKi8KKyAgICBzdHJtLT5hdmFpbF9pbiArPSAodW5zaWduZWQpbGVuOwogICAgIHN0YXRlLT54LnBvcyArPSBsZW47CisgICAgaWYgKHN0cm0tPmF2YWlsX2luID49IHN0YXRlLT5zaXplKSB7CisgICAgICAgIGxlZnQgPSBzdHJtLT5hdmFpbF9pbiAtIHN0YXRlLT5zaXplOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IHN0YXRlLT5zaXplOworICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICAgICAgbWVtY3B5KHN0YXRlLT5pbiwgc3RhdGUtPmluICsgc3RhdGUtPnNpemUsIGxlZnQpOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlZnQ7CisgICAgfQogICAgIHJldHVybiBsZW47CiB9CiAKQEAgLTM5MCw3MyArNDY5LDgyIEBACiAgICAgaW50IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKICAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOwogewotICAgIGludCBzaXplLCBsZW47CisgICAgdW5zaWduZWQgbGVuLCBsZWZ0OworICAgIGNoYXIgKm5leHQ7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwogICAgIGlmIChmaWxlID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAogICAgIC8qIGNoZWNrIHRoYXQgY2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLwogICAgIGlmIChzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCiAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAogICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyIHNwYWNlICovCiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3RhdGUtPmVycm9yOwogCiAgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLwogICAgIGlmIChzdGF0ZS0+c2VlaykgewogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CiAgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyb3I7CiAgICAgfQogCi0gICAgLyogY29uc3VtZSB3aGF0ZXZlcidzIGxlZnQgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBkbyB0aGUgcHJpbnRmKCkgaW50byB0aGUgaW5wdXQgYnVmZmVyLCBwdXQgbGVuZ3RoIGluIGxlbiAqLwotICAgIHNpemUgPSAoaW50KShzdGF0ZS0+c2l6ZSk7Ci0gICAgc3RhdGUtPmluW3NpemUgLSAxXSA9IDA7CisgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gLS0gdGhlIGlucHV0CisgICAgICAgYnVmZmVyIGlzIGRvdWJsZS1zaXplZCBqdXN0IGZvciB0aGlzIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBndWFyYW50ZWVkIHRvCisgICAgICAgYmUgc3RhdGUtPnNpemUgYnl0ZXMgYXZhaWxhYmxlIGFmdGVyIHRoZSBjdXJyZW50IGNvbnRlbnRzICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgbmV4dCA9IChjaGFyICopKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbik7CisgICAgbmV4dFtzdGF0ZS0+c2l6ZSAtIDFdID0gMDsKICNpZmRlZiBOT19zbnByaW50ZgogIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIHNwcmludGYobmV4dCwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLAorICAgICAgICAgICAgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwogICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCi0gICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKKyAgICAgICAgaWYgKG5leHRbbGVuXSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3ByaW50ZihuZXh0LCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwgYTExLAorICAgICAgICAgICAgICAgICAgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKikoc3RhdGUtPmluKSk7CisgICAgc25wcmludGYobmV4dCwgc3RhdGUtPnNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwKKyAgICAgICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3RybGVuKG5leHQpOwogIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwKLSAgICAgICAgICAgICAgICAgICBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LAotICAgICAgICAgICAgICAgICAgIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzbnByaW50ZihuZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZW5kaWYKIAogICAgIC8qIGNoZWNrIHRoYXQgcHJpbnRmKCkgcmVzdWx0cyBmaXQgaW4gYnVmZmVyICovCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSAoaW50KXNpemUgfHwgc3RhdGUtPmluW3NpemUgLSAxXSAhPSAwKQorICAgIGlmIChsZW4gPT0gMCB8fCBsZW4gPj0gc3RhdGUtPnNpemUgfHwgbmV4dFtzdGF0ZS0+c2l6ZSAtIDFdICE9IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwotICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKLSAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBjb21wcmVzcyBmaXJzdCBoYWxmIGlmIHBhc3QgdGhhdCAqLworICAgIHN0cm0tPmF2YWlsX2luICs9IGxlbjsKICAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwotICAgIHJldHVybiBsZW47CisgICAgaWYgKHN0cm0tPmF2YWlsX2luID49IHN0YXRlLT5zaXplKSB7CisgICAgICAgIGxlZnQgPSBzdHJtLT5hdmFpbF9pbiAtIHN0YXRlLT5zaXplOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IHN0YXRlLT5zaXplOworICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICAgICAgbWVtY3B5KHN0YXRlLT5pbiwgc3RhdGUtPmluICsgc3RhdGUtPnNpemUsIGxlZnQpOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlZnQ7CisgICAgfQorICAgIHJldHVybiAoaW50KWxlbjsKIH0KIAogI2VuZGlmCkBAIC00NzAsNyArNTU4LDcgQEAKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KICAgICBpZiAoZmlsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCkBAIC00ODUsMTEgKzU3MywxMSBAQAogICAgIGlmIChzdGF0ZS0+c2VlaykgewogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CiAgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKICAgICB9CiAKICAgICAvKiBjb21wcmVzcyByZW1haW5pbmcgZGF0YSB3aXRoIHJlcXVlc3RlZCBmbHVzaCAqLwotICAgIGd6X2NvbXAoc3RhdGUsIGZsdXNoKTsKKyAgICAodm9pZClnel9jb21wKHN0YXRlLCBmbHVzaCk7CiAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CiB9CiAKQEAgLTUyMCwxMyArNjA4LDEzIEBACiAgICAgaWYgKHN0YXRlLT5zZWVrKSB7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOwogICAgIH0KIAogICAgIC8qIGNoYW5nZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGZvciBzdWJzZXF1ZW50IGlucHV0ICovCiAgICAgaWYgKHN0YXRlLT5zaXplKSB7CiAgICAgICAgIC8qIGZsdXNoIHByZXZpb3VzIGlucHV0IHdpdGggcHJldmlvdXMgcGFyYW1ldGVycyBiZWZvcmUgY2hhbmdpbmcgKi8KLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfUEFSVElBTF9GTFVTSCkgPT0gLTEpCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBnel9jb21wKHN0YXRlLCBaX0JMT0NLKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOwogICAgICAgICBkZWZsYXRlUGFyYW1zKHN0cm0sIGxldmVsLCBzdHJhdGVneSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2luZmJhY2suYyBiL3NyYy9pbmZiYWNrLmMKaW5kZXggZjM4MzNjMi4uNTk2NzllYyAxMDA2NDQKLS0tIGEvc3JjL2luZmJhY2suYworKysgYi9zcmMvaW5mYmFjay5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mYmFjay5jIC0tIGluZmxhdGUgdXNpbmcgYSBjYWxsLWJhY2sgaW50ZXJmYWNlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNjEsNyArNjEsNyBAQAogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogYWxsb2NhdGVkXG4iKSk7CiAgICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKXN0YXRlOwogICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOwotICAgIHN0YXRlLT53Yml0cyA9IHdpbmRvd0JpdHM7CisgICAgc3RhdGUtPndiaXRzID0gKHVJbnQpd2luZG93Qml0czsKICAgICBzdGF0ZS0+d3NpemUgPSAxVSA8PCB3aW5kb3dCaXRzOwogICAgIHN0YXRlLT53aW5kb3cgPSB3aW5kb3c7CiAgICAgc3RhdGUtPnduZXh0ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9pbmZmYXN0LmMgYi9zcmMvaW5mZmFzdC5jCmluZGV4IGJkYTU5Y2UuLjBkYmQxZGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmZmYXN0LmMKKysrIGIvc3JjL2luZmZhc3QuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuYyAtLSBmYXN0IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCwgMjAxMCwgMjAxMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwyNiArOCw5IEBACiAjaW5jbHVkZSAiaW5mbGF0ZS5oIgogI2luY2x1ZGUgImluZmZhc3QuaCIKIAotI2lmbmRlZiBBU01JTkYKLQotLyogQWxsb3cgbWFjaGluZSBkZXBlbmRlbnQgb3B0aW1pemF0aW9uIGZvciBwb3N0LWluY3JlbWVudCBvciBwcmUtaW5jcmVtZW50LgotICAgQmFzZWQgb24gdGVzdGluZyB0byBkYXRlLAotICAgUHJlLWluY3JlbWVudCBwcmVmZXJyZWQgZm9yOgotICAgLSBQb3dlclBDIEczIChBZGxlcikKLSAgIC0gTUlQUyBSNTAwMCAoUmFuZGVycy1QZWhyc29uKQotICAgUG9zdC1pbmNyZW1lbnQgcHJlZmVycmVkIGZvcjoKLSAgIC0gbm9uZQotICAgTm8gbWVhc3VyYWJsZSBkaWZmZXJlbmNlOgotICAgLSBQZW50aXVtIElJSSAoQW5kZXJzb24pCi0gICAtIE02ODA2MCAoTmlrbCkKLSAqLwotI2lmZGVmIFBPU1RJTkMKLSMgIGRlZmluZSBPRkYgMAotIyAgZGVmaW5lIFBVUChhKSAqKGEpKysKKyNpZmRlZiBBU01JTkYKKyMgIHByYWdtYSBtZXNzYWdlKCJBc3NlbWJsZXIgY29kZSBtYXkgaGF2ZSBidWdzIC0tIHVzZSBhdCB5b3VyIG93biByaXNrIikKICNlbHNlCi0jICBkZWZpbmUgT0ZGIDEKLSMgIGRlZmluZSBQVVAoYSkgKisrKGEpCi0jZW5kaWYKIAogLyoKICAgIERlY29kZSBsaXRlcmFsLCBsZW5ndGgsIGFuZCBkaXN0YW5jZSBjb2RlcyBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKQEAgLTk2LDkgKzc5LDkgQEAKIAogICAgIC8qIGNvcHkgc3RhdGUgdG8gbG9jYWwgdmFyaWFibGVzICovCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0gICAgaW4gPSBzdHJtLT5uZXh0X2luIC0gT0ZGOworICAgIGluID0gc3RybS0+bmV4dF9pbjsKICAgICBsYXN0ID0gaW4gKyAoc3RybS0+YXZhaWxfaW4gLSA1KTsKLSAgICBvdXQgPSBzdHJtLT5uZXh0X291dCAtIE9GRjsKKyAgICBvdXQgPSBzdHJtLT5uZXh0X291dDsKICAgICBiZWcgPSBvdXQgLSAoc3RhcnQgLSBzdHJtLT5hdmFpbF9vdXQpOwogICAgIGVuZCA9IG91dCArIChzdHJtLT5hdmFpbF9vdXQgLSAyNTcpOwogI2lmZGVmIElORkxBVEVfU1RSSUNUCkBAIC0xMTksOSArMTAyLDkgQEAKICAgICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqLwogICAgIGRvIHsKICAgICAgICAgaWYgKGJpdHMgPCAxNSkgewotICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgYml0cyArPSA4OwotICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICB9CiAgICAgICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdOwpAQCAtMTM0LDE0ICsxMTcsMTQgQEAKICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPwogICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgogICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS52YWwpKTsKLSAgICAgICAgICAgIFBVUChvdXQpID0gKHVuc2lnbmVkIGNoYXIpKGhlcmUudmFsKTsKKyAgICAgICAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKShoZXJlLnZhbCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBiYXNlICovCiAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKGhlcmUudmFsKTsKICAgICAgICAgICAgIG9wICY9IDE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzICovCiAgICAgICAgICAgICBpZiAob3ApIHsKICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKFBVUChpbikpIDw8IGJpdHM7CisgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpaG9sZCAmICgoMVUgPDwgb3ApIC0gMSk7CkBAIC0xNTAsOSArMTMzLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBsZW4pKTsKICAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKLSAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOworICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKLSAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOworICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdOwpAQCAtMTY1LDEwICsxNDgsMTAgQEAKICAgICAgICAgICAgICAgICBkaXN0ID0gKHVuc2lnbmVkKShoZXJlLnZhbCk7CiAgICAgICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqLwogICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTk2LDMwICsxNzksMzAgQEAKICNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlIKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlOwogICAgICAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCA+IHdoYXZlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93IC0gT0ZGOworICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93OwogICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjMwLDE0ICsyMTMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSBlbmQgb2Ygd2luZG93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHdpbmRvdyAtIE9GRjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgICAgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDgsMzUgKzIzMSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmcm9tID0gb3V0IC0gZGlzdDsgICAgICAgICAgLyogY29weSBkaXJlY3QgZnJvbSBvdXRwdXQgKi8KICAgICAgICAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsOCArMjk2LDggQEAKICAgICBob2xkICY9ICgxVSA8PCBiaXRzKSAtIDE7CiAKICAgICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqLwotICAgIHN0cm0tPm5leHRfaW4gPSBpbiArIE9GRjsKLSAgICBzdHJtLT5uZXh0X291dCA9IG91dCArIE9GRjsKKyAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CiAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpKGluIDwgbGFzdCA/IDUgKyAobGFzdCAtIGluKSA6IDUgLSAoaW4gLSBsYXN0KSk7CiAgICAgc3RybS0+YXZhaWxfb3V0ID0gKHVuc2lnbmVkKShvdXQgPCBlbmQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU3ICsgKGVuZCAtIG91dCkgOiAyNTcgLSAob3V0IC0gZW5kKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5mbGF0ZS5jIGIvc3JjL2luZmxhdGUuYwppbmRleCA0ZmQzZjNjLi5hYzMzM2U4IDEwMDY0NAotLS0gYS9zcmMvaW5mbGF0ZS5jCisrKyBiL3NyYy9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOTIsNiArOTIsNyBAQAogI2VuZGlmCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2xvY2FsIGludCBpbmZsYXRlU3RhdGVDaGVjayBPRigoel9zdHJlYW1wIHN0cm0pKTsKIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKIGxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwpAQCAtMTAxLDEyICsxMDIsMjYgQEAKIGxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOwogCitsb2NhbCBpbnQgaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8CisgICAgICAgIHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYgKHN0YXRlID09IFpfTlVMTCB8fCBzdGF0ZS0+c3RybSAhPSBzdHJtIHx8CisgICAgICAgIHN0YXRlLT5tb2RlIDwgSEVBRCB8fCBzdGF0ZS0+bW9kZSA+IFNZTkMpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pCiB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7CkBAIC0xMzEsNyArMTQ2LDcgQEAKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0YXRlLT53c2l6ZSA9IDA7CiAgICAgc3RhdGUtPndoYXZlID0gMDsKQEAgLTE0Nyw3ICsxNjIsNyBAQAogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CiAKICAgICAvKiBnZXQgdGhlIHN0YXRlICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogCiAgICAgLyogZXh0cmFjdCB3cmFwIHJlcXVlc3QgZnJvbSB3aW5kb3dCaXRzIHBhcmFtZXRlciAqLwpAQCAtMTU2LDcgKzE3MSw3IEBACiAgICAgICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7CisgICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDU7CiAjaWZkZWYgR1VOWklQCiAgICAgICAgIGlmICh3aW5kb3dCaXRzIDwgNDgpCiAgICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OwpAQCAtMjEwLDcgKzIyNSw5IEBACiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogYWxsb2NhdGVkXG4iKSk7CiAgICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKXN0YXRlOworICAgIHN0YXRlLT5zdHJtID0gc3RybTsKICAgICBzdGF0ZS0+d2luZG93ID0gWl9OVUxMOworICAgIHN0YXRlLT5tb2RlID0gSEVBRDsgICAgIC8qIHRvIHBhc3Mgc3RhdGUgdGVzdCBpbiBpbmZsYXRlUmVzZXQyKCkgKi8KICAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogICAgIGlmIChyZXQgIT0gWl9PSykgewogICAgICAgICBaRlJFRShzdHJtLCBzdGF0ZSk7CkBAIC0yMzQsMTcgKzI1MSwxNyBAQAogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAgICAgaWYgKGJpdHMgPCAwKSB7CiAgICAgICAgIHN0YXRlLT5ob2xkID0gMDsKICAgICAgICAgc3RhdGUtPmJpdHMgPSAwOwogICAgICAgICByZXR1cm4gWl9PSzsKICAgICB9Ci0gICAgaWYgKGJpdHMgPiAxNiB8fCBzdGF0ZS0+Yml0cyArIGJpdHMgPiAzMikgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChiaXRzID4gMTYgfHwgc3RhdGUtPmJpdHMgKyAodUludCliaXRzID4gMzIpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB2YWx1ZSAmPSAoMUwgPDwgYml0cykgLSAxOwotICAgIHN0YXRlLT5ob2xkICs9IHZhbHVlIDw8IHN0YXRlLT5iaXRzOwotICAgIHN0YXRlLT5iaXRzICs9IGJpdHM7CisgICAgc3RhdGUtPmhvbGQgKz0gKHVuc2lnbmVkKXZhbHVlIDw8IHN0YXRlLT5iaXRzOworICAgIHN0YXRlLT5iaXRzICs9ICh1SW50KWJpdHM7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTYyNSw3ICs2NDIsNyBAQAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBvcmRlclsxOV0gPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgICAgICAgezE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBzdHJtLT5uZXh0X291dCA9PSBaX05VTEwgfHwKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgc3RybS0+bmV4dF9vdXQgPT0gWl9OVUxMIHx8CiAgICAgICAgIChzdHJtLT5uZXh0X2luID09IFpfTlVMTCAmJiBzdHJtLT5hdmFpbF9pbiAhPSAwKSkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCkBAIC02NDUsNiArNjYyLDggQEAKICAgICAgICAgICAgIE5FRURCSVRTKDE2KTsKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgIGlmICgoc3RhdGUtPndyYXAgJiAyKSAmJiBob2xkID09IDB4OGIxZikgeyAgLyogZ3ppcCBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPndiaXRzID09IDApCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT53Yml0cyA9IDE1OwogICAgICAgICAgICAgICAgIHN0YXRlLT5jaGVjayA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwogICAgICAgICAgICAgICAgIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKICAgICAgICAgICAgICAgICBJTklUQklUUygpOwpAQCAtNjcyLDcgKzY5MSw3IEBACiAgICAgICAgICAgICBsZW4gPSBCSVRTKDQpICsgODsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+d2JpdHMgPT0gMCkKICAgICAgICAgICAgICAgICBzdGF0ZS0+d2JpdHMgPSBsZW47Ci0gICAgICAgICAgICBlbHNlIGlmIChsZW4gPiBzdGF0ZS0+d2JpdHMpIHsKKyAgICAgICAgICAgIGlmIChsZW4gPiAxNSB8fCBsZW4gPiBzdGF0ZS0+d2JpdHMpIHsKICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIHdpbmRvdyBzaXplIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY5OSwxNCArNzE4LDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQogICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT50ZXh0ID0gKGludCkoKGhvbGQgPj4gOCkgJiAxKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUSU1FOwogICAgICAgICBjYXNlIFRJTUU6CiAgICAgICAgICAgICBORUVEQklUUygzMik7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQogICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT50aW1lID0gaG9sZDsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIENSQzQoc3RhdGUtPmNoZWNrLCBob2xkKTsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkM0KHN0YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBPUzsKICAgICAgICAgY2FzZSBPUzoKQEAgLTcxNSw3ICs3MzYsOCBAQAogICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT54ZmxhZ3MgPSAoaW50KShob2xkICYgMHhmZik7CiAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm9zID0gKGludCkoaG9sZCA+PiA4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBFWExFTjsKICAgICAgICAgY2FzZSBFWExFTjoKQEAgLTcyNCw3ICs3NDYsOCBAQAogICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpKGhvbGQpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5leHRyYV9sZW4gPSAodW5zaWduZWQpaG9sZDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+d3JhcCAmIDQpKQorICAgICAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKQEAgLTc0Miw3ICs3NjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUtPmhlYWQtPmV4dHJhX21heCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKQorICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkpOwogICAgICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKQEAgLTc2MSw5ICs3ODQsOSBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWUgIT0gWl9OVUxMICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA8IHN0YXRlLT5oZWFkLT5uYW1lX21heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5uYW1lW3N0YXRlLT5sZW5ndGgrK10gPSBsZW47CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+bmFtZVtzdGF0ZS0+bGVuZ3RoKytdID0gKEJ5dGVmKWxlbjsKICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApCisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+d3JhcCAmIDQpKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkpOwogICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICBuZXh0ICs9IGNvcHk7CkBAIC03ODIsOSArODA1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50ICE9IFpfTlVMTCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPCBzdGF0ZS0+aGVhZC0+Y29tbV9tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+Y29tbWVudFtzdGF0ZS0+bGVuZ3RoKytdID0gbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmNvbW1lbnRbc3RhdGUtPmxlbmd0aCsrXSA9IChCeXRlZilsZW47CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKQorICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNoZWNrID0gY3JjMzIoc3RhdGUtPmNoZWNrLCBuZXh0LCBjb3B5KTsKICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwpAQCAtNzk2LDcgKzgxOSw3IEBACiAgICAgICAgIGNhc2UgSENSQzoKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIHsKICAgICAgICAgICAgICAgICBORUVEQklUUygxNik7Ci0gICAgICAgICAgICAgICAgaWYgKGhvbGQgIT0gKHN0YXRlLT5jaGVjayAmIDB4ZmZmZikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgNCkgJiYgaG9sZCAhPSAoc3RhdGUtPmNoZWNrICYgMHhmZmZmKSkgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJoZWFkZXIgY3JjIG1pc21hdGNoIjsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE3NywxMSArMTIwMCwxMSBAQAogICAgICAgICAgICAgICAgIG91dCAtPSBsZWZ0OwogICAgICAgICAgICAgICAgIHN0cm0tPnRvdGFsX291dCArPSBvdXQ7CiAgICAgICAgICAgICAgICAgc3RhdGUtPnRvdGFsICs9IG91dDsKLSAgICAgICAgICAgICAgICBpZiAob3V0KQorICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPndyYXAgJiA0KSAmJiBvdXQpCiAgICAgICAgICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0KICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURShzdGF0ZS0+Y2hlY2ssIHB1dCAtIG91dCwgb3V0KTsKICAgICAgICAgICAgICAgICBvdXQgPSBsZWZ0OwotICAgICAgICAgICAgICAgIGlmICgoCisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmICgKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mbGFncyA/IGhvbGQgOgogI2VuZGlmCkBAIC0xMjQwLDEwICsxMjYzLDEwIEBACiAgICAgc3RybS0+dG90YWxfaW4gKz0gaW47CiAgICAgc3RybS0+dG90YWxfb3V0ICs9IG91dDsKICAgICBzdGF0ZS0+dG90YWwgKz0gb3V0OwotICAgIGlmIChzdGF0ZS0+d3JhcCAmJiBvdXQpCisgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmIG91dCkKICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPQogICAgICAgICAgICAgVVBEQVRFKHN0YXRlLT5jaGVjaywgc3RybS0+bmV4dF9vdXQgLSBvdXQsIG91dCk7Ci0gICAgc3RybS0+ZGF0YV90eXBlID0gc3RhdGUtPmJpdHMgKyAoc3RhdGUtPmxhc3QgPyA2NCA6IDApICsKKyAgICBzdHJtLT5kYXRhX3R5cGUgPSAoaW50KXN0YXRlLT5iaXRzICsgKHN0YXRlLT5sYXN0ID8gNjQgOiAwKSArCiAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IFRZUEUgPyAxMjggOiAwKSArCiAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IExFTl8gfHwgc3RhdGUtPm1vZGUgPT0gQ09QWV8gPyAyNTYgOiAwKTsKICAgICBpZiAoKChpbiA9PSAwICYmIG91dCA9PSAwKSB8fCBmbHVzaCA9PSBaX0ZJTklTSCkgJiYgcmV0ID09IFpfT0spCkBAIC0xMjU1LDcgKzEyNzgsNyBAQAogel9zdHJlYW1wIHN0cm07CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICBpZiAoc3RhdGUtPndpbmRvdyAhPSBaX05VTEwpIFpGUkVFKHN0cm0sIHN0YXRlLT53aW5kb3cpOwpAQCAtMTI3Myw3ICsxMjk2LDcgQEAKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwogCiAgICAgLyogY2hlY2sgc3RhdGUgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAKICAgICAvKiBjb3B5IGRpY3Rpb25hcnkgKi8KQEAgLTEyOTgsNyArMTMyMSw3IEBACiAgICAgaW50IHJldDsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9IERJQ1QpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKQEAgLTEzMzAsNyArMTM1Myw3IEBACiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIGlmICgoc3RhdGUtPndyYXAgJiAyKSA9PSAwKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKQEAgLTEzODMsNyArMTQwNiw3IEBACiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAogICAgIC8qIGNoZWNrIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgc3RhdGUtPmJpdHMgPCA4KSByZXR1cm4gWl9CVUZfRVJST1I7CiAKQEAgLTE0MzAsNyArMTQ1Myw3IEBACiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gU1RPUkVEICYmIHN0YXRlLT5iaXRzID09IDA7CiB9CkBAIC0xNDQ1LDggKzE0NjgsNyBAQAogICAgIHVuc2lnbmVkIHdzaXplOwogCiAgICAgLyogY2hlY2sgaW5wdXQgKi8KLSAgICBpZiAoZGVzdCA9PSBaX05VTEwgfHwgc291cmNlID09IFpfTlVMTCB8fCBzb3VyY2UtPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBzb3VyY2UtPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwIHx8IHNvdXJjZS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzb3VyY2UpIHx8IGRlc3QgPT0gWl9OVUxMKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc291cmNlLT5zdGF0ZTsKIApAQCAtMTQ2Nyw2ICsxNDg5LDcgQEAKICAgICAvKiBjb3B5IHN0YXRlICovCiAgICAgem1lbWNweSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKICAgICB6bWVtY3B5KCh2b2lkcGYpY29weSwgKHZvaWRwZilzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CisgICAgY29weS0+c3RybSA9IGRlc3Q7CiAgICAgaWYgKHN0YXRlLT5sZW5jb2RlID49IHN0YXRlLT5jb2RlcyAmJgogICAgICAgICBzdGF0ZS0+bGVuY29kZSA8PSBzdGF0ZS0+Y29kZXMgKyBFTk9VR0ggLSAxKSB7CiAgICAgICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bGVuY29kZSAtIHN0YXRlLT5jb2Rlcyk7CkBAIC0xNDg4LDI2ICsxNTExLDUxIEBACiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKLSAgICBzdGF0ZS0+c2FuZSA9ICFzdWJ2ZXJ0OwogI2lmZGVmIElORkxBVEVfQUxMT1dfSU5WQUxJRF9ESVNUQU5DRV9UT09GQVJfQVJSUgorICAgIHN0YXRlLT5zYW5lID0gIXN1YnZlcnQ7CiAgICAgcmV0dXJuIFpfT0s7CiAjZWxzZQorICAgICh2b2lkKXN1YnZlcnQ7CiAgICAgc3RhdGUtPnNhbmUgPSAxOwogICAgIHJldHVybiBaX0RBVEFfRVJST1I7CiAjZW5kaWYKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZVZhbGlkYXRlKHN0cm0sIGNoZWNrKQorel9zdHJlYW1wIHN0cm07CitpbnQgY2hlY2s7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIGlmIChjaGVjaykKKyAgICAgICAgc3RhdGUtPndyYXAgfD0gNDsKKyAgICBlbHNlCisgICAgICAgIHN0YXRlLT53cmFwICY9IH40OworICAgIHJldHVybiBaX09LOworfQorCiBsb25nIFpFWFBPUlQgaW5mbGF0ZU1hcmsoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKQotICAgICAgICByZXR1cm4gKGxvbmcpKCgodW5zaWduZWQgbG9uZykwIC0gMSkgPDwgMTYpOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkKKyAgICAgICAgcmV0dXJuIC0oMUwgPDwgMTYpOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHJldHVybiAobG9uZykoKCh1bnNpZ25lZCBsb25nKSgobG9uZylzdGF0ZS0+YmFjaykpIDw8IDE2KSArCiAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBDT1BZID8gc3RhdGUtPmxlbmd0aCA6CiAgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gTUFUQ0ggPyBzdGF0ZS0+d2FzIC0gc3RhdGUtPmxlbmd0aCA6IDApKTsKIH0KKwordW5zaWduZWQgbG9uZyBaRVhQT1JUIGluZmxhdGVDb2Rlc1VzZWQoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShzdGF0ZS0+bmV4dCAtIHN0YXRlLT5jb2Rlcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5mbGF0ZS5oIGIvc3JjL2luZmxhdGUuaAppbmRleCA5NWY0OTg2Li5hNDZjY2U2IDEwMDY0NAotLS0gYS9zcmMvaW5mbGF0ZS5oCisrKyBiL3NyYy9pbmZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmggLS0gaW50ZXJuYWwgaW5mbGF0ZSBzdGF0ZSBkZWZpbml0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTgsNyArMTgsNyBAQAogCiAvKiBQb3NzaWJsZSBpbmZsYXRlIG1vZGVzIGJldHdlZW4gaW5mbGF0ZSgpIGNhbGxzICovCiB0eXBlZGVmIGVudW0gewotICAgIEhFQUQsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1hZ2ljIGhlYWRlciAqLworICAgIEhFQUQgPSAxNjE4MCwgICAvKiBpOiB3YWl0aW5nIGZvciBtYWdpYyBoZWFkZXIgKi8KICAgICBGTEFHUywgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtZXRob2QgYW5kIGZsYWdzIChnemlwKSAqLwogICAgIFRJTUUsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lIChnemlwKSAqLwogICAgIE9TLCAgICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGZsYWdzIGFuZCBvcGVyYXRpbmcgc3lzdGVtIChnemlwKSAqLwpAQCAtNzcsMTEgKzc3LDE0IEBACiAgICAgICAgIENIRUNLIC0+IExFTkdUSCAtPiBET05FCiAgKi8KIAotLyogc3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscy4gIEFwcHJveGltYXRlbHkgMTBLIGJ5dGVzLiAqLworLyogU3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscyAtLSBhcHByb3hpbWF0ZWx5IDdLIGJ5dGVzLCBub3QKKyAgIGluY2x1ZGluZyB0aGUgYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCB3aGljaCBpcyB1cCB0byAzMksgYnl0ZXMuICovCiBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSB7CisgICAgel9zdHJlYW1wIHN0cm07ICAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0aGlzIHpsaWIgc3RyZWFtICovCiAgICAgaW5mbGF0ZV9tb2RlIG1vZGU7ICAgICAgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZSBtb2RlICovCiAgICAgaW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJsb2NrICovCi0gICAgaW50IHdyYXA7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KKyAgICBpbnQgd3JhcDsgICAgICAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDIgdHJ1ZSB0byB2YWxpZGF0ZSBjaGVjayB2YWx1ZSAqLwogICAgIGludCBoYXZlZGljdDsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi8KICAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogZ3ppcCBoZWFkZXIgbWV0aG9kIGFuZCBmbGFncyAoMCBpZiB6bGliKSAqLwogICAgIHVuc2lnbmVkIGRtYXg7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luZnRyZWVzLmMgYi9zcmMvaW5mdHJlZXMuYwppbmRleCA0NGQ4OWNmLi4yZWEwOGZjIDEwMDY0NAotLS0gYS9zcmMvaW5mdHJlZXMuYworKysgYi9zcmMvaW5mdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWVzLmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgTUFYQklUUyAxNQogCiBjb25zdCBjaGFyIGluZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBpbmZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgTWFyayBBZGxlciAiOworICAgIiBpbmZsYXRlIDEuMi4xMSBDb3B5cmlnaHQgMTk5NS0yMDE3IE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNTQsNyArNTQsNyBAQAogICAgIGNvZGUgRkFSICpuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqLwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZBUiAqYmFzZTsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUgdG8gdXNlICovCiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRkFSICpleHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2UgKi8KLSAgICBpbnQgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi8KKyAgICB1bnNpZ25lZCBtYXRjaDsgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPj0gbWF0Y2ggKi8KICAgICB1bnNpZ25lZCBzaG9ydCBjb3VudFtNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi8KICAgICB1bnNpZ25lZCBzaG9ydCBvZmZzW01BWEJJVFMrMV07ICAgICAvKiBvZmZzZXRzIGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsYmFzZVszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwKLSAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OH07CisgICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3NywgMjAyfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2VbMzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LApAQCAtMTgxLDE5ICsxODEsMTcgQEAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIENPREVTOgogICAgICAgICBiYXNlID0gZXh0cmEgPSB3b3JrOyAgICAvKiBkdW1teSB2YWx1ZS0tbm90IHVzZWQgKi8KLSAgICAgICAgZW5kID0gMTk7CisgICAgICAgIG1hdGNoID0gMjA7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTEVOUzoKICAgICAgICAgYmFzZSA9IGxiYXNlOwotICAgICAgICBiYXNlIC09IDI1NzsKICAgICAgICAgZXh0cmEgPSBsZXh0OwotICAgICAgICBleHRyYSAtPSAyNTc7Ci0gICAgICAgIGVuZCA9IDI1NjsKKyAgICAgICAgbWF0Y2ggPSAyNTc7CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgLyogRElTVFMgKi8KKyAgICBkZWZhdWx0OiAgICAvKiBESVNUUyAqLwogICAgICAgICBiYXNlID0gZGJhc2U7CiAgICAgICAgIGV4dHJhID0gZGV4dDsKLSAgICAgICAgZW5kID0gLTE7CisgICAgICAgIG1hdGNoID0gMDsKICAgICB9CiAKICAgICAvKiBpbml0aWFsaXplIHN0YXRlIGZvciBsb29wICovCkBAIC0yMTYsMTMgKzIxNCwxMyBAQAogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5ICovCiAgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICAgICAgaWYgKChpbnQpKHdvcmtbc3ltXSkgPCBlbmQpIHsKKyAgICAgICAgaWYgKHdvcmtbc3ltXSArIDFVIDwgbWF0Y2gpIHsKICAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikwOwogICAgICAgICAgICAgaGVyZS52YWwgPSB3b3JrW3N5bV07CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKGludCkod29ya1tzeW1dKSA+IGVuZCkgewotICAgICAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKShleHRyYVt3b3JrW3N5bV1dKTsKLSAgICAgICAgICAgIGhlcmUudmFsID0gYmFzZVt3b3JrW3N5bV1dOworICAgICAgICBlbHNlIGlmICh3b3JrW3N5bV0gPj0gbWF0Y2gpIHsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikoZXh0cmFbd29ya1tzeW1dIC0gbWF0Y2hdKTsKKyAgICAgICAgICAgIGhlcmUudmFsID0gYmFzZVt3b3JrW3N5bV0gLSBtYXRjaF07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpKDMyICsgNjQpOyAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqLwpkaWZmIC0tZ2l0IGEvc3JjL21zZG9zL01ha2VmaWxlLmRqMiBiL3NyYy9tc2Rvcy9NYWtlZmlsZS5kajIKaW5kZXggMjliMDM5NS4uNTlkMjAzNyAxMDA2NDQKLS0tIGEvc3JjL21zZG9zL01ha2VmaWxlLmRqMgorKysgYi9zcmMvbXNkb3MvTWFrZWZpbGUuZGoyCkBAIC0yOSw3ICsyOSw3IEBACiAKICNDRkxBR1M9LU1NRCAtTwogI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NwotI0NGTEFHUz0tTU1EIC1nIC1EREVCVUcKKyNDRkxBR1M9LU1NRCAtZyAtRFpMSUJfREVCVUcKIENGTEFHUz0tTU1EIC1PMyAkKEJVVFQpIC1XYWxsIC1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdjb252ZXJzaW9uIFwKICAgICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzCiAKZGlmZiAtLWdpdCBhL3NyYy9tc2Rvcy9NYWtlZmlsZS5lbXggYi9zcmMvbXNkb3MvTWFrZWZpbGUuZW14CmluZGV4IDljMWI1N2EuLmUzMGY2N2IgMTAwNjQ0Ci0tLSBhL3NyYy9tc2Rvcy9NYWtlZmlsZS5lbXgKKysrIGIvc3JjL21zZG9zL01ha2VmaWxlLmVteApAQCAtMTEsNyArMTEsNyBAQAogCiAjQ0ZMQUdTPS1NTUQgLU8KICNDRkxBR1M9LU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTcKLSNDRkxBR1M9LU1NRCAtZyAtRERFQlVHCisjQ0ZMQUdTPS1NTUQgLWcgLURaTElCX0RFQlVHCiBDRkxBR1M9LU1NRCAtTzMgJChCVVRUKSAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XY29udmVyc2lvbiBcCiAgICAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcwogCmRpZmYgLS1naXQgYS9zcmMvb2xkL01ha2VmaWxlLmVteCBiL3NyYy9vbGQvTWFrZWZpbGUuZW14CmluZGV4IDRkNmFiMGUuLjYxMmIwMzcgMTAwNjQ0Ci0tLSBhL3NyYy9vbGQvTWFrZWZpbGUuZW14CisrKyBiL3NyYy9vbGQvTWFrZWZpbGUuZW14CkBAIC0xMSw3ICsxMSw3IEBACiAKICNDRkxBR1M9LU1NRCAtTwogI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NwotI0NGTEFHUz0tTU1EIC1nIC1EREVCVUcKKyNDRkxBR1M9LU1NRCAtZyAtRFpMSUJfREVCVUcKIENGTEFHUz0tTU1EIC1PMyAkKEJVVFQpIC1XYWxsIC1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdjb252ZXJzaW9uIFwKICAgICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzCiAKZGlmZiAtLWdpdCBhL3NyYy9vbGQvb3MyL01ha2VmaWxlLm9zMiBiL3NyYy9vbGQvb3MyL01ha2VmaWxlLm9zMgppbmRleCBhMTA1YWFhLi5iYjQyNmMwIDEwMDY0NAotLS0gYS9zcmMvb2xkL29zMi9NYWtlZmlsZS5vczIKKysrIGIvc3JjL29sZC9vczIvTWFrZWZpbGUub3MyCkBAIC0xNCw3ICsxNCw3IEBACiAKIENGTEFHUz0tTzYgLVdhbGwKICNDRkxBR1M9LU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTcKLSNDRkxBR1M9LWcgLURERUJVRworI0NGTEFHUz0tZyAtRFpMSUJfREVCVUcKICNDRkxBR1M9LU8zIC1XYWxsIC1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdjb252ZXJzaW9uIFwKICMgICAgICAgICAgIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMKIApkaWZmIC0tZ2l0IGEvc3JjL3FueC9wYWNrYWdlLnFwZyBiL3NyYy9xbngvcGFja2FnZS5xcGcKaW5kZXggYWViZjZlMy4uMzFlOGU5MCAxMDA2NDQKLS0tIGEvc3JjL3FueC9wYWNrYWdlLnFwZworKysgYi9zcmMvcW54L3BhY2thZ2UucXBnCkBAIC0yNSwxMCArMjUsMTAgQEAKICAgICAgIDxRUEc6RmlsZXM+CiAgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi96Y29uZi5oIiBpbnN0YWxsPSIvb3B0L2luY2x1ZGUvIiB1c2VyPSJyb290OnN5cyIgcGVybWlzc2lvbj0iNjQ0Ii8+CiAgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi96bGliLmgiIGluc3RhbGw9Ii9vcHQvaW5jbHVkZS8iIHVzZXI9InJvb3Q6c3lzIiBwZXJtaXNzaW9uPSI2NDQiLz4KLSAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL2xpYnouc28uMS4yLjgiIGluc3RhbGw9Ii9vcHQvbGliLyIgdXNlcj0icm9vdDpiaW4iIHBlcm1pc3Npb249IjY0NCIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zbyIgaW5zdGFsbD0iL29wdC9saWIvIiBjb21wb25lbnQ9ImRldiIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuOCIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zby4xIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjgiLz4KLSAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL2xpYnouc28uMS4yLjgiIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJzbGliIi8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi4xMSIgaW5zdGFsbD0iL29wdC9saWIvIiB1c2VyPSJyb290OmJpbiIgcGVybWlzc2lvbj0iNjQ0Ii8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSJsaWJ6LnNvIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGNvbXBvbmVudD0iZGV2IiBmaWxldHlwZT0ic3ltbGluayIgbGlua3RvPSJsaWJ6LnNvLjEuMi4xMSIvPgorICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zby4xIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjExIi8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi4xMSIgaW5zdGFsbD0iL29wdC9saWIvIiBjb21wb25lbnQ9InNsaWIiLz4KICAgICAgIDwvUVBHOkZpbGVzPgogCiAgICAgICA8UVBHOlBhY2thZ2VGaWx0ZXI+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICA8L1FQTTpQcm9kdWN0RGVzY3JpcHRpb24+CiAKICAgICAgICAgICAgIDxRUE06UmVsZWFzZURlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlVmVyc2lvbj4xLjIuODwvUVBNOlJlbGVhc2VWZXJzaW9uPgorICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlVmVyc2lvbj4xLjIuMTE8L1FQTTpSZWxlYXNlVmVyc2lvbj4KICAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZVVyZ2VuY3k+TWVkaXVtPC9RUE06UmVsZWFzZVVyZ2VuY3k+CiAgICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VTdGFiaWxpdHk+U3RhYmxlPC9RUE06UmVsZWFzZVN0YWJpbGl0eT4KICAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZU5vdGVNaW5vcj48L1FQTTpSZWxlYXNlTm90ZU1pbm9yPgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZXhhbXBsZS5jIGIvc3JjL3Rlc3QvZXhhbXBsZS5jCmluZGV4IDEzOGE2OTkuLmVlZTE3Y2UgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2V4YW1wbGUuYworKysgYi9zcmMvdGVzdC9leGFtcGxlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBleGFtcGxlLmMgLS0gdXNhZ2UgZXhhbXBsZSBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTEsIDIwMTYgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIH0gXAogfQogCi16X2NvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKK3N0YXRpYyB6X2NvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKIC8qICJoZWxsbyB3b3JsZCIgd291bGQgYmUgbW9yZSBzdGFuZGFyZCwgYnV0IHRoZSByZXBlYXRlZCAiaGVsbG8iCiAgKiBzdHJlc3NlcyB0aGUgY29tcHJlc3Npb24gY29kZSBiZXR0ZXIsIHNvcnJ5Li4uCiAgKi8KIAotY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOwotdUxvbmcgZGljdElkOyAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCitzdGF0aWMgY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOworc3RhdGljIHVMb25nIGRpY3RJZDsgICAgLyogQWRsZXIzMiB2YWx1ZSBvZiB0aGUgZGljdGlvbmFyeSAqLwogCiB2b2lkIHRlc3RfZGVmbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuKSk7CiB2b2lkIHRlc3RfaW5mbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLApAQCAtNTksMTMgKzU5LDEzIEBACiAgICAgdm9pZCAqcTsKICAgICB1bnNpZ25lZCBuLCBtOwogewotICAgIHEgPSBaX05VTEw7CisgICAgKHZvaWQpcTsKICAgICByZXR1cm4gY2FsbG9jKG4sIG0pOwogfQogCiB2b2lkIG15ZnJlZSh2b2lkICpxLCB2b2lkICpwKQogewotICAgIHEgPSBaX05VTEw7CisgICAgKHZvaWQpcTsKICAgICBmcmVlKHApOwogfQogCkBAIC00MzIsNyArNDMyLDcgQEAKICAgICBkX3N0cmVhbS5uZXh0X291dCA9IHVuY29tcHI7CiAgICAgZF9zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpdW5jb21wckxlbjsKIAotICAgIGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICBlcnIgPSBpbmZsYXRlKCZkX3N0cmVhbSwgWl9OT19GTFVTSCk7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUiKTsKIAogICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW4tMjsgICAvKiByZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgKi8KQEAgLTU3Myw3ICs1NzMsOCBAQAogICAgIH0KIAogI2lmZGVmIFpfU09MTwotICAgIGFyZ2MgPSBzdHJsZW4oYXJndlswXSk7CisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OwogI2Vsc2UKICAgICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2luZmNvdmVyLmMgYi9zcmMvdGVzdC9pbmZjb3Zlci5jCmluZGV4IGZlM2Q5MjAuLjJiZTAxNjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2luZmNvdmVyLmMKKysrIGIvc3JjL3Rlc3QvaW5mY292ZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmNvdmVyLmMgLS0gdGVzdCB6bGliJ3MgaW5mbGF0ZSByb3V0aW5lcyB3aXRoIGZ1bGwgY29kZSBjb3ZlcmFnZQotICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMjM3LDE0ICsyMzcsMTQgQEAKIAogLyogRGVjb2RlIGEgaGV4YWRlY2ltYWwgc3RyaW5nLCBzZXQgKmxlbiB0byBsZW5ndGgsIGluW10gdG8gdGhlIGJ5dGVzLiAgVGhpcwogICAgZGVjb2RlcyBsaWJlcmFsbHksIGluIHRoYXQgaGV4IGRpZ2l0cyBjYW4gYmUgYWRqYWNlbnQsIGluIHdoaWNoIGNhc2UgdHdvIGluCi0gICBhIHJvdyB3cml0ZXMgYSBieXRlLiAgT3IgdGhleSBjYW4gZGVsaW1pdGVkIGJ5IGFueSBub24taGV4IGNoYXJhY3Rlciwgd2hlcmUKLSAgIHRoZSBkZWxpbWl0ZXJzIGFyZSBpZ25vcmVkIGV4Y2VwdCB3aGVuIGEgc2luZ2xlIGhleCBkaWdpdCBpcyBmb2xsb3dlZCBieSBhCi0gICBkZWxpbWl0ZXIgaW4gd2hpY2ggY2FzZSB0aGF0IHNpbmdsZSBkaWdpdCB3cml0ZXMgYSBieXRlLiAgVGhlIHJldHVybmVkCi0gICBkYXRhIGlzIGFsbG9jYXRlZCBhbmQgbXVzdCBldmVudHVhbGx5IGJlIGZyZWVkLiAgTlVMTCBpcyByZXR1cm5lZCBpZiBvdXQgb2YKLSAgIG1lbW9yeS4gIElmIHRoZSBsZW5ndGggaXMgbm90IG5lZWRlZCwgdGhlbiBsZW4gY2FuIGJlIE5VTEwuICovCisgICBhIHJvdyB3cml0ZXMgYSBieXRlLiAgT3IgdGhleSBjYW4gYmUgZGVsaW1pdGVkIGJ5IGFueSBub24taGV4IGNoYXJhY3RlciwKKyAgIHdoZXJlIHRoZSBkZWxpbWl0ZXJzIGFyZSBpZ25vcmVkIGV4Y2VwdCB3aGVuIGEgc2luZ2xlIGhleCBkaWdpdCBpcyBmb2xsb3dlZAorICAgYnkgYSBkZWxpbWl0ZXIsIHdoZXJlIHRoYXQgc2luZ2xlIGRpZ2l0IHdyaXRlcyBhIGJ5dGUuICBUaGUgcmV0dXJuZWQgZGF0YSBpcworICAgYWxsb2NhdGVkIGFuZCBtdXN0IGV2ZW50dWFsbHkgYmUgZnJlZWQuICBOVUxMIGlzIHJldHVybmVkIGlmIG91dCBvZiBtZW1vcnkuCisgICBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBuZWVkZWQsIHRoZW4gbGVuIGNhbiBiZSBOVUxMLiAqLwogbG9jYWwgdW5zaWduZWQgY2hhciAqaDJiKGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgKmxlbikKIHsKLSAgICB1bnNpZ25lZCBjaGFyICppbjsKKyAgICB1bnNpZ25lZCBjaGFyICppbiwgKnJlOwogICAgIHVuc2lnbmVkIG5leHQsIHZhbDsKIAogICAgIGluID0gbWFsbG9jKChzdHJsZW4oaGV4KSArIDEpID4+IDEpOwpAQCAtMjY4LDggKzI2OCw4IEBACiAgICAgfSB3aGlsZSAoKmhleCsrKTsgICAgICAgLyogZ28gdGhyb3VnaCB0aGUgbG9vcCB3aXRoIHRoZSB0ZXJtaW5hdGluZyBudWxsICovCiAgICAgaWYgKGxlbiAhPSBOVUxMKQogICAgICAgICAqbGVuID0gbmV4dDsKLSAgICBpbiA9IHJlYWxsb2NmKGluLCBuZXh0KTsKLSAgICByZXR1cm4gaW47CisgICAgcmUgPSByZWFsbG9jKGluLCBuZXh0KTsKKyAgICByZXR1cm4gcmUgPT0gTlVMTCA/IGluIDogcmU7CiB9CiAKIC8qIGdlbmVyaWMgaW5mbGF0ZSgpIHJ1biwgd2hlcmUgaGV4IGlzIHRoZSBoZXhhZGVjaW1hbCBpbnB1dCBkYXRhLCB3aGF0IGlzIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbWluaWd6aXAuYyBiL3NyYy90ZXN0L21pbmlnemlwLmMKaW5kZXggYjMwMjVhNC4uZTIyZmIwOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbWluaWd6aXAuYworKysgYi9zcmMvdGVzdC9taW5pZ3ppcC5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWluaWd6aXAuYyAtLSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSwgMjAxNiBKZWFuLWxvdXAgR2FpbGx5CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDAsNyArNDAsNyBAQAogIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKQogI2VuZGlmCiAKLSNpZmRlZiBfTVNDX1ZFUgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTkwMAogIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKQEAgLTE1NiwxNCArMTU2LDE0IEBACiAgICAgdm9pZCAqcTsKICAgICB1bnNpZ25lZCBuLCBtOwogewotICAgIHEgPSBaX05VTEw7CisgICAgKHZvaWQpcTsKICAgICByZXR1cm4gY2FsbG9jKG4sIG0pOwogfQogCiB2b2lkIG15ZnJlZShxLCBwKQogICAgIHZvaWQgKnEsICpwOwogewotICAgIHEgPSBaX05VTEw7CisgICAgKHZvaWQpcTsKICAgICBmcmVlKHApOwogfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAogI2VuZGlmCiAKLWNoYXIgKnByb2c7CitzdGF0aWMgY2hhciAqcHJvZzsKIAogdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKIHZvaWQgZ3pfY29tcHJlc3MgICAgICBPRigoRklMRSAgICppbiwgZ3pGaWxlIG91dCkpOwpAQCAtNTAwLDcgKzUwMCw3IEBACiAgICAgY2hhciAqaW5maWxlLCAqb3V0ZmlsZTsKICAgICBGSUxFICAqb3V0OwogICAgIGd6RmlsZSBpbjsKLSAgICBzaXplX3QgbGVuID0gc3RybGVuKGZpbGUpOworICAgIHVuc2lnbmVkIGxlbiA9IHN0cmxlbihmaWxlKTsKIAogICAgIGlmIChsZW4gKyBzdHJsZW4oR1pfU1VGRklYKSA+PSBzaXplb2YoYnVmKSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmaWxlbmFtZSB0b28gbG9uZ1xuIiwgcHJvZyk7CmRpZmYgLS1naXQgYS9zcmMvdHJlZWJ1aWxkLnhtbCBiL3NyYy90cmVlYnVpbGQueG1sCmluZGV4IDM4ZDI5ZDcuLmZkNzU1MjUgMTAwNjQ0Ci0tLSBhL3NyYy90cmVlYnVpbGQueG1sCisrKyBiL3NyYy90cmVlYnVpbGQueG1sCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPHBhY2thZ2UgbmFtZT0iemxpYiIgdmVyc2lvbj0iMS4yLjgiPgotICAgIDxsaWJyYXJ5IG5hbWU9InpsaWIiIGRsdmVyc2lvbj0iMS4yLjgiIGRsbmFtZT0ieiI+Cis8cGFja2FnZSBuYW1lPSJ6bGliIiB2ZXJzaW9uPSIxLjIuMTEiPgorICAgIDxsaWJyYXJ5IG5hbWU9InpsaWIiIGRsdmVyc2lvbj0iMS4yLjExIiBkbG5hbWU9InoiPgogCTxwcm9wZXJ0eSBuYW1lPSJkZXNjcmlwdGlvbiI+IHppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IDwvcHJvcGVydHk+CiAJPHByb3BlcnR5IG5hbWU9ImluY2x1ZGUtdGFyZ2V0LWRpciIgdmFsdWU9IiQoQFBBQ0tBR0UvaW5zdGFsbC1pbmNsdWRlZGlyKSIgLz4KIApAQCAtMTAxLDcgKzEwMSw3IEBACiA8IS0tCiBDRkxBR1M9LU8KICNDRkxBR1M9LU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTcKLSNDRkxBR1M9LWcgLURERUJVRworI0NGTEFHUz0tZyAtRFpMSUJfREVCVUcKICNDRkxBR1M9LU8zIC1XYWxsIC1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdjb252ZXJzaW9uIFwKICMgICAgICAgICAgIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMKIApkaWZmIC0tZ2l0IGEvc3JjL3RyZWVzLmMgYi9zcmMvdHJlZXMuYwppbmRleCAxZmQ3NzU5Li41MGNmNGI0IDEwMDY0NAotLS0gYS9zcmMvdHJlZXMuYworKysgYi9zcmMvdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkKICAqIGRldGVjdF9kYXRhX3R5cGUoKSBmdW5jdGlvbiBwcm92aWRlZCBmcmVlbHkgYnkgQ29zbWluIFRydXRhLCAyMDA2CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogIyAgaW5jbHVkZSA8Y3R5cGUuaD4KICNlbmRpZgogCkBAIC0xMjIsMTMgKzEyMiwxMyBAQAogICAgIGludCAgICAgbWF4X2xlbmd0aDsgICAgICAgICAgLyogbWF4IGJpdCBsZW5ndGggZm9yIHRoZSBjb2RlcyAqLwogfTsKIAotbG9jYWwgc3RhdGljX3RyZWVfZGVzYyAgc3RhdGljX2xfZGVzYyA9Citsb2NhbCBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfbF9kZXNjID0KIHtzdGF0aWNfbHRyZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUysxLCBMX0NPREVTLCBNQVhfQklUU307CiAKLWxvY2FsIHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19kX2Rlc2MgPQorbG9jYWwgY29uc3Qgc3RhdGljX3RyZWVfZGVzYyAgc3RhdGljX2RfZGVzYyA9CiB7c3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFN9OwogCi1sb2NhbCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfYmxfZGVzYyA9Citsb2NhbCBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfYmxfZGVzYyA9CiB7KGNvbnN0IGN0X2RhdGEgKikwLCBleHRyYV9ibGJpdHMsIDAsICAgQkxfQ09ERVMsIE1BWF9CTF9CSVRTfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTIsMTggKzE1MiwxNiBAQAogbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBPRigodW5zaWduZWQgdmFsdWUsIGludCBsZW5ndGgpKTsKIGxvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgYmlfZmx1c2ggICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIHZvaWQgY29weV9ibG9jayAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsIHVuc2lnbmVkIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWFkZXIpKTsKIAogI2lmZGVmIEdFTl9UUkVFU19ICiBsb2NhbCB2b2lkIGdlbl90cmVlc19oZWFkZXIgT0YoKHZvaWQpKTsKICNlbmRpZgogCi0jaWZuZGVmIERFQlVHCisjaWZuZGVmIFpMSUJfREVCVUcKICMgIGRlZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgc2VuZF9iaXRzKHMsIHRyZWVbY10uQ29kZSwgdHJlZVtjXS5MZW4pCiAgICAvKiBTZW5kIGEgY29kZSBvZiB0aGUgZ2l2ZW4gdHJlZS4gYyBhbmQgdHJlZSBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwogCi0jZWxzZSAvKiBERUJVRyAqLworI2Vsc2UgLyogIVpMSUJfREVCVUcgKi8KICMgIGRlZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgXAogICAgICB7IGlmICh6X3ZlcmJvc2U+MikgZnByaW50ZihzdGRlcnIsIlxuY2QgJTNkICIsKGMpKTsgXAogICAgICAgIHNlbmRfYml0cyhzLCB0cmVlW2NdLkNvZGUsIHRyZWVbY10uTGVuKTsgfQpAQCAtMTgyLDcgKzE4MCw3IEBACiAgKiBTZW5kIGEgdmFsdWUgb24gYSBnaXZlbiBudW1iZXIgb2YgYml0cy4KICAqIElOIGFzc2VydGlvbjogbGVuZ3RoIDw9IDE2IGFuZCB2YWx1ZSBmaXRzIGluIGxlbmd0aCBiaXRzLgogICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiBsb2NhbCB2b2lkIHNlbmRfYml0cyAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgdmFsdWUsIGludCBsZW5ndGgpKTsKIAogbG9jYWwgdm9pZCBzZW5kX2JpdHMocywgdmFsdWUsIGxlbmd0aCkKQEAgLTIwOCwxMiArMjA2LDEyIEBACiAgICAgICAgIHMtPmJpX3ZhbGlkICs9IGxlbmd0aDsKICAgICB9CiB9Ci0jZWxzZSAvKiAhREVCVUcgKi8KKyNlbHNlIC8qICFaTElCX0RFQlVHICovCiAKICNkZWZpbmUgc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIFwKIHsgaW50IGxlbiA9IGxlbmd0aDtcCiAgIGlmIChzLT5iaV92YWxpZCA+IChpbnQpQnVmX3NpemUgLSBsZW4pIHtcCi0gICAgaW50IHZhbCA9IHZhbHVlO1wKKyAgICBpbnQgdmFsID0gKGludCl2YWx1ZTtcCiAgICAgcy0+YmlfYnVmIHw9ICh1c2gpdmFsIDw8IHMtPmJpX3ZhbGlkO1wKICAgICBwdXRfc2hvcnQocywgcy0+YmlfYnVmKTtcCiAgICAgcy0+YmlfYnVmID0gKHVzaCl2YWwgPj4gKEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQpO1wKQEAgLTIyMyw3ICsyMjEsNyBAQAogICAgIHMtPmJpX3ZhbGlkICs9IGxlbjtcCiAgIH1cCiB9Ci0jZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBaTElCX0RFQlVHICovCiAKIAogLyogdGhlIGFyZ3VtZW50cyBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwpAQCAtMzE3LDcgKzMxNSw3IEBACiAgKiBHZW5lcmVyYXRlIHRoZSBmaWxlIHRyZWVzLmggZGVzY3JpYmluZyB0aGUgc3RhdGljIHRyZWVzLgogICovCiAjaWZkZWYgR0VOX1RSRUVTX0gKLSMgIGlmbmRlZiBERUJVRworIyAgaWZuZGVmIFpMSUJfREVCVUcKICMgICAgaW5jbHVkZSA8c3RkaW8uaD4KICMgIGVuZGlmCiAKQEAgLTM5NCw3ICszOTIsNyBAQAogCiAgICAgcy0+YmlfYnVmID0gMDsKICAgICBzLT5iaV92YWxpZCA9IDA7Ci0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAwTDsKICAgICBzLT5iaXRzX3NlbnQgPSAwTDsKICNlbmRpZgpAQCAtNTIyLDEyICs1MjAsMTIgQEAKICAgICAgICAgeGJpdHMgPSAwOwogICAgICAgICBpZiAobiA+PSBiYXNlKSB4Yml0cyA9IGV4dHJhW24tYmFzZV07CiAgICAgICAgIGYgPSB0cmVlW25dLkZyZXE7Ci0gICAgICAgIHMtPm9wdF9sZW4gKz0gKHVsZylmICogKGJpdHMgKyB4Yml0cyk7Ci0gICAgICAgIGlmIChzdHJlZSkgcy0+c3RhdGljX2xlbiArPSAodWxnKWYgKiAoc3RyZWVbbl0uTGVuICsgeGJpdHMpOworICAgICAgICBzLT5vcHRfbGVuICs9ICh1bGcpZiAqICh1bnNpZ25lZCkoYml0cyArIHhiaXRzKTsKKyAgICAgICAgaWYgKHN0cmVlKSBzLT5zdGF0aWNfbGVuICs9ICh1bGcpZiAqICh1bnNpZ25lZCkoc3RyZWVbbl0uTGVuICsgeGJpdHMpOwogICAgIH0KICAgICBpZiAob3ZlcmZsb3cgPT0gMCkgcmV0dXJuOwogCi0gICAgVHJhY2UoKHN0ZGVyciwiXG5iaXQgbGVuZ3RoIG92ZXJmbG93XG4iKSk7CisgICAgVHJhY2V2KChzdGRlcnIsIlxuYml0IGxlbmd0aCBvdmVyZmxvd1xuIikpOwogICAgIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBwaWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovCiAKICAgICAvKiBGaW5kIHRoZSBmaXJzdCBiaXQgbGVuZ3RoIHdoaWNoIGNvdWxkIGluY3JlYXNlOiAqLwpAQCAtNTU0LDkgKzU1Miw4IEBACiAgICAgICAgICAgICBtID0gcy0+aGVhcFstLWhdOwogICAgICAgICAgICAgaWYgKG0gPiBtYXhfY29kZSkgY29udGludWU7CiAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSB0cmVlW21dLkxlbiAhPSAodW5zaWduZWQpIGJpdHMpIHsKLSAgICAgICAgICAgICAgICBUcmFjZSgoc3RkZXJyLCJjb2RlICVkIGJpdHMgJWQtPiVkXG4iLCBtLCB0cmVlW21dLkxlbiwgYml0cykpOwotICAgICAgICAgICAgICAgIHMtPm9wdF9sZW4gKz0gKChsb25nKWJpdHMgLSAobG9uZyl0cmVlW21dLkxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoobG9uZyl0cmVlW21dLkZyZXE7CisgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsImNvZGUgJWQgYml0cyAlZC0+JWRcbiIsIG0sIHRyZWVbbV0uTGVuLCBiaXRzKSk7CisgICAgICAgICAgICAgICAgcy0+b3B0X2xlbiArPSAoKHVsZyliaXRzIC0gdHJlZVttXS5MZW4pICogdHJlZVttXS5GcmVxOwogICAgICAgICAgICAgICAgIHRyZWVbbV0uTGVuID0gKHVzaCliaXRzOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbi0tOwpAQCAtNTc4LDcgKzU3NSw3IEBACiAgICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqLwogewogICAgIHVzaCBuZXh0X2NvZGVbTUFYX0JJVFMrMV07IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovCi0gICAgdXNoIGNvZGUgPSAwOyAgICAgICAgICAgICAgLyogcnVubmluZyBjb2RlIHZhbHVlICovCisgICAgdW5zaWduZWQgY29kZSA9IDA7ICAgICAgICAgLyogcnVubmluZyBjb2RlIHZhbHVlICovCiAgICAgaW50IGJpdHM7ICAgICAgICAgICAgICAgICAgLyogYml0IGluZGV4ICovCiAgICAgaW50IG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqLwogCkBAIC01ODYsNyArNTgzLDggQEAKICAgICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC4KICAgICAgKi8KICAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKLSAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAgY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gKHVzaCljb2RlOwogICAgIH0KICAgICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlCiAgICAgICogbXVzdCBiZSBhbGwgb25lcy4KQEAgLTU5OSw3ICs1OTcsNyBAQAogICAgICAgICBpbnQgbGVuID0gdHJlZVtuXS5MZW47CiAgICAgICAgIGlmIChsZW4gPT0gMCkgY29udGludWU7CiAgICAgICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovCi0gICAgICAgIHRyZWVbbl0uQ29kZSA9IGJpX3JldmVyc2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKKyAgICAgICAgdHJlZVtuXS5Db2RlID0gKHVzaCliaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7CiAKICAgICAgICAgVHJhY2Vjdih0cmVlICE9IHN0YXRpY19sdHJlZSwgKHN0ZGVyciwiXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpICIsCiAgICAgICAgICAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTsKQEAgLTgyMSw3ICs4MTksNyBAQAogICAgICAgICBpZiAocy0+YmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF1dLkxlbiAhPSAwKSBicmVhazsKICAgICB9CiAgICAgLyogVXBkYXRlIG9wdF9sZW4gdG8gaW5jbHVkZSB0aGUgYml0IGxlbmd0aCB0cmVlIGFuZCBjb3VudHMgKi8KLSAgICBzLT5vcHRfbGVuICs9IDMqKG1heF9ibGluZGV4KzEpICsgNSs1KzQ7CisgICAgcy0+b3B0X2xlbiArPSAzKigodWxnKW1heF9ibGluZGV4KzEpICsgNSs1KzQ7CiAgICAgVHJhY2V2KChzdGRlcnIsICJcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGQiLAogICAgICAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpOwogCkBAIC04NjksMTEgKzg2NywxNyBAQAogICAgIGludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi8KIHsKICAgICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSzw8MSkrbGFzdCwgMyk7ICAgIC8qIHNlbmQgYmxvY2sgdHlwZSAqLwotI2lmZGVmIERFQlVHCisgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLworICAgIHB1dF9zaG9ydChzLCAodXNoKXN0b3JlZF9sZW4pOworICAgIHB1dF9zaG9ydChzLCAodXNoKX5zdG9yZWRfbGVuKTsKKyAgICB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGluZywgKEJ5dGVmICopYnVmLCBzdG9yZWRfbGVuKTsKKyAgICBzLT5wZW5kaW5nICs9IHN0b3JlZF9sZW47CisjaWZkZWYgWkxJQl9ERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gKHMtPmNvbXByZXNzZWRfbGVuICsgMyArIDcpICYgKHVsZyl+N0w7CiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gKHN0b3JlZF9sZW4gKyA0KSA8PCAzOworICAgIHMtPmJpdHNfc2VudCArPSAyKjE2OworICAgIHMtPmJpdHNfc2VudCArPSBzdG9yZWRfbGVuPDwzOwogI2VuZGlmCi0gICAgY29weV9ibG9jayhzLCBidWYsICh1bnNpZ25lZClzdG9yZWRfbGVuLCAxKTsgLyogd2l0aCBoZWFkZXIgKi8KIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04OTQsNyArODk4LDcgQEAKIHsKICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTPDwxLCAzKTsKICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5kaWYKICAgICBiaV9mbHVzaChzKTsKQEAgLTkwMiw3ICs5MDYsNyBAQAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIERldGVybWluZSB0aGUgYmVzdCBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgYmxvY2s6IGR5bmFtaWMgdHJlZXMsIHN0YXRpYwotICogdHJlZXMgb3Igc3RvcmUsIGFuZCBvdXRwdXQgdGhlIGVuY29kZWQgYmxvY2sgdG8gdGhlIHppcCBmaWxlLgorICogdHJlZXMgb3Igc3RvcmUsIGFuZCB3cml0ZSBvdXQgdGhlIGVuY29kZWQgYmxvY2suCiAgKi8KIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC05NzQsNyArOTc4LDcgQEAKICAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2xhc3QsIDMpOwogICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOwotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+c3RhdGljX2xlbjsKICNlbmRpZgogICAgIH0gZWxzZSB7CkBAIC05ODMsNyArOTg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7CiAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7Ci0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5vcHRfbGVuOwogI2VuZGlmCiAgICAgfQpAQCAtOTk1LDcgKzk5OSw3IEBACiAKICAgICBpZiAobGFzdCkgewogICAgICAgICBiaV93aW5kdXAocyk7Ci0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDc7ICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCiAjZW5kaWYKICAgICB9CkBAIC0xMDkwLDcgKzEwOTQsNyBAQAogICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqLwogICAgICAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTsKICAgICAgICAgICAgIGlmIChleHRyYSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07CisgICAgICAgICAgICAgICAgZGlzdCAtPSAodW5zaWduZWQpYmFzZV9kaXN0W2NvZGVdOwogICAgICAgICAgICAgICAgIHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7ICAgLyogc2VuZCB0aGUgZXh0cmEgZGlzdGFuY2UgYml0cyAqLwogICAgICAgICAgICAgfQogICAgICAgICB9IC8qIGxpdGVyYWwgb3IgbWF0Y2ggcGFpciA/ICovCkBAIC0xMTkzLDM0ICsxMTk3LDcgQEAKICAgICB9CiAgICAgcy0+YmlfYnVmID0gMDsKICAgICBzLT5iaV92YWxpZCA9IDA7Ci0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgcy0+Yml0c19zZW50ID0gKHMtPmJpdHNfc2VudCs3KSAmIH43OwogI2VuZGlmCiB9Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weSBhIHN0b3JlZCBibG9jaywgc3RvcmluZyBmaXJzdCB0aGUgbGVuZ3RoIGFuZCBpdHMKLSAqIG9uZSdzIGNvbXBsZW1lbnQgaWYgcmVxdWVzdGVkLgotICovCi1sb2NhbCB2b2lkIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcikKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGNoYXJmICAgICpidWY7ICAgIC8qIHRoZSBpbnB1dCBkYXRhICovCi0gICAgdW5zaWduZWQgbGVuOyAgICAgLyogaXRzIGxlbmd0aCAqLwotICAgIGludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqLwotewotICAgIGJpX3dpbmR1cChzKTsgICAgICAgIC8qIGFsaWduIG9uIGJ5dGUgYm91bmRhcnkgKi8KLQotICAgIGlmIChoZWFkZXIpIHsKLSAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpbGVuKTsKLSAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpfmxlbik7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgcy0+Yml0c19zZW50ICs9IDIqMTY7Ci0jZW5kaWYKLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBzLT5iaXRzX3NlbnQgKz0gKHVsZylsZW48PDM7Ci0jZW5kaWYKLSAgICB3aGlsZSAobGVuLS0pIHsKLSAgICAgICAgcHV0X2J5dGUocywgKmJ1ZisrKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvdW5jb21wci5jIGIvc3JjL3VuY29tcHIuYwppbmRleCAyNDJlOTQ5Li5mMDNhMWE4IDEwMDY0NAotLS0gYS9zcmMvdW5jb21wci5jCisrKyBiL3NyYy91bmNvbXByLmMKQEAgLTEsNSArMSw1IEBACiAvKiB1bmNvbXByLmMgLS0gZGVjb21wcmVzcyBhIG1lbW9yeSBidWZmZXIKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAxMCwgMjAxNCwgMjAxNiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw1MSArOSw4NSBAQAogI2luY2x1ZGUgInpsaWIuaCIKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKLSAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKLSAgIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUKLSAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgotICAgYnkgc29tZSBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKLSAgIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgorICAgICBEZWNvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgKnNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCAqZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCisgICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUgYmVlbiBzYXZlZAorICAgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvciBieSBzb21lCisgICBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikgVXBvbiBleGl0LAorICAgKmRlc3RMZW4gaXMgdGhlIHNpemUgb2YgdGhlIGRlY29tcHJlc3NlZCBkYXRhIGFuZCAqc291cmNlTGVuIGlzIHRoZSBudW1iZXIKKyAgIG9mIHNvdXJjZSBieXRlcyBjb25zdW1lZC4gVXBvbiByZXR1cm4sIHNvdXJjZSArICpzb3VyY2VMZW4gcG9pbnRzIHRvIHRoZQorICAgZmlyc3QgdW51c2VkIGlucHV0IGJ5dGUuCiAKLSAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAotICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0Ci0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkLgorICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyLCBvcgorICAgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQsIGluY2x1ZGluZyBpZiB0aGUgaW5wdXQgZGF0YSBpcworICAgYW4gaW5jb21wbGV0ZSB6bGliIHN0cmVhbS4KICovCitpbnQgWkVYUE9SVCB1bmNvbXByZXNzMiAoZGVzdCwgZGVzdExlbiwgc291cmNlLCBzb3VyY2VMZW4pCisgICAgQnl0ZWYgKmRlc3Q7CisgICAgdUxvbmdmICpkZXN0TGVuOworICAgIGNvbnN0IEJ5dGVmICpzb3VyY2U7CisgICAgdUxvbmcgKnNvdXJjZUxlbjsKK3sKKyAgICB6X3N0cmVhbSBzdHJlYW07CisgICAgaW50IGVycjsKKyAgICBjb25zdCB1SW50IG1heCA9ICh1SW50KS0xOworICAgIHVMb25nIGxlbiwgbGVmdDsKKyAgICBCeXRlIGJ1ZlsxXTsgICAgLyogZm9yIGRldGVjdGlvbiBvZiBpbmNvbXBsZXRlIHN0cmVhbSB3aGVuICpkZXN0TGVuID09IDAgKi8KKworICAgIGxlbiA9ICpzb3VyY2VMZW47CisgICAgaWYgKCpkZXN0TGVuKSB7CisgICAgICAgIGxlZnQgPSAqZGVzdExlbjsKKyAgICAgICAgKmRlc3RMZW4gPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbGVmdCA9IDE7CisgICAgICAgIGRlc3QgPSBidWY7CisgICAgfQorCisgICAgc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKXNvdXJjZTsKKyAgICBzdHJlYW0uYXZhaWxfaW4gPSAwOworICAgIHN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOworICAgIHN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBzdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZXJyID0gaW5mbGF0ZUluaXQoJnN0cmVhbSk7CisgICAgaWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOworCisgICAgc3RyZWFtLm5leHRfb3V0ID0gZGVzdDsKKyAgICBzdHJlYW0uYXZhaWxfb3V0ID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgeworICAgICAgICAgICAgc3RyZWFtLmF2YWlsX291dCA9IGxlZnQgPiAodUxvbmcpbWF4ID8gbWF4IDogKHVJbnQpbGVmdDsKKyAgICAgICAgICAgIGxlZnQgLT0gc3RyZWFtLmF2YWlsX291dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtLmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS5hdmFpbF9pbiA9IGxlbiA+ICh1TG9uZyltYXggPyBtYXggOiAodUludClsZW47CisgICAgICAgICAgICBsZW4gLT0gc3RyZWFtLmF2YWlsX2luOworICAgICAgICB9CisgICAgICAgIGVyciA9IGluZmxhdGUoJnN0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgfSB3aGlsZSAoZXJyID09IFpfT0spOworCisgICAgKnNvdXJjZUxlbiAtPSBsZW4gKyBzdHJlYW0uYXZhaWxfaW47CisgICAgaWYgKGRlc3QgIT0gYnVmKQorICAgICAgICAqZGVzdExlbiA9IHN0cmVhbS50b3RhbF9vdXQ7CisgICAgZWxzZSBpZiAoc3RyZWFtLnRvdGFsX291dCAmJiBlcnIgPT0gWl9CVUZfRVJST1IpCisgICAgICAgIGxlZnQgPSAxOworCisgICAgaW5mbGF0ZUVuZCgmc3RyZWFtKTsKKyAgICByZXR1cm4gZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOgorICAgICAgICAgICBlcnIgPT0gWl9ORUVEX0RJQ1QgPyBaX0RBVEFfRVJST1IgIDoKKyAgICAgICAgICAgZXJyID09IFpfQlVGX0VSUk9SICYmIGxlZnQgKyBzdHJlYW0uYXZhaWxfb3V0ID8gWl9EQVRBX0VSUk9SIDoKKyAgICAgICAgICAgZXJyOworfQorCiBpbnQgWkVYUE9SVCB1bmNvbXByZXNzIChkZXN0LCBkZXN0TGVuLCBzb3VyY2UsIHNvdXJjZUxlbikKICAgICBCeXRlZiAqZGVzdDsKICAgICB1TG9uZ2YgKmRlc3RMZW47CiAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZTsKICAgICB1TG9uZyBzb3VyY2VMZW47CiB7Ci0gICAgel9zdHJlYW0gc3RyZWFtOwotICAgIGludCBlcnI7Ci0KLSAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwotICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKLSAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwotICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX2luICE9IHNvdXJjZUxlbikgcmV0dXJuIFpfQlVGX0VSUk9SOwotCi0gICAgc3RyZWFtLm5leHRfb3V0ID0gZGVzdDsKLSAgICBzdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpKmRlc3RMZW47Ci0gICAgaWYgKCh1TG9uZylzdHJlYW0uYXZhaWxfb3V0ICE9ICpkZXN0TGVuKSByZXR1cm4gWl9CVUZfRVJST1I7Ci0KLSAgICBzdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBzdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0KLSAgICBlcnIgPSBpbmZsYXRlSW5pdCgmc3RyZWFtKTsKLSAgICBpZiAoZXJyICE9IFpfT0spIHJldHVybiBlcnI7Ci0KLSAgICBlcnIgPSBpbmZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKLSAgICBpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkgewotICAgICAgICBpbmZsYXRlRW5kKCZzdHJlYW0pOwotICAgICAgICBpZiAoZXJyID09IFpfTkVFRF9ESUNUIHx8IChlcnIgPT0gWl9CVUZfRVJST1IgJiYgc3RyZWFtLmF2YWlsX2luID09IDApKQotICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgKmRlc3RMZW4gPSBzdHJlYW0udG90YWxfb3V0OwotCi0gICAgZXJyID0gaW5mbGF0ZUVuZCgmc3RyZWFtKTsKLSAgICByZXR1cm4gZXJyOworICAgIHJldHVybiB1bmNvbXByZXNzMihkZXN0LCBkZXN0TGVuLCBzb3VyY2UsICZzb3VyY2VMZW4pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL01ha2VmaWxlLmdjYyBiL3NyYy93aW4zMi9NYWtlZmlsZS5nY2MKaW5kZXggNmQxZGVkNi4uMzA1YmU1MCAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL01ha2VmaWxlLmdjYworKysgYi9zcmMvd2luMzIvTWFrZWZpbGUuZ2NjCkBAIC0zOSw3ICszOSw3IEBACiBTSEFSRURfTU9ERT0wCiAKICNMT0MgPSAtREFTTVYKLSNMT0MgPSAtRERFQlVHIC1nCisjTE9DID0gLURaTElCX0RFQlVHIC1nCiAKIFBSRUZJWCA9CiBDQyA9ICQoUFJFRklYKWdjYwpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL01ha2VmaWxlLm1zYyBiL3NyYy93aW4zMi9NYWtlZmlsZS5tc2MKaW5kZXggNjdiNzczMS4uNjgzMTg4MiAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL01ha2VmaWxlLm1zYworKysgYi9zcmMvd2luMzIvTWFrZWZpbGUubXNjCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYiB1c2luZyBNaWNyb3NvZnQgKFZpc3VhbCkgQwotIyB6bGliIGlzIGNvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyMgemxpYiBpcyBjb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAjCiAjIFVzYWdlOgogIyAgIG5tYWtlIC1mIHdpbjMyL01ha2VmaWxlLm1zYyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YW5kYXJkIGJ1aWxkKQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL1JFQURNRS1XSU4zMi50eHQgYi9zcmMvd2luMzIvUkVBRE1FLVdJTjMyLnR4dAppbmRleCAzZDc3ZDUyLi5kZjdhYjdmIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvUkVBRE1FLVdJTjMyLnR4dAorKysgYi9zcmMvd2luMzIvUkVBRE1FLVdJTjMyLnR4dApAQCAtMSw2ICsxLDYgQEAKIFpMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCiAKLXpsaWIgMS4yLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCit6bGliIDEuMi4xMSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpCkBAIC0yMiw3ICsyMiw3IEBACiAKIE1hbmlmZXN0OgogCi1UaGUgcGFja2FnZSB6bGliLTEuMi44LXdpbjMyLXg4Ni56aXAgd2lsbCBjb250YWluIHRoZSBmb2xsb3dpbmcgZmlsZXM6CitUaGUgcGFja2FnZSB6bGliLTEuMi4xMS13aW4zMi14ODYuemlwIHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgogCiAgIFJFQURNRS1XSU4zMi50eHQgVGhpcyBkb2N1bWVudAogICBDaGFuZ2VMb2cgICAgICAgIENoYW5nZXMgc2luY2UgcHJldmlvdXMgemxpYiBwYWNrYWdlcwpAQCAtNzIsNyArNzIsNyBAQAogCiBDb3B5cmlnaHQgbm90aWNlOgogCi0gIChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvVmlzdWFsQy50eHQgYi9zcmMvd2luMzIvVmlzdWFsQy50eHQKaW5kZXggNTc5YTVmYy4uMTAwNWIyMSAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL1Zpc3VhbEMudHh0CisrKyBiL3NyYy93aW4zMi9WaXN1YWxDLnR4dApAQCAtMSwzICsxLDMgQEAKIAogVG8gYnVpbGQgemxpYiB1c2luZyB0aGUgTWljcm9zb2Z0IFZpc3VhbCBDKysgZW52aXJvbm1lbnQsCi11c2UgdGhlIGFwcHJvcHJpYXRlIHByb2plY3QgZnJvbSB0aGUgcHJvamVjdHMvIGRpcmVjdG9yeS4KK3VzZSB0aGUgYXBwcm9wcmlhdGUgcHJvamVjdCBmcm9tIHRoZSBjb250cmliL3ZzdHVkaW8vIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL3NyYy93aW4zMi96bGliLmRlZiBiL3NyYy93aW4zMi96bGliLmRlZgppbmRleCBmYWNlNjU1Li43ODRiMTM4IDEwMDY0NAotLS0gYS9zcmMvd2luMzIvemxpYi5kZWYKKysrIGIvc3JjL3dpbjMyL3psaWIuZGVmCkBAIC0xLDg2ICsxLDk0IEBACi07IHpsaWIgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci1FWFBPUlRTCi07IGJhc2ljIGZ1bmN0aW9ucwotICAgIHpsaWJWZXJzaW9uCi0gICAgZGVmbGF0ZQotICAgIGRlZmxhdGVFbmQKLSAgICBpbmZsYXRlCi0gICAgaW5mbGF0ZUVuZAotOyBhZHZhbmNlZCBmdW5jdGlvbnMKLSAgICBkZWZsYXRlU2V0RGljdGlvbmFyeQotICAgIGRlZmxhdGVDb3B5Ci0gICAgZGVmbGF0ZVJlc2V0Ci0gICAgZGVmbGF0ZVBhcmFtcwotICAgIGRlZmxhdGVUdW5lCi0gICAgZGVmbGF0ZUJvdW5kCi0gICAgZGVmbGF0ZVBlbmRpbmcKLSAgICBkZWZsYXRlUHJpbWUKLSAgICBkZWZsYXRlU2V0SGVhZGVyCi0gICAgaW5mbGF0ZVNldERpY3Rpb25hcnkKLSAgICBpbmZsYXRlR2V0RGljdGlvbmFyeQotICAgIGluZmxhdGVTeW5jCi0gICAgaW5mbGF0ZUNvcHkKLSAgICBpbmZsYXRlUmVzZXQKLSAgICBpbmZsYXRlUmVzZXQyCi0gICAgaW5mbGF0ZVByaW1lCi0gICAgaW5mbGF0ZU1hcmsKLSAgICBpbmZsYXRlR2V0SGVhZGVyCi0gICAgaW5mbGF0ZUJhY2sKLSAgICBpbmZsYXRlQmFja0VuZAotICAgIHpsaWJDb21waWxlRmxhZ3MKLTsgdXRpbGl0eSBmdW5jdGlvbnMKLSAgICBjb21wcmVzcwotICAgIGNvbXByZXNzMgotICAgIGNvbXByZXNzQm91bmQKLSAgICB1bmNvbXByZXNzCi0gICAgZ3pvcGVuCi0gICAgZ3pkb3BlbgotICAgIGd6YnVmZmVyCi0gICAgZ3pzZXRwYXJhbXMKLSAgICBnenJlYWQKLSAgICBnendyaXRlCi0gICAgZ3pwcmludGYKLSAgICBnenZwcmludGYKLSAgICBnenB1dHMKLSAgICBnemdldHMKLSAgICBnenB1dGMKLSAgICBnemdldGMKLSAgICBnenVuZ2V0YwotICAgIGd6Zmx1c2gKLSAgICBnenNlZWsKLSAgICBnenJld2luZAotICAgIGd6dGVsbAotICAgIGd6b2Zmc2V0Ci0gICAgZ3plb2YKLSAgICBnemRpcmVjdAotICAgIGd6Y2xvc2UKLSAgICBnemNsb3NlX3IKLSAgICBnemNsb3NlX3cKLSAgICBnemVycm9yCi0gICAgZ3pjbGVhcmVycgotOyBsYXJnZSBmaWxlIGZ1bmN0aW9ucwotICAgIGd6b3BlbjY0Ci0gICAgZ3pzZWVrNjQKLSAgICBnenRlbGw2NAotICAgIGd6b2Zmc2V0NjQKLSAgICBhZGxlcjMyX2NvbWJpbmU2NAotICAgIGNyYzMyX2NvbWJpbmU2NAotOyBjaGVja3N1bSBmdW5jdGlvbnMKLSAgICBhZGxlcjMyCi0gICAgY3JjMzIKLSAgICBhZGxlcjMyX2NvbWJpbmUKLSAgICBjcmMzMl9jb21iaW5lCi07IHZhcmlvdXMgaGFja3MsIGRvbid0IGxvb2sgOikKLSAgICBkZWZsYXRlSW5pdF8KLSAgICBkZWZsYXRlSW5pdDJfCi0gICAgaW5mbGF0ZUluaXRfCi0gICAgaW5mbGF0ZUluaXQyXwotICAgIGluZmxhdGVCYWNrSW5pdF8KLSAgICBnemdldGNfCi0gICAgekVycm9yCi0gICAgaW5mbGF0ZVN5bmNQb2ludAotICAgIGdldF9jcmNfdGFibGUKLSAgICBpbmZsYXRlVW5kZXJtaW5lCi0gICAgaW5mbGF0ZVJlc2V0S2VlcAotICAgIGRlZmxhdGVSZXNldEtlZXAKLSAgICBnem9wZW5fdworOyB6bGliIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeQ0KK0VYUE9SVFMNCis7IGJhc2ljIGZ1bmN0aW9ucw0KKyAgICB6bGliVmVyc2lvbg0KKyAgICBkZWZsYXRlDQorICAgIGRlZmxhdGVFbmQNCisgICAgaW5mbGF0ZQ0KKyAgICBpbmZsYXRlRW5kDQorOyBhZHZhbmNlZCBmdW5jdGlvbnMNCisgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkNCisgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkNCisgICAgZGVmbGF0ZUNvcHkNCisgICAgZGVmbGF0ZVJlc2V0DQorICAgIGRlZmxhdGVQYXJhbXMNCisgICAgZGVmbGF0ZVR1bmUNCisgICAgZGVmbGF0ZUJvdW5kDQorICAgIGRlZmxhdGVQZW5kaW5nDQorICAgIGRlZmxhdGVQcmltZQ0KKyAgICBkZWZsYXRlU2V0SGVhZGVyDQorICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5DQorICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5DQorICAgIGluZmxhdGVTeW5jDQorICAgIGluZmxhdGVDb3B5DQorICAgIGluZmxhdGVSZXNldA0KKyAgICBpbmZsYXRlUmVzZXQyDQorICAgIGluZmxhdGVQcmltZQ0KKyAgICBpbmZsYXRlTWFyaw0KKyAgICBpbmZsYXRlR2V0SGVhZGVyDQorICAgIGluZmxhdGVCYWNrDQorICAgIGluZmxhdGVCYWNrRW5kDQorICAgIHpsaWJDb21waWxlRmxhZ3MNCis7IHV0aWxpdHkgZnVuY3Rpb25zDQorICAgIGNvbXByZXNzDQorICAgIGNvbXByZXNzMg0KKyAgICBjb21wcmVzc0JvdW5kDQorICAgIHVuY29tcHJlc3MNCisgICAgdW5jb21wcmVzczINCisgICAgZ3pvcGVuDQorICAgIGd6ZG9wZW4NCisgICAgZ3pidWZmZXINCisgICAgZ3pzZXRwYXJhbXMNCisgICAgZ3pyZWFkDQorICAgIGd6ZnJlYWQNCisgICAgZ3p3cml0ZQ0KKyAgICBnemZ3cml0ZQ0KKyAgICBnenByaW50Zg0KKyAgICBnenZwcmludGYNCisgICAgZ3pwdXRzDQorICAgIGd6Z2V0cw0KKyAgICBnenB1dGMNCisgICAgZ3pnZXRjDQorICAgIGd6dW5nZXRjDQorICAgIGd6Zmx1c2gNCisgICAgZ3pzZWVrDQorICAgIGd6cmV3aW5kDQorICAgIGd6dGVsbA0KKyAgICBnem9mZnNldA0KKyAgICBnemVvZg0KKyAgICBnemRpcmVjdA0KKyAgICBnemNsb3NlDQorICAgIGd6Y2xvc2Vfcg0KKyAgICBnemNsb3NlX3cNCisgICAgZ3plcnJvcg0KKyAgICBnemNsZWFyZXJyDQorOyBsYXJnZSBmaWxlIGZ1bmN0aW9ucw0KKyAgICBnem9wZW42NA0KKyAgICBnenNlZWs2NA0KKyAgICBnenRlbGw2NA0KKyAgICBnem9mZnNldDY0DQorICAgIGFkbGVyMzJfY29tYmluZTY0DQorICAgIGNyYzMyX2NvbWJpbmU2NA0KKzsgY2hlY2tzdW0gZnVuY3Rpb25zDQorICAgIGFkbGVyMzINCisgICAgYWRsZXIzMl96DQorICAgIGNyYzMyDQorICAgIGNyYzMyX3oNCisgICAgYWRsZXIzMl9jb21iaW5lDQorICAgIGNyYzMyX2NvbWJpbmUNCis7IHZhcmlvdXMgaGFja3MsIGRvbid0IGxvb2sgOikNCisgICAgZGVmbGF0ZUluaXRfDQorICAgIGRlZmxhdGVJbml0Ml8NCisgICAgaW5mbGF0ZUluaXRfDQorICAgIGluZmxhdGVJbml0Ml8NCisgICAgaW5mbGF0ZUJhY2tJbml0Xw0KKyAgICBnemdldGNfDQorICAgIHpFcnJvcg0KKyAgICBpbmZsYXRlU3luY1BvaW50DQorICAgIGdldF9jcmNfdGFibGUNCisgICAgaW5mbGF0ZVVuZGVybWluZQ0KKyAgICBpbmZsYXRlVmFsaWRhdGUNCisgICAgaW5mbGF0ZUNvZGVzVXNlZA0KKyAgICBpbmZsYXRlUmVzZXRLZWVwDQorICAgIGRlZmxhdGVSZXNldEtlZXANCisgICAgZ3pvcGVuX3cNCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvemxpYjEucmMgYi9zcmMvd2luMzIvemxpYjEucmMKaW5kZXggNWMwZmVlZC4uMjM0ZTY0MSAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL3psaWIxLnJjCisrKyBiL3NyYy93aW4zMi96bGliMS5yYwpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsCSJ6bGliIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeVwwIgogICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJWkxJQl9WRVJTSU9OICJcMCIKICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLAkiemxpYjEuZGxsXDAiCi0gICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLAkiKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5ICYgTWFyayBBZGxlclwwIgorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwJIihDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSAmIE1hcmsgQWRsZXJcMCIKICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWIxLmRsbFwwIgogICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJInpsaWJcMCIKICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsCVpMSUJfVkVSU0lPTiAiXDAiCmRpZmYgLS1naXQgYS9zcmMvemNvbmYuaCBiL3NyYy96Y29uZi5oCmluZGV4IDk5NmZmZjIuLjc3Mzk4YzEgMTAwNjQ0Ci0tLSBhL3NyYy96Y29uZi5oCisrKyBiL3NyYy96Y29uZi5oCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsNyArMTcsNyBAQAogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKLS8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLworLyogYWxsIGxpbmtlZCBzeW1ib2xzIGFuZCBpbml0IG1hY3JvcyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KQEAgLTI5LDYgKzI5LDcgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBhZGxlcjMyX3ogICAgICAgICAgICAgel9hZGxlcjMyX3oKICMgIGlmbmRlZiBaX1NPTE8KICMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCiAjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKQEAgLTM3LDEwICszOCwxNCBAQAogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNyYzMyX3ogICAgICAgICAgICAgICB6X2NyYzMyX3oKICMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCiAjICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCiAjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKICMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUdldERpY3Rpb25hcnkgIHpfZGVmbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdCAgICAgICAgICAgel9kZWZsYXRlSW5pdAorIyAgZGVmaW5lIGRlZmxhdGVJbml0MiAgICAgICAgICB6X2RlZmxhdGVJbml0MgogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCkBAIC02Nyw2ICs3Miw4IEBACiAjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgogIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgogIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pmcmVhZCAgICAgICAgICAgICAgIHpfZ3pmcmVhZAorIyAgICBkZWZpbmUgZ3pmd3JpdGUgICAgICAgICAgICAgIHpfZ3pmd3JpdGUKICMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwogIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXwogIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCkBAIC03OCw3ICs4NSw2IEBACiAjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CiAjICAgIGVuZGlmCiAjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCiAjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKICMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwogIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCkBAIC04OSwzMiArOTUsMzkgQEAKICMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAogIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKICMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKICMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKICMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXQgICAgICAgel9pbmZsYXRlQmFja0luaXQKICMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvZGVzVXNlZCAgICAgIHpfaW5mbGF0ZUNvZGVzVXNlZAogIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5CiAjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0ICAgICAgICAgICB6X2luZmxhdGVJbml0CisjICBkZWZpbmUgaW5mbGF0ZUluaXQyICAgICAgICAgIHpfaW5mbGF0ZUluaXQyCiAjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXwogIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XwogIyAgZGVmaW5lIGluZmxhdGVNYXJrICAgICAgICAgICB6X2luZmxhdGVNYXJrCiAjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAgICAgICAgIHpfaW5mbGF0ZVByaW1lCiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQotIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBpbmZsYXRlVmFsaWRhdGUgICAgICAgel9pbmZsYXRlVmFsaWRhdGUKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKICMgIGlmbmRlZiBaX1NPTE8KICMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgICAgZGVmaW5lIHVuY29tcHJlc3MyICAgICAgICAgICB6X3VuY29tcHJlc3MyCiAjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgogIyAgaWZuZGVmIFpfU09MTwpAQCAtMjI0LDkgKzIzNywxOSBAQAogIyAgZGVmaW5lIHpfY29uc3QKICNlbmRpZgogCi0vKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwotI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCi0jICBkZWZpbmUgTk9fRFVNTVlfREVDTAorI2lmZGVmIFpfU09MTworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworI2Vsc2UKKyMgIGRlZmluZSB6X2xvbmdsb25nIGxvbmcgbG9uZworIyAgaWYgZGVmaW5lZChOT19TSVpFX1QpCisgICAgIHR5cGVkZWYgdW5zaWduZWQgTk9fU0laRV9UIHpfc2l6ZV90OworIyAgZWxpZiBkZWZpbmVkKFNUREMpCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgICB0eXBlZGVmIHNpemVfdCB6X3NpemVfdDsKKyMgIGVsc2UKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworIyAgZW5kaWYKKyMgIHVuZGVmIHpfbG9uZ2xvbmcKICNlbmRpZgogCiAvKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KQEAgLTI1Niw3ICsyNzksNyBAQAogIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCiAKICAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKKyB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYWJvdXQgNyBraWxvYnl0ZXMKICBmb3Igc21hbGwgb2JqZWN0cy4KICovCiAKZGlmZiAtLWdpdCBhL3NyYy96Y29uZi5oLmNtYWtlaW4gYi9zcmMvemNvbmYuaC5jbWFrZWluCmluZGV4IDA0MzAxOWMuLmE3ZjI0Y2MgMTAwNjQ0Ci0tLSBhL3NyYy96Y29uZi5oLmNtYWtlaW4KKysrIGIvc3JjL3pjb25mLmguY21ha2VpbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE5LDcgKzE5LDcgQEAKICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCi0vKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KKy8qIGFsbCBsaW5rZWQgc3ltYm9scyBhbmQgaW5pdCBtYWNyb3MgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCkBAIC0zMSw2ICszMSw3IEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0CisjICBkZWZpbmUgYWRsZXIzMl96ICAgICAgICAgICAgIHpfYWRsZXIzMl96CiAjICBpZm5kZWYgWl9TT0xPCiAjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwogIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCkBAIC0zOSwxMCArNDAsMTQgQEAKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBjcmMzMl96ICAgICAgICAgICAgICAgel9jcmMzMl96CiAjICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQogIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAogIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5CiAjICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgIHpfZGVmbGF0ZUVuZAorIyAgZGVmaW5lIGRlZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVHZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgZGVmbGF0ZUluaXQgICAgICAgICAgIHpfZGVmbGF0ZUluaXQKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDIgICAgICAgICAgel9kZWZsYXRlSW5pdDIKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcwpAQCAtNjksNiArNzQsOCBAQAogIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKICMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKICMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6ZnJlYWQgICAgICAgICAgICAgICB6X2d6ZnJlYWQKKyMgICAgZGVmaW5lIGd6ZndyaXRlICAgICAgICAgICAgICB6X2d6ZndyaXRlCiAjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKICMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KICMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwpAQCAtODAsNyArODcsNiBAQAogIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdwogIyAgICBlbmRpZgogIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgogIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCiAjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKICMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZApAQCAtOTEsMzIgKzk3LDM5IEBACiAjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKICMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CiAjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCiAjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCiAjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tJbml0ICAgICAgIHpfaW5mbGF0ZUJhY2tJbml0CiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tJbml0XyAgICAgIHpfaW5mbGF0ZUJhY2tJbml0XworIyAgZGVmaW5lIGluZmxhdGVDb2Rlc1VzZWQgICAgICB6X2luZmxhdGVDb2Rlc1VzZWQKICMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQogIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVHZXRIZWFkZXIgICAgICB6X2luZmxhdGVHZXRIZWFkZXIKKyMgIGRlZmluZSBpbmZsYXRlSW5pdCAgICAgICAgICAgel9pbmZsYXRlSW5pdAorIyAgZGVmaW5lIGluZmxhdGVJbml0MiAgICAgICAgICB6X2luZmxhdGVJbml0MgogIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KICMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KICMgIGRlZmluZSBpbmZsYXRlTWFyayAgICAgICAgICAgel9pbmZsYXRlTWFyawogIyAgZGVmaW5lIGluZmxhdGVQcmltZSAgICAgICAgICB6X2luZmxhdGVQcmltZQogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKLSMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCisjICBkZWZpbmUgaW5mbGF0ZVZhbGlkYXRlICAgICAgIHpfaW5mbGF0ZVZhbGlkYXRlCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCiAjICBpZm5kZWYgWl9TT0xPCiAjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICAgIGRlZmluZSB1bmNvbXByZXNzMiAgICAgICAgICAgel91bmNvbXByZXNzMgogIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKICMgIGlmbmRlZiBaX1NPTE8KQEAgLTIyNiw5ICsyMzksMTkgQEAKICMgIGRlZmluZSB6X2NvbnN0CiAjZW5kaWYKIAotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKKyNpZmRlZiBaX1NPTE8KKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyNlbHNlCisjICBkZWZpbmUgel9sb25nbG9uZyBsb25nIGxvbmcKKyMgIGlmIGRlZmluZWQoTk9fU0laRV9UKQorICAgICB0eXBlZGVmIHVuc2lnbmVkIE5PX1NJWkVfVCB6X3NpemVfdDsKKyMgIGVsaWYgZGVmaW5lZChTVERDKQorIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgdHlwZWRlZiBzaXplX3Qgel9zaXplX3Q7CisjICBlbHNlCisgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyMgIGVuZGlmCisjICB1bmRlZiB6X2xvbmdsb25nCiAjZW5kaWYKIAogLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCkBAIC0yNTgsNyArMjgxLDcgQEAKICBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgogCiAgICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCisgdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGFib3V0IDcga2lsb2J5dGVzCiAgZm9yIHNtYWxsIG9iamVjdHMuCiAqLwogCmRpZmYgLS1naXQgYS9zcmMvemNvbmYuaC5pbiBiL3NyYy96Y29uZi5oLmluCmluZGV4IDk5ODdhNzcuLjVlMWQ2OGEgMTAwNjQ0Ci0tLSBhL3NyYy96Y29uZi5oLmluCisrKyBiL3NyYy96Y29uZi5oLmluCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsNyArMTcsNyBAQAogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKLS8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLworLyogYWxsIGxpbmtlZCBzeW1ib2xzIGFuZCBpbml0IG1hY3JvcyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KQEAgLTI5LDYgKzI5LDcgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBhZGxlcjMyX3ogICAgICAgICAgICAgel9hZGxlcjMyX3oKICMgIGlmbmRlZiBaX1NPTE8KICMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCiAjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKQEAgLTM3LDEwICszOCwxNCBAQAogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNyYzMyX3ogICAgICAgICAgICAgICB6X2NyYzMyX3oKICMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCiAjICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCiAjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKICMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUdldERpY3Rpb25hcnkgIHpfZGVmbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdCAgICAgICAgICAgel9kZWZsYXRlSW5pdAorIyAgZGVmaW5lIGRlZmxhdGVJbml0MiAgICAgICAgICB6X2RlZmxhdGVJbml0MgogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCkBAIC02Nyw2ICs3Miw4IEBACiAjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgogIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgogIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pmcmVhZCAgICAgICAgICAgICAgIHpfZ3pmcmVhZAorIyAgICBkZWZpbmUgZ3pmd3JpdGUgICAgICAgICAgICAgIHpfZ3pmd3JpdGUKICMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwogIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXwogIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCkBAIC03OCw3ICs4NSw2IEBACiAjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CiAjICAgIGVuZGlmCiAjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCiAjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKICMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwogIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCkBAIC04OSwzMiArOTUsMzkgQEAKICMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAogIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKICMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKICMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKICMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXQgICAgICAgel9pbmZsYXRlQmFja0luaXQKICMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvZGVzVXNlZCAgICAgIHpfaW5mbGF0ZUNvZGVzVXNlZAogIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5CiAjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0ICAgICAgICAgICB6X2luZmxhdGVJbml0CisjICBkZWZpbmUgaW5mbGF0ZUluaXQyICAgICAgICAgIHpfaW5mbGF0ZUluaXQyCiAjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXwogIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XwogIyAgZGVmaW5lIGluZmxhdGVNYXJrICAgICAgICAgICB6X2luZmxhdGVNYXJrCiAjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAgICAgICAgIHpfaW5mbGF0ZVByaW1lCiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQotIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBpbmZsYXRlVmFsaWRhdGUgICAgICAgel9pbmZsYXRlVmFsaWRhdGUKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKICMgIGlmbmRlZiBaX1NPTE8KICMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgICAgZGVmaW5lIHVuY29tcHJlc3MyICAgICAgICAgICB6X3VuY29tcHJlc3MyCiAjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgogIyAgaWZuZGVmIFpfU09MTwpAQCAtMjI0LDkgKzIzNywxOSBAQAogIyAgZGVmaW5lIHpfY29uc3QKICNlbmRpZgogCi0vKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwotI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCi0jICBkZWZpbmUgTk9fRFVNTVlfREVDTAorI2lmZGVmIFpfU09MTworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworI2Vsc2UKKyMgIGRlZmluZSB6X2xvbmdsb25nIGxvbmcgbG9uZworIyAgaWYgZGVmaW5lZChOT19TSVpFX1QpCisgICAgIHR5cGVkZWYgdW5zaWduZWQgTk9fU0laRV9UIHpfc2l6ZV90OworIyAgZWxpZiBkZWZpbmVkKFNUREMpCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgICB0eXBlZGVmIHNpemVfdCB6X3NpemVfdDsKKyMgIGVsc2UKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworIyAgZW5kaWYKKyMgIHVuZGVmIHpfbG9uZ2xvbmcKICNlbmRpZgogCiAvKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KQEAgLTI1Niw3ICsyNzksNyBAQAogIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCiAKICAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKKyB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYWJvdXQgNyBraWxvYnl0ZXMKICBmb3Igc21hbGwgb2JqZWN0cy4KICovCiAKZGlmZiAtLWdpdCBhL3NyYy96bGliLjMgYi9zcmMvemxpYi4zCmluZGV4IDAxNjBlNjIuLmJkYTRlYjAgMTAwNjQ0Ci0tLSBhL3NyYy96bGliLjMKKysrIGIvc3JjL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjI4IEFwciAyMDEzIgorLlRIIFpMSUIgMyAiMTUgSmFuIDIwMTciCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtNDgsMzIgKzQ4LDEwIEBACiB0aGF0IGFjY29tcGFuaWVzIHRoZSBzb3VyY2UuCiAuTFAKIC5JIHpsaWIKLWlzIGF2YWlsYWJsZSBpbiBKYXZhIHVzaW5nIHRoZSBqYXZhLnV0aWwuemlwIHBhY2thZ2U6Ci0uSVAKLWh0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL3RlY2huaWNhbEFydGljbGVzL1Byb2dyYW1taW5nL2NvbXByZXNzaW9uLworaXMgYnVpbHQgaW4gdG8gbWFueSBsYW5ndWFnZXMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCitKYXZhLCBQeXRob24sIC5ORVQsIFBIUCwgUGVybCwgUnVieSwgU3dpZnQsIGFuZCBHby4KIC5MUAotQSBQZXJsIGludGVyZmFjZSB0bwotLklSIHpsaWIgLAotd3JpdHRlbiBieSBQYXVsIE1hcnF1ZXNzIChwbXFzQGNwYW4ub3JnKSwKLWlzIGF2YWlsYWJsZSBhdCBDUEFOIChDb21wcmVoZW5zaXZlIFBlcmwgQXJjaGl2ZSBOZXR3b3JrKSBzaXRlcywKLWluY2x1ZGluZzoKLS5JUAotaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+cG1xcy9JTy1Db21wcmVzcy1abGliLwotLkxQCi1BIFB5dGhvbiBpbnRlcmZhY2UgdG8KLS5JUiB6bGliICwKLXdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyAoYW1rQG1hZ25ldC5jb20pLAotaXMgYXZhaWxhYmxlIGluIFB5dGhvbiAxLjUgYW5kIGxhdGVyIHZlcnNpb25zOgotLklQCi1odHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sCi0uTFAKLS5JIHpsaWIKLWlzIGJ1aWx0IGludG8KLS5JUiB0Y2w6Ci0uSVAKLWh0dHA6Ly93aWtpLnRjbC50ay80NjEwCi0uTFAKLUFuIGV4cGVyaW1lbnRhbCBwYWNrYWdlIHRvIHJlYWQgYW5kIHdyaXRlIGZpbGVzIGluIC56aXAgZm9ybWF0LAorQW4gZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMgaW4gdGhlIC56aXAgZm9ybWF0LAogd3JpdHRlbiBvbiB0b3Agb2YKIC5JIHpsaWIKIGJ5IEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSksCkBAIC05Miw3ICs3MCw5IEBACiAuSVAKIGh0dHA6Ly96bGliLm5ldC8KIC5MUAotVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCitUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUKKy5JIHpsaWIKK2xpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzOgogLklQCiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwIChmb3IgdGhlIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKQEAgLTEyNCwxNyArMTA0LDM1IEBACiBiZWZvcmUgYXNraW5nIGZvciBoZWxwLgogU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5vcmcsCiBvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgotLlNIIEFVVEhPUlMKLVZlcnNpb24gMS4yLjgKLUNvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQotYW5kIE1hcmsgQWRsZXIgKG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUpLgorLlNIIEFVVEhPUlMgQU5EIExJQ0VOU0UKK1ZlcnNpb24gMS4yLjExCiAuTFAKLVRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzLCIKLXdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLUluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisuTFAKK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCit3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgotU2VlIHRoZSBkaXN0cmlidXRpb24gZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byByZXF1aXJlbWVudHMKLWdvdmVybmluZyByZWRpc3RyaWJ1dGlvbi4KKy5MUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCitpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CitmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisuTFAKKy5uciBzdGVwIDEgMQorLklQIFxuW3N0ZXBdLiAzCitUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKK2luIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKy5JUCBcbitbc3RlcF0uCitBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorLklQIFxuK1tzdGVwXS4KK1RoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisuTFAKK0plYW4tbG91cCBHYWlsbHkgICAgICAgIE1hcmsgQWRsZXIKKy5icgoramxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorLkxQCiBUaGUgZGVmbGF0ZSBmb3JtYXQgdXNlZCBieQogLkkgemxpYgogd2FzIGRlZmluZWQgYnkgUGhpbCBLYXR6LgpkaWZmIC0tZ2l0IGEvc3JjL3psaWIuMy5wZGYgYi9zcmMvemxpYi4zLnBkZgppbmRleCBhMzQ2YjVkLi42ZmE1MTljIDEwMDY0NAotLS0gYS9zcmMvemxpYi4zLnBkZgorKysgYi9zcmMvemxpYi4zLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvemxpYi5oIGIvc3JjL3psaWIuaAppbmRleCAzZTBjNzY3Li5mMDljZGFmIDEwMDY0NAotLS0gYS9zcmMvemxpYi5oCisrKyBiL3NyYy96bGliLmgKQEAgLTEsNyArMSw3IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuOCwgQXByaWwgMjh0aCwgMjAxMworICB2ZXJzaW9uIDEuMi4xMSwgSmFudWFyeSAxNXRoLCAyMDE3CiAKLSAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMzcsMTEgKzM3LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjgiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI4MAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi4xMSIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMmIwCiAjZGVmaW5lIFpMSUJfVkVSX01BSk9SIDEKICNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgotI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA4CisjZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDExCiAjZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDAKIAogLyoKQEAgLTY1LDcgKzY1LDggQEAKICAgd2l0aCAiZ3oiLiAgVGhlIGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6bGliIGZvcm1hdC4gIGd6aXAgaXMgYQogICBnemlwIHdyYXBwZXIsIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTIsIHdyYXBwZWQgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0uCiAKLSAgICBUaGlzIGxpYnJhcnkgY2FuIG9wdGlvbmFsbHkgcmVhZCBhbmQgd3JpdGUgZ3ppcCBzdHJlYW1zIGluIG1lbW9yeSBhcyB3ZWxsLgorICAgIFRoaXMgbGlicmFyeSBjYW4gb3B0aW9uYWxseSByZWFkIGFuZCB3cml0ZSBnemlwIGFuZCByYXcgZGVmbGF0ZSBzdHJlYW1zIGluCisgIG1lbW9yeSBhcyB3ZWxsLgogCiAgICAgVGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25lZCB0byBiZSBjb21wYWN0IGFuZCBmYXN0IGZvciB1c2UgaW4gbWVtb3J5CiAgIGFuZCBvbiBjb21tdW5pY2F0aW9ucyBjaGFubmVscy4gIFRoZSBnemlwIGZvcm1hdCB3YXMgZGVzaWduZWQgZm9yIHNpbmdsZS0KQEAgLTc0LDcgKzc1LDcgQEAKIAogICAgIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLiAgVGhlIGRlY29kZXIgY2hlY2tzCiAgIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIgY3Jhc2gKLSAgZXZlbiBpbiBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4KKyAgZXZlbiBpbiB0aGUgY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCiAqLwogCiB0eXBlZGVmIHZvaWRwZiAoKmFsbG9jX2Z1bmMpIE9GKCh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpKTsKQEAgLTg3LDcgKzg4LDcgQEAKICAgICB1SW50ICAgICBhdmFpbF9pbjsgIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLwogICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCiAKLSAgICBCeXRlZiAgICAqbmV4dF9vdXQ7IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqLworICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSB3aWxsIGdvIGhlcmUgKi8KICAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCiAgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLwogCkBAIC05OCw4ICs5OSw5IEBACiAgICAgZnJlZV9mdW5jICB6ZnJlZTsgICAvKiB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlICovCiAgICAgdm9pZHBmICAgICBvcGFxdWU7ICAvKiBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlICovCiAKLSAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi8KLSAgICB1TG9uZyAgIGFkbGVyOyAgICAgIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgaW50ICAgICBkYXRhX3R5cGU7ICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGJpbmFyeSBvciB0ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVmbGF0ZSwgb3IgdGhlIGRlY29kaW5nIHN0YXRlIGZvciBpbmZsYXRlICovCisgICAgdUxvbmcgICBhZGxlcjsgICAgICAvKiBBZGxlci0zMiBvciBDUkMtMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgdUxvbmcgICByZXNlcnZlZDsgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwogfSB6X3N0cmVhbTsKIApAQCAtMTQyLDcgKzE0NCw5IEBACiAKICAgICAgemFsbG9jIG11c3QgcmV0dXJuIFpfTlVMTCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG9iamVjdC4KICAgIElmIHpsaWIgaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLCB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUKLSAgIHRocmVhZCBzYWZlLgorICAgdGhyZWFkIHNhZmUuICBJbiB0aGF0IGNhc2UsIHpsaWIgaXMgdGhyZWFkLXNhZmUuICBXaGVuIHphbGxvYyBhbmQgemZyZWUgYXJlCisgICBaX05VTEwgb24gZW50cnkgdG8gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCB0aGV5IGFyZSBzZXQgdG8gaW50ZXJuYWwKKyAgIHJvdXRpbmVzIHRoYXQgdXNlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBtYWxsb2MoKSBhbmQgZnJlZSgpLgogCiAgICAgIE9uIDE2LWJpdCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb25zIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZSBhYmxlIHRvIGFsbG9jYXRlCiAgICBleGFjdGx5IDY1NTM2IGJ5dGVzLCBidXQgd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIHRoaXMgaWYKQEAgLTE1NSw3ICsxNTksNyBAQAogCiAgICAgIFRoZSBmaWVsZHMgdG90YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvciBwcm9ncmVzcwogICAgcmVwb3J0cy4gIEFmdGVyIGNvbXByZXNzaW9uLCB0b3RhbF9pbiBob2xkcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKLSAgIHVuY29tcHJlc3NlZCBkYXRhIGFuZCBtYXkgYmUgc2F2ZWQgZm9yIHVzZSBpbiB0aGUgZGVjb21wcmVzc29yIChwYXJ0aWN1bGFybHkKKyAgIHVuY29tcHJlc3NlZCBkYXRhIGFuZCBtYXkgYmUgc2F2ZWQgZm9yIHVzZSBieSB0aGUgZGVjb21wcmVzc29yIChwYXJ0aWN1bGFybHkKICAgIGlmIHRoZSBkZWNvbXByZXNzb3Igd2FudHMgdG8gZGVjb21wcmVzcyBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHN0ZXApLgogKi8KIApAQCAtMjAwLDcgKzIwNCw3IEBACiAjZGVmaW5lIFpfVEVYVCAgICAgMQogI2RlZmluZSBaX0FTQ0lJICAgIFpfVEVYVCAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggMS4yLjIgYW5kIGVhcmxpZXIgKi8KICNkZWZpbmUgWl9VTktOT1dOICAyCi0vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovCisvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCBmb3IgZGVmbGF0ZSgpICovCiAKICNkZWZpbmUgWl9ERUZMQVRFRCAgIDgKIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAodGhlIG9ubHkgb25lIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24pICovCkBAIC0yNTgsMTEgKzI2MiwxMSBAQAogICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBhbmQgYXZhaWxfaW4gYXJlIHVwZGF0ZWQgYW5kCiAgICAgcHJvY2Vzc2luZyB3aWxsIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KIAotICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgIC0gR2VuZXJhdGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CiAgICAgYWNjb3JkaW5nbHkuICBUaGlzIGFjdGlvbiBpcyBmb3JjZWQgaWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBub24gemVyby4KICAgICBGb3JjaW5nIGZsdXNoIGZyZXF1ZW50bHkgZGVncmFkZXMgdGhlIGNvbXByZXNzaW9uIHJhdGlvLCBzbyB0aGlzIHBhcmFtZXRlcgotICAgIHNob3VsZCBiZSBzZXQgb25seSB3aGVuIG5lY2Vzc2FyeSAoaW4gaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zKS4gIFNvbWUKLSAgICBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4KKyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkuICBTb21lIG91dHB1dCBtYXkgYmUgcHJvdmlkZWQgZXZlbiBpZgorICAgIGZsdXNoIGlzIHplcm8uCiAKICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CiAgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZyBtb3JlCkBAIC0yNzEsNyArMjc1LDkgQEAKICAgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0CiAgID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgZGVmbGF0ZSgpLiAgSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGgKICAgemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQKLSAgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKyAgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4gU2VlIGRlZmxhdGVQZW5kaW5nKCksCisgIHdoaWNoIGNhbiBiZSB1c2VkIGlmIGRlc2lyZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIG1vcmUgb3VwdXQKKyAgaW4gdGhhdCBjYXNlLgogCiAgICAgTm9ybWFsbHkgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9OT19GTFVTSCwgd2hpY2ggYWxsb3dzIGRlZmxhdGUgdG8KICAgZGVjaWRlIGhvdyBtdWNoIGRhdGEgdG8gYWNjdW11bGF0ZSBiZWZvcmUgcHJvZHVjaW5nIG91dHB1dCwgaW4gb3JkZXIgdG8KQEAgLTI5Miw4ICsyOTgsOCBAQAogICBpbnB1dCBkYXRhIHNvIGZhciB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgZGVjb21wcmVzc29yLCBhcyBmb3IgWl9TWU5DX0ZMVVNILgogICBUaGlzIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgZml4ZWQKICAgY29kZXMgYmxvY2sgdGhhdCBpcyAxMCBiaXRzIGxvbmcuICBUaGlzIGFzc3VyZXMgdGhhdCBlbm91Z2ggYnl0ZXMgYXJlIG91dHB1dAotICBpbiBvcmRlciBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBmaW5pc2ggdGhlIGJsb2NrIGJlZm9yZSB0aGUgZW1wdHkgZml4ZWQgY29kZQotICBibG9jay4KKyAgaW4gb3JkZXIgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gZmluaXNoIHRoZSBibG9jayBiZWZvcmUgdGhlIGVtcHR5IGZpeGVkCisgIGNvZGVzIGJsb2NrLgogCiAgICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfQkxPQ0ssIGEgZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQgYW5kIGVtaXR0ZWQsIGFzCiAgIGZvciBaX1NZTkNfRkxVU0gsIGJ1dCB0aGUgb3V0cHV0IGlzIG5vdCBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgYW5kIHVwIHRvCkBAIC0zMTksMzQgKzMyNSwzOCBAQAogCiAgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9GSU5JU0gsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkLAogICBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkIGFuZCBkZWZsYXRlIHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgaWYgdGhlcmUgd2FzCi0gIGVub3VnaCBvdXRwdXQgc3BhY2U7IGlmIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfT0ssIHRoaXMgZnVuY3Rpb24gbXVzdCBiZQotICBjYWxsZWQgYWdhaW4gd2l0aCBaX0ZJTklTSCBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQgYXZhaWxfb3V0KSBidXQgbm8KLSAgbW9yZSBpbnB1dCBkYXRhLCB1bnRpbCBpdCByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yLiAgQWZ0ZXIKLSAgZGVmbGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25seSBwb3NzaWJsZSBvcGVyYXRpb25zIG9uIHRoZSBzdHJlYW0KLSAgYXJlIGRlZmxhdGVSZXNldCBvciBkZWZsYXRlRW5kLgorICBlbm91Z2ggb3V0cHV0IHNwYWNlLiAgSWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhpcworICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIFpfRklOSVNIIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICBhdmFpbF9vdXQpIGJ1dCBubyBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4KKyAgZXJyb3IuICBBZnRlciBkZWZsYXRlIGhhcyByZXR1cm5lZCBaX1NUUkVBTV9FTkQsIHRoZSBvbmx5IHBvc3NpYmxlIG9wZXJhdGlvbnMKKyAgb24gdGhlIHN0cmVhbSBhcmUgZGVmbGF0ZVJlc2V0IG9yIGRlZmxhdGVFbmQuCiAKLSAgICBaX0ZJTklTSCBjYW4gYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlIGNvbXByZXNzaW9uCi0gIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gIEluIHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QgdGhlCi0gIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvCi0gIHJldHVybiBaX1NUUkVBTV9FTkQuICBJZiBub3QgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgZGVmbGF0ZSB3aWxsCi0gIG5vdCByZXR1cm4gWl9TVFJFQU1fRU5ELCBhbmQgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGluIHRoZSBmaXJzdCBkZWZsYXRlIGNhbGwgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZQorICBjb21wcmVzc2lvbiBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuICBJbiBvcmRlciB0byBjb21wbGV0ZSBpbiBvbmUKKyAgY2FsbCwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlCisgIGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBaX1NUUkVBTV9FTkQuICBJZiBub3QgZW5vdWdoCisgIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgZGVmbGF0ZSB3aWxsIG5vdCByZXR1cm4gWl9TVFJFQU1fRU5ELCBhbmQgaXQgbXVzdAorICBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgogCi0gICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKLSAgc28gZmFyICh0aGF0IGlzLCB0b3RhbF9pbiBieXRlcykuCisgICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCisgIHNvIGZhciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBnZW5lcmF0ZWQsIHRoZW4KKyAgc3RybS0+YWRsZXIgd2lsbCBiZSB0aGUgQ1JDLTMyIGNoZWNrc3VtIG9mIHRoZSBpbnB1dCByZWFkIHNvIGZhci4gIChTZWUKKyAgZGVmbGF0ZUluaXQyIGJlbG93LikKIAogICAgIGRlZmxhdGUoKSBtYXkgdXBkYXRlIHN0cm0tPmRhdGFfdHlwZSBpZiBpdCBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYWJvdXQKLSAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9CSU5BUlkgb3IgWl9URVhUKS4gIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCi0gIGJpbmFyeS4gIFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUKLSAgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIGFueSBtYW5uZXIuCisgIHRoZSBpbnB1dCBkYXRhIHR5cGUgKFpfQklOQVJZIG9yIFpfVEVYVCkuICBJZiBpbiBkb3VidCwgdGhlIGRhdGEgaXMKKyAgY29uc2lkZXJlZCBiaW5hcnkuICBUaGlzIGZpZWxkIGlzIG9ubHkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzIGFuZCBkb2VzIG5vdAorICBhZmZlY3QgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbiBhbnkgbWFubmVyLgogCiAgICAgZGVmbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQKICAgcHJvY2Vzc2VkIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIGFsbCBpbnB1dCBoYXMgYmVlbgogICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCAob25seSB3aGVuIGZsdXNoIGlzIHNldCB0bwogICBaX0ZJTklTSCksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUKLSAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMKSwgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUKLSAgKGZvciBleGFtcGxlIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuICBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90Ci0gIGZhdGFsLCBhbmQgZGVmbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dAotICBzcGFjZSB0byBjb250aW51ZSBjb21wcmVzc2luZy4KKyAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMIG9yIHRoZSBzdGF0ZSB3YXMgaW5hZHZlcnRlbnRseSB3cml0dGVuIG92ZXIKKyAgYnkgdGhlIGFwcGxpY2F0aW9uKSwgb3IgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUgKGZvciBleGFtcGxlCisgIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuICBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLCBhbmQKKyAgZGVmbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dCBzcGFjZSB0bworICBjb250aW51ZSBjb21wcmVzc2luZy4KICovCiAKIApAQCAtMzY5LDIzICszNzksMjEgQEAKIAogICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uLiAgVGhlIGZpZWxkcwogICAgbmV4dF9pbiwgYXZhaWxfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQotICAgdGhlIGNhbGxlci4gIElmIG5leHRfaW4gaXMgbm90IFpfTlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUKLSAgIGV4YWN0IHZhbHVlIGRlcGVuZHMgb24gdGhlIGNvbXByZXNzaW9uIG1ldGhvZCksIGluZmxhdGVJbml0IGRldGVybWluZXMgdGhlCi0gICBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSB0aGUgemxpYiBoZWFkZXIgYW5kIGFsbG9jYXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzCi0gICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKLSAgIGluZmxhdGUuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8KLSAgIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorICAgdGhlIGNhbGxlci4gIEluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgaW5mbGF0ZSwgdGhlIHByb3ZpZGVkIGlucHV0IGlzIG5vdAorICAgcmVhZCBvciBjb25zdW1lZC4gIFRoZSBhbGxvY2F0aW9uIG9mIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBkZWZlcnJlZCB0bworICAgdGhlIGZpcnN0IGNhbGwgb2YgaW5mbGF0ZSAoaWYgdGhlIGRlY29tcHJlc3Npb24gZG9lcyBub3QgY29tcGxldGUgb24gdGhlCisgICBmaXJzdCBjYWxsKS4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05VTEwsIGluZmxhdGVJbml0IHVwZGF0ZXMKKyAgIHRoZW0gdG8gdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCiAKICAgICAgaW5mbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCiAgICBtZW1vcnksIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCiAgICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlCiAgICBpbnZhbGlkLCBzdWNoIGFzIGEgbnVsbCBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUuICBtc2cgaXMgc2V0IHRvIG51bGwgaWYKLSAgIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBpbmZsYXRlSW5pdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uCi0gICBhcGFydCBmcm9tIHBvc3NpYmx5IHJlYWRpbmcgdGhlIHpsaWIgaGVhZGVyIGlmIHByZXNlbnQ6IGFjdHVhbCBkZWNvbXByZXNzaW9uCi0gICB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0Ci0gICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCi0gICBvZiBpbmZsYXRlSW5pdCgpIGRvZXMgbm90IHByb2Nlc3MgYW55IGhlYWRlciBpbmZvcm1hdGlvbiAtLSB0aGF0IGlzIGRlZmVycmVkCi0gICB1bnRpbCBpbmZsYXRlKCkgaXMgY2FsbGVkLgorICAgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0IGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24uCisgICBBY3R1YWwgZGVjb21wcmVzc2lvbiB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgU28gbmV4dF9pbiwgYW5kIGF2YWlsX2luLAorICAgbmV4dF9vdXQsIGFuZCBhdmFpbF9vdXQgYXJlIHVudXNlZCBhbmQgdW5jaGFuZ2VkLiAgVGhlIGN1cnJlbnQKKyAgIGltcGxlbWVudGF0aW9uIG9mIGluZmxhdGVJbml0KCkgZG9lcyBub3QgcHJvY2VzcyBhbnkgaGVhZGVyIGluZm9ybWF0aW9uIC0tCisgICB0aGF0IGlzIGRlZmVycmVkIHVudGlsIGluZmxhdGUoKSBpcyBjYWxsZWQuCiAqLwogCiAKQEAgLTQwMSwxNyArNDA5LDIwIEBACiAKICAgLSBEZWNvbXByZXNzIG1vcmUgaW5wdXQgc3RhcnRpbmcgYXQgbmV4dF9pbiBhbmQgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luCiAgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90Ci0gICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3Npbmcgd2lsbAotICAgIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGluZmxhdGUoKS4KKyAgICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciksIHRoZW4gbmV4dF9pbiBhbmQgYXZhaWxfaW4gYXJlIHVwZGF0ZWQKKyAgICBhY2NvcmRpbmdseSwgYW5kIHByb2Nlc3Npbmcgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZgorICAgIGluZmxhdGUoKS4KIAotICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgIC0gR2VuZXJhdGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CiAgICAgYWNjb3JkaW5nbHkuICBpbmZsYXRlKCkgcHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIHVudGlsIHRoZXJlIGlzCiAgICAgbm8gbW9yZSBpbnB1dCBkYXRhIG9yIG5vIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIgKHNlZSBiZWxvdyBhYm91dAogICAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgogCiAgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAogICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQotICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4gIFRoZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4gIElmIHRoZQorICBjYWxsZXIgb2YgaW5mbGF0ZSgpIGRvZXMgbm90IHByb3ZpZGUgYm90aCBhdmFpbGFibGUgaW5wdXQgYW5kIGF2YWlsYWJsZQorICBvdXRwdXQgc3BhY2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBwcm9ncmVzcyBtYWRlLiAgVGhlCiAgIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlCiAgIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0ID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YKICAgaW5mbGF0ZSgpLiAgSWYgaW5mbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUKQEAgLTQyOCw3ICs0MzksNyBAQAogICBnZXRzIHRvIHRoZSBlbmQgb2YgdGhhdCBibG9jaywgb3Igd2hlbiBpdCBydW5zIG91dCBvZiBkYXRhLgogCiAgICAgVGhlIFpfQkxPQ0sgb3B0aW9uIGFzc2lzdHMgaW4gYXBwZW5kaW5nIHRvIG9yIGNvbWJpbmluZyBkZWZsYXRlIHN0cmVhbXMuCi0gIEFsc28gdG8gYXNzaXN0IGluIHRoaXMsIG9uIHJldHVybiBpbmZsYXRlKCkgd2lsbCBzZXQgc3RybS0+ZGF0YV90eXBlIHRvIHRoZQorICBUbyBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSBhbHdheXMgc2V0cyBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCiAgIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NCBpZgogICBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRlIHN0cmVhbSwgcGx1cwogICAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jayBjb2RlIG9yCkBAIC00NTQsNyArNDY1LDcgQEAKICAgdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQ7CiAgIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgZm9yIHRoZQogICBvcGVyYXRpb24gdG8gY29tcGxldGUuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4KLSAgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMgcHVycG9zZS4pIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbm90CisgIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSAgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBub3QKICAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dldmVyIGl0IG1heSBiZSB1c2VkIHRvCiAgIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggY2FuIGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpCiAgIGNhbGwuICBaX0ZJTklTSCBhbHNvIGluZm9ybXMgaW5mbGF0ZSB0byBub3QgbWFpbnRhaW4gYSBzbGlkaW5nIHdpbmRvdyBpZiB0aGUKQEAgLTQ3NiwzMiArNDg3LDMzIEBACiAgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKICAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAogICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAotICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCisgIGJlbG93LiAgQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpbmZsYXRlKCkgY2hlY2tzIHRoYXQgaXRzIGNvbXB1dGVkIEFkbGVyLTMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECiAgIG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCiAKICAgICBpbmZsYXRlKCkgY2FuIGRlY29tcHJlc3MgYW5kIGNoZWNrIGVpdGhlciB6bGliLXdyYXBwZWQgb3IgZ3ppcC13cmFwcGVkCiAgIGRlZmxhdGUgZGF0YS4gIFRoZSBoZWFkZXIgdHlwZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBpZiByZXF1ZXN0ZWQgd2hlbgogICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKLSAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZAotICBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvciBpbmZsYXRlQmFjaygpIGFuZAotICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4gIFdoZW4gcHJvY2Vzc2luZworICBoZWFkZXIgaXMgbm90IHJldGFpbmVkIHVubGVzcyBpbmZsYXRlR2V0SGVhZGVyKCkgaXMgdXNlZC4gIFdoZW4gcHJvY2Vzc2luZwogICBnemlwLXdyYXBwZWQgZGVmbGF0ZSBkYXRhLCBzdHJtLT5hZGxlcjMyIGlzIHNldCB0byB0aGUgQ1JDLTMyIG9mIHRoZSBvdXRwdXQKLSAgcHJvZHVjdGVkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIuCisgIHByb2R1Y2VkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIsIGFzIGlzIHRoZQorICB1bmNvbXByZXNzZWQgbGVuZ3RoLCBtb2R1bG8gMl4zMi4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCiAgIGJlZW4gcmVhY2hlZCBhbmQgYWxsIHVuY29tcHJlc3NlZCBvdXRwdXQgaGFzIGJlZW4gcHJvZHVjZWQsIFpfTkVFRF9ESUNUIGlmIGEKICAgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGF0IHRoaXMgcG9pbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMKICAgY29ycnVwdGVkIChpbnB1dCBzdHJlYW0gbm90IGNvbmZvcm1pbmcgdG8gdGhlIHpsaWIgZm9ybWF0IG9yIGluY29ycmVjdCBjaGVjawotICB2YWx1ZSksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCi0gIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIFpfTlVMTCksIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSwKLSAgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUKLSAgb3V0cHV0IGJ1ZmZlciB3aGVuIFpfRklOSVNIIGlzIHVzZWQuICBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLCBhbmQKKyAgdmFsdWUsIGluIHdoaWNoIGNhc2Ugc3RybS0+bXNnIHBvaW50cyB0byBhIHN0cmluZyB3aXRoIGEgbW9yZSBzcGVjaWZpYworICBlcnJvciksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCisgIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIFpfTlVMTCwgb3IgdGhlIHN0YXRlIHdhcyBpbmFkdmVydGVudGx5IHdyaXR0ZW4gb3ZlcgorICBieSB0aGUgYXBwbGljYXRpb24pLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SCisgIGlmIG5vIHByb2dyZXNzIHdhcyBwb3NzaWJsZSBvciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKKyAgYnVmZmVyIHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4gIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwsIGFuZAogICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIG1vcmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0IHNwYWNlIHRvCiAgIGNvbnRpbnVlIGRlY29tcHJlc3NpbmcuICBJZiBaX0RBVEFfRVJST1IgaXMgcmV0dXJuZWQsIHRoZSBhcHBsaWNhdGlvbiBtYXkKICAgdGhlbiBjYWxsIGluZmxhdGVTeW5jKCkgdG8gbG9vayBmb3IgYSBnb29kIGNvbXByZXNzaW9uIGJsb2NrIGlmIGEgcGFydGlhbAotICByZWNvdmVyeSBvZiB0aGUgZGF0YSBpcyBkZXNpcmVkLgorICByZWNvdmVyeSBvZiB0aGUgZGF0YSBpcyB0byBiZSBhdHRlbXB0ZWQuCiAqLwogCiAKQEAgLTUxMSw5ICs1MjMsOCBAQAogICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nCiAgICBvdXRwdXQuCiAKLSAgICAgaW5mbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZQotICAgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZSBlcnJvciBjYXNlLCBtc2cgbWF5IGJlIHNldCBidXQgdGhlbiBwb2ludHMgdG8gYQotICAgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLgorICAgICBpbmZsYXRlRW5kIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlCisgICB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAogCkBAIC01NDQsMTYgKzU1NSwyOSBAQAogICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKICAgIGRlZmxhdGVJbml0IGlzIHVzZWQgaW5zdGVhZC4KIAorICAgICBGb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZGVmbGF0ZSgpLCBhIHdpbmRvd0JpdHMgdmFsdWUgb2YgOCAoYQorICAgd2luZG93IHNpemUgb2YgMjU2IGJ5dGVzKSBpcyBub3Qgc3VwcG9ydGVkLiAgQXMgYSByZXN1bHQsIGEgcmVxdWVzdCBmb3IgOAorICAgd2lsbCByZXN1bHQgaW4gOSAoYSA1MTItYnl0ZSB3aW5kb3cpLiAgSW4gdGhhdCBjYXNlLCBwcm92aWRpbmcgOCB0bworICAgaW5mbGF0ZUluaXQyKCkgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3Igd2hlbiB0aGUgemxpYiBoZWFkZXIgd2l0aCA5IGlzCisgICBjaGVja2VkIGFnYWluc3QgdGhlIGluaXRpYWxpemF0aW9uIG9mIGluZmxhdGUoKS4gIFRoZSByZW1lZHkgaXMgdG8gbm90IHVzZSA4CisgICB3aXRoIGRlZmxhdGVJbml0MigpIHdpdGggdGhpcyBpbml0aWFsaXphdGlvbiwgb3IgYXQgbGVhc3QgaW4gdGhhdCBjYXNlIHVzZSA5CisgICB3aXRoIGluZmxhdGVJbml0MigpLgorCiAgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGRlZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCiAgICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gIGRlZmxhdGUoKSB3aWxsIHRoZW4gZ2VuZXJhdGUgcmF3IGRlZmxhdGUgZGF0YQotICAgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQgd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlLgorICAgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQgd2lsbCBub3QgY29tcHV0ZSBhIGNoZWNrIHZhbHVlLgogCiAgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFuIDE1IGZvciBvcHRpb25hbCBnemlwIGVuY29kaW5nLiAgQWRkCiAgICAxNiB0byB3aW5kb3dCaXRzIHRvIHdyaXRlIGEgc2ltcGxlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGFyb3VuZCB0aGUKICAgIGNvbXByZXNzZWQgZGF0YSBpbnN0ZWFkIG9mIGEgemxpYiB3cmFwcGVyLiAgVGhlIGd6aXAgaGVhZGVyIHdpbGwgaGF2ZSBubwogICAgZmlsZSBuYW1lLCBubyBleHRyYSBkYXRhLCBubyBjb21tZW50LCBubyBtb2RpZmljYXRpb24gdGltZSAoc2V0IHRvIHplcm8pLCBubwotICAgaGVhZGVyIGNyYywgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgYmUgc2V0IHRvIDI1NSAodW5rbm93bikuICBJZiBhCi0gICBnemlwIHN0cmVhbSBpcyBiZWluZyB3cml0dGVuLCBzdHJtLT5hZGxlciBpcyBhIGNyYzMyIGluc3RlYWQgb2YgYW4gYWRsZXIzMi4KKyAgIGhlYWRlciBjcmMsIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGJlIHNldCB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWUsCisgICBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3YXMgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUuICBJZiBhIGd6aXAgc3RyZWFtIGlzCisgICBiZWluZyB3cml0dGVuLCBzdHJtLT5hZGxlciBpcyBhIENSQy0zMiBpbnN0ZWFkIG9mIGFuIEFkbGVyLTMyLgorCisgICAgIEZvciByYXcgZGVmbGF0ZSBvciBnemlwIGVuY29kaW5nLCBhIHJlcXVlc3QgZm9yIGEgMjU2LWJ5dGUgd2luZG93IGlzCisgICByZWplY3RlZCBhcyBpbnZhbGlkLCBzaW5jZSBvbmx5IHRoZSB6bGliIGhlYWRlciBwcm92aWRlcyBhIG1lYW5zIG9mCisgICB0cmFuc21pdHRpbmcgdGhlIHdpbmRvdyBzaXplIHRvIHRoZSBkZWNvbXByZXNzb3IuCiAKICAgICAgVGhlIG1lbUxldmVsIHBhcmFtZXRlciBzcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQKICAgIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuICBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzCkBAIC02MTQsMTIgKzYzOCwxMiBAQAogICAgYWRkaXRpb24sIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGRlZmxhdGUgd2lsbCB1c2UgYXQgbW9zdCB0aGUgd2luZG93CiAgICBzaXplIG1pbnVzIDI2MiBieXRlcyBvZiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeS4KIAotICAgICBVcG9uIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLCBzdHJtLT5hZGxlciBpcyBzZXQgdG8gdGhlIGFkbGVyMzIgdmFsdWUKKyAgICAgVXBvbiByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBBZGxlci0zMiB2YWx1ZQogICAgb2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNvbXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZhbHVlIHRvIGRldGVybWluZQotICAgd2hpY2ggZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLiAgKFRoZSBhZGxlcjMyIHZhbHVlCisgICB3aGljaCBkaWN0aW9uYXJ5IGhhcyBiZWVuIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuICAoVGhlIEFkbGVyLTMyIHZhbHVlCiAgICBhcHBsaWVzIHRvIHRoZSB3aG9sZSBkaWN0aW9uYXJ5IGV2ZW4gaWYgb25seSBhIHN1YnNldCBvZiB0aGUgZGljdGlvbmFyeSBpcwogICAgYWN0dWFsbHkgdXNlZCBieSB0aGUgY29tcHJlc3Nvci4pIElmIGEgcmF3IGRlZmxhdGUgd2FzIHJlcXVlc3RlZCwgdGhlbiB0aGUKLSAgIGFkbGVyMzIgdmFsdWUgaXMgbm90IGNvbXB1dGVkIGFuZCBzdHJtLT5hZGxlciBpcyBub3Qgc2V0LgorICAgQWRsZXItMzIgdmFsdWUgaXMgbm90IGNvbXB1dGVkIGFuZCBzdHJtLT5hZGxlciBpcyBub3Qgc2V0LgogCiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKQEAgLTYyOCw2ICs2NTIsMjggQEAKICAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBkZWZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBkZWZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkoKSBtYXkgcmV0dXJuIGEgbGVuZ3RoIGxlc3MgdGhhbiB0aGUgd2luZG93IHNpemUsIGV2ZW4KKyAgIHdoZW4gbW9yZSB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbiBpbnB1dCBoYXMgYmVlbiBwcm92aWRlZC4gSXQgbWF5IHJldHVybiB1cAorICAgdG8gMjU4IGJ5dGVzIGxlc3MgaW4gdGhhdCBjYXNlLCBkdWUgdG8gaG93IHpsaWIncyBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlCisgICBtYW5hZ2VzIHRoZSBzbGlkaW5nIHdpbmRvdyBhbmQgbG9va2FoZWFkIGZvciBtYXRjaGVzLCB3aGVyZSBtYXRjaGVzIGNhbiBiZQorICAgdXAgdG8gMjU4IGJ5dGVzIGxvbmcuIElmIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0aGUgbGFzdCB3aW5kb3ctc2l6ZSBieXRlcyBvZgorICAgaW5wdXQsIHRoZW4gdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHNhdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBvdXRzaWRlIG9mIHpsaWIuCisKKyAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zdHJlYW1wIHNvdXJjZSkpOwogLyoKQEAgLTY0OCwxMCArNjk0LDEwIEBACiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKLSAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsCi0gICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgVGhlCi0gICBzdHJlYW0gd2lsbCBrZWVwIHRoZSBzYW1lIGNvbXByZXNzaW9uIGxldmVsIGFuZCBhbnkgb3RoZXIgYXR0cmlidXRlcyB0aGF0Ci0gICBtYXkgaGF2ZSBiZWVuIHNldCBieSBkZWZsYXRlSW5pdDIuCisgICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBkZWZsYXRlRW5kIGZvbGxvd2VkIGJ5IGRlZmxhdGVJbml0LCBidXQKKyAgIGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgVGhlIHN0cmVhbQorICAgd2lsbCBsZWF2ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbgorICAgc2V0IHVuY2hhbmdlZC4KIAogICAgICBkZWZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKICAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLgpAQCAtNjYyLDIwICs3MDgsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmF0ZWd5KSk7CiAvKgogICAgICBEeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBjb21wcmVzc2lvbiBzdHJhdGVneS4gIFRoZQotICAgaW50ZXJwcmV0YXRpb24gb2YgbGV2ZWwgYW5kIHN0cmF0ZWd5IGlzIGFzIGluIGRlZmxhdGVJbml0Mi4gIFRoaXMgY2FuIGJlCisgICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyKCkuICBUaGlzIGNhbiBiZQogICAgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBjb21wcmVzc2lvbiBhbmQgc3RyYWlnaHQgY29weSBvZiB0aGUgaW5wdXQgZGF0YSwgb3IKICAgIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCBraW5kIG9mIGlucHV0IGRhdGEgcmVxdWlyaW5nIGEgZGlmZmVyZW50IHN0cmF0ZWd5LgotICAgSWYgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGNoYW5nZWQsIHRoZSBpbnB1dCBhdmFpbGFibGUgc28gZmFyIGlzCi0gICBjb21wcmVzc2VkIHdpdGggdGhlIG9sZCBsZXZlbCAoYW5kIG1heSBiZSBmbHVzaGVkKTsgdGhlIG5ldyBsZXZlbCB3aWxsIHRha2UKLSAgIGVmZmVjdCBvbmx5IGF0IHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorICAgSWYgdGhlIGNvbXByZXNzaW9uIGFwcHJvYWNoICh3aGljaCBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBsZXZlbCkgb3IgdGhlCisgICBzdHJhdGVneSBpcyBjaGFuZ2VkLCBhbmQgaWYgYW55IGlucHV0IGhhcyBiZWVuIGNvbnN1bWVkIGluIGEgcHJldmlvdXMKKyAgIGRlZmxhdGUoKSBjYWxsLCB0aGVuIHRoZSBpbnB1dCBhdmFpbGFibGUgc28gZmFyIGlzIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkCisgICBsZXZlbCBhbmQgc3RyYXRlZ3kgdXNpbmcgZGVmbGF0ZShzdHJtLCBaX0JMT0NLKS4gIFRoZXJlIGFyZSB0aHJlZSBhcHByb2FjaGVzCisgICBmb3IgdGhlIGNvbXByZXNzaW9uIGxldmVscyAwLCAxLi4zLCBhbmQgNC4uOSByZXNwZWN0aXZlbHkuICBUaGUgbmV3IGxldmVsCisgICBhbmQgc3RyYXRlZ3kgd2lsbCB0YWtlIGVmZmVjdCBhdCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KIAotICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZVBhcmFtcywgdGhlIHN0cmVhbSBzdGF0ZSBtdXN0IGJlIHNldCBhcyBmb3IKLSAgIGEgY2FsbCBvZiBkZWZsYXRlKCksIHNpbmNlIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvIGJlCi0gICBjb21wcmVzc2VkIGFuZCBmbHVzaGVkLiAgSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3QgYmUgbm9uLXplcm8uCisgICAgIElmIGEgZGVmbGF0ZShzdHJtLCBaX0JMT0NLKSBpcyBwZXJmb3JtZWQgYnkgZGVmbGF0ZVBhcmFtcygpLCBhbmQgaXQgZG9lcworICAgbm90IGhhdmUgZW5vdWdoIG91dHB1dCBzcGFjZSB0byBjb21wbGV0ZSwgdGhlbiB0aGUgcGFyYW1ldGVyIGNoYW5nZSB3aWxsIG5vdAorICAgdGFrZSBlZmZlY3QuICBJbiB0aGlzIGNhc2UsIGRlZmxhdGVQYXJhbXMoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggdGhlCisgICBzYW1lIHBhcmFtZXRlcnMgYW5kIG1vcmUgb3V0cHV0IHNwYWNlIHRvIHRyeSBhZ2Fpbi4KIAotICAgICBkZWZsYXRlUGFyYW1zIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCBvciBpZiBhIHBhcmFtZXRlciB3YXMgaW52YWxpZCwgWl9CVUZfRVJST1IgaWYKLSAgIHN0cm0tPmF2YWlsX291dCB3YXMgemVyby4KKyAgICAgSW4gb3JkZXIgdG8gYXNzdXJlIGEgY2hhbmdlIGluIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZSBmaXJzdCB0cnksIHRoZQorICAgZGVmbGF0ZSBzdHJlYW0gc2hvdWxkIGJlIGZsdXNoZWQgdXNpbmcgZGVmbGF0ZSgpIHdpdGggWl9CTE9DSyBvciBvdGhlciBmbHVzaAorICAgcmVxdWVzdCB1bnRpbCBzdHJtLmF2YWlsX291dCBpcyBub3QgemVybywgYmVmb3JlIGNhbGxpbmcgZGVmbGF0ZVBhcmFtcygpLgorICAgVGhlbiBubyBtb3JlIGlucHV0IGRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGJlZm9yZSB0aGUgZGVmbGF0ZVBhcmFtcygpIGNhbGwuCisgICBJZiB0aGlzIGlzIGRvbmUsIHRoZSBvbGQgbGV2ZWwgYW5kIHN0cmF0ZWd5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZGF0YQorICAgY29tcHJlc3NlZCBiZWZvcmUgZGVmbGF0ZVBhcmFtcygpLCBhbmQgdGhlIG5ldyBsZXZlbCBhbmQgc3RyYXRlZ3kgd2lsbCBiZQorICAgYXBwbGllZCB0byB0aGUgdGhlIGRhdGEgY29tcHJlc3NlZCBhZnRlciBkZWZsYXRlUGFyYW1zKCkuCisKKyAgICAgZGVmbGF0ZVBhcmFtcyByZXR1cm5zIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJlYW0KKyAgIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIG9yIFpfQlVGX0VSUk9SIGlmCisgICB0aGVyZSB3YXMgbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgdG8gY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIG9mIHRoZQorICAgYXZhaWxhYmxlIGlucHV0IGRhdGEgYmVmb3JlIGEgY2hhbmdlIGluIHRoZSBzdHJhdGVneSBvciBhcHByb2FjaC4gIE5vdGUgdGhhdAorICAgaW4gdGhlIGNhc2Ugb2YgYSBaX0JVRl9FUlJPUiwgdGhlIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2VkLiAgQSByZXR1cm4KKyAgIHZhbHVlIG9mIFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgaW4gd2hpY2ggY2FzZSBkZWZsYXRlUGFyYW1zKCkgY2FuIGJlCisgICByZXRyaWVkIHdpdGggbW9yZSBvdXRwdXQgc3BhY2UuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVUdW5lIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTc5Myw3ICs4NTUsNyBAQAogICAgaXMgZm9yIHVzZSB3aXRoIG90aGVyIGZvcm1hdHMgdGhhdCB1c2UgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdAogICAgc3VjaCBhcyB6aXAuICBUaG9zZSBmb3JtYXRzIHByb3ZpZGUgdGhlaXIgb3duIGNoZWNrIHZhbHVlcy4gIElmIGEgY3VzdG9tCiAgICBmb3JtYXQgaXMgZGV2ZWxvcGVkIHVzaW5nIHRoZSByYXcgZGVmbGF0ZSBmb3JtYXQgZm9yIGNvbXByZXNzZWQgZGF0YSwgaXQgaXMKLSAgIHJlY29tbWVuZGVkIHRoYXQgYSBjaGVjayB2YWx1ZSBzdWNoIGFzIGFuIGFkbGVyMzIgb3IgYSBjcmMzMiBiZSBhcHBsaWVkIHRvCisgICByZWNvbW1lbmRlZCB0aGF0IGEgY2hlY2sgdmFsdWUgc3VjaCBhcyBhbiBBZGxlci0zMiBvciBhIENSQy0zMiBiZSBhcHBsaWVkIHRvCiAgICB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYXMgaXMgZG9uZSBpbiB0aGUgemxpYiwgZ3ppcCwgYW5kIHppcCBmb3JtYXRzLiAgRm9yCiAgICBtb3N0IGFwcGxpY2F0aW9ucywgdGhlIHpsaWIgZm9ybWF0IHNob3VsZCBiZSB1c2VkIGFzIGlzLiAgTm90ZSB0aGF0IGNvbW1lbnRzCiAgICBhYm92ZSBvbiB0aGUgdXNlIGluIGRlZmxhdGVJbml0MigpIGFwcGxpZXMgdG8gdGhlIG1hZ25pdHVkZSBvZiB3aW5kb3dCaXRzLgpAQCAtODAyLDcgKzg2NCwxMCBAQAogICAgMzIgdG8gd2luZG93Qml0cyB0byBlbmFibGUgemxpYiBhbmQgZ3ppcCBkZWNvZGluZyB3aXRoIGF1dG9tYXRpYyBoZWFkZXIKICAgIGRldGVjdGlvbiwgb3IgYWRkIDE2IHRvIGRlY29kZSBvbmx5IHRoZSBnemlwIGZvcm1hdCAodGhlIHpsaWIgZm9ybWF0IHdpbGwKICAgIHJldHVybiBhIFpfREFUQV9FUlJPUikuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGRlY29kZWQsIHN0cm0tPmFkbGVyIGlzIGEKLSAgIGNyYzMyIGluc3RlYWQgb2YgYW4gYWRsZXIzMi4KKyAgIENSQy0zMiBpbnN0ZWFkIG9mIGFuIEFkbGVyLTMyLiAgVW5saWtlIHRoZSBndW56aXAgdXRpbGl0eSBhbmQgZ3pyZWFkKCkgKHNlZQorICAgYmVsb3cpLCBpbmZsYXRlKCkgd2lsbCBub3QgYXV0b21hdGljYWxseSBkZWNvZGUgY29uY2F0ZW5hdGVkIGd6aXAgc3RyZWFtcy4KKyAgIGluZmxhdGUoKSB3aWxsIHJldHVybiBaX1NUUkVBTV9FTkQgYXQgdGhlIGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW0uICBUaGUgc3RhdGUKKyAgIHdvdWxkIG5lZWQgdG8gYmUgcmVzZXQgdG8gY29udGludWUgZGVjb2RpbmcgYSBzdWJzZXF1ZW50IGd6aXAgc3RyZWFtLgogCiAgICAgIGluZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKICAgIG1lbW9yeSwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKQEAgLTgyMyw3ICs4ODgsNyBAQAogICAgICBJbml0aWFsaXplcyB0aGUgZGVjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIHVuY29tcHJlc3NlZCBieXRlCiAgICBzZXF1ZW5jZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIG9mIGluZmxhdGUsCiAgICBpZiB0aGF0IGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuICBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKLSAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBjYWxsIG9mIGluZmxhdGUuCisgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBBZGxlci0zMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueQogICAgdGltZSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBJZiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeSBpcyBzbWFsbGVyIHRoYW4gdGhlCkBAIC04MzQsNyArODk5LDcgQEAKICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGEKICAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwogICAgaW5jb25zaXN0ZW50LCBaX0RBVEFfRVJST1IgaWYgdGhlIGdpdmVuIGRpY3Rpb25hcnkgZG9lc24ndCBtYXRjaCB0aGUKLSAgIGV4cGVjdGVkIG9uZSAoaW5jb3JyZWN0IGFkbGVyMzIgdmFsdWUpLiAgaW5mbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKKyAgIGV4cGVjdGVkIG9uZSAoaW5jb3JyZWN0IEFkbGVyLTMyIHZhbHVlKS4gIGluZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90CiAgICBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBzdWJzZXF1ZW50IGNhbGxzIG9mCiAgICBpbmZsYXRlKCkuCiAqLwpAQCAtODkyLDcgKzk1Nyw3IEBACiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBpbmZsYXRlRW5kIGZvbGxvd2VkIGJ5IGluZmxhdGVJbml0LAotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBkZWNvbXByZXNzaW9uIHN0YXRlLiAgVGhlCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZQogICAgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLgogCiAgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQpAQCAtOTA0LDcgKzk2OSw5IEBACiAvKgogICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGluZmxhdGVSZXNldCwgYnV0IGl0IGFsc28gcGVybWl0cyBjaGFuZ2luZwogICAgdGhlIHdyYXAgYW5kIHdpbmRvdyBzaXplIHJlcXVlc3RzLiAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIGludGVycHJldGVkCi0gICB0aGUgc2FtZSBhcyBpdCBpcyBmb3IgaW5mbGF0ZUluaXQyLgorICAgdGhlIHNhbWUgYXMgaXQgaXMgZm9yIGluZmxhdGVJbml0Mi4gIElmIHRoZSB3aW5kb3cgc2l6ZSBpcyBjaGFuZ2VkLCB0aGVuIHRoZQorICAgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHdpbmRvdyBpcyBmcmVlZCwgYW5kIHRoZSB3aW5kb3cgd2lsbCBiZSByZWFsbG9jYXRlZAorICAgYnkgaW5mbGF0ZSgpIGlmIG5lZWRlZC4KIAogICAgICBpbmZsYXRlUmVzZXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCiAgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKSwgb3IgaWYKQEAgLTk1Niw3ICsxMDIzLDcgQEAKICAgIGxvY2F0aW9uIGluIHRoZSBpbnB1dCBzdHJlYW0gY2FuIGJlIGRldGVybWluZWQgZnJvbSBhdmFpbF9pbiBhbmQgZGF0YV90eXBlCiAgICBhcyBub3RlZCBpbiB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBaX0JMT0NLIGZsdXNoIHBhcmFtZXRlciBmb3IgaW5mbGF0ZS4KIAotICAgICBpbmZsYXRlTWFyayByZXR1cm5zIHRoZSB2YWx1ZSBub3RlZCBhYm92ZSBvciAtMSA8PCAxNiBpZiB0aGUgcHJvdmlkZWQKKyAgICAgaW5mbGF0ZU1hcmsgcmV0dXJucyB0aGUgdmFsdWUgbm90ZWQgYWJvdmUsIG9yIC02NTUzNiBpZiB0aGUgcHJvdmlkZWQKICAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KICovCiAKQEAgLTEwNDgsOSArMTExNSw5IEBACiAgICBUaGlzIHJvdXRpbmUgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBpbiBhIHV0aWxpdHkgdGhhdCByZWFkcyB6aXAgb3IgZ3ppcAogICAgZmlsZXMgYW5kIHdyaXRlcyBvdXQgdW5jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHV0aWxpdHkgd291bGQgZGVjb2RlIHRoZQogICAgaGVhZGVyIGFuZCBwcm9jZXNzIHRoZSB0cmFpbGVyIG9uIGl0cyBvd24sIGhlbmNlIHRoaXMgcm91dGluZSBleHBlY3RzIG9ubHkKLSAgIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0gdG8gZGVjb21wcmVzcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIG5vcm1hbAotICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGVpdGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kCi0gICB0cmFpbGVyIGFyb3VuZCB0aGUgZGVmbGF0ZSBzdHJlYW0uCisgICB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtIHRvIGRlY29tcHJlc3MuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CisgICBiZWhhdmlvciBvZiBpbmZsYXRlKCksIHdoaWNoIGV4cGVjdHMgYSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBhcm91bmQgdGhlCisgICBkZWZsYXRlIHN0cmVhbS4KIAogICAgICBpbmZsYXRlQmFjaygpIHVzZXMgdHdvIHN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIgdGhhdCBhcmUgdGhlbgogICAgY2FsbGVkIGJ5IGluZmxhdGVCYWNrKCkgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBpbmZsYXRlQmFjaygpIGNhbGxzIHRob3NlCkBAIC0xMDU5LDEyICsxMTI2LDEyIEBACiAgICBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMgYXJlIGRlZmluZWQgYWJvdmUgaW4gdGhlIGluX2Z1bmMgYW5kIG91dF9mdW5jCiAgICB0eXBlZGVmcy4gIGluZmxhdGVCYWNrKCkgd2lsbCBjYWxsIGluKGluX2Rlc2MsICZidWYpIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlCiAgICBudW1iZXIgb2YgYnl0ZXMgb2YgcHJvdmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJZgotICAgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBpbigpIG11c3QgcmV0dXJuIHplcm8tLWJ1ZiBpcyBpZ25vcmVkIGluIHRoYXQKLSAgIGNhc2UtLWFuZCBpbmZsYXRlQmFjaygpIHdpbGwgcmV0dXJuIGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwKLSAgIG91dChvdXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4ubGVuLTFdLiAgb3V0KCkKLSAgIHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBvciBub24temVybyBvbiBmYWlsdXJlLiAgSWYgb3V0KCkgcmV0dXJucwotICAgbm9uLXplcm8sIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIE5laXRoZXIgaW4oKSBub3Igb3V0KCkKLSAgIGFyZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHByb3ZpZGVkIHRvCisgICB0aGVyZSBpcyBubyBpbnB1dCBhdmFpbGFibGUsIGluKCkgbXVzdCByZXR1cm4gemVybyAtLSBidWYgaXMgaWdub3JlZCBpbiB0aGF0CisgICBjYXNlIC0tIGFuZCBpbmZsYXRlQmFjaygpIHdpbGwgcmV0dXJuIGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsCisgICBjYWxsIG91dChvdXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4ubGVuLTFdLgorICAgb3V0KCkgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIG5vbi16ZXJvIG9uIGZhaWx1cmUuICBJZiBvdXQoKQorICAgcmV0dXJucyBub24temVybywgaW5mbGF0ZUJhY2soKSB3aWxsIHJldHVybiB3aXRoIGFuIGVycm9yLiAgTmVpdGhlciBpbigpIG5vcgorICAgb3V0KCkgYXJlIHBlcm1pdHRlZCB0byBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aW5kb3cgcHJvdmlkZWQgdG8KICAgIGluZmxhdGVCYWNrSW5pdCgpLCB3aGljaCBpcyBhbHNvIHRoZSBidWZmZXIgdGhhdCBvdXQoKSB1c2VzIHRvIHdyaXRlIGZyb20uCiAgICBUaGUgbGVuZ3RoIHdyaXR0ZW4gYnkgb3V0KCkgd2lsbCBiZSBhdCBtb3N0IHRoZSB3aW5kb3cgc2l6ZS4gIEFueSBub24temVybwogICAgYW1vdW50IG9mIGlucHV0IG1heSBiZSBwcm92aWRlZCBieSBpbigpLgpAQCAtMTA5Miw3ICsxMTU5LDcgQEAKICAgIHVzaW5nIHN0cm0tPm5leHRfaW4gd2hpY2ggd2lsbCBiZSBaX05VTEwgb25seSBpZiBpbigpIHJldHVybmVkIGFuIGVycm9yLiAgSWYKICAgIHN0cm0tPm5leHRfaW4gaXMgbm90IFpfTlVMTCwgdGhlbiB0aGUgWl9CVUZfRVJST1Igd2FzIGR1ZSB0byBvdXQoKSByZXR1cm5pbmcKICAgIG5vbi16ZXJvLiAgKGluKCkgd2lsbCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBvdXQoKSwgc28gc3RybS0+bmV4dF9pbiBpcwotICAgYXNzdXJlZCB0byBiZSBkZWZpbmVkIGlmIG91dCgpIHJldHVybnMgbm9uLXplcm8uKSBOb3RlIHRoYXQgaW5mbGF0ZUJhY2soKQorICAgYXNzdXJlZCB0byBiZSBkZWZpbmVkIGlmIG91dCgpIHJldHVybnMgbm9uLXplcm8uKSAgTm90ZSB0aGF0IGluZmxhdGVCYWNrKCkKICAgIGNhbm5vdCByZXR1cm4gWl9PSy4KICovCiAKQEAgLTExMTQsNyArMTE4MSw3IEBACiAgICAgIDcuNjogc2l6ZSBvZiB6X29mZl90CiAKICAgICBDb21waWxlciwgYXNzZW1ibGVyLCBhbmQgZGVidWcgb3B0aW9uczoKLSAgICAgODogREVCVUcKKyAgICAgODogWkxJQl9ERUJVRwogICAgICA5OiBBU01WIG9yIEFTTUlORiAtLSB1c2UgQVNNIGNvZGUKICAgICAgMTA6IFpMSUJfV0lOQVBJIC0tIGV4cG9ydGVkIGZ1bmN0aW9ucyB1c2UgdGhlIFdJTkFQSSBjYWxsaW5nIGNvbnZlbnRpb24KICAgICAgMTE6IDAgKHJlc2VydmVkKQpAQCAtMTE2NCw3ICsxMjMxLDggQEAKICAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsIHNpemUKICAgIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5CiAgICBjb21wcmVzc0JvdW5kKHNvdXJjZUxlbikuICBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQotICAgY29tcHJlc3NlZCBidWZmZXIuCisgICBjb21wcmVzc2VkIGRhdGEuICBjb21wcmVzcygpIGlzIGVxdWl2YWxlbnQgdG8gY29tcHJlc3MyKCkgd2l0aCBhIGxldmVsCisgICBwYXJhbWV0ZXIgb2YgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLgogCiAgICAgIGNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKQEAgLTExODAsNyArMTI0OCw3IEBACiAgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQogICAgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQogICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAgIGNvbXByZXNzZWQgYnVmZmVyLgorICAgY29tcHJlc3NlZCBkYXRhLgogCiAgICAgIGNvbXByZXNzMiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKICAgIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwKQEAgLTEyMDMsNyArMTI3MSw3IEBACiAgICB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBoYXZlIGJlZW4gc2F2ZWQKICAgIHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXByZXNzb3IgYnkgc29tZQogICAgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24gZXhpdCwgZGVzdExlbgotICAgaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgYnVmZmVyLgorICAgaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKQEAgLTEyMTIsNiArMTI4MCwxNCBAQAogICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIHVuY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyAqc291cmNlTGVuKSk7CisvKgorICAgICBTYW1lIGFzIHVuY29tcHJlc3MsIGV4Y2VwdCB0aGF0IHNvdXJjZUxlbiBpcyBhIHBvaW50ZXIsIHdoZXJlIHRoZQorICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgaXMgKnNvdXJjZUxlbi4gIE9uIHJldHVybiwgKnNvdXJjZUxlbiBpcyB0aGUgbnVtYmVyIG9mCisgICBzb3VyY2UgYnl0ZXMgY29uc3VtZWQuCisqLworCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucyAqLwogCiAvKgpAQCAtMTI5MCwxMCArMTM2Niw5IEBACiAgICBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIDgxOTIgYnl0ZXMuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyCiAgICBnem9wZW4oKSBvciBnemRvcGVuKCksIGFuZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRoYXQgcmVhZCBvciB3cml0ZSB0aGUKICAgIGZpbGUuICBUaGUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsd2F5cyBkZWZlcnJlZCB0byB0aGUgZmlyc3QgcmVhZCBvcgotICAgd3JpdGUuICBUd28gYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBlaXRoZXIgYm90aCBvZiB0aGUgc3BlY2lmaWVkIHNpemUgd2hlbgotICAgd3JpdGluZywgb3Igb25lIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgdGhlIG90aGVyIHR3aWNlIHRoYXQgc2l6ZSB3aGVuCi0gICByZWFkaW5nLiAgQSBsYXJnZXIgYnVmZmVyIHNpemUgb2YsIGZvciBleGFtcGxlLCA2NEsgb3IgMTI4SyBieXRlcyB3aWxsCi0gICBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzcGVlZCBvZiBkZWNvbXByZXNzaW9uIChyZWFkaW5nKS4KKyAgIHdyaXRlLiAgVGhyZWUgdGltZXMgdGhhdCBzaXplIGluIGJ1ZmZlciBzcGFjZSBpcyBhbGxvY2F0ZWQuICBBIGxhcmdlciBidWZmZXIKKyAgIHNpemUgb2YsIGZvciBleGFtcGxlLCA2NEsgb3IgMTI4SyBieXRlcyB3aWxsIG5vdGljZWFibHkgaW5jcmVhc2UgdGhlIHNwZWVkCisgICBvZiBkZWNvbXByZXNzaW9uIChyZWFkaW5nKS4KIAogICAgICBUaGUgbmV3IGJ1ZmZlciBzaXplIGFsc28gYWZmZWN0cyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGd6cHJpbnRmKCkuCiAKQEAgLTEzMDQsMTAgKzEzNzksMTIgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSkpOwogLyoKICAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gIFNlZSB0aGUgZGVzY3JpcHRpb24KLSAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4KKyAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4gIFByZXZpb3VzbHkgcHJvdmlkZWQKKyAgIGRhdGEgaXMgZmx1c2hlZCBiZWZvcmUgdGhlIHBhcmFtZXRlciBjaGFuZ2UuCiAKLSAgICAgZ3pzZXRwYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBub3QKLSAgIG9wZW5lZCBmb3Igd3JpdGluZy4KKyAgICAgZ3pzZXRwYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBub3QKKyAgIG9wZW5lZCBmb3Igd3JpdGluZywgWl9FUlJOTyBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRoZSBmbHVzaGVkIGRhdGEsCisgICBvciBaX01FTV9FUlJPUiBpZiB0aGVyZSBpcyBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikpOwpAQCAtMTMzNSw3ICsxNDEyLDM1IEBACiAgICBjYXNlLgogCiAgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgotICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLgorICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLiAgSWYgbGVuIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gYW4gaW50LAorICAgdGhlbiBub3RoaW5nIGlzIHJlYWQsIC0xIGlzIHJldHVybmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0bworICAgWl9TVFJFQU1fRVJST1IuCisqLworCitaRVhURVJOIHpfc2l6ZV90IFpFWFBPUlQgZ3pmcmVhZCBPRigodm9pZHAgYnVmLCB6X3NpemVfdCBzaXplLCB6X3NpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFJlYWQgdXAgdG8gbml0ZW1zIGl0ZW1zIG9mIHNpemUgc2l6ZSBmcm9tIGZpbGUgdG8gYnVmLCBvdGhlcndpc2Ugb3BlcmF0aW5nCisgICBhcyBnenJlYWQoKSBkb2VzLiAgVGhpcyBkdXBsaWNhdGVzIHRoZSBpbnRlcmZhY2Ugb2Ygc3RkaW8ncyBmcmVhZCgpLCB3aXRoCisgICBzaXplX3QgcmVxdWVzdCBhbmQgcmV0dXJuIHR5cGVzLiAgSWYgdGhlIGxpYnJhcnkgZGVmaW5lcyBzaXplX3QsIHRoZW4KKyAgIHpfc2l6ZV90IGlzIGlkZW50aWNhbCB0byBzaXplX3QuICBJZiBub3QsIHRoZW4gel9zaXplX3QgaXMgYW4gdW5zaWduZWQKKyAgIGludGVnZXIgdHlwZSB0aGF0IGNhbiBjb250YWluIGEgcG9pbnRlci4KKworICAgICBnemZyZWFkKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgcmVhZCBvZiBzaXplIHNpemUsIG9yIHplcm8gaWYKKyAgIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQgYW5kIGEgZnVsbCBpdGVtIGNvdWxkIG5vdCBiZSByZWFkLCBvciBpZgorICAgdGhlcmUgd2FzIGFuIGVycm9yLiAgZ3plcnJvcigpIG11c3QgYmUgY29uc3VsdGVkIGlmIHplcm8gaXMgcmV0dXJuZWQgaW4KKyAgIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICBJZiB0aGUgbXVsdGlwbGljYXRpb24gb2Ygc2l6ZSBhbmQKKyAgIG5pdGVtcyBvdmVyZmxvd3MsIGkuZS4gdGhlIHByb2R1Y3QgZG9lcyBub3QgZml0IGluIGEgel9zaXplX3QsIHRoZW4gbm90aGluZworICAgaXMgcmVhZCwgemVybyBpcyByZXR1cm5lZCwgYW5kIHRoZSBlcnJvciBzdGF0ZSBpcyBzZXQgdG8gWl9TVFJFQU1fRVJST1IuCisKKyAgICAgSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGVuZCBvZiBmaWxlIGlzIHJlYWNoZWQgYW5kIG9ubHkgYSBwYXJ0aWFsIGl0ZW0gaXMKKyAgIGF2YWlsYWJsZSBhdCB0aGUgZW5kLCBpLmUuIHRoZSByZW1haW5pbmcgdW5jb21wcmVzc2VkIGRhdGEgbGVuZ3RoIGlzIG5vdCBhCisgICBtdWx0aXBsZSBvZiBzaXplLCB0aGVuIHRoZSBmaW5hbCBwYXJ0aWFsIGl0ZW0gaXMgbmV2ZXRoZWxlc3MgcmVhZCBpbnRvIGJ1ZgorICAgYW5kIHRoZSBlbmQtb2YtZmlsZSBmbGFnIGlzIHNldC4gIFRoZSBsZW5ndGggb2YgdGhlIHBhcnRpYWwgaXRlbSByZWFkIGlzIG5vdAorICAgcHJvdmlkZWQsIGJ1dCBjb3VsZCBiZSBpbmZlcnJlZCBmcm9tIHRoZSByZXN1bHQgb2YgZ3p0ZWxsKCkuICBUaGlzIGJlaGF2aW9yCisgICBpcyB0aGUgc2FtZSBhcyB0aGUgYmVoYXZpb3Igb2YgZnJlYWQoKSBpbXBsZW1lbnRhdGlvbnMgaW4gY29tbW9uIGxpYnJhcmllcywKKyAgIGJ1dCBpdCBwcmV2ZW50cyB0aGUgZGlyZWN0IHVzZSBvZiBnemZyZWFkKCkgdG8gcmVhZCBhIGNvbmN1cnJlbnRseSB3cml0dGVuCisgICBmaWxlLCByZXNldGluZyBhbmQgcmV0cnlpbmcgb24gZW5kLW9mLWZpbGUsIHdoZW4gc2l6ZSBpcyBub3QgMS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsCkBAIC0xMzQ2LDE5ICsxNDUxLDMzIEBACiAgICBlcnJvci4KICovCiAKK1pFWFRFUk4gel9zaXplX3QgWkVYUE9SVCBnemZ3cml0ZSBPRigodm9pZHBjIGJ1Ziwgel9zaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zaXplX3Qgbml0ZW1zLCBnekZpbGUgZmlsZSkpOworLyoKKyAgICAgZ3pmd3JpdGUoKSB3cml0ZXMgbml0ZW1zIGl0ZW1zIG9mIHNpemUgc2l6ZSBmcm9tIGJ1ZiB0byBmaWxlLCBkdXBsaWNhdGluZworICAgdGhlIGludGVyZmFjZSBvZiBzdGRpbydzIGZ3cml0ZSgpLCB3aXRoIHNpemVfdCByZXF1ZXN0IGFuZCByZXR1cm4gdHlwZXMuICBJZgorICAgdGhlIGxpYnJhcnkgZGVmaW5lcyBzaXplX3QsIHRoZW4gel9zaXplX3QgaXMgaWRlbnRpY2FsIHRvIHNpemVfdC4gIElmIG5vdCwKKyAgIHRoZW4gel9zaXplX3QgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGNvbnRhaW4gYSBwb2ludGVyLgorCisgICAgIGd6ZndyaXRlKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgd3JpdHRlbiBvZiBzaXplIHNpemUsIG9yIHplcm8KKyAgIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gIElmIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiBzaXplIGFuZCBuaXRlbXMgb3ZlcmZsb3dzLAorICAgaS5lLiB0aGUgcHJvZHVjdCBkb2VzIG5vdCBmaXQgaW4gYSB6X3NpemVfdCwgdGhlbiBub3RoaW5nIGlzIHdyaXR0ZW4sIHplcm8KKyAgIGlzIHJldHVybmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0byBaX1NUUkVBTV9FUlJPUi4KKyovCisKIFpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CiAvKgogICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKICAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuLCBvciAwIGluIGNhc2Ugb2YgZXJyb3IuICBUaGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBpcyBsaW1pdGVkIHRvIDgxOTEsIG9yIG9uZSBsZXNzIHRoYW4gdGhlIGJ1ZmZlcgotICAgc2l6ZSBnaXZlbiB0byBnemJ1ZmZlcigpLiAgVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlIHRoYXQgdGhpcyBsaW1pdCBpcyBub3QKLSAgIGV4Y2VlZGVkLiAgSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4gZ3pwcmludGYoKSB3aWxsIHJldHVybiBhbiBlcnJvciAoMCkgd2l0aAotICAgbm90aGluZyB3cml0dGVuLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhIGJ1ZmZlciBvdmVyZmxvdyB3aXRoCi0gICB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZiB6bGliIHdhcyBjb21waWxlZCB3aXRoCi0gICB0aGUgaW5zZWN1cmUgZnVuY3Rpb25zIHNwcmludGYoKSBvciB2c3ByaW50ZigpIGJlY2F1c2UgdGhlIHNlY3VyZSBzbnByaW50ZigpCi0gICBvciB2c25wcmludGYoKSBmdW5jdGlvbnMgd2VyZSBub3QgYXZhaWxhYmxlLiAgVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCB1c2luZwotICAgemxpYkNvbXBpbGVGbGFncygpLgorICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4sIG9yIGEgbmVnYXRpdmUgemxpYiBlcnJvciBjb2RlIGluIGNhc2UKKyAgIG9mIGVycm9yLiAgVGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBpcyBsaW1pdGVkIHRvIDgxOTEsIG9yCisgICBvbmUgbGVzcyB0aGFuIHRoZSBidWZmZXIgc2l6ZSBnaXZlbiB0byBnemJ1ZmZlcigpLiAgVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlCisgICB0aGF0IHRoaXMgbGltaXQgaXMgbm90IGV4Y2VlZGVkLiAgSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4gZ3pwcmludGYoKSB3aWxsCisgICByZXR1cm4gYW4gZXJyb3IgKDApIHdpdGggbm90aGluZyB3cml0dGVuLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhCisgICBidWZmZXIgb3ZlcmZsb3cgd2l0aCB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZgorICAgemxpYiB3YXMgY29tcGlsZWQgd2l0aCB0aGUgaW5zZWN1cmUgZnVuY3Rpb25zIHNwcmludGYoKSBvciB2c3ByaW50ZigpCisgICBiZWNhdXNlIHRoZSBzZWN1cmUgc25wcmludGYoKSBvciB2c25wcmludGYoKSBmdW5jdGlvbnMgd2VyZSBub3QgYXZhaWxhYmxlLgorICAgVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCB1c2luZyB6bGliQ29tcGlsZUZsYWdzKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6cHV0cyBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKnMpKTsKQEAgLTE0MTgsNyArMTUzNyw3IEBACiAgICAgIElmIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaXMgWl9GSU5JU0gsIHRoZSByZW1haW5pbmcgZGF0YSBpcyB3cml0dGVuIGFuZCB0aGUKICAgIGd6aXAgc3RyZWFtIGlzIGNvbXBsZXRlZCBpbiB0aGUgb3V0cHV0LiAgSWYgZ3p3cml0ZSgpIGlzIGNhbGxlZCBhZ2FpbiwgYSBuZXcKICAgIGd6aXAgc3RyZWFtIHdpbGwgYmUgc3RhcnRlZCBpbiB0aGUgb3V0cHV0LiAgZ3pyZWFkKCkgaXMgYWJsZSB0byByZWFkIHN1Y2gKLSAgIGNvbmNhdGVudGVkIGd6aXAgc3RyZWFtcy4KKyAgIGNvbmNhdGVuYXRlZCBnemlwIHN0cmVhbXMuCiAKICAgICAgZ3pmbHVzaCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCB3aWxsCiAgICBkZWdyYWRlIGNvbXByZXNzaW9uIGlmIGNhbGxlZCB0b28gb2Z0ZW4uCkBAIC0xNTcyLDcgKzE2OTEsNyBAQAogICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3VtLiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQogICAgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLgogCi0gICAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzIHJlbGlhYmxlIGFzIGEgQ1JDLTMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKICAgIG11Y2ggZmFzdGVyLgogCiAgICBVc2FnZSBleGFtcGxlOgpAQCAtMTU4NSw2ICsxNzA0LDEyIEBACiAgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKICovCiAKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX3ogT0YoKHVMb25nIGFkbGVyLCBjb25zdCBCeXRlZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zaXplX3QgbGVuKSk7CisvKgorICAgICBTYW1lIGFzIGFkbGVyMzIoKSwgYnV0IHdpdGggYSBzaXplX3QgbGVuZ3RoLgorKi8KKwogLyoKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9vZmZfdCBsZW4yKSk7CkBAIC0xNjE0LDYgKzE3MzksMTIgQEAKICAgICAgaWYgKGNyYyAhPSBvcmlnaW5hbF9jcmMpIGVycm9yKCk7CiAqLwogCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfeiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zaXplX3QgbGVuKSk7CisvKgorICAgICBTYW1lIGFzIGNyYzMyKCksIGJ1dCB3aXRoIGEgc2l6ZV90IGxlbmd0aC4KKyovCisKIC8qCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmZfdCBsZW4yKSk7CiAKQEAgLTE2NDQsMTkgKzE3NzUsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7Ci0jZGVmaW5lIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCi0gICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQotI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCi0gICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQotI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCi0gICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQotI2RlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAotICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwKLSAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCi0jZGVmaW5lIGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKLSAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKLSAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIGRlZmluZSB6X2RlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCisgICAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgel9pbmZsYXRlSW5pdChzdHJtKSBcCisgICAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgel9kZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCisgICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSB6X2luZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCisgICAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgel9pbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCisgICAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorI2Vsc2UKKyMgIGRlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAorICAgICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKKyAgICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCisgICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAorICAgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKKyAgICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjZW5kaWYKIAogI2lmbmRlZiBaX1NPTE8KIApAQCAtMTY3NiwxMCArMTgyMywxMCBAQAogI2lmZGVmIFpfUFJFRklYX1NFVAogIyAgdW5kZWYgel9nemdldGMKICMgIGRlZmluZSB6X2d6Z2V0YyhnKSBcCi0gICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogZ3pnZXRjKGcpKQorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IChnemdldGMpKGcpKQogI2Vsc2UKICMgIGRlZmluZSBnemdldGMoZykgXAotICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiAoZ3pnZXRjKShnKSkKICNlbmRpZgogCiAvKiBwcm92aWRlIDY0LWJpdCBvZmZzZXQgZnVuY3Rpb25zIGlmIF9MQVJHRUZJTEU2NF9TT1VSQ0UgZGVmaW5lZCwgYW5kL29yCkBAIC0xNzM3LDE5ICsxODg0LDE2IEBACiAKICNlbmRpZiAvKiAhWl9TT0xPICovCiAKLS8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwotI2lmICFkZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCi0gICAgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKLSNlbmRpZgotCiAvKiB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zICovCiBaRVhURVJOIGNvbnN0IGNoYXIgICAqIFpFWFBPUlQgekVycm9yICAgICAgICAgICBPRigoaW50KSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wKSk7CiBaRVhURVJOIGNvbnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZSBPRigoel9zdHJlYW1wLCBpbnQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVmFsaWRhdGUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIHVuc2lnbmVkIGxvbmcgIFpFWFBPUlQgaW5mbGF0ZUNvZGVzVXNlZCBPRiAoKHpfc3RyZWFtcCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOwotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pKSAmJiAhZGVmaW5lZChaX1NPTE8pCiBaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3psaWIubWFwIGIvc3JjL3psaWIubWFwCmluZGV4IDU1YzY2NDcuLjQwZmE5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy96bGliLm1hcAorKysgYi9zcmMvemxpYi5tYXAKQEAgLTEsODMgKzEsOTQgQEAKLVpMSUJfMS4yLjAgewotICBnbG9iYWw6Ci0gICAgY29tcHJlc3NCb3VuZDsKLSAgICBkZWZsYXRlQm91bmQ7Ci0gICAgaW5mbGF0ZUJhY2s7Ci0gICAgaW5mbGF0ZUJhY2tFbmQ7Ci0gICAgaW5mbGF0ZUJhY2tJbml0XzsKLSAgICBpbmZsYXRlQ29weTsKLSAgbG9jYWw6Ci0gICAgZGVmbGF0ZV9jb3B5cmlnaHQ7Ci0gICAgaW5mbGF0ZV9jb3B5cmlnaHQ7Ci0gICAgaW5mbGF0ZV9mYXN0OwotICAgIGluZmxhdGVfdGFibGU7Ci0gICAgemNhbGxvYzsKLSAgICB6Y2ZyZWU7Ci0gICAgel9lcnJtc2c7Ci0gICAgZ3pfZXJyb3I7Ci0gICAgZ3pfaW50bWF4OwotICAgIF8qOwotfTsKLQotWkxJQl8xLjIuMC4yIHsKLSAgICBnemNsZWFyZXJyOwotICAgIGd6dW5nZXRjOwotICAgIHpsaWJDb21waWxlRmxhZ3M7Ci19IFpMSUJfMS4yLjA7Ci0KLVpMSUJfMS4yLjAuOCB7Ci0gICAgZGVmbGF0ZVByaW1lOwotfSBaTElCXzEuMi4wLjI7Ci0KLVpMSUJfMS4yLjIgewotICAgIGFkbGVyMzJfY29tYmluZTsKLSAgICBjcmMzMl9jb21iaW5lOwotICAgIGRlZmxhdGVTZXRIZWFkZXI7Ci0gICAgaW5mbGF0ZUdldEhlYWRlcjsKLX0gWkxJQl8xLjIuMC44OwotCi1aTElCXzEuMi4yLjMgewotICAgIGRlZmxhdGVUdW5lOwotICAgIGd6ZGlyZWN0OwotfSBaTElCXzEuMi4yOwotCi1aTElCXzEuMi4yLjQgewotICAgIGluZmxhdGVQcmltZTsKLX0gWkxJQl8xLjIuMi4zOwotCi1aTElCXzEuMi4zLjMgewotICAgIGFkbGVyMzJfY29tYmluZTY0OwotICAgIGNyYzMyX2NvbWJpbmU2NDsKLSAgICBnem9wZW42NDsKLSAgICBnenNlZWs2NDsKLSAgICBnenRlbGw2NDsKLSAgICBpbmZsYXRlVW5kZXJtaW5lOwotfSBaTElCXzEuMi4yLjQ7Ci0KLVpMSUJfMS4yLjMuNCB7Ci0gICAgaW5mbGF0ZVJlc2V0MjsKLSAgICBpbmZsYXRlTWFyazsKLX0gWkxJQl8xLjIuMy4zOwotCi1aTElCXzEuMi4zLjUgewotICAgIGd6YnVmZmVyOwotICAgIGd6b2Zmc2V0OwotICAgIGd6b2Zmc2V0NjQ7Ci0gICAgZ3pjbG9zZV9yOwotICAgIGd6Y2xvc2VfdzsKLX0gWkxJQl8xLjIuMy40OwotCi1aTElCXzEuMi41LjEgewotICAgIGRlZmxhdGVQZW5kaW5nOwotfSBaTElCXzEuMi4zLjU7Ci0KLVpMSUJfMS4yLjUuMiB7Ci0gICAgZGVmbGF0ZVJlc2V0S2VlcDsKLSAgICBnemdldGNfOwotICAgIGluZmxhdGVSZXNldEtlZXA7Ci19IFpMSUJfMS4yLjUuMTsKLQotWkxJQl8xLjIuNy4xIHsKLSAgICBpbmZsYXRlR2V0RGljdGlvbmFyeTsKLSAgICBnenZwcmludGY7Ci19IFpMSUJfMS4yLjUuMjsKK1pMSUJfMS4yLjAgew0KKyAgZ2xvYmFsOg0KKyAgICBjb21wcmVzc0JvdW5kOw0KKyAgICBkZWZsYXRlQm91bmQ7DQorICAgIGluZmxhdGVCYWNrOw0KKyAgICBpbmZsYXRlQmFja0VuZDsNCisgICAgaW5mbGF0ZUJhY2tJbml0XzsNCisgICAgaW5mbGF0ZUNvcHk7DQorICBsb2NhbDoNCisgICAgZGVmbGF0ZV9jb3B5cmlnaHQ7DQorICAgIGluZmxhdGVfY29weXJpZ2h0Ow0KKyAgICBpbmZsYXRlX2Zhc3Q7DQorICAgIGluZmxhdGVfdGFibGU7DQorICAgIHpjYWxsb2M7DQorICAgIHpjZnJlZTsNCisgICAgel9lcnJtc2c7DQorICAgIGd6X2Vycm9yOw0KKyAgICBnel9pbnRtYXg7DQorICAgIF8qOw0KK307DQorDQorWkxJQl8xLjIuMC4yIHsNCisgICAgZ3pjbGVhcmVycjsNCisgICAgZ3p1bmdldGM7DQorICAgIHpsaWJDb21waWxlRmxhZ3M7DQorfSBaTElCXzEuMi4wOw0KKw0KK1pMSUJfMS4yLjAuOCB7DQorICAgIGRlZmxhdGVQcmltZTsNCit9IFpMSUJfMS4yLjAuMjsNCisNCitaTElCXzEuMi4yIHsNCisgICAgYWRsZXIzMl9jb21iaW5lOw0KKyAgICBjcmMzMl9jb21iaW5lOw0KKyAgICBkZWZsYXRlU2V0SGVhZGVyOw0KKyAgICBpbmZsYXRlR2V0SGVhZGVyOw0KK30gWkxJQl8xLjIuMC44Ow0KKw0KK1pMSUJfMS4yLjIuMyB7DQorICAgIGRlZmxhdGVUdW5lOw0KKyAgICBnemRpcmVjdDsNCit9IFpMSUJfMS4yLjI7DQorDQorWkxJQl8xLjIuMi40IHsNCisgICAgaW5mbGF0ZVByaW1lOw0KK30gWkxJQl8xLjIuMi4zOw0KKw0KK1pMSUJfMS4yLjMuMyB7DQorICAgIGFkbGVyMzJfY29tYmluZTY0Ow0KKyAgICBjcmMzMl9jb21iaW5lNjQ7DQorICAgIGd6b3BlbjY0Ow0KKyAgICBnenNlZWs2NDsNCisgICAgZ3p0ZWxsNjQ7DQorICAgIGluZmxhdGVVbmRlcm1pbmU7DQorfSBaTElCXzEuMi4yLjQ7DQorDQorWkxJQl8xLjIuMy40IHsNCisgICAgaW5mbGF0ZVJlc2V0MjsNCisgICAgaW5mbGF0ZU1hcms7DQorfSBaTElCXzEuMi4zLjM7DQorDQorWkxJQl8xLjIuMy41IHsNCisgICAgZ3pidWZmZXI7DQorICAgIGd6b2Zmc2V0Ow0KKyAgICBnem9mZnNldDY0Ow0KKyAgICBnemNsb3NlX3I7DQorICAgIGd6Y2xvc2VfdzsNCit9IFpMSUJfMS4yLjMuNDsNCisNCitaTElCXzEuMi41LjEgew0KKyAgICBkZWZsYXRlUGVuZGluZzsNCit9IFpMSUJfMS4yLjMuNTsNCisNCitaTElCXzEuMi41LjIgew0KKyAgICBkZWZsYXRlUmVzZXRLZWVwOw0KKyAgICBnemdldGNfOw0KKyAgICBpbmZsYXRlUmVzZXRLZWVwOw0KK30gWkxJQl8xLjIuNS4xOw0KKw0KK1pMSUJfMS4yLjcuMSB7DQorICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5Ow0KKyAgICBnenZwcmludGY7DQorfSBaTElCXzEuMi41LjI7DQorDQorWkxJQl8xLjIuOSB7DQorICAgIGluZmxhdGVDb2Rlc1VzZWQ7DQorICAgIGluZmxhdGVWYWxpZGF0ZTsNCisgICAgdW5jb21wcmVzczI7DQorICAgIGd6ZnJlYWQ7DQorICAgIGd6ZndyaXRlOw0KKyAgICBkZWZsYXRlR2V0RGljdGlvbmFyeTsNCisgICAgYWRsZXIzMl96Ow0KKyAgICBjcmMzMl96Ow0KK30gWkxJQl8xLjIuNy4xOw0KZGlmZiAtLWdpdCBhL3NyYy96bGliLnBjIGIvc3JjL3psaWIucGMKaW5kZXggNjk1NGZjZi4uODAwOWQ2NCAxMDA2NDQKLS0tIGEvc3JjL3psaWIucGMKKysrIGIvc3JjL3psaWIucGMKQEAgLTYsNyArNiw3IEBACiAKIE5hbWU6IHpsaWIKIERlc2NyaXB0aW9uOiB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLVZlcnNpb246IDEuMi44CitWZXJzaW9uOiAxLjIuMTEKIAogUmVxdWlyZXM6CiBMaWJzOiAtTCR7bGliZGlyfSAtTCR7c2hhcmVkbGliZGlyfSAtbHoKZGlmZiAtLWdpdCBhL3NyYy96dXRpbC5jIGIvc3JjL3p1dGlsLmMKaW5kZXggMjNkMmViZS4uYTc2YzZiMCAxMDA2NDQKLS0tIGEvc3JjL3p1dGlsLmMKKysrIGIvc3JjL3p1dGlsLmMKQEAgLTEsNSArMSw1IEBACiAvKiB6dXRpbC5jIC0tIHRhcmdldCBkZXBlbmRlbnQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEwLDIxICsxMCwxOCBAQAogIyAgaW5jbHVkZSAiZ3pndXRzLmgiCiAjZW5kaWYKIAotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgICAgICB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCiB6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF0gPSB7Ci0ibmVlZCBkaWN0aW9uYXJ5IiwgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovCi0ic3RyZWFtIGVuZCIsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCi0iIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCi0iZmlsZSBlcnJvciIsICAgICAgICAgIC8qIFpfRVJSTk8gICAgICAgICAoLTEpICovCi0ic3RyZWFtIGVycm9yIiwgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCi0iZGF0YSBlcnJvciIsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCi0iaW5zdWZmaWNpZW50IG1lbW9yeSIsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCi0iYnVmZmVyIGVycm9yIiwgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovCi0iaW5jb21wYXRpYmxlIHZlcnNpb24iLC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovCi0iIn07CisgICAgKHpfY29uc3QgY2hhciAqKSJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KKyAgICAoel9jb25zdCBjaGFyICopInN0cmVhbSBlbmQiLCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqLworICAgICh6X2NvbnN0IGNoYXIgKikiIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCisgICAgKHpfY29uc3QgY2hhciAqKSJmaWxlIGVycm9yIiwgICAgICAgICAgLyogWl9FUlJOTyAgICAgICAgICgtMSkgKi8KKyAgICAoel9jb25zdCBjaGFyICopInN0cmVhbSBlcnJvciIsICAgICAgICAvKiBaX1NUUkVBTV9FUlJPUiAgKC0yKSAqLworICAgICh6X2NvbnN0IGNoYXIgKikiZGF0YSBlcnJvciIsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCisgICAgKHpfY29uc3QgY2hhciAqKSJpbnN1ZmZpY2llbnQgbWVtb3J5IiwgLyogWl9NRU1fRVJST1IgICAgICgtNCkgKi8KKyAgICAoel9jb25zdCBjaGFyICopImJ1ZmZlciBlcnJvciIsICAgICAgICAvKiBaX0JVRl9FUlJPUiAgICAgKC01KSAqLworICAgICh6X2NvbnN0IGNoYXIgKikiaW5jb21wYXRpYmxlIHZlcnNpb24iLC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovCisgICAgKHpfY29uc3QgY2hhciAqKSIiCit9OwogCiAKIGNvbnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uKCkKQEAgLTYxLDcgKzU4LDcgQEAKICAgICBjYXNlIDg6ICAgICBmbGFncyArPSAyIDw8IDY7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDY7CiAgICAgfQotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgIGZsYWdzICs9IDEgPDwgODsKICNlbmRpZgogI2lmIGRlZmluZWQoQVNNVikgfHwgZGVmaW5lZChBU01JTkYpCkBAIC0xMTUsOCArMTEyLDggQEAKICAgICByZXR1cm4gZmxhZ3M7CiB9CiAKLSNpZmRlZiBERUJVRwotCisjaWZkZWYgWkxJQl9ERUJVRworI2luY2x1ZGUgPHN0ZGxpYi5oPgogIyAgaWZuZGVmIHZlcmJvc2UKICMgICAgZGVmaW5lIHZlcmJvc2UgMAogIyAgZW5kaWYKQEAgLTIxOSw5ICsyMTYsMTEgQEAKIAogdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCiB7Ci0gICAgdm9pZHBmIGJ1ZiA9IG9wYXF1ZTsgLyoganVzdCB0byBtYWtlIHNvbWUgY29tcGlsZXJzIGhhcHB5ICovCisgICAgdm9pZHBmIGJ1ZjsKICAgICB1bGcgYnNpemUgPSAodWxnKWl0ZW1zKnNpemU7CiAKKyAgICAodm9pZClvcGFxdWU7CisKICAgICAvKiBJZiB3ZSBhbGxvY2F0ZSBsZXNzIHRoYW4gNjU1MjAgYnl0ZXMsIHdlIGFzc3VtZSB0aGF0IGZhcm1hbGxvYwogICAgICAqIHdpbGwgcmV0dXJuIGEgdXNhYmxlIHBvaW50ZXIgd2hpY2ggZG9lc24ndCBoYXZlIHRvIGJlIG5vcm1hbGl6ZWQuCiAgICAgICovCkBAIC0yNDQsNiArMjQzLDkgQEAKIHZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCiB7CiAgICAgaW50IG47CisKKyAgICAodm9pZClvcGFxdWU7CisKICAgICBpZiAoKih1c2gqKSZwdHIgIT0gMCkgeyAvKiBvYmplY3QgPCA2NEsgKi8KICAgICAgICAgZmFyZnJlZShwdHIpOwogICAgICAgICByZXR1cm47CkBAIC0yNTksNyArMjYxLDYgQEAKICAgICAgICAgbmV4dF9wdHItLTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwdHIgPSBvcGFxdWU7IC8qIGp1c3QgdG8gbWFrZSBzb21lIGNvbXBpbGVycyBoYXBweSAqLwogICAgIEFzc2VydCgwLCAiemNmcmVlOiBwdHIgbm90IGZvdW5kIik7CiB9CiAKQEAgLTI3OCwxMyArMjc5LDEzIEBACiAKIHZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgKHZvaWRwZiBvcGFxdWUsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkKIHsKLSAgICBpZiAob3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgKHZvaWQpb3BhcXVlOwogICAgIHJldHVybiBfaGFsbG9jKChsb25nKWl0ZW1zLCBzaXplKTsKIH0KIAogdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKIHsKLSAgICBpZiAob3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgKHZvaWQpb3BhcXVlOwogICAgIF9oZnJlZShwdHIpOwogfQogCkBAIC0zMDYsNyArMzA3LDcgQEAKICAgICB1bnNpZ25lZCBpdGVtczsKICAgICB1bnNpZ25lZCBzaXplOwogewotICAgIGlmIChvcGFxdWUpIGl0ZW1zICs9IHNpemUgLSBzaXplOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgKHZvaWQpb3BhcXVlOwogICAgIHJldHVybiBzaXplb2YodUludCkgPiAyID8gKHZvaWRwZiltYWxsb2MoaXRlbXMgKiBzaXplKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZHBmKWNhbGxvYyhpdGVtcywgc2l6ZSk7CiB9CkBAIC0zMTUsOCArMzE2LDggQEAKICAgICB2b2lkcGYgb3BhcXVlOwogICAgIHZvaWRwZiBwdHI7CiB7CisgICAgKHZvaWQpb3BhcXVlOwogICAgIGZyZWUocHRyKTsKLSAgICBpZiAob3BhcXVlKSByZXR1cm47IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KIH0KIAogI2VuZGlmIC8qIE1ZX1pDQUxMT0MgKi8KZGlmZiAtLWdpdCBhL3NyYy96dXRpbC5oIGIvc3JjL3p1dGlsLmgKaW5kZXggMjRhYjA2Yi4uYjA3OWVhNiAxMDA2NDQKLS0tIGEvc3JjL3p1dGlsLmgKKysrIGIvc3JjL3p1dGlsLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFjZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0zNiw3ICszNiw5IEBACiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCiAjZW5kaWYKLS8qIGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scyAqLworLyogc2luY2UgInN0YXRpYyIgaXMgdXNlZCB0byBtZWFuIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCB0aGluZ3MgaW4gQywgd2UKKyAgIGRlZmluZSAibG9jYWwiIGZvciB0aGUgbm9uLXN0YXRpYyBtZWFuaW5nIG9mICJzdGF0aWMiLCBmb3IgcmVhZGFiaWxpdHkKKyAgIChjb21waWxlIHdpdGggLURsb2NhbCBpZiB5b3VyIGRlYnVnZ2VyIGNhbid0IGZpbmQgc3RhdGljIHN5bWJvbHMpICovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwogdHlwZWRlZiB1Y2ggRkFSIHVjaGY7CkBAIC05OCwyOCArMTAwLDM4IEBACiAjZW5kaWYKIAogI2lmZGVmIEFNSUdBCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwMQorIyAgZGVmaW5lIE9TX0NPREUgIDEKICNlbmRpZgogCiAjaWYgZGVmaW5lZChWQVhDKSB8fCBkZWZpbmVkKFZNUykKLSMgIGRlZmluZSBPU19DT0RFICAweDAyCisjICBkZWZpbmUgT1NfQ09ERSAgMgogIyAgZGVmaW5lIEZfT1BFTihuYW1lLCBtb2RlKSBcCiAgICAgIGZvcGVuKChuYW1lKSwgKG1vZGUpLCAibWJjPTYwIiwgImN0eD1zdG0iLCAicmZtPWZpeCIsICJtcnM9NTEyIikKICNlbmRpZgogCisjaWZkZWYgX18zNzBfXworIyAgaWYgX19UQVJHRVRfTElCX18gPCAweDIwMDAwMDAwCisjICAgIGRlZmluZSBPU19DT0RFIDQKKyMgIGVsaWYgX19UQVJHRVRfTElCX18gPCAweDQwMDAwMDAwCisjICAgIGRlZmluZSBPU19DT0RFIDExCisjICBlbHNlCisjICAgIGRlZmluZSBPU19DT0RFIDgKKyMgIGVuZGlmCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQVRBUkkpIHx8IGRlZmluZWQoYXRhcmlzdCkKLSMgIGRlZmluZSBPU19DT0RFICAweDA1CisjICBkZWZpbmUgT1NfQ09ERSAgNQogI2VuZGlmCiAKICNpZmRlZiBPUzIKLSMgIGRlZmluZSBPU19DT0RFICAweDA2CisjICBkZWZpbmUgT1NfQ09ERSAgNgogIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKLSMgIGRlZmluZSBPU19DT0RFICAweDA3CisjICBkZWZpbmUgT1NfQ09ERSAgNwogIyAgaWZuZGVmIFpfU09MTwogIyAgICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCiAjICAgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCkBAIC0xMzEsMTggKzE0MywyNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgVE9QUzIwCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwYQorI2lmZGVmIF9fYWNvcm4KKyMgIGRlZmluZSBPU19DT0RFIDEzCiAjZW5kaWYKIAotI2lmZGVmIFdJTjMyCi0jICBpZm5kZWYgX19DWUdXSU5fXyAgLyogQ3lnd2luIGlzIFVuaXgsIG5vdCBXaW4zMiAqLwotIyAgICBkZWZpbmUgT1NfQ09ERSAgMHgwYgotIyAgZW5kaWYKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgZGVmaW5lIE9TX0NPREUgIDEwCiAjZW5kaWYKIAotI2lmZGVmIF9fNTBTRVJJRVMgLyogUHJpbWUvUFJJTU9TICovCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwZgorI2lmZGVmIF9CRU9TXworIyAgZGVmaW5lIE9TX0NPREUgIDE2CisjZW5kaWYKKworI2lmZGVmIF9fVE9TX09TNDAwX18KKyMgIGRlZmluZSBPU19DT0RFIDE4CisjZW5kaWYKKworI2lmZGVmIF9fQVBQTEVfXworIyAgZGVmaW5lIE9TX0NPREUgMTkKICNlbmRpZgogCiAjaWYgZGVmaW5lZChfQkVPU18pIHx8IGRlZmluZWQoUklTQ09TKQpAQCAtMTc3LDcgKzE5NSw3IEBACiAgICAgICAgIC8qIGNvbW1vbiBkZWZhdWx0cyAqLwogCiAjaWZuZGVmIE9TX0NPREUKLSMgIGRlZmluZSBPU19DT0RFICAweDAzICAvKiBhc3N1bWUgVW5peCAqLworIyAgZGVmaW5lIE9TX0NPREUgIDMgICAgIC8qIGFzc3VtZSBVbml4ICovCiAjZW5kaWYKIAogI2lmbmRlZiBGX09QRU4KQEAgLTIxNiw3ICsyMzQsNyBAQAogI2VuZGlmCiAKIC8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAjICBpbmNsdWRlIDxzdGRpby5oPgogICAgZXh0ZXJuIGludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZTsKICAgIGV4dGVybiB2b2lkIFpMSUJfSU5URVJOQUwgel9lcnJvciBPRigoY2hhciAqbSkpOwo=