From kde-kimageshop Sun Jun 21 13:51:01 2015 From: Boudewijn Rempt Date: Sun, 21 Jun 2015 13:51:01 +0000 To: kde-kimageshop Subject: [calligra/calligra/2.9] /: Third time! The Selection modifiers patch!!! Message-Id: X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=143489886303904 R2l0IGNvbW1pdCBhN2Y1NTkyMzA4ZmE4ZTg0MWY0NDQxMDZhMTVmMzdmZmE2NmFlMDAxIGJ5IEJv dWRld2lqbiBSZW1wdC4KQ29tbWl0dGVkIG9uIDIxLzA2LzIwMTUgYXQgMTM6NTAuClB1c2hlZCBi eSByZW1wdCBpbnRvIGJyYW5jaCAnY2FsbGlncmEvMi45Jy4KClRoaXJkIHRpbWUhIFRoZSBTZWxl Y3Rpb24gbW9kaWZpZXJzIHBhdGNoISEhCgpUaGlzIHJlZmFjdG9ycyBwb2x5Z29uYWwsIGVsbGlw dGljYWwsIGFuZCByZWN0YW5ndWxhciBzZWxlY3Rpb24gdG9vbHMgdG8KdXNlIGEgYmFzaWMgc2Vs ZWN0aW9uIHRvb2wgdGVtcGxhdGUgd2hpY2ggdW5pZmllcyBwcmV2aW91c2x5IGR1cGxpY2F0ZWQK Y29kZS4gVGhlIHRlbXBsYXRlIG92ZXJyaWRlcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFsdGVy bmF0ZSBhY3Rpb25zLCBidXQKbm9uZSBvZiB0aG9zZSB0b29scyBzdXBwb3J0ZWQgYWx0ZXJuYXRl IGFjdGlvbnMgcHJldmlvdXNseSBhbmQgdGhlIGVsbGlwc2UKYW5kIHJlY3RhbmdsZSB3ZXJlIGFs cmVhZHkgb3ZlcnJpZGluZyB0aGUgbW9kaWZpZXIga2V5cyB0byBiZWdpbiB3aXRoLgoKU2hpZnQ6 IGFkZCB0byBzZWxlY3Rpb24KCkFsdDogc3VidHJhY3QgZnJvbSBzZWxlY3Rpb24KClNoaWZ0K0Fs dDogaW50ZXJzZWN0IGN1cnJlbnQgc2VsZWN0aW9uCgpDdHJsOiByZXBsYWNlIHNlbGVjdGlvbgoK Q2VydGFpbiBrZXkgY29tYmluYXRpb25zIGFsbG93IHVzZXJzIHRoZSBhYmlsaXR5IHRvIGV4cG9z ZSB0aGUgbW9kaWZpZXIKa2V5cyB0byB0aGUgYmFzZSB0b29sLCBpLmUuIHRvIG1ha2UgcHJvcG9y dGlvbmFsIC8gdHJhbnNsYXRlZCAvIHNjYWxlZAphbHRlcmF0aW9ucyB1c2luZyBjdHJsL2FsdC9z aGlmdC4KCjEpIElmIHRoZSB1c2VyIGNsaWNrcyBmaXJzdCBhbmQgdGhlbiBwcmVzc2VzIG1vZGlm aWVyIGtleXMsIHRob3NlIG1vZGlmaWVyCmtleXMgd2lsbCBvbmx5IGFsdGVyIHRoZSBzZWxlY3Rp b24gbWV0aG9kLgoKMikgSWYgdGhlIHVzZXIgcHJlc3NlcyBtb2RpZmllciBrZXlzIGZpcnN0IGFu ZCB0aGVuIGNsaWNrcywgdGhlIHNlbGVjdGlvbgptZXRob2QgaXMgbG9ja2VkIGluLCBhbmQgc3Vi c2VxdWVudCBtb2RpZmllciBrZXlzdHJva2VzIHdpbGwgY2hhbmdlIGhvdwp0aGUgc2VsZWN0aW9u IGlzIGRyYXduLgoKMykgSWYgdGhlIHVuZGVybHlpbmcgdG9vbCBuZXZlciB0YWtlcyBtb2RpZmll ciBrZXlzLCBtb2RpZmllciBrZXlzIHdpbGwKYWx3YXlzIGFsdGVyIHRoZSBzZWxlY3Rpb24gbWV0 aG9kLgoKTm90ZTogdGhlIGJlemllciBjdXJ2ZSBzZWxlY3Rpb24gdG9vbCBkb2Vzbid0IHN1cHBv cnQgdGhlIG1vZGlmaWVycyB5ZXQuCgpQYXRjaCBieSBNaWNoYWVsIEFicmFoYW1zLiBUaGFua3Mh CkNDTUFJTDogbWlhYnJhaGFAZ21haWwuY29tCkNDTUFJTDoga2ltYWdlc2hvcEBrZGUub3JnCkND TUFJTDogYW5pbXRpbUBnbWFpbC5jb20sIGluZm9AZGF2aWRyZXZveS5jb20KUkVWSUVXOiAxMjM4 MzMKQlVHOiAzMTUyNTUKQlVHOiAzNDgyMzQKCk5PVEU6IENoYW5naW5nIHRoZSBzZWNvbmRhcnkg aW52b2NhdGlvbiBhY3Rpb24gaXMgc3RpbGwgYnJva2VuLCBidXQgdGhhdCdzCm5vdCB0aGUgZmF1 bHQgb2YgdGhpcyBwYXRjaCwgdGhhdCdzIGFub3RoZXIgYnVnIQoKTSAgKzIgICAgLTEgICAga3Jp dGEvaW1hZ2Uva2lzX3NlbGVjdGlvbi5oCk0gICsxNCAgIC0wICAgIGtyaXRhL3BsdWdpbnMvdG9v bHMvZGVmYXVsdHRvb2xzL2tpc190b29sX3BhdGguY2MKTSAgKzQgICAgLTEgICAga3JpdGEvcGx1 Z2lucy90b29scy9kZWZhdWx0dG9vbHMva2lzX3Rvb2xfcGF0aC5oCk0gICsyNSAgIC0xMCAgIGty aXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X2NvbnRpZ3Vv dXMuY2MKTSAgKzkgICAgLTQgICAga3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9r aXNfdG9vbF9zZWxlY3RfY29udGlndW91cy5oCk0gICszMCAgIC0yMiAgIGtyaXRhL3BsdWdpbnMv dG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X2VsbGlwdGljYWwuY2MKTSAgKzI5 ICAgLTEzICAga3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxl Y3RfZWxsaXB0aWNhbC5oCk0gICszMiAgIC00ICAgIGtyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0 aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X291dGxpbmUuY2MKTSAgKzEwICAgLTUgICAga3JpdGEv cGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3Rfb3V0bGluZS5oCk0g ICszMCAgIC00ICAgIGtyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xf c2VsZWN0X3BhdGguY2MKTSAgKzE4ICAgLTEyICAga3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rp b250b29scy9raXNfdG9vbF9zZWxlY3RfcGF0aC5oCk0gICszMCAgIC00MSAgIGtyaXRhL3BsdWdp bnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X3BvbHlnb25hbC5jYwpNICAr MjEgICAtMTYgICBrcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3Nl bGVjdF9wb2x5Z29uYWwuaApNICArMjkgICAtNDQgICBrcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVj dGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9yZWN0YW5ndWxhci5jYwpNICArMjAgICAtMTYgICBr cml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9yZWN0YW5n dWxhci5oCk0gICsyMyAgIC04ICAgIGtyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMv a2lzX3Rvb2xfc2VsZWN0X3NpbWlsYXIuY2MKTSAgKzE4ICAgLTEwICAga3JpdGEvcGx1Z2lucy90 b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3Rfc2ltaWxhci5oCk0gICswICAgIC0x ICAgIGtyaXRhL3VpL0NNYWtlTGlzdHMudHh0Ck0gICs4ICAgIC0zICAgIGtyaXRhL3VpL2NhbnZh cy9raXNfdG9vbF9wcm94eS5oCk0gICsxICAgIC0wICAgIGtyaXRhL3VpL2lucHV0L2tpc19hbHRl cm5hdGVfaW52b2NhdGlvbl9hY3Rpb24uY3BwCk0gICswICAgIC0xICAgIGtyaXRhL3VpL2lucHV0 L2tpc19pbnB1dF9tYW5hZ2VyLmNwcApNICArMSAgICAtMSAgICBrcml0YS91aS90b29sL2tpc19k ZWxlZ2F0ZWRfdG9vbC5oCk0gICs4ICAgIC0wICAgIGtyaXRhL3VpL3Rvb2wva2lzX3Rvb2wuY2MK TSAgKzExICAgLTEgICAga3JpdGEvdWkvdG9vbC9raXNfdG9vbC5oCk0gICs0ICAgIC00ICAgIGty aXRhL3VpL3Rvb2wva2lzX3Rvb2xfcGFpbnQuaApNICArMTIgICAtMCAgICBrcml0YS91aS90b29s L2tpc190b29sX3BvbHlsaW5lX2Jhc2UuY3BwCk0gICszICAgIC0wICAgIGtyaXRhL3VpL3Rvb2wv a2lzX3Rvb2xfcG9seWxpbmVfYmFzZS5oCk0gICszNCAgIC0yNCAgIGtyaXRhL3VpL3Rvb2wva2lz X3Rvb2xfcmVjdGFuZ2xlX2Jhc2UuY3BwCk0gICs4ICAgIC01ICAgIGtyaXRhL3VpL3Rvb2wva2lz X3Rvb2xfcmVjdGFuZ2xlX2Jhc2UuaApEICArMCAgICAtNzkgICBrcml0YS91aS90b29sL2tpc190 b29sX3NlbGVjdF9iYXNlLmNwcApNICArMTg1ICAtMTggICBrcml0YS91aS90b29sL2tpc190b29s X3NlbGVjdF9iYXNlLmgKTSAgKzE5ICAgLTcgICAgbGlicy9iYXNpY2ZsYWtlcy90b29scy9Lb0Ny ZWF0ZVBhdGhUb29sLmNwcApNICArOSAgICAtMiAgICBsaWJzL2Jhc2ljZmxha2VzL3Rvb2xzL0tv Q3JlYXRlUGF0aFRvb2wuaApNICArNyAgICAtNSAgICBsaWJzL2Jhc2ljZmxha2VzL3Rvb2xzL0tv Q3JlYXRlUGF0aFRvb2xfcC5oCgpodHRwOi8vY29tbWl0cy5rZGUub3JnL2NhbGxpZ3JhL2E3ZjU1 OTIzMDhmYThlODQxZjQ0NDEwNmExNWYzN2ZmYTY2YWUwMDEKCmRpZmYgLS1naXQgYS9rcml0YS9p bWFnZS9raXNfc2VsZWN0aW9uLmggYi9rcml0YS9pbWFnZS9raXNfc2VsZWN0aW9uLmgKaW5kZXgg NjM3NmY4NzQuLmIyNjc5ZDggMTAwNjQ0Ci0tLSBhL2tyaXRhL2ltYWdlL2tpc19zZWxlY3Rpb24u aAorKysgYi9rcml0YS9pbWFnZS9raXNfc2VsZWN0aW9uLmgKQEAgLTMzLDcgKzMzLDggQEAgZW51 bSBTZWxlY3Rpb25BY3Rpb24gewogICAgIFNFTEVDVElPTl9SRVBMQUNFLAogICAgIFNFTEVDVElP Tl9BREQsCiAgICAgU0VMRUNUSU9OX1NVQlRSQUNULAotICAgIFNFTEVDVElPTl9JTlRFUlNFQ1QK KyAgICBTRUxFQ1RJT05fSU5URVJTRUNULAorICAgIFNFTEVDVElPTl9ERUZBVUxUCiB9OwogCiAj aW5jbHVkZSAia2lzX3BpeGVsX3NlbGVjdGlvbi5oIgpkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lu cy90b29scy9kZWZhdWx0dG9vbHMva2lzX3Rvb2xfcGF0aC5jYyBiL2tyaXRhL3BsdWdpbnMvdG9v bHMvZGVmYXVsdHRvb2xzL2tpc190b29sX3BhdGguY2MKaW5kZXggZjA1YjRlYi4uMzFkYWRjMSAx MDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9kZWZhdWx0dG9vbHMva2lzX3Rvb2xfcGF0 aC5jYworKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL2RlZmF1bHR0b29scy9raXNfdG9vbF9wYXRo LmNjCkBAIC01MCw2ICs1MCwyMCBAQCB2b2lkIEtpc1Rvb2xQYXRoOjptb3VzZVByZXNzRXZlbnQo S29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAgIERlbGVnYXRlZFBhdGhUb29sOjptb3VzZVByZXNz RXZlbnQoZXZlbnQpOwogfQogCit2b2lkIEtpc1Rvb2xQYXRoOjpiZWdpbkFsdGVybmF0ZUFjdGlv bihLb1BvaW50ZXJFdmVudCAqZXZlbnQsIEFsdGVybmF0ZUFjdGlvbiBhY3Rpb24pIHsKKyBRX1VO VVNFRChhY3Rpb24pCisgbW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKK30KK3ZvaWQgS2lzVG9vbFBh dGg6OmNvbnRpbnVlQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVudCwgQWx0ZXJu YXRlQWN0aW9uIGFjdGlvbil7CisgUV9VTlVTRUQoYWN0aW9uKQorIG1vdXNlTW92ZUV2ZW50KGV2 ZW50KTsKK30KKwordm9pZCBLaXNUb29sUGF0aDo6ZW5kQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRl ckV2ZW50ICpldmVudCwgQWx0ZXJuYXRlQWN0aW9uIGFjdGlvbikgeworIFFfVU5VU0VEKGFjdGlv bikKKyBtb3VzZVJlbGVhc2VFdmVudChldmVudCk7Cit9CisKIFFMaXN0PFFQb2ludGVyPFFXaWRn ZXQ+ID4gS2lzVG9vbFBhdGg6OmNyZWF0ZU9wdGlvbldpZGdldHMoKQogewogICAgIFFMaXN0PFFQ b2ludGVyPFFXaWRnZXQ+ID4gd2lkZ2V0cyA9IERlbGVnYXRlZFBhdGhUb29sOjpjcmVhdGVPcHRp b25XaWRnZXRzKCk7CmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL2RlZmF1bHR0b29s cy9raXNfdG9vbF9wYXRoLmggYi9rcml0YS9wbHVnaW5zL3Rvb2xzL2RlZmF1bHR0b29scy9raXNf dG9vbF9wYXRoLmgKaW5kZXggNDY4YWNhMy4uOWU1M2E0ZSAxMDA2NDQKLS0tIGEva3JpdGEvcGx1 Z2lucy90b29scy9kZWZhdWx0dG9vbHMva2lzX3Rvb2xfcGF0aC5oCisrKyBiL2tyaXRhL3BsdWdp bnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tpc190b29sX3BhdGguaApAQCAtNjEsNiArNjEsMTAgQEAg cHVibGljOgogCiAgICAgdmlydHVhbCBRTGlzdDwgUVBvaW50ZXI8UVdpZGdldD4gPiBjcmVhdGVP cHRpb25XaWRnZXRzKCk7CiAKKyAgICB2b2lkIGJlZ2luQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRl ckV2ZW50ICpldmVudCwgQWx0ZXJuYXRlQWN0aW9uIGFjdGlvbik7CisgICAgdm9pZCBjb250aW51 ZUFsdGVybmF0ZUFjdGlvbihLb1BvaW50ZXJFdmVudCAqZXZlbnQsIEFsdGVybmF0ZUFjdGlvbiBh Y3Rpb24pOworICAgIHZvaWQgZW5kQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVu dCwgQWx0ZXJuYXRlQWN0aW9uIGFjdGlvbik7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHJlcXVl c3RTdHJva2VDYW5jZWxsYXRpb24oKTsKICAgICB2b2lkIHJlcXVlc3RTdHJva2VFbmQoKTsKQEAg LTk1LDQgKzk5LDMgQEAgcHVibGljOgogCiAKICNlbmRpZiAvLyBLSVNfVE9PTF9QQVRIX0hfCi0K ZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xf c2VsZWN0X2NvbnRpZ3VvdXMuY2MgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xz L2tpc190b29sX3NlbGVjdF9jb250aWd1b3VzLmNjCmluZGV4IDViZDRkMmYuLmRmZGVlYWIgMTAw NjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2Vs ZWN0X2NvbnRpZ3VvdXMuY2MKKysrIGIva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29s cy9raXNfdG9vbF9zZWxlY3RfY29udGlndW91cy5jYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5 cmlnaHQgKGMpIDIwMDIgUGF0cmljayBKdWxpZW4gPGZyZWFrQGNvZGVwaW1wcy5vcmc+CiAgKiAg Q29weXJpZ2h0IChjKSAyMDA0IEJvdWRld2lqbiBSZW1wdCA8Ym91ZEB2YWxkeWFzLm9yZz4KICAq ICBDb3B5cmlnaHQgKGMpIDIwMTIgSm9zw6kgTHVpcyBWZXJnYXJhIDxwZW50YWxpc0BnbWFpbC5j b20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1pYWJyYWhhQGdt YWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTEsMTMg KzUyLDE0IEBACiBLaXNUb29sU2VsZWN0Q29udGlndW91czo6S2lzVG9vbFNlbGVjdENvbnRpZ3Vv dXMoS29DYW52YXNCYXNlICpjYW52YXMpCiAgICAgICAgIDogS2lzVG9vbFNlbGVjdEJhc2UoY2Fu dmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtpc0N1cnNvcjo6bG9hZCgidG9vbF9j b250aWd1b3VzX3NlbGVjdGlvbl9jdXJzb3IucG5nIiwgNiwgNiksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaTE4bigiQ29udGlndW91cyBBcmVhIFNlbGVjdGlvbiIpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGkxOG4oIkNvbnRpZ3VvdXMgQXJlYSBTZWxlY3Rpb24iKSksCisg ICAgICAgICAgbV9mdXp6aW5lc3MoMjApLAorICAgICAgICAgIG1fc2l6ZW1vZCgwKSwKKyAgICAg ICAgICBtX2ZlYXRoZXIoMCksCisgICAgICAgICAgbV9saW1pdFRvQ3VycmVudExheWVyKGZhbHNl KQogewotICAgIHNldE9iamVjdE5hbWUoInRvb2xfc2VsZWN0X2NvbnRpZ3VvdXMiKTsKLSAgICBt X2Z1enppbmVzcyA9IDIwOwotICAgIG1fc2l6ZW1vZCA9IDA7Ci0gICAgbV9mZWF0aGVyID0gMDsK LSAgICBtX2xpbWl0VG9DdXJyZW50TGF5ZXIgPSBmYWxzZTsKKyAgICBzZXRPYmplY3ROYW1lKCJ0 b29sX3NlbGVjdF9jb250aWd1b3VzIik7ICAgIAorICAgIGNvbm5lY3QoJm1fd2lkZ2V0SGVscGVy LCBTSUdOQUwoc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChzZXRTZWxl Y3Rpb25BY3Rpb24oaW50KSkpOwogfQogCiBLaXNUb29sU2VsZWN0Q29udGlndW91czo6fktpc1Rv b2xTZWxlY3RDb250aWd1b3VzKCkKQEAgLTcyLDEzICs3NCwxNCBAQCB2b2lkIEtpc1Rvb2xTZWxl Y3RDb250aWd1b3VzOjphY3RpdmF0ZShUb29sQWN0aXZhdGlvbiB0b29sQWN0aXZhdGlvbiwgY29u c3QgUVNldAogCiB2b2lkIEtpc1Rvb2xTZWxlY3RDb250aWd1b3VzOjpiZWdpblByaW1hcnlBY3Rp b24oS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogeworCisgICAgS2lzVG9vbFNlbGVjdEJhc2U6OmJl Z2luUHJpbWFyeUFjdGlvbihldmVudCk7CiAgICAgS2lzUGFpbnREZXZpY2VTUCBkZXY7CiAKICAg ICBpZiAoIWN1cnJlbnROb2RlKCkgfHwKICAgICAgICAgIShkZXYgPSBjdXJyZW50Tm9kZSgpLT5w cm9qZWN0aW9uKCkpIHx8CiAgICAgICAgICFjdXJyZW50Tm9kZSgpLT52aXNpYmxlKCkgfHwKICAg ICAgICAgIXNlbGVjdGlvbkVkaXRhYmxlKCkpIHsKLQogICAgICAgICBldmVudC0+aWdub3JlKCk7 CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTAsNyArMTEzLDYgQEAgdm9pZCBLaXNUb29s U2VsZWN0Q29udGlndW91czo6YmVnaW5QcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVu dCkKICAgICBzZWxlY3Rpb24tPnBpeGVsU2VsZWN0aW9uKCktPmludmFsaWRhdGVPdXRsaW5lQ2Fj aGUoKTsKICAgICBLaXNTZWxlY3Rpb25Ub29sSGVscGVyIGhlbHBlcihraXNDYW52YXMsIGt1bmRv Ml9pMThuKCJTZWxlY3QgQ29udGlndW91cyBBcmVhIikpOwogICAgIGhlbHBlci5zZWxlY3RQaXhl bFNlbGVjdGlvbihzZWxlY3Rpb24tPnBpeGVsU2VsZWN0aW9uKCksIHNlbGVjdGlvbkFjdGlvbigp KTsKLQogICAgIFFBcHBsaWNhdGlvbjo6cmVzdG9yZU92ZXJyaWRlQ3Vyc29yKCk7CiB9CiAKQEAg LTIwNSw4ICsyMDcsNiBAQCBRV2lkZ2V0KiBLaXNUb29sU2VsZWN0Q29udGlndW91czo6Y3JlYXRl T3B0aW9uV2lkZ2V0KCkKICAgICAgICAgc2l6ZW1vZC0+c2V0VmFsdWUoIG1fY29uZmlnR3JvdXAu cmVhZEVudHJ5KCJzaXplbW9kIiwgMCkpOyAvL2dyb3cvc2hyaW5rCiAgICAgICAgIGZlYXRoZXIt PnNldFZhbHVlKG1fY29uZmlnR3JvdXAucmVhZEVudHJ5KCJmZWF0aGVyIiwgMCkpOwogICAgICAg ICBsaW1pdFRvQ3VycmVudExheWVyLT5zZXRDaGVja2VkKG1fY29uZmlnR3JvdXAucmVhZEVudHJ5 KCJsaW1pdFRvQ3VycmVudExheWVyIiwgZmFsc2UpKTsKLQotCiAgICAgfQogICAgIHJldHVybiBz ZWxlY3Rpb25XaWRnZXQ7CiB9CkBAIC0yMTksNCArMjE5LDE5IEBAIHZvaWQgS2lzVG9vbFNlbGVj dENvbnRpZ3VvdXM6OnNsb3RMaW1pdFRvQ3VycmVudExheWVyKGludCBzdGF0ZSkKICAgICBtX2Nv bmZpZ0dyb3VwLndyaXRlRW50cnkoImxpbWl0VG9DdXJyZW50TGF5ZXIiLCBzdGF0ZSk7CiB9CiAK K3ZvaWQgS2lzVG9vbFNlbGVjdENvbnRpZ3VvdXM6OnNldFNlbGVjdGlvbkFjdGlvbihpbnQgbmV3 U2VsZWN0aW9uQWN0aW9uKQoreworICAgIGlmKG5ld1NlbGVjdGlvbkFjdGlvbiA+PSBTRUxFQ1RJ T05fUkVQTEFDRSAmJiBuZXdTZWxlY3Rpb25BY3Rpb24gPD0gU0VMRUNUSU9OX0lOVEVSU0VDVCAm JiBtX3NlbGVjdGlvbkFjdGlvbiAhPSBuZXdTZWxlY3Rpb25BY3Rpb24pCisgICAgeworICAgICAg ICBpZihtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKSkKKyAgICAgICAgeworICAgICAgICAg ICAgbV93aWRnZXRIZWxwZXIuc2xvdFNldEFjdGlvbihuZXdTZWxlY3Rpb25BY3Rpb24pOworICAg ICAgICB9CisgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uID0gKFNlbGVjdGlvbkFjdGlvbiluZXdT ZWxlY3Rpb25BY3Rpb247CisgICAgICAgIGVtaXQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOwor ICAgIH0KK30KKworCisKICNpbmNsdWRlICJraXNfdG9vbF9zZWxlY3RfY29udGlndW91cy5tb2Mi CmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29s X3NlbGVjdF9jb250aWd1b3VzLmggYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xz L2tpc190b29sX3NlbGVjdF9jb250aWd1b3VzLmgKaW5kZXggYTQ3MGQ4Mi4uMDQ4YTE2ZSAxMDA2 NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxl Y3RfY29udGlndW91cy5oCisrKyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMv a2lzX3Rvb2xfc2VsZWN0X2NvbnRpZ3VvdXMuaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiAgQ29w eXJpZ2h0IChjKSAxOTk5IE1pY2hhZWwgS29jaCA8a29jaEBrZGUub3JnPgogICogIENvcHlyaWdo dCAoYykgMjAwMiBQYXRyaWNrIEp1bGllbiA8ZnJlYWtAY29kZXBpbXBzLm9yZz4KKyAqICBDb3B5 cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBBYnJhaGFtcyA8bWlhYnJhaGFAZ21haWwuY29tPgogICoK ICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMyw3ICsyNCw3IEBACiAjZGVm aW5lIF9fS0lTX1RPT0xfU0VMRUNUX0NPTlRJR1VPVVNfSF9fCiAKICNpbmNsdWRlICJLb1Rvb2xG YWN0b3J5QmFzZS5oIgotI2luY2x1ZGUgImtyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfc2VsZWN0X2Jh c2UuaCIKKyNpbmNsdWRlICJraXNfdG9vbF9zZWxlY3RfYmFzZS5oIgogI2luY2x1ZGUgPEtvSWNv bi5oPgogI2luY2x1ZGUgPGtjb25maWcuaD4KICNpbmNsdWRlIDxrY29uZmlnZ3JvdXAuaD4KQEAg LTM3LDYgKzM4LDggQEAgY2xhc3MgS2lzVG9vbFNlbGVjdENvbnRpZ3VvdXMgOiBwdWJsaWMgS2lz VG9vbFNlbGVjdEJhc2UKIHsKIAogICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShpbnQgc2Vs ZWN0aW9uQWN0aW9uIFJFQUQgc2VsZWN0aW9uQWN0aW9uIFdSSVRFIHNldFNlbGVjdGlvbkFjdGlv biBOT1RJRlkgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCkKKyAgICBRX1NJR05BTFM6IHZvaWQgc2Vs ZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOwogCiBwdWJsaWM6CiAgICAgS2lzVG9vbFNlbGVjdENvbnRp Z3VvdXMoS29DYW52YXNCYXNlICpjYW52YXMpOwpAQCAtNTcsNiArNjAsMTEgQEAgcHVibGljIFFf U0xPVFM6CiAgICAgdmlydHVhbCB2b2lkIHNsb3RTZXRTaXplbW9kKGludCk7CiAgICAgdmlydHVh bCB2b2lkIHNsb3RTZXRGZWF0aGVyKGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNsb3RMaW1pdFRv Q3VycmVudExheWVyKGludCk7CisgICAgLy92aXJ0dWFsIGJvb2wgYW50aUFsaWFzU2VsZWN0aW9u KCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25BY3Rpb24oaW50IG5ld1NlbGVjdGlvbkFjdGlvbik7 CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBLaXNUb29sU2VsZWN0QmFzZTo6bV93aWRnZXRIZWxw ZXI7CiAKIHByaXZhdGU6CiAgICAgaW50ICBtX2Z1enppbmVzczsKQEAgLTY4LDcgKzc2LDYgQEAg cHJpdmF0ZToKIAogY2xhc3MgS2lzVG9vbFNlbGVjdENvbnRpZ3VvdXNGYWN0b3J5IDogcHVibGlj IEtvVG9vbEZhY3RvcnlCYXNlCiB7Ci0KIHB1YmxpYzoKICAgICBLaXNUb29sU2VsZWN0Q29udGln dW91c0ZhY3RvcnkoY29uc3QgUVN0cmluZ0xpc3QmKQogICAgICAgICAgICAgOiBLb1Rvb2xGYWN0 b3J5QmFzZSgiS2lzVG9vbFNlbGVjdENvbnRpZ3VvdXMiKSB7CkBAIC04NCw4ICs5MSw2IEBAIHB1 YmxpYzoKICAgICB2aXJ0dWFsIEtvVG9vbEJhc2UgKiBjcmVhdGVUb29sKEtvQ2FudmFzQmFzZSAq Y2FudmFzKSB7CiAgICAgICAgIHJldHVybiBuZXcgS2lzVG9vbFNlbGVjdENvbnRpZ3VvdXMoY2Fu dmFzKTsKICAgICB9Ci0KIH07CiAKICNlbmRpZiAvL19fS0lTX1RPT0xfU0VMRUNUX0NPTlRJR1VP VVNfSF9fCi0KZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMv a2lzX3Rvb2xfc2VsZWN0X2VsbGlwdGljYWwuY2MgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVj dGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9lbGxpcHRpY2FsLmNjCmluZGV4IDk5OWYxYTAuLmU0 NGVjNDMgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lz X3Rvb2xfc2VsZWN0X2VsbGlwdGljYWwuY2MKKysrIGIva3JpdGEvcGx1Z2lucy90b29scy9zZWxl Y3Rpb250b29scy9raXNfdG9vbF9zZWxlY3RfZWxsaXB0aWNhbC5jYwpAQCAtMyw2ICszLDcgQEAK ICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA0IEJvdWRld2lqbiBSZW1wdCAoYm91ZEB2YWxkeWFz Lm9yZykKICAqICBDb3B5cmlnaHQgKGMpIDIwMDcgU3ZlbiBMYW5na2FtcCA8c3Zlbi5sYW5na2Ft cEBnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1p YWJyYWhhQGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpA QCAtMzQsMjkgKzM1LDE1IEBACiAjaW5jbHVkZSAia2lzX3NlbGVjdGlvbl9tYW5hZ2VyLmgiCiAj aW5jbHVkZSAia2lzX3N5c3RlbV9sb2NrZXIuaCIKIAotS2lzVG9vbFNlbGVjdEVsbGlwdGljYWw6 Oktpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsKEtvQ2FudmFzQmFzZSAqY2FudmFzKQotICAgIDogS2lz VG9vbEVsbGlwc2VCYXNlKGNhbnZhcywgS2lzVG9vbEVsbGlwc2VCYXNlOjpTRUxFQ1QsIEtpc0N1 cnNvcjo6bG9hZCgidG9vbF9lbGxpcHRpY2FsX3NlbGVjdGlvbl9jdXJzb3IucG5nIiwgNiwgNikp LAotICAgICAgbV93aWRnZXRIZWxwZXIoaTE4bigiRWxsaXB0aWNhbCBTZWxlY3Rpb24iKSkKLXsK LX0KLQotUVdpZGdldCogS2lzVG9vbFNlbGVjdEVsbGlwdGljYWw6OmNyZWF0ZU9wdGlvbldpZGdl dCgpCi17Ci0gICAgS2lzQ2FudmFzMiogY2FudmFzID0gZHluYW1pY19jYXN0PEtpc0NhbnZhczIq Pih0aGlzLT5jYW52YXMoKSk7Ci0gICAgUV9BU1NFUlQoY2FudmFzKTsKIAotICAgIG1fd2lkZ2V0 SGVscGVyLmNyZWF0ZU9wdGlvbldpZGdldChjYW52YXMsIHRoaXMtPnRvb2xJZCgpKTsKLSAgICBy ZXR1cm4gbV93aWRnZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgS2lzVG9vbFNl bGVjdEVsbGlwdGljYWw6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50ICpldmVudCkKK19fS2lzVG9v bFNlbGVjdEVsbGlwdGljYWxMb2NhbDo6X19LaXNUb29sU2VsZWN0RWxsaXB0aWNhbExvY2FsKEtv Q2FudmFzQmFzZSAqY2FudmFzKQorICAgIDogS2lzVG9vbEVsbGlwc2VCYXNlKGNhbnZhcywgS2lz VG9vbEVsbGlwc2VCYXNlOjpTRUxFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgS2lzQ3Vy c29yOjpsb2FkKCJ0b29sX2VsbGlwdGljYWxfc2VsZWN0aW9uX2N1cnNvci5wbmciLCA2LCA2KSkK IHsKLSAgICBpZiAoIW1fd2lkZ2V0SGVscGVyLnByb2Nlc3NLZXlQcmVzc0V2ZW50KGV2ZW50KSkg ewotICAgICAgICBLaXNUb29sOjprZXlQcmVzc0V2ZW50KGV2ZW50KTsKLSAgICB9CisgICAgc2V0 T2JqZWN0TmFtZSgidG9vbF9zZWxlY3RfZWxsaXB0aWNhbCIpOwogfQogCi12b2lkIEtpc1Rvb2xT ZWxlY3RFbGxpcHRpY2FsOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0RiAmcmVjdCkKK3ZvaWQgX19L aXNUb29sU2VsZWN0RWxsaXB0aWNhbExvY2FsOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0RiAmcmVj dCkKIHsKICAgICBLaXNDYW52YXMyICoga2lzQ2FudmFzID0gZHluYW1pY19jYXN0PEtpc0NhbnZh czIqPihjYW52YXMoKSk7CiAgICAgUV9BU1NFUlQoa2lzQ2FudmFzKTsKQEAgLTcwLDEzICs1Nywx MyBAQCB2b2lkIEtpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0 RiAmcmVjdCkKIAogICAgIEtpc1NlbGVjdGlvblRvb2xIZWxwZXIgaGVscGVyKGtpc0NhbnZhcywg a3VuZG8yX2kxOG4oIlNlbGVjdCBFbGxpcHNlIikpOwogCi0gICAgaWYgKG1fd2lkZ2V0SGVscGVy LnNlbGVjdGlvbk1vZGUoKSA9PSBQSVhFTF9TRUxFQ1RJT04pIHsKKyAgICBpZiAoc2VsZWN0aW9u TW9kZSgpID09IFBJWEVMX1NFTEVDVElPTikgewogICAgICAgICBLaXNQaXhlbFNlbGVjdGlvblNQ IHRtcFNlbCA9IG5ldyBLaXNQaXhlbFNlbGVjdGlvbigpOwogCiAgICAgICAgIEtpc1BhaW50ZXIg cGFpbnRlcih0bXBTZWwpOwogICAgICAgICBwYWludGVyLnNldFBhaW50Q29sb3IoS29Db2xvcihR dDo6YmxhY2ssIHRtcFNlbC0+Y29sb3JTcGFjZSgpKSk7CiAgICAgICAgIHBhaW50ZXIuc2V0UGFp bnRPcFByZXNldChjdXJyZW50UGFpbnRPcFByZXNldCgpLCBjdXJyZW50Tm9kZSgpLCBjdXJyZW50 SW1hZ2UoKSk7Ci0gICAgICAgIHBhaW50ZXIuc2V0QW50aUFsaWFzUG9seWdvbkZpbGwobV93aWRn ZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCktPmFudGlBbGlhc1NlbGVjdGlvbigpKTsKKyAgICAgICAg cGFpbnRlci5zZXRBbnRpQWxpYXNQb2x5Z29uRmlsbChhbnRpQWxpYXNTZWxlY3Rpb24oKSk7CiAg ICAgICAgIHBhaW50ZXIuc2V0RmlsbFN0eWxlKEtpc1BhaW50ZXI6OkZpbGxTdHlsZUZvcmVncm91 bmRDb2xvcik7CiAgICAgICAgIHBhaW50ZXIuc2V0U3Ryb2tlU3R5bGUoS2lzUGFpbnRlcjo6U3Ry b2tlU3R5bGVOb25lKTsKIApAQCAtODYsNyArNzMsNyBAQCB2b2lkIEtpc1Rvb2xTZWxlY3RFbGxp cHRpY2FsOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0RiAmcmVjdCkKICAgICAgICAgY2FjaGUuYWRk RWxsaXBzZShyZWN0KTsKICAgICAgICAgdG1wU2VsLT5zZXRPdXRsaW5lQ2FjaGUoY2FjaGUpOwog Ci0gICAgICAgIGhlbHBlci5zZWxlY3RQaXhlbFNlbGVjdGlvbih0bXBTZWwsIG1fd2lkZ2V0SGVs cGVyLnNlbGVjdGlvbkFjdGlvbigpKTsKKyAgICAgICAgaGVscGVyLnNlbGVjdFBpeGVsU2VsZWN0 aW9uKHRtcFNlbCwgc2VsZWN0aW9uQWN0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFFS ZWN0RiBwdFJlY3QgPSBjb252ZXJ0VG9QdChyZWN0KTsKICAgICAgICAgS29TaGFwZSogc2hhcGUg PSBLaXNTaGFwZVRvb2xIZWxwZXI6OmNyZWF0ZUVsbGlwc2VTaGFwZShwdFJlY3QpOwpAQCAtOTQs MyArODEsMjQgQEAgdm9pZCBLaXNUb29sU2VsZWN0RWxsaXB0aWNhbDo6ZmluaXNoUmVjdChjb25z dCBRUmVjdEYgJnJlY3QpCiAgICAgICAgIGhlbHBlci5hZGRTZWxlY3Rpb25TaGFwZShzaGFwZSk7 CiAgICAgfQogfQorCisKK0tpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsOjpLaXNUb29sU2VsZWN0RWxs aXB0aWNhbChLb0NhbnZhc0Jhc2UgKmNhbnZhcyk6CisgICAgS2lzVG9vbFNlbGVjdEVsbGlwdGlj YWxUZW1wbGF0ZShjYW52YXMsIGkxOG4oIkVsbGlwdGljYWwgU2VsZWN0aW9uIikpCit7CisgICAg Y29ubmVjdCgmbV93aWRnZXRIZWxwZXIsIFNJR05BTChzZWxlY3Rpb25BY3Rpb25DaGFuZ2VkKGlu dCkpLCB0aGlzLCBTTE9UKHNldFNlbGVjdGlvbkFjdGlvbihpbnQpKSk7Cit9CisKK3ZvaWQgS2lz VG9vbFNlbGVjdEVsbGlwdGljYWw6OnNldFNlbGVjdGlvbkFjdGlvbihpbnQgbmV3U2VsZWN0aW9u QWN0aW9uKQoreworICAgIGlmKG5ld1NlbGVjdGlvbkFjdGlvbiA+PSBTRUxFQ1RJT05fUkVQTEFD RSAmJiBuZXdTZWxlY3Rpb25BY3Rpb24gPD0gU0VMRUNUSU9OX0lOVEVSU0VDVCAmJiBtX3NlbGVj dGlvbkFjdGlvbiAhPSBuZXdTZWxlY3Rpb25BY3Rpb24pCisgICAgeworICAgICAgICBpZihtX3dp ZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbV93aWRn ZXRIZWxwZXIuc2xvdFNldEFjdGlvbihuZXdTZWxlY3Rpb25BY3Rpb24pOworICAgICAgICB9Cisg ICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uID0gKFNlbGVjdGlvbkFjdGlvbiluZXdTZWxlY3Rpb25B Y3Rpb247CisgICAgICAgIGVtaXQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOworICAgIH0KK30K KwpkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9v bF9zZWxlY3RfZWxsaXB0aWNhbC5oIGIva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29s cy9raXNfdG9vbF9zZWxlY3RfZWxsaXB0aWNhbC5oCmluZGV4IDdiMmNkMmYuLjg2YmJmOWMgMTAw NjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2Vs ZWN0X2VsbGlwdGljYWwuaAorKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xz L2tpc190b29sX3NlbGVjdF9lbGxpcHRpY2FsLmgKQEAgLTMsNyArMyw4IEBACiAgKgogICogIENv cHlyaWdodCAoYykgMjAwMCBKb2huIENhbGlmZiA8amNhbGlmZkBjb21wdXpvbmUubmV0PgogICog IENvcHlyaWdodCAoYykgMjAwMiBQYXRyaWNrIEp1bGllbiA8ZnJlYWtAY29kZXBpbXBzLm9yZz4K LSAqICBDb3B5cmlnaHQgKGMpIDIwMDQgQm91ZGV3aWpuIFJlbXB0IDxib3VkQHZhbGR5YXMub3Jn PgorICogIENvcHlyaWdodCAoYykgMjAwNCBCb3VkZXdpam4gUmVtcHQgPGJvdWRAdmFsZHlhcy5v cmc+ICogCisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1pYWJyYWhh QGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjUs MjkgKzI2LDQ4IEBACiAKICNpbmNsdWRlICJLb1Rvb2xGYWN0b3J5QmFzZS5oIgogI2luY2x1ZGUg Imtpc190b29sX2VsbGlwc2VfYmFzZS5oIgorI2luY2x1ZGUgPGtpc190b29sX3NlbGVjdF9iYXNl Lmg+CiAjaW5jbHVkZSAia2lzX3NlbGVjdGlvbl90b29sX2NvbmZpZ193aWRnZXRfaGVscGVyLmgi CiAjaW5jbHVkZSA8S29JY29uLmg+CiAjaW5jbHVkZSA8a3Nob3J0Y3V0Lmg+CiAKLWNsYXNzIEtp c1Rvb2xTZWxlY3RFbGxpcHRpY2FsIDogcHVibGljIEtpc1Rvb2xFbGxpcHNlQmFzZQorCisKK2Ns YXNzIF9fS2lzVG9vbFNlbGVjdEVsbGlwdGljYWxMb2NhbCA6IHB1YmxpYyBLaXNUb29sRWxsaXBz ZUJhc2UKIHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6Ci0gICAgS2lzVG9vbFNlbGVjdEVsbGlw dGljYWwoS29DYW52YXNCYXNlICpjYW52YXMpOwotICAgIFFXaWRnZXQqIGNyZWF0ZU9wdGlvbldp ZGdldCgpOworICAgIF9fS2lzVG9vbFNlbGVjdEVsbGlwdGljYWxMb2NhbChLb0NhbnZhc0Jhc2Ug KmNhbnZhcyk7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFNlbGVjdGlvbk1vZGUgc2VsZWN0 aW9uTW9kZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFNlbGVjdGlvbkFjdGlvbiBzZWxlY3Rp b25BY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGFudGlBbGlhc1NlbGVjdGlv bigpIGNvbnN0ID0gMDsKIHByaXZhdGU6Ci0gICAgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVu dCAqZXZlbnQpOwogICAgIHZvaWQgZmluaXNoUmVjdChjb25zdCBRUmVjdEYgJnJlY3QpOworfTsK KworCisKK3R5cGVkZWYgU2VsZWN0aW9uQWN0aW9uSGFuZGxlcjxfX0tpc1Rvb2xTZWxlY3RFbGxp cHRpY2FsTG9jYWw+IEtpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsVGVtcGxhdGU7CisKK2NsYXNzIEtp c1Rvb2xTZWxlY3RFbGxpcHRpY2FsIDogcHVibGljIEtpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsVGVt cGxhdGUKK3sKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoaW50IHNlbGVjdGlvbkFjdGlv biBSRUFEIHNlbGVjdGlvbkFjdGlvbiBXUklURSBzZXRTZWxlY3Rpb25BY3Rpb24gTk9USUZZIHNl bGVjdGlvbkFjdGlvbkNoYW5nZWQpCitwdWJsaWM6CisgICAgS2lzVG9vbFNlbGVjdEVsbGlwdGlj YWwoS29DYW52YXNCYXNlKiBjYW52YXMpOworCisgICAgUV9TSUdOQUxTOiB2b2lkIHNlbGVjdGlv bkFjdGlvbkNoYW5nZWQoKTsKKyAgICBwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHNldFNlbGVj dGlvbkFjdGlvbihpbnQgbmV3U2VsZWN0aW9uQWN0aW9uKTsKKwogCi1wcml2YXRlOgotICAgIEtp c1NlbGVjdGlvblRvb2xDb25maWdXaWRnZXRIZWxwZXIgbV93aWRnZXRIZWxwZXI7CiB9OwogCiBj bGFzcyBLaXNUb29sU2VsZWN0RWxsaXB0aWNhbEZhY3RvcnkgOiBwdWJsaWMgS29Ub29sRmFjdG9y eUJhc2UKIHsKLQogcHVibGljOgogICAgIEtpc1Rvb2xTZWxlY3RFbGxpcHRpY2FsRmFjdG9yeShj b25zdCBRU3RyaW5nTGlzdCYpCiAgICAgICAgICAgICA6IEtvVG9vbEZhY3RvcnlCYXNlKCJLaXNU b29sU2VsZWN0RWxsaXB0aWNhbCIpIHsKQEAgLTYyLDE0ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAg dmlydHVhbCB+S2lzVG9vbFNlbGVjdEVsbGlwdGljYWxGYWN0b3J5KCkge30KIAogICAgIHZpcnR1 YWwgS29Ub29sQmFzZSAqIGNyZWF0ZVRvb2woS29DYW52YXNCYXNlICpjYW52YXMpIHsKLSAgICAg ICAgcmV0dXJuICBuZXcgS2lzVG9vbFNlbGVjdEVsbGlwdGljYWwoY2FudmFzKTsKKyAgICAgICAg cmV0dXJuIG5ldyBLaXNUb29sU2VsZWN0RWxsaXB0aWNhbChjYW52YXMpOwogICAgIH0KIAogfTsK IAotCi0KLQotCiAjZW5kaWYgLy9fX0tJU19UT09MX1NFTEVDVF9FTExJUFRJQ0FMX0hfXwogCmRp ZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3Nl bGVjdF9vdXRsaW5lLmNjIGIva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNf dG9vbF9zZWxlY3Rfb3V0bGluZS5jYwppbmRleCA0NmNjYTQ3Li5hN2FhZDFiIDEwMDY0NAotLS0g YS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9vdXRs aW5lLmNjCisrKyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xf c2VsZWN0X291dGxpbmUuY2MKQEAgLTUsNiArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAy IFBhdHJpY2sgSnVsaWVuIDxmcmVha0Bjb2RlcGltcHMub3JnPgogICogIENvcHlyaWdodCAoYykg MjAwNCBCb3VkZXdpam4gUmVtcHQgPGJvdWRAdmFsZHlhcy5vcmc+CiAgKiAgQ29weXJpZ2h0IChj KSAyMDA3IFN2ZW4gTGFuZ2thbXAgPHN2ZW4ubGFuZ2thbXBAZ21haWwuY29tPgorICogIENvcHly aWdodCAoYykgMjAxNSBNaWNoYWVsIEFicmFoYW1zIDxtaWFicmFoYUBnbWFpbC5jb20+CiAgKgog ICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUxLDEzICs1MiwxNiBAQAogI2lu Y2x1ZGUgImtpc19waXhlbF9zZWxlY3Rpb24uaCIKICNpbmNsdWRlICJraXNfc2VsZWN0aW9uX3Rv b2xfaGVscGVyLmgiCiAKKyNkZWZpbmUgRkVFREJBQ0tfTElORV9XSURUSCAyCisKIAogS2lzVG9v bFNlbGVjdE91dGxpbmU6Oktpc1Rvb2xTZWxlY3RPdXRsaW5lKEtvQ2FudmFzQmFzZSAqIGNhbnZh cykKICAgICAgICAgOiBLaXNUb29sU2VsZWN0QmFzZShjYW52YXMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgS2lzQ3Vyc29yOjpsb2FkKCJ0b29sX291dGxpbmVfc2VsZWN0aW9uX2N1cnNv ci5wbmciLCA1LCA1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuKCJPdXRsaW5l IFNlbGVjdGlvbiIpKSwKKyAgICAgICAgICAgICAgICAgIEtpc0N1cnNvcjo6bG9hZCgidG9vbF9v dXRsaW5lX3NlbGVjdGlvbl9jdXJzb3IucG5nIiwgNSwgNSksCisgICAgICAgICAgICAgICAgICBp MThuKCJPdXRsaW5lIFNlbGVjdGlvbiIpKSwKICAgICAgICAgICBtX3BhaW50UGF0aChuZXcgUVBh aW50ZXJQYXRoKCkpCiB7CisgICAgY29ubmVjdCgmbV93aWRnZXRIZWxwZXIsIFNJR05BTChzZWxl Y3Rpb25BY3Rpb25DaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKHNldFNlbGVjdGlvbkFjdGlvbihp bnQpKSk7CiB9CiAKIEtpc1Rvb2xTZWxlY3RPdXRsaW5lOjp+S2lzVG9vbFNlbGVjdE91dGxpbmUo KQpAQCAtNjcsNiArNzEsOCBAQCBLaXNUb29sU2VsZWN0T3V0bGluZTo6fktpc1Rvb2xTZWxlY3RP dXRsaW5lKCkKIAogdm9pZCBLaXNUb29sU2VsZWN0T3V0bGluZTo6YmVnaW5QcmltYXJ5QWN0aW9u KEtvUG9pbnRlckV2ZW50ICpldmVudCkKIHsKKworICAgIEtpc1Rvb2xTZWxlY3RCYXNlOjpiZWdp blByaW1hcnlBY3Rpb24oZXZlbnQpOwogICAgIGlmICghc2VsZWN0aW9uRWRpdGFibGUoKSkgewog ICAgICAgICBldmVudC0+aWdub3JlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc3LDIyICs4Mywy NyBAQCB2b2lkIEtpc1Rvb2xTZWxlY3RPdXRsaW5lOjpiZWdpblByaW1hcnlBY3Rpb24oS29Qb2lu dGVyRXZlbnQgKmV2ZW50KQogICAgIG1fcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9wb2ludHMuYXBw ZW5kKGNvbnZlcnRUb1BpeGVsQ29vcmQoZXZlbnQpKTsKICAgICBtX3BhaW50UGF0aC0+bW92ZVRv KHBpeGVsVG9WaWV3KGNvbnZlcnRUb1BpeGVsQ29vcmQoZXZlbnQpKSk7CisKIH0KIAogdm9pZCBL aXNUb29sU2VsZWN0T3V0bGluZTo6Y29udGludWVQcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50 ICpldmVudCkKIHsKICAgICBDSEVDS19NT0RFX1NBTklUWV9PUl9SRVRVUk4oS2lzVG9vbDo6UEFJ TlRfTU9ERSk7CisgICAgS2lzVG9vbFNlbGVjdEJhc2U6OmNvbnRpbnVlUHJpbWFyeUFjdGlvbihl dmVudCk7CiAKICAgICBRUG9pbnRGIHBvaW50ID0gY29udmVydFRvUGl4ZWxDb29yZChldmVudCk7 CiAgICAgbV9wYWludFBhdGgtPmxpbmVUbyhwaXhlbFRvVmlldyhwb2ludCkpOwogICAgIG1fcG9p bnRzLmFwcGVuZChwb2ludCk7CiAgICAgdXBkYXRlRmVlZGJhY2soKTsKKworCiB9CiAKIHZvaWQg S2lzVG9vbFNlbGVjdE91dGxpbmU6OmVuZFByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2 ZW50KQogewogICAgIFFfVU5VU0VEKGV2ZW50KTsKICAgICBDSEVDS19NT0RFX1NBTklUWV9PUl9S RVRVUk4oS2lzVG9vbDo6UEFJTlRfTU9ERSk7CisgICAgS2lzVG9vbFNlbGVjdEJhc2U6OmVuZFBy aW1hcnlBY3Rpb24oZXZlbnQpOwogICAgIHNldE1vZGUoS2lzVG9vbDo6SE9WRVJfTU9ERSk7CiAK ICAgICBLaXNDYW52YXMyICoga2lzQ2FudmFzID0gZHluYW1pY19jYXN0PEtpc0NhbnZhczIqPihj YW52YXMoKSk7CkBAIC0xNTUsNyArMTY2LDcgQEAgdm9pZCBLaXNUb29sU2VsZWN0T3V0bGluZTo6 cGFpbnQoUVBhaW50ZXImIGdjLCBjb25zdCBLb1ZpZXdDb252ZXJ0ZXIgJmNvbnZlcnRlcikKICAg ICB9CiB9CiAKLSNkZWZpbmUgRkVFREJBQ0tfTElORV9XSURUSCAyCisKIAogdm9pZCBLaXNUb29s U2VsZWN0T3V0bGluZTo6dXBkYXRlRmVlZGJhY2soKQogewpAQCAtMTc1LDggKzE4NiwyNSBAQCB2 b2lkIEtpc1Rvb2xTZWxlY3RPdXRsaW5lOjpkZWFjdGl2YXRlKCkKICAgICBLSVNfQVNTRVJUX1JF Q09WRVJfUkVUVVJOKGtpc0NhbnZhcyk7CiAgICAga2lzQ2FudmFzLT51cGRhdGVDYW52YXMoKTsK IAotICAgIEtpc1Rvb2xTZWxlY3RCYXNlOjpkZWFjdGl2YXRlKCk7CisgICAgS2lzVG9vbDo6ZGVh Y3RpdmF0ZSgpOwogfQogCisKK3ZvaWQgS2lzVG9vbFNlbGVjdE91dGxpbmU6OnNldFNlbGVjdGlv bkFjdGlvbihpbnQgbmV3U2VsZWN0aW9uQWN0aW9uKQoreworICAgIGlmKG5ld1NlbGVjdGlvbkFj dGlvbiA+PSBTRUxFQ1RJT05fUkVQTEFDRSAmJiBuZXdTZWxlY3Rpb25BY3Rpb24gPD0gU0VMRUNU SU9OX0lOVEVSU0VDVCAmJiBtX3NlbGVjdGlvbkFjdGlvbiAhPSBuZXdTZWxlY3Rpb25BY3Rpb24p CisgICAgeworICAgICAgICBpZihtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKSkKKyAgICAg ICAgeworICAgICAgICAgICAgbV93aWRnZXRIZWxwZXIuc2xvdFNldEFjdGlvbihuZXdTZWxlY3Rp b25BY3Rpb24pOworICAgICAgICB9CisgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uID0gKFNlbGVj dGlvbkFjdGlvbiluZXdTZWxlY3Rpb25BY3Rpb247CisgICAgICAgIGVtaXQgc2VsZWN0aW9uQWN0 aW9uQ2hhbmdlZCgpOworICAgIH0KK30KKworCisKKwogI2luY2x1ZGUgImtpc190b29sX3NlbGVj dF9vdXRsaW5lLm1vYyIKIApkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rp b250b29scy9raXNfdG9vbF9zZWxlY3Rfb3V0bGluZS5oIGIva3JpdGEvcGx1Z2lucy90b29scy9z ZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3Rfb3V0bGluZS5oCmluZGV4IDQ3NTY4NzAuLmQ3 Njg4ZGUgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lz X3Rvb2xfc2VsZWN0X291dGxpbmUuaAorKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlv bnRvb2xzL2tpc190b29sX3NlbGVjdF9vdXRsaW5lLmgKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29w eXJpZ2h0IChjKSAyMDAwIEpvaG4gQ2FsaWZmIDxqY2FsaWZmQGNvbXB1em9uZS5uZXQ+CiAgKiAg Q29weXJpZ2h0IChjKSAyMDAyIFBhdHJpY2sgSnVsaWVuIDxmcmVha0Bjb2RlcGltcHMub3JnPgog ICogIENvcHlyaWdodCAoYykgMjAwNCBCb3VkZXdpam4gUmVtcHQgPGJvdWRAdmFsZHlhcy5vcmc+ CisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1pYWJyYWhhQGdtYWls LmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsMTkgKzM0 LDI2IEBAIGNsYXNzIFFQYWludGVyUGF0aDsKIGNsYXNzIEtpc1Rvb2xTZWxlY3RPdXRsaW5lIDog cHVibGljIEtpc1Rvb2xTZWxlY3RCYXNlCiB7CiAKKwogICAgIFFfT0JKRUNUCisgICAgUV9QUk9Q RVJUWShpbnQgc2VsZWN0aW9uQWN0aW9uIFJFQUQgc2VsZWN0aW9uQWN0aW9uIFdSSVRFIHNldFNl bGVjdGlvbkFjdGlvbiBOT1RJRlkgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCkKKyAgICBRX1NJR05B TFM6IHZvaWQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOworCiBwdWJsaWM6CiAgICAgS2lzVG9v bFNlbGVjdE91dGxpbmUoS29DYW52YXNCYXNlICpjYW52YXMpOwogICAgIHZpcnR1YWwgfktpc1Rv b2xTZWxlY3RPdXRsaW5lKCk7Ci0KICAgICB2b2lkIGJlZ2luUHJpbWFyeUFjdGlvbihLb1BvaW50 ZXJFdmVudCAqZXZlbnQpOwogICAgIHZvaWQgY29udGludWVQcmltYXJ5QWN0aW9uKEtvUG9pbnRl ckV2ZW50ICpldmVudCk7CiAgICAgdm9pZCBlbmRQcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50 ICpldmVudCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUVBhaW50ZXImIGdjLCBjb25zdCBL b1ZpZXdDb252ZXJ0ZXIgJmNvbnZlcnRlcik7CiAKKwogcHVibGljIFFfU0xPVFM6CiAgICAgdmly dHVhbCB2b2lkIGRlYWN0aXZhdGUoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkFjdGlvbihpbnQg bmV3U2VsZWN0aW9uQWN0aW9uKTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEtpc1Rvb2xTZWxl Y3RCYXNlOjptX3dpZGdldEhlbHBlcjsKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUZlZWRi YWNrKCk7CkBAIC01MywxMyArNjEsMTAgQEAgcHJpdmF0ZToKIAogICAgIFFQYWludGVyUGF0aCAq IG1fcGFpbnRQYXRoOwogICAgIHZRUG9pbnRGIG1fcG9pbnRzOwotCiB9OwogCi0KIGNsYXNzIEtp c1Rvb2xTZWxlY3RPdXRsaW5lRmFjdG9yeSA6IHB1YmxpYyBLb1Rvb2xGYWN0b3J5QmFzZQogewot CiBwdWJsaWM6CiAgICAgS2lzVG9vbFNlbGVjdE91dGxpbmVGYWN0b3J5KGNvbnN0IFFTdHJpbmdM aXN0JikKICAgICAgICAgICAgIDogS29Ub29sRmFjdG9yeUJhc2UoIktpc1Rvb2xTZWxlY3RPdXRs aW5lIikgewpkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9r aXNfdG9vbF9zZWxlY3RfcGF0aC5jYyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9v bHMva2lzX3Rvb2xfc2VsZWN0X3BhdGguY2MKaW5kZXggOWYxYTY1Yy4uYjc2OTdlYyAxMDA2NDQK LS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3Rf cGF0aC5jYworKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29s X3NlbGVjdF9wYXRoLmNjCkBAIC0zMiwyMCArMzIsMjEgQEAKIAogCiBLaXNUb29sU2VsZWN0UGF0 aDo6S2lzVG9vbFNlbGVjdFBhdGgoS29DYW52YXNCYXNlICogY2FudmFzKQotICAgIDogRGVsZWdh dGVkU2VsZWN0UGF0aFRvb2woY2FudmFzLAorICAgIDogU2VsZWN0aW9uQWN0aW9uSGFuZGxlcjxL aXNEZWxlZ2F0ZWRTZWxlY3RQYXRoV3JhcHBlcj4oY2FudmFzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgS2lzQ3Vyc29yOjpsb2FkKCJ0b29sX3BvbHlnb25hbF9zZWxlY3Rpb25fY3Vy c29yLnBuZyIsIDYsIDYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IF9fS2lz VG9vbFNlbGVjdFBhdGhMb2NhbFRvb2woY2FudmFzLCB0aGlzKSkKKwkJCSAgICAgIGkxOG4oIlNl bGVjdCBwYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoS2lzVG9vbCopIChu ZXcgX19LaXNUb29sU2VsZWN0UGF0aExvY2FsVG9vbChjYW52YXMsIHRoaXMpKSkKIHsKIH0KIAog dm9pZCBLaXNUb29sU2VsZWN0UGF0aDo6cmVxdWVzdFN0cm9rZUVuZCgpCiB7Ci0gICAgbG9jYWxU b29sKCktPmVuZFBhdGhXaXRob3V0TGFzdFBvaW50KCk7CisgICAgIGxvY2FsVG9vbCgpLT5lbmRQ YXRoV2l0aG91dExhc3RQb2ludCgpOwogfQogCiB2b2lkIEtpc1Rvb2xTZWxlY3RQYXRoOjpyZXF1 ZXN0U3Ryb2tlQ2FuY2VsbGF0aW9uKCkKIHsKLSAgICBsb2NhbFRvb2woKS0+Y2FuY2VsUGF0aCgp OworIGxvY2FsVG9vbCgpLT5jYW5jZWxQYXRoKCk7CiB9CiAKIHZvaWQgS2lzVG9vbFNlbGVjdFBh dGg6Om1vdXNlUHJlc3NFdmVudChLb1BvaW50ZXJFdmVudCogZXZlbnQpCkBAIC02Miw2ICs2Mywz MCBAQCBRTGlzdDxRUG9pbnRlcjxRV2lkZ2V0PiA+IEtpc1Rvb2xTZWxlY3RQYXRoOjpjcmVhdGVP cHRpb25XaWRnZXRzKCkKICAgICByZXR1cm4gd2lkZ2V0c0xpc3Q7CiB9CiAKK3ZvaWQgS2lzVG9v bFNlbGVjdFBhdGg6OnNldEFsdGVybmF0ZVNlbGVjdGlvbkFjdGlvbihTZWxlY3Rpb25BY3Rpb24g YWN0aW9uKQoreworICAgIC8vIFdlIHdpbGwgdHVybiBvZmYgdGhlIGFiaWxpdHkgdG8gY2hhbmdl IHRoZSBzZWxlY3Rpb24gaW4gdGhlIG1pZGRsZSBvZiBkcmF3aW5nIGEgcGF0aC4KKyAgICBpZiAo IW1fbG9jYWxUb29sLT5saXN0ZW5pbmdUb01vZGlmaWVycygpKSB7CisgICAgICBTZWxlY3Rpb25B Y3Rpb25IYW5kbGVyPEtpc0RlbGVnYXRlZFNlbGVjdFBhdGhXcmFwcGVyPjo6c2V0QWx0ZXJuYXRl U2VsZWN0aW9uQWN0aW9uKGFjdGlvbik7CisgICAgfQorfQorCisKK2Jvb2wgS2lzRGVsZWdhdGVk U2VsZWN0UGF0aFdyYXBwZXI6Omxpc3RlbmluZ1RvTW9kaWZpZXJzKCkgeworICByZXR1cm4gbV9s b2NhbFRvb2wtPmxpc3RlbmluZ1RvTW9kaWZpZXJzKCk7Cit9CisKK3ZvaWQgS2lzRGVsZWdhdGVk U2VsZWN0UGF0aFdyYXBwZXI6OmJlZ2luUHJpbWFyeUFjdGlvbihLb1BvaW50ZXJFdmVudCAqZXZl bnQpIHsKKyBtb3VzZVByZXNzRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEtpc0RlbGVnYXRlZFNl bGVjdFBhdGhXcmFwcGVyOjpjb250aW51ZVByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2 ZW50KXsKKyBtb3VzZU1vdmVFdmVudChldmVudCk7Cit9CisKK3ZvaWQgS2lzRGVsZWdhdGVkU2Vs ZWN0UGF0aFdyYXBwZXI6OmVuZFByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50KSB7 CisgbW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworfQogCiAgX19LaXNUb29sU2VsZWN0UGF0aExv Y2FsVG9vbDo6X19LaXNUb29sU2VsZWN0UGF0aExvY2FsVG9vbChLb0NhbnZhc0Jhc2UgKiBjYW52 YXMsIEtpc1Rvb2xTZWxlY3RQYXRoKiBwYXJlbnRUb29sKQogICAgICA6IEtvQ3JlYXRlUGF0aFRv b2woY2FudmFzKSwgbV9zZWxlY3Rpb25Ub29sKHBhcmVudFRvb2wpCkBAIC0xMTksNCArMTQ0LDUg QEAgdm9pZCBfX0tpc1Rvb2xTZWxlY3RQYXRoTG9jYWxUb29sOjphZGRQYXRoU2hhcGUoS29QYXRo U2hhcGUqIHBhdGhTaGFwZSkKICAgICB9CiB9CiAKKwogI2luY2x1ZGUgImtpc190b29sX3NlbGVj dF9wYXRoLm1vYyIKZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9v bHMva2lzX3Rvb2xfc2VsZWN0X3BhdGguaCBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9u dG9vbHMva2lzX3Rvb2xfc2VsZWN0X3BhdGguaAppbmRleCBhNjdiNTg0Li5mMTQwZGUxIDEwMDY0 NAotLS0gYS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVj dF9wYXRoLmgKKysrIGIva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9v bF9zZWxlY3RfcGF0aC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKGMpIDIw MDcgU3ZlbiBMYW5na2FtcCA8c3Zlbi5sYW5na2FtcEBnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0 IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1pYWJyYWhhQGdtYWlsLmNvbT4KICAqCiAgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsMjIgKzQ2LDI5IEBAIHByaXZhdGU6 CiAgICAgS2lzVG9vbFNlbGVjdFBhdGgqIGNvbnN0IG1fc2VsZWN0aW9uVG9vbDsKIH07CiAKLXN0 cnVjdCBfX0tpc1Rvb2xTZWxlY3RCYXNlV3JhcHBlciA6IHB1YmxpYyBLaXNUb29sU2VsZWN0QmFz ZSB7Ci0gICAgX19LaXNUb29sU2VsZWN0QmFzZVdyYXBwZXIoS29DYW52YXNCYXNlICpjYW52YXMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUN1cnNvciAmY3Vyc29yKQot ICAgICAgICA6IEtpc1Rvb2xTZWxlY3RCYXNlKGNhbnZhcywgY3Vyc29yLCBpMThuKCJQYXRoIFNl bGVjdGlvbiIpKQordHlwZWRlZiBLaXNEZWxlZ2F0ZWRUb29sPEtpc1Rvb2wsIF9fS2lzVG9vbFNl bGVjdFBhdGhMb2NhbFRvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVzZWxlY3RTaGFw ZXNBY3RpdmF0aW9uUG9saWN5PiBEZWxlZ2F0ZWRTZWxlY3RQYXRoVG9vbDsKKworc3RydWN0IEtp c0RlbGVnYXRlZFNlbGVjdFBhdGhXcmFwcGVyIDogcHVibGljIERlbGVnYXRlZFNlbGVjdFBhdGhU b29sIHsKKyAgICAgICAgS2lzRGVsZWdhdGVkU2VsZWN0UGF0aFdyYXBwZXIoS29DYW52YXNCYXNl ICpjYW52YXMsCisgICAgICAgICAgICAgIGNvbnN0IFFDdXJzb3IgJmN1cnNvciwKKyAgICAgICAg ICAgICAgS2lzVG9vbCogZGVsZWdhdGVUb29sKQorICAgICAgICA6IERlbGVnYXRlZFNlbGVjdFBh dGhUb29sKGNhbnZhcywgY3Vyc29yLCAoX19LaXNUb29sU2VsZWN0UGF0aExvY2FsVG9vbCopIGRl bGVnYXRlVG9vbCkKICAgICB7CiAgICAgfQorICAgICAgICAgIGJvb2wgbGlzdGVuaW5nVG9Nb2Rp ZmllcnMoKTsKKworICAgICAgICAgIC8vIElmIGFuIGV2ZW50IGlzIGV4cGxpY2l0bHkgZm9yd2Fy ZGVkIG9ubHkgYXMgYW4gYWN0aW9uIChlLmcuIHNoaWZ0LWNsaWNrIGlzIGNhcHR1cmVkIGJ5ICJj aGFuZ2Ugc2l6ZSIpCisgICAgICAgICAgLy8gd2Ugd2lsbCByZWNlaXZlIGEgcHJpbWFyeSBhY3Rp b24gYnV0IG5vIG1vdXNlUHJlc3NFdmVudC4gIFRodXMgdGhlc2UgZXZlbnRzIG11c3QgYmUgZXhw bGljaXRseSBmb3J3YXJkZWQuCisgICAgICAgICAgdm9pZCBiZWdpblByaW1hcnlBY3Rpb24oS29Q b2ludGVyRXZlbnQgKmV2ZW50KTsKKyAgICAgICAgICB2b2lkIGNvbnRpbnVlUHJpbWFyeUFjdGlv bihLb1BvaW50ZXJFdmVudCAqZXZlbnQpOworICAgICAgICAgIHZvaWQgZW5kUHJpbWFyeUFjdGlv bihLb1BvaW50ZXJFdmVudCAqZXZlbnQpOwogfTsKIAotdHlwZWRlZiBLaXNEZWxlZ2F0ZWRUb29s PF9fS2lzVG9vbFNlbGVjdEJhc2VXcmFwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIF9f S2lzVG9vbFNlbGVjdFBhdGhMb2NhbFRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGVz ZWxlY3RTaGFwZXNBY3RpdmF0aW9uUG9saWN5PiBEZWxlZ2F0ZWRTZWxlY3RQYXRoVG9vbDsKIAot Y2xhc3MgS2lzVG9vbFNlbGVjdFBhdGggOiBwdWJsaWMgRGVsZWdhdGVkU2VsZWN0UGF0aFRvb2wK K2NsYXNzIEtpc1Rvb2xTZWxlY3RQYXRoIDogcHVibGljIFNlbGVjdGlvbkFjdGlvbkhhbmRsZXI8 S2lzRGVsZWdhdGVkU2VsZWN0UGF0aFdyYXBwZXI+CiB7CiAgICAgUV9PQkpFQ1QKLQogcHVibGlj OgogICAgIEtpc1Rvb2xTZWxlY3RQYXRoKEtvQ2FudmFzQmFzZSAqIGNhbnZhcyk7CiAgICAgdm9p ZCBtb3VzZVByZXNzRXZlbnQoS29Qb2ludGVyRXZlbnQqIGV2ZW50KTsKQEAgLTY4LDE0ICs3Niwx MyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZXF1ZXN0U3Ryb2tlQ2FuY2VsbGF0 aW9uKCk7CiAgICAgdm9pZCByZXF1ZXN0U3Ryb2tlRW5kKCk7Ci0KKyAgICB2b2lkIHNldEFsdGVy bmF0ZVNlbGVjdGlvbkFjdGlvbihTZWxlY3Rpb25BY3Rpb24gYWN0aW9uKTsKICAgICBmcmllbmQg Y2xhc3MgX19LaXNUb29sU2VsZWN0UGF0aExvY2FsVG9vbDsKICAgICBRTGlzdDxRUG9pbnRlcjxR V2lkZ2V0PiA+IGNyZWF0ZU9wdGlvbldpZGdldHMoKTsKIH07CiAKIGNsYXNzIEtpc1Rvb2xTZWxl Y3RQYXRoRmFjdG9yeSA6IHB1YmxpYyBLb1Rvb2xGYWN0b3J5QmFzZQogewotCiBwdWJsaWM6CiAg ICAgS2lzVG9vbFNlbGVjdFBhdGhGYWN0b3J5KGNvbnN0IFFTdHJpbmdMaXN0JikKICAgICAgICAg ICAgIDogS29Ub29sRmFjdG9yeUJhc2UoIktpc1Rvb2xTZWxlY3RQYXRoIikgewpAQCAtOTYsNCAr MTAzLDMgQEAgcHVibGljOgogCiAKICNlbmRpZiAvLyBLSVNfVE9PTF9TRUxFQ1RfUEFUSF9IXwot CmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29s X3NlbGVjdF9wb2x5Z29uYWwuY2MgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xz L2tpc190b29sX3NlbGVjdF9wb2x5Z29uYWwuY2MKaW5kZXggOWFjY2E1MC4uNzkxYjZjNiAxMDA2 NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxl Y3RfcG9seWdvbmFsLmNjCisrKyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMv a2lzX3Rvb2xfc2VsZWN0X3BvbHlnb25hbC5jYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmln aHQgKGMpIDIwMDIgUGF0cmljayBKdWxpZW4gPGZyZWFrQGNvZGVwaW1wcy5vcmc+CiAgKiAgQ29w eXJpZ2h0IChjKSAyMDA0IEJvdWRld2lqbiBSZW1wdCA8Ym91ZEB2YWxkeWFzLm9yZz4KICAqICBD b3B5cmlnaHQgKGMpIDIwMDcgU3ZlbiBMYW5na2FtcCA8c3Zlbi5sYW5na2FtcEBnbWFpbC5jb20+ CisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhhbXMgPG1pYWJyYWhhQGdtYWls LmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzQsNTIgKzM1 LDE5IEBACiAjaW5jbHVkZSAia2lzX3NoYXBlX3Rvb2xfaGVscGVyLmgiCiAKICNpbmNsdWRlICJr aXNfc3lzdGVtX2xvY2tlci5oIgorI2luY2x1ZGUgIktpc1ZpZXdNYW5hZ2VyLmgiCisjaW5jbHVk ZSAia2lzX3NlbGVjdGlvbl9tYW5hZ2VyLmgiCiAKIAotS2lzVG9vbFNlbGVjdFBvbHlnb25hbDo6 S2lzVG9vbFNlbGVjdFBvbHlnb25hbChLb0NhbnZhc0Jhc2UgKmNhbnZhcykKK19fS2lzVG9vbFNl bGVjdFBvbHlnb25hbExvY2FsOjpfX0tpc1Rvb2xTZWxlY3RQb2x5Z29uYWxMb2NhbChLb0NhbnZh c0Jhc2UgKmNhbnZhcykKICAgICA6IEtpc1Rvb2xQb2x5bGluZUJhc2UoY2FudmFzLCBLaXNUb29s UG9seWxpbmVCYXNlOjpTRUxFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEtpc0N1cnNv cjo6bG9hZCgidG9vbF9wb2x5Z29uYWxfc2VsZWN0aW9uX2N1cnNvci5wbmciLCA2LCA2KSksCi0g ICAgICBtX3dpZGdldEhlbHBlcihpMThuKCJQb2x5Z29uYWwgU2VsZWN0aW9uIikpCisgICAgICAg ICAgICAgICAgICAgICAgICAgIEtpc0N1cnNvcjo6bG9hZCgidG9vbF9wb2x5Z29uYWxfc2VsZWN0 aW9uX2N1cnNvci5wbmciLCA2LCA2KSkKIHsKICAgICBzZXRPYmplY3ROYW1lKCJ0b29sX3NlbGVj dF9wb2x5Z29uYWwiKTsKLSAgICBjb25uZWN0KCZtX3dpZGdldEhlbHBlciwgU0lHTkFMKHNlbGVj dGlvbkFjdGlvbkNoYW5nZWQoaW50KSksIHRoaXMsIFNMT1Qoc2V0U2VsZWN0aW9uQWN0aW9uKGlu dCkpKTsKLX0KLQotU2VsZWN0aW9uQWN0aW9uIEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWw6OnNlbGVj dGlvbkFjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2VsZWN0aW9uQWN0aW9uOwotfQot Ci12b2lkIEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWw6OnNldFNlbGVjdGlvbkFjdGlvbihpbnQgbmV3 U2VsZWN0aW9uQWN0aW9uKQotewotICAgIGlmKG5ld1NlbGVjdGlvbkFjdGlvbiA+PSBTRUxFQ1RJ T05fUkVQTEFDRSAmJiBuZXdTZWxlY3Rpb25BY3Rpb24gPD0gU0VMRUNUSU9OX0lOVEVSU0VDVCAm JiBtX3NlbGVjdGlvbkFjdGlvbiAhPSBuZXdTZWxlY3Rpb25BY3Rpb24pCi0gICAgewotICAgICAg ICBpZihtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg ICAgbV93aWRnZXRIZWxwZXIuc2xvdFNldEFjdGlvbihuZXdTZWxlY3Rpb25BY3Rpb24pOwotICAg ICAgICB9Ci0gICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uID0gKFNlbGVjdGlvbkFjdGlvbiluZXdT ZWxlY3Rpb25BY3Rpb247Ci0gICAgICAgIGVtaXQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOwot ICAgIH0KIH0KIAotUVdpZGdldCogS2lzVG9vbFNlbGVjdFBvbHlnb25hbDo6Y3JlYXRlT3B0aW9u V2lkZ2V0KCkKLXsKLSAgICBLaXNDYW52YXMyKiBjYW52YXMgPSBkeW5hbWljX2Nhc3Q8S2lzQ2Fu dmFzMio+KHRoaXMtPmNhbnZhcygpKTsKLSAgICBRX0FTU0VSVChjYW52YXMpOwotCi0gICAgbV93 aWRnZXRIZWxwZXIuY3JlYXRlT3B0aW9uV2lkZ2V0KGNhbnZhcywgdGhpcy0+dG9vbElkKCkpOwot ICAgIHJldHVybiBtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKTsKLX0KIAotdm9pZCBLaXNU b29sU2VsZWN0UG9seWdvbmFsOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZXZlbnQpCi17Ci0g ICAgaWYgKCFtX3dpZGdldEhlbHBlci5wcm9jZXNzS2V5UHJlc3NFdmVudChldmVudCkpIHsKLSAg ICAgICAgS2lzVG9vbFBvbHlsaW5lQmFzZTo6a2V5UHJlc3NFdmVudChldmVudCk7Ci0gICAgfQot fQotCi12b2lkIEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWw6OmZpbmlzaFBvbHlsaW5lKGNvbnN0IFFW ZWN0b3I8UVBvaW50Rj4gJnBvaW50cykKK3ZvaWQgX19LaXNUb29sU2VsZWN0UG9seWdvbmFsTG9j YWw6OmZpbmlzaFBvbHlsaW5lKGNvbnN0IFFWZWN0b3I8UVBvaW50Rj4gJnBvaW50cykKIHsKICAg ICBLaXNDYW52YXMyICoga2lzQ2FudmFzID0gZHluYW1pY19jYXN0PEtpc0NhbnZhczIqPihjYW52 YXMoKSk7CiAgICAgUV9BU1NFUlQoa2lzQ2FudmFzKTsKQEAgLTg4LDEzICs1NiwxMyBAQCB2b2lk IEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWw6OmZpbmlzaFBvbHlsaW5lKGNvbnN0IFFWZWN0b3I8UVBv aW50Rj4gJnBvaW50cykKIAogICAgIEtpc1NlbGVjdGlvblRvb2xIZWxwZXIgaGVscGVyKGtpc0Nh bnZhcywga3VuZG8yX2kxOG4oIlNlbGVjdCBQb2x5Z29uIikpOwogCi0gICAgaWYgKG1fd2lkZ2V0 SGVscGVyLnNlbGVjdGlvbk1vZGUoKSA9PSBQSVhFTF9TRUxFQ1RJT04pIHsKKyAgICBpZiAoc2Vs ZWN0aW9uTW9kZSgpID09IFBJWEVMX1NFTEVDVElPTikgewogICAgICAgICBLaXNQaXhlbFNlbGVj dGlvblNQIHRtcFNlbCA9IG5ldyBLaXNQaXhlbFNlbGVjdGlvbigpOwogCiAgICAgICAgIEtpc1Bh aW50ZXIgcGFpbnRlcih0bXBTZWwpOwogICAgICAgICBwYWludGVyLnNldFBhaW50Q29sb3IoS29D b2xvcihRdDo6YmxhY2ssIHRtcFNlbC0+Y29sb3JTcGFjZSgpKSk7CiAgICAgICAgIHBhaW50ZXIu c2V0UGFpbnRPcFByZXNldChjdXJyZW50UGFpbnRPcFByZXNldCgpLCBjdXJyZW50Tm9kZSgpLCBj dXJyZW50SW1hZ2UoKSk7Ci0gICAgICAgIHBhaW50ZXIuc2V0QW50aUFsaWFzUG9seWdvbkZpbGwo bV93aWRnZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCktPmFudGlBbGlhc1NlbGVjdGlvbigpKTsKKyAg ICAgICAgcGFpbnRlci5zZXRBbnRpQWxpYXNQb2x5Z29uRmlsbChhbnRpQWxpYXNTZWxlY3Rpb24o KSk7CiAgICAgICAgIHBhaW50ZXIuc2V0RmlsbFN0eWxlKEtpc1BhaW50ZXI6OkZpbGxTdHlsZUZv cmVncm91bmRDb2xvcik7CiAgICAgICAgIHBhaW50ZXIuc2V0U3Ryb2tlU3R5bGUoS2lzUGFpbnRl cjo6U3Ryb2tlU3R5bGVOb25lKTsKIApAQCAtMTA1LDcgKzczLDcgQEAgdm9pZCBLaXNUb29sU2Vs ZWN0UG9seWdvbmFsOjpmaW5pc2hQb2x5bGluZShjb25zdCBRVmVjdG9yPFFQb2ludEY+ICZwb2lu dHMpCiAgICAgICAgIGNhY2hlLmNsb3NlU3VicGF0aCgpOwogICAgICAgICB0bXBTZWwtPnNldE91 dGxpbmVDYWNoZShjYWNoZSk7CiAKLSAgICAgICAgaGVscGVyLnNlbGVjdFBpeGVsU2VsZWN0aW9u KHRtcFNlbCwgbV93aWRnZXRIZWxwZXIuc2VsZWN0aW9uQWN0aW9uKCkpOworICAgICAgICBoZWxw ZXIuc2VsZWN0UGl4ZWxTZWxlY3Rpb24odG1wU2VsLCBzZWxlY3Rpb25BY3Rpb24oKSk7CiAgICAg fSBlbHNlIHsKICAgICAgICAgS29QYXRoU2hhcGUqIHBhdGggPSBuZXcgS29QYXRoU2hhcGUoKTsK ICAgICAgICAgcGF0aC0+c2V0U2hhcGVJZChLb1BhdGhTaGFwZUlkKTsKQEAgLTEyMSwzICs4OSwy NCBAQCB2b2lkIEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWw6OmZpbmlzaFBvbHlsaW5lKGNvbnN0IFFW ZWN0b3I8UVBvaW50Rj4gJnBvaW50cykKICAgICAgICAgaGVscGVyLmFkZFNlbGVjdGlvblNoYXBl KHBhdGgpOwogICAgIH0KIH0KKworCitLaXNUb29sU2VsZWN0UG9seWdvbmFsOjpLaXNUb29sU2Vs ZWN0UG9seWdvbmFsKEtvQ2FudmFzQmFzZSAqY2FudmFzKToKKyAgICBTZWxlY3Rpb25BY3Rpb25I YW5kbGVyPF9fS2lzVG9vbFNlbGVjdFBvbHlnb25hbExvY2FsPihjYW52YXMsIGkxOG4oIlBvbHln b25hbCBTZWxlY3Rpb24iKSkKK3sKKyAgICBjb25uZWN0KCZtX3dpZGdldEhlbHBlciwgU0lHTkFM KHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoaW50KSksIHRoaXMsIFNMT1Qoc2V0U2VsZWN0aW9uQWN0 aW9uKGludCkpKTsKK30KKwordm9pZCBLaXNUb29sU2VsZWN0UG9seWdvbmFsOjpzZXRTZWxlY3Rp b25BY3Rpb24oaW50IG5ld1NlbGVjdGlvbkFjdGlvbikKK3sKKyAgICBpZihuZXdTZWxlY3Rpb25B Y3Rpb24gPj0gU0VMRUNUSU9OX1JFUExBQ0UgJiYgbmV3U2VsZWN0aW9uQWN0aW9uIDw9IFNFTEVD VElPTl9JTlRFUlNFQ1QgJiYgbV9zZWxlY3Rpb25BY3Rpb24gIT0gbmV3U2VsZWN0aW9uQWN0aW9u KQorICAgIHsKKyAgICAgICAgaWYobV93aWRnZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCkpCisgICAg ICAgIHsKKyAgICAgICAgICAgIG1fd2lkZ2V0SGVscGVyLnNsb3RTZXRBY3Rpb24obmV3U2VsZWN0 aW9uQWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBtX3NlbGVjdGlvbkFjdGlvbiA9IChTZWxl Y3Rpb25BY3Rpb24pbmV3U2VsZWN0aW9uQWN0aW9uOworICAgICAgICBlbWl0IHNlbGVjdGlvbkFj dGlvbkNoYW5nZWQoKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvdG9v bHMvc2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X3BvbHlnb25hbC5oIGIva3JpdGEvcGx1 Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3RfcG9seWdvbmFsLmgKaW5k ZXggZmVlZTljYi4uMzk3ZWM2MyAxMDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxl Y3Rpb250b29scy9raXNfdG9vbF9zZWxlY3RfcG9seWdvbmFsLmgKKysrIGIva3JpdGEvcGx1Z2lu cy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3RfcG9seWdvbmFsLmgKQEAgLTQs NiArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIEpvaG4gQ2FsaWZmIDxqY2FsaWZmQGNv bXB1em9uZS5uZXQ+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFBhdHJpY2sgSnVsaWVuIDxmcmVh a0Bjb2RlcGltcHMub3JnPgogICogIENvcHlyaWdodCAoYykgMjAwNCBCb3VkZXdpam4gUmVtcHQg PGJvdWRAdmFsZHlhcy5vcmc+CisgKiAgQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgQWJyYWhh bXMgPG1pYWJyYWhhQGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQpAQCAtMjUsMzcgKzI2LDQxIEBACiAKICNpbmNsdWRlICJLb1Rvb2xGYWN0b3J5QmFzZS5o IgogI2luY2x1ZGUgImtpc190b29sX3BvbHlsaW5lX2Jhc2UuaCIKKyNpbmNsdWRlIDxraXNfdG9v bF9zZWxlY3RfYmFzZS5oPgogI2luY2x1ZGUgImtpc19zZWxlY3Rpb25fdG9vbF9jb25maWdfd2lk Z2V0X2hlbHBlci5oIgogI2luY2x1ZGUgPEtvSWNvbi5oPgogCiAKLWNsYXNzIEtpc1Rvb2xTZWxl Y3RQb2x5Z29uYWwgOiBwdWJsaWMgS2lzVG9vbFBvbHlsaW5lQmFzZQorY2xhc3MgX19LaXNUb29s U2VsZWN0UG9seWdvbmFsTG9jYWwgOiBwdWJsaWMgS2lzVG9vbFBvbHlsaW5lQmFzZQogewogICAg IFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShpbnQgc2VsZWN0aW9uQWN0aW9uIFJFQUQgc2VsZWN0 aW9uQWN0aW9uIFdSSVRFIHNldFNlbGVjdGlvbkFjdGlvbiBOT1RJRlkgc2VsZWN0aW9uQWN0aW9u Q2hhbmdlZCk7CiBwdWJsaWM6Ci0gICAgS2lzVG9vbFNlbGVjdFBvbHlnb25hbChLb0NhbnZhc0Jh c2UgKmNhbnZhcyk7Ci0gICAgUVdpZGdldCogY3JlYXRlT3B0aW9uV2lkZ2V0KCk7Ci0gICAgU2Vs ZWN0aW9uQWN0aW9uIHNlbGVjdGlvbkFjdGlvbigpIGNvbnN0OwotCi1wdWJsaWMgUV9TTE9UUzoK LSAgICB2b2lkIHNldFNlbGVjdGlvbkFjdGlvbihpbnQgbmV3U2VsZWN0aW9uQWN0aW9uKTsKLQot UV9TSUdOQUxTOgotICAgIHZvaWQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOwotCisgICAgX19L aXNUb29sU2VsZWN0UG9seWdvbmFsTG9jYWwoS29DYW52YXNCYXNlICpjYW52YXMpOworcHJvdGVj dGVkOgorICAgIHZpcnR1YWwgU2VsZWN0aW9uTW9kZSBzZWxlY3Rpb25Nb2RlKCkgY29uc3QgPSAw OworICAgIHZpcnR1YWwgU2VsZWN0aW9uQWN0aW9uIHNlbGVjdGlvbkFjdGlvbigpIGNvbnN0ID0g MDsKKyAgICB2aXJ0dWFsIGJvb2wgYW50aUFsaWFzU2VsZWN0aW9uKCkgY29uc3QgPSAwOwogcHJp dmF0ZToKLSAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50ICpldmVudCk7CiAgICAgdm9p ZCBmaW5pc2hQb2x5bGluZShjb25zdCBRVmVjdG9yPFFQb2ludEY+ICZwb2ludHMpOwogcHJpdmF0 ZToKLSAgICBLaXNTZWxlY3Rpb25Ub29sQ29uZmlnV2lkZ2V0SGVscGVyIG1fd2lkZ2V0SGVscGVy OwotICAgIFNlbGVjdGlvbkFjdGlvbiBtX3NlbGVjdGlvbkFjdGlvbjsKIH07CiAKK2NsYXNzIEtp c1Rvb2xTZWxlY3RQb2x5Z29uYWwgOiBwdWJsaWMgU2VsZWN0aW9uQWN0aW9uSGFuZGxlcjxfX0tp c1Rvb2xTZWxlY3RQb2x5Z29uYWxMb2NhbD4KK3sKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVS VFkoaW50IHNlbGVjdGlvbkFjdGlvbiBSRUFEIHNlbGVjdGlvbkFjdGlvbiBXUklURSBzZXRTZWxl Y3Rpb25BY3Rpb24gTk9USUZZIHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQpCitwdWJsaWM6CisgICAg S2lzVG9vbFNlbGVjdFBvbHlnb25hbChLb0NhbnZhc0Jhc2UqIGNhbnZhcyk7CisKKyAgICBRX1NJ R05BTFM6IHZvaWQgc2VsZWN0aW9uQWN0aW9uQ2hhbmdlZCgpOworICAgIHB1YmxpYyBRX1NMT1RT OgorICAgIHZvaWQgc2V0U2VsZWN0aW9uQWN0aW9uKGludCBuZXdTZWxlY3Rpb25BY3Rpb24pOwor fTsKKworCiAKIGNsYXNzIEtpc1Rvb2xTZWxlY3RQb2x5Z29uYWxGYWN0b3J5IDogcHVibGljIEtv VG9vbEZhY3RvcnlCYXNlCiB7Ci0KIHB1YmxpYzoKICAgICBLaXNUb29sU2VsZWN0UG9seWdvbmFs RmFjdG9yeShjb25zdCBRU3RyaW5nTGlzdCYpCiAgICAgICAgICAgICA6IEtvVG9vbEZhY3RvcnlC YXNlKCJLaXNUb29sU2VsZWN0UG9seWdvbmFsIikgewpkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lu cy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3RfcmVjdGFuZ3VsYXIuY2MgYi9r cml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9yZWN0YW5n dWxhci5jYwppbmRleCAzMzFjNmE0Li5kODFmODBjIDEwMDY0NAotLS0gYS9rcml0YS9wbHVnaW5z L3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9yZWN0YW5ndWxhci5jYworKysg Yi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9yZWN0 YW5ndWxhci5jYwpAQCAtMiw5ICsyLDEwIEBACiAgKiAga2lzX3Rvb2xfc2VsZWN0X3JlY3Rhbmd1 bGFyLmNjIC0tIHBhcnQgb2YgS3JpdGEKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5IE1pY2hh ZWwgS29jaCA8a29jaEBrZGUub3JnPgotICogICAgICAgICAgICAgICAgMjAwMSBKb2huIENhbGlm ZiA8amNhbGlmZkBjb21wdXpvbmUubmV0PgotICogICAgICAgICAgICAgICAgMjAwMiBQYXRyaWNr IEp1bGllbiA8ZnJlYWtAY29kZXBpbXBzLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgSm9o biBDYWxpZmYgPGpjYWxpZmZAY29tcHV6b25lLm5ldD4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIg UGF0cmljayBKdWxpZW4gPGZyZWFrQGNvZGVwaW1wcy5vcmc+CiAgKiAgQ29weXJpZ2h0IChjKSAy MDA3IFN2ZW4gTGFuZ2thbXAgPHN2ZW4ubGFuZ2thbXBAZ21haWwuY29tPgorICogIENvcHlyaWdo dCAoYykgMjAxNSBNaWNoYWVsIEFicmFoYW1zIDxtaWFicmFoYUBnbWFpbC5jb20+CiAgKgogICog IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDUwICszNywxNCBAQAogI2luY2x1 ZGUgImtpc19zZWxlY3Rpb25fbWFuYWdlci5oIgogCiAKLUtpc1Rvb2xTZWxlY3RSZWN0YW5ndWxh cjo6S2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyKEtvQ2FudmFzQmFzZSAqIGNhbnZhcykKK19fS2lz VG9vbFNlbGVjdFJlY3Rhbmd1bGFyTG9jYWw6Ol9fS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyTG9j YWwoS29DYW52YXNCYXNlICogY2FudmFzKQogICAgIDogS2lzVG9vbFJlY3RhbmdsZUJhc2UoY2Fu dmFzLCBLaXNUb29sUmVjdGFuZ2xlQmFzZTo6U0VMRUNULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgS2lzQ3Vyc29yOjpsb2FkKCJ0b29sX3JlY3Rhbmd1bGFyX3NlbGVjdGlvbl9jdXJzb3Iu cG5nIiwgNiwgNikpLAotICAgICAgbV93aWRnZXRIZWxwZXIoaTE4bigiUmVjdGFuZ3VsYXIgU2Vs ZWN0aW9uIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBLaXNDdXJzb3I6OmxvYWQoInRv b2xfcmVjdGFuZ3VsYXJfc2VsZWN0aW9uX2N1cnNvci5wbmciLCA2LCA2KSkKIHsKLSAgICBjb25u ZWN0KCZtX3dpZGdldEhlbHBlciwgU0lHTkFMKHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoaW50KSks IHRoaXMsIFNMT1Qoc2V0U2VsZWN0aW9uQWN0aW9uKGludCkpKTsKLX0KLQotU2VsZWN0aW9uQWN0 aW9uIEtpc1Rvb2xTZWxlY3RSZWN0YW5ndWxhcjo6c2VsZWN0aW9uQWN0aW9uKCkgY29uc3QKLXsK LSAgICByZXR1cm4gbV9zZWxlY3Rpb25BY3Rpb247Ci19Ci0KLXZvaWQgS2lzVG9vbFNlbGVjdFJl Y3Rhbmd1bGFyOjpzZXRTZWxlY3Rpb25BY3Rpb24oaW50IG5ld1NlbGVjdGlvbkFjdGlvbikKLXsK LSAgICBpZihuZXdTZWxlY3Rpb25BY3Rpb24gPj0gU0VMRUNUSU9OX1JFUExBQ0UgJiYgbmV3U2Vs ZWN0aW9uQWN0aW9uIDw9IFNFTEVDVElPTl9JTlRFUlNFQ1QgJiYgbV9zZWxlY3Rpb25BY3Rpb24g IT0gbmV3U2VsZWN0aW9uQWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYobV93aWRnZXRIZWxwZXIu b3B0aW9uV2lkZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fd2lkZ2V0SGVscGVyLnNs b3RTZXRBY3Rpb24obmV3U2VsZWN0aW9uQWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBtX3Nl bGVjdGlvbkFjdGlvbiA9IChTZWxlY3Rpb25BY3Rpb24pbmV3U2VsZWN0aW9uQWN0aW9uOwotICAg ICAgICBlbWl0IHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoKTsKLSAgICB9CisgICAgICAgIHNldE9i amVjdE5hbWUoInRvb2xfc2VsZWN0X3JlY3Rhbmd1bGFyIik7CiB9CiAKLVFXaWRnZXQqIEtpc1Rv b2xTZWxlY3RSZWN0YW5ndWxhcjo6Y3JlYXRlT3B0aW9uV2lkZ2V0KCkKLXsKLSAgICBLaXNDYW52 YXMyKiBjYW52YXMgPSBkeW5hbWljX2Nhc3Q8S2lzQ2FudmFzMio+KHRoaXMtPmNhbnZhcygpKTsK LSAgICBRX0FTU0VSVChjYW52YXMpOwotCi0gICAgbV93aWRnZXRIZWxwZXIuY3JlYXRlT3B0aW9u V2lkZ2V0KGNhbnZhcywgdGhpcy0+dG9vbElkKCkpOwotICAgIG1fd2lkZ2V0SGVscGVyLm9wdGlv bldpZGdldCgpLT5kaXNhYmxlQW50aUFsaWFzU2VsZWN0aW9uT3B0aW9uKCk7Ci0gICAgcmV0dXJu IG1fd2lkZ2V0SGVscGVyLm9wdGlvbldpZGdldCgpOwotfQotCi12b2lkIEtpc1Rvb2xTZWxlY3RS ZWN0YW5ndWxhcjo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmV2ZW50KQotewotICAgIGlmICgh bV93aWRnZXRIZWxwZXIucHJvY2Vzc0tleVByZXNzRXZlbnQoZXZlbnQpKSB7Ci0gICAgICAgIEtp c1Rvb2w6OmtleVByZXNzRXZlbnQoZXZlbnQpOwotICAgIH0KLX0KLQotdm9pZCBLaXNUb29sU2Vs ZWN0UmVjdGFuZ3VsYXI6OmZpbmlzaFJlY3QoY29uc3QgUVJlY3RGJiByZWN0KQordm9pZCBfX0tp c1Rvb2xTZWxlY3RSZWN0YW5ndWxhckxvY2FsOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0RiYgcmVj dCkKIHsKICAgICBLaXNDYW52YXMyICoga2lzQ2FudmFzID0gZHluYW1pY19jYXN0PEtpc0NhbnZh czIqPihjYW52YXMoKSk7CiAgICAgaWYgKCFraXNDYW52YXMpCkBAIC05Nyw3ICs2Miw3IEBAIHZv aWQgS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyOjpmaW5pc2hSZWN0KGNvbnN0IFFSZWN0RiYgcmVj dCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3dpZGdldEhlbHBlci5zZWxl Y3Rpb25Nb2RlKCkgPT0gUElYRUxfU0VMRUNUSU9OKSB7CisgICAgaWYgKHNlbGVjdGlvbk1vZGUo KSA9PSBQSVhFTF9TRUxFQ1RJT04pIHsKICAgICAgICAgaWYgKHJjLmlzVmFsaWQoKSkgewogICAg ICAgICAgICAgS2lzUGl4ZWxTZWxlY3Rpb25TUCB0bXBTZWwgPSBLaXNQaXhlbFNlbGVjdGlvblNQ KG5ldyBLaXNQaXhlbFNlbGVjdGlvbigpKTsKICAgICAgICAgICAgIHRtcFNlbC0+c2VsZWN0KHJj KTsKQEAgLTEwNiwxMCArNzEsMzAgQEAgdm9pZCBLaXNUb29sU2VsZWN0UmVjdGFuZ3VsYXI6OmZp bmlzaFJlY3QoY29uc3QgUVJlY3RGJiByZWN0KQogICAgICAgICAgICAgY2FjaGUuYWRkUmVjdChy Yyk7CiAgICAgICAgICAgICB0bXBTZWwtPnNldE91dGxpbmVDYWNoZShjYWNoZSk7CiAKLSAgICAg ICAgICAgIGhlbHBlci5zZWxlY3RQaXhlbFNlbGVjdGlvbih0bXBTZWwsIG1fd2lkZ2V0SGVscGVy LnNlbGVjdGlvbkFjdGlvbigpKTsKKyAgICAgICAgICAgIGhlbHBlci5zZWxlY3RQaXhlbFNlbGVj dGlvbih0bXBTZWwsIHNlbGVjdGlvbkFjdGlvbigpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7 CiAgICAgICAgIFFSZWN0RiBkb2N1bWVudFJlY3QgPSBjb252ZXJ0VG9QdChyYyk7CiAgICAgICAg IGhlbHBlci5hZGRTZWxlY3Rpb25TaGFwZShLaXNTaGFwZVRvb2xIZWxwZXI6OmNyZWF0ZVJlY3Rh bmdsZVNoYXBlKGRvY3VtZW50UmVjdCkpOwogICAgIH0KIH0KKworS2lzVG9vbFNlbGVjdFJlY3Rh bmd1bGFyOjpLaXNUb29sU2VsZWN0UmVjdGFuZ3VsYXIoS29DYW52YXNCYXNlICpjYW52YXMpOgor ICAgIFNlbGVjdGlvbkFjdGlvbkhhbmRsZXI8X19LaXNUb29sU2VsZWN0UmVjdGFuZ3VsYXJMb2Nh bD4oY2FudmFzLCBpMThuKCJSZWN0YW5ndWxhciBTZWxlY3Rpb24iKSkKK3sKKyAgICBjb25uZWN0 KCZtX3dpZGdldEhlbHBlciwgU0lHTkFMKHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoaW50KSksIHRo aXMsIFNMT1Qoc2V0U2VsZWN0aW9uQWN0aW9uKGludCkpKTsKK30KKworCit2b2lkIEtpc1Rvb2xT ZWxlY3RSZWN0YW5ndWxhcjo6c2V0U2VsZWN0aW9uQWN0aW9uKGludCBuZXdTZWxlY3Rpb25BY3Rp b24pCit7CisgICAgaWYobmV3U2VsZWN0aW9uQWN0aW9uID49IFNFTEVDVElPTl9SRVBMQUNFICYm IG5ld1NlbGVjdGlvbkFjdGlvbiA8PSBTRUxFQ1RJT05fSU5URVJTRUNUICYmIG1fc2VsZWN0aW9u QWN0aW9uICE9IG5ld1NlbGVjdGlvbkFjdGlvbikKKyAgICB7CisgICAgICAgIGlmKG1fd2lkZ2V0 SGVscGVyLm9wdGlvbldpZGdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3dpZGdldEhl bHBlci5zbG90U2V0QWN0aW9uKG5ld1NlbGVjdGlvbkFjdGlvbik7CisgICAgICAgIH0KKyAgICAg ICAgbV9zZWxlY3Rpb25BY3Rpb24gPSAoU2VsZWN0aW9uQWN0aW9uKW5ld1NlbGVjdGlvbkFjdGlv bjsKKyAgICAgICAgZW1pdCBzZWxlY3Rpb25BY3Rpb25DaGFuZ2VkKCk7CisgICAgfQorfQpkaWZm IC0tZ2l0IGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxl Y3RfcmVjdGFuZ3VsYXIuaCBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMva2lz X3Rvb2xfc2VsZWN0X3JlY3Rhbmd1bGFyLmgKaW5kZXggNWU4ODc2Ni4uMmZlNWI4OCAxMDA2NDQK LS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9zZWxlY3Rf cmVjdGFuZ3VsYXIuaAorKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xzL2tp c190b29sX3NlbGVjdF9yZWN0YW5ndWxhci5oCkBAIC00LDYgKzQsNyBAQAogICogIENvcHlyaWdo dCAoYykgMTk5OSBNaWNoYWVsIEtvY2ggPGtvY2hAa2RlLm9yZz4KICAqICAgICAgICAgICAgICAg IDIwMDIgUGF0cmljayBKdWxpZW4gPGZyZWFrQGNvZGVwaW1wcy5vcmc+CiAgKgorICoKICAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTI0LDM2ICsyNSwz OSBAQAogCiAjaW5jbHVkZSAiS29Ub29sRmFjdG9yeUJhc2UuaCIKICNpbmNsdWRlICJraXNfdG9v bF9yZWN0YW5nbGVfYmFzZS5oIgorI2luY2x1ZGUgPGtpc190b29sX3NlbGVjdF9iYXNlLmg+CiAj aW5jbHVkZSAia2lzX3NlbGVjdGlvbl90b29sX2NvbmZpZ193aWRnZXRfaGVscGVyLmgiCiAjaW5j bHVkZSA8S29JY29uLmg+CiAjaW5jbHVkZSA8a3Nob3J0Y3V0Lmg+CiAKIAotY2xhc3MgS2lzVG9v bFNlbGVjdFJlY3Rhbmd1bGFyIDogcHVibGljIEtpc1Rvb2xSZWN0YW5nbGVCYXNlCitjbGFzcyBf X0tpc1Rvb2xTZWxlY3RSZWN0YW5ndWxhckxvY2FsIDogcHVibGljIEtpc1Rvb2xSZWN0YW5nbGVC YXNlCiB7CiAgICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKGludCBzZWxlY3Rpb25BY3Rpb24g UkVBRCBzZWxlY3Rpb25BY3Rpb24gV1JJVEUgc2V0U2VsZWN0aW9uQWN0aW9uIE5PVElGWSBzZWxl Y3Rpb25BY3Rpb25DaGFuZ2VkKTsKLXB1YmxpYzoKLSAgICBLaXNUb29sU2VsZWN0UmVjdGFuZ3Vs YXIoS29DYW52YXNCYXNlICogY2FudmFzKTsKLSAgICBRV2lkZ2V0KiBjcmVhdGVPcHRpb25XaWRn ZXQoKTsKLSAgICBTZWxlY3Rpb25BY3Rpb24gc2VsZWN0aW9uQWN0aW9uKCkgY29uc3Q7CiAKLXB1 YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgc2V0U2VsZWN0aW9uQWN0aW9uKGludCBuZXdTZWxlY3Rp b25BY3Rpb24pOworcHVibGljOgorICAgIF9fS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyTG9jYWwo S29DYW52YXNCYXNlICogY2FudmFzKTsKIAotUV9TSUdOQUxTOgotICAgIHZvaWQgc2VsZWN0aW9u QWN0aW9uQ2hhbmdlZCgpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgU2VsZWN0aW9uTW9kZSBz ZWxlY3Rpb25Nb2RlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2VsZWN0aW9uQWN0aW9uIHNl bGVjdGlvbkFjdGlvbigpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGtleVByZXNz RXZlbnQoUUtleUV2ZW50ICpldmVudCk7CiAgICAgdm9pZCBmaW5pc2hSZWN0KGNvbnN0IFFSZWN0 RiYgcmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgS2lzU2VsZWN0aW9uVG9vbENvbmZpZ1dpZGdldEhl bHBlciBtX3dpZGdldEhlbHBlcjsKLSAgICBTZWxlY3Rpb25BY3Rpb24gbV9zZWxlY3Rpb25BY3Rp b247CiB9OwogCiAKK2NsYXNzIEtpc1Rvb2xTZWxlY3RSZWN0YW5ndWxhciA6IHB1YmxpYyBTZWxl Y3Rpb25BY3Rpb25IYW5kbGVyPF9fS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyTG9jYWw+Cit7Cisg ICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKGludCBzZWxlY3Rpb25BY3Rpb24gUkVBRCBzZWxl Y3Rpb25BY3Rpb24gV1JJVEUgc2V0U2VsZWN0aW9uQWN0aW9uIE5PVElGWSBzZWxlY3Rpb25BY3Rp b25DaGFuZ2VkKQorcHVibGljOgorICAgIEtpc1Rvb2xTZWxlY3RSZWN0YW5ndWxhcihLb0NhbnZh c0Jhc2UqIGNhbnZhcyk7CisgICAgUV9TSUdOQUxTOiB2b2lkIHNlbGVjdGlvbkFjdGlvbkNoYW5n ZWQoKTsKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgc2V0U2VsZWN0aW9uQWN0aW9uKGludCBu ZXdTZWxlY3Rpb25BY3Rpb24pOworfTsKKwogY2xhc3MgS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFy RmFjdG9yeSA6IHB1YmxpYyBLb1Rvb2xGYWN0b3J5QmFzZQogewogCkBAIC03MSw3ICs3NSw3IEBA IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5LaXNUb29sU2VsZWN0UmVjdGFuZ3VsYXJGYWN0b3J5KCkg e30KIAogICAgIHZpcnR1YWwgS29Ub29sQmFzZSAqIGNyZWF0ZVRvb2woS29DYW52YXNCYXNlICpj YW52YXMpIHsKLSAgICAgICAgcmV0dXJuICBuZXcgS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyKGNh bnZhcyk7CisgICAgICAgIHJldHVybiBuZXcgS2lzVG9vbFNlbGVjdFJlY3Rhbmd1bGFyKGNhbnZh cyk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rp b250b29scy9raXNfdG9vbF9zZWxlY3Rfc2ltaWxhci5jYyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMv c2VsZWN0aW9udG9vbHMva2lzX3Rvb2xfc2VsZWN0X3NpbWlsYXIuY2MKaW5kZXggYjJjNTFkOS4u NzBkY2YwNiAxMDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9r aXNfdG9vbF9zZWxlY3Rfc2ltaWxhci5jYworKysgYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVj dGlvbnRvb2xzL2tpc190b29sX3NlbGVjdF9zaW1pbGFyLmNjCkBAIC0yLDYgKzIsNyBAQAogICog IENvcHlyaWdodCAoYykgMTk5OSBNYXR0aGlhcyBFbHRlciA8bWVAa2RlLm9yZz4KICAqICBDb3B5 cmlnaHQgKGMpIDIwMDIgUGF0cmljayBKdWxpZW4gPGZyZWFrQGNvZGVwaW1wcy5vcmc+CiAgKiAg Q29weXJpZ2h0IChjKSAyMDA1IEJvdWRld2lqbiBSZW1wdCA8Ym91ZEB2YWxkeWFzLm9yZz4KKyAq ICBDb3B5cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBBYnJhaGFtcyA8bWlhYnJhaGFAZ21haWwuY29t PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Miw3ICs0Myw2IEBA IHZvaWQgc2VsZWN0QnlDb2xvcihLaXNQYWludERldmljZVNQIGRldiwgS2lzUGl4ZWxTZWxlY3Rp b25TUCBzZWxlY3Rpb24sIGNvbnN0IHF1CiAgICAgaWYgKHJjLmlzRW1wdHkoKSkgewogICAgICAg ICByZXR1cm47CiAgICAgfQotCiAgICAgLy8gWFhYOiBNdWx0aXRocmVhZCB0aGlzIQogICAgIHFp bnQzMiB4LCB5LCB3LCBoOwogICAgIHggPSByYy54KCk7CkBAIC01OSwyNiArNTksMjYgQEAgdm9p ZCBzZWxlY3RCeUNvbG9yKEtpc1BhaW50RGV2aWNlU1AgZGV2LCBLaXNQaXhlbFNlbGVjdGlvblNQ IHNlbGVjdGlvbiwgY29uc3QgcXUKICAgICAgICAgZG8gewogICAgICAgICAgICAgLy9pZiAoZGV2 LT5jb2xvclNwYWNlKCktPmhhc0FscGhhKCkpCiAgICAgICAgICAgICAvLyAgICBvcGFjaXR5ID0g ZGV2LT5jb2xvclNwYWNlKCktPmFscGhhKGhpdGVyLT5yYXdEYXRhKCkpOwotCiAgICAgICAgICAg ICBxdWludDggbWF0Y2ggPSBjcy0+ZGlmZmVyZW5jZShjLCBoaXRlci0+b2xkUmF3RGF0YSgpKTsK LQogICAgICAgICAgICAgaWYgKG1hdGNoIDw9IGZ1enppbmVzcykgewogICAgICAgICAgICAgICAg ICooc2VsSXRlci0+cmF3RGF0YSgpKSA9IE1BWF9TRUxFQ1RFRDsKICAgICAgICAgICAgIH0KLSAg ICAgICAgfSB3aGlsZSAoaGl0ZXItPm5leHRQaXhlbCgpICYmIHNlbEl0ZXItPm5leHRQaXhlbCgp KTsKLQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChoaXRlci0+bmV4dFBpeGVsKCkgJiYgc2Vs SXRlci0+bmV4dFBpeGVsKCkpOwogICAgICAgICBoaXRlci0+bmV4dFJvdygpOwogICAgICAgICBz ZWxJdGVyLT5uZXh0Um93KCk7CiAgICAgfQogCiB9CiAKKwogS2lzVG9vbFNlbGVjdFNpbWlsYXI6 Oktpc1Rvb2xTZWxlY3RTaW1pbGFyKEtvQ2FudmFzQmFzZSAqIGNhbnZhcykKICAgICA6IEtpc1Rv b2xTZWxlY3RCYXNlKGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgIEtpc0N1cnNvcjo6 bG9hZCgidG9vbF9zaW1pbGFyX3NlbGVjdGlvbl9jdXJzb3IucG5nIiwgNiwgNiksCiAgICAgICAg ICAgICAgICAgICAgICAgICBpMThuKCJTaW1pbGFyIENvbG9yIFNlbGVjdGlvbiIpKSwKLSAgICAg IG1fZnV6emluZXNzKDIwKQorICAgICBtX2Z1enppbmVzcygyMCkKIHsKKyAgICBjb25uZWN0KCZt X3dpZGdldEhlbHBlciwgU0lHTkFMKHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoaW50KSksIHRoaXMs IFNMT1Qoc2V0U2VsZWN0aW9uQWN0aW9uKGludCkpKTsKIH0KIAogdm9pZCBLaXNUb29sU2VsZWN0 U2ltaWxhcjo6YWN0aXZhdGUoVG9vbEFjdGl2YXRpb24gdG9vbEFjdGl2YXRpb24sIGNvbnN0IFFT ZXQ8S29TaGFwZSo+ICZzaGFwZXMpCkBAIC04OSw2ICs4OSw3IEBAIHZvaWQgS2lzVG9vbFNlbGVj dFNpbWlsYXI6OmFjdGl2YXRlKFRvb2xBY3RpdmF0aW9uIHRvb2xBY3RpdmF0aW9uLCBjb25zdCBR U2V0PEtvCiAKIHZvaWQgS2lzVG9vbFNlbGVjdFNpbWlsYXI6OmJlZ2luUHJpbWFyeUFjdGlvbihL b1BvaW50ZXJFdmVudCAqZXZlbnQpCiB7CisgICAgS2lzVG9vbFNlbGVjdEJhc2U6OmJlZ2luUHJp bWFyeUFjdGlvbihldmVudCk7CiAgICAgS2lzUGFpbnREZXZpY2VTUCBkZXY7CiAKICAgICBpZiAo IWN1cnJlbnROb2RlKCkgfHwKQEAgLTEyNiw3ICsxMjcsOCBAQCB2b2lkIEtpc1Rvb2xTZWxlY3RT aW1pbGFyOjpiZWdpblByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAgIEtp c1NlbGVjdGlvblRvb2xIZWxwZXIgaGVscGVyKGtpc0NhbnZhcywga3VuZG8yX2kxOG4oIlNlbGVj dCBTaW1pbGFyIENvbG9yIikpOwogICAgIGhlbHBlci5zZWxlY3RQaXhlbFNlbGVjdGlvbih0bXBT ZWwsIHNlbGVjdGlvbkFjdGlvbigpKTsKIAotICAgIFFBcHBsaWNhdGlvbjo6cmVzdG9yZU92ZXJy aWRlQ3Vyc29yKCk7CisgICAgUUFwcGxpY2F0aW9uOjpyZXN0b3JlT3ZlcnJpZGVDdXJzb3IoKTsg ICAgICAgICAgICAgICAgICAgICAgICAKKwogfQogCiB2b2lkIEtpc1Rvb2xTZWxlY3RTaW1pbGFy OjpzbG90U2V0RnV6emluZXNzKGludCBmdXp6aW5lc3MpCkBAIC0xNTksNiArMTYxLDE5IEBAIFFX aWRnZXQqIEtpc1Rvb2xTZWxlY3RTaW1pbGFyOjpjcmVhdGVPcHRpb25XaWRnZXQoKQogCiAgICAg Ly8gbG9hZCBzZXR0aW5nIGZyb20gY29uZmlnCiAgICAgaW5wdXQtPnNldFZhbHVlKG1fY29uZmln R3JvdXAucmVhZEVudHJ5KCJmdXp6aW5lc3MiLCAyMCkpOwotCiAgICAgcmV0dXJuIHNlbGVjdGlv bldpZGdldDsKIH0KKwordm9pZCBLaXNUb29sU2VsZWN0U2ltaWxhcjo6c2V0U2VsZWN0aW9uQWN0 aW9uKGludCBuZXdTZWxlY3Rpb25BY3Rpb24pCit7CisgICAgaWYobmV3U2VsZWN0aW9uQWN0aW9u ID49IFNFTEVDVElPTl9SRVBMQUNFICYmIG5ld1NlbGVjdGlvbkFjdGlvbiA8PSBTRUxFQ1RJT05f SU5URVJTRUNUICYmIG1fc2VsZWN0aW9uQWN0aW9uICE9IG5ld1NlbGVjdGlvbkFjdGlvbikKKyAg ICB7CisgICAgICBpZihtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQoKSkKKyAgICAgIHsKKyAg ICAgICAgICBtX3dpZGdldEhlbHBlci5zbG90U2V0QWN0aW9uKG5ld1NlbGVjdGlvbkFjdGlvbik7 CisgICAgICB9CisgICAgICBtX3NlbGVjdGlvbkFjdGlvbiA9IChTZWxlY3Rpb25BY3Rpb24pbmV3 U2VsZWN0aW9uQWN0aW9uOworICAgICAgZW1pdCBzZWxlY3Rpb25BY3Rpb25DaGFuZ2VkKCk7Cisg ICAgfQorfQorCmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlvbnRvb2xz L2tpc190b29sX3NlbGVjdF9zaW1pbGFyLmggYi9rcml0YS9wbHVnaW5zL3Rvb2xzL3NlbGVjdGlv bnRvb2xzL2tpc190b29sX3NlbGVjdF9zaW1pbGFyLmgKaW5kZXggZjcwMTk4Ni4uMGJlYWRhNCAx MDA2NDQKLS0tIGEva3JpdGEvcGx1Z2lucy90b29scy9zZWxlY3Rpb250b29scy9raXNfdG9vbF9z ZWxlY3Rfc2ltaWxhci5oCisrKyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvc2VsZWN0aW9udG9vbHMv a2lzX3Rvb2xfc2VsZWN0X3NpbWlsYXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp Z2h0IChjKSAyMDA0IEJvdWRld2lqbiBSZW1wdCAoYm91ZEB2YWxkeWFzLm9yZykKKyAqICBDb3B5 cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBBYnJhaGFtcyA8bWlhYnJhaGFAZ21haWwuY29tPgogICoK ICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSwzMyArMjAsNDMgQEAKICNk ZWZpbmUgS0lTX1RPT0xfU0VMRUNUX1NJTUlMQVJfSF8KIAogI2luY2x1ZGUgPEtvVG9vbEZhY3Rv cnlCYXNlLmg+Ci0jaW5jbHVkZSAia2lzX3Rvb2xfc2VsZWN0X2Jhc2UuaCIKICNpbmNsdWRlIDxL b0ljb24uaD4KICNpbmNsdWRlIDxrY29uZmlnLmg+CisjaW5jbHVkZSAia2lzX3Rvb2xfc2VsZWN0 X2Jhc2UuaCIKICNpbmNsdWRlIDxrY29uZmlnZ3JvdXAuaD4KIAotLyoqCisKKworLyoKICAqIFRv b2wgdG8gc2VsZWN0IGNvbG9ycyBieSBwb2ludGluZyBhdCBhIGNvbG9yIG9uIHRoZSBpbWFnZS4K ICAqLwotY2xhc3MgS2lzVG9vbFNlbGVjdFNpbWlsYXIgOiBwdWJsaWMgS2lzVG9vbFNlbGVjdEJh c2UKK2NsYXNzIEtpc1Rvb2xTZWxlY3RTaW1pbGFyOiBwdWJsaWMgS2lzVG9vbFNlbGVjdEJhc2UK IHsKICAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoaW50IHNlbGVjdGlvbkFjdGlvbiBSRUFE IHNlbGVjdGlvbkFjdGlvbiBXUklURSBzZXRTZWxlY3Rpb25BY3Rpb24gTk9USUZZIHNlbGVjdGlv bkFjdGlvbkNoYW5nZWQpCisgICAgUV9TSUdOQUxTOiB2b2lkIHNlbGVjdGlvbkFjdGlvbkNoYW5n ZWQoKTsKIAogcHVibGljOgogICAgIEtpc1Rvb2xTZWxlY3RTaW1pbGFyKEtvQ2FudmFzQmFzZSAq IGNhbnZhcyk7CiAgICAgdm9pZCBiZWdpblByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2 ZW50KTsKLSAgICBRV2lkZ2V0KiBjcmVhdGVPcHRpb25XaWRnZXQoKTsKICAgICB2b2lkIHBhaW50 KFFQYWludGVyJiwgY29uc3QgS29WaWV3Q29udmVydGVyICYpIHt9CisgICAgUVdpZGdldCogY3Jl YXRlT3B0aW9uV2lkZ2V0KCk7CiAKLXB1YmxpYyBRX1NMT1RTOgotICAgIHZpcnR1YWwgdm9pZCBh Y3RpdmF0ZShUb29sQWN0aXZhdGlvbiB0b29sQWN0aXZhdGlvbiwgY29uc3QgUVNldDxLb1NoYXBl Kj4gJnNoYXBlcyk7Ci0gICAgdmlydHVhbCB2b2lkIHNsb3RTZXRGdXp6aW5lc3MoaW50KTsKKwor ICAgIHB1YmxpYyBRX1NMT1RTOiAgICAKKyAgICB2b2lkIGFjdGl2YXRlKFRvb2xBY3RpdmF0aW9u IHRvb2xBY3RpdmF0aW9uLCBjb25zdCBRU2V0PEtvU2hhcGUqPiAmc2hhcGVzKTsKKyAgICB2b2lk IHNldFNlbGVjdGlvbkFjdGlvbihpbnQgbmV3U2VsZWN0aW9uQWN0aW9uKTsKKyAgICB2b2lkIHNs b3RTZXRGdXp6aW5lc3MoaW50KTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEtpc1Rvb2xTZWxl Y3RCYXNlOjptX3dpZGdldEhlbHBlcjsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9mdXp6aW5lc3M7 CiAgICAgS0NvbmZpZ0dyb3VwIG1fY29uZmlnR3JvdXA7CiB9OwogCisKIGNsYXNzIEtpc1Rvb2xT ZWxlY3RTaW1pbGFyRmFjdG9yeSA6IHB1YmxpYyBLb1Rvb2xGYWN0b3J5QmFzZQogewogcHVibGlj OgpAQCAtNTcsMTMgKzY4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgc2V0SWNvbk5hbWUoa29JY29u TmFtZUNTdHIoInRvb2xfc2ltaWxhcl9zZWxlY3Rpb24iKSk7CiAgICAgICAgIHNldFByaW9yaXR5 KDU3KTsKICAgICB9Ci0KICAgICB2aXJ0dWFsIH5LaXNUb29sU2VsZWN0U2ltaWxhckZhY3Rvcnko KSB7fQotCiAgICAgdmlydHVhbCBLb1Rvb2xCYXNlICogY3JlYXRlVG9vbChLb0NhbnZhc0Jhc2Ug KmNhbnZhcykgewogICAgICAgICByZXR1cm4gIG5ldyBLaXNUb29sU2VsZWN0U2ltaWxhcihjYW52 YXMpOwogICAgIH0KLQogfTsKIAogCmRpZmYgLS1naXQgYS9rcml0YS91aS9DTWFrZUxpc3RzLnR4 dCBiL2tyaXRhL3VpL0NNYWtlTGlzdHMudHh0CmluZGV4IGEyYTI5M2UuLjQ1ODhhN2UgMTAwNjQ0 Ci0tLSBhL2tyaXRhL3VpL0NNYWtlTGlzdHMudHh0CisrKyBiL2tyaXRhL3VpL0NNYWtlTGlzdHMu dHh0CkBAIC0xNzcsNyArMTc3LDYgQEAgc2V0KGtyaXRhdWlfTElCX1NSQ1MKICAgICB0b29sL2tp c19yZWNvcmRpbmdfYWRhcHRlci5jcHAKICAgICB0b29sL2tpc190b29sX3BhaW50LmNjCiAgICAg dG9vbC9raXNfdG9vbF9zaGFwZS5jYwotICAgIHRvb2wva2lzX3Rvb2xfc2VsZWN0X2Jhc2UuY3Bw CiAgICAgdG9vbC9raXNfdG9vbF9lbGxpcHNlX2Jhc2UuY3BwCiAgICAgdG9vbC9raXNfdG9vbF9y ZWN0YW5nbGVfYmFzZS5jcHAKICAgICB0b29sL2tpc190b29sX3BvbHlsaW5lX2Jhc2UuY3BwCmRp ZmYgLS1naXQgYS9rcml0YS91aS9jYW52YXMva2lzX3Rvb2xfcHJveHkuaCBiL2tyaXRhL3VpL2Nh bnZhcy9raXNfdG9vbF9wcm94eS5oCmluZGV4IGRhY2FkZDguLjYxNTAzY2QgMTAwNjQ0Ci0tLSBh L2tyaXRhL3VpL2NhbnZhcy9raXNfdG9vbF9wcm94eS5oCisrKyBiL2tyaXRhL3VpL2NhbnZhcy9r aXNfdG9vbF9wcm94eS5oCkBAIC0yNyw5ICsyNyw5IEBAIGNsYXNzIEtpc1Rvb2xQcm94eSA6IHB1 YmxpYyBLb1Rvb2xQcm94eQogewogcHVibGljOgogICAgIGVudW0gQWN0aW9uU3RhdGUgewotICAg ICAgICBCRUdJTiwKLSAgICAgICAgQ09OVElOVUUsCi0gICAgICAgIEVORAorICAgICAgICBCRUdJ TiwgIC8qKjwgQmVnaW5uaW5nIGFuIGFjdGlvbiAqLworICAgICAgICBDT05USU5VRSwgLyoqPCBD b250aW51aW5nIGFuIGFjdGlvbiAqLworICAgICAgICBFTkQgLyoqPCBFbmRpbmcgYW4gYWN0aW9u ICovCiAgICAgfTsKIAogcHVibGljOgpAQCAtNDEsNiArNDEsMTEgQEAgcHVibGljOgogICAgICAq IEZvcndhcmRzIHRoZSBldmVudCB0byB0aGUgYWN0aXZlIHRvb2wgYW5kIHJldHVybnMgdHJ1ZSBp ZiB0aGUKICAgICAgKiBldmVudCAnd2FzIG5vdCBpZ25vcmVkJy4gIFRoYXQgaXMgYnkgZGVmYXVs dCB0aGUgZXZlbnQgaXMKICAgICAgKiBjb25zaWRlcmVkIGFjY2VwdGVkLCBidXQgdGhlIHRvb2wg Y2FuIGV4cGxpY2l0bHkgaWdub3JlIGl0LgorICAgICAqIEBwYXJhbSBzdGF0ZSBiZWdpbm5pbmcs IGNvbnRpbnVpbmcsIG9yIGVuZGluZyB0aGUgYWN0aW9uLgorICAgICAqIEBwYXJhbSBhY3Rpb24g YWx0ZXJuYXRlIHRvb2wgYWN0aW9uIHJlcXVlc3RlZC4KKyAgICAgKiBAcGFyYW0gZXZlbnQgdGhl IGV2ZW50IGJlaW5nIHNlbnQgdG8gdGhlIHRvb2wgYnkgdGhlIEFic3RyYWN0SW5wdXRBY3Rpb24u CisgICAgICogQHBhcmFtIG9yaWdpbmFsRXZlbnQgdGhlIG9yaWdpbmFsIGV2ZW50IHJlY2VpdmVk IGJ5IHRoZSBBYnN0cmFjdElucHV0QWN0aW9uLgorICAgICAqIEBwYXJhbSBsYXN0VGFibGV0RXZl bnQgVGhlIGV2ZW50IG9iamVjdCBmb3IgdGhlIGxhc3QgdGFibGV0IGV2ZW50LgogICAgICAqLwog ICAgIGJvb2wgZm9yd2FyZEV2ZW50KEFjdGlvblN0YXRlIHN0YXRlLCBLaXNUb29sOjpUb29sQWN0 aW9uIGFjdGlvbiwgUUV2ZW50ICpldmVudCwgUUV2ZW50ICpvcmlnaW5hbEV2ZW50LCBRVGFibGV0 RXZlbnQgKmxhc3RUYWJsZXRFdmVudCk7CiAgICAgYm9vbCBwcmltYXJ5QWN0aW9uU3VwcG9ydHNI aVJlc0V2ZW50cygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvaW5wdXQva2lzX2FsdGVy bmF0ZV9pbnZvY2F0aW9uX2FjdGlvbi5jcHAgYi9rcml0YS91aS9pbnB1dC9raXNfYWx0ZXJuYXRl X2ludm9jYXRpb25fYWN0aW9uLmNwcAppbmRleCA0ODcyM2JmLi4wOTEwN2NlIDEwMDY0NAotLS0g YS9rcml0YS91aS9pbnB1dC9raXNfYWx0ZXJuYXRlX2ludm9jYXRpb25fYWN0aW9uLmNwcAorKysg Yi9rcml0YS91aS9pbnB1dC9raXNfYWx0ZXJuYXRlX2ludm9jYXRpb25fYWN0aW9uLmNwcApAQCAt NDMsNiArNDMsNyBAQCBLaXNBbHRlcm5hdGVJbnZvY2F0aW9uQWN0aW9uOjpLaXNBbHRlcm5hdGVJ bnZvY2F0aW9uQWN0aW9uKCkKICAgICBzaG9ydGN1dHMuaW5zZXJ0KGkxOG4oIlByaW1hcnkgTW9k ZSIpLCBQcmltYXJ5QWx0ZXJuYXRlTW9kZVNob3J0Y3V0KTsKICAgICBzaG9ydGN1dHMuaW5zZXJ0 KGkxOG4oIlNlY29uZGFyeSBNb2RlIiksIFNlY29uZGFyeUFsdGVybmF0ZU1vZGVTaG9ydGN1dCk7 CiAKKwogICAgIHNob3J0Y3V0cy5pbnNlcnQoaTE4bigiUGljayBGb3JlZ3JvdW5kIENvbG9yIGZy b20gQ3VycmVudCBMYXllciIpLCBQaWNrQ29sb3JGZ0xheWVyTW9kZVNob3J0Y3V0KTsKICAgICBz aG9ydGN1dHMuaW5zZXJ0KGkxOG4oIlBpY2sgQmFja2dyb3VuZCBDb2xvciBmcm9tIEN1cnJlbnQg TGF5ZXIiKSwgUGlja0NvbG9yQmdMYXllck1vZGVTaG9ydGN1dCk7CiAKZGlmZiAtLWdpdCBhL2ty aXRhL3VpL2lucHV0L2tpc19pbnB1dF9tYW5hZ2VyLmNwcCBiL2tyaXRhL3VpL2lucHV0L2tpc19p bnB1dF9tYW5hZ2VyLmNwcAppbmRleCAwOGEwNTZlLi41ZTNmMDYwIDEwMDY0NAotLS0gYS9rcml0 YS91aS9pbnB1dC9raXNfaW5wdXRfbWFuYWdlci5jcHAKKysrIGIva3JpdGEvdWkvaW5wdXQva2lz X2lucHV0X21hbmFnZXIuY3BwCkBAIC05ODcsNCArOTg3LDMgQEAgdm9pZCBLaXNJbnB1dE1hbmFn ZXI6OnByb2ZpbGVDaGFuZ2VkKCkKICAgICAgICAga1dhcm5pbmcoKSA8PCAiTm8gSW5wdXQgUHJv ZmlsZSBGb3VuZDogY2FudmFzIGludGVyYWN0aW9uIHdpbGwgYmUgaW1wb3NzaWJsZSI7CiAgICAg fQogfQotCmRpZmYgLS1naXQgYS9rcml0YS91aS90b29sL2tpc19kZWxlZ2F0ZWRfdG9vbC5oIGIv a3JpdGEvdWkvdG9vbC9raXNfZGVsZWdhdGVkX3Rvb2wuaAppbmRleCAyMGM2OTBhLi44ZTdlZjMx IDEwMDY0NAotLS0gYS9rcml0YS91aS90b29sL2tpc19kZWxlZ2F0ZWRfdG9vbC5oCisrKyBiL2ty aXRhL3VpL3Rvb2wva2lzX2RlbGVnYXRlZF90b29sLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJs aWM6CiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoK ICAgICBRU2NvcGVkUG9pbnRlcjxEZWxlZ2F0ZVRvb2w+IG1fbG9jYWxUb29sOwogfTsKIApkaWZm IC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbC5jYyBiL2tyaXRhL3VpL3Rvb2wva2lzX3Rv b2wuY2MKaW5kZXggZjMzNjI0MS4uODZiMzVmMSAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9r aXNfdG9vbC5jYworKysgYi9rcml0YS91aS90b29sL2tpc190b29sLmNjCkBAIC03ODksNiArNzg5 LDE0IEBAIGJvb2wgS2lzVG9vbDo6c2VsZWN0aW9uRWRpdGFibGUoKQogICAgIHJldHVybiBlZGl0 YWJsZTsKIH0KIAordm9pZCBLaXNUb29sOjpsaXN0ZW5Ub01vZGlmaWVycyhib29sIGxpc3RlbikK K3sKK30KKworYm9vbCBLaXNUb29sOjpsaXN0ZW5pbmdUb01vZGlmaWVycygpCit7CisgICAgcmV0 dXJuIGZhbHNlOworfQogCiAjaW5jbHVkZSAia2lzX3Rvb2wubW9jIgogCmRpZmYgLS1naXQgYS9r cml0YS91aS90b29sL2tpc190b29sLmggYi9rcml0YS91aS90b29sL2tpc190b29sLmgKaW5kZXgg YjRmZTkwOC4uZDExZjZhMiAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbC5oCisr KyBiL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2wuaApAQCAtMjYxLDYgKzI2MSwxNyBAQCBwcm90ZWN0 ZWQ6CiAKICAgICB2aXJ0dWFsIFFXaWRnZXQqIGNyZWF0ZU9wdGlvbldpZGdldCgpOwogCisgICAg LyoqCisgICAgICogVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyB0b29sIHdpbGwgY2hhbmdlIGl0 cyBiZWhhdmlvciB3aGVuCisgICAgICogbW9kaWZpZXIga2V5cyBhcmUgcHJlc3NlZAorICAgICAq LworICAgIHZpcnR1YWwgYm9vbCBsaXN0ZW5pbmdUb01vZGlmaWVycygpOworICAgIC8qKgorICAg ICAqIFJlcXVlc3QgdGhhdCB0aGlzIHRvb2wgbm8gbG9uZ2VyIGxpc3RlbiB0byBtb2RpZmllciBr ZXlzCisgICAgICogKFJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3QgaXMgb3B0aW9uYWwpCisgICAg ICovCisgICAgdmlydHVhbCB2b2lkIGxpc3RlblRvTW9kaWZpZXJzKGJvb2wgbGlzdGVuKTsKKwog cHJvdGVjdGVkOgogICAgIEtpc0ltYWdlV1NQIGltYWdlKCkgY29uc3Q7CiAgICAgUUN1cnNvciBj dXJzb3IoKSBjb25zdDsKQEAgLTM1NSw0ICszNjYsMyBAQCBwcml2YXRlOgogCiAKICNlbmRpZiAv LyBLSVNfVE9PTF9IXwotCmRpZmYgLS1naXQgYS9rcml0YS91aS90b29sL2tpc190b29sX3BhaW50 LmggYi9rcml0YS91aS90b29sL2tpc190b29sX3BhaW50LmgKaW5kZXggNGM0MmVmOS4uMzZkNjM2 OCAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wYWludC5oCisrKyBiL2tyaXRh L3VpL3Rvb2wva2lzX3Rvb2xfcGFpbnQuaApAQCAtNzEsNiArNzEsMTAgQEAgcHVibGljOgogICAg IHZpcnR1YWwgfktpc1Rvb2xQYWludCgpOwogICAgIHZpcnR1YWwgaW50IGZsYWdzKCkgY29uc3Q7 CiAKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VQcmVzc0V2ZW50KEtvUG9pbnRlckV2ZW50ICpldmVu dCk7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KEtvUG9pbnRlckV2ZW50ICpl dmVudCk7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZUV2ZW50KEtvUG9pbnRlckV2ZW50ICpl dmVudCk7CisKIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TW9kZShUb29sTW9kZSBtb2RlKTsK QEAgLTg5LDEwICs5Myw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY29udGludWVB bHRlcm5hdGVBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50LCBBbHRlcm5hdGVBY3Rpb24gYWN0 aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRlckV2ZW50 ICpldmVudCwgQWx0ZXJuYXRlQWN0aW9uIGFjdGlvbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbW91 c2VQcmVzc0V2ZW50KEtvUG9pbnRlckV2ZW50ICpldmVudCk7Ci0gICAgdmlydHVhbCB2b2lkIG1v dXNlUmVsZWFzZUV2ZW50KEtvUG9pbnRlckV2ZW50ICpldmVudCk7Ci0gICAgdmlydHVhbCB2b2lk IG1vdXNlTW92ZUV2ZW50KEtvUG9pbnRlckV2ZW50ICpldmVudCk7Ci0KICAgICB2aXJ0dWFsIHZv aWQgcmVxdWVzdFVwZGF0ZU91dGxpbmUoY29uc3QgUVBvaW50RiAmb3V0bGluZURvY1BvaW50LCBj b25zdCBLb1BvaW50ZXJFdmVudCAqZXZlbnQpOwogCiAgICAgLyoqIElmIHRoZSBwYWludCB0b29s IHN1cHBvcnQgb3V0bGluZSBsaWtlIGJydXNoZXMsIHNldCB0byB0cnVlLgpkaWZmIC0tZ2l0IGEv a3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wb2x5bGluZV9iYXNlLmNwcCBiL2tyaXRhL3VpL3Rvb2wv a2lzX3Rvb2xfcG9seWxpbmVfYmFzZS5jcHAKaW5kZXggNjA3MWY3Ni4uMGMyZWVmNiAxMDA2NDQK LS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wb2x5bGluZV9iYXNlLmNwcAorKysgYi9rcml0 YS91aS90b29sL2tpc190b29sX3BvbHlsaW5lX2Jhc2UuY3BwCkBAIC0yNTYsNCArMjU2LDE2IEBA IFFSZWN0RiBLaXNUb29sUG9seWxpbmVCYXNlOjpkcmFnQm91bmRpbmdSZWN0KCkKICAgICByZXR1 cm4gcmVjdDsKIH0KIAorCit2b2lkIEtpc1Rvb2xQb2x5bGluZUJhc2U6Omxpc3RlblRvTW9kaWZp ZXJzKGJvb2wgbGlzdGVuKQoreworICAgIFFfVU5VU0VEKGxpc3RlbikKK30KKworYm9vbCBLaXNU b29sUG9seWxpbmVCYXNlOjpsaXN0ZW5pbmdUb01vZGlmaWVycygpCit7CisgICAgLy9OZXZlciBn cmFiIG1vZGlmaWVyIGtleXMKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKICNpbmNsdWRlICJraXNf dG9vbF9wb2x5bGluZV9iYXNlLm1vYyIKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rv b2xfcG9seWxpbmVfYmFzZS5oIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wb2x5bGluZV9iYXNl LmgKaW5kZXggZjY4MWZkOC4uZWE2NDkwYyAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNf dG9vbF9wb2x5bGluZV9iYXNlLmgKKysrIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wb2x5bGlu ZV9iYXNlLmgKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBhY3RpdmF0ZShU b29sQWN0aXZhdGlvbiBhY3RpdmF0aW9uLCBjb25zdCBRU2V0PEtvU2hhcGUqPiAmc2hhcGVzKTsK ICAgICB2b2lkIGRlYWN0aXZhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGlzdGVuVG9Nb2RpZmll cnMoYm9vbCBsaXN0ZW4pOworICAgIHZpcnR1YWwgYm9vbCBsaXN0ZW5pbmdUb01vZGlmaWVycygp OwogICAgIHZvaWQgcmVxdWVzdFN0cm9rZUVuZCgpOwogICAgIHZvaWQgcmVxdWVzdFN0cm9rZUNh bmNlbGxhdGlvbigpOwogCkBAIC02NSw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgUVBvaW50RiBt X2RyYWdTdGFydDsKICAgICBRUG9pbnRGIG1fZHJhZ0VuZDsKICAgICBib29sIG1fZHJhZ2dpbmc7 CisgICAgYm9vbCBtX2xpc3RlblRvTW9kaWZpZXJzOwogICAgIHZRUG9pbnRGIG1fcG9pbnRzOwog ICAgIFRvb2xUeXBlIG1fdHlwZTsKICAgICBib29sIG1fY2xvc2VTbmFwcGluZ0FjdGl2YXRlZDsK ZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcmVjdGFuZ2xlX2Jhc2UuY3BwIGIv a3JpdGEvdWkvdG9vbC9raXNfdG9vbF9yZWN0YW5nbGVfYmFzZS5jcHAKaW5kZXggOGUwOTFkMC4u NDg0NmZmOCAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9yZWN0YW5nbGVfYmFz ZS5jcHAKKysrIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9yZWN0YW5nbGVfYmFzZS5jcHAKQEAg LTM2LDYgKzM2LDcgQEAgS2lzVG9vbFJlY3RhbmdsZUJhc2U6Oktpc1Rvb2xSZWN0YW5nbGVCYXNl KEtvQ2FudmFzQmFzZSAqIGNhbnZhcywgS2lzVG9vbFJlY3RhbmcKICAgICAsIG1faXNSYXRpb0Zv cmNlZChmYWxzZSkKICAgICAsIG1faXNXaWR0aEZvcmNlZChmYWxzZSkKICAgICAsIG1faXNIZWln aHRGb3JjZWQoZmFsc2UpCisgICAgLCBtX2xpc3RlblRvTW9kaWZpZXJzKHRydWUpCiAgICAgLCBt X2ZvcmNlZFJhdGlvKDEuMCkKICAgICAsIG1fZm9yY2VkV2lkdGgoMCkKICAgICAsIG1fZm9yY2Vk SGVpZ2h0KDApCkBAIC00NiwyMiArNDcsMjIgQEAgS2lzVG9vbFJlY3RhbmdsZUJhc2U6Oktpc1Rv b2xSZWN0YW5nbGVCYXNlKEtvQ2FudmFzQmFzZSAqIGNhbnZhcywgS2lzVG9vbFJlY3RhbmcKIFFM aXN0PFFQb2ludGVyPFFXaWRnZXQ+ID4gS2lzVG9vbFJlY3RhbmdsZUJhc2U6OmNyZWF0ZU9wdGlv bldpZGdldHMoKQogewogICBRTGlzdDxRUG9pbnRlcjxRV2lkZ2V0PiA+IHdpZGdldHNMaXN0ID0g S29Ub29sQmFzZTo6Y3JlYXRlT3B0aW9uV2lkZ2V0cygpOwotICAKKwogICB3aWRnZXRzTGlzdC5h cHBlbmQobmV3IEtpc1JlY3RhbmdsZUNvbnN0cmFpbnRXaWRnZXQoMCwgdGhpcykpOwotICAKKwog ICByZXR1cm4gd2lkZ2V0c0xpc3Q7CiB9CiAKLXZvaWQgS2lzVG9vbFJlY3RhbmdsZUJhc2U6OmNv bnN0cmFpbnRzQ2hhbmdlZChib29sIGZvcmNlUmF0aW8sIGJvb2wgZm9yY2VXaWR0aCwgYm9vbCBm b3JjZUhlaWdodCwgZmxvYXQgcmF0aW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIAordm9p ZCBLaXNUb29sUmVjdGFuZ2xlQmFzZTo6Y29uc3RyYWludHNDaGFuZ2VkKGJvb2wgZm9yY2VSYXRp bywgYm9vbCBmb3JjZVdpZHRoLCBib29sIGZvcmNlSGVpZ2h0LCBmbG9hdCByYXRpbywgZmxvYXQg d2lkdGgsIGZsb2F0IGhlaWdodCkKIHsKICAgbV9pc1dpZHRoRm9yY2VkID0gZm9yY2VXaWR0aDsK ICAgbV9pc0hlaWdodEZvcmNlZCA9IGZvcmNlSGVpZ2h0OwogICBtX2lzUmF0aW9Gb3JjZWQgPSBm b3JjZVJhdGlvOwotICAKKwogICBtX2ZvcmNlZEhlaWdodCA9IGhlaWdodDsKICAgbV9mb3JjZWRX aWR0aCA9IHdpZHRoOwogICBtX2ZvcmNlZFJhdGlvID0gcmF0aW87Ci0gIAorCiAgIC8vIEF2b2lk IGRpdmlzaW9uIGJ5IHplcm8gaW4gc2l6ZSBjYWxjdWxhdGlvbnMKICAgaWYgKHJhdGlvIDwgMC4w MDAxZikgbV9pc1JhdGlvRm9yY2VkID0gZmFsc2U7CiB9CkBAIC04MSw2ICs4MiwxNSBAQCB2b2lk IEtpc1Rvb2xSZWN0YW5nbGVCYXNlOjpkZWFjdGl2YXRlKCkKICAgICBLaXNUb29sU2hhcGU6OmRl YWN0aXZhdGUoKTsKIH0KIAordm9pZCBLaXNUb29sUmVjdGFuZ2xlQmFzZTo6bGlzdGVuVG9Nb2Rp ZmllcnMoYm9vbCBsaXN0ZW4pCit7CisgICAgbV9saXN0ZW5Ub01vZGlmaWVycyA9IGxpc3RlbjsK K30KK2Jvb2wgS2lzVG9vbFJlY3RhbmdsZUJhc2U6Omxpc3RlbmluZ1RvTW9kaWZpZXJzKCkKK3sK KyAgICByZXR1cm4gbV9saXN0ZW5Ub01vZGlmaWVyczsKK30KKwogdm9pZCBLaXNUb29sUmVjdGFu Z2xlQmFzZTo6YmVnaW5QcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVudCkKIHsKICAg ICBpZiAoKG1fdHlwZSA9PSBQQUlOVCAmJiAoIW5vZGVFZGl0YWJsZSgpIHx8IG5vZGVQYWludEFi aWxpdHkoKSA9PSBOT05FKSkgfHwKQEAgLTkzLDIxICsxMDMsMjEgQEAgdm9pZCBLaXNUb29sUmVj dGFuZ2xlQmFzZTo6YmVnaW5QcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVudCkKIAog ICAgIFFQb2ludEYgcG9zID0gY29udmVydFRvUGl4ZWxDb29yZChldmVudCk7CiAgICAgbV9kcmFn U3RhcnQgPSBtX2RyYWdDZW50ZXIgPSBwb3M7Ci0gICAgCisKICAgICBRU2l6ZUYgYXJlYSA9IFFT aXplRigwLDApOwotICAgIAorCiAgICAgYXBwbHlDb25zdHJhaW50cyhhcmVhLCBmYWxzZSk7Ci0g ICAgCisKICAgICBtX2RyYWdFbmQuc2V0WChtX2RyYWdTdGFydC54KCkgKyBhcmVhLndpZHRoKCkp OwogICAgIG1fZHJhZ0VuZC5zZXRZKG1fZHJhZ1N0YXJ0LnkoKSArIGFyZWEuaGVpZ2h0KCkpOwot ICAgIAorCiAgICAgZXZlbnQtPmFjY2VwdCgpOwogfQogCiBib29sIEtpc1Rvb2xSZWN0YW5nbGVC YXNlOjppc0ZpeGVkU2l6ZSgpIHsKICAgaWYgKG1faXNXaWR0aEZvcmNlZCAmJiBtX2lzSGVpZ2h0 Rm9yY2VkKSByZXR1cm4gdHJ1ZTsKICAgaWYgKG1faXNSYXRpb0ZvcmNlZCAmJiAobV9pc1dpZHRo Rm9yY2VkIHx8IG1faXNIZWlnaHRGb3JjZWQpKSByZXR1cm4gdHJ1ZTsKLSAgCisKICAgcmV0dXJu IGZhbHNlOwogfQogCkBAIC0xMTgsMTIgKzEyOCwxMiBAQCB2b2lkIEtpc1Rvb2xSZWN0YW5nbGVC YXNlOjphcHBseUNvbnN0cmFpbnRzKFFTaXplRiAmYXJlYSwgYm9vbCBvdmVycmlkZVJhdGlvKSB7 CiAgIGlmIChtX2lzSGVpZ2h0Rm9yY2VkKSB7CiAgICAgYXJlYS5zZXRIZWlnaHQobV9mb3JjZWRI ZWlnaHQpOwogICB9Ci0gIAorCiAgIGlmIChtX2lzSGVpZ2h0Rm9yY2VkICYmIG1faXNXaWR0aEZv cmNlZCkgcmV0dXJuOwotICAKKwogICBpZiAobV9pc1JhdGlvRm9yY2VkIHx8IG92ZXJyaWRlUmF0 aW8pIHsKICAgICBmbG9hdCByYXRpbyA9IG1faXNSYXRpb0ZvcmNlZCA/IG1fZm9yY2VkUmF0aW8g OiAxLjBmOwotICAgIAorCiAgICAgaWYgKG1faXNXaWR0aEZvcmNlZCkgewogICAgICAgYXJlYS5z ZXRIZWlnaHQoYXJlYS53aWR0aCgpIC8gcmF0aW8pOwogICAgIH0gZWxzZSB7CkBAIC0xMzYsMTIg KzE0NiwxMiBAQCB2b2lkIEtpc1Rvb2xSZWN0YW5nbGVCYXNlOjpjb250aW51ZVByaW1hcnlBY3Rp b24oS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogewogICAgIENIRUNLX01PREVfU0FOSVRZX09SX1JF VFVSTihLaXNUb29sOjpQQUlOVF9NT0RFKTsKIAotICAgIGJvb2wgY29uc3RyYWludFRvZ2dsZSA9 IChldmVudC0+bW9kaWZpZXJzKCkgJiBRdDo6U2hpZnRNb2RpZmllcik7Ci0gICAgYm9vbCB0cmFu c2xhdGVNb2RlID0gKGV2ZW50LT5tb2RpZmllcnMoKSAmIFF0OjpBbHRNb2RpZmllcik7Ci0gICAg Ym9vbCBleHBhbmRGcm9tQ2VudGVyID0gKGV2ZW50LT5tb2RpZmllcnMoKSAmIFF0OjpDb250cm9s TW9kaWZpZXIpOwotICAgIAorICAgIGJvb2wgY29uc3RyYWludFRvZ2dsZSA9IChldmVudC0+bW9k aWZpZXJzKCkgJiBRdDo6U2hpZnRNb2RpZmllcikgJiYgbV9saXN0ZW5Ub01vZGlmaWVyczsKKyAg ICBib29sIHRyYW5zbGF0ZU1vZGUgPSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OkFsdE1vZGlm aWVyKSAmJiBtX2xpc3RlblRvTW9kaWZpZXJzOworICAgIGJvb2wgZXhwYW5kRnJvbUNlbnRlciA9 IChldmVudC0+bW9kaWZpZXJzKCkgJiBRdDo6Q29udHJvbE1vZGlmaWVyKSAmJiBtX2xpc3RlblRv TW9kaWZpZXJzOworCiAgICAgYm9vbCBmaXhlZFNpemUgPSBpc0ZpeGVkU2l6ZSgpICYmICFjb25z dHJhaW50VG9nZ2xlOwotICAgIAorCiAgICAgUVBvaW50RiBwb3MgPSBjb252ZXJ0VG9QaXhlbENv b3JkKGV2ZW50KTsKIAogICAgIGlmIChmaXhlZFNpemUpIHsKQEAgLTE1MSwyMCArMTYxLDIwIEBA IHZvaWQgS2lzVG9vbFJlY3RhbmdsZUJhc2U6OmNvbnRpbnVlUHJpbWFyeUFjdGlvbihLb1BvaW50 ZXJFdmVudCAqZXZlbnQpCiAgICAgICBtX2RyYWdTdGFydCArPSB0cmFuczsKICAgICAgIG1fZHJh Z0VuZCArPSB0cmFuczsKICAgICB9Ci0gICAgCisKICAgICBRUG9pbnRGIGRpYWcgPSBwb3MgLSBt X2RyYWdTdGFydDsKICAgICBRU2l6ZUYgYXJlYSA9IFFTaXplRihmYWJzKGRpYWcueCgpKSwgZmFi cyhkaWFnLnkoKSkpOwotICAgIAorCiAgICAgYm9vbCBvdmVycmlkZVJhdGlvID0gY29uc3RyYWlu dFRvZ2dsZSAmJiAhKG1faXNIZWlnaHRGb3JjZWQgfHwgbV9pc1dpZHRoRm9yY2VkIHx8IG1faXNS YXRpb0ZvcmNlZCk7CiAgICAgaWYgKCFjb25zdHJhaW50VG9nZ2xlIHx8IG92ZXJyaWRlUmF0aW8p IHsKICAgICAgIGFwcGx5Q29uc3RyYWludHMoYXJlYSwgb3ZlcnJpZGVSYXRpbyk7CiAgICAgfQot ICAgIAorCiAgICAgZGlhZyA9IFFQb2ludEYoCiAgICAgICAoZGlhZy54KCkgPCAwKSA/IC1hcmVh LndpZHRoKCkgOiBhcmVhLndpZHRoKCksCiAgICAgICAoZGlhZy55KCkgPCAwKSA/IC1hcmVhLmhl aWdodCgpIDogYXJlYS5oZWlnaHQoKQogICAgICk7Ci0gICAgCisKICAgICAvLyByZXNpemUgYXJv dW5kIGNlbnRlciBwb2ludD8KICAgICBpZiAoZXhwYW5kRnJvbUNlbnRlciAmJiAhZml4ZWRTaXpl KSB7CiAgICAgICBtX2RyYWdTdGFydCA9IG1fZHJhZ0NlbnRlciAtIGRpYWcgLyAyOwpAQCAtMTcy LDcgKzE4Miw3IEBAIHZvaWQgS2lzVG9vbFJlY3RhbmdsZUJhc2U6OmNvbnRpbnVlUHJpbWFyeUFj dGlvbihLb1BvaW50ZXJFdmVudCAqZXZlbnQpCiAgICAgfSBlbHNlIHsKICAgICAgIG1fZHJhZ0Vu ZCA9IG1fZHJhZ1N0YXJ0ICsgZGlhZzsKICAgICB9Ci0gICAgCisKICAgICB1cGRhdGVBcmVhKCk7 CiAKICAgICBtX2RyYWdDZW50ZXIgPSBRUG9pbnRGKChtX2RyYWdTdGFydC54KCkgKyBtX2RyYWdF bmQueCgpKSAvIDIsCkBAIC0yMzUsNyArMjQ1LDcgQEAgdm9pZCBLaXNUb29sUmVjdGFuZ2xlQmFz ZTo6dXBkYXRlQXJlYSgpIHsKICAgICBib3VuZCA9IGJvdW5kLm5vcm1hbGl6ZWQoKTsKIAogICAg IGNhbnZhcygpLT51cGRhdGVDYW52YXMoY29udmVydFRvUHQoYm91bmQpLmFkanVzdGVkKC0xMDAs IC0xMDAsICsyMDAsICsyMDApKTsKLSAgICAKKwogICAgIGVtaXQgcmVjdGFuZ2xlQ2hhbmdlZChi b3VuZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcmVjdGFuZ2xl X2Jhc2UuaCBiL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcmVjdGFuZ2xlX2Jhc2UuaAppbmRleCBh MGI0NzBjLi5mYmQ4ZWE3IDEwMDY0NAotLS0gYS9rcml0YS91aS90b29sL2tpc190b29sX3JlY3Rh bmdsZV9iYXNlLmgKKysrIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9yZWN0YW5nbGVfYmFzZS5o CkBAIC0yOSwxMCArMjksMTAgQEAgUV9PQkpFQ1QKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgcmVj dGFuZ2xlQ2hhbmdlZChjb25zdCBRUmVjdEYgJm5ld1JlY3QpOwotICAgIAorCiBwdWJsaWMgUV9T TE9UUzoKICAgICB2b2lkIGNvbnN0cmFpbnRzQ2hhbmdlZChib29sIGZvcmNlUmF0aW8sIGJvb2wg Zm9yY2VXaWR0aCwgYm9vbCBmb3JjZUhlaWdodCwgZmxvYXQgcmF0aW8sIGZsb2F0IHdpZHRoLCBm bG9hdCBoZWlnaHQpOwotICAgIAorCiBwdWJsaWM6CiAgICAgZW51bSBUb29sVHlwZSB7CiAgICAg ICAgIFBBSU5ULApAQCAtNDcsOSArNDcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk IHBhaW50KFFQYWludGVyJiBnYywgY29uc3QgS29WaWV3Q29udmVydGVyICZjb252ZXJ0ZXIpOwog ICAgIHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRlKCk7CisgICAgdm9pZCBsaXN0ZW5Ub01vZGlmaWVy cyhib29sIGxpc3Rlbik7CisgICAgYm9vbCBsaXN0ZW5pbmdUb01vZGlmaWVycygpOwogCiAgICAg UUxpc3Q8UVBvaW50ZXI8UVdpZGdldD4gPiBjcmVhdGVPcHRpb25XaWRnZXRzKCk7Ci0gICAgCisK IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUmVjdChjb25zdCBRUmVjdEYmKT0w OwogCkBAIC01NywxNCArNTksMTUgQEAgcHJvdGVjdGVkOgogICAgIFFQb2ludEYgbV9kcmFnU3Rh cnQ7CiAgICAgUVBvaW50RiBtX2RyYWdFbmQ7CiAgICAgVG9vbFR5cGUgbV90eXBlOwotICAgIAor CiAgICAgYm9vbCBtX2lzUmF0aW9Gb3JjZWQ7CiAgICAgYm9vbCBtX2lzV2lkdGhGb3JjZWQ7CiAg ICAgYm9vbCBtX2lzSGVpZ2h0Rm9yY2VkOworICAgIGJvb2wgbV9saXN0ZW5Ub01vZGlmaWVyczsK ICAgICBmbG9hdCBtX2ZvcmNlZFJhdGlvOwogICAgIGZsb2F0IG1fZm9yY2VkV2lkdGg7CiAgICAg ZmxvYXQgbV9mb3JjZWRIZWlnaHQ7Ci0gICAgCisKICAgICBib29sIGlzRml4ZWRTaXplKCk7CiAg ICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKFFTaXplRiYgYXJlYSwgYm9vbCBvdmVycmlkZVJhdGlv KTsKIApkaWZmIC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9zZWxlY3RfYmFzZS5jcHAg Yi9rcml0YS91aS90b29sL2tpc190b29sX3NlbGVjdF9iYXNlLmNwcApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNDA3NzlhZC4uMDAwMDAwMAotLS0gYS9rcml0YS91aS90b29sL2tpc190 b29sX3NlbGVjdF9iYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotICogQ29weXJpZ2h0IChDKSAyMDA5 IEJvdWRld2lqbiBSZW1wdCA8Ym91ZEB2YWxkeWFzLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImtpc190b29sX3Nl bGVjdF9iYXNlLmgiCi0KLSNpbmNsdWRlICJraXNfY3Vyc29yLmgiCi0jaW5jbHVkZSAia2lzX2Nh bnZhczIuaCIKLSNpbmNsdWRlICJraXNfc2VsZWN0aW9uX29wdGlvbnMuaCIKLQotCi1LaXNUb29s U2VsZWN0QmFzZTo6S2lzVG9vbFNlbGVjdEJhc2UoS29DYW52YXNCYXNlICpjYW52YXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUN1cnNvciYgY3Vyc29yLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJndpbmRv d1RpdGxlKQotICAgIDogS2lzVG9vbChjYW52YXMsIGN1cnNvciksCi0gICAgICBtX3dpZGdldEhl bHBlcih3aW5kb3dUaXRsZSksCi0gICAgICBtX3NlbGVjdGlvbkFjdGlvbihTRUxFQ1RJT05fUkVQ TEFDRSkKLXsKLSAgICBjb25uZWN0KCZtX3dpZGdldEhlbHBlciwgU0lHTkFMKHNlbGVjdGlvbkFj dGlvbkNoYW5nZWQoaW50KSksIHRoaXMsIFNMT1Qoc2V0U2VsZWN0aW9uQWN0aW9uKGludCkpKTsK LX0KLQotU2VsZWN0aW9uTW9kZSBLaXNUb29sU2VsZWN0QmFzZTo6c2VsZWN0aW9uTW9kZSgpIGNv bnN0Ci17Ci0gICAgcmV0dXJuIG1fd2lkZ2V0SGVscGVyLnNlbGVjdGlvbk1vZGUoKTsKLX0KLQot U2VsZWN0aW9uQWN0aW9uIEtpc1Rvb2xTZWxlY3RCYXNlOjpzZWxlY3Rpb25BY3Rpb24oKSBjb25z dAotewotICAgIHJldHVybiBtX3NlbGVjdGlvbkFjdGlvbjsKLX0KLQotdm9pZCBLaXNUb29sU2Vs ZWN0QmFzZTo6c2V0U2VsZWN0aW9uQWN0aW9uKGludCBuZXdTZWxlY3Rpb25BY3Rpb24pCi17Ci0g ICAgaWYobmV3U2VsZWN0aW9uQWN0aW9uID49IFNFTEVDVElPTl9SRVBMQUNFICYmIG5ld1NlbGVj dGlvbkFjdGlvbiA8PSBTRUxFQ1RJT05fSU5URVJTRUNUICYmIG1fc2VsZWN0aW9uQWN0aW9uICE9 IG5ld1NlbGVjdGlvbkFjdGlvbikKLSAgICB7Ci0gICAgICAgIGlmKG1fd2lkZ2V0SGVscGVyLm9w dGlvbldpZGdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3dpZGdldEhlbHBlci5zbG90 U2V0QWN0aW9uKG5ld1NlbGVjdGlvbkFjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zZWxl Y3Rpb25BY3Rpb24gPSAoU2VsZWN0aW9uQWN0aW9uKW5ld1NlbGVjdGlvbkFjdGlvbjsKLSAgICAg ICAgZW1pdCBzZWxlY3Rpb25BY3Rpb25DaGFuZ2VkKCk7Ci0gICAgfQotfQotCi1RV2lkZ2V0KiBL aXNUb29sU2VsZWN0QmFzZTo6Y3JlYXRlT3B0aW9uV2lkZ2V0KCkKLXsKLSAgICBLaXNDYW52YXMy KiBjYW52YXMgPSBkeW5hbWljX2Nhc3Q8S2lzQ2FudmFzMio+KHRoaXMtPmNhbnZhcygpKTsKLSAg ICBRX0FTU0VSVChjYW52YXMpOwotCi0gICAgbV93aWRnZXRIZWxwZXIuY3JlYXRlT3B0aW9uV2lk Z2V0KGNhbnZhcywgdGhpcy0+dG9vbElkKCkpOwotICAgIHJldHVybiBtX3dpZGdldEhlbHBlci5v cHRpb25XaWRnZXQoKTsKLX0KLQotS2lzU2VsZWN0aW9uT3B0aW9ucyogS2lzVG9vbFNlbGVjdEJh c2U6OnNlbGVjdGlvbk9wdGlvbldpZGdldCgpCi17Ci0gICAgcmV0dXJuIG1fd2lkZ2V0SGVscGVy Lm9wdGlvbldpZGdldCgpOwotfQotCi12b2lkIEtpc1Rvb2xTZWxlY3RCYXNlOjprZXlQcmVzc0V2 ZW50KFFLZXlFdmVudCAqZXZlbnQpCi17Ci0gICAgaWYgKCFtX3dpZGdldEhlbHBlci5wcm9jZXNz S2V5UHJlc3NFdmVudChldmVudCkpIHsKLSAgICAgICAgS2lzVG9vbDo6a2V5UHJlc3NFdmVudChl dmVudCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9zZWxl Y3RfYmFzZS5oIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9zZWxlY3RfYmFzZS5oCmluZGV4IDUw MGQ2ZGQuLjE0MzQ1OWYgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfc2VsZWN0 X2Jhc2UuaAorKysgYi9rcml0YS91aS90b29sL2tpc190b29sX3NlbGVjdF9iYXNlLmgKQEAgLTEs NSArMSw2IEBACiAvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKICAqIENv cHlyaWdodCAoQykgMjAwOSBCb3VkZXdpam4gUmVtcHQgPGJvdWRAdmFsZHlhcy5vcmc+CisgKiBD b3B5cmlnaHQgKEMpIDIwMTUgTWljaGFlbCBBYnJhaGFtcyA8bWlhYnJhaGFAZ21haWwuY29tPgog ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwzOSArMjEsMjA1IEBACiAjaWZuZGVmIEtJU1RPT0xT RUxFQ1RCQVNFX0gKICNkZWZpbmUgS0lTVE9PTFNFTEVDVEJBU0VfSAogCisjaW5jbHVkZSAiS29Q b2ludGVyRXZlbnQuaCIKICNpbmNsdWRlICJraXNfdG9vbC5oIgorI2luY2x1ZGUgImtpc19jYW52 YXMyLmgiCisjaW5jbHVkZSAia2lzX3NlbGVjdGlvbi5oIgorI2luY2x1ZGUgImtpc19zZWxlY3Rp b25fb3B0aW9ucy5oIgogI2luY2x1ZGUgImtpc19zZWxlY3Rpb25fdG9vbF9jb25maWdfd2lkZ2V0 X2hlbHBlci5oIgorI2luY2x1ZGUgIktpc1ZpZXdNYW5hZ2VyLmgiCisjaW5jbHVkZSAia2lzX3Nl bGVjdGlvbl9tYW5hZ2VyLmgiCisjaW5jbHVkZSA8Yml0c2V0PgogCi1jbGFzcyBLaXNTZWxlY3Rp b25PcHRpb25zOwogCisjZGVmaW5lIFFNT0RfQklOQVJZKCkgUVN0cmluZyhzdGQ6OmJpdHNldDxz aXplb2YoaW50KSAqIDg+KGV2ZW50LT5tb2RpZmllcnMoKSkudG9fc3RyaW5nKCkuY19zdHIoKSkK IAotY2xhc3MgS1JJVEFVSV9FWFBPUlQgS2lzVG9vbFNlbGVjdEJhc2UgOiBwdWJsaWMgS2lzVG9v bAorLyoqIAorICogVGhpcyBpcyBhIGJhc2ljIHRlbXBsYXRlIHRvIGNyZWF0ZSBzZWxlY3Rpb24g dG9vbHMgZnJvbSBiYXNpYyBwYXRoIGJhc2VkIGRyYXdpbmcgdG9vbHMuIAorICogVGhlIHRlbXBs YXRlIG92ZXJyaWRlcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFsdGVybmF0ZSBhY3Rpb25zIGNv cnJlY3RseS4gCisgKiBNb2RpZmllciBrZXlzIGFyZSBvdmVycmlkZGVuIHdpdGggdGhlIGZvbGxv d2luZyBiZWhhdmlvcjogCisgKiAKKyAqIFNoaWZ0OiBhZGQgdG8gc2VsZWN0aW9uCisgKiBBbHQ6 IHN1YnRyYWN0IGZyb20gc2VsZWN0aW9uCisgKiBTaGlmdCtBbHQ6IGludGVyc2VjdCBjdXJyZW50 IHNlbGVjdGlvbgorICogQ3RybDogcmVwbGFjZSBzZWxlY3Rpb24KKyAqCisgKiBDZXJ0YWluIHRv b2xzIGFsc28gdXNlIG1vZGlmaWVyIGtleXMgdG8gYWx0ZXIgdGhlaXIgYmVoYXZpb3IsIGUuZy4g Zm9yY2luZyBzcXVhcmUgcHJvcG9ydGlvbnMgd2l0aCB0aGUgcmVjdGFuZ2xlIHRvb2wuIAorICog VGhlIHRlbXBsYXRlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBydWxlcyBmb3IgZm9yd2FyZGluZyBr ZXlzOiAKKyAqIDEpIEFueSBtb2RpZmllciBrZXlzIGhlbGQgKndoZW4gdGhlIHRvb2wgaXMgZmly c3QgYWN0aXZhdGVkKiB3aWxsIGRldGVybWluZSB0aGUgbmV3IHNlbGVjdGlvbiBtZXRob2QuICAK KyAqIDIpIElmIHRoZSB1bmRlcmx5aW5nIHRvb2wgKmRvZXMgbm90IHRha2UgbW9kaWZpZXIga2V5 cyosIHByZXNzaW5nIG1vZGlmaWVyIGtleXMgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cm9rZSB3aWxs IGNoYW5nZSB0aGUgc2VsZWN0aW9uIG1ldGhvZC4gIFRoaXMgYXBwbGllcyB0byB0aGUgbGFzc28g dG9vbCBhbmQgcG9seWdvbiB0b29sLiAKKyAqIDMpIElmIHRoZSB1bmRlcmx5aW5nIHRvb2wgKnRh a2VzIG1vZGlmaWVyIGtleXMsKiB0aGV5IHdpbGwgYWx3YXlzIGJlIGZvcndhcmRlZCB0byB0aGUg dW5kZXJseWluZyB0b29sLCBhbmQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgc2Vs ZWN0aW9uIG1ldGhvZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3Ryb2tlLgorICogCisgKi8gCisKKwor c3RhdGljIFNlbGVjdGlvbkFjdGlvbiBzZWxlY3Rpb25Nb2RpZmllck1hcChRdDo6S2V5Ym9hcmRN b2RpZmllcnMgbSkgeworICAgIFNlbGVjdGlvbkFjdGlvbiBuZXdBY3Rpb24gPSBTRUxFQ1RJT05f REVGQVVMVDsKKyAgICBpZiAobSAmIFF0OjpDb250cm9sTW9kaWZpZXIpIHsKKyAgICAgICAgbmV3 QWN0aW9uID0gU0VMRUNUSU9OX1JFUExBQ0U7CisgICAgfSBlbHNlIGlmICgobSAmIFF0OjpTaGlm dE1vZGlmaWVyKSAmJiAobSAmIFF0OjpBbHRNb2RpZmllcikpIHsKKyAgICAgICAgbmV3QWN0aW9u ID0gU0VMRUNUSU9OX0lOVEVSU0VDVDsKKyAgICB9IGVsc2UgaWYgKG0gJiBRdDo6U2hpZnRNb2Rp ZmllcikgeworICAgICAgICBuZXdBY3Rpb24gPSBTRUxFQ1RJT05fQUREOworICAgIH0gZWxzZSBp ZiAobSAmIFF0OjpBbHRNb2RpZmllcikgeworICAgICAgICBuZXdBY3Rpb24gPSBTRUxFQ1RJT05f U1VCVFJBQ1Q7CisgICAgfQorICAgIHJldHVybiBuZXdBY3Rpb247Cit9CisKK3RlbXBsYXRlIDxj bGFzcyBCYXNlQ2xhc3M+CisgICAgY2xhc3MgU2VsZWN0aW9uQWN0aW9uSGFuZGxlciA6IHB1Ymxp YyBCYXNlQ2xhc3MKIHsKLSAgICBRX09CSkVDVAotICAgIFFfUFJPUEVSVFkoaW50IHNlbGVjdGlv bkFjdGlvbiBSRUFEIHNlbGVjdGlvbkFjdGlvbiBXUklURSBzZXRTZWxlY3Rpb25BY3Rpb24gTk9U SUZZIHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQpOworCiBwdWJsaWM6Ci0gICAgS2lzVG9vbFNlbGVj dEJhc2UoS29DYW52YXNCYXNlICpjYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUN1cnNvciYgY3Vyc29yLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJndp bmRvd1RpdGxlKTsKIAotICAgIFFXaWRnZXQqIGNyZWF0ZU9wdGlvbldpZGdldCgpOwotICAgIEtp c1NlbGVjdGlvbk9wdGlvbnMqIHNlbGVjdGlvbk9wdGlvbldpZGdldCgpOworICAgIFNlbGVjdGlv bkFjdGlvbkhhbmRsZXIoS29DYW52YXNCYXNlKiBjYW52YXMsIGNvbnN0IFFTdHJpbmcgdG9vbE5h bWUpCisgICAgICAgIDpCYXNlQ2xhc3MoY2FudmFzKSwKKyAgICAgICAgIG1fd2lkZ2V0SGVscGVy KHRvb2xOYW1lKSwKKyAgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uKFNFTEVDVElPTl9ERUZBVUxU KSwKKyAgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uQWx0ZXJuYXRlKFNFTEVDVElPTl9ERUZBVUxU KQorICAgIHsKKyAgICB9CiAKLSAgICBTZWxlY3Rpb25Nb2RlIHNlbGVjdGlvbk1vZGUoKSBjb25z dDsKLSAgICBTZWxlY3Rpb25BY3Rpb24gc2VsZWN0aW9uQWN0aW9uKCkgY29uc3Q7CisgICAgU2Vs ZWN0aW9uQWN0aW9uSGFuZGxlcihLb0NhbnZhc0Jhc2UqIGNhbnZhcywgY29uc3QgUUN1cnNvciBj dXJzb3IsIGNvbnN0IFFTdHJpbmcgdG9vbE5hbWUpCisgICAgICAgIDpCYXNlQ2xhc3MoY2FudmFz LCBjdXJzb3IpLAorICAgICAgICAgbV93aWRnZXRIZWxwZXIodG9vbE5hbWUpLAorICAgICAgICAg bV9zZWxlY3Rpb25BY3Rpb24oU0VMRUNUSU9OX0RFRkFVTFQpLAorICAgICAgICAgbV9zZWxlY3Rp b25BY3Rpb25BbHRlcm5hdGUoU0VMRUNUSU9OX0RFRkFVTFQpCisgICAgeworICAgIH0KIAotcHVi bGljIFFfU0xPVFM6Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25BY3Rpb24oaW50IG5ld1NlbGVjdGlv bkFjdGlvbik7CisgICAgU2VsZWN0aW9uQWN0aW9uSGFuZGxlcihLb0NhbnZhc0Jhc2UqIGNhbnZh cywgUUN1cnNvciBjdXJzb3IsIFFTdHJpbmcgdG9vbE5hbWUsIEtpc1Rvb2wgKmRlbGVnYXRlVG9v bCkKKyAgICAgICAgOkJhc2VDbGFzcyhjYW52YXMsIGN1cnNvciwgZGVsZWdhdGVUb29sKSwKKyAg ICAgICAgIG1fd2lkZ2V0SGVscGVyKHRvb2xOYW1lKSwKKyAgICAgICAgIG1fc2VsZWN0aW9uQWN0 aW9uKFNFTEVDVElPTl9ERUZBVUxUKSwKKyAgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uQWx0ZXJu YXRlKFNFTEVDVElPTl9ERUZBVUxUKQorICAgIHsKKyAgICB9CiAKLVFfU0lHTkFMUzoKLSAgICB2 b2lkIHNlbGVjdGlvbkFjdGlvbkNoYW5nZWQoKTsKKyAgICBRV2lkZ2V0KiBjcmVhdGVPcHRpb25X aWRnZXQoKQorICAgIHsKKyAgICAgICAgS2lzQ2FudmFzMiogY2FudmFzID0gZHluYW1pY19jYXN0 PEtpc0NhbnZhczIqPih0aGlzLT5jYW52YXMoKSk7CisgICAgICAgIFFfQVNTRVJUKGNhbnZhcyk7 CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQg KmV2ZW50KTsKKyAgICAgICAgbV93aWRnZXRIZWxwZXIuY3JlYXRlT3B0aW9uV2lkZ2V0KGNhbnZh cywgdGhpcy0+dG9vbElkKCkpOworICAgICAgICBtX3dpZGdldEhlbHBlci5vcHRpb25XaWRnZXQo KS0+ZGlzYWJsZUFudGlBbGlhc1NlbGVjdGlvbk9wdGlvbigpOworICAgICAgICByZXR1cm4gbV93 aWRnZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCk7CisgICAgfQogCi1wcml2YXRlOgorICAgIHZvaWQg a2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3dp ZGdldEhlbHBlci5wcm9jZXNzS2V5UHJlc3NFdmVudChldmVudCkpIHsKKyAgICAgICAgICAgIEJh c2VDbGFzczo6a2V5UHJlc3NFdmVudChldmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBT ZWxlY3Rpb25Nb2RlIHNlbGVjdGlvbk1vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu IG1fd2lkZ2V0SGVscGVyLnNlbGVjdGlvbk1vZGUoKTsKKyAgICB9CisKKyAgICBTZWxlY3Rpb25B Y3Rpb24gc2VsZWN0aW9uQWN0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChhbHRlcm5h dGVTZWxlY3Rpb25BY3Rpb24oKSA9PSBTRUxFQ1RJT05fREVGQVVMVCkgeworICAgICAgICAgICAg cmV0dXJuIG1fd2lkZ2V0SGVscGVyLnNlbGVjdGlvbkFjdGlvbigpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiBhbHRlcm5hdGVTZWxlY3Rpb25BY3Rpb24oKTsKKyAgICB9CisKKyAgICBib29s IGFudGlBbGlhc1NlbGVjdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWRn ZXRIZWxwZXIub3B0aW9uV2lkZ2V0KCktPmFudGlBbGlhc1NlbGVjdGlvbigpOworICAgIH0KKwor ICAgIFNlbGVjdGlvbkFjdGlvbiBhbHRlcm5hdGVTZWxlY3Rpb25BY3Rpb24oKSBjb25zdAorICAg IHsKKyAgICAgIHJldHVybiBtX3NlbGVjdGlvbkFjdGlvbkFsdGVybmF0ZTsKKyAgICB9CisKKyAg ICBLaXNTZWxlY3Rpb25PcHRpb25zKiBzZWxlY3Rpb25PcHRpb25XaWRnZXQoKQorICAgIHsKKyAg ICAgICAgcmV0dXJuIG1fd2lkZ2V0SGVscGVyLm9wdGlvbldpZGdldCgpOworICAgIH0KKworICAg IHZpcnR1YWwgdm9pZCBzZXRBbHRlcm5hdGVTZWxlY3Rpb25BY3Rpb24oU2VsZWN0aW9uQWN0aW9u IGFjdGlvbikKKyAgICB7CisgICAgICAgIG1fc2VsZWN0aW9uQWN0aW9uQWx0ZXJuYXRlID0gYWN0 aW9uOworICBrRGVidWcoKSA8PCAiQ2hhbmdpbmcgdG8gc2VsZWN0aW9uIGFjdGlvbiIgPDwgbV9z ZWxlY3Rpb25BY3Rpb25BbHRlcm5hdGU7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZUFsdGVy bmF0ZUFjdGlvbihLaXNUb29sOjpBbHRlcm5hdGVBY3Rpb24gYWN0aW9uKQorICAgIHsKKyAgICAg ICAgUV9VTlVTRUQoYWN0aW9uKTsKKyAgICAgICAgQmFzZUNsYXNzOjphY3RpdmF0ZVByaW1hcnlB Y3Rpb24oKTsKKyAgICB9CisKKyAgICB2b2lkIGRlYWN0aXZhdGVBbHRlcm5hdGVBY3Rpb24oS2lz VG9vbDo6QWx0ZXJuYXRlQWN0aW9uIGFjdGlvbikKKyAgICB7CisgICAgICAgIFFfVU5VU0VEKGFj dGlvbik7CisgICAgICAgIEJhc2VDbGFzczo6ZGVhY3RpdmF0ZVByaW1hcnlBY3Rpb24oKTsKKyAg ICB9CisKKyAgICB2b2lkIGJlZ2luQWx0ZXJuYXRlQWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVu dCwgS2lzVG9vbDo6QWx0ZXJuYXRlQWN0aW9uIGFjdGlvbikgeworICAgICAgICBRX1VOVVNFRChh Y3Rpb24pOworICAgICAgICBiZWdpblByaW1hcnlBY3Rpb24oZXZlbnQpOworICAgIH0KKworICAg IHZvaWQgY29udGludWVBbHRlcm5hdGVBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50LCBLaXNU b29sOjpBbHRlcm5hdGVBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgIFFfVU5VU0VEKGFjdGlvbik7 CisgICAgICAgIGNvbnRpbnVlUHJpbWFyeUFjdGlvbihldmVudCk7CisgICAgfQorCisgICAgdm9p ZCBlbmRBbHRlcm5hdGVBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50LCBLaXNUb29sOjpBbHRl cm5hdGVBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgIFFfVU5VU0VEKGFjdGlvbik7CisgICAgICAg IGVuZFByaW1hcnlBY3Rpb24oZXZlbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdp blByaW1hcnlBY3Rpb24oS29Qb2ludGVyRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAga2V5 c0F0U3RhcnQgPSBldmVudC0+bW9kaWZpZXJzKCk7CisKKyAgICAgICAgc2V0QWx0ZXJuYXRlU2Vs ZWN0aW9uQWN0aW9uKHNlbGVjdGlvbk1vZGlmaWVyTWFwKGtleXNBdFN0YXJ0KSk7CisgIGlmIChh bHRlcm5hdGVTZWxlY3Rpb25BY3Rpb24oKSAhPSBTRUxFQ1RJT05fREVGQVVMVCkgeworICAgIEJh c2VDbGFzczo6bGlzdGVuVG9Nb2RpZmllcnMoZmFsc2UpOworICB9CisgICAgICAgIEJhc2VDbGFz czo6YmVnaW5QcmltYXJ5QWN0aW9uKGV2ZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg Y29udGludWVQcmltYXJ5QWN0aW9uKEtvUG9pbnRlckV2ZW50ICpldmVudCkKKyAgICB7CisgICAg ICAgIC8vSWYgbW9kaWZpZXIga2V5cyBoYXZlIGNoYW5nZWQsIHRlbGwgdGhlIGJhc2UgdG9vbCBp dCBjYW4gc3RhcnQgY2FwdHVyaW5nIG1vZGlmaWVycworICAgICAgICBpZiAoKGtleXNBdFN0YXJ0 ICE9IGV2ZW50LT5tb2RpZmllcnMoKSkgJiYgIUJhc2VDbGFzczo6bGlzdGVuaW5nVG9Nb2RpZmll cnMoKSkgeworICAgICAgICAgICAgICAgIEJhc2VDbGFzczo6bGlzdGVuVG9Nb2RpZmllcnModHJ1 ZSk7CisgICAgICAgIH0KKworICAgICAgICAvL0Fsd2F5cyBkZWZlciB0byB0aGUgYmFzZSBjbGFz cyBpZiBpdCBzaWduYWxzIGl0IGlzIGNhcHR1cmluZyBtb2RpZmllciBrZXlzCisgICAgICAgIGlm ICghQmFzZUNsYXNzOjpsaXN0ZW5pbmdUb01vZGlmaWVycygpKSB7CisgICAgICAgICAgICBzZXRB bHRlcm5hdGVTZWxlY3Rpb25BY3Rpb24oc2VsZWN0aW9uTW9kaWZpZXJNYXAoZXZlbnQtPm1vZGlm aWVycygpKSk7CisgICAgICAgIH0KKworICAgICAgICBCYXNlQ2xhc3M6OmNvbnRpbnVlUHJpbWFy eUFjdGlvbihldmVudCk7CisgICAgfQorCisgICAgdm9pZCBlbmRQcmltYXJ5QWN0aW9uKEtvUG9p bnRlckV2ZW50ICpldmVudCkKKyAgICB7CisgICAgICAgIGtleXNBdFN0YXJ0ID0gUXQ6Ok5vTW9k aWZpZXI7IC8vcmVzZXQgdGhpcyB3aXRoIGVhY2ggYWN0aW9uCisgICAgICAgIEJhc2VDbGFzczo6 ZW5kUHJpbWFyeUFjdGlvbihldmVudCk7CisgICAgfQorCisKK3Byb3RlY3RlZDoKKyAgICB1c2lu ZyBCYXNlQ2xhc3M6OmNhbnZhczsKICAgICBLaXNTZWxlY3Rpb25Ub29sQ29uZmlnV2lkZ2V0SGVs cGVyIG1fd2lkZ2V0SGVscGVyOwogICAgIFNlbGVjdGlvbkFjdGlvbiBtX3NlbGVjdGlvbkFjdGlv bjsKKyAgICBTZWxlY3Rpb25BY3Rpb24gbV9zZWxlY3Rpb25BY3Rpb25BbHRlcm5hdGU7CisKK3By aXZhdGU6CisgICAgUXQ6OktleWJvYXJkTW9kaWZpZXJzIGtleXNBdFN0YXJ0OwogfTsKIAorCit0 eXBlZGVmIFNlbGVjdGlvbkFjdGlvbkhhbmRsZXI8S2lzVG9vbD4gS2lzVG9vbFNlbGVjdEJhc2U7 CisKKwogI2VuZGlmIC8vIEtJU1RPT0xTRUxFQ1RCQVNFX0gKZGlmZiAtLWdpdCBhL2xpYnMvYmFz aWNmbGFrZXMvdG9vbHMvS29DcmVhdGVQYXRoVG9vbC5jcHAgYi9saWJzL2Jhc2ljZmxha2VzL3Rv b2xzL0tvQ3JlYXRlUGF0aFRvb2wuY3BwCmluZGV4IDFhYmFiZjcuLjE2NTE5YWYgMTAwNjQ0Ci0t LSBhL2xpYnMvYmFzaWNmbGFrZXMvdG9vbHMvS29DcmVhdGVQYXRoVG9vbC5jcHAKKysrIGIvbGli cy9iYXNpY2ZsYWtlcy90b29scy9Lb0NyZWF0ZVBhdGhUb29sLmNwcApAQCAtNTEsNyArNTEsNyBA QCBLb0NyZWF0ZVBhdGhUb29sOjp+S29DcmVhdGVQYXRoVG9vbCgpCiB2b2lkIEtvQ3JlYXRlUGF0 aFRvb2w6OnBhaW50KFFQYWludGVyICZwYWludGVyLCBjb25zdCBLb1ZpZXdDb252ZXJ0ZXIgJmNv bnZlcnRlcikKIHsKICAgICBRX0QoS29DcmVhdGVQYXRoVG9vbCk7Ci0gICAgaWYgKGQtPnNoYXBl KSB7CisgICAgaWYgKHBhdGhTdGFydGVkKCkpIHsKICAgICAgICAgS29TaGFwZVN0cm9rZSAqc3Ry b2tlKGNyZWF0ZVN0cm9rZSgpKTsKICAgICAgICAgaWYgKHN0cm9rZSkgewogICAgICAgICAgICAg ZC0+c2hhcGUtPnNldFN0cm9rZShzdHJva2UpOwpAQCAtNzgsMTEgKzc4LDEwIEBAIHZvaWQgS29D cmVhdGVQYXRoVG9vbDo6cGFpbnQoUVBhaW50ZXIgJnBhaW50ZXIsIGNvbnN0IEtvVmlld0NvbnZl cnRlciAmY29udmVydGVyCiAgICAgICAgICAgICBkLT5hY3RpdmVQb2ludC0+cGFpbnQocGFpbnRl ciwgZC0+aGFuZGxlUmFkaXVzLCBwYWludEZsYWdzLCBvbmx5UGFpbnRBY3RpdmVQb2ludHMpOwog ICAgICAgICB9CiAKLSAgICAgICAgLy8gcGFpbnQgdGhlIGZpcnN0IHBvaW50CiAKICAgICAgICAg Ly8gY2hlY2sgaWYgd2UgaGF2ZSB0byBjb2xvciB0aGUgZmlyc3QgcG9pbnQKICAgICAgICAgaWYg KGQtPm1vdXNlT3ZlckZpcnN0UG9pbnQpCi0gICAgICAgICAgICBwYWludGVyLnNldEJydXNoKFF0 OjpyZWQpOyAgIC8vIC8vVE9ETyBtYWtlIGNvbmZpZ3VyYWJsZQorICAgICAgICAgICAgcGFpbnRl ci5zZXRCcnVzaChRdDo6cmVkKTsgICAgIC8vVE9ETyBtYWtlIGNvbmZpZ3VyYWJsZQogICAgICAg ICBlbHNlCiAgICAgICAgICAgICBwYWludGVyLnNldEJydXNoKFF0Ojp3aGl0ZSk7ICAgLy9UT0RP IG1ha2UgY29uZmlndXJhYmxlCiAKQEAgLTEyOCwxNiArMTI3LDE2IEBAIHZvaWQgS29DcmVhdGVQ YXRoVG9vbDo6bW91c2VQcmVzc0V2ZW50KEtvUG9pbnRlckV2ZW50ICpldmVudCkKIAogICAgIGNv bnN0IGJvb2wgaXNPdmVyRmlyc3RQb2ludCA9IGQtPnNoYXBlICYmCiAgICAgICAgIGhhbmRsZUdy YWJSZWN0KGQtPmZpcnN0UG9pbnQtPnBvaW50KCkpLmNvbnRhaW5zKGV2ZW50LT5wb2ludCk7Ci0g ICAgY29uc3QgYm9vbCBoYXZlQ2xvc2VNb2RpZmllciA9IGV2ZW50LT5tb2RpZmllcnMoKSAmIFF0 OjpTaGlmdE1vZGlmaWVyOworICAgIGJvb2wgaGF2ZUNsb3NlTW9kaWZpZXIgPSAobGlzdGVuaW5n VG9Nb2RpZmllcnMoKSAmJiAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZpZXIp KTsKIAotICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUXQ6OlJpZ2h0QnV0dG9uIHx8IChldmVu dC0+YnV0dG9uKCkgPT0gUXQ6OkxlZnRCdXR0b24gJiYgaGF2ZUNsb3NlTW9kaWZpZXIgJiYgIWlz T3ZlckZpcnN0UG9pbnQpKSB7CisgICAgaWYgKChldmVudC0+YnV0dG9uKCkgPT0gUXQ6OlJpZ2h0 QnV0dG9uKSB8fCAoKGV2ZW50LT5idXR0b24oKSA9PSBRdDo6TGVmdEJ1dHRvbikgJiYgaGF2ZUNs b3NlTW9kaWZpZXIgJiYgIWlzT3ZlckZpcnN0UG9pbnQpKSB7CiAgICAgICAgIGVuZFBhdGhXaXRo b3V0TGFzdFBvaW50KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBkLT5maW5pc2hB ZnRlclRoaXNQb2ludCA9IGZhbHNlOwogCi0gICAgaWYgKGQtPnNoYXBlKSB7CisgICAgaWYgKHBh dGhTdGFydGVkKCkpIHsKICAgICAgICAgaWYgKGlzT3ZlckZpcnN0UG9pbnQpIHsKICAgICAgICAg ICAgIGQtPmFjdGl2ZVBvaW50LT5zZXRQb2ludChkLT5maXJzdFBvaW50LT5wb2ludCgpKTsKICAg ICAgICAgICAgIGNhbnZhcygpLT51cGRhdGVDYW52YXMoZC0+c2hhcGUtPmJvdW5kaW5nUmVjdCgp KTsKQEAgLTIwNCw2ICsyMDMsMTggQEAgdm9pZCBLb0NyZWF0ZVBhdGhUb29sOjptb3VzZVByZXNz RXZlbnQoS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAgICAgICBkLT5hbmdsZVNuYXBTdHJhdGVn eS0+c2V0U3RhcnRQb2ludChkLT5hY3RpdmVQb2ludC0+cG9pbnQoKSk7CiB9CiAKK2Jvb2wgS29D cmVhdGVQYXRoVG9vbDo6bGlzdGVuaW5nVG9Nb2RpZmllcnMoKQoreworICBRX0QoS29DcmVhdGVQ YXRoVG9vbCk7CisgIHJldHVybiBkLT5saXN0ZW5pbmdUb01vZGlmaWVyczsKK30KKworYm9vbCBL b0NyZWF0ZVBhdGhUb29sOjpwYXRoU3RhcnRlZCgpCit7CisgIFFfRChLb0NyZWF0ZVBhdGhUb29s KTsKKyAgcmV0dXJuICgoYm9vbCkgZC0+c2hhcGUpOworfQorCiB2b2lkIEtvQ3JlYXRlUGF0aFRv b2w6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChLb1BvaW50ZXJFdmVudCAqZXZlbnQpCiB7CiAgICAg Ly9yZW1vdmUgaGFuZGxlCkBAIC0yMjksNyArMjQwLDcgQEAgdm9pZCBLb0NyZWF0ZVBhdGhUb29s Ojptb3VzZU1vdmVFdmVudChLb1BvaW50ZXJFdmVudCAqZXZlbnQpCiAgICAgICAgIH0KICAgICB9 CiAKLSAgICBpZiAoISBkLT5zaGFwZSkgeworICAgIGlmICghcGF0aFN0YXJ0ZWQoKSkgewogICAg ICAgICBjYW52YXMoKS0+dXBkYXRlQ2FudmFzKGNhbnZhcygpLT5zbmFwR3VpZGUoKS0+Ym91bmRp bmdSZWN0KCkpOwogICAgICAgICBjYW52YXMoKS0+c25hcEd1aWRlKCktPnNuYXAoZXZlbnQtPnBv aW50LCBldmVudC0+bW9kaWZpZXJzKCkpOwogICAgICAgICBjYW52YXMoKS0+dXBkYXRlQ2FudmFz KGNhbnZhcygpLT5zbmFwR3VpZGUoKS0+Ym91bmRpbmdSZWN0KCkpOwpAQCAtMjY4LDYgKzI3OSw3 IEBAIHZvaWQgS29DcmVhdGVQYXRoVG9vbDo6bW91c2VSZWxlYXNlRXZlbnQoS29Qb2ludGVyRXZl bnQgKmV2ZW50KQogICAgIGlmICghIGQtPnNoYXBlIHx8IChldmVudC0+YnV0dG9ucygpICYgUXQ6 OlJpZ2h0QnV0dG9uKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgZC0+bGlzdGVuaW5nVG9Nb2Rp ZmllcnMgPSB0cnVlOyAvLyBBZnRlciB0aGUgZmlyc3QgcHJlc3MtYW5kLXJlbGVhc2UKICAgICBk LT5yZXBhaW50QWN0aXZlUG9pbnQoKTsKICAgICBkLT5wb2ludElzRHJhZ2dlZCA9IGZhbHNlOwog ICAgIEtvUGF0aFBvaW50ICpsYXN0QWN0aXZlUG9pbnQgPSBkLT5hY3RpdmVQb2ludDsKZGlmZiAt LWdpdCBhL2xpYnMvYmFzaWNmbGFrZXMvdG9vbHMvS29DcmVhdGVQYXRoVG9vbC5oIGIvbGlicy9i YXNpY2ZsYWtlcy90b29scy9Lb0NyZWF0ZVBhdGhUb29sLmgKaW5kZXggZWMwM2ViYy4uODhmZDBm OCAxMDA2NDQKLS0tIGEvbGlicy9iYXNpY2ZsYWtlcy90b29scy9Lb0NyZWF0ZVBhdGhUb29sLmgK KysrIGIvbGlicy9iYXNpY2ZsYWtlcy90b29scy9Lb0NyZWF0ZVBhdGhUb29sLmgKQEAgLTYyLDYg KzYyLDE0IEBAIHB1YmxpYzoKICAgICAvLy8gcmVpbXBsZW1lbnRlZAogICAgIHZpcnR1YWwgdm9p ZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZXZlbnQpOwogCisgICAgLy8vIEZvciBiZWhhdmlv ciBhcyBzZWxlY3Rpb24gdG9vbCBhbmQgd2l0aCBpbml0aWFsIHNoaWZ0LWtleQorICAgIHZpcnR1 YWwgYm9vbCBsaXN0ZW5pbmdUb01vZGlmaWVycygpOworCisgICAgLyoqCisgICAgKiBSZXR1cm5z IHRydWUgaWYgcGF0aCBoYXMgYmVlbiBzdGFydGVkCisgICAgKi8KKyAgICBib29sIHBhdGhTdGFy dGVkKCk7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIC8vLyByZWltcGxlbWVudGVkCiAgICAgdmly dHVhbCB2b2lkIGFjdGl2YXRlKFRvb2xBY3RpdmF0aW9uIHRvb2xBY3RpdmF0aW9uLCBjb25zdCBR U2V0PEtvU2hhcGUqPiAmc2hhcGVzKTsKQEAgLTc0LDcgKzgyLDcgQEAgcHJvdGVjdGVkOgogICAg IC8qKgogICAgICAqIEFkZCBwYXRoIHNoYXBlIHRvIGRvY3VtZW50LgogICAgICAqIFRoaXMgbWV0 aG9kIGNhbiBiZSBvdmVycmlkZGVuIGFuZCBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiB0aGUgdG9v bC4gSW4gdGhhdCBjYXNlIHRoZSBzdWJjbGFzcyB0YWtlcyBvd25lcnNoaXAgb2YgcGF0aFNoYXBl LgotICAgICAqIEl0IGdldHMgb25seSBjYWxsZWQsIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBw b2ludHMgaW4gdGhlIHBhdGguCisgICAgICogSXQgZ2V0cyBvbmx5IGNhbGxlZCBpZiB0aGVyZSBh cmUgdHdvIG9yIG1vcmUgcG9pbnRzIGluIHRoZSBwYXRoLgogICAgICAqLwogICAgIHZpcnR1YWwg dm9pZCBhZGRQYXRoU2hhcGUoS29QYXRoU2hhcGUqIHBhdGhTaGFwZSk7CiAKQEAgLTk5LDQgKzEw NywzIEBAIHByaXZhdGU6CiAgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgYW5nbGVT bmFwQ2hhbmdlZChpbnQpKQogfTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJzL2Jhc2ljZmxh a2VzL3Rvb2xzL0tvQ3JlYXRlUGF0aFRvb2xfcC5oIGIvbGlicy9iYXNpY2ZsYWtlcy90b29scy9L b0NyZWF0ZVBhdGhUb29sX3AuaAppbmRleCA0Y2Y5ZTBjLi44MDdjMGM4IDEwMDY0NAotLS0gYS9s aWJzL2Jhc2ljZmxha2VzL3Rvb2xzL0tvQ3JlYXRlUGF0aFRvb2xfcC5oCisrKyBiL2xpYnMvYmFz aWNmbGFrZXMvdG9vbHMvS29DcmVhdGVQYXRoVG9vbF9wLmgKQEAgLTE5OCw2ICsxOTgsNyBAQCBw dWJsaWM6CiAgICAgICAgIHBvaW50SXNEcmFnZ2VkKGZhbHNlKSwKICAgICAgICAgZmluaXNoQWZ0 ZXJUaGlzUG9pbnQoZmFsc2UpLAogICAgICAgICBob3ZlcmVkUG9pbnQoMCksCisgICAgICAgIGxp c3RlbmluZ1RvTW9kaWZpZXJzKGZhbHNlKSwKICAgICAgICAgYW5nbGVTbmFwU3RyYXRlZ3koMCks CiAgICAgICAgIGFuZ2xlU25hcHBpbmdEZWx0YSgxNSksCiAgICAgICAgIGFuZ2xlU25hcFN0YXR1 cyhmYWxzZSksCkBAIC0yMTQsNiArMjE1LDcgQEAgcHVibGljOgogICAgIFBhdGhDb25uZWN0aW9u UG9pbnQgZXhpc3RpbmdTdGFydFBvaW50OyAvLy88IGFuIGV4aXN0aW5nIHBhdGggcG9pbnQgd2Ug c3RhcnRlZCBhIG5ldyBwYXRoIGF0CiAgICAgUGF0aENvbm5lY3Rpb25Qb2ludCBleGlzdGluZ0Vu ZFBvaW50OyAgIC8vLzwgYW4gZXhpc3RpbmcgcGF0aCBwb2ludCB3ZSBmaW5pc2hlZCBhIG5ldyBw YXRoIGF0CiAgICAgS29QYXRoUG9pbnQgKmhvdmVyZWRQb2ludDsgLy8vPCBhbiBleGlzdGluZyBw YXRoIGVuZCBwb2ludCB0aGUgbW91c2UgaXMgaG92ZXJpbmcgb24KKyAgICBib29sIGxpc3Rlbmlu Z1RvTW9kaWZpZXJzOyAvLyAgRmluZSB0dW5lIHdoZW4gdG8gYmVnaW4gcHJvY2Vzc2luZyBtb2Rp ZmllcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN0cm9rZS4KIAogICAgIEFuZ2xlU25hcFN0cmF0 ZWd5ICphbmdsZVNuYXBTdHJhdGVneTsKICAgICBpbnQgYW5nbGVTbmFwcGluZ0RlbHRhOwpAQCAt MjM3LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUVBvaW50RiAmY29udHJvbFBv aW50ID0gYWN0aXZlUG9pbnQtPmNvbnRyb2xQb2ludDIoKTsKICAgICAgICAgcmVjdCA9IHJlY3Qu dW5pdGVkKFFSZWN0Rihwb2ludCwgY29udHJvbFBvaW50KS5ub3JtYWxpemVkKCkpOwogCi0gICAg ICAgIC8vIHdoZW4gcGFpdGluZyB0aGUgZmlzdCBwb2ludCB3ZSB3YW50IHRoZQorICAgICAgICAv LyB3aGVuIHBhaW50aW5nIHRoZSBmaXJzdCBwb2ludCB3ZSB3YW50IHRoZQogICAgICAgICAvLyBm aXJzdCBjb250cm9sIHBvaW50IHRvIGJlIHBhaW50ZWQgYXMgd2VsbAogICAgICAgICBpZiAoaXNG aXJzdFBvaW50KSB7CiAgICAgICAgICAgICBjb25zdCBRUG9pbnRGICZjb250cm9sUG9pbnQgPSBh Y3RpdmVQb2ludC0+Y29udHJvbFBvaW50MSgpOwpAQCAtMjYyLDExICsyNjQsMTEgQEAgcHVibGlj OgogICAgICAgICB1aW50IGdyYWJTZW5zaXRpdml0eSA9IHEtPmdyYWJTZW5zaXRpdml0eSgpOwog ICAgICAgICBxcmVhbCBtYXhEaXN0YW5jZSA9IHEtPmNhbnZhcygpLT52aWV3Q29udmVydGVyKCkt PnZpZXdUb0RvY3VtZW50WChncmFiU2Vuc2l0aXZpdHkpOwogCi0gICAgICAgIGZvcmVhY2goS29T aGFwZSAqc2hhcGUsIHNoYXBlcykgewotICAgICAgICAgICAgS29QYXRoU2hhcGUgKiBwYXRoID0g ZHluYW1pY19jYXN0PEtvUGF0aFNoYXBlKj4oc2hhcGUpOworICAgICAgICBmb3JlYWNoKEtvU2hh cGUgKnMsIHNoYXBlcykgeworICAgICAgICAgICAgS29QYXRoU2hhcGUgKiBwYXRoID0gZHluYW1p Y19jYXN0PEtvUGF0aFNoYXBlKj4ocyk7CiAgICAgICAgICAgICBpZiAoIXBhdGgpCiAgICAgICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLb1BhcmFtZXRlclNoYXBlICpwYXJhbVNo YXBlID0gZHluYW1pY19jYXN0PEtvUGFyYW1ldGVyU2hhcGUqPihzaGFwZSk7CisgICAgICAgICAg ICBLb1BhcmFtZXRlclNoYXBlICpwYXJhbVNoYXBlID0gZHluYW1pY19jYXN0PEtvUGFyYW1ldGVy U2hhcGUqPihzKTsKICAgICAgICAgICAgIGlmIChwYXJhbVNoYXBlICYmIHBhcmFtU2hhcGUtPmlz UGFyYW1ldHJpY1NoYXBlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTQxNSwx MCArNDE3LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBkZWxldGUgc2hhcGU7CiAgICAgICAgIHNo YXBlPTA7Ci0KICAgICAgICAgZXhpc3RpbmdTdGFydFBvaW50ID0gMDsKICAgICAgICAgZXhpc3Rp bmdFbmRQb2ludCA9IDA7CiAgICAgICAgIGhvdmVyZWRQb2ludCA9IDA7CisgICAgICAgIGxpc3Rl bmluZ1RvTW9kaWZpZXJzID0gZmFsc2U7CiAgICAgfQogCiAgICAgdm9pZCBhbmdsZURlbHRhQ2hh bmdlZChpbnQgdmFsdWUpCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCktyaXRhIG1haWxpbmcgbGlzdApraW1hZ2VzaG9wQGtkZS5vcmcKaHR0cHM6Ly9tYWls LmtkZS5vcmcvbWFpbG1hbi9saXN0aW5mby9raW1hZ2VzaG9wCg==