From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Mattia Verga To: git-commits@fedoraproject.org Subject: [rpms/rawtherapee] rawhide: Update to 5.13 (Fedora#2491090) Date: Sun, 02 Aug 2026 11:30:26 GMT Message-ID: <178567022624.1.1221290147857955985.rpms-rawtherapee-20926a6e2522@fedoraproject.org> List-ID: X-Git-Repo: rpms/rawtherapee X-Git-Branch: rawhide X-Git-Rev: 20926a6e25228d457f45349e29edc5a054083624 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcmF3dGhlcmFwZWUK QnJhbmNoIDogcmF3aGlkZQpDb21taXQgOiAyMDkyNmE2ZTI1MjI4ZDQ1N2Y0NTM0OWUyOWVkYzVh MDU0MDgzNjI0CkF1dGhvciA6IE1hdHRpYSBWZXJnYSA8bWF0dGlhLnZlcmdhQHByb3Rvbi5tZT4K RGF0ZSAgIDogMjAyNi0wOC0wMlQxMzoyOTo1MiswMjowMApTdGF0cyAgOiArMTYvLTU4NTcgaW4g NSBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvcmF3 dGhlcmFwZWUvYy8yMDkyNmE2ZTI1MjI4ZDQ1N2Y0NTM0OWUyOWVkYzVhMDU0MDgzNjI0P2JyYW5j aD1yYXdoaWRlCgpMb2c6ClVwZGF0ZSB0byA1LjEzIChGZWRvcmEjMjQ5MTA5MCkKCi0tLQpkaWZm IC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYTA0OWU0Zi4uZTdjNGFiZSAx MDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0zNSwzICszNSw0IEBA IHJhd3RoZXJhcGVlLTMuMC1hMS50YXIuYnoyCiAvcmF3dGhlcmFwZWUtNS4xMS50YXIueHoKIC9y YXd0aGVyYXBlZS01LjEyLXJjMS50YXIueHoKIC9yYXd0aGVyYXBlZS01LjEyLnRhci54egorL3Jh d3RoZXJhcGVlLTUuMTMudGFyLnh6CgpkaWZmIC0tZ2l0IGEvMDAwMS1GaXgtc3RhdGljLWluaXQt b3JkZXItZmlhc2NvLWNyYXNoZXMucGF0Y2ggYi8wMDAxLUZpeC1zdGF0aWMtaW5pdC1vcmRlci1m aWFzY28tY3Jhc2hlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmNDgz Yy4uMDAwMDAwMAotLS0gYS8wMDAxLUZpeC1zdGF0aWMtaW5pdC1vcmRlci1maWFzY28tY3Jhc2hl cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU4MTAgKzAsMCBAQAotRnJvbSA5Y2U2YTRkZDI5 N2Q0NzA0NGMxNTkzNmM4OWNiMjdmM2Q1Y2Y5NGJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQot RnJvbTogRGFuaWVsIEdhbyA8ZGFuaWVsLmdhby53b3JrQGdtYWlsLmNvbT4KLURhdGU6IFN1biwg MjkgSnVuIDIwMjUgMTU6MDg6NTQgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHN0YXRpYyBp bml0IG9yZGVyIGZpYXNjbyBjcmFzaGVzCi0KLS0gRml4IHJlYWQgYmVmb3JlIGluaXRpYWxpemUg b2Ygb3B0aW9ucy5ydFNldHRpbmdzLnNyZ2IKLS0gVXNlIE1leWVyJ3Mgc2luZ2xldG9uIGZvciBk ZWZhdWx0IGNtcAotLSBHcm91cCBleHRlcm4gdmFyaWFibGVzIGludG8gQXBwIHNpbmdsZXRvbgot LSBGaXggcmVjdXJzaXZlIGluaXQgYW5kIGJ1aWxkIGlzc3VlcwotLSBGaXggQXBwbGUgYnVpbGQK LS0tLQotIHJ0ZW5naW5lL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICB8ICAgMyArLQotIHJ0 ZW5naW5lL0ZUYmxvY2tETi5jYyAgICAgICAgICAgICAgICB8ICAxMyArLQotIHJ0ZW5naW5lL2Ns dXRzdG9yZS5jYyAgICAgICAgICAgICAgICB8ICAgNCArLQotIHJ0ZW5naW5lL2RjcC5jYyAgICAg ICAgICAgICAgICAgICAgICB8ICAgOSArLQotIHJ0ZW5naW5lL2RmbWFuYWdlci5jYyAgICAgICAg ICAgICAgICB8ICAgMiArCi0gcnRlbmdpbmUvZHVhbF9kZW1vc2FpY19SVC5jYyAgICAgICAgIHwg ICAxICsKLSBydGVuZ2luZS9mZm1hbmFnZXIuY2MgICAgICAgICAgICAgICAgfCAgIDIgKwotIHJ0 ZW5naW5lL2ljY3N0b3JlLmNjICAgICAgICAgICAgICAgICB8ICAgMiArCi0gcnRlbmdpbmUvaW1h Z2Vpby5jYyAgICAgICAgICAgICAgICAgIHwgICAyICstCi0gcnRlbmdpbmUvaW1wcm9jY29vcmRp bmF0b3IuY2MgICAgICAgIHwgICA5ICstCi0gcnRlbmdpbmUvaXB3YXZlbGV0LmNjICAgICAgICAg ICAgICAgIHwgICA1ICstCi0gcnRlbmdpbmUvcGl4ZWxzaGlmdC5jYyAgICAgICAgICAgICAgIHwg ICAyICsKLSBydGVuZ2luZS9wcm9jcGFyYW1zLmNjICAgICAgICAgICAgICAgfCAgMTggKystCi0g cnRlbmdpbmUvcHJvZmlsZXN0b3JlLmNjICAgICAgICAgICAgIHwgICA3ICstCi0gcnRlbmdpbmUv cmF3aW1hZ2Vzb3VyY2UuY2MgICAgICAgICAgIHwgICAyICsKLSBydGVuZ2luZS9ydGFwcC5jYyAg ICAgICAgICAgICAgICAgICAgfCAgNTcgKysrKysrKysKLSBydGVuZ2luZS9ydGFwcC5oICAgICAg ICAgICAgICAgICAgICAgfCAgODEgKysrKysrKysrKysrCi0gcnRlbmdpbmUvc2ltcGxlcHJvY2Vz cy5jYyAgICAgICAgICAgIHwgICAxICsKLSBydGd1aS9hZGp1c3Rlci5jYyAgICAgICAgICAgICAg ICAgICAgfCAgIDQgKy0KLSBydGd1aS9iYXRjaHF1ZXVlLmNjICAgICAgICAgICAgICAgICAgfCAg MjUgKystLQotIHJ0Z3VpL2JhdGNocXVldWVlbnRyeS5jYyAgICAgICAgICAgICB8ICAgMSArCi0g cnRndWkvYmF0Y2hxdWV1ZXBhbmVsLmNjICAgICAgICAgICAgIHwgIDE1ICsrLQotIHJ0Z3VpL2Jh dGNodG9vbHBhbmVsY29vcmQuY2MgICAgICAgICB8ICAgMiArCi0gcnRndWkvYmF5ZXJwcmVwcm9j ZXNzLmNjICAgICAgICAgICAgIHwgICAzICstCi0gcnRndWkvYmF5ZXJwcm9jZXNzLmNjICAgICAg ICAgICAgICAgIHwgICAzICstCi0gcnRndWkvYmF5ZXJyYXdleHBvc3VyZS5jYyAgICAgICAgICAg IHwgICAzICstCi0gcnRndWkvYmxhY2t3aGl0ZS5jYyAgICAgICAgICAgICAgICAgIHwgICAxICsK LSBydGd1aS9icWVudHJ5dXBkYXRlci5jYyAgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL2Nh Y2hlbWFuYWdlci5jYyAgICAgICAgICAgICAgICB8ICAgNyArLQotIHJ0Z3VpL2NvbG9yYXBwZWFy YW5jZS5jYyAgICAgICAgICAgICB8ICAgMiArCi0gcnRndWkvY29sb3J0b25pbmcuY2MgICAgICAg ICAgICAgICAgIHwgICAyICsKLSBydGd1aS9jb250cm9sc3BvdHBhbmVsLmNjICAgICAgICAgICAg fCAgIDYgKy0KLSBydGd1aS9jcm9wLmNjICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0K LSBydGd1aS9jcm9wd2luZG93LmNjICAgICAgICAgICAgICAgICAgfCAgMTQgKy0KLSBydGd1aS9j dXJ2ZWVkaXRvcmdyb3VwLmNjICAgICAgICAgICAgfCAgIDMgKy0KLSBydGd1aS9jdXJ2ZWVkaXRv cmdyb3VwLmggICAgICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS9kYXJrZnJhbWUuY2MgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwotIHJ0Z3VpL2RlZnJpbmdlLmNjICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCi0gcnRndWkvZGlhZ29uYWxjdXJ2ZWVkaXRvcnN1Ymdyb3VwLmNjIHwgICAxICsK LSBydGd1aS9kaXJicm93c2VyLmNjICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KLSBydGd1aS9k aXJweXJkZW5vaXNlLmNjICAgICAgICAgICAgICAgfCAgIDUgKy0KLSBydGd1aS9lZGl0b3JwYW5l bC5jYyAgICAgICAgICAgICAgICAgfCAgNjYgKysrKysrLS0tLQotIHJ0Z3VpL2VkaXR3aW5kb3cu Y2MgICAgICAgICAgICAgICAgICB8ICAgOSArLQotIHJ0Z3VpL2V4cG9ydHBhbmVsLmNjICAgICAg ICAgICAgICAgICB8ICAgMyArCi0gcnRndWkvZXh0cHJvZy5jYyAgICAgICAgICAgICAgICAgICAg IHwgICA0ICstCi0gcnRndWkvZmlsZWJyb3dzZXIuY2MgICAgICAgICAgICAgICAgIHwgIDI4ICsr LS0KLSBydGd1aS9maWxlYnJvd3NlcmVudHJ5LmNjICAgICAgICAgICAgfCAgIDYgKy0KLSBydGd1 aS9maWxlY2F0YWxvZy5jYyAgICAgICAgICAgICAgICAgfCAxOTAgKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tCi0gcnRndWkvZmlsZXBhbmVsLmNjICAgICAgICAgICAgICAgICAgIHwgIDE0ICst Ci0gcnRndWkvZmlsbW5lZ2F0aXZlLmNjICAgICAgICAgICAgICAgIHwgICAzICsKLSBydGd1aS9m aWxtc2ltdWxhdGlvbi5jYyAgICAgICAgICAgICAgfCAgMTAgKy0KLSBydGd1aS9mbGF0Y3VydmVl ZGl0b3JzdWJncm91cC5jYyAgICAgfCAgIDEgKwotIHJ0Z3VpL2ZsYXRmaWVsZC5jYyAgICAgICAg ICAgICAgICAgICB8ICAgMyArCi0gcnRndWkvZ3VpdXRpbHMuY2MgICAgICAgICAgICAgICAgICAg IHwgICA1ICstCi0gcnRndWkvaGlzdG9ncmFtcGFuZWwuY2MgICAgICAgICAgICAgIHwgIDY2ICsr KysrLS0tLS0KLSBydGd1aS9oc3ZlcXVhbGl6ZXIuY2MgICAgICAgICAgICAgICAgfCAgIDIgKy0K LSBydGd1aS9pY2Nwcm9maWxlY3JlYXRvci5jYyAgICAgICAgICAgfCAgMzMgKystLS0KLSBydGd1 aS9pY21wYW5lbC5jYyAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KLSBydGd1aS9pbWFnZWFy ZWEuY2MgICAgICAgICAgICAgICAgICAgfCAgIDkgKy0KLSBydGd1aS9pbmRjbGlwcGVkcGFuZWwu Y2MgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL2luc3BlY3Rvci5jYyAgICAgICAgICAgICAg ICAgICB8ICAgNCArCi0gcnRndWkvbGFiY3VydmUuY2MgICAgICAgICAgICAgICAgICAgIHwgICAy ICstCi0gcnRndWkvbGFiZ3JpZC5jYyAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBydGd1 aS9sZW5zcHJvZmlsZS5jYyAgICAgICAgICAgICAgICAgfCAgIDMgKy0KLSBydGd1aS9sb2NhbGxh Yi5jYyAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KLSBydGd1aS9sb2NhbGxhYnRvb2xzLmNj ICAgICAgICAgICAgICAgfCAgNjEgKysrKystLS0tCi0gcnRndWkvbG9jYWxsYWJ0b29sczIuY2Mg ICAgICAgICAgICAgIHwgIDgwICsrKysrKy0tLS0tCi0gcnRndWkvbG9ja2FibGVjb2xvcnBpY2tl ci5jYyAgICAgICAgIHwgIDExICstCi0gcnRndWkvbWFpbi1jbGkuY2MgICAgICAgICAgICAgICAg ICAgIHwgIDU3ICsrKystLS0tCi0gcnRndWkvbWFpbi5jYyAgICAgICAgICAgICAgICAgICAgICAg IHwgIDk2ICsrKysrKy0tLS0tLS0tCi0gcnRndWkvbmF2aWdhdG9yLmNjICAgICAgICAgICAgICAg ICAgIHwgIDE3ICstLQotIHJ0Z3VpL29wdGlvbnMuY2MgICAgICAgICAgICAgICAgICAgICB8IDE0 OCArKysrKysrKysrLS0tLS0tLS0tLS0KLSBydGd1aS9vcHRpb25zLmggICAgICAgICAgICAgICAg ICAgICAgfCAgMzQgKystLS0KLSBydGd1aS9wYXJhbXNlZGl0ZWQuY2MgICAgICAgICAgICAgICAg fCAgIDMgKwotIHJ0Z3VpL3Bkc2hhcnBlbmluZy5jYyAgICAgICAgICAgICAgICB8ICAgMSArCi0g cnRndWkvcGxhY2VzYnJvd3Nlci5jYyAgICAgICAgICAgICAgIHwgICAzICsKLSBydGd1aS9wcmVm ZXJlbmNlcy5jYyAgICAgICAgICAgICAgICAgfCAgMjIgKystLQotIHJ0Z3VpL3ByZXByb2Nlc3Mu Y2MgICAgICAgICAgICAgICAgICB8ICAgMyArLQotIHJ0Z3VpL3ByZXZpZXdtb2RlcGFuZWwuY2Mg ICAgICAgICAgICB8ICAgMSArCi0gcnRndWkvcHJldmlld3dpbmRvdy5jYyAgICAgICAgICAgICAg IHwgICAyICsKLSBydGd1aS9wcm9maWxlcGFuZWwuY2MgICAgICAgICAgICAgICAgfCAgMTggKy0t Ci0gcnRndWkvcHJvZmlsZXN0b3JlY29tYm9ib3guY2MgICAgICAgIHwgICAyICstCi0gcnRndWkv cmF3Y2Fjb3JyZWN0aW9uLmNjICAgICAgICAgICAgIHwgICAxICsKLSBydGd1aS9yYXdleHBvc3Vy ZS5jYyAgICAgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL3JlY2VudGJyb3dzZXIuY2MgICAg ICAgICAgICAgICB8ICAgMyArLQotIHJ0Z3VpL3JldGluZXguY2MgICAgICAgICAgICAgICAgICAg ICB8ICAgMiArCi0gcnRndWkvcmdiY3VydmVzLmNjICAgICAgICAgICAgICAgICAgIHwgICAxICsK LSBydGd1aS9ydHNjYWxhYmxlLmNjICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KLSBydGd1aS9y dHdpbmRvdy5jYyAgICAgICAgICAgICAgICAgICAgfCAgNTggKysrKy0tLS0KLSBydGd1aS9zYXZl YXNkbGcuY2MgICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KLSBydGd1aS9zYXZlZm9ybWF0cGFu ZWwuY2MgICAgICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS9zYXZlZm9ybWF0cGFuZWwuaCAgICAg ICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS9zaGFycGVuZWRnZS5jYyAgICAgICAgICAgICAgICAg fCAgIDEgKwotIHJ0Z3VpL3NvdW5kbWFuLmNjICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQot IHJ0Z3VpL3NwbGFzaC5jYyAgICAgICAgICAgICAgICAgICAgICB8ICAxNSArLS0KLSBydGd1aS90 aHJlc2hvbGRhZGp1c3Rlci5jYyAgICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS90aHVtYmJyb3dz ZXJiYXNlLmNjICAgICAgICAgICAgfCAgMTAgKy0KLSBydGd1aS90aHVtYmJyb3dzZXJiYXNlLmgg ICAgICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS90aHVtYmJyb3dzZXJlbnRyeWJhc2UuY2MgICAg ICAgfCAgIDUgKwotIHJ0Z3VpL3RodW1ibmFpbC5jYyAgICAgICAgICAgICAgICAgICB8ICA0OCAr KysrLS0tCi0gcnRndWkvdG9uZWN1cnZlLmNjICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBy dGd1aS90b29scGFuZWxjb29yZC5jYyAgICAgICAgICAgICAgfCAgIDcgKwotIHJ0Z3VpL3ZpYnJh bmNlLmNjICAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkvd2F2ZWxldC5jYyAgICAg ICAgICAgICAgICAgICAgIHwgIDI4ICsrLS0KLSBydGd1aS93aGl0ZWJhbGFuY2UuY2MgICAgICAg ICAgICAgICAgfCAgIDUgKy0KLSBydGd1aS94dHJhbnNwcm9jZXNzLmNjICAgICAgICAgICAgICAg fCAgIDMgKy0KLSBydGd1aS94dHJhbnNyYXdleHBvc3VyZS5jYyAgICAgICAgICAgfCAgIDEgKwot IDEwNyBmaWxlcyBjaGFuZ2VkLCA5NDIgaW5zZXJ0aW9ucygrKSwgNjM3IGRlbGV0aW9ucygtKQot IGNyZWF0ZSBtb2RlIDEwMDY0NCBydGVuZ2luZS9ydGFwcC5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0 NCBydGVuZ2luZS9ydGFwcC5oCi0KLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9DTWFrZUxpc3RzLnR4 dCBiL3J0ZW5naW5lL0NNYWtlTGlzdHMudHh0Ci1pbmRleCA2YjM4OGNlZDQuLjFiYTEzNzZmNCAx MDA2NDQKLS0tLSBhL3J0ZW5naW5lL0NNYWtlTGlzdHMudHh0Ci0rKysgYi9ydGVuZ2luZS9DTWFr ZUxpc3RzLnR4dAotQEAgLTE3NSw2ICsxNzUsNyBAQCBzZXQoUlRFTkdJTkVTT1VSQ0VGSUxFUwot ICAgICByY2RfZGVtb3NhaWMuY2MKLSAgICAgcmVmcmVzaG1hcC5jYwotICAgICBydF9hbGdvLmNj Ci0rICAgIHJ0YXBwLmNjCi0gICAgIHJ0bGVuc2Z1bi5jYwotICAgICBydHRodW1ibmFpbC5jYwot ICAgICBzaG1hcC5jYwotQEAgLTI0NSw3ICsyNDYsNyBAQCB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rv cmllcyhydGVuZ2luZQotICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ci0gKQot ICMgVXBkYXRlSW5mbyBjcmVhdGVzICJydGd1aS92ZXJzaW9uLmgiCi0tdGFyZ2V0X2luY2x1ZGVf ZGlyZWN0b3JpZXMocnRlbmdpbmUgQkVGT1JFIFBSSVZBVEUgJHtDTUFLRV9CSU5BUllfRElSfSkK LSt0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhydGVuZ2luZSBCRUZPUkUgUFVCTElDICR7Q01B S0VfQklOQVJZX0RJUn0pCi0gCi0gdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJ0ZW5naW5lCi0gICAg ICR7RVhQQVRfTElCUkFSSUVTfQotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL0ZUYmxvY2tETi5jYyBi L3J0ZW5naW5lL0ZUYmxvY2tETi5jYwotaW5kZXggNGE3OGUwNjAyLi4yY2QxYzU2YjAgMTAwNjQ0 Ci0tLS0gYS9ydGVuZ2luZS9GVGJsb2NrRE4uY2MKLSsrKyBiL3J0ZW5naW5lL0ZUYmxvY2tETi5j YwotQEAgLTcxMCw2ICs3MTAsNyBAQCBCRU5DSEZVTgotIAotICAgICAgICAgYm9vbCBtZW1vcnlB bGxvY2F0aW9uRmFpbGVkID0gZmFsc2U7Ci0gCi0rICAgICAgICBjb25zdCBhdXRvIHJnYkRlbm9p c2VUaHJlYWRMaW1pdCA9IEFwcDo6Z2V0KCkub3B0aW9ucygpLnJnYkRlbm9pc2VUaHJlYWRMaW1p dDsKLSAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICArK251bVRyaWVzOwotIAotQEAgLTcxOSw3 ICs3MjAsNyBAQCBCRU5DSEZVTgotIAotICAgICAgICAgICAgIGludCBudW10aWxlc19XLCBudW10 aWxlc19ILCB0aWxld2lkdGgsIHRpbGVoZWlnaHQsIHRpbGVXc2tpcCwgdGlsZUhza2lwOwotIAot LSAgICAgICAgICAgIFRpbGVfY2FsYyh0aWxlc2l6ZSwgb3ZlcmxhcCwgKG9wdGlvbnMucmdiRGVu b2lzZVRocmVhZExpbWl0ID09IDAgJiYgIXBvbmRlcikgPyAobnVtVHJpZXMgPT0gMSA/IDAgOiAy KSA6IDIsIGltd2lkdGgsIGltaGVpZ2h0LCBudW10aWxlc19XLCBudW10aWxlc19ILCB0aWxld2lk dGgsIHRpbGVoZWlnaHQsIHRpbGVXc2tpcCwgdGlsZUhza2lwKTsKLSsgICAgICAgICAgICBUaWxl X2NhbGModGlsZXNpemUsIG92ZXJsYXAsIChyZ2JEZW5vaXNlVGhyZWFkTGltaXQgPT0gMCAmJiAh cG9uZGVyKSA/IChudW1UcmllcyA9PSAxID8gMCA6IDIpIDogMiwgaW13aWR0aCwgaW1oZWlnaHQs IG51bXRpbGVzX1csIG51bXRpbGVzX0gsIHRpbGV3aWR0aCwgdGlsZWhlaWdodCwgdGlsZVdza2lw LCB0aWxlSHNraXApOwotICAgICAgICAgICAgIG1lbW9yeUFsbG9jYXRpb25GYWlsZWQgPSBmYWxz ZTsKLSAgICAgICAgICAgICBjb25zdCBpbnQgbnVtdGlsZXMgPSBudW10aWxlc19XICogbnVtdGls ZXNfSDsKLSAKLUBAIC03ODMsOCArNzg0LDggQEAgQkVOQ0hGVU4KLSAgICAgICAgICAgICAvLyBD YWxjdWxhdGUgbnVtYmVyIG9mIHRpbGVzLiBJZiBsZXNzIHRoYW4gb21wX2dldF9tYXhfdGhyZWFk cygpLCB0aGVuIGxpbWl0IG51bV90aHJlYWRzIHRvIG51bWJlciBvZiB0aWxlcwotICAgICAgICAg ICAgIGludCBudW10aHJlYWRzID0gTUlOKG51bXRpbGVzLCBvbXBfZ2V0X21heF90aHJlYWRzKCkp OwotIAotLSAgICAgICAgICAgIGlmIChvcHRpb25zLnJnYkRlbm9pc2VUaHJlYWRMaW1pdCA+IDAp IHsKLS0gICAgICAgICAgICAgICAgbnVtdGhyZWFkcyA9IE1JTihudW10aHJlYWRzLCBvcHRpb25z LnJnYkRlbm9pc2VUaHJlYWRMaW1pdCk7Ci0rICAgICAgICAgICAgaWYgKHJnYkRlbm9pc2VUaHJl YWRMaW1pdCA+IDApIHsKLSsgICAgICAgICAgICAgICAgbnVtdGhyZWFkcyA9IE1JTihudW10aHJl YWRzLCByZ2JEZW5vaXNlVGhyZWFkTGltaXQpOwotICAgICAgICAgICAgIH0KLSAKLSAjaWZkZWYg X09QRU5NUAotQEAgLTc5Nyw4ICs3OTgsOCBAQCBCRU5DSEZVTgotICAgICAgICAgICAgICAgICBv bXBfc2V0X25lc3RlZCh0cnVlKTsKLSAgICAgICAgICAgICB9Ci0gCi0tICAgICAgICAgICAgaWYg KG9wdGlvbnMucmdiRGVub2lzZVRocmVhZExpbWl0ID4gMCkKLS0gICAgICAgICAgICAgICAgd2hp bGUgKGRlbm9pc2VOZXN0ZWRMZXZlbHMgKiBudW10aHJlYWRzID4gb3B0aW9ucy5yZ2JEZW5vaXNl VGhyZWFkTGltaXQpIHsKLSsgICAgICAgICAgICBpZiAocmdiRGVub2lzZVRocmVhZExpbWl0ID4g MCkKLSsgICAgICAgICAgICAgICAgd2hpbGUgKGRlbm9pc2VOZXN0ZWRMZXZlbHMgKiBudW10aHJl YWRzID4gcmdiRGVub2lzZVRocmVhZExpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICBkZW5v aXNlTmVzdGVkTGV2ZWxzLS07Ci0gICAgICAgICAgICAgICAgIH0KLSAKLUBAIC0xNzY0LDcgKzE3 NjUsNyBAQCBCRU5DSEZVTgotICAgICAgICAgICAgICAgICBmZnR3Zl9kZXN0cm95X3BsYW4ocGxh bl9mb3J3YXJkX2Jsb3hbMV0pOwotICAgICAgICAgICAgICAgICBmZnR3Zl9kZXN0cm95X3BsYW4o cGxhbl9iYWNrd2FyZF9ibG94WzFdKTsKLSAgICAgICAgICAgICB9Ci0tICAgICAgICB9IHdoaWxl IChtZW1vcnlBbGxvY2F0aW9uRmFpbGVkICYmIG51bVRyaWVzIDwgMiAmJiAob3B0aW9ucy5yZ2JE ZW5vaXNlVGhyZWFkTGltaXQgPT0gMCkgJiYgIXBvbmRlcik7Ci0rICAgICAgICB9IHdoaWxlICht ZW1vcnlBbGxvY2F0aW9uRmFpbGVkICYmIG51bVRyaWVzIDwgMiAmJiAocmdiRGVub2lzZVRocmVh ZExpbWl0ID09IDApICYmICFwb25kZXIpOwotIAotICAgICAgICAgaWYgKG1lbW9yeUFsbG9jYXRp b25GYWlsZWQpIHsKLSAgICAgICAgICAgICBwcmludGYoInRpbGVkIGRlbm9pc2UgZmFpbGVkIGR1 ZSB0byBpc3VmZmljaWVudCBtZW1vcnkuIE91dHB1dCBpcyBub3QgZGVub2lzZWQhXG4iKTsKLWRp ZmYgLS1naXQgYS9ydGVuZ2luZS9jbHV0c3RvcmUuY2MgYi9ydGVuZ2luZS9jbHV0c3RvcmUuY2MK LWluZGV4IGRiMjIxNmE4Yy4uZmI0OWQyZTFjIDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvY2x1dHN0 b3JlLmNjCi0rKysgYi9ydGVuZ2luZS9jbHV0c3RvcmUuY2MKLUBAIC0zMTksNyArMzE5LDcgQEAg c3RkOjpzaGFyZWRfcHRyPHJ0ZW5naW5lOjpIYWxkQ0xVVD4gcnRlbmdpbmU6OkNMVVRTdG9yZTo6 Z2V0Q2x1dChjb25zdCBHbGliOjp1c3QKLSAKLSAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBmdWxs X2ZpbGVuYW1lID0KLSAgICAgICAgICFHbGliOjpwYXRoX2lzX2Fic29sdXRlKGZpbGVuYW1lKQot LSAgICAgICAgICAgID8gR2xpYjo6dXN0cmluZyhHbGliOjpidWlsZF9maWxlbmFtZShvcHRpb25z LmNsdXRzRGlyLCBmaWxlbmFtZSkpCi0rICAgICAgICAgICAgPyBHbGliOjp1c3RyaW5nKEdsaWI6 OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkub3B0aW9ucygpLmNsdXRzRGlyLCBmaWxlbmFtZSkp Ci0gICAgICAgICAgICAgOiBmaWxlbmFtZTsKLSAKLSAgICAgaWYgKCFjYWNoZS5nZXQoZnVsbF9m aWxlbmFtZSwgcmVzdWx0KSkgewotQEAgLTM0MCw2ICszNDAsNiBAQCB2b2lkIHJ0ZW5naW5lOjpD TFVUU3RvcmU6OmNsZWFyQ2FjaGUoKQotIH0KLSAKLSBydGVuZ2luZTo6Q0xVVFN0b3JlOjpDTFVU U3RvcmUoKSA6Ci0tICAgIGNhY2hlKG9wdGlvbnMuY2x1dENhY2hlU2l6ZSkKLSsgICAgY2FjaGUo QXBwOjpnZXQoKS5vcHRpb25zKCkuY2x1dENhY2hlU2l6ZSkKLSB7Ci0gfQotZGlmZiAtLWdpdCBh L3J0ZW5naW5lL2RjcC5jYyBiL3J0ZW5naW5lL2RjcC5jYwotaW5kZXggM2M2YzU0ZDMzLi40M2M4 ODJmMmUgMTAwNjQ0Ci0tLS0gYS9ydGVuZ2luZS9kY3AuY2MKLSsrKyBiL3J0ZW5naW5lL2RjcC5j YwotQEAgLTIxNTYsMTUgKzIxNTYsMTQgQEAgdm9pZCBEQ1BTdG9yZTo6aW5pdChjb25zdCBHbGli Ojp1c3RyaW5nJiBydF9wcm9maWxlX2RpciwgYm9vbCBsb2FkQWxsKQotIAotICAgICBmaWxlX3N0 ZF9wcm9maWxlcy5jbGVhcigpOwotIAotKyAgICBhdXRvIHByb2ZpbGVfZGlycGF0aCA9IEdsaWI6 OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkub3B0aW9ucygpLnJ0ZGlyLCAiZGNwcHJvZmlsZXMi KTsKLSsKLSAgICAgaWYgKCFsb2FkQWxsKSB7Ci0tICAgICAgICBwcm9maWxlRGlyID0geyBydF9w cm9maWxlX2RpciwgR2xpYjo6YnVpbGRfZmlsZW5hbWUob3B0aW9ucy5ydGRpciwgImRjcHByb2Zp bGVzIikgfTsKLSsgICAgICAgIHByb2ZpbGVEaXIgPSB7IHJ0X3Byb2ZpbGVfZGlyLCBwcm9maWxl X2RpcnBhdGggfTsKLSAgICAgICAgIHJldHVybjsKLSAgICAgfQotIAotLSAgICBzdGQ6OmRlcXVl PEdsaWI6OnVzdHJpbmc+IGRpcnMgPSB7Ci0tICAgICAgICBydF9wcm9maWxlX2RpciwKLS0gICAg ICAgIEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKG9wdGlvbnMucnRkaXIsICJkY3Bwcm9maWxlcyIpCi0t ICAgIH07Ci0rICAgIHN0ZDo6ZGVxdWU8R2xpYjo6dXN0cmluZz4gZGlycyA9IHsgcnRfcHJvZmls ZV9kaXIsIHByb2ZpbGVfZGlycGF0aCB9OwotIAotICAgICB3aGlsZSAoIWRpcnMuZW1wdHkoKSkg ewotICAgICAgICAgLy8gUHJvY2VzcyBkaXJlY3RvcnkKLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9k Zm1hbmFnZXIuY2MgYi9ydGVuZ2luZS9kZm1hbmFnZXIuY2MKLWluZGV4IDg3NTUxN2IyNC4uYzli NTA0OTQwIDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvZGZtYW5hZ2VyLmNjCi0rKysgYi9ydGVuZ2lu ZS9kZm1hbmFnZXIuY2MKLUBAIC01MjgsNiArNTI4LDggQEAgY29uc3Qgc3RkOjp2ZWN0b3I8cnRl bmdpbmU6OmJhZFBpeD4qIHJ0ZW5naW5lOjpERk1hbmFnZXI6OkltcGxlbWVudGF0aW9uOjpnZXRC YWQKLSAKLSBkZkluZm8qIHJ0ZW5naW5lOjpERk1hbmFnZXI6OkltcGxlbWVudGF0aW9uOjphZGRG aWxlSW5mbyhjb25zdCBHbGliOjp1c3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBwb29sKQotIHsKLSsg ICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAg ICBjb25zdCBhdXRvIGV4dCA9IGdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpOwotIAotICAgICBp ZiAoZXh0LmVtcHR5KCkgfHwgIW9wdGlvbnMuaXNfZXh0ZW50aW9uX2VuYWJsZWQoZXh0KSkgewot ZGlmZiAtLWdpdCBhL3J0ZW5naW5lL2R1YWxfZGVtb3NhaWNfUlQuY2MgYi9ydGVuZ2luZS9kdWFs X2RlbW9zYWljX1JULmNjCi1pbmRleCA3NDlkMDdlZDcuLjMwZGRiMWE3OCAxMDA2NDQKLS0tLSBh L3J0ZW5naW5lL2R1YWxfZGVtb3NhaWNfUlQuY2MKLSsrKyBiL3J0ZW5naW5lL2R1YWxfZGVtb3Nh aWNfUlQuY2MKLUBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBydGVuZ2luZQotIAotIHZvaWQg UmF3SW1hZ2VTb3VyY2U6OmR1YWxfZGVtb3NhaWNfUlQoYm9vbCBpc0JheWVyLCBjb25zdCBwcm9j cGFyYW1zOjpSQVdQYXJhbXMgJnJhdywgaW50IHdpbncsIGludCB3aW5oLCBjb25zdCBhcnJheTJE PGZsb2F0PiAmcmF3RGF0YSwgYXJyYXkyRDxmbG9hdD4gJnJlZCwgYXJyYXkyRDxmbG9hdD4gJmdy ZWVuLCBhcnJheTJEPGZsb2F0PiAmYmx1ZSwgZG91YmxlICZjb250cmFzdCwgYm9vbCBhdXRvQ29u dHJhc3QpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25z KCk7Ci0gCi0gICAgIGlmIChjb250cmFzdCA9PSAwLjAgJiYgIWF1dG9Db250cmFzdCkgewotICAg ICAgICAgLy8gY29udHJhc3QgPT0gMC4wIG1lYW5zIG9ubHkgZmlyc3QgZGVtb3NhaWNlciB3aWxs IGJlIHVzZWQKLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9mZm1hbmFnZXIuY2MgYi9ydGVuZ2luZS9m Zm1hbmFnZXIuY2MKLWluZGV4IDk4NGFmMWU4Mi4uODlhYWE4NDdkIDEwMDY0NAotLS0tIGEvcnRl bmdpbmUvZmZtYW5hZ2VyLmNjCi0rKysgYi9ydGVuZ2luZS9mZm1hbmFnZXIuY2MKLUBAIC0zMDIs NiArMzAyLDggQEAgdm9pZCBGRk1hbmFnZXI6OmluaXQoY29uc3QgR2xpYjo6dXN0cmluZyYgcGF0 aG5hbWUpCi0gCi0gZmZJbmZvKiBGRk1hbmFnZXI6OmFkZEZpbGVJbmZvIChjb25zdCBHbGliOjp1 c3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBwb29sKQotIHsKLSsgICAgY29uc3QgT3B0aW9ucyYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICBhdXRvIGV4dCA9IGdldEZpbGVF eHRlbnNpb24oZmlsZW5hbWUpOwotIAotICAgICBpZiAoZXh0LmVtcHR5KCkgfHwgIW9wdGlvbnMu aXNfZXh0ZW50aW9uX2VuYWJsZWQoZXh0KSkgewotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL2ljY3N0 b3JlLmNjIGIvcnRlbmdpbmUvaWNjc3RvcmUuY2MKLWluZGV4IDk2OTYyZTc3Mi4uMjMwMTk5NTk1 IDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvaWNjc3RvcmUuY2MKLSsrKyBiL3J0ZW5naW5lL2ljY3N0 b3JlLmNjCi1AQCAtNDUzLDYgKzQ1Myw4IEBAIHB1YmxpYzoKLSAgICAgICAgIGZpbGVQcm9maWxl cy5jbGVhcigpOwotICAgICAgICAgZmlsZVByb2ZpbGVDb250ZW50cy5jbGVhcigpOwotIAotKyAg ICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAg ICAgICAgaWYgKGxvYWRBbGwpIHsKLSAgICAgICAgICAgICBsb2FkUHJvZmlsZXMocHJvZmlsZXNE aXIsICZmaWxlUHJvZmlsZXMsICZmaWxlUHJvZmlsZUNvbnRlbnRzLCBudWxscHRyLCBmYWxzZSk7 Ci0gICAgICAgICAgICAgbG9hZFByb2ZpbGVzKHVzZXJJQ0NEaXIsICZmaWxlUHJvZmlsZXMsICZm aWxlUHJvZmlsZUNvbnRlbnRzLCBudWxscHRyLCBmYWxzZSk7Ci1kaWZmIC0tZ2l0IGEvcnRlbmdp bmUvaW1hZ2Vpby5jYyBiL3J0ZW5naW5lL2ltYWdlaW8uY2MKLWluZGV4IDFhMTYwNTMzNC4uYmMz NDI4N2YzIDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvaW1hZ2Vpby5jYwotKysrIGIvcnRlbmdpbmUv aW1hZ2Vpby5jYwotQEAgLTY4OCw3ICs2ODgsNyBAQCBpbnQgSW1hZ2VJTzo6bG9hZFRJRkYgKGNv bnN0IEdsaWI6OnVzdHJpbmcgJmZuYW1lKQotICAgICBzdGF0aWMgTXlNdXRleCB0aHVtYk11dGV4 OwotICAgICBNeU11dGV4OjpNeUxvY2sgbG9jayh0aHVtYk11dGV4KTsKLSAKLS0gICAgaWYoIW9w dGlvbnMuc2VyaWFsaXplVGlmZlJlYWQpIHsKLSsgICAgaWYoIUFwcDo6Z2V0KCkub3B0aW9ucygp LnNlcmlhbGl6ZVRpZmZSZWFkKSB7Ci0gICAgICAgICBsb2NrLnJlbGVhc2UoKTsKLSAgICAgfQot IAotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL2ltcHJvY2Nvb3JkaW5hdG9yLmNjIGIvcnRlbmdpbmUv aW1wcm9jY29vcmRpbmF0b3IuY2MKLWluZGV4IDM3NmE2Nzg0Mi4uYjBiZjY4NzlmIDEwMDY0NAot LS0tIGEvcnRlbmdpbmUvaW1wcm9jY29vcmRpbmF0b3IuY2MKLSsrKyBiL3J0ZW5naW5lL2ltcHJv Y2Nvb3JkaW5hdG9yLmNjCi1AQCAtMzM4LDcgKzMzOCw4IEBAIHZvaWQgSW1Qcm9jQ29vcmRpbmF0 b3I6OnVwZGF0ZVByZXZpZXdJbWFnZShpbnQgdG9kbywgYm9vbCBwYW5uaW5nUmVsYXRlZENoYW5n ZSkKLSAgICAgLy8gVE9ETyBMb2NhbGxhYiBwcmludGYKLSAgICAgTXlNdXRleDo6TXlMb2NrIHBy b2Nlc3NpbmdMb2NrKG1Qcm9jZXNzaW5nKTsKLSAKLS0gICAgYm9vbCBoaWdoRGV0YWlsTmVlZGVk ID0gb3B0aW9ucy5wcmV2ZGVtbyA9PSBQRF9TaWRlY2FyID8gdHJ1ZSA6ICh0b2RvICYgTV9ISUdI UVVBTCk7Ci0rICAgIGNvbnN0IGF1dG8gcHJldmRlbW8gPSBBcHA6OmdldCgpLm9wdGlvbnMoKS5w cmV2ZGVtbzsKLSsgICAgYm9vbCBoaWdoRGV0YWlsTmVlZGVkID0gcHJldmRlbW8gPT0gUERfU2lk ZWNhciA/IHRydWUgOiAodG9kbyAmIE1fSElHSFFVQUwpOwotICAgICAvLyAgICBwcmludGYoIm1l dHdiPSVzIFxuIiwgcGFyYW1zLT53Yi5tZXRob2QuY19zdHIoKSk7Ci0gCi0gICAgIC8vIENoZWNr IGlmIGFueSBkZXRhaWwgY3JvcHMgbmVlZCBoaWdoIGRldGFpbC4gSWYgbm90LCB0YWtlIGEgZmFz dCBwYXRoIHNob3J0IGN1dAotQEAgLTM1MSw3ICszNTIsNyBAQCB2b2lkIEltUHJvY0Nvb3JkaW5h dG9yOjp1cGRhdGVQcmV2aWV3SW1hZ2UoaW50IHRvZG8sIGJvb2wgcGFubmluZ1JlbGF0ZWRDaGFu Z2UpCi0gICAgICAgICB9Ci0gICAgIH0KLSAKLS0gICAgaWYgKCgodG9kbyAmIEFMTCkgPT0gQUxM KSB8fCAodG9kbyAmIE1fTU9OSVRPUikgfHwgcGFubmluZ1JlbGF0ZWRDaGFuZ2UgfHwgKGhpZ2hE ZXRhaWxOZWVkZWQgJiYgb3B0aW9ucy5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKSkgewotKyAgICBp ZiAoKCh0b2RvICYgQUxMKSA9PSBBTEwpIHx8ICh0b2RvICYgTV9NT05JVE9SKSB8fCBwYW5uaW5n UmVsYXRlZENoYW5nZSB8fCAoaGlnaERldGFpbE5lZWRlZCAmJiBwcmV2ZGVtbyAhPSBQRF9TaWRl Y2FyKSkgewotICAgICAgICAgYndBdXRvUiA9IGJ3QXV0b0cgPSBid0F1dG9CID0gLTkwMDAuZjsK LSAKLSAgICAgICAgIGlmICh0b2RvID09IENST1AgJiYgaXBmLm5lZWRzUENWaWduZXR0aW5nKCkp IHsKLUBAIC0yNDY2LDcgKzI0NjcsNyBAQCB2b2lkIEltUHJvY0Nvb3JkaW5hdG9yOjp1cGRhdGVQ cmV2aWV3SW1hZ2UoaW50IHRvZG8sIGJvb2wgcGFubmluZ1JlbGF0ZWRDaGFuZ2UpCi0gCi0gLy8g cHJvY2VzcyBjcm9wLCBpZiBuZWVkZWQKLSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjcm9w cy5zaXplKCk7IGkrKykKLS0gICAgICAgIGlmIChjcm9wc1tpXS0+aGFzTGlzdGVuZXIoKSAmJiAo cGFubmluZ1JlbGF0ZWRDaGFuZ2UgfHwgKGhpZ2hEZXRhaWxOZWVkZWQgJiYgb3B0aW9ucy5wcmV2 ZGVtbyAhPSBQRF9TaWRlY2FyKSB8fCAodG9kbyAmIChNX01PTklUT1IgfCBNX1JHQkNVUlZFIHwg TV9MVU1BQ1VSVkUpKSB8fCBjcm9wc1tpXS0+Z2V0X3NraXAoKSA9PSAxKSkgewotKyAgICAgICAg aWYgKGNyb3BzW2ldLT5oYXNMaXN0ZW5lcigpICYmIChwYW5uaW5nUmVsYXRlZENoYW5nZSB8fCAo aGlnaERldGFpbE5lZWRlZCAmJiBwcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKSB8fCAodG9kbyAmIChN X01PTklUT1IgfCBNX1JHQkNVUlZFIHwgTV9MVU1BQ1VSVkUpKSB8fCBjcm9wc1tpXS0+Z2V0X3Nr aXAoKSA9PSAxKSkgewotICAgICAgICAgICAgIGNyb3BzW2ldLT51cGRhdGUodG9kbyk7ICAgICAv LyBtYXkgY2FsbCBvdXJzZWx2ZXMKLSAgICAgICAgIH0KLSAKLUBAIC0zMzQyLDcgKzMzNDMsNyBA QCBib29sIEltUHJvY0Nvb3JkaW5hdG9yOjpnZXRIaWdoUXVhbENvbXB1dGVkKCkKLSB7Ci0gICAg IC8vIHRoaXMgZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gZGV0YWlsIHdpbmRvd3MK LSAgICAgaWYgKCFoaWdoUXVhbGl0eUNvbXB1dGVkKSB7Ci0tICAgICAgICBpZiAob3B0aW9ucy5w cmV2ZGVtbyA9PSBQRF9TaWRlY2FyKSB7Ci0rICAgICAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25z KCkucHJldmRlbW8gPT0gUERfU2lkZWNhcikgewotICAgICAgICAgICAgIC8vIHdlIGFscmVhZHkg aGF2ZSBoaWdoIHF1YWxpdHkgcHJldmlldwotICAgICAgICAgICAgIHNldEhpZ2hRdWFsQ29tcHV0 ZWQoKTsKLSAgICAgICAgIH0gZWxzZSB7Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvaXB3YXZlbGV0 LmNjIGIvcnRlbmdpbmUvaXB3YXZlbGV0LmNjCi1pbmRleCBkOWQ1ZmIyZTQuLjg1YTZjMTNhNCAx MDA2NDQKLS0tLSBhL3J0ZW5naW5lL2lwd2F2ZWxldC5jYwotKysrIGIvcnRlbmdpbmUvaXB3YXZl bGV0LmNjCi1AQCAtODE1LDggKzgxNSw5IEBAIHZvaWQgSW1Qcm9jRnVuY3Rpb25zOjppcF93YXZl bGV0KExhYkltYWdlICogbGFiLCBMYWJJbWFnZSAqIGRzdCwgaW50IGthbGwsIGNvbnN0Ci0gCi0g Ci0gICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgdGlsZXMuIElmIGxlc3MgdGhhbiBvbXBfZ2V0 X21heF90aHJlYWRzKCksIHRoZW4gbGltaXQgbnVtX3RocmVhZHMgdG8gbnVtYmVyIG9mIHRpbGVz Ci0tICAgIGlmIChvcHRpb25zLnJnYkRlbm9pc2VUaHJlYWRMaW1pdCA+IDApIHsKLS0gICAgICAg IG1heG51bWJlcm9mdGhyZWFkc2ZvcndhdmVsZXQgPSBydGVuZ2luZTo6TElNKG9wdGlvbnMucmdi RGVub2lzZVRocmVhZExpbWl0IC8gMiwgMSwgbWF4bnVtYmVyb2Z0aHJlYWRzZm9yd2F2ZWxldCk7 Ci0rICAgIGNvbnN0IGF1dG8gcmdiRGVub2lzZVRocmVhZExpbWl0ID0gQXBwOjpnZXQoKS5vcHRp b25zKCkucmdiRGVub2lzZVRocmVhZExpbWl0OwotKyAgICBpZiAocmdiRGVub2lzZVRocmVhZExp bWl0ID4gMCkgewotKyAgICAgICAgbWF4bnVtYmVyb2Z0aHJlYWRzZm9yd2F2ZWxldCA9IHJ0ZW5n aW5lOjpMSU0ocmdiRGVub2lzZVRocmVhZExpbWl0IC8gMiwgMSwgbWF4bnVtYmVyb2Z0aHJlYWRz Zm9yd2F2ZWxldCk7Ci0gICAgIH0KLSAKLSAgICAgbnVtdGhyZWFkcyA9IHJ0ZW5naW5lOjptaW4o bnVtdGlsZXMsIG9tcF9nZXRfbWF4X3RocmVhZHMoKSk7Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUv cGl4ZWxzaGlmdC5jYyBiL3J0ZW5naW5lL3BpeGVsc2hpZnQuY2MKLWluZGV4IGJmMTdiOTc0MC4u YTAxNzI4ODIwIDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvcGl4ZWxzaGlmdC5jYwotKysrIGIvcnRl bmdpbmUvcGl4ZWxzaGlmdC5jYwotQEAgLTMwOCw2ICszMDgsOCBAQCB1c2luZyBuYW1lc3BhY2Ug c3RkOwotIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTsKLSB2b2lkIFJhd0ltYWdlU291cmNlOjpw aXhlbHNoaWZ0KGludCB3aW54LCBpbnQgd2lueSwgaW50IHdpbncsIGludCB3aW5oLCBjb25zdCBw cm9jcGFyYW1zOjpSQVdQYXJhbXMgJnJhd1BhcmFtc0luLCB1bnNpZ25lZCBpbnQgZnJhbWUsIGNv bnN0IHN0ZDo6c3RyaW5nICZtYWtlLCBjb25zdCBzdGQ6OnN0cmluZyAmbW9kZWwsIGZsb2F0IHJh d1dwQ29ycmVjdGlvbikKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKTsKLSsKLSBCRU5DSEZVTgotICAgICBpZihudW1GcmFtZXMgIT0gNCkgeyAvLyBm YWxsYmFjayBmb3Igbm9uIHBpeGVsc2hpZnQgZmlsZXMKLSAgICAgICAgIGFtYXplX2RlbW9zYWlj X1JUKHdpbngsIHdpbnksIHdpbncsIHdpbmgsIHJhd0RhdGEsIHJlZCwgZ3JlZW4sIGJsdWUsIG9w dGlvbnMuY2h1bmtTaXplQU1BWkUsIG9wdGlvbnMubWVhc3VyZSk7Ci1kaWZmIC0tZ2l0IGEvcnRl bmdpbmUvcHJvY3BhcmFtcy5jYyBiL3J0ZW5naW5lL3Byb2NwYXJhbXMuY2MKLWluZGV4IDJhYmIz MDU5My4uYTg0MWM5MjIxIDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvcHJvY3BhcmFtcy5jYwotKysr IGIvcnRlbmdpbmUvcHJvY3BhcmFtcy5jYwotQEAgLTI3MTMsNyArMjcxMyw3IEBAIENvbG9yTWFu YWdlbWVudFBhcmFtczo6Q29sb3JNYW5hZ2VtZW50UGFyYW1zKCkgOgotICAgICBsYWJncmlkY2ll TXgoMC4pLC8vCi0gICAgIGxhYmdyaWRjaWVNeSgwLiksLy8KLSAgICAgYVJlbmRJbnRlbnQoUklf UkVMQVRJVkUpLAotLSAgICBvdXRwdXRQcm9maWxlKG9wdGlvbnMucnRTZXR0aW5ncy5zcmdiKSwK LSsgICAgb3V0cHV0UHJvZmlsZShBcHA6OmdldCgpLm9wdGlvbnMoKS5ydFNldHRpbmdzLnNyZ2Ip LAotICAgICBvdXRwdXRJbnRlbnQoUklfUkVMQVRJVkUpLAotICAgICBvdXRwdXRCUEModHJ1ZSkK LSB7Ci1AQCAtMzMxNSw3ICszMzE1LDcgQEAgTG9jYWxsYWJQYXJhbXM6OkxvY2FsbGFiU3BvdDo6 TG9jYWxsYWJTcG90KCkgOgotICAgICBhdm9pZHJhZCgwLiksCi0gICAgIHRyYW5zaXR3ZWFrKDEu MCksCi0gICAgIHRyYW5zaXRncmFkKDAuMCksCi0tICAgIGhpc2hvdyhvcHRpb25zLmNvbXBsZXhp dHkgIT0gMiksCi0rICAgIGhpc2hvdyhBcHA6OmdldCgpLm9wdGlvbnMoKS5jb21wbGV4aXR5ICE9 IDIpLAotICAgICBhY3Rpdih0cnVlKSwKLSAgICAgYXZvaWRuZWcodHJ1ZSksCi0gICAgIGJsd2go ZmFsc2UpLAotQEAgLTUxMjYsMTMgKzUxMjYsMTUgQEAgTG9jYWxsYWJQYXJhbXM6OkxvY2FsbGFi U3BvdDo6TG9jYWxsYWJTcG90KCkgOgotICAgLy8gaW5pdCBzZXR0aW5ncyB3aXRoIFByZWZlcmVu Y2VzIC8gb3B0aW9ucyA6IG11c3QgYmUgZm9sbG93ZWQgYnkgY2FsbCB0byBzcG90TWV0aG9kQ2hh bmdlZCBpbiBjb250cm9sc3BvdHBhbmVsLmNjICAoaWRsZV9yZWdpc3RlcikKLSAgIC8vIG5ldyB2 YWx1ZXMgZGVmYXVsdCB3aXRoIGRpZmZlcmVudCBTcG90TWV0aG9kLgotIAotLSAgICBpZihvcHRp b25zLnNwb3RtZXQgPT0gMykgey8vZ2xvYmFsCi0rICAgIGNvbnN0IGF1dG8gc3BvdG1ldCA9IEFw cDo6Z2V0KCkub3B0aW9ucygpLnNwb3RtZXQ7Ci0rCi0rICAgIGlmKHNwb3RtZXQgPT0gMykgey8v Z2xvYmFsCi0gICAgICAgICBzcG90TWV0aG9kID0gIm1haW4iOwotICAgICAgICAgbG9jID0gezMw MDAsIDMwMDAsIDMwMDAsIDMwMDB9OwotICAgICAgICAgdHJhbnNpdCA9MTAwLjsKLSAgICAgICAg IHNoYXBlID0gIlJFQ1QiOwotIAotLSAgICB9IGVsc2UgaWYob3B0aW9ucy5zcG90bWV0ID09IDIp IHsvL2Z1bGwgaW1hZ2UKLSsgICAgfSBlbHNlIGlmKHNwb3RtZXQgPT0gMikgey8vZnVsbCBpbWFn ZQotICAgICAgICAgc3BvdE1ldGhvZCA9ICJmdWxsIjsKLSAgICAgICAgIGxvYyA9IHszMDAwLCAz MDAwLCAzMDAwLCAzMDAwfTsKLSAgICAgICAgIHRyYW5zaXQgPTEwMC47Ci1AQCAtNTE1Myw3ICs1 MTU1LDcgQEAgTG9jYWxsYWJQYXJhbXM6OkxvY2FsbGFiU3BvdDo6TG9jYWxsYWJTcG90KCkgOgot ICAgICAgICAgc2Vuc2ltYXNrID0gNjA7Ci0gICAgICAgICBzZW5zaWNpZSA9IDYwOwotICAgICAg ICAgCi0tICAgIH0gZWxzZSBpZihvcHRpb25zLnNwb3RtZXQgPT0gMSkgey8vZXhjbHVkZQotKyAg ICB9IGVsc2UgaWYoc3BvdG1ldCA9PSAxKSB7Ly9leGNsdWRlCi0gICAgICAgICBzcG90TWV0aG9k ID0gImV4YyI7Ci0gICAgICAgICBzaGFwZSA9ICJFTEkiOwotICAgICAgICAgbG9jID0gezE1MCwg MTUwLCAxNTAsIDE1MH07Ci1AQCAtNTE3Myw3ICs1MTc1LDcgQEAgTG9jYWxsYWJQYXJhbXM6Okxv Y2FsbGFiU3BvdDo6TG9jYWxsYWJTcG90KCkgOgotICAgICAgICAgc2Vuc2ltYXNrID0gNjA7Ci0g ICAgICAgICBzZW5zaWNpZSA9IDYwOwotICAgICAgICAgCi0tICAgIH0gZWxzZSBpZihvcHRpb25z LnNwb3RtZXQgPT0gMCkgey8vbm9ybWFsCi0rICAgIH0gZWxzZSBpZihzcG90bWV0ID09IDApIHsv L25vcm1hbAotICAgICAgICAgc3BvdE1ldGhvZCA9ICJub3JtIjsKLSAgICAgICAgIHNoYXBlID0g IkVMSSI7Ci0gICAgICAgICBsb2MgPSB7MTUwLCAxNTAsIDE1MCwgMTUwfTsKLUBAIC02NzM1LDYg KzY3MzcsOCBAQCBpbnQgUHJvY1BhcmFtczo6c2F2ZShjb25zdCBHbGliOjp1c3RyaW5nJiBmbmFt ZSwgY29uc3QgR2xpYjo6dXN0cmluZyYgZm5hbWUyLCBibwotICAgICAgICAgcmV0dXJuIDA7Ci0g ICAgIH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygp OwotKwotICAgICBHbGliOjp1c3RyaW5nIHNQUGFyYW1zOwotIAotICAgICB0cnkgewotQEAgLTg2 NzAsNiArODY3NCw4IEBAIGludCBQcm9jUGFyYW1zOjpsb2FkKGNvbnN0IEdsaWI6OnVzdHJpbmcm IGZuYW1lLCBQYXJhbXNFZGl0ZWQqIHBlZGl0ZWQpCi0gICAgICAgICByZXR1cm4gMTsKLSAgICAg fQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0r Ci0gICAgIEdsaWI6OktleUZpbGUga2V5RmlsZTsKLSAKLSAgICAgdHJ5IHsKLWRpZmYgLS1naXQg YS9ydGVuZ2luZS9wcm9maWxlc3RvcmUuY2MgYi9ydGVuZ2luZS9wcm9maWxlc3RvcmUuY2MKLWlu ZGV4IDg0OWU3ODE2NS4uNTU1ZjMwMTQ2IDEwMDY0NAotLS0tIGEvcnRlbmdpbmUvcHJvZmlsZXN0 b3JlLmNjCi0rKysgYi9ydGVuZ2luZS9wcm9maWxlc3RvcmUuY2MKLUBAIC0xMjYsNiArMTI2LDcg QEAgdm9pZCBQcm9maWxlU3RvcmU6Ol9wYXJzZVByb2ZpbGVzICgpCi0gCi0gICAgIGZvbGRlcnMu cHVzaF9iYWNrICgiPDw8IFJPT1QgPj4+Iik7IC8vIEZha2UgcGF0aCwgc28gcGFyZW50Rm9sZGVy SWQgPT0gMCB3aWxsIGJlIHVzZWQgdG8gYXR0YWNoIGEgUHJvZmlsZVN0b3JlRW50cnkgdG8gdGhl IHJvb3QgY29udGFpbmVyLCBub3Qgc3ViLW1lbnUKLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgR2xpYjo6dXN0cmluZyBwMSA9IG9wdGlvbnMu Z2V0VXNlclByb2ZpbGVQYXRoKCk7Ci0gICAgIEdsaWI6OnVzdHJpbmcgcDIgPSBvcHRpb25zLmdl dEdsb2JhbFByb2ZpbGVQYXRoKCk7Ci0gICAgIGJvb2wgZGlzcGxheUxldmVsMCA9IG9wdGlvbnMu dXNlQnVuZGxlZFByb2ZpbGVzICYmICFwMS5lbXB0eSgpICYmICFwMi5lbXB0eSgpICYmIHAxICE9 IHAyOwotQEAgLTIyMSw3ICsyMjIsNyBAQCBib29sIFByb2ZpbGVTdG9yZTo6cGFyc2VEaXIgKEds aWI6OnVzdHJpbmcmIHJlYWxQYXRoLCBHbGliOjp1c3RyaW5nJiB2aXJ0dWFsUGF0aAotICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgIHNpemVfdCBsYXN0ZG90ID0gY3VyckRp ci5maW5kX2xhc3Rfb2YgKCcuJyk7Ci0gCi0tICAgICAgICAgICAgICAgIGlmIChsYXN0ZG90ICE9 IEdsaWI6OnVzdHJpbmc6Om5wb3MgJiYgbGFzdGRvdCA9PSBjdXJyRGlyLmxlbmd0aCgpIC0gNCAm JiBjdXJyRGlyLnN1YnN0ciAobGFzdGRvdCkuY2FzZWZvbGQoKSA9PSBwYXJhbUZpbGVFeHRlbnNp b24pIHsKLSsgICAgICAgICAgICAgICAgaWYgKGxhc3Rkb3QgIT0gR2xpYjo6dXN0cmluZzo6bnBv cyAmJiBsYXN0ZG90ID09IGN1cnJEaXIubGVuZ3RoKCkgLSA0ICYmIGN1cnJEaXIuc3Vic3RyIChs YXN0ZG90KS5jYXNlZm9sZCgpID09IEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pIHsKLSAgICAg ICAgICAgICAgICAgICAgIC8vIGZpbGUgZm91bmQKLSAgICAgICAgICAgICAgICAgICAgIGlmIChz ZXR0aW5ncy0+dmVyYm9zZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlBy b2Nlc3NpbmcgZmlsZSAlcy4uLiIsIGZuYW1lLmNfc3RyKCkpOwotQEAgLTMwNyw3ICszMDgsNyBA QCBjb25zdCBQcm9maWxlU3RvcmVFbnRyeSogUHJvZmlsZVN0b3JlOjpmaW5kRW50cnlGcm9tRnVs bFBhdGhVIChHbGliOjp1c3RyaW5nIHBhdAotICAgICBpZiAoCi0gICAgICAgICBsYXN0ZG90X3Bv cyAhPSBHbGliOjp1c3RyaW5nOjpucG9zCi0gICAgICAgICAmJiBsYXN0ZG90X3BvcyA8PSBjYXNl Zm9sZGVkX3BhdGguc2l6ZSgpIC0gNAotLSAgICAgICAgJiYgIWNhc2Vmb2xkZWRfcGF0aC5jb21w YXJlIChsYXN0ZG90X3BvcywgNCwgcGFyYW1GaWxlRXh0ZW5zaW9uKQotKyAgICAgICAgJiYgIWNh c2Vmb2xkZWRfcGF0aC5jb21wYXJlIChsYXN0ZG90X3BvcywgNCwgQXBwOjpQQVJBTV9GSUxFX0VY VEVOU0lPTikKLSAgICAgKSB7Ci0gICAgICAgICAvLyByZW1vdmluZyB0aGUgZXh0ZW5zaW9uCi0g ICAgICAgICAvLyBub3cgdXNlIGRvdCBwb3NpdGlvbiB3aXRob3V0IGNhc2Vmb2xkKCkKLUBAIC00 MzIsNiArNDMzLDcgQEAgY29uc3QgUHJvY1BhcmFtcyogUHJvZmlsZVN0b3JlOjpnZXREZWZhdWx0 UHJvY1BhcmFtcyAoYm9vbCBpc1JhdykKLSAgICAgLy9Ob3RlOiB0aGUgbXV0ZXggaXMgbG9ja2Vk IGluIGdldFByb2ZpbGUsIGNhbGxlZCBiZWxvdwotICAgICAvLyAgICAgIGV2ZW50dWFsIGluaXRp YWxpemF0aW9uIGlzIGRvbmUgdGhlcmUgdG9vCi0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgY29uc3QgUGFydGlhbFByb2ZpbGUqIHBQcm9m ID0gZ2V0UHJvZmlsZSAoaXNSYXcgPyBvcHRpb25zLmRlZlByb2ZSYXcgOiBvcHRpb25zLmRlZlBy b2ZJbWcpOwotIAotICAgICBpZiAoIXBQcm9mKSB7Ci1AQCAtNDUyLDYgKzQ1NCw3IEBAIGNvbnN0 IFBhcnRpYWxQcm9maWxlKiBQcm9maWxlU3RvcmU6OmdldERlZmF1bHRQYXJ0aWFsUHJvZmlsZSAo Ym9vbCBpc1JhdykKLSAgICAgLy9Ob3RlOiB0aGUgbXV0ZXggaXMgbG9ja2VkIGluIGdldFByb2Zp bGUsIGNhbGxlZCBiZWxvdwotICAgICAvLyAgICAgIGV2ZW50dWFsIGluaXRpYWxpemF0aW9uIGlz IGRvbmUgdGhlcmUgdG9vCi0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKTsKLSAgICAgY29uc3QgUGFydGlhbFByb2ZpbGUqIHBQcm9mID0gZ2V0UHJvZmls ZSAoaXNSYXcgPyBvcHRpb25zLmRlZlByb2ZSYXcgOiBvcHRpb25zLmRlZlByb2ZJbWcpOwotIAot ICAgICBpZiAoIXBQcm9mKSB7Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvcmF3aW1hZ2Vzb3VyY2Uu Y2MgYi9ydGVuZ2luZS9yYXdpbWFnZXNvdXJjZS5jYwotaW5kZXggYzM5ZWU0ODIzLi45YTdmYmVm ZDMgMTAwNjQ0Ci0tLS0gYS9ydGVuZ2luZS9yYXdpbWFnZXNvdXJjZS5jYwotKysrIGIvcnRlbmdp bmUvcmF3aW1hZ2Vzb3VyY2UuY2MKLUBAIC0xNzU5LDYgKzE3NTksNyBAQCB2b2lkIFJhd0ltYWdl U291cmNlOjpwcmVwcm9jZXNzKGNvbnN0IFJBV1BhcmFtcyAmcmF3LCBjb25zdCBMZW5zUHJvZlBh cmFtcyAmbGVucwotICAgICAgICAgICAgIHBsaXN0ZW5lci0+c2V0UHJvZ3Jlc3MoMC4wKTsKLSAg ICAgICAgIH0KLSAKLSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9w dGlvbnMoKTsKLSAgICAgICAgIGlmIChudW1GcmFtZXMgPT0gNCkgewotICAgICAgICAgICAgIGRv dWJsZSBmaXRQYXJhbXNbNjRdOwotICAgICAgICAgICAgIGZsb2F0ICpidWZmZXIgPSBDQV9jb3Jy ZWN0X1JUKHJhdy5jYV9hdXRvY29ycmVjdCwgcmF3LmNhYXV0b2l0ZXJhdGlvbnMsIHJhdy5jYXJl ZCwgcmF3LmNhYmx1ZSwgcmF3LmNhX2F2b2lkY29sb3Vyc2hpZnQsIHJhdy5iYXllcnNlbnNvci5i b3JkZXIsICpyYXdEYXRhRnJhbWVzWzBdLCBmaXRQYXJhbXMsIGZhbHNlLCB0cnVlLCBudWxscHRy LCBmYWxzZSwgb3B0aW9ucy5jaHVua1NpemVDQSwgb3B0aW9ucy5tZWFzdXJlKTsKLUBAIC0xNzk5 LDYgKzE4MDAsNyBAQCB2b2lkIFJhd0ltYWdlU291cmNlOjpkZW1vc2FpYyhjb25zdCBSQVdQYXJh bXMgJnJhdywgYm9vbCBhdXRvQ29udHJhc3QsIGRvdWJsZSAmYwotICAgICBNeVRpbWUgdDEsIHQy OwotICAgICB0MS5zZXQoKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkub3B0aW9ucygpOwotICAgICBpZiAocmktPmdldFNlbnNvclR5cGUoKSA9PSBTVF9CQVlFUikg ewotICAgICAgICAgaWYgKHJhdy5iYXllcnNlbnNvci5tZXRob2QgPT0gUkFXUGFyYW1zOjpCYXll clNlbnNvcjo6Z2V0TWV0aG9kU3RyaW5nKFJBV1BhcmFtczo6QmF5ZXJTZW5zb3I6Ok1ldGhvZDo6 SFBIRCkpIHsKLSAgICAgICAgICAgICBocGhkX2RlbW9zYWljKCk7Ci1kaWZmIC0tZ2l0IGEvcnRl bmdpbmUvcnRhcHAuY2MgYi9ydGVuZ2luZS9ydGFwcC5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LWluZGV4IDAwMDAwMDAwMC4uNzAzNThhY2M5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9ydGVuZ2lu ZS9ydGFwcC5jYwotQEAgLTAsMCArMSw1NyBAQAotKy8qCi0rICogIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIFJhd1RoZXJhcGVlLgotKyAqCi0rICogIENvcHlyaWdodCAoYykgMjAyNSBEYW5pZWwgR2Fv IDxkYW5pZWwuZ2FvLndvcmtAZ21haWwuY29tPgotKyAqCi0rICogIFJhd1RoZXJhcGVlIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKLSsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KLSsgKgotKyAqICBSYXdUaGVyYXBlZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAqICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rICoKLSsgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKLSsgKiAgYWxvbmcgd2l0aCBSYXdUaGVyYXBlZS4gIElmIG5vdCwgc2VlIDxodHRw czovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rICovCi0rCi0rI2luY2x1ZGUgInJ0YXBwLmgi Ci0rCi0rI2luY2x1ZGUgInJ0ZW5naW5lL3Byb2NwYXJhbXMuaCIKLSsjaW5jbHVkZSAicnRlbmdp bmUvc2V0dGluZ3MuaCIKLSsjaW5jbHVkZSAicnRndWkvb3B0aW9ucy5oIgotKyNpbmNsdWRlICJy dGd1aS92ZXJzaW9uLmgiCi0rCi0rdXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOwotKwotK2NvbnN0 IEdsaWI6OnVzdHJpbmcgQXBwOjpWRVJTSU9OID0gUlRWRVJTSU9OOwotK2NvbnN0IEdsaWI6OnVz dHJpbmcgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiA9ICIucHAzIjsKLSsKLStBcHAmIEFwcDo6 Z2V0KCkKLSt7Ci0rICAgIHN0YXRpYyBBcHAgaW5zdDsKLSsgICAgcmV0dXJuIGluc3Q7Ci0rfQot KwotK0FwcDo6QXBwKCkKLSsgICAgOiBtX29wdGlvbnMobmV3IE9wdGlvbnMoKSkKLSsgICAgLCBt X3NpbXBsZV9lZGl0b3IoZmFsc2UpCi0rICAgICwgbV9naW1wX3BsdWdpbihmYWxzZSkKLSsgICAg LCBtX3JlbW90ZShmYWxzZSkKLSt7Ci0rfQotKwotK2NvbnN0IHJ0ZW5naW5lOjpTZXR0aW5ncyYg QXBwOjpzZXR0aW5ncygpIGNvbnN0Ci0rewotKyAgICByZXR1cm4gbV9vcHRpb25zLT5ydFNldHRp bmdzOwotK30KLSsKLStjb25zdCBydGVuZ2luZTo6cHJvY3BhcmFtczo6Q29sb3JNYW5hZ2VtZW50 UGFyYW1zJiBBcHA6OmZhbGxiYWNrQ29sb3JDbXAoKSBjb25zdAotK3sKLSsgICAgLy8gQ29uc3Ry dWN0b3IgYWNjZXNzZXMgQXBwOjpnZXQoKS5vcHRpb25zKCksIHNvIHdlIGNhbid0IGluaXRpYWxp emUgdGhpcwotKyAgICAvLyBpbiB0aGUgY29uc3RydWN0b3Igb2YgQXBwLiBJdCB3b3VsZCBiZSBh IHJlY3Vyc2l2ZSBpbml0LgotKyAgICBzdGF0aWMgcnRlbmdpbmU6OnByb2NwYXJhbXM6OkNvbG9y TWFuYWdlbWVudFBhcmFtcyBjbXA7Ci0rICAgIHJldHVybiBjbXA7Ci0rfQotZGlmZiAtLWdpdCBh L3J0ZW5naW5lL3J0YXBwLmggYi9ydGVuZ2luZS9ydGFwcC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwLi4yZGMwYmE2ZmIKLS0tLSAvZGV2L251bGwKLSsrKyBiL3J0ZW5n aW5lL3J0YXBwLmgKLUBAIC0wLDAgKzEsODEgQEAKLSsvKgotKyAqICBUaGlzIGZpbGUgaXMgcGFy dCBvZiBSYXdUaGVyYXBlZS4KLSsgKgotKyAqICBDb3B5cmlnaHQgKGMpIDIwMjUgRGFuaWVsIEdh byA8ZGFuaWVsLmdhby53b3JrQGdtYWlsLmNvbT4KLSsgKgotKyAqICBSYXdUaGVyYXBlZSBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICog IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Ci0rICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCi0rICoKLSsgKiAgUmF3VGhlcmFwZWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAq ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCi0rICogIGFsb25nIHdpdGggUmF3VGhlcmFwZWUuICBJZiBub3QsIHNlZSA8aHR0 cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKyAqLwotKwotKyNwcmFnbWEgb25jZQotKwot KyNpbmNsdWRlIDxnbGlibW0vdXN0cmluZy5oPgotKwotKyNpbmNsdWRlIDxtZW1vcnk+Ci0rCi0r Y2xhc3MgT3B0aW9uczsKLSsKLStuYW1lc3BhY2UgcnRlbmdpbmUgewotK2NsYXNzIFNldHRpbmdz OwotKwotK25hbWVzcGFjZSBwcm9jcGFyYW1zIHsKLStjbGFzcyBDb2xvck1hbmFnZW1lbnRQYXJh bXM7Ci0rfSAvLyBuYW1lc3BhY2UgcHJvY3BhcmFtcwotKwotK30gLy8gbmFtZXNwYWNlIHJ0ZW5n aW5lCi0rCi0rY2xhc3MgQXBwIHsKLStwdWJsaWM6Ci0rICAgIHN0YXRpYyBjb25zdCBHbGliOjp1 c3RyaW5nIFZFUlNJT047Ci0rICAgIHN0YXRpYyBjb25zdCBHbGliOjp1c3RyaW5nIFBBUkFNX0ZJ TEVfRVhURU5TSU9OOwotKwotKyAgICBzdGF0aWMgQXBwJiBnZXQoKTsKLSsKLSsgICAgY29uc3Qg T3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX29wdGlvbnM7IH0KLSsgICAgT3B0 aW9ucyYgbXV0X29wdGlvbnMoKSB7IHJldHVybiAqbV9vcHRpb25zOyB9Ci0rICAgIGNvbnN0IHJ0 ZW5naW5lOjpTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdDsKLSsKLSsgICAgY29uc3QgcnRlbmdp bmU6OnByb2NwYXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtcyYgZmFsbGJhY2tDb2xvckNtcCgp IGNvbnN0OwotKwotKyAgICBjb25zdCBHbGliOjp1c3RyaW5nJiBhcmd2MCgpIGNvbnN0IHsgcmV0 dXJuIG1fYXJndjA7IH0KLSsgICAgY29uc3QgR2xpYjo6dXN0cmluZyYgYXJndjEoKSBjb25zdCB7 IHJldHVybiBtX2FyZ3YxOyB9Ci0rICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcmIGNyZWRpdHNQYXRo KCkgY29uc3QgeyByZXR1cm4gbV9jcmVkaXRzX3BhdGg7IH0KLSsgICAgY29uc3QgR2xpYjo6dXN0 cmluZyYgbGljZW5zZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2xpY2Vuc2VfcGF0aDsgfQotKwot KyAgICBib29sIGlzU2ltcGxlRWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaW1wbGVfZWRpdG9y OyB9Ci0rICAgIGJvb2wgaXNHaW1wUGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9naW1wX3BsdWdp bjsgfQotKyAgICBib29sIGlzUmVtb3RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGU7IH0KLSsK LSsgICAgdm9pZCBzZXRBcmd2MChjb25zdCBHbGliOjp1c3RyaW5nJiB2YWwpIHsgbV9hcmd2MCA9 IHZhbDsgfQotKyAgICB2b2lkIHNldEFyZ3YxKGNvbnN0IEdsaWI6OnVzdHJpbmcmIHZhbCkgeyBt X2FyZ3YxID0gdmFsOyB9Ci0rICAgIHZvaWQgc2V0Q3JlZGl0c1BhdGgoY29uc3QgR2xpYjo6dXN0 cmluZyYgcGF0aCkgeyBtX2NyZWRpdHNfcGF0aCA9IHBhdGg7IH0KLSsgICAgdm9pZCBzZXRMaWNl bnNlUGF0aChjb25zdCBHbGliOjp1c3RyaW5nJiBwYXRoKSB7IG1fbGljZW5zZV9wYXRoID0gcGF0 aDsgfQotKwotKyAgICB2b2lkIHNldElzU2ltcGxlRWRpdG9yKGJvb2wgdmFsKSB7IG1fc2ltcGxl X2VkaXRvciA9IHZhbDsgfQotKyAgICB2b2lkIHNldElzR2ltcFBsdWdpbihib29sIHZhbCkgeyBt X2dpbXBfcGx1Z2luID0gdmFsOyB9Ci0rICAgIHZvaWQgc2V0SXNSZW1vdGUoYm9vbCB2YWwpIHsg bV9yZW1vdGUgPSB2YWw7IH0KLSsKLStwcml2YXRlOgotKyAgICBBcHAoKTsKLSsKLSsgICAgR2xp Yjo6dXN0cmluZyBtX2FyZ3YwOwotKyAgICBHbGliOjp1c3RyaW5nIG1fYXJndjE7Ci0rICAgIEds aWI6OnVzdHJpbmcgbV9jcmVkaXRzX3BhdGg7Ci0rICAgIEdsaWI6OnVzdHJpbmcgbV9saWNlbnNl X3BhdGg7Ci0rCi0rICAgIHN0ZDo6dW5pcXVlX3B0cjxPcHRpb25zPiBtX29wdGlvbnM7Ci0rCi0r ICAgIGJvb2wgbV9zaW1wbGVfZWRpdG9yOwotKyAgICBib29sIG1fZ2ltcF9wbHVnaW47Ci0rICAg IGJvb2wgbV9yZW1vdGU7Ci0rfTsKLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9zaW1wbGVwcm9jZXNz LmNjIGIvcnRlbmdpbmUvc2ltcGxlcHJvY2Vzcy5jYwotaW5kZXggYzkzMDdkNjIzLi4wNGVlYTc3 MzUgMTAwNjQ0Ci0tLS0gYS9ydGVuZ2luZS9zaW1wbGVwcm9jZXNzLmNjCi0rKysgYi9ydGVuZ2lu ZS9zaW1wbGVwcm9jZXNzLmNjCi1AQCAtMTQ1Nyw2ICsxNDU3LDcgQEAgcHJpdmF0ZToKLSAKLSAg ICAgICAgIExVVHUgaGlzdFRvbmVDdXJ2ZTsKLSAKLSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlv bnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAgIGlwZi5yZ2JQcm9jKGJhc2VJbWcs IGxhYlZpZXcsIG51bGxwdHIsIGN1cnZlMSwgY3VydmUyLCBjdXJ2ZSwgcGFyYW1zLnRvbmVDdXJ2 ZS5zYXR1cmF0aW9uLCByQ3VydmUsIGdDdXJ2ZSwgYkN1cnZlLCBzYXRMaW1pdCwgc2F0TGltaXRP cGFjaXR5LCBjdENvbG9yQ3VydmUsIGN0T3BhY2l0eUN1cnZlLCBvcGF1dGlsaSwgY2xUb25pbmdj dXJ2ZSwgY2wyVG9uaW5nY3VydmUsIGN1c3RvbVRvbmVDdXJ2ZTEsIGN1c3RvbVRvbmVDdXJ2ZTIs IGN1c3RvbVRvbmVDdXJ2ZWJ3MSwgY3VzdG9tVG9uZUN1cnZlYncyLCBycm0sIGdnbSwgYmJtLCBh dXRvciwgYXV0b2csIGF1dG9iLCBleHBjb21wLCBobGNvbXByLCBobGNvbXBydGhyZXNoLCBkY3BQ cm9mLCBhcywgaGlzdFRvbmVDdXJ2ZSwgb3B0aW9ucy5jaHVua1NpemVSR0IsIG9wdGlvbnMubWVh c3VyZSk7Ci0gCi0gICAgICAgICBpZiAoc2V0dGluZ3MtPnZlcmJvc2UpIHsKLWRpZmYgLS1naXQg YS9ydGd1aS9hZGp1c3Rlci5jYyBiL3J0Z3VpL2FkanVzdGVyLmNjCi1pbmRleCBiMTI2ZDkxZDku LjFkN2JjNDJlNCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2FkanVzdGVyLmNjCi0rKysgYi9ydGd1aS9h ZGp1c3Rlci5jYwotQEAgLTU1LDggKzU1LDggQEAgQWRqdXN0ZXI6OkFkanVzdGVyKAotICAgICBp bWFnZUljb24yKGltZ0ljb24yKSwKLSAgICAgYXV0b21hdGljKG51bGxwdHIpLAotICAgICBhZGp1 c3Rlckxpc3RlbmVyKG51bGxwdHIpLAotLSAgICBzcGluQ2hhbmdlKG9wdGlvbnMuYWRqdXN0ZXJN aW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSwKLS0gICAgc2xpZGVyQ2hhbmdlKG9w dGlvbnMuYWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSwKLSsgICAg c3BpbkNoYW5nZShBcHA6OmdldCgpLm9wdGlvbnMoKS5hZGp1c3Rlck1pbkRlbGF5LCBBcHA6Omdl dCgpLm9wdGlvbnMoKS5hZGp1c3Rlck1heERlbGF5KSwKLSsgICAgc2xpZGVyQ2hhbmdlKEFwcDo6 Z2V0KCkub3B0aW9ucygpLmFkanVzdGVyTWluRGVsYXksIEFwcDo6Z2V0KCkub3B0aW9ucygpLmFk anVzdGVyTWF4RGVsYXkpLAotICAgICBlZGl0ZWRDaGVja0JveChudWxscHRyKSwKLSAgICAgYWZ0 ZXJSZXNldChmYWxzZSksCi0gICAgIGJsb2NrZWQoZmFsc2UpLAotZGlmZiAtLWdpdCBhL3J0Z3Vp L2JhdGNocXVldWUuY2MgYi9ydGd1aS9iYXRjaHF1ZXVlLmNjCi1pbmRleCBhNjJkMTUwZjAuLjAz OTZiZDA3YSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2JhdGNocXVldWUuY2MKLSsrKyBiL3J0Z3VpL2Jh dGNocXVldWUuY2MKLUBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSAgIC8vIGxvY2FsIGhlbHBl ciBmdW5jdGlvbnMKLSAgICAgLy8gRm9yIE4sIHJldHVybiBOdGggaW5kZXggZnJvbSB0aGUgZW5k LCBhbmQgZm9yIC1OIHJldHVybiB0aGUgTnRoIGluZGV4IGZyb20gdGhlIHN0YXJ0LgotICAgICAv LyBOIGlzIGEgZGlnaXQgMSB0aHJvdWdoIDkuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBub3QgcmFu Z2UtY2hlY2tlZCwgc28gaXQgbWF5IGJlID49bnVtUGF0aEVsZW1lbnRzLgotICAgICAvLyBvciBu ZWdhdGl2ZS4gVGhlIGNhbGxlciBwZXJmb3JtcyBhbnkgcmVxdWlyZWQgcmFuZ2UtY2hlY2tpbmcu Ci0tICAgIGludCBkZWNvZGVQYXRoSW5kZXgodW5zaWduZWQgaW50JiBpeCwgR2xpYjo6dXN0cmlu ZyYgdGVtcGxhdGVUZXh0LCBzaXplX3QgbnVtUGF0aEVsZW1lbnRzKQotKyAgICBpbnQgZGVjb2Rl UGF0aEluZGV4KHVuc2lnbmVkIGludCYgaXgsIGNvbnN0IEdsaWI6OnVzdHJpbmcmIHRlbXBsYXRl VGV4dCwgc2l6ZV90IG51bVBhdGhFbGVtZW50cykKLSAgICAgewotICAgICAgICAgaW50IHBhdGhJ bmRleCA9IHN0YXRpY19jYXN0PGludD4obnVtUGF0aEVsZW1lbnRzKTsgICAgLy8gYSB2YWx1ZSB0 aGF0IG1lYW5zIGlucHV0IHdhcyBpbnZhbGlkCi0gICAgICAgICBib29sIGZyb21TdGFydCA9IGZh bHNlOwotQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIEJhdGNoUXVldWU6OnJlc2l6ZUxvYWRlZFF1 ZXVlKCkKLSAvLyBsZWFkaW5nIHRvIHZlcnkgbG9uZyB3YWl0aW5nIHdoZW4gYWRkaW5nIG1vcmUg aW1hZ2VzCi0gaW50IEJhdGNoUXVldWU6OmNhbGNNYXhUaHVtYm5haWxIZWlnaHQoKQotIHsKLS0g ICAgcmV0dXJuIHN0ZDo6bWluKG9wdGlvbnMubWF4VGh1bWJuYWlsSGVpZ2h0LCAyMDApOwotKyAg ICByZXR1cm4gc3RkOjptaW4oQXBwOjpnZXQoKS5vcHRpb25zKCkubWF4VGh1bWJuYWlsSGVpZ2h0 LCAyMDApOwotIH0KLSAKLSAvLyBGdW5jdGlvbiBmb3IgdmlydHVhbCBvdmVycmlkZSBpbiB0aHVt YmJyb3dzZXIgYmFzZQotQEAgLTIwNywxMyArMjA3LDEzIEBAIGludCBCYXRjaFF1ZXVlOjpnZXRN YXhUaHVtYm5haWxIZWlnaHQoKSBjb25zdAotIAotIHZvaWQgQmF0Y2hRdWV1ZTo6c2F2ZVRodW1i bmFpbEhlaWdodCAoaW50IGhlaWdodCkKLSB7Ci0tICAgIG9wdGlvbnMudGh1bWJTaXplUXVldWUg PSBoZWlnaHQ7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS50aHVtYlNpemVRdWV1ZSA9 IGhlaWdodDsKLSB9Ci0gCi0gaW50IEJhdGNoUXVldWU6OmdldFRodW1ibmFpbEhlaWdodCAoKQot IHsKLSAgICAgLy8gVGhlIHVzZXIgY291bGQgaGF2ZSBtYW51YWxseSBmb3JjZWQgdGhlIG9wdGlv biB0byBhIHRvbyBiaWcgdmFsdWUKLS0gICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWluKG9wdGlv bnMudGh1bWJTaXplUXVldWUsIDIwMCksIDEwKTsKLSsgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6 bWluKEFwcDo6Z2V0KCkub3B0aW9ucygpLnRodW1iU2l6ZVF1ZXVlLCAyMDApLCAxMCk7Ci0gfQot IAotIHZvaWQgQmF0Y2hRdWV1ZTo6cmlnaHRDbGlja2VkICgpCi1AQCAtMjk3LDcgKzI5Nyw3IEBA IHZvaWQgQmF0Y2hRdWV1ZTo6YWRkRW50cmllcyAoY29uc3Qgc3RkOjp2ZWN0b3I8QmF0Y2hRdWV1 ZUVudHJ5Kj4mIGVudHJpZXMsIGJvb2wKLSAKLSBib29sIEJhdGNoUXVldWU6OnNhdmVCYXRjaFF1 ZXVlICgpCi0gewotLSAgICBjb25zdCBhdXRvIGZpbGVOYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5h bWUgKG9wdGlvbnMucnRkaXIsICJiYXRjaCIsICJxdWV1ZS5jc3YiKTsKLSsgICAgY29uc3QgYXV0 byBmaWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChBcHA6OmdldCgpLm9wdGlvbnMoKS5y dGRpciwgImJhdGNoIiwgInF1ZXVlLmNzdiIpOwotIAotICAgICBzdGQ6Om9mc3RyZWFtIGZpbGUg KGZpbGVOYW1lLCBzdGQ6Omlvczo6YmluYXJ5IHwgc3RkOjppb3M6OnRydW5jKTsKLSAKLUBAIC0z NDMsNiArMzQzLDcgQEAgYm9vbCBCYXRjaFF1ZXVlOjpzYXZlQmF0Y2hRdWV1ZSAoKQotIAotIGJv b2wgQmF0Y2hRdWV1ZTo6bG9hZEJhdGNoUXVldWUgKCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9w dGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgY29uc3QgYXV0byBmaWxlTmFtZSA9 IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChvcHRpb25zLnJ0ZGlyLCAiYmF0Y2giLCAicXVldWUuY3N2 Iik7Ci0gCi0gICAgIHN0ZDo6aWZzdHJlYW0gZmlsZSAoZmlsZU5hbWUsIHN0ZDo6aW9zOjpiaW5h cnkpOwotQEAgLTQ3MSwxMiArNDcyLDEyIEBAIEdsaWI6OnVzdHJpbmcgQmF0Y2hRdWV1ZTo6Z2V0 VGVtcEZpbGVuYW1lRm9yUGFyYW1zKCBjb25zdCBHbGliOjp1c3RyaW5nICZmaWxlbmFtCi0gICAg IHRpbWVpbmZvID0gbG9jYWx0aW1lICggJnJhd3RpbWUgKTsKLSAgICAgc3RyZnRpbWUgKHN0cmlu Z1RpbWVzdGFtcCwgc2l6ZW9mKHN0cmluZ1RpbWVzdGFtcCksICJfJVklbSVkJUglTSVTXyIsIHRp bWVpbmZvKTsKLSAgICAgR2xpYjo6dXN0cmluZyBzYXZlZFBhcmFtUGF0aDsKLS0gICAgc2F2ZWRQ YXJhbVBhdGggPSBvcHRpb25zLnJ0ZGlyICsgIi9iYXRjaC8iOwotKyAgICBzYXZlZFBhcmFtUGF0 aCA9IEFwcDo6Z2V0KCkub3B0aW9ucygpLnJ0ZGlyICsgIi9iYXRjaC8iOwotICAgICBnX21rZGly X3dpdGhfcGFyZW50cyAoc2F2ZWRQYXJhbVBhdGguY19zdHIgKCksIDA3NTUpOwotICAgICBzYXZl ZFBhcmFtUGF0aCArPSBHbGliOjpwYXRoX2dldF9iYXNlbmFtZSAoZmlsZW5hbWUpOwotICAgICBz YXZlZFBhcmFtUGF0aCArPSBzdHJpbmdUaW1lc3RhbXA7Ci0gICAgIHNhdmVkUGFyYW1QYXRoICs9 IG1zZWNvbmRzOwotLSAgICBzYXZlZFBhcmFtUGF0aCArPSBwYXJhbUZpbGVFeHRlbnNpb247Ci0r ICAgIHNhdmVkUGFyYW1QYXRoICs9IEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT047Ci0gICAgIHJl dHVybiBzYXZlZFBhcmFtUGF0aDsKLSB9Ci0gCi1AQCAtNjQzLDYgKzY0NCw3IEBAIHZvaWQgQmF0 Y2hRdWV1ZTo6dXBkYXRlRGVzdGluYXRpb25QYXRoUHJldmlldygpCi0gICAgIGlmICghc2VsZWN0 ZWQuZW1wdHkoKSkgewotICAgICAgICAgYXV0byYgZW50cnkgPSAqc2VsZWN0ZWQuYXQoMCk7Ci0g ICAgICAgICBpbnQgc2VxdWVuY2UgPSAwOyAgIC8vIFNlcXVlbmNlIGR1cmluZyBzdWJzZXF1ZW50 IHF1ZXVlIHByb2Nlc3NpbmcgY2FuJ3QgYmUgZGV0ZXJtaW5lZCBoZXJlCi0rICAgICAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBHbGliOjp1 c3RyaW5nIGJhc2VEZXN0aW5hdGlvbiA9IGNhbGNBdXRvRmlsZU5hbWVCYXNlKGVudHJ5LmZpbGVu YW1lLCBzZXF1ZW5jZSk7Ci0gICAgICAgICBHbGliOjp1c3RyaW5nIGRlc3RpbmF0aW9uID0gR2xp Yjo6dXN0cmluZzo6Y29tcG9zZSAoIiUxLiUyIiwgYmFzZURlc3RpbmF0aW9uLCBvcHRpb25zLnNh dmVGb3JtYXRCYXRjaC5mb3JtYXQpOwotIAotQEAgLTc1OCw2ICs3NjAsNyBAQCBydGVuZ2luZTo6 UHJvY2Vzc2luZ0pvYiogQmF0Y2hRdWV1ZTo6aW1hZ2VSZWFkeShydGVuZ2luZTo6SUltYWdlZmxv YXQqIGltZykKLSAgICAgR2xpYjo6dXN0cmluZyBmbmFtZTsKLSAgICAgU2F2ZUZvcm1hdCBzYXZl Rm9ybWF0OwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25z KCk7Ci0gICAgIGlmIChwcm9jZXNzaW5nLT5vdXRGaWxlTmFtZS5lbXB0eSgpKSB7IC8vIGF1dG8g ZmlsZSBuYW1lCi0gICAgICAgICBHbGliOjp1c3RyaW5nIHMgPSBjYWxjQXV0b0ZpbGVOYW1lQmFz ZSAocHJvY2Vzc2luZy0+ZmlsZW5hbWUsIHByb2Nlc3NpbmctPnNlcXVlbmNlKTsKLSAgICAgICAg IHNhdmVGb3JtYXQgPSBvcHRpb25zLnNhdmVGb3JtYXRCYXRjaDsKLUBAIC04MDMsOCArODA2LDgg QEAgcnRlbmdpbmU6OlByb2Nlc3NpbmdKb2IqIEJhdGNoUXVldWU6OmltYWdlUmVhZHkocnRlbmdp bmU6OklJbWFnZWZsb2F0KiBpbWcpCi0gICAgICAgICBpZiAoc2F2ZUZvcm1hdC5zYXZlUGFyYW1z KSB7Ci0gICAgICAgICAgICAgLy8gV2Uga2VlcCB0aGUgZXh0ZW5zaW9uIHRvIGF2b2lkIG92ZXJ3 cml0aW5nIHRoZSBwcm9maWxlIHdoZW4gd2UgaGF2ZQotICAgICAgICAgICAgIC8vIHRoZSBzYW1l IG91dHB1dCBmaWxlbmFtZSB3aXRoIGRpZmZlcmVudCBleHRlbnNpb24KLS0gICAgICAgICAgICAv L3Byb2Nlc3NpbmctPnBhcmFtcy5zYXZlIChyZW1vdmVFeHRlbnNpb24oZm5hbWUpICsgcGFyYW1G aWxlRXh0ZW5zaW9uKTsKLS0gICAgICAgICAgICBwcm9jZXNzaW5nLT5wYXJhbXMtPnNhdmUgKGZu YW1lICsgIi5vdXQiICsgcGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsgICAgICAgICAgICAvL3Byb2Nl c3NpbmctPnBhcmFtcy5zYXZlIChyZW1vdmVFeHRlbnNpb24oZm5hbWUpICsgQXBwOjpQQVJBTV9G SUxFX0VYVEVOU0lPTik7Ci0rICAgICAgICAgICAgcHJvY2Vzc2luZy0+cGFyYW1zLT5zYXZlIChm bmFtZSArICIub3V0IiArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pOwotICAgICAgICAgfQot IAotICAgICAgICAgaWYgKHByb2Nlc3NpbmctPnRodW1ibmFpbCkgewotQEAgLTkzMiw2ICs5MzUs OCBAQCBHbGliOjp1c3RyaW5nIEJhdGNoUXVldWU6OmNhbGNBdXRvRmlsZU5hbWVCYXNlIChjb25z dCBHbGliOjp1c3RyaW5nJiBvcmlnRmlsZU5hbQotICAgICAgICAgZmlsZW5hbWUgPSBvcmlnRmls ZU5hbWVba10gKyBmaWxlbmFtZTsKLSAgICAgfQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0rCi0gLy8gICAgcHJpbnRmICgiJWQsIHwlc3xcbiIs IGV4dHBvcywgZmlsZW5hbWUuY19zdHIoKSk7Ci0gCi0gICAgIC8vIGNvbnN0cnVjdGluZyBmdWxs IG91dHB1dCBwYXRoCi1AQCAtOTk0LDcgKzk5OSw3IEBAIEdsaWI6OnVzdHJpbmcgQmF0Y2hRdWV1 ZTo6Y2FsY0F1dG9GaWxlTmFtZUJhc2UgKGNvbnN0IEdsaWI6OnVzdHJpbmcmIG9yaWdGaWxlTmFt Ci0gICAgICAgICAgICAgICAgICAgICBjaGFyIHJhbms7Ci0gICAgICAgICAgICAgICAgICAgICBy dGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcyBwcGFyYW1zOwotIAotLSAgICAgICAgICAg ICAgICAgICAgaWYoIHBwYXJhbXMubG9hZChvcmlnRmlsZU5hbWUgKyBwYXJhbUZpbGVFeHRlbnNp b24pID09IDAgKSB7Ci0rICAgICAgICAgICAgICAgICAgICBpZiggcHBhcmFtcy5sb2FkKG9yaWdG aWxlTmFtZSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pID09IDAgKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFwcGFyYW1zLmluVHJhc2gpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmFuayA9IHBwYXJhbXMucmFuayArICcwJzsKLSAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewotZGlmZiAtLWdpdCBhL3J0Z3VpL2JhdGNocXVldWVlbnRyeS5jYyBi L3J0Z3VpL2JhdGNocXVldWVlbnRyeS5jYwotaW5kZXggODFmNzE3NmIzLi4zMDU3NDA3YjMgMTAw NjQ0Ci0tLS0gYS9ydGd1aS9iYXRjaHF1ZXVlZW50cnkuY2MKLSsrKyBiL3J0Z3VpL2JhdGNocXVl dWVlbnRyeS5jYwotQEAgLTEwOCw2ICsxMDgsNyBAQCB2b2lkIEJhdGNoUXVldWVFbnRyeTo6cmVm cmVzaFRodW1ibmFpbEltYWdlICgpCi0gdm9pZCBCYXRjaFF1ZXVlRW50cnk6OmNhbGNUaHVtYm5h aWxTaXplICgpCi0gewotICAgICBwcmV3ID0gcHJlaCAqIG9yaWdwdyAvIG9yaWdwaDsKLSsgICAg Y29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAocHJl dyA+IG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGgpIHsKLSAgICAgICAgIGNvbnN0IGZsb2F0IHMg PSBzdGF0aWNfY2FzdDxmbG9hdD4ob3B0aW9ucy5tYXhUaHVtYm5haWxXaWR0aCkgLyBwcmV3Owot ICAgICAgICAgcHJldyA9IG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGg7Ci1kaWZmIC0tZ2l0IGEv cnRndWkvYmF0Y2hxdWV1ZXBhbmVsLmNjIGIvcnRndWkvYmF0Y2hxdWV1ZXBhbmVsLmNjCi1pbmRl eCBiNDc3NzkwZmMuLjUyOWYwM2ZhMSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2JhdGNocXVldWVwYW5l bC5jYwotKysrIGIvcnRndWkvYmF0Y2hxdWV1ZXBhbmVsLmNjCi1AQCAtNDIsNiArNDIsOCBAQCBz dGF0aWMgR2xpYjo6dXN0cmluZyBtYWtlRm9sZGVyTGFiZWwoR2xpYjo6dXN0cmluZyBwYXRoKQot IAotIEJhdGNoUXVldWVQYW5lbDo6QmF0Y2hRdWV1ZVBhbmVsIChGaWxlQ2F0YWxvZyogYUZpbGVD YXRhbG9nKSA6IHBhcmVudChudWxscHRyKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICBzZXRfb3JpZW50YXRpb24oR3RrOjpPUklF TlRBVElPTl9WRVJUSUNBTCk7Ci0gICAgIGJhdGNoUXVldWUgPSBHdGs6Om1hbmFnZSggbmV3IEJh dGNoUXVldWUoYUZpbGVDYXRhbG9nKSApOwotIAotQEAgLTIxNSw3ICsyMTcsNyBAQCB2b2lkIEJh dGNoUXVldWVQYW5lbDo6aW5pdCAoUlRXaW5kb3cgKnBhcmVudCkKLSB7Ci0gICAgIHRoaXMtPnBh cmVudCA9IHBhcmVudDsKLSAKLS0gICAgc2F2ZUZvcm1hdFBhbmVsLT5pbml0IChvcHRpb25zLnNh dmVGb3JtYXRCYXRjaCk7Ci0rICAgIHNhdmVGb3JtYXRQYW5lbC0+aW5pdCAoQXBwOjpnZXQoKS5v cHRpb25zKCkuc2F2ZUZvcm1hdEJhdGNoKTsKLSB9Ci0gCi0gLy8gaXQgaXMgZXhwZWN0ZWQgdG8g aGF2ZSBhIG5vbiBudWxsIGZvcmNlT3JpZW50YXRpb24gdmFsdWUgb24gUHJlZmVyZW5jZXMgdXBk YXRlIG9ubHkuIEluIHRoaXMgY2FzZSwgcXNpemUgaXMgaWdub3JlZCBhbmQgY29tcHV0ZWQgYXV0 b21hdGljYWxseQotQEAgLTIyOCw3ICsyMzAsNyBAQCB2b2lkIEJhdGNoUXVldWVQYW5lbDo6dXBk YXRlVGFiIChpbnQgcXNpemUsIGludCBmb3JjZU9yaWVudGF0aW9uKQotICAgICB9Ci0gCi0gICAg IEd0azo6R3JpZCogZ3JpZCA9IEd0azo6bWFuYWdlIChuZXcgR3RrOjpHcmlkICgpKTsKLS0gICAg aWYgKChmb3JjZU9yaWVudGF0aW9uID09IDAgJiYgb3B0aW9ucy5tYWluTkJWZXJ0aWNhbCkgfHwg KGZvcmNlT3JpZW50YXRpb24gPT0gMikpIHsKLSsgICAgaWYgKChmb3JjZU9yaWVudGF0aW9uID09 IDAgJiYgQXBwOjpnZXQoKS5vcHRpb25zKCkubWFpbk5CVmVydGljYWwpIHx8IChmb3JjZU9yaWVu dGF0aW9uID09IDIpKSB7Ci0gICAgICAgICBHdGs6OkxhYmVsKiBsOwotIAotICAgICAgICAgaWYo IXFzaXplICkgewotQEAgLTI3OSw3ICsyODEsNyBAQCB2b2lkIEJhdGNoUXVldWVQYW5lbDo6cXVl dWVTaXplQ2hhbmdlZChpbnQgcXNpemUsIGJvb2wgcXVldWVSdW5uaW5nLCBib29sIHF1ZXVlRQot ICAgICAgICAgLy8gVGhlcmUgd2FzIHdvcmssIGJ1dCBpdCBpcyBhbGwgZG9uZSBub3cuCi0gICAg ICAgICBxdWV1ZVNob3VsZFJ1biA9IGZhbHNlOwotIAotLSAgICAgICAgU291bmRNYW5hZ2VyOjpw bGF5U291bmRBc3luYyhvcHRpb25zLnNuZEJhdGNoUXVldWVEb25lKTsKLSsgICAgICAgIFNvdW5k TWFuYWdlcjo6cGxheVNvdW5kQXN5bmMoQXBwOjpnZXQoKS5vcHRpb25zKCkuc25kQmF0Y2hRdWV1 ZURvbmUpOwotICAgICB9Ci0gCi0gICAgIGlmIChxdWV1ZUVycm9yKSB7Ci1AQCAtMzUzLDYgKzM1 NSw4IEBAIHZvaWQgQmF0Y2hRdWV1ZVBhbmVsOjp0ZW1wbGF0ZUhlbHBCdXR0b25Ub2dnbGVkKCkK LSAKLSB2b2lkIEJhdGNoUXVldWVQYW5lbDo6cG9wdWxhdGVUZW1wbGF0ZUhlbHBCdWZmZXIoR2xp Yjo6UmVmUHRyPEd0azo6VGV4dEJ1ZmZlcj4gYnVmZmVyKQotIHsKLSsgICAgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSsKLSAgICAgYXV0byBwb3MgPSBidWZmZXIt PmJlZ2luKCk7Ci0gICAgIGNvbnN0IGF1dG8gaW5zZXJ0VG9waWNIZWFkaW5nID0gWyZwb3MsIGJ1 ZmZlcl0oY29uc3QgR2xpYjo6dXN0cmluZyYgdGV4dCkgewotICAgICAgICAgcG9zID0gYnVmZmVy LT5pbnNlcnRfbWFya3VwKHBvcywgR2xpYjo6dXN0cmluZzo6Zm9ybWF0KCJcblxuPHU+PGI+Iiwg dGV4dCwgIjwvYj48L3U+XG4iKSk7Ci1AQCAtNDAzLDYgKzQwNyw3IEBAIHZvaWQgQmF0Y2hRdWV1 ZVBhbmVsOjpwb3B1bGF0ZVRlbXBsYXRlSGVscEJ1ZmZlcihHbGliOjpSZWZQdHI8R3RrOjpUZXh0 QnVmZmVyPiBiCi0gICAgIC8vIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcGF0aC4KLSAgICAg Y29uc3QgYXV0byBpbnNlcnRQYXRoRXhhbXBsZXMgPSBbJmJ1ZmZlciwgJnBvcywgcGF0aEVsZW1l bnRDb3VudCwgZXhhbXBsZUZpbGVQYXRoXShjaGFyIGxldHRlciwgaW50IG9mZnNldDEsIGludCBt dWx0MSwgaW50IG9mZnNldDIsIGludCBtdWx0MikKLSAgICAgewotKyAgICAgICAgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgICAgIGZvciAoaW50IG49MDsg bjxwYXRoRWxlbWVudENvdW50OyBuKyspIHsKLSAgICAgICAgICAgICBhdXRvIHBhdGgxID0gR2xp Yjo6dXN0cmluZzo6Zm9ybWF0KCIlIiwgbGV0dGVyLCBvZmZzZXQxK24qbXVsdDEpOwotICAgICAg ICAgICAgIGF1dG8gcGF0aDIgPSBHbGliOjp1c3RyaW5nOjpmb3JtYXQoIiUiLCBsZXR0ZXIsIG9m ZnNldDIrbiptdWx0Mik7Ci1AQCAtNDY1LDYgKzQ3MCw3IEBAIHZvaWQgQmF0Y2hRdWV1ZVBhbmVs OjphZGRCYXRjaFF1ZXVlSm9icyhjb25zdCBzdGQ6OnZlY3RvcjxCYXRjaFF1ZXVlRW50cnkqPiYg ZW50Ci0gCi0gdm9pZCBCYXRjaFF1ZXVlUGFuZWw6OnNhdmVPcHRpb25zICgpCi0gewotKyAgICBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotIAotICAgICBvcHRpb25z LnNhdmVQYXRoVGVtcGxhdGUgICAgPSBvdXRkaXJUZW1wbGF0ZS0+Z2V0X3RleHQoKTsKLSAgICAg b3B0aW9ucy5zYXZlVXNlUGF0aFRlbXBsYXRlID0gdXNlVGVtcGxhdGUtPmdldF9hY3RpdmUoKTsK LUBAIC01MDYsNiArNTEyLDcgQEAgdm9pZCBCYXRjaFF1ZXVlUGFuZWw6OnNldERlc3RpbmF0aW9u UHJldmlld1RleHQoY29uc3QgR2xpYjo6dXN0cmluZyAmZGVzdGluYXRpb24KLSAKLSB2b2lkIEJh dGNoUXVldWVQYW5lbDo6cGF0aEZvbGRlckJ1dHRvblByZXNzZWQgKCkKLSB7Ci0rICAgIGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gCi0gICAgIEd0azo6RmlsZUNo b29zZXJEaWFsb2cgZmMgKGdldFRvcGxldmVsV2luZG93ICh0aGlzKSwgTSgiUVVFVUVfTE9DQVRJ T05fRk9MREVSIiksIEd0azo6RklMRV9DSE9PU0VSX0FDVElPTl9TRUxFQ1RfRk9MREVSICk7Ci0g ICAgIGZjLmFkZF9idXR0b24oICJfQ2FuY2VsIiwgR3RrOjpSRVNQT05TRV9DQU5DRUwpOyAvLyBT VE9DS0lDT04gV0FTIFRIRVJFCi1AQCAtNTI2LDEyICs1MzMsMTQgQEAgdm9pZCBCYXRjaFF1ZXVl UGFuZWw6OnBhdGhGb2xkZXJCdXR0b25QcmVzc2VkICgpCi0gLy8gc2luY2UgdGhlc2Ugc2V0dGlu Z3MgYXJlIHNoYXJlZCB3aXRoIGVkaXRvcnBhbmVsIDoKLSB2b2lkIEJhdGNoUXVldWVQYW5lbDo6 cGF0aEZvbGRlckNoYW5nZWQgKCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMuc2F2ZVBhdGhGb2xkZXIgPSBvdXRkaXJGb2xk ZXItPmdldF9maWxlbmFtZSgpOwotICAgICBiYXRjaFF1ZXVlLT51cGRhdGVEZXN0aW5hdGlvblBh dGhQcmV2aWV3KCk7Ci0gfQotIAotIHZvaWQgQmF0Y2hRdWV1ZVBhbmVsOjpmb3JtYXRDaGFuZ2Vk KGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZvcm1hdCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMuc2F2ZUZvcm1hdEJhdGNoID0g c2F2ZUZvcm1hdFBhbmVsLT5nZXRGb3JtYXQoKTsKLSAgICAgYmF0Y2hRdWV1ZS0+dXBkYXRlRGVz dGluYXRpb25QYXRoUHJldmlldygpOwotIH0KLWRpZmYgLS1naXQgYS9ydGd1aS9iYXRjaHRvb2xw YW5lbGNvb3JkLmNjIGIvcnRndWkvYmF0Y2h0b29scGFuZWxjb29yZC5jYwotaW5kZXggNGI2ZTE2 ZGNhLi40MjZjOGE2ZWUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9iYXRjaHRvb2xwYW5lbGNvb3JkLmNj Ci0rKysgYi9ydGd1aS9iYXRjaHRvb2xwYW5lbGNvb3JkLmNjCi1AQCAtMTg0LDYgKzE4NCw3IEBA IHZvaWQgQmF0Y2hUb29sUGFuZWxDb29yZGluYXRvcjo6aW5pdFNlc3Npb24gKCkKLSAgICAgICAg ICAgICBiYXllcnJhd2V4cG9zdXJlLT5zZXRBZGp1c3RlckJlaGF2aW9yIChmYWxzZSk7Ci0gICAg ICAgICAgICAgeHRyYW5zcmF3ZXhwb3N1cmUtPnNldEFkanVzdGVyQmVoYXZpb3IgKGZhbHNlKTsK LSAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw OyBpIDwgdG9vbFBhbmVscy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICB0b29sUGFu ZWxzLmF0IChpKS0+c2V0TXVsdGlJbWFnZSAodHJ1ZSk7Ci1AQCAtNzU3LDYgKzc1OCw3IEBAIHZv aWQgQmF0Y2hUb29sUGFuZWxDb29yZGluYXRvcjo6c3BvdFdCc2VsZWN0ZWQgKGludCB4LCBpbnQg eSwgVGh1bWJuYWlsKiB0aG0pCi0gCi0gLy8gICAgdG9vbEJhci0+c2V0VG9vbCAoVE9PTF9IQU5E KTsKLSAgICAgaWYgKHggPiAwICYmIHkgPiAwICYmIHRobSkgewotKyAgICAgICAgY29uc3QgYXV0 byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBzZWxlY3RlZC5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICBpZiAoc2VsZWN0 ZWRbaV0gPT0gdGhtKSB7Ci0gICAgICAgICAgICAgICAgIGRvdWJsZSB0ZW1wOwotZGlmZiAtLWdp dCBhL3J0Z3VpL2JheWVycHJlcHJvY2Vzcy5jYyBiL3J0Z3VpL2JheWVycHJlcHJvY2Vzcy5jYwot aW5kZXggYWMyZmFmNThmLi5kMjM1NTRhMTMgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9iYXllcnByZXBy b2Nlc3MuY2MKLSsrKyBiL3J0Z3VpL2JheWVycHJlcHJvY2Vzcy5jYwotQEAgLTMwLDggKzMwLDkg QEAgdXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOwotIAotIGNvbnN0IEdsaWI6 OnVzdHJpbmcgQmF5ZXJQcmVQcm9jZXNzOjpUT09MX05BTUUgPSAiYmF5ZXJwcmVwcm9jZXNzIjsK LSAKLS1CYXllclByZVByb2Nlc3M6OkJheWVyUHJlUHJvY2VzcygpIDogRm9sZGFibGVUb29sUGFu ZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9QUkVQUk9DRVNTX0xBQkVMIiksIG9wdGlvbnMucHJl dmRlbW8gIT0gUERfU2lkZWNhcikKLStCYXllclByZVByb2Nlc3M6OkJheWVyUHJlUHJvY2Vzcygp IDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9QUkVQUk9DRVNTX0xB QkVMIiksIEFwcDo6Z2V0KCkub3B0aW9ucygpLnByZXZkZW1vICE9IFBEX1NpZGVjYXIpCi0gewot KyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGF1 dG8gbSA9IFByb2NFdmVudE1hcHBlcjo6Z2V0SW5zdGFuY2UoKTsKLSAgICAgRXZMaW5lRGVub2lz ZURpcmVjdGlvbiA9IG0tPm5ld0V2ZW50KERBUktGUkFNRSwgIkhJU1RPUllfTVNHX1BSRVBST0NF U1NfTElORURFTk9JU0VfRElSRUNUSU9OIik7Ci0gICAgIEV2UERBRkxpbmVzRmlsdGVyID0gbS0+ bmV3RXZlbnQoREFSS0ZSQU1FLCAiSElTVE9SWV9NU0dfUFJFUFJPQ0VTU19QREFGTElORVNGSUxU RVIiKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9iYXllcnByb2Nlc3MuY2MgYi9ydGd1aS9iYXllcnBy b2Nlc3MuY2MKLWluZGV4IDRkNWQwZmE1Yy4uOWNkZDMwYjc3IDEwMDY0NAotLS0tIGEvcnRndWkv YmF5ZXJwcm9jZXNzLmNjCi0rKysgYi9ydGd1aS9iYXllcnByb2Nlc3MuY2MKLUBAIC0zMSw5ICsz MSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU6OnByb2NwYXJhbXM7Ci0gY29uc3QgR2xp Yjo6dXN0cmluZyBCYXllclByb2Nlc3M6OlRPT0xfTkFNRSA9ICJiYXllcnByb2Nlc3MiOwotIAot IEJheWVyUHJvY2Vzczo6QmF5ZXJQcm9jZXNzICgpIDoKLS0gICAgRm9sZGFibGVUb29sUGFuZWwo dGhpcywgVE9PTF9OQU1FLCBNKCJUUF9SQVdfTEFCRUwiKSwgb3B0aW9ucy5wcmV2ZGVtbyAhPSBQ RF9TaWRlY2FyKSwKLSsgICAgRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJU UF9SQVdfTEFCRUwiKSwgQXBwOjpnZXQoKS5vcHRpb25zKCkucHJldmRlbW8gIT0gUERfU2lkZWNh ciksCi0gICAgIG9sZE1ldGhvZCgtMSkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50TWFwcGVyOjpn ZXRJbnN0YW5jZSgpOwotICAgICBFdkRlbW9zYWljQm9yZGVyID0gbS0+bmV3RXZlbnQoREFSS0ZS QU1FLCAiSElTVE9SWV9NU0dfUkFXX0JPUkRFUiIpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2JheWVy cmF3ZXhwb3N1cmUuY2MgYi9ydGd1aS9iYXllcnJhd2V4cG9zdXJlLmNjCi1pbmRleCBkYjZjZWVh NDEuLmZkMzcxNDJkNSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2JheWVycmF3ZXhwb3N1cmUuY2MKLSsr KyBiL3J0Z3VpL2JheWVycmF3ZXhwb3N1cmUuY2MKLUBAIC0yOCw4ICsyOCw5IEBAIHVzaW5nIG5h bWVzcGFjZSBydGVuZ2luZTo6cHJvY3BhcmFtczsKLSAKLSBjb25zdCBHbGliOjp1c3RyaW5nIEJh eWVyUkFXRXhwb3N1cmU6OlRPT0xfTkFNRSA9ICJiYXllcnJhd2V4cG9zdXJlIjsKLSAKLS1CYXll clJBV0V4cG9zdXJlOjpCYXllclJBV0V4cG9zdXJlICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhp cywgVE9PTF9OQU1FLCBNKCJUUF9FWFBPU19CTEFDS1BPSU5UX0xBQkVMIiksIG9wdGlvbnMucHJl dmRlbW8gIT0gUERfU2lkZWNhcikKLStCYXllclJBV0V4cG9zdXJlOjpCYXllclJBV0V4cG9zdXJl ICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9FWFBPU19CTEFD S1BPSU5UX0xBQkVMIiksIEFwcDo6Z2V0KCkub3B0aW9ucygpLnByZXZkZW1vICE9IFBEX1NpZGVj YXIpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7 Ci0gICAgIGF1dG8gbSA9IFByb2NFdmVudE1hcHBlcjo6Z2V0SW5zdGFuY2UoKTsKLSAgICAgRXZE ZWhhYmxhY2sgPSBtLT5uZXdFdmVudChEQVJLRlJBTUUsICJISVNUT1JZX01TR19ERUhBQkxBQ0si KTsKLSAgICAgRXZEZWhhYmxhY2tWb2lkID0gbS0+bmV3RXZlbnQoTV9WT0lELCAiSElTVE9SWV9N U0dfREVIQUJMQUNLIik7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvYmxhY2t3aGl0ZS5jYyBiL3J0Z3Vp L2JsYWNrd2hpdGUuY2MKLWluZGV4IGY2N2VlOWI3Zi4uMTVkODEzMWNhIDEwMDY0NAotLS0tIGEv cnRndWkvYmxhY2t3aGl0ZS5jYwotKysrIGIvcnRndWkvYmxhY2t3aGl0ZS5jYwotQEAgLTc3LDYg Kzc3LDcgQEAgQmxhY2tXaGl0ZTo6QmxhY2tXaGl0ZSAoKTogRm9sZGFibGVUb29sUGFuZWwodGhp cywgVE9PTF9OQU1FLCBNKCJUUF9CV01JWF9MQUJFTCIKLSAgICAgICAgIGJvdHRvbU1pbGVzdG9u ZXMucHVzaF9iYWNrKCBHcmFkaWVudE1pbGVzdG9uZShkb3VibGUoeCksIGRvdWJsZShSKSwgZG91 YmxlKEcpLCBkb3VibGUoQikpICk7Ci0gICAgIH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgbHVtaW5hbmNlQ0VHID0gbmV3IEN1cnZlRWRp dG9yR3JvdXAgKG9wdGlvbnMubGFzdEJXQ3VydmVzRGlyLCBNKCJUUF9CV01JWF9DSEFOTkVMIikp OwotICAgICBsdW1pbmFuY2VDRUctPnNldEN1cnZlTGlzdGVuZXIgKHRoaXMpOwotICAgICBsdW1p bmFuY2VDdXJ2ZSA9IHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KGx1bWluYW5jZUNFRy0+ YWRkQ3VydmUoQ1RfRmxhdCwgTSgiVFBfQldNSVhfVkFMIikpKTsKLWRpZmYgLS1naXQgYS9ydGd1 aS9icWVudHJ5dXBkYXRlci5jYyBiL3J0Z3VpL2JxZW50cnl1cGRhdGVyLmNjCi1pbmRleCBlMGI4 ODdlYWEuLjEwN2JmYTNkNCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2JxZW50cnl1cGRhdGVyLmNjCi0r KysgYi9ydGd1aS9icWVudHJ5dXBkYXRlci5jYwotQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNl Ci0gCi0gdm9pZCB0aHVtYkludGVycChjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIGludCBzdywg aW50IHNoLCB1bnNpZ25lZCBjaGFyKiBkc3QsIGludCBkdywgaW50IGRoKQotIHsKLSsgICAgY29u c3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICBpZiAob3B0 aW9ucy50aHVtYkludGVycCA9PSAwKSB7Ci0gICAgICAgICBydGVuZ2luZTo6bmVhcmVzdEludGVy cCAoc3JjLCBzdywgc2gsIGRzdCwgZHcsIGRoKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9jYWNoZW1h bmFnZXIuY2MgYi9ydGd1aS9jYWNoZW1hbmFnZXIuY2MKLWluZGV4IDc4MDRiNjliNC4uMWU4NDFl YTBiIDEwMDY0NAotLS0tIGEvcnRndWkvY2FjaGVtYW5hZ2VyLmNjCi0rKysgYi9ydGd1aS9jYWNo ZW1hbmFnZXIuY2MKLUBAIC01NCw3ICs1NCw3IEBAIHZvaWQgQ2FjaGVNYW5hZ2VyOjppbml0ICgp Ci0gICAgIE15TXV0ZXg6Ok15TG9jayBsb2NrIChtdXRleCk7Ci0gCi0gICAgIG9wZW5FbnRyaWVz LmNsZWFyICgpOwotLSAgICBiYXNlRGlyID0gb3B0aW9ucy5jYWNoZUJhc2VEaXI7Ci0rICAgIGJh c2VEaXIgPSBBcHA6OmdldCgpLm9wdGlvbnMoKS5jYWNoZUJhc2VEaXI7Ci0gCi0gICAgIGF1dG8g ZXJyb3IgPSBnX21rZGlyX3dpdGhfcGFyZW50cyAoYmFzZURpci5jX3N0cigpLCBjYWNoZURpck1v ZGUpOwotIAotQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIENhY2hlTWFuYWdlcjo6cmVuYW1lRW50 cnkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBvbGRmaWxlbmFtZSwgY29uc3Qgc3RkOjpzdHJpbgotIAot ICAgICBjb25zdCBhdXRvIG5ld21kNSA9IGdldE1ENSAobmV3ZmlsZW5hbWUpOwotIAotLSAgICBh dXRvIGVycm9yID0gZ19yZW5hbWUgKGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIG9sZGZp bGVuYW1lLCBwYXJhbUZpbGVFeHRlbnNpb24sIG9sZG1kNSkuY19zdHIgKCksIGdldENhY2hlRmls ZU5hbWUgKCJwcm9maWxlcyIsIG5ld2ZpbGVuYW1lLCBwYXJhbUZpbGVFeHRlbnNpb24sIG5ld21k NSkuY19zdHIgKCkpOwotKyAgICBhdXRvIGVycm9yID0gZ19yZW5hbWUgKGdldENhY2hlRmlsZU5h bWUgKCJwcm9maWxlcyIsIG9sZGZpbGVuYW1lLCBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OLCBv bGRtZDUpLmNfc3RyICgpLCBnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBuZXdmaWxlbmFt ZSwgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiwgbmV3bWQ1KS5jX3N0ciAoKSk7Ci0gICAgIGVy cm9yIHw9IGdfcmVuYW1lIChnZXRDYWNoZUZpbGVOYW1lICgiaW1hZ2VzIiwgb2xkZmlsZW5hbWUs ICIucnR0aSIsIG9sZG1kNSkuY19zdHIgKCksIGdldENhY2hlRmlsZU5hbWUgKCJpbWFnZXMiLCBu ZXdmaWxlbmFtZSwgIi5ydHRpIiwgbmV3bWQ1KS5jX3N0ciAoKSk7Ci0gICAgIGVycm9yIHw9IGdf cmVuYW1lIChnZXRDYWNoZUZpbGVOYW1lICgiZW1icHJvZmlsZXMiLCBvbGRmaWxlbmFtZSwgIi5p Y2MiLCBvbGRtZDUpLmNfc3RyICgpLCBnZXRDYWNoZUZpbGVOYW1lICgiZW1icHJvZmlsZXMiLCBu ZXdmaWxlbmFtZSwgIi5pY2MiLCBuZXdtZDUpLmNfc3RyICgpKTsKLSAgICAgZXJyb3IgfD0gZ19y ZW5hbWUgKGdldENhY2hlRmlsZU5hbWUgKCJkYXRhIiwgb2xkZmlsZW5hbWUsICIudHh0Iiwgb2xk bWQ1KS5jX3N0ciAoKSwgZ2V0Q2FjaGVGaWxlTmFtZSAoImRhdGEiLCBuZXdmaWxlbmFtZSwgIi50 eHQiLCBuZXdtZDUpLmNfc3RyICgpKTsKLUBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBDYWNoZU1h bmFnZXI6OmRlbGV0ZUZpbGVzIChjb25zdCBHbGliOjp1c3RyaW5nJiBmbmFtZSwgY29uc3Qgc3Rk OjpzdHJpbmcmIG0KLSAgICAgfQotIAotICAgICBpZiAocHVyZ2VQcm9maWxlKSB7Ci0tICAgICAg ICBlcnJvciB8PSBnX3JlbW92ZSAoZ2V0Q2FjaGVGaWxlTmFtZSAoInByb2ZpbGVzIiwgZm5hbWUs IHBhcmFtRmlsZUV4dGVuc2lvbiwgbWQ1KS5jX3N0ciAoKSk7Ci0rICAgICAgICBlcnJvciB8PSBn X3JlbW92ZSAoZ2V0Q2FjaGVGaWxlTmFtZSAoInByb2ZpbGVzIiwgZm5hbWUsIEFwcDo6UEFSQU1f RklMRV9FWFRFTlNJT04sIG1kNSkuY19zdHIgKCkpOwotICAgICB9Ci0gCi0gICAgIGlmIChlcnJv ciAhPSAwICYmIHJ0ZW5naW5lOjpzZXR0aW5ncy0+dmVyYm9zZSkgewotQEAgLTM3MSw2ICszNzEs NyBAQCB2b2lkIENhY2hlTWFuYWdlcjo6YXBwbHlDYWNoZVNpemVMaW1pdGF0aW9uICgpIGNvbnN0 Ci0gICAgICAgICBudW1GaWxlcyAtPSAyOyAvLyBiZWNhdXNlIC4gYW5kIC4uIGFyZSBjb3VudGVk Ci0gICAgIH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBpZiAobnVtRmlsZXMgPD0gb3B0aW9ucy5tYXhDYWNoZUVudHJpZXMpIHsKLSAg ICAgICAgIHJldHVybjsKLSAgICAgfQotZGlmZiAtLWdpdCBhL3J0Z3VpL2NvbG9yYXBwZWFyYW5j ZS5jYyBiL3J0Z3VpL2NvbG9yYXBwZWFyYW5jZS5jYwotaW5kZXggNGUzNzFkYjQwLi42MGNmNWY4 MTAgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9jb2xvcmFwcGVhcmFuY2UuY2MKLSsrKyBiL3J0Z3VpL2Nv bG9yYXBwZWFyYW5jZS5jYwotQEAgLTIxNiw2ICsyMTYsOCBAQCBzdGF0aWMgZG91YmxlIHdiVGVt cDJTbGlkZXIgKGRvdWJsZSB0ZW1wKQotIAotIENvbG9yQXBwZWFyYW5jZTo6Q29sb3JBcHBlYXJh bmNlICgpIDogRm9sZGFibGVUb29sUGFuZWwgKHRoaXMsIFRPT0xfTkFNRSwgTSAoIlRQX0NPTE9S QVBQX0xBQkVMIiksIGZhbHNlLCB0cnVlKQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6 Z2V0KCkubXV0X29wdGlvbnMoKTsKLSsKLSAgICAgQ3VydmVMaXN0ZW5lcjo6c2V0TXVsdGkgKHRy dWUpOwotICAgICBzdGQ6OnZlY3RvcjxHcmFkaWVudE1pbGVzdG9uZT4gbWlsZXN0b25lczsKLSAg ICAgbWlsZXN0b25lcy5wdXNoX2JhY2sgKCBHcmFkaWVudE1pbGVzdG9uZSAoMC4sIDAuLCAwLiwg MC4pICk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvY29sb3J0b25pbmcuY2MgYi9ydGd1aS9jb2xvcnRv bmluZy5jYwotaW5kZXggNTg1ZDkwMGViLi40MzJhZDk0OTYgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9j b2xvcnRvbmluZy5jYwotKysrIGIvcnRndWkvY29sb3J0b25pbmcuY2MKLUBAIC02NSw2ICs2NSw4 IEBAIENvbG9yVG9uaW5nOjpDb2xvclRvbmluZyAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMs IFRPT0xfTkFNRSwgTSgiVFBfQ09MT1JUT05JCi0gICAgIGNvbG9yU2VwID0gR3RrOjptYW5hZ2Ug KG5ldyBHdGs6OlNlcGFyYXRvcihHdGs6Ok9SSUVOVEFUSU9OX0hPUklaT05UQUwpKTsKLSAgICAg cGFja19zdGFydCAoKmNvbG9yU2VwKTsKLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKTsKLSsKLSAgICAgY29sb3JDdXJ2ZUVkaXRvckcgPSBuZXcgQ3VydmVF ZGl0b3JHcm91cCAob3B0aW9ucy5sYXN0Q29sb3JUb25pbmdDdXJ2ZXNEaXIsIE0oIlRQX0NPTE9S VE9OSU5HX0NPTE9SIikpOwotICAgICBjb2xvckN1cnZlRWRpdG9yRy0+c2V0Q3VydmVMaXN0ZW5l ciAodGhpcyk7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkvY29udHJvbHNwb3RwYW5lbC5jYyBiL3J0 Z3VpL2NvbnRyb2xzcG90cGFuZWwuY2MKLWluZGV4IGMzMDFmYjNkZi4uNjMxNTNmOGIwIDEwMDY0 NAotLS0tIGEvcnRndWkvY29udHJvbHNwb3RwYW5lbC5jYwotKysrIGIvcnRndWkvY29udHJvbHNw b3RwYW5lbC5jYwotQEAgLTI5LDggKzI5LDYgQEAKLSB1c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU7 Ci0gdXNpbmcgbmFtZXNwYWNlIHByb2NwYXJhbXM7Ci0gCi0tZXh0ZXJuIE9wdGlvbnMgb3B0aW9u czsKLS0KLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8gQ29udHJvbFNwb3RQYW5lbAotIC8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLUBAIC0xMjAsNyArMTE4LDcgQEAgQ29udHJvbFNwb3RQYW5l bDo6Q29udHJvbFNwb3RQYW5lbCgpOgotICAgICBhdXRvIG0gPSBQcm9jRXZlbnRNYXBwZXI6Omdl dEluc3RhbmNlKCk7Ci0gICAgIEV2TG9jYWxsYWJhdm9pZGdhbXV0TWV0aG9kID0gbS0+bmV3RXZl bnQoQVVUT0VYUCwgIkhJU1RPUllfTVNHX0xPQ0FMX0dBTVVUTVVOU0VMIik7Ci0gICAgIEV2TG9j YWxsYWJhdm9pZG5lZ2F0aXZlID0gIG0tPm5ld0V2ZW50KEFVVE9FWFAsICJISVNUT1JZX01TR19M T0NBTF9BVk9JRE5FR0FUSVZFIik7Ci0tICAgIGNvbnN0IGJvb2wgc2hvd3Rvb2x0aXAgPSBvcHRp b25zLnNob3d0b29sdGlwOwotKyAgICBjb25zdCBib29sIHNob3d0b29sdGlwID0gQXBwOjpnZXQo KS5vcHRpb25zKCkuc2hvd3Rvb2x0aXA7Ci0gCi0gLy8gICAgcGFja19zdGFydCgqaGlzaG93Xyk7 Ci0gCi1AQCAtMjkyMiw3ICsyOTIwLDcgQEAgdm9pZCBDb250cm9sU3BvdFBhbmVsOjp1cGRhdGVn dWlzZXQoaW50IHNwb3R0eXBlLCBib29sIGlzY29sb3IsIGJvb2wgaXNzaCwgYm9vbAotIAotICAg ICAgICAgICAgIC8vIFVwZGF0ZSBHVUkgZnVsbGltYWdlIG9yIG1haW4KLSAgICAgICAgICAgICBk aXNhYmxlTGlzdGVuZXIoKTsKLS0gICAgICAgICAgICBpZihzcG90dHlwZSA+PSAyICAmJiBvcHRp b25zLnNwb3RtZXQgPj0gMikgey8vb3B0aW1pemUgdXBkYXRlCi0rICAgICAgICAgICAgaWYoc3Bv dHR5cGUgPj0gMiAgJiYgQXBwOjpnZXQoKS5vcHRpb25zKCkuc3BvdG1ldCA+PSAyKSB7Ly9vcHRp bWl6ZSB1cGRhdGUKLSAgICAgICAgICAgICAgICAgc3BvdE1ldGhvZENoYW5nZWQoKTsKLSAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgCi1kaWZmIC0tZ2l0IGEvcnRndWkvY3JvcC5jYyBiL3J0 Z3VpL2Nyb3AuY2MKLWluZGV4IDM0ZjI3OWU4MC4uNTBiZWY5NjNkIDEwMDY0NAotLS0tIGEvcnRn dWkvY3JvcC5jYwotKysrIGIvcnRndWkvY3JvcC5jYwotQEAgLTMzNSw3ICszMzUsNyBAQCBDcm9w Ojp+Q3JvcCgpCi0gdm9pZCBDcm9wOjp3cml0ZU9wdGlvbnMgKCkKLSB7Ci0gCi0tICAgIG9wdGlv bnMuY3JvcFBQSSA9IChpbnQpcHBpLT5nZXRfdmFsdWUgKCk7Ci0rICAgIEFwcDo6Z2V0KCkubXV0 X29wdGlvbnMoKS5jcm9wUFBJID0gKGludClwcGktPmdldF92YWx1ZSAoKTsKLSB9Ci0gCi0gdm9p ZCBDcm9wOjpyZWFkT3B0aW9ucyAoKQotQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIENyb3A6OnJl YWRPcHRpb25zICgpCi0gCi0gICAgIGRpc2FibGVMaXN0ZW5lciAoKTsKLSAKLS0gICAgcHBpLT5z ZXRfdmFsdWUgKG9wdGlvbnMuY3JvcFBQSSk7Ci0rICAgIHBwaS0+c2V0X3ZhbHVlIChBcHA6Omdl dCgpLm9wdGlvbnMoKS5jcm9wUFBJKTsKLSAKLSAgICAgZW5hYmxlTGlzdGVuZXIgKCk7Ci0gfQot ZGlmZiAtLWdpdCBhL3J0Z3VpL2Nyb3B3aW5kb3cuY2MgYi9ydGd1aS9jcm9wd2luZG93LmNjCi1p bmRleCAxMzE4NTEzNzIuLjNiZDg5OWQzMCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2Nyb3B3aW5kb3cu Y2MKLSsrKyBiL3J0Z3VpL2Nyb3B3aW5kb3cuY2MKLUBAIC03OSw3ICs3OSw3IEBAIEdsaWI6OnVz dHJpbmcgQ3JvcFdpbmRvdzo6Y2xvc2V0dDsKLSBDcm9wV2luZG93OjpDcm9wV2luZG93IChJbWFn ZUFyZWEqIHBhcmVudCwgYm9vbCBpc0xvd1VwZGF0ZVByaW9yaXR5XywgYm9vbCBpc0RldGFpbFdp bmRvdykKLSAgICAgOiBPYmplY3RNT0J1ZmZlcihwYXJlbnQpLCBzdGF0ZShTTm9ybWFsKSwgcHJl c3NfeCgwKSwgcHJlc3NfeSgwKSwgYWN0aW9uX3goMCksIGFjdGlvbl95KDApLCBwaWNrZWRPYmpl Y3QoLTEpLCBwaWNrTW9kaWZpZXJLZXkoMCksIHJvdF9kZWcoMCksIG9uUmVzaXplQXJlYShmYWxz ZSksIGRlbGV0ZWQoZmFsc2UpLAotICAgICAgIGZpdFpvb21FbmFibGVkKHRydWUpLCBmaXRab29t KGZhbHNlKSwgY3Vyc29yX3R5cGUoQ1NBcnJvdyksIC8qaXNMb3dVcGRhdGVQcmlvcml0eShpc0xv d1VwZGF0ZVByaW9yaXR5XyksKi8gaG92ZXJlZFBpY2tlcihudWxscHRyKSwgY3JvcExhYmVsKEds aWI6OnVzdHJpbmcoIjEwMCUiKSksCi0tICAgICAgYmFja0NvbG9yKG9wdGlvbnMuYmdjb2xvciks IGRlY29yYXRlZCh0cnVlKSwgaXNGbGF3bk92ZXIoZmFsc2UpLCB0aXRsZUhlaWdodCgzMCksIHNp ZGVCb3JkZXJXaWR0aCgzKSwgbG93ZXJCb3JkZXJXaWR0aCgzKSwKLSsgICAgICBiYWNrQ29sb3Io QXBwOjpnZXQoKS5vcHRpb25zKCkuYmdjb2xvciksIGRlY29yYXRlZCh0cnVlKSwgaXNGbGF3bk92 ZXIoZmFsc2UpLCB0aXRsZUhlaWdodCgzMCksIHNpZGVCb3JkZXJXaWR0aCgzKSwgbG93ZXJCb3Jk ZXJXaWR0aCgzKSwKLSAgICAgICB1cHBlckJvcmRlcldpZHRoKDEpLCBzZXBXaWR0aCgyKSwgeHBv cygzMCksIHlwb3MoMzApLCB3aWR0aCgwKSwgaGVpZ2h0KDApLCBpbWdBcmVhWCgwKSwgaW1nQXJl YVkoMCksIGltZ0FyZWFXKDApLCBpbWdBcmVhSCgwKSwKLSAgICAgICBpbWdYKC0xKSwgaW1nWSgt MSksIGltZ1coMSksIGltZ0goMSksIGlhcmVhKHBhcmVudCksIGNyb3Bab29tKDApLCB6b29tVmVy c2lvbigwKSwgZXhwb3NlVmVyc2lvbigwKSwgY3JvcGdsKG51bGxwdHIpLAotICAgICAgIHBtbGlz dGVuZXIobnVsbHB0ciksIHBtaGxpc3RlbmVyKG51bGxwdHIpLCBzY3JvbGxBY2N1bSgwLjApLCBv YnNlcnZlZENyb3BXaW4obnVsbHB0ciksCi1AQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgQ3JvcFdp bmRvdzo6YnV0dG9uUHJlc3MgKGludCBidXR0b24sIGludCB0eXBlLCBpbnQgYnN0YXRlLCBpbnQg eCwgaW50IHkpCi0gICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db29yZFRvSW1hZ2UgKHgsIHks IGFjdGlvbl94LCBhY3Rpb25feSk7Ci0gICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vab29tICh6 b29tMTFpbmRleCwgdHJ1ZSwgYWN0aW9uX3gsIGFjdGlvbl95KTsKLSAgICAgICAgICAgICAgICAg ICAgIGZpdFpvb20gPSBmYWxzZTsKLS0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25z LmNyb3BBdXRvRml0KSB7Ci0rICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXBwOjpnZXQoKS5v cHRpb25zKCkuY3JvcEF1dG9GaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgIHpvb21GaXRDcm9w KCk7Ci0gICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICB6b29t Rml0KCk7Ci1AQCAtNjg1LDYgKzY4NSw3IEBAIHZvaWQgQ3JvcFdpbmRvdzo6YnV0dG9uUHJlc3Mg KGludCBidXR0b24sIGludCB0eXBlLCBpbnQgYnN0YXRlLCBpbnQgeCwgaW50IHkpCi0gCi0gdm9p ZCBDcm9wV2luZG93OjpidXR0b25SZWxlYXNlIChpbnQgYnV0dG9uLCBpbnQgbnVtLCBpbnQgYnN0 YXRlLCBpbnQgeCwgaW50IHkpCi0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5t dXRfb3B0aW9ucygpOwotIAotICAgICBFZGl0U3Vic2NyaWJlciAqZWRpdFN1YnNjcmliZXIgPSBp YXJlYS0+Z2V0Q3VyclN1YnNjcmliZXIoKTsKLSAKLUBAIC04OTEsNiArODkyLDcgQEAgdm9pZCBD cm9wV2luZG93Ojpwb2ludGVyTW92ZWQgKGludCBic3RhdGUsIGludCB4LCBpbnQgeSkKLSAKLSAg ICAgICAgIGlhcmVhLT5yZWRyYXcgKCk7Ci0gICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU0Nyb3BJ bWdNb3ZlKSB7Ci0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRp b25zKCk7Ci0gICAgICAgICAvLyBtdWx0aXBsaWVyIGlzIHRoZSBhbXBsaWZpY2F0aW9uIGZhY3Rv ciA7IGRpc2FibGVkIGlmIHRoZSB1c2VyIHNlbGVjdGVkICIxIiAobm8gYW1wbGlmaWNhdGlvbikK LSAgICAgICAgIGRvdWJsZSBmYWN0b3IgPSBvcHRpb25zLnBhbkFjY2VsRmFjdG9yID09IDEgPyAx LjAgOiBvcHRpb25zLnBhbkFjY2VsRmFjdG9yICogem9vbVN0ZXBzW2Nyb3Bab29tXS56b29tOwot IAotQEAgLTE0NDksNiArMTQ1MSw4IEBAIHZvaWQgQ3JvcFdpbmRvdzo6ZXhwb3NlIChDYWlybzo6 UmVmUHRyPENhaXJvOjpDb250ZXh0PiBjcikKLSAgICAgICAgIGRyYXdEZWNvcmF0aW9uIChjcik7 Ci0gICAgIH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMo KTsKLSsKLSAgICAgaW50IHggPSB4cG9zLCB5ID0geXBvczsKLSAKLSAgICAgLy8gZHJhdyB0aGUg YmFja2dyb3VuZAotQEAgLTIyNTEsNyArMjI1NSw3IEBAIHZvaWQgQ3JvcFdpbmRvdzo6em9vbUZp dENyb3AgKCkKLSAgICAgICAgIGNlbnRlclkgPSBjcm9wSGFuZGxlci5jcm9wUGFyYW1zLT55ICsg Y3JvcEhhbmRsZXIuY3JvcFBhcmFtcy0+aCAvIDI7Ci0gICAgICAgICBzZXRDcm9wQW5jaG9yUG9z aXRpb24oY2VudGVyWCwgY2VudGVyWSk7Ci0gICAgICAgICBjaGFuZ2Vab29tIChjeiwgdHJ1ZSwg Y2VudGVyWCwgY2VudGVyWSk7Ci0tICAgICAgICBmaXRab29tID0gb3B0aW9ucy5jcm9wQXV0b0Zp dDsKLSsgICAgICAgIGZpdFpvb20gPSBBcHA6OmdldCgpLm9wdGlvbnMoKS5jcm9wQXV0b0ZpdDsK LSAgICAgfSBlbHNlIHsKLSAgICAgICAgIHpvb21GaXQoKTsKLSAgICAgfQotQEAgLTIzMjAsNyAr MjMyNCw3IEBAIHZvaWQgQ3JvcFdpbmRvdzo6Y2hhbmdlWm9vbSAoaW50IHpvb20sIGJvb2wgbm90 aWZ5LCBpbnQgY2VudGVyeCwgaW50IGNlbnRlcnksIGJvCi0gICAgIH0KLSAKLSAgICAgLy8gTGlt aXQgem9vbSBhY2NvcmRpbmcgdG8gdXNlciBwcmVmZXJlbmNlcwotLSAgICBkb3VibGUgem9vbUxp bWl0ID0gem9vbUxpbWl0VG9GcmFjdGlvbihvcHRpb25zLm1heFpvb21MaW1pdCk7Ci0rICAgIGRv dWJsZSB6b29tTGltaXQgPSB6b29tTGltaXRUb0ZyYWN0aW9uKEFwcDo6Z2V0KCkub3B0aW9ucygp Lm1heFpvb21MaW1pdCk7Ci0gICAgIHdoaWxlKHpvb21TdGVwc1t6b29tXS56b29tID4gem9vbUxp bWl0ICYmIHpvb20gIT0gMCkgewotICAgICAgICAgLS16b29tOwotICAgICB9Ci1AQCAtMjY4MSw2 ICsyNjg1LDggQEAgdm9pZCBDcm9wV2luZG93OjpkcmF3T2JzZXJ2ZWRGcmFtZSAoQ2Fpcm86OlJl ZlB0cjxDYWlybzo6Q29udGV4dD4gY3IsIGludCBydywgaW4KLSAgICAgY3ItPnJlY3RhbmdsZSAo eCAtIDAuNSwgeSAtIDAuNSwgdyArIDQsIGggKyA0KTsKLSAgICAgY3ItPnN0cm9rZSAoKTsKLSAK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAg ICAvLyBkcmF3IGEgImZyYW1lIiBsaW5lLiBDb2xvciBvZiBmcmFtZSBsaW5lIGNhbiBiZSBzZXQg aW4gcHJlZmVyZW5jZXMKLSAgICAgY3ItPnNldF9zb3VyY2VfcmdiYShvcHRpb25zLm5hdkd1aWRl QnJ1c2hbMF0sIG9wdGlvbnMubmF2R3VpZGVCcnVzaFsxXSwgb3B0aW9ucy5uYXZHdWlkZUJydXNo WzJdLCBvcHRpb25zLm5hdkd1aWRlQnJ1c2hbM10pOyAvLyggMSwgMSwgMSwgMS4wKTsKLSAgICAg Y3ItPnJlY3RhbmdsZSAoeCAtIDEuNSwgeSAtIDEuNSwgdyArIDQsIGggKyA0KTsKLWRpZmYgLS1n aXQgYS9ydGd1aS9jdXJ2ZWVkaXRvcmdyb3VwLmNjIGIvcnRndWkvY3VydmVlZGl0b3Jncm91cC5j YwotaW5kZXggNWNlMzc2NWEyLi5kZWRmZjI1NjUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9jdXJ2ZWVk aXRvcmdyb3VwLmNjCi0rKysgYi9ydGd1aS9jdXJ2ZWVkaXRvcmdyb3VwLmNjCi1AQCAtMzAsNyAr MzAsNyBAQAotICNpbmNsdWRlICJwYXRodXRpbHMuaCIKLSAjaW5jbHVkZSAicnRzY2FsYWJsZS5o IgotIAotLUN1cnZlRWRpdG9yR3JvdXA6OkN1cnZlRWRpdG9yR3JvdXAgKEdsaWI6OnVzdHJpbmcm IGN1cnZlRGlyLCBHbGliOjp1c3RyaW5nIGdyb3VwTGFiZWwsIGludCBibGFuaykgOiBjdXJ2ZURp cihjdXJ2ZURpciksIGxpbmUoMCksIGN1cnZlX3Jlc2V0KG51bGxwdHIpLAotK0N1cnZlRWRpdG9y R3JvdXA6OkN1cnZlRWRpdG9yR3JvdXAgKEdsaWI6OnVzdHJpbmcmIGN1cnZlRGlyLCBjb25zdCBH bGliOjp1c3RyaW5nJiBncm91cExhYmVsLCBpbnQgYmxhbmspIDogY3VydmVEaXIoY3VydmVEaXIp LCBsaW5lKDApLCBjdXJ2ZV9yZXNldChudWxscHRyKSwKLSAgICAgZGlzcGxheWVkQ3VydmUobnVs bHB0ciksIGZsYXRTdWJHcm91cChudWxscHRyKSwgZGlhZ29uYWxTdWJHcm91cChudWxscHRyKSwg Y2wobnVsbHB0ciksIG51bWJlck9mUGFja2VkQ3VydmUoMCkKLSB7Ci0gCi1AQCAtNDI2LDYgKzQy Niw3IEBAIEN1cnZlRWRpdG9yU3ViR3JvdXA6On5DdXJ2ZUVkaXRvclN1Ykdyb3VwKCkKLSAKLSB2 b2lkIEN1cnZlRWRpdG9yU3ViR3JvdXA6OmluaXRCdXR0b24gKEd0azo6QnV0dG9uICZidXR0b24s IGNvbnN0IEdsaWI6OnVzdHJpbmcgJmljb25OYW1lLCBHdGs6OkFsaWduIGFsaWduLCBib29sIHNl cGFyYXRvckJ1dHRvbiwgY29uc3QgR2xpYjo6dXN0cmluZyAmdG9vbHRpcCkKLSB7Ci0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgYm9vbCBoRXhw YW5kLCB2RXhwYW5kOwotICAgICBpZiAoc2VwYXJhdG9yQnV0dG9uKSB7Ci0gICAgICAgICBoRXhw YW5kID0gdkV4cGFuZCA9IHRydWU7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvY3VydmVlZGl0b3Jncm91 cC5oIGIvcnRndWkvY3VydmVlZGl0b3Jncm91cC5oCi1pbmRleCBhYTk3NjU5MjYuLmJjYzEzMjcz ZiAxMDA2NDQKLS0tLSBhL3J0Z3VpL2N1cnZlZWRpdG9yZ3JvdXAuaAotKysrIGIvcnRndWkvY3Vy dmVlZGl0b3Jncm91cC5oCi1AQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6Ci0gICAgICAqICAgICAg ICAgICAgICAgICBkaWFsb2dzLgotICAgICAgKi8KLSAKLS0gICAgZXhwbGljaXQgQ3VydmVFZGl0 b3JHcm91cChHbGliOjp1c3RyaW5nJiBjdXJ2ZURpciwgR2xpYjo6dXN0cmluZyBncm91cExhYmVs ID0gIiIsIGludCBibGFuayA9IDApOwotKyAgICBleHBsaWNpdCBDdXJ2ZUVkaXRvckdyb3VwKEds aWI6OnVzdHJpbmcmIGN1cnZlRGlyLCBjb25zdCBHbGliOjp1c3RyaW5nJiBncm91cExhYmVsID0g IiIsIGludCBibGFuayA9IDApOwotICAgICB+Q3VydmVFZGl0b3JHcm91cCgpIG92ZXJyaWRlOwot ICAgICB2b2lkIG5ld0xpbmUoKTsKLSAgICAgdm9pZCBjdXJ2ZUxpc3RDb21wbGV0ZSgpOwotZGlm ZiAtLWdpdCBhL3J0Z3VpL2RhcmtmcmFtZS5jYyBiL3J0Z3VpL2RhcmtmcmFtZS5jYwotaW5kZXgg ZWM2MjhkYTY0Li4wMTUxZWM2NDkgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9kYXJrZnJhbWUuY2MKLSsr KyBiL3J0Z3VpL2RhcmtmcmFtZS5jYwotQEAgLTM3LDYgKzM3LDcgQEAgRGFya0ZyYW1lOjpEYXJr RnJhbWUgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX0RBUktG UkFNRV9MQUIKLSAgICAgaGJkZiA9IEd0azo6bWFuYWdlKG5ldyBHdGs6OkJveCgpKTsKLSAgICAg aGJkZi0+c2V0X3NwYWNpbmcoNCk7Ci0gICAgIGRhcmtGcmFtZUZpbGUgPSBHdGs6Om1hbmFnZShu ZXcgTXlGaWxlQ2hvb3NlckJ1dHRvbihNKCJUUF9EQVJLRlJBTUVfTEFCRUwiKSwgR3RrOjpGSUxF X0NIT09TRVJfQUNUSU9OX09QRU4pKTsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKTsKLSAgICAgYmluZEN1cnJlbnRGb2xkZXIgKCpkYXJrRnJhbWVGaWxlLCBv cHRpb25zLmxhc3REYXJrZnJhbWVEaXIpOwotICAgICBkZkxhYmVsID0gR3RrOjptYW5hZ2UobmV3 IEd0azo6TGFiZWwoTSgiR0VORVJBTF9GSUxFIikpKTsKLSAgICAgYnRuUmVzZXQgPSBHdGs6Om1h bmFnZShuZXcgR3RrOjpCdXR0b24oKSk7Ci1AQCAtMjExLDYgKzIxMiw3IEBAIHZvaWQgRGFya0Zy YW1lOjpkYXJrRnJhbWVDaGFuZ2VkKCkKLSB2b2lkIERhcmtGcmFtZTo6ZGFya0ZyYW1lUmVzZXQo KQotIHsKLSAgICAgZGZDaGFuZ2VkID0gdHJ1ZTsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotIC8vIGNhdXRpb246IEkgaGFkIHRvIG1ha2UgdGhp cyBoYWNrLCBiZWNhdXNlIHNldF9jdXJyZW50X2ZvbGRlcigpIGRvZXNuJ3Qgd29yayBjb3JyZWN0 bHkhCi0gLy8gICAgICAgICAgQmVjYXVzZSBzemV2YSBkb2Vzbid0IGV4aXN0IHNpbmNlIGhlIHdh cyBjb21taXR0ZWQgdG8gaGFwcHkgaHVudGluZyBncm91bmQgaW4gSXNzdWUgMzE2Ci1kaWZmIC0t Z2l0IGEvcnRndWkvZGVmcmluZ2UuY2MgYi9ydGd1aS9kZWZyaW5nZS5jYwotaW5kZXggMTYyNTM4 ZGIwLi41MzE5MGM3MmEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9kZWZyaW5nZS5jYwotKysrIGIvcnRn dWkvZGVmcmluZ2UuY2MKLUBAIC00NCw2ICs0NCw3IEBAIERlZnJpbmdlOjpEZWZyaW5nZSAoKSA6 IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfREVGUklOR0VfTEFCRUwi Ci0gICAgICAgICBib3R0b21NaWxlc3RvbmVzLnB1c2hfYmFjayggR3JhZGllbnRNaWxlc3RvbmUo ZG91YmxlKHgpLCBkb3VibGUoUiksIGRvdWJsZShHKSwgZG91YmxlKEIpKSApOwotICAgICB9Ci0g Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGN1 cnZlRWRpdG9yUEYgPSBuZXcgQ3VydmVFZGl0b3JHcm91cCAob3B0aW9ucy5sYXN0UEZDdXJ2ZXNE aXIpOwotICAgICBjdXJ2ZUVkaXRvclBGLT5zZXRDdXJ2ZUxpc3RlbmVyICh0aGlzKTsKLSAgICAg Y2hzaGFwZSA9IHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KGN1cnZlRWRpdG9yUEYtPmFk ZEN1cnZlKENUX0ZsYXQsIE0oIlRQX1BGQ1VSVkVfQ1VSVkVFRElUT1JfQ0giKSkpOwotZGlmZiAt LWdpdCBhL3J0Z3VpL2RpYWdvbmFsY3VydmVlZGl0b3JzdWJncm91cC5jYyBiL3J0Z3VpL2RpYWdv bmFsY3VydmVlZGl0b3JzdWJncm91cC5jYwotaW5kZXggYzMwYWE1OTlhLi4yMDkwODc3MzcgMTAw NjQ0Ci0tLS0gYS9ydGd1aS9kaWFnb25hbGN1cnZlZWRpdG9yc3ViZ3JvdXAuY2MKLSsrKyBiL3J0 Z3VpL2RpYWdvbmFsY3VydmVlZGl0b3JzdWJncm91cC5jYwotQEAgLTM4LDYgKzM4LDcgQEAKLSAK LSBEaWFnb25hbEN1cnZlRWRpdG9yU3ViR3JvdXA6OkRpYWdvbmFsQ3VydmVFZGl0b3JTdWJHcm91 cCAoQ3VydmVFZGl0b3JHcm91cCogcHJ0LCBHbGliOjp1c3RyaW5nJiBjdXJ2ZURpcikgOiBDdXJ2 ZUVkaXRvclN1Ykdyb3VwKGN1cnZlRGlyKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICBlZGl0ZWRBZGp1c3RlciA9IG51bGxwdHI7 Ci0gICAgIGVkaXRlZEFkanVzdGVyVmFsdWUgPSAwOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2RpcmJy b3dzZXIuY2MgYi9ydGd1aS9kaXJicm93c2VyLmNjCi1pbmRleCBmZGRlNDg2MzcuLmNlNjExMjI5 MCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2RpcmJyb3dzZXIuY2MKLSsrKyBiL3J0Z3VpL2RpcmJyb3dz ZXIuY2MKLUBAIC0xNDQsNiArMTQ0LDcgQEAgdm9pZCBEaXJCcm93c2VyOjpmaWxsRGlyVHJlZSAo KQotIAotICAgICBkaXJ0cmVlLT5hcHBlbmRfY29sdW1uKHR2Yyk7Ci0gCi0rICAgIGNvbnN0IGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgdHZjLnNldF9zb3J0X29y ZGVyKG9wdGlvbnMuZGlyQnJvd3NlclNvcnRUeXBlKTsKLSAgICAgdHZjLnNldF9zb3J0X2NvbHVt bihkdENvbHVtbnMuZmlsZW5hbWUpOwotICAgICB0dmMuc2V0X3NvcnRfaW5kaWNhdG9yKHRydWUp OwotQEAgLTI2Nyw2ICsyNjgsNyBAQCB2b2lkIERpckJyb3dzZXI6OmZpbGxSb290ICgpCi0gCi0g dm9pZCBEaXJCcm93c2VyOjpvbl9zb3J0X2NvbHVtbl9jaGFuZ2VkKCkgY29uc3QKLSB7Ci0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMu ZGlyQnJvd3NlclNvcnRUeXBlID0gdHZjLmdldF9zb3J0X29yZGVyKCk7Ci0gfQotIAotQEAgLTI4 NSwxMyArMjg3LDE0IEBAIHZvaWQgRGlyQnJvd3Nlcjo6cm93X2V4cGFuZGVkIChjb25zdCBHdGs6 OlRyZWVNb2RlbDo6aXRlcmF0b3ImIGl0ZXIsIGNvbnN0IEd0azo6Ci0gICAgIGRpclRyZWVNb2Rl bC0+Z2V0X3NvcnRfY29sdW1uX2lkKHByZXZTb3J0Q29sdW1uLCBwcmV2U29ydFR5cGUpOwotICAg ICBkaXJUcmVlTW9kZWwtPnNldF9zb3J0X2NvbHVtbihHdGs6OlRyZWVTb3J0YWJsZTo6REVGQVVM VF9VTlNPUlRFRF9DT0xVTU5fSUQsIEd0azo6U09SVF9BU0NFTkRJTkcpOwotIAotKyAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGF1dG8gZGlyID0g R2lvOjpGaWxlOjpjcmVhdGVfZm9yX3BhdGggKGl0ZXItPmdldF92YWx1ZSAoZHRDb2x1bW5zLmRp cm5hbWUpKTsKLSAgICAgYXV0byBzdWJEaXJzID0gbGlzdFN1YkRpcnMgKGRpciwgb3B0aW9ucy5m YlNob3dIaWRkZW4pOwotIAotICAgICBHdGs6OlRyZWVOb2RlQ2hpbGRyZW4gY2hpbGRyZW4gPSBp dGVyLT5jaGlsZHJlbigpOwotICAgICBzdGQ6Omxpc3Q8R3RrOjpUcmVlSXRlcj4gZm9yRXJhc2Uo Y2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwotIAotLSAgICBzdGQ6OnNvcnQgKHN1 YkRpcnMuYmVnaW4gKCksIHN1YkRpcnMuZW5kICgpLCBbXSAoY29uc3QgR2xpYjo6dXN0cmluZyYg Zmlyc3REaXIsIGNvbnN0IEdsaWI6OnVzdHJpbmcmIHNlY29uZERpcikKLSsgICAgc3RkOjpzb3J0 IChzdWJEaXJzLmJlZ2luICgpLCBzdWJEaXJzLmVuZCAoKSwgWyZdKGNvbnN0IEdsaWI6OnVzdHJp bmcmIGZpcnN0RGlyLCBjb25zdCBHbGliOjp1c3RyaW5nJiBzZWNvbmREaXIpCi0gICAgIHsKLSAg ICAgICAgIHN3aXRjaCAob3B0aW9ucy5kaXJCcm93c2VyU29ydFR5cGUpIHsKLSAgICAgICAgIGRl ZmF1bHQ6Ci1AQCAtMzUzLDcgKzM1Niw3IEBAIHZvaWQgRGlyQnJvd3Nlcjo6dXBkYXRlRGlyIChj b25zdCBHdGs6OlRyZWVNb2RlbDo6aXRlcmF0b3ImIGl0ZXIpCi0gCi0gICAgIC8vIHRlc3QgaWYg bmV3IGZpbGVzIGFyZSBjcmVhdGVkCi0gICAgIGF1dG8gZGlyID0gR2lvOjpGaWxlOjpjcmVhdGVf Zm9yX3BhdGggKGl0ZXItPmdldF92YWx1ZSAoZHRDb2x1bW5zLmRpcm5hbWUpKTsKLS0gICAgYXV0 byBzdWJEaXJzID0gbGlzdFN1YkRpcnMgKGRpciwgb3B0aW9ucy5mYlNob3dIaWRkZW4pOwotKyAg ICBhdXRvIHN1YkRpcnMgPSBsaXN0U3ViRGlycyAoZGlyLCBBcHA6OmdldCgpLm9wdGlvbnMoKS5m YlNob3dIaWRkZW4pOwotIAotICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YkRpcnMuc2l6 ZSgpOyBpKyspIHsKLSAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLWRpZmYgLS1naXQgYS9y dGd1aS9kaXJweXJkZW5vaXNlLmNjIGIvcnRndWkvZGlycHlyZGVub2lzZS5jYwotaW5kZXggNjI5 ODk4ZDUyLi4zNjE2ZTdiNDAgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9kaXJweXJkZW5vaXNlLmNjCi0r KysgYi9ydGd1aS9kaXJweXJkZW5vaXNlLmNjCi1AQCAtNzAsNiArNzAsNyBAQCBEaXJQeXJEZW5v aXNlOjpEaXJQeXJEZW5vaXNlICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1F LCBNKCJUUF9ESVJQWQotIAotICAgICBsdW1hICA9IEd0azo6bWFuYWdlIChuZXcgQWRqdXN0ZXIg KE0oIlRQX0RJUlBZUkRFTk9JU0VfTFVNSU5BTkNFX1NNT09USElORyIpLCAwLCAxMDAsIDAuMDEs IDApKTsKLSAgICAgTGRldGFpbCAgPSBHdGs6Om1hbmFnZSAobmV3IEFkanVzdGVyIChNKCJUUF9E SVJQWVJERU5PSVNFX0xVTUlOQU5DRV9ERVRBSUwiKSwgMCwgMTAwLCAwLjAxLCAwKSk7Ci0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIE5vaXNjdXJ2 ZUVkaXRvckcgPSBuZXcgQ3VydmVFZGl0b3JHcm91cCAob3B0aW9ucy5sYXN0RGVub2lzZUN1cnZl c0RpciwgTSgiVFBfRElSUFlSREVOT0lTRV9MVU1JTkFOQ0VfQ1VSVkUiKSk7Ci0gICAgIC8vY3Vy dmVFZGl0b3JHID0gbmV3IEN1cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdExhYkN1cnZlc0Rp cik7Ci0gICAgIE5vaXNjdXJ2ZUVkaXRvckctPnNldEN1cnZlTGlzdGVuZXIgKHRoaXMpOwotQEAg LTQ0NCw3ICs0NDUsNyBAQCB2b2lkIERpclB5ckRlbm9pc2U6OnJlYWQgKGNvbnN0IFByb2NQYXJh bXMqIHBwLCBjb25zdCBQYXJhbXNFZGl0ZWQqIHBlZGl0ZWQpCi0gCi0gICAgIExtZXRob2RDaGFu Z2VkKCk7Ci0gCi0tICAgIGlmKG9wdGlvbnMucnRTZXR0aW5ncy5sZXZlbGRuYXV0c2ltcGwgPT0g MSkgewotKyAgICBpZihBcHA6OmdldCgpLm9wdGlvbnMoKS5ydFNldHRpbmdzLmxldmVsZG5hdXRz aW1wbCA9PSAxKSB7Ci0gICAgICAgICBDbWV0aG9kLT5zZXRfYWN0aXZlICgwKTsKLSAKLSAgICAg ICAgIGlmIChwcC0+ZGlycHlyRGVub2lzZS5DbWV0aG9kID09ICJNQU4iKSB7Ci1AQCAtNjkwLDcg KzY5MSw3IEBAIHZvaWQgRGlyUHlyRGVub2lzZTo6d3JpdGUgKFByb2NQYXJhbXMqIHBwLCBQYXJh bXNFZGl0ZWQqIHBlZGl0ZWQpCi0gICAgICAgICBwcC0+ZGlycHlyRGVub2lzZS5MbWV0aG9kID0g IlNMSSI7Ci0gICAgIH0KLSAKLS0gICAgaWYob3B0aW9ucy5ydFNldHRpbmdzLmxldmVsZG5hdXRz aW1wbCA9PSAxKSB7Ci0rICAgIGlmKEFwcDo6Z2V0KCkub3B0aW9ucygpLnJ0U2V0dGluZ3MubGV2 ZWxkbmF1dHNpbXBsID09IDEpIHsKLSAgICAgICAgIGlmIChDbWV0aG9kLT5nZXRfYWN0aXZlX3Jv d19udW1iZXIoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgcHAtPmRpcnB5ckRlbm9pc2UuQ21ldGhv ZCA9ICJNQU4iOwotICAgICAgICAgfSBlbHNlIGlmIChDbWV0aG9kLT5nZXRfYWN0aXZlX3Jvd19u dW1iZXIoKSA9PSAxKSB7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvZWRpdG9ycGFuZWwuY2MgYi9ydGd1 aS9lZGl0b3JwYW5lbC5jYwotaW5kZXggYWJlMGExZWM2Li40ZWRkOTljZGIgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9lZGl0b3JwYW5lbC5jYwotKysrIGIvcnRndWkvZWRpdG9ycGFuZWwuY2MKLUBAIC0z OTYsNyArMzk2LDcgQEAgcHJpdmF0ZToKLSAgICAgICAgIGlmIChmaW5kX2RlZmF1bHRfbW9uaXRv cl9wcm9maWxlIChwcm9maWxlQm94LmdldF9yb290X3dpbmRvdygpLT5nb2JqKCksIGRlZnByb2Ys IGRlZnByb2ZuYW1lKSkgewotICAgICAgICAgICAgIHByb2ZpbGVCb3guYXBwZW5kIChNICgiTU9O SVRPUl9QUk9GSUxFX1NZU1RFTSIpICsgIiAoIiArIGRlZnByb2ZuYW1lICsgIikiKTsKLSAKLS0g ICAgICAgICAgICBpZiAob3B0aW9ucy5ydFNldHRpbmdzLmF1dG9Nb25pdG9yUHJvZmlsZSkgewot KyAgICAgICAgICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5ydFNldHRpbmdzLmF1dG9Nb25p dG9yUHJvZmlsZSkgewotICAgICAgICAgICAgICAgICBydGVuZ2luZTo6SUNDU3RvcmU6OmdldElu c3RhbmNlKCktPnNldERlZmF1bHRNb25pdG9yUHJvZmlsZU5hbWUgKGRlZnByb2YpOwotICAgICAg ICAgICAgICAgICBwcm9maWxlQm94LnNldF9hY3RpdmUgKDEpOwotICAgICAgICAgICAgIH0gZWxz ZSB7Ci1AQCAtNDgwLDYgKzQ4MCw3IEBAIHByaXZhdGU6Ci0gICAgICAgICBDb25uZWN0aW9uQmxv Y2tlciBpbnRlbnRCbG9ja2VyIChpbnRlbnRDb25uKTsKLSAKLSAgICAgICAgIEdsaWI6OnVzdHJp bmcgcHJvZmlsZTsKLSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9w dGlvbnMoKTsKLSAKLSAjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAvLyBtb25pdG9yIHByb2ZpbGUg bm90IHN1cHBvcnRlZCBvbiBhcHBsZQotIAotQEAgLTY0NSw2ICs2NDYsOCBAQCBwdWJsaWM6Ci0g Ci0gICAgIHZvaWQgcmVzZXQgKCkKLSAgICAgewotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICAgICAgQ29ubmVjdGlvbkJsb2NrZXIg aW50ZW50QmxvY2tlciAoaW50ZW50Q29ubik7Ci0gI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgLy8g bW9uaXRvciBwcm9maWxlIG5vdCBzdXBwb3J0ZWQgb24gYXBwbGUKLSAgICAgICAgIENvbm5lY3Rp b25CbG9ja2VyIHByb2ZpbGVCbG9ja2VyIChwcm9maWxlQ29ubik7Ci1AQCAtNzg1LDYgKzc4OCw3 IEBAIEVkaXRvclBhbmVsOjpFZGl0b3JQYW5lbCAoRmlsZVBhbmVsKiBmaWxlUGFuZWwpCi0gICAg IGlIaXN0b3J5U2hvdyA9IG5ldyBSVEltYWdlICgicGFuZWwtdG8tcmlnaHQiLCBHdGs6OklDT05f U0laRV9MQVJHRV9UT09MQkFSKTsKLSAgICAgaUhpc3RvcnlIaWRlID0gbmV3IFJUSW1hZ2UgKCJw YW5lbC10by1sZWZ0IiwgR3RrOjpJQ09OX1NJWkVfTEFSR0VfVE9PTEJBUik7Ci0gCi0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaGlkZWhwLT5z ZXRfcmVsaWVmIChHdGs6OlJFTElFRl9OT05FKTsKLSAgICAgaGlkZWhwLT5zZXRfYWN0aXZlIChv cHRpb25zLnNob3dIaXN0b3J5KTsKLSAgICAgaGlkZWhwLT5zZXRfdG9vbHRpcF9tYXJrdXAgKE0g KCJNQUlOX1RPT0xUSVBfSElERUhQIikpOwotQEAgLTc5Nyw3ICs4MDEsNyBAQCBFZGl0b3JQYW5l bDo6RWRpdG9yUGFuZWwgKEZpbGVQYW5lbCogZmlsZVBhbmVsKQotIAotICAgICB0YlRvcFBhbmVs XzEgPSBudWxscHRyOwotIAotLSAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiBmaWxlUGFuZWwpIHsK LSsgICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgJiYgZmlsZVBhbmVsKSB7Ci0g ICAgICAgICB0YlRvcFBhbmVsXzEgPSBuZXcgR3RrOjpUb2dnbGVCdXR0b24gKCk7Ci0gICAgICAg ICBpVG9wUGFuZWxfMV9TaG93ID0gbmV3IFJUSW1hZ2UgKCJwYW5lbC10by1ib3R0b20iLCBHdGs6 OklDT05fU0laRV9MQVJHRV9UT09MQkFSKTsKLSAgICAgICAgIGlUb3BQYW5lbF8xX0hpZGUgPSBu ZXcgUlRJbWFnZSAoInBhbmVsLXRvLXRvcCIsIEd0azo6SUNPTl9TSVpFX0xBUkdFX1RPT0xCQVIp OwotQEAgLTk0Miw3ICs5NDYsNyBAQCBFZGl0b3JQYW5lbDo6RWRpdG9yUGFuZWwgKEZpbGVQYW5l bCogZmlsZVBhbmVsKQotIAotICAgICBuYXZQcmV2ID0gbmF2TmV4dCA9IG5hdlN5bmMgPSBudWxs cHRyOwotIAotLSAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiAhb3B0aW9ucy50YWJiZWRVSSkgewot KyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSAmJiAhb3B0aW9ucy50YWJiZWRV SSkgewotICAgICAgICAgLy8gTmF2aWdhdGlvbiBidXR0b25zCi0gICAgICAgICBHdGs6OkltYWdl ICpuYXZQcmV2SW1hZ2UgPSBHdGs6Om1hbmFnZSAobmV3IFJUSW1hZ2UgKCJhcnJvdzItbGVmdCIs IEd0azo6SUNPTl9TSVpFX0xBUkdFX1RPT0xCQVIpKTsKLSAgICAgICAgIG5hdlByZXZJbWFnZS0+ c2V0X3BhZGRpbmcgKDAsIDApOwotQEAgLTk3NiwxNSArOTgwLDE1IEBAIEVkaXRvclBhbmVsOjpF ZGl0b3JQYW5lbCAoRmlsZVBhbmVsKiBmaWxlUGFuZWwpCi0gICAgIGlvcHMtPmF0dGFjaF9uZXh0 X3RvICgqcHJvZ3Jlc3NMYWJlbCwgR3RrOjpQT1NfTEVGVCwgMSwgMSk7Ci0gICAgIGlvcHMtPmF0 dGFjaF9uZXh0X3RvICgqdnNlcDEsIEd0azo6UE9TX0xFRlQsIDEsIDEpOwotIAotLSAgICBpZiAo IWdpbXBQbHVnaW4pIHsKLSsgICAgaWYgKCFBcHA6OmdldCgpLmlzR2ltcFBsdWdpbigpKSB7Ci0g ICAgICAgICBpb3BzLT5hdHRhY2hfbmV4dF90bygqc2VuZF90b19leHRlcm5hbC0+YnV0dG9uR3Jv dXAsIEd0azo6UE9TX0xFRlQsIDEsIDEpOwotICAgICB9Ci0gCi0tICAgIGlmICghZ2ltcFBsdWdp biAmJiAhc2ltcGxlRWRpdG9yKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc0dpbXBQbHVnaW4o KSAmJiAhQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigpKSB7Ci0gICAgICAgICBpb3BzLT5hdHRh Y2hfbmV4dF90byAoKnF1ZXVlaW1nLCBHdGs6OlBPU19MRUZULCAxLCAxKTsKLSAgICAgfQotIAot LSAgICBpZiAoIWdpbXBQbHVnaW4pIHsKLSsgICAgaWYgKCFBcHA6OmdldCgpLmlzR2ltcFBsdWdp bigpKSB7Ci0gICAgICAgICBpb3BzLT5hdHRhY2hfbmV4dF90byAoKnNhdmVpbWdhcywgR3RrOjpQ T1NfTEVGVCwgMSwgMSk7Ci0gICAgIH0KLSAKLUBAIC05OTMsNyArOTk3LDcgQEAgRWRpdG9yUGFu ZWw6OkVkaXRvclBhbmVsIChGaWxlUGFuZWwqIGZpbGVQYW5lbCkKLSAgICAgY29sb3JNZ210VG9v bEJhci5yZXNldCAobmV3IENvbG9yTWFuYWdlbWVudFRvb2xiYXIgKGlwYykpOwotICAgICBjb2xv ck1nbXRUb29sQmFyLT5wYWNrX3JpZ2h0X2luIChpb3BzKTsKLSAKLS0gICAgaWYgKCFzaW1wbGVF ZGl0b3IgJiYgIW9wdGlvbnMudGFiYmVkVUkpIHsKLSsgICAgaWYgKCFBcHA6OmdldCgpLmlzU2lt cGxlRWRpdG9yKCkgJiYgIW9wdGlvbnMudGFiYmVkVUkpIHsKLSAgICAgICAgIEd0azo6U2VwYXJh dG9yKiB2c2VwMyA9IEd0azo6bWFuYWdlIChuZXcgR3RrOjpTZXBhcmF0b3IoR3RrOjpPUklFTlRB VElPTl9WRVJUSUNBTCkpOwotICAgICAgICAgaW9wcy0+YXR0YWNoX25leHRfdG8gKCp2c2VwMywg R3RrOjpQT1NfUklHSFQsIDEsIDEpOwotICAgICAgICAgaW9wcy0+YXR0YWNoX25leHRfdG8gKCpu YXZQcmV2LCBHdGs6OlBPU19SSUdIVCwgMSwgMSk7Ci1AQCAtMTE2OCw3ICsxMTcyLDcgQEAgdm9p ZCBFZGl0b3JQYW5lbDo6bGVmdFBhbmVCdXR0b25SZWxlYXNlZCAoR2RrRXZlbnRCdXR0b24gKmV2 ZW50KQotIHsKLSAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkgewotICAgICAgICAgLy8gQnV0 dG9uIDEgcmVsZWFzZWQgOiBpdCdzIGEgcmVzaXplCi0tICAgICAgICBvcHRpb25zLmhpc3RvcnlQ YW5lbFdpZHRoID0gaHBhbmVkbC0+Z2V0X3Bvc2l0aW9uKCk7Ci0rICAgICAgICBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCkuaGlzdG9yeVBhbmVsV2lkdGggPSBocGFuZWRsLT5nZXRfcG9zaXRpb24o KTsKLSAgICAgfQotIAotICAgICAvKmVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykgewotQEAg LTExODEsNyArMTE4NSw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnJpZ2h0UGFuZUJ1dHRvblJlbGVh c2VkIChHZGtFdmVudEJ1dHRvbiAqZXZlbnQpCi0gICAgICAgICBpbnQgd2luVywgd2luSDsKLSAg ICAgICAgIHBhcmVudFdpbmRvdy0+Z2V0X3NpemUgKHdpblcsIHdpbkgpOwotICAgICAgICAgLy8g QnV0dG9uIDEgcmVsZWFzZWQgOiBpdCdzIGEgcmVzaXplCi0tICAgICAgICBvcHRpb25zLnRvb2xQ YW5lbFdpZHRoID0gd2luVyAtIGhwYW5lZHItPmdldF9wb3NpdGlvbigpOwotKyAgICAgICAgQXBw OjpnZXQoKS5tdXRfb3B0aW9ucygpLnRvb2xQYW5lbFdpZHRoID0gd2luVyAtIGhwYW5lZHItPmdl dF9wb3NpdGlvbigpOwotICAgICB9Ci0gCi0gICAgIC8qZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9 PSAzKSB7Ci1AQCAtMTIyMyw2ICsxMjI3LDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6c2hvd1RvcFBh bmVsIChib29sIHNob3cpCi0gCi0gdm9pZCBFZGl0b3JQYW5lbDo6c2V0QXNwZWN0ICgpCi0gewot KyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlu dCB3aW5XLCB3aW5IOwotICAgICBwYXJlbnRXaW5kb3ctPmdldF9zaXplICh3aW5XLCB3aW5IKTsK LSAgICAgaHBhbmVkbC0+c2V0X3Bvc2l0aW9uIChvcHRpb25zLmhpc3RvcnlQYW5lbFdpZHRoKTsK LUBAIC0xMjgxLDYgKzEyODYsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjpvcGVuIChUaHVtYm5haWwq IHRtYiwgcnRlbmdpbmU6OkluaXRpYWxJbWFnZSogaXNyYykKLSAgICAgLy8gdHJ5IHRvIGxvYWQg dGhlIGxhc3Qgc2F2ZWQgcGFyYW1ldGVycyBmcm9tIHRoZSBjYWNoZSBvciBmcm9tIHRoZSBwYXJh bWZpbGUgZmlsZQotICAgICBQcm9jUGFyYW1zKiBsZHByb2YgPSBvcGVuVGhtLT5jcmVhdGVQcm9j UGFyYW1zRm9yVXBkYXRlICh0cnVlLCBmYWxzZSk7IC8vIHdpbGwgYmUgZnJlZWQgYnkgaW5pdFBy b2ZpbGUKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygp OwotICAgICAvLyBpbml0aWFsaXplIHByb2ZpbGUKLSAgICAgR2xpYjo6dXN0cmluZyBkZWZQcm9m ID0gb3BlblRobS0+Z2V0VHlwZSgpID09IEZUX1JhdyA/IG9wdGlvbnMuZGVmUHJvZlJhdyA6IG9w dGlvbnMuZGVmUHJvZkltZzsKLSAgICAgcHJvZmlsZXAtPmluaXRQcm9maWxlIChkZWZQcm9mLCBs ZHByb2YpOwotQEAgLTE1MzUsNiArMTU0MSw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnJlZnJlc2hQ cm9jZXNzaW5nU3RhdGUgKGJvb2wgaW5Qcm9jZXNzaW5nUCkKLSAgICAgICAgIGlmIChwcm9jZXNz aW5nU3RhcnRlZFRpbWUgIT0gMCkgewotICAgICAgICAgICAgIHRpbWVfdCBjdXJUaW1lID0gOjp0 aW1lIChudWxscHRyKTsKLSAKLSsgICAgICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBw OjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICAgICAgaWYgKDo6ZGlmZnRpbWUgKGN1clRpbWUs IHByb2Nlc3NpbmdTdGFydGVkVGltZSkgPiBvcHRpb25zLnNuZExuZ0VkaXRQcm9jRG9uZVNlY3Mp IHsKLSAgICAgICAgICAgICAgICAgU291bmRNYW5hZ2VyOjpwbGF5U291bmRBc3luYyAob3B0aW9u cy5zbmRMbmdFZGl0UHJvY0RvbmUpOwotICAgICAgICAgICAgIH0KLUBAIC0xNjQxLDYgKzE2NDgs NyBAQCB2b2lkIEVkaXRvclBhbmVsOjpoaWRlSGlzdG9yeUFjdGl2YXRlZCAoKQotICAgICAgICAg aHBhbmVkbC0+cGFjazEgKCpsZWZ0Ym94LCBmYWxzZSwgZmFsc2UpOwotICAgICB9Ci0gCi0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMu c2hvd0hpc3RvcnkgPSBoaWRlaHAtPmdldF9hY3RpdmUoKTsKLSAKLSAgICAgaWYgKG9wdGlvbnMu c2hvd0hpc3RvcnkpIHsKLUBAIC0xNjk3LDYgKzE3MDUsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjp0 YlRvcFBhbmVsXzFfdG9nZ2xlZCAoKQotIAotICAgICBpZiAoY2F0YWxvZ1BhbmUpIHsgLy8gY2F0 YWxvZ1BhbmUgZG9lcyBub3QgZXhpc3QgaW4gbXVsdGl0YWIgbW9kZQotIAotKyAgICAgICAgYXV0 byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgICAgIGlmICh0YlRv cFBhbmVsXzEtPmdldF9hY3RpdmUoKSkgewotICAgICAgICAgICAgIGNhdGFsb2dQYW5lLT5zaG93 KCk7Ci0gICAgICAgICAgICAgdGJUb3BQYW5lbF8xLT5zZXRfaW1hZ2UgKCppVG9wUGFuZWxfMV9I aWRlKTsKLUBAIC0xODgyLDcgKzE4OTEsNyBAQCBib29sIEVkaXRvclBhbmVsOjpoYW5kbGVTaG9y dGN1dEtleSAoR2RrRXZlbnRLZXkqIGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7Ci0gCi0gICAgICAgICAgICAgICAgIGNhc2UgR0RLX0tFWV95OiAvLyBzeW5jaHJvbml6 ZSBmaWxlYnJvd3NlciB3aXRoIGltYWdlIGluIEVkaXRvcgotLSAgICAgICAgICAgICAgICAgICAg aWYgKCFzaW1wbGVFZGl0b3IgJiYgZlBhbmVsICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0rICAgICAg ICAgICAgICAgICAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSAmJiBmUGFuZWwg JiYgIWZuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBmUGFuZWwtPmZp bGVDYXRhbG9nLT5zZWxlY3RJbWFnZSAoZm5hbWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLUBAIC0xODkwLDcg KzE4OTksNyBAQCBib29sIEVkaXRvclBhbmVsOjpoYW5kbGVTaG9ydGN1dEtleSAoR2RrRXZlbnRL ZXkqIGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHRvIGF2b2lkIGdjYyBj b21wbGFpbgotIAotICAgICAgICAgICAgICAgICBjYXNlIEdES19LRVlfeDogLy8gY2xlYXIgZmls dGVycyBhbmQgc3luY2hyb25pemUgZmlsZWJyb3dzZXIgd2l0aCBpbWFnZSBpbiBFZGl0b3IKLS0g ICAgICAgICAgICAgICAgICAgIGlmICghc2ltcGxlRWRpdG9yICYmIGZQYW5lbCAmJiAhZm5hbWUu ZW1wdHkoKSkgewotKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxl RWRpdG9yKCkgJiYgZlBhbmVsICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgZlBhbmVsLT5maWxlQ2F0YWxvZy0+c2VsZWN0SW1hZ2UgKGZuYW1lLCB0cnVlKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg ICAgIH0KLUBAIC0xOTA2LDIxICsxOTE1LDIxIEBAIGJvb2wgRWRpdG9yUGFuZWw6OmhhbmRsZVNo b3J0Y3V0S2V5IChHZGtFdmVudEtleSogZXZlbnQpCi0gICAgICAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKLSAKLSAgICAgICAgICAgICAgICAgY2FzZSBHREtfS0VZX3M6Ci0tICAgICAgICAg ICAgICAgICAgICBpZiAoIWdpbXBQbHVnaW4pIHsKLSsgICAgICAgICAgICAgICAgICAgIGlmICgh QXBwOjpnZXQoKS5pc0dpbXBQbHVnaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgIHNh dmVBc1ByZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0cnVlOwotIAotICAgICAgICAgICAgICAgICBjYXNlIEdES19LRVlfYjoK LS0gICAgICAgICAgICAgICAgICAgIGlmICghZ2ltcFBsdWdpbiAmJiAhc2ltcGxlRWRpdG9yKSB7 Ci0rICAgICAgICAgICAgICAgICAgICBpZiAoIUFwcDo6Z2V0KCkuaXNHaW1wUGx1Z2luKCkgJiYg IUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg IHF1ZXVlSW1nUHJlc3NlZCgpOwotICAgICAgICAgICAgICAgICAgICAgfQotIAotICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gCi0gICAgICAgICAgICAgICAgIGNhc2UgR0RLX0tF WV9lOgotLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnaW1wUGx1Z2luKSB7Ci0rICAgICAgICAg ICAgICAgICAgICBpZiAoIUFwcDo6Z2V0KCkuaXNHaW1wUGx1Z2luKCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICBzZW5kVG9FeHRlcm5hbFByZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAg ICAgIH0KLSAKLUBAIC0xOTYyLDcgKzE5NzEsNyBAQCBib29sIEVkaXRvclBhbmVsOjpoYW5kbGVT aG9ydGN1dEtleSAoR2RrRXZlbnRLZXkqIGV2ZW50KQotICAgICBpZiAoc2hpZnQpIHsKLSAgICAg ICAgIHN3aXRjaCAoZXZlbnQtPmtleXZhbCkgewotICAgICAgICAgICAgIGNhc2UgR0RLX0tFWV9G MzogLy8gb3BlbiBQcmV2aW91cyBpbWFnZSBmcm9tIEVkaXRvcidzIHBlcnNwZWN0aXZlCi0tICAg ICAgICAgICAgICAgIGlmICghc2ltcGxlRWRpdG9yICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHko KSkgewotKyAgICAgICAgICAgICAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSAm JiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgIEVkaXRv clBhbmVsOjpvcGVuUHJldmlvdXNFZGl0b3JJbWFnZSgpOwotICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgIH0KLUBAIC0xOTcwLDcgKzE5NzksNyBAQCBi b29sIEVkaXRvclBhbmVsOjpoYW5kbGVTaG9ydGN1dEtleSAoR2RrRXZlbnRLZXkqIGV2ZW50KQot ICAgICAgICAgICAgICAgICBicmVhazsgLy8gdG8gYXZvaWQgZ2NjIGNvbXBsYWluCi0gCi0gICAg ICAgICAgICAgY2FzZSBHREtfS0VZX0Y0OiAvLyBvcGVuIG5leHQgaW1hZ2UgZnJvbSBFZGl0b3In cyBwZXJzcGVjdGl2ZQotLSAgICAgICAgICAgICAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiBmUGFu ZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSsgICAgICAgICAgICAgICAgaWYgKCFBcHA6OmdldCgp LmlzU2ltcGxlRWRpdG9yKCkgJiYgZlBhbmVsICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICBFZGl0b3JQYW5lbDo6b3Blbk5leHRFZGl0b3JJbWFnZSgpOwotICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgIH0KLUBAIC0xOTg3 LDcgKzE5OTYsNyBAQCBib29sIEVkaXRvclBhbmVsOjpoYW5kbGVTaG9ydGN1dEtleSAoR2RrRXZl bnRLZXkqIGV2ZW50KQotICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgIH0KLSAKLS0gICAgaWYg KCFzaW1wbGVFZGl0b3IgJiYgZlBhbmVsKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBs ZUVkaXRvcigpICYmIGZQYW5lbCkgewotICAgICAgICAgaWYgKGZQYW5lbC0+aGFuZGxlU2hvcnRj dXRLZXkgKGV2ZW50KSkgewotICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgfQot QEAgLTIwNjAsNyArMjA2OSw3IEBAIGJvb2wgRWRpdG9yUGFuZWw6OmlkbGVfaW1hZ2VTYXZlZCAo UHJvZ3Jlc3NDb25uZWN0b3I8aW50PiAqcGMsIHJ0ZW5naW5lOjpJSW1hZ2VmCi0gICAgICAgICBp ZiAoc2Yuc2F2ZVBhcmFtcykgewotICAgICAgICAgICAgIC8vIFdlIGtlZXAgdGhlIGV4dGVuc2lv biB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgcHJvZmlsZSB3aGVuIHdlIGhhdmUKLSAgICAgICAg ICAgICAvLyB0aGUgc2FtZSBvdXRwdXQgZmlsZW5hbWUgd2l0aCBkaWZmZXJlbnQgZXh0ZW5zaW9u Ci0tICAgICAgICAgICAgcHBhcmFtcy5zYXZlIChmbmFtZSArICIub3V0IiArIHBhcmFtRmlsZUV4 dGVuc2lvbik7Ci0rICAgICAgICAgICAgcHBhcmFtcy5zYXZlIChmbmFtZSArICIub3V0IiArIEFw cDo6UEFSQU1fRklMRV9FWFRFTlNJT04pOwotICAgICAgICAgfQotICAgICB9IGVsc2UgewotICAg ICAgICAgZXJyb3IgKE0gKCJNQUlOX01TR19DQU5OT1RTQVZFIiksIGZuYW1lKTsKLUBAIC0yMDc1 LDcgKzIwODQsNyBAQCBib29sIEVkaXRvclBhbmVsOjppZGxlX2ltYWdlU2F2ZWQgKFByb2dyZXNz Q29ubmVjdG9yPGludD4gKnBjLCBydGVuZ2luZTo6SUltYWdlZgotICAgICBzZXRQcm9ncmVzc1N0 YXRlIChmYWxzZSk7Ci0gCi0gICAgIGRlbGV0ZSBwYzsKLS0gICAgU291bmRNYW5hZ2VyOjpwbGF5 U291bmRBc3luYyAob3B0aW9ucy5zbmRCYXRjaFF1ZXVlRG9uZSk7Ci0rICAgIFNvdW5kTWFuYWdl cjo6cGxheVNvdW5kQXN5bmMgKEFwcDo6Z2V0KCkub3B0aW9ucygpLnNuZEJhdGNoUXVldWVEb25l KTsKLSAgICAgaXNQcm9jZXNzaW5nID0gZmFsc2U7Ci0gICAgIHJldHVybiBmYWxzZTsKLSB9Ci1A QCAtMjA5MSw3ICsyMTAwLDcgQEAgQmF0Y2hRdWV1ZUVudHJ5KiBFZGl0b3JQYW5lbDo6Y3JlYXRl QmF0Y2hRdWV1ZUVudHJ5ICgpCi0gICAgIGlzcmMtPmdldEltYWdlU291cmNlKCktPmdldEZ1bGxT aXplIChmdWxsVywgZnVsbEgsIHBwYXJhbXMuY29hcnNlLnJvdGF0ZSA9PSA5MCB8fCBwcGFyYW1z LmNvYXJzZS5yb3RhdGUgPT0gMjcwID8gVFJfUjkwIDogVFJfTk9ORSk7Ci0gICAgIGludCBwcmV2 aCA9IEJhdGNoUXVldWU6OmNhbGNNYXhUaHVtYm5haWxIZWlnaHQoKTsKLSAgICAgaW50IHByZXZ3 ID0gaW50ICgoc2l6ZV90KWZ1bGxXICogKHNpemVfdClwcmV2aCAvIChzaXplX3QpZnVsbEgpOwot LSAgICByZXR1cm4gbmV3IEJhdGNoUXVldWVFbnRyeSAoam9iLCBwcGFyYW1zLCBvcGVuVGhtLT5n ZXRGaWxlTmFtZSgpLCBwcmV2dywgcHJldmgsIG9wZW5UaG0sIG9wdGlvbnMub3ZlcndyaXRlT3V0 cHV0RmlsZSk7Ci0rICAgIHJldHVybiBuZXcgQmF0Y2hRdWV1ZUVudHJ5IChqb2IsIHBwYXJhbXMs IG9wZW5UaG0tPmdldEZpbGVOYW1lKCksIHByZXZ3LCBwcmV2aCwgb3BlblRobSwgQXBwOjpnZXQo KS5vcHRpb25zKCkub3ZlcndyaXRlT3V0cHV0RmlsZSk7Ci0gfQotIAotIAotQEAgLTIxMDgsNiAr MjExNyw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnNhdmVBc1ByZXNzZWQgKCkKLSAgICAgU2F2ZUFz RGlhbG9nKiBzYXZlQXNEaWFsb2c7Ci0gICAgIGF1dG8gdG9wbGV2ZWwgPSBzdGF0aWNfY2FzdDxH dGs6OldpbmRvdyo+IChnZXRfdG9wbGV2ZWwgKCkpOwotIAotKyAgICBhdXRvJiBvcHRpb25zID0g QXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0IChvcHRp b25zLmxhc3RTYXZlQXNQYXRoLCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAgICAgICAg c2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyAob3B0aW9ucy5sYXN0U2F2ZUFzUGF0aCwg dG9wbGV2ZWwpOwotICAgICB9IGVsc2UgewotQEAgLTIyMTgsNyArMjIyOCw3IEBAIHZvaWQgRWRp dG9yUGFuZWw6OnNlbmRUb0V4dGVybmFsKCkKLSAgICAgLy8gZGV2ZWxvcCBpbWFnZQotICAgICBy dGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcyBwcGFyYW1zOwotICAgICBpcGMtPmdldFBh cmFtcyAoJnBwYXJhbXMpOwotLSAgICBpZiAob3B0aW9ucy5lZGl0b3JfYnlwYXNzX291dHB1dF9w cm9maWxlKSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5lZGl0b3JfYnlwYXNzX291 dHB1dF9wcm9maWxlKSB7Ci0gICAgICAgICBwcGFyYW1zLmljbS5vdXRwdXRQcm9maWxlID0gcnRl bmdpbmU6OnByb2NwYXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtczo6Tm9Qcm9maWxlU3RyaW5n OwotICAgICB9Ci0gCi1AQCAtMjI0MSw2ICsyMjUxLDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6c2Vu ZFRvRXh0ZXJuYWwoKQotIHZvaWQgRWRpdG9yUGFuZWw6OnNlbmRUb0V4dGVybmFsQ2hhbmdlZChp bnQpCi0gewotICAgICBpbnQgaW5kZXggPSBzZW5kX3RvX2V4dGVybmFsLT5nZXRTZWxlY3RlZCgp OwotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBp ZiAoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID09IG9wdGlvbnMu ZXh0ZXJuYWxFZGl0b3JzLnNpemUoKSkgewotICAgICAgICAgaW5kZXggPSAtMTsKLSAgICAgfQot QEAgLTIyNTIsNiArMjI2Myw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnNlbmRUb0V4dGVybmFsQ2hh bmdlZChpbnQpCi0gCi0gdm9pZCBFZGl0b3JQYW5lbDo6c2VuZFRvRXh0ZXJuYWxQcmVzc2VkKCkK LSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKG9wdGlvbnMuZXh0ZXJuYWxFZGl0b3JJbmRleCA9PSAtMSkgewotICAgICAgICAgLy8g Ik90aGVyIiBleHRlcm5hbCBlZGl0b3IuIFNob3cgYXBwIGNob29zZXIgZGlhbG9nIHRvIGxldCB1 c2VyIHBpY2suCi0gICAgICAgICBSVEFwcENob29zZXJEaWFsb2cgKmRpYWxvZyA9IGdldEFwcENo b29zZXJEaWFsb2coKTsKLUBAIC0yMjc5LDcgKzIyOTEsNyBAQCBib29sIEVkaXRvclBhbmVsOjpz YXZlSW1tZWRpYXRlbHkgKGNvbnN0IEdsaWI6OnVzdHJpbmcgJmZpbGVuYW1lLCBjb25zdCBTYXZl Rm9ybQotIAotICAgICBpbnQgZXJyID0gMDsKLSAKLS0gICAgaWYgKGdpbXBQbHVnaW4pIHsKLSsg ICAgaWYgKEFwcDo6Z2V0KCkuaXNHaW1wUGx1Z2luKCkpIHsKLSAgICAgICAgIGVyciA9IGltZy0+ c2F2ZUFzVElGRiAoZmlsZW5hbWUsIDMyLCB0cnVlLCB0cnVlKTsKLSAgICAgfSBlbHNlIGlmIChz Zi5mb3JtYXQgPT0gInRpZiIpIHsKLSAgICAgICAgIGVyciA9IGltZy0+c2F2ZUFzVElGRiAoZmls ZW5hbWUsIHNmLnRpZmZCaXRzLCBzZi50aWZmRmxvYXQsIHNmLnRpZmZVbmNvbXByZXNzZWQsIHNm LmJpZ1RpZmYpOwotQEAgLTIyOTgsMjEgKzIzMTAsMjEgQEAgYm9vbCBFZGl0b3JQYW5lbDo6c2F2 ZUltbWVkaWF0ZWx5IChjb25zdCBHbGliOjp1c3RyaW5nICZmaWxlbmFtZSwgY29uc3QgU2F2ZUZv cm0KLSAKLSB2b2lkIEVkaXRvclBhbmVsOjpvcGVuUHJldmlvdXNFZGl0b3JJbWFnZSgpCi0gewot LSAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSsg ICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgJiYgZlBhbmVsICYmICFmbmFtZS5l bXB0eSgpKSB7Ci0gICAgICAgICBmUGFuZWwtPmZpbGVDYXRhbG9nLT5vcGVuTmV4dFByZXZpb3Vz RWRpdG9ySW1hZ2UgKGZuYW1lLCBmYWxzZSwgTkFWX1BSRVZJT1VTKTsKLSAgICAgfQotIH0KLSAK LSB2b2lkIEVkaXRvclBhbmVsOjpvcGVuTmV4dEVkaXRvckltYWdlKCkKLSB7Ci0tICAgIGlmICgh c2ltcGxlRWRpdG9yICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkgewotKyAgICBpZiAoIUFw cDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSAmJiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsK LSAgICAgICAgIGZQYW5lbC0+ZmlsZUNhdGFsb2ctPm9wZW5OZXh0UHJldmlvdXNFZGl0b3JJbWFn ZSAoZm5hbWUsIGZhbHNlLCBOQVZfTkVYVCk7Ci0gICAgIH0KLSB9Ci0gCi0gdm9pZCBFZGl0b3JQ YW5lbDo6c3luY0ZpbGVCcm93c2VyKCkgICAvLyBzeW5jaHJvbml6ZSBmaWxlYnJvd3NlciB3aXRo IGltYWdlIGluIEVkaXRvcgotIHsKLS0gICAgaWYgKCFzaW1wbGVFZGl0b3IgJiYgZlBhbmVsICYm ICFmbmFtZS5lbXB0eSgpKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigp ICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkgewotICAgICAgICAgZlBhbmVsLT5maWxlQ2F0 YWxvZy0+c2VsZWN0SW1hZ2UgKGZuYW1lLCBmYWxzZSk7Ci0gICAgIH0KLSB9Ci1AQCAtMjMzNiw2 ICsyMzQ4LDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6c2V0RXh0ZXJuYWxFZGl0b3JDaGFuZ2VkU2ln bmFsKEV4dGVybmFsRWRpdG9yQ2hhbmdlZFNpZ25hbCAqc2kKLSAKLSB2b2lkIEVkaXRvclBhbmVs OjpoaXN0b2dyYW1Qcm9maWxlX3RvZ2dsZWQoKQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgb3B0aW9ucy5ydFNldHRpbmdzLkhpc3RvZ3Jh bVdvcmtpbmcgPSB0b2dnbGVIaXN0b2dyYW1Qcm9maWxlLT5nZXRfYWN0aXZlKCk7Ci0gICAgIGNv bG9yTWdtdFRvb2xCYXItPnVwZGF0ZUhpc3RvZ3JhbSgpOwotIH0KLUBAIC0yMzQ2LDYgKzIzNTks NyBAQCBib29sIEVkaXRvclBhbmVsOjppZGxlX3NlbmRUb0dpbXAgKCBQcm9ncmVzc0Nvbm5lY3Rv cjxydGVuZ2luZTo6SUltYWdlZmxvYXQqPiAqcAotICAgICBydGVuZ2luZTo6SUltYWdlZmxvYXQq IGltZyA9IHBjLT5yZXR1cm5WYWx1ZSgpOwotICAgICBkZWxldGUgcGM7Ci0gCi0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKGltZykgewot ICAgICAgICAgLy8gZ2V0IGZpbGUgbmFtZSBiYXNlCi0gICAgICAgICBHbGliOjp1c3RyaW5nIHNo b3J0bmFtZSA9IHJlbW92ZUV4dGVuc2lvbihHbGliOjpwYXRoX2dldF9iYXNlbmFtZShmbmFtZSkp OwotQEAgLTI0NzcsNiArMjQ5MSw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6Om9uQXBwQ2hvb3NlckRp YWxvZ1Jlc3BvbnNlKGludCByZXNwb25zZUlkKQotIAotIHZvaWQgRWRpdG9yUGFuZWw6OnVwZGF0 ZUV4dGVybmFsRWRpdG9yU2VsZWN0aW9uKCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaW50IGluZGV4ID0gc2VuZF90b19leHRlcm5h bC0+Z2V0U2VsZWN0ZWQoKTsKLSAgICAgaWYgKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5z aWduZWQ+KGluZGV4KSA9PSBvcHRpb25zLmV4dGVybmFsRWRpdG9ycy5zaXplKCkpIHsKLSAgICAg ICAgIGluZGV4ID0gLTE7Ci1AQCAtMjgxNiw2ICsyODMxLDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6 dXBkYXRlVFBWU2Nyb2xsYmFyIChib29sIGhpZGUpCi0gCi0gdm9pZCBFZGl0b3JQYW5lbDo6dXBk YXRlSGlzdG9ncmFtUG9zaXRpb24gKGludCBvbGRQb3NpdGlvbiwgaW50IG5ld1Bvc2l0aW9uKQot IHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAot ICAgICBzd2l0Y2ggKG5ld1Bvc2l0aW9uKSB7Ci0gICAgICAgICBjYXNlIDA6Ci1kaWZmIC0tZ2l0 IGEvcnRndWkvZWRpdHdpbmRvdy5jYyBiL3J0Z3VpL2VkaXR3aW5kb3cuY2MKLWluZGV4IGNlMzlm NWQ2Zi4uZjQ4MTk5YjAzIDEwMDY0NAotLS0tIGEvcnRndWkvZWRpdHdpbmRvdy5jYwotKysrIGIv cnRndWkvZWRpdHdpbmRvdy5jYwotQEAgLTI2LDE1ICsyNiwxMyBAQAotICNpbmNsdWRlIDxndGsv Z3RrLmg+Ci0gI2luY2x1ZGUgInRocmVhZHV0aWxzLmgiCi0gCi0tZXh0ZXJuIEdsaWI6OnVzdHJp bmcgYXJndjA7Ci0tCi0gLy8gQ2hlY2sgaWYgdGhlIHN5c3RlbSBoYXMgbW9yZSB0aGFuIG9uZSBk aXNwbGF5IGFuZCBvcHRpb24gaXMgc2V0Ci0gYm9vbCBFZGl0V2luZG93Ojppc011bHRpRGlzcGxh eUVuYWJsZWQoKQotIHsKLSAgICAgY29uc3QgYXV0byBzY3JlZW4gPSBHZGs6OlNjcmVlbjo6Z2V0 X2RlZmF1bHQoKTsKLSAKLSAgICAgaWYgKHNjcmVlbikgewotLSAgICAgICAgcmV0dXJuIG9wdGlv bnMubXVsdGlEaXNwbGF5TW9kZSA+IDAgJiYgc2NyZWVuLT5nZXRfZGlzcGxheSgpLT5nZXRfbl9t b25pdG9ycygpID4gMTsKLSsgICAgICAgIHJldHVybiBBcHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0 aURpc3BsYXlNb2RlID4gMCAmJiBzY3JlZW4tPmdldF9kaXNwbGF5KCktPmdldF9uX21vbml0b3Jz KCkgPiAxOwotICAgICB9IGVsc2UgewotICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGVyZSBp cyBubyBkZWZhdWx0IHNjcmVlbgotICAgICB9Ci1AQCAtNzAsNiArNjgsNyBAQCBFZGl0V2luZG93 OjpFZGl0V2luZG93IChSVFdpbmRvdyogcCkKLSAgICAgc2V0X3RpdGxlX2RlY29yYXRlZCgiIik7 Ci0gICAgIHNldF9tb2RhbChmYWxzZSk7Ci0gICAgIHNldF9yZXNpemFibGUodHJ1ZSk7Ci0rICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgc2V0X2Rl ZmF1bHRfc2l6ZShvcHRpb25zLm1lb3dXaWR0aCwgb3B0aW9ucy5tZW93SGVpZ2h0KTsKLSAKLSAg ICAgcHJvcGVydHlfZGVzdHJveV93aXRoX3BhcmVudCgpLnNldF92YWx1ZShmYWxzZSk7Ci1AQCAt OTYsNiArOTUsNyBAQCB2b2lkIEVkaXRXaW5kb3c6OnJlc3RvcmVXaW5kb3coKQotIAotICAgICAg ICAgaW50IG1lb3dNb25pdG9yID0gMDsgLy8gQnkgZGVmYXVsdCwgc2V0IHRvIG1haW4gbW9uaXRv cgotICAgICAgICAgY29uc3QgYXV0byBkaXNwbGF5ID0gZ2V0X3NjcmVlbigpLT5nZXRfZGlzcGxh eSgpOwotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygp OwotIAotICAgICAgICAgaWYgKGlzTXVsdGlEaXNwbGF5RW5hYmxlZCgpKSB7Ci0gICAgICAgICAg ICAgaWYgKG9wdGlvbnMubWVvd01vbml0b3IgPj0gMCkgeyAvLyBVc2UgZGlzcGxheSBmcm9tIGxh c3Qgc2Vzc2lvbiBpZiBhdmFpbGFibGUKLUBAIC0xNjgsNiArMTY4LDcgQEAgdm9pZCBFZGl0V2lu ZG93Ojpvbl9yZWFsaXplICgpCi0gCi0gYm9vbCBFZGl0V2luZG93Ojpvbl9jb25maWd1cmVfZXZl bnQoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKCFvcHRpb25zLm1lb3dNYXhpbWl6ZWQg JiYgIWlzRnVsbHNjcmVlbiAmJiAhaXNNaW5pbWl6ZWQpIHsKLSAgICAgICAgIGdldF9wb3NpdGlv bihvcHRpb25zLm1lb3dYLCBvcHRpb25zLm1lb3dZKTsKLSAgICAgICAgIGdldF9zaXplKG9wdGlv bnMubWVvd1dpZHRoLCBvcHRpb25zLm1lb3dIZWlnaHQpOwotQEAgLTE3OCw2ICsxNzksNyBAQCBi b29sIEVkaXRXaW5kb3c6Om9uX2NvbmZpZ3VyZV9ldmVudChHZGtFdmVudENvbmZpZ3VyZSogZXZl bnQpCi0gCi0gYm9vbCBFZGl0V2luZG93Ojpvbl93aW5kb3dfc3RhdGVfZXZlbnQoR2RrRXZlbnRX aW5kb3dTdGF0ZSogZXZlbnQpCi0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5t dXRfb3B0aW9ucygpOwotICAgICAvLyBSZXRyaWV2ZSBSVCB3aW5kb3cgc3RhdGVzCi0gICAgIG9w dGlvbnMubWVvd01heGltaXplZCA9IGV2ZW50LT5uZXdfd2luZG93X3N0YXRlICYgR0RLX1dJTkRP V19TVEFURV9NQVhJTUlaRUQ7Ci0gICAgIGlzTWluaW1pemVkID0gZXZlbnQtPm5ld193aW5kb3df c3RhdGUgJiBHREtfV0lORE9XX1NUQVRFX0lDT05JRklFRDsKLUBAIC0zNDYsNiArMzQ4LDcgQEAg dm9pZCBFZGl0V2luZG93OjpnZXRfcG9zaXRpb24oaW50JiB4LCBpbnQmIHkpIGNvbnN0Ci0gCi0g dm9pZCBFZGl0V2luZG93Ojp3cml0ZU9wdGlvbnMoKQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKGlzX3Zpc2libGUoKSkgewotICAg ICAgICAgaWYgKGlzTXVsdGlEaXNwbGF5RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgLy8gUmV0 cmlldmUgd2luZG93IG1vbml0b3IgSUQKLWRpZmYgLS1naXQgYS9ydGd1aS9leHBvcnRwYW5lbC5j YyBiL3J0Z3VpL2V4cG9ydHBhbmVsLmNjCi1pbmRleCA2ZTljMTNmYzguLjg0NTZjMjVhYSAxMDA2 NDQKLS0tLSBhL3J0Z3VpL2V4cG9ydHBhbmVsLmNjCi0rKysgYi9ydGd1aS9leHBvcnRwYW5lbC5j YwotQEAgLTE2OSw2ICsxNjksNyBAQCBFeHBvcnRQYW5lbDo6RXhwb3J0UGFuZWwgKCkgOiBsaXN0 ZW5lciAobnVsbHB0ciksIG9ybmFtZW50U3VyZmFjZShuZXcgUlRTdXJmYWNlKAotICAgICBwYWNr X3N0YXJ0ICgqd2JveCwgR3RrOjpQQUNLX1NIUklOSywgNCk7Ci0gICAgIHBhY2tfc3RhcnQgKCpo Ym94LCBHdGs6OlBBQ0tfU0hSSU5LLCA0KTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBNYXhXaWR0aC0+c2V0X2RpZ2l0cyAoMCk7Ci0g ICAgIE1heFdpZHRoLT5zZXRfd2lkdGhfY2hhcnMgKDUpOwotICAgICBNYXhXaWR0aC0+c2V0X21h eF93aWR0aF9jaGFycyAoNSk7Ci1AQCAtMjU1LDYgKzI1Niw3IEBAIHZvaWQgRXhwb3J0UGFuZWw6 OlNhdmVTZXR0aW5nc0FzRGVmYXVsdCgpCi0gICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7ICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgfSB3aGlsZSAoZmFsc2UpCi0rICAgIGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIC8vIFNhdmUgZmFzdCBleHBvcnQgc2V0 dGluZ3MgdG8gb3B0aW9ucwotICAgICBGRV9PUFRfU1RPUkVfIChvcHRpb25zLmZhc3RleHBvcnRf YnlwYXNzX3NoYXJwZW5pbmcsIGJ5cGFzc19zaGFycGVuaW5nLT5nZXRfYWN0aXZlICAgICAgICAo KSk7Ci0gICAgIEZFX09QVF9TVE9SRV8gKG9wdGlvbnMuZmFzdGV4cG9ydF9ieXBhc3Nfc2hhcnBl bkVkZ2UsIGJ5cGFzc19zaGFycGVuRWRnZS0+Z2V0X2FjdGl2ZSAgICAgICAoKSk7Ci1AQCAtMzE4 LDYgKzMyMCw3IEBAIHZvaWQgRXhwb3J0UGFuZWw6OlNhdmVTZXR0aW5nc0FzRGVmYXVsdCgpCi0g Ci0gdm9pZCBFeHBvcnRQYW5lbDo6TG9hZERlZmF1bHRTZXR0aW5ncygpCi0gewotKyAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIC8vIExvYWQgZmFz dCBleHBvcnQgc2V0dGluZ3MgZnJvbSBvcHRpb25zCi0gICAgIGJ5cGFzc19zaGFycGVuaW5nLT5z ZXRfYWN0aXZlICAgICAgICAob3B0aW9ucy5mYXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuaW5nICAg ICAgICAgKTsKLSAgICAgYnlwYXNzX3NoYXJwZW5FZGdlLT5zZXRfYWN0aXZlICAgICAgIChvcHRp b25zLmZhc3RleHBvcnRfYnlwYXNzX3NoYXJwZW5FZGdlICAgICAgICApOwotZGlmZiAtLWdpdCBh L3J0Z3VpL2V4dHByb2cuY2MgYi9ydGd1aS9leHRwcm9nLmNjCi1pbmRleCBkYzNjYjYxYjQuLjg1 NzkwNjJlNCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2V4dHByb2cuY2MKLSsrKyBiL3J0Z3VpL2V4dHBy b2cuY2MKLUBAIC0yNDIsNiArMjQyLDcgQEAgYm9vbCBFeHRQcm9nU3RvcmU6Om9wZW5JbkdpbXAg KGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZpbGVOYW1lKQotIHsKLSAjaWYgZGVmaW5lZCBfV0lOMzIK LSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAg ICBhdXRvIGV4ZWN1dGFibGUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAob3B0aW9ucy5naW1wRGly LCAiYmluIiwgImdpbXAtd2luLXJlbW90ZSIpOwotICAgICBhdXRvIHN1Y2Nlc3MgPSBTaGVsbEV4 ZWN1dGUoIE5VTEwsICJvcGVuIiwgZXhlY3V0YWJsZS5jX3N0cigpLCBmaWxlTmFtZS5jX3N0cigp LCBOVUxMLCBTV19TSE9XTk9STUFMICk7Ci0gCi1AQCAtMzAwLDYgKzMwMSw3IEBAIGJvb2wgRXh0 UHJvZ1N0b3JlOjpvcGVuSW5HaW1wIChjb25zdCBHbGliOjp1c3RyaW5nJiBmaWxlTmFtZSkKLSAK LSBib29sIEV4dFByb2dTdG9yZTo6b3BlbkluUGhvdG9zaG9wIChjb25zdCBHbGliOjp1c3RyaW5n JiBmaWxlTmFtZSkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9w dGlvbnMoKTsKLSAjaWYgZGVmaW5lZCBfV0lOMzIKLSAKLSAgICAgY29uc3QgYXV0byBleGVjdXRh YmxlID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUob3B0aW9ucy5wc0RpciwgIlBob3Rvc2hvcC5leGUi KTsKLUBAIC0zMjEsNyArMzIzLDcgQEAgYm9vbCBFeHRQcm9nU3RvcmU6Om9wZW5JblBob3Rvc2hv cCAoY29uc3QgR2xpYjo6dXN0cmluZyYgZmlsZU5hbWUpCi0gYm9vbCBFeHRQcm9nU3RvcmU6Om9w ZW5JbkN1c3RvbUVkaXRvciAoY29uc3QgR2xpYjo6dXN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IEds aWI6OnVzdHJpbmcqIGNvbW1hbmQpCi0gewotICAgICBpZiAoIWNvbW1hbmQpIHsKLS0gICAgICAg IGNvbW1hbmQgPSAmKG9wdGlvbnMuY3VzdG9tRWRpdG9yUHJvZyk7Ci0rICAgICAgICBjb21tYW5k ID0gJihBcHA6OmdldCgpLm9wdGlvbnMoKS5jdXN0b21FZGl0b3JQcm9nKTsKLSAgICAgfQotIAot ICNpZiBkZWZpbmVkIF9XSU4zMgotZGlmZiAtLWdpdCBhL3J0Z3VpL2ZpbGVicm93c2VyLmNjIGIv cnRndWkvZmlsZWJyb3dzZXIuY2MKLWluZGV4IGExMDQzZDY2MS4uNTAzNWFkNmUyIDEwMDY0NAot LS0tIGEvcnRndWkvZmlsZWJyb3dzZXIuY2MKLSsrKyBiL3J0Z3VpL2ZpbGVicm93c2VyLmNjCi1A QCAtNTEsNyArNTEsNyBAQCBjb25zdCBHbGliOjp1c3RyaW5nKiBnZXRPcmlnaW5hbEV4dGVuc2lv biAoY29uc3QgVGh1bWJCcm93c2VyRW50cnlCYXNlKiBlbnRyeSkKLSAgICAgdHlwZWRlZiBzdGQ6 OnZlY3RvcjxHbGliOjp1c3RyaW5nPiBFeHRlbnNpb25WZWN0b3I7Ci0gICAgIHR5cGVkZWYgRXh0 ZW5zaW9uVmVjdG9yOjpjb25zdF9pdGVyYXRvciBFeHRlbnNpb25JdGVyYXRvcjsKLSAKLS0gICAg Y29uc3QgRXh0ZW5zaW9uVmVjdG9yJiBvcmlnaW5hbEV4dGVuc2lvbnMgPSBvcHRpb25zLnBhcnNl ZEV4dGVuc2lvbnM7Ci0rICAgIGNvbnN0IEV4dGVuc2lvblZlY3RvciYgb3JpZ2luYWxFeHRlbnNp b25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCkucGFyc2VkRXh0ZW5zaW9uczsKLSAKLSAgICAgLy8g RXh0cmFjdCBleHRlbnNpb24gZnJvbSBiYXNlbmFtZQotICAgICBjb25zdCBHbGliOjp1c3RyaW5n IGJhc2VuYW1lID0gR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUgKGVudHJ5LT5maWxlbmFtZS5sb3dl cmNhc2UoKSk7Ci1AQCAtMTQ4LDYgKzE0OCw3IEBAIEZpbGVCcm93c2VyOjpGaWxlQnJvd3NlciAo KSA6Ci0gICAgIHNlc3Npb25faWRfID0gMDsKLSAKLSAgICAgUHJvZmlsZVN0b3JlOjpnZXRJbnN0 YW5jZSgpLT5hZGRMaXN0ZW5lcih0aGlzKTsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICBpbnQgcCA9IDA7Ci0gICAgIHBtZW51ID0gbmV3 IEd0azo6TWVudSAoKTsKLUBAIC03NzEsNiArNzcyLDggQEAgdm9pZCBGaWxlQnJvd3Nlcjo6bWVu dUl0ZW1BY3RpdmF0ZWQgKEd0azo6TWVudUl0ZW0qIG0pCi0gICAgICAgICAgICAgcmV0dXJuOwot ICAgICAgICAgfQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRp b25zKCk7Ci0rCi0gICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbU1lbnVFeHRQcm9ncy5zaXpl KCk7IGorKykgewotICAgICAgICAgaWYgKG0gPT0gYW1pRXh0UHJvZ1tqXSkgewotICAgICAgICAg ICAgIGNvbnN0IGF1dG8gcEFjdCA9IG1NZW51RXh0UHJvZ3NbbS0+Z2V0X2xhYmVsKCldOwotQEAg LTg2OSw3ICs4NzIsNyBAQCB2b2lkIEZpbGVCcm93c2VyOjptZW51SXRlbUFjdGl2YXRlZCAoR3Rr OjpNZW51SXRlbSogbSkKLSAgICAgICAgIGlmKCAhbXNlbGVjdGVkLmVtcHR5KCkgKSB7Ci0gICAg ICAgICAgICAgcnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMgcHAgPSBtc2VsZWN0ZWRb MF0tPnRodW1ibmFpbC0+Z2V0UHJvY1BhcmFtcygpOwotICAgICAgICAgICAgIEd0azo6RmlsZUNo b29zZXJEaWFsb2cgZmMgKGdldFRvcGxldmVsV2luZG93ICh0aGlzKSwgIkRhcmsgRnJhbWUiLCBH dGs6OkZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiApOwotLSAgICAgICAgICAgIGJpbmRDdXJyZW50 Rm9sZGVyIChmYywgb3B0aW9ucy5sYXN0RGFya2ZyYW1lRGlyKTsKLSsgICAgICAgICAgICBiaW5k Q3VycmVudEZvbGRlciAoZmMsIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0RGFya2ZyYW1l RGlyKTsKLSAgICAgICAgICAgICBmYy5hZGRfYnV0dG9uKCBNKCJHRU5FUkFMX0NBTkNFTCIpLCBH dGs6OlJFU1BPTlNFX0NBTkNFTCk7Ci0gICAgICAgICAgICAgZmMuYWRkX2J1dHRvbiggTSgiR0VO RVJBTF9BUFBMWSIpLCBHdGs6OlJFU1BPTlNFX0FQUExZKTsKLSAKLUBAIC05MTMsNyArOTE2LDcg QEAgdm9pZCBGaWxlQnJvd3Nlcjo6bWVudUl0ZW1BY3RpdmF0ZWQgKEd0azo6TWVudUl0ZW0qIG0p Ci0gICAgICAgICAgICAgICAgIHJ0ZW5naW5lOjpERk1hbmFnZXI6OmdldEluc3RhbmNlKCkuaW5p dCggb3B0aW9ucy5ydFNldHRpbmdzLmRhcmtGcmFtZXNQYXRoICk7Ci0gICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgLy8gVGFyZ2V0IGRpcmVjdG9yeSBjcmVhdGlvbiBmYWls ZWQsIHdlIGNsZWFyIHRoZSBkYXJrRnJhbWVzUGF0aCBzZXR0aW5nCi0tICAgICAgICAgICAgICAg IG9wdGlvbnMucnRTZXR0aW5ncy5kYXJrRnJhbWVzUGF0aC5jbGVhcigpOwotKyAgICAgICAgICAg ICAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkucnRTZXR0aW5ncy5kYXJrRnJhbWVzUGF0aC5j bGVhcigpOwotICAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIG1zZ18gPSBHbGliOjp1c3Ry aW5nOjpjb21wb3NlIChNKCJNQUlOX01TR19QQVRIRE9FU05URVhJU1QiKSwgZXNjYXBlSHRtbENo YXJzKG9wdGlvbnMucnRTZXR0aW5ncy5kYXJrRnJhbWVzUGF0aCkpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgIlxuXG4iICsgTSgiTUFJTl9NU0dfT1BFUkFUSU9OQ0FO Q0VMTEVEIik7Ci0gICAgICAgICAgICAgICAgIEd0azo6TWVzc2FnZURpYWxvZyBtc2dkIChtc2df LCB0cnVlLCBHdGs6Ok1FU1NBR0VfRVJST1IsIEd0azo6QlVUVE9OU19PSywgdHJ1ZSk7Ci1AQCAt OTQ1LDcgKzk0OCw3IEBAIHZvaWQgRmlsZUJyb3dzZXI6Om1lbnVJdGVtQWN0aXZhdGVkIChHdGs6 Ok1lbnVJdGVtKiBtKQotICAgICAgICAgaWYoICFtc2VsZWN0ZWQuZW1wdHkoKSApIHsKLSAgICAg ICAgICAgICBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcyBwcCA9IG1zZWxlY3RlZFsw XS0+dGh1bWJuYWlsLT5nZXRQcm9jUGFyYW1zKCk7Ci0gICAgICAgICAgICAgR3RrOjpGaWxlQ2hv b3NlckRpYWxvZyBmYyAoZ2V0VG9wbGV2ZWxXaW5kb3cgKHRoaXMpLCAiRmxhdCBGaWVsZCIsIEd0 azo6RklMRV9DSE9PU0VSX0FDVElPTl9PUEVOICk7Ci0tICAgICAgICAgICAgYmluZEN1cnJlbnRG b2xkZXIgKGZjLCBvcHRpb25zLmxhc3RGbGF0ZmllbGREaXIpOwotKyAgICAgICAgICAgIGJpbmRD dXJyZW50Rm9sZGVyIChmYywgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RGbGF0ZmllbGRE aXIpOwotICAgICAgICAgICAgIGZjLmFkZF9idXR0b24oIE0oIkdFTkVSQUxfQ0FOQ0VMIiksIEd0 azo6UkVTUE9OU0VfQ0FOQ0VMKTsKLSAgICAgICAgICAgICBmYy5hZGRfYnV0dG9uKCBNKCJHRU5F UkFMX0FQUExZIiksIEd0azo6UkVTUE9OU0VfQVBQTFkpOwotIAotQEAgLTk4OSw3ICs5OTIsNyBA QCB2b2lkIEZpbGVCcm93c2VyOjptZW51SXRlbUFjdGl2YXRlZCAoR3RrOjpNZW51SXRlbSogbSkK LSAgICAgICAgICAgICAgICAgcnRlbmdpbmU6OmZmbS5pbml0KCBvcHRpb25zLnJ0U2V0dGluZ3Mu ZmxhdEZpZWxkc1BhdGggKTsKLSAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAvLyBUYXJnZXQgZGlyZWN0b3J5IGNyZWF0aW9uIGZhaWxlZCwgd2UgY2xlYXIgdGhlIGZsYXRG aWVsZHNQYXRoIHNldHRpbmcKLS0gICAgICAgICAgICAgICAgb3B0aW9ucy5ydFNldHRpbmdzLmZs YXRGaWVsZHNQYXRoLmNsZWFyKCk7Ci0rICAgICAgICAgICAgICAgIEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS5ydFNldHRpbmdzLmZsYXRGaWVsZHNQYXRoLmNsZWFyKCk7Ci0gICAgICAgICAgICAg ICAgIEdsaWI6OnVzdHJpbmcgbXNnXyA9IEdsaWI6OnVzdHJpbmc6OmNvbXBvc2UgKE0oIk1BSU5f TVNHX1BBVEhET0VTTlRFWElTVCIpLCBlc2NhcGVIdG1sQ2hhcnMob3B0aW9ucy5ydFNldHRpbmdz LmZsYXRGaWVsZHNQYXRoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KyAiXG5cbiIgKyBNKCJNQUlOX01TR19PUEVSQVRJT05DQU5DRUxMRUQiKTsKLSAgICAgICAgICAg ICAgICAgR3RrOjpNZXNzYWdlRGlhbG9nIG1zZ2QgKG1zZ18sIHRydWUsIEd0azo6TUVTU0FHRV9F UlJPUiwgR3RrOjpCVVRUT05TX09LLCB0cnVlKTsKLUBAIC0xMzkyLDYgKzEzOTUsNyBAQCBib29s IEZpbGVCcm93c2VyOjprZXlQcmVzc2VkIChHZGtFdmVudEtleSogZXZlbnQpCi0gCi0gdm9pZCBG aWxlQnJvd3Nlcjo6c2F2ZVRodW1ibmFpbEhlaWdodCAoaW50IGhlaWdodCkKLSB7Ci0rICAgIGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmICghb3B0aW9u cy5zYW1lVGh1bWJTaXplICYmIGdldExvY2F0aW9uKCkgPT0gVEhMT0NfRURJVE9SKSB7Ci0gICAg ICAgICBvcHRpb25zLnRodW1iU2l6ZVRhYiA9IGhlaWdodDsKLSAgICAgfSBlbHNlIHsKLUBAIC0x NDAxLDYgKzE0MDUsNyBAQCB2b2lkIEZpbGVCcm93c2VyOjpzYXZlVGh1bWJuYWlsSGVpZ2h0IChp bnQgaGVpZ2h0KQotIAotIGludCBGaWxlQnJvd3Nlcjo6Z2V0VGh1bWJuYWlsSGVpZ2h0ICgpCi0g ewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAg IC8vIFRoZSB1c2VyIGNvdWxkIGhhdmUgbWFudWFsbHkgZm9yY2VkIHRoZSBvcHRpb24gdG8gYSB0 b28gYmlnIHZhbHVlCi0gICAgIGlmICghb3B0aW9ucy5zYW1lVGh1bWJTaXplICYmIGdldExvY2F0 aW9uKCkgPT0gVEhMT0NfRURJVE9SKSB7Ci0gICAgICAgICByZXR1cm4gc3RkOjptYXgoc3RkOjpt aW4ob3B0aW9ucy50aHVtYlNpemVUYWIsIDgwMCksIDEwKTsKLUBAIC0xNDEyLDYgKzE0MTcsNyBA QCBpbnQgRmlsZUJyb3dzZXI6OmdldFRodW1ibmFpbEhlaWdodCAoKQotIHZvaWQgRmlsZUJyb3dz ZXI6OmVuYWJsZVRhYk1vZGUoYm9vbCBlbmFibGUpCi0gewotICAgICBUaHVtYkJyb3dzZXJCYXNl OjplbmFibGVUYWJNb2RlKGVuYWJsZSk7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6 OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKG9wdGlvbnMuaW5zcGVjdG9yV2luZG93KSB7Ci0g ICAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICAgaW5zcGVjdC0+cmVtb3ZlX2FjY2Vs ZXJhdG9yKHBtZW51LT5nZXRfYWNjZWxfZ3JvdXAoKSwgR0RLX0tFWV9mLCAoR2RrOjpNb2RpZmll clR5cGUpMCk7Ci1AQCAtMTY2OSwxMiArMTY3NSwxNCBAQCB2b2lkIEZpbGVCcm93c2VyOjpmcm9t VHJhc2hSZXF1ZXN0ZWQgKHN0ZDo6dmVjdG9yPEZpbGVCcm93c2VyRW50cnkqPiB0YmUpCi0gCi0g dm9pZCBGaWxlQnJvd3Nlcjo6c29ydE1ldGhvZFJlcXVlc3RlZCAoaW50IG1ldGhvZCkKLSB7Ci0r ICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlv bnMuc29ydE1ldGhvZCA9IE9wdGlvbnM6OlNvcnRNZXRob2QobWV0aG9kKTsKLSAgICAgcmVzb3J0 ICgpOwotIH0KLSAKLSB2b2lkIEZpbGVCcm93c2VyOjpzb3J0T3JkZXJSZXF1ZXN0ZWQgKGludCBv cmRlcikKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7 Ci0gICAgIG9wdGlvbnMuc29ydERlc2NlbmRpbmcgPSAhIW9yZGVyOwotICAgICByZXNvcnQgKCk7 Ci0gfQotQEAgLTE4MDAsNyArMTgwOCw3IEBAIHZvaWQgRmlsZUJyb3dzZXI6Om9wZW5OZXh0SW1h Z2UoKQotIHsKLSAgICAgTVlXUklURVJMT0NLKGwsIGVudHJ5UlcpOwotIAotLSAgICBpZiAoIWZk LmVtcHR5KCkgJiYgc2VsZWN0ZWQuc2l6ZSgpID4gMCAmJiAhb3B0aW9ucy50YWJiZWRVSSkgewot KyAgICBpZiAoIWZkLmVtcHR5KCkgJiYgc2VsZWN0ZWQuc2l6ZSgpID4gMCAmJiAhQXBwOjpnZXQo KS5vcHRpb25zKCkudGFiYmVkVUkpIHsKLSAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg ZmQuc2l6ZSgpIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICAgaWYgKHNlbGVjdGVkWzBdLT50aHVt Ym5haWwtPmdldEZpbGVOYW1lKCkgPT0gZmRbaV0tPmZpbGVuYW1lKSB7IC8vIGxvY2F0ZWQgMS1z dCBpbWFnZSBpbiBjdXJyZW50IHNlbGVjdGlvbgotICAgICAgICAgICAgICAgICBpZiAoaSA8IGZk LnNpemUoKSAmJiB0YmwpIHsKLUBAIC0xODYzLDcgKzE4NzEsNyBAQCB2b2lkIEZpbGVCcm93c2Vy OjpvcGVuUHJldkltYWdlKCkKLSB7Ci0gICAgIE1ZV1JJVEVSTE9DSyhsLCBlbnRyeVJXKTsKLSAK LS0gICAgaWYgKCFmZC5lbXB0eSgpICYmIHNlbGVjdGVkLnNpemUoKSA+IDAgJiYgIW9wdGlvbnMu dGFiYmVkVUkpIHsKLSsgICAgaWYgKCFmZC5lbXB0eSgpICYmIHNlbGVjdGVkLnNpemUoKSA+IDAg JiYgIUFwcDo6Z2V0KCkub3B0aW9ucygpLnRhYmJlZFVJKSB7Ci0gICAgICAgICBmb3IgKHNpemVf dCBpID0gMTsgaSA8IGZkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgaWYgKHNlbGVjdGVk WzBdLT50aHVtYm5haWwtPmdldEZpbGVOYW1lKCkgPT0gZmRbaV0tPmZpbGVuYW1lKSB7IC8vIGxv Y2F0ZWQgMS1zdCBpbWFnZSBpbiBjdXJyZW50IHNlbGVjdGlvbgotICAgICAgICAgICAgICAgICBp ZiAoaSA+IDAgJiYgdGJsKSB7Ci1AQCAtMTkyNiw3ICsxOTM0LDcgQEAgdm9pZCBGaWxlQnJvd3Nl cjo6c2VsZWN0SW1hZ2UoY29uc3QgR2xpYjo6dXN0cmluZyYgZm5hbWUsIGJvb2wgZG9TY3JvbGwp Ci0gewotICAgICBNWVdSSVRFUkxPQ0sobCwgZW50cnlSVyk7Ci0gCi0tICAgIGlmICghZmQuZW1w dHkoKSAmJiAhb3B0aW9ucy50YWJiZWRVSSkgewotKyAgICBpZiAoIWZkLmVtcHR5KCkgJiYgIUFw cDo6Z2V0KCkub3B0aW9ucygpLnRhYmJlZFVJKSB7Ci0gICAgICAgICBmb3IgKHNpemVfdCBpID0g MDsgaSA8IGZkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgaWYgKGZuYW1lID09IGZkW2ld LT5maWxlbmFtZSAmJiAhZmRbaV0tPmZpbHRlcmVkKSB7Ci0gICAgICAgICAgICAgICAgIC8vIG1h dGNoaW5nIGZpbGUgZm91bmQgZm9yIHN5bmMKLUBAIC0yMDU4LDYgKzIwNjYsOCBAQCB2b2lkIEZp bGVCcm93c2VyOjp1cGRhdGVQcm9maWxlTGlzdCgpCi0gCi0gICAgIHN1Yk1lbnVMaXN0WzBdID0g R3RrOjptYW5hZ2UgKG5ldyBHdGs6Ok1lbnUgKCkpOyAvLyBhZGRpbmcgdGhlIHJvb3Qgc3VibWVu dQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0r Ci0gICAgIC8vIGl0ZXJhdGUgdGhlIHByb2ZpbGUgc3RvcmUncyBwcm9maWxlIGxpc3QKLSAgICAg Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9mRW50cmllcy0+c2l6ZSgpOyBpKyspIHsKLSAgICAg ICAgIC8vIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgdGhlIGN1cnJlbnQgZW50cnkgKGJlIGl0IGEg Zm9sZGVyIG9yIGZpbGUpCi1AQCAtMjE0OSw3ICsyMTU5LDcgQEAgdm9pZCBGaWxlQnJvd3Nlcjo6 b3BlblJlcXVlc3RlZCggc3RkOjp2ZWN0b3I8RmlsZUJyb3dzZXJFbnRyeSo+IG1zZWxlY3RlZCkK LSB7Ci0gICAgIHN0ZDo6dmVjdG9yPFRodW1ibmFpbCo+IGVudHJpZXM7Ci0gICAgIC8vIGluIFNp bmdsZSBFZGl0b3IgTW9kZSBvcGVuIG9ubHkgbGFzdCBzZWxlY3RlZCBpbWFnZQotLSAgICBzaXpl X3Qgb3BlblN0YXJ0ID0gb3B0aW9ucy50YWJiZWRVSSA/IDAgOiAoIG1zZWxlY3RlZC5zaXplKCkg PiAwID8gbXNlbGVjdGVkLnNpemUoKSAtIDEgOiAwKTsKLSsgICAgc2l6ZV90IG9wZW5TdGFydCA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpLnRhYmJlZFVJID8gMCA6ICggbXNlbGVjdGVkLnNpemUoKSA+ IDAgPyBtc2VsZWN0ZWQuc2l6ZSgpIC0gMSA6IDApOwotIAotICAgICBmb3IgKHNpemVfdCBpID0g b3BlblN0YXJ0OyBpIDwgbXNlbGVjdGVkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICBlbnRyaWVz LnB1c2hfYmFjayAobXNlbGVjdGVkW2ldLT50aHVtYm5haWwpOwotZGlmZiAtLWdpdCBhL3J0Z3Vp L2ZpbGVicm93c2VyZW50cnkuY2MgYi9ydGd1aS9maWxlYnJvd3NlcmVudHJ5LmNjCi1pbmRleCA4 NWVjMGZhZDMuLmJiNjcyZWZkYSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2ZpbGVicm93c2VyZW50cnku Y2MKLSsrKyBiL3J0Z3VpL2ZpbGVicm93c2VyZW50cnkuY2MKLUBAIC0xMTIsNyArMTEyLDcgQEAg dm9pZCBGaWxlQnJvd3NlckVudHJ5OjpyZWZyZXNoUXVpY2tUaHVtYm5haWxJbWFnZSAoKQotICAg ICB9Ci0gCi0gICAgIC8vIE9ubHkgbWFrZSBhIChzbG93KSBwcm9jZXNzZWQgcHJldmlldyBpZiB0 aGUgcGljdHVyZSBoYXMgYmVlbiBlZGl0ZWQgYXQgYWxsCi0tICAgIGJvb2wgdXBncmFkZV90b19w cm9jZXNzZWQgPSAoIW9wdGlvbnMuaW50ZXJuYWxUaHVtYklmVW50b3VjaGVkIHx8IHRodW1ibmFp bC0+aXNQUGFyYW1zVmFsaWQoKSk7Ci0rICAgIGJvb2wgdXBncmFkZV90b19wcm9jZXNzZWQgPSAo IUFwcDo6Z2V0KCkub3B0aW9ucygpLmludGVybmFsVGh1bWJJZlVudG91Y2hlZCB8fCB0aHVtYm5h aWwtPmlzUFBhcmFtc1ZhbGlkKCkpOwotICAgICB0aHVtYkltYWdlVXBkYXRlci0+YWRkKHRoaXMs ICZ1cGRhdGVwcmlvcml0eSwgdXBncmFkZV90b19wcm9jZXNzZWQsIGZhbHNlLCB0aGlzKTsKLSB9 Ci0gCi1AQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgRmlsZUJyb3dzZXJFbnRyeTo6Y3VzdG9tQmFj a0J1ZmZlclVwZGF0ZSAoQ2Fpcm86OlJlZlB0cjxDYWlybzo6Q29udGV4dD4gYykKLSAgICAgICAg ICAgICBkcmF3Q3JvcCAoYywgcHJleCwgcHJleSwgcHJldywgcHJlaCwgMCwgMCwgc2NhbGUsICpj cm9wUGFyYW1zLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpDcm9wUGFyYW1zIGNwYXJhbXMgPSB0aHVtYm5haWwtPmdl dFByb2NQYXJhbXMoKS5jcm9wOwotLSAgICAgICAgICAgIHN3aXRjaCAob3B0aW9ucy5jcm9wR3Vp ZGVzKSB7Ci0rICAgICAgICAgICAgc3dpdGNoIChBcHA6OmdldCgpLm9wdGlvbnMoKS5jcm9wR3Vp ZGVzKSB7Ci0gICAgICAgICAgICAgY2FzZSBPcHRpb25zOjpDUk9QX0dVSURFX05PTkU6Ci0gICAg ICAgICAgICAgICAgIGNwYXJhbXMuZ3VpZGUgPSBydGVuZ2luZTo6cHJvY3BhcmFtczo6Q3JvcFBh cmFtczo6R3VpZGU6Ok5PTkU7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotQEAgLTI5Niw3ICsy OTYsNyBAQCBib29sIEZpbGVCcm93c2VyRW50cnk6Om1vdGlvbk5vdGlmeSAoaW50IHgsIGludCB5 KQotIAotICAgICBJbnNwZWN0b3IqIGluc3BlY3RvciA9IHBhcmVudC0+Z2V0SW5zcGVjdG9yKCk7 Ci0gCi0tICAgIGlmIChpbnNwZWN0b3IgJiYgaW5zcGVjdG9yLT5pc0FjdGl2ZSgpICYmICghcGFy ZW50LT5pc0luVGFiTW9kZSgpIHx8IG9wdGlvbnMuaW5zcGVjdG9yV2luZG93KSkgewotKyAgICBp ZiAoaW5zcGVjdG9yICYmIGluc3BlY3Rvci0+aXNBY3RpdmUoKSAmJiAoIXBhcmVudC0+aXNJblRh Yk1vZGUoKSB8fCBBcHA6OmdldCgpLm9wdGlvbnMoKS5pbnNwZWN0b3JXaW5kb3cpKSB7Ci0gICAg ICAgICBjb25zdCBydGVuZ2luZTo6Q29vcmQyRCBjb29yZChnZXRQb3NJbkltZ1NwYWNlKHgsIHkp KTsKLSAKLSAgICAgICAgIGlmIChjb29yZC54ICE9IC0xLikgewotZGlmZiAtLWdpdCBhL3J0Z3Vp L2ZpbGVjYXRhbG9nLmNjIGIvcnRndWkvZmlsZWNhdGFsb2cuY2MKLWluZGV4IGNlMjJiYmZkOC4u OWQ0YWNjNjI0IDEwMDY0NAotLS0tIGEvcnRndWkvZmlsZWNhdGFsb2cuY2MKLSsrKyBiL3J0Z3Vp L2ZpbGVjYXRhbG9nLmNjCi1AQCAtNDgsNiArNDgsODMgQEAKLSAKLSB1c2luZyBuYW1lc3BhY2Ug c3RkOwotIAotK25hbWVzcGFjZSB7Ci0rCi0rdm9pZCBnZXRGaWxlc1JlY3Vyc2l2ZWx5KAotKyAg ICBjb25zdCBHbGliOjp1c3RyaW5nICZkaXJfcGF0aCwKLSsgICAgaW50IG1heF9kZXB0aCwKLSsg ICAgaW50ICZkaXJfcXVvdGEsCi0rICAgIHN0ZDo6dmVjdG9yPEdsaWI6OnVzdHJpbmc+ICZmaWxl X25hbWVzLAotKyAgICBzdGQ6OnZlY3RvcjxHbGliOjpSZWZQdHI8R2lvOjpGaWxlPj4gKmRpcmVj dG9yaWVzX2V4cGxvcmVkKQotK3sKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkub3B0aW9ucygpOwotKyAgICB0cnkgewotKyAgICAgICAgY29uc3QgYXV0byBkaXIgPSBHaW86 OkZpbGU6OmNyZWF0ZV9mb3JfcGF0aChkaXJfcGF0aCk7Ci0rCi0rICAgICAgICBzdGF0aWMgY29u c3QgYXV0byBlbnVtZXJhdGVfYXR0cnMgPQotKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nKEdfRklM RV9BVFRSSUJVVEVfU1RBTkRBUkRfTkFNRSkgKyAiLCIgKwotKyAgICAgICAgICAgIEdfRklMRV9B VFRSSUJVVEVfU1RBTkRBUkRfVFlQRSArICIsIiArCi0rICAgICAgICAgICAgR19GSUxFX0FUVFJJ QlVURV9TVEFOREFSRF9JU19ISURERU4gKyAiLCIgKwotKyAgICAgICAgICAgIEdfRklMRV9BVFRS SUJVVEVfU1RBTkRBUkRfU1lNTElOS19UQVJHRVQ7Ci0rICAgICAgICBhdXRvIGVudW1lcmF0b3Ig PSBkaXItPmVudW1lcmF0ZV9jaGlsZHJlbigKLSsgICAgICAgICAgICBlbnVtZXJhdGVfYXR0cnMs Ci0rICAgICAgICAgICAgb3B0aW9ucy5icm93c2VSZWN1cnNpdmVGb2xsb3dMaW5rcwotKyAgICAg ICAgICAgICAgICA/IEdpbzo6RmlsZVF1ZXJ5SW5mb0ZsYWdzOjpGSUxFX1FVRVJZX0lORk9fTk9O RQotKyAgICAgICAgICAgICAgICA6IEdpbzo6RmlsZVF1ZXJ5SW5mb0ZsYWdzOjpGSUxFX1FVRVJZ X0lORk9fTk9GT0xMT1dfU1lNTElOS1MpOwotKwotKyAgICAgICAgaWYgKGRpcmVjdG9yaWVzX2V4 cGxvcmVkKSB7Ci0rICAgICAgICAgICAgZGlyZWN0b3JpZXNfZXhwbG9yZWQtPnB1c2hfYmFjayhk aXIpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgd2hpbGUgKHRydWUpIHsKLSsgICAgICAgICAg ICB0cnkgewotKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGZpbGUgPSBlbnVtZXJhdG9yLT5u ZXh0X2ZpbGUoKTsKLSsgICAgICAgICAgICAgICAgaWYgKCFmaWxlKSB7Ci0rICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgICAgICBp ZiAoIW9wdGlvbnMuZmJTaG93SGlkZGVuICYmIGZpbGUtPmlzX2hpZGRlbigpKSB7Ci0rICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgICAgICAgICAgfQotKwotKyAgICAgICAg ICAgICAgICBpZiAoZmlsZS0+Z2V0X2ZpbGVfdHlwZSgpID09IEdpbzo6RklMRV9UWVBFX0RJUkVD VE9SWSkgewotKyAgICAgICAgICAgICAgICAgICAgaWYgKG1heF9kZXB0aCA+IDAgJiYgZGlyX3F1 b3RhID4gMCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcg Y2hpbGRfZGlyX3BhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShkaXJfcGF0aCwgZmlsZS0+Z2V0 X25hbWUoKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsZXNSZWN1cnNpdmVseShj aGlsZF9kaXJfcGF0aCwgbWF4X2RlcHRoIC0gMSwgLS1kaXJfcXVvdGEsIGZpbGVfbmFtZXMsIGRp cmVjdG9yaWVzX2V4cGxvcmVkKTsKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgICAg ICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgZm5hbWUgPSBmaWxlLT5nZXRfbmFtZSgpOwotKyAgICAg ICAgICAgICAgICBjb25zdCBhdXRvIGxhc3Rkb3QgPSBmbmFtZS5maW5kX2xhc3Rfb2YoJy4nKTsK LSsKLSsgICAgICAgICAgICAgICAgaWYgKGxhc3Rkb3QgPj0gZm5hbWUubGVuZ3RoKCkgLSAxKSB7 Ci0rICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgICAgICAgICAgfQotKwot KyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBleHRlbnNpb25zID0gb3B0aW9ucy5wYXJzZWRF eHRlbnNpb25zU2V0OwotKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5maW5kKGZuYW1l LnN1YnN0cihsYXN0ZG90ICsgMSkubG93ZXJjYXNlKCkpID09IGV4dGVuc2lvbnMuZW5kKCkpIHsK LSsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgICAgICAgICAgICB9Ci0rCi0r ICAgICAgICAgICAgICAgIGZpbGVfbmFtZXMuZW1wbGFjZV9iYWNrKEdsaWI6OmJ1aWxkX2ZpbGVu YW1lKGRpcl9wYXRoLCBmbmFtZSkpOwotKyAgICAgICAgICAgIH0gY2F0Y2ggKGNvbnN0IEdsaWI6 OkV4Y2VwdGlvbiYgZXhjZXB0aW9uKSB7Ci0rICAgICAgICAgICAgICAgIGlmIChydGVuZ2luZTo6 c2V0dGluZ3MtPnZlcmJvc2UpIHsKLSsgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCBl eGNlcHRpb24ud2hhdCgpIDw8IHN0ZDo6ZW5kbDsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAg ICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgfSBjYXRjaCAoY29uc3QgR2xpYjo6RXhjZXB0 aW9uJiBleGNlcHRpb24pIHsKLSsgICAgICAgIGlmIChydGVuZ2luZTo6c2V0dGluZ3MtPnZlcmJv c2UpIHsKLSsgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBsaXN0IGRpcmVjdG9y eSBcIiIgPDwgZGlyX3BhdGggPDwgIlwiOiAiIDw8IGV4Y2VwdGlvbi53aGF0KCkgPDwgc3RkOjpl bmRsOwotKyAgICAgICAgfQotKyAgICB9Ci0rfQotKwotKwotK30gLy8gbmFtZXNwYWNlCi0rCi0g RmlsZUNhdGFsb2c6OkZpbGVDYXRhbG9nIChDb2Fyc2VQYW5lbCogY3AsIFRvb2xCYXIqIHRiLCBG aWxlUGFuZWwqIGZpbGVwYW5lbCkgOgotICAgICBmaWxlcGFuZWwoZmlsZXBhbmVsKSwKLSAgICAg c2VsZWN0ZWREaXJlY3RvcnlJZCgxKSwKLUBAIC0xMzYsNiArMjEzLDggQEAgRmlsZUNhdGFsb2c6 OkZpbGVDYXRhbG9nIChDb2Fyc2VQYW5lbCogY3AsIFRvb2xCYXIqIHRiLCBGaWxlUGFuZWwqIGZp bGVwYW5lbCkgOgotICAgICBRdWVyeS0+c2lnbmFsX2FjdGl2YXRlKCkuY29ubmVjdCAoc2lnYzo6 bWVtX2Z1bigqdGhpcywgJkZpbGVDYXRhbG9nOjpleGVjdXRlUXVlcnkpKTsgLy9yZXNwb25kIHRv IHRoZSBFbnRlciBrZXkKLSAgICAgUXVlcnktPnNpZ25hbF9rZXlfcHJlc3NfZXZlbnQoKS5jb25u ZWN0KHNpZ2M6Om1lbV9mdW4oKnRoaXMsICZGaWxlQ2F0YWxvZzo6UXVlcnlfa2V5X3ByZXNzZWQp KTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot KwotICAgICAvLyBpZiBOT1QgYSBzaW5nbGUgcm93IHRvb2xiYXIKLSAgICAgaWYgKCFvcHRpb25z LkZpbGVCcm93c2VyVG9vbGJhclNpbmdsZVJvdykgewotICAgICAgICAgaGJUb29sQmFyMVNUQiA9 IEd0azo6bWFuYWdlKG5ldyBNeVNjcm9sbGVkVG9vbGJhcigpKTsKLUBAIC01MjEsNiArNjAwLDcg QEAgYm9vbCBGaWxlQ2F0YWxvZzo6Y2FwdHVyZV9ldmVudChHZGtFdmVudEJ1dHRvbiogZXZlbnQp Ci0gCi0gdm9pZCBGaWxlQ2F0YWxvZzo6ZXhpZkluZm9CdXR0b25Ub2dnbGVkKCkKLSB7Ci0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmIChpblRh Yk1vZGUpIHsKLSAgICAgICAgIG9wdGlvbnMuZmlsbVN0cmlwU2hvd0ZpbGVOYW1lcyA9ICBleGlm SW5mby0+Z2V0X2FjdGl2ZSgpOwotICAgICB9IGVsc2UgewotQEAgLTU3Nyw3OCArNjU3LDkgQEAg dm9pZCBGaWxlQ2F0YWxvZzo6Y2xvc2VEaXIgKCkKLSAKLSBzdGQ6OnZlY3RvcjxHbGliOjp1c3Ry aW5nPiBGaWxlQ2F0YWxvZzo6Z2V0RmlsZUxpc3Qoc3RkOjp2ZWN0b3I8R2xpYjo6UmVmUHRyPEdp bzo6RmlsZT4+ICpkaXJzX2V4cGxvcmVkKQotIHsKLS0KLSAgICAgc3RkOjp2ZWN0b3I8R2xpYjo6 dXN0cmluZz4gbmFtZXM7Ci0gCi0tICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZXh0 ZW5zaW9ucyA9IG9wdGlvbnMucGFyc2VkRXh0ZW5zaW9uc1NldDsKLS0KLS0gICAgc3RhdGljIHZv aWQgKCpnZXRGaWxlc1JlY3Vyc2l2ZWx5KShjb25zdCBHbGliOjp1c3RyaW5nICYsIGludCwgaW50 ICYsIHN0ZDo6dmVjdG9yPEdsaWI6OnVzdHJpbmc+ICYsIHN0ZDo6dmVjdG9yPEdsaWI6OlJlZlB0 cjxHaW86OkZpbGU+PiAqKSA9IFtdKGNvbnN0IEdsaWI6OnVzdHJpbmcgJmRpcl9wYXRoLCBpbnQg bWF4X2RlcHRoLCBpbnQgJmRpcl9xdW90YSwgc3RkOjp2ZWN0b3I8R2xpYjo6dXN0cmluZz4gJmZp bGVfbmFtZXMsIHN0ZDo6dmVjdG9yPEdsaWI6OlJlZlB0cjxHaW86OkZpbGU+PiAqIGRpcmVjdG9y aWVzX2V4cGxvcmVkKSB7Ci0tICAgICAgICB0cnkgewotLQotLSAgICAgICAgICAgIGNvbnN0IGF1 dG8gZGlyID0gR2lvOjpGaWxlOjpjcmVhdGVfZm9yX3BhdGgoZGlyX3BhdGgpOwotLQotLSAgICAg ICAgICAgIHN0YXRpYyBjb25zdCBhdXRvIGVudW1lcmF0ZV9hdHRycyA9Ci0tICAgICAgICAgICAg ICAgIHN0ZDo6c3RyaW5nKEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfTkFNRSkgKyAiLCIgKwot LSAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgKyAiLCIgKwot LSAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0lTX0hJRERFTiArICIs IiArCi0tICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU1lNTElOS19U QVJHRVQ7Ci0tICAgICAgICAgICAgYXV0byBlbnVtZXJhdG9yID0gZGlyLT5lbnVtZXJhdGVfY2hp bGRyZW4oCi0tICAgICAgICAgICAgICAgIGVudW1lcmF0ZV9hdHRycywKLS0gICAgICAgICAgICAg ICAgb3B0aW9ucy5icm93c2VSZWN1cnNpdmVGb2xsb3dMaW5rcwotLSAgICAgICAgICAgICAgICAg ICAgPyBHaW86OkZpbGVRdWVyeUluZm9GbGFnczo6RklMRV9RVUVSWV9JTkZPX05PTkUKLS0gICAg ICAgICAgICAgICAgICAgIDogR2lvOjpGaWxlUXVlcnlJbmZvRmxhZ3M6OkZJTEVfUVVFUllfSU5G T19OT0ZPTExPV19TWU1MSU5LUyk7Ci0tCi0tICAgICAgICAgICAgaWYgKGRpcmVjdG9yaWVzX2V4 cGxvcmVkKSB7Ci0tICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzX2V4cGxvcmVkLT5wdXNoX2Jh Y2soZGlyKTsKLS0gICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK LS0gICAgICAgICAgICAgICAgdHJ5IHsKLS0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8g ZmlsZSA9IGVudW1lcmF0b3ItPm5leHRfZmlsZSgpOwotLSAgICAgICAgICAgICAgICAgICAgaWYg KCFmaWxlKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tICAgICAgICAgICAg ICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZmJTaG93SGlk ZGVuICYmIGZpbGUtPmlzX2hpZGRlbigpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Ci0tICAgICAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgICAgICBp ZiAoZmlsZS0+Z2V0X2ZpbGVfdHlwZSgpID09IEdpbzo6RklMRV9UWVBFX0RJUkVDVE9SWSkgewot LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhfZGVwdGggPiAwICYmIGRpcl9xdW90YSA+ IDApIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBj aGlsZF9kaXJfcGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGRpcl9wYXRoLCBmaWxlLT5nZXRf bmFtZSgpKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsZXNSZWN1cnNpdmVs eShjaGlsZF9kaXJfcGF0aCwgbWF4X2RlcHRoIC0gMSwgLS1kaXJfcXVvdGEsIGZpbGVfbmFtZXMs IGRpcmVjdG9yaWVzX2V4cGxvcmVkKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0tICAgICAgICAgICAgICAgICAgICB9Ci0t Ci0tICAgICAgICAgICAgICAgICAgICBjb25zdCBHbGliOjp1c3RyaW5nIGZuYW1lID0gZmlsZS0+ Z2V0X25hbWUoKTsKLS0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbGFzdGRvdCA9IGZu YW1lLmZpbmRfbGFzdF9vZignLicpOwotLQotLSAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3Rk b3QgPj0gZm5hbWUubGVuZ3RoKCkgLSAxKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Ci0tICAgICAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgICAgICBp ZiAoZXh0ZW5zaW9ucy5maW5kKGZuYW1lLnN1YnN0cihsYXN0ZG90ICsgMSkubG93ZXJjYXNlKCkp ID09IGV4dGVuc2lvbnMuZW5kKCkpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKLS0gICAgICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAgICAgIGZpbGVf bmFtZXMuZW1wbGFjZV9iYWNrKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGRpcl9wYXRoLCBmbmFtZSkp OwotLSAgICAgICAgICAgICAgICB9IGNhdGNoIChHbGliOjpFeGNlcHRpb24mIGV4Y2VwdGlvbikg ewotLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ0ZW5naW5lOjpzZXR0aW5ncy0+dmVyYm9zZSkg ewotLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCBleGNlcHRpb24ud2hhdCgp IDw8IHN0ZDo6ZW5kbDsKLS0gICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAg fQotLSAgICAgICAgICAgIH0KLS0KLS0gICAgICAgIH0gY2F0Y2ggKEdsaWI6OkV4Y2VwdGlvbiYg ZXhjZXB0aW9uKSB7Ci0tCi0tICAgICAgICAgICAgaWYgKHJ0ZW5naW5lOjpzZXR0aW5ncy0+dmVy Ym9zZSkgewotLSAgICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBsaXN0IGRp cmVjdG9yeSBcIiIgPDwgZGlyX3BhdGggPDwgIlwiOiAiIDw8IGV4Y2VwdGlvbi53aGF0KCkgPDwg c3RkOjplbmRsOwotLSAgICAgICAgICAgIH0KLS0KLS0gICAgICAgIH0KLS0gICAgfTsKLS0KLSsg ICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpbnQg ZGlyc19sZWZ0ID0gb3B0aW9ucy5icm93c2VSZWN1cnNpdmUgPyBvcHRpb25zLmJyb3dzZVJlY3Vy c2l2ZU1heERpcnMgOiAwOwotICAgICBnZXRGaWxlc1JlY3Vyc2l2ZWx5KHNlbGVjdGVkRGlyZWN0 b3J5LCBvcHRpb25zLmJyb3dzZVJlY3Vyc2l2ZURlcHRoLCBkaXJzX2xlZnQsIG5hbWVzLCBkaXJz X2V4cGxvcmVkKTsKLSAKLUBAIC03MzgsNiArNzQ5LDcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6ZW5h YmxlVGFiTW9kZShib29sIGVuYWJsZSkKLSB7Ci0gICAgIGluVGFiTW9kZSA9IGVuYWJsZTsKLSAK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBp ZiAoZW5hYmxlKSB7Ci0gICAgICAgICBpZiAob3B0aW9ucy5zaG93RmlsbVN0cmlwVG9vbEJhcikg ewotICAgICAgICAgICAgIHNob3dUb29sQmFyKCk7Ci1AQCAtNzY5LDYgKzc4MSw3IEBAIHZvaWQg RmlsZUNhdGFsb2c6Ol9yZWZyZXNoUHJvZ3Jlc3NCYXIgKCkKLSAgICAgaWYgKCFpblRhYk1vZGUg JiYgKCFwcmV2aWV3c1RvTG9hZCB8fCBzdGQ6OmZsb29yKDEwMC5mICogcHJldmlld3NMb2FkZWQg LyBwcmV2aWV3c1RvTG9hZCkgIT0gc3RkOjpmbG9vcigxMDAuZiAqIChwcmV2aWV3c0xvYWRlZCAt IDEpIC8gcHJldmlld3NUb0xvYWQpKSkgewotICAgICAgICAgR1RocmVhZExvY2sgbG9jazsgLy8g QWxsIEdVSSBhY2Nlc3MgZnJvbSBpZGxlX2FkZCBjYWxsYmFja3Mgb3Igc2VwYXJhdGUgdGhyZWFk IEhBVkUgdG8gYmUgcHJvdGVjdGVkCi0gCi0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0g QXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBpZiAoIXByb2dyZXNzSW1hZ2UgfHwgIXBy b2dyZXNzTGFiZWwpIHsKLSAgICAgICAgICAgICAvLyBjcmVhdGUgdGFiIGxhYmVsIG9uY2UKLSAg ICAgICAgICAgICBHdGs6Ok5vdGVib29rICpuYiA9IChHdGs6Ok5vdGVib29rICopKGZpbGVwYW5l bC0+Z2V0X3BhcmVudCgpKTsKLUBAIC05ODEsNyArOTk0LDcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6 X29wZW5JbWFnZShjb25zdCBzdGQ6OnZlY3RvcjxUaHVtYm5haWwqPiYgdG1iKQotICAgICAgICAg Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0bWIuc2l6ZSgpICYmIGNvbnRpbnVlVG9Mb2FkOyBpKysp IHsKLSAgICAgICAgICAgICAvLyBPcGVuIHRoZSBpbWFnZSBoZXJlLCBhbmQgc3RvcCBpZiBpbiBT aW5nbGUgRWRpdG9yIG1vZGUsIG9yIGlmIGFuIGltYWdlIGNvdWxkbid0Ci0gICAgICAgICAgICAg Ly8gYmUgb3BlbmVkLCB3b3VsZCBpdCBiZSBiZWNhdXNlIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qg b3IgYmVjYXVzZSBvZiBsYWNrIG9mIFJBTQotLSAgICAgICAgICAgIGlmKCAhKGxpc3RlbmVyLT5m aWxlU2VsZWN0ZWQgKHRtYltpXSkpICYmICFvcHRpb25zLnRhYmJlZFVJICkgewotKyAgICAgICAg ICAgIGlmKCAhKGxpc3RlbmVyLT5maWxlU2VsZWN0ZWQgKHRtYltpXSkpICYmICFBcHA6OmdldCgp Lm9wdGlvbnMoKS50YWJiZWRVSSApIHsKLSAgICAgICAgICAgICAgICAgY29udGludWVUb0xvYWQg PSBmYWxzZTsKLSAgICAgICAgICAgICB9Ci0gCi1AQCAtMTAzOSwxNyArMTA1MiwxOCBAQCB2b2lk IEZpbGVDYXRhbG9nOjpkZWxldGVSZXF1ZXN0ZWQoY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZUJyb3dz ZXJFbnRyeSo+JiB0YmUsIGJvbwotICAgICAgICAgICAgIC8vIGRlbGV0ZSBmcm9tIGZpbGUgc3lz dGVtCi0gICAgICAgICAgICAgOjpnX3JlbW92ZSAoZm5hbWUuY19zdHIgKCkpOwotICAgICAgICAg ICAgIC8vIGRlbGV0ZSBwYXJhbWZpbGUgaWYgZm91bmQKLS0gICAgICAgICAgICA6OmdfcmVtb3Zl ICgoZm5hbWUgKyBwYXJhbUZpbGVFeHRlbnNpb24pLmNfc3RyICgpKTsKLS0gICAgICAgICAgICA6 OmdfcmVtb3ZlICgocmVtb3ZlRXh0ZW5zaW9uKGZuYW1lKSArIHBhcmFtRmlsZUV4dGVuc2lvbiku Y19zdHIgKCkpOwotKyAgICAgICAgICAgIDo6Z19yZW1vdmUgKChmbmFtZSArIEFwcDo6UEFSQU1f RklMRV9FWFRFTlNJT04pLmNfc3RyICgpKTsKLSsgICAgICAgICAgICA6OmdfcmVtb3ZlICgocmVt b3ZlRXh0ZW5zaW9uKGZuYW1lKSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pLmNfc3RyICgp KTsKLSAgICAgICAgICAgICAvLyBkZWxldGUgLnRobSBmaWxlCi0gICAgICAgICAgICAgOjpnX3Jl bW92ZSAoKHJlbW92ZUV4dGVuc2lvbihmbmFtZSkgKyAiLnRobSIpLmNfc3RyICgpKTsKLSAgICAg ICAgICAgICA6OmdfcmVtb3ZlICgocmVtb3ZlRXh0ZW5zaW9uKGZuYW1lKSArICIuVEhNIikuY19z dHIgKCkpOwotIAotICAgICAgICAgICAgIGlmIChpbmNsQmF0Y2hQcm9jZXNzZWQpIHsKLSsgICAg ICAgICAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot ICAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIHByb2NmTmFtZSA9IEdsaWI6OnVzdHJpbmc6 OmNvbXBvc2UgKCIlMS4lMiIsIEJhdGNoUXVldWU6OmNhbGNBdXRvRmlsZU5hbWVCYXNlKGZuYW1l KSwgb3B0aW9ucy5zYXZlRm9ybWF0QmF0Y2guZm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgOjpn X3JlbW92ZSAocHJvY2ZOYW1lLmNfc3RyICgpKTsKLSAKLS0gICAgICAgICAgICAgICAgR2xpYjo6 dXN0cmluZyBwcm9jZk5hbWVQYXJhbUZpbGUgPSBHbGliOjp1c3RyaW5nOjpjb21wb3NlICgiJTEu JTIub3V0JTMiLCBCYXRjaFF1ZXVlOjpjYWxjQXV0b0ZpbGVOYW1lQmFzZShmbmFtZSksIG9wdGlv bnMuc2F2ZUZvcm1hdEJhdGNoLmZvcm1hdCwgcGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsgICAgICAg ICAgICAgICAgR2xpYjo6dXN0cmluZyBwcm9jZk5hbWVQYXJhbUZpbGUgPSBHbGliOjp1c3RyaW5n Ojpjb21wb3NlICgiJTEuJTIub3V0JTMiLCBCYXRjaFF1ZXVlOjpjYWxjQXV0b0ZpbGVOYW1lQmFz ZShmbmFtZSksIG9wdGlvbnMuc2F2ZUZvcm1hdEJhdGNoLmZvcm1hdCwgQXBwOjpQQVJBTV9GSUxF X0VYVEVOU0lPTik7Ci0gICAgICAgICAgICAgICAgIDo6Z19yZW1vdmUgKHByb2NmTmFtZVBhcmFt RmlsZS5jX3N0ciAoKSk7Ci0gICAgICAgICAgICAgfQotIAotQEAgLTEwNzgsNiArMTA5Miw3IEBA IHZvaWQgRmlsZUNhdGFsb2c6OmNvcHlNb3ZlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZp bGVCcm93c2VyRW50cnkqPiYgdGJlLCBiCi0gICAgIEd0azo6RmlsZUNob29zZXJEaWFsb2cgZmMg KGdldFRvcGxldmVsV2luZG93ICh0aGlzKSwgZmNfdGl0bGUsIEd0azo6RklMRV9DSE9PU0VSX0FD VElPTl9TRUxFQ1RfRk9MREVSICk7Ci0gICAgIGZjLmFkZF9idXR0b24oIE0oIkdFTkVSQUxfQ0FO Q0VMIiksIEd0azo6UkVTUE9OU0VfQ0FOQ0VMKTsKLSAgICAgZmMuYWRkX2J1dHRvbiggTSgiR0VO RVJBTF9PSyIpLCBHdGs6OlJFU1BPTlNFX09LKTsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6 Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKCFvcHRpb25zLmxhc3RDb3B5TW92ZVBhdGgu ZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3Qob3B0aW9ucy5sYXN0Q29weU1vdmVQYXRoLCBHbGli OjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAgICAgICAgZmMuc2V0X2N1cnJlbnRfZm9sZGVyKG9w dGlvbnMubGFzdENvcHlNb3ZlUGF0aCk7Ci0gICAgIH0gZWxzZSB7Ci1AQCAtMTEwNSw3ICsxMTIw LDcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6Y29weU1vdmVSZXF1ZXN0ZWQoY29uc3Qgc3RkOjp2ZWN0 b3I8RmlsZUJyb3dzZXJFbnRyeSo+JiB0YmUsIGIKLSAKLSAgICAgICAgICAgICAvLyBjb25zdHJ1 Y3QgIGRlc3RpbmF0aW9uIEZpbGUgUGF0aHMKLSAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIGRl c3RfZlBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZSAob3B0aW9ucy5sYXN0Q29weU1vdmVQYXRo LCBmbmFtZSk7Ci0tICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBkZXN0X2ZQYXRoX3BhcmFtID0g ZGVzdF9mUGF0aCArIHBhcmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAgICBHbGliOjp1c3Ry aW5nIGRlc3RfZlBhdGhfcGFyYW0gPSBkZXN0X2ZQYXRoICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVO U0lPTjsKLSAKLSAgICAgICAgICAgICBpZiAobW92ZVJlcXVlc3RlZCAmJiAoc3JjX0RpciA9PSBv cHRpb25zLmxhc3RDb3B5TW92ZVBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot QEAgLTExMzgsMTcgKzExNTMsMTcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6Y29weU1vdmVSZXF1ZXN0 ZWQoY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZUJyb3dzZXJFbnRyeSo+JiB0YmUsIGIKLSAKLSAKLSAg ICAgICAgICAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gY29weS9tb3ZlIHBhcmFtRmlsZSBvbmx5 IGlmIGl0IGV4aXN0IG5leHQgdG8gdGhlIHNyYwotLSAgICAgICAgICAgICAgICAgICAgR2xpYjo6 UmVmUHRyPEdpbzo6RmlsZT4gc2NyX3BhcmFtID0gR2lvOjpGaWxlOjpjcmVhdGVfZm9yX3BhdGgg KCAgc3JjX2ZQYXRoICsgcGFyYW1GaWxlRXh0ZW5zaW9uICk7Ci0rICAgICAgICAgICAgICAgICAg ICBHbGliOjpSZWZQdHI8R2lvOjpGaWxlPiBzY3JfcGFyYW0gPSBHaW86OkZpbGU6OmNyZWF0ZV9m b3JfcGF0aCAoICBzcmNfZlBhdGggKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OICk7Ci0gCi0t ICAgICAgICAgICAgICAgICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0KCBzcmNfZlBhdGggKyBwYXJh bUZpbGVFeHRlbnNpb24sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0rICAgICAgICAgICAg ICAgICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0KCBzcmNfZlBhdGggKyBBcHA6OlBBUkFNX0ZJTEVf RVhURU5TSU9OLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgIEdsaWI6OlJlZlB0cjxHaW86OkZpbGU+IGRlc3RfcGFyYW0gPSBHaW86OkZpbGU6OmNy ZWF0ZV9mb3JfcGF0aCAoIGRlc3RfZlBhdGhfcGFyYW0pOwotIAotICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGNvcHkvbW92ZSBwYXJhbUZpbGUgdG8gZGVzdGluYXRpb24KLSAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAobW92ZVJlcXVlc3RlZCkgewotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0KCBkZXN0X2ZQYXRoICsgcGFyYW1GaWxlRXh0ZW5z aW9uLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0KCBkZXN0X2ZQYXRoICsgQXBwOjpQQVJBTV9GSUxFX0VY VEVOU0lPTiwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIHByb2ZpbGUgYWxyZWFkeSBnb3QgY29waWVkIHRvIGRlc3RpbmF0aW9u IGZyb20gY2FjaGUgYWZ0ZXIgY2FjaGVNZ3ItPnJlbmFtZUVudHJ5Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBkZWxldGUgc291cmNlIHByb2ZpbGUgYXMgY2xlYW51cAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpnX3JlbW92ZSAoKHNyY19mUGF0aCArIHBh cmFtRmlsZUV4dGVuc2lvbikuY19zdHIgKCkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpnX3JlbW92ZSAoKHNyY19mUGF0aCArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04p LmNfc3RyICgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcl9wYXJhbS0+bW92ZShkZXN0X3BhcmFtKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotQEAgLTExNjMsNyArMTE3OCw3IEBAIHZv aWQgRmlsZUNhdGFsb2c6OmNvcHlNb3ZlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVC cm93c2VyRW50cnkqPiYgdGJlLCBiCi0gICAgICAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5n IGRlc3RfZm5hbWUgPSBHbGliOjp1c3RyaW5nOjpjb21wb3NlKCIlMSUyJTMlNCU1IiwgZm5hbWVf bm9FeHQsICJfIiwgaV9jb3B5aW5kZXgsICIuIiwgZm5hbWVfRXh0KTsKLSAgICAgICAgICAgICAg ICAgICAgIC8vIHJlLWNvbnN0cnVjdCAgZGVzdGluYXRpb24gRmlsZSBQYXRocwotICAgICAgICAg ICAgICAgICAgICAgZGVzdF9mUGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChvcHRpb25zLmxh c3RDb3B5TW92ZVBhdGgsIGRlc3RfZm5hbWUpOwotLSAgICAgICAgICAgICAgICAgICAgZGVzdF9m UGF0aF9wYXJhbSA9IGRlc3RfZlBhdGggKyBwYXJhbUZpbGVFeHRlbnNpb247Ci0rICAgICAgICAg ICAgICAgICAgICBkZXN0X2ZQYXRoX3BhcmFtID0gZGVzdF9mUGF0aCArIEFwcDo6UEFSQU1fRklM RV9FWFRFTlNJT047Ci0gICAgICAgICAgICAgICAgICAgICBpX2NvcHlpbmRleCsrOwotICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfS8vd2hpbGUKLUBAIC0xMTg3LDYgKzEyMDIsOCBA QCB2b2lkIEZpbGVDYXRhbG9nOjpkZXZlbG9wUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZp bGVCcm93c2VyRW50cnkqPiYgdGJlLCBibwotICAgICAgICAgICAgIFRodW1ibmFpbCogdGggPSBm YmUtPnRodW1ibmFpbDsKLSAgICAgICAgICAgICBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1Bh cmFtcyBwYXJhbXMgPSB0aC0+Z2V0UHJvY1BhcmFtcygpOwotIAotKyAgICAgICAgICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgICAgICAgICAv LyBpZiBmYXN0IG1vZGUgaXMgc2VsZWN0ZWQsIG92ZXJyaWRlIChkaXNhYmxlKSBwYXJhbXMKLSAg ICAgICAgICAgICAvLyBjb250cm9sbGluZyB0aW1lIGFuZCByZXNvdXJjZSBjb25zdW1pbmcgdGFz a3MKLSAgICAgICAgICAgICAvLyBhbmQgYWxzbyB0aG9zZSB3aGljaCBlZmZlY3QgaXMgbm90IHBy b25vdW5jZWQgYWZ0ZXIgcmVkdWNpbmcgdGhlIGltYWdlIHNpemUKLUBAIC0xMzUyLDcgKzEzNjks NyBAQCB2b2lkIEZpbGVDYXRhbG9nOjpyZW5hbWVSZXF1ZXN0ZWQoY29uc3Qgc3RkOjp2ZWN0b3I8 RmlsZUJyb3dzZXJFbnRyeSo+JiB0YmUpCi0gCi0gICAgICAgICAgICAgICAgICAgICBpZiAoOjpn X3JlbmFtZSAob2ZuYW1lLmNfc3RyICgpLCBuZm5hbWUuY19zdHIgKCkpID09IDApIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICBjYWNoZU1nci0+cmVuYW1lRW50cnkgKG9mbmFtZSwgdGJlW2ld LT50aHVtYm5haWwtPmdldE1ENSgpLCBuZm5hbWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAg IDo6Z19yZW1vdmUoKG9mbmFtZSArIHBhcmFtRmlsZUV4dGVuc2lvbikuY19zdHIgKCkpOwotKyAg ICAgICAgICAgICAgICAgICAgICAgIDo6Z19yZW1vdmUoKG9mbmFtZSArIEFwcDo6UEFSQU1fRklM RV9FWFRFTlNJT04pLmNfc3RyICgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXBhcnNl RGlyZWN0b3J5ICgpOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9 Ci1AQCAtMTY0NCw3ICsxNjYxLDcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6Y2F0ZWdvcnlCdXR0b25U b2dnbGVkIChHdGs6OlRvZ2dsZUJ1dHRvbiogYiwgYm9vbCBpc01vdXNlQ2xpY2sKLSAKLSB2b2lk IEZpbGVDYXRhbG9nOjpzaG93UmVjdXJzaXZlVG9nZ2xlZCgpCi0gewotLSAgICBvcHRpb25zLmJy b3dzZVJlY3Vyc2l2ZSA9IGJSZWN1cnNpdmUtPmdldF9hY3RpdmUoKTsKLSsgICAgQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLmJyb3dzZVJlY3Vyc2l2ZSA9IGJSZWN1cnNpdmUtPmdldF9hY3RpdmUo KTsKLSAgICAgcmVwYXJzZURpcmVjdG9yeSgpOwotIH0KLSAKLUBAIC0xNzkxLDcgKzE4MDgsNyBA QCB2b2lkIEZpbGVDYXRhbG9nOjpyZXBhcnNlRGlyZWN0b3J5ICgpCi0gICAgICAgICAgICAgZmls ZU5hbWVzVG9EZWwucHVzaF9iYWNrKGVudHJ5LT5maWxlbmFtZSk7Ci0gICAgICAgICAgICAgZmls ZU5hbWVzVG9SZW1vdmUucHVzaF9iYWNrKGVudHJ5LT5maWxlbmFtZSk7Ci0gICAgICAgICB9Ci0t ICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5icm93c2VSZWN1cnNpdmUgJiYgR2xpYjo6cGF0aF9n ZXRfZGlybmFtZShlbnRyeS0+ZmlsZW5hbWUpICE9IHNlbGVjdGVkRGlyZWN0b3J5KSB7Ci0rICAg ICAgICBlbHNlIGlmICghQXBwOjpnZXQoKS5vcHRpb25zKCkuYnJvd3NlUmVjdXJzaXZlICYmIEds aWI6OnBhdGhfZ2V0X2Rpcm5hbWUoZW50cnktPmZpbGVuYW1lKSAhPSBzZWxlY3RlZERpcmVjdG9y eSkgewotICAgICAgICAgICAgIGZpbGVOYW1lc1RvUmVtb3ZlLnB1c2hfYmFjayhlbnRyeS0+Zmls ZW5hbWUpOwotICAgICAgICAgfQotICAgICB9Ci1AQCAtMTgzMCw3ICsxODQ3LDcgQEAgdm9pZCBG aWxlQ2F0YWxvZzo6cmVwYXJzZURpcmVjdG9yeSAoKQotIHZvaWQgRmlsZUNhdGFsb2c6Om9uX2Rp cl9jaGFuZ2VkIChjb25zdCBHbGliOjpSZWZQdHI8R2lvOjpGaWxlPiYgZmlsZSwgY29uc3QgR2xp Yjo6UmVmUHRyPEdpbzo6RmlsZT4mIG90aGVyX2ZpbGUsIEdpbzo6RmlsZU1vbml0b3JFdmVudCBl dmVudF90eXBlLCBib29sIGludGVybmFsKQotIHsKLSAKLS0gICAgaWYgKChvcHRpb25zLmhhc19y ZXRhaW5lZF9leHRlbnRpb24oZmlsZS0+Z2V0X3BhcnNlX25hbWUoKSkKLSsgICAgaWYgKChBcHA6 OmdldCgpLm9wdGlvbnMoKS5oYXNfcmV0YWluZWRfZXh0ZW50aW9uKGZpbGUtPmdldF9wYXJzZV9u YW1lKCkpCi0gICAgICAgICAgICAgJiYgKGV2ZW50X3R5cGUgPT0gR2lvOjpGSUxFX01PTklUT1Jf RVZFTlRfQ1JFQVRFRCB8fCBldmVudF90eXBlID09IEdpbzo6RklMRV9NT05JVE9SX0VWRU5UX0RF TEVURUQgfHwgZXZlbnRfdHlwZSA9PSBHaW86OkZJTEVfTU9OSVRPUl9FVkVOVF9DSEFOR0VEKSkK LSAgICAgICAgICAgICAgfHwgKGV2ZW50X3R5cGUgPT0gR2lvOjpGSUxFX01PTklUT1JfRVZFTlRf Q1JFQVRFRCAmJiBHbGliOjpmaWxlX3Rlc3QoZmlsZS0+Z2V0X3BhdGgoKSwgR2xpYjo6RmlsZVRl c3Q6OkZJTEVfVEVTVF9JU19ESVIpKQotICAgICAgICAgICAgICB8fCAoZXZlbnRfdHlwZSA9PSBH aW86OkZJTEVfTU9OSVRPUl9FVkVOVF9ERUxFVEVEICYmIHN0ZDo6ZmluZF9pZihkaXJNb25pdG9y cy5jYmVnaW4oKSwgZGlyTW9uaXRvcnMuY2VuZCgpLCBbJmZpbGVdKGNvbnN0IEZpbGVNb25pdG9y SW5mbyAmbW9uaXRvcikgeyByZXR1cm4gbW9uaXRvci5maWxlUGF0aCA9PSBmaWxlLT5nZXRfcGF0 aCgpOyB9KSAhPSBkaXJNb25pdG9ycy5jZW5kKCkpKSB7Ci1AQCAtMTg3Myw3ICsxODkwLDcgQEAg dm9pZCBGaWxlQ2F0YWxvZzo6YWRkQW5kT3BlbkZpbGUgKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZu YW1lKQotIAotICAgICAgICAgY29uc3QgYXV0byBsYXN0ZG90ID0gaW5mby0+Z2V0X25hbWUoKS5m aW5kX2xhc3Rfb2YoJy4nKTsKLSAgICAgICAgIGlmIChsYXN0ZG90ICE9IEdsaWI6OnVzdHJpbmc6 Om5wb3MpIHsKLS0gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaXNfZXh0ZW50aW9uX2VuYWJsZWQo aW5mby0+Z2V0X25hbWUoKS5zdWJzdHIobGFzdGRvdCArIDEpKSkgewotKyAgICAgICAgICAgIGlm ICghQXBwOjpnZXQoKS5vcHRpb25zKCkuaXNfZXh0ZW50aW9uX2VuYWJsZWQoaW5mby0+Z2V0X25h bWUoKS5zdWJzdHIobGFzdGRvdCArIDEpKSkgewotICAgICAgICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgICAgICAgfQotICAgICAgICAgfSBlbHNlIHsKLUBAIC0yMTUzLDYgKzIxNzAsNyBAQCB2 b2lkIEZpbGVDYXRhbG9nOjp0YkxlZnRQYW5lbF8xX3RvZ2dsZWQgKCkKLSB7Ci0gICAgIHJlbW92 ZUlmVGhlcmUgKGZpbGVwYW5lbC0+ZGlycGFuZWQsIGZpbGVwYW5lbC0+cGxhY2VzcGFuZWQsIGZh bHNlKTsKLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsK LSAgICAgaWYgKHRiTGVmdFBhbmVsXzEtPmdldF9hY3RpdmUoKSkgewotICAgICAgICAgZmlsZXBh bmVsLT5kaXJwYW5lZC0+cGFjazEgKCpmaWxlcGFuZWwtPnBsYWNlc3BhbmVkLCBmYWxzZSwgdHJ1 ZSk7Ci0gICAgICAgICB0YkxlZnRQYW5lbF8xLT5zZXRfaW1hZ2UgKCppTGVmdFBhbmVsXzFfSGlk ZSk7Ci1AQCAtMjE2NSw2ICsyMTgzLDcgQEAgdm9pZCBGaWxlQ2F0YWxvZzo6dGJMZWZ0UGFuZWxf MV90b2dnbGVkICgpCi0gCi0gdm9pZCBGaWxlQ2F0YWxvZzo6dGJSaWdodFBhbmVsXzFfdG9nZ2xl ZCAoKQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsK LSAgICAgaWYgKHRiUmlnaHRQYW5lbF8xLT5nZXRfYWN0aXZlKCkpIHsKLSAgICAgICAgIGZpbGVw YW5lbC0+cmlnaHRCb3gtPnNob3coKTsKLSAgICAgICAgIHRiUmlnaHRQYW5lbF8xLT5zZXRfaW1h Z2UgKCppUmlnaHRQYW5lbF8xX0hpZGUpOwotQEAgLTI1MDcsNiArMjUyNiw3IEBAIGJvb2wgRmls ZUNhdGFsb2c6OmhhbmRsZVNob3J0Y3V0S2V5IChHZGtFdmVudEtleSogZXZlbnQpCi0gICAgICAg ICB9Ci0gICAgIH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKTsKLSAgICAgaWYgKCFjdHJsIHx8IChhbHQgJiYgIW9wdGlvbnMudGFiYmVkVUkpKSB7Ci0g ICAgICAgICBzd2l0Y2goZXZlbnQtPmtleXZhbCkgewotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL2Zp bGVwYW5lbC5jYyBiL3J0Z3VpL2ZpbGVwYW5lbC5jYwotaW5kZXggMTAzMmI0NWUxLi5mMDY5ZjA5 OWUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9maWxlcGFuZWwuY2MKLSsrKyBiL3J0Z3VpL2ZpbGVwYW5l bC5jYwotQEAgLTMyLDYgKzMyLDcgQEAKLSAKLSBGaWxlUGFuZWw6OkZpbGVQYW5lbCAoKSA6IHBh cmVudChudWxscHRyKSwgZXJyb3IoMCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgLy8gQ29udGFpbnMgZXZlcnl0aGluZyBleGNl cHQgZm9yIHRoZSBiYXRjaCBUb29sIFBhbmVsIGFuZCB0YWJzIChGYXN0IEV4cG9ydCwgSW5zcGVj dCwgZXRjKQotICAgICBkaXJwYW5lZCA9IEd0azo6bWFuYWdlICggbmV3IEd0azo6UGFuZWQgKCkg KTsKLUBAIC0xODYsNiArMTg3LDcgQEAgdm9pZCBGaWxlUGFuZWw6OnNldEFzcGVjdCAoKQotIHsK LSAgICAgaW50IHdpblcsIHdpbkg7Ci0gICAgIHBhcmVudC0+Z2V0X3NpemUod2luVywgd2luSCk7 Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg cGxhY2VzcGFuZWQtPnNldF9wb3NpdGlvbihvcHRpb25zLmRpckJyb3dzZXJIZWlnaHQpOwotICAg ICBkaXJwYW5lZC0+c2V0X3Bvc2l0aW9uKG9wdGlvbnMuZGlyQnJvd3NlcldpZHRoKTsKLSAgICAg dHBjUGFuZWQtPnNldF9wb3NpdGlvbihvcHRpb25zLmJyb3dzZXJUb29sUGFuZWxIZWlnaHQpOwot QEAgLTIwNiwxNyArMjA4LDE4IEBAIHZvaWQgRmlsZVBhbmVsOjppbml0ICgpCi0gICAgIGRpckJy b3dzZXItPmZpbGxEaXJUcmVlICgpOwotICAgICBwbGFjZXNCcm93c2VyLT5yZWZyZXNoUGxhY2Vz TGlzdCAoKTsKLSAKLS0gICAgaWYgKCFhcmd2MS5lbXB0eSgpICYmIEdsaWI6OmZpbGVfdGVzdCAo YXJndjEsIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0tICAgICAgICBHbGliOjp1c3RyaW5n IGQoYXJndjEpOwotKyAgICBpZiAoIUFwcDo6Z2V0KCkuYXJndjAoKS5lbXB0eSgpICYmIEdsaWI6 OmZpbGVfdGVzdCAoQXBwOjpnZXQoKS5hcmd2MSgpLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkg ewotKyAgICAgICAgR2xpYjo6dXN0cmluZyBkKEFwcDo6Z2V0KCkuYXJndjEoKSk7Ci0gICAgICAg ICBpZiAoIUdsaWI6OmZpbGVfdGVzdChkLCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAg ICAgICAgICAgIGQgPSBHbGliOjpwYXRoX2dldF9kaXJuYW1lKGQpOwotICAgICAgICAgfQotICAg ICAgICAgZGlyQnJvd3Nlci0+b3BlbihkKTsKLSAgICAgfSBlbHNlIHsKLSsgICAgICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAgIGlmIChvcHRp b25zLnN0YXJ0dXBEaXIgPT0gU1RBUlRVUERJUl9IT01FKSB7Ci0gICAgICAgICAgICAgZGlyQnJv d3Nlci0+b3BlbiAoUGxhY2VzQnJvd3Nlcjo6dXNlclBpY3R1cmVzRGlyICgpKTsKLSAgICAgICAg IH0gZWxzZSBpZiAob3B0aW9ucy5zdGFydHVwRGlyID09IFNUQVJUVVBESVJfQ1VSUkVOVCkgewot LSAgICAgICAgICAgIGRpckJyb3dzZXItPm9wZW4gKGFyZ3YwKTsKLSsgICAgICAgICAgICBkaXJC cm93c2VyLT5vcGVuIChBcHA6OmdldCgpLmFyZ3YwKCkpOwotICAgICAgICAgfSBlbHNlIGlmIChv cHRpb25zLnN0YXJ0dXBEaXIgPT0gU1RBUlRVUERJUl9DVVNUT00gfHwgb3B0aW9ucy5zdGFydHVw RGlyID09IFNUQVJUVVBESVJfTEFTVCkgewotICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXJ0 dXBQYXRoLmxlbmd0aCgpICYmIEdsaWI6OmZpbGVfdGVzdChvcHRpb25zLnN0YXJ0dXBQYXRoLCBH bGliOjpGSUxFX1RFU1RfRVhJU1RTKSAmJiBHbGliOjpmaWxlX3Rlc3Qob3B0aW9ucy5zdGFydHVw UGF0aCwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikpIHsKLSAgICAgICAgICAgICAgICAgZGlyQnJv d3Nlci0+b3BlbiAob3B0aW9ucy5zdGFydHVwUGF0aCk7Ci1AQCAtMjQ2LDcgKzI0OSw3IEBAIGJv b2wgRmlsZVBhbmVsOjpmaWxlU2VsZWN0ZWQgKFRodW1ibmFpbCogdGhtKQotICAgICB9Ci0gCi0g ICAgIC8vIENoZWNrIGlmIGl0J3MgYWxyZWFkeSBvcGVuIEJFRk9SRSBsb2FkaW5nIHRoZSBmaWxl Ci0tICAgIGlmIChvcHRpb25zLnRhYmJlZFVJICYmIHBhcmVudC0+c2VsZWN0RWRpdG9yUGFuZWwo dGhtLT5nZXRGaWxlTmFtZSgpKSkgewotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkudGFi YmVkVUkgJiYgcGFyZW50LT5zZWxlY3RFZGl0b3JQYW5lbCh0aG0tPmdldEZpbGVOYW1lKCkpKSB7 Ci0gICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgfQotIAotQEAgLTI5NCw2ICsyOTcsOCBAQCBi b29sIEZpbGVQYW5lbDo6aW1hZ2VMb2FkZWQoIFRodW1ibmFpbCogdGhtLCBQcm9ncmVzc0Nvbm5l Y3RvcjxydGVuZ2luZTo6SW5pdGlhbAotICAgICAgICAgfQotICAgICB9Ci0gCi0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgLy8gVGhlIHB1 cnBvc2Ugb2YgdGhlIHBlbmRpbmdMb2FkcyB2ZWN0b3IgaXMgdG8gb3BlbiB0YWJzIGluIHRoZSBz YW1lIG9yZGVyIGFzIHRoZSBsb2FkcyB3aGVyZSBpbml0aWF0ZWQuIEl0IGhhcyBubyBlZmZlY3Qg b24gc2luZ2xlIGVkaXRvciBtb2RlLgotICAgICB3aGlsZSAocGVuZGluZ0xvYWRzLnNpemUoKSA+ IDAgJiYgcGVuZGluZ0xvYWRzLmZyb250KCktPmNvbXBsZXRlKSB7Ci0gICAgICAgICBwZW5kaW5n TG9hZCAqcGwgPSBwZW5kaW5nTG9hZHMuZnJvbnQoKTsKLUBAIC0zNjMsNiArMzY4LDcgQEAgTUFY R0RJSEFORExFU1JFQUNIRUQ6Ci0gCi0gdm9pZCBGaWxlUGFuZWw6OnNhdmVPcHRpb25zICgpCi0g ewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotIAotICAg ICBpbnQgd2luVywgd2luSDsKLSAgICAgcGFyZW50LT5nZXRfc2l6ZSh3aW5XLCB3aW5IKTsKLWRp ZmYgLS1naXQgYS9ydGd1aS9maWxtbmVnYXRpdmUuY2MgYi9ydGd1aS9maWxtbmVnYXRpdmUuY2MK LWluZGV4IDczYjk0MGRhMi4uZmQyZmQyNGNjIDEwMDY0NAotLS0tIGEvcnRndWkvZmlsbW5lZ2F0 aXZlLmNjCi0rKysgYi9ydGd1aS9maWxtbmVnYXRpdmUuY2MKLUBAIC01NSw2ICs1NSw3IEBAIEFk anVzdGVyKiBjcmVhdGVFeHBvbmVudEFkanVzdGVyKEFkanVzdGVyTGlzdGVuZXIqIGxpc3RlbmVy LCBjb25zdCBHbGliOjp1c3RyaW5nCi0gICAgIGFkai0+c2V0QWRqdXN0ZXJMaXN0ZW5lcihsaXN0 ZW5lcik7Ci0gICAgIGFkai0+c2V0TG9nU2NhbGUoNiwgMSwgdHJ1ZSk7Ci0gCi0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgYWRqLT5zZXREZWxh eShzdGQ6Om1heChvcHRpb25zLmFkanVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJNYXhE ZWxheSkpOwotIAotICAgICBhZGotPnNob3coKTsKLUBAIC02OCw2ICs2OSw3IEBAIEFkanVzdGVy KiBjcmVhdGVMZXZlbEFkanVzdGVyKEFkanVzdGVyTGlzdGVuZXIqIGxpc3RlbmVyLCBjb25zdCBH bGliOjp1c3RyaW5nJiBsCi0gICAgIGFkai0+c2V0QWRqdXN0ZXJMaXN0ZW5lcihsaXN0ZW5lcik7 Ci0gLy8gICAgYWRqLT5zZXRMb2dTY2FsZSg2LCAxMDAwLjAsIHRydWUpOwotIAotKyAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGFkai0+c2V0RGVs YXkoc3RkOjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4 RGVsYXkpKTsKLSAKLSAgICAgYWRqLT5zaG93KCk7Ci1AQCAtODIsNiArODQsNyBAQCBBZGp1c3Rl ciogY3JlYXRlQmFsYW5jZUFkanVzdGVyKEFkanVzdGVyTGlzdGVuZXIqIGxpc3RlbmVyLCBjb25z dCBHbGliOjp1c3RyaW5nJgotICAgICBhZGotPnNldEFkanVzdGVyTGlzdGVuZXIobGlzdGVuZXIp OwotICAgICBhZGotPnNldExvZ1NjYWxlKDksIDAsIHRydWUpOwotIAotKyAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGFkai0+c2V0RGVsYXkoc3Rk OjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkp KTsKLSAKLSAgICAgYWRqLT5zaG93KCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvZmlsbXNpbXVsYXRp b24uY2MgYi9ydGd1aS9maWxtc2ltdWxhdGlvbi5jYwotaW5kZXggYTRhN2U5YmI3Li43NjlkNTVk YTYgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9maWxtc2ltdWxhdGlvbi5jYwotKysrIGIvcnRndWkvZmls bXNpbXVsYXRpb24uY2MKLUBAIC02NSw3ICs2NSw3IEBAIGJvb2wgbm90aWZ5U2xvd1BhcnNlRGly IChjb25zdCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50JiBzdGFydGVkQXQp Ci0gRmlsbVNpbXVsYXRpb246OkZpbG1TaW11bGF0aW9uKCkKLSAgICAgOiAgIEZvbGRhYmxlVG9v bFBhbmVsKCB0aGlzLCBUT09MX05BTUUsIE0oIlRQX0ZJTE1TSU1VTEFUSU9OX0xBQkVMIiksIGZh bHNlLCB0cnVlICkKLSB7Ci0tICAgIG1fY2x1dENvbWJvQm94ID0gR3RrOjptYW5hZ2UoIG5ldyBD bHV0Q29tYm9Cb3gob3B0aW9ucy5jbHV0c0RpcikgKTsKLSsgICAgbV9jbHV0Q29tYm9Cb3ggPSBH dGs6Om1hbmFnZSggbmV3IENsdXRDb21ib0JveChBcHA6OmdldCgpLm9wdGlvbnMoKS5jbHV0c0Rp cikgKTsKLSAKLSAgICAgaW50IGZvdW5kQ2x1dHNDb3VudCA9IG1fY2x1dENvbWJvQm94LT5mb3Vu ZENsdXRzQ291bnQoKTsKLSAKLUBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZCBGaWxtU2ltdWxhdGlv bjo6cmVhZCggY29uc3QgcnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMqIHBwLCBjb25z dCBQYXIKLSAKLSAgICAgc2V0RW5hYmxlZChwcC0+ZmlsbVNpbXVsYXRpb24uZW5hYmxlZCk7Ci0g Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg aWYgKCFwcC0+ZmlsbVNpbXVsYXRpb24uY2x1dEZpbGVuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAg IG1fY2x1dENvbWJvQm94LT5zZXRTZWxlY3RlZENsdXQoCi0gICAgICAgICAgICAgIUdsaWI6OnBh dGhfaXNfYWJzb2x1dGUocHAtPmZpbG1TaW11bGF0aW9uLmNsdXRGaWxlbmFtZSkKLUBAIC0xODUs NyArMTg2LDcgQEAgdm9pZCBGaWxtU2ltdWxhdGlvbjo6d3JpdGUoIHJ0ZW5naW5lOjpwcm9jcGFy YW1zOjpQcm9jUGFyYW1zKiBwcCwgUGFyYW1zRWRpdGVkKgotICAgICBjb25zdCBHbGliOjp1c3Ry aW5nIGNsdXRGTmFtZSA9IG1fY2x1dENvbWJvQm94LT5nZXRTZWxlY3RlZENsdXQoKTsKLSAKLSAg ICAgaWYgKGNsdXRGTmFtZSAhPSAiTlVMTCIpIHsgLy8gV2UgZG8gbm90IHdhbnQgdG8gc2V0ICJO VUxMIiBpbiBjbHV0RmlsZW5hbWUsIGV2ZW4gaWYgInVuZWRpdGVkIgotLSAgICAgICAgcHAtPmZp bG1TaW11bGF0aW9uLmNsdXRGaWxlbmFtZSA9IHN0cmlwUHJlZml4RGlyKGNsdXRGTmFtZSwgb3B0 aW9ucy5jbHV0c0Rpcik7Ci0rICAgICAgICBwcC0+ZmlsbVNpbXVsYXRpb24uY2x1dEZpbGVuYW1l ID0gc3RyaXBQcmVmaXhEaXIoY2x1dEZOYW1lLCBBcHA6OmdldCgpLm9wdGlvbnMoKS5jbHV0c0Rp cik7Ci0gICAgIH0KLSAKLSAgICAgcHAtPmZpbG1TaW11bGF0aW9uLnN0cmVuZ3RoID0gbV9zdHJl bmd0aC0+Z2V0VmFsdWUoKTsKLUBAIC0yMTQsNiArMjE1LDcgQEAgQ2x1dENvbWJvQm94OjpDbHV0 Q29tYm9Cb3goY29uc3QgR2xpYjo6dXN0cmluZyAmcGF0aCk6Ci0gICAgIGlmICghY20pIHsKLSAg ICAgICAgIGNtLnJlc2V0KG5ldyBDbHV0TW9kZWwocGF0aCkpOwotICAgICB9Ci0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKCFjbTIgJiYg b3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlKSB7Ci0gICAgICAgICBjbTIucmVzZXQobmV3IENsdXRN b2RlbChwYXRoKSk7Ci0gICAgIH0KLUBAIC0yMzYsNyArMjM4LDcgQEAgQ2x1dENvbWJvQm94OjpD bHV0Q29tYm9Cb3goY29uc3QgR2xpYjo6dXN0cmluZyAmcGF0aCk6Ci0gCi0gaW5saW5lIEdsaWI6 OlJlZlB0cjxHdGs6OlRyZWVTdG9yZT4gJkNsdXRDb21ib0JveDo6bV9tb2RlbCgpCi0gewotLSAg ICBpZiAoIWJhdGNoTW9kZSB8fCAhb3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlKSB7Ci0rICAgIGlm ICghYmF0Y2hNb2RlIHx8ICFBcHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0aURpc3BsYXlNb2RlKSB7 Ci0gICAgICAgICByZXR1cm4gY20tPm1fbW9kZWw7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBy ZXR1cm4gY20yLT5tX21vZGVsOwotQEAgLTI0Niw3ICsyNDgsNyBAQCBpbmxpbmUgR2xpYjo6UmVm UHRyPEd0azo6VHJlZVN0b3JlPiAmQ2x1dENvbWJvQm94OjptX21vZGVsKCkKLSAKLSBpbmxpbmUg Q2x1dENvbWJvQm94OjpDbHV0Q29sdW1ucyAmQ2x1dENvbWJvQm94OjptX2NvbHVtbnMoKQotIHsK LS0gICAgaWYgKCFiYXRjaE1vZGUgfHwgIW9wdGlvbnMubXVsdGlEaXNwbGF5TW9kZSkgewotKyAg ICBpZiAoIWJhdGNoTW9kZSB8fCAhQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9k ZSkgewotICAgICAgICAgcmV0dXJuIGNtLT5tX2NvbHVtbnM7Ci0gICAgIH0gZWxzZSB7Ci0gICAg ICAgICByZXR1cm4gY20yLT5tX2NvbHVtbnM7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvZmxhdGN1cnZl ZWRpdG9yc3ViZ3JvdXAuY2MgYi9ydGd1aS9mbGF0Y3VydmVlZGl0b3JzdWJncm91cC5jYwotaW5k ZXggYWZkOWQ4YmQ2Li5mYmZlY2I2ZDAgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9mbGF0Y3VydmVlZGl0 b3JzdWJncm91cC5jYwotKysrIGIvcnRndWkvZmxhdGN1cnZlZWRpdG9yc3ViZ3JvdXAuY2MKLUBA IC00NCw2ICs0NCw3IEBAIEZsYXRDdXJ2ZUVkaXRvclN1Ykdyb3VwOjpGbGF0Q3VydmVFZGl0b3JT dWJHcm91cCAoQ3VydmVFZGl0b3JHcm91cCogcHJ0LCBHbGliOjp1Ci0gICAgIHZhbFVuY2hhbmdl ZCA9IChpbnQpRkNUX1VuY2hhbmdlZDsKLSAgICAgcGFyZW50ID0gcHJ0OwotIAotKyAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIEd0azo6UG9zaXRp b25UeXBlIHNpZGVTdGFydCA9IG9wdGlvbnMuY3VydmViYm94cG9zID09IDAgfHwgb3B0aW9ucy5j dXJ2ZWJib3hwb3MgPT0gMiA/IEd0azo6UE9TX0xFRlQgOiBHdGs6OlBPU19UT1A7Ci0gICAgIEd0 azo6UG9zaXRpb25UeXBlIHNpZGVFbmQgPSBvcHRpb25zLmN1cnZlYmJveHBvcyA9PSAwIHx8IG9w dGlvbnMuY3VydmViYm94cG9zID09IDIgPyBHdGs6OlBPU19SSUdIVCA6IEd0azo6UE9TX0JPVFRP TTsKLSAKLWRpZmYgLS1naXQgYS9ydGd1aS9mbGF0ZmllbGQuY2MgYi9ydGd1aS9mbGF0ZmllbGQu Y2MKLWluZGV4IGQxMmUzOTczMC4uZGI5NDU3M2Q4IDEwMDY0NAotLS0tIGEvcnRndWkvZmxhdGZp ZWxkLmNjCi0rKysgYi9ydGd1aS9mbGF0ZmllbGQuY2MKLUBAIC0zOCw2ICszOCw4IEBAIEZsYXRG aWVsZDo6RmxhdEZpZWxkICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBN KCJUUF9GTEFURklFTERfTEFCCi0gICAgIGF1dG8gbSA9IFByb2NFdmVudE1hcHBlcjo6Z2V0SW5z dGFuY2UoKTsKLSAgICAgRXZGbGF0RmllbGRGcm9tTWV0YURhdGEgPSBtLT5uZXdFdmVudChEQVJL RlJBTUUsICJISVNUT1JZX01TR19GRl9GUk9NTUVUQURBVEEiKTsKLSAKLSsgICAgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSsKLSAgICAgaGJmZiA9IEd0azo6bWFu YWdlKG5ldyBHdGs6OkJveCgpKTsKLSAgICAgZmxhdEZpZWxkRmlsZSA9IEd0azo6bWFuYWdlKG5l dyBNeUZpbGVDaG9vc2VyQnV0dG9uKE0oIlRQX0ZMQVRGSUVMRF9MQUJFTCIpLCBHdGs6OkZJTEVf Q0hPT1NFUl9BQ1RJT05fT1BFTikpOwotICAgICBiaW5kQ3VycmVudEZvbGRlciAoKmZsYXRGaWVs ZEZpbGUsIG9wdGlvbnMubGFzdEZsYXRmaWVsZERpcik7Ci1AQCAtMzMyLDYgKzMzNCw3IEBAIHZv aWQgRmxhdEZpZWxkOjpmbGF0RmllbGRGaWxlQ2hhbmdlZCgpCi0gdm9pZCBGbGF0RmllbGQ6OmZs YXRGaWVsZEZpbGVfUmVzZXQoKQotIHsKLSAgICAgZmZDaGFuZ2VkID0gdHJ1ZTsKLSsgICAgY29u c3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotIC8vIGNhdXRpb246 IEkgaGFkIHRvIG1ha2UgdGhpcyBoYWNrLCBiZWNhdXNlIHNldF9jdXJyZW50X2ZvbGRlcigpIGRv ZXNuJ3Qgd29yayBjb3JyZWN0bHkhCi0gLy8gICAgICAgICAgQmVjYXVzZSBzemV2YSBkb2Vzbid0 IGV4aXN0IHNpbmNlIGhlIHdhcyBjb21taXR0ZWQgdG8gaGFwcHkgaHVudGluZyBncm91bmQgaW4g SXNzdWUgMzE2Ci1kaWZmIC0tZ2l0IGEvcnRndWkvZ3VpdXRpbHMuY2MgYi9ydGd1aS9ndWl1dGls cy5jYwotaW5kZXggODY0NTc3MWVlLi41NGYyNzFmODMgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9ndWl1 dGlscy5jYwotKysrIGIvcnRndWkvZ3VpdXRpbHMuY2MKLUBAIC0yMjIsNiArMjIyLDcgQEAgdm9p ZCBkcmF3Q3JvcCAoQ2Fpcm86OlJlZlB0cjxDYWlybzo6Q29udGV4dD4gY3IsIGludCBpbXgsIGlu dCBpbXksIGludCBpbXcsIGludAotICAgICBkb3VibGUgYzJ4ID0gKGNwYXJhbXMueCArIGNwYXJh bXMudyAtIHN0YXJ0eCkgKiBzY2FsZSAtIChmdWxsSW1hZ2VWaXNpYmxlID8gMC4wIDogMS4wKTsK LSAgICAgZG91YmxlIGMyeSA9IChjcGFyYW1zLnkgKyBjcGFyYW1zLmggLSBzdGFydHkpICogc2Nh bGUgLSAoZnVsbEltYWdlVmlzaWJsZSA/IDAuMCA6IDEuMCk7Ci0gCi0rICAgIGNvbnN0IGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgLy8gY3JvcCBvdmVybGF5IGNv bG9yLCBsaW5rZWQgd2l0aCBjcm9wIHdpbmRvd3MgYmFja2dyb3VuZAotICAgICBpZiAob3B0aW9u cy5iZ2NvbG9yID09IDAgfHwgIXVzZUJnQ29sb3IpIHsKLSAgICAgICAgIGNyLT5zZXRfc291cmNl X3JnYmEgKG9wdGlvbnMuY3V0T3ZlcmxheUJydXNoWzBdLCBvcHRpb25zLmN1dE92ZXJsYXlCcnVz aFsxXSwgb3B0aW9ucy5jdXRPdmVybGF5QnJ1c2hbMl0sIG9wdGlvbnMuY3V0T3ZlcmxheUJydXNo WzNdKTsKLUBAIC03MTUsNyArNzE2LDcgQEAgYm9vbCBNeUV4cGFuZGVyOjpvbl9lbnRlcl9sZWF2 ZV9lbmFibGUgKEdka0V2ZW50Q3Jvc3NpbmcqIGV2ZW50KQotIAotIHZvaWQgTXlFeHBhbmRlcjo6 dXBkYXRlU3R5bGUoKQotIHsKLS0gICAgdXBkYXRlVlNjcm9sbGJhcnMob3B0aW9ucy5oaWRlVFBW U2Nyb2xsYmFyKTsKLSsgICAgdXBkYXRlVlNjcm9sbGJhcnMoQXBwOjpnZXQoKS5vcHRpb25zKCku aGlkZVRQVlNjcm9sbGJhcik7Ci0gCi0gLy9HVEszMTgKLSAjaWYgR1RLX01BSk9SX1ZFUlNJT04g PT0gMyAmJiBHVEtfTUlOT1JfVkVSU0lPTiA8IDIwCi1AQCAtOTQyLDcgKzk0Myw3IEBAIE15U2Ny b2xsZWRXaW5kb3c6Ok15U2Nyb2xsZWRXaW5kb3cgKCkKLSAKLSBib29sIE15U2Nyb2xsZWRXaW5k b3c6Om9uX3Njcm9sbF9ldmVudCAoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQotIHsKLS0gICAgaWYg KCFvcHRpb25zLmhpZGVUUFZTY3JvbGxiYXIpIHsKLSsgICAgaWYgKCFBcHA6OmdldCgpLm9wdGlv bnMoKS5oaWRlVFBWU2Nyb2xsYmFyKSB7Ci0gICAgICAgICBHdGs6OlNjcm9sbGVkV2luZG93Ojpv bl9zY3JvbGxfZXZlbnQgKGV2ZW50KTsKLSAgICAgICAgIHJldHVybiB0cnVlOwotICAgICB9Ci1k aWZmIC0tZ2l0IGEvcnRndWkvaGlzdG9ncmFtcGFuZWwuY2MgYi9ydGd1aS9oaXN0b2dyYW1wYW5l bC5jYwotaW5kZXggOTdjNzgyNjc3Li42ZWU3Njk0OGUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9oaXN0 b2dyYW1wYW5lbC5jYwotKysrIGIvcnRndWkvaGlzdG9ncmFtcGFuZWwuY2MKLUBAIC0zNiwxNCAr MzYsNiBAQCBjb25zdGV4cHIgZmxvYXQgSGlzdG9ncmFtQXJlYTo6TUlOX0JSSUdIVDsKLSAKLSB1 c2luZyBTY29wZVR5cGUgPSBPcHRpb25zOjpTY29wZVR5cGU7Ci0gCi0tCi0tbmFtZXNwYWNlCi0t ewotLQotLWNvbnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpDb2xvck1hbmFnZW1lbnRQYXJhbXMg REVGQVVMVF9DTVA7Ci0tCi0tfQotLQotIC8vCi0gLy8KLSAvLyBIaXN0b2dyYW1QYW5lbAotQEAg LTk0LDYgKzg2LDcgQEAgSGlzdG9ncmFtUGFuZWw6Okhpc3RvZ3JhbVBhbmVsICgpIDoKLSAgICAg aGlzdG9ncmFtUkdCQXJlYVZlcnQucmVzZXQobmV3IEhpc3RvZ3JhbVJHQkFyZWFWZXJ0KCkpOwot ICAgICBzZXRFeHBhbmRBbGlnblByb3BlcnRpZXMoaGlzdG9ncmFtUkdCQXJlYVZlcnQuZ2V0KCks IGZhbHNlLCB0cnVlLCBHdGs6OkFMSUdOX0VORCwgR3RrOjpBTElHTl9GSUxMKTsKLSAKLSsgICAg Y29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBzd2l0Y2gg KG9wdGlvbnMuaGlzdG9ncmFtU2NvcGVUeXBlKSB7Ci0gICAgICAgICBjYXNlIFNjb3BlVHlwZTo6 Tk9ORToKLSAgICAgICAgIGNhc2UgU2NvcGVUeXBlOjpISVNUT0dSQU1fUkFXOgotQEAgLTQ0MCw3 ICs0MzMsNyBAQCB2b2lkIEhpc3RvZ3JhbVBhbmVsOjpyZXNpemVkIChHdGs6OkFsbG9jYXRpb24m IHJlcSkKLSAgICAgfQotIAotICAgICAvLyBTdG9yZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgaGlz dG9ncmFtCi0tICAgIG9wdGlvbnMuaGlzdG9ncmFtSGVpZ2h0ID0gZ2V0X2hlaWdodCgpOwotKyAg ICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkuaGlzdG9ncmFtSGVpZ2h0ID0gZ2V0X2hlaWdodCgp OwotIAotICAgICBvbGRfaGVpZ2h0ID0gcmVxLmdldF9oZWlnaHQoKTsKLSAgICAgb2xkX3dpZHRo ID0gcmVxLmdldF93aWR0aCgpOwotQEAgLTQ1MSw3ICs0NDQsNyBAQCB2b2lkIEhpc3RvZ3JhbVBh bmVsOjpyZWRfdG9nZ2xlZCAoKQotICAgICAvLyBVcGRhdGUgYnV0dG9uIGltYWdlCi0gICAgIHNo b3dSZWQtPnNldF9pbWFnZShzaG93UmVkLT5nZXRfYWN0aXZlKCkgPyAqcmVkSW1hZ2UgOiAqcmVk SW1hZ2VfZyk7Ci0gICAgIC8vIFVwZGF0ZSBvcHRpb25zIHZhbHVlCi0tICAgIG9wdGlvbnMuaGlz dG9ncmFtUmVkID0gc2hvd1JlZC0+Z2V0X2FjdGl2ZSgpID8gdHJ1ZSA6IGZhbHNlOwotKyAgICBB cHA6OmdldCgpLm11dF9vcHRpb25zKCkuaGlzdG9ncmFtUmVkID0gc2hvd1JlZC0+Z2V0X2FjdGl2 ZSgpID8gdHJ1ZSA6IGZhbHNlOwotICAgICAvLyBVcGRhdGUgZHJhd2luZyBhcmVhcwotICAgICBy Z2J2X3RvZ2dsZWQoKTsKLSB9Ci1AQCAtNDYxLDcgKzQ1NCw3IEBAIHZvaWQgSGlzdG9ncmFtUGFu ZWw6OmdyZWVuX3RvZ2dsZWQgKCkKLSAgICAgLy8gVXBkYXRlIGJ1dHRvbiBpbWFnZQotICAgICBz aG93R3JlZW4tPnNldF9pbWFnZShzaG93R3JlZW4tPmdldF9hY3RpdmUoKSA/ICpncmVlbkltYWdl IDogKmdyZWVuSW1hZ2VfZyk7Ci0gICAgIC8vIFVwZGF0ZSBvcHRpb25zIHZhbHVlCi0tICAgIG9w dGlvbnMuaGlzdG9ncmFtR3JlZW4gPSBzaG93R3JlZW4tPmdldF9hY3RpdmUoKSA/IHRydWUgOiBm YWxzZTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmhpc3RvZ3JhbUdyZWVuID0gc2hv d0dyZWVuLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0gICAgIC8vIFVwZGF0ZSBkcmF3 aW5nIGFyZWFzCi0gICAgIHJnYnZfdG9nZ2xlZCgpOwotIH0KLUBAIC00NzEsNyArNDY0LDcgQEAg dm9pZCBIaXN0b2dyYW1QYW5lbDo6Ymx1ZV90b2dnbGVkICgpCi0gICAgIC8vIFVwZGF0ZSBidXR0 b24gaW1hZ2UKLSAgICAgc2hvd0JsdWUtPnNldF9pbWFnZShzaG93Qmx1ZS0+Z2V0X2FjdGl2ZSgp ID8gKmJsdWVJbWFnZSA6ICpibHVlSW1hZ2VfZyk7Ci0gICAgIC8vIFVwZGF0ZSBvcHRpb25zIHZh bHVlCi0tICAgIG9wdGlvbnMuaGlzdG9ncmFtQmx1ZSA9IHNob3dCbHVlLT5nZXRfYWN0aXZlKCkg PyB0cnVlIDogZmFsc2U7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5oaXN0b2dyYW1C bHVlID0gc2hvd0JsdWUtPmdldF9hY3RpdmUoKSA/IHRydWUgOiBmYWxzZTsKLSAgICAgLy8gVXBk YXRlIGRyYXdpbmcgYXJlYXMKLSAgICAgcmdidl90b2dnbGVkKCk7Ci0gfQotQEAgLTQ4MCw3ICs0 NzMsNyBAQCB2b2lkIEhpc3RvZ3JhbVBhbmVsOjp2YWx1ZV90b2dnbGVkICgpCi0gICAgIC8vIFVw ZGF0ZSBidXR0b24gaW1hZ2UKLSAgICAgc2hvd1ZhbHVlLT5zZXRfaW1hZ2Uoc2hvd1ZhbHVlLT5n ZXRfYWN0aXZlKCkgPyAqdmFsdWVJbWFnZSA6ICp2YWx1ZUltYWdlX2cpOwotICAgICAvLyBVcGRh dGUgb3B0aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhpc3RvZ3JhbUx1bWEgPSBzaG93VmFsdWUt PmdldF9hY3RpdmUoKSA/IHRydWUgOiBmYWxzZTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9u cygpLmhpc3RvZ3JhbUx1bWEgPSBzaG93VmFsdWUtPmdldF9hY3RpdmUoKSA/IHRydWUgOiBmYWxz ZTsKLSAgICAgLy8gVXBkYXRlIGRyYXdpbmcgYXJlYXMKLSAgICAgcmdidl90b2dnbGVkKCk7Ci0g fQotQEAgLTQ4OSwxMyArNDgyLDE0IEBAIHZvaWQgSGlzdG9ncmFtUGFuZWw6OmNocm9fdG9nZ2xl ZCAoKQotICAgICAvLyBVcGRhdGUgYnV0dG9uIGltYWdlCi0gICAgIHNob3dDaHJvLT5zZXRfaW1h Z2Uoc2hvd0Nocm8tPmdldF9hY3RpdmUoKSA/ICpjaHJvSW1hZ2UgOiAqY2hyb0ltYWdlX2cpOwot ICAgICAvLyBVcGRhdGUgb3B0aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhpc3RvZ3JhbUNocm9t YSA9IHNob3dDaHJvLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0rICAgIEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKS5oaXN0b2dyYW1DaHJvbWEgPSBzaG93Q2hyby0+Z2V0X2FjdGl2ZSgp ID8gdHJ1ZSA6IGZhbHNlOwotICAgICAvLyBVcGRhdGUgZHJhd2luZyBhcmVhcwotICAgICByZ2J2 X3RvZ2dsZWQoKTsKLSB9Ci0gCi0gdm9pZCBIaXN0b2dyYW1QYW5lbDo6bW9kZV9yZWxlYXNlZCAo KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAg ICAgLy8gVXBkYXRlIG9wdGlvbnMgdmFsdWUKLSAgICAgb3B0aW9ucy5oaXN0b2dyYW1EcmF3TW9k ZSA9IChvcHRpb25zLmhpc3RvZ3JhbURyYXdNb2RlICsgMSkgJSAzOwotICAgICAvLyBVcGRhdGUg YnV0dG9uIGltYWdlCi1AQCAtNTE0LDE5ICs1MDgsMTkgQEAgdm9pZCBIaXN0b2dyYW1QYW5lbDo6 YnJpZ2h0bmVzc1dpZGdldFZhbHVlQ2hhbmdlZCh2b2lkKQotIHsKLSAgICAgQ29ubmVjdGlvbkJs b2NrZXIgYmxvY2tlcihicmlnaHRuZXNzX2NoYW5nZWRfY29ubmVjdGlvbik7Ci0gICAgIGhpc3Rv Z3JhbUFyZWEtPnNldEJyaWdodG5lc3MoZXhwKGJyaWdodG5lc3NXaWRnZXQtPmdldF92YWx1ZSgp KSk7Ci0tICAgIG9wdGlvbnMuaGlzdG9ncmFtVHJhY2VCcmlnaHRuZXNzID0gaGlzdG9ncmFtQXJl YS0+Z2V0QnJpZ2h0bmVzcygpOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkuaGlzdG9n cmFtVHJhY2VCcmlnaHRuZXNzID0gaGlzdG9ncmFtQXJlYS0+Z2V0QnJpZ2h0bmVzcygpOwotIH0K LSAKLSB2b2lkIEhpc3RvZ3JhbVBhbmVsOjpicmlnaHRuZXNzVXBkYXRlZChmbG9hdCBicmlnaHRu ZXNzKQotIHsKLSAgICAgYnJpZ2h0bmVzc1dpZGdldC0+c2V0X3ZhbHVlKGxvZyhicmlnaHRuZXNz KSk7Ci0tICAgIG9wdGlvbnMuaGlzdG9ncmFtVHJhY2VCcmlnaHRuZXNzID0gaGlzdG9ncmFtQXJl YS0+Z2V0QnJpZ2h0bmVzcygpOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkuaGlzdG9n cmFtVHJhY2VCcmlnaHRuZXNzID0gaGlzdG9ncmFtQXJlYS0+Z2V0QnJpZ2h0bmVzcygpOwotIH0K LSAKLSB2b2lkIEhpc3RvZ3JhbVBhbmVsOjpzY29wZU9wdGlvbnNUb2dnbGVkKCkKLSB7Ci0gICAg IC8vIFVwZGF0ZSBvcHRpb25zIHZhbHVlCi0tICAgIG9wdGlvbnMuaGlzdG9ncmFtU2hvd09wdGlv bkJ1dHRvbnMgPSBzY29wZU9wdGlvbnMtPmdldF9hY3RpdmUoKTsKLSsgICAgQXBwOjpnZXQoKS5t dXRfb3B0aW9ucygpLmhpc3RvZ3JhbVNob3dPcHRpb25CdXR0b25zID0gc2NvcGVPcHRpb25zLT5n ZXRfYWN0aXZlKCk7Ci0gICAgIC8vIFNob3cvaGlkZSBzZWNvbmRhcnkgYnV0dG9ucyBjb2x1bW4K LSAgICAgb3B0aW9uQnV0dG9ucy0+c2V0X3Zpc2libGUoc2NvcGVPcHRpb25zLT5nZXRfYWN0aXZl KCkpOwotIH0KLUBAIC01NTAsNiArNTQ0LDcgQEAgdm9pZCBIaXN0b2dyYW1QYW5lbDo6dHlwZV9z ZWxlY3RlZChHdGs6OlJhZGlvQnV0dG9uKiBidXR0b24pCi0gICAgICAgICBuZXdfdHlwZSA9IFNj b3BlVHlwZTo6VkVDVE9SU0NPUEVfSFM7Ci0gICAgIH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgLy8gRG8gbm90IHVwZGF0ZSBpZiBzZWxl Y3RlZCByYWRpbyBidXR0b24gaXMgaWRlbnRpY2FsCi0gICAgIGlmIChuZXdfdHlwZSA9PSBvcHRp b25zLmhpc3RvZ3JhbVNjb3BlVHlwZSkgewotICAgICAgICAgcmV0dXJuOwotQEAgLTU4Myw2ICs1 NzgsNyBAQCB2b2lkIEhpc3RvZ3JhbVBhbmVsOjp0eXBlX3NlbGVjdGVkKEd0azo6UmFkaW9CdXR0 b24qIGJ1dHRvbikKLSAKLSB2b2lkIEhpc3RvZ3JhbVBhbmVsOjp0eXBlX2NoYW5nZWQoKQotIHsK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBz d2l0Y2ggKG9wdGlvbnMuaGlzdG9ncmFtU2NvcGVUeXBlKSB7Ci0gICAgICAgICBjYXNlIFNjb3Bl VHlwZTo6SElTVE9HUkFNOgotICAgICAgICAgICAgIHNob3dSZWQtPnNob3coKTsKLUBAIC02NTEs NyArNjQ3LDcgQEAgdm9pZCBIaXN0b2dyYW1QYW5lbDo6YmFyX3RvZ2dsZWQgKCkKLSAgICAgLy8g VXBkYXRlIGJ1dHRvbiBpbWFnZQotICAgICBzaG93QkFSLT5zZXRfaW1hZ2Uoc2hvd0JBUi0+Z2V0 X2FjdGl2ZSgpID8gKmJhckltYWdlIDogKmJhckltYWdlX2cpOwotICAgICAvLyBVcGRhdGUgb3B0 aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhpc3RvZ3JhbUJhciA9IHNob3dCQVItPmdldF9hY3Rp dmUoKSA/IHRydWUgOiBmYWxzZTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmhpc3Rv Z3JhbUJhciA9IHNob3dCQVItPmdldF9hY3RpdmUoKSA/IHRydWUgOiBmYWxzZTsKLSAgICAgLy8g VXBkYXRlIGRyYXdpbmcgYXJlYXMKLSAgICAgcmdidl90b2dnbGVkKCk7Ci0gICAgIC8vIFVwZGF0 ZSBoaXN0b2dyYW0gYmFyIHZpc2liaWxpdHkKLUBAIC03MjEsNiArNzE3LDcgQEAgdm9pZCBIaXN0 b2dyYW1QYW5lbDo6cmVvcmRlciAoR3RrOjpQb3NpdGlvblR5cGUgYWxpZ24pCi0gLy8gRHJhd01v ZGVMaXN0ZW5lciBpbnRlcmZhY2U6Ci0gdm9pZCBIaXN0b2dyYW1QYW5lbDo6dG9nZ2xlQnV0dG9u TW9kZSAoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBpZiAob3B0aW9ucy5oaXN0b2dyYW1EcmF3TW9kZSA9PSAwKQotICAgICAgICAg c2hvd01vZGUtPnNldF9pbWFnZSgqbW9kZTBJbWFnZSk7Ci0gICAgIGVsc2UgaWYgKG9wdGlvbnMu aGlzdG9ncmFtRHJhd01vZGUgPT0gMSkKLUBAIC03MzQsNyArNzMxLDcgQEAgdm9pZCBIaXN0b2dy YW1QYW5lbDo6c2V0UGFuZWxMaXN0ZW5lcihIaXN0b2dyYW1QYW5lbExpc3RlbmVyKiBsaXN0ZW5l cikKLSAgICAgcGFuZWxfbGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAKLSAgICAgaWYgKGxpc3RlbmVy KSB7Ci0tICAgICAgICBsaXN0ZW5lci0+c2NvcGVUeXBlQ2hhbmdlZChvcHRpb25zLmhpc3RvZ3Jh bVNjb3BlVHlwZSk7Ci0rICAgICAgICBsaXN0ZW5lci0+c2NvcGVUeXBlQ2hhbmdlZChBcHA6Omdl dCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1TY29wZVR5cGUpOwotICAgICB9Ci0gfQotIAotQEAgLTc1 NiwxMCArNzUzLDEwIEBAIEhpc3RvZ3JhbVJHQkFyZWE6Okhpc3RvZ3JhbVJHQkFyZWEgKCkgOgot ICAgICAvLyBTYXZlZCBwb2ludGVyIHBhcmFtZXRlcnMKLSAgICAgcigtMSksIGcoLTEpLCBiKC0x KSwgbGFiX0woMC5mKSwgbGFiX2EoMC5mKSwgbGFiX2IoMC5mKSwgcG9pbnRlclZhbGlkKGZhbHNl KSwKLSAgICAgLy8gRHJhd2luZyBvcHRpb25zIChpbml0aWFsaXplZCBhdCBvcHRpb25zIGZpbGUg dmFsdWVzKQotLSAgICBuZWVkUmVkKG9wdGlvbnMuaGlzdG9ncmFtUmVkKSwgbmVlZEdyZWVuKG9w dGlvbnMuaGlzdG9ncmFtR3JlZW4pLAotLSAgICBuZWVkQmx1ZShvcHRpb25zLmhpc3RvZ3JhbUJs dWUpLCBuZWVkTHVtYShvcHRpb25zLmhpc3RvZ3JhbUx1bWEpLAotLSAgICBuZWVkQ2hyb21hKG9w dGlvbnMuaGlzdG9ncmFtQ2hyb21hKSwgc2NvcGVUeXBlKG9wdGlvbnMuaGlzdG9ncmFtU2NvcGVU eXBlKSwKLS0gICAgc2NhbGVNb2RlKG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUpLCBzaG93QmFy KG9wdGlvbnMuaGlzdG9ncmFtQmFyKQotKyAgICBuZWVkUmVkKEFwcDo6Z2V0KCkub3B0aW9ucygp Lmhpc3RvZ3JhbVJlZCksIG5lZWRHcmVlbihBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1H cmVlbiksCi0rICAgIG5lZWRCbHVlKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbUJsdWUp LCBuZWVkTHVtYShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1MdW1hKSwKLSsgICAgbmVl ZENocm9tYShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1DaHJvbWEpLCBzY29wZVR5cGUo QXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtU2NvcGVUeXBlKSwKLSsgICAgc2NhbGVNb2Rl KEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbURyYXdNb2RlKSwgc2hvd0JhcihBcHA6Omdl dCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1CYXIpCi0gewotICAgICBnZXRfc3R5bGVfY29udGV4dCgp LT5hZGRfY2xhc3MoImRyYXdpbmdhcmVhIik7Ci0gICAgIHNldF9uYW1lKCJIaXN0b2dyYW1SR0JB cmVhIik7Ci1AQCAtODk4LDcgKzg5NSw3IEBAIGJvb2wgSGlzdG9ncmFtUkdCQXJlYTo6dXBkYXRl UG9pbnRlciAoY29uc3QgaW50IG5ld19yLCBjb25zdCBpbnQgbmV3X2csIGNvbnN0IGluCi0gICAg ICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihnKSwKLSAgICAgICAgICAgICBzdGF0 aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KGIpLAotICAgICAgICAgICAgIGxhYl9MLCBsYWJfYSwgbGFi X2IsCi0tICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogREVGQVVMVF9DTVAsCi0r ICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogQXBwOjpnZXQoKS5mYWxsYmFja0Nv bG9yQ21wKCksCi0gICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICBwb2ludGVyVmFsaWQgPSB0 cnVlOwotICAgICB9Ci1AQCAtOTA4LDYgKzkwNSw3IEBAIGJvb2wgSGlzdG9ncmFtUkdCQXJlYTo6 dXBkYXRlUG9pbnRlciAoY29uc3QgaW50IG5ld19yLCBjb25zdCBpbnQgbmV3X2csIGNvbnN0IGlu Ci0gCi0gdm9pZCBIaXN0b2dyYW1SR0JBcmVhOjp1cGRhdGVGcm9tT3B0aW9ucyAoKQotIHsKLSsg ICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBuZWVk UmVkID0gb3B0aW9ucy5oaXN0b2dyYW1SZWQ7Ci0gICAgIG5lZWRHcmVlbiA9IG9wdGlvbnMuaGlz dG9ncmFtR3JlZW47Ci0gICAgIG5lZWRCbHVlID0gb3B0aW9ucy5oaXN0b2dyYW1CbHVlOwotQEAg LTk2MCw3ICs5NTgsNyBAQCB2b2lkIEhpc3RvZ3JhbVJHQkFyZWE6OmZhY3RvckNoYW5nZWQgKGRv dWJsZSBuZXdGYWN0b3IpCi0gdm9pZCBIaXN0b2dyYW1SR0JBcmVhSG9yaTo6ZHJhd0Jhcihjb25z dCBDYWlybzo6UmVmUHRyPENhaXJvOjpDb250ZXh0PiAmY2MsIGNvbnN0IGRvdWJsZSB2YWx1ZSwg Y29uc3QgZG91YmxlIG1heF92YWx1ZSwgY29uc3QgaW50IHdpbncsIGNvbnN0IGludCB3aW5oKQot IHsKLSAgICAgZG91YmxlIHBvczsKLS0gICAgaWYgKG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUg PCAyKSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1EcmF3TW9kZSA8 IDIpIHsKLSAgICAgICAgIHBvcyA9IHBhZGRpbmcgKyB2YWx1ZSAqICh3aW53IC0gcGFkZGluZyAq IDIuMCkgLyBtYXhfdmFsdWU7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBwb3MgPSBwYWRkaW5n ICsgSGlzdG9ncmFtU2NhbGluZzo6bG9nIChtYXhfdmFsdWUsIHZhbHVlKSAqICh3aW53IC0gcGFk ZGluZyAqIDIuMCkgLyBtYXhfdmFsdWU7Ci1AQCAtOTk4LDYgKzk5Niw3IEBAIHZvaWQgSGlzdG9n cmFtUkdCQXJlYUhvcmk6OmdldF9wcmVmZXJyZWRfd2lkdGhfZm9yX2hlaWdodF92ZnVuYyAoaW50 IGhlaWdodCwgaW50Ci0gdm9pZCBIaXN0b2dyYW1SR0JBcmVhVmVydDo6ZHJhd0Jhcihjb25zdCBD YWlybzo6UmVmUHRyPENhaXJvOjpDb250ZXh0PiAmY2MsIGNvbnN0IGRvdWJsZSB2YWx1ZSwgY29u c3QgZG91YmxlIG1heF92YWx1ZSwgY29uc3QgaW50IHdpbncsIGNvbnN0IGludCB3aW5oKQotIHsK LSAgICAgZG91YmxlIHBvczsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICBpZiAob3B0aW9ucy5oaXN0b2dyYW1EcmF3TW9kZSA8IDIgfHwgb3B0 aW9ucy5oaXN0b2dyYW1TY29wZVR5cGUgPT0gU2NvcGVUeXBlOjpQQVJBREUgfHwgb3B0aW9ucy5o aXN0b2dyYW1TY29wZVR5cGUgPT0gU2NvcGVUeXBlOjpXQVZFRk9STSkgewotICAgICAgICAgcG9z ID0gcGFkZGluZyArIHZhbHVlICogKHdpbmggLSBwYWRkaW5nICogMi4wIC0gMSkgLyBtYXhfdmFs dWUgKyAwLjU7Ci0gICAgIH0gZWxzZSB7Ci1AQCAtMTA1NSwxMSArMTA1NCwxNCBAQCBIaXN0b2dy YW1BcmVhOjpIaXN0b2dyYW1BcmVhIChEcmF3TW9kZUxpc3RlbmVyICpmbWwpIDoKLSAgICAgcG9p bnRlcl9hKDAuZiksIHBvaW50ZXJfYigwLmYpLAotICAgICBwb2ludGVyX3ZhbGlkKGZhbHNlKSwK LSAgICAgLy8gRHJhd2luZyBvcHRpb25zCi0tICAgIG5lZWRSZWQob3B0aW9ucy5oaXN0b2dyYW1S ZWQpLCBuZWVkR3JlZW4ob3B0aW9ucy5oaXN0b2dyYW1HcmVlbiksIG5lZWRCbHVlKG9wdGlvbnMu aGlzdG9ncmFtQmx1ZSksCi0tICAgIG5lZWRMdW1hKG9wdGlvbnMuaGlzdG9ncmFtTHVtYSksIG5l ZWRDaHJvbWEob3B0aW9ucy5oaXN0b2dyYW1DaHJvbWEpLAotLSAgICBuZWVkUG9pbnRlcihvcHRp b25zLmhpc3RvZ3JhbUJhciksCi0tICAgIHNjb3BlVHlwZShvcHRpb25zLmhpc3RvZ3JhbVNjb3Bl VHlwZSksCi0tICAgIGRyYXdNb2RlKG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUpLCBteURyYXdN b2RlTGlzdGVuZXIoZm1sKSwKLSsgICAgbmVlZFJlZChBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0 b2dyYW1SZWQpLAotKyAgICBuZWVkR3JlZW4oQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFt R3JlZW4pLAotKyAgICBuZWVkQmx1ZShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1CbHVl KSwKLSsgICAgbmVlZEx1bWEoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtTHVtYSksCi0r ICAgIG5lZWRDaHJvbWEoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtQ2hyb21hKSwKLSsg ICAgbmVlZFBvaW50ZXIoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtQmFyKSwKLSsgICAg c2NvcGVUeXBlKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbVNjb3BlVHlwZSksCi0rICAg IGRyYXdNb2RlKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbURyYXdNb2RlKSwgbXlEcmF3 TW9kZUxpc3RlbmVyKGZtbCksCi0gICAgIC8vIE1vdGlvbiBldmVudCBtYW5hZ2VtZW50Ci0gICAg IGlzUHJlc3NlZChmYWxzZSksIG1vdmluZ1Bvc2l0aW9uKDAuMCkKLSB7Ci1AQCAtMTEwOCw2ICsx MTEwLDcgQEAgdm9pZCBIaXN0b2dyYW1BcmVhOjpnZXRfcHJlZmVycmVkX3dpZHRoX2Zvcl9oZWln aHRfdmZ1bmMgKGludCBoZWlnaHQsIGludCAmbWluaW0KLSAKLSB2b2lkIEhpc3RvZ3JhbUFyZWE6 OnVwZGF0ZUZyb21PcHRpb25zICgpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBw OjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIHdhdmVfYnVmZmVyX2RpcnR5ID0gd2F2ZV9idWZmZXJf ZGlydHkgfHwgbmVlZFJlZCAhPSBvcHRpb25zLmhpc3RvZ3JhbVJlZCB8fAotICAgICAgICAgICAg IG5lZWRHcmVlbiAhPSBvcHRpb25zLmhpc3RvZ3JhbUdyZWVuIHx8IG5lZWRCbHVlICE9IG9wdGlv bnMuaGlzdG9ncmFtQmx1ZTsKLSAKLUBAIC0xNDI2LDcgKzE0MjksNyBAQCBib29sIEhpc3RvZ3Jh bUFyZWE6OnVwZGF0ZVBvaW50ZXIoY29uc3QgaW50IHIsIGNvbnN0IGludCBnLCBjb25zdCBpbnQg YiwgY29uc3QgcgotICAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oZyksCi0g ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihiKSwKLSAgICAgICAgICAgICBM LCBwb2ludGVyX2EsIHBvaW50ZXJfYiwKLS0gICAgICAgICAgICBjbXAgIT0gbnVsbHB0ciA/ICpj bXAgOiBERUZBVUxUX0NNUCwKLSsgICAgICAgICAgICBjbXAgIT0gbnVsbHB0ciA/ICpjbXAgOiBB cHA6OmdldCgpLmZhbGxiYWNrQ29sb3JDbXAoKSwKLSAgICAgICAgICAgICB0cnVlKTsKLSAgICAg ICAgIEwgLz0gMzI3LjY4ZjsKLSAgICAgICAgIHBvaW50ZXJfYSAvPSAzMjcuNjhmOwotQEAgLTE4 NzksNiArMTg4Miw3IEBAIGJvb2wgSGlzdG9ncmFtQXJlYTo6b25fYnV0dG9uX3ByZXNzX2V2ZW50 IChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi0gICAgICkgewotIAotICAgICAgICAgZHJhd01vZGUg PSAoZHJhd01vZGUgKyAxKSAlIDM7Ci0rICAgICAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpOwotICAgICAgICAgb3B0aW9ucy5oaXN0b2dyYW1EcmF3TW9kZSA9IChv cHRpb25zLmhpc3RvZ3JhbURyYXdNb2RlICsgMSkgJSAzOwotIAotICAgICAgICAgaWYgKG15RHJh d01vZGVMaXN0ZW5lcikgewotZGlmZiAtLWdpdCBhL3J0Z3VpL2hzdmVxdWFsaXplci5jYyBiL3J0 Z3VpL2hzdmVxdWFsaXplci5jYwotaW5kZXggMmM2MDY2NDQyLi5hZDI0NzY2ZGQgMTAwNjQ0Ci0t LS0gYS9ydGd1aS9oc3ZlcXVhbGl6ZXIuY2MKLSsrKyBiL3J0Z3VpL2hzdmVxdWFsaXplci5jYwot QEAgLTQ1LDcgKzQ1LDcgQEAgSFNWRXF1YWxpemVyOjpIU1ZFcXVhbGl6ZXIgKCkgOiBGb2xkYWJs ZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX0hTVkVRVUEKLSAgICAgICAgIGJvdHRv bU1pbGVzdG9uZXMucHVzaF9iYWNrKCBHcmFkaWVudE1pbGVzdG9uZShkb3VibGUoeCksIGRvdWJs ZShSKSwgZG91YmxlKEcpLCBkb3VibGUoQikpICk7Ci0gICAgIH0KLSAKLS0gICAgY3VydmVFZGl0 b3JHID0gbmV3IEN1cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdEhzdkN1cnZlc0RpciwgTSgi VFBfSFNWRVFVQUxJWkVSX0NIQU5ORUwiKSk7Ci0rICAgIGN1cnZlRWRpdG9yRyA9IG5ldyBDdXJ2 ZUVkaXRvckdyb3VwIChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdEhzdkN1cnZlc0Rpciwg TSgiVFBfSFNWRVFVQUxJWkVSX0NIQU5ORUwiKSk7Ci0gICAgIGN1cnZlRWRpdG9yRy0+c2V0Q3Vy dmVMaXN0ZW5lciAodGhpcyk7Ci0gCi0gICAgIGhzaGFwZSA9IHN0YXRpY19jYXN0PEZsYXRDdXJ2 ZUVkaXRvcio+KGN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgTSgiVFBfSFNWRVFVQUxJ WkVSX0hVRSIpKSk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvaWNjcHJvZmlsZWNyZWF0b3IuY2MgYi9y dGd1aS9pY2Nwcm9maWxlY3JlYXRvci5jYwotaW5kZXggYjdkM2ExYjJkLi44MTk5NGFiZDIgMTAw NjQ0Ci0tLS0gYS9ydGd1aS9pY2Nwcm9maWxlY3JlYXRvci5jYwotKysrIGIvcnRndWkvaWNjcHJv ZmlsZWNyZWF0b3IuY2MKLUBAIC01MywyMSArNTMsMjEgQEAgY21zVG9uZUN1cnZlICptYWtlX3Ry YyhzaXplX3Qgc2l6ZSwgZmxvYXQgKCp0cmNGdW5jKShmbG9hdCwgYm9vbCkpCi0gCi0gSUNDUHJv ZmlsZUNyZWF0b3I6OklDQ1Byb2ZpbGVDcmVhdG9yKFJUV2luZG93ICpydHdpbmRvdykKLSAgICAg OiBHdGs6OkRpYWxvZyhNKCJNQUlOX0JVVFRPTl9JQ0NQUk9GQ1JFQVRPUiIpLCAqcnR3aW5kb3cs IHRydWUpCi0tICAgICwgcHJpbWFyaWVzUHJlc2V0KG9wdGlvbnMuSUNDUENfcHJpbWFyaWVzUHJl c2V0KQotLSAgICAsIHJlZFByaW1hcnlYKG9wdGlvbnMuSUNDUENfcmVkUHJpbWFyeVgpCi0tICAg ICwgcmVkUHJpbWFyeVkob3B0aW9ucy5JQ0NQQ19yZWRQcmltYXJ5WSkKLS0gICAgLCBncmVlblBy aW1hcnlYKG9wdGlvbnMuSUNDUENfZ3JlZW5QcmltYXJ5WCkKLS0gICAgLCBncmVlblByaW1hcnlZ KG9wdGlvbnMuSUNDUENfZ3JlZW5QcmltYXJ5WSkKLS0gICAgLCBibHVlUHJpbWFyeVgob3B0aW9u cy5JQ0NQQ19ibHVlUHJpbWFyeVgpCi0tICAgICwgYmx1ZVByaW1hcnlZKG9wdGlvbnMuSUNDUENf Ymx1ZVByaW1hcnlZKQotLSAgICAsIGdhbW1hUHJlc2V0KG9wdGlvbnMuSUNDUENfZ2FtbWFQcmVz ZXQpCi0tICAgICwgZ2FtbWEob3B0aW9ucy5JQ0NQQ19nYW1tYSkKLS0gICAgLCBzbG9wZShvcHRp b25zLklDQ1BDX3Nsb3BlKQotLSAgICAsIGFwcGVuZFBhcmFtc1RvRGVzYyhvcHRpb25zLklDQ1BD X2FwcGVuZFBhcmFtc1RvRGVzYykKLS0gICAgLCBwcm9maWxlVmVyc2lvbihvcHRpb25zLklDQ1BD X3Byb2ZpbGVWZXJzaW9uKQotLSAgICAsIGlsbHVtaW5hbnQob3B0aW9ucy5JQ0NQQ19pbGx1bWlu YW50KQotLSAgICAsIGRlc2NyaXB0aW9uKG9wdGlvbnMuSUNDUENfZGVzY3JpcHRpb24pCi0tICAg ICwgY29weXJpZ2h0KG9wdGlvbnMuSUNDUENfY29weXJpZ2h0KQotKyAgICAsIHByaW1hcmllc1By ZXNldChBcHA6OmdldCgpLm9wdGlvbnMoKS5JQ0NQQ19wcmltYXJpZXNQcmVzZXQpCi0rICAgICwg cmVkUHJpbWFyeVgoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENfcmVkUHJpbWFyeVgpCi0rICAg ICwgcmVkUHJpbWFyeVkoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENfcmVkUHJpbWFyeVkpCi0r ICAgICwgZ3JlZW5QcmltYXJ5WChBcHA6OmdldCgpLm9wdGlvbnMoKS5JQ0NQQ19ncmVlblByaW1h cnlYKQotKyAgICAsIGdyZWVuUHJpbWFyeVkoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENfZ3Jl ZW5QcmltYXJ5WSkKLSsgICAgLCBibHVlUHJpbWFyeVgoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUND UENfYmx1ZVByaW1hcnlYKQotKyAgICAsIGJsdWVQcmltYXJ5WShBcHA6OmdldCgpLm9wdGlvbnMo KS5JQ0NQQ19ibHVlUHJpbWFyeVkpCi0rICAgICwgZ2FtbWFQcmVzZXQoQXBwOjpnZXQoKS5vcHRp b25zKCkuSUNDUENfZ2FtbWFQcmVzZXQpCi0rICAgICwgZ2FtbWEoQXBwOjpnZXQoKS5vcHRpb25z KCkuSUNDUENfZ2FtbWEpCi0rICAgICwgc2xvcGUoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENf c2xvcGUpCi0rICAgICwgYXBwZW5kUGFyYW1zVG9EZXNjKEFwcDo6Z2V0KCkub3B0aW9ucygpLklD Q1BDX2FwcGVuZFBhcmFtc1RvRGVzYykKLSsgICAgLCBwcm9maWxlVmVyc2lvbihBcHA6OmdldCgp Lm9wdGlvbnMoKS5JQ0NQQ19wcm9maWxlVmVyc2lvbikKLSsgICAgLCBpbGx1bWluYW50KEFwcDo6 Z2V0KCkub3B0aW9ucygpLklDQ1BDX2lsbHVtaW5hbnQpCi0rICAgICwgZGVzY3JpcHRpb24oQXBw OjpnZXQoKS5vcHRpb25zKCkuSUNDUENfZGVzY3JpcHRpb24pCi0rICAgICwgY29weXJpZ2h0KEFw cDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX2NvcHlyaWdodCkKLSAgICAgLCBwYXJlbnQocnR3aW5k b3cpCi0gewotIAotQEAgLTE1NCw2ICsxNTQsNyBAQCBJQ0NQcm9maWxlQ3JlYXRvcjo6SUNDUHJv ZmlsZUNyZWF0b3IoUlRXaW5kb3cgKnJ0d2luZG93KQotICAgICBhR2FtbWEgPSBHdGs6Om1hbmFn ZShuZXcgQWRqdXN0ZXIoTSgiSUNDUFJPRkNSRUFUT1JfR0FNTUEiKSwgMSwgMy41LCAwLjAwMDAx LCAyLjQpKTsKLSAgICAgc2V0RXhwYW5kQWxpZ25Qcm9wZXJ0aWVzKGFHYW1tYSwgdHJ1ZSwgZmFs c2UsIEd0azo6QUxJR05fRklMTCwgR3RrOjpBTElHTl9CQVNFTElORSk7Ci0gCi0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgYUdhbW1hLT5zZXRE ZWxheShzdGQ6Om1heChvcHRpb25zLmFkanVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJN YXhEZWxheSkpOwotIAotICAgICBhR2FtbWEtPnNob3coKTsKLUBAIC00MjksNiArNDMwLDcgQEAg dm9pZCBJQ0NQcm9maWxlQ3JlYXRvcjo6dHJjUHJlc2V0c0NoYW5nZWQoKQotIAotIHZvaWQgSUND UHJvZmlsZUNyZWF0b3I6OnN0b3JlVmFsdWVzKCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmIChpY2NWZXJzaW9uLT5nZXRfYWN0aXZl X3RleHQoKSA9PSBNKCJJQ0NQUk9GQ1JFQVRPUl9QUk9GX1Y0IikpIHsKLSAgICAgICAgIG9wdGlv bnMuSUNDUENfcHJvZmlsZVZlcnNpb24gPSBwcm9maWxlVmVyc2lvbiA9ICJ2NCI7Ci0gICAgIH0g ZWxzZSBpZiAoaWNjVmVyc2lvbi0+Z2V0X2FjdGl2ZV90ZXh0KCkgPT0gTSgiSUNDUFJPRkNSRUFU T1JfUFJPRl9WMiIpKSB7Ci1AQCAtNjgzLDYgKzY4NSw3IEBAIHZvaWQgSUNDUHJvZmlsZUNyZWF0 b3I6OnNhdmVQcmVzc2VkKCkKLSAKLSAgICAgLy9uZWNlc3NhcnkgZm9yIFYyIHByb2ZpbGUKLSAK LSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYg KCF2MmV4Y2VwdCkgewotICAgICAgICAgLy91c2VkIHBhcnRpYWxseSBmb3IgdjQsIGFuZCBpbiBj YXNlIG9mIGlmIHdlIHdhbnQgdG8gYmFjayB0byBvbGQgbWFubmVyIGZvciB2MgotICAgICAgICAg aWYgKHByaW1hcmllc1ByZXNldCA9PSAiQUNFUy1BUDAiICAgJiYgcnRlbmdpbmU6OklDQ1N0b3Jl OjpnZXRJbnN0YW5jZSgpLT5vdXRwdXRQcm9maWxlRXhpc3Qob3B0aW9ucy5ydFNldHRpbmdzLkFD RVNwMCkpIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9pY21wYW5lbC5jYyBiL3J0Z3VpL2ljbXBhbmVs LmNjCi1pbmRleCBlY2Q0ODA4MmUuLmRmNzJkYzUxOSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2ljbXBh bmVsLmNjCi0rKysgYi9ydGd1aS9pY21wYW5lbC5jYwotQEAgLTg0LDYgKzg0LDggQEAgSUNNUGFu ZWw6OklDTVBhbmVsKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQ X0lDTV9MQUJFTCIpKSwgaXUKLSAgICAgRXZJQ01yZXNpZHRyYyA9IG0tPm5ld0V2ZW50KExVTUlO QU5DRUNVUlZFLCAiSElTVE9SWV9NU0dfSUNNX1JFU0lEVFJDIik7Ci0gICAgIEV2SUNNd2F2RXhw ID0gbS0+bmV3RXZlbnQoTFVNSU5BTkNFQ1VSVkUsICJISVNUT1JZX01TR19JQ01fV0FWRVhQIik7 Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0rCi0g ICAgIGlzQmF0Y2hNb2RlID0gbGFzdFRvbmVDdXJ2ZSA9IGxhc3RBcHBseUxvb2tUYWJsZSA9IGxh c3RBcHBseUJhc2VsaW5lRXhwb3N1cmVPZmZzZXQgPSBsYXN0QXBwbHlIdWVTYXRNYXAgPSBmYWxz ZTsKLSAKLSAgICAgaXBEaWFsb2cgPSBHdGs6Om1hbmFnZShuZXcgTXlGaWxlQ2hvb3NlckJ1dHRv bihNKCJUUF9JQ01fSU5QVVRETEdMQUJFTCIpLCBHdGs6OkZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BF TikpOwotQEAgLTI3MDMsNyArMjcwNSw3IEBAIHZvaWQgSUNNUGFuZWw6OnNhdmVSZWZlcmVuY2VQ cmVzc2VkKCkKLSAgICAgfQotIAotICAgICBHdGs6OkZpbGVDaG9vc2VyRGlhbG9nIGRpYWxvZyhn ZXRUb3BsZXZlbFdpbmRvdyh0aGlzKSwgTSgiVFBfSUNNX1NBVkVSRUZFUkVOQ0UiKSwgR3RrOjpG SUxFX0NIT09TRVJfQUNUSU9OX1NBVkUpOwotLSAgICBiaW5kQ3VycmVudEZvbGRlcihkaWFsb2cs IG9wdGlvbnMubGFzdFByb2ZpbGluZ1JlZmVyZW5jZURpcik7Ci0rICAgIGJpbmRDdXJyZW50Rm9s ZGVyKGRpYWxvZywgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RQcm9maWxpbmdSZWZlcmVu Y2VEaXIpOwotICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfbmFtZShsYXN0UmVmRmlsZW5hbWUpOwot IAotICAgICBkaWFsb2cuYWRkX2J1dHRvbihNKCJHRU5FUkFMX0NBTkNFTCIpLCBHdGs6OlJFU1BP TlNFX0NBTkNFTCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvaW1hZ2VhcmVhLmNjIGIvcnRndWkvaW1h Z2VhcmVhLmNjCi1pbmRleCAyMDliMWQwYWIuLjk0ZmU0NGM2YiAxMDA2NDQKLS0tLSBhL3J0Z3Vp L2ltYWdlYXJlYS5jYwotKysrIGIvcnRndWkvaW1hZ2VhcmVhLmNjCi1AQCAtMjQsNyArMjQsNiBA QAotICNpbmNsdWRlICJjcm9wd2luZG93LmgiCi0gI2luY2x1ZGUgInJ0ZW5naW5lL3JlZnJlc2ht YXAuaCIKLSAjaW5jbHVkZSAicnRlbmdpbmUvcHJvY3BhcmFtcy5oIgotLSNpbmNsdWRlICJvcHRp b25zLmgiCi0gI2luY2x1ZGUgInJ0c2NhbGFibGUuaCIKLSAKLSBJbWFnZUFyZWE6OkltYWdlQXJl YSAoSW1hZ2VBcmVhUGFuZWwqIHApIDogcGFyZW50KHApLCBmdWxsSW1hZ2VXaWR0aCgwKSwgZnVs bEltYWdlSGVpZ2h0KDApCi1AQCAtMTU1LDcgKzE1NCw3IEBAIHZvaWQgSW1hZ2VBcmVhOjpzZXRJ bmZvVGV4dCAoR2xpYjo6dXN0cmluZyB0ZXh0KQotIAotICAgICAvLyB1cGRhdGUgZm9udAotICAg ICBmb250ZC5zZXRfd2VpZ2h0IChQYW5nbzo6V0VJR0hUX0JPTEQpOwotLSAgICBjb25zdCBpbnQg Zm9udFNpemUgPSBvcHRpb25zLmZvbnRTaXplOwotKyAgICBjb25zdCBpbnQgZm9udFNpemUgPSBB cHA6OmdldCgpLm9wdGlvbnMoKS5mb250U2l6ZTsKLSAgICAgLy8gTm9uLWFic29sdXRlIHNpemUg aXMgZGVmaW5lZCBpbiAiUGFuZ28gdW5pdHMiIGFuZCBzaGFsbCBiZSBtdWx0aXBsaWVkIGJ5Ci0g ICAgIC8vIFBhbmdvOjpTQ0FMRSBmcm9tICJwdCI6Ci0gICAgIGZvbnRkLnNldF9zaXplIChmb250 U2l6ZSAqIFBhbmdvOjpTQ0FMRSk7Ci1AQCAtMTk1LDcgKzE5NCw3IEBAIHZvaWQgSW1hZ2VBcmVh OjpzZXRJbmZvVGV4dCAoR2xpYjo6dXN0cmluZyB0ZXh0KQotIAotIHZvaWQgSW1hZ2VBcmVhOjpp bmZvRW5hYmxlZCAoYm9vbCBlKQotIHsKLS0KLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKG9wdGlvbnMuc2hvd0luZm8gIT0gZSkgewotICAg ICAgICAgb3B0aW9ucy5zaG93SW5mbyA9IGU7Ci0gICAgICAgICBxdWV1ZV9kcmF3ICgpOwotQEAg LTI1MCw3ICsyNDksNyBAQCBib29sIEltYWdlQXJlYTo6b25fZHJhdyhjb25zdCA6OkNhaXJvOjpS ZWZQdHI8IENhaXJvOjpDb250ZXh0PiAmY3IpCi0gICAgICAgICAoKmkpLT5leHBvc2UgKGNyKTsK LSAgICAgfQotIAotLSAgICBpZiAob3B0aW9ucy5zaG93SW5mbyAmJiAhaW5mb3RleHQuZW1wdHko KSkgewotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkuc2hvd0luZm8gJiYgIWluZm90ZXh0 LmVtcHR5KCkpIHsKLSAgICAgICAgIGlCYWNrQnVmZmVyLmNvcHlTdXJmYWNlKGNyKTsKLSAgICAg fQotIAotQEAgLTQ2Nyw2ICs0NjYsNyBAQCB2b2lkIEltYWdlQXJlYTo6YWRkQ3JvcFdpbmRvdyAo KQotICAgICBjdy0+c2V0Q3JvcEdVSUxpc3RlbmVyIChjcm9wZ2wpOwotICAgICBjdy0+c2V0UG9p bnRlck1vdGlvbkxpc3RlbmVyIChwbWxpc3RlbmVyKTsKLSAgICAgY3ctPnNldFBvaW50ZXJNb3Rp b25ITGlzdGVuZXIgKHBtaGxpc3RlbmVyKTsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpbnQgbGFzdFdpZHRoID0gb3B0aW9ucy5kZXRhaWxX aW5kb3dXaWR0aDsKLSAgICAgaW50IGxhc3RIZWlnaHQgPSBvcHRpb25zLmRldGFpbFdpbmRvd0hl aWdodDsKLSAKLUBAIC02ODUsNiArNjg1LDcgQEAgdm9pZCBJbWFnZUFyZWE6OmluaXRpYWxJbWFn ZUFycml2ZWQgKCkKLSAgICAgaWYgKG1haW5Dcm9wV2luZG93KSB7Ci0gICAgICAgICBpbnQgdywg aDsKLSAgICAgICAgIG1haW5Dcm9wV2luZG93LT5jcm9wSGFuZGxlci5nZXRGdWxsSW1hZ2VTaXpl KHcsIGgpOwotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICAgICAgaWYob3B0aW9ucy5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyIHx8ICFvcHRp b25zLnJlbWVtYmVyWm9vbUFuZFBhbiB8fCB3ICE9IGZ1bGxJbWFnZVdpZHRoIHx8IGggIT0gZnVs bEltYWdlSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgaWYgKG9wdGlvbnMuY3JvcEF1dG9GaXQgfHwg b3B0aW9ucy5iZ2NvbG9yICE9IDApIHsKLSAgICAgICAgICAgICAgICAgbWFpbkNyb3BXaW5kb3ct Pnpvb21GaXRDcm9wKCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvaW5kY2xpcHBlZHBhbmVsLmNjIGIv cnRndWkvaW5kY2xpcHBlZHBhbmVsLmNjCi1pbmRleCA3MmY2ODg4N2YuLmJhYjczODc2YSAxMDA2 NDQKLS0tLSBhL3J0Z3VpL2luZGNsaXBwZWRwYW5lbC5jYwotKysrIGIvcnRndWkvaW5kY2xpcHBl ZHBhbmVsLmNjCi1AQCAtNDUsNiArNDUsNyBAQCBJbmRpY2F0ZUNsaXBwZWRQYW5lbDo6SW5kaWNh dGVDbGlwcGVkUGFuZWwgKEltYWdlQXJlYSogaWEpIDoKLSAgICAgaW5kQ2xpcHBlZEggPSBHdGs6 Om1hbmFnZSAobmV3IEd0azo6VG9nZ2xlQnV0dG9uICgpKTsKLSAgICAgaW5kQ2xpcHBlZEgtPnNl dF9yZWxpZWYoR3RrOjpSRUxJRUZfTk9ORSk7Ci0gICAgIGluZENsaXBwZWRILT5hZGQgKCpHdGs6 Om1hbmFnZSAobmV3IFJUSW1hZ2UgKCJ3YXJuaW5nLWhpZ2hsaWdodHMiLCBHdGs6OklDT05fU0la RV9MQVJHRV9UT09MQkFSKSkpOwotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gICAgIHR0ID0gR2xpYjo6dXN0cmluZzo6Y29tcG9zZSgiJTFcbiUyID0g JTMiLCBNKCJNQUlOX1RPT0xUSVBfSU5EQ0xJUFBFREgiKSwgTSgiTUFJTl9UT09MVElQX1RIUkVT SE9MRCIpLCBvcHRpb25zLmhpZ2hsaWdodFRocmVzaG9sZCk7Ci0gCi0gICAgIGlmICh0dC5maW5k KCImbHQ7IikgPT0gR2xpYjo6dXN0cmluZzo6bnBvcyAmJiB0dC5maW5kKCImZ3Q7IikgPT0gR2xp Yjo6dXN0cmluZzo6bnBvcykgewotZGlmZiAtLWdpdCBhL3J0Z3VpL2luc3BlY3Rvci5jYyBiL3J0 Z3VpL2luc3BlY3Rvci5jYwotaW5kZXggYTAxYTZjZTc3Li40NWI4MDM3MmYgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9pbnNwZWN0b3IuY2MKLSsrKyBiL3J0Z3VpL2luc3BlY3Rvci5jYwotQEAgLTg3LDYg Kzg3LDcgQEAgSW5zcGVjdG9yOjpJbnNwZWN0b3IgKCkgOiBjdXJySW1hZ2UobnVsbHB0ciksIHNj YWxlZChmYWxzZSksIHNjYWxlKDEuMCksIHpvb21TY2EKLSB7Ci0gICAgIHNldF9uYW1lKCJJbnNw ZWN0b3IiKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBpZiAoIW9wdGlvbnMuaW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgICB3aW5k b3cgPSBudWxscHRyOwotICAgICB9Ci1AQCAtMzIxLDYgKzMyMiw3IEBAIGJvb2wgSW5zcGVjdG9y Ojpvbl9zY3JvbGxfZXZlbnQoR2RrRXZlbnRTY3JvbGwgKmV2ZW50KQotICAgICAgICAgYnJlYWs7 Ci0gICAgIH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBpZiAoKG9wdGlvbnMuem9vbU9uU2Nyb2xsICYmICFhbHQpIHx8ICghb3B0aW9u cy56b29tT25TY3JvbGwgJiYgYWx0KSkgewotICAgICAgICAgLy8gem9vbQotICAgICAgICAgYmVn aW5ab29tKGV2ZW50LT54LCBldmVudC0+eSk7Ci1AQCAtNTc5LDYgKzU4MSw3IEBAIHZvaWQgSW5z cGVjdG9yOjpzd2l0Y2hJbWFnZSAoY29uc3QgR2xpYjo6dXN0cmluZyAmZnVsbFBhdGgpCi0gICAg IGlmICh3aW5kb3cgJiYgIXdpbmRvdy0+Z2V0X3Zpc2libGUoKSkKLSAgICAgICAgIHJldHVybjsK LSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAg ICBpZiAoIW9wdGlvbnMuaW5zcGVjdG9yRGVsYXkpIHsKLSAgICAgICAgIGRvU3dpdGNoSW1hZ2Uo KTsKLSAgICAgfSBlbHNlIHsKLUBAIC01OTEsNiArNTk0LDcgQEAgYm9vbCBJbnNwZWN0b3I6OmRv U3dpdGNoSW1hZ2UoKQotIHsKLSAgICAgR2xpYjo6dXN0cmluZyBmdWxsUGF0aCA9IG5leHRfaW1h Z2VfcGF0aDsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICAvLyB3ZSBmaXJzdCBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgbGlzdCwgaXQgbWF5 IGhhdmUgYmVlbiBjaGFuZ2VkIGluIFByZWZlcmVuY2UKLSAgICAgaWYgKGltYWdlcy5zaXplKCkg PiBzaXplX3Qob3B0aW9ucy5tYXhJbnNwZWN0b3JCdWZmZXJzKSkgewotICAgICAgICAgLy8gZGVs ZXRpbmcgdGhlIGxhc3QgZW50cmllcwotZGlmZiAtLWdpdCBhL3J0Z3VpL2xhYmN1cnZlLmNjIGIv cnRndWkvbGFiY3VydmUuY2MKLWluZGV4IGQ0NWI3MWUwNy4uOThhYjdhMzJjIDEwMDY0NAotLS0t IGEvcnRndWkvbGFiY3VydmUuY2MKLSsrKyBiL3J0Z3VpL2xhYmN1cnZlLmNjCi1AQCAtMTA3LDcg KzEwNyw3IEBAIExDdXJ2ZTo6TEN1cnZlKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09M X05BTUUsIE0oIlRQX0xBQkNVUlZFX0xBQkVMIiksIGZhCi0gICAgIGhzZXAzLT5zaG93KCk7Ci0g ICAgIHBhY2tfc3RhcnQoKmhzZXAzLCBHdGs6OlBBQ0tfRVhQQU5EX1dJREdFVCwgNCk7Ci0gCi0t ICAgIGN1cnZlRWRpdG9yRyA9IG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdExhYkN1 cnZlc0Rpcik7Ci0rICAgIGN1cnZlRWRpdG9yRyA9IG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6 Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0TGFiQ3VydmVzRGlyKTsKLSAgICAgY3VydmVFZGl0b3JH LT5zZXRDdXJ2ZUxpc3RlbmVyKHRoaXMpOwotIAotICAgICBsc2hhcGUgPSBzdGF0aWNfY2FzdDxE aWFnb25hbEN1cnZlRWRpdG9yKj4oY3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwg IkwqIikpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2xhYmdyaWQuY2MgYi9ydGd1aS9sYWJncmlkLmNj Ci1pbmRleCAzNmU1NThhODQuLjZhZjkwNjAwZiAxMDA2NDQKLS0tLSBhL3J0Z3VpL2xhYmdyaWQu Y2MKLSsrKyBiL3J0Z3VpL2xhYmdyaWQuY2MKLUBAIC01OTMsNiArNTkzLDcgQEAgYm9vbCBMYWJH cmlkQXJlYTo6b25fbW90aW9uX25vdGlmeV9ldmVudChHZGtFdmVudE1vdGlvbiAqZXZlbnQpCi0g ICAgICAgICB9Ci0gICAgICAgICBlZGl0ZWQgPSB0cnVlOwotICAgICAgICAgZ3JhYl9mb2N1cygp OwotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot ICAgICAgICAgaWYgKG9wdGlvbnMuYWRqdXN0ZXJNaW5EZWxheSA9PSAwKSB7Ci0gICAgICAgICAg ICAgbm90aWZ5TGlzdGVuZXIoKTsKLSAgICAgICAgIH0gZWxzZSB7Ci1kaWZmIC0tZ2l0IGEvcnRn dWkvbGVuc3Byb2ZpbGUuY2MgYi9ydGd1aS9sZW5zcHJvZmlsZS5jYwotaW5kZXggNzlmNjMxM2M5 Li5hNWY0NTg1MjMgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9sZW5zcHJvZmlsZS5jYwotKysrIGIvcnRn dWkvbGVuc3Byb2ZpbGUuY2MKLUBAIC0xMzAsNiArMTMwLDcgQEAgTGVuc1Byb2ZpbGVQYW5lbDo6 TGVuc1Byb2ZpbGVQYW5lbCgpIDoKLSAKLSAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBkZWZEaXIg PSBMQ1BTdG9yZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0RGVmYXVsdENvbW1vbkRpcmVjdG9yeSgpOwot IAotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBp ZiAoIWRlZkRpci5lbXB0eSgpKSB7Ci0gI2lmZGVmIF9XSU4zMgotICAgICAgICAgY29yckxjcEZp bGVDaG9vc2VyLT5zZXRfc2hvd19oaWRkZW4odHJ1ZSk7ICAvLyBQcm9ncmFtRGF0YSBpcyBoaWRk ZW4gb24gV2luZG93cwotQEAgLTI0Nyw3ICsyNDgsNyBAQCB2b2lkIExlbnNQcm9maWxlUGFuZWw6 OnJlYWQoY29uc3QgcnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMqIHBwLCBjb25zdCBQ YQotICAgICAgICAgICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgbGFzdEZvbGRlciA9IGNvcnJMY3BG aWxlQ2hvb3Nlci0+Z2V0X2N1cnJlbnRfZm9sZGVyKCk7Ci0gICAgICAgICAgICAgY29yckxjcEZp bGVDaG9vc2VyLT5zZXRfY3VycmVudF9mb2xkZXIobGFzdEZvbGRlcik7Ci0gICAgICAgICAgICAg Y29yckxjcEZpbGVDaG9vc2VyLT51bnNlbGVjdF9hbGwoKTsKLS0gICAgICAgICAgICBiaW5kQ3Vy cmVudEZvbGRlcigqY29yckxjcEZpbGVDaG9vc2VyLCBvcHRpb25zLmxhc3RMZW5zUHJvZmlsZURp cik7Ci0rICAgICAgICAgICAgYmluZEN1cnJlbnRGb2xkZXIoKmNvcnJMY3BGaWxlQ2hvb3Nlciwg QXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RMZW5zUHJvZmlsZURpcik7Ci0gICAgICAgICAg ICAgdXBkYXRlTENQRGlzYWJsZWQoZmFsc2UpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZSBp ZiAoTENQU3RvcmU6OmdldEluc3RhbmNlKCktPmlzVmFsaWRMQ1BGaWxlTmFtZShwcC0+bGVuc1By b2YubGNwRmlsZSkpIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9sb2NhbGxhYi5jYyBiL3J0Z3VpL2xv Y2FsbGFiLmNjCi1pbmRleCBkNTMzNzI3YTAuLjljYjA0MjY4MCAxMDA2NDQKLS0tLSBhL3J0Z3Vp L2xvY2FsbGFiLmNjCi0rKysgYi9ydGd1aS9sb2NhbGxhYi5jYwotQEAgLTI3LDggKzI3LDYgQEAK LSB1c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU7Ci0gdXNpbmcgbmFtZXNwYWNlIHByb2NwYXJhbXM7 Ci0gCi0tZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLS0KLSBjb25zdCBHbGliOjp1c3RyaW5nIExv Y2FsbGFiOjpUT09MX05BTUUgPSAibG9jYWxsYWIiOwotIAotIC8qID09PT0gTG9jYWxsYWJUb29s TGlzdCA9PT09ICovCi1AQCAtMjMxLDcgKzIyOSw3IEBAIExvY2FsbGFiOjpMb2NhbGxhYigpOgot IAotICAgICAvLyBVcGRhdGUgTG9jYWxsYWIgdG9vbHMgYWR2aWNlIHRvb2x0aXBzIHZpc2liaWxp dHkgYmFzZWQgb24gc2F2ZWQgb3B0aW9uCi0gICAgIGZvciAoYXV0byB0b29sIDogbG9jYWxsYWJU b29scykgewotLSAgICAgICAgdG9vbC0+dXBkYXRlQWR2aWNlVG9vbHRpcHMob3B0aW9ucy5zaG93 dG9vbHRpcCk7Ci0rICAgICAgICB0b29sLT51cGRhdGVBZHZpY2VUb29sdGlwcyhBcHA6OmdldCgp Lm9wdGlvbnMoKS5zaG93dG9vbHRpcCk7Ci0gICAgIH0KLSAKLSAgICAgLy8gQnkgZGVmYXVsdCwg aWYgbm8gcGhvdG8gaXMgbG9hZGVkLCBhbGwgTG9jYWxsYWIgdG9vbHMgYXJlIHJlbW92ZWQgYW5k IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGFkZCB0aGVtCi1kaWZmIC0tZ2l0IGEvcnRndWkvbG9jYWxs YWJ0b29scy5jYyBiL3J0Z3VpL2xvY2FsbGFidG9vbHMuY2MKLWluZGV4IDMxYmYxZTFhNS4uMzVl MjlkN2MxIDEwMDY0NAotLS0tIGEvcnRndWkvbG9jYWxsYWJ0b29scy5jYwotKysrIGIvcnRndWkv bG9jYWxsYWJ0b29scy5jYwotQEAgLTc0LDcgKzc0LDYgQEAgdm9pZCB1cGRhdGVfZ2hzX2N1cnZl KAotIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTsKLSB1c2luZyBuYW1lc3BhY2UgcHJvY3BhcmFt czsKLSAKLS1leHRlcm4gT3B0aW9ucyBvcHRpb25zOwotIHN0YXRpYyBkb3VibGUgYmx1clNsaWRl cjJyYWRpdXMoZG91YmxlIHN2YWwpCi0gewotICAgICAvLyBTbGlkZXIgcmFuZ2U6IDAgLSAxMDAw Ci1AQCAtMjQxLDcgKzI0MCw3IEBAIHZvaWQgTG9jYWxsYWJUb29sOjphZGRMb2NhbGxhYlRvb2wo Ym9vbCByYWlzZUV2ZW50KQotICAgICAgICAgaWYgKG5lZWRNb2RlKSB7Ci0gICAgICAgICAgICAg Ly8gU2V0IGNvbXBsZXhpdHkgbW9kZSBhY2NvcmRpbmcgdG8gY2hvc2VuIGRlZmF1bHQgb25lCi0g ICAgICAgICAgICAgY29tcGxleGl0eUNvbm4uYmxvY2sodHJ1ZSk7Ci0tICAgICAgICAgICAgY29t cGxleGl0eS0+c2V0X2FjdGl2ZShvcHRpb25zLmNvbXBsZXhpdHkpOwotKyAgICAgICAgICAgIGNv bXBsZXhpdHktPnNldF9hY3RpdmUoQXBwOjpnZXQoKS5vcHRpb25zKCkuY29tcGxleGl0eSk7Ci0g ICAgICAgICAgICAgY29tcGxleGl0eUNvbm4uYmxvY2soZmFsc2UpOwotIAotICAgICAgICAgICAg IC8vIFVwZGF0ZSBHVUkgYWNjb3JkaW5nbHkKLUBAIC01MTUsMTkgKzUxNCwxOSBAQCBMb2NhbGxh YkNvbG9yOjpMb2NhbGxhYkNvbG9yKCk6Ci0gICAgIGV4cGN1cnZjb2woR3RrOjptYW5hZ2UobmV3 IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX0VYUENVUlYiKSkpKSwKLSAgICAgbGFi cXVhbGN1cnYoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwoTSgiVFBfTE9DQUxMQUJfUVVBTENV UlZfTUVUSE9EIikgKyAiOiIpKSksCi0gICAgIHF1YWxpdHljdXJ2ZU1ldGhvZChHdGs6Om1hbmFn ZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotLSAgICBsbEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTFVN IikpKSwKLSsgICAgbGxDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTFVNIikp KSwKLSAgICAgbGxzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4obGxDdXJ2 ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChMKSIpKSksCi0gICAgIGNjc2hhcGUo c3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGxsQ3VydmVFZGl0b3JHLT5hZGRDdXJ2 ZShDVF9EaWFnb25hbCwgIkMoQykiKSkpLAotLSAgICBjbEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfQ0gi KSkpLAotKyAgICBjbEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgp Lm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9DSCIpKSks Ci0gICAgIGNsc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGNsQ3VydmVF ZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkMoTCkiKSkpLAotICAgICBsY3NoYXBlKHN0 YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihjbEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUo Q1RfRGlhZ29uYWwsICJMKEMpIikpKSwKLS0gICAgSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfSExIIikp KSwKLSsgICAgSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11 dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9ITEgiKSkpLAot ICAgICBMSHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KEhDdXJ2ZUVkaXRvckct PmFkZEN1cnZlKENUX0ZsYXQsICJMKGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi0tICAg IEgzQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3Vy dmVzRGlyLCBNKCJUUF9MT0NBTExBQl9ITEgiKSkpLAotKyAgICBIM0N1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9ITEgiKSkpLAotICAgICBDSHNoYXBlKHN0YXRpY19jYXN0PEZs YXRDdXJ2ZUVkaXRvcio+KEgzQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyhoKSIs IG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotLSAgICBIMkN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfSExI IikpKSwKLSsgICAgSDJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfSExIIikp KSwKLSAgICAgSEhzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihIMkN1cnZlRWRp dG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgImgoaCkiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwK LS0gICAgcmdiQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxv Y2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9SR0IiKSkpLAotKyAgICByZ2JDdXJ2ZUVkaXRv ckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2Nh bEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfUkdCIikpKSwKLSAgICAgdG9uZU1ldGhvZChHdGs6 Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICByZ2JzaGFwZShzdGF0aWNfY2Fz dDxEaWFnb25hbEN1cnZlRWRpdG9yKj4ocmdiQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFn b25hbCwgIiIsIHRvbmVNZXRob2QpKSksCi0gICAgIHNwZWNpYWwoR3RrOjptYW5hZ2UobmV3IEd0 azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfU1BFQ0lBTCIpKSkpLAotQEAgLTU0Niw4ICs1 NDUsOCBAQCBMb2NhbGxhYkNvbG9yOjpMb2NhbGxhYkNvbG9yKCk6Ci0gICAgIHNob3dtYXNrY29s TWV0aG9kKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIHNob3dtYXNr Y29sTWV0aG9kaW52KEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIGVu YUNvbG9yTWFzayhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExB Ql9FTkFCTEVfTUFTSyIpKSkpLAotLS8vICAgIG1hc2tDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0tD T0wiKSkpLAotLSAgICBtYXNrQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdGxvY2FsQ3VydmVzRGlyLCIiLCAxKSksCi0rLy8gICAgbWFza0N1cnZlRWRpdG9yRyhu ZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3Vy dmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLQ09MIikpKSwKLSsgICAgbWFza0N1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2Fs Q3VydmVzRGlyLCIiLCAxKSksCi0gICAgIENDbWFza3NoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2 ZUVkaXRvcio+KG1hc2tDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0 ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBMTG1hc2tzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3Vy dmVFZGl0b3IqPihtYXNrQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxw dHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1 cnZlRWRpdG9yICo+KG1hc2tDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIs IG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTU2NywxMiArNTY2LDEyIEBAIExvY2FsbGFi Q29sb3I6OkxvY2FsbGFiQ29sb3IoKToKLSAgICAgZ2FtbWFza2NvbChHdGs6Om1hbmFnZShuZXcg QWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfR0FNTUFTS0NPTCIpLCAwLjI1LCA0LjAsIDAuMDEsIDEu KSkpLAotICAgICBzbG9tYXNrY29sKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NB TExBQl9TTE9NQVNLQ09MIiksIDAuMCwgMTUuMCwgMC4xLCAwLikpKSwKLSAgICAgc2hhZG1hc2tj b2woR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NIQU1BU0tDT0wiKSwg MCwgMTAwLCAxLCAwKSkpLAotLSAvLyAgIG1hc2tIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRv ckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLSCIp KSksCi0tICAgIG1hc2tIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMu bGFzdGxvY2FsQ3VydmVzRGlyLCAiIikpLAotKyAvLyAgIG1hc2tIQ3VydmVFZGl0b3JHKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsIE0oIlRQX0xPQ0FMTEFCX01BU0tIIikpKSwKLSsgICAgbWFza0hDdXJ2ZUVkaXRvckcobmV3 IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZl c0RpciwgIiIpKSwKLSAgICAgSEhobWFza3NoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRv ciAqPihtYXNrSEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgImgoaCkiLCBudWxscHRy LCBmYWxzZSwgdHJ1ZSkpKSwKLS0gICAgbWFzazJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9y R3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikp KSwKLSsgICAgbWFzazJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSzIi KSkpLAotICAgICBMbWFza3NoYXBlKHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPiht YXNrMkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKEwpIikpKSwKLS0gICAg bWFzazJDdXJ2ZUVkaXRvckd3YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVk1BU0siKSkpLAotKyAgICBtYXNrMkN1cnZl RWRpdG9yR3dhdihuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCku bGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSAgICAgTExt YXNrY29sc2hhcGV3YXYoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFzazJDdXJ2ZUVk aXRvckd3YXYtPmFkZEN1cnZlKENUX0ZsYXQsICJMKEwpIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNl KSkpLAotICAgICBjc1RocmVzaG9sZGNvbChHdGs6Om1hbmFnZShuZXcgVGhyZXNob2xkQWRqdXN0 ZXIoTSgiVFBfTE9DQUxMQUJfQ1NUSFJFU0hPTERCTFVSIiksIDAsIDksIDAsIDAsIDYsIDUsIDAs IGZhbHNlKSkpCi0gewotQEAgLTI3NDQsNyArMjc0Myw3IEBAIExvY2FsbGFiRXhwb3N1cmU6Okxv Y2FsbGFiRXhwb3N1cmUoKToKLSAgICAgc2hhZGV4KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9TSEFERVgiKSwgMCwgMTAwLCAxLCAwKSkpLAotICAgICBzaGNvbXByKEd0 azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9TSEFERVhDT01QIiksIDAsIDEw MCwgMSwgNTApKSksCi0gICAgIGV4cGNocm9tYShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgi VFBfTE9DQUxMQUJfRVhQQ0hST01BIiksIC01MCwgMTAwLCAxLCA1KSkpLAotLSAgICBjdXJ2ZUVk aXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0o IlRQX0xPQ0FMTEFCX0NVUlZFRURJVE9SX1RPTkVTX0xBQkVMIikpKSwKLSsgICAgY3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0NVUlZFRURJVE9SX1RPTkVTX0xBQkVMIikpKSwK LSAgICAgc2hhcGVleHBvcyhzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oY3VydmVF ZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIiIpKSksCi0gICAgIGV4cHJlY292ZShHdGs6 Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxzZSwgTSgiVFBfTE9DQUxMQUJfREVOT0kyX0VYUCIp KSkpLAotICAgICBtYXNrdXNhYmxlZShHdGs6Om1hbmFnZShuZXcgR3RrOjpMYWJlbChNKCJUUF9M T0NBTExBQl9NQVNLVVNBQkxFIikpKSksCi1AQCAtMjc2NCw4ICsyNzYzLDggQEAgTG9jYWxsYWJF eHBvc3VyZTo6TG9jYWxsYWJFeHBvc3VyZSgpOgotICAgICBzaG93bWFza2V4cE1ldGhvZGludihH dGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFFeHBNYXNrKEd0azo6 bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9NQVNLIikp KSksCi0gICAgIGVuYUV4cE1hc2thZnQoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24o TSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0tBRlQiKSkpKSwKLS0gLy8gICBtYXNrZXhwQ3VydmVF ZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBN KCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLS0gICAgbWFza2V4cEN1cnZlRWRpdG9yRyhuZXcgQ3Vy dmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsgLy8g ICBtYXNrZXhwQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0 X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAot KyAgICBtYXNrZXhwQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0gICAgIENDbWFza2V4 cHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tleHBDdXJ2ZUVkaXRvckct PmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBM TG1hc2tleHBzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrZXhwQ3VydmVF ZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwK LSAgICAgSEhtYXNrZXhwc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yICo+KG1hc2tl eHBDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIsIG51bGxwdHIsIGZhbHNl LCB0cnVlKSkpLAotQEAgLTI3NzgsNyArMjc3Nyw3IEBAIExvY2FsbGFiRXhwb3N1cmU6OkxvY2Fs bGFiRXhwb3N1cmUoKToKLSAgICAgZ3JhZEZyYW1lbWFzayhHdGs6Om1hbmFnZShuZXcgR3RrOjpG cmFtZShNKCJUUF9MT0NBTExBQl9HUkFERlJBIikpKSksCi0gICAgIHN0cm1hc2tleHAoR3RrOjpt YW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0dSQURTVFIiKSwgLTIuLCAyLiwgMC4w NSwgMC4pKSksCi0gICAgIGFuZ21hc2tleHAoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQ X0xPQ0FMTEFCX0dSQURBTkciKSwgLTE4MC4sIDE4MC4sIDAuMSwgMC4pKSksCi0tICAgIG1hc2sy ZXhwQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3Vy dmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLMiIpKSksCi0rICAgIG1hc2syZXhwQ3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2tleHBzaGFw ZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4obWFzazJleHBDdXJ2ZUVkaXRvckct PmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChMKSIpKSksCi0gICAgIEV2bG9jYWxsYWJ0bW9zYXR1 cihQcm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNlKCktPm5ld0V2ZW50KEFVVE9FWFAsICJISVNU T1JZX01TR19MT0NBTF9UTU9fU0FUVVIiKSkKLSAgICAgCi1AQCAtNDM0NSw4ICs0MzQ0LDggQEAg TG9jYWxsYWJTaGFkb3c6OkxvY2FsbGFiU2hhZG93KCk6Ci0gICAgIHNob3dtYXNrU0hNZXRob2Qo R3RrOjptYW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgc2hvd21hc2tTSE1ldGhv ZGludihHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFTSE1hc2so R3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01B U0siKSkpKSwKLS0vLyAgICBtYXNrU0hDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo b3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotLSAg ICBtYXNrU0hDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9j YWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rLy8gICAgbWFza1NIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotKyAgICBtYXNrU0hDdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0Rp ciwgIiIsIDEpKSwKLSAgICAgQ0NtYXNrU0hzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0 b3IqPihtYXNrU0hDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwg ZmFsc2UsIGZhbHNlKSkpLAotICAgICBMTG1hc2tTSHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2 ZUVkaXRvcio+KG1hc2tTSEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkwiLCBudWxs cHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIEhIbWFza1NIc2hhcGUoc3RhdGljX2Nhc3Q8Rmxh dEN1cnZlRWRpdG9yKj4obWFza1NIQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMo aCkiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLUBAIC00MzU2LDcgKzQzNTUsNyBAQCBMb2Nh bGxhYlNoYWRvdzo6TG9jYWxsYWJTaGFkb3coKToKLSAgICAgY2hyb21hc2tTSChHdGs6Om1hbmFn ZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01BU0tDT0wiKSwgLTEwMC4wLCAxMDAu MCwgMC4xLCAwLikpKSwKLSAgICAgZ2FtbWFza1NIKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9HQU1NQVNLQ09MIiksIDAuMjUsIDQuMCwgMC4wMSwgMS4pKSksCi0gICAg IHNsb21hc2tTSChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFT S0NPTCIpLCAwLjAsIDE1LjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2syU0hDdXJ2ZUVkaXRvckco bmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xP Q0FMTEFCX01BU0syIikpKSwKLSsgICAgbWFzazJTSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJU UF9MT0NBTExBQl9NQVNLMiIpKSksCi0gICAgIExtYXNrU0hzaGFwZShzdGF0aWNfY2FzdDxEaWFn b25hbEN1cnZlRWRpdG9yKj4obWFzazJTSEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29u YWwsICJMKEwpIikpKSwKLSAgICAgZmF0U0hGcmFtZShHdGs6Om1hbmFnZShuZXcgR3RrOjpGcmFt ZShNKCJUUF9MT0NBTExBQl9GQVRTSEZSQSIpKSkpLAotICAgICBmYXRhbW91bnRTSChHdGs6Om1h bmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfRkFUQU1PVU5UIiksIDEuLCAxMDAuLCAx LiwgMS4pKSksCi1AQCAtNjE1Nyw3ICs2MTU2LDcgQEAgTG9jYWxsYWJWaWJyYW5jZTo6TG9jYWxs YWJWaWJyYW5jZSgpOgotICAgICBwYXN0U2F0VG9nKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNr QnV0dG9uKE0oIlRQX1ZJQlJBTkNFX1BBU1RTQVRUT0ciKSkpKSwKLSAgICAgc2Vuc2l2KEd0azo6 bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9TRU5TSSIpLCAwLCAxMDAsIDEsIDMw KSkpLC8vcmV1c2VkIC0gdW51c2VkIGhlcmUsIGJ1dCB1c2VkIGZvciBub3JtYWxpemVfbWVhbl9k dCAKLSAgICAgcHJldmlld3ZpYihHdGs6Om1hbmFnZShuZXcgR3RrOjpUb2dnbGVCdXR0b24oTSgi VFBfTE9DQUxMQUJfUFJFVklFVyIpKSkpLAotLSAgICBjdXJ2ZUVkaXRvckdHKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9WSUJSQU5DRV9DVVJW RUVESVRPUl9TS0lOVE9ORVNfTEFCRUwiKSkpLAotKyAgICBjdXJ2ZUVkaXRvckdHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX1ZJQlJBTkNFX0NVUlZFRURJVE9SX1NLSU5UT05FU19MQUJFTCIpKSksCi0gICAgIHNr aW5Ub25lc0N1cnZlKHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihjdXJ2ZUVkaXRv ckdHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgTSgiVFBfVklCUkFOQ0VfQ1VSVkVFRElUT1JfU0tJ TlRPTkVTIikpKSksCi0gICAgIGV4cHJlY292dihHdGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihm YWxzZSwgTSgiVFBfTE9DQUxMQUJfREVOT0kyX0VYUCIpKSkpLAotICAgICBtYXNrdXNhYmxldihH dGs6Om1hbmFnZShuZXcgR3RrOjpMYWJlbChNKCJUUF9MT0NBTExBQl9NQVNLVVNBQkxFIikpKSks Ci1AQCAtNjE3NSw4ICs2MTc0LDggQEAgTG9jYWxsYWJWaWJyYW5jZTo6TG9jYWxsYWJWaWJyYW5j ZSgpOgotICAgICBleHBtYXNrdmliKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFuZGVyKGZhbHNlLCBN KCJUUF9MT0NBTExBQl9TSE9XVkkiKSkpKSwKLSAgICAgc2hvd21hc2t2aWJNZXRob2QoR3RrOjpt YW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hdmliTWFzayhHdGs6Om1hbmFn ZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkpLAot LSAvLyAgIG1hc2t2aWJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5s YXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotLSAgICBtYXNrdmli Q3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVz RGlyLCAiIiwgMSkpLAotKyAvLyAgIG1hc2t2aWJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9y R3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTSyIpKSksCi0rICAgIG1hc2t2aWJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIs IDEpKSwKLSAgICAgQ0NtYXNrdmlic2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4o bWFza3ZpYkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMiLCBudWxscHRyLCBmYWxz ZSwgZmFsc2UpKSksCi0gICAgIExMbWFza3ZpYnNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVk aXRvcio+KG1hc2t2aWJDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0 ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBISG1hc2t2aWJzaGFwZShzdGF0aWNfY2FzdDxGbGF0 Q3VydmVFZGl0b3IgKj4obWFza3ZpYkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkxD KGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi1AQCAtNjE4Niw3ICs2MTg1LDcgQEAgTG9j YWxsYWJWaWJyYW5jZTo6TG9jYWxsYWJWaWJyYW5jZSgpOgotICAgICBjaHJvbWFza3ZpYihHdGs6 Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01BU0tDT0wiKSwgLTEwMC4w LCAxMDAuMCwgMC4xLCAwLikpKSwKLSAgICAgZ2FtbWFza3ZpYihHdGs6Om1hbmFnZShuZXcgQWRq dXN0ZXIoTSgiVFBfTE9DQUxMQUJfR0FNTUFTS0NPTCIpLCAwLjI1LCA0LjAsIDAuMDEsIDEuKSkp LAotICAgICBzbG9tYXNrdmliKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExB Ql9TTE9NQVNLQ09MIiksIDAuMCwgMTUuMCwgMC4xLCAwLikpKSwKLS0gICAgbWFzazJ2aWJDdXJ2 ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSsgICAgbWFzazJ2aWJDdXJ2ZUVkaXRvckcobmV3 IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZl c0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSzIiKSkpLAotICAgICBMbWFza3ZpYnNoYXBlKHN0YXRp Y19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihtYXNrMnZpYkN1cnZlRWRpdG9yRy0+YWRkQ3Vy dmUoQ1RfRGlhZ29uYWwsICJMKEwpIikpKQotIHsKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50TWFw cGVyOjpnZXRJbnN0YW5jZSgpOwotQEAgLTc2OTQsNyArNzY5Myw3IEBAIExvY2FsbGFiQmx1cjo6 TG9jYWxsYWJCbHVyKCk6Ci0gICAgIGV4cGRlbm9pc2VubChHdGs6Om1hbmFnZShuZXcgTXlFeHBh bmRlcihmYWxzZSwgTSgiVFBfTE9DQUxMQUJfTkxGUkEiKSkpKSwKLSAgICAgZXhwZGVub2lzZWx1 bShHdGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxzZSwgTSgiVFBfTE9DQUxMQUJfREVOT0lX QVZMVU0iKSkpKSwKLSAgICAgZXhwZGVub2lzZWNoKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFuZGVy KGZhbHNlLCBNKCJUUF9MT0NBTExBQl9ERU5PSVdBVkNIIikpKSksCi0tICAgIExvY2FsY3VydmVF ZGl0b3J3YXZkZW4obmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNE aXIsIE0oIlRQX0xPQ0FMTEFCX1dBVkRFTiIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3J3YXZk ZW4obmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2Nh bEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWREVOIikpKSwKLSAgICAgd2F2c2hhcGVkZW4o c3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmRlbi0+YWRk Q3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgIC8vICBsQ0xh YmVscyhHdGs6Om1hbmFnZShuZXcgR3RrOjpMYWJlbChNKCJUUF9MT0NBTExBQl9MQ0xBQkVMUyIp KSkpLAotICAgICBsQ0xhYmVscyhHdGs6Om1hbmFnZShuZXcgR3RrOjpMYWJlbCgiLS0tLS0tLS0t LS0tLS0tLS0iKSkpLAotQEAgLTc3MjAsNyArNzcxOSw3IEBAIExvY2FsbGFiQmx1cjo6TG9jYWxs YWJCbHVyKCk6Ci0gICAgIG5vaXNlbHVtZGV0YWlsKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9OT0lTRUxVTURFVEFJTCIpLCAwLiwgMTAwLiwgMC4wMSwgNTAuKSkpLAot ICAgICBub2lzZWxlcXVhbChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJf Tk9JU0VMRVFVQUwiKSwgLTIsIDEwLCAxLCA3LCBHdGs6Om1hbmFnZShuZXcgUlRJbWFnZSgiY2ly Y2xlLXdoaXRlLXNtYWxsIikpLCBHdGs6Om1hbmFnZShuZXcgUlRJbWFnZSgiY2lyY2xlLWJsYWNr LXNtYWxsIikpKSkpLAotICAgICBub2lzZWdhbShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgi VFBfTE9DQUxMQUJfTk9JU0VHQU0iKSwgMS4wLCA1LiwgMC4xLCAxLikpKSwKLS0gICAgTG9jYWxj dXJ2ZUVkaXRvcndhdmh1ZShuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1 cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9ERU5PSVNFSFVFIikpKSwKLSsgICAgTG9jYWxjdXJ2ZUVk aXRvcndhdmh1ZShuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCku bGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX0RFTk9JU0VIVUUiKSkpLAotICAgICB3 YXZodWUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmh1 ZS0+YWRkQ3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotICAgICBu b2lzZWNocm9mKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9OT0lTRUNI Uk9GSU5FIiksIE1JTkNIUk8sIE1BWENIUk8sIDAuMDEsIDAuKSkpLAotICAgICBub2lzZWNocm9j KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9OT0lTRUNIUk9DT0FSU0Ui KSwgTUlOQ0hSTywgTUFYQ0hST0NDLCAwLjAxLCAwLikpKSwKLUBAIC03NzUyLDggKzc3NTEsOCBA QCBMb2NhbGxhYkJsdXI6OkxvY2FsbGFiQmx1cigpOgotICAgICBzaG93bWFza2JsTWV0aG9kKEd0 azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIHNob3dtYXNrYmxNZXRob2R0 eXAoR3RrOjptYW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hYmxNYXNrKEd0 azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9NQVNL IikpKSksCi0tLy8gICAgbWFza2JsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9w dGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLS0gICAg bWFza2JsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2Fs Q3VydmVzRGlyLCAiIiwgMSkpLAotKy8vICAgIG1hc2tibEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBN KCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFza2JsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIs ICIiLCAxKSksCi0gICAgIENDbWFza2Jsc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9y Kj4obWFza2JsQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZh bHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrYmxzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVF ZGl0b3IqPihtYXNrYmxDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0 ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBISG1hc2tibHNoYXBlKHN0YXRpY19jYXN0PEZsYXRD dXJ2ZUVkaXRvciAqPihtYXNrYmxDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyho KSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTc3NjksOSArNzc2OCw5IEBAIExvY2Fs bGFiQmx1cjo6TG9jYWxsYWJCbHVyKCk6Ci0gICAgIHNsb21hc2tibChHdGs6Om1hbmFnZShuZXcg QWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFTS0NPTCIpLCAwLjAsIDE1LjAsIDAuMSwgMC4p KSksCi0gICAgIHNoYWRtYXNrYmwoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX0hJR0hNQVNLQ09MIiksIDAsIDEwMCwgMSwgMCkpKSwKLSAgICAgc2hhZG1hc2tibHNoYShH dGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0hBTUFTS0NPTCIpLCAwLCAx MDAsIDEsIDApKSksCi0tICAgIG1hc2syYmxDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAot KyAgICBtYXNrMmJsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkp LAotICAgICBMbWFza2Jsc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KG1h c2syYmxDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChMKSIpKSksCi0tICAg IG1hc2syYmxDdXJ2ZUVkaXRvckd3YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0 bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVk1BU0siKSkpLAotKyAgICBtYXNrMmJs Q3VydmVFZGl0b3JHd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVk1BU0siKSkpLAotICAg ICBMTG1hc2tibHNoYXBld2F2KHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2syYmxD dXJ2ZUVkaXRvckd3YXYtPmFkZEN1cnZlKENUX0ZsYXQsICJMKEwpIiwgbnVsbHB0ciwgZmFsc2Us IGZhbHNlKSkpLAotICAgICBxdWFIQm94KEd0azo6bWFuYWdlKG5ldyBHdGs6OkJveCgpKSksCi0g ICAgIGNzVGhyZXNob2xkYmx1cihHdGs6Om1hbmFnZShuZXcgVGhyZXNob2xkQWRqdXN0ZXIoTSgi VFBfTE9DQUxMQUJfQ1NUSFJFU0hPTERCTFVSIiksIDAsIDksIDAsIDAsIDYsIDUsIDAsIGZhbHNl KSkpCi1kaWZmIC0tZ2l0IGEvcnRndWkvbG9jYWxsYWJ0b29sczIuY2MgYi9ydGd1aS9sb2NhbGxh YnRvb2xzMi5jYwotaW5kZXggYWFiZGQxOTlhLi45Zjk4MjAzMWUgMTAwNjQ0Ci0tLS0gYS9ydGd1 aS9sb2NhbGxhYnRvb2xzMi5jYwotKysrIGIvcnRndWkvbG9jYWxsYWJ0b29sczIuY2MKLUBAIC0z NSw4ICszNSw2IEBACi0gdXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOwotIHVzaW5nIG5hbWVzcGFj ZSBwcm9jcGFyYW1zOwotIAotLWV4dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0tCi0gc3RhdGljIGRv dWJsZSByZXRpU2xpZGVyMm5laWdoKGRvdWJsZSBzdmFsKQotIHsKLSAgICAgLy8gU2xpZGVyIHJh bmdlOiAwIC0gNTAwMAotQEAgLTE0NCw4ICsxNDIsOCBAQCBMb2NhbGxhYlRvbmU6OkxvY2FsbGFi VG9uZSgpOgotICAgICBzaG93bWFza3RtTWV0aG9kKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94 VGV4dCgpKSksCi0gICAgIGVuYXRtTWFzayhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRv bihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkpLAotICAgICBlbmF0bU1hc2thZnQoR3Rr OjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX0FGVEVS X01BU0siKSkpKSwKLS0vLyAgIG1hc2t0bUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91 cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSyIpKSksCi0t ICAgIG1hc2t0bUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rs b2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsvLyAgIG1hc2t0bUN1cnZlRWRpdG9yRyhuZXcgQ3Vy dmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGly LCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFza3RtQ3VydmVFZGl0b3JHKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsICIiLCAxKSksCi0gICAgIENDbWFza3Rtc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRp dG9yKj4obWFza3RtQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIs IGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrdG1zaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3Vy dmVFZGl0b3IqPihtYXNrdG1DdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVs bHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBISG1hc2t0bXNoYXBlKHN0YXRpY19jYXN0PEZs YXRDdXJ2ZUVkaXRvciAqPihtYXNrdG1DdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJM QyhoKSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTE1NSw3ICsxNTMsNyBAQCBMb2Nh bGxhYlRvbmU6OkxvY2FsbGFiVG9uZSgpOgotICAgICBjaHJvbWFza3RtKEd0azo6bWFuYWdlKG5l dyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DSFJPTUFTS0NPTCIpLCAtMTAwLjAsIDEwMC4wLCAw LjEsIDAuKSkpLAotICAgICBnYW1tYXNrdG0oR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQ X0xPQ0FMTEFCX0dBTU1BU0tDT0wiKSwgMC4wNSwgNS4wLCAwLjAxLCAxLikpKSwKLSAgICAgc2xv bWFza3RtKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9TTE9NQVNLQ09M IiksIDAuMCwgMTUuMCwgMC4xLCAwLikpKSwKLS0gICAgbWFzazJ0bUN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxM QUJfTUFTSzIiKSkpLAotKyAgICBtYXNrMnRtQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdy b3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xP Q0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2t0bXNoYXBlKHN0YXRpY19jYXN0PERpYWdvbmFs Q3VydmVFZGl0b3IqPihtYXNrMnRtQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwg IkwoTCkiKSkpCi0gewotICAgICBhdXRvIG0gPSBQcm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNl KCk7Ci1AQCAtODk5LDEyICs4OTcsMTIgQEAgTG9jYWxsYWJSZXRpbmV4OjpMb2NhbGxhYlJldGlu ZXgoKToKLSAgICAgbGlnaHRuZXNzcmV0aShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBf TE9DQUxMQUJfTElHSFRSRVRJIiksIDAuMDEsIDQuMCwgMC4wMSwgMS4pKSksCi0gICAgIGNsaXB0 bShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0xJUFRNIiksIDAuMDIs IDIuMCwgMC4wMSwgMS4pKSksCi0gICAgIHNvZnRyYWRpdXNyZXQoR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NPRlRSRVRJIiksIDAuMCwgMTAwLjAsIDAuNSwgNDAuKSkp LAotLSAgICBMb2NhbGN1cnZlRWRpdG9ydHJhbnNUKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9UUkFOU01JU1NJT05NQVAiKSkp LAotKyAgICBMb2NhbGN1cnZlRWRpdG9ydHJhbnNUKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6 Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1RS QU5TTUlTU0lPTk1BUCIpKSksCi0gICAgIGNUdHJhbnNzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3Vy dmVFZGl0b3IqPihMb2NhbGN1cnZlRWRpdG9ydHJhbnNULT5hZGRDdXJ2ZShDVF9GbGF0LCAiIiwg bnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBtTUxhYmVscyhHdGs6Om1hbmFnZShuZXcg R3RrOjpMYWJlbCgiLS0tIikpKSwKLSAgICAgdHJhbnNMYWJlbHMoR3RrOjptYW5hZ2UobmV3IEd0 azo6TGFiZWwoIi0tLSIpKSksCi0gICAgIHRyYW5zTGFiZWxzMihHdGs6Om1hbmFnZShuZXcgR3Rr OjpMYWJlbCgiLS0tIikpKSwKLS0gICAgTG9jYWxjdXJ2ZUVkaXRvcmdhaW5UKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9UUkFO U01JU1NJT05HQUlOIikpKSwKLSsgICAgTG9jYWxjdXJ2ZUVkaXRvcmdhaW5UKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0o IlRQX0xPQ0FMTEFCX1RSQU5TTUlTU0lPTkdBSU4iKSkpLAotICAgICBjVGdhaW5zaGFwZShzdGF0 aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihMb2NhbGN1cnZlRWRpdG9yZ2FpblQtPmFkZEN1cnZl KENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIGV4cHJlY292cihH dGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxzZSwgTSgiVFBfTE9DQUxMQUJfREVOT0kyX0VY UCIpKSkpLAotICAgICBtYXNrdXNhYmxlcihHdGs6Om1hbmFnZShuZXcgR3RrOjpMYWJlbChNKCJU UF9MT0NBTExBQl9NQVNLVVNBQkxFIikpKSksCi1AQCAtOTE3LDggKzkxNSw4IEBAIExvY2FsbGFi UmV0aW5leDo6TG9jYWxsYWJSZXRpbmV4KCk6Ci0gICAgIHNob3dtYXNrcmV0aU1ldGhvZChHdGs6 Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFyZXRpTWFzayhHdGs6Om1h bmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkp LAotICAgICBlbmFyZXRpTWFza3RtYXAoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24o TSgiVFBfTE9DQUxMQUJfVE1fTUFTSyIpKSkpLAotLS8vICAgbWFza3JldGlDdXJ2ZUVkaXRvckco bmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xP Q0FMTEFCX01BU0siKSkpLAotLSAgICBtYXNrcmV0aUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsvLyAgIG1hc2ty ZXRpQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotKyAgICBt YXNrcmV0aUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9v cHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBDQ21hc2tyZXRpc2hh cGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza3JldGlDdXJ2ZUVkaXRvckctPmFk ZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBMTG1h c2tyZXRpc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza3JldGlDdXJ2ZUVk aXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAot ICAgICBISG1hc2tyZXRpc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yICo+KG1hc2ty ZXRpQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBudWxscHRyLCBmYWxz ZSwgdHJ1ZSkpKSwKLUBAIC05MjgsNyArOTI2LDcgQEAgTG9jYWxsYWJSZXRpbmV4OjpMb2NhbGxh YlJldGluZXgoKToKLSAgICAgY2hyb21hc2tyZXRpKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9DSFJPTUFTS0NPTCIpLCAtMTAwLjAsIDEwMC4wLCAwLjEsIDAuKSkpLAot ICAgICBnYW1tYXNrcmV0aShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJf R0FNTUFTS0NPTCIpLCAwLjA1LCA1LjAsIDAuMDEsIDEuKSkpLAotICAgICBzbG9tYXNrcmV0aShH dGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFTS0NPTCIpLCAwLjAs IDE1LjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2sycmV0aUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFT SzIiKSkpLAotKyAgICBtYXNrMnJldGlDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo QXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxM QUJfTUFTSzIiKSkpLAotICAgICBMbWFza3JldGlzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1 cnZlRWRpdG9yKj4obWFzazJyZXRpQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwg IkwoTCkiKSkpLAotICAgICBpbnZlcnNyZXQoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0 b24oTSgiVFBfTE9DQUxMQUJfSU5WRVJTIikpKSkKLSB7Ci1AQCAtMjUzNiw3ICsyNTM0LDcgQEAg TG9jYWxsYWJDb250cmFzdDo6TG9jYWxsYWJDb250cmFzdCgpOgotICAgICBjb250RnJhbWUoR3Rr OjptYW5hZ2UobmV3IEd0azo6RnJhbWUoTSgiVFBfTE9DQUxMQUJfQ09OVFdGUkEiKSkpKSwKLSAg ICAgc2lnbWFsYyhHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0lHTUFX QVYiKSwgMC4yLCAyLjUsIDAuMDEsIDEuKSkpLAotICAgICBvZmZzbGMoR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyKE0oIlRQX1dBVkVMRVRfV0FWT0ZGU0VUIiksIDAuMzMsIDEuNiwgMC4wMSwgMS4p KSksCi0tICAgIExvY2FsY3VydmVFZGl0b3J3YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9u cy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBViIpKSksCi0rICAgIExvY2Fs Y3VydmVFZGl0b3J3YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9u cygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWIikpKSwKLSAgICAgd2F2 c2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdi0+ YWRkQ3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgY3NU aHJlc2hvbGQoR3RrOjptYW5hZ2UobmV3IFRocmVzaG9sZEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFC X0NTVEhSRVNIT0xEIiksIDAsIDksIDAsIDAsIDcsIDUsIDAsIGZhbHNlKSkpLAotICAgICBwcm9j ZXNzd2F2KEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX1BS T0NFU1NXQVYiKSkpKSwKLUBAIC0yNTY5LDcgKzI1NjcsNyBAQCBMb2NhbGxhYkNvbnRyYXN0OjpM b2NhbGxhYkNvbnRyYXN0KCk6Ci0gICAgIHdhdmVkZyhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVj a0J1dHRvbihNKCJUUF9MT0NBTExBQl9FREdGUkEiKSkpKSwKLSAgICAgc3RyZW5ndGh3KEd0azo6 bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9XQVZFTEVUX0VEVkFMIiksIDAuLCAxMDAuMCwgMC41 LCAwLikpKSwKLSAgICAgc2lnbWFlZChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfU0lHTUFXQVYiKSwgMC4yLCAyLjUsIDAuMDEsIDEuKSkpLAotLSAgICBMb2NhbGN1cnZl RWRpdG9yd2F2ZWRnKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9XQVZFREciKSkpLAotKyAgICBMb2NhbGN1cnZlRWRpdG9yd2F2 ZWRnKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVkVERyIpKSksCi0gICAgIHdhdnNoYXBlZWRn KHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KExvY2FsY3VydmVFZGl0b3J3YXZlZGctPmFk ZEN1cnZlKENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIGdyYWR3 KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9XQVZFTEVUX0VER0VERVRFQ1QiKSwgMC4s IDEwMC4wLCAwLjUsIDkwLikpKSwKLSAgICAgd2F2ZXNob3coR3RrOjptYW5hZ2UobmV3IEd0azo6 Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRURHU0hPVyIpKSkpLAotQEAgLTI1ODYsNyArMjU4 NCw3IEBAIExvY2FsbGFiQ29udHJhc3Q6OkxvY2FsbGFiQ29udHJhc3QoKToKLSAgICAgbGV2ZWxi bHVyKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9MRVZFTEJMVVIiKSwg MC4sIDEwMC4sIDAuNSwgMC4pKSksCi0gICAgIHNpZ21hYmwoR3RrOjptYW5hZ2UobmV3IEFkanVz dGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAuMiwgMi41LCAwLjAxLCAxLikpKSwKLSAg ICAgY2hyb21hYmx1KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DSFJP TUFCTFUiKSwgMC4wLCA1LiwgMC4xLCAwLikpKSwKLS0gICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmxl dihuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfV0FWTEVWIikpKSwKLSsgICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmxldihuZXcgQ3Vy dmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGly LCBNKCJUUF9MT0NBTExBQl9XQVZMRVYiKSkpLAotICAgICB3YXZzaGFwZWxldihzdGF0aWNfY2Fz dDxGbGF0Q3VydmVFZGl0b3IqPihMb2NhbGN1cnZlRWRpdG9yd2F2bGV2LT5hZGRDdXJ2ZShDVF9G bGF0LCAiIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICByZXNpZGJsdXIoR3RrOjpt YW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1JFU0lEQkxVUiIpLCAwLiwgMTAwLiwg MC41LCAwLikpKSwKLSAgICAgYmx1cmxjKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9u KE0oIlRQX0xPQ0FMTEFCX0JMVVJMQyIpKSkpLAotQEAgLTI1OTUsMTAgKzI1OTMsMTAgQEAgTG9j YWxsYWJDb250cmFzdDo6TG9jYWxsYWJDb250cmFzdCgpOgotICAgICBzaWdtYShHdGs6Om1hbmFn ZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0lHTUFXQVYiKSwgMC4yLCAyLjUsIDAuMDEs IDEuKSkpLAotICAgICBvZmZzZXQoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX09GRlNFVFdBViIpLCAwLjMzLCAxLjY2LCAwLjAxLCAxLiwgR3RrOjptYW5hZ2UobmV3IFJU SW1hZ2UoImNpcmNsZS1ibGFjay1zbWFsbCIpKSwgR3RrOjptYW5hZ2UobmV3IFJUSW1hZ2UoImNp cmNsZS13aGl0ZS1zbWFsbCIpKSkpKSwKLSAgICAgY2hyb21hbGV2KEd0azo6bWFuYWdlKG5ldyBB ZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DSFJPTUFMRVYiKSwgMC4xLCA1LiwgMC4xLCAxLikpKSwK LS0gICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmNvbihuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25z Lmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWQ09OIikpKSwKLSsgICAgTG9j YWxjdXJ2ZUVkaXRvcndhdmNvbihuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9v cHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZDT04iKSkpLAot ICAgICB3YXZzaGFwZWNvbihzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihMb2NhbGN1cnZl RWRpdG9yd2F2Y29uLT5hZGRDdXJ2ZShDVF9GbGF0LCAiIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNl KSkpLAotICAgICB3YXZjb21wcmUoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgi VFBfTE9DQUxMQUJfQ09NUFJFRlJBIikpKSksCi0tICAgIExvY2FsY3VydmVFZGl0b3J3YXZjb21w cmUobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQ X0xPQ0FMTEFCX1dBVkNPTVBSRSIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3J3YXZjb21wcmUo bmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1 cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWQ09NUFJFIikpKSwKLSAgICAgd2F2c2hhcGVjb21w cmUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmNvbXBy ZS0+YWRkQ3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAg c2lnbWFkcihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0lHTUFXQVYi KSwgMC4yLCAyLjUsIDAuMDEsIDEuKSkpLAotICAgICB0aHJlc3dhdihHdGs6Om1hbmFnZShuZXcg QWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfVEhSRVNXQVYiKSwgMC45LCAyLiwgMC4wMSwgMS40KSkp LAotQEAgLTI2MDYsNyArMjYwNCw3IEBAIExvY2FsbGFiQ29udHJhc3Q6OkxvY2FsbGFiQ29udHJh c3QoKToKLSAgICAgd2F2Y29tcChHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJU UF9MT0NBTExBQl9DT01QRlJBIikpKSksCi0gICAgIHNpZ21hZGMoR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAuMiwgMy4sIDAuMDEsIDEuKSkpLAot ICAgICBkZWx0YWQoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0RFTFRB RCIpLCAtMy4sIDMuLCAwLjEsIDAuKSkpLC8vLCBHdGs6Om1hbmFnZShuZXcgUlRJbWFnZSgiY2ly Y2xlLWJsYWNrLXNtYWxsIikpLCBHdGs6Om1hbmFnZShuZXcgUlRJbWFnZSgiY2lyY2xlLXdoaXRl LXNtYWxsIikpKSkpLAotLSAgICBMb2NhbGN1cnZlRWRpdG9yd2F2Y29tcChuZXcgQ3VydmVFZGl0 b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWQ09N UCIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3J3YXZjb21wKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FM TEFCX1dBVkNPTVAiKSkpLAotICAgICB3YXZzaGFwZWNvbXAoc3RhdGljX2Nhc3Q8RmxhdEN1cnZl RWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmNvbXAtPmFkZEN1cnZlKENUX0ZsYXQsICIiLCBu dWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIC8vZmF0cmVzKEd0azo6bWFuYWdlKG5ldyBB ZGp1c3RlcihNKCJUUF9MT0NBTExBQl9GQVRSRVMiKSwgMC4sIDEwMC4sIDEuLCAwLikpKSwKLSAg ICAgZmZ0d2xjKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFC X0ZGVFciKSkpKSwKLUBAIC0yNjIxLDE1ICsyNjE5LDE1IEBAIExvY2FsbGFiQ29udHJhc3Q6Okxv Y2FsbGFiQ29udHJhc3QoKToKLSAgICAgZXhwbWFza2xjKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFu ZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9TSE9XTEMiKSkpKSwKLSAgICAgc2hvd21hc2tsY01l dGhvZChHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFsY01hc2so R3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01B U0siKSkpKSwKLS0vLyAgICBtYXNrbGNDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo b3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotLSAg ICBtYXNrbGNDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9j YWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rLy8gICAgbWFza2xjQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotKyAgICBtYXNrbGNDdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0Rp ciwgIiIsIDEpKSwKLSAgICAgQ0NtYXNrbGNzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0 b3IqPihtYXNrbGNDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwg ZmFsc2UsIGZhbHNlKSkpLAotICAgICBMTG1hc2tsY3NoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2 ZUVkaXRvcio+KG1hc2tsY0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkwiLCBudWxs cHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIEhIbWFza2xjc2hhcGUoc3RhdGljX2Nhc3Q8Rmxh dEN1cnZlRWRpdG9yICo+KG1hc2tsY0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkxD KGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi0gICAgIGJsZW5kbWFza2xjKEd0azo6bWFu YWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9CTEVORE1BU0tDT0wiKSwgLTEwMCwgMTAw LCAxLCAwKSkpLAotICAgICByYWRtYXNrbGMoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQ X0xPQ0FMTEFCX1JBRE1BU0tDT0wiKSwgMC4wLCAxMDAuMCwgMC4xLCAwLikpKSwKLSAgICAgY2hy b21hc2tsYyhHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01BU0tD T0wiKSwgLTEwMC4wLCAxMDAuMCwgMC4xLCAwLikpKSwKLS0gICAgbWFzazJsY0N1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTSzIiKSkpLAotKyAgICBtYXNrMmxjQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0o IlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2tsY3NoYXBlKHN0YXRpY19jYXN0PERp YWdvbmFsQ3VydmVFZGl0b3IqPihtYXNrMmxjQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFn b25hbCwgIkwoTCkiKSkpCi0gewotICAgICBhdXRvIG0gPSBQcm9jRXZlbnRNYXBwZXI6OmdldElu c3RhbmNlKCk7Ci1AQCAtNDc2Nyw4ICs0NzY1LDggQEAgZGVjYXljYihHdGs6Om1hbmFnZShuZXcg QWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfTUFTS0RERUNBWSIpLCAwLjUsIDQuLCAwLjEsIDIuKSkK LSBleHBtYXNrY2IoR3RrOjptYW5hZ2UobmV3IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FM TEFCX1NIT1dDQiIpKSkpLAotIHNob3dtYXNrY2JNZXRob2QoR3RrOjptYW5hZ2UobmV3IE15Q29t Ym9Cb3hUZXh0KCkpKSwKLSBlbmFjYk1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0 b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLS0vLyAgbWFza2NiQ3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJU UF9MT0NBTExBQl9NQVNLIikpKSwKLS1tYXNrY2JDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9y R3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rLy8gIG1hc2tjYkN1 cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCku bGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSttYXNrY2JDdXJ2 ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxh c3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSBDQ21hc2tjYnNoYXBlKHN0YXRpY19jYXN0PEZs YXRDdXJ2ZUVkaXRvcio+KG1hc2tjYkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMi LCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gTExtYXNrY2JzaGFwZShzdGF0aWNfY2FzdDxG bGF0Q3VydmVFZGl0b3IqPihtYXNrY2JDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJM IiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotIEhIbWFza2Nic2hhcGUoc3RhdGljX2Nhc3Q8 RmxhdEN1cnZlRWRpdG9yICo+KG1hc2tjYkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwg IkxDKGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi1AQCAtNDc3OCw3ICs0Nzc2LDcgQEAg bGFwbWFza2NiKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9MQVBNQVNL Q09MIiksIDAuMCwgMTAwLjAsIDAuMSwKLSBjaHJvbWFza2NiKEd0azo6bWFuYWdlKG5ldyBBZGp1 c3RlcihNKCJUUF9MT0NBTExBQl9DSFJPTUFTS0NPTCIpLCAtMTAwLjAsIDEwMC4wLCAwLjEsIDAu KSkpLAotIGdhbW1hc2tjYihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJf R0FNTUFTS0NPTCIpLCAwLjI1LCA0LjAsIDAuMDEsIDEuKSkpLAotIHNsb21hc2tjYihHdGs6Om1h bmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFTS0NPTCIpLCAwLjAsIDE1LjAs IDAuMSwgMC4pKSksCi0tbWFzazJjYkN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChv cHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSzIiKSkpLAotK21h c2syY2JDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSzIiKSkpLAotIExt YXNrY2JzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4obWFzazJjYkN1cnZl RWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKEwpIikpKSwKLSAKLSBsdW1hY29udHJh c3RNaW51c0J1dHRvbihHdGs6Om1hbmFnZShuZXcgR3RrOjpCdXR0b24oTSgiVFBfRElSUFlSRVFV QUxJWkVSX0xVTUFDT05UUkFTVF9NSU5VUyIpKSkpLAotQEAgLTU1OTcsNyArNTU5NSw3IEBAIExv Y2FsbGFiTG9nOjpMb2NhbGxhYkxvZygpOgotICAgICBzYXR1cmwoR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NBVFVSViIpLCAtMTAwLiwgMTAwLiwgMC41LCAwLikpKSwK LSAgICAgY2hyb21sKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DSFJP TUwiKSwgLTEwMC4sIDEwMC4sIDAuNSwgMC4pKSksCi0gICAgIGV4cEwoR3RrOjptYW5hZ2UobmV3 IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX0xPR0VYUCIpKSkpLAotLSAgICAvL0N1 cnZlRWRpdG9yTChuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0Rp ciwgTSgiVFBfTE9DQUxMQUJfTE9HQ09OVFEiKSkpLAotKyAgICAvL0N1cnZlRWRpdG9yTChuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9MT0dDT05UUSIpKSksCi0gICAgIC8vTHNoYXBlTChzdGF0aWNf Y2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oQ3VydmVFZGl0b3JMLT5hZGRDdXJ2ZShDVF9EaWFn b25hbCwgIlEoUSkiKSkpLAotICAgICB0YXJnYWJzKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9TT1VSQ0VfQUJTIiksIDAuMDEsIDE2Mzg0LjAsIDAuMDEsIDE2LjApKSks Ci0gICAgIHN1cnJvdW5kKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi1AQCAt NTYyMCwxNSArNTYxOCwxNSBAQCBMb2NhbGxhYkxvZzo6TG9jYWxsYWJMb2coKToKLSAgICAgZXhw bWFza0woR3RrOjptYW5hZ2UobmV3IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX1NI T1dDIikpKSksCi0gICAgIHNob3dtYXNrTE1ldGhvZChHdGs6Om1hbmFnZShuZXcgTXlDb21ib0Jv eFRleHQoKSkpLAotICAgICBlbmFMTWFzayhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRv bihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkpLAotLS8vICAgbWFza0N1cnZlRWRpdG9y TChuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTS0NPTCIpKSksCi0tICAgIG1hc2tDdXJ2ZUVkaXRvckwobmV3IEN1cnZlRWRp dG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rLy8gICBtYXNr Q3VydmVFZGl0b3JMKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMo KS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0tDT0wiKSkpLAotKyAgICBt YXNrQ3VydmVFZGl0b3JMKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0gICAgIENDbWFza3NoYXBlTChzdGF0 aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrQ3VydmVFZGl0b3JMLT5hZGRDdXJ2ZShDVF9G bGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrc2hhcGVMKHN0 YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tDdXJ2ZUVkaXRvckwtPmFkZEN1cnZlKENU X0ZsYXQsICJMIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBISG1hc2tzaGFwZUwo c3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yICo+KG1hc2tDdXJ2ZUVkaXRvckwtPmFkZEN1cnZl KENUX0ZsYXQsICJMQyhoKSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotICAgICBibGVuZG1h c2tMKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9CTEVORE1BU0tDT0wi KSwgLTEwMCwgMTAwLCAxLCAwKSkpLAotICAgICByYWRtYXNrTChHdGs6Om1hbmFnZShuZXcgQWRq dXN0ZXIoTSgiVFBfTE9DQUxMQUJfUkFETUFTS0NPTCIpLCAwLjAsIDEwMC4wLCAwLjEsIDAuKSkp LAotICAgICBjaHJvbWFza0woR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFC X0NIUk9NQVNLQ09MIiksIC0xMDAuMCwgMTAwLjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2syQ3Vy dmVFZGl0b3JMKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGly LCBNKCJUUF9MT0NBTExBQl9NQVNLMiIpKSksCi0rICAgIG1hc2syQ3VydmVFZGl0b3JMKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2tzaGFwZUwoc3RhdGljX2Nh c3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KG1hc2syQ3VydmVFZGl0b3JMLT5hZGRDdXJ2ZShDVF9E aWFnb25hbCwgIkwoTCkiKSkpCi0gCi0gCi1AQCAtNzEwMSw4ICs3MDk5LDggQEAgTG9jYWxsYWJN YXNrOjpMb2NhbGxhYk1hc2soKToKLSAgICAgc29mdHJhZGl1c21hc2soR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NPRlRSQURJVVNDT0wiKSwgMC4wLCAxMDAuMCwgMC41 LCAxLikpKSwKLSAgICAgc2hvd21hc2tfTWV0aG9kKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94 VGV4dCgpKSksCi0gICAgIGVuYW1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24o TSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLS0vLyAgICBtYXNrX0N1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTS0NPTCIpKSksCi0tICAgIG1hc2tfQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotKy8vICAgIG1h c2tfQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0tDT0wiKSkpLAotKyAg ICBtYXNrX0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9v cHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBDQ21hc2tfc2hhcGUo c3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza19DdXJ2ZUVkaXRvckctPmFkZEN1cnZl KENUX0ZsYXQsICJDIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBMTG1hc2tfc2hh cGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza19DdXJ2ZUVkaXRvckctPmFkZEN1 cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBISG1hc2tf c2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yICo+KG1hc2tfQ3VydmVFZGl0b3JHLT5h ZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLUBAIC03 MTIwLDExICs3MTE4LDExIEBAIExvY2FsbGFiTWFzazo6TG9jYWxsYWJNYXNrKCk6Ci0gICAgIGdh bW1hc2soR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0dBTU1BU0tDT0wi KSwgMC4yNSwgNC4wLCAwLjAxLCAxLikpKSwKLSAgICAgc2xvcG1hc2soR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NMT01BU0tDT0wiKSwgMC4wLCAxNS4wLCAwLjEsIDAu KSkpLAotICAgICBzaGFkbWFzayhHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxM QUJfU0hBTUFTS0NPTCIpLCAwLCAxMDAsIDEsIDApKSksCi0tICAgIG1hc2tfSEN1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTS0giKSkpLAotKyAgICBtYXNrX0hDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfTUFTS0giKSkpLAotICAgICBISGhtYXNrX3NoYXBlKHN0YXRpY19jYXN0PEZs YXRDdXJ2ZUVkaXRvciAqPihtYXNrX0hDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJo KGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi0tICAgIG1hc2syQ3VydmVFZGl0b3JHKG5l dyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NB TExBQl9NQVNLMiIpKSksCi0rICAgIG1hc2syQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdy b3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xP Q0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2tfc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxD dXJ2ZUVkaXRvcio+KG1hc2syQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkwo TCkiKSkpLAotLSAgICBtYXNrMkN1cnZlRWRpdG9yR3dhdihuZXcgQ3VydmVFZGl0b3JHcm91cChv cHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWTUFTSyIpKSksCi0r ICAgIG1hc2syQ3VydmVFZGl0b3JHd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVk1BU0si KSkpLAotICAgICBMTG1hc2tfc2hhcGV3YXYoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4o bWFzazJDdXJ2ZUVkaXRvckd3YXYtPmFkZEN1cnZlKENUX0ZsYXQsICJMKEwpIiwgbnVsbHB0ciwg ZmFsc2UsIGZhbHNlKSkpLAotICAgICBjc1RocmVzaG9sZG1hc2soR3RrOjptYW5hZ2UobmV3IFRo cmVzaG9sZEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NTVEhSRVNIT0xEQkxVUiIpLCAwLCA5LCAw LCAwLCA2LCA1LCAwLCBmYWxzZSkpKSwKLSAgICAgZ3JhZEZyYW1lbWFzayhHdGs6Om1hbmFnZShu ZXcgR3RrOjpGcmFtZShNKCJUUF9MT0NBTExBQl9HUkFERlJBIikpKSksCi1AQCAtODA3Niw3ICs4 MDc0LDcgQEAgTG9jYWxsYWJjaWU6OkxvY2FsbGFiY2llKCk6Ci0gICAgIGV4cHdhdmp6KEd0azo6 bWFuYWdlKG5ldyBNeUV4cGFuZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9KWldBVkVYUCIpKSkp LAotICAgICBjb250RnJhbWVqeihHdGs6Om1hbmFnZShuZXcgR3RrOjpGcmFtZShNKCJUUF9MT0NB TExBQl9DT05UV0ZSQSIpKSkpLAotICAgICBzaWdtYWxjanooR3RrOjptYW5hZ2UobmV3IEFkanVz dGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAuMiwgMi41LCAwLjAxLCAxLikpKSwKLS0g ICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmp6KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFz dGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVYiKSkpLAotKyAgICBMb2NhbGN1cnZl RWRpdG9yd2F2anoobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp Lmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWIikpKSwKLSAgICAgd2F2c2hh cGVqeihzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihMb2NhbGN1cnZlRWRpdG9yd2F2anot PmFkZEN1cnZlKENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIGNz VGhyZXNob2xkanooR3RrOjptYW5hZ2UobmV3IFRocmVzaG9sZEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX0NTVEhSRVNIT0xEIiksIDAsIDksIDAsIDAsIDcsIDQsIDAsIGZhbHNlKSkpLAotICAgICBj bGFyaUZyYW1lanooR3RrOjptYW5hZ2UobmV3IEd0azo6RnJhbWUoTSgiVFBfTE9DQUxMQUJfQ0xB UklGUkEiKSkpKSwKLUBAIC04MjA5LDI0ICs4MjA3LDI0IEBAIExvY2FsbGFiY2llOjpMb2NhbGxh YmNpZSgpOgotICAgICByc3Rwcm90ZWN0Y2llKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJU UF9DT0xPUkFQUF9SU1RQUk8iKSwgMC4sIDEwMC4sIDAuMSwgMC4pKSksCi0gICAgIGNocm9tbGNp ZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01MIiksIC0xMDAu LCAxMDAuLCAwLjUsIDAuKSkpLAotICAgICBodWVjaWUoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVy KE0oIlRQX0xPQ0FMTEFCX0hVRUNJRSIpLCAtMTAwLiwgMTAwLiwgMC4xLCAwLikpKSwKLS0gICAg Y2llQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3Vy dmVzRGlyLCBNKCJUUF9MT0NBTExBQl9DVVJWRVNfQ0lFIikpKSwKLSsgICAgY2llQ3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0NVUlZFU19DSUUiKSkpLAotICAgICB0b25lTWV0 aG9kY2llKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIHNoYXBlY2ll KHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihjaWVDdXJ2ZUVkaXRvckctPmFkZEN1 cnZlKENUX0RpYWdvbmFsLCAiIiwgdG9uZU1ldGhvZGNpZSkpKSwKLS0gICAgY2llQ3VydmVFZGl0 b3JHMihuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfQ09MT1JfQ0lFIikpKSwKLSsgICAgY2llQ3VydmVFZGl0b3JHMihuZXcgQ3Vy dmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGly LCBNKCJUUF9MT0NBTExBQl9DT0xPUl9DSUUiKSkpLAotICAgICB0b25lTWV0aG9kY2llMihHdGs6 Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBzaGFwZWNpZTIoc3RhdGljX2Nh c3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGNpZUN1cnZlRWRpdG9yRzItPmFkZEN1cnZlKENUX0Rp YWdvbmFsLCAiIiwgdG9uZU1ldGhvZGNpZTIpKSksCi0gCi0gICAgIGNocm9tanpjaWUoR3RrOjpt YW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0paQ0hST00iKSwgLTEwMC4sIDEwMC4s IDAuNSwgMC4pKSksCi0gICAgIHNhdHVyanpjaWUoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0o IlRQX0xPQ0FMTEFCX0paU0FUIiksIC0xMDAuLCAxMDAuLCAwLjUsIDAuKSkpLAotICAgICBodWVq emNpZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfSlpIVUVDSUUiKSwg LTEwMC4sIDEwMC4sIDAuMSwgMC4pKSksCi0tICAgIGp6MUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsgICAganox Q3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMo KS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0gICAgIHNoYXBlanooc3RhdGljX2Nhc3Q8 RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGp6MUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29u YWwsICJKeihKKSIpKSksCi0gICAgIHNoYXBlY3ooc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVk aXRvcio+KGp6MUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJDeihDKSIpKSks Ci0gCi0gICAgIEhGcmFtZWp6KEd0azo6bWFuYWdlKG5ldyBHdGs6OkZyYW1lKE0oIlRQX0xPQ0FM TEFCX0paSEZSQSIpKSkpLAotICAgICBKekhGcmFtZWp6KEd0azo6bWFuYWdlKG5ldyBHdGs6OkZy YW1lKE0oIlRQX0xPQ0FMTEFCX0paSEpaRlJBIikpKSksCi0tICAgIGp6MkN1cnZlRWRpdG9yRyhu ZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwK LS0gICAganozQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxv Y2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotKyAgICBqejJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIs IDEpKSwKLSsgICAganozQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0gICAgIHNoYXBl Y3pqeihzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oanoxQ3VydmVFZGl0b3JHLT5h ZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkN6KEopIikpKSwKLSAgICAgSEhzaGFwZWp6KHN0YXRpY19j YXN0PEZsYXRDdXJ2ZUVkaXRvcio+KGp6M0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwg Ikh6KEh6KSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotICAgICBDSHNoYXBlanooc3RhdGlj X2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oanozQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0 LCAiQ3ooSHopIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi1AQCAtODI2MSw3ICs4MjU5LDcg QEAgTG9jYWxsYWJjaWU6OkxvY2FsbGFiY2llKCk6Ci0gICAgIHNob3dtYXNrY2llTWV0aG9kKEd0 azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIGVuYWNpZU1hc2soR3RrOjpt YW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0siKSkp KSwKLSAgICAgZW5hY2llTWFza2FsbChHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihN KCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTS0FMTCIpKSkpLAotLSAgICBtYXNrY2llQ3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwg MSkpLAotKyAgICBtYXNrY2llQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6 Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0gICAgIEND bWFza2NpZXNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tjaWVDdXJ2ZUVk aXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAot ICAgICBMTG1hc2tjaWVzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrY2ll Q3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZhbHNlLCBmYWxz ZSkpKSwKLSAgICAgSEhtYXNrY2llc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4o bWFza2NpZUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkxDKGgpIiwgbnVsbHB0ciwg ZmFsc2UsIHRydWUpKSksCi1AQCAtODI4MCwxMiArODI3OCwxMiBAQCBMb2NhbGxhYmNpZTo6TG9j YWxsYWJjaWUoKToKLSAgICAgc2xvbWFza2NpZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgi VFBfTE9DQUxMQUJfU0xPTUFTS0NPTCIpLCAwLjAsIDE1LjAsIDAuMSwgMC4pKSksCi0gICAgIGhp Z2htYXNrY2llKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9ISUdITUFT S0NPTCIpLCAwLCAxMDAsIDEsIDApKSksCi0gICAgIHNoYWRtYXNrY2llKEd0azo6bWFuYWdlKG5l dyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9TSEFNQVNLQ09MIiksIDAsIDEwMCwgMSwgMCkpKSwK LS0gICAgbWFza2NpZUhDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5s YXN0bG9jYWxDdXJ2ZXNEaXIsICIiKSksCi0rICAgIG1hc2tjaWVIQ3VydmVFZGl0b3JHKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsICIiKSksCi0gICAgIEhIaG1hc2tjaWVzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0 b3IgKj4obWFza2NpZUhDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJoKGgpIiwgbnVs bHB0ciwgZmFsc2UsIHRydWUpKSksCi0tICAgIG1hc2syY2llQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9N QVNLMiIpKSksCi0rICAgIG1hc2syY2llQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FM TEFCX01BU0syIikpKSwKLSAgICAgTG1hc2tjaWVzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1 cnZlRWRpdG9yKj4obWFzazJjaWVDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAi TChMKSIpKSksCi0gICAgIHdhdkZyYW1lY2llKEd0azo6bWFuYWdlKG5ldyBHdGs6OkZyYW1lKE0o IlRQX0xPQ0FMTEFCX1RPT0xNQVNLXzIiKSkpKSwKLS0gICAgbWFzazJjaWVDdXJ2ZUVkaXRvckd3 YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQ X0xPQ0FMTEFCX1dBVk1BU0siKSkpLAotKyAgICBtYXNrMmNpZUN1cnZlRWRpdG9yR3dhdihuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSAgICAgTExtYXNrY2llc2hhcGV3YXYo c3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFzazJjaWVDdXJ2ZUVkaXRvckd3YXYtPmFk ZEN1cnZlKENUX0ZsYXQsICJMKEwpIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBx dWFIY2llQm94KEd0azo6bWFuYWdlKG5ldyBHdGs6OkJveCgpKSksCi0gICAgIGNzVGhyZXNob2xk Y2llKEd0azo6bWFuYWdlKG5ldyBUaHJlc2hvbGRBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DU1RI UkVTSE9MREJMVVIiKSwgMCwgOSwgMCwgMCwgNiwgNSwgMCwgZmFsc2UpKSkKLWRpZmYgLS1naXQg YS9ydGd1aS9sb2NrYWJsZWNvbG9ycGlja2VyLmNjIGIvcnRndWkvbG9ja2FibGVjb2xvcnBpY2tl ci5jYwotaW5kZXggOGM4ZDczNDE4Li4yMDZiNTFlMTkgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9sb2Nr YWJsZWNvbG9ycGlja2VyLmNjCi0rKysgYi9ydGd1aS9sb2NrYWJsZWNvbG9ycGlja2VyLmNjCi1A QCAtMjcsMTMgKzI3LDYgQEAKLSAjaW5jbHVkZSAibXVsdGlsYW5nbWdyLmgiCi0gI2luY2x1ZGUg Im5hdmlnYXRvci5oIgotIAotLW5hbWVzcGFjZQotLXsKLS0KLS1jb25zdCBydGVuZ2luZTo6cHJv Y3BhcmFtczo6Q29sb3JNYW5hZ2VtZW50UGFyYW1zIERFRkFVTFRfQ01QOwotLQotLX0KLS0KLSBM b2NrYWJsZUNvbG9yUGlja2VyOjpMb2NrYWJsZUNvbG9yUGlja2VyIChDcm9wV2luZG93KiBjcm9w V2luZG93LCBydGVuZ2luZTo6cHJvY3BhcmFtczo6Q29sb3JNYW5hZ2VtZW50UGFyYW1zICpjb2xv cl9tYW5hZ2VtZW50X3BhcmFtcykKLSA6IGNyb3BXaW5kb3coY3JvcFdpbmRvdyksIGRpc3BsYXll ZFZhbHVlcyhDb2xvclBpY2tlclR5cGU6OlJHQiksIHBvc2l0aW9uKDAsIDApLCBzaXplKFNpemU6 OlMxNSksCi0gICBjb2xvcl9tYW5hZ2VtZW50X3BhcmFtcyhjb2xvcl9tYW5hZ2VtZW50X3BhcmFt cyksIHZhbGlkaXR5KFZhbGlkaXR5OjpPVVRTSURFKSwKLUBAIC01NCw2ICs0Nyw3IEBAIHZvaWQg TG9ja2FibGVDb2xvclBpY2tlcjo6dXBkYXRlQmFja0J1ZmZlciAoKQotIAotICAgICAgICAgR2xp Yjo6UmVmUHRyPFBhbmdvOjpDb250ZXh0PiBwYW5nb0NvbnRleHQgPSBpQXJlYS0+Z2V0X3Bhbmdv X2NvbnRleHQgKCk7Ci0gICAgICAgICBQYW5nbzo6Rm9udERlc2NyaXB0aW9uIGZvbnRkID0gaUFy ZWEtPmdldF9zdHlsZV9jb250ZXh0KCktPmdldF9mb250KCk7Ci0rICAgICAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICAvLyBzZXQgZm9udCBm YW1pbHkgYW5kIHNpemUKLSAgICAgICAgIGZvbnRkLnNldF9mYW1pbHkob3B0aW9ucy5DUEZvbnRG YW1pbHkgPT0gImRlZmF1bHQiID8gInNhbnMiIDogb3B0aW9ucy5DUEZvbnRGYW1pbHkpOwotICAg ICAgICAgY29uc3QgaW50IGZvbnRTaXplID0gb3B0aW9ucy5DUEZvbnRGYW1pbHkgPT0gImRlZmF1 bHQiID8gOCA6IG9wdGlvbnMuQ1BGb250U2l6ZTsgLy8gcHQKLUBAIC0yOTMsNyArMjg3LDggQEAg dm9pZCBMb2NrYWJsZUNvbG9yUGlja2VyOjpzZXRSR0IgKGNvbnN0IGZsb2F0IFIsIGNvbnN0IGZs b2F0IEcsIGNvbnN0IGZsb2F0IEIsIGMKLSAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDhf dD4oMjU1ICogZyksCi0gICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KDI1NSAqIGIp LAotICAgICAgICAgTCwgYSwgYmIsCi0tICAgICAgICBjb2xvcl9tYW5hZ2VtZW50X3BhcmFtcyAh PSBudWxscHRyID8gKmNvbG9yX21hbmFnZW1lbnRfcGFyYW1zIDogREVGQVVMVF9DTVAsCi0rICAg ICAgICBjb2xvcl9tYW5hZ2VtZW50X3BhcmFtcyAhPSBudWxscHRyCi0rICAgICAgICAgICAgPyAq Y29sb3JfbWFuYWdlbWVudF9wYXJhbXMgOiBBcHA6OmdldCgpLmZhbGxiYWNrQ29sb3JDbXAoKSwK LSAgICAgICAgIHRydWUpOwotICAgICBMIC89IDMyNy42OGY7Ci0gICAgIGEgLz0gMzI3LjY4ZjsK LWRpZmYgLS1naXQgYS9ydGd1aS9tYWluLWNsaS5jYyBiL3J0Z3VpL21haW4tY2xpLmNjCi1pbmRl eCBjNzU0NDE2YTkuLmEwM2RhYWFjNyAxMDA2NDQKLS0tLSBhL3J0Z3VpL21haW4tY2xpLmNjCi0r KysgYi9ydGd1aS9tYWluLWNsaS5jYwotQEAgLTU2LDE0ICs1Niw2IEBACi0gLy8gU2V0IHRoaXMg dG8gMSB0byBtYWtlIFJUIHdvcmsgd2hlbiBzdGFydGVkIHdpdGggRWNsaXBzZSBhbmQgYXJndW1l bnRzLCBhdCBsZWFzdCBvbiBXaW5kb3dzIHBsYXRmb3JtCi0gI2RlZmluZSBFQ0xJUFNFX0FSR1Mg MAotIAotLS8vIHN0b3JlcyBwYXRoIHRvIGRhdGEgZmlsZXMKLS1HbGliOjp1c3RyaW5nIGFyZ3Yw OwotLUdsaWI6OnVzdHJpbmcgY3JlZGl0c1BhdGg7Ci0tR2xpYjo6dXN0cmluZyBsaWNlbnNlUGF0 aDsKLS1HbGliOjp1c3RyaW5nIGFyZ3YxOwotLS8vYm9vbCBzaW1wbGVFZGl0b3I7Ci0tLy9HbGli OjpUaHJlYWRzOjpUaHJlYWQqIG1haW5UaHJlYWQ7Ci0tCi0gbmFtZXNwYWNlCi0gewotIAotQEAg LTkwLDcgKzgyLDcgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAKLSAgICAg R2lvOjppbml0ICgpOwotIAotLSAgICAvL21haW5UaHJlYWQgPSBHbGliOjpUaHJlYWRzOjpUaHJl YWQ6OnNlbGYoKTsKLSsgICAgYXV0byYgYXBwID0gQXBwOjpnZXQoKTsKLSAKLSAjaWZkZWYgQlVJ TERfQlVORExFCi0gICAgIGNoYXIgZXhuYW1lWzUxMl0gPSB7MH07Ci1AQCAtMTA2LDM4ICs5OCwz NiBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICAgICAgc3RybmNweSAo ZXhuYW1lLCBhcmd2WzBdLCA1MTEpOwotICAgICB9Ci0gCi0tI2VuZGlmCi0rI2VuZGlmIC8vIF9X SU4zMgotICAgICBleGVQYXRoID0gR2xpYjo6cGF0aF9nZXRfZGlybmFtZSAoZXhuYW1lKTsKLSAK LSAgICAgLy8gc2V0IHBhdGhzCi0gICAgIGlmIChHbGliOjpwYXRoX2lzX2Fic29sdXRlIChEQVRB X1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgYXJndjAgPSBEQVRBX1NFQVJDSF9QQVRIOwotKyAg ICAgICAgYXBwLnNldEFyZ3YwKERBVEFfU0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2UgewotLSAg ICAgICAgYXJndjAgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgREFUQV9TRUFSQ0hf UEFUSCk7Ci0rICAgICAgICBhcHAuc2V0QXJndjAoR2xpYjo6YnVpbGRfZmlsZW5hbWUoZXhlUGF0 aCwgREFUQV9TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0gCi0gICAgIGlmIChHbGliOjpwYXRoX2lz X2Fic29sdXRlIChDUkVESVRTX1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgY3JlZGl0c1BhdGgg PSBDUkVESVRTX1NFQVJDSF9QQVRIOwotKyAgICAgICAgYXBwLnNldENyZWRpdHNQYXRoKENSRURJ VFNfU0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2UgewotLSAgICAgICAgY3JlZGl0c1BhdGggPSBH bGliOjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgQ1JFRElUU19TRUFSQ0hfUEFUSCk7Ci0rICAg ICAgICBhcHAuc2V0Q3JlZGl0c1BhdGgoR2xpYjo6YnVpbGRfZmlsZW5hbWUoZXhlUGF0aCwgQ1JF RElUU19TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0gCi0gICAgIGlmIChHbGliOjpwYXRoX2lzX2Fi c29sdXRlIChMSUNFTkNFX1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgbGljZW5zZVBhdGggPSBM SUNFTkNFX1NFQVJDSF9QQVRIOwotKyAgICAgICAgYXBwLnNldExpY2Vuc2VQYXRoKExJQ0VOQ0Vf U0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2UgewotLSAgICAgICAgbGljZW5zZVBhdGggPSBHbGli OjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgTElDRU5DRV9TRUFSQ0hfUEFUSCk7Ci0rICAgICAg ICBhcHAuc2V0TGljZW5zZVBhdGgoR2xpYjo6YnVpbGRfZmlsZW5hbWUoZXhlUGF0aCwgTElDRU5D RV9TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0tCi0tICAgIG9wdGlvbnMucnRTZXR0aW5ncy5sZW5z ZnVuRGJEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0tICAgIG9wdGlvbnMucnRTZXR0aW5n cy5sZW5zZnVuRGJCdW5kbGVEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0tCi0gI2Vsc2UK LS0gICAgYXJndjAgPSBEQVRBX1NFQVJDSF9QQVRIOwotLSAgICBjcmVkaXRzUGF0aCA9IENSRURJ VFNfU0VBUkNIX1BBVEg7Ci0tICAgIGxpY2Vuc2VQYXRoID0gTElDRU5DRV9TRUFSQ0hfUEFUSDsK LSsgICAgYXBwLnNldEFyZ3YwKERBVEFfU0VBUkNIX1BBVEgpOwotKyAgICBhcHAuc2V0Q3JlZGl0 c1BhdGgoQ1JFRElUU19TRUFSQ0hfUEFUSCk7Ci0rICAgIGFwcC5zZXRMaWNlbnNlUGF0aChMSUNF TkNFX1NFQVJDSF9QQVRIKTsKLSsjZW5kaWYgLy8gQlVJTERfQlVORExFCi0rCi0rICAgIE9wdGlv bnMmIG9wdGlvbnMgPSBhcHAubXV0X29wdGlvbnMoKTsKLSAgICAgb3B0aW9ucy5ydFNldHRpbmdz LmxlbnNmdW5EYkRpcmVjdG9yeSA9IExFTlNGVU5fREJfUEFUSDsKLSAgICAgb3B0aW9ucy5ydFNl dHRpbmdzLmxlbnNmdW5EYkJ1bmRsZURpcmVjdG9yeSA9IExFTlNGVU5fREJfUEFUSDsKLS0jZW5k aWYKLSAKLSAgICAgYm9vbCBxdWlja3N0YXJ0ID0gZG9udExvYWRDYWNoZSAoYXJnYywgYXJndik7 Ci0gCi1AQCAtMjU2LDYgKzI0Niw3IEBAIGludCBwcm9jZXNzTGluZVBhcmFtcyAoIGludCBhcmdj LCBjaGFyICoqYXJndiApCi0gICAgIHN0ZDo6c3RyaW5nIG91dHB1dFR5cGU7Ci0gICAgIHVuc2ln bmVkIGVycm9ycyA9IDA7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9v cHRpb25zKCk7Ci0gICAgIGZvciAoIGludCBpQXJnID0gMTsgaUFyZyA8IGFyZ2M7IGlBcmcrKykg ewotICAgICAgICAgR2xpYjo6dXN0cmluZyBjdXJyUGFyYW0gKGFyZ3ZbaUFyZ10pOwotICAgICAg ICAgaWYgKCBjdXJyUGFyYW0uZW1wdHkoKSApIHsKLUBAIC00ODIsNyArNDczLDcgQEAgaW50IHBy b2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lkZVByb2NQYXJhbXMgJiYgc2tpcElmTm9T aWRlY2FyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxv b2sgZm9yIHRoZSBzaWRlY2FyIHByb2MgcGFyYW1zCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghR2xpYjo6ZmlsZV90ZXN0IChmaWxlTmFtZSArIHBhcmFtRmls ZUV4dGVuc2lvbiwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFHbGliOjpmaWxlX3Rlc3QgKGZpbGVOYW1lICsg QXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAi XCIiIDw8IGZpbGVOYW1lIDw8ICJcIiAgaGFzIG5vIHNpZGUtY2FyIGZpbGUuIEltYWdlIHNraXBw ZWQuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotQEAgLTUwNCw3ICs0OTUsNyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJn YywgY2hhciAqKmFyZ3YgKQotICAgICAgICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAg ICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLS0gICAgICAgICAg ICAgICAgICAgIEdsaWI6OnVzdHJpbmcgcHBhcmFtc0V4dCA9IHBhcmFtRmlsZUV4dGVuc2lvbi5z dWJzdHIgKDEpOwotKyAgICAgICAgICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBwcGFyYW1zRXh0 ID0gQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTi5zdWJzdHIgKDEpOwotICAgICAgICAgICAgICAg ICAgICAgc3RkOjpjb3V0IDw8ICIgIEFuIGFkdmFuY2VkLCBjcm9zcy1wbGF0Zm9ybSBwcm9ncmFt IGZvciBkZXZlbG9waW5nIHJhdyBwaG90b3MuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgICAg ICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwotICAgICAgICAgICAgICAgICAgICAgc3Rk Ojpjb3V0IDw8ICIgIFdlYnNpdGU6IGh0dHA6Ly93d3cucmF3dGhlcmFwZWUuY29tLyIgPDwgc3Rk OjplbmRsOwotQEAgLTU3OSw5ICs1NzAsOSBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQg YXJnYywgY2hhciAqKmFyZ3YgKQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQot ICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICBhcmd2MSA9IEdsaWI6OnVzdHJpbmcgKGZu YW1lX3RvX3V0ZjggKGFyZ3ZbaUFyZ10pKTsKLSsgICAgICAgICAgICBBcHA6OmdldCgpLnNldEFy Z3YxKEdsaWI6OnVzdHJpbmcgKGZuYW1lX3RvX3V0ZjggKGFyZ3ZbaUFyZ10pKSk7Ci0gI2lmIEVD TElQU0VfQVJHUwotLSAgICAgICAgICAgIGFyZ3YxID0gYXJndjEuc3Vic3RyICgxLCBhcmd2MS5s ZW5ndGgoKSAtIDIpOwotKyAgICAgICAgICAgIEFwcDo6Z2V0KCkuc2V0QXJndjEoQXBwOjpnZXQo KS5hcmd2MSgpLnN1YnN0ciAoMSwgQXBwOjpnZXQoKS5hcmd2MSgpLmxlbmd0aCgpIC0gMikpOwot ICNlbmRpZgotIAotICAgICAgICAgICAgIGlmICggb3V0cHV0RGlyZWN0b3J5ICkgewotQEAgLTYy Myw3ICs2MTQsNyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFy Z3YgKQotICAgICAgICAgfQotICAgICB9Ci0gCi0tICAgIGlmICggIWFyZ3YxLmVtcHR5KCkgKSB7 Ci0rICAgIGlmICggIUFwcDo6Z2V0KCkuYXJndjEoKS5lbXB0eSgpICkgewotICAgICAgICAgcmV0 dXJuIDE7Ci0gICAgIH0KLSAKLUBAIC02MzUsNyArNjI2LDcgQEAgaW50IHByb2Nlc3NMaW5lUGFy YW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAgICAgICAgIHJhd1BhcmFtcyA9IG5ldyBy dGVuZ2luZTo6cHJvY3BhcmFtczo6UGFydGlhbFByb2ZpbGUgKHRydWUsIHRydWUpOwotICAgICAg ICAgR2xpYjo6dXN0cmluZyBwcm9mUGF0aCA9IG9wdGlvbnMuZmluZFByb2ZpbGVQYXRoIChvcHRp b25zLmRlZlByb2ZSYXcpOwotIAotLSAgICAgICAgaWYgKG9wdGlvbnMuaXNfZGVmUHJvZlJhd01p c3NpbmcoKSB8fCBwcm9mUGF0aC5lbXB0eSgpIHx8IChwcm9mUGF0aCAhPSBERUZQUk9GSUxFX0RZ TkFNSUMgJiYgcmF3UGFyYW1zLT5sb2FkIChwcm9mUGF0aCA9PSBERUZQUk9GSUxFX0lOVEVSTkFM ID8gREVGUFJPRklMRV9JTlRFUk5BTCA6IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChwcm9mUGF0aCwg R2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUgKG9wdGlvbnMuZGVmUHJvZlJhdykgKyBwYXJhbUZpbGVF eHRlbnNpb24pKSkpIHsKLSsgICAgICAgIGlmIChvcHRpb25zLmlzX2RlZlByb2ZSYXdNaXNzaW5n KCkgfHwgcHJvZlBhdGguZW1wdHkoKSB8fCAocHJvZlBhdGggIT0gREVGUFJPRklMRV9EWU5BTUlD ICYmIHJhd1BhcmFtcy0+bG9hZCAocHJvZlBhdGggPT0gREVGUFJPRklMRV9JTlRFUk5BTCA/IERF RlBST0ZJTEVfSU5URVJOQUwgOiBHbGliOjpidWlsZF9maWxlbmFtZSAocHJvZlBhdGgsIEdsaWI6 OnBhdGhfZ2V0X2Jhc2VuYW1lIChvcHRpb25zLmRlZlByb2ZSYXcpICsgQXBwOjpQQVJBTV9GSUxF X0VYVEVOU0lPTikpKSkgewotICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGRlZmF1 bHQgcmF3IHByb2Nlc3NpbmcgcHJvZmlsZSBub3QgZm91bmQuIiA8PCBzdGQ6OmVuZGw7Ci0gICAg ICAgICAgICAgcmF3UGFyYW1zLT5kZWxldGVJbnN0YW5jZSgpOwotICAgICAgICAgICAgIGRlbGV0 ZSByYXdQYXJhbXM7Ci1AQCAtNjQ2LDcgKzYzNyw3IEBAIGludCBwcm9jZXNzTGluZVBhcmFtcyAo IGludCBhcmdjLCBjaGFyICoqYXJndiApCi0gICAgICAgICBpbWdQYXJhbXMgPSBuZXcgcnRlbmdp bmU6OnByb2NwYXJhbXM6OlBhcnRpYWxQcm9maWxlICh0cnVlKTsKLSAgICAgICAgIHByb2ZQYXRo ID0gb3B0aW9ucy5maW5kUHJvZmlsZVBhdGggKG9wdGlvbnMuZGVmUHJvZkltZyk7Ci0gCi0tICAg ICAgICBpZiAob3B0aW9ucy5pc19kZWZQcm9mSW1nTWlzc2luZygpIHx8IHByb2ZQYXRoLmVtcHR5 KCkgfHwgKHByb2ZQYXRoICE9IERFRlBST0ZJTEVfRFlOQU1JQyAmJiBpbWdQYXJhbXMtPmxvYWQg KHByb2ZQYXRoID09IERFRlBST0ZJTEVfSU5URVJOQUwgPyBERUZQUk9GSUxFX0lOVEVSTkFMIDog R2xpYjo6YnVpbGRfZmlsZW5hbWUgKHByb2ZQYXRoLCBHbGliOjpwYXRoX2dldF9iYXNlbmFtZSAo b3B0aW9ucy5kZWZQcm9mSW1nKSArIHBhcmFtRmlsZUV4dGVuc2lvbikpKSkgewotKyAgICAgICAg aWYgKG9wdGlvbnMuaXNfZGVmUHJvZkltZ01pc3NpbmcoKSB8fCBwcm9mUGF0aC5lbXB0eSgpIHx8 IChwcm9mUGF0aCAhPSBERUZQUk9GSUxFX0RZTkFNSUMgJiYgaW1nUGFyYW1zLT5sb2FkIChwcm9m UGF0aCA9PSBERUZQUk9GSUxFX0lOVEVSTkFMID8gREVGUFJPRklMRV9JTlRFUk5BTCA6IEdsaWI6 OmJ1aWxkX2ZpbGVuYW1lIChwcm9mUGF0aCwgR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUgKG9wdGlv bnMuZGVmUHJvZkltZykgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKSkpKSB7Ci0gICAgICAg ICAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogZGVmYXVsdCBub24tcmF3IHByb2Nlc3NpbmcgcHJv ZmlsZSBub3QgZm91bmQuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgICAgaW1nUGFyYW1zLT5k ZWxldGVJbnN0YW5jZSgpOwotICAgICAgICAgICAgIGRlbGV0ZSBpbWdQYXJhbXM7Ci1AQCAtNzUw LDcgKzc0MSw3IEBAIGludCBwcm9jZXNzTGluZVBhcmFtcyAoIGludCBhcmdjLCBjaGFyICoqYXJn diApCi0gICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgaWYgKHNpZGVQcm9jUGFyYW1zICYmIGkg PT0gc2lkZUNhckZpbGVQb3MpIHsKLSAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHNpZGVj YXIgZmlsZQotLSAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIHNpZGVQcm9jZXNzaW5nUGFy YW1zID0gaW5wdXRGaWxlICsgcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAgICAgICAgICAgICAgICBH bGliOjp1c3RyaW5nIHNpZGVQcm9jZXNzaW5nUGFyYW1zID0gaW5wdXRGaWxlICsgQXBwOjpQQVJB TV9GSUxFX0VYVEVOU0lPTjsKLSAKLSAgICAgICAgICAgICAgICAgLy8gdGhlICJsb2FkIiBtZXRo b2QgZG9uJ3QgcmVzZXQgdGhlIHByb2NwYXJhbXMgdmFsdWVzIGFueW1vcmUsIHNvIHZhbHVlcyBm b3VuZCBpbiB0aGUgcHJvY3BhcmFtIGZpbGUgb3ZlcnJpZGUgdGhlIG9uZSBvZiBjdXJyZW50UGFy YW1zCi0gICAgICAgICAgICAgICAgIGlmICggIUdsaWI6OmZpbGVfdGVzdCAoIHNpZGVQcm9jZXNz aW5nUGFyYW1zLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTICkgfHwgY3VycmVudFBhcmFtcy5sb2Fk ICggc2lkZVByb2Nlc3NpbmdQYXJhbXMgKSkgewotQEAgLTgxMSw3ICs4MDIsNyBAQCBpbnQgcHJv Y2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQotICAgICAgICAgICAgIHN0 ZDo6Y2VyciA8PCAiRXJyb3Igc2F2aW5nIHRvOiAiIDw8IG91dHB1dEZpbGUgPDwgc3RkOjplbmRs OwotICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICBpZiAoIGNvcHlQYXJhbXNGaWxlICkg ewotLSAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIG91dHB1dFByb2Nlc3NpbmdQYXJhbXMg PSBvdXRwdXRGaWxlICsgcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAgICAgICAgICAgICAgICBHbGli Ojp1c3RyaW5nIG91dHB1dFByb2Nlc3NpbmdQYXJhbXMgPSBvdXRwdXRGaWxlICsgQXBwOjpQQVJB TV9GSUxFX0VYVEVOU0lPTjsKLSAgICAgICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zYXZlICgg b3V0cHV0UHJvY2Vzc2luZ1BhcmFtcyApOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLWRp ZmYgLS1naXQgYS9ydGd1aS9tYWluLmNjIGIvcnRndWkvbWFpbi5jYwotaW5kZXggZTExMDQyZTQ5 Li5kZWQ3MDc2YmUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9tYWluLmNjCi0rKysgYi9ydGd1aS9tYWlu LmNjCi1AQCAtNjEsMTUgKzYxLDcgQEAKLSAjZGVmaW5lIEVDTElQU0VfQVJHUyAwCi0gCi0gLy8g c3RvcmVzIHBhdGggdG8gZGF0YSBmaWxlcwotLUdsaWI6OnVzdHJpbmcgYXJndjA7Ci0tR2xpYjo6 dXN0cmluZyBjcmVkaXRzUGF0aDsKLS1HbGliOjp1c3RyaW5nIGxpY2Vuc2VQYXRoOwotLUdsaWI6 OnVzdHJpbmcgYXJndjE7Ci0gR2xpYjo6dXN0cmluZyBhcmd2MjsKLS1ib29sIHNpbXBsZUVkaXRv ciA9IGZhbHNlOwotLWJvb2wgZ2ltcFBsdWdpbiA9IGZhbHNlOwotLWJvb2wgcmVtb3RlID0gZmFs c2U7Ci0tLy9HbGliOjpUaHJlYWRzOjpUaHJlYWQqIG1haW5UaHJlYWQ7Ci0gCi0gbmFtZXNwYWNl IHsKLSAKLUBAIC0xMDQsNiArOTYsOCBAQCBzdGF0aWMgdm9pZCBteUdka0xvY2tMZWF2ZSgpCi0g Ly9pbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKTsKLSBpbnQg cHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQotIHsKLSsgICAgYXV0 byYgYXBwID0gQXBwOjpnZXQoKTsKLSsKLSAgICAgaW50IHJldCA9IDE7Ci0gICAgIGZvciAoIGlu dCBpQXJnID0gMTsgaUFyZyA8IGFyZ2M7IGlBcmcrKykgewotICAgICAgICAgR2xpYjo6dXN0cmlu ZyBjdXJyUGFyYW0gKGFyZ3ZbaUFyZ10pOwotQEAgLTEzNCw4ICsxMjgsOCBAQCBpbnQgcHJvY2Vz c0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQotICNpZm5kZWYgX19BUFBMRV9f IC8vIFRPRE8gYWdyaWdnaW8gLSB0aGVyZSBzZWVtcyB0byBiZSBhbHJlYWR5IHNvbWUgInNpbmds ZSBpbnN0YW5jZSBhcHAiIHN1cHBvcnQgZm9yIE9TWCBpbiBydHdpbmRvdy4gRGlzYWJsaW5nIGl0 IGhlcmUgdW50aWwgSSB1bmRlcnN0YW5kIGhvdyB0byBtZXJnZSB0aGUgdHdvCi0gCi0gICAgICAg ICAgICAgICAgIGNhc2UgJ1InOgotLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnaW1wUGx1Z2lu KSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlID0gdHJ1ZTsKLSsgICAgICAgICAg ICAgICAgICAgIGlmICghYXBwLmlzR2ltcFBsdWdpbigpKSB7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgYXBwLnNldElzUmVtb3RlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgfQotIAot ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci1AQCAtMTQzLDkgKzEzNyw5IEBAIGludCBwcm9j ZXNzTGluZVBhcmFtcyAoIGludCBhcmdjLCBjaGFyICoqYXJndiApCi0gCi0gICAgICAgICAgICAg ICAgIGNhc2UgJ2cnOgotICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbSA9PSAiLWdp bXAiKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZ2ltcFBsdWdpbiA9IHRydWU7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRWRpdG9yID0gdHJ1ZTsKLS0gICAgICAgICAgICAg ICAgICAgICAgICByZW1vdGUgPSBmYWxzZTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBhcHAu c2V0SXNHaW1wUGx1Z2luKHRydWUpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5zZXRJ c1NpbXBsZUVkaXRvcih0cnVlKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBhcHAuc2V0SXNS ZW1vdGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICB9Ci0gCi1AQCAtMTgwLDE3ICsxNzQsMTcgQEAgaW50IHByb2Nlc3NMaW5lUGFy YW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgIH0KLSAgICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgaWYgKGFyZ3YxLmVtcHR5 KCkpIHsKLS0gICAgICAgICAgICAgICAgYXJndjEgPSBHbGliOjp1c3RyaW5nIChmbmFtZV90b191 dGY4IChhcmd2W2lBcmddKSk7Ci0rICAgICAgICAgICAgaWYgKGFwcC5hcmd2MSgpLmVtcHR5KCkp IHsKLSsgICAgICAgICAgICAgICAgYXBwLnNldEFyZ3YxKEdsaWI6OnVzdHJpbmcgKGZuYW1lX3Rv X3V0ZjggKGFyZ3ZbaUFyZ10pKSk7Ci0gI2lmIEVDTElQU0VfQVJHUwotLSAgICAgICAgICAgICAg ICBhcmd2MSA9IGFyZ3YxLnN1YnN0ciAoMSwgYXJndjEubGVuZ3RoKCkgLSAyKTsKLSsgICAgICAg ICAgICAgICAgYXBwLnNldEFyZ3YxKGFwcC5hcmd2MSgpLnN1YnN0ciAoMSwgYXBwLmFyZ3YxKCku bGVuZ3RoKCkgLSAyKSk7Ci0gI2VuZGlmCi0tICAgICAgICAgICAgfSBlbHNlIGlmIChnaW1wUGx1 Z2luKSB7Ci0rICAgICAgICAgICAgfSBlbHNlIGlmIChhcHAuaXNHaW1wUGx1Z2luKCkpIHsKLSAg ICAgICAgICAgICAgICAgYXJndjIgPSBHbGliOjp1c3RyaW5nIChmbmFtZV90b191dGY4IChhcmd2 W2lBcmddKSk7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIH0KLSAKLS0g ICAgICAgICAgICBpZiAoIWdpbXBQbHVnaW4pIHsKLSsgICAgICAgICAgICBpZiAoIWFwcC5pc0dp bXBQbHVnaW4oKSkgewotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICB9Ci0g ICAgICAgICB9Ci1AQCAtMjExLDYgKzIwNSw3IEBAIGJvb2wgaW5pdF9ydCgpCi0gCi0gI2lmbmRl ZiBfV0lOMzIKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICAvLyBNb3ZlIHRoZSBvbGQgcGF0aCB0byB0aGUgbmV3IG9uZSBpZiB0aGUgbmV3 IGRvZXMgbm90IGV4aXN0Ci0gICAgIGlmIChHbGliOjpmaWxlX3Rlc3QgKEdsaWI6OmJ1aWxkX2Zp bGVuYW1lIChvcHRpb25zLnJ0ZGlyLCAiY2FjaGUiKSwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikg JiYgIUdsaWI6OmZpbGVfdGVzdCAob3B0aW9ucy5jYWNoZUJhc2VEaXIsIEdsaWI6OkZJTEVfVEVT VF9JU19ESVIpKSB7Ci0gICAgICAgICBnX3JlbmFtZSAoR2xpYjo6YnVpbGRfZmlsZW5hbWUgKG9w dGlvbnMucnRkaXIsICJjYWNoZSIpLmNfc3RyICgpLCBvcHRpb25zLmNhY2hlQmFzZURpci5jX3N0 ciAoKSk7Ci1AQCAtMjMwLDcgKzIyNSw3IEBAIHZvaWQgY2xlYW51cF9ydCgpCi0gCi0gUlRXaW5k b3cgKmNyZWF0ZV9ydF93aW5kb3coKQotIHsKLS0gICAgR2xpYjo6dXN0cmluZyBpY29uX3BhdGgg PSBHbGliOjpidWlsZF9maWxlbmFtZSAoYXJndjAsICJpY29ucyIpOwotKyAgICBHbGliOjp1c3Ry aW5nIGljb25fcGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChBcHA6OmdldCgpLmFyZ3YwKCks ICJpY29ucyIpOwotICAgICBHbGliOjpSZWZQdHI8R3RrOjpJY29uVGhlbWU+IGRlZmF1bHRJY29u VGhlbWUgPSBHdGs6Okljb25UaGVtZTo6Z2V0X2RlZmF1bHQoKTsKLSAgICAgZGVmYXVsdEljb25U aGVtZS0+YXBwZW5kX3NlYXJjaF9wYXRoIChpY29uX3BhdGgpOwotIAotQEAgLTMzMiw2ICszMjcs NyBAQCBwcml2YXRlOgotIAotIHZvaWQgc2hvd19naW1wX3BsdWdpbl9pbmZvX2RpYWxvZyhHdGs6 OldpbmRvdyAqcGFyZW50KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0 X29wdGlvbnMoKTsKLSAgICAgaWYgKG9wdGlvbnMuZ2ltcFBsdWdpblNob3dJbmZvRGlhbG9nKSB7 Ci0gICAgICAgICBHdGs6Ok1lc3NhZ2VEaWFsb2cgaW5mbygqcGFyZW50LCBNKCJHSU1QX1BMVUdJ Tl9JTkZPIiksIGZhbHNlLCBHdGs6Ok1FU1NBR0VfSU5GTywgR3RrOjpCVVRUT05TX09LLCB0cnVl KTsKLSAgICAgICAgIEd0azo6Qm94ICpib3ggPSBpbmZvLmdldF9tZXNzYWdlX2FyZWEoKTsKLUBA IC0zNTEsMTMgKzM0Nyw2IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAg IHNldGxvY2FsZSAoTENfQUxMLCAiIik7Ci0gICAgIHNldGxvY2FsZSAoTENfTlVNRVJJQywgIkMi KTsgLy8gdG8gc2V0IGRlY2ltYWwgcG9pbnQgdG8gIi4iCi0gCi0tICAgIHNpbXBsZUVkaXRvciA9 IGZhbHNlOwotLSAgICBnaW1wUGx1Z2luID0gZmFsc2U7Ci0tICAgIHJlbW90ZSA9IGZhbHNlOwot LSAgICBhcmd2MCA9ICIiOwotLSAgICBhcmd2MSA9ICIiOwotLSAgICBhcmd2MiA9ICIiOwotLQot ICAgICBHbGliOjppbml0KCk7ICAvLyBjYWxsZWQgYnkgR3RrOjpNYWluLCBidXQgdGhpcyBtYXkg YmUgaW1wb3J0YW50IGZvciB0aHJlYWQgaGFuZGxpbmcsIHNvIHdlIGNhbGwgaXQgb3Vyc2VsdmVz IG5vdwotICAgICBHaW86OmluaXQgKCk7Ci0gCi1AQCAtMzY4LDYgKzM1Nyw4IEBAIGludCBtYWlu IChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAgIH0KLSAjZW5kaWYKLSAKLSsgICAgYXV0byYg YXBwID0gQXBwOjpnZXQoKTsKLSsKLSAjaWZkZWYgQlVJTERfQlVORExFCi0gICAgIGNoYXIgZXhu YW1lWzUxMl0gPSB7MH07Ci0gICAgIEdsaWI6OnVzdHJpbmcgZXhlUGF0aDsKLUBAIC0zODIsMzgg KzM3MywzNSBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICAgICAgc3Ry bmNweSAoZXhuYW1lLCBhcmd2WzBdLCA1MTEpOwotICAgICB9Ci0gCi0tI2VuZGlmCi0rI2VuZGlm IC8vIF9XSU4zMgotICAgICBleGVQYXRoID0gR2xpYjo6cGF0aF9nZXRfZGlybmFtZSAoZXhuYW1l KTsKLSAKLSAgICAgLy8gc2V0IHBhdGhzCi0gICAgIGlmIChHbGliOjpwYXRoX2lzX2Fic29sdXRl IChEQVRBX1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgYXJndjAgPSBEQVRBX1NFQVJDSF9QQVRI OwotKyAgICAgICAgYXBwLnNldEFyZ3YwKERBVEFfU0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2Ug ewotLSAgICAgICAgYXJndjAgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgREFUQV9T RUFSQ0hfUEFUSCk7Ci0rICAgICAgICBhcHAuc2V0QXJndjAoR2xpYjo6YnVpbGRfZmlsZW5hbWUo ZXhlUGF0aCwgREFUQV9TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0gCi0gICAgIGlmIChHbGliOjpw YXRoX2lzX2Fic29sdXRlIChDUkVESVRTX1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgY3JlZGl0 c1BhdGggPSBDUkVESVRTX1NFQVJDSF9QQVRIOwotKyAgICAgICAgYXBwLnNldENyZWRpdHNQYXRo KENSRURJVFNfU0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2UgewotLSAgICAgICAgY3JlZGl0c1Bh dGggPSBHbGliOjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgQ1JFRElUU19TRUFSQ0hfUEFUSCk7 Ci0rICAgICAgICBhcHAuc2V0Q3JlZGl0c1BhdGgoR2xpYjo6YnVpbGRfZmlsZW5hbWUoZXhlUGF0 aCwgQ1JFRElUU19TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0gCi0gICAgIGlmIChHbGliOjpwYXRo X2lzX2Fic29sdXRlIChMSUNFTkNFX1NFQVJDSF9QQVRIKSkgewotLSAgICAgICAgbGljZW5zZVBh dGggPSBMSUNFTkNFX1NFQVJDSF9QQVRIOwotKyAgICAgICAgYXBwLnNldExpY2Vuc2VQYXRoKExJ Q0VOQ0VfU0VBUkNIX1BBVEgpOwotICAgICB9IGVsc2UgewotLSAgICAgICAgbGljZW5zZVBhdGgg PSBHbGliOjpidWlsZF9maWxlbmFtZSAoZXhlUGF0aCwgTElDRU5DRV9TRUFSQ0hfUEFUSCk7Ci0r ICAgICAgICBhcHAuc2V0TGljZW5zZVBhdGgoR2xpYjo6YnVpbGRfZmlsZW5hbWUoZXhlUGF0aCwg TElDRU5DRV9TRUFSQ0hfUEFUSCkpOwotICAgICB9Ci0tCi0tICAgIG9wdGlvbnMucnRTZXR0aW5n cy5sZW5zZnVuRGJEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0tICAgIG9wdGlvbnMucnRT ZXR0aW5ncy5sZW5zZnVuRGJCdW5kbGVEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0tCi0g I2Vsc2UKLS0gICAgYXJndjAgPSBEQVRBX1NFQVJDSF9QQVRIOwotLSAgICBjcmVkaXRzUGF0aCA9 IENSRURJVFNfU0VBUkNIX1BBVEg7Ci0tICAgIGxpY2Vuc2VQYXRoID0gTElDRU5DRV9TRUFSQ0hf UEFUSDsKLS0gICAgb3B0aW9ucy5ydFNldHRpbmdzLmxlbnNmdW5EYkRpcmVjdG9yeSA9IExFTlNG VU5fREJfUEFUSDsKLS0gICAgb3B0aW9ucy5ydFNldHRpbmdzLmxlbnNmdW5EYkJ1bmRsZURpcmVj dG9yeSA9IExFTlNGVU5fREJfUEFUSDsKLS0jZW5kaWYKLSsgICAgYXBwLnNldEFyZ3YwKERBVEFf U0VBUkNIX1BBVEgpOwotKyAgICBhcHAuc2V0Q3JlZGl0c1BhdGgoQ1JFRElUU19TRUFSQ0hfUEFU SCk7Ci0rICAgIGFwcC5zZXRMaWNlbnNlUGF0aChMSUNFTkNFX1NFQVJDSF9QQVRIKTsKLSsjZW5k aWYgLy8gQlVJTERfQlVORExFCi0rCi0rICAgIGFwcC5tdXRfb3B0aW9ucygpLnJ0U2V0dGluZ3Mu bGVuc2Z1bkRiRGlyZWN0b3J5ID0gTEVOU0ZVTl9EQl9QQVRIOwotKyAgICBhcHAubXV0X29wdGlv bnMoKS5ydFNldHRpbmdzLmxlbnNmdW5EYkJ1bmRsZURpcmVjdG9yeSA9IExFTlNGVU5fREJfUEFU SDsKLSAKLSAjaWZkZWYgX1dJTjMyCi0gICAgIGJvb2wgY29uc29sZU9wZW5lZCA9IGZhbHNlOwot QEAgLTQyMiw3ICs0MTAsNyBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAg ICBTZXRFcnJvck1vZGUgKFNFTV9GQUlMQ1JJVElDQUxFUlJPUlMgfCBTRU1fTk9HUEZBVUxURVJS T1JCT1ggfCBTRU1fTk9PUEVORklMRUVSUk9SQk9YKTsKLSAKLSAgICAgaWYgKGFyZ2MgPiAxKSB7 Ci0tICAgICAgICBpZiAoIXJlbW90ZSAmJiAhR2xpYjo6ZmlsZV90ZXN0IChhcmd2MSwgR2xpYjo6 RklMRV9URVNUX0VYSVNUUyApICYmICFHbGliOjpmaWxlX3Rlc3QgKGFyZ3YxLCBHbGliOjpGSUxF X1RFU1RfSVNfRElSKSkgewotKyAgICAgICAgaWYgKCFhcHAuaXNSZW1vdGUoKSAmJiAhR2xpYjo6 ZmlsZV90ZXN0IChhcHAuYXJndjEoKSwgR2xpYjo6RklMRV9URVNUX0VYSVNUUyApICYmICFHbGli OjpmaWxlX3Rlc3QgKGFwcC5hcmd2MSgpLCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAg ICAgICAgICAgIGNvbnN0IGJvb2wgc3Rkb3V0UmVkaXJlY3R0b0NvbnNvbGUgPSAoR2V0RmlsZVR5 cGUgKEdldFN0ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpKSA9PSAweDAwMDApOwotICAgICAg ICAgICAgIC8vIG9wZW4gY29uc29sZSwgaWYgc3Rkb3V0IGlzIGludmFsaWQKLSAgICAgICAgICAg ICBpZiAoc3Rkb3V0UmVkaXJlY3R0b0NvbnNvbGUpIHsKLUBAIC00OTksOCArNDg3LDggQEAgaW50 IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgIGZhdGFsRXJyb3IgPSBlLmdl dF9tc2coKTsKLSAgICAgfQotIAotLSAgICBpZiAoZ2ltcFBsdWdpbikgewotLSAgICAgICAgaWYg KCFHbGliOjpmaWxlX3Rlc3QgKGFyZ3YxLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSB8fCBHbGli OjpmaWxlX3Rlc3QgKGFyZ3YxLCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotKyAgICBpZiAo YXBwLmlzR2ltcFBsdWdpbigpKSB7Ci0rICAgICAgICBpZiAoIUdsaWI6OmZpbGVfdGVzdCAoYXBw LmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpIHx8IEdsaWI6OmZpbGVfdGVzdCAoYXBw LmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVTVF9JU19ESVIpKSB7Ci0gICAgICAgICAgICAgcHJpbnRm ICgiRXJyb3I6IGFyZ3YxIGRvZXNuJ3QgZXhpc3RcbiIpOwotICAgICAgICAgICAgIHJldHVybiAx OwotICAgICAgICAgfQotQEAgLTUwOSw4ICs0OTcsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotICAgICAgICAgICAgIHByaW50ZiAoIkVycm9yOiAtZ2ltcCByZXF1aXJlcyB0 d28gYXJndW1lbnRzXG4iKTsKLSAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgIH0KLS0g ICAgfSBlbHNlIGlmICghcmVtb3RlICYmIEdsaWI6OmZpbGVfdGVzdChhcmd2MSwgR2xpYjo6RklM RV9URVNUX0VYSVNUUykgJiYgIUdsaWI6OmZpbGVfdGVzdChhcmd2MSwgR2xpYjo6RklMRV9URVNU X0lTX0RJUikpIHsKLS0gICAgICAgIHNpbXBsZUVkaXRvciA9IHRydWU7Ci0rICAgIH0gZWxzZSBp ZiAoIWFwcC5pc1JlbW90ZSgpICYmIEdsaWI6OmZpbGVfdGVzdChhcHAuYXJndjEoKSwgR2xpYjo6 RklMRV9URVNUX0VYSVNUUykgJiYgIUdsaWI6OmZpbGVfdGVzdChhcHAuYXJndjEoKSwgR2xpYjo6 RklMRV9URVNUX0lTX0RJUikpIHsKLSsgICAgICAgIGFwcC5zZXRJc1NpbXBsZUVkaXRvcih0cnVl KTsKLSAgICAgfQotIAotICAgICBpbnQgcmV0ID0gMDsKLUBAIC01MTksMTMgKzUwNywxMyBAQCBp bnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICBnZGtfdGhyZWFkc19pbml0KCk7 Ci0gICAgIGd0a19pbml0ICgmYXJnYywgJmFyZ3YpOyAgLy8gdXNlIHRoZSAiLS1nLWZhdGFsLXdh cm5pbmdzIiBjb21tYW5kIGxpbmUgZmxhZyB0byBtYWtlIHdhcm5pbmdzIGZhdGFsCi0gCi0tICAg IGlmIChmYXRhbEVycm9yLmVtcHR5KCkgJiYgcmVtb3RlKSB7Ci0tICAgICAgICBjaGFyICphcHBf YXJndlsyXSA9IHsgY29uc3RfY2FzdDxjaGFyICo+IChhcmd2MC5jX3N0cigpKSB9OwotKyAgICBp ZiAoZmF0YWxFcnJvci5lbXB0eSgpICYmIGFwcC5pc1JlbW90ZSgpKSB7Ci0rICAgICAgICBjaGFy ICphcHBfYXJndlsyXSA9IHsgY29uc3RfY2FzdDxjaGFyICo+IChhcHAuYXJndjAoKS5jX3N0cigp KSB9OwotICAgICAgICAgaW50IGFwcF9hcmdjID0gMTsKLSAKLS0gICAgICAgIGlmICghYXJndjEu ZW1wdHkoKSkgewotKyAgICAgICAgaWYgKCFhcHAuYXJndjEoKS5lbXB0eSgpKSB7Ci0gICAgICAg ICAgICAgYXBwX2FyZ2MgPSAyOwotLSAgICAgICAgICAgIGFwcF9hcmd2WzFdID0gY29uc3RfY2Fz dDxjaGFyICo+IChhcmd2MS5jX3N0cigpKTsKLSsgICAgICAgICAgICBhcHBfYXJndlsxXSA9IGNv bnN0X2Nhc3Q8Y2hhciAqPiAoYXBwLmFyZ3YxKCkuY19zdHIoKSk7Ci0gICAgICAgICB9Ci0gCi0g ICAgICAgICBSVEFwcGxpY2F0aW9uIGFwcDsKLUBAIC01MzUsMTMgKzUyMywxMyBAQCBpbnQgbWFp biAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICAgICAgICAgIEd0azo6TWFpbiBtICgmYXJn YywgJmFyZ3YpOwotICAgICAgICAgICAgIGdka190aHJlYWRzX2VudGVyKCk7Ci0gICAgICAgICAg ICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFJUV2luZG93PiBydFdpbmRvdyAoY3JlYXRlX3J0X3dp bmRvdygpKTsKLS0gICAgICAgICAgICBpZiAoZ2ltcFBsdWdpbikgewotKyAgICAgICAgICAgIGlm IChhcHAuaXNHaW1wUGx1Z2luKCkpIHsKLSAgICAgICAgICAgICAgICAgc2hvd19naW1wX3BsdWdp bl9pbmZvX2RpYWxvZyhydFdpbmRvdy5nZXQoKSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAg ICAgIG0ucnVuICgqcnRXaW5kb3cpOwotICAgICAgICAgICAgIGdka190aHJlYWRzX2xlYXZlKCk7 Ci0gCi0tICAgICAgICAgICAgaWYgKGdpbXBQbHVnaW4gJiYgcnRXaW5kb3ctPmVwYW5lbCAmJiBy dFdpbmRvdy0+ZXBhbmVsLT5pc1JlYWxpemVkKCkpIHsKLSsgICAgICAgICAgICBpZiAoYXBwLmlz R2ltcFBsdWdpbigpICYmIHJ0V2luZG93LT5lcGFuZWwgJiYgcnRXaW5kb3ctPmVwYW5lbC0+aXNS ZWFsaXplZCgpKSB7Ci0gICAgICAgICAgICAgICAgIGlmICghcnRXaW5kb3ctPmVwYW5lbC0+c2F2 ZUltbWVkaWF0ZWx5KGFyZ3YyLCBTYXZlRm9ybWF0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg ICByZXQgPSAtMjsKLSAgICAgICAgICAgICAgICAgfQotZGlmZiAtLWdpdCBhL3J0Z3VpL25hdmln YXRvci5jYyBiL3J0Z3VpL25hdmlnYXRvci5jYwotaW5kZXggY2RmZjVmNzBiLi44MzA3NzA4ZTgg MTAwNjQ0Ci0tLS0gYS9ydGd1aS9uYXZpZ2F0b3IuY2MKLSsrKyBiL3J0Z3VpL25hdmlnYXRvci5j YwotQEAgLTI3LDE3ICsyNywxMCBAQAotIAotIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTsKLSAK LS1uYW1lc3BhY2UKLS17Ci0tCi0tY29uc3QgcnRlbmdpbmU6OnByb2NwYXJhbXM6OkNvbG9yTWFu YWdlbWVudFBhcmFtcyBERUZBVUxUX0NNUDsKLS0KLS19Ci0tCi0gTmF2aWdhdG9yOjpOYXZpZ2F0 b3IoKSA6Ci0gICAgIHBvaW50ZXJfbW92ZWRfZGVsYXllZF9jYWxsKDUwLCAxMDApLAotLSAgICBj dXJyZW50UkdCVW5pdChvcHRpb25zLm5hdlJHQlVuaXQpLAotLSAgICBjdXJyZW50SFNWVW5pdChv cHRpb25zLm5hdkhTVlVuaXQpCi0rICAgIGN1cnJlbnRSR0JVbml0KEFwcDo6Z2V0KCkub3B0aW9u cygpLm5hdlJHQlVuaXQpLAotKyAgICBjdXJyZW50SFNWVW5pdChBcHA6OmdldCgpLm9wdGlvbnMo KS5uYXZIU1ZVbml0KQotIHsKLSAgICAgcG9pbnRlcl9tb3ZlZF9kZWxheWVkX2NhbGwuc2V0RnVu Y3Rpb24oCi0gICAgICAgICBbdGhpc10oYm9vbCB2YWxpZFBvcywgY29uc3QgcnRlbmdpbmU6OnBy b2NwYXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtcyAqY21wLCBpbnQgeCwgaW50IHksIGludCBy LCBpbnQgZywgaW50IGIsIGJvb2wgaXNSYXcpCi1AQCAtNzQsNyArNjcsNyBAQCBOYXZpZ2F0b3I6 Ok5hdmlnYXRvcigpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6 OnVpbnQ4X3Q+KGcpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6 dWludDhfdD4oYiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgTEFCX2wsIExBQl9hLCBMQUJf YiwKLS0gICAgICAgICAgICAgICAgICAgICAgICBjbXAgIT0gbnVsbHB0ciA/ICpjbXAgOiBERUZB VUxUX0NNUCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjbXAgIT0gbnVsbHB0ciA/ICpjbXAg OiBBcHA6OmdldCgpLmZhbGxiYWNrQ29sb3JDbXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgIExBQl9sIC89IDMyNy42OGY7Ci0gICAgICAg ICAgICAgICAgICAgICBMQUJfYSAvPSAzMjcuNjhmOwotQEAgLTM1Niw3ICszNDksNyBAQCB2b2lk IE5hdmlnYXRvcjo6Y3ljbGVVbml0c1JHQiAoR2RrRXZlbnRCdXR0b24gKmV2ZW50KSB7Ci0gICAg IGlmICh2ID09ICh1aW50MTZfdClPcHRpb25zOjpOYXZpZ2F0b3JVbml0OjpfQ09VTlQpIHsKLSAg ICAgICAgIHYgPSAwOwotICAgICB9Ci0tICAgIG9wdGlvbnMubmF2UkdCVW5pdCA9IGN1cnJlbnRS R0JVbml0ID0gKE9wdGlvbnM6Ok5hdmlnYXRvclVuaXQpdjsKLSsgICAgQXBwOjpnZXQoKS5tdXRf b3B0aW9ucygpLm5hdlJHQlVuaXQgPSBjdXJyZW50UkdCVW5pdCA9IChPcHRpb25zOjpOYXZpZ2F0 b3JVbml0KXY7Ci0gCi0gICAgIHN3aXRjaCAoY3VycmVudFJHQlVuaXQpIHsKLSAgICAgY2FzZSBP cHRpb25zOjpOYXZpZ2F0b3JVbml0OjpSMF8xOgotQEAgLTM4NSw3ICszNzgsNyBAQCB2b2lkIE5h dmlnYXRvcjo6Y3ljbGVVbml0c0hTViAoR2RrRXZlbnRCdXR0b24gKmV2ZW50KSB7Ci0gICAgIGlm ICh2ID09ICh1aW50MTZfdClPcHRpb25zOjpOYXZpZ2F0b3JVbml0OjpfQ09VTlQpIHsKLSAgICAg ICAgIHYgPSAwOwotICAgICB9Ci0tICAgIG9wdGlvbnMubmF2SFNWVW5pdCA9IGN1cnJlbnRIU1ZV bml0ID0gKE9wdGlvbnM6Ok5hdmlnYXRvclVuaXQpdjsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpLm5hdkhTVlVuaXQgPSBjdXJyZW50SFNWVW5pdCA9IChPcHRpb25zOjpOYXZpZ2F0b3JV bml0KXY7Ci0gCi0gICAgIHN3aXRjaCAoY3VycmVudEhTVlVuaXQpIHsKLSAgICAgY2FzZSBPcHRp b25zOjpOYXZpZ2F0b3JVbml0OjpSMF8xOgotZGlmZiAtLWdpdCBhL3J0Z3VpL29wdGlvbnMuY2Mg Yi9ydGd1aS9vcHRpb25zLmNjCi1pbmRleCA0NmQ1ZjRlZGIuLjdlM2Q0MTI3ZiAxMDA2NDQKLS0t LSBhL3J0Z3VpL29wdGlvbnMuY2MKLSsrKyBiL3J0Z3VpL29wdGlvbnMuY2MKLUBAIC01NiwxMCAr NTYsNiBAQCBHbGliOjp1c3RyaW5nIE9wdGlvbnM6OnJ0ZGlyOwotIC8vIFVzZXIncyBjYWNoZWQg ZGF0YSBkaXJlY3RvcnkKLSBHbGliOjp1c3RyaW5nIE9wdGlvbnM6OmNhY2hlQmFzZURpcjsKLSAK LS1PcHRpb25zIG9wdGlvbnM7Ci0tR2xpYjo6dXN0cmluZyB2ZXJzaW9uU3RyaW5nID0gUlRWRVJT SU9OOwotLUdsaWI6OnVzdHJpbmcgcGFyYW1GaWxlRXh0ZW5zaW9uID0gIi5wcDMiOwotLQotIE9w dGlvbnM6Ok9wdGlvbnMoKQotIHsKLSAKLUBAIC03NywxMyArNzMsMTMgQEAgaW5saW5lIGJvb2wg T3B0aW9uczo6Y2hlY2tQcm9maWxlUGF0aChHbGliOjp1c3RyaW5nICZwYXRoKQotIAotICAgICBH bGliOjp1c3RyaW5nIHAgPSBnZXRVc2VyUHJvZmlsZVBhdGgoKTsKLSAKLS0gICAgaWYgKCFwLmVt cHR5KCkgJiYgR2xpYjo6ZmlsZV90ZXN0KHBhdGggKyBwYXJhbUZpbGVFeHRlbnNpb24sIEdsaWI6 OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0rICAgIGlmICghcC5lbXB0eSgpICYmIEdsaWI6OmZpbGVf dGVzdChwYXRoICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiwgR2xpYjo6RklMRV9URVNUX0VY SVNUUykpIHsKLSAgICAgICAgIHJldHVybiB0cnVlOwotICAgICB9Ci0gCi0gICAgIHAgPSBnZXRH bG9iYWxQcm9maWxlUGF0aCgpOwotIAotLSAgICByZXR1cm4gIXAuZW1wdHkoKSAmJiBHbGliOjpm aWxlX3Rlc3QocGF0aCArIHBhcmFtRmlsZUV4dGVuc2lvbiwgR2xpYjo6RklMRV9URVNUX0VYSVNU Uyk7Ci0rICAgIHJldHVybiAhcC5lbXB0eSgpICYmIEdsaWI6OmZpbGVfdGVzdChwYXRoICsgQXBw OjpQQVJBTV9GSUxFX0VYVEVOU0lPTiwgR2xpYjo6RklMRV9URVNUX0VYSVNUUyk7Ci0gfQotIAot IGJvb2wgT3B0aW9uczo6Y2hlY2tEaXJQYXRoKEdsaWI6OnVzdHJpbmcgJnBhdGgsIEdsaWI6OnVz dHJpbmcgZXJyU3RyaW5nKQotQEAgLTEyMCw3ICsxMTYsNyBAQCB2b2lkIE9wdGlvbnM6OnVwZGF0 ZVBhdGhzKCkKLSAKLSAgICAgICAgIGlmIChjaGVja0RpclBhdGgocHJvZmlsZVBhdGgsICJFcnJv cjogdGhlIHVzZXIncyBwcm9jZXNzaW5nIHByb2ZpbGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGEg ZGlyZWN0b3J5IG9yIGRvZXNuJ3QgZXhpc3QhXG4iKSkgewotICAgICAgICAgICAgIHVzZXJQcm9m aWxlUGF0aCA9IHByb2ZpbGVQYXRoOwotLSAgICAgICAgICAgIHRtcFBhdGggPSBHbGliOjpidWls ZF9maWxlbmFtZShhcmd2MCwgInByb2ZpbGVzIik7Ci0rICAgICAgICAgICAgdG1wUGF0aCA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgInByb2ZpbGVzIik7Ci0gCi0g ICAgICAgICAgICAgaWYgKGNoZWNrRGlyUGF0aCh0bXBQYXRoLCAiRXJyb3I6IHRoZSBnbG9iYWwn cyBwcm9jZXNzaW5nIHByb2ZpbGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGEgZGlyZWN0b3J5IG9y IGRvZXNuJ3QgZXhpc3QhXG4iKSkgewotICAgICAgICAgICAgICAgICBpZiAodXNlclByb2ZpbGVQ YXRoICE9IHRtcFBhdGgpIHsKLUBAIC0xMjgsNyArMTI0LDcgQEAgdm9pZCBPcHRpb25zOjp1cGRh dGVQYXRocygpCi0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgICB9 IGVsc2UgewotLSAgICAgICAgICAgIHRtcFBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2 MCwgInByb2ZpbGVzIik7Ci0rICAgICAgICAgICAgdG1wUGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVu YW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgInByb2ZpbGVzIik7Ci0gCi0gICAgICAgICAgICAgaWYg KGNoZWNrRGlyUGF0aCh0bXBQYXRoLCAiRXJyb3I6IHRoZSBnbG9iYWwncyBwcm9jZXNzaW5nIHBy b2ZpbGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGEgZGlyZWN0b3J5IG9yIGRvZXNuJ3QgZXhpc3Qh XG4iKSkgewotICAgICAgICAgICAgICAgICBnbG9iYWxQcm9maWxlUGF0aCA9IHRtcFBhdGg7Ci1A QCAtMTUxLDcgKzE0Nyw3IEBAIHZvaWQgT3B0aW9uczo6dXBkYXRlUGF0aHMoKQotICAgICAgICAg ICAgIHVzZXJQcm9maWxlUGF0aCA9IHRtcFBhdGg7Ci0gICAgICAgICB9Ci0gCi0tICAgICAgICB0 bXBQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJwcm9maWxlcyIpOwotKyAgICAg ICAgdG1wUGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgInBy b2ZpbGVzIik7Ci0gCi0gICAgICAgICBpZiAoY2hlY2tEaXJQYXRoKHRtcFBhdGgsICJFcnJvcjog dGhlIHVzZXIncyBwcm9jZXNzaW5nIHByb2ZpbGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGEgZGly ZWN0b3J5IG9yIGRvZXNuJ3QgZXhpc3QhXG4iKSkgewotICAgICAgICAgICAgIGdsb2JhbFByb2Zp bGVQYXRoID0gdG1wUGF0aDsKLUBAIC0yMjYsNyArMjIyLDcgQEAgdm9pZCBPcHRpb25zOjp1cGRh dGVQYXRocygpCi0gICAgIH0KLSB9Ci0gCi0tR2xpYjo6dXN0cmluZyBPcHRpb25zOjpnZXRQcmVm ZXJyZWRQcm9maWxlUGF0aCgpCi0rR2xpYjo6dXN0cmluZyBPcHRpb25zOjpnZXRQcmVmZXJyZWRQ cm9maWxlUGF0aCgpIGNvbnN0Ci0gewotICAgICBpZiAoIXVzZXJQcm9maWxlUGF0aC5lbXB0eSgp KSB7Ci0gICAgICAgICByZXR1cm4gdXNlclByb2ZpbGVQYXRoOwotQEAgLTI0NCw3ICsyNDAsNyBA QCBHbGliOjp1c3RyaW5nIE9wdGlvbnM6OmdldFByZWZlcnJlZFByb2ZpbGVQYXRoKCkKLSAgICpA cmV0dXJuIFNlbmQgYmFjayB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZ2l2ZW4gZmlsZW5hbWUg b3IgIk5ldXRyYWwiIGlmICJOZXV0cmFsIiBoYXMgYmVlbiBzZXQgdG8gcHJvZk5hbWUuIEltcGxl bWVudGVyIHdpbGwgaGF2ZQotICAgKiAgICAgICAgdG8gdGVzdCBmb3IgdGhpcyBwYXJ0aWN1bGFy IHZhbHVlLiBJZiB0aGUgYWJzb2x1dGUgcGF0aCBpcyBpbnZhbGlkIChlLmcuIHRoZSBmaWxlIGRv ZXNuJ3QgZXhpc3QpLCBpdCB3aWxsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCi0gICAqLwotLUds aWI6OnVzdHJpbmcgT3B0aW9uczo6ZmluZFByb2ZpbGVQYXRoKEdsaWI6OnVzdHJpbmcgJnByb2ZO YW1lKQotK0dsaWI6OnVzdHJpbmcgT3B0aW9uczo6ZmluZFByb2ZpbGVQYXRoKEdsaWI6OnVzdHJp bmcgJnByb2ZOYW1lKSBjb25zdAotIHsKLSAgICAgaWYgKHByb2ZOYW1lLmVtcHR5KCkpIHsKLSAg ICAgICAgIHJldHVybiAiIjsKLUBAIC0yNjMsNyArMjU5LDcgQEAgR2xpYjo6dXN0cmluZyBPcHRp b25zOjpmaW5kUHJvZmlsZVBhdGgoR2xpYjo6dXN0cmluZyAmcHJvZk5hbWUpCi0gICAgIGlmIChw ID09ICIke1V9IikgewotICAgICAgICAgLy8gdGhlIHBhdGggc3RhcnRzIGJ5IHRoZSBVc2VyIHZp cnR1YWwgcGF0aAotICAgICAgICAgcCA9IGdldFVzZXJQcm9maWxlUGF0aCgpOwotLSAgICAgICAg R2xpYjo6dXN0cmluZyBmdWxsUGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHAsIHByb2ZOYW1l LnN1YnN0cig1KSArIHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICBHbGliOjp1c3RyaW5n IGZ1bGxQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUocCwgcHJvZk5hbWUuc3Vic3RyKDUpICsg QXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTik7Ci0gCi0gICAgICAgICBpZiAoIXAuZW1wdHkoKSAm JiBHbGliOjpmaWxlX3Rlc3QoZnVsbFBhdGgsIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0g ICAgICAgICAgICAgcmV0dXJuIEdsaWI6OnBhdGhfZ2V0X2Rpcm5hbWUoZnVsbFBhdGgpOwotQEAg LTI3MSw3ICsyNjcsNyBAQCBHbGliOjp1c3RyaW5nIE9wdGlvbnM6OmZpbmRQcm9maWxlUGF0aChH bGliOjp1c3RyaW5nICZwcm9mTmFtZSkKLSAgICAgfSBlbHNlIGlmIChwID09ICIke0d9Iikgewot ICAgICAgICAgLy8gdGhlIHBhdGggc3RhcnRzIGJ5IHRoZSBVc2VyIHZpcnR1YWwgcGF0aAotICAg ICAgICAgcCA9IGdldEdsb2JhbFByb2ZpbGVQYXRoKCk7Ci0tICAgICAgICBHbGliOjp1c3RyaW5n IGZ1bGxQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUocCwgcHJvZk5hbWUuc3Vic3RyKDUpICsg cGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsgICAgICAgIEdsaWI6OnVzdHJpbmcgZnVsbFBhdGggPSBH bGliOjpidWlsZF9maWxlbmFtZShwLCBwcm9mTmFtZS5zdWJzdHIoNSkgKyBBcHA6OlBBUkFNX0ZJ TEVfRVhURU5TSU9OKTsKLSAKLSAgICAgICAgIGlmICghcC5lbXB0eSgpICYmIEdsaWI6OmZpbGVf dGVzdChmdWxsUGF0aCwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSAgICAgICAgICAgICBy ZXR1cm4gR2xpYjo6cGF0aF9nZXRfZGlybmFtZShmdWxsUGF0aCk7Ci1AQCAtMjc5LDcgKzI3NSw3 IEBAIEdsaWI6OnVzdHJpbmcgT3B0aW9uczo6ZmluZFByb2ZpbGVQYXRoKEdsaWI6OnVzdHJpbmcg JnByb2ZOYW1lKQotICAgICB9IGVsc2UgewotICAgICAgICAgLy8gY29tcGF0aWJpbGl0eSBjYXNl IC0+IGNvbnZlcnQgdGhlIHBhdGggdG8gdGhlIG5ldyBmb3JtYXQKLSAgICAgICAgIHAgPSBnZXRV c2VyUHJvZmlsZVBhdGgoKTsKLS0gICAgICAgIEdsaWI6OnVzdHJpbmcgZnVsbFBhdGggPSBHbGli OjpidWlsZF9maWxlbmFtZShwLCBwcm9mTmFtZSArIHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAg ICAgICBHbGliOjp1c3RyaW5nIGZ1bGxQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUocCwgcHJv Zk5hbWUgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKTsKLSAKLSAgICAgICAgIGlmICghcC5l bXB0eSgpICYmIEdsaWI6OmZpbGVfdGVzdChmdWxsUGF0aCwgR2xpYjo6RklMRV9URVNUX0VYSVNU UykpIHsKLSAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHByb2ZpbGUgcGF0aAotQEAgLTI4OCw3 ICsyODQsNyBAQCBHbGliOjp1c3RyaW5nIE9wdGlvbnM6OmZpbmRQcm9maWxlUGF0aChHbGliOjp1 c3RyaW5nICZwcm9mTmFtZSkKLSAgICAgICAgIH0KLSAKLSAgICAgICAgIHAgPSBnZXRHbG9iYWxQ cm9maWxlUGF0aCgpOwotLSAgICAgICAgZnVsbFBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShw LCBwcm9mTmFtZSArIHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICBmdWxsUGF0aCA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKHAsIHByb2ZOYW1lICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lP Tik7Ci0gCi0gICAgICAgICBpZiAoIXAuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3QoZnVsbFBh dGgsIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgICAgICAgICAgcHJvZk5hbWUgPSBH bGliOjpidWlsZF9maWxlbmFtZSgiJHtHfSIsIHByb2ZOYW1lKTsKLUBAIC01MjcsNDMgKzUyMyw2 IEBAIHZvaWQgT3B0aW9uczo6c2V0RGVmYXVsdHMoKQotICAgICBJQ0NQQ19jb3B5cmlnaHQgPSBP cHRpb25zOjpnZXRJQ0NQcm9maWxlQ29weXJpZ2h0KCk7Ci0gICAgIElDQ1BDX2FwcGVuZFBhcmFt c1RvRGVzYyA9IGZhbHNlOwotIAotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuaW5nICAg ICAgICAgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuRWRnZSAgICAgICAg PSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuTWljcm8gICAgICAgPSB0cnVl OwotLSAgICAvL2Zhc3RleHBvcnRfYnlwYXNzX2x1bWFEZW5vaXNlICAgICAgICA9IHRydWU7Ci0t ICAgIC8vZmFzdGV4cG9ydF9ieXBhc3NfY29sb3JEZW5vaXNlICAgICAgID0gdHJ1ZTsKLS0gICAg ZmFzdGV4cG9ydF9ieXBhc3NfZGVmcmluZ2UgICAgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4 cG9ydF9ieXBhc3NfZGlycHlyRGVub2lzZSAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9i eXBhc3NfZGlycHlyZXF1YWxpemVyICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nf d2F2ZWxldCAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfcmF3X2JheWVyX21ldGhvZCAgICAg ICAgICAgICAgICAgID0gImZhc3QiOwotLSAgICAvL2Zhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXll cl9hbGxfZW5oYW5jZSAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXll cl9kY2JfaXRlcmF0aW9ucyAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2Jh eWVyX2RjYl9lbmhhbmNlICAgICAgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdf YmF5ZXJfbG1tc2VfaXRlcmF0aW9ucyA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jh d19iYXllcl9saW5lbm9pc2UgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nf cmF3X2JheWVyX2dyZWVudGhyZXNoICAgICAgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X3Jhd194 dHJhbnNfbWV0aG9kICAgICAgICAgICAgICAgICA9ICJmYXN0IjsKLS0gICAgZmFzdGV4cG9ydF9i eXBhc3NfcmF3X2NjU3RlcHMgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nf cmF3X2NhICAgICAgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2Rm ICAgICAgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2ZmICAgICAg ICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9pY21faW5wdXRfcHJvZmlsZSAgICAgICAg ID0gIihjYW1lcmEpIjsKLS0gICAgZmFzdGV4cG9ydF9pY21fd29ya2luZ19wcm9maWxlICAgICAg ID0gIlByb1Bob3RvIjsKLS0gICAgZmFzdGV4cG9ydF9pY21fb3V0cHV0X3Byb2ZpbGUgICAgICAg ID0gb3B0aW9ucy5ydFNldHRpbmdzLnNyZ2I7Ci0tICAgIGZhc3RleHBvcnRfaWNtX291dHB1dElu dGVudCAgICAgICAgICA9IHJ0ZW5naW5lOjpSSV9SRUxBVElWRTsKLS0gICAgZmFzdGV4cG9ydF9p Y21fb3V0cHV0QlBDICAgICAgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9yZXNpemVf ZW5hYmxlZCAgICAgICAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9yZXNpemVfc2NhbGUg ICAgICAgICAgICAgID0gMTsKLS0gICAgZmFzdGV4cG9ydF9yZXNpemVfYXBwbGllc1RvICAgICAg ICAgID0gIkNyb3BwZWQgYXJlYSI7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX21ldGhvZCAgICAg ICAgICAgICA9ICJMYW5jem9zIjsKLS0gICAgZmFzdGV4cG9ydF9yZXNpemVfZGF0YXNwZWMgICAg ICAgICAgID0gMzsKLS0gICAgZmFzdGV4cG9ydF9yZXNpemVfd2lkdGggICAgICAgICAgICAgID0g OTAwOwotLSAgICBmYXN0ZXhwb3J0X3Jlc2l6ZV9oZWlnaHQgICAgICAgICAgICAgPSA5MDA7Ci0t ICAgIGZhc3RleHBvcnRfcmVzaXplX2xvbmdlZGdlICAgICAgICAgICA9IDkwMDsKLS0gICAgZmFz dGV4cG9ydF9yZXNpemVfc2hvcnRlZGdlICAgICAgICAgID0gOTAwOwotLSAgICBmYXN0ZXhwb3J0 X3VzZV9mYXN0X3BpcGVsaW5lICAgICAgICAgPSB0cnVlOwotLQotICAgICBjbHV0c0RpciA9ICIu L2NsdXRzIjsKLSAKLSAgICAgY3V0T3ZlcmxheUJydXNoID0gc3RkOjp2ZWN0b3I8ZG91YmxlPiAo NCk7Ci1AQCAtNjc5LDYgKzYzOCw0NSBAQCB2b2lkIE9wdGlvbnM6OnNldERlZmF1bHRzKCkKLSAv LyAgcnRTZXR0aW5ncy5kZWNhY3Rpb24gPTAuMzsKLSAvLyAgcnRTZXR0aW5ncy5jaWViYWRwaXhn YXVzcz1mYWxzZTsKLSAgICAgcnRTZXR0aW5ncy5yZ2JjdXJ2ZXNsdW1hbW9kZV9nYW11dCA9IHRy dWU7Ci0rCi0rICAgIGZhc3RleHBvcnRfYnlwYXNzX3NoYXJwZW5pbmcgICAgICAgICA9IHRydWU7 Ci0rICAgIGZhc3RleHBvcnRfYnlwYXNzX3NoYXJwZW5FZGdlICAgICAgICA9IHRydWU7Ci0rICAg IGZhc3RleHBvcnRfYnlwYXNzX3NoYXJwZW5NaWNybyAgICAgICA9IHRydWU7Ci0rICAgIC8vZmFz dGV4cG9ydF9ieXBhc3NfbHVtYURlbm9pc2UgICAgICAgID0gdHJ1ZTsKLSsgICAgLy9mYXN0ZXhw b3J0X2J5cGFzc19jb2xvckRlbm9pc2UgICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5 cGFzc19kZWZyaW5nZSAgICAgICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19k aXJweXJEZW5vaXNlICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19kaXJweXJl cXVhbGl6ZXIgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc193YXZlbGV0ICAgID0g dHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9yYXdfYmF5ZXJfbWV0aG9kICAgICAgICAgICAgICAgICAg PSAiZmFzdCI7Ci0rICAgIC8vZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2FsbF9lbmhhbmNl ICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2RjYl9pdGVyYXRp b25zICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJfZGNiX2VuaGFu Y2UgICAgICA9IHRydWU7Ci0rICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXllcl9sbW1zZV9p dGVyYXRpb25zID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2xpbmVu b2lzZSAgICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJfZ3Jl ZW50aHJlc2ggICAgICA9IHRydWU7Ci0rICAgIGZhc3RleHBvcnRfcmF3X3h0cmFuc19tZXRob2Qg ICAgICAgICAgICAgICAgID0gImZhc3QiOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfY2NT dGVwcyAgICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfY2EgICAgICAg ICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfZGYgICAgICAgICAgICAg PSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfZmYgICAgICAgICAgICAgPSB0cnVl OwotKyAgICBmYXN0ZXhwb3J0X2ljbV9pbnB1dF9wcm9maWxlICAgICAgICAgPSAiKGNhbWVyYSki OwotKyAgICBmYXN0ZXhwb3J0X2ljbV93b3JraW5nX3Byb2ZpbGUgICAgICAgPSAiUHJvUGhvdG8i OwotKyAgICAvLyBNdXN0IGJlIHNldCBhZnRlciBvcHRpb25zLnJ0U2V0dGluZ3Muc3JnYiBoYXMg YWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIQotKyAgICBmYXN0ZXhwb3J0X2ljbV9vdXRwdXRfcHJv ZmlsZSAgICAgICAgPSBydFNldHRpbmdzLnNyZ2I7Ci0rICAgIGZhc3RleHBvcnRfaWNtX291dHB1 dEludGVudCAgICAgICAgICA9IHJ0ZW5naW5lOjpSSV9SRUxBVElWRTsKLSsgICAgZmFzdGV4cG9y dF9pY21fb3V0cHV0QlBDICAgICAgICAgICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9yZXNp emVfZW5hYmxlZCAgICAgICAgICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9yZXNpemVfc2Nh bGUgICAgICAgICAgICAgID0gMTsKLSsgICAgZmFzdGV4cG9ydF9yZXNpemVfYXBwbGllc1RvICAg ICAgICAgID0gIkNyb3BwZWQgYXJlYSI7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX21ldGhvZCAg ICAgICAgICAgICA9ICJMYW5jem9zIjsKLSsgICAgZmFzdGV4cG9ydF9yZXNpemVfZGF0YXNwZWMg ICAgICAgICAgID0gMzsKLSsgICAgZmFzdGV4cG9ydF9yZXNpemVfd2lkdGggICAgICAgICAgICAg ID0gOTAwOwotKyAgICBmYXN0ZXhwb3J0X3Jlc2l6ZV9oZWlnaHQgICAgICAgICAgICAgPSA5MDA7 Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX2xvbmdlZGdlICAgICAgICAgICA9IDkwMDsKLSsgICAg ZmFzdGV4cG9ydF9yZXNpemVfc2hvcnRlZGdlICAgICAgICAgID0gOTAwOwotKyAgICBmYXN0ZXhw b3J0X3VzZV9mYXN0X3BpcGVsaW5lICAgICAgICAgPSB0cnVlOwotKwotICAgICBsYXN0SWNjRGly ID0gcnRTZXR0aW5ncy5pY2NEaXJlY3Rvcnk7Ci0gICAgIGxhc3REYXJrZnJhbWVEaXIgPSBydFNl dHRpbmdzLmRhcmtGcmFtZXNQYXRoOwotICAgICBsYXN0RmxhdGZpZWxkRGlyID0gcnRTZXR0aW5n cy5mbGF0RmllbGRzUGF0aDsKLUBAIC05NjksNyArOTY3LDcgQEAgdm9pZCBPcHRpb25zOjpyZWFk RnJvbUZpbGUoR2xpYjo6dXN0cmluZyBmbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIGlmIChr ZXlGaWxlLmhhc19rZXkoIkV4dGVybmFsIEVkaXRvciIsICJHaW1wRGlyIikpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICBnaW1wRGlyID0ga2V5RmlsZS5nZXRfc3RyaW5nKCJFeHRlcm5hbCBF ZGl0b3IiLCAiR2ltcERpciIpOwotICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAg ICAgICAgICAgYXV0byBleGVjdXRhYmxlID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUob3B0aW9ucy5n aW1wRGlyLCAiYmluIiwgImdpbXAtd2luLXJlbW90ZSIpOwotKyAgICAgICAgICAgICAgICAgICAg YXV0byBleGVjdXRhYmxlID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoZ2ltcERpciwgImJpbiIsICJn aW1wLXdpbi1yZW1vdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChHbGliOjpmaWxlX3Rl c3QoZXhlY3V0YWJsZSwgR2xpYjo6RklMRV9URVNUX0lTX0VYRUNVVEFCTEUpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGVkaXRvclRvU2VuZFRvID09IDEpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxFZGl0b3JJbmRleCA9IGV4dGVybmFsRWRpdG9ycy5z aXplKCk7Ci1AQCAtMjM3NSw3ICsyMzczLDcgQEAgdm9pZCBPcHRpb25zOjpyZWFkRnJvbUZpbGUo R2xpYjo6dXN0cmluZyBmbmFtZSkKLSAgICAgfSBjYXRjaCAoR2xpYjo6RXJyb3IgJmVycikgewot ICAgICAgICAgR2xpYjo6dXN0cmluZyBtc2cgPSBHbGliOjp1c3RyaW5nOjpjb21wb3NlKCJPcHRp b25zOjpyZWFkRnJvbUZpbGUgLyBFcnJvciBjb2RlICUxIHdoaWxlIHJlYWRpbmcgdmFsdWVzIGZy b20gXCIlMlwiOlxuJTMiLCBlcnIuY29kZSgpLCBmbmFtZSwgZXJyLndoYXQoKSk7Ci0gCi0tICAg ICAgICBpZiAob3B0aW9ucy5ydFNldHRpbmdzLnZlcmJvc2UpIHsKLSsgICAgICAgIGlmIChBcHA6 OmdldCgpLm9wdGlvbnMoKS5ydFNldHRpbmdzLnZlcmJvc2UpIHsKLSAgICAgICAgICAgICBwcmlu dGYoIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci0gICAgICAgICB9Ci0gCi1AQCAtMjM4Myw3ICsyMzgx LDcgQEAgdm9pZCBPcHRpb25zOjpyZWFkRnJvbUZpbGUoR2xpYjo6dXN0cmluZyBmbmFtZSkKLSAg ICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICAgICBHbGliOjp1c3RyaW5nIG1zZyA9IEdsaWI6OnVz dHJpbmc6OmNvbXBvc2UoIk9wdGlvbnM6OnJlYWRGcm9tRmlsZSAvIFVua25vd24gZXhjZXB0aW9u IHdoaWxlIHRyeWluZyB0byBsb2FkIFwiJTFcIiEiLCBmbmFtZSk7Ci0gCi0tICAgICAgICBpZiAo b3B0aW9ucy5ydFNldHRpbmdzLnZlcmJvc2UpIHsKLSsgICAgICAgIGlmIChBcHA6OmdldCgpLm9w dGlvbnMoKS5ydFNldHRpbmdzLnZlcmJvc2UpIHsKLSAgICAgICAgICAgICBwcmludGYoIiVzXG4i LCBtc2cuY19zdHIoKSk7Ci0gICAgICAgICB9Ci0gCi1AQCAtMjg3Myw3ICsyODcxLDYgQEAgdm9p ZCBPcHRpb25zOjpzYXZlVG9GaWxlKEdsaWI6OnVzdHJpbmcgZm5hbWUpCi0gCi0gdm9pZCBPcHRp b25zOjpsb2FkKGJvb2wgbGlnaHR3ZWlnaHQpCi0gewotLQotICAgICAvLyBGaW5kIHRoZSBhcHBs aWNhdGlvbiBkYXRhIHBhdGgKLSAKLSAgICAgY29uc3QgZ2NoYXIqIHBhdGg7Ci1AQCAtMjkwOCwy MiArMjkwNSwyMyBAQCB2b2lkIE9wdGlvbnM6OmxvYWQoYm9vbCBsaWdodHdlaWdodCkKLSAjZW5k aWYKLSAgICAgfQotIAotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9u cygpOwotICAgICBpZiAob3B0aW9ucy5ydFNldHRpbmdzLnZlcmJvc2UpIHsKLSAgICAgICAgIHBy aW50ZigiU2V0dGluZ3MgZGlyZWN0b3J5IChydGRpcikgPSAlc1xuIiwgcnRkaXIuY19zdHIoKSk7 Ci0gICAgIH0KLSAKLSAgICAgLy8gU2V0IHRoZSBjYWNoZSBmb2xkZXIgaW4gUlQncyBiYXNlIGZv bGRlcgotLSAgICBjYWNoZUJhc2VEaXIgPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2MCwgIm15 Y2FjaGUiKTsKLSsgICAgY2FjaGVCYXNlRGlyID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpn ZXQoKS5hcmd2MCgpLCAibXljYWNoZSIpOwotIAotICAgICAvLyBSZWFkIHRoZSBnbG9iYWwgb3B0 aW9uIGZpbGUgKHRoZSBvbmUgbG9jYXRlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBiYXNlIGZvbGRl cikKLSAgICAgdHJ5IHsKLS0gICAgICAgIG9wdGlvbnMucmVhZEZyb21GaWxlKEdsaWI6OmJ1aWxk X2ZpbGVuYW1lKGFyZ3YwLCAib3B0aW9ucyIpKTsKLSsgICAgICAgIG9wdGlvbnMucmVhZEZyb21G aWxlKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgIm9wdGlvbnMiKSk7 Ci0gICAgIH0gY2F0Y2ggKE9wdGlvbnM6OkVycm9yICYpIHsKLSAgICAgICAgIC8vIGlnbm9yZSBl cnJvcnMgaGVyZQotICAgICB9Ci0gCi0gICAgIGlmICghb3B0aW9ucy5tdWx0aVVzZXIgJiYgcGF0 aCA9PSBudWxscHRyKSB7Ci0tICAgICAgICBydGRpciA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGFy Z3YwLCAibXlzZXR0aW5ncyIpOwotKyAgICAgICAgcnRkaXIgPSBHbGliOjpidWlsZF9maWxlbmFt ZShBcHA6OmdldCgpLmFyZ3YwKCksICJteXNldHRpbmdzIik7Ci0gICAgIH0KLSAKLSAgICAgLy8g TW9kaWZ5IHRoZSBwYXRoIG9mIHRoZSBjYWNoZSBmb2xkZXIgdG8gdGhlIG9uZSBwcm92aWRlZCBp biBSVF9DQUNIRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLUBAIC0zMDM5LDcgKzMwMzcsNyBAQCB2 b2lkIE9wdGlvbnM6OmxvYWQoYm9vbCBsaWdodHdlaWdodCkKLSAgICAgLy8gb3V0IHdoaWNoIGFy ZSB0aGUgcGFyZW50IHRyYW5zbGF0aW9ucy4gIEZ1cnRoZXJtb3JlLCB0aGVyZSBtdXN0IGJlIGEg ZmlsZSA8TGFuZ3VhZ2U+IGZvciBlYWNoIGxvY2FsZSA8TGFuZ3VhZ2U+ICg8TEM+KSAtLSB5b3Ug Y2Fubm90IGhhdmUKLSAgICAgLy8gJ0ZyZW5jaCAoQ0EpJyB1bmxlc3MgdGhlcmUgaXMgYSBmaWxl ICdGcmVuY2gnLgotIAotLSAgICBHbGliOjp1c3RyaW5nIGRlZmF1bHRUcmFuc2xhdGlvbiA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAibGFuZ3VhZ2VzIiwgImRlZmF1bHQiKTsKLSsgICAg R2xpYjo6dXN0cmluZyBkZWZhdWx0VHJhbnNsYXRpb24gPSBHbGliOjpidWlsZF9maWxlbmFtZShB cHA6OmdldCgpLmFyZ3YwKCksICJsYW5ndWFnZXMiLCAiZGVmYXVsdCIpOwotICAgICBHbGliOjp1 c3RyaW5nIGxhbmd1YWdlVHJhbnNsYXRpb24gPSAiIjsKLSAgICAgR2xpYjo6dXN0cmluZyBsb2Nh bGVUcmFuc2xhdGlvbiA9ICIiOwotIAotQEAgLTMwNTEsMjkgKzMwNDksMjkgQEAgdm9pZCBPcHRp b25zOjpsb2FkKGJvb2wgbGlnaHR3ZWlnaHQpCi0gICAgICAgICBzdGQ6OnZlY3RvcjxHbGliOjp1 c3RyaW5nPiBsYW5nUG9ydGlvbnMgPSBHbGliOjpSZWdleDo6c3BsaXRfc2ltcGxlKCIgIiwgb3B0 aW9ucy5sYW5ndWFnZSk7Ci0gCi0gICAgICAgICBpZiAobGFuZ1BvcnRpb25zLnNpemUoKSA+PSAx KSB7Ci0tICAgICAgICAgICAgbGFuZ3VhZ2VUcmFuc2xhdGlvbiA9IEdsaWI6OmJ1aWxkX2ZpbGVu YW1lKGFyZ3YwLCAibGFuZ3VhZ2VzIiwgbGFuZ1BvcnRpb25zLmF0KDApKTsKLSsgICAgICAgICAg ICBsYW5ndWFnZVRyYW5zbGF0aW9uID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpnZXQoKS5h cmd2MCgpLCAibGFuZ3VhZ2VzIiwgbGFuZ1BvcnRpb25zLmF0KDApKTsKLSAgICAgICAgIH0KLSAK LSAgICAgICAgIGlmIChsYW5nUG9ydGlvbnMuc2l6ZSgpID49IDIpIHsKLS0gICAgICAgICAgICBs b2NhbGVUcmFuc2xhdGlvbiA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAibGFuZ3VhZ2Vz Iiwgb3B0aW9ucy5sYW5ndWFnZSk7Ci0rICAgICAgICAgICAgbG9jYWxlVHJhbnNsYXRpb24gPSBH bGliOjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJsYW5ndWFnZXMiLCBvcHRp b25zLmxhbmd1YWdlKTsKLSAgICAgICAgIH0KLSAgICAgfQotIAotICAgICBsYW5nTWdyLmxvYWQo b3B0aW9ucy5sYW5ndWFnZSwge2xvY2FsZVRyYW5zbGF0aW9uLCBsYW5ndWFnZVRyYW5zbGF0aW9u LCBkZWZhdWx0VHJhbnNsYXRpb259KTsKLSAKLS0gICAgcnRlbmdpbmU6OmluaXQoJm9wdGlvbnMu cnRTZXR0aW5ncywgYXJndjAsIHJ0ZGlyLCAhbGlnaHR3ZWlnaHQpOwotKyAgICBydGVuZ2luZTo6 aW5pdCgmb3B0aW9ucy5ydFNldHRpbmdzLCBBcHA6OmdldCgpLmFyZ3YwKCksIHJ0ZGlyLCAhbGln aHR3ZWlnaHQpOwotIH0KLSAKLSB2b2lkIE9wdGlvbnM6OnNhdmUoKQotIHsKLSAKLS0gICAgb3B0 aW9ucy5zYXZlVG9GaWxlKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHJ0ZGlyLCAib3B0aW9ucyIpKTsK LSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLnNhdmVUb0ZpbGUoR2xpYjo6YnVpbGRfZmls ZW5hbWUocnRkaXIsICJvcHRpb25zIikpOwotIH0KLSAKLSAvKgotICAqIHJldHVybiB0cnVlIGlm IGV4dCBpcyBhIHBhcnNlZCBleHRlbnNpb24gKHJldGFpbmVkIG9yIG5vdCkKLSAgKi8KLS1ib29s IE9wdGlvbnM6OmlzX3BhcnNlX2V4dGVudGlvbihHbGliOjp1c3RyaW5nIGZuYW1lKQotK2Jvb2wg T3B0aW9uczo6aXNfcGFyc2VfZXh0ZW50aW9uKEdsaWI6OnVzdHJpbmcgZm5hbWUpIGNvbnN0Ci0g ewotICAgICBHbGliOjp1c3RyaW5nIGV4dCA9IGdldEV4dGVuc2lvbihmbmFtZSkubG93ZXJjYXNl KCk7Ci0gCi1AQCAtMzA5NCwxNCArMzA5MiwxNCBAQCBib29sIE9wdGlvbnM6OmlzX3BhcnNlX2V4 dGVudGlvbihHbGliOjp1c3RyaW5nIGZuYW1lKQotIC8qCi0gICogcmV0dXJuIHRydWUgaWYgZm5h bWUgZW5kcyB3aXRoIG9uZSBvZiB0aGUgcmV0YWluZWQgaW1hZ2UgZmlsZSBleHRlbnNpb25zCi0g ICovCi0tYm9vbCBPcHRpb25zOjpoYXNfcmV0YWluZWRfZXh0ZW50aW9uKGNvbnN0IEdsaWI6OnVz dHJpbmcmIGZuYW1lKQotK2Jvb2wgT3B0aW9uczo6aGFzX3JldGFpbmVkX2V4dGVudGlvbihjb25z dCBHbGliOjp1c3RyaW5nJiBmbmFtZSkgY29uc3QKLSB7Ci0gICAgIHJldHVybiBwYXJzZWRFeHRl bnNpb25zU2V0LmZpbmQoZ2V0RXh0ZW5zaW9uKGZuYW1lKS5sb3dlcmNhc2UoKSkgIT0gcGFyc2Vk RXh0ZW5zaW9uc1NldC5lbmQoKTsKLSB9Ci0gCi0gLy8gUGF0dGVybiBtYXRjaGVzICI1LjEiIGZy b20gIjUuMS0yMy1nMTIzNDU2NzgiLCB3aGVuIGNvbXBhcmluZyBvcHRpb24udmVyc2lvbiB0byBS VFZFUlNJT04KLS1ib29sIE9wdGlvbnM6OmlzX25ld192ZXJzaW9uKCkgewotLSAgICBjb25zdCBz dGQ6OnN0cmluZyB2c1tdID0ge3ZlcnNpb25TdHJpbmcsIHZlcnNpb259OwotK2Jvb2wgT3B0aW9u czo6aXNfbmV3X3ZlcnNpb24oKSBjb25zdCB7Ci0rICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZzW10g PSB7QXBwOjpWRVJTSU9OLCB2ZXJzaW9ufTsKLSAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ IHZNYWpvcjsKLSAKLSAgICAgZm9yIChjb25zdCBhdXRvJiB2IDogdnMpIHsKLUBAIC0zMTE0LDI2 ICszMTEyLDI2IEBAIGJvb2wgT3B0aW9uczo6aXNfbmV3X3ZlcnNpb24oKSB7Ci0gLyoKLSAgKiBy ZXR1cm4gdHJ1ZSBpZiBleHQgaXMgYW4gZW5hYmxlZCBleHRlbnNpb24KLSAgKi8KLS1ib29sIE9w dGlvbnM6OmlzX2V4dGVudGlvbl9lbmFibGVkKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGV4dCkKLSti b29sIE9wdGlvbnM6OmlzX2V4dGVudGlvbl9lbmFibGVkKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGV4 dCkgY29uc3QKLSB7Ci0gICAgIHJldHVybiBwYXJzZWRFeHRlbnNpb25zU2V0LmZpbmQoZXh0Lmxv d2VyY2FzZSgpKSAhPSBwYXJzZWRFeHRlbnNpb25zU2V0LmVuZCgpOwotIH0KLSAKLS1HbGliOjp1 c3RyaW5nIE9wdGlvbnM6OmdldFVzZXJQcm9maWxlUGF0aCgpCi0rR2xpYjo6dXN0cmluZyBPcHRp b25zOjpnZXRVc2VyUHJvZmlsZVBhdGgoKSBjb25zdAotIHsKLSAgICAgcmV0dXJuIHVzZXJQcm9m aWxlUGF0aDsKLSB9Ci0gCi0tR2xpYjo6dXN0cmluZyBPcHRpb25zOjpnZXRHbG9iYWxQcm9maWxl UGF0aCgpCi0rR2xpYjo6dXN0cmluZyBPcHRpb25zOjpnZXRHbG9iYWxQcm9maWxlUGF0aCgpIGNv bnN0Ci0gewotICAgICByZXR1cm4gZ2xvYmFsUHJvZmlsZVBhdGg7Ci0gfQotIAotLWJvb2wgT3B0 aW9uczo6aXNfZGVmUHJvZlJhd01pc3NpbmcoKQotK2Jvb2wgT3B0aW9uczo6aXNfZGVmUHJvZlJh d01pc3NpbmcoKSBjb25zdAotIHsKLSAgICAgcmV0dXJuIGRlZlByb2ZFcnJvciAmIHJ0ZW5naW5l Ojp0b1VuZGVybHlpbmcoRGVmUHJvZkVycm9yOjpkZWZQcm9mUmF3TWlzc2luZyk7Ci0gfQotLWJv b2wgT3B0aW9uczo6aXNfZGVmUHJvZkltZ01pc3NpbmcoKQotK2Jvb2wgT3B0aW9uczo6aXNfZGVm UHJvZkltZ01pc3NpbmcoKSBjb25zdAotIHsKLSAgICAgcmV0dXJuIGRlZlByb2ZFcnJvciAmIHJ0 ZW5naW5lOjp0b1VuZGVybHlpbmcoRGVmUHJvZkVycm9yOjpkZWZQcm9mSW1nTWlzc2luZyk7Ci0g fQotQEAgLTMxNTMsMTEgKzMxNTEsMTEgQEAgdm9pZCBPcHRpb25zOjpzZXREZWZQcm9mSW1nTWlz c2luZyhib29sIHZhbHVlKQotICAgICAgICAgZGVmUHJvZkVycm9yICY9IH5ydGVuZ2luZTo6dG9V bmRlcmx5aW5nKERlZlByb2ZFcnJvcjo6ZGVmUHJvZkltZ01pc3NpbmcpOwotICAgICB9Ci0gfQot LWJvb2wgT3B0aW9uczo6aXNfYnVuZGxlZERlZlByb2ZSYXdNaXNzaW5nKCkKLStib29sIE9wdGlv bnM6OmlzX2J1bmRsZWREZWZQcm9mUmF3TWlzc2luZygpIGNvbnN0Ci0gewotICAgICByZXR1cm4g ZGVmUHJvZkVycm9yICYgcnRlbmdpbmU6OnRvVW5kZXJseWluZyhEZWZQcm9mRXJyb3I6OmJ1bmRs ZWREZWZQcm9mUmF3TWlzc2luZyk7Ci0gfQotLWJvb2wgT3B0aW9uczo6aXNfYnVuZGxlZERlZlBy b2ZJbWdNaXNzaW5nKCkKLStib29sIE9wdGlvbnM6OmlzX2J1bmRsZWREZWZQcm9mSW1nTWlzc2lu ZygpIGNvbnN0Ci0gewotICAgICByZXR1cm4gZGVmUHJvZkVycm9yICYgcnRlbmdpbmU6OnRvVW5k ZXJseWluZyhEZWZQcm9mRXJyb3I6OmJ1bmRsZWREZWZQcm9mSW1nTWlzc2luZyk7Ci0gfQotZGlm ZiAtLWdpdCBhL3J0Z3VpL29wdGlvbnMuaCBiL3J0Z3VpL29wdGlvbnMuaAotaW5kZXggMGFiZWQ3 MmRmLi5lMTNiZjY2MWQgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9vcHRpb25zLmgKLSsrKyBiL3J0Z3Vp L29wdGlvbnMuaAotQEAgLTI5LDYgKzI5LDcgQEAKLSAjZWxzZQotICNpbmNsdWRlIDxndGttbS9l bnVtcy5oPgotICNlbmRpZgotKyNpbmNsdWRlICJydGVuZ2luZS9ydGFwcC5oIgotICNpbmNsdWRl ICJydGVuZ2luZS9zZXR0aW5ncy5oIgotICNpbmNsdWRlIDxleGNlcHRpb24+Ci0gCi1AQCAtNTMy LDMwICs1MzMsMjEgQEAgcHVibGljOgotICAgICBzdGF0aWMgdm9pZCBzYXZlKCk7Ci0gCi0gICAg IC8vIGlmIG11bHRpVXNlcj1mYWxzZSwgc2VuZCBiYWNrIHRoZSBnbG9iYWwgcHJvZmlsZSBwYXRo Ci0tICAgIEdsaWI6OnVzdHJpbmcgZ2V0UHJlZmVycmVkUHJvZmlsZVBhdGgoKTsKLS0gICAgR2xp Yjo6dXN0cmluZyBnZXRVc2VyUHJvZmlsZVBhdGgoKTsKLS0gICAgR2xpYjo6dXN0cmluZyBnZXRH bG9iYWxQcm9maWxlUGF0aCgpOwotLSAgICBHbGliOjp1c3RyaW5nIGZpbmRQcm9maWxlUGF0aCAo R2xpYjo6dXN0cmluZyAmcHJvZk5hbWUpOwotLSAgICBib29sIGlzX3BhcnNlX2V4dGVudGlvbiAo R2xpYjo6dXN0cmluZyBmbmFtZSk7Ci0tICAgIGJvb2wgaGFzX3JldGFpbmVkX2V4dGVudGlvbiAo Y29uc3QgR2xpYjo6dXN0cmluZyYgZm5hbWUpOwotLSAgICBib29sIGlzX25ld192ZXJzaW9uKCk7 Ci0tICAgIGJvb2wgaXNfZXh0ZW50aW9uX2VuYWJsZWQgKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGV4 dCk7Ci0tICAgIGJvb2wgaXNfZGVmUHJvZlJhd01pc3NpbmcoKTsKLS0gICAgYm9vbCBpc19idW5k bGVkRGVmUHJvZlJhd01pc3NpbmcoKTsKLS0gICAgYm9vbCBpc19kZWZQcm9mSW1nTWlzc2luZygp OwotLSAgICBib29sIGlzX2J1bmRsZWREZWZQcm9mSW1nTWlzc2luZygpOwotKyAgICBHbGliOjp1 c3RyaW5nIGdldFByZWZlcnJlZFByb2ZpbGVQYXRoKCkgY29uc3Q7Ci0rICAgIEdsaWI6OnVzdHJp bmcgZ2V0VXNlclByb2ZpbGVQYXRoKCkgY29uc3Q7Ci0rICAgIEdsaWI6OnVzdHJpbmcgZ2V0R2xv YmFsUHJvZmlsZVBhdGgoKSBjb25zdDsKLSsgICAgR2xpYjo6dXN0cmluZyBmaW5kUHJvZmlsZVBh dGggKEdsaWI6OnVzdHJpbmcgJnByb2ZOYW1lKSBjb25zdDsKLSsgICAgYm9vbCBpc19wYXJzZV9l eHRlbnRpb24gKEdsaWI6OnVzdHJpbmcgZm5hbWUpIGNvbnN0OwotKyAgICBib29sIGhhc19yZXRh aW5lZF9leHRlbnRpb24gKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZuYW1lKSBjb25zdDsKLSsgICAg Ym9vbCBpc19uZXdfdmVyc2lvbigpIGNvbnN0OwotKyAgICBib29sIGlzX2V4dGVudGlvbl9lbmFi bGVkIChjb25zdCBHbGliOjp1c3RyaW5nJiBleHQpIGNvbnN0OwotKyAgICBib29sIGlzX2RlZlBy b2ZSYXdNaXNzaW5nKCkgY29uc3Q7Ci0rICAgIGJvb2wgaXNfYnVuZGxlZERlZlByb2ZSYXdNaXNz aW5nKCkgY29uc3Q7Ci0rICAgIGJvb2wgaXNfZGVmUHJvZkltZ01pc3NpbmcoKSBjb25zdDsKLSsg ICAgYm9vbCBpc19idW5kbGVkRGVmUHJvZkltZ01pc3NpbmcoKSBjb25zdDsKLSAgICAgdm9pZCBz ZXREZWZQcm9mUmF3TWlzc2luZyAoYm9vbCB2YWx1ZSk7Ci0gICAgIHZvaWQgc2V0QnVuZGxlZERl ZlByb2ZSYXdNaXNzaW5nIChib29sIHZhbHVlKTsKLSAgICAgdm9pZCBzZXREZWZQcm9mSW1nTWlz c2luZyAoYm9vbCB2YWx1ZSk7Ci0gICAgIHZvaWQgc2V0QnVuZGxlZERlZlByb2ZJbWdNaXNzaW5n IChib29sIHZhbHVlKTsKLSAgICAgc3RhdGljIEdsaWI6OnVzdHJpbmcgZ2V0SUNDUHJvZmlsZUNv cHlyaWdodCgpOwotIH07Ci0tCi0tZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLS1leHRlcm4gR2xp Yjo6dXN0cmluZyBhcmd2MDsKLS1leHRlcm4gR2xpYjo6dXN0cmluZyBhcmd2MTsKLS1leHRlcm4g Ym9vbCBzaW1wbGVFZGl0b3I7Ci0tZXh0ZXJuIGJvb2wgZ2ltcFBsdWdpbjsKLS1leHRlcm4gYm9v bCByZW1vdGU7Ci0tZXh0ZXJuIEdsaWI6OnVzdHJpbmcgdmVyc2lvblN0cmluZzsKLS1leHRlcm4g R2xpYjo6dXN0cmluZyBwYXJhbUZpbGVFeHRlbnNpb247Ci1kaWZmIC0tZ2l0IGEvcnRndWkvcGFy YW1zZWRpdGVkLmNjIGIvcnRndWkvcGFyYW1zZWRpdGVkLmNjCi1pbmRleCBhNWU1YWUxMmUuLjAy OGY2NDkxOCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3BhcmFtc2VkaXRlZC5jYwotKysrIGIvcnRndWkv cGFyYW1zZWRpdGVkLmNjCi1AQCAtODQsNiArODQsOCBAQCB2b2lkIGluaXRGcm9tKEZyYW1pbmdQ YXJhbXNFZGl0ZWQmIGVkaXRzLCBjb25zdCBQcm9jUGFyYW1zJiBwYXJhbXMsIGNvbnN0IFByb2NQ YQotIHZvaWQgY29tYmluZShGcmFtaW5nUGFyYW1zJiB0b0VkaXQsIGNvbnN0IEZyYW1pbmdQYXJh bXMmIG1vZCwgY29uc3QgRnJhbWluZ1BhcmFtc0VkaXRlZCYgZWRpdHMsCi0gICAgICAgICAgICAg IGJvb2wgZG9udEZvcmNlU2V0KQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6 Z2V0KCkub3B0aW9ucygpOwotKwotICAgICBpZiAoZWRpdHMuZW5hYmxlZCkgewotICAgICAgICAg dG9FZGl0LmVuYWJsZWQgPSBtb2QuZW5hYmxlZDsKLSAgICAgfQotQEAgLTI0NjksNiArMjQ3MSw3 IEBAIHZvaWQgUGFyYW1zRWRpdGVkOjppbml0RnJvbShjb25zdCBzdGQ6OnZlY3RvcjxydGVuZ2lu ZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcz4mCi0gCi0gdm9pZCBQYXJhbXNFZGl0ZWQ6OmNvbWJp bmUocnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMmIHRvRWRpdCwgY29uc3QgcnRlbmdp bmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMmIG1vZHMsIGJvb2wgZm9yY2VTZXQpCi0gewotKyAg ICBjb25zdCBPcHRpb25zJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gCi0gICAg IGJvb2wgZG9udGZvcmNlU2V0ID0gIWZvcmNlU2V0OwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3Bk c2hhcnBlbmluZy5jYyBiL3J0Z3VpL3Bkc2hhcnBlbmluZy5jYwotaW5kZXggNTA0NjQ0Mzc4Li4z OTdiODhkMDEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9wZHNoYXJwZW5pbmcuY2MKLSsrKyBiL3J0Z3Vp L3Bkc2hhcnBlbmluZy5jYwotQEAgLTgzLDYgKzgzLDcgQEAgUGRTaGFycGVuaW5nOjpQZFNoYXJw ZW5pbmcoKSA6Ci0gICAgIGRyYWRpdXNPZmZzZXQtPnNldEFkanVzdGVyTGlzdGVuZXIodGhpcyk7 Ci0gICAgIGRpdGVyLT5zZXRBZGp1c3Rlckxpc3RlbmVyKHRoaXMpOwotIAotKyAgICBjb25zdCBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGNvbnRyYXN0LT5zZXRE ZWxheShzdGQ6Om1heChvcHRpb25zLmFkanVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJN YXhEZWxheSkpOwotICAgICBkcmFkaXVzLT5zZXREZWxheShzdGQ6Om1heChvcHRpb25zLmFkanVz dGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSkpOwotICAgICBkcmFkaXVzT2Zm c2V0LT5zZXREZWxheShzdGQ6Om1heChvcHRpb25zLmFkanVzdGVyTWluRGVsYXksIG9wdGlvbnMu YWRqdXN0ZXJNYXhEZWxheSkpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3BsYWNlc2Jyb3dzZXIuY2Mg Yi9ydGd1aS9wbGFjZXNicm93c2VyLmNjCi1pbmRleCAxZjdhNDdmMTUuLmQ4MzY4MDQ4MyAxMDA2 NDQKLS0tLSBhL3J0Z3VpL3BsYWNlc2Jyb3dzZXIuY2MKLSsrKyBiL3J0Z3VpL3BsYWNlc2Jyb3dz ZXIuY2MKLUBAIC0xMDYsNiArMTA2LDcgQEAgdm9pZCBQbGFjZXNCcm93c2VyOjpyZWZyZXNoUGxh Y2VzTGlzdCAoKQotIHsKLSAgICAgcGxhY2VzTW9kZWwtPmNsZWFyICgpOwotIAotKyAgICBjb25z dCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIC8vIGFwcGVuZCBm YXZvcml0ZXMKLSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zLmZhdm9yaXRlRGly cy5zaXplKCk7IGkrKykgewotICAgICAgICAgR2xpYjo6UmVmUHRyPEdpbzo6RmlsZT4gZmF2ID0g R2lvOjpGaWxlOjpjcmVhdGVfZm9yX3BhdGggKG9wdGlvbnMuZmF2b3JpdGVEaXJzW2ldKTsKLUBA IC0zMTQsNiArMzE1LDcgQEAgdm9pZCBQbGFjZXNCcm93c2VyOjphZGRQcmVzc2VkICgpCi0gICAg ICAgICByZXR1cm47Ci0gICAgIH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKTsKLSAgICAgLy8gY2hlY2sgaWYgdGhlIGRpcm5hbWUgaXMgYWxyZWFkeSBp biB0aGUgbGlzdC4gSWYgeWVzLCByZXR1cm4uCi0gICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg b3B0aW9ucy5mYXZvcml0ZURpcnMuc2l6ZSgpOyBpKyspCi0gICAgICAgICBpZiAob3B0aW9ucy5m YXZvcml0ZURpcnNbaV0gPT0gbGFzdFNlbGVjdGVkRGlyKSB7Ci1AQCAtMzQwLDYgKzM0Miw3IEBA IHZvaWQgUGxhY2VzQnJvd3Nlcjo6ZGVsUHJlc3NlZCAoKQotICAgICBHbGliOjpSZWZQdHI8R3Rr OjpUcmVlU2VsZWN0aW9uPiBzZWxlY3Rpb24gPSB0cmVlVmlldy0+Z2V0X3NlbGVjdGlvbigpOwot ICAgICBHdGs6OlRyZWVNb2RlbDo6aXRlcmF0b3IgaXRlciA9IHNlbGVjdGlvbi0+Z2V0X3NlbGVj dGVkKCk7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7 Ci0gICAgIGlmIChpdGVyICYmIGl0ZXItPmdldF92YWx1ZSAocGxhY2VzQ29sdW1ucy50eXBlKSA9 PSA1KSB7Ci0gICAgICAgICBzdGQ6OnZlY3RvcjxHbGliOjp1c3RyaW5nPjo6aXRlcmF0b3IgaSA9 IHN0ZDo6ZmluZCAob3B0aW9ucy5mYXZvcml0ZURpcnMuYmVnaW4oKSwgb3B0aW9ucy5mYXZvcml0 ZURpcnMuZW5kKCksIGl0ZXItPmdldF92YWx1ZSAocGxhY2VzQ29sdW1ucy5yb290KSk7Ci0gCi1k aWZmIC0tZ2l0IGEvcnRndWkvcHJlZmVyZW5jZXMuY2MgYi9ydGd1aS9wcmVmZXJlbmNlcy5jYwot aW5kZXggM2NjMDAzYmIwLi4yOGU2N2RhNWEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9wcmVmZXJlbmNl cy5jYwotKysrIGIvcnRndWkvcHJlZmVyZW5jZXMuY2MKLUBAIC02MCw3ICs2MCw2IEBAIHZvaWQg cGxhY2VTcGluQm94KEd0azo6Q29udGFpbmVyKiB3aGVyZSwgR3RrOjpTcGluQnV0dG9uKiAmc3Bp biwgY29uc3Qgc3RkOjpzdHJpCi0gfQotIH0KLSAKLS1leHRlcm4gR2xpYjo6dXN0cmluZyBhcmd2 MDsKLSBHbGliOjpSZWZQdHI8R3RrOjpDc3NQcm92aWRlcj4gdGhlbWVjc3M7Ci0gR2xpYjo6UmVm UHRyPEd0azo6Q3NzUHJvdmlkZXI+IGZvbnRjc3M7Ci0gCi1AQCAtNzYsOCArNzUsOCBAQCBQcmVm ZXJlbmNlczo6UHJlZmVyZW5jZXMoUlRXaW5kb3cgKnJ0d2luZG93KQotICAgICAsIHRvb2xMb2Nh dGlvblByZWZlcmVuY2UobnVsbHB0cikKLSAgICAgLCBzd0Zhdm9yaXRlcyhudWxscHRyKQotIHsK LS0KLS0gICAgbW9wdGlvbnMuY29weUZyb20oJm9wdGlvbnMpOwotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0rICAgIG1vcHRpb25zLmNvcHlGcm9tKCZB cHA6OmdldCgpLm11dF9vcHRpb25zKCkpOwotIAotICAgICBzZXRfc2l6ZV9yZXF1ZXN0KDY1MCwg LTEpOwotICAgICBzZXRfZGVmYXVsdF9zaXplKG9wdGlvbnMucHJlZmVyZW5jZXNXaWR0aCwgb3B0 aW9ucy5wcmVmZXJlbmNlc0hlaWdodCk7Ci1AQCAtMTQ1LDggKzE0NCw4IEBAIFByZWZlcmVuY2Vz OjpQcmVmZXJlbmNlcyhSVFdpbmRvdyAqcnR3aW5kb3cpCi0gCi0gUHJlZmVyZW5jZXM6On5QcmVm ZXJlbmNlcygpCi0gewotLQotICAgICBQcm9maWxlU3RvcmU6OmdldEluc3RhbmNlKCktPnJlbW92 ZUxpc3RlbmVyKHRoaXMpOwotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpOwotICAgICBnZXRfc2l6ZShvcHRpb25zLnByZWZlcmVuY2VzV2lkdGgsIG9wdGlvbnMu cHJlZmVyZW5jZXNIZWlnaHQpOwotIH0KLSAKLUBAIC0xMjI4LDExICsxMjI3LDExIEBAIEd0azo6 V2lkZ2V0KiBQcmVmZXJlbmNlczo6Z2V0R2VuZXJhbFBhbmVsKCkKLSAgICAgc2V0RXhwYW5kQWxp Z25Qcm9wZXJ0aWVzKGxhbmd1YWdlcywgZmFsc2UsIGZhbHNlLCBHdGs6OkFMSUdOX1NUQVJULCBH dGs6OkFMSUdOX0JBU0VMSU5FKTsKLSAKLSAgICAgc3RkOjp2ZWN0b3I8R2xpYjo6dXN0cmluZz4g bGFuZ3M7Ci0tICAgIHBhcnNlRGlyKGFyZ3YwICsgIi9sYW5ndWFnZXMiLCBsYW5ncywgIiIpOwot KyAgICBwYXJzZURpcihBcHA6OmdldCgpLmFyZ3YwKCkgKyAiL2xhbmd1YWdlcyIsIGxhbmdzLCAi Iik7Ci0gCi0gICAgIGZvciAoY29uc3QgYXV0byAmbGFuZyA6IGxhbmdzKSB7Ci0gICAgICAgICBp ZiAoImRlZmF1bHQiICE9IGxhbmcgJiYgIlJFQURNRSIgIT0gbGFuZyAmJiAiTElDRU5TRSIgIT0g bGFuZykgewotLSAgICAgICAgICAgIGF1dG8gbGFuZ19tZXRhZGF0YSA9IGxhbmdNZ3IuZ2V0TWV0 YWRhdGEoR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAgKyAiL2xhbmd1YWdlcyIsIGxhbmcpKTsK LSsgICAgICAgICAgICBhdXRvIGxhbmdfbWV0YWRhdGEgPSBsYW5nTWdyLmdldE1ldGFkYXRhKEds aWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSArICIvbGFuZ3VhZ2VzIiwgbGFu ZykpOwotICAgICAgICAgICAgIGNvbnN0IGF1dG8gJmRpc3BsYXlfbmFtZSA9Ci0gICAgICAgICAg ICAgICAgIGxhbmdfbWV0YWRhdGEgIT0gbnVsbHB0cgotICAgICAgICAgICAgICAgICAgICAgPyBH bGliOjp1c3RyaW5nKGxhbmdfbWV0YWRhdGEtPmdldExhbmd1YWdlTmFtZShsYW5nKSkKLUBAIC0x MjY1LDcgKzEyNjQsNyBAQCBHdGs6OldpZGdldCogUHJlZmVyZW5jZXM6OmdldEdlbmVyYWxQYW5l bCgpCi0gCi0gICAgIHRoZW1lQ0JUID0gR3RrOjptYW5hZ2UobmV3IEd0azo6Q29tYm9Cb3hUZXh0 KCkpOwotICAgICB0aGVtZUNCVC0+c2V0X2FjdGl2ZSgwKTsKLS0gICAgcGFyc2VUaGVtZURpcihH bGliOjpidWlsZF9maWxlbmFtZShhcmd2MCwgInRoZW1lcyIpKTsKLSsgICAgcGFyc2VUaGVtZURp cihHbGliOjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJ0aGVtZXMiKSk7Ci0g ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGhlbWVOYW1lcy5zaXplKCk7IGkrKykgewotICAg ICAgICAgdGhlbWVDQlQtPmFwcGVuZCh0aGVtZU5hbWVzLmF0KGkpKTsKLSAgICAgfQotQEAgLTEy NzMsNiArMTI3Miw3IEBAIEd0azo6V2lkZ2V0KiBQcmVmZXJlbmNlczo6Z2V0R2VuZXJhbFBhbmVs KCkKLSAgICAgR3RrOjpMYWJlbCogbWFpbkZvbnRMYmwgPSBHdGs6Om1hbmFnZShuZXcgR3RrOjpM YWJlbChNKCJQUkVGRVJFTkNFU19BUFBFQVJBTkNFX01BSU5GT05UIikpKTsKLSAgICAgc2V0RXhw YW5kQWxpZ25Qcm9wZXJ0aWVzKG1haW5Gb250TGJsLCBmYWxzZSwgZmFsc2UsIEd0azo6QUxJR05f U1RBUlQsIEd0azo6QUxJR05fQ0VOVEVSKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBtYWluRm9udEZCID0gR3RrOjptYW5hZ2UobmV3 IEd0azo6Rm9udEJ1dHRvbigpKTsKLSAgICAgbWFpbkZvbnRGQi0+c2V0X3VzZV9zaXplKHRydWUp OwotICAgICBpZiAob3B0aW9ucy5mb250RmFtaWx5ID09ICJkZWZhdWx0IikgewotQEAgLTIxNzIs NiArMjE3Miw3IEBAIHZvaWQgUHJlZmVyZW5jZXM6OmZpbGxQcmVmZXJlbmNlcygpCi0gICAgIG5h dkd1aWRlQ29sb3JDQi0+c2V0X3JnYmEgKE5hdkd1aWRlQ29sKTsKLSAgICAgbmF2R3VpZGVDb2xv ckNCLT5zZXRfYWxwaGEgKCAodW5zaWduZWQgc2hvcnQpIChtb3B0aW9ucy5uYXZHdWlkZUJydXNo WzNdICogNjU1MzUuMCkpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gICAgIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT0gImRlZmF1bHQiKSB7 Ci0gICAgICAgICBtYWluRm9udEZCLT5zZXRfZm9udF9uYW1lIChHbGliOjp1c3RyaW5nOjpjb21w b3NlICgiJTEsICUyIiwgaW5pdGlhbEZvbnRGYW1pbHksIGluaXRpYWxGb250U2l6ZSkpOwotICAg ICB9IGVsc2UgewotQEAgLTIzODksNyArMjM5MCw3IEBAIHZvaWQgUHJlZmVyZW5jZXM6OmxhbmdB dXRvRGV0ZWN0VG9nZ2xlZCgpCi0gCi0gdm9pZCBQcmVmZXJlbmNlczo6b2tQcmVzc2VkKCkKLSB7 Ci0tCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAg IHN0b3JlUHJlZmVyZW5jZXMoKTsKLSAgICAgd29ya2Zsb3dVcGRhdGUoKTsKLSAgICAgb3B0aW9u cy5jb3B5RnJvbSgmbW9wdGlvbnMpOwotQEAgLTI0MDgsNiArMjQwOSw3IEBAIHZvaWQgUHJlZmVy ZW5jZXM6Om9rUHJlc3NlZCgpCi0gCi0gdm9pZCBQcmVmZXJlbmNlczo6Y2FuY2VsUHJlc3NlZCgp Ci0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAg ICAvLyBzZXQgdGhlIGluaXRpYWwgdGhlbWUgYmFjawotICAgICBpZiAodGhlbWVOYW1lcy5hdCAo dGhlbWVDQlQtPmdldF9hY3RpdmVfcm93X251bWJlciAoKSkgIT0gb3B0aW9ucy50aGVtZSkgewot ICAgICAgICAgc3dpdGNoVGhlbWVUbyhvcHRpb25zLnRoZW1lKTsKLUBAIC0yNTA4LDYgKzI1MTAs NyBAQCB2b2lkIFByZWZlcmVuY2VzOjpidW5kbGVkUHJvZmlsZXNDaGFuZ2VkKCkKLSAgICAgcnBj b25uLmJsb2NrKHRydWUpOwotICAgICBpcGNvbm4uYmxvY2sodHJ1ZSk7Ci0gCi0rICAgIGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIC8vIHBhcnNlUHJvZmls ZXMgZG9lcyB1c2Ugb3B0aW9ucy51c2VCdW5kbGVkUHJvZmlsZXMsIHNvIHdlIHRlbXBvcmFyaWx5 IGNoYW5nZSBpdHMgdmFsdWUKLSAgICAgYm9vbCBjdXJyVmFsdWUgPSBvcHRpb25zLnVzZUJ1bmRs ZWRQcm9maWxlczsKLSAgICAgb3B0aW9ucy51c2VCdW5kbGVkUHJvZmlsZXMgPSB1c2VCdW5kbGVk UHJvZmlsZXMtPmdldF9hY3RpdmUoKTsKLUBAIC0yNTgxLDcgKzI1ODQsNyBAQCB2b2lkIFByZWZl cmVuY2VzOjpyZXN0b3JlVmFsdWUoKQotIHZvaWQgUHJlZmVyZW5jZXM6OnN3aXRjaFRoZW1lVG8o R2xpYjo6dXN0cmluZyBuZXdUaGVtZSkKLSB7Ci0gCi0tICAgIEdsaWI6OnVzdHJpbmcgZmlsZW5h bWUoR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJ0aGVtZXMiLCBuZXdUaGVtZSArICIuY3Nz IikpOwotKyAgICBHbGliOjp1c3RyaW5nIGZpbGVuYW1lKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFw cDo6Z2V0KCkuYXJndjAoKSwgInRoZW1lcyIsIG5ld1RoZW1lICsgIi5jc3MiKSk7Ci0gCi0gICAg IGlmICghdGhlbWVjc3MpIHsKLSAgICAgICAgIHRoZW1lY3NzID0gR3RrOjpDc3NQcm92aWRlcjo6 Y3JlYXRlKCk7Ci1AQCAtMjYzNSw2ICsyNjM4LDcgQEAgdm9pZCBQcmVmZXJlbmNlczo6c3dpdGNo Rm9udFRvKGNvbnN0IEdsaWI6OnVzdHJpbmcgJm5ld0ZvbnRGYW1pbHksIGNvbnN0IGludCBuZXcK LSAKLSB2b2lkIFByZWZlcmVuY2VzOjp3b3JrZmxvd1VwZGF0ZSgpCi0gewotKyAgICBjb25zdCBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gCi0gICAgIGlmIChtb3B0aW9u cy50YWJiZWRVSSAhPSBvcHRpb25zLnRhYmJlZFVJKSB7Ci0gICAgICAgICBwYXJlbnQtPnNldEVk aXRvck1vZGUobW9wdGlvbnMudGFiYmVkVUkpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3ByZXByb2Nl c3MuY2MgYi9ydGd1aS9wcmVwcm9jZXNzLmNjCi1pbmRleCA1MDdjZTY2ODEuLjQ0NGE4NjhjOSAx MDA2NDQKLS0tLSBhL3J0Z3VpL3ByZXByb2Nlc3MuY2MKLSsrKyBiL3J0Z3VpL3ByZXByb2Nlc3Mu Y2MKLUBAIC0zMCw3ICszMCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTo6cHJvY3BhcmFt czsKLSAKLSBjb25zdCBHbGliOjp1c3RyaW5nIFByZVByb2Nlc3M6OlRPT0xfTkFNRSA9ICJwcmVw cm9jZXNzIjsKLSAKLS1QcmVQcm9jZXNzOjpQcmVQcm9jZXNzICgpIDogRm9sZGFibGVUb29sUGFu ZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9QUkVQUk9DRVNTX0xBQkVMIiksIG9wdGlvbnMucHJl dmRlbW8gIT0gUERfU2lkZWNhcikKLStQcmVQcm9jZXNzOjpQcmVQcm9jZXNzICgpIDogRm9sZGFi bGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9QUkVQUk9DRVNTX0xBQkVMIiksIEFw cDo6Z2V0KCkub3B0aW9ucygpLnByZXZkZW1vICE9IFBEX1NpZGVjYXIpCi0gewotIAotICAgICBH dGs6OkJveCogaG90ZGVhZFBpeGVsID0gR3RrOjptYW5hZ2UoIG5ldyBHdGs6OkJveCAoKSApOwot QEAgLTQ4LDYgKzQ4LDcgQEAgUHJlUHJvY2Vzczo6UHJlUHJvY2VzcyAoKSA6IEZvbGRhYmxlVG9v bFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUFJFUFJPQ0VTU18KLSAgICAgaGRUaHJlc2hv bGQtPnNldF90b29sdGlwX21hcmt1cCAoTSgiVFBfUkFXX0hEX1RPT0xUSVAiKSk7Ci0gICAgIGhk VGhyZXNob2xkLT5zZXRBZGp1c3Rlckxpc3RlbmVyICh0aGlzKTsKLSAKLSsgICAgY29uc3QgYXV0 byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBoZFRocmVzaG9sZC0+c2V0 RGVsYXkoc3RkOjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVy TWF4RGVsYXkpKTsKLSAKLSAgICAgaGRUaHJlc2hvbGQtPnNob3coKTsKLWRpZmYgLS1naXQgYS9y dGd1aS9wcmV2aWV3bW9kZXBhbmVsLmNjIGIvcnRndWkvcHJldmlld21vZGVwYW5lbC5jYwotaW5k ZXggMjUxNjdhZTNiLi42NzI5ZGQzZmYgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9wcmV2aWV3bW9kZXBh bmVsLmNjCi0rKysgYi9ydGd1aS9wcmV2aWV3bW9kZXBhbmVsLmNjCi1AQCAtMzMsNiArMzMsNyBA QCBQcmV2aWV3TW9kZVBhbmVsOjpQcmV2aWV3TW9kZVBhbmVsIChJbWFnZUFyZWEqIGlhKSA6Ci0g ICAgIG5CQzIoInNxdWFyZS10b2dnbGUtd2hpdGUtb24tbmFycm93IiksIG5nQkMyKCJzcXVhcmUt dG9nZ2xlLXdoaXRlLW9mZi1uYXJyb3ciKSwKLSAgICAgbkJDMygic3F1YXJlLXRvZ2dsZS1ncmF5 LW9uLW5hcnJvdyIpLCBuZ0JDMygic3F1YXJlLXRvZ2dsZS1ncmF5LW9mZi1uYXJyb3ciKQotIHsK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBi YWNrQ29sb3IwID0gR3RrOjptYW5hZ2UgKG5ldyBHdGs6OlRvZ2dsZUJ1dHRvbiAoKSk7Ci0gICAg IGJhY2tDb2xvcjAtPmdldF9zdHlsZV9jb250ZXh0KCktPmFkZF9jbGFzcygibmFycm93YnV0dG9u Iik7Ci0gICAgIGJhY2tDb2xvcjAtPnNldF9yZWxpZWYoR3RrOjpSRUxJRUZfTk9ORSk7Ci1kaWZm IC0tZ2l0IGEvcnRndWkvcHJldmlld3dpbmRvdy5jYyBiL3J0Z3VpL3ByZXZpZXd3aW5kb3cuY2MK LWluZGV4IDkyYmI3MWE3OC4uMDFhYzYzOGQ1IDEwMDY0NAotLS0tIGEvcnRndWkvcHJldmlld3dp bmRvdy5jYwotKysrIGIvcnRndWkvcHJldmlld3dpbmRvdy5jYwotQEAgLTkxLDYgKzkxLDcgQEAg dm9pZCBQcmV2aWV3V2luZG93Ojp1cGRhdGVQcmV2aWV3SW1hZ2UgKCkKLSAKLSAgICAgICAgICAg ICBpZiAocHJldmlld0hhbmRsZXItPmdldENyb3BQYXJhbXMoKS5lbmFibGVkKSB7Ci0gICAgICAg ICAgICAgICAgIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpDcm9wUGFyYW1zIGNwYXJhbXMgPSBwcmV2 aWV3SGFuZGxlci0+Z2V0Q3JvcFBhcmFtcygpOwotKyAgICAgICAgICAgICAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICAgICAgICAgIHN3aXRj aCAob3B0aW9ucy5jcm9wR3VpZGVzKSB7Ci0gICAgICAgICAgICAgICAgIGNhc2UgT3B0aW9uczo6 Q1JPUF9HVUlERV9OT05FOgotICAgICAgICAgICAgICAgICAgICAgY3BhcmFtcy5ndWlkZSA9IHJ0 ZW5naW5lOjpwcm9jcGFyYW1zOjpDcm9wUGFyYW1zOjpHdWlkZTo6Tk9ORTsKLUBAIC0xNjksNiAr MTcwLDcgQEAgYm9vbCBQcmV2aWV3V2luZG93Ojpvbl9kcmF3KGNvbnN0IDo6Q2Fpcm86OlJlZlB0 cjwgQ2Fpcm86OkNvbnRleHQ+ICZjcikKLSAgICAgICAgICAgICBjci0+cmVjdGFuZ2xlIChyZWN0 WCArIDEuICogcywgcmVjdFkgKyAxLiAqIHMsIHJlY3RXIC0gMi4gKiBzLCByZWN0SCAtIDIuICog cyk7Ci0gICAgICAgICAgICAgY3ItPnN0cm9rZSAoKTsKLSAKLSsgICAgICAgICAgICBjb25zdCBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICAgICAgLy8gZHJh dyBhICJmcmFtZSIgbGluZS4gQ29sb3Igb2YgZnJhbWUgbGluZSBjYW4gYmUgc2V0IGluIHByZWZl cmVuY2VzCi0gICAgICAgICAgICAgY3ItPnNldF9zb3VyY2VfcmdiYShvcHRpb25zLm5hdkd1aWRl QnJ1c2hbMF0sIG9wdGlvbnMubmF2R3VpZGVCcnVzaFsxXSwgb3B0aW9ucy5uYXZHdWlkZUJydXNo WzJdLCBvcHRpb25zLm5hdkd1aWRlQnJ1c2hbM10pOyAvLyggMS4wLCAxLjAsIDEuMCwgMS4wKTsK LSAgICAgICAgICAgICBjci0+cmVjdGFuZ2xlIChyZWN0WCwgcmVjdFksIHJlY3RXLCByZWN0SCk7 Ci1kaWZmIC0tZ2l0IGEvcnRndWkvcHJvZmlsZXBhbmVsLmNjIGIvcnRndWkvcHJvZmlsZXBhbmVs LmNjCi1pbmRleCAxYmI1NjdjYjMuLjIzMDNhMjY1MyAxMDA2NDQKLS0tLSBhL3J0Z3VpL3Byb2Zp bGVwYW5lbC5jYwotKysrIGIvcnRndWkvcHJvZmlsZXBhbmVsLmNjCi1AQCAtNDcsMTMgKzQ3LDEz IEBAIHZvaWQgUHJvZmlsZVBhbmVsOjpjbGVhbnVwICgpCi0gCi0gUHJvZmlsZVBhbmVsOjpQcm9m aWxlUGFuZWwgKCkgOiBzdG9yZWRQUHJvZmlsZShudWxscHRyKSwKLSAgICAgbW9kZU9uKCJwcm9m aWxlLWZpbGxlZCIpLCBtb2RlT2ZmKCJwcm9maWxlLXBhcnRpYWwiKSwKLS0gICAgcHJvZmlsZUZp bGxJbWFnZShHdGs6Om1hbmFnZShuZXcgUlRJbWFnZShvcHRpb25zLmZpbGxlZFByb2ZpbGUgPyBt b2RlT24gOiBtb2RlT2ZmLCBHdGs6OklDT05fU0laRV9MQVJHRV9UT09MQkFSKSkpLAotKyAgICBw cm9maWxlRmlsbEltYWdlKEd0azo6bWFuYWdlKG5ldyBSVEltYWdlKEFwcDo6Z2V0KCkub3B0aW9u cygpLmZpbGxlZFByb2ZpbGUgPyBtb2RlT24gOiBtb2RlT2ZmLCBHdGs6OklDT05fU0laRV9MQVJH RV9UT09MQkFSKSkpLAotICAgICBsYXN0U2F2ZWRQU0UobnVsbHB0ciksIGN1c3RvbVBTRShudWxs cHRyKQotIHsKLSAgICAgdHBjID0gbnVsbHB0cjsKLSAKLSAgICAgZmlsbE1vZGUgPSBHdGs6Om1h bmFnZSAobmV3IEd0azo6VG9nZ2xlQnV0dG9uKCkpOwotLSAgICBmaWxsTW9kZS0+c2V0X2FjdGl2 ZShvcHRpb25zLmZpbGxlZFByb2ZpbGUpOwotKyAgICBmaWxsTW9kZS0+c2V0X2FjdGl2ZShBcHA6 OmdldCgpLm9wdGlvbnMoKS5maWxsZWRQcm9maWxlKTsKLSAgICAgZmlsbE1vZGUtPmFkZCgqcHJv ZmlsZUZpbGxJbWFnZSk7Ci0gICAgIGZpbGxNb2RlLT5zaWduYWxfdG9nZ2xlZCgpLmNvbm5lY3Qg KCBzaWdjOjptZW1fZnVuKCp0aGlzLCAmUHJvZmlsZVBhbmVsOjpwcm9maWxlRmlsbE1vZGVUb2dn bGVkKSApOwotICAgICBmaWxsTW9kZS0+c2V0X3Rvb2x0aXBfdGV4dChNKCJQUk9GSUxFUEFORUxf TU9ERV9UT09MVElQIikpOwotQEAgLTMxMSw2ICszMTEsNyBAQCB2b2lkIFByb2ZpbGVQYW5lbDo6 c2F2ZV9jbGlja2VkIChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi0gICAgICAgICB9Ci0gICAgIH0K LSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAg R3RrOjpGaWxlQ2hvb3NlckRpYWxvZyBkaWFsb2coZ2V0VG9wbGV2ZWxXaW5kb3codGhpcyksIE0o IlBST0ZJTEVQQU5FTF9TQVZFRExHTEFCRUwiKSwgR3RrOjpGSUxFX0NIT09TRVJfQUNUSU9OX1NB VkUpOwotICAgICBiaW5kQ3VycmVudEZvbGRlcihkaWFsb2csIG9wdGlvbnMubG9hZFNhdmVQcm9m aWxlUGF0aCk7Ci0gICAgIGRpYWxvZy5zZXRfY3VycmVudF9uYW1lKGxhc3RGaWxlbmFtZSk7Ci1A QCAtMzMyLDcgKzMzMyw3IEBAIHZvaWQgUHJvZmlsZVBhbmVsOjpzYXZlX2NsaWNrZWQgKEdka0V2 ZW50QnV0dG9uKiBldmVudCkKLSAgICAgLy9BZGQgZmlsdGVycywgc28gdGhhdCBvbmx5IGNlcnRh aW4gZmlsZSB0eXBlcyBjYW4gYmUgc2VsZWN0ZWQ6Ci0gICAgIGF1dG8gZmlsdGVyX3BwID0gR3Rr OjpGaWxlRmlsdGVyOjpjcmVhdGUoKTsKLSAgICAgZmlsdGVyX3BwLT5zZXRfbmFtZShNKCJGSUxF Q0hPT1NFUl9GSUxURVJfUFAiKSk7Ci0tICAgIGZpbHRlcl9wcC0+YWRkX3BhdHRlcm4oIioiICsg cGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsgICAgZmlsdGVyX3BwLT5hZGRfcGF0dGVybigiKiIgKyBB cHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgZGlhbG9nLmFkZF9maWx0ZXIoZmlsdGVy X3BwKTsKLSAKLSAgICAgYXV0byBmaWx0ZXJfYW55ID0gR3RrOjpGaWxlRmlsdGVyOjpjcmVhdGUo KTsKLUBAIC0zNTQsOCArMzU1LDggQEAgdm9pZCBQcm9maWxlUGFuZWw6OnNhdmVfY2xpY2tlZCAo R2RrRXZlbnRCdXR0b24qIGV2ZW50KQotIAotICAgICAgICAgICAgIGF1dG8gZm5hbWUgPSBkaWFs b2cuZ2V0X2ZpbGVuYW1lKCk7Ci0gCi0tICAgICAgICAgICAgaWYgKCgiLiIgKyBnZXRFeHRlbnNp b24oZm5hbWUpKSAhPSBwYXJhbUZpbGVFeHRlbnNpb24pIHsKLS0gICAgICAgICAgICAgICAgZm5h bWUgKz0gcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAgICAgICAgICAgIGlmICgoIi4iICsgZ2V0RXh0 ZW5zaW9uKGZuYW1lKSkgIT0gQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTikgewotKyAgICAgICAg ICAgICAgICBmbmFtZSArPSBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OOwotICAgICAgICAgICAg IH0KLSAKLSAgICAgICAgICAgICBpZiAoIWNvbmZpcm1PdmVyd3JpdGUoZGlhbG9nLCBmbmFtZSkp IHsKLUBAIC00NjcsNiArNDY4LDcgQEAgdm9pZCBQcm9maWxlUGFuZWw6OmxvYWRfY2xpY2tlZCAo R2RrRXZlbnRCdXR0b24qIGV2ZW50KQotICAgICB9Ci0gCi0gICAgIEd0azo6RmlsZUNob29zZXJE aWFsb2cgZGlhbG9nIChnZXRUb3BsZXZlbFdpbmRvdyAodGhpcyksIE0oIlBST0ZJTEVQQU5FTF9M T0FERExHTEFCRUwiKSwgR3RrOjpGSUxFX0NIT09TRVJfQUNUSU9OX09QRU4pOwotKyAgICBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBiaW5kQ3VycmVudEZv bGRlciAoZGlhbG9nLCBvcHRpb25zLmxvYWRTYXZlUHJvZmlsZVBhdGgpOwotIAotICAgICAvL0Fk ZCB0aGUgdXNlcidzIGRlZmF1bHQgKG9yIGdsb2JhbCBpZiBtdWx0aXVzZXI9ZmFsc2UpIHByb2Zp bGUgcGF0aCB0byB0aGUgU2hvcnRjdXQgbGlzdAotQEAgLTQ4Niw3ICs0ODgsNyBAQCB2b2lkIFBy b2ZpbGVQYW5lbDo6bG9hZF9jbGlja2VkIChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi0gICAgIC8v QWRkIGZpbHRlcnMsIHNvIHRoYXQgb25seSBjZXJ0YWluIGZpbGUgdHlwZXMgY2FuIGJlIHNlbGVj dGVkOgotICAgICBHbGliOjpSZWZQdHI8R3RrOjpGaWxlRmlsdGVyPiBmaWx0ZXJfcHAgPSBHdGs6 OkZpbGVGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICBmaWx0ZXJfcHAtPnNldF9uYW1lKE0oIkZJTEVD SE9PU0VSX0ZJTFRFUl9QUCIpKTsKLS0gICAgZmlsdGVyX3BwLT5hZGRfcGF0dGVybigiKiIgKyBw YXJhbUZpbGVFeHRlbnNpb24pOwotKyAgICBmaWx0ZXJfcHAtPmFkZF9wYXR0ZXJuKCIqIiArIEFw cDo6UEFSQU1fRklMRV9FWFRFTlNJT04pOwotICAgICBkaWFsb2cuYWRkX2ZpbHRlcihmaWx0ZXJf cHApOwotIAotICAgICBHbGliOjpSZWZQdHI8R3RrOjpGaWxlRmlsdGVyPiBmaWx0ZXJfYW55ID0g R3RrOjpGaWxlRmlsdGVyOjpjcmVhdGUoKTsKLUBAIC05MDMsNyArOTA1LDcgQEAgdm9pZCBQcm9m aWxlUGFuZWw6OmluaXRQcm9maWxlIChjb25zdCBHbGliOjp1c3RyaW5nJiBwcm9maWxlRnVsbFBh dGgsIFByb2NQYXJhbXMKLSAKLSB2b2lkIFByb2ZpbGVQYW5lbDo6c2V0SW5pdGlhbEZpbGVOYW1l IChjb25zdCBHbGliOjp1c3RyaW5nJiBmaWxlbmFtZSkKLSB7Ci0tICAgIGxhc3RGaWxlbmFtZSA9 IEdsaWI6OnBhdGhfZ2V0X2Jhc2VuYW1lKGZpbGVuYW1lKSArIHBhcmFtRmlsZUV4dGVuc2lvbjsK LSsgICAgbGFzdEZpbGVuYW1lID0gR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUoZmlsZW5hbWUpICsg QXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTjsKLSAgICAgaW1hZ2VQYXRoID0gR2xpYjo6cGF0aF9n ZXRfZGlybmFtZShmaWxlbmFtZSk7Ci0gfQotIAotQEAgLTkyMCw2ICs5MjIsNiBAQCB2b2lkIFBy b2ZpbGVQYW5lbDo6cHJvZmlsZUZpbGxNb2RlVG9nZ2xlZCgpCi0gCi0gdm9pZCBQcm9maWxlUGFu ZWw6OndyaXRlT3B0aW9ucygpCi0gewotLSAgICBvcHRpb25zLmZpbGxlZFByb2ZpbGUgPSBmaWxs TW9kZS0+Z2V0X2FjdGl2ZSgpOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkuZmlsbGVk UHJvZmlsZSA9IGZpbGxNb2RlLT5nZXRfYWN0aXZlKCk7Ci0gfQotIAotZGlmZiAtLWdpdCBhL3J0 Z3VpL3Byb2ZpbGVzdG9yZWNvbWJvYm94LmNjIGIvcnRndWkvcHJvZmlsZXN0b3JlY29tYm9ib3gu Y2MKLWluZGV4IDBlYWYwODJkMi4uYzdmOTlkODUzIDEwMDY0NAotLS0tIGEvcnRndWkvcHJvZmls ZXN0b3JlY29tYm9ib3guY2MKLSsrKyBiL3J0Z3VpL3Byb2ZpbGVzdG9yZWNvbWJvYm94LmNjCi1A QCAtNjksNyArNjksNyBAQCB2b2lkIFByb2ZpbGVTdG9yZUNvbWJvQm94OjpyZWZyZXNoUHJvZmls ZUxpc3RfIChHdGs6OlRyZWVNb2RlbDo6Um93ICpwYXJlbnRSb3csCi0gICAgICAgICAgICAgaWYg KGVudHJ5LT50eXBlID09IFBTRVRfRk9MREVSKSB7Ci0gICAgICAgICAgICAgICAgIEdsaWI6OnVz dHJpbmcgZm9sZGVyUGF0aCAoIFByb2ZpbGVTdG9yZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0UGF0aEZy b21JZCAoZW50cnktPmZvbGRlcklkKSApOwotIAotLSAgICAgICAgICAgICAgICBpZiAob3B0aW9u cy51c2VCdW5kbGVkUHJvZmlsZXMgfHwgKChmb2xkZXJQYXRoICE9ICIke0d9IiApICYmIChmb2xk ZXJQYXRoICE9ICIke1V9IiApKSkgewotKyAgICAgICAgICAgICAgICBpZiAoQXBwOjpnZXQoKS5v cHRpb25zKCkudXNlQnVuZGxlZFByb2ZpbGVzIHx8ICgoZm9sZGVyUGF0aCAhPSAiJHtHfSIgKSAm JiAoZm9sZGVyUGF0aCAhPSAiJHtVfSIgKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgIC8vIGNy ZWF0aW5nIHRoZSBuZXcgc3VibWVudQotICAgICAgICAgICAgICAgICAgICAgR3RrOjpUcmVlTW9k ZWw6OlJvdyBuZXdTdWJNZW51OwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3Jhd2NhY29ycmVjdGlv bi5jYyBiL3J0Z3VpL3Jhd2NhY29ycmVjdGlvbi5jYwotaW5kZXggMjI4OGMxYjJmLi5kMmZkN2Vm M2UgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9yYXdjYWNvcnJlY3Rpb24uY2MKLSsrKyBiL3J0Z3VpL3Jh d2NhY29ycmVjdGlvbi5jYwotQEAgLTQ5LDYgKzQ5LDcgQEAgUkFXQ0FDb3JyOjpSQVdDQUNvcnIg KCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1JBV0NBQ09SUl9M QUIKLSAgICAgY2FBdXRvaXRlcmF0aW9ucy0+c2V0QWRqdXN0ZXJMaXN0ZW5lciAodGhpcyk7Ci0g ICAgIGNhQXV0b2l0ZXJhdGlvbnMtPnNldF90b29sdGlwX21hcmt1cChNKCJUUF9SQVdDQUNPUlJf QVVUT0lUX1RPT0xUSVAiKSk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAgICAgY2FBdXRvaXRlcmF0aW9ucy0+c2V0RGVsYXkoc3RkOjptYXgo b3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkpKTsKLSAK LSAgICAgY2FSZWQgPSBHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIgKE0oIlRQX1JBV0NBQ09SUl9D QVJFRCIpLCAtNC4wLCA0LjAsIDAuMSwgMCwgaWNhcmVkTCwgaWNhcmVkUikpOwotZGlmZiAtLWdp dCBhL3J0Z3VpL3Jhd2V4cG9zdXJlLmNjIGIvcnRndWkvcmF3ZXhwb3N1cmUuY2MKLWluZGV4IDI2 ZjJkYmE3NC4uYjk3MGYwYWYyIDEwMDY0NAotLS0tIGEvcnRndWkvcmF3ZXhwb3N1cmUuY2MKLSsr KyBiL3J0Z3VpL3Jhd2V4cG9zdXJlLmNjCi1AQCAtMzUsNiArMzUsNyBAQCBSQVdFeHBvc3VyZTo6 UkFXRXhwb3N1cmUgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQ X0VYUE9TX1dISQotICAgICBQZXhQb3MgPSBHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIgKE0oIlRQ X1JBV0VYUE9TX0xJTkVBUiIpLCAwLjEsIDE2LjAsIDAuMDEsIDEpKTsKLSAgICAgUGV4UG9zLT5z ZXRBZGp1c3Rlckxpc3RlbmVyICh0aGlzKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBQZXhQb3MtPnNldERlbGF5KHN0ZDo6bWF4KG9w dGlvbnMuYWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSk7Ci0gCi0g ICAgIFBleFBvcy0+c2hvdygpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3JlY2VudGJyb3dzZXIuY2Mg Yi9ydGd1aS9yZWNlbnRicm93c2VyLmNjCi1pbmRleCA5ZDNjYzFmMTIuLjk3MWIxOTBiYyAxMDA2 NDQKLS0tLSBhL3J0Z3VpL3JlY2VudGJyb3dzZXIuY2MKLSsrKyBiL3J0Z3VpL3JlY2VudGJyb3dz ZXIuY2MKLUBAIC0zMiw2ICszMiw3IEBAIFJlY2VudEJyb3dzZXI6OlJlY2VudEJyb3dzZXIgKCkK LSAgICAgZnJhbWUtPnNldF9sYWJlbF9hbGlnbigwLjAyNSwgMC41KTsKLSAgICAgZnJhbWUtPmFk ZCAoKnJlY2VudERpcnMpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zLnJlY2VudEZv bGRlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgIHJlY2VudERpcnMtPmFwcGVuZCAob3B0aW9u cy5yZWNlbnRGb2xkZXJzW2ldKTsKLSAgICAgfQotQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBSZWNl bnRCcm93c2VyOjpzZWxlY3Rpb25DaGFuZ2VkICgpCi0gCi0gdm9pZCBSZWNlbnRCcm93c2VyOjpk aXJTZWxlY3RlZCAoY29uc3QgR2xpYjo6dXN0cmluZyYgZGlybmFtZSwgY29uc3QgR2xpYjo6dXN0 cmluZyYgb3BlbmZpbGUpCi0gewotLQotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5t dXRfb3B0aW9ucygpOwotICAgICBzc2l6ZV90IG51bUZvbGRlcnMgPSBvcHRpb25zLnJlY2VudEZv bGRlcnMuc2l6ZSgpOwotICAgICBzc2l6ZV90IGkgPSAtMTsKLSAKLWRpZmYgLS1naXQgYS9ydGd1 aS9yZXRpbmV4LmNjIGIvcnRndWkvcmV0aW5leC5jYwotaW5kZXggNzNiNWU4MTljLi4wNzAyNjMy ZTcgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9yZXRpbmV4LmNjCi0rKysgYi9ydGd1aS9yZXRpbmV4LmNj Ci1AQCAtMTYyLDYgKzE2Miw4IEBAIFJldGluZXg6OlJldGluZXggKCkgOiBGb2xkYWJsZVRvb2xQ YW5lbCAodGhpcywgVE9PTF9OQU1FLCBNICgiVFBfUkVUSU5FWF9MQUJFTCIpCi0gICAgIG1hc2tH cmlkLT5hdHRhY2ggKCptYXBncmlkLCAwLCAwLCAxLCAxKTsKLSAgICAgbWFwZ3JpZC0+c2hvdygp OwotIAotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotKwot ICAgICAvLyBNYXAgRXF1YWxpemVyCi0gICAgIGN1cnZlRWRpdG9ybWFwID0gbmV3IEN1cnZlRWRp dG9yR3JvdXAgKG9wdGlvbnMubGFzdFJldGluZXhEaXIsIE0gKCJUUF9SRVRJTkVYX0NPTlRFRElU X01BUCIpKTsKLSAgICAgc2V0RXhwYW5kQWxpZ25Qcm9wZXJ0aWVzIChjdXJ2ZUVkaXRvcm1hcCwg dHJ1ZSwgZmFsc2UsIEd0azo6QUxJR05fRklMTCwgR3RrOjpBTElHTl9TVEFSVCk7Ci1kaWZmIC0t Z2l0IGEvcnRndWkvcmdiY3VydmVzLmNjIGIvcnRndWkvcmdiY3VydmVzLmNjCi1pbmRleCBjOGI1 MWI3MGIuLmMyNjNkMjdkNiAxMDA2NDQKLS0tLSBhL3J0Z3VpL3JnYmN1cnZlcy5jYwotKysrIGIv cnRndWkvcmdiY3VydmVzLmNjCi1AQCAtNDYsNiArNDYsNyBAQCBSR0JDdXJ2ZXM6OlJHQkN1cnZl cyAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUkdCQ1VSVkVT X0xBQgotIAotICAgICBzdGQ6OnZlY3RvcjxHcmFkaWVudE1pbGVzdG9uZT4gbWlsZXN0b25lczsK LSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAg Y3VydmVFZGl0b3JHID0gbmV3IEN1cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdFJnYkN1cnZl c0RpciwgTSgiVFBfUkdCQ1VSVkVTX0NIQU5ORUwiKSk7Ci0gICAgIGN1cnZlRWRpdG9yRy0+c2V0 Q3VydmVMaXN0ZW5lciAodGhpcyk7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkvcnRzY2FsYWJsZS5j YyBiL3J0Z3VpL3J0c2NhbGFibGUuY2MKLWluZGV4IGJiMjk5MWM1MS4uYmZiZjdiMmZiIDEwMDY0 NAotLS0tIGEvcnRndWkvcnRzY2FsYWJsZS5jYwotKysrIGIvcnRndWkvcnRzY2FsYWJsZS5jYwot QEAgLTIzLDExICsyMywxMCBAQAotICNpbmNsdWRlIDxpb3N0cmVhbT4KLSAjaW5jbHVkZSA8bGli cnN2Zy9yc3ZnLmg+Ci0gCi0rI2luY2x1ZGUgInJ0ZW5naW5lL3J0YXBwLmgiCi0gI2luY2x1ZGUg InJ0ZW5naW5lL3NldHRpbmdzLmgiCi0gI2luY2x1ZGUgImd1aXV0aWxzLmgiCi0gCi0tZXh0ZXJu IEdsaWI6OnVzdHJpbmcgYXJndjA7Ci0tCi0gLy8gRGVmYXVsdCBzdGF0aWMgcGFyYW1ldGVyIHZh bHVlcwotIGRvdWJsZSBSVFNjYWxhYmxlOjpkcGkgPSA5Ni47Ci0gaW50IFJUU2NhbGFibGU6OnNj YWxlID0gMTsKLUBAIC0xMTksNyArMTE4LDcgQEAgQ2Fpcm86OlJlZlB0cjxDYWlybzo6SW1hZ2VT dXJmYWNlPiBSVFNjYWxhYmxlOjpsb2FkU3VyZmFjZUZyb21QTkcoY29uc3QgR2xpYjo6dXMKLSAg ICAgICAgIHBhdGggPSBmbmFtZTsKLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIC8vIExvb2sgZm9y IFBORyBmaWxlIGluICJpbWFnZXMiIGZvbGRlcgotLSAgICAgICAgR2xpYjo6dXN0cmluZyBpbWFn ZXNGb2xkZXIgPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2MCwgImltYWdlcyIpOwotKyAgICAg ICAgR2xpYjo6dXN0cmluZyBpbWFnZXNGb2xkZXIgPSBHbGliOjpidWlsZF9maWxlbmFtZShBcHA6 OmdldCgpLmFyZ3YwKCksICJpbWFnZXMiKTsKLSAgICAgICAgIHBhdGggPSBHbGliOjpidWlsZF9m aWxlbmFtZShpbWFnZXNGb2xkZXIsIGZuYW1lKTsKLSAgICAgfQotIAotQEAgLTE0Niw3ICsxNDUs NyBAQCBDYWlybzo6UmVmUHRyPENhaXJvOjpJbWFnZVN1cmZhY2U+IFJUU2NhbGFibGU6OmxvYWRT dXJmYWNlRnJvbVNWRyhjb25zdCBHbGliOjp1cwotICAgICAgICAgcGF0aCA9IGZuYW1lOwotICAg ICB9IGVsc2UgewotICAgICAgICAgLy8gTG9vayBmb3IgU1ZHIGZpbGUgaW4gImltYWdlcyIgZm9s ZGVyCi0tICAgICAgICBHbGliOjp1c3RyaW5nIGltYWdlc0ZvbGRlciA9IEdsaWI6OmJ1aWxkX2Zp bGVuYW1lKGFyZ3YwLCAiaW1hZ2VzIik7Ci0rICAgICAgICBHbGliOjp1c3RyaW5nIGltYWdlc0Zv bGRlciA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgImltYWdlcyIp OwotICAgICAgICAgcGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGltYWdlc0ZvbGRlciwgZm5h bWUpOwotICAgICB9Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkvcnR3aW5kb3cuY2MgYi9ydGd1aS9y dHdpbmRvdy5jYwotaW5kZXggOGVjYWExMTg0Li44NGY1NjJiM2UgMTAwNzU1Ci0tLS0gYS9ydGd1 aS9ydHdpbmRvdy5jYwotKysrIGIvcnRndWkvcnR3aW5kb3cuY2MKLUBAIC03NCw3ICs3NCw3IEBA IG9zeF9vcGVuX2ZpbGVfY2IgKEd0a29zeEFwcGxpY2F0aW9uICphcHAsIGdjaGFyICpwYXRoXywg Z3BvaW50ZXIgZGF0YSkKLSB7Ci0gICAgIFJUV2luZG93ICpydFdpbiA9IHN0YXRpY19jYXN0PFJU V2luZG93Kj4oZGF0YSk7Ci0gCi0tICAgIGlmICghYXJndjEuZW1wdHkoKSkgewotKyAgICBpZiAo IUFwcDo6Z2V0KCkuYXJndjEoKS5lbXB0eSgpKSB7Ci0gICAgICAgICAvLyBza2lwIGhhbmRsaW5n IGlmIHdlIGhhdmUgYSBmaWxlIGFyZ3VtZW50IG9yIGVsc2Ugd2UgZ2V0IGRvdWJsZSBvcGVuIG9m IHNhbWUgZmlsZQotICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICB9Ci1AQCAtMTA3LDYgKzEw Nyw3IEBAIFJUV2luZG93OjpSVFdpbmRvdyAoKQotICAgICAvLyAtLS0tLS0tIGxvYWRpbmcgdGhl bWUgZmlsZXMKLSAKLSAgICAgR2xpYjo6UmVmUHRyPEdkazo6U2NyZWVuPiBzY3JlZW4gPSBHZGs6 OlNjcmVlbjo6Z2V0X2RlZmF1bHQoKTsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKTsKLSAKLSAgICAgaWYgKHNjcmVlbikgewotICAgICAgICAgLy8gU2V0dGlu ZyBkZWZhdWx0IHRoZW1lIGFuZCBpY29uIHRoZW1lIChiYXNlcyBmb3IgY3VzdG9tIHRoZW1lcykK LUBAIC0xMTksMTAgKzEyMCwxMCBAQCBSVFdpbmRvdzo6UlRXaW5kb3cgKCkKLSAKLSAgICAgICAg IC8vIExvb2sgZm9yIHRoZW1lIGFuZCBzZXQgaXQKLSAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBj dXJyZW50IHRoZW1lIG5hbWUgaW4gb3B0aW9ucyBleGlzdHMsIG90aGVyd2lzZSBzZXQgaXQgdG8g ZGVmYXVsdCBvbmUgKGkuZS4gIlJhd1RoZXJhcGVlLmNzcyIpCi0tICAgICAgICBhdXRvIGZpbGVu YW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJ0aGVtZXMiLCBvcHRpb25zLnRoZW1l ICsgIi5jc3MiKTsKLSsgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBHbGliOjpidWlsZF9maWxlbmFt ZShBcHA6OmdldCgpLmFyZ3YwKCksICJ0aGVtZXMiLCBvcHRpb25zLnRoZW1lICsgIi5jc3MiKTsK LSAgICAgICAgIGlmICghR2xpYjo6ZmlsZV90ZXN0KGZpbGVuYW1lLCBHbGliOjpGSUxFX1RFU1Rf RVhJU1RTKSkgewotICAgICAgICAgICAgIG9wdGlvbnMudGhlbWUgPSAiUmF3VGhlcmFwZWUiOwot LSAgICAgICAgICAgIGZpbGVuYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJ0aGVt ZXMiLCBvcHRpb25zLnRoZW1lICsgIi5jc3MiKTsKLSsgICAgICAgICAgICBmaWxlbmFtZSA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwgInRoZW1lcyIsIG9wdGlvbnMu dGhlbWUgKyAiLmNzcyIpOwotICAgICAgICAgfQotIAotICAgICAgICAgY3NzUlQgPSBHdGs6OkNz c1Byb3ZpZGVyOjpjcmVhdGUoKTsKLUBAIC0yMTQsNyArMjE1LDcgQEAgUlRXaW5kb3c6OlJUV2lu ZG93ICgpCi0gICAgICAgICBndGtvc3hfYXBwbGljYXRpb25fcmVhZHkgKG9zeEFwcCk7Ci0gICAg IH0KLSAjZW5kaWYKLS0gICAgdmVyc2lvblN0ciA9ICJSYXdUaGVyYXBlZSAiICsgdmVyc2lvblN0 cmluZzsKLSsgICAgdmVyc2lvblN0ciA9ICJSYXdUaGVyYXBlZSAiICsgQXBwOjpWRVJTSU9OOwot IAotICAgICBzZXRfdGl0bGVfZGVjb3JhdGVkICgiIik7Ci0gICAgIHNldF9yZXNpemFibGUgKHRy dWUpOwotQEAgLTIzMSw3ICsyMzIsNyBAQCBSVFdpbmRvdzo6UlRXaW5kb3cgKCkKLSAgICAgc2ln bmFsX2tleV9wcmVzc19ldmVudCgpLmNvbm5lY3QgKCBzaWdjOjptZW1fZnVuICgqdGhpcywgJlJU V2luZG93OjprZXlQcmVzc2VkKSApOwotICAgICBzaWduYWxfa2V5X3JlbGVhc2VfZXZlbnQoKS5j b25uZWN0KHNpZ2M6Om1lbV9mdW4oKnRoaXMsICZSVFdpbmRvdzo6a2V5UmVsZWFzZWQpKTsKLSAK LS0gICAgaWYgKHNpbXBsZUVkaXRvcikgewotKyAgICBpZiAoQXBwOjpnZXQoKS5pc1NpbXBsZUVk aXRvcigpKSB7Ci0gICAgICAgICBlcGFuZWwgPSBHdGs6Om1hbmFnZSAoIG5ldyBFZGl0b3JQYW5l bCAobnVsbHB0cikgKTsKLSAgICAgICAgIGVwYW5lbC0+c2V0UGFyZW50ICh0aGlzKTsKLSAgICAg ICAgIGVwYW5lbC0+c2V0UGFyZW50V2luZG93ICh0aGlzKTsKLUBAIC0yNDEsMTEgKzI0MiwxMSBA QCBSVFdpbmRvdzo6UlRXaW5kb3cgKCkKLSAgICAgICAgIHBsZEJyaWRnZSA9IG51bGxwdHI7IC8v IE5vIHByb2dyZXNzIGxpc3RlbmVyCi0gCi0gICAgICAgICBDYWNoZU1hbmFnZXIqIGNtID0gQ2Fj aGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpOwotLSAgICAgICAgVGh1bWJuYWlsKiB0aG0gPSBjbS0+ Z2V0RW50cnkgKCBhcmd2MSApOwotKyAgICAgICAgVGh1bWJuYWlsKiB0aG0gPSBjbS0+Z2V0RW50 cnkgKCBBcHA6OmdldCgpLmFyZ3YxKCkgKTsKLSAKLSAgICAgICAgIGlmICh0aG0pIHsKLSAgICAg ICAgICAgICBpbnQgZXJyb3I7Ci0tICAgICAgICAgICAgcnRlbmdpbmU6OkluaXRpYWxJbWFnZSAq aWkgPSBydGVuZ2luZTo6SW5pdGlhbEltYWdlOjpsb2FkIChhcmd2MSwgdGhtLT5nZXRUeXBlKCkg PT0gRlRfUmF3LCAmZXJyb3IsIG51bGxwdHIpOwotKyAgICAgICAgICAgIHJ0ZW5naW5lOjpJbml0 aWFsSW1hZ2UgKmlpID0gcnRlbmdpbmU6OkluaXRpYWxJbWFnZTo6bG9hZCAoQXBwOjpnZXQoKS5h cmd2MSgpLCB0aG0tPmdldFR5cGUoKSA9PSBGVF9SYXcsICZlcnJvciwgbnVsbHB0cik7Ci0gICAg ICAgICAgICAgZXBhbmVsLT5vcGVuICggdGhtLCBpaSApOwotICAgICAgICAgfQotICAgICB9IGVs c2UgewotQEAgLTM3Miw4ICszNzMsOCBAQCBSVFdpbmRvdzo6UlRXaW5kb3cgKCkKLSAKLSAgICAg ICAgIGJwYW5lbC0+aW5pdCAodGhpcyk7Ci0gCi0tICAgICAgICBpZiAoIWFyZ3YxLmVtcHR5KCkg JiYgIXJlbW90ZSkgewotLSAgICAgICAgICAgIFRodW1ibmFpbCogdGhtID0gY2FjaGVNZ3ItPmdl dEVudHJ5IChhcmd2MSk7Ci0rICAgICAgICBpZiAoIUFwcDo6Z2V0KCkuYXJndjEoKS5lbXB0eSgp ICYmICFBcHA6OmdldCgpLmlzUmVtb3RlKCkpIHsKLSsgICAgICAgICAgICBUaHVtYm5haWwqIHRo bSA9IGNhY2hlTWdyLT5nZXRFbnRyeSAoQXBwOjpnZXQoKS5hcmd2MSgpKTsKLSAKLSAgICAgICAg ICAgICBpZiAodGhtKSB7Ci0gICAgICAgICAgICAgICAgIGZwYW5lbC0+ZmlsZUNhdGFsb2ctPm9w ZW5SZXF1ZXN0ZWQgKHt0aG19KTsKLUBAIC0zODQsNyArMzg1LDcgQEAgUlRXaW5kb3c6OlJUV2lu ZG93ICgpCi0gCi0gUlRXaW5kb3c6On5SVFdpbmRvdygpCi0gewotLSAgICBpZiAoIXNpbXBsZUVk aXRvcikgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkgewotICAgICAg ICAgZGVsZXRlIHBsZEJyaWRnZTsKLSAgICAgfQotIAotQEAgLTQwNiw3ICs0MDcsNyBAQCB2b2lk IFJUV2luZG93Ojpvbl9yZWFsaXplICgpCi0gICAgICAgICBmcGFuZWwtPnNldEFzcGVjdCgpOwot ICAgICB9Ci0gCi0tICAgIGlmIChzaW1wbGVFZGl0b3IpIHsKLSsgICAgaWYgKEFwcDo6Z2V0KCku aXNTaW1wbGVFZGl0b3IoKSkgewotICAgICAgICAgZXBhbmVsLT5zZXRBc3BlY3QoKTsKLSAgICAg fQotIAotQEAgLTQxNCw5ICs0MTUsMTAgQEAgdm9pZCBSVFdpbmRvdzo6b25fcmVhbGl6ZSAoKQot IAotICAgICAvLyBEaXNwbGF5IHJlbGVhc2Ugbm90ZXMgb25seSBpZiBuZXcgbWFqb3IgdmVyc2lv bi4KLSAgICAgYm9vbCB3YWl0Rm9yU3BsYXNoID0gZmFsc2U7Ci0rICAgIGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmIChvcHRpb25zLmlzX25ld192ZXJz aW9uKCkpIHsKLSAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdmVyc2lvbiBwYXJhbWV0ZXIgd2l0aCB0 aGUgcmlnaHQgdmFsdWUKLS0gICAgICAgIG9wdGlvbnMudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7 Ci0rICAgICAgICBvcHRpb25zLnZlcnNpb24gPSBBcHA6OlZFUlNJT047Ci0gCi0gICAgICAgICBz cGxhc2ggPSBuZXcgU3BsYXNoICgqdGhpcyk7Ci0gICAgICAgICBzcGxhc2gtPnNldF90cmFuc2ll bnRfZm9yICgqdGhpcyk7Ci1AQCAtNDM5LDYgKzQ0MSw3IEBAIHZvaWQgUlRXaW5kb3c6Om9uX3Jl YWxpemUgKCkKLSAKLSB2b2lkIFJUV2luZG93OjpzaG93RXJyb3JzKCkKLSB7Ci0rICAgIGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIC8vIGFsZXJ0aW5nIHVz ZXJzIGlmIHRoZSBkZWZhdWx0IHJhdyBhbmQgaW1hZ2UgcHJvZmlsZXMgYXJlIG1pc3NpbmcKLSAg ICAgaWYgKG9wdGlvbnMuaXNfZGVmUHJvZlJhd01pc3NpbmcoKSkgewotICAgICAgICAgb3B0aW9u cy5kZWZQcm9mUmF3ID0gREVGUFJPRklMRV9SQVc7Ci1AQCAtNDY1LDYgKzQ2OCw3IEBAIHZvaWQg UlRXaW5kb3c6OnNob3dFcnJvcnMoKQotIAotIGJvb2wgUlRXaW5kb3c6Om9uX2NvbmZpZ3VyZV9l dmVudCAoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKCFvcHRpb25zLndpbmRvd01heGlt aXplZCAmJiAhaXNfZnVsbHNjcmVlbiAmJiAhaXNfbWluaW1pemVkKSB7Ci0gICAgICAgICBnZXRf c2l6ZSAob3B0aW9ucy53aW5kb3dXaWR0aCwgb3B0aW9ucy53aW5kb3dIZWlnaHQpOwotICAgICAg ICAgZ2V0X3Bvc2l0aW9uIChvcHRpb25zLndpbmRvd1gsIG9wdGlvbnMud2luZG93WSk7Ci1AQCAt NDc5LDcgKzQ4Myw3IEBAIGJvb2wgUlRXaW5kb3c6Om9uX2NvbmZpZ3VyZV9ldmVudCAoR2RrRXZl bnRDb25maWd1cmUqIGV2ZW50KQotIGJvb2wgUlRXaW5kb3c6Om9uX3dpbmRvd19zdGF0ZV9ldmVu dCAoR2RrRXZlbnRXaW5kb3dTdGF0ZSogZXZlbnQpCi0gewotICAgICAvLyBSZXRyaWV2ZSBSVCB3 aW5kb3cgc3RhdGVzCi0tICAgIG9wdGlvbnMud2luZG93TWF4aW1pemVkID0gZXZlbnQtPm5ld193 aW5kb3dfc3RhdGUgJiBHREtfV0lORE9XX1NUQVRFX01BWElNSVpFRDsKLSsgICAgQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLndpbmRvd01heGltaXplZCA9IGV2ZW50LT5uZXdfd2luZG93X3N0YXRl ICYgR0RLX1dJTkRPV19TVEFURV9NQVhJTUlaRUQ7Ci0gICAgIGlzX21pbmltaXplZCA9IGV2ZW50 LT5uZXdfd2luZG93X3N0YXRlICYgR0RLX1dJTkRPV19TVEFURV9JQ09OSUZJRUQ7Ci0gICAgIGlz X2Z1bGxzY3JlZW4gPSBldmVudC0+bmV3X3dpbmRvd19zdGF0ZSAmIEdES19XSU5ET1dfU1RBVEVf RlVMTFNDUkVFTjsKLSAKLUBAIC01MTksNyArNTIzLDcgQEAgdm9pZCBSVFdpbmRvdzo6b25fbWFp bk5CX3N3aXRjaF9wYWdlIChHdGs6OldpZGdldCogd2lkZ2V0LCBndWludCBwYWdlX251bSkKLSAK LSB2b2lkIFJUV2luZG93OjphZGRFZGl0b3JQYW5lbCAoRWRpdG9yUGFuZWwqIGVwLCBjb25zdCBz dGQ6OnN0cmluZyAmbmFtZSkKLSB7Ci0tICAgIGlmIChvcHRpb25zLm11bHRpRGlzcGxheU1vZGUg PiAwKSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0aURpc3BsYXlNb2RlID4g MCkgewotICAgICAgICAgRWRpdFdpbmRvdyAqIHduZEVkaXQgPSBFZGl0V2luZG93OjpnZXRJbnN0 YW5jZSAodGhpcyk7Ci0gICAgICAgICB3bmRFZGl0LT5hZGRFZGl0b3JQYW5lbCAoZXAsIG5hbWUp OwotICAgICAgICAgd25kRWRpdC0+c2hvd19hbGwoKTsKLUBAIC01NzMsNyArNTc3LDcgQEAgdm9p ZCBSVFdpbmRvdzo6cmVtRWRpdG9yUGFuZWwgKEVkaXRvclBhbmVsKiBlcCkKLSAgICAgICAgIHJl dHVybjsgICAgLy8gV2lsbCBjcmFzaCBpZiBkZXN0cm95ZWQgd2hpbGUgbG9hZGluZwotICAgICB9 Ci0gCi0tICAgIGlmIChvcHRpb25zLm11bHRpRGlzcGxheU1vZGUgPiAwKSB7Ci0rICAgIGlmIChB cHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotICAgICAgICAgRWRp dFdpbmRvdyAqIHduZEVkaXQgPSBFZGl0V2luZG93OjpnZXRJbnN0YW5jZSAodGhpcyk7Ci0gICAg ICAgICB3bmRFZGl0LT5yZW1FZGl0b3JQYW5lbCAoZXApOwotICAgICB9IGVsc2UgewotQEAgLTYw Miw3ICs2MDYsNyBAQCB2b2lkIFJUV2luZG93OjpyZW1FZGl0b3JQYW5lbCAoRWRpdG9yUGFuZWwq IGVwKQotIAotIGJvb2wgUlRXaW5kb3c6OnNlbGVjdEVkaXRvclBhbmVsIChjb25zdCBzdGQ6OnN0 cmluZyAmbmFtZSkKLSB7Ci0tICAgIGlmIChvcHRpb25zLm11bHRpRGlzcGxheU1vZGUgPiAwKSB7 Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0aURpc3BsYXlNb2RlID4gMCkgewot ICAgICAgICAgRWRpdFdpbmRvdyAqIHduZEVkaXQgPSBFZGl0V2luZG93OjpnZXRJbnN0YW5jZSAo dGhpcyk7Ci0gCi0gICAgICAgICBpZiAod25kRWRpdC0+c2VsZWN0RWRpdG9yUGFuZWwgKG5hbWUp KSB7Ci1AQCAtNjU4LDcgKzY2Miw3IEBAIGJvb2wgUlRXaW5kb3c6OmtleVByZXNzZWQgKEdka0V2 ZW50S2V5KiBldmVudCkKLSAgICAgICAgIHRvZ2dsZV9mdWxsc2NyZWVuKCk7Ci0gICAgIH0KLSAK LS0gICAgaWYgKHNpbXBsZUVkaXRvcikKLSsgICAgaWYgKEFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0 b3IoKSkKLSAgICAgICAgIC8vIGluIHNpbXBsZUVkaXRvciBtb2RlLCB0aGVyZSdzIG5vIG90aGVy IHRhYiB0aGF0IGNhbiBoYW5kbGUgcHJlc3NlZCBrZXlzLCBzbyB3ZSBjYW4gc2VuZCB0aGUgZXZl bnQgdG8gZWRpdG9yIHBhbmVsIHRoZW4gcmV0dXJuCi0gICAgIHsKLSAgICAgICAgIHJldHVybiBl cGFuZWwtPmhhbmRsZVNob3J0Y3V0S2V5IChldmVudCk7Ci1AQCAtNzM5LDggKzc0Myw5IEBAIGJv b2wgUlRXaW5kb3c6Om9uX2RlbGV0ZV9ldmVudCAoR2RrRXZlbnRBbnkqIGV2ZW50KQotICAgICAv LyBDaGVjayBpZiBhbnkgZWRpdG9yIGlzIHN0aWxsIHByb2Nlc3NpbmcsIGFuZCBkbyBOT1QgcXVp dCBpZiBzby4gT3RoZXJ3aXNlIGNyYXNoZXMgYW5kIGluY29uc2lzdGVudCBjYWNoZXMKLSAgICAg Ym9vbCBpc1Byb2Nlc3NpbmcgPSBmYWxzZTsKLSAgICAgRWRpdFdpbmRvdyogZWRpdFdpbmRvdyA9 IG51bGxwdHI7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7 Ci0gCi0tICAgIGlmIChpc1NpbmdsZVRhYk1vZGUoKSB8fCBzaW1wbGVFZGl0b3IpIHsKLSsgICAg aWYgKGlzU2luZ2xlVGFiTW9kZSgpIHx8IEFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkgewot ICAgICAgICAgaXNQcm9jZXNzaW5nID0gZXBhbmVsLT5nZXRJc1Byb2Nlc3NpbmcoKTsKLSAgICAg fSBlbHNlIGlmIChvcHRpb25zLm11bHRpRGlzcGxheU1vZGUgPiAwKSB7Ci0gICAgICAgICBlZGl0 V2luZG93ID0gRWRpdFdpbmRvdzo6Z2V0SW5zdGFuY2UgKHRoaXMpOwotQEAgLTc2Nyw3ICs3NzIs NyBAQCBib29sIFJUV2luZG93Ojpvbl9kZWxldGVfZXZlbnQgKEdka0V2ZW50QW55KiBldmVudCkK LSAgICAgICAgIGJwYW5lbC0+c2F2ZU9wdGlvbnMgKCk7Ci0gICAgIH0KLSAKLS0gICAgaWYgKChp c1NpbmdsZVRhYk1vZGUoKSB8fCBzaW1wbGVFZGl0b3IpICYmIGVwYW5lbC0+aXNSZWFsaXplZCgp KSB7Ci0rICAgIGlmICgoaXNTaW5nbGVUYWJNb2RlKCkgfHwgQXBwOjpnZXQoKS5pc1NpbXBsZUVk aXRvcigpKSAmJiBlcGFuZWwtPmlzUmVhbGl6ZWQoKSkgewotICAgICAgICAgZXBhbmVsLT5zYXZl UHJvZmlsZSgpOwotICAgICAgICAgZXBhbmVsLT53cml0ZU9wdGlvbnMgKCk7Ci0gICAgIH0gZWxz ZSB7Ci1AQCAtODQwLDcgKzg0NSw3IEBAIGJvb2wgUlRXaW5kb3c6Om9uX2RlbGV0ZV9ldmVudCAo R2RrRXZlbnRBbnkqIGV2ZW50KQotIAotIHZvaWQgUlRXaW5kb3c6OndyaXRlVG9vbEV4cGFuZGVk U3RhdHVzIChzdGQ6OnZlY3RvcjxpbnQ+ICZ0cE9wZW4pCi0gewotLSAgICBpZiAoKGlzU2luZ2xl VGFiTW9kZSgpIHx8IGdpbXBQbHVnaW4pICYmIGVwYW5lbC0+aXNSZWFsaXplZCgpKSB7Ci0rICAg IGlmICgoaXNTaW5nbGVUYWJNb2RlKCkgfHwgQXBwOjpnZXQoKS5pc0dpbXBQbHVnaW4oKSkgJiYg ZXBhbmVsLT5pc1JlYWxpemVkKCkpIHsKLSAgICAgICAgIGVwYW5lbC0+d3JpdGVUb29sRXhwYW5k ZWRTdGF0dXMgKHRwT3Blbik7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICAvLyBTdG9yaW5nIHRo ZSBvcHRpb25zIG9mIHRoZSBsYXN0IEVkaXRvclBhbmVsIGJlZm9yZSBHdGsgZGVzdHJveXMgZXZl cnl0aGluZwotQEAgLTg4MSw2ICs4ODYsNyBAQCB2b2lkIFJUV2luZG93OjpzaG93SUNDUHJvZmls ZUNyZWF0b3IgKCkKLSAKLSAgICAgZnBhbmVsLT5vcHRpb25zQ2hhbmdlZCAoKTsKLSAKLSsgICAg Y29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAoZXBh bmVsKSB7Ci0gICAgICAgICBlcGFuZWwtPmRlZmF1bHRNb25pdG9yUHJvZmlsZUNoYW5nZWQgKG9w dGlvbnMucnRTZXR0aW5ncy5tb25pdG9yUHJvZmlsZSwgb3B0aW9ucy5ydFNldHRpbmdzLmF1dG9N b25pdG9yUHJvZmlsZSk7Ci0gICAgIH0KLUBAIC04OTgsNiArOTA0LDcgQEAgdm9pZCBSVFdpbmRv dzo6c2hvd1ByZWZlcmVuY2VzICgpCi0gCi0gICAgIGZwYW5lbC0+b3B0aW9uc0NoYW5nZWQgKCk7 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKGVwYW5lbCkgewotICAgICAgICAgZXBhbmVsLT5kZWZhdWx0TW9uaXRvclByb2ZpbGVD aGFuZ2VkIChvcHRpb25zLnJ0U2V0dGluZ3MubW9uaXRvclByb2ZpbGUsIG9wdGlvbnMucnRTZXR0 aW5ncy5hdXRvTW9uaXRvclByb2ZpbGUpOwotICAgICB9Ci1AQCAtOTE0LDcgKzkyMSw3IEBAIHZv aWQgUlRXaW5kb3c6OnNldFByb2dyZXNzKGRvdWJsZSBwKQotIAotIHZvaWQgUlRXaW5kb3c6OnNl dFByb2dyZXNzU3RyKGNvbnN0IEdsaWI6OnVzdHJpbmcmIHN0cikKLSB7Ci0tICAgIGlmICghb3B0 aW9ucy5tYWluTkJWZXJ0aWNhbCkgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkub3B0aW9ucygpLm1h aW5OQlZlcnRpY2FsKSB7Ci0gICAgICAgICBwclByb2dCYXIuc2V0X3RleHQoc3RyKTsKLSAgICAg fQotIH0KLUBAIC05ODUsNyArOTkyLDcgQEAgdm9pZCBSVFdpbmRvdzo6TW92ZUZpbGVCcm93c2Vy VG9FZGl0b3IoKQotICAgICAgICAgZnBhbmVsLT5yaWJib25QYW5lLT5yZW1vdmUgKCpmQ2F0YWxv Zyk7Ci0gICAgICAgICBmQ2F0YWxvZy0+ZGlzYWJsZUluc3BlY3RvcigpOwotICAgICAgICAgZXBh bmVsLT5jYXRhbG9nUGFuZS0+YWRkICgqZkNhdGFsb2cpOwotLSAgICAgICAgZXBhbmVsLT5zaG93 VG9wUGFuZWwgKG9wdGlvbnMuZWRpdG9yRmlsbVN0cmlwT3BlbmVkKTsKLSsgICAgICAgIGVwYW5l bC0+c2hvd1RvcFBhbmVsIChBcHA6OmdldCgpLm9wdGlvbnMoKS5lZGl0b3JGaWxtU3RyaXBPcGVu ZWQpOwotICAgICAgICAgZkNhdGFsb2ctPmVuYWJsZVRhYk1vZGUgKHRydWUpOwotICAgICAgICAg ZkNhdGFsb2ctPnJlZnJlc2hIZWlnaHQoKTsKLSAgICAgICAgIGZDYXRhbG9nLT50YkxlZnRQYW5l bF8xX3Zpc2libGUgKGZhbHNlKTsKLUBAIC0xMDAzLDcgKzEwMTAsNyBAQCB2b2lkIFJUV2luZG93 Ojp1cGRhdGVFeHRlcm5hbEVkaXRvcldpZGdldChpbnQgc2VsZWN0ZWRJbmRleCwgY29uc3Qgc3Rk Ojp2ZWN0b3I8RQotICAgICAgICAgcGFuZWwuc2Vjb25kLT51cGRhdGVFeHRlcm5hbEVkaXRvcldp ZGdldChzZWxlY3RlZEluZGV4LCBlZGl0b3JzKTsKLSAgICAgfQotIAotLSAgICBpZiAob3B0aW9u cy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCku bXVsdGlEaXNwbGF5TW9kZSA+IDApIHsKLSAgICAgICAgIEVkaXRXaW5kb3c6OmdldEluc3RhbmNl KHRoaXMpCi0gICAgICAgICAgICAgLT51cGRhdGVFeHRlcm5hbEVkaXRvcldpZGdldChzZWxlY3Rl ZEluZGV4LCBlZGl0b3JzKTsKLSAgICAgfQotQEAgLTEwODAsNyArMTA4Nyw3IEBAIHZvaWQgUlRX aW5kb3c6OnVwZGF0ZVRvb2xQYW5lbFRvb2xMb2NhdGlvbnMoCi0gICAgICAgICBwYW5lbC5zZWNv bmQtPnVwZGF0ZVRvb2xQYW5lbFRvb2xMb2NhdGlvbnMoZmF2b3JpdGVzLCBjbG9uZUZhdm9yaXRl VG9vbHMpOwotICAgICB9Ci0gCi0tICAgIGlmIChvcHRpb25zLm11bHRpRGlzcGxheU1vZGUgPiAw KSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS5tdWx0aURpc3BsYXlNb2RlID4gMCkg ewotICAgICAgICAgRWRpdFdpbmRvdzo6Z2V0SW5zdGFuY2UodGhpcykKLSAgICAgICAgICAgICAt PnVwZGF0ZVRvb2xQYW5lbFRvb2xMb2NhdGlvbnMoZmF2b3JpdGVzLCBjbG9uZUZhdm9yaXRlVG9v bHMpOwotICAgICB9Ci1AQCAtMTA5OCw2ICsxMTA1LDcgQEAgdm9pZCBSVFdpbmRvdzo6c2V0V2lu ZG93U2l6ZSAoKQotIHsKLSAgICAgb25Db25mRXZlbnRDb25uLmJsb2NrKHRydWUpOyAvLyBBdm9p ZCBnZXR0aW5nIHNpemUgYW5kIHBvc2l0aW9uIHdoaWxlIHdpbmRvdyBpcyBiZWluZyBtb3ZlZCwg bWF4aW1pemVkLCAuLi4KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICBHZGs6OlJlY3RhbmdsZSBsTW9uaXRvclJlY3Q7Ci0gICAgIGNvbnN0 IGF1dG8gZGlzcGxheSA9IGdldF9zY3JlZW4oKS0+Z2V0X2Rpc3BsYXkoKTsKLSAgICAgZGlzcGxh eS0+Z2V0X21vbml0b3IgKHN0ZDo6bWluIChvcHRpb25zLndpbmRvd01vbml0b3IsIGRpc3BsYXkt PmdldF9uX21vbml0b3JzKCkgLSAxKSktPmdldF9nZW9tZXRyeShsTW9uaXRvclJlY3QpOwotQEAg LTEyMjMsNiArMTIzMSw3IEBAIHZvaWQgUlRXaW5kb3c6OmNyZWF0ZVNldG1FZGl0b3IoKQotICAg ICBzZXRFeHBhbmRBbGlnblByb3BlcnRpZXMgKGVkaXRvckxhYmVsR3JpZCwgZmFsc2UsIGZhbHNl LCBHdGs6OkFMSUdOX0NFTlRFUiwgR3RrOjpBTElHTl9DRU5URVIpOwotICAgICBHdGs6OkxhYmVs KiBjb25zdCBlbCA9IEd0azo6bWFuYWdlIChuZXcgR3RrOjpMYWJlbCAoIEdsaWI6OnVzdHJpbmcg KCIgIikgKyBNICgiTUFJTl9GUkFNRV9FRElUT1IiKSApKTsKLSAKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBjb25zdCBhdXRvIHBvcyA9IG9w dGlvbnMubWFpbk5CVmVydGljYWwgPyBHdGs6OlBPU19UT1AgOiBHdGs6OlBPU19SSUdIVDsKLSAK LSAgICAgaWYgKG9wdGlvbnMubWFpbk5CVmVydGljYWwpIHsKLUBAIC0xMjQxLDUgKzEyNTAsNiBA QCB2b2lkIFJUV2luZG93OjpjcmVhdGVTZXRtRWRpdG9yKCkKLSAKLSBib29sIFJUV2luZG93Ojpp c1NpbmdsZVRhYk1vZGUoKSBjb25zdAotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFw cDo6Z2V0KCkub3B0aW9ucygpOwotICAgICByZXR1cm4gIW9wdGlvbnMudGFiYmVkVUkgJiYgISAo b3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCk7Ci0gfQotZGlmZiAtLWdpdCBhL3J0Z3VpL3Nh dmVhc2RsZy5jYyBiL3J0Z3VpL3NhdmVhc2RsZy5jYwotaW5kZXggYjFhMjE3NTUzLi4zYmRhOTZj ODEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9zYXZlYXNkbGcuY2MKLSsrKyBiL3J0Z3VpL3NhdmVhc2Rs Zy5jYwotQEAgLTc1LDYgKzc1LDcgQEAgU2F2ZUFzRGlhbG9nOjpTYXZlQXNEaWFsb2cgKGNvbnN0 IEdsaWI6OnVzdHJpbmcgJmluaXRpYWxEaXIsIEd0azo6V2luZG93KiBwYXJlbnQKLSAgICAgZmls dGVyX3BuZy0+YWRkX3BhdHRlcm4oIioucG5nIik7Ci0gICAgIGZpbHRlcl9wbmctPmFkZF9wYXR0 ZXJuKCIqLlBORyIpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5v cHRpb25zKCk7Ci0gICAgIGZvcm1hdENoYW5nZWQgKG9wdGlvbnMuc2F2ZUZvcm1hdC5mb3JtYXQp OwotIAotIC8vIE91dHB1dCBPcHRpb25zCi1AQCAtMTMwLDcgKzEzMSw3IEBAIFNhdmVBc0RpYWxv Zzo6U2F2ZUFzRGlhbG9nIChjb25zdCBHbGliOjp1c3RyaW5nICZpbml0aWFsRGlyLCBHdGs6Oldp bmRvdyogcGFyZW50Ci0gICAgIEd0azo6Qm94KiB2Ym94X2JvdHRvbVJpZ2h0ID0gR3RrOjptYW5h Z2UobmV3IEd0azo6Qm94KEd0azo6T1JJRU5UQVRJT05fVkVSVElDQUwpKTsKLSAKLSAgICAgLy8g VGhlcmUgaXMgbm8gcXVldWUgaW4gc2ltcGxlIG1vZGUsIHNvIG5vIG5lZWQgdG8gY2hvb3NlCi0t ICAgIGlmICghc2ltcGxlRWRpdG9yKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBsZUVk aXRvcigpKSB7Ci0gICAgICAgICB2Ym94X2JvdHRvbVJpZ2h0LT5wYWNrX3N0YXJ0ICgqc2F2ZU1l dGhvZFswXSwgR3RrOjpQQUNLX1NIUklOSywgMik7Ci0gICAgICAgICB2Ym94X2JvdHRvbVJpZ2h0 LT5wYWNrX3N0YXJ0ICgqc2F2ZU1ldGhvZFsxXSwgR3RrOjpQQUNLX1NIUklOSywgMik7Ci0gICAg ICAgICB2Ym94X2JvdHRvbVJpZ2h0LT5wYWNrX3N0YXJ0ICgqc2F2ZU1ldGhvZFsyXSwgR3RrOjpQ QUNLX1NIUklOSywgMik7Ci1AQCAtMTkwLDcgKzE5MSw3IEBAIGJvb2wgU2F2ZUFzRGlhbG9nOjpn ZXRBdXRvU3VmZml4ICgpCi0gYm9vbCBTYXZlQXNEaWFsb2c6OmdldEltbWVkaWF0ZWx5ICgpCi0g ewotIAotLSAgICByZXR1cm4gc2ltcGxlRWRpdG9yID8gdHJ1ZSA6IHNhdmVNZXRob2RbMF0tPmdl dF9hY3RpdmUgKCk7Ci0rICAgIHJldHVybiBBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgPyB0 cnVlIDogc2F2ZU1ldGhvZFswXS0+Z2V0X2FjdGl2ZSgpOwotIH0KLSAKLSBib29sIFNhdmVBc0Rp YWxvZzo6Z2V0VG9IZWFkT2ZRdWV1ZSAoKQotQEAgLTIwNyw3ICsyMDgsNyBAQCBib29sIFNhdmVB c0RpYWxvZzo6Z2V0VG9UYWlsT2ZRdWV1ZSAoKQotIAotIGludCBTYXZlQXNEaWFsb2c6OmdldFNh dmVNZXRob2ROdW0gKCkKLSB7Ci0tICAgIGlmIChzaW1wbGVFZGl0b3IpIHsKLSsgICAgaWYgKEFw cDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkgewotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIH0K LSAKLWRpZmYgLS1naXQgYS9ydGd1aS9zYXZlZm9ybWF0cGFuZWwuY2MgYi9ydGd1aS9zYXZlZm9y bWF0cGFuZWwuY2MKLWluZGV4IGQ5YjA0ZThmZS4uMzlkMzk3N2MwIDEwMDY0NAotLS0tIGEvcnRn dWkvc2F2ZWZvcm1hdHBhbmVsLmNjCi0rKysgYi9ydGd1aS9zYXZlZm9ybWF0cGFuZWwuY2MKLUBA IC0xMjUsNyArMTI1LDcgQEAgU2F2ZUZvcm1hdFBhbmVsOjpTYXZlRm9ybWF0UGFuZWwgKCkgOiBs aXN0ZW5lciAobnVsbHB0cikKLSAKLSBTYXZlRm9ybWF0UGFuZWw6On5TYXZlRm9ybWF0UGFuZWwg KCkgPSBkZWZhdWx0OwotIAotLXZvaWQgU2F2ZUZvcm1hdFBhbmVsOjppbml0IChTYXZlRm9ybWF0 ICZzZikKLSt2b2lkIFNhdmVGb3JtYXRQYW5lbDo6aW5pdCAoY29uc3QgU2F2ZUZvcm1hdCAmc2Yp Ci0gewotICAgICBGb3JtYXRDaGFuZ2VMaXN0ZW5lciogY29uc3QgdG1wID0gbGlzdGVuZXI7Ci0g ICAgIGxpc3RlbmVyID0gbnVsbHB0cjsKLWRpZmYgLS1naXQgYS9ydGd1aS9zYXZlZm9ybWF0cGFu ZWwuaCBiL3J0Z3VpL3NhdmVmb3JtYXRwYW5lbC5oCi1pbmRleCBiYTA4Yzk4ZjYuLmFmNmM0YTcy ZiAxMDA2NDQKLS0tLSBhL3J0Z3VpL3NhdmVmb3JtYXRwYW5lbC5oCi0rKysgYi9ydGd1aS9zYXZl Zm9ybWF0cGFuZWwuaAotQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgotICAgICAgICAgbGlzdGVu ZXIgPSBsOwotICAgICB9Ci0gCi0tICAgIHZvaWQgICAgICAgIGluaXQgICAgICAgICAgICAoU2F2 ZUZvcm1hdCYgc2YpOwotKyAgICB2b2lkICAgICAgICBpbml0ICAgICAgICAgICAgKGNvbnN0IFNh dmVGb3JtYXQmIHNmKTsKLSAgICAgU2F2ZUZvcm1hdCAgZ2V0Rm9ybWF0ICAgICAgICgpOwotIAot ICAgICB2b2lkICAgICAgICBmb3JtYXRDaGFuZ2VkICAgKCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkv c2hhcnBlbmVkZ2UuY2MgYi9ydGd1aS9zaGFycGVuZWRnZS5jYwotaW5kZXggMzEwNGI2NDFlLi5m N2ExZDI4OTEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9zaGFycGVuZWRnZS5jYwotKysrIGIvcnRndWkv c2hhcnBlbmVkZ2UuY2MKLUBAIC0zNiw2ICszNiw3IEBAIFNoYXJwZW5FZGdlOjpTaGFycGVuRWRn ZSAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfU0hBUlBFTkVE Ci0gICAgIHBhc3NlcyA9IEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlciAoTSgiVFBfU0hBUlBFTkVE R0VfUEFTU0VTIiksIDEsIDQsIDEsIDIpKTsKLSAgICAgcGFzc2VzLT5zZXRBZGp1c3Rlckxpc3Rl bmVyICh0aGlzKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0 aW9ucygpOwotICAgICBwYXNzZXMtPnNldERlbGF5KHN0ZDo6bWF4KG9wdGlvbnMuYWRqdXN0ZXJN aW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSk7Ci0gCi0gICAgIGFtb3VudCA9IEd0 azo6bWFuYWdlKG5ldyBBZGp1c3RlciAoTSgiVFBfU0hBUlBFTkVER0VfQU1PVU5UIiksIDAsIDEw MCwgMSwgNTApKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9zb3VuZG1hbi5jYyBiL3J0Z3VpL3NvdW5k bWFuLmNjCi1pbmRleCA1NTUyYmQxMmQuLjg2NGU1ZTM3NyAxMDA2NDQKLS0tLSBhL3J0Z3VpL3Nv dW5kbWFuLmNjCi0rKysgYi9ydGd1aS9zb3VuZG1hbi5jYwotQEAgLTQ5LDcgKzQ5LDcgQEAgdm9p ZCBTb3VuZE1hbmFnZXI6OmluaXQoKQotIC8vIHBhcmFtIGlzIGVpdGhlciBmaWxlIG5hbWUgb3Ig bmFtZSBvZiB0aGUgc3lzdGVtIGV2ZW50IG9uIFdpbmRvd3MgKGUuZy4gIlN5c3RlbUFzdGVyaXNr IiBvciAiU3lzdGVtRGVmYXVsdCIpLgotIHZvaWQgU291bmRNYW5hZ2VyOjpwbGF5U291bmRBc3lu Yyhjb25zdCBHbGliOjp1c3RyaW5nICZzb3VuZCkKLSB7Ci0tICAgIGlmIChzb3VuZC5lbXB0eSgp IHx8ICFvcHRpb25zLnNuZEVuYWJsZSkgewotKyAgICBpZiAoc291bmQuZW1wdHkoKSB8fCAhQXBw OjpnZXQoKS5vcHRpb25zKCkuc25kRW5hYmxlKSB7Ci0gICAgICAgICByZXR1cm47Ci0gICAgIH0K LSAKLWRpZmYgLS1naXQgYS9ydGd1aS9zcGxhc2guY2MgYi9ydGd1aS9zcGxhc2guY2MKLWluZGV4 IDAwMTVjNDg2NC4uMmYwNzVkYmYwIDEwMDY0NAotLS0tIGEvcnRndWkvc3BsYXNoLmNjCi0rKysg Yi9ydGd1aS9zcGxhc2guY2MKLUBAIC0yMSwxMCArMjEsNyBAQAotICNpbmNsdWRlIDxnbGliL2dz dGRpby5oPgotIAotICNpbmNsdWRlICJtdWx0aWxhbmdtZ3IuaCIKLS0KLS1leHRlcm4gR2xpYjo6 dXN0cmluZyBjcmVkaXRzUGF0aDsKLS1leHRlcm4gR2xpYjo6dXN0cmluZyBsaWNlbnNlUGF0aDsK LS1leHRlcm4gR2xpYjo6dXN0cmluZyB2ZXJzaW9uU3RyaW5nOwotKyNpbmNsdWRlICJydGVuZ2lu ZS9ydGFwcC5oIgotIAotIFNwbGFzaEltYWdlOjpTcGxhc2hJbWFnZSAoKSA6IHN1cmZhY2UobmV3 IFJUU3VyZmFjZSgic3BsYXNoLnN2ZyIpKQotIHsKLUBAIC01MCw3ICs0Nyw3IEBAIGJvb2wgU3Bs YXNoSW1hZ2U6Om9uX2RyYXcoY29uc3QgOjpDYWlybzo6UmVmUHRyPCBDYWlybzo6Q29udGV4dD4g JmNyKQotICAgICAgICAgY29udGV4dC0+c2V0X2ZvbnRfZGVzY3JpcHRpb24gKGZvbnRkKTsKLSAK LSAgICAgICAgIGludCB3LCBoOwotLSAgICAgICAgR2xpYjo6dXN0cmluZyB2ZXJzaW9uU3RyKHZl cnNpb25TdHJpbmcpOwotKyAgICAgICAgR2xpYjo6dXN0cmluZyB2ZXJzaW9uU3RyKEFwcDo6VkVS U0lPTik7Ci0gCi0gICAgICAgICB2ZXJzaW9uID0gY3JlYXRlX3BhbmdvX2xheW91dCAodmVyc2lv blN0cik7Ci0gICAgICAgICB2ZXJzaW9uLT5zZXRfdGV4dCh2ZXJzaW9uU3RyKTsKLUBAIC0xMjAs NyArMTE3LDcgQEAgU3BsYXNoOjpTcGxhc2ggKEd0azo6V2luZG93JiBwYXJlbnQpIDogR3RrOjpE aWFsb2coTSgiR0VORVJBTF9BQk9VVCIpLCBwYXJlbnQsIHQKLSAgICAgc3BsYXNoSW1hZ2UtPnNo b3cgKCk7Ci0gCi0gICAgIC8vIFRhYiAyOiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgdmVyc2lvbgotLSAgICBzdGQ6OnN0cmluZyBidWlsZEZpbGVOYW1lID0gR2xpYjo6YnVpbGRf ZmlsZW5hbWUgKGNyZWRpdHNQYXRoLCAiQWJvdXRUaGlzQnVpbGQudHh0Iik7Ci0rICAgIHN0ZDo6 c3RyaW5nIGJ1aWxkRmlsZU5hbWUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoQXBwOjpnZXQoKS5j cmVkaXRzUGF0aCgpLCAiQWJvdXRUaGlzQnVpbGQudHh0Iik7Ci0gCi0gICAgIGlmICggR2xpYjo6 ZmlsZV90ZXN0KGJ1aWxkRmlsZU5hbWUsIChHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgKSB7Ci0g ICAgICAgICBGSUxFICpmID0gZ19mb3BlbiAoYnVpbGRGaWxlTmFtZS5jX3N0ciAoKSwgInJ0Iik7 Ci1AQCAtMTUxLDcgKzE0OCw3IEBAIFNwbGFzaDo6U3BsYXNoIChHdGs6OldpbmRvdyYgcGFyZW50 KSA6IEd0azo6RGlhbG9nKE0oIkdFTkVSQUxfQUJPVVQiKSwgcGFyZW50LCB0Ci0gICAgIH0KLSAK LSAgICAgLy8gVGFiIDM6IHRoZSBjcmVkaXRzCi0tICAgIHN0ZDo6c3RyaW5nIGNyZWRpdHNGaWxl TmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChjcmVkaXRzUGF0aCwgIkFVVEhPUlMudHh0Iik7 Ci0rICAgIHN0ZDo6c3RyaW5nIGNyZWRpdHNGaWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1l IChBcHA6OmdldCgpLmNyZWRpdHNQYXRoKCksICJBVVRIT1JTLnR4dCIpOwotIAotICAgICBpZiAo IEdsaWI6OmZpbGVfdGVzdChjcmVkaXRzRmlsZU5hbWUsIChHbGliOjpGSUxFX1RFU1RfRVhJU1RT KSkgKSB7Ci0gICAgICAgICBGSUxFICpmID0gZ19mb3BlbiAoY3JlZGl0c0ZpbGVOYW1lLmNfc3Ry ICgpLCAicnQiKTsKLUBAIC0xODMsNyArMTgwLDcgQEAgU3BsYXNoOjpTcGxhc2ggKEd0azo6V2lu ZG93JiBwYXJlbnQpIDogR3RrOjpEaWFsb2coTSgiR0VORVJBTF9BQk9VVCIpLCBwYXJlbnQsIHQK LSAgICAgfQotIAotICAgICAvLyBUYWIgNDogdGhlIGxpY2Vuc2UKLS0gICAgc3RkOjpzdHJpbmcg bGljZW5zZUZpbGVOYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKGxpY2Vuc2VQYXRoLCAiTElD RU5TRSIpOwotKyAgICBzdGQ6OnN0cmluZyBsaWNlbnNlRmlsZU5hbWUgPSBHbGliOjpidWlsZF9m aWxlbmFtZSAoQXBwOjpnZXQoKS5saWNlbnNlUGF0aCgpLCAiTElDRU5TRSIpOwotIAotICAgICBp ZiAoIEdsaWI6OmZpbGVfdGVzdChsaWNlbnNlRmlsZU5hbWUsIChHbGliOjpGSUxFX1RFU1RfRVhJ U1RTKSkgKSB7Ci0gICAgICAgICBGSUxFICpmID0gZ19mb3BlbiAobGljZW5zZUZpbGVOYW1lLmNf c3RyICgpLCAicnQiKTsKLUBAIC0yMTYsNyArMjEzLDcgQEAgU3BsYXNoOjpTcGxhc2ggKEd0azo6 V2luZG93JiBwYXJlbnQpIDogR3RrOjpEaWFsb2coTSgiR0VORVJBTF9BQk9VVCIpLCBwYXJlbnQs IHQKLSAgICAgfQotIAotICAgICAvLyBUYWIgNTogdGhlIFJlbGVhc2UgTm90ZXMKLS0gICAgc3Rk OjpzdHJpbmcgcmVsZWFzZU5vdGVzRmlsZU5hbWUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoY3Jl ZGl0c1BhdGgsICJSRUxFQVNFX05PVEVTLnR4dCIpOwotKyAgICBzdGQ6OnN0cmluZyByZWxlYXNl Tm90ZXNGaWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChBcHA6OmdldCgpLmNyZWRpdHNQ YXRoKCksICJSRUxFQVNFX05PVEVTLnR4dCIpOwotIAotICAgICBpZiAoIEdsaWI6OmZpbGVfdGVz dChyZWxlYXNlTm90ZXNGaWxlTmFtZSwgKEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSApIHsKLSAg ICAgICAgIEZJTEUgKmYgPSBnX2ZvcGVuIChyZWxlYXNlTm90ZXNGaWxlTmFtZS5jX3N0ciAoKSwg InJ0Iik7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvdGhyZXNob2xkYWRqdXN0ZXIuY2MgYi9ydGd1aS90 aHJlc2hvbGRhZGp1c3Rlci5jYwotaW5kZXggNTU0NWE5ZjQzLi45NTBlMjQ2MmYgMTAwNjQ0Ci0t LS0gYS9ydGd1aS90aHJlc2hvbGRhZGp1c3Rlci5jYwotKysrIGIvcnRndWkvdGhyZXNob2xkYWRq dXN0ZXIuY2MKLUBAIC04MCw3ICs4MCw3IEBAIHZvaWQgVGhyZXNob2xkQWRqdXN0ZXI6OmluaXRP YmplY3QgKEdsaWI6OnVzdHJpbmcgbGFiZWwsIGJvb2wgZWRpdGVkY2IpCi0gCi0gICAgIGFkZE1v ZGUgPSBmYWxzZTsKLSAKLS0gICAgZGVsYXkgPSBvcHRpb25zLmFkanVzdGVyTWluRGVsYXk7Ci0r ICAgIGRlbGF5ID0gQXBwOjpnZXQoKS5vcHRpb25zKCkuYWRqdXN0ZXJNaW5EZWxheTsKLSAKLSAg ICAgc2V0X25hbWUoIlRocmVzaG9sZEFkanVzdGVyIik7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkv dGh1bWJicm93c2VyYmFzZS5jYyBiL3J0Z3VpL3RodW1iYnJvd3NlcmJhc2UuY2MKLWluZGV4IDE1 YWQ4ODMxZS4uNjQ5NDc2MjMyIDEwMDY0NAotLS0tIGEvcnRndWkvdGh1bWJicm93c2VyYmFzZS5j YwotKysrIGIvcnRndWkvdGh1bWJicm93c2VyYmFzZS5jYwotQEAgLTMwLDcgKzMwLDcgQEAKLSB1 c2luZyBuYW1lc3BhY2Ugc3RkOwotIAotIFRodW1iQnJvd3NlckJhc2U6OlRodW1iQnJvd3NlckJh c2UgKCkKLS0gICAgOiBsb2NhdGlvbihUSExPQ19GSUxFQlJPV1NFUiksIGluc3BlY3RvcihudWxs cHRyKSwgaXNJbnNwZWN0b3JBY3RpdmUoZmFsc2UpLCBldmVudFRpbWUoMCksIGxhc3RDbGlja2Vk KG51bGxwdHIpLCBhbmNob3IobnVsbHB0ciksIHByZXZpZXdIZWlnaHQob3B0aW9ucy50aHVtYlNp emUpLCBudW1PZkNvbHMoMSksIGxhc3RSb3dIZWlnaHQoMCksIGFycmFuZ2VtZW50KFRCX0hvcml6 b250YWwpCi0rICAgIDogbG9jYXRpb24oVEhMT0NfRklMRUJST1dTRVIpLCBpbnNwZWN0b3IobnVs bHB0ciksIGlzSW5zcGVjdG9yQWN0aXZlKGZhbHNlKSwgZXZlbnRUaW1lKDApLCBsYXN0Q2xpY2tl ZChudWxscHRyKSwgYW5jaG9yKG51bGxwdHIpLCBwcmV2aWV3SGVpZ2h0KEFwcDo6Z2V0KCkub3B0 aW9ucygpLnRodW1iU2l6ZSksIG51bU9mQ29scygxKSwgbGFzdFJvd0hlaWdodCgwKSwgYXJyYW5n ZW1lbnQoVEJfSG9yaXpvbnRhbCkKLSB7Ci0gICAgIGluVyA9IC0xOwotICAgICBpbkggPSAtMTsK LUBAIC0xMTAxLDEwICsxMTAxLDExIEBAIHZvaWQgVGh1bWJCcm93c2VyQmFzZTo6cmVzb3J0ICgp Ci0gICAgIHsKLSAgICAgICAgIE1ZV1JJVEVSTE9DSyhsLCBlbnRyeVJXKTsKLSAKLSsgICAgICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAgIHN0 ZDo6c29ydCgKLSAgICAgICAgICAgICBmZC5iZWdpbigpLAotICAgICAgICAgICAgIGZkLmVuZCgp LAotLSAgICAgICAgICAgIFtdKGNvbnN0IFRodW1iQnJvd3NlckVudHJ5QmFzZSogYSwgY29uc3Qg VGh1bWJCcm93c2VyRW50cnlCYXNlKiBiKQotKyAgICAgICAgICAgIFsmXShjb25zdCBUaHVtYkJy b3dzZXJFbnRyeUJhc2UqIGEsIGNvbnN0IFRodW1iQnJvd3NlckVudHJ5QmFzZSogYikKLSAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIGJvb2wgbHQgPSBhLT5jb21wYXJlKCpiLCBvcHRp b25zLnNvcnRNZXRob2QpOwotICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zb3J0RGVz Y2VuZGluZyA/ICFsdCA6IGx0OwotQEAgLTExMjksNiArMTEzMCw3IEBAIHZvaWQgVGh1bWJCcm93 c2VyQmFzZTo6em9vbUNoYW5nZWQgKGJvb2wgem9vbUluKQotICAgICBpbnQgbmV3SGVpZ2h0ID0g MDsKLSAgICAgaW50IG9wdFRodW1iU2l6ZSA9IGdldFRodW1ibmFpbEhlaWdodCgpOwotIAotKyAg ICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmICh6 b29tSW4pCi0gICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnMudGh1bWJuYWls Wm9vbVJhdGlvcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgIG5ld0hlaWdodCA9IChpbnQp KG9wdGlvbnMudGh1bWJuYWlsWm9vbVJhdGlvc1tpXSAqIGdldE1heFRodW1ibmFpbEhlaWdodCgp KTsKLUBAIC0xMjEyLDYgKzEyMTQsNyBAQCB2b2lkIFRodW1iQnJvd3NlckJhc2U6OmVuYWJsZVRh Yk1vZGUoYm9vbCBlbmFibGUpCi0gICAgIGxvY2F0aW9uID0gZW5hYmxlID8gVEhMT0NfRURJVE9S IDogVEhMT0NfRklMRUJST1dTRVI7Ci0gICAgIGFycmFuZ2VtZW50ID0gZW5hYmxlID8gVGh1bWJC cm93c2VyQmFzZTo6VEJfSG9yaXpvbnRhbCA6IFRodW1iQnJvd3NlckJhc2U6OlRCX1ZlcnRpY2Fs OwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0g ICAgIGlmICgoIW9wdGlvbnMuc2FtZVRodW1iU2l6ZSAmJiAob3B0aW9ucy50aHVtYlNpemVUYWIg IT0gb3B0aW9ucy50aHVtYlNpemUpKSB8fCAob3B0aW9ucy5zaG93RmlsZU5hbWVzIHx8IG9wdGlv bnMuZmlsbVN0cmlwU2hvd0ZpbGVOYW1lcykpIHsKLSAKLSAgICAgICAgIE1ZV1JJVEVSTE9DSyhs LCBlbnRyeVJXKTsKLUBAIC0xMjQ4LDEyICsxMjUxLDEzIEBAIHZvaWQgVGh1bWJCcm93c2VyQmFz ZTo6aW5zZXJ0RW50cnkgKFRodW1iQnJvd3NlckVudHJ5QmFzZSogZW50cnkpCi0gICAgIHsKLSAg ICAgICAgIE1ZV1JJVEVSTE9DSyhsLCBlbnRyeVJXKTsKLSAKLSsgICAgICAgIGNvbnN0IGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAgIGZkLmluc2VydCgKLSAg ICAgICAgICAgICBzdGQ6Omxvd2VyX2JvdW5kKAotICAgICAgICAgICAgICAgICBmZC5iZWdpbigp LAotICAgICAgICAgICAgICAgICBmZC5lbmQoKSwKLSAgICAgICAgICAgICAgICAgZW50cnksCi0t ICAgICAgICAgICAgICAgIFtdKGNvbnN0IFRodW1iQnJvd3NlckVudHJ5QmFzZSogYSwgY29uc3Qg VGh1bWJCcm93c2VyRW50cnlCYXNlKiBiKQotKyAgICAgICAgICAgICAgICBbJl0oY29uc3QgVGh1 bWJCcm93c2VyRW50cnlCYXNlKiBhLCBjb25zdCBUaHVtYkJyb3dzZXJFbnRyeUJhc2UqIGIpCi0g ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgbHQgPSBhLT5jb21w YXJlKCpiLCBvcHRpb25zLnNvcnRNZXRob2QpOwotICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IG9wdGlvbnMuc29ydERlc2NlbmRpbmcgPyAhbHQgOiBsdDsKLWRpZmYgLS1naXQgYS9ydGd1aS90 aHVtYmJyb3dzZXJiYXNlLmggYi9ydGd1aS90aHVtYmJyb3dzZXJiYXNlLmgKLWluZGV4IDhjMWVj NDljOC4uOWIzYTkyN2Q5IDEwMDY0NAotLS0tIGEvcnRndWkvdGh1bWJicm93c2VyYmFzZS5oCi0r KysgYi9ydGd1aS90aHVtYmJyb3dzZXJiYXNlLmgKLUBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGlj OgotIHByb3RlY3RlZDoKLSAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGh1bWJuYWlsSGVpZ2h0KCkg Y29uc3QKLSAgICAgewotLSAgICAgICAgcmV0dXJuIG9wdGlvbnMubWF4VGh1bWJuYWlsSGVpZ2h0 OyAgICAvLyBEaWZmZXJzIGJldHdlZW4gYmF0Y2ggYW5kIGZpbGUKLSsgICAgICAgIHJldHVybiBB cHA6OmdldCgpLm9wdGlvbnMoKS5tYXhUaHVtYm5haWxIZWlnaHQ7ICAgIC8vIERpZmZlcnMgYmV0 d2VlbiBiYXRjaCBhbmQgZmlsZQotICAgICB9Ci0gICAgIHZpcnR1YWwgdm9pZCBzYXZlVGh1bWJu YWlsSGVpZ2h0IChpbnQgaGVpZ2h0KSA9IDA7Ci0gICAgIHZpcnR1YWwgaW50ICBnZXRUaHVtYm5h aWxIZWlnaHQgKCkgPSAwOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3RodW1iYnJvd3NlcmVudHJ5YmFz ZS5jYyBiL3J0Z3VpL3RodW1iYnJvd3NlcmVudHJ5YmFzZS5jYwotaW5kZXggZmQzZjdkMTExLi5h NDdjMGNhODMgMTAwNjQ0Ci0tLS0gYS9ydGd1aS90aHVtYmJyb3dzZXJlbnRyeWJhc2UuY2MKLSsr KyBiL3J0Z3VpL3RodW1iYnJvd3NlcmVudHJ5YmFzZS5jYwotQEAgLTI2Myw2ICsyNjMsNyBAQCB2 b2lkIFRodW1iQnJvd3NlckVudHJ5QmFzZTo6dXBkYXRlQmFja0J1ZmZlciAoKQotICAgICBpbnQg aXN0YXJ0eCA9IHByZXg7Ci0gICAgIGludCBpc3RhcnR5ID0gcHJleTsKLSAKLSsgICAgY29uc3Qg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAoKHBhcmVudC0+ Z2V0TG9jYXRpb24oKSAhPSBUaHVtYkJyb3dzZXJCYXNlOjpUSExPQ19FRElUT1IgJiYgb3B0aW9u cy5zaG93RmlsZU5hbWVzICYmIG9wdGlvbnMub3ZlcmxheWVkRmlsZU5hbWVzKQotICAgICAgICAg ICAgIHx8IChwYXJlbnQtPmdldExvY2F0aW9uKCkgPT0gVGh1bWJCcm93c2VyQmFzZTo6VEhMT0Nf RURJVE9SICYmIG9wdGlvbnMuZmlsbVN0cmlwU2hvd0ZpbGVOYW1lcyAmJiBvcHRpb25zLmZpbG1T dHJpcE92ZXJsYXllZEZpbGVOYW1lcykpIHsKLSAgICAgICAgIGNjLT5iZWdpbl9uZXdfcGF0aCAo KTsKLUBAIC00NTMsNiArNDU0LDggQEAgdm9pZCBUaHVtYkJyb3dzZXJFbnRyeUJhc2U6OmdldFRl eHRTaXplcyAoaW50JiBpbmZvdywgaW50JiBpbmZvaCkKLSAgICAgaW5mb3cgPSAwOwotIAotICAg ICBpZiAod2l0aEZpbGVuYW1lID09IFdGTkFNRV9GVUxMKSB7Ci0rICAgICAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0rCi0gICAgICAgICAvLyBkYXRldGlt ZQotICAgICAgICAgZm9udGQuc2V0X3dlaWdodCAoUGFuZ286OldFSUdIVF9OT1JNQUwpOwotICAg ICAgICAgY29udGV4dC0+c2V0X2ZvbnRfZGVzY3JpcHRpb24gKGZvbnRkKTsKLUBAIC01MDMsNiAr NTA2LDcgQEAgdm9pZCBUaHVtYkJyb3dzZXJFbnRyeUJhc2U6OnJlc2l6ZSAoaW50IGgpCi0gICAg ICAgICBidXR0b25TZXQtPmdldE1pbmltYWxEaW1lbnNpb25zIChic3csIGJzaCk7Ci0gICAgIH0K LSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAg ICBpZiAocGFyZW50LT5nZXRMb2NhdGlvbigpID09IFRodW1iQnJvd3NlckJhc2U6OlRITE9DX0ZJ TEVCUk9XU0VSKSB7Ci0gICAgICAgICBpZiAob3B0aW9ucy5zaG93RmlsZU5hbWVzKSB7Ci0gICAg ICAgICAgICAgd2l0aEZpbGVuYW1lID0gV0ZOQU1FX0ZVTEw7Ci1AQCAtNzM4LDYgKzc0Miw3IEBA IHN0ZDo6dHVwbGU8R2xpYjo6dXN0cmluZywgYm9vbD4gVGh1bWJCcm93c2VyRW50cnlCYXNlOjpn ZXRUb29sVGlwIChpbnQgeCwgaW50IHkpCi0gICAgIGlmIChpbnNpZGUoeCwgeSkgJiYgdG9vbHRp cC5lbXB0eSgpKSB7Ci0gICAgICAgICB0b29sdGlwID0gZGlzcG5hbWU7Ci0gCi0rICAgICAgICBj b25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBpZiAo d2l0aEZpbGVuYW1lIDwgV0ZOQU1FX0ZVTEwpIHsKLSAgICAgICAgICAgICBpZiAob3B0aW9ucy5m YlNob3dEYXRlVGltZSAmJiAhZGF0ZXRpbWVsaW5lLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAg ICAgdG9vbHRpcCArPSBHbGliOjp1c3RyaW5nKCJcbiIpICsgZGF0ZXRpbWVsaW5lOwotZGlmZiAt LWdpdCBhL3J0Z3VpL3RodW1ibmFpbC5jYyBiL3J0Z3VpL3RodW1ibmFpbC5jYwotaW5kZXggZTdm MTE3MTAxLi4wZjYzZGFlNWIgMTAwNjQ0Ci0tLS0gYS9ydGd1aS90aHVtYm5haWwuY2MKLSsrKyBi L3J0Z3VpL3RodW1ibmFpbC5jYwotQEAgLTc0LDYgKzc0LDcgQEAgYm9vbCBDUEJEdW1wKAotICAg ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICB9Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgdHJ5IHsKLSAgICAgICAgIGtmLT5zZXRfc3Ry aW5nICgiUlQgR2VuZXJhbCIsICJDYWNoZVBhdGgiLCBvcHRpb25zLmNhY2hlQmFzZURpcik7Ci0g ICAgICAgICBrZi0+c2V0X3N0cmluZyAoIlJUIEdlbmVyYWwiLCAiQXBwVmVyc2lvbiIsIFJUVkVS U0lPTik7Ci1AQCAtMzYxLDYgKzM2Miw3IEBAIHZvaWQgVGh1bWJuYWlsOjpfZ2VuZXJhdGVUaHVt Ym5haWxJbWFnZSgpCi0gICAgIHRwcCA9IG51bGxwdHI7Ci0gICAgIGRlbGV0ZVtdIGxhc3RJbWc7 Ci0gICAgIGxhc3RJbWcgPSBudWxscHRyOwotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBw OjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIHR3ID0gb3B0aW9ucy5tYXhUaHVtYm5haWxXaWR0aDsK LSAgICAgdGggPSBvcHRpb25zLm1heFRodW1ibmFpbEhlaWdodDsKLSAgICAgaW1nUmF0aW8gPSAt MS47Ci1AQCAtNDc3LDYgKzQ3OSw3IEBAIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFyYW1z KiBUaHVtYm5haWw6OmNyZWF0ZVByb2NQYXJhbXNGb3JVcGRhdGUoYm9vbCByZXR1Ci0gICAgIC8v IHRyeSB0byBsb2FkIHRoZSBsYXN0IHNhdmVkIHBhcmFtZXRlcnMgZnJvbSB0aGUgY2FjaGUgb3Ig ZnJvbSB0aGUgcGFyYW1maWxlIGZpbGUKLSAgICAgUHJvY1BhcmFtcyogbGRwcm9mID0gbnVsbHB0 cjsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot ICAgICBHbGliOjp1c3RyaW5nIGRlZlByb2YgPSBnZXRUeXBlKCkgPT0gRlRfUmF3ID8gb3B0aW9u cy5kZWZQcm9mUmF3IDogb3B0aW9ucy5kZWZQcm9mSW1nOwotIAotICAgICBjb25zdCBDYWNoZUlt YWdlRGF0YSogY2ZzID0gZ2V0Q2FjaGVJbWFnZURhdGEoKTsKLUBAIC00ODYsOCArNDg5LDggQEAg cnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMqIFRodW1ibmFpbDo6Y3JlYXRlUHJvY1Bh cmFtc0ZvclVwZGF0ZShib29sIHJldHUKLSAKLSAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBvdXRG TmFtZSA9Ci0gICAgICAgICAob3B0aW9ucy5wYXJhbXNMb2FkTG9jYXRpb24gPT0gUExMX0lucHV0 ICYmIG9wdGlvbnMuc2F2ZVBhcmFtc0ZpbGUpID8KLS0gICAgICAgIGZuYW1lICsgcGFyYW1GaWxl RXh0ZW5zaW9uIDoKLS0gICAgICAgIGdldENhY2hlRmlsZU5hbWUoInByb2ZpbGVzIiwgcGFyYW1G aWxlRXh0ZW5zaW9uKTsKLSsgICAgICAgIGZuYW1lICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lP TiA6Ci0rICAgICAgICBnZXRDYWNoZUZpbGVOYW1lKCJwcm9maWxlcyIsIEFwcDo6UEFSQU1fRklM RV9FWFRFTlNJT04pOwotIAotICAgICBpZiAoIXJ1bl9jcGIpIHsKLSAgICAgICAgIGlmIChkZWZQ cm9mID09IERFRlBST0ZJTEVfRFlOQU1JQyAmJiBjcmVhdGUgJiYgY2ZzICYmIGNmcy0+ZXhpZlZh bGlkKSB7Ci1AQCAtNTE5LDcgKzUyMiw3IEBAIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFy YW1zKiBUaHVtYm5haWw6OmNyZWF0ZVByb2NQYXJhbXNGb3JVcGRhdGUoYm9vbCByZXR1Ci0gICAg ICAgICBHbGliOjp1c3RyaW5nIHRtcEZpbGVOYW1lKCBHbGliOjpidWlsZF9maWxlbmFtZShvcHRp b25zLmNhY2hlQmFzZURpciwgR2xpYjo6dXN0cmluZzo6Y29tcG9zZSgiQ1BCX3RlbXBfJTEudHh0 IiwgaW5kZXgrKykpICk7Ci0gCi0gICAgICAgICBDUEJEdW1wKHRtcEZpbGVOYW1lLCBmbmFtZSwg b3V0Rk5hbWUsCi0tICAgICAgICAgICAgICAgIGRlZmF1bHRQcGFyYW1zUGF0aCA9PSBERUZQUk9G SUxFX0lOVEVSTkFMID8gREVGUFJPRklMRV9JTlRFUk5BTCA6IEdsaWI6OmJ1aWxkX2ZpbGVuYW1l KGRlZmF1bHRQcGFyYW1zUGF0aCwgR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUoZGVmUHJvZikgKyBw YXJhbUZpbGVFeHRlbnNpb24pLCBjZnMsIGZsYWdnaW5nTW9kZSk7Ci0rICAgICAgICAgICAgICAg IGRlZmF1bHRQcGFyYW1zUGF0aCA9PSBERUZQUk9GSUxFX0lOVEVSTkFMID8gREVGUFJPRklMRV9J TlRFUk5BTCA6IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGRlZmF1bHRQcGFyYW1zUGF0aCwgR2xpYjo6 cGF0aF9nZXRfYmFzZW5hbWUoZGVmUHJvZikgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKSwg Y2ZzLCBmbGFnZ2luZ01vZGUpOwotIAotICAgICAgICAgLy8gRm9yIHRoZSBmaWxlbmFtZSBldGMu IGRvIE5PVCB1c2Ugc3RyZWFtcywgc2luY2UgdGhleSBhcmUgbm90IFVURjggc2FmZQotICAgICAg ICAgR2xpYjo6dXN0cmluZyBjbWRMaW5lID0gb3B0aW9ucy5DUEJQYXRoICsgR2xpYjo6dXN0cmlu ZygiIFwiIikgKyB0bXBGaWxlTmFtZSArIEdsaWI6OnVzdHJpbmcoIlwiIik7Ci1AQCAtNTY3LDIy ICs1NzAsMjIgQEAgdm9pZCBUaHVtYm5haWw6OmxvYWRQcm9jUGFyYW1zKCkKLSAgICAgcHBhcmFt c1ZhbGlkID0gZmFsc2U7Ci0gICAgIHBwYXJhbXMtPnNldERlZmF1bHRzKCk7Ci0gCi0tICAgIGlm IChvcHRpb25zLnBhcmFtc0xvYWRMb2NhdGlvbiA9PSBQTExfSW5wdXQpIHsKLSsgICAgaWYgKEFw cDo6Z2V0KCkub3B0aW9ucygpLnBhcmFtc0xvYWRMb2NhdGlvbiA9PSBQTExfSW5wdXQpIHsKLSAg ICAgICAgIC8vIHRyeSB0byBsb2FkIGl0IGZyb20gcGFyYW1zIGZpbGUgbmV4dCB0byB0aGUgaW1h Z2UgZmlsZQotLSAgICAgICAgY29uc3QgaW50IHBwcmVzID0gcHBhcmFtcy0+bG9hZChmbmFtZSAr IHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICBjb25zdCBpbnQgcHByZXMgPSBwcGFyYW1z LT5sb2FkKGZuYW1lICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTik7Ci0gICAgICAgICBwcGFy YW1zVmFsaWQgPSAhcHByZXMgJiYgcHBhcmFtcy0+cHBWZXJzaW9uID49IDIyMDsKLSAKLSAgICAg ICAgIC8vIGlmIG5vIHN1Y2Nlc3MsIHRyeSB0byBsb2FkIHRoZSBjYWNoZWQgdmVyc2lvbiBvZiB0 aGUgcHJvY3BhcmFtcwotICAgICAgICAgaWYgKCFwcGFyYW1zVmFsaWQpIHsKLS0gICAgICAgICAg ICBwcGFyYW1zVmFsaWQgPSAhcHBhcmFtcy0+bG9hZChnZXRDYWNoZUZpbGVOYW1lKCJwcm9maWxl cyIsIHBhcmFtRmlsZUV4dGVuc2lvbikpOwotKyAgICAgICAgICAgIHBwYXJhbXNWYWxpZCA9ICFw cGFyYW1zLT5sb2FkKGdldENhY2hlRmlsZU5hbWUoInByb2ZpbGVzIiwgQXBwOjpQQVJBTV9GSUxF X0VYVEVOU0lPTikpOwotICAgICAgICAgfQotICAgICB9IGVsc2UgewotICAgICAgICAgLy8gdHJ5 IHRvIGxvYWQgaXQgZnJvbSBjYWNoZQotLSAgICAgICAgcHBhcmFtc1ZhbGlkID0gIXBwYXJhbXMt PmxvYWQoZ2V0Q2FjaGVGaWxlTmFtZSgicHJvZmlsZXMiLCBwYXJhbUZpbGVFeHRlbnNpb24pKTsK LSsgICAgICAgIHBwYXJhbXNWYWxpZCA9ICFwcGFyYW1zLT5sb2FkKGdldENhY2hlRmlsZU5hbWUo InByb2ZpbGVzIiwgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTikpOwotIAotICAgICAgICAgLy8g aWYgbm8gc3VjY2VzcywgdHJ5IHRvIGxvYWQgaXQgZnJvbSBwYXJhbXMgZmlsZSBuZXh0IHRvIHRo ZSBpbWFnZSBmaWxlCi0gICAgICAgICBpZiAoIXBwYXJhbXNWYWxpZCkgewotLSAgICAgICAgICAg IGNvbnN0IGludCBwcHJlcyA9IHBwYXJhbXMtPmxvYWQoZm5hbWUgKyBwYXJhbUZpbGVFeHRlbnNp b24pOwotKyAgICAgICAgICAgIGNvbnN0IGludCBwcHJlcyA9IHBwYXJhbXMtPmxvYWQoZm5hbWUg KyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgICAgICAgICBwcGFyYW1zVmFsaWQg PSAhcHByZXMgJiYgcHBhcmFtcy0+cHBWZXJzaW9uID49IDIyMDsKLSAgICAgICAgIH0KLSAgICAg fQotQEAgLTYyMCwxNyArNjIzLDE3IEBAIHZvaWQgVGh1bWJuYWlsOjpjbGVhclByb2NQYXJhbXMg KGludCB3aG9DbGVhcmVkSXQpCi0gICAgICAgICAgICAgdXBkYXRlQ2FjaGUoKTsKLSAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgLy8gcmVtb3ZlIHBhcmFtIGZpbGUgZnJvbSBjYWNoZQot LSAgICAgICAgICAgIEdsaWI6OnVzdHJpbmcgZm5hbWVfID0gZ2V0Q2FjaGVGaWxlTmFtZSAoInBy b2ZpbGVzIiwgcGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsgICAgICAgICAgICBHbGliOjp1c3RyaW5n IGZuYW1lXyA9IGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIEFwcDo6UEFSQU1fRklMRV9F WFRFTlNJT04pOwotICAgICAgICAgICAgIGdfcmVtb3ZlIChmbmFtZV8uY19zdHIgKCkpOwotIAot ICAgICAgICAgICAgIC8vIHJlbW92ZSBwYXJhbSBmaWxlIGxvY2F0ZWQgbmV4dCB0byB0aGUgZmls ZQotLSAgICAgICAgICAgIGZuYW1lXyA9IGZuYW1lICsgcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAg ICAgICAgICAgIGZuYW1lXyA9IGZuYW1lICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTjsKLSAg ICAgICAgICAgICBnX3JlbW92ZSAoZm5hbWVfLmNfc3RyICgpKTsKLSAKLS0gICAgICAgICAgICBm bmFtZV8gPSByZW1vdmVFeHRlbnNpb24oZm5hbWUpICsgcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAg ICAgICAgICAgIGZuYW1lXyA9IHJlbW92ZUV4dGVuc2lvbihmbmFtZSkgKyBBcHA6OlBBUkFNX0ZJ TEVfRVhURU5TSU9OOwotICAgICAgICAgICAgIGdfcmVtb3ZlIChmbmFtZV8uY19zdHIgKCkpOwot IAotLSAgICAgICAgICAgIGlmIChjZnMuZm9ybWF0ID09IEZUX1JhdyAmJiBvcHRpb25zLmludGVy bmFsVGh1bWJJZlVudG91Y2hlZCAmJiBjZnMudGh1bWJJbWdUeXBlICE9IENhY2hlSW1hZ2VEYXRh OjpRVUlDS19USFVNQk5BSUwpIHsKLSsgICAgICAgICAgICBpZiAoY2ZzLmZvcm1hdCA9PSBGVF9S YXcgJiYgQXBwOjpnZXQoKS5vcHRpb25zKCkuaW50ZXJuYWxUaHVtYklmVW50b3VjaGVkICYmIGNm cy50aHVtYkltZ1R5cGUgIT0gQ2FjaGVJbWFnZURhdGE6OlFVSUNLX1RIVU1CTkFJTCkgewotICAg ICAgICAgICAgICAgICAvLyByZWdlbmVyYXRlIHRodW1ibmFpbCwgaWUgbG9hZCB0aGUgcXVpY2sg dGh1bWIgYWdhaW4uIEZvciB0aGUgcmFyZSBmb3JtYXRzIG5vdCBzdXBwb3J0aW5nIHF1aWNrIHRo dW1icyB0aGlzIHdpbGwKLSAgICAgICAgICAgICAgICAgLy8gYmUgYSBiaXQgc2xvdyBhcyBhIG5l dyBmdWxsIHRodW1ibmFpbCB3aWxsIGJlIGdlbmVyYXRlZCB1bm5lY2Vzc2FyaWx5LCBidXQgY3Vy cmVudGx5IHRoZXJlIGlzIG5vIHdheSB0byBwcmUtY2hlY2sKLSAgICAgICAgICAgICAgICAgLy8g aWYgdGhlIGZvcm1hdCBzdXBwb3J0cyBxdWljayB0aHVtYnMuCi1AQCAtNzQ4LDggKzc1MSw4IEBA IHZvaWQgVGh1bWJuYWlsOjppbWFnZURldmVsb3BlZCAoKQotICAgICBjZnMucmVjZW50bHlTYXZl ZCA9IHRydWU7Ci0gICAgIGNmcy5zYXZlIChnZXRDYWNoZUZpbGVOYW1lICgiZGF0YSIsICIudHh0 IikpOwotIAotLSAgICBpZiAob3B0aW9ucy5zYXZlUGFyYW1zQ2FjaGUpIHsKLS0gICAgICAgIHBw YXJhbXMtPnNhdmUgKGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIHBhcmFtRmlsZUV4dGVu c2lvbikpOwotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkuc2F2ZVBhcmFtc0NhY2hlKSB7 Ci0rICAgICAgICBwcGFyYW1zLT5zYXZlIChnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBB cHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKSk7Ci0gICAgIH0KLSB9Ci0gCi1AQCAtODM5LDYgKzg0 Miw3IEBAIHZvaWQgVGh1bWJuYWlsOjpnZXRUaHVtYm5haWxTaXplKGludCAmdywgaW50ICZoLCBj b25zdCBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvCi0gICAgICAgICB3ID0gdHdfICogaCAvIHRo XzsKLSAgICAgfQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRp b25zKCk7Ci0gICAgIGlmICh3ID4gb3B0aW9ucy5tYXhUaHVtYm5haWxXaWR0aCkgewotICAgICAg ICAgY29uc3QgZmxvYXQgcyA9IHN0YXRpY19jYXN0PGZsb2F0PihvcHRpb25zLm1heFRodW1ibmFp bFdpZHRoKSAvIHc7Ci0gICAgICAgICB3ID0gb3B0aW9ucy5tYXhUaHVtYm5haWxXaWR0aDsKLUBA IC05MzEsNiArOTM1LDcgQEAgcnRlbmdpbmU6OklJbWFnZTgqIFRodW1ibmFpbDo6dXBncmFkZVRo dW1iSW1hZ2UgKGNvbnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm8KLSAKLSB2b2lkIFRodW1i bmFpbDo6Z2VuZXJhdGVFeGlmRGF0ZVRpbWVTdHJpbmdzICgpCi0gewotKyAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChjZnMudGltZVZhbGlk KSB7Ci0gICAgICAgICBzdGQ6OnN0cmluZyBkYXRlRm9ybWF0ID0gb3B0aW9ucy5kYXRlRm9ybWF0 OwotICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zdHI7Ci1AQCAtMTEwMCw3ICsxMTA1LDcg QEAgdm9pZCBUaHVtYm5haWw6Ol9sb2FkVGh1bWJuYWlsKGJvb2wgZmlyc3RUcmlhbCkKLSB7Ci0g Ci0gICAgIHR3ID0gLTE7Ci0tICAgIHRoID0gb3B0aW9ucy5tYXhUaHVtYm5haWxIZWlnaHQ7Ci0r ICAgIHRoID0gQXBwOjpnZXQoKS5vcHRpb25zKCkubWF4VGh1bWJuYWlsSGVpZ2h0OwotICAgICBk ZWxldGUgdHBwOwotICAgICB0cHAgPSBuZXcgcnRlbmdpbmU6OlRodW1ibmFpbCAoKTsKLSAgICAg dHBwLT5pc1JhdyA9IChjZnMuZm9ybWF0ID09IChpbnQpIEZUX1Jhdyk7Ci1AQCAtMTE5NSw5ICsx MjAwLDEwIEBAIHZvaWQgVGh1bWJuYWlsOjp1cGRhdGVDYWNoZSAoYm9vbCB1cGRhdGVQUGFyYW1z LCBib29sIHVwZGF0ZUNhY2hlSW1hZ2VEYXRhKQotICAgICB1cGRhdGVQcm9jUGFyYW1zUHJvcGVy dGllcygpOwotIAotICAgICBpZiAodXBkYXRlUFBhcmFtcyAmJiBwcGFyYW1zVmFsaWQpIHsKLSsg ICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg ICAgIHBwYXJhbXMtPnNhdmUgKAotLSAgICAgICAgICAgIG9wdGlvbnMuc2F2ZVBhcmFtc0ZpbGUg ID8gZm5hbWUgKyBwYXJhbUZpbGVFeHRlbnNpb24gOiAiIiwKLS0gICAgICAgICAgICBvcHRpb25z LnNhdmVQYXJhbXNDYWNoZSA/IGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIHBhcmFtRmls ZUV4dGVuc2lvbikgOiAiIiwKLSsgICAgICAgICAgICBvcHRpb25zLnNhdmVQYXJhbXNGaWxlICA/ IGZuYW1lICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiA6ICIiLAotKyAgICAgICAgICAgIG9w dGlvbnMuc2F2ZVBhcmFtc0NhY2hlID8gZ2V0Q2FjaGVGaWxlTmFtZSAoInByb2ZpbGVzIiwgQXBw OjpQQVJBTV9GSUxFX0VYVEVOU0lPTikgOiAiIiwKLSAgICAgICAgICAgICB0cnVlCi0gICAgICAg ICApOwotICAgICB9Ci1AQCAtMTI5Miw2ICsxMjk4LDcgQEAgYm9vbCBUaHVtYm5haWw6Om9wZW5E ZWZhdWx0Vmlld2VyKGludCBkZXN0aW5hdGlvbikKLSAjaWZkZWYgX1dJTjMyCi0gICAgIEdsaWI6 OnVzdHJpbmcgb3BlbkZOYW1lOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChkZXN0aW5hdGlvbiA9PSAxKSB7Ci0gICAgICAgICBv cGVuRk5hbWUgPSBHbGliOjp1c3RyaW5nOjpjb21wb3NlICgiJTEuJTIiLCBCYXRjaFF1ZXVlOjpj YWxjQXV0b0ZpbGVOYW1lQmFzZShmbmFtZSksIG9wdGlvbnMuc2F2ZUZvcm1hdEJhdGNoLmZvcm1h dCk7Ci0gCi1AQCAtMTM4Miw2ICsxMzg5LDggQEAgdm9pZCBUaHVtYm5haWw6OmxvYWRQcm9wZXJ0 aWVzKCkKLSAgICAgLy8gZ2V0IGluaXRpYWwgcmFuayBmcm9tIGNhY2hlIG9yIGltYWdlIG1ldGFk YXRhCi0gICAgIGdldFJhbmtGcm9tTWV0YWRhdGEoY2ZzLCBmbmFtZSwgcHJvcGVydGllcy5yYW5r LnZhbHVlKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotKwotICAgICAvLyB1cGRhdGUgcmFuayBhbmQgY29sb3IgZnJvbSBwcm9jcGFyYW1zIG9y IHhtcCBzaWRlY2FyCi0gICAgIC8vIGxvYWQgdHJhc2ggZnJvbSBwcm9jcGFyYW1zCi0gICAgIGlm IChwcGFyYW1zVmFsaWQpIHsKLUBAIC0xNDIzLDYgKzE0MzIsOCBAQCB2b2lkIFRodW1ibmFpbDo6 dXBkYXRlUHJvY1BhcmFtc1Byb3BlcnRpZXMoYm9vbCBmb3JjZVVwZGF0ZSkKLSAgICAgICAgIHJl dHVybiBydGVuZ2luZTo6RXhpdjJNZXRhZGF0YTo6Z2V0WG1wU2lkZWNhcihmbmFtZSk7Ci0gICAg IH0pOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7 Ci0rCi0gICAgIC8vIHNhdmUgcHJvY3BhcmFtcyByYW5rIGFuZCBjb2xvciBhbHNvIHdoZW4gb3B0 aW9ucy50aHVtYm5haWxSYW5rQ29sb3JNb2RlID09IE9wdGlvbnM6OlRodW1ibmFpbFByb3BlcnR5 TW9kZTo6WE1QCi0gICAgIC8vIHNvIHRoZXknbGwgYmUga2VwdCBpbiBzeW5jCi0gICAgIC8vIFJh bmsgY2FuIGJlIC0xIHRvIHByaW9yaXRpemUgdGhlIHJhbmsgaW4gdGhlIG1ldGFkYXRhLiBJZiB0 aGUgbWV0YWRhdGEKLUBAIC0xNDY1LDcgKzE0NzYsNyBAQCB2b2lkIFRodW1ibmFpbDo6c2F2ZVhN UFNpZGVjYXJQcm9wZXJ0aWVzKCkKLSAgICAgICAgIHJldHVybjsKLSAgICAgfQotIAotLSAgICBp ZiAob3B0aW9ucy50aHVtYm5haWxSYW5rQ29sb3JNb2RlICE9IE9wdGlvbnM6OlRodW1ibmFpbFBy b3BlcnR5TW9kZTo6WE1QKSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLm9wdGlvbnMoKS50aHVtYm5h aWxSYW5rQ29sb3JNb2RlICE9IE9wdGlvbnM6OlRodW1ibmFpbFByb3BlcnR5TW9kZTo6WE1QKSB7 Ci0gICAgICAgICByZXR1cm47Ci0gICAgIH0KLSAKLUBAIC0xNDkwLDYgKzE1MDEsNyBAQCB2b2lk IFRodW1ibmFpbDo6c2F2ZVhNUFNpZGVjYXJQcm9wZXJ0aWVzKCkKLSAKLSB2b2lkIFRodW1ibmFp bDo6c2F2ZU1ldGFkYXRhKCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKG9wdGlvbnMucnRTZXR0aW5ncy5tZXRhZGF0YV94bXBf c3luYyAhPSBydGVuZ2luZTo6U2V0dGluZ3M6Ok1ldGFkYXRhWG1wU3luYzo6UkVBRF9XUklURSkg ewotICAgICAgICAgcmV0dXJuOwotICAgICB9Ci1kaWZmIC0tZ2l0IGEvcnRndWkvdG9uZWN1cnZl LmNjIGIvcnRndWkvdG9uZWN1cnZlLmNjCi1pbmRleCA5ZmI2ZTE3ZTEuLmM4OGQxMTFjYiAxMDA2 NDQKLS0tLSBhL3J0Z3VpL3RvbmVjdXJ2ZS5jYwotKysrIGIvcnRndWkvdG9uZWN1cnZlLmNjCi1A QCAtMTc4LDYgKzE3OCw3IEBAIFRvbmVDdXJ2ZTo6VG9uZUN1cnZlKCkgOiBGb2xkYWJsZVRvb2xQ YW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX0VYUE9TVVJFX0xBQkVMCi0gICAgIHRvbmVDdXJ2 ZU1vZGUtPnNldF9hY3RpdmUoMCk7Ci0gICAgIHRvbmVDdXJ2ZU1vZGUtPnNldF90b29sdGlwX3Rl eHQoTSgiVFBfRVhQT1NVUkVfVENNT0RFX0xBQkVMMSIpKTsKLSAKLSsgICAgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgY3VydmVFZGl0b3JHID0gbmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0VG9uZUN1cnZlc0RpciwgTSgiVFBfRVhQT1NVUkVf Q1VSVkVFRElUT1IxIikpOwotICAgICBjdXJ2ZUVkaXRvckctPnNldEN1cnZlTGlzdGVuZXIodGhp cyk7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkvdG9vbHBhbmVsY29vcmQuY2MgYi9ydGd1aS90b29s cGFuZWxjb29yZC5jYwotaW5kZXggZGQ5YzAwYWY1Li4zMmMwNGY0MTcgMTAwNjQ0Ci0tLS0gYS9y dGd1aS90b29scGFuZWxjb29yZC5jYwotKysrIGIvcnRndWkvdG9vbHBhbmVsY29vcmQuY2MKLUBA IC00NzAsNiArNDcwLDcgQEAgVG9vbFBhbmVsQ29vcmRpbmF0b3I6OlRvb2xQYW5lbENvb3JkaW5h dG9yIChib29sIGJhdGNoKSA6IGlwYyAobnVsbHB0ciksIGZhdm9yaXQKLSAgICAgICAgIHZiUGFu ZWxFbmRbaV0tPnBhY2tfc3RhcnQoKmltZ1BhbmVsRW5kW2ldLCBHdGs6OlBBQ0tfU0hSSU5LKTsK LSAgICAgICAgIHZiUGFuZWxFbmRbaV0tPnNob3dfYWxsKCk7Ci0gICAgIH0KLSsgICAgY29uc3Qg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICB1cGRhdGVWU2Nyb2xs YmFycyhvcHRpb25zLmhpZGVUUFZTY3JvbGxiYXIpOwotIAotICAgICBHdGs6OkJveCAqZmF2b3Jp dGVQYW5lbENvbnRhaW5lciA9Ci1AQCAtNzYzLDYgKzc2NCw3IEBAIGJvb2wgVG9vbFBhbmVsQ29v cmRpbmF0b3I6OmlzRmF2b3JpdGFibGUoVG9vbCB0b29sKQotIAotIHZvaWQgVG9vbFBhbmVsQ29v cmRpbmF0b3I6Om5vdGVib29rUGFnZUNoYW5nZWQoR3RrOjpXaWRnZXQqIHBhZ2UsIGd1aW50IHBh Z2VfbnVtKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICB1cGRhdGVQYW5lbFRvb2xzKHBhZ2UsIG9wdGlvbnMuZmF2b3JpdGVzLCBvcHRp b25zLmNsb25lRmF2b3JpdGVUb29scyk7Ci0gCi0gICAgIC8vIExvY2FsbGFiIHNwb3QgY3VydmVz IGFyZSBzZXQgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgcGhvdG8gaGFzIGJlZW4gbG9hZGVkICh0 byBhdm9pZAotQEAgLTE0MjUsNiArMTQyNyw3IEBAIHZvaWQgVG9vbFBhbmVsQ29vcmRpbmF0b3I6 OmNsb3NlSW1hZ2UoKQotIAotIHZvaWQgVG9vbFBhbmVsQ29vcmRpbmF0b3I6OmNsb3NlQWxsVG9v bHMoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygp OwotICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnMudHBPcGVuLnNpemUoKTsgKytp KSB7Ci0gICAgICAgICBpZiAoaSA8IGV4cExpc3Quc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgZXhw TGlzdFtpXS0+c2V0X2V4cGFuZGVkKGZhbHNlKTsKLUBAIC0xNDM0LDYgKzE0MzcsNyBAQCB2b2lk IFRvb2xQYW5lbENvb3JkaW5hdG9yOjpjbG9zZUFsbFRvb2xzKCkKLSAKLSB2b2lkIFRvb2xQYW5l bENvb3JkaW5hdG9yOjpvcGVuQWxsVG9vbHMoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9w dGlvbnMudHBPcGVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICBpZiAoaSA8IGV4cExpc3Quc2l6 ZSgpKSB7Ci0gICAgICAgICAgICAgZXhwTGlzdFtpXS0+c2V0X2V4cGFuZGVkKHRydWUpOwotQEAg LTE0NDMsNiArMTQ0Nyw3IEBAIHZvaWQgVG9vbFBhbmVsQ29vcmRpbmF0b3I6Om9wZW5BbGxUb29s cygpCi0gCi0gdm9pZCBUb29sUGFuZWxDb29yZGluYXRvcjo6dXBkYXRlVG9vbFN0YXRlKCkKLSB7 Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg aWYgKG9wdGlvbnMudHBPcGVuLmVtcHR5KCkpIHsKLSAgICAgICAgIGZvciAoYXV0byBleHBhbmRl ciA6IGV4cExpc3QpIHsKLSAgICAgICAgICAgICBleHBhbmRlci0+c2V0X2V4cGFuZGVkKGZhbHNl KTsKLUBAIC0xNDg1LDYgKzE0OTAsNyBAQCB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9yOjp3cml0 ZU9wdGlvbnMoKQotIAotICAgICBjcm9wLT53cml0ZU9wdGlvbnMoKTsKLSAKLSsgICAgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKG9wdGlvbnMuYXV0 b1NhdmVUcE9wZW4pIHsKLSAgICAgICAgIHdyaXRlVG9vbEV4cGFuZGVkU3RhdHVzKG9wdGlvbnMu dHBPcGVuKTsKLSAgICAgfQotQEAgLTE5NTYsNiArMTk2Miw3IEBAIHZvaWQgVG9vbFBhbmVsQ29v cmRpbmF0b3I6OnRvb2xTZWxlY3RlZChUb29sTW9kZSB0b29sKQotICAgICAgICAgICAgIGJyZWFr OwotICAgICB9Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlv bnMoKTsKLSAgICAgdXBkYXRlVG9vbExvY2F0aW9ucyhvcHRpb25zLmZhdm9yaXRlcywgb3B0aW9u cy5jbG9uZUZhdm9yaXRlVG9vbHMpOwotIAotICAgICBub3RlYm9va2Nvbm4uYmxvY2soZmFsc2Up OwotZGlmZiAtLWdpdCBhL3J0Z3VpL3ZpYnJhbmNlLmNjIGIvcnRndWkvdmlicmFuY2UuY2MKLWlu ZGV4IGM5Mjg1MTljNS4uYjU1NGQyYTM0IDEwMDY0NAotLS0tIGEvcnRndWkvdmlicmFuY2UuY2MK LSsrKyBiL3J0Z3VpL3ZpYnJhbmNlLmNjCi1AQCAtNjcsNiArNjcsNyBAQCBWaWJyYW5jZTo6Vmli cmFuY2UgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1ZJQlJB TkNFX0xBQkVMIgotICAgICBwYXN0U2F0VG9nLT5zZXRfYWN0aXZlICh0cnVlKTsKLSAgICAgcGFj a19zdGFydCgqcGFzdFNhdFRvZywgR3RrOjpQQUNLX1NIUklOSywgMCk7Ci0gCi0rICAgIGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGN1cnZlRWRpdG9yR0cg PSBuZXcgQ3VydmVFZGl0b3JHcm91cCAob3B0aW9ucy5sYXN0VmlicmFuY2VDdXJ2ZXNEaXIsIE0o IlRQX1ZJQlJBTkNFX0NVUlZFRURJVE9SX1NLSU5UT05FU19MQUJFTCIpKTsKLSAgICAgY3VydmVF ZGl0b3JHRy0+c2V0Q3VydmVMaXN0ZW5lciAodGhpcyk7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkv d2F2ZWxldC5jYyBiL3J0Z3VpL3dhdmVsZXQuY2MKLWluZGV4IGYxYmU1ZDE3ZC4uNTAyMTdjZDRh IDEwMDY0NAotLS0tIGEvcnRndWkvd2F2ZWxldC5jYwotKysrIGIvcnRndWkvd2F2ZWxldC5jYwot QEAgLTY1LDIyICs2NSwyMiBAQCBzdGQ6OnZlY3RvcjxHcmFkaWVudE1pbGVzdG9uZT4gbWFrZVdo b2xlSHVlUmFuZ2UoKQotIAotIFdhdmVsZXQ6OldhdmVsZXQoKSA6Ci0gICAgIEZvbGRhYmxlVG9v bFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfV0FWRUxFVF9MQUJFTCIpLCB0cnVlLCB0cnVl KSwKLS0gICAgY3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdh dmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ09OVEVESVQiKSkpLAotLSAgICAvL2N1cnZl RWRpdG9yQyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGly LCBNKCJUUF9XQVZFTEVUX0NPTlRSQVNURURJVCIpKSksCi0tICAgIENDV2N1cnZlRWRpdG9yRyhu ZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9X QVZFTEVUX0NDVVJWRSIpKSksCi0tICAgIGN1cnZlRWRpdG9yYmwobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9CTENVUlZFIikp KSwKLS0gICAgY3VydmVFZGl0b3JSRVMobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0 V2F2ZWxldEN1cnZlc0RpcikpLAotLSAgICBjdXJ2ZUVkaXRvckdBTShuZXcgQ3VydmVFZGl0b3JH cm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGlyKSksCi0rICAgIGN1cnZlRWRpdG9yRyhu ZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVsZXRD dXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ09OVEVESVQiKSkpLAotKyAgICAvL2N1cnZlRWRpdG9y QyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVs ZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ09OVFJBU1RFRElUIikpKSwKLSsgICAgQ0NXY3Vy dmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5s YXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9DQ1VSVkUiKSkpLAotKyAgICBjdXJ2 ZUVkaXRvcmJsKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5s YXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9CTENVUlZFIikpKSwKLSsgICAgY3Vy dmVFZGl0b3JSRVMobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp Lmxhc3RXYXZlbGV0Q3VydmVzRGlyKSksCi0rICAgIGN1cnZlRWRpdG9yR0FNKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0V2F2ZWxldEN1cnZlc0Rpcikp LAotICAgICBzZXBhcmF0b3JOZXV0cmFsKEd0azo6bWFuYWdlKG5ldyBHdGs6OlNlcGFyYXRvcihH dGs6Ok9SSUVOVEFUSU9OX0hPUklaT05UQUwpKSksCi0gICAgIHNlcGFyYXRvcmVkZ2UoR3RrOjpt YW5hZ2UobmV3IEd0azo6U2VwYXJhdG9yKEd0azo6T1JJRU5UQVRJT05fSE9SSVpPTlRBTCkpKSwK LS0gICAgb3BhQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdh dmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ09MT1JUIikpKSwKLS0gICAgb3BhY2l0eUN1 cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVz RGlyLCBNKCJUUF9XQVZFTEVUX09QQUNJVFkiKSkpLAotLSAgICBDdXJ2ZUVkaXRvcndhdm5vaXNl KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQ X1dBVkVMRVRfREVOT0lTRSIpKSksCi0tICAgIEN1cnZlRWRpdG9yd2F2bm9pc2VoKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRf REVOT0lTRUgiKSkpLAotLSAgICBDdXJ2ZUVkaXRvcndhdmd1aWQobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9ERU5PSVNFR1VJ RCIpKSksCi0tICAgIEN1cnZlRWRpdG9yd2F2aHVlKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfREVOT0lTRUhVRSIpKSksCi0t ICAgIG9wYWNpdHlDdXJ2ZUVkaXRvclcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0 V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9PUEFDSVRZVyIpKSksCi0tICAgIG9wYWNp dHlDdXJ2ZUVkaXRvcldMKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdhdmVsZXRD dXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfT1BBQ0lUWVdMIikpKSwKLSsgICAgb3BhQ3VydmVFZGl0 b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0V2F2 ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9DT0xPUlQiKSkpLAotKyAgICBvcGFjaXR5Q3Vy dmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5s YXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9PUEFDSVRZIikpKSwKLSsgICAgQ3Vy dmVFZGl0b3J3YXZub2lzZShuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRp b25zKCkubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfREVOT0lTRSIpKSksCi0r ICAgIEN1cnZlRWRpdG9yd2F2bm9pc2VoKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKS5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9ERU5PSVNF SCIpKSksCi0rICAgIEN1cnZlRWRpdG9yd2F2Z3VpZChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6 OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRf REVOT0lTRUdVSUQiKSkpLAotKyAgICBDdXJ2ZUVkaXRvcndhdmh1ZShuZXcgQ3VydmVFZGl0b3JH cm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQ X1dBVkVMRVRfREVOT0lTRUhVRSIpKSksCi0rICAgIG9wYWNpdHlDdXJ2ZUVkaXRvclcobmV3IEN1 cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RXYXZlbGV0Q3VydmVz RGlyLCBNKCJUUF9XQVZFTEVUX09QQUNJVFlXIikpKSwKLSsgICAgb3BhY2l0eUN1cnZlRWRpdG9y V0wobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RXYXZl bGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX09QQUNJVFlXTCIpKSksCi0gICAgIG1lZGlhbihH dGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9XQVZFTEVUX01FREkiKSkpKSwK LSAgICAgbWVkaWFubGV2KEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX1dB VkVMRVRfTUVESUxFViIpKSkpLAotICAgICBsaW5rZWRnKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNo ZWNrQnV0dG9uKE0oIlRQX1dBVkVMRVRfTElOS0VERyIpKSkpLAotZGlmZiAtLWdpdCBhL3J0Z3Vp L3doaXRlYmFsYW5jZS5jYyBiL3J0Z3VpL3doaXRlYmFsYW5jZS5jYwotaW5kZXggYzBhNjVmN2Y0 Li5jODQyOGYyNTcgMTAwNjQ0Ci0tLS0gYS9ydGd1aS93aGl0ZWJhbGFuY2UuY2MKLSsrKyBiL3J0 Z3VpL3doaXRlYmFsYW5jZS5jYwotQEAgLTI4MSw2ICsyODEsNyBAQCBXaGl0ZUJhbGFuY2U6Oldo aXRlQmFsYW5jZSAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBf V0JBTEFOQwotICAgICBzZXRFeHBhbmRBbGlnblByb3BlcnRpZXMoc3BvdHNpemUsIHRydWUsIGZh bHNlLCBHdGs6OkFMSUdOX0ZJTEwsIEd0azo6QUxJR05fQ0VOVEVSKTsKLSAgICAgc3BvdHNpemUt PmFwcGVuZCAoIjIiKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICBpZiAob3B0aW9ucy53aGl0ZUJhbGFuY2VTcG90U2l6ZSA9PSAyKSB7 Ci0gICAgICAgICBzcG90c2l6ZS0+c2V0X2FjdGl2ZSgwKTsKLSAgICAgfQotQEAgLTc0NSw3ICs3 NDYsNyBAQCB2b2lkIFdoaXRlQmFsYW5jZTo6c3BvdFByZXNzZWQgKCkKLSAKLSB2b2lkIFdoaXRl QmFsYW5jZTo6c3BvdFNpemVDaGFuZ2VkICgpCi0gewotLSAgICBvcHRpb25zLndoaXRlQmFsYW5j ZVNwb3RTaXplID0gZ2V0U2l6ZSgpOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkud2hp dGVCYWxhbmNlU3BvdFNpemUgPSBnZXRTaXplKCk7Ci0gCi0gICAgIGlmICh3Ymxpc3RlbmVyKSB7 Ci0gICAgICAgICB3Ymxpc3RlbmVyLT5zcG90V0JSZXF1ZXN0ZWQgKGdldFNpemUoKSk7Ci1AQCAt Nzg1LDcgKzc4Niw3IEBAIHZvaWQgV2hpdGVCYWxhbmNlOjpyZWFkIChjb25zdCBQcm9jUGFyYW1z KiBwcCwgY29uc3QgUGFyYW1zRWRpdGVkKiBwZWRpdGVkKQotIAotIAotIAotLSAgICBpZihvcHRp b25zLnJ0U2V0dGluZ3MuaXRjd2JfZW5hYmxlKSB7Ci0rICAgIGlmKEFwcDo6Z2V0KCkub3B0aW9u cygpLnJ0U2V0dGluZ3MuaXRjd2JfZW5hYmxlKSB7Ci0gICAgICAgICBpdGN3Yl9ncmVlbi0+c2hv dygpOwotICAgICAgICAgaXRjd2JfYWxnLT5zaG93KCk7Ci0gICAgICAgICBpdGN3Yl9wcmltLT5z aG93KCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkveHRyYW5zcHJvY2Vzcy5jYyBiL3J0Z3VpL3h0cmFu c3Byb2Nlc3MuY2MKLWluZGV4IGRlMmUxNDcyNS4uMmIyYmVhYzI0IDEwMDY0NAotLS0tIGEvcnRn dWkveHRyYW5zcHJvY2Vzcy5jYwotKysrIGIvcnRndWkveHRyYW5zcHJvY2Vzcy5jYwotQEAgLTI5 LDcgKzI5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOwotIAotIGNv bnN0IEdsaWI6OnVzdHJpbmcgWFRyYW5zUHJvY2Vzczo6VE9PTF9OQU1FID0gInh0cmFuc3Byb2Nl c3MiOwotIAotLVhUcmFuc1Byb2Nlc3M6OlhUcmFuc1Byb2Nlc3MgKCkgOiBGb2xkYWJsZVRvb2xQ YW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1JBV19MQUJFTCIpLCBvcHRpb25zLnByZXZkZW1v ICE9IFBEX1NpZGVjYXIpCi0rWFRyYW5zUHJvY2Vzczo6WFRyYW5zUHJvY2VzcyAoKSA6IEZvbGRh YmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUkFXX0xBQkVMIiksIEFwcDo6Z2V0 KCkub3B0aW9ucygpLnByZXZkZW1vICE9IFBEX1NpZGVjYXIpCi0gewotICAgICBhdXRvIG0gPSBQ cm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNlKCk7Ci0gICAgIEV2RGVtb3NhaWNCb3JkZXIgPSBt LT5uZXdFdmVudChERU1PU0FJQywgIkhJU1RPUllfTVNHX1JBV19CT1JERVIiKTsKLUBAIC03NCw2 ICs3NCw3IEBAIFhUcmFuc1Byb2Nlc3M6OlhUcmFuc1Byb2Nlc3MgKCkgOiBGb2xkYWJsZVRvb2xQ YW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1JBV19MCi0gICAgIGhiMS0+cGFja19lbmQgKCpt ZXRob2QsIEd0azo6UEFDS19FWFBBTkRfV0lER0VULCA0KTsKLSAgICAgcGFja19zdGFydCggKmhi MSwgR3RrOjpQQUNLX1NIUklOSywgNCk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgZHVhbERlbW9zYWljT3B0aW9ucyA9IEd0azo6bWFu YWdlIChuZXcgR3RrOjpCb3goR3RrOjpPUklFTlRBVElPTl9WRVJUSUNBTCkpOwotIAotICAgICBk dWFsRGVtb3NhaWNDb250cmFzdCA9IEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlciAoTSgiVFBfUkFX X0RVQUxERU1PU0FJQ0NPTlRSQVNUIiksIDAsIDEwMCwgMSwgMjApKTsKLWRpZmYgLS1naXQgYS9y dGd1aS94dHJhbnNyYXdleHBvc3VyZS5jYyBiL3J0Z3VpL3h0cmFuc3Jhd2V4cG9zdXJlLmNjCi1p bmRleCBlNGMxYzU1ZDAuLjQ5NmQwZDMwOCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3h0cmFuc3Jhd2V4 cG9zdXJlLmNjCi0rKysgYi9ydGd1aS94dHJhbnNyYXdleHBvc3VyZS5jYwotQEAgLTM4LDYgKzM4 LDcgQEAgWFRyYW5zUkFXRXhwb3N1cmU6OlhUcmFuc1JBV0V4cG9zdXJlICgpIDogRm9sZGFibGVU b29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCIKLSAgICAgUGV4QmxhY2tSZWQgPSBHdGs6Om1h bmFnZShuZXcgQWRqdXN0ZXIgKE0oIlRQX1JBV0VYUE9TX0JMQUNLX1JFRCIpLCAtMjA0OCwgMjA0 OCwgMS4wLCAwKSk7IC8vYmxhY2sgbGV2ZWwKLSAgICAgUGV4QmxhY2tSZWQtPnNldEFkanVzdGVy TGlzdGVuZXIgKHRoaXMpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gICAgIFBleEJsYWNrUmVkLT5zZXREZWxheShzdGQ6Om1heChvcHRpb25z LmFkanVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSkpOwotIAotICAgICBQ ZXhCbGFja1JlZC0+c2hvdygpOwotLS0gCi0yLjUwLjEKLQoKZGlmZiAtLWdpdCBhLzAwMDEtRml4 LXR5cG9zLnBhdGNoIGIvMDAwMS1GaXgtdHlwb3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGJkMDg3ZmEuLjAwMDAwMDAKLS0tIGEvMDAwMS1GaXgtdHlwb3MucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIGQxMmNhOTRkNDJjMTM3MGQ3MGZiMTRj YzE4NWQ0NmFhY2E5YzA1YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEYW5pZWwg R2FvIDxkYW5pZWwuZ2FvLndvcmtAZ21haWwuY29tPgotRGF0ZTogU3VuLCAyNCBBdWcgMjAyNSAx MTozNzowNiAtMDQwMAotU3ViamVjdDogW1BBVENIXSBGaXggdHlwb3MKLQotLS0tCi0gcnRndWkv ZmlsZXBhbmVsLmNjIHwgMiArLQotIHJ0Z3VpL21haW4uY2MgICAgICB8IDIgKy0KLSAyIGZpbGVz IGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBh L3J0Z3VpL2ZpbGVwYW5lbC5jYyBiL3J0Z3VpL2ZpbGVwYW5lbC5jYwotaW5kZXggZjA2OWYwOTll Li4yOGJlZTk4MzkgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9maWxlcGFuZWwuY2MKLSsrKyBiL3J0Z3Vp L2ZpbGVwYW5lbC5jYwotQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIEZpbGVQYW5lbDo6aW5pdCAo KQotICAgICBkaXJCcm93c2VyLT5maWxsRGlyVHJlZSAoKTsKLSAgICAgcGxhY2VzQnJvd3Nlci0+ cmVmcmVzaFBsYWNlc0xpc3QgKCk7Ci0gCi0tICAgIGlmICghQXBwOjpnZXQoKS5hcmd2MCgpLmVt cHR5KCkgJiYgR2xpYjo6ZmlsZV90ZXN0IChBcHA6OmdldCgpLmFyZ3YxKCksIEdsaWI6OkZJTEVf VEVTVF9FWElTVFMpKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5hcmd2MSgpLmVtcHR5KCkgJiYg R2xpYjo6ZmlsZV90ZXN0IChBcHA6OmdldCgpLmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVTVF9FWElT VFMpKSB7Ci0gICAgICAgICBHbGliOjp1c3RyaW5nIGQoQXBwOjpnZXQoKS5hcmd2MSgpKTsKLSAg ICAgICAgIGlmICghR2xpYjo6ZmlsZV90ZXN0KGQsIEdsaWI6OkZJTEVfVEVTVF9JU19ESVIpKSB7 Ci0gICAgICAgICAgICAgZCA9IEdsaWI6OnBhdGhfZ2V0X2Rpcm5hbWUoZCk7Ci1kaWZmIC0tZ2l0 IGEvcnRndWkvbWFpbi5jYyBiL3J0Z3VpL21haW4uY2MKLWluZGV4IGRlZDcwNzZiZS4uMTgwZTQz ZjVkIDEwMDY0NAotLS0tIGEvcnRndWkvbWFpbi5jYwotKysrIGIvcnRndWkvbWFpbi5jYwotQEAg LTEzOSw3ICsxMzksNyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAq KmFyZ3YgKQotICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbSA9PSAiLWdpbXAiKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnNldElzR2ltcFBsdWdpbih0cnVlKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICBhcHAuc2V0SXNTaW1wbGVFZGl0b3IodHJ1ZSk7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgYXBwLnNldElzUmVtb3RlKHRydWUpOwotKyAgICAgICAgICAg ICAgICAgICAgICAgIGFwcC5zZXRJc1JlbW90ZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gCi0tLSAKLTIuNTEuMQotCgpk aWZmIC0tZ2l0IGEvcmF3dGhlcmFwZWUuc3BlYyBiL3Jhd3RoZXJhcGVlLnNwZWMKaW5kZXggNTA2 OTMyMy4uM2NlMDc5ZiAxMDA2NDQKLS0tIGEvcmF3dGhlcmFwZWUuc3BlYworKysgYi9yYXd0aGVy YXBlZS5zcGVjCkBAIC0xMyw3ICsxMyw3IEBAIE5hbWU6ICAgICAgICAgICByYXd0aGVyYXBlZQog JWlmIDAlez9kZXZlbG9wbWVudH0KIFZlcnNpb246ICAgICAgICA1Ljl+MjAyMjEwMDJnaXQle3No b3J0Y29tbWl0fQogJWVsc2UKLVZlcnNpb246ICAgICAgICA1LjEyCitWZXJzaW9uOiAgICAgICAg NS4xMwogJWVuZGlmCiBSZWxlYXNlOiAgICAgICAgJWF1dG9yZWxlYXNlCiBTdW1tYXJ5OiAgICAg ICAgUmF3IGltYWdlIHByb2Nlc3Npbmcgc29mdHdhcmUKQEAgLTMxLDEwICszMSw2IEBAIFNvdXJj ZTI6ICAgICAgICBSZWxlYXNlSW5mby5jbWFrZQogU291cmNlMDogICAgICAgIGh0dHBzOi8vZ2l0 aHViLmNvbS9CZWVwNjU4MS9SYXdUaGVyYXBlZS9yZWxlYXNlcy9kb3dubG9hZC8le3ZlcnNpb259 L3Jhd3RoZXJhcGVlLSV7dmVyc2lvbn0udGFyLnh6CiAlZW5kaWYKIAotIyBQYXRjaCB0byBmaXgg c2VnZmF1bHQgYXQgc3RhcnR1cAotIyBTZWUgdXBzdHJlYW0gdGlja2V0IGh0dHBzOi8vZ2l0aHVi LmNvbS9SYXdUaGVyYXBlZS9SYXdUaGVyYXBlZS9pc3N1ZXMvNzUzMgotUGF0Y2g6ICAgICAgICAg IDAwMDEtRml4LXN0YXRpYy1pbml0LW9yZGVyLWZpYXNjby1jcmFzaGVzLnBhdGNoCi1QYXRjaDog ICAgICAgICAgMDAwMS1GaXgtdHlwb3MucGF0Y2gKIAogQnVpbGRSZXF1aXJlczogIGNtYWtlCiBC dWlsZFJlcXVpcmVzOiAgZGVza3RvcC1maWxlLXV0aWxzCkBAIC00Niw2ICs0Miw3IEBAIEJ1aWxk UmVxdWlyZXM6ICBsaWJhdG9taWMKIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcoZXhpdjIpID49 IDAuMjQKIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcoZXhwYXQpID49IDIuMQogQnVpbGRSZXF1 aXJlczogIHBrZ2NvbmZpZyhmZnR3M2YpCitCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKGZtdCkK IEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcoZ2xpYi0yLjApID49IDIuNDgKIEJ1aWxkUmVxdWly ZXM6ICBwa2djb25maWcoZ2xpYm1tLTIuNCkgPj0gMi40OAogQnVpbGRSZXF1aXJlczogIHBrZ2Nv bmZpZyhndGsrLTMuMCkgPj0gMy4yNC4zCkBAIC0xMDQsNiArMTAxLDcgQEAgcm0gLXJmIHJ0ZW5n aW5lL2xpYnJhdy8KICVlbmRpZgogICAgICAgICAtRFdJVEhfU1lTVEVNX0tMVD1PTiBcCiAgICAg ICAgIC1EV0lUSF9TWVNURU1fTElCUkFXPSJPTiIgXAorICAgICAgICAtRFdJVEhfU1lTVEVNX0ZN VD0iT04iIFwKICAgICAgICAgLURXSVRIX0pYTD0iT04iCiAKICVjbWFrZV9idWlsZApAQCAtMTE0 LDcgKzExMiwxNiBAQCBybSAtcmYgcnRlbmdpbmUvbGlicmF3LwogCiAKICMgVGhlc2UgZmlsZSBh cmUgdGFrZW4gZnJvbSB0aGUgcm9vdCBhbHJlYWR5Ci1ybSAtcmYgJXtidWlsZHJvb3R9LyV7X2Rh dGFkaXJ9L2RvYyAKK3JtIC1yZiAle2J1aWxkcm9vdH0le19kYXRhZGlyfS9kb2MKKyMgUmVtb3Zl IGxpY2Vuc2UgZmlsZXMgd2hpY2ggZG9uJ3QgcGVydGFpbiB0byBGZWRvcmEgYmluYXJpZXMKKyMg Rm9udCBvbmx5IGluc3RhbGxlZCBvbiBXaW5kb3dzIGJ1aWxkcworcm0gLXJmICV7YnVpbGRyb290 fSV7X2RhdGFkaXJ9L2xpY2Vuc2VzLyV7bmFtZX0vbGljZW5zZXMvRHJvaWRTYW5zTW9ub0RvdHRl ZC50eHQKKyMgVGhlc2UgbGlicmFyaWVzIGFyZSBsaW5rZWQgdG8gc3lzdGVtJ3MgcHJvdmlkZWQK KyMgTm8gbmVlZCB0byBpbnN0YWxsIGxpY2Vuc2UgZmlsZXMgLSBodHRwczovL2dpdGh1Yi5jb20v UmF3VGhlcmFwZWUvUmF3VGhlcmFwZWUvaXNzdWVzLzc3MTgKK3JtIC1yZiAle2J1aWxkcm9vdH0l e19kYXRhZGlyfS9saWNlbnNlcy8le25hbWV9L2xpY2Vuc2VzL3tFeHBhdCxMZW5zZnVuLExpYlJh dyxMdW5hU1ZHLGNKU09OLGd0a21tLGxjbXMyLGxpYmNhbmJlcnJhLGxpYmlwdGNkYXRhLGxpYmp4 bCxsaWJyc3ZnLGxpYnRpZmYsdGNtYWxsb2N9X0xJQ0VOU0UKKyMgT25seSByZWxhdGVkIHRvIE9T WCBidWlsZHMKK3JtIC1yZiAle2J1aWxkcm9vdH0le19kYXRhZGlyfS9saWNlbnNlcy8le25hbWV9 L2xpY2Vuc2VzL29zeF9saWJpb21wX0xJQ0VOU0UudHh0CisKIAogCiAlY2hlY2sKQEAgLTEyNCw3 ICsxMzEsNyBAQCBhcHBzdHJlYW0tdXRpbCB2YWxpZGF0ZS1yZWxheCAtLW5vbmV0ICV7YnVpbGRy b290fS8le19kYXRhZGlyfS9tZXRhaW5mby9jb20uJXtuYQogCiAlZmlsZXMKICVkb2MgQVVUSE9S Uy50eHQgUkVMRUFTRV9OT1RFUy50eHQKLSVsaWNlbnNlIExJQ0VOU0UgbGljZW5zZXMvRHJvaWRT YW5zTW9ub0RvdHRlZC50eHQgbGljZW5zZXMvc2xlZWZfTElDRU5TRS50eHQgbGljZW5zZXMvamRh dGFzcmMKKyVsaWNlbnNlIExJQ0VOU0UgbGljZW5zZXMvc2xlZWZfTElDRU5TRS50eHQgbGljZW5z ZXMvanBlZ19pamdfTElDRU5TRQogJXtfbWFuZGlyfS9tYW4xLyV7bmFtZX0uMS5negogJXtfYmlu ZGlyfS8le25hbWV9CiAle19iaW5kaXJ9LyV7bmFtZX0tY2xpCgpkaWZmIC0tZ2l0IGEvc291cmNl cyBiL3NvdXJjZXMKaW5kZXggNTY2MDdhZS4uMmIxYzA4NiAxMDA2NDQKLS0tIGEvc291cmNlcwor KysgYi9zb3VyY2VzCkBAIC0xICsxIEBACi1TSEE1MTIgKHJhd3RoZXJhcGVlLTUuMTIudGFyLnh6 KSA9IDA1OTBhMDg1MjM4NWJjODViZTJhMzNlNWY5Nzg5MDRmM2EwNTM4NWI1NzAyZjg5NjBhZGI1 YWFkZTY3ZDU0OTAzNzI0NTUwNmM4NGE1NDFkOGE0OWJjYzQ5ZmU3YjcxYzc2NWJlODc1MzM2Y2I4 NmRlYjVjMDNmZDRlM2Y0YzIzCitTSEE1MTIgKHJhd3RoZXJhcGVlLTUuMTMudGFyLnh6KSA9IGVh MmY0ZjVkNzQ4Y2E0YzUwMjE0ZDFkNjg3MjNlMjkxODMwZjc3NTQ2NTY0MTdhNGMyNjFlYmJlNWI3 NTdmOGFhMmFmZGJiMmJmNGJlOTkwNjA1MGRlNGNiMWZkMjc4NjEyNzdhM2Y1ZGYwNWIxNDM4NjU2 NDM0NDU5NmYxYWI1Cg==