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: Joseph Marrero Corchado To: git-commits@fedoraproject.org Subject: [rpms/rpm-ostree] rawhide: Release 2026.3 Date: Thu, 10 Sep 2026 21:20:07 GMT Message-ID: <178907520764.1.15953659472942389131.rpms-rpm-ostree-149588667e4e@fedoraproject.org> List-ID: X-Git-Repo: rpms/rpm-ostree X-Git-Branch: rawhide X-Git-Rev: 149588667e4e09537ea6248d2ebf6977e0dba6da QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcnBtLW9zdHJlZQpC cmFuY2ggOiByYXdoaWRlCkNvbW1pdCA6IDE0OTU4ODY2N2U0ZTA5NTM3ZWE2MjQ4ZDJlYmY2OTc3 ZTBkYmE2ZGEKQXV0aG9yIDogSm9zZXBoIE1hcnJlcm8gQ29yY2hhZG8gPGptYXJyZXJvQHJlZGhh dC5jb20+CkRhdGUgICA6IDIwMjYtMDktMTBUMTM6Mjc6MjMtMDQ6MDAKU3RhdHMgIDogKzIvLTEz NDQ1IGluIDQgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9y cG1zL3JwbS1vc3RyZWUvYy8xNDk1ODg2NjdlNGUwOTUzN2VhNjI0OGQyZWJmNjk3N2UwZGJhNmRh P2JyYW5jaD1yYXdoaWRlCgpMb2c6ClJlbGVhc2UgMjAyNi4zCgotLS0KZGlmZiAtLWdpdCBhLzAw MDEta2V5cmluZy1BbHNvLXNlYXJjaC11c3Itc2hhcmUtcGtpLXJwbS1ncGctZm9yLUdQRy1rZS5w YXRjaCBiLzAwMDEta2V5cmluZy1BbHNvLXNlYXJjaC11c3Itc2hhcmUtcGtpLXJwbS1ncGctZm9y LUdQRy1rZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc1MTg1YS4uMDAw MDAwMAotLS0gYS8wMDAxLWtleXJpbmctQWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3Bn LWZvci1HUEcta2UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi1Gcm9tIGE4 ZTlmY2M1YzViODBmZTI1ZTcyNWQwMjhlOWY5YjgwOGNiMDI3M2YgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCi1Gcm9tOiBKb3NlcGggTWFycmVybyBDb3JjaGFkbyA8am1hcnJlcm9AcmVkaGF0LmNv bT4KLURhdGU6IFdlZCwgMTkgQXVnIDIwMjYgMTc6MTA6NDMgLTA0MDAKLVN1YmplY3Q6IFtQQVRD SF0ga2V5cmluZzogQWxzbyBzZWFyY2ggL3Vzci9zaGFyZS9wa2kvcnBtLWdwZyBmb3IgR1BHIGtl eXMKLQotU2VhcmNoIGJvdGggL2V0Yy9wa2kvcnBtLWdwZyAodXNlci1hZGRlZCBrZXlzKSBhbmQg L3Vzci9zaGFyZS9wa2kvcnBtLWdwZwotKGRpc3RyaWJ1dGlvbi1wcm92aWRlZCBrZXlzKSBzbyB0 aGF0IEdQRyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHdvcmtzCi1yZWdhcmRsZXNzIG9mIHdoZXJl IHRoZSBrZXlzIGFyZSBpbnN0YWxsZWQuCi0KLUNvLWF1dGhvcmVkLWJ5OiBBZGFtIFdpbGxpYW1z b24gPGF3aWxsaWFtQHJlZGhhdC5jb20+Ci1Bc3Npc3RlZC1ieTogQUkKLS0tLQotIGxpYmRuZi9s aWJkbmYvZG5mLWtleXJpbmcuY3BwIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDI2IGRlbGV0 aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliZG5mL2xpYmRuZi9kbmYta2V5cmluZy5jcHAgYi9s aWJkbmYvbGliZG5mL2RuZi1rZXlyaW5nLmNwcAotaW5kZXggMmUzOGVmZGQuLmE3MjVkZWJhIDEw MDY0NAotLS0tIGEvbGliZG5mL2xpYmRuZi9kbmYta2V5cmluZy5jcHAKLSsrKyBiL2xpYmRuZi9s aWJkbmYvZG5mLWtleXJpbmcuY3BwCi1AQCAtMzQ1LDM0ICszNDUsNDEgQEAgb3V0OgotIGdib29s ZWFuCi0gZG5mX2tleXJpbmdfYWRkX3B1YmxpY19rZXlzKHJwbUtleXJpbmcga2V5cmluZywgR0Vy cm9yICoqZXJyb3IpIHRyeQotIHsKLS0gICAgY29uc3QgZ2NoYXIgKmdwZ19kaXIgPSAiL2V0Yy9w a2kvcnBtLWdwZyI7Ci0tICAgIGdib29sZWFuIHJldCA9IFRSVUU7Ci0tICAgIGdfYXV0b3B0cihH RGlyKSBkaXIgPSBOVUxMOwotLSAgICBHRXJyb3IgKmxvY2FsRXJyb3IgPSBOVUxMOwotLQotLSAg ICAvKiBzZWFyY2ggYWxsIHRoZSBwdWJsaWMga2V5IGZpbGVzICovCi0tICAgIGRpciA9IGdfZGly X29wZW4oZ3BnX2RpciwgMCwgJmxvY2FsRXJyb3IpOwotLSAgICBpZiAoZGlyID09IE5VTEwpIHsK LS0gICAgICAgIGlmIChsb2NhbEVycm9yLT5kb21haW4gIT0gR19GSUxFX0VSUk9SIHx8IGxvY2Fs RXJyb3ItPmNvZGUgIT0gR19GSUxFX0VSUk9SX05PRU5UKSB7Ci0tICAgICAgICAgICAgZ193YXJu aW5nKCIlcyIsIGxvY2FsRXJyb3ItPm1lc3NhZ2UpOwotLSAgICAgICAgfQotLSAgICAgICAgZ19l cnJvcl9mcmVlKGxvY2FsRXJyb3IpOwotLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0tICAgIH0KLS0g ICAgZG8gewotLSAgICAgICAgY29uc3QgZ2NoYXIgKmZpbGVuYW1lOwotLSAgICAgICAgZ19hdXRv ZnJlZSBnY2hhciAqcGF0aF90bXAgPSBOVUxMOwotLSAgICAgICAgZmlsZW5hbWUgPSBnX2Rpcl9y ZWFkX25hbWUoZGlyKTsKLS0gICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQotLSAgICAgICAg ICAgIGJyZWFrOwotLSAgICAgICAgcGF0aF90bXAgPSBnX2J1aWxkX2ZpbGVuYW1lKGdwZ19kaXIs IGZpbGVuYW1lLCBOVUxMKTsKLS0gICAgICAgIHJldCA9IGRuZl9rZXlyaW5nX2FkZF9wdWJsaWNf a2V5KGtleXJpbmcsIHBhdGhfdG1wLCAmbG9jYWxFcnJvcik7Ci0tICAgICAgICBpZiAoIXJldCkg ewotLSAgICAgICAgICAgIGdfd2FybmluZygiJXMiLCBsb2NhbEVycm9yLT5tZXNzYWdlKTsKLSsg ICAgLyogU2VhcmNoIGJvdGggR1BHIGtleSBsb2NhdGlvbnM6IC9ldGMvcGtpL3JwbS1ncGcgZm9y IHVzZXItYWRkZWQga2V5cwotKyAgICAgKiBhbmQgL3Vzci9zaGFyZS9wa2kvcnBtLWdwZyBmb3Ig ZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGtleXMuCi0rICAgICAqLwotKyAgICBjb25zdCBnY2hhciAq Z3BnX2RpcnNbXSA9IHsgIi9ldGMvcGtpL3JwbS1ncGciLCAiL3Vzci9zaGFyZS9wa2kvcnBtLWdw ZyIsIE5VTEwgfTsKLSsKLSsgICAgZm9yIChjb25zdCBnY2hhciAqKmdwZ19kaXJfcCA9IGdwZ19k aXJzOyAqZ3BnX2Rpcl9wICE9IE5VTEw7IGdwZ19kaXJfcCsrKSB7Ci0rICAgICAgICBjb25zdCBn Y2hhciAqZ3BnX2RpciA9ICpncGdfZGlyX3A7Ci0rICAgICAgICBnYm9vbGVhbiByZXQgPSBUUlVF OwotKyAgICAgICAgZ19hdXRvcHRyKEdEaXIpIGRpciA9IE5VTEw7Ci0rICAgICAgICBHRXJyb3Ig KmxvY2FsRXJyb3IgPSBOVUxMOwotKwotKyAgICAgICAgLyogc2VhcmNoIGFsbCB0aGUgcHVibGlj IGtleSBmaWxlcyAqLwotKyAgICAgICAgZGlyID0gZ19kaXJfb3BlbihncGdfZGlyLCAwLCAmbG9j YWxFcnJvcik7Ci0rICAgICAgICBpZiAoZGlyID09IE5VTEwpIHsKLSsgICAgICAgICAgICBpZiAo bG9jYWxFcnJvci0+ZG9tYWluICE9IEdfRklMRV9FUlJPUiB8fCBsb2NhbEVycm9yLT5jb2RlICE9 IEdfRklMRV9FUlJPUl9OT0VOVCkgewotKyAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIiVzIiwg bG9jYWxFcnJvci0+bWVzc2FnZSk7Ci0rICAgICAgICAgICAgfQotICAgICAgICAgICAgIGdfZXJy b3JfZnJlZShsb2NhbEVycm9yKTsKLS0gICAgICAgICAgICBsb2NhbEVycm9yID0gTlVMTDsKLSsg ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgIH0KLS0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0r ICAgICAgICBkbyB7Ci0rICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZpbGVuYW1lOwotKyAgICAg ICAgICAgIGdfYXV0b2ZyZWUgZ2NoYXIgKnBhdGhfdG1wID0gTlVMTDsKLSsgICAgICAgICAgICBm aWxlbmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpOwotKyAgICAgICAgICAgIGlmIChmaWxlbmFt ZSA9PSBOVUxMKQotKyAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICBwYXRoX3Rt cCA9IGdfYnVpbGRfZmlsZW5hbWUoZ3BnX2RpciwgZmlsZW5hbWUsIE5VTEwpOwotKyAgICAgICAg ICAgIHJldCA9IGRuZl9rZXlyaW5nX2FkZF9wdWJsaWNfa2V5KGtleXJpbmcsIHBhdGhfdG1wLCAm bG9jYWxFcnJvcik7Ci0rICAgICAgICAgICAgaWYgKCFyZXQpIHsKLSsgICAgICAgICAgICAgICAg Z193YXJuaW5nKCIlcyIsIGxvY2FsRXJyb3ItPm1lc3NhZ2UpOwotKyAgICAgICAgICAgICAgICBn X2Vycm9yX2ZyZWUobG9jYWxFcnJvcik7Ci0rICAgICAgICAgICAgICAgIGxvY2FsRXJyb3IgPSBO VUxMOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0gd2hpbGUgKHRydWUpOwotKyAgICB9Ci0g ICAgIHJldHVybiBUUlVFOwotIH0gQ0FUQ0hfVE9fR0VSUk9SKEZBTFNFKQotIAotLS0gCi0yLjU1 LjAKLQoKZGlmZiAtLWdpdCBhLzJkMTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5ZjBjNjRkNDlhYTgx NTQucGF0Y2ggYi8yZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4MTU0LnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTQ0NDdkLi4wMDAwMDAwCi0tLSBhLzJk MTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5ZjBjNjRkNDlhYTgxNTQucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSwxMzM0MyArMCwwIEBACi1Gcm9tIDJkMTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5ZjBj NjRkNDlhYTgxNTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKb3NlcGggTWFycmVy byBDb3JjaGFkbyA8am1hcnJlcm9AcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgMTkgQXVnIDIwMjYg MjI6NTM6MjIgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCByZWxvY2F0ZWQgcmVwbyBj b25maWdzIChGZWRvcmEgNDUrKQotCi1GZWRvcmEgNDUgQ2hhbmdlIFJlbG9jYXRlUnBtUmVwb0Nv bmZpZ3NUb1VzciBtb3ZlZCBzeXN0ZW0gcmVwb3NpdG9yeQotZGVmaW5pdGlvbnMgZnJvbSAvZXRj L3l1bS5yZXBvcy5kIHRvIC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIGFuZCBHUEcKLWtleXMgZnJv bSAvZXRjL3BraS9ycG0tZ3BnIHRvIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcuIFRoaXMgYnJva2UK LXBhY2thZ2Ugb3ZlcmxheSBvcGVyYXRpb25zIChycG0tb3N0cmVlIGluc3RhbGwpIHdpdGg6Ci0g IGVycm9yOiBObyBlbmFibGVkIHJlcG9zaXRvcmllcwotCi1Td2l0Y2ggYWxsIHJlcG8gZGlyZWN0 b3J5IHNldHVwIGZyb20gdGhlIHNpbmdsZS1kaXJlY3RvcnkKLWRuZl9jb250ZXh0X3NldF9yZXBv X2RpcigpIEFQSSB0byB0aGUgbXVsdGktZGlyZWN0b3J5Ci1kbmZfY29udGV4dF9zZXRfcmVwb3Nf ZGlyKCkgQVBJLCBwYXNzaW5nIGJvdGggdGhlIHVzZXItYWRkZWQgYW5kCi1kaXN0cmlidXRpb24t cHJvdmlkZWQgbG9jYXRpb25zLiBUaGUgbGliZG5mIHJlcG8gbG9hZGVyIGFscmVhZHkKLWdyYWNl ZnVsbHkgc2tpcHMgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLCBzbyB0aGlzIHdvcmtzIG9uIGJv dGggb2xkCi0oRmVkb3JhIDw9NDQsIFJIRUwpIGFuZCBuZXcgKEZlZG9yYSA0NSspIGxheW91dHMg d2l0aG91dCB2ZXJzaW9uCi1kZXRlY3Rpb24uCi0KLUNoYW5nZXM6Ci0tIHJwbW9zdHJlZS1jb3Jl LmN4eDogQWRkIGJ1aWxkX3JlcG9zX2RpcnMoKSBoZWxwZXIgdXNpbmcgY2Fub25pY2FsCi0gIHBh dGggbGlzdCBmcm9tIFJ1c3QgdmlhIGN4eCBicmlkZ2UuIFVwZGF0ZSBhbGwgY2FsbCBzaXRlcyB0 byB1c2UgaXQuCi0gIEFkZCBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlycygpIGZvciBt dWx0aS1kaXIgb3ZlcnJpZGVzLgotLSBydXN0L2NvbXBvc2Vwb3N0OiBBZGQgc2hhcmVkIGNvbnN0 YW50cyBmb3IgcmVwbyBkaXIgcGF0aHMsIGV4cG9zZWQKLSAgdG8gQysrIHZpYSBnZXRfcmVwb3Nf ZGlycygpIGJyaWRnZSBmdW5jdGlvbi4KLS0gcnVzdC9jb3VudG1lOiBTY2FuIGJvdGggcmVwbyBk aXJlY3RvcmllcyBmb3IgQ291bnQgTWUgc3VwcG9ydC4KLS0gcnVzdC9jb21wb3NlOiBIYW5kbGUg Ym90aCByZXBvIGxheW91dHMgaW4gbXV0YXRlX3NvdXJjZV9yb290KCkuCi0tIFRlc3RzIGFuZCBk b2N1bWVudGF0aW9uIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCi0KLUNsb3NlczogaHR0cHM6Ly9naXRo dWIuY29tL2NvcmVvcy9ycG0tb3N0cmVlL2lzc3Vlcy81NjIzCi0KLUNvLWF1dGhvcmVkLWJ5OiBB ZGFtIFdpbGxpYW1zb24gPGF3aWxsaWFtQHJlZGhhdC5jb20+Ci1Bc3Npc3RlZC1ieTogQUkKLS0t LQotIGRvY3MvdHJlZWZpbGUubWQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KLSBt YW4vcnBtLW9zdHJlZS54bWwgICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICstCi0gcnBtb3N0 cmVlLWN4eHJzLmN4eCAgICAgICAgICAgICAgICAgICAgIHwgNzg0MSArKysrKysrKysrKysrKy0t LS0tLS0tLQotIHJwbW9zdHJlZS1jeHhycy5oICAgICAgICAgICAgICAgICAgICAgICB8IDIwOTkg KysrLS0tCi0gcnVzdC9zcmMvY29tcG9zZS5ycyAgICAgICAgICAgICAgICAgICAgIHwgICA1OCAr LQotIHJ1c3Qvc3JjL2NvbXBvc2Vwb3N0LnJzICAgICAgICAgICAgICAgICB8ICAgMTcgKwotIHJ1 c3Qvc3JjL2NvdW50bWUvcmVwby5ycyAgICAgICAgICAgICAgICB8ICAgMzIgKy0KLSBydXN0L3Ny Yy9saWIucnMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKLSBzcmMvZGFlbW9uL3Jw bW9zdHJlZS1zeXNyb290LXVwZ3JhZGVyLmggfCAgICAyICstCi0gc3JjL2xpYnByaXYvcnBtb3N0 cmVlLWNvcmUuY3h4ICAgICAgICAgIHwgICA1NSArLQotIHNyYy9saWJwcml2L3JwbW9zdHJlZS1j b3JlLmggICAgICAgICAgICB8ICAgIDEgKwotIHRlc3RzL2NvbW1vbi9saWJ0ZXN0cmVwb3Muc2gg ICAgICAgICAgICB8ICAgIDggKy0KLSB0ZXN0cy9jb21wb3NlLWltYWdlLnNoICAgICAgICAgICAg ICAgICAgfCAgIDEwICstCi0gMTMgZmlsZXMgY2hhbmdlZCwgNjI0MyBpbnNlcnRpb25zKCspLCAz OTE1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZG9jcy90cmVlZmlsZS5tZCBiL2RvY3Mv dHJlZWZpbGUubWQKLWluZGV4IGE0MDY4YjcyNzAuLmI5ZTA2M2RiOWUgMTAwNjQ0Ci0tLS0gYS9k b2NzL3RyZWVmaWxlLm1kCi0rKysgYi9kb2NzL3RyZWVmaWxlLm1kCi1AQCAtMzYsOCArMzYsOSBA QCBJdCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gICAgdXNlLCBmcm9tIGFu eSBmaWxlcyB0aGF0IGVuZCBpbiBgLnJlcG9gLCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKLSAg ICB0aGUgdHJlZWZpbGUuIElmIG1pc3NpbmcsIGFsbCB5dW0gcmVwb3MgZW5hYmxlZCBieSBkZWZh dWx0IGFyZSB1c2VkLgotICAgIGBycG0tb3N0cmVlIGNvbXBvc2UgdHJlZWAgZG9lcyBub3QgdXNl IHRoZSBzeXN0ZW0KLS0gICBgL2V0Yy95dW0ucmVwb3MuZGAsIGJlY2F1c2UgaXQncyBjb21tb24g dG8gd2FudCB0byBjb21wb3NlIGEgdGFyZ2V0Ci0tICAgc3lzdGVtIGRpc3RpbmN0IGZyb20gdGhl IG9uZSB0aGUgaG9zdCBzeXRlbSBpcyBydW5uaW5nLgotKyAgIHJlcG9zaXRvcnkgY29uZmlndXJh dGlvbiBkaXJlY3RvcmllcywgYmVjYXVzZSBpdCdzIGNvbW1vbiB0byB3YW50Ci0rICAgdG8gY29t cG9zZSBhIHRhcmdldCBzeXN0ZW0gZGlzdGluY3QgZnJvbSB0aGUgb25lIHRoZSBob3N0IHN5dGVt Ci0rICAgaXMgcnVubmluZy4KLSAKLSAgKiBgc2VsaW51eGA6IGJvb2xlYW4sIG9wdGlvbmFsOiBE ZWZhdWx0cyB0byBgdHJ1ZWAuICBJZiBgZmFsc2VgLCB0aGVuCi0gICAgbm8gU0VMaW51eCBsYWJl bGluZyB3aWxsIGJlIHBlcmZvcm1lZCBvbiB0aGUgc2VydmVyIHNpZGUuCi1kaWZmIC0tZ2l0IGEv bWFuL3JwbS1vc3RyZWUueG1sIGIvbWFuL3JwbS1vc3RyZWUueG1sCi1pbmRleCBjY2Y1ZDBmNWIz Li4yY2E4NWE4ZjY5IDEwMDY0NAotLS0tIGEvbWFuL3JwbS1vc3RyZWUueG1sCi0rKysgYi9tYW4v cnBtLW9zdHJlZS54bWwKLUBAIC0yMjIsOCArMjIyLDggQEAgQm9zdG9uLCBNQSAwMjExMS0xMzA3 LCBVU0EuCi0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgIDxwYXJhPgotICAgICAgICAg ICAgIFRha2VzIG9uZSBvciBtb3JlIHBhY2thZ2VzIGFzIGFyZ3VtZW50cy4gVGhlIHBhY2thZ2Vz IGFyZQotLSAgICAgICAgICAgIGZldGNoZWQgZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMg aW4KLS0gICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy95dW0ucmVwb3MuZC88L2ZpbGVuYW1lPiBh bmQgYXJlIG92ZXJsYXllZCBvbgotKyAgICAgICAgICAgIGZldGNoZWQgZnJvbSB0aGUgZW5hYmxl ZCByZXBvc2l0b3JpZXMgaW4gdGhlIHN5c3RlbQotKyAgICAgICAgICAgIHJlcG9zaXRvcnkgY29u ZmlndXJhdGlvbiBkaXJlY3RvcmllcyBhbmQgYXJlIG92ZXJsYXllZCBvbgotICAgICAgICAgICAg IHRvcCBvZiBhIG5ldyBkZXBsb3ltZW50LiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5 IGEKLSAgICAgICAgICAgICBsb2NhbCBSUE0gcGFja2FnZSB0aGF0IHJlc2lkZXMgb24gdGhlIGhv c3QuIE92ZXJsYXllZAotICAgICAgICAgICAgIHBhY2thZ2VzIGNhbiBsYXRlciBiZSByZW1vdmVk IHdpdGggdGhlCi1AQCAtMzEwLDggKzMxMCw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB LgotICAgICAgICAgICAgIFRha2VzIG9uZSBvciBtb3JlIHBhY2thZ2VzIGFzIGFyZ3VtZW50cy4g VGhlIHBhY2thZ2VzIGFyZQotICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgc2V0IG9mIHBh Y2thZ2VzIHRoYXQgYXJlIGN1cnJlbnRseQotICAgICAgICAgICAgIG92ZXJsYXllZC4gVGhlIHJl bWFpbmluZyBwYWNrYWdlcyBpbiB0aGUgc2V0IChpZiBhbnkpIGFyZQotLSAgICAgICAgICAgIGZl dGNoZWQgZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4KLS0gICAgICAgICAgICA8Zmls ZW5hbWU+L2V0Yy95dW0ucmVwb3MuZC88L2ZpbGVuYW1lPiBhbmQgYXJlIG92ZXJsYXllZCBvbgot KyAgICAgICAgICAgIGZldGNoZWQgZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4gdGhl IHN5c3RlbQotKyAgICAgICAgICAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3Rvcmll cyBhbmQgYXJlIG92ZXJsYXllZCBvbgotICAgICAgICAgICAgIHRvcCBvZiBhIG5ldyBkZXBsb3lt ZW50LgotICAgICAgICAgICA8L3BhcmE+Ci0gCi1AQCAtMzM0LDggKzMzNCw4IEBAIEJvc3Rvbiwg TUEgMDIxMTEtMTMwNywgVVNBLgotICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICA8cGFy YT4KLSAgICAgICAgICAgICBUYWtlcyBvbmUgb3IgbW9yZSBxdWVyeSB0ZXJtcyBhcyBhcmd1bWVu dHMuIFRoZSBwYWNrYWdlcyBhcmUKLS0gICAgICAgICAgICBzZWFyY2hlZCB3aXRoaW4gdGhlIGVu YWJsZWQgcmVwb3NpdG9yaWVzIGluCi0tICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMveXVtLnJl cG9zLmQvPC9maWxlbmFtZT4uIFBhY2thZ2VzIGNhbiBiZQotKyAgICAgICAgICAgIHNlYXJjaGVk IHdpdGhpbiB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4gdGhlIHN5c3RlbQotKyAgICAgICAg ICAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3Rvcmllcy4gUGFja2FnZXMgY2FuIGJl Ci0gICAgICAgICAgICAgb3ZlcmxheWVkIGFuZCByZW1vdmVkIHVzaW5nIHRoZSA8Y29tbWFuZD5p bnN0YWxsPC9jb21tYW5kPgotICAgICAgICAgICAgIGFuZCA8Y29tbWFuZD51bmluc3RhbGw8L2Nv bW1hbmQ+IGNvbW1hbmRzLgotICAgICAgICAgICA8L3BhcmE+Ci1AQCAtNTE5LDggKzUxOSw4IEBA IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICAgICAgICAgICAgIDxvcHRpb24+LS1jaGVj azwvb3B0aW9uPiB0byBqdXN0IGNoZWNrIGlmIGFuIHVwZ3JhZGUgaXMKLSAgICAgICAgICAgICBh dmFpbGFibGUsIHdpdGhvdXQgZG93bmxvYWRpbmcgaXQgb3IgcGVyZm9ybWluZyBhCi0gICAgICAg ICAgICAgcGFja2FnZS1sZXZlbCBkaWZmLiAgVXNpbmcgdGhpcyBmbGFnIHdpbGwgZm9yY2UgYW4g dXBkYXRlCi0tICAgICAgICAgICAgb2YgdGhlIFJQTSBtZXRhZGF0YSBmcm9tIHRoZSBlbmFibGVk IHJlcG9zIGluCi0tICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMveXVtLnJlcG9zLmQvPC9maWxl bmFtZT4sIGlmIHRoZXJlIGFyZSBhbnkKLSsgICAgICAgICAgICBvZiB0aGUgUlBNIG1ldGFkYXRh IGZyb20gdGhlIGVuYWJsZWQgcmVwb3MgaW4gdGhlIHN5c3RlbQotKyAgICAgICAgICAgIHJlcG9z aXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcywgaWYgdGhlcmUgYXJlIGFueQotICAgICAg ICAgICAgIGxheWVyZWQgcGFja2FnZXMuCi0gICAgICAgICAgIDwvcGFyYT4KLSAKLUBAIC05MTEs MTQgKzkxMSwxNyBAQCAkIHN5c3RlbWN0bCBzdGFydCBwb3N0Z3Jlc3FsICAjIFNvbWUgc2V0dXAg cmVxdWlyZWQKLSAgICAgPHRpdGxlPlJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhbmQgR1BHIGtl eXM8L3RpdGxlPgotIAotICAgICA8cGFyYT4KLS0gICAgICBycG0tb3N0cmVlIHVzZXMgdGhlIGxp YmRuZiBzaGFyZWQgbGlicmFyeSwgd2hpY2ggaG9ub3JzIDxsaXRlcmFsPi9ldGMveXVtLnJlcG9z LmQ8L2xpdGVyYWw+LgotKyAgICAgIHJwbS1vc3RyZWUgdXNlcyB0aGUgbGliZG5mIHNoYXJlZCBs aWJyYXJ5LCB3aGljaCBob25vcnMgYm90aAotKyAgICAgIDxsaXRlcmFsPi9ldGMveXVtLnJlcG9z LmQ8L2xpdGVyYWw+IChmb3IgdXNlciBjb25maWd1cmF0aW9uKSBhbmQKLSsgICAgICA8bGl0ZXJh bD4vdXNyL3NoYXJlL2RuZjUvcmVwb3MuZDwvbGl0ZXJhbD4gKGZvciBkaXN0cmlidXRpb24tcHJv dmlkZWQgY29uZmlndXJhdGlvbikuCi0gICAgICAgTm90ZSB0aGF0IHJwbS1tZCAoeXVtL2RuZikg cmVwb3NpdG9yaWVzIGFyZSBvbmx5IGNoZWNrZWQgaWYgY2xpZW50LXNpZGUgcGFja2FnZSBsYXll cmluZyBpcwotICAgICAgIGVuYWJsZWQuCi0gICAgIDwvcGFyYT4KLSAKLSAgICAgPHBhcmE+Ci0g ICAgICAgSG93ZXZlciwgdGhlIGJlaGF2aW9yIGZvciBHUEcga2V5cyBpcyBzbGlnaHRseSBkaWZm ZXJlbnQgZnJvbSBhIHRyYWRpdGlvbmFsIDxjb21tYW5kPnJwbTwvY29tbWFuZD4KLS0gICAgICBz eXN0ZW0uICBFc3NlbnRpYWxseSwgYWxsIEdQRyBrZXlzIGluIDxsaXRlcmFsPi9ldGMvcGtpL3Jw bS1ncGc8L2xpdGVyYWw+IGFyZSBsb2FkZWQgYW5kIHRydXN0ZWQuCi0rICAgICAgc3lzdGVtLiAg RXNzZW50aWFsbHksIGFsbCBHUEcga2V5cyBpbiA8bGl0ZXJhbD4vZXRjL3BraS9ycG0tZ3BnPC9s aXRlcmFsPiBhbmQKLSsgICAgICA8bGl0ZXJhbD4vdXNyL3NoYXJlL3BraS9ycG0tZ3BnPC9saXRl cmFsPiBhcmUgbG9hZGVkIGFuZCB0cnVzdGVkLgotICAgICAgIFRoZSA8bGl0ZXJhbD4ucmVwbzwv bGl0ZXJhbD4gZmlsZSBzaG91bGQgcmVmZXJlbmNlIHRoZSBmaWxlIHBhdGggaW4gdGhlcmUuCi0g ICAgIDwvcGFyYT4KLSAgICAgPHBhcmE+Ci1kaWZmIC0tZ2l0IGEvcnBtb3N0cmVlLWN4eHJzLmN4 eCBiL3JwbW9zdHJlZS1jeHhycy5jeHgKLWluZGV4IDg3MTJhM2YyYzYuLmM3ZDA1ZjIzMTIgMTAw NjQ0Ci0tLS0gYS9ycG1vc3RyZWUtY3h4cnMuY3h4Ci0rKysgYi9ycG1vc3RyZWUtY3h4cnMuY3h4 Ci1AQCAtMSwxNiArMSwxNSBAQAotLSNpbmNsdWRlICJzcmMvbGlicHJpdi9ycG1vc3RyZWUtY3h4 cnMtcHJlbHVkZS5oIgotKyNpbmNsdWRlICJycG1vc3RyZWUtY3h4cnMuaCIKLSsjaW5jbHVkZSAi cnBtb3N0cmVlLWNsaWVudGxpYi5oIgotICNpbmNsdWRlICJycG1vc3RyZWUtY29udGFpbmVyLmhw cCIKLSAjaW5jbHVkZSAicnBtb3N0cmVlLWN4eHJzdXRpbC5ocHAiCi0tI2luY2x1ZGUgInJwbW9z dHJlZS11dGlsLmgiCi0tI2luY2x1ZGUgInJwbW9zdHJlZW1haW4uaCIKLS0jaW5jbHVkZSAicnBt b3N0cmVlLWNsaWVudGxpYi5oIgotICNpbmNsdWRlICJycG1vc3RyZWUtZGlmZi5ocHAiCi0gI2lu Y2x1ZGUgInJwbW9zdHJlZS1saWJidWlsdGluLmgiCi0tI2luY2x1ZGUgInJwbW9zdHJlZS11dGls LmgiCi0gI2luY2x1ZGUgInJwbW9zdHJlZS1vdXRwdXQuaCIKLS0jaW5jbHVkZSAicnBtb3N0cmVl LXJwbS11dGlsLmgiCi0gI2luY2x1ZGUgInJwbW9zdHJlZS1wYWNrYWdlLXZhcmlhbnRzLmgiCi0t I2luY2x1ZGUgInJwbW9zdHJlZS1jeHhycy5oIgotKyNpbmNsdWRlICJycG1vc3RyZWUtcnBtLXV0 aWwuaCIKLSsjaW5jbHVkZSAicnBtb3N0cmVlLXV0aWwuaCIKLSsjaW5jbHVkZSAicnBtb3N0cmVl bWFpbi5oIgotKyNpbmNsdWRlICJzcmMvbGlicHJpdi9ycG1vc3RyZWUtY3h4cnMtcHJlbHVkZS5o IgotICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0gI2luY2x1ZGUgPGFycmF5PgotICNpbmNsdWRlIDxj YXNzZXJ0PgotQEAgLTQwLDk0ICszOSw5OCBAQAotICNlbmRpZiAvLyBfX2NsYW5nX18KLSAjZW5k aWYgLy8gX19HTlVDX18KLSAKLS1uYW1lc3BhY2UgcnVzdCB7Ci0taW5saW5lIG5hbWVzcGFjZSBj eHhicmlkZ2UxIHsKLStuYW1lc3BhY2UgcnVzdAotK3sKLStpbmxpbmUgbmFtZXNwYWNlIGN4eGJy aWRnZTEKLSt7Ci0gLy8gI2luY2x1ZGUgInJ1c3QvY3h4LmgiCi0gCi0gI2lmbmRlZiBDWFhCUklE R0UxX1BBTklDCi0gI2RlZmluZSBDWFhCUklER0UxX1BBTklDCi0tdGVtcGxhdGUgPHR5cGVuYW1l IEV4Y2VwdGlvbj4KLS12b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsK LSt0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhjZXB0aW9uPiB2b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAo Y29uc3QgY2hhciAqbXNnKTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9QQU5JQwotIAotIHN0cnVj dCB1bnNhZmVfYml0Y29weV90OwotIAotLW5hbWVzcGFjZSB7Ci0tdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tY2xhc3MgaW1wbDsKLStuYW1lc3BhY2UKLSt7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IGNsYXNzIGltcGw7Ci0gfSAvLyBuYW1lc3BhY2UKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS06OnN0ZDo6c2l6ZV90IHNpemVfb2YoKTsKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS06OnN0 ZDo6c2l6ZV90IGFsaWduX29mKCk7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVf dCBzaXplX29mICgpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3QgYWxpZ25f b2YgKCk7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfU1RSSU5HCi0gI2RlZmluZSBDWFhC UklER0UxX1JVU1RfU1RSSU5HCi0tY2xhc3MgU3RyaW5nIGZpbmFsIHsKLStjbGFzcyBTdHJpbmcg ZmluYWwKLSt7Ci0gcHVibGljOgotLSAgU3RyaW5nKCkgbm9leGNlcHQ7Ci0tICBTdHJpbmcoY29u c3QgU3RyaW5nICYpIG5vZXhjZXB0OwotLSAgU3RyaW5nKFN0cmluZyAmJikgbm9leGNlcHQ7Ci0t ICB+U3RyaW5nKCkgbm9leGNlcHQ7Ci0tCi0tICBTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJik7 Ci0tICBTdHJpbmcoY29uc3QgY2hhciAqKTsKLS0gIFN0cmluZyhjb25zdCBjaGFyICosIHN0ZDo6 c2l6ZV90KTsKLS0gIFN0cmluZyhjb25zdCBjaGFyMTZfdCAqKTsKLS0gIFN0cmluZyhjb25zdCBj aGFyMTZfdCAqLCBzdGQ6OnNpemVfdCk7Ci0rICBTdHJpbmcgKCkgbm9leGNlcHQ7Ci0rICBTdHJp bmcgKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIFN0cmluZyAoU3RyaW5nICYmKSBub2V4 Y2VwdDsKLSsgIH5TdHJpbmcgKCkgbm9leGNlcHQ7Ci0rCi0rICBTdHJpbmcgKGNvbnN0IHN0ZDo6 c3RyaW5nICYpOwotKyAgU3RyaW5nIChjb25zdCBjaGFyICopOwotKyAgU3RyaW5nIChjb25zdCBj aGFyICosIHN0ZDo6c2l6ZV90KTsKLSsgIFN0cmluZyAoY29uc3QgY2hhcjE2X3QgKik7Ci0rICBT dHJpbmcgKGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KTsKLSAjaWZkZWYgX19jcHBfY2hh cjhfdAotLSAgU3RyaW5nKGNvbnN0IGNoYXI4X3QgKnMpOwotLSAgU3RyaW5nKGNvbnN0IGNoYXI4 X3QgKnMsIHN0ZDo6c2l6ZV90IGxlbik7Ci0rICBTdHJpbmcgKGNvbnN0IGNoYXI4X3QgKnMpOwot KyAgU3RyaW5nIChjb25zdCBjaGFyOF90ICpzLCBzdGQ6OnNpemVfdCBsZW4pOwotICNlbmRpZgot IAotLSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsK LS0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3QgY2hhciAqKSBub2V4Y2VwdDsKLS0gIHN0YXRp YyBTdHJpbmcgbG9zc3koY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0tICBz dGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OwotLSAgc3RhdGlj IFN0cmluZyBsb3NzeShjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0r ICBzdGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKLSsg IHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIgKikgbm9leGNlcHQ7Ci0rICBzdGF0aWMg U3RyaW5nIGxvc3N5IChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIHN0 YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OwotKyAgc3RhdGlj IFN0cmluZyBsb3NzeSAoY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0Owot IAotLSAgU3RyaW5nICZvcGVyYXRvcj0oY29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7Ci0tICBT dHJpbmcgJm9wZXJhdG9yPShTdHJpbmcgJiYpICYgbm9leGNlcHQ7Ci0rICBTdHJpbmcgJm9wZXJh dG9yPSAoY29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7Ci0rICBTdHJpbmcgJm9wZXJhdG9yPSAo U3RyaW5nICYmKSAmIG5vZXhjZXB0OwotIAotLSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJp bmcoKSBjb25zdDsKLSsgIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nICgpIGNvbnN0Owot IAotLSAgY29uc3QgY2hhciAqZGF0YSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3Qg c2l6ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdCBjaGFyICpk YXRhICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IGxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wg ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICBjb25zdCBjaGFyICpjX3N0cigpIG5vZXhj ZXB0OwotKyAgY29uc3QgY2hhciAqY19zdHIgKCkgbm9leGNlcHQ7Ci0gCi0tICBzdGQ6OnNpemVf dCBjYXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCByZXNlcnZlKHNpemVfdCBuZXdf Y2FwKSBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgdm9pZCByZXNlcnZlIChzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Ci0gCi0gICB1c2lu ZyBpdGVyYXRvciA9IGNoYXIgKjsKLS0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7Ci0tICBp dGVyYXRvciBlbmQoKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0Owot KyAgaXRlcmF0b3IgZW5kICgpIG5vZXhjZXB0OwotIAotICAgdXNpbmcgY29uc3RfaXRlcmF0b3Ig PSBjb25zdCBjaGFyICo7Ci0tICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0 OwotLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVy YXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBj b25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRl cmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAo KSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcgJikg Y29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nICYpIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsK LS0gIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJv b2wgb3BlcmF0b3I+PShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9w ZXJhdG9yPT0gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0 b3IhPSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjwg KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I8PSAoY29u c3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IFN0 cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgU3RyaW5n ICYpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgdm9pZCBzd2FwKFN0cmluZyAmKSBub2V4Y2VwdDsK LSsgIHZvaWQgc3dhcCAoU3RyaW5nICYpIG5vZXhjZXB0OwotIAotLSAgU3RyaW5nKHVuc2FmZV9i aXRjb3B5X3QsIGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIFN0cmluZyAodW5zYWZlX2Jp dGNvcHlfdCwgY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0OwotIAotIHByaXZhdGU6Ci0gICBzdHJ1 Y3QgbG9zc3lfdDsKLS0gIFN0cmluZyhsb3NzeV90LCBjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90 KSBub2V4Y2VwdDsKLS0gIFN0cmluZyhsb3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNp emVfdCkgbm9leGNlcHQ7Ci0tICBmcmllbmQgdm9pZCBzd2FwKFN0cmluZyAmbGhzLCBTdHJpbmcg JnJocykgbm9leGNlcHQgeyBsaHMuc3dhcChyaHMpOyB9Ci0rICBTdHJpbmcgKGxvc3N5X3QsIGNv bnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotKyAgU3RyaW5nIChsb3NzeV90LCBj b25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBmcmllbmQgdm9pZAot KyAgc3dhcCAoU3RyaW5nICZsaHMsIFN0cmluZyAmcmhzKSBub2V4Y2VwdAotKyAgewotKyAgICBs aHMuc3dhcCAocmhzKTsKLSsgIH0KLSAKLSAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+ IHJlcHI7Ci0gfTsKLUBAIC0xMzUsNDggKzEzOCw0OSBAQCBjbGFzcyBTdHJpbmcgZmluYWwgewot IAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1NUUgotICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNU X1NUUgotLWNsYXNzIFN0ciBmaW5hbCB7Ci0rY2xhc3MgU3RyIGZpbmFsCi0rewotIHB1YmxpYzoK LS0gIFN0cigpIG5vZXhjZXB0OwotLSAgU3RyKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLS0g IFN0cihjb25zdCBzdGQ6OnN0cmluZyAmKTsKLS0gIFN0cihjb25zdCBjaGFyICopOwotLSAgU3Ry KGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpOwotKyAgU3RyICgpIG5vZXhjZXB0OwotKyAgU3Ry IChjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0rICBTdHIgKGNvbnN0IHN0ZDo6c3RyaW5nICYp OwotKyAgU3RyIChjb25zdCBjaGFyICopOwotKyAgU3RyIChjb25zdCBjaGFyICosIHN0ZDo6c2l6 ZV90KTsKLSAKLS0gIFN0ciAmb3BlcmF0b3I9KGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0gZGVm YXVsdDsKLSsgIFN0ciAmb3BlcmF0b3I9IChjb25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0gCi0tICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0OwotKyAgZXhw bGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcgKCkgY29uc3Q7Ci0gI2lmIF9fY3BsdXNwbHVzID49 IDIwMTcwM0wKLS0gIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcoKSBjb25zdDsK LSsgIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcgKCkgY29uc3Q7Ci0gI2VuZGlm Ci0gCi0tICBjb25zdCBjaGFyICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVf dCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBu b2V4Y2VwdDsKLS0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IGNoYXIg KmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgc3RkOjpzaXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9v bCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIFN0cihjb25zdCBTdHIgJikgbm9leGNl cHQgPSBkZWZhdWx0OwotLSAgflN0cigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIFN0ciAoY29u c3QgU3RyICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIH5TdHIgKCkgbm9leGNlcHQgPSBkZWZh dWx0OwotIAotICAgdXNpbmcgaXRlcmF0b3IgPSBjb25zdCBjaGFyICo7Ci0gICB1c2luZyBjb25z dF9pdGVyYXRvciA9IGNvbnN0IGNoYXIgKjsKLS0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKLS0g IGNvbnN0X2l0ZXJhdG9yIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0 b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBjb25zdF9pdGVyYXRvciBjYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVy YXRvciBjZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHIgJikg Y29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yPChjb25zdCBTdHIgJikgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yPD0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBv cGVyYXRvcj49KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9 PSAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvciE9IChjb25z dCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPCAoY29uc3QgU3RyICYp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBTdHIgJikgY29uc3Qg bm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPiAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0 OwotKyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0gCi0t ICB2b2lkIHN3YXAoU3RyICYpIG5vZXhjZXB0OwotKyAgdm9pZCBzd2FwIChTdHIgJikgbm9leGNl cHQ7Ci0gCi0gcHJpdmF0ZToKLSAgIGNsYXNzIHVuaW5pdDsKLS0gIFN0cih1bmluaXQpIG5vZXhj ZXB0OwotKyAgU3RyICh1bmluaXQpIG5vZXhjZXB0OwotICAgZnJpZW5kIGltcGw8U3RyPjsKLSAK LSAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDI+IHJlcHI7Ci1AQCAtMTg1LDcyICsxODks NzIgQEAgY2xhc3MgU3RyIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9TTElD RQotICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NMSUNFCi0tbmFtZXNwYWNlIGRldGFpbCB7Ci0t dGVtcGxhdGUgPGJvb2w+Ci0tc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZiB7fTsKLStuYW1lc3Bh Y2UgZGV0YWlsCi0rewotK3RlbXBsYXRlIDxib29sPiBzdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lm Ci0rewotK307Ci0gCi0tdGVtcGxhdGUgPD4KLS1zdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmPGZh bHNlPiB7Ci0tICBjb3B5X2Fzc2lnbmFibGVfaWYoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0tICBj b3B5X2Fzc2lnbmFibGVfaWYoY29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpIG5vZXhjZXB0ID0g ZGVmYXVsdDsKLS0gIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNz aWduYWJsZV9pZiAmKSAmIG5vZXhjZXB0ID0gZGVsZXRlOwotLSAgY29weV9hc3NpZ25hYmxlX2lm ICZvcGVyYXRvcj0oY29weV9hc3NpZ25hYmxlX2lmICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsK LSt0ZW1wbGF0ZSA8PiBzdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmPGZhbHNlPgotK3sKLSsgIGNv cHlfYXNzaWduYWJsZV9pZiAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICBjb3B5X2Fzc2lnbmFi bGVfaWYgKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0r ICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPSAoY29uc3QgY29weV9hc3NpZ25hYmxlX2lm ICYpICYgbm9leGNlcHQgPSBkZWxldGU7Ci0rICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9y PSAoY29weV9hc3NpZ25hYmxlX2lmICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSB9OwotIH0g Ly8gbmFtZXNwYWNlIGRldGFpbAotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFNs aWNlIGZpbmFsCi0tICAgIDogcHJpdmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6 OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4gewotK2NsYXNzIFNsaWNlIGZpbmFsIDogcHJpdmF0ZSBkZXRh aWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4KLSt7Ci0gcHVi bGljOgotICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7Ci0gCi0tICBTbGljZSgpIG5vZXhjZXB0Owot LSAgU2xpY2UoVCAqLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQ7Ci0rICBTbGljZSAoKSBu b2V4Y2VwdDsKLSsgIFNsaWNlIChUICosIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKLSAK LS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgotLSAgZXhwbGljaXQgU2xpY2UoQyAmYykgOiBTbGlj ZShjLmRhdGEoKSwgYy5zaXplKCkpIHt9Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gZXhwbGlj aXQgU2xpY2UgKEMgJmMpIDogU2xpY2UgKGMuZGF0YSAoKSwgYy5zaXplICgpKSB7fQotIAotLSAg U2xpY2UgJm9wZXJhdG9yPShjb25zdCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsK LS0gIFNsaWNlICZvcGVyYXRvcj0oU2xpY2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0Owot KyAgU2xpY2UgJm9wZXJhdG9yPSAoY29uc3QgU2xpY2U8VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0rICBTbGljZSAmb3BlcmF0b3I9IChTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0gCi0tICBUICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBzaXpl KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQgKmRhdGEgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgc3Rk OjpzaXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBlbXB0eSAoKSBjb25z dCBub2V4Y2VwdDsKLSAKLS0gIFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9l eGNlcHQ7Ci0tICBUICZhdChzdGQ6OnNpemVfdCBuKSBjb25zdDsKLS0gIFQgJmZyb250KCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBUICZiYWNrKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBUICZvcGVyYXRv cltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQgJmF0IChzdGQ6OnNpemVf dCBuKSBjb25zdDsKLSsgIFQgJmZyb250ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAmYmFjayAo KSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIFNsaWNlKGNvbnN0IFNsaWNlPFQ+ICYpIG5vZXhjZXB0 ID0gZGVmYXVsdDsKLS0gIH5TbGljZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIFNsaWNlIChj b25zdCBTbGljZTxUPiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICB+U2xpY2UgKCkgbm9leGNl cHQgPSBkZWZhdWx0OwotIAotICAgY2xhc3MgaXRlcmF0b3I7Ci0tICBpdGVyYXRvciBiZWdpbigp IGNvbnN0IG5vZXhjZXB0OwotLSAgaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBp dGVyYXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGVuZCAoKSBjb25z dCBub2V4Y2VwdDsKLSAKLS0gIHZvaWQgc3dhcChTbGljZSAmKSBub2V4Y2VwdDsKLSsgIHZvaWQg c3dhcCAoU2xpY2UgJikgbm9leGNlcHQ7Ci0gCi0gcHJpdmF0ZToKLSAgIGNsYXNzIHVuaW5pdDsK LS0gIFNsaWNlKHVuaW5pdCkgbm9leGNlcHQ7Ci0rICBTbGljZSAodW5pbml0KSBub2V4Y2VwdDsK LSAgIGZyaWVuZCBpbXBsPFNsaWNlPjsKLS0gIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCh2b2lkICos IGNvbnN0IHZvaWQgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotLSAgZnJpZW5kIHZvaWQgKnNs aWNlUHRyKGNvbnN0IHZvaWQgKikgbm9leGNlcHQ7Ci0tICBmcmllbmQgc3RkOjpzaXplX3Qgc2xp Y2VMZW4oY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSsgIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCAo dm9pZCAqLCBjb25zdCB2b2lkICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIGZyaWVuZCB2 b2lkICpzbGljZVB0ciAoY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSsgIGZyaWVuZCBzdGQ6OnNp emVfdCBzbGljZUxlbiAoY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSAKLSAgIHN0ZDo6YXJyYXk8 c3RkOjp1aW50cHRyX3QsIDI+IHJlcHI7Ci0gfTsKLSAKLSAjaWZkZWYgX19jcHBfZGVkdWN0aW9u X2d1aWRlcwotIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgotLWV4cGxpY2l0IFNsaWNlKEMgJmMpCi0t ICAgIC0+IFNsaWNlPHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKCpzdGQ6OmRlY2x2 YWw8Qz4oKS5kYXRhKCkpPj47Ci0rZXhwbGljaXQgU2xpY2UgKEMgJmMpIC0+IFNsaWNlPHN0ZDo6 cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlICgqc3RkOjpkZWNsdmFsPEM+ICgpLmRhdGEgKCkp Pj47Ci0gI2VuZGlmIC8vIF9fY3BwX2RlZHVjdGlvbl9ndWlkZXMKLSAKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1jbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwgewotK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBjbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwKLSt7Ci0gcHVibGljOgot ICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCi0gICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9 IHN0ZDo6Y29udGlndW91c19pdGVyYXRvcl90YWc7Ci1AQCAtMjYyLDMwICsyNjYsMzIgQEAgY2xh c3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsIHsKLSAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFt ZSBzdGQ6OmFkZF9wb2ludGVyPFQ+Ojp0eXBlOwotICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5h bWUgc3RkOjphZGRfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZTsKLSAKLS0gIHJlZmVyZW5jZSBv cGVyYXRvciooKSBjb25zdCBub2V4Y2VwdDsKLSsgIHJlZmVyZW5jZSBvcGVyYXRvciogKCkgY29u c3Qgbm9leGNlcHQ7Ci0gICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdDsKLS0g IHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0t Ci0tICBpdGVyYXRvciAmb3BlcmF0b3IrKygpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3Igb3BlcmF0 b3IrKyhpbnQpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3IgJm9wZXJhdG9yLS0oKSBub2V4Y2VwdDsK LS0gIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSBub2V4Y2VwdDsKLS0KLS0gIGl0ZXJhdG9yICZv cGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0tICBpdGVyYXRvciAmb3BlcmF0 b3ItPShkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3Igb3BlcmF0b3IrKGRp ZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICBmcmllbmQgaW5saW5lIGl0ZXJhdG9y IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgbGhzLCBpdGVyYXRvciByaHMpIG5vZXhjZXB0IHsK LSsgIHJlZmVyZW5jZSBvcGVyYXRvcltdIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0 OwotKwotKyAgaXRlcmF0b3IgJm9wZXJhdG9yKysgKCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBv cGVyYXRvcisrIChpbnQpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgJm9wZXJhdG9yLS0gKCkgbm9l eGNlcHQ7Ci0rICBpdGVyYXRvciBvcGVyYXRvci0tIChpbnQpIG5vZXhjZXB0OwotKwotKyAgaXRl cmF0b3IgJm9wZXJhdG9yKz0gKGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0rICBpdGVyYXRv ciAmb3BlcmF0b3ItPSAoZGlmZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIG9w ZXJhdG9yKyAoZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKLSsgIGZyaWVuZCBpbmxp bmUgaXRlcmF0b3IKLSsgIG9wZXJhdG9yKyAoZGlmZmVyZW5jZV90eXBlIGxocywgaXRlcmF0b3Ig cmhzKSBub2V4Y2VwdAotKyAgewotICAgICByZXR1cm4gcmhzICsgbGhzOwotICAgfQotLSAgaXRl cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICBkaWZm ZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0Owot KyAgaXRlcmF0b3Igb3BlcmF0b3ItIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0Owot KyAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9l eGNlcHQ7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIG9wZXJhdG9yPChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsK LS0gIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBvcGVyYXRvcj49KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBv cGVyYXRvcj09IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3Bl cmF0b3IhPSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPCAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9y PD0gKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj4g KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj49IChj b25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5k IGNsYXNzIFNsaWNlOwotQEAgLTI5NCwzNjcgKzMwMCw0MzcgQEAgY2xhc3MgU2xpY2U8VD46Oml0 ZXJhdG9yIGZpbmFsIHsKLSB9OwotIAotICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCi0tc3Rh dGljX2Fzc2VydChzdGQ6OnJhbmdlczo6Y29udGlndW91c19yYW5nZTxydXN0OjpTbGljZTxjb25z dCB1aW50OF90Pj4pOwotLXN0YXRpY19hc3NlcnQoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1 c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+OjppdGVyYXRvcj4pOwotK3N0YXRpY19hc3NlcnQgKHN0 ZDo6cmFuZ2VzOjpjb250aWd1b3VzX3JhbmdlPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+Pik7 Ci0rc3RhdGljX2Fzc2VydCAoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNv bnN0IHVpbnQ4X3Q+OjppdGVyYXRvcj4pOwotICNlbmRpZgotIAotLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLVNsaWNlPFQ+OjpTbGljZSgpIG5vZXhjZXB0IHsKLS0gIHNsaWNlSW5pdCh0aGlzLCBy ZWludGVycHJldF9jYXN0PHZvaWQgKj4oYWxpZ25fb2Y8VD4oKSksIDApOwotK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBTbGljZTxUPjo6U2xpY2UgKCkgbm9leGNlcHQKLSt7Ci0rICBzbGljZUluaXQg KHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4gKCkpLCAwKTsKLSB9 Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tU2xpY2U8VD46OlNsaWNlKFQgKnMsIHN0ZDo6 c2l6ZV90IGNvdW50KSBub2V4Y2VwdCB7Ci0tICBhc3NlcnQocyAhPSBudWxscHRyIHx8IGNvdW50 ID09IDApOwotLSAgc2xpY2VJbml0KHRoaXMsCi0tICAgICAgICAgICAgcyA9PSBudWxscHRyICYm IGNvdW50ID09IDAKLS0gICAgICAgICAgICAgICAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4o YWxpZ25fb2Y8VD4oKSkKLS0gICAgICAgICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0 ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlICo+KHMpLAotLSAgICAgICAgICAgIGNvdW50KTsKLSt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gU2xpY2U8VD46OlNsaWNlIChUICpzLCBzdGQ6OnNpemVfdCBj b3VudCkgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAw KTsKLSsgIHNsaWNlSW5pdCAodGhpcywKLSsgICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNv dW50ID09IDAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4gKGFsaWduX29mPFQ+ICgpKQotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlwZW5h bWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgKj4gKHMpLAotKyAgICAgICAgICAgICBjb3Vu dCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgKlNsaWNlPFQ+OjpkYXRhKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihzbGljZVB0 cih0aGlzKSk7Ci0rVCAqCi0rU2xpY2U8VD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+IChzbGljZVB0ciAodGhpcykpOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1zdGQ6OnNpemVfdCBTbGljZTxUPjo6c2l6ZSgpIGNv bnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBzbGljZUxlbih0aGlzKTsKLStzdGQ6OnNpemVfdAot K1NsaWNlPFQ+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHNsaWNlTGVu ICh0aGlzKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tc3RkOjpzaXplX3QgU2xp Y2U8VD46Omxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5zaXplKCk7 Ci0rc3RkOjpzaXplX3QKLStTbGljZTxUPjo6bGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHRoaXMtPnNpemUgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LWJvb2wgU2xpY2U8VD46OmVtcHR5KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMt PnNpemUoKSA9PSAwOwotK2Jvb2wKLStTbGljZTxUPjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gdGhpcy0+c2l6ZSAoKSA9PSAwOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1UICZTbGljZTxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICBhc3NlcnQobiA8IHRoaXMtPnNpemUoKSk7Ci0tICBhdXRvIHB0ciA9IHN0 YXRpY19jYXN0PGNoYXIgKj4oc2xpY2VQdHIodGhpcykpICsgc2l6ZV9vZjxUPigpICogbjsKLS0g IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+KHB0cik7Ci0rVCAmCi0rU2xpY2U8VD46Om9w ZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChu IDwgdGhpcy0+c2l6ZSAoKSk7Ci0rICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHNs aWNlUHRyICh0aGlzKSkgKyBzaXplX29mPFQ+ICgpICogbjsKLSsgIHJldHVybiAqcmVpbnRlcnBy ZXRfY2FzdDxUICo+IChwdHIpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZT bGljZTxUPjo6YXQoc3RkOjpzaXplX3QgbikgY29uc3QgewotLSAgaWYgKG4gPj0gdGhpcy0+c2l6 ZSgpKSB7Ci0tICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6U2xpY2UgaW5kZXgg b3V0IG9mIHJhbmdlIik7Ci0tICB9Ci0rVCAmCi0rU2xpY2U8VD46OmF0IChzdGQ6OnNpemVfdCBu KSBjb25zdAotK3sKLSsgIGlmIChuID49IHRoaXMtPnNpemUgKCkpCi0rICAgIHsKLSsgICAgICBw YW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0OjpTbGljZSBpbmRleCBvdXQgb2YgcmFuZ2Ui KTsKLSsgICAgfQotICAgcmV0dXJuICgqdGhpcylbbl07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotLVQgJlNsaWNlPFQ+Ojpmcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGFzc2Vy dCghdGhpcy0+ZW1wdHkoKSk7Ci0rVCAmCi0rU2xpY2U8VD46OmZyb250ICgpIGNvbnN0IG5vZXhj ZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotICAgcmV0dXJuICgqdGhpcylb MF07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlNsaWNlPFQ+OjpiYWNrKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLS0gIHJldHVybiAo KnRoaXMpW3RoaXMtPnNpemUoKSAtIDFdOwotK1QgJgotK1NsaWNlPFQ+OjpiYWNrICgpIGNvbnN0 IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotKyAgcmV0dXJuICgq dGhpcylbdGhpcy0+c2l6ZSAoKSAtIDFdOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LSB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5jZQotLVNsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuICpzdGF0aWNfY2Fz dDxUICo+KHRoaXMtPnBvcyk7Ci0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciogKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gKnN0YXRpY19jYXN0PFQgKj4gKHRoaXMtPnBvcyk7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6cG9pbnRlcgotLVNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiBzdGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7Ci0rU2xpY2U8 VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g c3RhdGljX2Nhc3Q8VCAqPiAodGhpcy0+cG9zKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UgU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcltdKAotLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRp ZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhdXRvIHB0ciA9IHN0YXRpY19j YXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47Ci0tICByZXR1cm4gKnJl aW50ZXJwcmV0X2Nhc3Q8VCAqPihwdHIpOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6 cmVmZXJlbmNlCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcltdICh0eXBlbmFtZSBTbGlj ZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlk ZSAqIG47Ci0rICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAocHRyKTsKLSB9Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysoKSBub2V4Y2VwdCB7Ci0tICB0aGlzLT5wb3MgPSBz dGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7Ci0rdHlwZW5hbWUg U2xpY2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysgKCkg bm9leGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvcisrKGludCkgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBpdGVyYXRvcigq dGhpcyk7Ci0tICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0 aGlzLT5zdHJpZGU7Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcisrIChpbnQpIG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVy YXRvciAoKnRoaXMpOwotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+ cG9zKSArIHRoaXMtPnN0cmlkZTsKLSAgIHJldHVybiByZXQ7Ci0gfQotIAotIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvci0tKCkgbm9leGNlcHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8 Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOwotK3R5cGVuYW1lIFNsaWNlPFQ+Ojpp dGVyYXRvciAmCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tICgpIG5vZXhjZXB0Ci0r ewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMt PnN0cmlkZTsKLSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3ItLShpbnQpIG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOwotLSAg dGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRl OwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3ItLSAoaW50KSBub2V4Y2VwdAotK3sKLSsgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlz KTsKLSsgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlz LT5zdHJpZGU7Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3IrPSgKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgbm9leGNlcHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgot K1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrPSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0 aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSAgIHJldHVy biAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0oCi0tICAgIHR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0IHsKLS0g IHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlk ZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxUPjo6aXRlcmF0 b3I6Om9wZXJhdG9yLT0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90 eXBlIG4pIG5vZXhjZXB0Ci0rewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAo dGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAot IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKygKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBp dGVyYXRvcigqdGhpcyk7Ci0tICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKyAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y OjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHJldCA9IGl0 ZXJhdG9yICgqdGhpcyk7Ci0rICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+ cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvci0oCi0tICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlm ZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3Io KnRoaXMpOwotLSAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRo aXMtPnN0cmlkZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvci0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVy ZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVyYXRvciAo KnRoaXMpOwotKyAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0 aGlzLT5zdHJpZGUgKiBuOwotICAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0gdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUKLS1T bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIGF1dG8gZGlmZiA9IHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8Y2hh ciAqPihvdGhlci5wb3MpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz dDxjaGFyICo+KHRoaXMtPnBvcykpOwotLSAgcmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZT4oCi0tICAgICAgICAgICAg ICAgICAgICB0aGlzLT5zdHJpZGUpOwotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItIChj b25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXV0byBkaWZmID0g c3RkOjpkaXN0YW5jZSAoc3RhdGljX2Nhc3Q8Y2hhciAqPiAob3RoZXIucG9zKSwgc3RhdGljX2Nh c3Q8Y2hhciAqPiAodGhpcy0+cG9zKSk7Ci0rICByZXR1cm4gZGlmZiAvIHN0YXRpY19jYXN0PHR5 cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlPiAodGhpcy0+c3RyaWRl KTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0 b3I6Om9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0r Ym9vbAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I9PSAoY29uc3QgaXRlcmF0b3IgJm90 aGVyKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPT0gb3RoZXIucG9z OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKLSti b29sCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciE9IChjb25zdCBpdGVyYXRvciAmb3Ro ZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyAhPSBvdGhlci5wb3M7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9y OjpvcGVyYXRvcjwoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9v bAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8IChjb25zdCBpdGVyYXRvciAmb3RoZXIp IGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA8IG90aGVyLnBvczsKLSB9 Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yPD0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9vbAot K1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBj b25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPD0gb3RoZXIucG9zOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3I+KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPiAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25z dCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPiBvdGhlci5wb3M7Ci0gfQotIAot IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRv cj49KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPj0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qg bm9leGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zID49IG90aGVyLnBvczsKLSB9Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNl PFQ+OjpiZWdpbigpIGNvbnN0IG5vZXhjZXB0IHsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3IKLStTbGljZTxUPjo6YmVnaW4gKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICBpdGVyYXRvciBp dDsKLS0gIGl0LnBvcyA9IHNsaWNlUHRyKHRoaXMpOwotLSAgaXQuc3RyaWRlID0gc2l6ZV9vZjxU PigpOwotKyAgaXQucG9zID0gc2xpY2VQdHIgKHRoaXMpOwotKyAgaXQuc3RyaWRlID0gc2l6ZV9v ZjxUPiAoKTsKLSAgIHJldHVybiBpdDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t dHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjplbmQoKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICBpdGVyYXRvciBpdCA9IHRoaXMtPmJlZ2luKCk7Ci0tICBpdC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+KGl0LnBvcykgKyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplKCk7Ci0rdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46OmVuZCAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIGl0ZXJhdG9yIGl0ID0gdGhpcy0+YmVnaW4gKCk7Ci0rICBpdC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+IChpdC5wb3MpICsgaXQuc3RyaWRlICogdGhpcy0+c2l6ZSAoKTsKLSAgIHJl dHVybiBpdDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBTbGljZTxUPjo6 c3dhcChTbGljZSAmcmhzKSBub2V4Y2VwdCB7Ci0tICBzdGQ6OnN3YXAoKnRoaXMsIHJocyk7Ci0r dm9pZAotK1NsaWNlPFQ+Ojpzd2FwIChTbGljZSAmcmhzKSBub2V4Y2VwdAotK3sKLSsgIHN0ZDo6 c3dhcCAoKnRoaXMsIHJocyk7Ci0gfQotICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfU0xJQ0UK LSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9CT1gKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVT VF9CT1gKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBCb3ggZmluYWwgewotK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3ggZmluYWwKLSt7Ci0gcHVibGljOgotICAgdXNpbmcg ZWxlbWVudF90eXBlID0gVDsKLS0gIHVzaW5nIGNvbnN0X3BvaW50ZXIgPQotLSAgICAgIHR5cGVu YW1lIHN0ZDo6YWRkX3BvaW50ZXI8dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0 eXBlOwotKyAgdXNpbmcgY29uc3RfcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8 dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0eXBlOwotICAgdXNpbmcgcG9pbnRl ciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8VD46OnR5cGU7Ci0gCi0tICBCb3goKSA9IGRl bGV0ZTsKLS0gIEJveChCb3ggJiYpIG5vZXhjZXB0OwotLSAgfkJveCgpIG5vZXhjZXB0OwotKyAg Qm94ICgpID0gZGVsZXRlOwotKyAgQm94IChCb3ggJiYpIG5vZXhjZXB0OwotKyAgfkJveCAoKSBu b2V4Y2VwdDsKLSAKLS0gIGV4cGxpY2l0IEJveChjb25zdCBUICYpOwotLSAgZXhwbGljaXQgQm94 KFQgJiYpOwotKyAgZXhwbGljaXQgQm94IChjb25zdCBUICYpOwotKyAgZXhwbGljaXQgQm94IChU ICYmKTsKLSAKLS0gIEJveCAmb3BlcmF0b3I9KEJveCAmJikgJiBub2V4Y2VwdDsKLSsgIEJveCAm b3BlcmF0b3I9IChCb3ggJiYpICYgbm9leGNlcHQ7Ci0gCi0gICBjb25zdCBUICpvcGVyYXRvci0+ KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdCBUICZvcGVyYXRvciooKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGNvbnN0IFQgJm9wZXJhdG9yKiAoKSBjb25zdCBub2V4Y2VwdDsKLSAgIFQgKm9wZXJh dG9yLT4oKSBub2V4Y2VwdDsKLS0gIFQgJm9wZXJhdG9yKigpIG5vZXhjZXB0OwotKyAgVCAmb3Bl cmF0b3IqICgpIG5vZXhjZXB0OwotIAotLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4K LS0gIHN0YXRpYyBCb3ggaW5fcGxhY2UoRmllbGRzICYmLi4uKTsKLSsgIHRlbXBsYXRlIDx0eXBl bmFtZS4uLiBGaWVsZHM+IHN0YXRpYyBCb3ggaW5fcGxhY2UgKEZpZWxkcyAmJi4uLik7Ci0gCi0t ICB2b2lkIHN3YXAoQm94ICYpIG5vZXhjZXB0OwotKyAgdm9pZCBzd2FwIChCb3ggJikgbm9leGNl cHQ7Ci0gCi0tICBzdGF0aWMgQm94IGZyb21fcmF3KFQgKikgbm9leGNlcHQ7Ci0rICBzdGF0aWMg Qm94IGZyb21fcmF3IChUICopIG5vZXhjZXB0OwotIAotLSAgVCAqaW50b19yYXcoKSBub2V4Y2Vw dDsKLSsgIFQgKmludG9fcmF3ICgpIG5vZXhjZXB0OwotIAotICAgLyogRGVwcmVjYXRlZCAqLyB1 c2luZyB2YWx1ZV90eXBlID0gZWxlbWVudF90eXBlOwotIAotIHByaXZhdGU6Ci0gICBjbGFzcyB1 bmluaXQ7Ci0gICBjbGFzcyBhbGxvY2F0aW9uOwotLSAgQm94KHVuaW5pdCkgbm9leGNlcHQ7Ci0t ICB2b2lkIGRyb3AoKSBub2V4Y2VwdDsKLSsgIEJveCAodW5pbml0KSBub2V4Y2VwdDsKLSsgIHZv aWQgZHJvcCAoKSBub2V4Y2VwdDsKLSAKLS0gIGZyaWVuZCB2b2lkIHN3YXAoQm94ICZsaHMsIEJv eCAmcmhzKSBub2V4Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KLSsgIGZyaWVuZCB2b2lkCi0rICBz d2FwIChCb3ggJmxocywgQm94ICZyaHMpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIGxocy5zd2FwIChy aHMpOwotKyAgfQotIAotICAgVCAqcHRyOwotIH07Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tY2xhc3MgQm94PFQ+Ojp1bmluaXQge307Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz IEJveDxUPjo6dW5pbml0Ci0rewotK307Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY2xh c3MgQm94PFQ+OjphbGxvY2F0aW9uIHsKLS0gIHN0YXRpYyBUICphbGxvYygpIG5vZXhjZXB0Owot LSAgc3RhdGljIHZvaWQgZGVhbGxvYyhUICopIG5vZXhjZXB0OwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPiBjbGFzcyBCb3g8VD46OmFsbG9jYXRpb24KLSt7Ci0rICBzdGF0aWMgVCAqYWxsb2MgKCkg bm9leGNlcHQ7Ci0rICBzdGF0aWMgdm9pZCBkZWFsbG9jIChUICopIG5vZXhjZXB0OwotIAotIHB1 YmxpYzoKLS0gIGFsbG9jYXRpb24oKSBub2V4Y2VwdCA6IHB0cihhbGxvYygpKSB7fQotLSAgfmFs bG9jYXRpb24oKSBub2V4Y2VwdCB7Ci0tICAgIGlmICh0aGlzLT5wdHIpIHsKLS0gICAgICBkZWFs bG9jKHRoaXMtPnB0cik7Ci0tICAgIH0KLSsgIGFsbG9jYXRpb24gKCkgbm9leGNlcHQgOiBwdHIg KGFsbG9jICgpKSB7fQotKyAgfmFsbG9jYXRpb24gKCkgbm9leGNlcHQKLSsgIHsKLSsgICAgaWYg KHRoaXMtPnB0cikKLSsgICAgICB7Ci0rICAgICAgICBkZWFsbG9jICh0aGlzLT5wdHIpOwotKyAg ICAgIH0KLSAgIH0KLSAgIFQgKnB0cjsKLSB9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LUJveDxUPjo6Qm94KEJveCAmJm90aGVyKSBub2V4Y2VwdCA6IHB0cihvdGhlci5wdHIpIHsKLS0g IG90aGVyLnB0ciA9IG51bGxwdHI7Ci0tfQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46 OkJveCAoQm94ICYmb3RoZXIpIG5vZXhjZXB0IDogcHRyIChvdGhlci5wdHIpIHsgb3RoZXIucHRy ID0gbnVsbHB0cjsgfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPjo6Qm94KGNv bnN0IFQgJnZhbCkgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoY29uc3Qg VCAmdmFsKQotK3sKLSAgIGFsbG9jYXRpb24gYWxsb2M7Ci0tICA6Om5ldyAoYWxsb2MucHRyKSBU KHZhbCk7Ci0rICA6Om5ldyAoYWxsb2MucHRyKSBUICh2YWwpOwotICAgdGhpcy0+cHRyID0gYWxs b2MucHRyOwotICAgYWxsb2MucHRyID0gbnVsbHB0cjsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tQm94PFQ+OjpCb3goVCAmJnZhbCkgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBC b3g8VD46OkJveCAoVCAmJnZhbCkKLSt7Ci0gICBhbGxvY2F0aW9uIGFsbG9jOwotLSAgOjpuZXcg KGFsbG9jLnB0cikgVChzdGQ6Om1vdmUodmFsKSk7Ci0rICA6Om5ldyAoYWxsb2MucHRyKSBUIChz dGQ6Om1vdmUgKHZhbCkpOwotICAgdGhpcy0+cHRyID0gYWxsb2MucHRyOwotICAgYWxsb2MucHRy ID0gbnVsbHB0cjsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+Ojp+Qm94 KCkgbm9leGNlcHQgewotLSAgaWYgKHRoaXMtPnB0cikgewotLSAgICB0aGlzLT5kcm9wKCk7Ci0t ICB9Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6fkJveCAoKSBub2V4Y2VwdAotK3sK LSsgIGlmICh0aGlzLT5wdHIpCi0rICAgIHsKLSsgICAgICB0aGlzLT5kcm9wICgpOwotKyAgICB9 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPiAmQm94PFQ+OjpvcGVyYXRv cj0oQm94ICYmb3RoZXIpICYgbm9leGNlcHQgewotLSAgaWYgKHRoaXMtPnB0cikgewotLSAgICB0 aGlzLT5kcm9wKCk7Ci0tICB9Ci0rQm94PFQ+ICYKLStCb3g8VD46Om9wZXJhdG9yPSAoQm94ICYm b3RoZXIpICYgbm9leGNlcHQKLSt7Ci0rICBpZiAodGhpcy0+cHRyKQotKyAgICB7Ci0rICAgICAg dGhpcy0+ZHJvcCAoKTsKLSsgICAgfQotICAgdGhpcy0+cHRyID0gb3RoZXIucHRyOwotICAgb3Ro ZXIucHRyID0gbnVsbHB0cjsKLSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tY29uc3QgVCAqQm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQg ewotK2NvbnN0IFQgKgotK0JveDxUPjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0Ci0rewot ICAgcmV0dXJuIHRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY29u c3QgVCAmQm94PFQ+OjpvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdCB7Ci0rY29uc3QgVCAmCi0r Qm94PFQ+OjpvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gKnRoaXMt PnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAqQm94PFQ+OjpvcGVyYXRv ci0+KCkgbm9leGNlcHQgewotK1QgKgotK0JveDxUPjo6b3BlcmF0b3ItPigpIG5vZXhjZXB0Ci0r ewotICAgcmV0dXJuIHRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t VCAmQm94PFQ+OjpvcGVyYXRvciooKSBub2V4Y2VwdCB7Ci0rVCAmCi0rQm94PFQ+OjpvcGVyYXRv ciogKCkgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gKnRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0gdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KLS1Cb3g8VD4g Qm94PFQ+Ojppbl9wbGFjZShGaWVsZHMgJiYuLi5maWVsZHMpIHsKLStCb3g8VD4KLStCb3g8VD46 OmluX3BsYWNlIChGaWVsZHMgJiYuLi5maWVsZHMpCi0rewotICAgYWxsb2NhdGlvbiBhbGxvYzsK LSAgIGF1dG8gcHRyID0gYWxsb2MucHRyOwotLSAgOjpuZXcgKHB0cikgVHtzdGQ6OmZvcndhcmQ8 RmllbGRzPihmaWVsZHMpLi4ufTsKLSsgIDo6bmV3IChwdHIpIFR7IHN0ZDo6Zm9yd2FyZDxGaWVs ZHM+IChmaWVsZHMpLi4uIH07Ci0gICBhbGxvYy5wdHIgPSBudWxscHRyOwotLSAgcmV0dXJuIGZy b21fcmF3KHB0cik7Ci0rICByZXR1cm4gZnJvbV9yYXcgKHB0cik7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXZvaWQgQm94PFQ+Ojpzd2FwKEJveCAmcmhzKSBub2V4Y2VwdCB7Ci0r dm9pZAotK0JveDxUPjo6c3dhcCAoQm94ICZyaHMpIG5vZXhjZXB0Ci0rewotICAgdXNpbmcgc3Rk Ojpzd2FwOwotLSAgc3dhcCh0aGlzLT5wdHIsIHJocy5wdHIpOwotKyAgc3dhcCAodGhpcy0+cHRy LCByaHMucHRyKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+IEJveDxU Pjo6ZnJvbV9yYXcoVCAqcmF3KSBub2V4Y2VwdCB7Ci0rQm94PFQ+Ci0rQm94PFQ+Ojpmcm9tX3Jh dyAoVCAqcmF3KSBub2V4Y2VwdAotK3sKLSAgIEJveCBib3ggPSB1bmluaXR7fTsKLSAgIGJveC5w dHIgPSByYXc7Ci0gICByZXR1cm4gYm94OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1UICpCb3g8VD46OmludG9fcmF3KCkgbm9leGNlcHQgewotK1QgKgotK0JveDxUPjo6aW50b19y YXcgKCkgbm9leGNlcHQKLSt7Ci0gICBUICpyYXcgPSB0aGlzLT5wdHI7Ci0gICB0aGlzLT5wdHIg PSBudWxscHRyOwotICAgcmV0dXJuIHJhdzsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tQm94PFQ+OjpCb3godW5pbml0KSBub2V4Y2VwdCB7fQotK3RlbXBsYXRlIDx0eXBlbmFtZSBU PiBCb3g8VD46OkJveCAodW5pbml0KSBub2V4Y2VwdCB7fQotICNlbmRpZiAvLyBDWFhCUklER0Ux X1JVU1RfQk9YCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCi0gI2RlZmlu ZSBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCi0tc3RydWN0IHVuc2FmZV9iaXRjb3B5X3QgZmlu YWwgewotLSAgZXhwbGljaXQgdW5zYWZlX2JpdGNvcHlfdCgpID0gZGVmYXVsdDsKLStzdHJ1Y3Qg dW5zYWZlX2JpdGNvcHlfdCBmaW5hbAotK3sKLSsgIGV4cGxpY2l0IHVuc2FmZV9iaXRjb3B5X3Qg KCkgPSBkZWZhdWx0OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QK LSAKLUBAIC02NjUsMjU3ICs3NDEsMzA3IEBAIGNvbnN0ZXhwciB1bnNhZmVfYml0Y29weV90IHVu c2FmZV9iaXRjb3B5e307Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfVkVDCi0gI2RlZmlu ZSBDWFhCUklER0UxX1JVU1RfVkVDCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY2xhc3MgVmVj IGZpbmFsIHsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVmVjIGZpbmFsCi0rewotIHB1 YmxpYzoKLSAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwotIAotLSAgVmVjKCkgbm9leGNlcHQ7Ci0t ICBWZWMoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+KTsKLS0gIFZlYyhjb25zdCBWZWMgJik7Ci0t ICBWZWMoVmVjICYmKSBub2V4Y2VwdDsKLS0gIH5WZWMoKSBub2V4Y2VwdDsKLS0KLS0gIFZlYyAm b3BlcmF0b3I9KFZlYyAmJikgJiBub2V4Y2VwdDsKLS0gIFZlYyAmb3BlcmF0b3I9KGNvbnN0IFZl YyAmKSAmOwotLQotLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3QgVCAqZGF0YSgpIGNvbnN0IG5vZXhj ZXB0OwotLSAgVCAqZGF0YSgpIG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3QgY2FwYWNpdHkoKSBj b25zdCBub2V4Y2VwdDsKLS0KLS0gIGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3Qgbikg Y29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdCBUICZhdChzdGQ6OnNpemVfdCBuKSBjb25zdDsKLS0g IGNvbnN0IFQgJmZyb250KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdCBUICZiYWNrKCkgY29u c3Qgbm9leGNlcHQ7Ci0tCi0tICBUICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0 OwotLSAgVCAmYXQoc3RkOjpzaXplX3Qgbik7Ci0tICBUICZmcm9udCgpIG5vZXhjZXB0OwotLSAg VCAmYmFjaygpIG5vZXhjZXB0OwotLQotLSAgdm9pZCByZXNlcnZlKHN0ZDo6c2l6ZV90IG5ld19j YXApOwotLSAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCAmdmFsdWUpOwotLSAgdm9pZCBwdXNoX2Jh Y2soVCAmJnZhbHVlKTsKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotLSAgdm9pZCBl bXBsYWNlX2JhY2soQXJncyAmJi4uLmFyZ3MpOwotLSAgdm9pZCB0cnVuY2F0ZShzdGQ6OnNpemVf dCBsZW4pOwotLSAgdm9pZCBjbGVhcigpOwotKyAgVmVjICgpIG5vZXhjZXB0OwotKyAgVmVjIChz dGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4pOwotKyAgVmVjIChjb25zdCBWZWMgJik7Ci0rICBWZWMg KFZlYyAmJikgbm9leGNlcHQ7Ci0rICB+VmVjICgpIG5vZXhjZXB0OwotKwotKyAgVmVjICZvcGVy YXRvcj0gKFZlYyAmJikgJiBub2V4Y2VwdDsKLSsgIFZlYyAmb3BlcmF0b3I9IChjb25zdCBWZWMg JikgJjsKLSsKLSsgIHN0ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29s IGVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3QgVCAqZGF0YSAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIFQgKmRhdGEgKCkgbm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBjYXBhY2l0eSAo KSBjb25zdCBub2V4Y2VwdDsKLSsKLSsgIGNvbnN0IFQgJm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90 IG4pIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3QgVCAmYXQgKHN0ZDo6c2l6ZV90IG4pIGNvbnN0 OwotKyAgY29uc3QgVCAmZnJvbnQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdCBUICZiYWNr ICgpIGNvbnN0IG5vZXhjZXB0OwotKwotKyAgVCAmb3BlcmF0b3JbXSAoc3RkOjpzaXplX3Qgbikg bm9leGNlcHQ7Ci0rICBUICZhdCAoc3RkOjpzaXplX3Qgbik7Ci0rICBUICZmcm9udCAoKSBub2V4 Y2VwdDsKLSsgIFQgJmJhY2sgKCkgbm9leGNlcHQ7Ci0rCi0rICB2b2lkIHJlc2VydmUgKHN0ZDo6 c2l6ZV90IG5ld19jYXApOwotKyAgdm9pZCBwdXNoX2JhY2sgKGNvbnN0IFQgJnZhbHVlKTsKLSsg IHZvaWQgcHVzaF9iYWNrIChUICYmdmFsdWUpOwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy Z3M+IHZvaWQgZW1wbGFjZV9iYWNrIChBcmdzICYmLi4uYXJncyk7Ci0rICB2b2lkIHRydW5jYXRl IChzdGQ6OnNpemVfdCBsZW4pOwotKyAgdm9pZCBjbGVhciAoKTsKLSAKLSAgIHVzaW5nIGl0ZXJh dG9yID0gdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOwotLSAgaXRlcmF0b3IgYmVnaW4oKSBu b2V4Y2VwdDsKLS0gIGl0ZXJhdG9yIGVuZCgpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgYmVnaW4g KCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBlbmQgKCkgbm9leGNlcHQ7Ci0gCi0gICB1c2luZyBj b25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIFNsaWNlPGNvbnN0IFQ+OjppdGVyYXRvcjsKLS0gIGNv bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBl bmQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbigpIGNvbnN0IG5v ZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29u c3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBl bmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBjYmVnaW4gKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBjZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotIAot LSAgdm9pZCBzd2FwKFZlYyAmKSBub2V4Y2VwdDsKLSsgIHZvaWQgc3dhcCAoVmVjICYpIG5vZXhj ZXB0OwotIAotLSAgVmVjKHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmKSBub2V4Y2VwdDsK LSsgIFZlYyAodW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgVmVjICYpIG5vZXhjZXB0OwotIAotIHBy aXZhdGU6Ci0tICB2b2lkIHJlc2VydmVfdG90YWwoc3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNl cHQ7Ci0tICB2b2lkIHNldF9sZW4oc3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLS0gIHZvaWQg ZHJvcCgpIG5vZXhjZXB0OwotKyAgdm9pZCByZXNlcnZlX3RvdGFsIChzdGQ6OnNpemVfdCBuZXdf Y2FwKSBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0X2xlbiAoc3RkOjpzaXplX3QgbGVuKSBub2V4Y2Vw dDsKLSsgIHZvaWQgZHJvcCAoKSBub2V4Y2VwdDsKLSAKLS0gIGZyaWVuZCB2b2lkIHN3YXAoVmVj ICZsaHMsIFZlYyAmcmhzKSBub2V4Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KLSsgIGZyaWVuZCB2 b2lkCi0rICBzd2FwIChWZWMgJmxocywgVmVjICZyaHMpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIGxo cy5zd2FwIChyaHMpOwotKyAgfQotIAotICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJfdCwgMz4g cmVwcjsKLSB9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6VmVjKHN0ZDo6 aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0KSA6IFZlY3t9IHsKLS0gIHRoaXMtPnJlc2VydmVfdG90 YWwoaW5pdC5zaXplKCkpOwotLSAgc3RkOjptb3ZlKGluaXQuYmVnaW4oKSwgaW5pdC5lbmQoKSwg c3RkOjpiYWNrX2luc2VydGVyKCp0aGlzKSk7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxU Pjo6VmVjIChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdCkgOiBWZWN7fQotK3sKLSsgIHRo aXMtPnJlc2VydmVfdG90YWwgKGluaXQuc2l6ZSAoKSk7Ci0rICBzdGQ6Om1vdmUgKGluaXQuYmVn aW4gKCksIGluaXQuZW5kICgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIgKCp0aGlzKSk7Ci0gfQotIAot LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6VmVjKGNvbnN0IFZlYyAmb3RoZXIpIDog VmVjKCkgewotLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChvdGhlci5zaXplKCkpOwotLSAgc3RkOjpj b3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoKnRoaXMp KTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKGNvbnN0IFZlYyAmb3RoZXIp IDogVmVjICgpCi0rewotKyAgdGhpcy0+cmVzZXJ2ZV90b3RhbCAob3RoZXIuc2l6ZSAoKSk7Ci0r ICBzdGQ6OmNvcHkgKG90aGVyLmJlZ2luICgpLCBvdGhlci5lbmQgKCksIHN0ZDo6YmFja19pbnNl cnRlciAoKnRoaXMpKTsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVjPFQ+OjpW ZWMoVmVjICYmb3RoZXIpIG5vZXhjZXB0IDogcmVwcihvdGhlci5yZXByKSB7Ci0tICBuZXcgKCZv dGhlcikgVmVjKCk7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjIChWZWMgJiZv dGhlcikgbm9leGNlcHQgOiByZXByIChvdGhlci5yZXByKQotK3sKLSsgIG5ldyAoJm90aGVyKSBW ZWMgKCk7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6flZlYygpIG5v ZXhjZXB0IHsKLS0gIHRoaXMtPmRyb3AoKTsKLS19Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZl YzxUPjo6flZlYyAoKSBub2V4Y2VwdCB7IHRoaXMtPmRyb3AgKCk7IH0KLSAKLSB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLS1WZWM8VD4gJlZlYzxUPjo6b3BlcmF0b3I9KFZlYyAmJm90aGVyKSAmIG5v ZXhjZXB0IHsKLS0gIHRoaXMtPmRyb3AoKTsKLStWZWM8VD4gJgotK1ZlYzxUPjo6b3BlcmF0b3I9 IChWZWMgJiZvdGhlcikgJiBub2V4Y2VwdAotK3sKLSsgIHRoaXMtPmRyb3AgKCk7Ci0gICB0aGlz LT5yZXByID0gb3RoZXIucmVwcjsKLS0gIG5ldyAoJm90aGVyKSBWZWMoKTsKLSsgIG5ldyAoJm90 aGVyKSBWZWMgKCk7Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLVZlYzxUPiAmVmVjPFQ+OjpvcGVyYXRvcj0oY29uc3QgVmVjICZvdGhlcikgJiB7Ci0t ICBpZiAodGhpcyAhPSAmb3RoZXIpIHsKLS0gICAgdGhpcy0+ZHJvcCgpOwotLSAgICBuZXcgKHRo aXMpIFZlYyhvdGhlcik7Ci0tICB9Ci0rVmVjPFQ+ICYKLStWZWM8VD46Om9wZXJhdG9yPSAoY29u c3QgVmVjICZvdGhlcikgJgotK3sKLSsgIGlmICh0aGlzICE9ICZvdGhlcikKLSsgICAgewotKyAg ICAgIHRoaXMtPmRyb3AgKCk7Ci0rICAgICAgbmV3ICh0aGlzKSBWZWMgKG90aGVyKTsKLSsgICAg fQotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29s IFZlYzxUPjo6ZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gdGhpcy0+c2l6ZSgp ID09IDA7Ci0rYm9vbAotK1ZlYzxUPjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBy ZXR1cm4gdGhpcy0+c2l6ZSAoKSA9PSAwOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1UICpWZWM8VD46OmRhdGEoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY29uc3RfY2FzdDxUICo+ KGNvbnN0X2Nhc3Q8Y29uc3QgVmVjPFQ+ICo+KHRoaXMpLT5kYXRhKCkpOwotK1QgKgotK1ZlYzxU Pjo6ZGF0YSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjb25zdF9jYXN0PFQgKj4gKGNvbnN0 X2Nhc3Q8Y29uc3QgVmVjPFQ+ICo+ICh0aGlzKS0+ZGF0YSAoKSk7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLWNvbnN0IFQgJlZlYzxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBu KSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhc3NlcnQobiA8IHRoaXMtPnNpemUoKSk7Ci0tICBhdXRv IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4odGhpcy0+ZGF0YSgpKTsKLS0g IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+KGRhdGEgKyBuICogc2l6ZV9vZjxU PigpKTsKLStjb25zdCBUICYKLStWZWM8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNv bnN0IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7Ci0rICBhdXRv IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkpOwot KyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4gKGRhdGEgKyBuICogc2l6ZV9v ZjxUPiAoKSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNvbnN0IFQgJlZlYzxU Pjo6YXQoc3RkOjpzaXplX3QgbikgY29uc3QgewotLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7 Ci0tICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6VmVjIGluZGV4IG91dCBvZiBy YW5nZSIpOwotLSAgfQotK2NvbnN0IFQgJgotK1ZlYzxUPjo6YXQgKHN0ZDo6c2l6ZV90IG4pIGNv bnN0Ci0rewotKyAgaWYgKG4gPj0gdGhpcy0+c2l6ZSAoKSkKLSsgICAgewotKyAgICAgIHBhbmlj PHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSsg ICAgfQotICAgcmV0dXJuICgqdGhpcylbbl07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLWNvbnN0IFQgJlZlYzxUPjo6ZnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhc3NlcnQo IXRoaXMtPmVtcHR5KCkpOwotK2NvbnN0IFQgJgotK1ZlYzxUPjo6ZnJvbnQgKCkgY29uc3Qgbm9l eGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0gICByZXR1cm4gKCp0aGlz KVswXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY29uc3QgVCAmVmVjPFQ+Ojpi YWNrKCkgY29uc3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLS0gIHJl dHVybiAoKnRoaXMpW3RoaXMtPnNpemUoKSAtIDFdOwotK2NvbnN0IFQgJgotK1ZlYzxUPjo6YmFj ayAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSsg IHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUgKCkgLSAxXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tVCAmVmVjPFQ+OjpvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0 IHsKLS0gIGFzc2VydChuIDwgdGhpcy0+c2l6ZSgpKTsKLS0gIGF1dG8gZGF0YSA9IHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhciAqPih0aGlzLT5kYXRhKCkpOwotLSAgcmV0dXJuICpyZWludGVycHJldF9j YXN0PFQgKj4oZGF0YSArIG4gKiBzaXplX29mPFQ+KCkpOwotK1QgJgotK1ZlYzxUPjo6b3BlcmF0 b3JbXSAoc3RkOjpzaXplX3Qgbikgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKG4gPCB0aGlzLT5z aXplICgpKTsKLSsgIGF1dG8gZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPiAodGhpcy0+ ZGF0YSAoKSk7Ci0rICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAoZGF0YSArIG4gKiBz aXplX29mPFQ+ICgpKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmVmVjPFQ+ OjphdChzdGQ6OnNpemVfdCBuKSB7Ci0tICBpZiAobiA+PSB0aGlzLT5zaXplKCkpIHsKLS0gICAg cGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7 Ci0tICB9Ci0rVCAmCi0rVmVjPFQ+OjphdCAoc3RkOjpzaXplX3QgbikKLSt7Ci0rICBpZiAobiA+ PSB0aGlzLT5zaXplICgpKQotKyAgICB7Ci0rICAgICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+ ICgicnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOwotKyAgICB9Ci0gICByZXR1cm4gKCp0 aGlzKVtuXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmVmVjPFQ+Ojpmcm9u dCgpIG5vZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Ci0rVCAmCi0rVmVjPFQ+ Ojpmcm9udCAoKSBub2V4Y2VwdAotK3sKLSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSAg IHJldHVybiAoKnRoaXMpWzBdOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZW ZWM8VD46OmJhY2soKSBub2V4Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOwotLSAg cmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSgpIC0gMV07Ci0rVCAmCi0rVmVjPFQ+OjpiYWNrICgp IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotKyAgcmV0dXJuICgq dGhpcylbdGhpcy0+c2l6ZSAoKSAtIDFdOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS12b2lkIFZlYzxUPjo6cmVzZXJ2ZShzdGQ6OnNpemVfdCBuZXdfY2FwKSB7Ci0tICB0aGlzLT5y ZXNlcnZlX3RvdGFsKG5ld19jYXApOwotK3ZvaWQKLStWZWM8VD46OnJlc2VydmUgKHN0ZDo6c2l6 ZV90IG5ld19jYXApCi0rewotKyAgdGhpcy0+cmVzZXJ2ZV90b3RhbCAobmV3X2NhcCk7Ci0gfQot IAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+OjpwdXNoX2JhY2soY29uc3Qg VCAmdmFsdWUpIHsKLS0gIHRoaXMtPmVtcGxhY2VfYmFjayh2YWx1ZSk7Ci0rdm9pZAotK1ZlYzxU Pjo6cHVzaF9iYWNrIChjb25zdCBUICZ2YWx1ZSkKLSt7Ci0rICB0aGlzLT5lbXBsYWNlX2JhY2sg KHZhbHVlKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBWZWM8VD46OnB1 c2hfYmFjayhUICYmdmFsdWUpIHsKLS0gIHRoaXMtPmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUodmFs dWUpKTsKLSt2b2lkCi0rVmVjPFQ+OjpwdXNoX2JhY2sgKFQgJiZ2YWx1ZSkKLSt7Ci0rICB0aGlz LT5lbXBsYWNlX2JhY2sgKHN0ZDo6bW92ZSAodmFsdWUpKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0gdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+Ci0tdm9pZCBWZWM8VD46OmVt cGxhY2VfYmFjayhBcmdzICYmLi4uYXJncykgewotLSAgYXV0byBzaXplID0gdGhpcy0+c2l6ZSgp OwotLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChzaXplICsgMSk7Ci0tICA6Om5ldyAocmVpbnRlcnBy ZXRfY2FzdDxUICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPih0aGlzLT5kYXRhKCkpICsKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAqIHNpemVfb2Y8VD4oKSkpCi0tICAg ICAgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotLSAgdGhpcy0+c2V0X2xlbihzaXpl ICsgMSk7Ci0rdm9pZAotK1ZlYzxUPjo6ZW1wbGFjZV9iYWNrIChBcmdzICYmLi4uYXJncykKLSt7 Ci0rICBhdXRvIHNpemUgPSB0aGlzLT5zaXplICgpOwotKyAgdGhpcy0+cmVzZXJ2ZV90b3RhbCAo c2l6ZSArIDEpOwotKyAgOjpuZXcgKHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAocmVpbnRlcnByZXRf Y2FzdDxjaGFyICo+ICh0aGlzLT5kYXRhICgpKSArIHNpemUgKiBzaXplX29mPFQ+ICgpKSkKLSsg ICAgICBUIChzdGQ6OmZvcndhcmQ8QXJncz4gKGFyZ3MpLi4uKTsKLSsgIHRoaXMtPnNldF9sZW4g KHNpemUgKyAxKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBWZWM8VD46 OmNsZWFyKCkgewotLSAgdGhpcy0+dHJ1bmNhdGUoMCk7Ci0rdm9pZAotK1ZlYzxUPjo6Y2xlYXIg KCkKLSt7Ci0rICB0aGlzLT50cnVuY2F0ZSAoMCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLXR5cGVuYW1lIFZlYzxUPjo6aXRlcmF0b3IgVmVjPFQ+OjpiZWdpbigpIG5vZXhjZXB0 IHsKLS0gIHJldHVybiBTbGljZTxUPih0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSkuYmVnaW4o KTsKLSt0eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yCi0rVmVjPFQ+OjpiZWdpbiAoKSBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBTbGljZTxUPiAodGhpcy0+ZGF0YSAoKSwgdGhpcy0+c2l6ZSAoKSku YmVnaW4gKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFZlYzxU Pjo6aXRlcmF0b3IgVmVjPFQ+OjplbmQoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gU2xpY2U8VD4o dGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmVuZCgpOwotK3R5cGVuYW1lIFZlYzxUPjo6aXRl cmF0b3IKLStWZWM8VD46OmVuZCAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBTbGljZTxUPiAo dGhpcy0+ZGF0YSAoKSwgdGhpcy0+c2l6ZSAoKSkuZW5kICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6YmVn aW4oKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gdGhpcy0+Y2JlZ2luKCk7Ci0rdHlwZW5h bWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgotK1ZlYzxUPjo6YmVnaW4gKCkgY29uc3Qgbm9leGNl cHQKLSt7Ci0rICByZXR1cm4gdGhpcy0+Y2JlZ2luICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6ZW5kKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMtPmNlbmQoKTsKLSt0eXBlbmFtZSBWZWM8 VD46OmNvbnN0X2l0ZXJhdG9yCi0rVmVjPFQ+OjplbmQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gdGhpcy0+Y2VuZCAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t dHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmNiZWdpbigpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiBTbGljZTxjb25zdCBUPih0aGlzLT5kYXRhKCksIHRoaXMtPnNp emUoKSkuYmVnaW4oKTsKLSt0eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCi0rVmVjPFQ+ OjpjYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gU2xpY2U8Y29uc3QgVD4g KHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmJlZ2luICgpOwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6 Y2VuZCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBTbGljZTxjb25zdCBUPih0aGlzLT5k YXRhKCksIHRoaXMtPnNpemUoKSkuZW5kKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVy YXRvcgotK1ZlYzxUPjo6Y2VuZCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBTbGlj ZTxjb25zdCBUPiAodGhpcy0+ZGF0YSAoKSwgdGhpcy0+c2l6ZSAoKSkuZW5kICgpOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFZlYzxUPjo6c3dhcChWZWMgJnJocykgbm9l eGNlcHQgewotK3ZvaWQKLStWZWM8VD46OnN3YXAgKFZlYyAmcmhzKSBub2V4Y2VwdAotK3sKLSAg IHVzaW5nIHN0ZDo6c3dhcDsKLS0gIHN3YXAodGhpcy0+cmVwciwgcmhzLnJlcHIpOwotKyAgc3dh cCAodGhpcy0+cmVwciwgcmhzLnJlcHIpOwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1WZWM8VD46OlZlYyh1bnNhZmVfYml0Y29weV90LCBjb25zdCBWZWMgJmJpdHMpIG5vZXhjZXB0 IDogcmVwcihiaXRzLnJlcHIpIHt9Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVj ICh1bnNhZmVfYml0Y29weV90LCBjb25zdCBWZWMgJmJpdHMpIG5vZXhjZXB0IDogcmVwciAoYml0 cy5yZXByKSB7fQotICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfVkVDCi0gCi0gI2lmbmRlZiBD WFhCUklER0UxX1JVU1RfRVJST1IKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9FUlJPUgotLWNs YXNzIEVycm9yIGZpbmFsIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uIHsKLStjbGFzcyBFcnJvciBm aW5hbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgotK3sKLSBwdWJsaWM6Ci0tICBFcnJvcihjb25z dCBFcnJvciAmKTsKLS0gIEVycm9yKEVycm9yICYmKSBub2V4Y2VwdDsKLS0gIH5FcnJvcigpIG5v ZXhjZXB0IG92ZXJyaWRlOwotKyAgRXJyb3IgKGNvbnN0IEVycm9yICYpOwotKyAgRXJyb3IgKEVy cm9yICYmKSBub2V4Y2VwdDsKLSsgIH5FcnJvciAoKSBub2V4Y2VwdCBvdmVycmlkZTsKLSAKLS0g IEVycm9yICZvcGVyYXRvcj0oY29uc3QgRXJyb3IgJikgJjsKLS0gIEVycm9yICZvcGVyYXRvcj0o RXJyb3IgJiYpICYgbm9leGNlcHQ7Ci0rICBFcnJvciAmb3BlcmF0b3I9IChjb25zdCBFcnJvciAm KSAmOwotKyAgRXJyb3IgJm9wZXJhdG9yPSAoRXJyb3IgJiYpICYgbm9leGNlcHQ7Ci0gCi0tICBj b25zdCBjaGFyICp3aGF0KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGU7Ci0rICBjb25zdCBjaGFy ICp3aGF0ICgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlOwotIAotIHByaXZhdGU6Ci0tICBFcnJv cigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIEVycm9yICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsK LSAgIGZyaWVuZCBpbXBsPEVycm9yPjsKLSAgIGNvbnN0IGNoYXIgKm1zZzsKLSAgIHN0ZDo6c2l6 ZV90IGxlbjsKLUBAIC05MjQsMTg4ICsxMDUwLDIzOSBAQCBjbGFzcyBFcnJvciBmaW5hbCA6IHB1 YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfT1BBUVVF Ci0gI2RlZmluZSBDWFhCUklER0UxX1JVU1RfT1BBUVVFCi0tY2xhc3MgT3BhcXVlIHsKLStjbGFz cyBPcGFxdWUKLSt7Ci0gcHVibGljOgotLSAgT3BhcXVlKCkgPSBkZWxldGU7Ci0tICBPcGFxdWUo Y29uc3QgT3BhcXVlICYpID0gZGVsZXRlOwotLSAgfk9wYXF1ZSgpID0gZGVsZXRlOwotKyAgT3Bh cXVlICgpID0gZGVsZXRlOwotKyAgT3BhcXVlIChjb25zdCBPcGFxdWUgJikgPSBkZWxldGU7Ci0r ICB+T3BhcXVlICgpID0gZGVsZXRlOwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9P UEFRVUUKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfSVNfQ09NUExFVEUKLSAjZGVmaW5lIENYWEJS SURHRTFfSVNfQ09NUExFVEUKLS1uYW1lc3BhY2UgZGV0YWlsIHsKLS1uYW1lc3BhY2UgewotLXRl bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6c2l6ZV90PgotLXN0cnVjdCBpc19j b21wbGV0ZSA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1z dHJ1Y3QgaXNfY29tcGxldGU8VCwgZGVjbHR5cGUoc2l6ZW9mKFQpKT4gOiBzdGQ6OnRydWVfdHlw ZSB7fTsKLStuYW1lc3BhY2UgZGV0YWlsCi0rewotK25hbWVzcGFjZQotK3sKLSt0ZW1wbGF0ZSA8 dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OnNpemVfdD4gc3RydWN0IGlzX2NvbXBsZXRlIDog c3RkOjpmYWxzZV90eXBlCi0rewotK307Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBp c19jb21wbGV0ZTxULCBkZWNsdHlwZSAoc2l6ZW9mIChUKSk+IDogc3RkOjp0cnVlX3R5cGUKLSt7 Ci0rfTsKLSB9IC8vIG5hbWVzcGFjZQotIH0gLy8gbmFtZXNwYWNlIGRldGFpbAotICNlbmRpZiAv LyBDWFhCUklER0UxX0lTX0NPTVBMRVRFCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0xBWU9VVAot ICNkZWZpbmUgQ1hYQlJJREdFMV9MQVlPVVQKLS1jbGFzcyBsYXlvdXQgewotLSAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0tICBmcmllbmQgc3RkOjpzaXplX3Qgc2l6ZV9vZigpOwotK2NsYXNzIGxh eW91dAotK3sKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBmcmllbmQgc3RkOjpzaXplX3Qgc2l6 ZV9vZiAoKTsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBmcmllbmQgc3RkOjpzaXplX3QgYWxp Z25fb2YgKCk7Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIGZyaWVuZCBzdGQ6OnNpemVf dCBhbGlnbl9vZigpOwotLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgZG9f c2l6ZV9vZigpIHsKLS0gICAgcmV0dXJuIFQ6OmxheW91dDo6c2l6ZSgpOwotKyAgc3RhdGljIHR5 cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwg c3RkOjpzaXplX3Q+Ojp0eXBlCi0rICBkb19zaXplX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBU OjpsYXlvdXQ6OnNpemUgKCk7Ci0gICB9Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0 YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46 OnZhbHVlLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6 dHlwZQotLSAgZG9fc2l6ZV9vZigpIHsKLS0gICAgcmV0dXJuIHNpemVvZihUKTsKLSsgIHN0YXRp YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZh bHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIGRvX3NpemVfb2YgKCkKLSsgIHsKLSsgICAgcmV0 dXJuIHNpemVvZiAoVCk7Ci0gICB9Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0YXRp YwotLSAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46 OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLS0gICAgICBzaXplX29mKCkgewotLSAgICByZXR1 cm4gZG9fc2l6ZV9vZjxUPigpOwotKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRl dGFpbDo6aXNfY29tcGxldGU8VD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIHNpemVf b2YgKCkKLSsgIHsKLSsgICAgcmV0dXJuIGRvX3NpemVfb2Y8VD4gKCk7Ci0gICB9Ci0gICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6 OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBlCi0tICBkb19hbGlnbl9vZigpIHsKLS0gICAgcmV0 dXJuIFQ6OmxheW91dDo6YWxpZ24oKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p ZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQot KyAgZG9fYWxpZ25fb2YgKCkKLSsgIHsKLSsgICAgcmV0dXJuIFQ6OmxheW91dDo6YWxpZ24gKCk7 Ci0gICB9Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6 OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgZG9fYWxpZ25f b2YoKSB7Ci0tICAgIHJldHVybiBhbGlnbm9mKFQpOwotKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6 ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90 Pjo6dHlwZQotKyAgZG9fYWxpZ25fb2YgKCkKLSsgIHsKLSsgICAgcmV0dXJuIGFsaWdub2YgKFQp OwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMKLS0gICAgICB0eXBl bmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpz aXplX3Q+Ojp0eXBlCi0tICAgICAgYWxpZ25fb2YoKSB7Ci0tICAgIHJldHVybiBkb19hbGlnbl9v ZjxUPigpOwotKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29t cGxldGU8VD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIGFsaWduX29mICgpCi0rICB7 Ci0rICAgIHJldHVybiBkb19hbGlnbl9vZjxUPiAoKTsKLSAgIH0KLSB9OwotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXN0ZDo6c2l6ZV90IHNpemVfb2YoKSB7Ci0tICByZXR1cm4gbGF5b3V0 OjpzaXplX29mPFQ+KCk7Ci0rc3RkOjpzaXplX3QKLStzaXplX29mICgpCi0rewotKyAgcmV0dXJu IGxheW91dDo6c2l6ZV9vZjxUPiAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t c3RkOjpzaXplX3QgYWxpZ25fb2YoKSB7Ci0tICByZXR1cm4gbGF5b3V0OjphbGlnbl9vZjxUPigp OwotK3N0ZDo6c2l6ZV90Ci0rYWxpZ25fb2YgKCkKLSt7Ci0rICByZXR1cm4gbGF5b3V0OjphbGln bl9vZjxUPiAoKTsKLSB9Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfTEFZT1VUCi0gCi0tY2xhc3Mg U3RyOjp1bmluaXQge307Ci0taW5saW5lIFN0cjo6U3RyKHVuaW5pdCkgbm9leGNlcHQge30KLStj bGFzcyBTdHI6OnVuaW5pdAotK3sKLSt9OwotK2lubGluZSBTdHI6OlN0ciAodW5pbml0KSBub2V4 Y2VwdCB7fQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFNsaWNlPFQ+Ojp1bmlu aXQge307Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0taW5saW5lIFNsaWNlPFQ+OjpTbGljZSh1 bmluaXQpIG5vZXhjZXB0IHt9Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFNsaWNlPFQ+ Ojp1bmluaXQKLSt7Ci0rfTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFNsaWNlPFQ+ OjpTbGljZSAodW5pbml0KSBub2V4Y2VwdCB7fQotIAotLW5hbWVzcGFjZSByZXByIHsKLStuYW1l c3BhY2UgcmVwcgotK3sKLSB1c2luZyBGYXQgPSA6OnN0ZDo6YXJyYXk8OjpzdGQ6OnVpbnRwdHJf dCwgMj47Ci0gCi0tc3RydWN0IFB0ckxlbiBmaW5hbCB7Ci0rc3RydWN0IFB0ckxlbiBmaW5hbAot K3sKLSAgIHZvaWQgKnB0cjsKLSAgIDo6c3RkOjpzaXplX3QgbGVuOwotIH07Ci0gfSAvLyBuYW1l c3BhY2UgcmVwcgotIAotLW5hbWVzcGFjZSBkZXRhaWwgewotLXRlbXBsYXRlIDx0eXBlbmFtZSBU LCB0eXBlbmFtZSA9IHZvaWQgKj4KLS1zdHJ1Y3Qgb3BlcmF0b3JfbmV3IHsKLS0gIHZvaWQgKm9w ZXJhdG9yKCkoOjpzdGQ6OnNpemVfdCBzeikgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoc3opOyB9 Ci0rbmFtZXNwYWNlIGRldGFpbAotK3sKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg PSB2b2lkICo+IHN0cnVjdCBvcGVyYXRvcl9uZXcKLSt7Ci0rICB2b2lkICoKLSsgIG9wZXJhdG9y KCkgKDo6c3RkOjpzaXplX3Qgc3opCi0rICB7Ci0rICAgIHJldHVybiA6Om9wZXJhdG9yIG5ldyAo c3opOwotKyAgfQotIH07Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tc3RydWN0IG9wZXJh dG9yX25ldzxULCBkZWNsdHlwZShUOjpvcGVyYXRvciBuZXcoc2l6ZW9mKFQpKSk+IHsKLS0gIHZv aWQgKm9wZXJhdG9yKCkoOjpzdGQ6OnNpemVfdCBzeikgeyByZXR1cm4gVDo6b3BlcmF0b3IgbmV3 KHN6KTsgfQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qgb3BlcmF0b3JfbmV3PFQsIGRl Y2x0eXBlIChUOjpvcGVyYXRvciBuZXcgKHNpemVvZiAoVCkpKT4KLSt7Ci0rICB2b2lkICoKLSsg IG9wZXJhdG9yKCkgKDo6c3RkOjpzaXplX3Qgc3opCi0rICB7Ci0rICAgIHJldHVybiBUOjpvcGVy YXRvciBuZXcgKHN6KTsKLSsgIH0KLSB9OwotIAotLWNsYXNzIEZhaWwgZmluYWwgewotK2NsYXNz IEZhaWwgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiAmdGhyb3ckOwotKwotIHB1 YmxpYzoKLS0gIEZhaWwoOjpydXN0OjpyZXByOjpQdHJMZW4gJnRocm93JCkgbm9leGNlcHQgOiB0 aHJvdyQodGhyb3ckKSB7fQotLSAgdm9pZCBvcGVyYXRvcigpKGNoYXIgY29uc3QgKikgbm9leGNl cHQ7Ci0tICB2b2lkIG9wZXJhdG9yKCkoc3RkOjpzdHJpbmcgY29uc3QgJikgbm9leGNlcHQ7Ci0r ICBGYWlsICg6OnJ1c3Q6OnJlcHI6OlB0ckxlbiAmdGhyb3ckKSBub2V4Y2VwdCA6IHRocm93JCAo dGhyb3ckKSB7fQotKyAgdm9pZCBvcGVyYXRvcigpIChjaGFyIGNvbnN0ICopIG5vZXhjZXB0Owot KyAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnN0cmluZyBjb25zdCAmKSBub2V4Y2VwdDsKLSB9Owot IH0gLy8gbmFtZXNwYWNlIGRldGFpbAotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXVuaW9u IE1hbnVhbGx5RHJvcCB7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVuaW9uIE1hbnVhbGx5RHJv cAotK3sKLSAgIFQgdmFsdWU7Ci0tICBNYW51YWxseURyb3AoVCAmJnZhbHVlKSA6IHZhbHVlKDo6 c3RkOjptb3ZlKHZhbHVlKSkge30KLS0gIH5NYW51YWxseURyb3AoKSB7fQotKyAgTWFudWFsbHlE cm9wIChUICYmdmFsdWUpIDogdmFsdWUgKDo6c3RkOjptb3ZlICh2YWx1ZSkpIHt9Ci0rICB+TWFu dWFsbHlEcm9wICgpIHt9Ci0gfTsKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS11bmlvbiBN YXliZVVuaW5pdCB7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVuaW9uIE1heWJlVW5pbml0Ci0r ewotICAgVCB2YWx1ZTsKLS0gIHZvaWQgKm9wZXJhdG9yIG5ldyg6OnN0ZDo6c2l6ZV90IHN6KSB7 IHJldHVybiBkZXRhaWw6Om9wZXJhdG9yX25ldzxUPnt9KHN6KTsgfQotLSAgTWF5YmVVbmluaXQo KSB7fQotLSAgfk1heWJlVW5pbml0KCkge30KLSsgIHZvaWQgKgotKyAgb3BlcmF0b3IgbmV3ICg6 OnN0ZDo6c2l6ZV90IHN6KQotKyAgewotKyAgICByZXR1cm4gZGV0YWlsOjpvcGVyYXRvcl9uZXc8 VD57fShzeik7Ci0rICB9Ci0rICBNYXliZVVuaW5pdCAoKSB7fQotKyAgfk1heWJlVW5pbml0ICgp IHt9Ci0gfTsKLSAKLS1uYW1lc3BhY2UgewotLXRlbXBsYXRlIDw+Ci0tY2xhc3MgaW1wbDxTdHI+ IGZpbmFsIHsKLStuYW1lc3BhY2UKLSt7Ci0rdGVtcGxhdGUgPD4gY2xhc3MgaW1wbDxTdHI+IGZp bmFsCi0rewotIHB1YmxpYzoKLS0gIHN0YXRpYyBTdHIgbmV3X3VuY2hlY2tlZChyZXByOjpGYXQg cmVwcikgbm9leGNlcHQgewotKyAgc3RhdGljIFN0cgotKyAgbmV3X3VuY2hlY2tlZCAocmVwcjo6 RmF0IHJlcHIpIG5vZXhjZXB0Ci0rICB7Ci0gICAgIFN0ciBzdHIgPSBTdHI6OnVuaW5pdHt9Owot ICAgICBzdHIucmVwciA9IHJlcHI7Ci0gICAgIHJldHVybiBzdHI7Ci0gICB9Ci0gfTsKLSAKLS10 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBpbXBsPFNsaWNlPFQ+PiBmaW5hbCB7Ci0rdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGltcGw8U2xpY2U8VD4+IGZpbmFsCi0rewotIHB1Ymxp YzoKLS0gIHN0YXRpYyBTbGljZTxUPiBzbGljZShyZXByOjpGYXQgcmVwcikgbm9leGNlcHQgewot KyAgc3RhdGljIFNsaWNlPFQ+Ci0rICBzbGljZSAocmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0Ci0r ICB7Ci0gICAgIFNsaWNlPFQ+IHNsaWNlID0gdHlwZW5hbWUgU2xpY2U8VD46OnVuaW5pdHt9Owot ICAgICBzbGljZS5yZXByID0gcmVwcjsKLSAgICAgcmV0dXJuIHNsaWNlOwotICAgfQotIH07Ci0g Ci0tdGVtcGxhdGUgPD4KLS1jbGFzcyBpbXBsPEVycm9yPiBmaW5hbCB7Ci0rdGVtcGxhdGUgPD4g Y2xhc3MgaW1wbDxFcnJvcj4gZmluYWwKLSt7Ci0gcHVibGljOgotLSAgc3RhdGljIEVycm9yIGVy cm9yKHJlcHI6OlB0ckxlbiByZXByKSBub2V4Y2VwdCB7Ci0rICBzdGF0aWMgRXJyb3IKLSsgIGVy cm9yIChyZXByOjpQdHJMZW4gcmVwcikgbm9leGNlcHQKLSsgIHsKLSAgICAgRXJyb3IgZXJyb3I7 Ci0tICAgIGVycm9yLm1zZyA9IHN0YXRpY19jYXN0PGNoYXIgY29uc3QgKj4ocmVwci5wdHIpOwot KyAgICBlcnJvci5tc2cgPSBzdGF0aWNfY2FzdDxjaGFyIGNvbnN0ICo+IChyZXByLnB0cik7Ci0g ICAgIGVycm9yLmxlbiA9IHJlcHIubGVuOwotICAgICByZXR1cm4gZXJyb3I7Ci0gICB9Ci0gfTsK LSAKLS10ZW1wbGF0ZSA8Ym9vbD4gc3RydWN0IGRlbGV0ZXJfaWYgewotLSAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IHZvaWQgb3BlcmF0b3IoKShUICopIHt9Ci0rdGVtcGxhdGUgPGJvb2w+IHN0cnVj dCBkZWxldGVyX2lmCi0rewotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rICB2b2lkCi0rICBv cGVyYXRvcigpIChUICopCi0rICB7Ci0rICB9Ci0gfTsKLS10ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVs ZXRlcl9pZjx0cnVlPiB7Ci0tICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBvcGVyYXRvcigp KFQgKnB0cikgeyBwdHItPn5UKCk7IH0KLSt0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVsZXRlcl9pZjx0 cnVlPgotK3sKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZAotKyAgb3BlcmF0b3Io KSAoVCAqcHRyKQotKyAgewotKyAgICBwdHItPn5UICgpOwotKyAgfQotIH07Ci0gfSAvLyBuYW1l c3BhY2UKLSB9IC8vIG5hbWVzcGFjZSBjeHhicmlkZ2UxCi0gCi0tbmFtZXNwYWNlIGJlaGF2aW9y IHsKLS1jbGFzcyBtaXNzaW5nIHt9OwotLW1pc3NpbmcgdHJ5Y2F0Y2goLi4uKTsKLStuYW1lc3Bh Y2UgYmVoYXZpb3IKLSt7Ci0rY2xhc3MgbWlzc2luZwotK3sKLSt9OwotK21pc3NpbmcgdHJ5Y2F0 Y2ggKC4uLik7Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFRyeSwgdHlwZW5hbWUgRmFpbD4KLSBz dGF0aWMgdHlwZW5hbWUgOjpzdGQ6OmVuYWJsZV9pZjw6OnN0ZDo6aXNfc2FtZTwKLS0gICAgZGVj bHR5cGUodHJ5Y2F0Y2goOjpzdGQ6OmRlY2x2YWw8VHJ5PigpLCA6OnN0ZDo6ZGVjbHZhbDxGYWls PigpKSksCi0tICAgIG1pc3Npbmc+Ojp2YWx1ZT46OnR5cGUKLS10cnljYXRjaChUcnkgJiZmdW5j LCBGYWlsICYmZmFpbCkgbm9leGNlcHQgdHJ5IHsKLS0gIGZ1bmMoKTsKLS19IGNhdGNoICg6OnN0 ZDo6ZXhjZXB0aW9uIGNvbnN0ICZlKSB7Ci0tICBmYWlsKGUud2hhdCgpKTsKLS19Ci0rICAgIGRl Y2x0eXBlICh0cnljYXRjaCAoOjpzdGQ6OmRlY2x2YWw8VHJ5PiAoKSwgOjpzdGQ6OmRlY2x2YWw8 RmFpbD4gKCkpKSwgbWlzc2luZz46OnZhbHVlPjo6dHlwZQotK3RyeWNhdGNoIChUcnkgJiZmdW5j LCBGYWlsICYmZmFpbCkgbm9leGNlcHQKLSt0cnkKLSsgIHsKLSsgICAgZnVuYyAoKTsKLSsgIH0K LStjYXRjaCAoOjpzdGQ6OmV4Y2VwdGlvbiBjb25zdCAmZSkKLSsgIHsKLSsgICAgZmFpbCAoZS53 aGF0ICgpKTsKLSsgIH0KLSB9IC8vIG5hbWVzcGFjZSBiZWhhdmlvcgotIH0gLy8gbmFtZXNwYWNl IHJ1c3QKLSAKLUBAIC0xMTE1LDUxICsxMjkyLDUzIEBAIHRyeWNhdGNoKFRyeSAmJmZ1bmMsIEZh aWwgJiZmYWlsKSBub2V4Y2VwdCB0cnkgewotICNkZWZpbmUgQ1hYX0RFRkFVTFRfVkFMVUUodmFs dWUpCi0gI2VuZGlmCi0gCi0tbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7Ci0tICBzdHJ1Y3QgU3Ry aW5nTWFwcGluZzsKLS0gIGVudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhf dDsKLS0gIGVudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsK LS0gIHN0cnVjdCBCdWJibGV3cmFwOwotLSAgc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGU7Ci0t ICBzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmY7Ci0tICBzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVy SW5mbzsKLS0gIGVudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0 cnVjdCBUZW1wRXRjR3VhcmQ7Ci0tICBzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXA7Ci0tICBz dHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhOwotLSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1l bnRTb3VyY2U7Ci0tICBlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50 OF90OwotLSAgc3RydWN0IFBhcnNlZFJldmlzaW9uOwotLSAgc3RydWN0IFJwbUltcG9ydGVyRmxh Z3M7Ci0tICBzdHJ1Y3QgUnBtSW1wb3J0ZXI7Ci0tICBzdHJ1Y3QgSGlzdG9yeUVudHJ5OwotLSAg c3RydWN0IEhpc3RvcnlDdHg7Ci0tICBzdHJ1Y3QgVG9raW9IYW5kbGU7Ci0tICBzdHJ1Y3QgVG9r aW9FbnRlckd1YXJkOwotLSAgZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6 dWludDhfdDsKLS0gIGVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6 OnVpbnQ4X3Q7Ci0tICBzdHJ1Y3QgUmVmc3BlYzsKLS0gIGVudW0gY2xhc3MgT3ZlcnJpZGVSZXBs YWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2Vt ZW50OwotLSAgZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90OwotLSAgc3Ry dWN0IFRyZWVmaWxlOwotLSAgc3RydWN0IFJlcG9QYWNrYWdlOwotLSAgc3RydWN0IExpdmVBcHBs eVN0YXRlOwotLSAgc3RydWN0IFBhc3N3ZERCOwotLSAgc3RydWN0IFBhc3N3ZEVudHJpZXM7Ci0t ICBzdHJ1Y3QgRXh0ZW5zaW9uczsKLS0gIHN0cnVjdCBMb2NrZWRQYWNrYWdlOwotLSAgc3RydWN0 IExvY2tmaWxlQ29uZmlnOwotLSAgdXNpbmcgQ3h4R09iamVjdEFycmF5ID0gOjpycG1vc3RyZWVj eHg6OkN4eEdPYmplY3RBcnJheTsKLS0gIHVzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9z dHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjsKLS0gIHVzaW5nIFJQTURpZmYgPSA6OnJwbW9zdHJl ZWN4eDo6UlBNRGlmZjsKLS0gIHVzaW5nIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBt b3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ7Ci0tICB1c2luZyBQcm9ncmVzcyA9 IDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzczsKLS0gIHVzaW5nIFJwbVRzID0gOjpycG1vc3RyZWVj eHg6OlJwbVRzOwotLSAgdXNpbmcgUGFja2FnZU1ldGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGE7Ci0tfQotLQotLW5hbWVzcGFjZSBycG1vc3RyZWVjeHggewotK25hbWVzcGFjZSBycG1v c3RyZWVjeHgKLSt7Ci0rc3RydWN0IFN0cmluZ01hcHBpbmc7Ci0rZW51bSBjbGFzcyBTeXN0ZW1I b3N0VHlwZSA6IDo6c3RkOjp1aW50OF90OwotK2VudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxp dHkgOiA6OnN0ZDo6dWludDhfdDsKLStzdHJ1Y3QgQnViYmxld3JhcDsKLStzdHJ1Y3QgQ29udGFp bmVySW1hZ2VTdGF0ZTsKLStzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmY7Ci0rc3RydWN0IFBy dW5lZENvbnRhaW5lckluZm87Ci0rZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50 OF90OwotK3N0cnVjdCBUZW1wRXRjR3VhcmQ7Ci0rc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVw OwotK3N0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGE7Ci0rc3RydWN0IE92ZXJyaWRlUmVwbGFj ZW1lbnRTb3VyY2U7Ci0rZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWlu dDhfdDsKLStzdHJ1Y3QgUGFyc2VkUmV2aXNpb247Ci0rc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7 Ci0rc3RydWN0IFJwbUltcG9ydGVyOwotK3N0cnVjdCBIaXN0b3J5RW50cnk7Ci0rc3RydWN0IEhp c3RvcnlDdHg7Ci0rc3RydWN0IFRva2lvSGFuZGxlOwotK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQ7 Ci0rZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKLStlbnVt IGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OwotK3N0cnVj dCBSZWZzcGVjOwotK2VudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6 dWludDhfdDsKLStzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudDsKLStlbnVtIGNsYXNzIE9wdFVz ckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0rc3RydWN0IFRyZWVmaWxlOwotK3N0cnVjdCBSZXBv UGFja2FnZTsKLStzdHJ1Y3QgTGl2ZUFwcGx5U3RhdGU7Ci0rc3RydWN0IFBhc3N3ZERCOwotK3N0 cnVjdCBQYXNzd2RFbnRyaWVzOwotK3N0cnVjdCBFeHRlbnNpb25zOwotK3N0cnVjdCBMb2NrZWRQ YWNrYWdlOwotK3N0cnVjdCBMb2NrZmlsZUNvbmZpZzsKLSt1c2luZyBDeHhHT2JqZWN0QXJyYXkg PSA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OwotK3VzaW5nIENsaWVudENvbm5lY3Rp b24gPSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjsKLSt1c2luZyBSUE1EaWZmID0g OjpycG1vc3RyZWVjeHg6OlJQTURpZmY7Ci0rdXNpbmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0 ID0gOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdDsKLSt1c2luZyBQcm9n cmVzcyA9IDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzczsKLSt1c2luZyBScG1UcyA9IDo6cnBtb3N0 cmVlY3h4OjpScG1UczsKLSt1c2luZyBQYWNrYWdlTWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YTsKLSt9Ci0rCi0rbmFtZXNwYWNlIHJwbW9zdHJlZWN4eAotK3sKLSAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nCi0gI2RlZmluZSBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZwotIC8vIEN1cnJlbnRseSBj eHgtcnMgZG9lc24ndCBzdXBwb3J0IG1hcHBpbmdzOyBsaWtlIHByb2JhYmx5IG1vc3QgcHJvamVj dHMsCi1AQCAtMTE2Nyw3ICsxMzQ2LDggQEAgbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7Ci0gLy8g b3VyIGRhdGEgc2l6ZXMgYXJlbid0IGxhcmdlLCB3ZSBzZXJpYWxpemUgdGhpcyBhcyBhIHZlY3Rv ciBvZiBzdHJpbmdzIHBhaXJzLgotIC8vIEluIHRoZSBmdXR1cmUgaXQncyBhbHNvIGxpa2VseSB0 aGF0IGN4eC1ycyB3aWxsIHN1cHBvcnQgYSBDKysgc3RyaW5nX3ZpZXcKLSAvLyBzbyB3ZSBjb3Vs ZCBhdm9pZCBkdXBsaWNhdGluZyBpbiB0aGF0IGRpcmVjdGlvbi4KLS1zdHJ1Y3QgU3RyaW5nTWFw cGluZyBmaW5hbCB7Ci0rc3RydWN0IFN0cmluZ01hcHBpbmcgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6 OlN0cmluZyBrOwotICAgOjpydXN0OjpTdHJpbmcgdjsKLSAKLUBAIC0xMTc4LDcgKzEzNTgsOCBA QCBzdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5hbCB7Ci0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1f cnBtb3N0cmVlY3h4JFN5c3RlbUhvc3RUeXBlCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBt b3N0cmVlY3h4JFN5c3RlbUhvc3RUeXBlCi0gLy8gQ2xhc3NpZnkgdGhlIHJ1bm5pbmcgc3lzdGVt LgotLWVudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBj bGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgT3N0cmVlQ29udGFp bmVyID0gMCwKLSAgIE9zdHJlZUhvc3QgPSAxLAotICAgVW5rbm93biA9IDIsCi1AQCAtMTE4Nyw3 ICsxMzY4LDggQEAgZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsK LSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFi aWxpdHkKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11 dGFiaWxpdHkKLS1lbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4 X3QgewotK2VudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdAot K3sKLSAgIEltbXV0YWJsZSA9IDAsCi0gICBSb0ZpbGVzID0gMSwKLSAgIE11dGF0ZUZyZWVseSA9 IDIsCi1AQCAtMTE5Niw0OSArMTM3OCw1MiBAQCBlbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmls aXR5IDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBt b3N0cmVlY3h4JEJ1YmJsZXdyYXAKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRCdWJibGV3cmFwCi0tc3RydWN0IEJ1YmJsZXdyYXAgZmluYWwgOiBwdWJsaWMgOjpydXN0 OjpPcGFxdWUgewotLSAgOjpzdGQ6OmludDMyX3QgZ2V0X3Jvb3Rmc19mZCgpIGNvbnN0IG5vZXhj ZXB0OwotLSAgdm9pZCBhcHBlbmRfYndyYXBfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7 Ci0tICB2b2lkIGFwcGVuZF9jaGlsZF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLS0g IHZvaWQgc2V0ZW52KDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0OwotLSAg dm9pZCB0YWtlX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCwgOjpzdGQ6OmludDMyX3QgdGFy Z2V0X2ZkKSBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0X2luaGVyaXRfc3RkaW4oKSBub2V4Y2VwdDsK LS0gIHZvaWQgdGFrZV9zdGRpbl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0 OwotLSAgdm9pZCB0YWtlX3N0ZG91dF9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhj ZXB0OwotLSAgdm9pZCB0YWtlX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5v ZXhjZXB0OwotLSAgdm9pZCB0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90 IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0tICB2b2lkIGJpbmRfcmVhZCg6OnJ1c3Q6OlN0ciBzcmMs IDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotLSAgdm9pZCBiaW5kX3JlYWR3cml0ZSg6OnJ1 c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotLSAgdm9pZCBzZXR1cF9j b21wYXRfdmFyKCk7Ci0tICB2b2lkIHJ1big6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNv bnN0ICZjYW5jZWxsYWJsZSk7Ci0tICB+QnViYmxld3JhcCgpID0gZGVsZXRlOwotK3N0cnVjdCBC dWJibGV3cmFwIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpzdGQ6Omlu dDMyX3QgZ2V0X3Jvb3Rmc19mZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgYXBwZW5kX2J3 cmFwX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSsgIHZvaWQgYXBwZW5kX2NoaWxk X2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0ZW52ICg6OnJ1c3Q6 OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9mZCAoOjpzdGQ6 OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0Owot KyAgdm9pZCBzZXRfaW5oZXJpdF9zdGRpbiAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9zdGRp bl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9z dGRvdXRfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0rICB2b2lkIHRh a2Vfc3RkZXJyX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9p ZCB0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5v ZXhjZXB0OwotKyAgdm9pZCBiaW5kX3JlYWQgKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIg ZGVzdCkgbm9leGNlcHQ7Ci0rICB2b2lkIGJpbmRfcmVhZHdyaXRlICg6OnJ1c3Q6OlN0ciBzcmMs IDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotKyAgdm9pZCBzZXR1cF9jb21wYXRfdmFyICgp OwotKyAgdm9pZCBydW4gKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNl bGxhYmxlKTsKLSsgIH5CdWJibGV3cmFwICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBm cmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6 c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBh bGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBh bGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRFeHBvcnRlZE1hbmlmZXN0RGlmZgotICNkZWZpbmUgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JEV4cG9ydGVkTWFuaWZlc3REaWZmCi0tc3RydWN0IEV4cG9ydGVk TWFuaWZlc3REaWZmIGZpbmFsIHsKLStzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwK LSt7Ci0gICAvLyBDaGVjayBpZiB0aGUgc3RydWN0IGlzIGluaXRpYWxpemVkCi0tICBib29sIGlu aXRpYWxpemVkIENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKLSsgIGJvb2wgaW5pdGlhbGl6ZWQg Q1hYX0RFRkFVTFRfVkFMVUUgKGZhbHNlKTsKLSAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFj a2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9E RUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZB TFVFICgwKTsKLSAgIC8vIFRoZSBzaXplIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMg aW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RF RkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgdG90YWxfc2l6ZSBDWFhfREVGQVVM VF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMg aW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVG QVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRf VkFMVUUgKDApOwotICAgLy8gVGhlIHNpemUgb2YgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFj a2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6 ZSBDWFhfREVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUg Q1hYX0RFRkFVTFRfVkFMVUUgKDApOwotICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBhZGRlZCBw YWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3Qgbl9hZGRlZCBD WFhfREVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBuX2FkZGVkIENYWF9ERUZB VUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSBzaXplIG9mIHRvdGFsIG51bWJlciBvZiBhZGRlZCBw YWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6 ZSBDWFhfREVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBhZGRlZF9zaXplIENY WF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSB2ZXJzaW9uIG9mIHRoZSBuZXh0IHVwZ3Jh ZGUKLSAgIDo6cnVzdDo6U3RyaW5nIHZlcnNpb247Ci0gCi1AQCAtMTI0OCwxMCArMTQzMywxMSBA QCBzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwgewotIAotICNpZm5kZWYgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUKLSAjZGVmaW5lIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlCi0tLy8gYENv bnRhaW5lckltYWdlU3RhdGVgIGlzIGN1cnJlbnRseSBpZGVudGljYWwgdG8gb3N0cmVlLXJzLWV4 dCdzIGBMYXllcmVkSW1hZ2VTdGF0ZWAgc3RydWN0LCBiZWNhdXNlCi0tLy8gY3h4LnJzIGN1cnJl bnRseSByZXF1aXJlcyB0eXBlcyB1c2VkIGFzIGV4dGVybiBSdXN0IHR5cGVzIHRvIGJlIGRlZmlu ZWQgYnkgdGhlIHNhbWUgY3JhdGUKLSsvLyBgQ29udGFpbmVySW1hZ2VTdGF0ZWAgaXMgY3VycmVu dGx5IGlkZW50aWNhbCB0byBvc3RyZWUtcnMtZXh0J3MgYExheWVyZWRJbWFnZVN0YXRlYCBzdHJ1 Y3QsCi0rLy8gYmVjYXVzZSBjeHgucnMgY3VycmVudGx5IHJlcXVpcmVzIHR5cGVzIHVzZWQgYXMg ZXh0ZXJuIFJ1c3QgdHlwZXMgdG8gYmUgZGVmaW5lZCBieSB0aGUgc2FtZSBjcmF0ZQotIC8vIHRo YXQgY29udGFpbnMgdGhlIGJyaWRnZSB1c2luZyB0aGVtLCBzbyB3ZSByZWRlZmluZSBhbiBgQ29u dGFpbmVySW1wb3J0YCBzdHJ1Y3QgaGVyZS4KLS1zdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBm aW5hbCB7Ci0rc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGUgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6 OlN0cmluZyBiYXNlX2NvbW1pdDsKLSAgIDo6cnVzdDo6U3RyaW5nIG1lcmdlX2NvbW1pdDsKLSAg IDo6cnVzdDo6U3RyaW5nIGltYWdlX2RpZ2VzdDsKLUBAIC0xMjY1LDE5ICsxNDUxLDIxIEBAIHN0 cnVjdCBDb250YWluZXJJbWFnZVN0YXRlIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRQcnVuZWRDb250YWluZXJJbmZvCi0gI2RlZmluZSBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5mbwotLXN0cnVjdCBQcnVu ZWRDb250YWluZXJJbmZvIGZpbmFsIHsKLS0gIDo6c3RkOjp1aW50MzJfdCBpbWFnZXMgQ1hYX0RF RkFVTFRfVkFMVUUoMCk7Ci0tICA6OnN0ZDo6dWludDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZB TFVFKDApOwotK3N0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvIGZpbmFsCi0rewotKyAgOjpzdGQ6 OnVpbnQzMl90IGltYWdlcyBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0rICA6OnN0ZDo6dWludDMy X3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShQ cnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVy YXRvciE9KFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBi b29sIG9wZXJhdG9yPT0gKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIG9wZXJhdG9yIT0gKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29u c3Qgbm9leGNlcHQ7Ci0gICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsK LSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29u dGFpbmVySW5mbwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZz cGVjVHlwZQotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlw ZQotLWVudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBjbGFz cyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgT3N0cmVlID0gMCwKLSAgIENo ZWNrc3VtID0gMSwKLSAgIENvbnRhaW5lciA9IDIsCi1AQCAtMTI4Niw0MCArMTQ3NCw0NSBAQCBl bnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZAotICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZAotLXN0cnVjdCBUZW1wRXRjR3Vh cmQgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgdm9pZCB1bmRvKCkgY29uc3Q7 Ci0tICB+VGVtcEV0Y0d1YXJkKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRlbXBFdGNHdWFyZCBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIHZvaWQgdW5kbyAoKSBjb25zdDsKLSsg IH5UZW1wRXRjR3VhcmQgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1 c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9l eGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5v ZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkVGVtcEV0Y0d1YXJkCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3Jw bW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcAotLXN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0 UHJlcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICB2b2lkIHVuZG8oKTsKLS0g IH5GaWxlc3lzdGVtU2NyaXB0UHJlcCgpID0gZGVsZXRlOwotK3N0cnVjdCBGaWxlc3lzdGVtU2Ny aXB0UHJlcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIHZvaWQgdW5kbyAo KTsKLSsgIH5GaWxlc3lzdGVtU2NyaXB0UHJlcCAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgot ICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGlj IDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcAotIAotICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQotICNkZWZp bmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQot LXN0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGEgZmluYWwgewotLSAgYm9vbCBpc19sYXllcmVk IENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKLStzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRh IGZpbmFsCi0rewotKyAgYm9vbCBpc19sYXllcmVkIENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7 Ci0gICA6OnJ1c3Q6OlN0cmluZyBiYXNlX2NvbW1pdDsKLS0gIDo6c3RkOjp1aW50MzJfdCBjbGll bnRsYXllcl92ZXJzaW9uIENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQzMl90 IGNsaWVudGxheWVyX3ZlcnNpb24gQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotIAotICAgdXNpbmcg SXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLUBAIC0xMzI3LDcgKzE1MjAs OCBAQCBzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50U291cmNlCi0g I2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVu dFNvdXJjZQotLXN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIGZpbmFsIHsKLStzdHJ1 Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbAotK3sKLSAgIDo6cnBtb3N0cmVlY3h4 OjpPdmVycmlkZVJlcGxhY2VtZW50VHlwZSBraW5kOwotICAgOjpydXN0OjpTdHJpbmcgbmFtZTsK LSAKLUBAIC0xMzM3LDcgKzE1MzEsOCBAQCBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJj ZSBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNl ZFJldmlzaW9uS2luZAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJz ZWRSZXZpc2lvbktpbmQKLS1lbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1 aW50OF90IHsKLStlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90 Ci0rewotICAgVmVyc2lvbiA9IDAsCi0gICBDaGVja3N1bSA9IDEsCi0gfTsKLUBAIC0xMzQ1LDcg KzE1NDAsOCBAQCBlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90 IHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZp c2lvbgotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlz aW9uCi0tc3RydWN0IFBhcnNlZFJldmlzaW9uIGZpbmFsIHsKLStzdHJ1Y3QgUGFyc2VkUmV2aXNp b24gZmluYWwKLSt7Ci0gICA6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb25LaW5kIGtpbmQ7 Ci0gICA6OnJ1c3Q6OlN0cmluZyB2YWx1ZTsKLSAKLUBAIC0xMzU1LDQ0ICsxNTUxLDUwIEBAIHN0 cnVjdCBQYXJzZWRSZXZpc2lvbiBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncwotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MKLS1zdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFn cyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICBib29sIGlzX2ltYV9lbmFibGVk KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB+UnBtSW1wb3J0ZXJGbGFncygpID0gZGVsZXRlOwotK3N0 cnVjdCBScG1JbXBvcnRlckZsYWdzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewot KyAgYm9vbCBpc19pbWFfZW5hYmxlZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIH5ScG1JbXBvcnRl ckZsYWdzICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlv dXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgp IG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0Owot KyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgp IG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsK LSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJw bUltcG9ydGVyRmxhZ3MKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRScG1JbXBvcnRlcgotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJw bUltcG9ydGVyCi0tc3RydWN0IFJwbUltcG9ydGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlIHsKLS0gIDo6cnVzdDo6U3RyaW5nIGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpydXN0 OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoKCkg Y29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBwa2dfbmFtZSgpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkKCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICB2b2lkIGRvY19maWxlc19pbnNlcnQoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0tICBi b29sIGRvY19maWxlc19jb250YWlucyg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsK LS0gIHZvaWQgcnBtZmlfb3ZlcnJpZGVzX2luc2VydCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6 dWludDY0X3QgaW5kZXgpIG5vZXhjZXB0OwotLSAgYm9vbCBycG1maV9vdmVycmlkZXNfY29udGFp bnMoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnN0ZDo6dWludDY0X3Qg cnBtZmlfb3ZlcnJpZGVzX2dldCg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgaXNfaW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgdHdlYWtfaW1w b3J0ZWRfZmlsZV9pbmZvKDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5m bykgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGlzX2ZpbGVfZmlsdGVyZWQoOjpydXN0OjpTdHIg cGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsK LS0gIHZvaWQgdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5KDo6cnVzdDo6U3RyIGFic19wYXRo LCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3Ry IHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOwotLSAgYm9vbCBoYXNfdG1wZmlsZXNf ZW50cmllcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3Rt cGZpbGVzX2NvbnRlbnQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIH5ScG1JbXBvcnRlcigpID0gZGVs ZXRlOwotK3N0cnVjdCBScG1JbXBvcnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQot K3sKLSsgIDo6cnVzdDo6U3RyaW5nIGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6 U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIHBrZ19uYW1lICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgYm9vbCBkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgdm9pZCBkb2NfZmlsZXNfaW5zZXJ0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKLSsg IGJvb2wgZG9jX2ZpbGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIHZvaWQgcnBtZmlfb3ZlcnJpZGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCwgOjpz dGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2Nv bnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6c3RkOjp1aW50 NjRfdCBycG1maV9vdmVycmlkZXNfZ2V0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGJvb2wgaXNfaW1hX2VuYWJsZWQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHR3 ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyAoOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAm ZmlsZV9pbmZvKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaXNfZmlsZV9maWx0ZXJlZCAoOjpy dXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZv KSBjb25zdDsKLSsgIHZvaWQgdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICg6OnJ1c3Q6OlN0 ciBhYnNfcGF0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3Vw bmFtZSk7Ci0rICBib29sIGhhc190bXBmaWxlc19lbnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgOjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICB+UnBtSW1wb3J0ZXIgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZy aWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIKLUBAIC0xNDAxLDczICsxNjAzLDgxIEBAIHN0cnVj dCBScG1JbXBvcnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0gI2RlZmluZSBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUVudHJ5Ci0gLy8gQSBoaXN0b3J5 IGVudHJ5IGluIHRoZSBqb3VybmFsLiBJdCBtYXkgcmVwcmVzZW50IG11bHRpcGxlIGNvbnNlY3V0 aXZlIGJvb3RzCi0gLy8gaW50byB0aGUgc2FtZSBkZXBsb3ltZW50LiBUaGlzIHN0cnVjdCBpcyBl eHBvc2VkIGRpcmVjdGx5IHZpYSBGRkkgdG8gQy4KLS1zdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFs IHsKLStzdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFsCi0rewotICAgLy8gVGhlIGRlcGxveW1lbnQg cm9vdCB0aW1lc3RhbXAuCi0tICA6OnN0ZDo6dWludDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhf REVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENY WF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSBjb21tYW5kLWxpbmUgdGhhdCB3YXMgdXNl ZCB0byBjcmVhdGUgdGhlIGRlcGxveW1lbnQsIGlmIGFueS4KLSAgIDo6cnVzdDo6U3RyaW5nIGRl cGxveV9jbWRsaW5lOwotICAgLy8gVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSB0aW1lcyB0aGUg ZGVwbG95bWVudCB3YXMgYm9vdGVkLgotLSAgOjpzdGQ6OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hY X0RFRkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgYm9vdF9jb3VudCBDWFhfREVG QVVMVF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgZmlyc3QgdGltZSB0aGUgZGVwbG95bWVudCB3YXMg Ym9vdGVkIGlmIG11bHRpcGxlIGNvbnNlY3V0aXZlIHRpbWVzLgotLSAgOjpzdGQ6OnVpbnQ2NF90 IGZpcnN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVp bnQ2NF90IGZpcnN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAgIC8v IFRoZSBsYXN0IHRpbWUgdGhlIGRlcGxveW1lbnQgd2FzIGJvb3RlZCBpZiBtdWx0aXBsZSBjb25z ZWN1dGl2ZSB0aW1lcy4KLS0gIDo6c3RkOjp1aW50NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENY WF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3Rh bXAgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotICAgLy8gYHRydWVgIGlmIHRoZXJlIGFyZSBubyBt b3JlIGVudHJpZXMuCi0tICBib29sIGVvZiBDWFhfREVGQVVMVF9WQUxVRShmYWxzZSk7Ci0rICBi b29sIGVvZiBDWFhfREVGQVVMVF9WQUxVRSAoZmFsc2UpOwotIAotLSAgYm9vbCBvcGVyYXRvcj09 KEhpc3RvcnlFbnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3Ih PShIaXN0b3J5RW50cnkgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9y PT0gKEhpc3RvcnlFbnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0 b3IhPSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotICAgdXNpbmcgSXNS ZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlFbnRyeQotIAotICNpZm5kZWYgQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4Ci0tc3RydWN0IEhpc3RvcnlDdHggZmluYWwgOiBw dWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBu ZXh0X2VudHJ5KCk7Ci0tICB+SGlzdG9yeUN0eCgpID0gZGVsZXRlOwotK3N0cnVjdCBIaXN0b3J5 Q3R4IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpycG1vc3RyZWVjeHg6 Okhpc3RvcnlFbnRyeSBuZXh0X2VudHJ5ICgpOwotKyAgfkhpc3RvcnlDdHggKCkgPSBkZWxldGU7 Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlv dXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0r ICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRp ZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUN0eAotIAotICNpZm5k ZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCi0gI2RlZmluZSBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUKLS1zdHJ1Y3QgVG9raW9I YW5kbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4gZW50ZXIoKSBjb25zdCBub2V4Y2VwdDsKLS0g IH5Ub2tpb0hhbmRsZSgpID0gZGVsZXRlOwotK3N0cnVjdCBUb2tpb0hhbmRsZSBmaW5hbCA6IHB1 YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU b2tpb0VudGVyR3VhcmQ+IGVudGVyICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgflRva2lvSGFuZGxl ICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0t ICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhj ZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3Ry dWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhj ZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07 Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFu ZGxlCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRl ckd1YXJkCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRl ckd1YXJkCi0tc3RydWN0IFRva2lvRW50ZXJHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZSB7Ci0tICB+VG9raW9FbnRlckd1YXJkKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRva2lvRW50 ZXJHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIH5Ub2tpb0VudGVy R3VhcmQgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91 dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkg bm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0r ICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkg bm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0Owot ICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9r aW9FbnRlckd1YXJkCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJl cG9NZXRhZGF0YVRhcmdldAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRS ZXBvTWV0YWRhdGFUYXJnZXQKLS1lbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3Rk Ojp1aW50OF90IHsKLStlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50 OF90Ci0rewotICAgSW5saW5lID0gMCwKLSAgIERldGFjaGVkID0gMSwKLSAgIERpc2FibGVkID0g MiwKLUBAIC0xNDc2LDcgKzE2ODYsOCBAQCBlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6 IDo6c3RkOjp1aW50OF90IHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVj eHgkQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0Ci0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBt b3N0cmVlY3h4JEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldAotLWVudW0gY2xhc3MgQWR2aXNvcmll c01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgQWR2aXNvcmll c01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBJbmxpbmUgPSAwLAotICAg RGV0YWNoZWQgPSAxLAotICAgRGlzYWJsZWQgPSAyLAotQEAgLTE0ODUsMzkgKzE2OTYsNDMgQEAg ZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7Ci0g Ci0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVmc3BlYwotICNkZWZp bmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlZnNwZWMKLS1zdHJ1Y3QgUmVmc3Bl YyBmaW5hbCB7Ci0rc3RydWN0IFJlZnNwZWMgZmluYWwKLSt7Ci0gICA6OnJwbW9zdHJlZWN4eDo6 UmVmc3BlY1R5cGUga2luZDsKLSAgIDo6cnVzdDo6U3RyaW5nIHJlZnNwZWM7Ci0gCi0tICBib29s IG9wZXJhdG9yPT0oUmVmc3BlYyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3Bl cmF0b3IhPShSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRv cj09IChSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvciE9 IChSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotICAgdXNpbmcgSXNSZWxvY2F0YWJs ZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFJlZnNwZWMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3Ry ZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9y cG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKLS1lbnVtIGNsYXNzIE92ZXJyaWRl UmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgT3ZlcnJpZGVS ZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIFJlcG8gPSAwLAotIH07Ci0g I2VuZGlmIC8vIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVu dFR5cGUKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlk ZVJlcGxhY2VtZW50Ci0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3Zl cnJpZGVSZXBsYWNlbWVudAotLXN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50IGZpbmFsIHsKLStz dHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudCBmaW5hbAotK3sKLSAgIDo6cnVzdDo6U3RyaW5nIGZy b207Ci0gICA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgZnJvbV9raW5k OwotICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzOwotIAotLSAgYm9vbCBv cGVyYXRvcj09KE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0t ICBib29sIG9wZXJhdG9yIT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4 Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9PSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBj b25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBj b25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6 dHJ1ZV90eXBlOwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRPdmVycmlkZVJlcGxhY2VtZW50Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0 cmVlY3h4JE9wdFVzckxvY2FsCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4 JE9wdFVzckxvY2FsCi0tZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90IHsK LStlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBWYXIgPSAw LAotICAgUm9vdCA9IDEsCi0gICBTdGF0ZU92ZXJsYXkgPSAyLAotQEAgLTE1MjYsMTI1ICsxNzQx LDEzMSBAQCBlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNp Zm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxlCi0gI2RlZmluZSBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKLS1zdHJ1Y3QgVHJlZWZpbGUg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpTdHIgZ2V0X3dvcmtk aXIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6c3RkOjppbnQzMl90IGdldF9wYXNzd2RfZmQoKSBu b2V4Y2VwdDsKLS0gIDo6c3RkOjppbnQzMl90IGdldF9ncm91cF9mZCgpIG5vZXhjZXB0OwotLSAg OjpydXN0OjpTdHJpbmcgZ2V0X2pzb25fc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zdHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVlX292ZXJyaWRlX2xh eWVycygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9hbGxfb3N0cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9yZXBvcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0 OjpTdHJpbmcgcmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXgoKSBjb25zdDsKLS0gIGJv b2wgYWRkX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9v bCBhbGxvd19leGlzdGluZyk7Ci0tICBib29sIGhhc19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcygpIGNv bnN0IG5vZXhjZXB0OwotLSAgYm9vbCBhZGRfbG9jYWxfcGFja2FnZXMoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKLS0gIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBib29sIGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsK LS0gIGJvb2wgcmVtb3ZlX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcywgYm9vbCBhbGxvd19ub2VudCk7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6 T3ZlcnJpZGVSZXBsYWNlbWVudD4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0OwotLSAg Ym9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlKDo6cnVzdDo6U3RyIHBhY2thZ2Up IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19v dmVycmlkZV9yZXBsYWNlX2xvY2FsKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBw YWNrYWdlcyk7Ci0tICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwo OjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAg dm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBwYWNrYWdlcyk7Ci0tICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6 OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLS0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJy aWRlX3JlbW92ZV9uYW1lKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCByZW1vdmVfYWxsX292ZXJyaWRlcygpIG5vZXhjZXB0OwotLSAgYm9vbCByZW1vdmVfYWxsX3Bh Y2thZ2VzKCkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4 Y2x1ZGVfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9w bGF0Zm9ybV9tb2R1bGUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfaW5zdGFsbF9sYW5ncygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpT dHJpbmcgZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9ja2ZpbGVfcmVwb3MoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIDo6cnVzdDo6U3RyIGdldF9yZWYoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wg Z2V0X2NsaXdyYXAoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfY2xpd3JhcF9iaW5hcmllcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBzZXRf Y2xpd3JhcChib29sIGVuYWJsZWQpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9jb250YWluZXJfY21kKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9y ZWFkb25seV9leGVjdXRhYmxlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfZG9jdW1l bnRhdGlvbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfcmVjb21tZW5kcygpIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfc2VsaW51eCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnN0ZDo6dWlu dDMyX3QgZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy dXN0OjpTdHJpbmcgZ2V0X2dwZ19rZXkoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3Ry aW5nIGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXgoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJv b2wgZ2V0X2NvbnRhaW5lcigpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfbWFjaGluZWlk X2NvbXBhdCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9ldGNfZ3JvdXBfbWVtYmVycygpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfYm9v dF9sb2NhdGlvbl9pc19tb2R1bGVzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIHVzZV9rZXJu ZWxfaW5zdGFsbCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfaW1hKCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRfcmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0 OwotLSAgOjpycG1vc3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0 YV90YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVz TWV0YWRhdGFUYXJnZXQgZ2V0X2Fkdmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0KCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICBib29sIHNob3VsZF9ub3JtYWxpemVfcnBtZGIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBnZXRfb3B0X3VzcmxvY2FsKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdl eCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5n IGdldF9jaGVja3N1bSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29u c3Q7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3N0cmVlX3JlZigpIGNvbnN0IG5vZXhjZXB0Owot LSAgOjpydXN0OjpTbGljZTw6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9y ZXBvX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIGNsZWFyX3JlcG9fcGFja2Fn ZXMoKSBub2V4Y2VwdDsKLS0gIHZvaWQgcHJldHR5cHJpbnRfanNvbl9zdGRvdXQoKSBjb25zdCBu b2V4Y2VwdDsKLS0gIHZvaWQgcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIHZvaWQgcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIHZvaWQgc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzKCkgY29uc3Q7Ci0tICA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gaW1wb3J0ZXJfZmxhZ3MoOjpydXN0 OjpTdHIgcGtnX25hbWUpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgd3JpdGVf cmVwb3ZhcnMoOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKLS0gIHZvaWQg c2V0X3JlbGVhc2V2ZXIoOjpydXN0OjpTdHIgcmVsZWFzZXZlcik7Ci0tICB2b2lkIHNldF9yZWNv bW1lbmRzKGJvb2wgdmFsKTsKLS0gIHZvaWQgZW5hYmxlX3JlcG8oOjpydXN0OjpTdHIgcmVwbyk7 Ci0tICB2b2lkIGRpc2FibGVfcmVwbyg6OnJ1c3Q6OlN0ciByZXBvKTsKLS0gIHZvaWQgdmFsaWRh dGVfZm9yX2NvbnRhaW5lcigpIGNvbnN0OwotLSAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgZ2V0 X2Jhc2VfcmVmc3BlYygpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCByZWJhc2UoOjpydXN0OjpT dHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0 ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5n IGdldF9vcmlnaW5fY3VzdG9tX3VybCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJp bmcgZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnVzdDo6U3RyaW5nIGdldF9vdmVycmlkZV9jb21taXQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZv aWQgc2V0X292ZXJyaWRlX2NvbW1pdCg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7Ci0t ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMoKSBj b25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgaGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBu b2V4Y2VwdDsKLS0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc190cmFjayg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0OwotLSAgYm9vbCBpbml0cmFtZnNfZXRjX2Zp bGVzX3VudHJhY2soOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsK LS0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2FsbCgpIG5vZXhjZXB0OwotLSAg Ym9vbCBnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2FyZ3MoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIHZvaWQgc2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcg Z2V0X3VuY29uZmlndXJlZF9zdGF0ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBtYXlfcmVx dWlyZV9sb2NhbF9hc3NlbWJseSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBoYXNfYW55X3Bh Y2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG1lcmdlX3RyZWVmaWxlKDo6cnVzdDo6 U3RyIHRyZWVmaWxlKTsKLS0gIGJvb2wgZ2V0X25vX2luaXRyYW1mcygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgflRyZWVmaWxlKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRyZWVmaWxlIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6aW50MzJfdCBnZXRfcGFzc3dkX2ZkICgpIG5vZXhjZXB0 OwotKyAgOjpzdGQ6OmludDMyX3QgZ2V0X2dyb3VwX2ZkICgpIG5vZXhjZXB0OwotKyAgOjpydXN0 OjpTdHJpbmcgZ2V0X2pzb25fc3RyaW5nICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJz ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9h bGxfb3N0cmVlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBnZXRfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpTdHJpbmcgcmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXggKCkgY29uc3Q7Ci0rICBi b29sIGFkZF9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBi b29sIGFsbG93X2V4aXN0aW5nKTsKLSsgIGJvb2wgaGFzX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcyAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgYWRkX2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwotKyAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMg KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2Fn ZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlz dGluZyk7Ci0rICBib29sIHJlbW92ZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzLCBib29sIGFsbG93X25vZW50KTsKLSsgIDo6cnVzdDo6VmVjPDo6cnBtb3N0 cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFj ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxh Y2UgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBs YWNlICg6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9l eGNlcHQ7Ci0rICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKDo6cnVzdDo6 U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg dm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVwbGFjZV9sb2NhbCAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIHZvaWQgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vf b3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSsgIGJvb2wg aGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lICg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25z dCBub2V4Y2VwdDsKLSsgIGJvb2wgcmVtb3ZlX2FsbF9vdmVycmlkZXMgKCkgbm9leGNlcHQ7Ci0r ICBib29sIHJlbW92ZV9hbGxfcGFja2FnZXMgKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlN0cmluZyBnZXRfcGxhdGZvcm1fbW9kdWxlICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbnN0YWxsX2xhbmdzICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8g KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xv Y2tmaWxlX3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHIgZ2V0X3JlZiAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2NsaXdyYXAgKCkgY29uc3Qgbm9leGNlcHQ7 Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2NsaXdyYXBfYmluYXJpZXMgKCkg Y29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHNldF9jbGl3cmFwIChib29sIGVuYWJsZWQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jb250YWluZXJfY21kICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9kb2N1bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgYm9vbCBnZXRfcmVjb21tZW5kcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0 X3NlbGludXggKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9zeXN1c2Vyc19pc19mb3Jj ZWQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFi ZWxfdmVyc2lvbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9ncGdf a2V5ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2F1dG9tYXRpY192 ZXJzaW9uX3N1ZmZpeCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2NvbnRhaW5lciAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X21hY2hpbmVpZF9jb21wYXQgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V0Y19ncm91cF9t ZW1iZXJzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19t b2R1bGVzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCB1c2Vfa2VybmVsX2luc3RhbGwgKCkg Y29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9pbWEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OlN0cmluZyBnZXRfcmVsZWFzZXZlciAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnBt b3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQgZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRh cmdldCBnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBib29sIHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9v bCBzaG91bGRfbm9ybWFsaXplX3JwbWRiICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpycG1vc3Ry ZWVjeHg6Ok9wdFVzckxvY2FsIGdldF9vcHRfdXNybG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoOjpy dXN0OjpTdHIgcGFja2FnZSkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRf Y2hlY2tzdW0gKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdDsK LSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vc3RyZWVfcmVmICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg OjpydXN0OjpTbGljZTw6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBv X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2Vz ICgpIG5vZXhjZXB0OwotKyAgdm9pZCBwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIHZvaWQgcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICB2b2lkIHByaW50X2V4cGVyaW1lbnRhbF9ub3RpY2VzICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgdm9pZCBzYW5pdHljaGVja19leHRlcm5hbHMgKCkgY29uc3Q7Ci0rICA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4KLSsgIGltcG9ydGVyX2ZsYWdz ICg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmlu ZyB3cml0ZV9yZXBvdmFycyAoOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsK LSsgIHZvaWQgc2V0X3JlbGVhc2V2ZXIgKDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpOwotKyAgdm9p ZCBzZXRfcmVjb21tZW5kcyAoYm9vbCB2YWwpOwotKyAgdm9pZCBlbmFibGVfcmVwbyAoOjpydXN0 OjpTdHIgcmVwbyk7Ci0rICB2b2lkIGRpc2FibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7Ci0r ICB2b2lkIHZhbGlkYXRlX2Zvcl9jb250YWluZXIgKCkgY29uc3Q7Ci0rICA6OnJwbW9zdHJlZWN4 eDo6UmVmc3BlYyBnZXRfYmFzZV9yZWZzcGVjICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBy ZWJhc2UgKDo6cnVzdDo6U3RyIG5ld19yZWZzcGVjLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2lu X3VybCwKLSsgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0 aW9uKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX3VybCAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX2Rl c2NyaXB0aW9uICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X292ZXJy aWRlX2NvbW1pdCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1p dCAoOjpydXN0OjpTdHIgY2hlY2tzdW0pIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wg aW5pdHJhbWZzX2V0Y19maWxlc190cmFjayAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZp bGVzKSBub2V4Y2VwdDsKLSsgIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrICg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0OwotKyAgYm9vbCBpbml0cmFt ZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsICgpIG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfaW5pdHJh bWZzX3JlZ2VuZXJhdGUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2luaXRyYW1mc19hcmdzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBz ZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmln dXJlZF9zdGF0ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgbWF5X3JlcXVpcmVfbG9jYWxf YXNzZW1ibHkgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGhhc19hbnlfcGFja2FnZXMgKCkg Y29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG1lcmdlX3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVl ZmlsZSk7Ci0rICBib29sIGdldF9ub19pbml0cmFtZnMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB+ VHJlZWZpbGUgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6Omxh eW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXpl KCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7 Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUg KCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0 OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk VHJlZWZpbGUKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBv UGFja2FnZQotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNr YWdlCi0tc3RydWN0IFJlcG9QYWNrYWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsK LS0gIDo6cnVzdDo6U3RyIGdldF9yZXBvKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB+UmVw b1BhY2thZ2UoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMg OjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlN0ciBnZXRfcmVwbyAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICB+UmVwb1BhY2thZ2UgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToK LSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0 aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6 ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6 ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2thZ2UKLUBAIC0xNjU0LDcgKzE4NzUsOCBAQCBz dHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotIC8vIEEg Y29weSBvZiBMaXZlRnNTdGF0ZSB0aGF0IGlzIGJyaWRnZWQgdG8gQysrOyB0aGUgbWFpbgotIC8v IGNoYW5nZSBoZXJlIGlzIHdlIGNhbid0IHVzZSBPcHRpb248PiB5ZXQsIHNvIGVtcHR5IHZhbHVl cwotIC8vIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZW1wdHkgc3RyaW5nLgotLXN0cnVjdCBMaXZl QXBwbHlTdGF0ZSBmaW5hbCB7Ci0rc3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsCi0rewotICAg OjpydXN0OjpTdHJpbmcgaW5wcm9ncmVzczsKLSAgIDo6cnVzdDo6U3RyaW5nIGNvbW1pdDsKLSAK LUBAIC0xNjY0LDY0ICsxODg2LDcyIEBAIHN0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7Ci0g Ci0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKLSAjZGVm aW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2REQgotLXN0cnVjdCBQYXNz d2REQiBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlN0cmluZyBs b29rdXBfdXNlcig6OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdDsKLS0gIDo6cnVzdDo6U3RyaW5n IGxvb2t1cF9ncm91cCg6OnN0ZDo6dWludDMyX3QgZ2lkKSBjb25zdDsKLS0gIH5QYXNzd2REQigp ID0gZGVsZXRlOwotK3N0cnVjdCBQYXNzd2REQiBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1 ZQotK3sKLSsgIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF91c2VyICg6OnN0ZDo6dWludDMyX3QgdWlk KSBjb25zdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF9ncm91cCAoOjpzdGQ6OnVpbnQzMl90 IGdpZCkgY29uc3Q7Ci0rICB+UGFzc3dkREIgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAg IGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMg OjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6 OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcwotLXN0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDog cHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIHZvaWQgYWRkX2dyb3VwX2NvbnRlbnQoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLS0gIHZvaWQgYWRkX3Bhc3N3ZF9j b250ZW50KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7Ci0tICBib29s IGNvbnRhaW5zX2dyb3VwKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBjb250YWluc191c2VyKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpz dGQ6OnVpbnQzMl90IGxvb2t1cF91c2VyX2lkKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0OwotLSAg OjpzdGQ6OnVpbnQzMl90IGxvb2t1cF9ncm91cF9pZCg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3Q7 Ci0tICB+UGFzc3dkRW50cmllcygpID0gZGVsZXRlOwotK3N0cnVjdCBQYXNzd2RFbnRyaWVzIGZp bmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgdm9pZCBhZGRfZ3JvdXBfY29udGVu dCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLSsgIHZvaWQgYWRk X3Bhc3N3ZF9jb250ZW50ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgp OwotKyAgYm9vbCBjb250YWluc19ncm91cCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIGNvbnRhaW5zX3VzZXIgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhj ZXB0OwotKyAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2Vy KSBjb25zdDsKLSsgIDo6c3RkOjp1aW50MzJfdCBsb29rdXBfZ3JvdXBfaWQgKDo6cnVzdDo6U3Ry IGdyb3VwKSBjb25zdDsKLSsgIH5QYXNzd2RFbnRyaWVzICgpID0gZGVsZXRlOwotIAotIHByaXZh dGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAg c3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBz dGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMKLSAKLSAjaWZuZGVmIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHRlbnNpb25zCi0gI2RlZmluZSBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucwotLXN0cnVjdCBFeHRlbnNpb25zIGZpbmFs IDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzKCkgY29uc3Qg bm9leGNlcHQ7Ci0tICBib29sIHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQoOjpydXN0OjpTdHIgY2hr c3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKLS0gIHZvaWQgdXBkYXRlX3N0YXRl X2NoZWNrc3VtKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29u c3Q7Ci0tICB2b2lkIHNlcmlhbGl6ZV90b19kaXIoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29u c3Q7Ci0tICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IGdlbmVyYXRlX3Ry ZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKLS0gIH5F eHRlbnNpb25zKCkgPSBkZWxldGU7Ci0rc3RydWN0IEV4dGVuc2lvbnMgZmluYWwgOiBwdWJsaWMg OjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3Jl cG9zICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9vc19leHRlbnNpb25fcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgYm9vbCBzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkICg6OnJ1c3Q6OlN0ciBjaGtzdW0s IDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotKyAgdm9pZCB1cGRhdGVfc3RhdGVfY2hl Y2tzdW0gKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7 Ci0rICB2b2lkIHNlcmlhbGl6ZV90b19kaXIgKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0 OwotKyAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotKyAgZ2VuZXJhdGVf dHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKLSsg IH5FeHRlbnNpb25zICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0 OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg c2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhj ZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBz aXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4 Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JEV4dGVuc2lvbnMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRMb2NrZWRQYWNrYWdlCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk TG9ja2VkUGFja2FnZQotLXN0cnVjdCBMb2NrZWRQYWNrYWdlIGZpbmFsIHsKLStzdHJ1Y3QgTG9j a2VkUGFja2FnZSBmaW5hbAotK3sKLSAgIDo6cnVzdDo6U3RyaW5nIG5hbWU7Ci0gICA6OnJ1c3Q6 OlN0cmluZyBldnI7Ci0gICA6OnJ1c3Q6OlN0cmluZyBhcmNoOwotQEAgLTE3MzMsMzI2MiArMTk2 Myw0OTg1IEBAIHN0cnVjdCBMb2NrZWRQYWNrYWdlIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZwotICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnCi0tc3RydWN0IExvY2tmaWxl Q29uZmlnIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6VmVjPDo6 cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiBnZXRfbG9ja2VkX3BhY2thZ2VzKCkgY29uc3Q7 Ci0tICB+TG9ja2ZpbGVDb25maWcoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgTG9ja2ZpbGVDb25maWcg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gZ2V0X2xvY2tlZF9wYWNrYWdlcyAoKSBjb25zdDsKLSsg IH5Mb2NrZmlsZUNvbmZpZyAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6 cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6 ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBu b2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXpl X3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkg bm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRMb2NrZmlsZUNvbmZpZwotIAotLXN0YXRpY19hc3NlcnQoOjpzdGQ6OmlzX2VudW08 UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Ci0tc3Rh dGljX2Fzc2VydChzaXplb2YoUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0KSA9PSBzaXplb2YoOjpz dGQ6OnVpbnQ4X3QpLCAiaW5jb3JyZWN0IHNpemUiKTsKLS1zdGF0aWNfYXNzZXJ0KHN0YXRpY19j YXN0PDo6c3RkOjp1aW50OF90PihScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9E SUZGX1BSSU5UX0ZPUk1BVF9TVU1NQVJZKSA9PSAwLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVl IGluICNbY3h4OjpicmlkZ2VdIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6 dWludDhfdD4oUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9G T1JNQVRfRlVMTF9BTElHTkVEKSA9PSAxLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNb Y3h4OjpicmlkZ2VdIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhf dD4oUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRf RlVMTF9NVUxUSUxJTkUpID09IDIsICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6 OmJyaWRnZV0iKTsKLS0KLS1leHRlcm4gIkMiIHsKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxpdF94YXR0cnMoYm9vbCAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0tCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfaHR0 cF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfb3N0cmVlX2NvbnRhaW5lcihib29sICpy ZXR1cm4kKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZ2V0X3N5c3RlbV9ob3N0X3R5cGUoOjpycG1vc3RyZWVjeHg6OlN5c3Rl bUhvc3RUeXBlICpyZXR1cm4kKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBt b3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSB0KSBub2V4Y2VwdDsKLStzdGF0aWNfYXNzZXJ0ICg6 OnN0ZDo6aXNfZW51bTxScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ+Ojp2YWx1ZSwgImV4cGVjdGVk IGVudW0iKTsKLStzdGF0aWNfYXNzZXJ0IChzaXplb2YgKFJwbU9zdHJlZURpZmZQcmludEZvcm1h dCkgPT0gc2l6ZW9mICg6OnN0ZDo6dWludDhfdCksICJpbmNvcnJlY3Qgc2l6ZSIpOwotK3N0YXRp Y19hc3NlcnQgKAotKyAgICBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9zdHJlZURp ZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX1NVTU1BUlkpCi0rICAg ICAgICA9PSAwLAotKyAgICAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4Ojpicmlk Z2VdIik7Ci0rc3RhdGljX2Fzc2VydCAoCi0rICAgIHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90 PiAoUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRf RlVMTF9BTElHTkVEKQotKyAgICAgICAgPT0gMSwKLSsgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2 YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOwotK3N0YXRpY19hc3NlcnQgKHN0YXRpY19jYXN0PDo6 c3RkOjp1aW50OF90PiAoCi0rICAgICAgICAgICAgICAgICAgIFJwbU9zdHJlZURpZmZQcmludEZv cm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVMVElMSU5FKQotKyAgICAg ICAgICAgICAgICAgICA9PSAyLAotKyAgICAgICAgICAgICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUg dmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRpc19ycG1fYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0rZXh0ZXJuICJD IgotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRpc19iYXJlX3NwbGl0X3hhdHRycyAoYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9zdGFy dF9kYWVtb24oKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGlzX2h0dHBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfaGFuZGxlX2ZkX2Fy Z3VtZW50KDo6cnVzdDo6U3RyIGFyZywgOjpydXN0OjpTdHIgYXJjaCwgYm9vbCBpc19yZXBsYWNl LCA6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9j b250YWluZXIgKGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZwcm9ncmVzcywgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGdldF9zeXN0ZW1faG9zdF90eXBlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6U3lz dGVtSG9zdFR5cGUgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fY29udGFpbmVyKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJlcXVpcmVfc3lz dGVtX2hvc3RfdHlwZSAoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b25maXJtKGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkaXNfcnBtX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybV9v cl9hYm9ydCgpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNp emVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRhbGln bm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY2xpZW50X3N0YXJ0X2RhZW1vbiAoKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9zZWxm dGVzdCgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQgKAotKyAgICAgIDo6cnVzdDo6 U3RyIGFyZywgOjpydXN0OjpTdHIgYXJjaCwgYm9vbCBpc19yZXBsYWNlLAotKyAgICAgIDo6cnVz dDo6VmVjPDo6c3RkOjppbnQzMl90PiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfcnVuX3N5 bmMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGNvbnN0ICZhcmdzLCBib29sIGNhcHR1cmVfc3Rkb3V0LCA6OnJwbW9zdHJlZWN4eDo6QnViYmxl d3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSwgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+ICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNs aWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpH VmFyaWFudCBjb25zdCAmcHJvZ3Jlc3MsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk YnViYmxld3JhcF9uZXcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVubmluZ19pbl9jb250YWluZXIgKCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1 YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eSg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5LCA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm0gKGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGdldF9yb290ZnNfZmQoOjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXAgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQgKCkgbm9leGNlcHQ7 Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2Vw dDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVu ZF9id3JhcF9hcmcoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3Ry IGFyZykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkYnViYmxld3JhcF9zZWxmdGVzdCAoKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVuZF9jaGlsZF9hcmcoOjpy cG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnVi Ymxld3JhcF9ydW5fc3luYyAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzLCBib29sIGNhcHR1cmVfc3Rkb3V0 LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5 LAotKyAgICAgIDo6cnVzdDo6VmVjPDo6c3RkOjp1aW50OF90PiAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRlbnYo OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6 U3RyIHYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3ICgKLSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290 ZnNfZmQsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3Jh cCR0YWtlX2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJf dCBzb3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQ7Ci0rICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9u ZXdfd2l0aF9tdXRhYmlsaXR5ICgKLSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5LAotKyAgICAgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRfaW5o ZXJpdF9zdGRpbig6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7Ci0r ICA6OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRn ZXRfcm9vdGZzX2ZkICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCBjb25zdCAm c2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnVi Ymxld3JhcCR0YWtlX3N0ZGluX2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfYndyYXBfYXJnICg6OnJwbW9zdHJlZWN4 eDo6QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsK LSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rk b3V0X2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk QnViYmxld3JhcCRhcHBlbmRfY2hpbGRfYXJnICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAm c2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkKDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhj ZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRl bnYgKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGssIDo6cnVz dDo6U3RyIHYpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JEJ1YmJsZXdyYXAkdGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCg6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCAoOjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpz dGQ6OmludDMyX3QgdGFyZ2V0X2ZkKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxl d3JhcCAmc2VsZiwgOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsK LSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0X2luaGVy aXRfc3RkaW4gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmKSBub2V4 Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJp bmRfcmVhZHdyaXRlKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0 ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGluX2ZkICg6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk QnViYmxld3JhcCRzZXR1cF9jb21wYXRfdmFyKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZz ZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJs ZXdyYXAkdGFrZV9zdGRvdXRfZmQgKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4oOjpy cG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFi bGUgY29uc3QgJmNhbmNlbGxhYmxlKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRlcnJfZmQgKDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2Vw dDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JG11dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29yZShib29sIHVuaWZpZWRf Y29yZSkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0Owot IAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1c3Jv dmVybGF5X2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdz KSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdy YXAkYmluZF9yZWFkICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6 OlN0ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9lbnRyeXBvaW50 KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNlcHQ7Ci0rICB2 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZHdyaXRl ICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNoKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSBub2V4Y2VwdDsKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JHNldHVwX2NvbXBhdF92YXIgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZz ZWxmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29tcG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4oOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4gKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNv bnN0ICZjYW5jZWxsYWJsZSkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcHJpbnRfb3N0cmVlX3R4bl9zdGF0cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVw b1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwTXV0YWJpbGl0eQotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG11dGFi aWxpdHlfZm9yX3VuaWZpZWRfY29yZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OwotIAot LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3cml0ZV9j b21taXRfaWQoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsIDo6cnVzdDo6U3RyIHJldmlzaW9uKSBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR1c3JvdmVybGF5X2VudHJ5cG9pbnQgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfd3JhcHBlcnMoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZW50cnlwb2ludCAoCi0rICAgICAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsKLSAKLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0 ZV9zb21lX3dyYXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNoICgKLSsgICAgICA6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF9kZXN0ZGlyKDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5k X3J1biAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5l cl9lbmNhcHN1bGF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0 OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfb3N0cmVlX3R4bl9z dGF0cyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRz ICZzdGF0cykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFBydW5lZENvbnRhaW5lckluZm8kb3BlcmF0b3IkZXEoUHJ1bmVkQ29udGFpbmVy SW5mbyBjb25zdCAmLCBQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdyaXRlX2Nv bW1pdF9pZCAoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0 ciByZXZpc2lvbikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHB1bGxfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmLCA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUs IDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfd3JhcHBlcnMgKDo6c3RkOjppbnQzMl90IHJvb3Rm cykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbnRhaW5lcl9wcnVuZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBj b25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6OlBydW5lZENvbnRhaW5lckluZm8gKnJldHVy biQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyAoCi0rICAgICAgOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIG5v ZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF9kZXN0ZGlyICg6OnJ1c3Q6OlN0cmluZyAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHB1cmdlX3JlZnNwZWMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5j YXBzdWxhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNr X2NvbnRhaW5lcl91cGRhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s IDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6 OlN0ciBpbWdyZWYsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YoKSBu b2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1w RXRjR3VhcmQkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNp emVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lf ZnJvbV9zZWxmX2VudHJ5cG9pbnQgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqYXJncykgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ cnVuZWRDb250YWluZXJJbmZvJG9wZXJhdG9yJGVxICgKLSsgICAgICBQcnVuZWRDb250YWluZXJJ bmZvIGNvbnN0ICYsIFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVf dGVtcGV0Y19ndWFyZCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRhaW5lciAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVl Y3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLAotKyAgICAgIDo6cnVzdDo6U3Ry IGltZ3JlZiwgOjpydXN0OjpTdHIgZGlnZXN0X292ZXJyaWRlLAotKyAgICAgIDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRl bXBFdGNHdWFyZCR1bmRvKDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQgY29uc3QgJnNlbGYp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNvbnRhaW5lcl9wcnVuZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlBydW5lZENvbnRh aW5lckluZm8gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5 c3RlbVNjcmlwdFByZXA+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkdW5k byg6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgJnNlbGYpIG5vZXhjZXB0Owot LQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5f ZGVwbW9kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6U3RyIGt2ZXIsIGJvb2wg dW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX3N5c3VzZXJzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19k ZmQsIGJvb2wgZm9yY2UpIG5vZXhjZXB0OwotLQotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGxvZ190cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSBu b2V4Y2VwdDsKLS0KLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWlu ZXJfaW1hZ2VfcmVmZXJlbmNlKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotLQotLWJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3Rf cmVmZXJlbmNlKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotLQotLTo6cnBtb3N0cmVl Y3h4OjpSZWZzcGVjVHlwZSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVmc3BlY19jbGFz c2lmeSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjKDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgbW9kZGlyKSBub2V4Y2VwdDsKLS0KLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFp bmVyX3JwbXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpycG1zLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzdGFnZV9jb250YWluZXJfcnBtX3Jhd19m ZHMoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ICpmZHMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3koOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21taXQsIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTZVBvbGljeSBjb25zdCAmcG9saWN5LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLS0KLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2hlYWRl cl92YXJpYW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6 OlN0ciBjYWNoZWJyYW5jaCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbXBvc2VfYnVpbGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2ltYWdlKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlndXJlX2J1aWxkX3JlcG9f ZnJvbV90YXJnZXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3JlcG8s IDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbykgbm9leGNlcHQ7 Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNv bXBvc2VfcHJlcGFyZV9yb290ZnMoOjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6c3Rk OjppbnQzMl90IGRlc3Rfcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVl ZmlsZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNvbXBvc2Vwb3N0X25zc3dpdGNoX2FsdGZpbGVzKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3Ry IG5leHRfdmVyc2lvbiwgYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9j ZXNzX2ZpbmFsX3ByZSg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5h bCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRyZWVmaWxlKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCg6OnN0ZDo6aW50 MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHJvb3Rmc19wcmVwYXJlX2xpbmtzKDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUsIGJvb2wgc2tp cF91c3Jsb2NhbCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyg6OnN0 ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5j ZWxsYWJsZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJld3JpdGVfcnBtZGJfZm9yX3RhcmdldCg6OnN0ZDo6aW50MzJf dCByb290ZnNfZGZkLCBib29sIG5vcm1hbGl6ZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcmVjdG9yeV9zaXplKDo6c3Rk OjppbnQzMl90IGRmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2Vs bGFibGUsIDo6c3RkOjp1aW50NjRfdCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9yZWJ1aWxk KDo6cnVzdDo6U3RyIHRyZWVmaWxlKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgqY29udGFpbmVyX3Jl YnVpbGQkKSg6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6Y29udGFpbmVyX3JlYnVpbGQ7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0 cnljYXRjaCgKLS0gICAgICBbJl0gewotLSAgICAgICAgY29udGFpbmVyX3JlYnVpbGQkKHRyZWVm aWxlKTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAgIH0sCi0tICAgICAg OjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhyb3ckOwotLX0KLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRxdWVyeV9j b250YWluZXJfaW1hZ2VfY29tbWl0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVw byBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgYywKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50 X2Zvcl9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpT dHIgZGVwbG95X2lkLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqKnJldHVybiQp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRwdXJnZV9yZWZzcGVjICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9jaGVja3N1bV9mb3JfaWQoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9p ZCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX2NvbnRhaW5lcl91cGRhdGUg KAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwKLSsgICAgICA6OnJ1c3Q6 OlN0ciBpbWdyZWYsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJkJG9wZXJhdG9yJHNpemVvZiAo KSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNp emVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkb3Bl cmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkb3BlcmF0b3IkYWxpZ25vZiAoKSBu b2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZGVwbG95bWVudF9nZXRfYmFzZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAm c3lzcm9vdCwgOjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwgOjpydXN0OjpTdHIgb3B0X29zX25h bWUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJl cGFyZV90ZW1wZXRjX2d1YXJkICgKLSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ICpyZXR1cm4kKSBub2V4Y2VwdDsK LSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2FkZF9tYW5p ZmVzdF9kaWZmKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsIDo6cnBt b3N0cmVlY3h4OjpFeHBvcnRlZE1hbmlmZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRl bXBFdGNHdWFyZCR1bmRvICg6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50KDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2Ny aXB0X3ByZXAgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZW5lcmF0ZV9p ZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpy dXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8gKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAmc2VsZikgbm9leGNl cHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRlcGxveW1lbnRfcG9wdWxhdGVfdmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3Qg JmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHJ1bl9kZXBtb2QgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIga3ZlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7Ci0gCi0tOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX2Jh c2VsYXllcl9yZWZzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290 LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2VycyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2UpIG5vZXhjZXB0Owot IAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJp YW50X2FkZF9yZW1vdGVfc3RhdHVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjLCA6OnJ1c3Q6OlN0ciBiYXNlX2NoZWNrc3VtLCA6OnJw bW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KSBub2V4Y2VwdDsKLSsgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvZ190cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZ0Zikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9j b21taXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQs IDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LCA6OnJwbW9zdHJlZWN4eDo6 RGVwbG95bWVudExheWVyZWRNZXRhICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UgKDo6cnVz dDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVE ZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExh eWVyZWRNZXRhICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wKLSsgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSAoOjpydXN0 OjpTdHIgcmVmc3BlYykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX292ZXJyaWRlX3NvdXJjZSg6OnJ1c3Q6OlN0ciBz b3VyY2UsIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50U291cmNlICpyZXR1cm4k KSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZQotKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJlZnNwZWNfY2xhc3NpZnkgKDo6cnVzdDo6U3RyIHJlZnNwZWMp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRwYXJzZV9yZXZpc2lvbig6OnJ1c3Q6OlN0ciBzb3VyY2UsIDo6cnBtb3N0cmVlY3h4 OjpQYXJzZWRSZXZpc2lvbiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjICg6OnN0 ZDo6aW50MzJfdCByb290ZnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBtb2RkaXIpIG5v ZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRnZW5lcmF0ZV9vYmplY3RfcGF0aCg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBu ZXh0X3NlZ21lbnQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29u dGFpbmVyX3JwbXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcnBtcywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZmFpbHBvaW50KDo6cnVzdDo6U3RyIHAp IG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRvcGVyYXRvciRh bGlnbm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbV9yYXdfZmRzICgKLSsgICAgICA6OnJ1 c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gKmZkcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFn cyAqcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1w dHkoKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5ICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVNl UG9saWN5IGNvbnN0ICZwb2xpY3ksCi0rICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRpc19p bWFfZW5hYmxlZCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyBjb25zdCAmc2VsZikg bm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBt SW1wb3J0ZXIkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkb3BlcmF0b3IkYWxpZ25vZigpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRnZXRfaGVhZGVyX3ZhcmlhbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNv bnN0ICZyZXBvLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKipyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcnBtX2ltcG9ydGVyX25ldyg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSwgOjpydXN0 OjpTdHIgb3N0cmVlX2JyYW5jaCwgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29u c3QgJmZsYWdzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb21wb3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKAotKyAgICAg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5zbGF0ZV9w YXRobmFtZSg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIHBh dGgsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9pbWFnZSAoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvc3RyZWVfYnJhbmNoKDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcGtnX25hbWUoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlndXJl X2J1aWxkX3JlcG9fZnJvbV90YXJnZXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZidWlsZF9yZXBvLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZ0YXJnZXRfcmVwbykgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCg6OnJwbW9zdHJl ZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBhcmVf cm9vdGZzICg6OnN0ZDo6aW50MzJfdCBzcmNfcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCBkZXN0 X3Jvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2Zp bGVzX2luc2VydCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3Ry IHBhdGgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2NvbnRhaW5zKDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9w b3N0cHJvY2VzcyAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLAotKyAg ICAgIGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfaW5zZXJ0KDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlciAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2 NF90IGluZGV4KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSAoCi0rICAgICAg OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZ0cmVlZmlsZSkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zKDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9w b3N0cHJvY2Vzc19maW5hbCAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgbm9leGNlcHQ7Ci0gCi0tOjpz dGQ6OnVpbnQ2NF90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1m aV9vdmVycmlkZXNfZ2V0KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwg OjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCAoCi0rICAg ICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJs ZSBjb25zdCAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ltYV9lbmFibGVkKDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJvb3Rmc19wcmVwYXJlX2xpbmtzICg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRy ZWVmaWxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIHNraXBfdXNybG9jYWwpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyg6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpHRmls ZUluZm8gY29uc3QgJmZpbGVfaW5mbykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkd29ya2Fyb3VuZF9zZWxpbnV4X2Nyb3NzX2xh YmVsaW5nICgKLSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ZpbGVf ZmlsdGVyZWQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwb3N0cHJvY2Vzc19jbGVhbnVwX3JwbWRiICg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRlX3RvX3RtcGZp bGVzX2VudHJ5KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAmc2VsZiwgOjpydXN0OjpTdHIg YWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpy dXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJld3Jp dGVfcnBtZGJfZm9yX3RhcmdldCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9y bWFsaXplKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS cG1JbXBvcnRlciRoYXNfdG1wZmlsZXNfZW50cmllcyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJlY3Rvcnlfc2l6ZSAoOjpzdGQ6OmludDMyX3Qg ZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnVpbnQ2NF90ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1J bXBvcnRlciRzZXJpYWxpemVfdG1wZmlsZXNfY29udGVudCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1w b3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29u dGFpbmVyX3JlYnVpbGQgKDo6cnVzdDo6U3RyIHRyZWVmaWxlKSBub2V4Y2VwdAotKyAgewotKyAg ICB2b2lkICgqY29udGFpbmVyX3JlYnVpbGQkKSAoOjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVj eHg6OmNvbnRhaW5lcl9yZWJ1aWxkOwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7 Ci0rICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQotKyAgICAg ICAgICB7Ci0rICAgICAgICAgICAgY29udGFpbmVyX3JlYnVpbGQkICh0cmVlZmlsZSk7Ci0rICAg ICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAgICAgICAgIH0sCi0rICAgICAgICA6 OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRt cGZpbGVzX3RyYW5zbGF0ZSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdG aWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpT dHIgZ3JvdXBuYW1lLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9m b3JfaWQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6 OnJ1c3Q6OlN0ciBkZXBsb3lfaWQsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxv eW1lbnQgKipyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3Bpbyg6OnN0ZDo6 aW50MzJfdCBmZCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkICg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgZGVwbG95X2lk LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGluaXRyYW1mc19vdmVybGF5X2dl bmVyYXRlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsIDo6cnBtb3N0 cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlLCA6OnN0ZDo6aW50MzJfdCAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGVwbG95bWVudF9nZXRfYmFzZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIG9wdF9kZXBsb3lfaWQsIDo6cnVzdDo6 U3RyIG9wdF9vc19uYW1lLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50 ICoqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUoKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsCi0rICAgICAg OjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2Vw dDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNz X2JlZ2luX3Rhc2soOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkYWVtb25fc2FuaXR5Y2hlY2tfZW52 aXJvbm1lbnQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b25zb2xlX3Byb2dyZXNzX2JlZ2luX25faXRlbXMoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWlu dDY0X3Qgbikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRk ZXBsb3ltZW50X2dlbmVyYXRlX2lkICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVw bG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhj ZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jl c3NfYmVnaW5fcGVyY2VudCg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfcG9wdWxh dGVfdmFyaWFudCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3Qg JnN5c3Jvb3QsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3Qg JmRlcGxveW1lbnQsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAm ZGljdCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29u c29sZV9wcm9ncmVzc19zZXRfbWVzc2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRl X2Jhc2VsYXllcl9yZWZzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBj b25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIG5v ZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJv Z3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0rICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRf cmVtb3RlX3N0YXR1cyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3Qg JnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMsIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0sCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191 cGRhdGUoOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJv bV9jb21taXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0 ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwKLSsg ICAgICA6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dy ZXNzX2VuZCg6OnJ1c3Q6OlN0ciBzdWZmaXgpIG5vZXhjZXB0OwotLWJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRlcShIaXN0b3J5RW50cnkgY29u c3QgJiwgSGlzdG9yeUVudHJ5IGNvbnN0ICYpIG5vZXhjZXB0OwotLWJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRuZShIaXN0b3J5RW50cnkgY29u c3QgJiwgSGlzdG9yeUVudHJ5IGNvbnN0ICYpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9l eGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9y eUN0eCRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2Fk ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3Rv cnlfY3R4X25ldyg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnJldHVy biQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHBhcnNlX292ZXJyaWRlX3NvdXJjZSAoCi0rICAgICAgOjpydXN0OjpTdHIgc291 cmNlLCA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEhpc3RvcnlDdHgkbmV4dF9lbnRyeSg6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAm c2VsZiwgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBh cnNlX3JldmlzaW9uICg6OnJ1c3Q6OlN0ciBzb3VyY2UsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbiAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGhpc3RvcnlfcHJ1bmUoKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRzaXplb2Yo KSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU b2tpb0hhbmRsZSRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJHNpemVv ZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRva2lvRW50ZXJHdWFyZCRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX29i amVjdF9wYXRoICg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6VG9raW9I YW5kbGUgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0b2tpb19oYW5kbGVfZ2V0KCkgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZmFpbHBvaW50ICg6OnJ1c3Q6OlN0ciBwKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3Qg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ikc2l6 ZW9mICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAot LTo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUb2tpb0hhbmRsZSRlbnRlcig6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKgot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1w dHkgKCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2Ny aXB0X2lzX2lnbm9yZWQoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3JpcHQsIGJvb2wg dXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJsZWQgKAotKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6 c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJh dG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRlc3R1 dGlsc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJndikgbm9leGNl cHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cnBtX2ltcG9ydGVyX25ldyAoCi0rICAgICAgOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6 U3RyIG9zdHJlZV9icmFuY2gsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxh Z3MgY29uc3QgJmZsYWdzLAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlcj4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JG1heWJlX3NoZWxsX3F1b3RlKDo6cnVzdDo6U3RyIGlucHV0LCA6OnJ1c3Q6OlN0 cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUmVmc3BlYyRvcGVyYXRvciRlcShSZWZzcGVjIGNvbnN0ICYsIFJlZnNwZWMgY29uc3QgJikg bm9leGNlcHQ7Ci0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBs YWNlbWVudCRvcGVyYXRvciRlcShPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYsIE92ZXJyaWRl UmVwbGFjZW1lbnQgY29uc3QgJikgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0t OjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0 b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSAoCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0 cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ldyg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwg OjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyJG9zdHJlZV9icmFuY2ggKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBv cnRlciBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVm aWxlX25ld19lbXB0eSg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHBrZ19uYW1lICg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJp bmcoOjpydXN0OjpTdHIgYnVmLCBib29sIGNsaWVudCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAot LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV9uZXdfY29tcG9zZSg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gs IDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0 OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2Zp bGVzX2luc2VydCAoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnQoOjpydXN0OjpTdHIg ZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19jb250YWlucyAoCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoKSBu b2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0Yyg6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwg OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9v dmVycmlkZXNfaW5zZXJ0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNl bGYsIDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVm aWxlX2RlbGV0ZV9jbGllbnRfZXRjKDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9v dmVycmlkZXNfY29udGFpbnMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpGYXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6 dWludDY0X3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292 ZXJyaWRlc19nZXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAm c2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0gCi0tOjpzdGQ6OmludDMyX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ltYV9lbmFibGVkICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLTo6c3RkOjpp bnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3JvdXBfZmQo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5m byAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJw bW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9qc29uX3N0cmluZyg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19maWxlX2ZpbHRlcmVkICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgsCi0rICAg ICAgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCBib29sICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfb3N0cmVlX2xheWVycyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIGFic19wYXRoLAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUs Ci0rICAgICAgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVy cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYXNfdG1wZmlsZXNfZW50cmllcyAoCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYWxsX29zdHJlZV9sYXll cnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9yZXBvcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG1wZmlsZXNf dHJhbnNsYXRlICgKLSsgICAgICA6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6 OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwKLSsgICAg ICA6OnJ1c3Q6OlN0ciBncm91cG5hbWUsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFj a2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBlbmRfZHJhY3V0X3JhbmRvbV9j cGlvICg6OnN0ZDo6aW50MzJfdCBmZCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlcXVpcmVfYXV0b21hdGlj X3ZlcnNpb25fcHJlZml4KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpy dXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4K LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0 ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlcywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBhbGxv d19leGlzdGluZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2Vw dDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFj a2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsg IHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5f dGFzayAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29s ZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zICg6OnJ1c3Q6OlN0ciBtc2csCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2FsX3BhY2thZ2VzKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpw YWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0r ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2lu X3BlcmNlbnQgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdl cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNr YWdlcywgYm9vbCBhbGxvd19leGlzdGluZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3NldF9zdWJf bWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vz KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpwYWNrYWdlcywgYm9vbCBhbGxvd19ub2VudCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3Vw ZGF0ZSAoOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6 OlN0ciBzdWZmaXgpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkSGlzdG9yeUVudHJ5JG9wZXJhdG9yJGVxIChIaXN0b3J5RW50cnkgY29uc3QgJiwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SGlzdG9yeUVudHJ5IGNvbnN0ICYpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkSGlzdG9yeUVudHJ5JG9wZXJhdG9yJG5lIChIaXN0b3J5RW50cnkgY29uc3Qg JiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGlzdG9yeUVudHJ5IGNvbnN0ICYpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRzaXplb2Yg KCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3Jl cGxhY2UoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5 X2N0eF9uZXcgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4 PiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCAqcmVw bGFjZW1lbnQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkbmV4dF9lbnRyeSAoCi0rICAgICAgOjpycG1vc3Ry ZWVjeHg6Okhpc3RvcnlDdHggJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgKnJl dHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X3BydW5lICgp IG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VG9raW9IYW5kbGUkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25v ZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRva2lvRW50ZXJHdWFyZCRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0 ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3Bl cmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUg KnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0b2tpb19oYW5kbGVfZ2V0ICgpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMp IG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqCi0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkZW50ZXIgKDo6cnBtb3N0cmVlY3h4 OjpUb2tpb0hhbmRsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFj ZV9sb2NhbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2th Z2UpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2NyaXB0 X2lzX2lnbm9yZWQgKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNl X2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkdGVzdHV0aWxzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqYXJndikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9y ZW1vdmUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnBhY2thZ2VzKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JG1heWJlX3NoZWxsX3F1b3RlICg6OnJ1c3Q6OlN0ciBpbnB1dCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0 cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRSZWZzcGVjJG9wZXJhdG9yJGVxIChSZWZzcGVjIGNvbnN0ICYsIFJlZnNwZWMgY29uc3Qg Jikgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRPdmVycmlk ZVJlcGxhY2VtZW50JG9wZXJhdG9yJGVxICgKLSsgICAgICBPdmVycmlkZVJlcGxhY2VtZW50IGNv bnN0ICYsIE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRvcGVyYXRvciRzaXpl b2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRl X3JlbW92ZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2th Z2UpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHRyZWVmaWxlX25ldyAoCi0rICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6 cnVzdDo6U3RyIGJhc2VhcmNoLAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIG5hbWUpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX25ld19lbXB0eSAoCi0rICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9vdmVycmlkZXMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcgKAotKyAgICAg IDo6cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY29tcG9zZSAoCi0rICAgICAgOjpy dXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLAotKyAgICAgIDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9leGNsdWRlX3BhY2th Z2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY2xpZW50ICgKLSsgICAg ICA6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gsCi0rICAgICAgOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BsYXRmb3Jt X21vZHVsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY2xpZW50X2Zyb21fZXRjICgKLSsgICAg ICA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0YyAoOjpzdGQ6OnVpbnQzMl90ICpyZXR1cm4k KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6RmF0Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3dv cmtkaXIgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxl X3JlcG9zKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjppbnQzMl90Ci0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Bhc3N3ZF9mZCAoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6 OkZhdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlZig6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OmludDMy X3QKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3JvdXBfZmQg KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXAoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9qc29uX3N0cmluZyAoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X2NsaXdyYXBfYmluYXJpZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9sYXllcnMgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfY2xpd3JhcCg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnNlbGYsIGJvb2wgZW5hYmxlZCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXJfY21kKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9hbGxfb3N0cmVlX2xheWVycyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5v ZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9yZWFkb25seV9leGVjdXRhYmxlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotKyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9yZXBvcyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRhdGlvbig6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZAotKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlcyAoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfcmVjb21tZW5kcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4ICgKLSsg ICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5n ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfc2VsaW51eCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXMgKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93 X2V4aXN0aW5nLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICBib29sCi0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzICg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLTo6c3RkOjp1aW50MzJf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXhfbGFiZWxf dmVyc2lvbig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0Owot KyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2FsX3Bh Y2thZ2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkYWRkX2xvY2FsX3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJv b2wgYWxsb3dfZXhpc3RpbmcsCi0rICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0t dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192 ZXJzaW9uX3N1ZmZpeCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9w YWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nLAotKyAg ICAgIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9tYWNoaW5laWRfY29tcGF0KDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcyAo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpwYWNrYWdlcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfbm9lbnQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0 OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ldGNf Z3JvdXBfbWVtYmVycyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAg ICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcmV0 dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9pbnN0YWxsKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICBib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVf cmVwbGFjZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCAqcmVwbGFjZW1lbnQpIG5vZXhjZXB0OwotIAot LWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbWEoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3Jl cGxhY2UgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpT dHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X3JlbGVhc2V2ZXIoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZV9sb2NhbCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6 cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9y ZXBsYWNlX2xvY2FsICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMpIG5vZXhjZXB0OwotIAotLTo6cnBt b3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFj ZV9sb2NhbCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6 OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRycG1kYl9iYWNrZW5kX2lzX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoCi0rICAgICAg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHNob3VsZF9ub3JtYWxpemVfcnBtZGIoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJp ZGVfcmVtb3ZlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMpIG5vZXhjZXB0OwotIAotLTo6cnBtb3N0 cmVlY3h4OjpPcHRVc3JMb2NhbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X29wdF91c3Jsb2NhbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVt b3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9maWxlc19yZW1vdmVfcmVnZXgo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdl LCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJy aWRlX3JlbW92ZV9uYW1lICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsIDo6cnVzdDo6U3RyIG5hbWUpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2hlY2tzdW0oOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAg Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9vdmVy cmlkZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJl ZV9yZWYoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRyZW1vdmVfYWxsX3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19wYWNrYWdlcyg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKAotKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRjbGVhcl9yZXBvX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BsYXRmb3JtX21vZHVsZSAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlw cmludF9qc29uX3N0ZG91dCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X2luc3RhbGxfbGFuZ3MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAK LS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9kZXByZWNh dGlvbl93YXJuaW5ncyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0 X2luc3RhbGxfbGFuZ3NfbWFjcm8gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByaW50X2V4cGVyaW1lbnRhbF9u b3RpY2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0r ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9ja2ZpbGVf cmVwb3MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5 Y2hlY2tfZXh0ZXJuYWxzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OkZhdAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9yZWYgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbXBvcnRlcl9mbGFncyg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBub2V4Y2Vw dDsKLSsgIGJvb2wKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf Y2xpd3JhcCAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK LSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkd3JpdGVfcmVwb3ZhcnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4k KSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9jbGl3cmFwX2JpbmFyaWVzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJHNldF9yZWxlYXNldmVyKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwg OjpydXN0OjpTdHIgcmVsZWFzZXZlcikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfY2xpd3JhcCAoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgZW5hYmxlZCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWNvbW1lbmRz KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgYm9vbCB2YWwpIG5vZXhjZXB0OwotKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lcl9j bWQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5hYmxlX3Jl cG8oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciByZXBvKSBub2V4 Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9y ZWFkb25seV9leGVjdXRhYmxlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZGlzYWJsZV9yZXBvKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcmVwbykgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRhdGlvbiAoCi0rICAg ICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk dmFsaWRhdGVfZm9yX2NvbnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3JlY29tbWVuZHMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X2Jhc2VfcmVmc3BlYyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJv b2wKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eCAo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZWJhc2UoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIg Y3VzdG9tX29yaWdpbl91cmwsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24p IG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV91cmwoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6 OnN0ZDo6dWludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9z ZWxpbnV4X2xhYmVsX3ZlcnNpb24gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24oOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3BnX2tl eSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5n ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfb3ZlcnJpZGVfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9u X3N1ZmZpeCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X292ZXJyaWRlX2NvbW1pdCg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKLSsgIGJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXIgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1m c19ldGNfZmlsZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X21hY2hpbmVpZF9jb21wYXQgKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0t Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2luaXRyYW1mc19l dGNfZmlsZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK LSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ldGNfZ3Jv dXBfbWVtYmVycyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmls ZXNfdHJhY2soOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKmZpbGVzKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKAotKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxl c191bnRyYWNrKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpmaWxlcykgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSR1c2Vfa2VybmVsX2luc3RhbGwgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNr X2FsbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OwotKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2ltYSAoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWxlYXNldmVyICg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9pbml0cmFtZnNfYXJncyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYs IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJw bW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQgKAotKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3Jp ZXNNZXRhZGF0YVRhcmdldAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBtZGJf YmFja2VuZF9pc190YXJnZXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHNob3VsZF9ub3JtYWxpemVfcnBtZGIgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2FueV9wYWNrYWdlcyg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6 Ok9wdFVzckxvY2FsIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3B0 X3VzcmxvY2FsICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRtZXJnZV90cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg JnNlbGYsIDo6cnVzdDo6U3RyIHRyZWVmaWxlLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsg IHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9maWxlc19yZW1v dmVfcmVnZXggKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwg OjpydXN0OjpTdHIgcGFja2FnZSwKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9ub19pbml0cmFtZnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGln bm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jaGVja3N1bSAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpGYXQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9yZXBvKDo6cnBtb3N0 cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX3JlZiAoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4k KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFj a2FnZSRnZXRfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpy dXN0OjpyZXByOjpGYXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9y ZXBvX3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCR2YXJzdWJzdGl0dXRlKDo6cnVzdDo6U3RyIHMsIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmdmFycywgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkY2xlYXJfcmVwb19wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRnZXRfZmVhdHVyZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByZXR0 eXByaW50X2pzb25fc3Rkb3V0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGdldF9ycG1fYmFzZWFyY2goOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRp b25fd2FybmluZ3MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHNlYWxlZF9tZW1mZCg6OnJ1c3Q6OlN0ciBkZXNjcmlwdGlvbiwgOjpydXN0OjpT bGljZTw6OnN0ZDo6dWludDhfdCBjb25zdD4gY29udGVudCwgOjpzdGQ6OmludDMyX3QgKnJldHVy biQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcnVubmluZ19pbl9zeXN0ZW1kKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hl Y2tfZXh0ZXJuYWxzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZmKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0 ciBjaGVja3N1bV90bywgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9leGNl cHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAqCi0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW1wb3J0ZXJfZmxhZ3MgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcGtnX25hbWUpIG5vZXhjZXB0Owot IAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9v c3RyZWUoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0 OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSR3cml0ZV9yZXBvdmFycyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZ2V0X2xpdmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50 IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUgKnJldHVy biQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVsZWFzZXZlciAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciByZWxlYXNldmVyKSBub2V4Y2VwdDsKLSAKLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGFzX2xpdmVfYXBw bHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCBib29sICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X3JlY29tbWVuZHMgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCB2YWwpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRlbmFibGVfcmVwbyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0 ciByZXBvKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0 ICZ0YXJnZXQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRkaXNhYmxlX3JlcG8gKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHJlcG8pIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVfZXRjX3No YWRvdyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR2YWxpZGF0ZV9m b3JfY29udGFpbmVyICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRwcmVwYXJlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6 c3RkOjppbnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0Owot KyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9iYXNl X3JlZnNwZWMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6UmVmc3BlYyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBsZXRlX3JwbV9sYXllcmluZyg6 OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmViYXNlICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnVzdDo6U3RyIG5ld19yZWZzcGVjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlZHVwbGljYXRlX3RtcGZp bGVzX2VudHJpZXMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKLSsgIHZvaWQKLSsg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV91 cmwgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6 U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NsZWFudXAoOjpzdGQ6OmludDMyX3Qgcm9v dGZzKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uICgKLSsgICAgICA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk bWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmcHJlc2VydmVkX2dyb3Vwcykgbm9leGNlcHQ7Ci0r ICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X292ZXJy aWRlX2NvbW1pdCAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3Qo OjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9vdmVycmlkZV9jb21taXQgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cGFzc3dkX2NvbXBvc2VfcHJlcCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvKDo6c3RkOjpp bnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHByZXZpb3VzX2No ZWNrc3VtLCBib29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAoCi0rICAg ICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRh aW5zX3VpZCg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkLCBib29sICpy ZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2sgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpmaWxlcykgbm9l eGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGRpcl9jb250YWluc19naWQoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJf dCBpZCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2sgKAotKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpmaWxlcykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlv dXNfcmV2KSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZGRiX29wZW4oOjpzdGQ6OmludDMy X3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+ICpyZXR1cm4k KSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YXNzd2REQiRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNl cHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5p dHJhbWZzX3JlZ2VuZXJhdGUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF91c2VyKDo6cnBtb3N0cmVlY3h4OjpQYXNz d2REQiBjb25zdCAmc2VsZiwgOjpzdGQ6OnVpbnQzMl90IHVpZCwgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2luaXRyYW1mc19hcmdzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhc3N3ZERCJGxvb2t1cF9ncm91cCg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgY29uc3Qg JnNlbGYsIDo6c3RkOjp1aW50MzJfdCBnaWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9p bml0cmFtZnNfcmVnZW5lcmF0ZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZz ZWxmLCBib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9l eGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRuZXdfcGFzc3dkX2VudHJpZXMoKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJHNp emVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhc3N3ZEVudHJpZXMkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAgdm9pZAot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF91bmNvbmZpZ3VyZWRf c3RhdGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX2dyb3VwX2NvbnRl bnQoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90IHJv b3RmcywgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSAoCi0rICAg ICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50 cmllcyRhZGRfcGFzc3dkX2NvbnRlbnQoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgJnNl bGYsIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0r ICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfYW55X3BhY2th Z2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMk Y29udGFpbnNfZ3JvdXAoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYs IDo6cnVzdDo6U3RyIHVzZXIpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1lcmdlX3RyZWVmaWxlICgKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHRyZWVmaWxlLCBi b29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRQYXNzd2RFbnRyaWVzJGNvbnRhaW5zX3VzZXIoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVu dHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIpIG5vZXhjZXB0OwotKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X25vX2luaXRyYW1mcyAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsg IDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9w ZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBh c3N3ZEVudHJpZXMkbG9va3VwX3VzZXJfaWQoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMg Y29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIsIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OkZhdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUmVwb1BhY2thZ2UkZ2V0X3JlcG8gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFj a2FnZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX2dyb3VwX2lkKDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBncm91 cCwgOjpzdGQ6OnVpbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNpemVvZigpIG5v ZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVu c2lvbnMkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGV4dGVuc2lvbnNfbG9hZCg6OnJ1c3Q6OlN0ciBwYXRoLCA6 OnJ1c3Q6OlN0ciBiYXNlYXJjaCwgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01h cHBpbmc+IGNvbnN0ICZiYXNlX3BrZ3MsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRl bnNpb25zPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRnZXRfcmVwb3NfZGlycyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRl bnNpb25zJGdldF9yZXBvcyg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vic3Rp dHV0ZSAoOjpydXN0OjpTdHIgcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29u c3QgJnZhcnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcyg6OnJw bW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGdldF9mZWF0dXJlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4k KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNp b25zJGdldF9kZXZlbG9wbWVudF9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBj b25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9ycG1fYmFzZWFyY2gg KDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzdGF0ZV9jaGVja3N1 bV9jaGFuZ2VkKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIsIGJvb2wgKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRzZWFsZWRfbWVtZmQgKDo6cnVzdDo6U3RyIGRlc2NyaXB0aW9uLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTbGljZTw6OnN0ZDo6dWlu dDhfdCBjb25zdD4gY29udGVudCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyR1cGRh dGVfc3RhdGVfY2hlY2tzdW0oOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYs IDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2Rpcikgbm9leGNlcHQ7Ci0r ICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX3N5c3RlbWQgKCkg bm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEV4dGVuc2lvbnMkc2VyaWFsaXplX3RvX2Rpcig6OnJwbW9zdHJlZWN4eDo6RXh0ZW5z aW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgb3V0cHV0X2Rpcikgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FsY3VsYXRl X2Fkdmlzb3JpZXNfZGlmZiAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sIDo6cnVzdDo6U3RyIGNoZWNrc3VtX2Zyb20sIDo6cnVzdDo6U3RyIGNoZWNrc3Vt X3RvLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRF eHRlbnNpb25zJGdlbmVyYXRlX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNv bnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYywgOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tOjpzdGQ6 OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0 b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJl ZSAoOjpydXN0OjpTdHIgcGF0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkbG9ja2ZpbGVfcmVhZCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVu YW1lcywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPiAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZ2V0X2xpdmVfYXBwbHlfc3RhdGUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpM aXZlQXBwbHlTdGF0ZSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3dyaXRlKDo6cnVzdDo6U3Ry IGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywgOjpy cG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVwb3MpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZl X2FwcGx5X3N0YXRlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25z dCAmZGVwbG95bWVudCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJGdldF9s b2NrZWRfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gKnJldHVybiQpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGFwcGx5bGl2ZV9zeW5jX3JlZiAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUoOjpycG1vc3Ry ZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZiwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoCi0rICAgICAg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19v cmlnaW4oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0ZiwgOjpycG1vc3RyZWVjeHg6 OkdLZXlGaWxlICoqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5vcm1hbGl6ZV9ldGNfc2hhZG93ICg6OnN0 ZDo6aW50MzJfdCByb290ZnNfZGZkKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwKDo6cnBtb3N0cmVlY3h4OjpH S2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfcnBtX2xheWVyaW5nICgKLSsgICAgICA6 OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6c3RkOjppbnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIsIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNhY2hlX2JyYW5jaF90b19uZXZyYSg6OnJ1c3Q6OlN0ciBuZXZyYSwgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6c3RkOjppbnQz Ml90IHJvb3Rmcykgbm9leGNlcHQ7Ci0gCi0tOjpzdGQ6OnVpbnQzMl90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRDeHhHT2JqZWN0QXJyYXkkbGVuZ3RoKDo6cnBtb3N0cmVlY3h4OjpDeHhH T2JqZWN0QXJyYXkgJnNlbGYpIG5vZXhjZXB0IHsKLS0gIDo6c3RkOjp1aW50MzJfdCAoOjpycG1v c3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6Kmxlbmd0aCQpKCkgPSAmOjpycG1vc3RyZWVjeHg6 OkN4eEdPYmplY3RBcnJheTo6bGVuZ3RoOwotLSAgcmV0dXJuIChzZWxmLipsZW5ndGgkKSgpOwot LX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBu b2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDeHhHT2JqZWN0 QXJyYXkkZ2V0KDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnNlbGYsIDo6c3RkOjp1 aW50MzJfdCBpLCA6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAqKnJldHVybiQpIG5vZXhjZXB0IHsK LS0gIDo6cnBtb3N0cmVlY3h4OjpHT2JqZWN0ICYoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RB cnJheTo6KmdldCQpKDo6c3RkOjp1aW50MzJfdCkgPSAmOjpycG1vc3RyZWVjeHg6OkN4eEdPYmpl Y3RBcnJheTo6Z2V0OwotLSAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAq KCYoc2VsZi4qZ2V0JCkoaSkpOwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY2xlYW51cCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdXRpbF9uZXh0X3ZlcnNpb24oOjpydXN0OjpTdHIgYXV0b192ZXJzaW9uX3ByZWZp eCwgOjpydXN0OjpTdHIgdmVyc2lvbl9zdWZmaXgsIDo6cnVzdDo6U3RyIGxhc3RfdmVyc2lvbiwg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6U3RyaW5nICgq dXRpbF9uZXh0X3ZlcnNpb24kKSg6OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIsIDo6cnVzdDo6U3Ry KSA9IDo6cnBtb3N0cmVlY3h4Ojp1dGlsX25leHRfdmVyc2lvbjsKLS0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHRocm93JDsKLS0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAotLSAgICAgIFsm XSB7Ci0tICAgICAgICBuZXcgKHJldHVybiQpIDo6cnVzdDo6U3RyaW5nKHV0aWxfbmV4dF92ZXJz aW9uJChhdXRvX3ZlcnNpb25fcHJlZml4LCB2ZXJzaW9uX3N1ZmZpeCwgbGFzdF92ZXJzaW9uKSk7 Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVz dDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9ncm91 cF9leGNlcHRfcm9vdCAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJnByZXNlcnZlZF9ncm91cHMpIG5vZXhjZXB0OwotIAot LTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbF92YWxp ZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm cmVwbykgbm9leGNlcHQgewotLSAgOjpzdGQ6OmludDMyX3QgKCp0ZXN0dXRpbF92YWxpZGF0ZV9j eHhyc19wYXNzdGhyb3VnaCQpKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYpID0g OjpycG1vc3RyZWVjeHg6OnRlc3R1dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoOwotLSAg cmV0dXJuIHRlc3R1dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoJChyZXBvKTsKLS19Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1p Z3JhdGVfcGFzc3dkX2V4Y2VwdF9yb290ICg6OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhjZXB0 OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGVhcmx5X21haW4oKSBub2V4 Y2VwdCB7Ci0tICB2b2lkICgqZWFybHlfbWFpbiQpKCkgPSA6OnJwbW9zdHJlZWN4eDo6ZWFybHlf bWFpbjsKLS0gIGVhcmx5X21haW4kKCk7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwICg6OnN0ZDo6 aW50MzJfdCByb290ZnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJw bW9zdHJlZV9tYWluKDo6cnVzdDo6U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+IGFyZ3MsIDo6c3Rk OjppbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6aW50MzJfdCAoKnJwbW9z dHJlZV9tYWluJCkoOjpydXN0OjpTbGljZTw6OnJ1c3Q6OlN0ciBjb25zdD4pID0gOjpycG1vc3Ry ZWVjeHg6OnJwbW9zdHJlZV9tYWluOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwot LSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZdIHsKLS0gICAgICAgIG5l dyAocmV0dXJuJCkgOjpzdGQ6OmludDMyX3QocnBtb3N0cmVlX21haW4kKGFyZ3MpKTsKLS0gICAg ICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAgIH0sCi0tICAgICAgOjpydXN0OjpkZXRh aWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhyb3ckOwotLX0KLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVw X3JlcG8gKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZ0cmVlZmlsZSwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmcmVwbywgOjpydXN0OjpTdHIgcHJldmlvdXNfY2hlY2tzdW0sCi0rICAgICAgYm9vbCB1bmlm aWVkX2NvcmUpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93bigpIG5vZXhjZXB0IHsKLS0gIHZvaWQg KCpycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd24kKSgpID0gOjpycG1vc3RyZWVjeHg6 OnJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93bjsKLS0gIHJwbW9zdHJlZV9wcm9jZXNz X2dsb2JhbF90ZWFyZG93biQoKTsKLS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5zX3VpZCAoOjpzdGQ6OmludDMyX3QgZGly ZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpzdGQ6OnVpbnQzMl90IGlkLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg KnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjX3VuaXRfdGVzdHMoKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgqY191 bml0X3Rlc3RzJCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpjX3VuaXRfdGVzdHM7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0g ICAgICBbJl0gewotLSAgICAgICAgY191bml0X3Rlc3RzJCgpOwotLSAgICAgICAgdGhyb3ckLnB0 ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJv dyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc19naWQgKDo6c3RkOjppbnQzMl90 IGRpcmZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50MzJfdCBpZCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X3JlcXVpcmVfcm9vdCgpIG5vZXhjZXB0IHsKLS0g IHZvaWQgKCpjbGllbnRfcmVxdWlyZV9yb290JCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpjbGllbnRf cmVxdWlyZV9yb290OwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0 OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZdIHsKLS0gICAgICAgIGNsaWVudF9yZXF1 aXJlX3Jvb3QkKCk7Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAot LSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsK LS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBwcmV2aW91 c19yZXYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRuZXdfY2xpZW50X2Nvbm5lY3Rpb24oOjpycG1vc3RyZWVjeHg6OkNsaWVu dENvbm5lY3Rpb24gKipyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKCpuZXdfY2xpZW50X2Nvbm5lY3Rpb24k KSgpID0gOjpycG1vc3RyZWVjeHg6Om5ld19jbGllbnRfY29ubmVjdGlvbjsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHRocm93JDsKLS0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAotLSAg ICAgIFsmXSB7Ci0tICAgICAgICBuZXcgKHJldHVybiQpIDo6cnBtb3N0cmVlY3h4OjpDbGllbnRD b25uZWN0aW9uICoobmV3X2NsaWVudF9jb25uZWN0aW9uJCgpLnJlbGVhc2UoKSk7Ci0tICAgICAg ICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0YWls OjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkZGJfb3BlbiAoCi0rICAg ICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREI+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsg IDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJh dG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkdEQnVzQ29ubmVj dGlvbiBjb25zdCAqcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JENsaWVudENvbm5lY3Rpb24k Z2V0X2Nvbm5lY3Rpb24oOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gJnNlbGYpIG5v ZXhjZXB0IHsKLS0gIDo6cnBtb3N0cmVlY3h4OjpHREJ1c0Nvbm5lY3Rpb24gY29uc3QgJig6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6KmdldF9jb25uZWN0aW9uJCkoKSA9ICY6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6Z2V0X2Nvbm5lY3Rpb247Ci0tICByZXR1cm4g JihzZWxmLipnZXRfY29ubmVjdGlvbiQpKCk7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF91c2VyICgKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgY29uc3QgJnNlbGYsIDo6c3RkOjp1aW50MzJfdCB1 aWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ2xpZW50Q29ubmVjdGlvbiR0cmFu c2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmMoOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24gY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIGFkZHJlc3MpIG5vZXhjZXB0IHsKLS0gIHZv aWQgKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjoqdHJhbnNhY3Rpb25fY29ubmVj dF9wcm9ncmVzc19zeW5jJCkoOjpydXN0OjpTdHIpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uOjp0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmM7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRj aCgKLS0gICAgICBbJl0gewotLSAgICAgICAgKHNlbGYuKnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJv Z3Jlc3Nfc3luYyQpKGFkZHJlc3MpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0t ICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVy biB0aHJvdyQ7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF9ncm91cCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OlBhc3N3ZERCIGNvbnN0ICZzZWxmLCA6OnN0ZDo6dWludDMyX3QgZ2lkLCA6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpzdGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJQTURpZmYkbl9yZW1vdmVkKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmIGNv bnN0ICZzZWxmKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6 OlJQTURpZmY6OipuX3JlbW92ZWQkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZm OjpuX3JlbW92ZWQ7Ci0tICByZXR1cm4gKHNlbGYuKm5fcmVtb3ZlZCQpKCk7Ci0tfQotLQotLTo6 c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fYWRkZWQo OjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0IHsKLS0gIDo6c3Rk OjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6Km5fYWRkZWQkKSgpIGNvbnN0ID0g Jjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX2FkZGVkOwotLSAgcmV0dXJuIChzZWxmLipuX2Fk ZGVkJCkoKTsKLS19Ci0tCi0tOjpzdGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJQTURpZmYkbl9tb2RpZmllZCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2Vs Zikgbm9leGNlcHQgewotLSAgOjpzdGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZm Ojoqbl9tb2RpZmllZCQpKCkgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6Om5fbW9k aWZpZWQ7Ci0tICByZXR1cm4gKHNlbGYuKm5fbW9kaWZpZWQkKSgpOwotLX0KLS0KLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtZGJfZGlmZig6OnJw bW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpzdGQ6OnN0cmluZyBjb25zdCAm c3JjLCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICZkZXN0LCBib29sIGFsbG93X25vZW50LCA6OnJwbW9z dHJlZWN4eDo6UlBNRGlmZiAqKnJldHVybiQpIG5vZXhjZXB0IHsKLS0gIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAoKnJwbWRiX2RpZmYkKSg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmLCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICYsIDo6c3RkOjpzdHJp bmcgY29uc3QgJiwgYm9vbCkgPSA6OnJwbW9zdHJlZWN4eDo6cnBtZGJfZGlmZjsKLS0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLS0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAot LSAgICAgIFsmXSB7Ci0tICAgICAgICBuZXcgKHJldHVybiQpIDo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmICoocnBtZGJfZGlmZiQocmVwbywgc3JjLCBkZXN0LCBhbGxvd19ub2VudCkucmVsZWFzZSgp KTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAgIH0sCi0tICAgICAgOjpy dXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhyb3ckOwotLX0KLSsgIDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk bmV3X3Bhc3N3ZF9lbnRyaWVzICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YgKCkgbm9l eGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNz d2RFbnRyaWVzJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRwcmludCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlm ZiBjb25zdCAmc2VsZikgbm9leGNlcHQgewotLSAgdm9pZCAoOjpycG1vc3RyZWVjeHg6OlJQTURp ZmY6OipwcmludCQpKCkgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OnByaW50Owot LSAgKHNlbGYuKnByaW50JCkoKTsKLS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRhZGRfZ3JvdXBfY29udGVudCAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoKDo6 cnVzdDo6U3RyIHN5c3Jvb3RfcGF0aCwgOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQcmlu dEZvcm1hdCBmb3JtYXQsIDo6c3RkOjp1aW50MzJfdCBtYXhfa2V5X2xlbiwgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpIG5vZXhjZXB0IHsKLS0gIHZvaWQgKCpwcmlu dF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGgkKSg6OnJ1c3Q6OlN0ciwgOjpycG1vc3Ry ZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdCwgOjpzdGQ6OnVpbnQzMl90LCA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlICopID0gOjpycG1vc3RyZWVjeHg6OnByaW50X3RyZWVwa2df ZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aDsKLS0gIHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jv b3RfcGF0aCQoc3lzcm9vdF9wYXRoLCBmb3JtYXQsIG1heF9rZXlfbGVuLCBjYW5jZWxsYWJsZSk7 Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFBhc3N3ZEVudHJpZXMkYWRkX3Bhc3N3ZF9jb250ZW50ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4 eDo6UGFzc3dkRW50cmllcyAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0 ciBwYXRoKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgKnJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6U3RyIG1zZykg bm9leGNlcHQgewotLSAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNz PiAoKnByb2dyZXNzX2JlZ2luX3Rhc2skKSg6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6 cHJvZ3Jlc3NfYmVnaW5fdGFzazsKLS0gIHJldHVybiBwcm9ncmVzc19iZWdpbl90YXNrJChtc2cp LnJlbGVhc2UoKTsKLS19Ci0tCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJv Z3Jlc3MkZW5kKDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcyAmc2VsZiwgOjpydXN0OjpTdHIgbXNn KSBub2V4Y2VwdCB7Ci0tICB2b2lkICg6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M6OiplbmQkKSg6 OnJ1c3Q6OlN0cikgPSAmOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzOjplbmQ7Ci0tICAoc2VsZi4q ZW5kJCkobXNnKTsKLS19Ci0tCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3V0 cHV0X21lc3NhZ2UoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgqb3V0cHV0 X21lc3NhZ2UkKSg6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6b3V0cHV0X21lc3NhZ2U7 Ci0tICBvdXRwdXRfbWVzc2FnZSQobXNnKTsKLS19Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5ldnJhX3RvX2NhY2hlX2JyYW5jaCg6OnN0ZDo6 c3RyaW5nIGNvbnN0ICZuZXZyYSwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0IHsK LS0gIDo6cnVzdDo6U3RyaW5nICgqbmV2cmFfdG9fY2FjaGVfYnJhbmNoJCkoOjpzdGQ6OnN0cmlu ZyBjb25zdCAmKSA9IDo6cnBtb3N0cmVlY3h4OjpuZXZyYV90b19jYWNoZV9icmFuY2g7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRj aCgKLS0gICAgICBbJl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cmluZyhu ZXZyYV90b19jYWNoZV9icmFuY2gkKG5ldnJhKSk7Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVs bHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwot LSAgcmV0dXJuIHRocm93JDsKLS19Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGdldF9yZXBvZGF0YV9jaGtzdW1fcmVwcig6OmRuZmN4eDo6RkZJ RG5mUGFja2FnZSAmcGtnLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQgewotLSAg OjpydXN0OjpTdHJpbmcgKCpnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIkKSg6OmRuZmN4eDo6RkZJ RG5mUGFja2FnZSAmKSA9IDo6cnBtb3N0cmVlY3h4OjpnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHI7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0 cnljYXRjaCgKLS0gICAgICBbJl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0 cmluZyhnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIkKHBrZykpOwotLSAgICAgICAgdGhyb3ckLnB0 ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJv dyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc19ncm91cCAoCi0rICAgICAgOjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIpIG5vZXhj ZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRycG10c19mb3JfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LCA6OnJ1c3Q6OlN0ciByZXYsIDo6cnBtb3N0cmVlY3h4OjpScG1UcyAqKnJldHVybiQpIG5vZXhj ZXB0IHsKLS0gIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKCpycG10 c19mb3JfY29tbWl0JCkoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpydXN0 OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6OnJwbXRzX2Zvcl9jb21taXQ7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAg ICBbJl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6UnBtVHMgKihy cG10c19mb3JfY29tbWl0JChyZXBvLCByZXYpLnJlbGVhc2UoKSk7Ci0tICAgICAgICB0aHJvdyQu cHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRo cm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGNvbnRhaW5zX3VzZXIgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4 Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcnBtZGJfcGFja2FnZV9uYW1lX2xpc3QoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJ1c3Q6OlN0 cmluZyBjb25zdCAqcGF0aCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBu b2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKCpycG1kYl9wYWNrYWdl X25hbWVfbGlzdCQpKDo6c3RkOjppbnQzMl90LCA6OnJ1c3Q6OlN0cmluZykgPSA6OnJwbW9zdHJl ZWN4eDo6cnBtZGJfcGFja2FnZV9uYW1lX2xpc3Q7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAgICBbJl0gewotLSAg ICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4ocnBtZGJfcGFj a2FnZV9uYW1lX2xpc3QkKGRmZCwgOjpydXN0OjpTdHJpbmcoOjpydXN0Ojp1bnNhZmVfYml0Y29w eSwgKnBhdGgpKSk7Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAot LSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsK LS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UGFzc3dkRW50cmllcyRsb29rdXBfdXNlcl9pZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlBh c3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIsCi0rICAgICAgOjpzdGQ6 OnVpbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF9ncm91cF9p ZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyIGdyb3VwLAotKyAgICAgIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNp b25zJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4 Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRleHRlbnNpb25zX2xvYWQgKAotKyAgICAgIDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6 U3RyIGJhc2VhcmNoLAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdN YXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzLAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbVRzJHBhY2thZ2VfbWV0YSg6OnJw bW9zdHJlZWN4eDo6UnBtVHMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIG5hbWUsIDo6cnVzdDo6 U3RyIGFyY2gsIDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSAqKnJldHVybiQpIG5vZXhjZXB0 IHsKLS0gIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKDo6 cnBtb3N0cmVlY3h4OjpScG1Uczo6KnBhY2thZ2VfbWV0YSQpKDo6cnVzdDo6U3RyLCA6OnJ1c3Q6 OlN0cikgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlJwbVRzOjpwYWNrYWdlX21ldGE7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRj aCgKLS0gICAgICBbJl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6 UGFja2FnZU1ldGEgKigoc2VsZi4qcGFja2FnZV9tZXRhJCkobmFtZSwgYXJjaCkucmVsZWFzZSgp KTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAgIH0sCi0tICAgICAgOjpy dXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhyb3ckOwotLX0KLS0KLS06 OnN0ZDo6dWludDY0X3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNp emUoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmKSBub2V4Y2VwdCB7Ci0t ICA6OnN0ZDo6dWludDY0X3QgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnNpemUkKSgp IGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6c2l6ZTsKLS0gIHJldHVybiAo c2VsZi4qc2l6ZSQpKCk7Ci0tfQotLQotLTo6c3RkOjp1aW50NjRfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkYnVpbGR0aW1lKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YSBjb25zdCAmc2VsZikgbm9leGNlcHQgewotLSAgOjpzdGQ6OnVpbnQ2NF90ICg6OnJwbW9z dHJlZWN4eDo6UGFja2FnZU1ldGE6OipidWlsZHRpbWUkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YTo6YnVpbGR0aW1lOwotLSAgcmV0dXJuIChzZWxmLipidWlsZHRpbWUk KSgpOwotLX0KLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNp b25zJGdldF9yZXBvcyAoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rCi0rICB2b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFj a2FnZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJGNoYW5nZWxvZ3MoOjpycG1v c3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWlu dDY0X3Q+ICpyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0 X3Q+ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipjaGFuZ2Vsb2dzJCkoKSBjb25zdCA9 ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OmNoYW5nZWxvZ3M7Ci0tICBuZXcgKHJldHVy biQpIDo6cnVzdDo6VmVjPDo6c3RkOjp1aW50NjRfdD4oKHNlbGYuKmNoYW5nZWxvZ3MkKSgpKTsK LS19Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9k ZXZlbG9wbWVudF9wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMg Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkc3Jj X3BrZyg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3Ry ICpyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OlN0ciAoOjpycG1vc3RyZWVjeHg6OlBh Y2thZ2VNZXRhOjoqc3JjX3BrZyQpKCkgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhOjpzcmNfcGtnOwotLSAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cigoc2VsZi4qc3JjX3Br ZyQpKCkpOwotLX0KLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUGFja2FnZU1ldGEkcHJvdmlkZWRfcGF0aHMoOjpycG1vc3RyZWVjeHg6OlBhY2th Z2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQp IG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAoOjpycG1vc3RyZWVj eHg6OlBhY2thZ2VNZXRhOjoqcHJvdmlkZWRfcGF0aHMkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YTo6cHJvdmlkZWRfcGF0aHM7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAgICBbJl0gewot LSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4oKHNlbGYu KnByb3ZpZGVkX3BhdGhzJCkoKSk7Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0g ICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJu IHRocm93JDsKLS19Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJldiwgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFu dCAqKnJldHVybiQpIG5vZXhjZXB0IHsKLS0gIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKCpw YWNrYWdlX3ZhcmlhbnRfbGlzdF9mb3JfY29tbWl0JCkoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJl cG8gY29uc3QgJiwgOjpydXN0OjpTdHIsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29u c3QgJikgPSA6OnJwbW9zdHJlZWN4eDo6cGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdDsK LS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLS0gIDo6cnVzdDo6YmVoYXZpb3I6OnRy eWNhdGNoKAotLSAgICAgIFsmXSB7Ci0tICAgICAgICBuZXcgKHJldHVybiQpIDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudCAqKHBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQkKHJlcG8sIHJl diwgY2FuY2VsbGFibGUpKTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAg IH0sCi0tICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhy b3ckOwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVz dDo6U3RyIG91dHB1dF9kaXIsCi0rICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rCi0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5z aW9ucyR1cGRhdGVfc3RhdGVfY2hlY2tzdW0gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRl bnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1 dF9kaXIpIG5vZXhjZXB0OwotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHNlcmlhbGl6ZV90b19kaXIgKDo6cnBtb3N0 cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgb3V0cHV0X2Rp cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZW5lcmF0ZV90cmVlZmlsZSAoCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc3JjLAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0Owot KyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25m aWckb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV9yZWFkICgKLSsgICAgICA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcywKLSsgICAgICA6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+ICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRsb2NrZmlsZV93cml0ZSAoCi0rICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnBtb3N0 cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnBhY2thZ2VzLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpDeHhHT2JqZWN0QXJyYXkgJnJwbW1kX3JlcG9zKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRn ZXRfbG9ja2VkX3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25m aWcgY29uc3QgJnNlbGYsCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUgKAotKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YsIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKwotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19vcmln aW4gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0tleUZp bGUgKipyZXR1cm4kKSBub2V4Y2VwdDsKLSsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JG9yaWdpbl92YWxpZGF0ZV9yb3VuZHRyaXAgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0OwotKwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY2FjaGVfYnJhbmNoX3RvX25ldnJhICg6OnJ1c3Q6OlN0ciBuZXZyYSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKwotKyAgOjpzdGQ6OnVpbnQz Ml90Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGxlbmd0 aCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmc2VsZikgbm9leGNl cHQKLSsgIHsKLSsgICAgOjpzdGQ6OnVpbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVj dEFycmF5OjoqbGVuZ3RoJCkgKCkKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2Jq ZWN0QXJyYXk6Omxlbmd0aDsKLSsgICAgcmV0dXJuIChzZWxmLipsZW5ndGgkKSAoKTsKLSsgIH0K LSsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDeHhHT2JqZWN0QXJy YXkkZ2V0ICg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZzZWxmLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50MzJf dCBpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnBtb3N0cmVlY3h4OjpHT2JqZWN0ICoqcmV0dXJuJCkgbm9leGNlcHQKLSsgIHsKLSsgICAg OjpycG1vc3RyZWVjeHg6OkdPYmplY3QgJig6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5 OjoqZ2V0JCkgKDo6c3RkOjp1aW50MzJfdCkKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpD eHhHT2JqZWN0QXJyYXk6OmdldDsKLSsgICAgbmV3IChyZXR1cm4kKTo6cnBtb3N0cmVlY3h4OjpH T2JqZWN0ICooJihzZWxmLipnZXQkKSAoaSkpOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1dGlsX25leHRfdmVyc2lvbiAo OjpydXN0OjpTdHIgYXV0b192ZXJzaW9uX3ByZWZpeCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgdmVyc2lvbl9zdWZmaXgsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6 U3RyIGxhc3RfdmVyc2lvbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0Ci0rICB7Ci0rICAg IDo6cnVzdDo6U3RyaW5nICgqdXRpbF9uZXh0X3ZlcnNpb24kKSAoOjpydXN0OjpTdHIsIDo6cnVz dDo6U3RyLCA6OnJ1c3Q6OlN0cikKLSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnV0aWxfbmV4 dF92ZXJzaW9uOwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0rICAgIDo6cnVz dDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQotKyAgICAgICAgICB7Ci0rICAg ICAgICAgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6U3RyaW5nICgKLSsgICAgICAgICAgICAgICAg dXRpbF9uZXh0X3ZlcnNpb24kIChhdXRvX3ZlcnNpb25fcHJlZml4LCB2ZXJzaW9uX3N1ZmZpeCwg bGFzdF92ZXJzaW9uKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAg ICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAg IHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnN0ZDo6aW50MzJfdAotKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHRlc3R1dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgbm9leGNlcHQK LSsgIHsKLSsgICAgOjpzdGQ6OmludDMyX3QgKCp0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNz dGhyb3VnaCQpICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmKQotKyAgICAgICAg PSA6OnJwbW9zdHJlZWN4eDo6dGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2g7Ci0r ICAgIHJldHVybiB0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCQgKHJlcG8pOwot KyAgfQotKwotKyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGVhcmx5X21h aW4gKCkgbm9leGNlcHQKLSsgIHsKLSsgICAgdm9pZCAoKmVhcmx5X21haW4kKSAoKSA9IDo6cnBt b3N0cmVlY3h4OjplYXJseV9tYWluOwotKyAgICBlYXJseV9tYWluJCAoKTsKLSsgIH0KLSsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBt b3N0cmVlX21haW4gKDo6cnVzdDo6U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+IGFyZ3MsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90 ICpyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnN0ZDo6aW50MzJfdCAoKnJwbW9zdHJl ZV9tYWluJCkgKDo6cnVzdDo6U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+KQotKyAgICAgICAgPSA6 OnJwbW9zdHJlZWN4eDo6cnBtb3N0cmVlX21haW47Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHRocm93JDsKLSsgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZd Ci0rICAgICAgICAgIHsKLSsgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpzdGQ6OmludDMyX3Qg KHJwbW9zdHJlZV9tYWluJCAoYXJncykpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxs cHRyOwotKyAgICAgICAgICB9LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93 JCkpOwotKyAgICByZXR1cm4gdGhyb3ckOwotKyAgfQotKwotKyAgdm9pZAotKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biAoKSBu b2V4Y2VwdAotKyAgewotKyAgICB2b2lkICgqcnBtb3N0cmVlX3Byb2Nlc3NfZ2xvYmFsX3RlYXJk b3duJCkgKCkKLSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnJwbW9zdHJlZV9wcm9jZXNzX2ds b2JhbF90ZWFyZG93bjsKLSsgICAgcnBtb3N0cmVlX3Byb2Nlc3NfZ2xvYmFsX3RlYXJkb3duJCAo KTsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY191bml0X3Rlc3RzICgpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHZvaWQgKCpj X3VuaXRfdGVzdHMkKSAoKSA9IDo6cnBtb3N0cmVlY3h4OjpjX3VuaXRfdGVzdHM7Ci0rICAgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0 Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsgICAgICAgICAgICBjX3VuaXRfdGVz dHMkICgpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9 LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4g dGhyb3ckOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVxdWlyZV9yb290ICgpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIHZvaWQgKCpjbGllbnRfcmVxdWlyZV9yb290JCkgKCkgPSA6OnJwbW9zdHJlZWN4eDo6Y2xp ZW50X3JlcXVpcmVfcm9vdDsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAg ICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAg ewotKyAgICAgICAgICAgIGNsaWVudF9yZXF1aXJlX3Jvb3QkICgpOwotKyAgICAgICAgICAgIHRo cm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9LAotKyAgICAgICAgOjpydXN0OjpkZXRh aWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4gdGhyb3ckOwotKyAgfQotKwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfY2xp ZW50X2Nvbm5lY3Rpb24gKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9u ICoqcmV0dXJuJCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICgqbmV3X2NsaWVudF9jb25uZWN0aW9uJCkgKCkK LSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6Om5ld19jbGllbnRfY29ubmVjdGlvbjsKLSsgICAg OjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnlj YXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewotKyAgICAgICAgICAgIG5ldyAocmV0 dXJuJCk6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbiAqKG5ld19jbGllbnRfY29ubmVj dGlvbiQgKCkucmVsZWFzZSAoKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7 Ci0rICAgICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7 Ci0rICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6R0RCdXND b25uZWN0aW9uIGNvbnN0ICoKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDbGllbnRD b25uZWN0aW9uJGdldF9jb25uZWN0aW9uICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50 Q29ubmVjdGlvbiAmc2VsZikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpycG1vc3RyZWVjeHg6OkdE QnVzQ29ubmVjdGlvbiBjb25zdCAmKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjoq Z2V0X2Nvbm5lY3Rpb24kKSAoKQotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb246OmdldF9jb25uZWN0aW9uOwotKyAgICByZXR1cm4gJihzZWxmLipnZXRfY29ubmVj dGlvbiQpICgpOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRDbGllbnRDb25uZWN0aW9uJHRyYW5zYWN0aW9uX2Nvbm5lY3Rf cHJvZ3Jlc3Nfc3luYyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24g Y29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIGFkZHJlc3MpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHZv aWQgKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjoqdHJhbnNhY3Rpb25fY29ubmVj dF9wcm9ncmVzc19zeW5jJCkgKDo6cnVzdDo6U3RyKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb246OnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nf c3luYzsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6OnJ1c3Q6OmJl aGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewotKyAgICAgICAg ICAgIChzZWxmLip0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmMkKSAoYWRkcmVzcyk7 Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAgICAgICAgIH0sCi0rICAg ICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAgIHJldHVybiB0aHJvdyQ7 Ci0rICB9Ci0rCi0rICA6OnN0ZDo6aW50MzJfdAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJQTURpZmYkbl9yZW1vdmVkICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2Vs Zikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmOjoqbl9yZW1vdmVkJCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4 OjpSUE1EaWZmOjpuX3JlbW92ZWQ7Ci0rICAgIHJldHVybiAoc2VsZi4qbl9yZW1vdmVkJCkgKCk7 Ci0rICB9Ci0rCi0rICA6OnN0ZDo6aW50MzJfdAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJQTURpZmYkbl9hZGRlZCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYp IG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZjo6Km5fYWRkZWQkKSAoKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlJQ TURpZmY6Om5fYWRkZWQ7Ci0rICAgIHJldHVybiAoc2VsZi4qbl9hZGRlZCQpICgpOwotKyAgfQot KwotKyAgOjpzdGQ6OmludDMyX3QKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1E aWZmJG5fbW9kaWZpZWQgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdAotKyAgewotKyAgICA6OnN0ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6 OipuX21vZGlmaWVkJCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmOjpuX21vZGlmaWVkOwotKyAgICByZXR1cm4gKHNlbGYuKm5fbW9kaWZpZWQkKSAoKTsKLSsg IH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcnBtZGJfZGlmZiAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnN0cmlu ZyBjb25zdCAmc3JjLCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICZkZXN0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfbm9lbnQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlJQTURpZmYg KipyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UlBNRGlmZj4gKCpycG1kYl9kaWZmJCkgKAotKyAgICAgICAgOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpzdGQ6OnN0cmluZyBjb25zdCAmLCA6OnN0ZDo6c3Ry aW5nIGNvbnN0ICYsIGJvb2wpCi0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG1kYl9kaWZm OwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0rICAgIDo6cnVzdDo6YmVoYXZp b3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAg bmV3IChyZXR1cm4kKTo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmICooCi0rICAgICAgICAgICAgICAg IHJwbWRiX2RpZmYkIChyZXBvLCBzcmMsIGRlc3QsIGFsbG93X25vZW50KS5yZWxlYXNlICgpKTsK LSsgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAg ICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsK LSsgIH0KLSsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZm JHByaW50ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQKLSsg IHsKLSsgICAgdm9pZCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipwcmludCQpICgpIGNvbnN0 ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpwcmludDsKLSsgICAgKHNlbGYuKnByaW50JCkg KCk7Ci0rICB9Ci0rCi0rICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJp bnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoICgKLSsgICAgICA6OnJ1c3Q6OlN0ciBz eXNyb290X3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQgZm9y bWF0LAotKyAgICAgIDo6c3RkOjp1aW50MzJfdCBtYXhfa2V5X2xlbiwgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHZvaWQgKCpw cmludF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGgkKSAoOjpydXN0OjpTdHIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6dWludDMyX3QsIDo6cnBtb3N0cmVl Y3h4OjpHQ2FuY2VsbGFibGUgKikKLSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnByaW50X3Ry ZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aDsKLSsgICAgcHJpbnRfdHJlZXBrZ19kaWZmX2Zy b21fc3lzcm9vdF9wYXRoJCAoc3lzcm9vdF9wYXRoLCBmb3JtYXQsIG1heF9rZXlfbGVuLCBjYW5j ZWxsYWJsZSk7Ci0rICB9Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgKgotKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByb2dyZXNzX2JlZ2luX3Rhc2sgKDo6cnVzdDo6U3Ry IG1zZykgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlByb2dyZXNzPiAoKnByb2dyZXNzX2JlZ2luX3Rhc2skKSAoOjpydXN0OjpTdHIpCi0rICAg ICAgICA9IDo6cnBtb3N0cmVlY3h4Ojpwcm9ncmVzc19iZWdpbl90YXNrOwotKyAgICByZXR1cm4g cHJvZ3Jlc3NfYmVnaW5fdGFzayQgKG1zZykucmVsZWFzZSAoKTsKLSsgIH0KLSsKLSsgIHZvaWQK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQcm9ncmVzcyRlbmQgKDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzcyAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQKLSsgIHsKLSsgICAgdm9pZCAoOjpy cG1vc3RyZWVjeHg6OlByb2dyZXNzOjoqZW5kJCkgKDo6cnVzdDo6U3RyKSA9ICY6OnJwbW9zdHJl ZWN4eDo6UHJvZ3Jlc3M6OmVuZDsKLSsgICAgKHNlbGYuKmVuZCQpIChtc2cpOwotKyAgfQotKwot KyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG91dHB1dF9tZXNzYWdlICg6 OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHZvaWQgKCpvdXRwdXRfbWVzc2Fn ZSQpICg6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6b3V0cHV0X21lc3NhZ2U7Ci0rICAg IG91dHB1dF9tZXNzYWdlJCAobXNnKTsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV2cmFfdG9fY2FjaGVfYnJhbmNoICg6 OnN0ZDo6c3RyaW5nIGNvbnN0ICZuZXZyYSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dAotKyAgewotKyAgICA6OnJ1c3Q6OlN0cmluZyAoKm5ldnJhX3RvX2NhY2hlX2JyYW5jaCQpICg6 OnN0ZDo6c3RyaW5nIGNvbnN0ICYpCi0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpuZXZyYV90 b19jYWNoZV9icmFuY2g7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAg OjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsK LSsgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpydXN0OjpTdHJpbmcgKG5ldnJhX3RvX2NhY2hl X2JyYW5jaCQgKG5ldnJhKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0r ICAgICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0r ICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9yZXBvZGF0YV9jaGtzdW1fcmVwciAoOjpk bmZjeHg6OkZGSURuZlBhY2thZ2UgJnBrZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OlN0cmluZyAoKmdldF9yZXBvZGF0YV9jaGtzdW1fcmVw ciQpICg6OmRuZmN4eDo6RkZJRG5mUGFja2FnZSAmKQotKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4 eDo6Z2V0X3JlcG9kYXRhX2Noa3N1bV9yZXByOwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7Ci0rICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQot KyAgICAgICAgICB7Ci0rICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6U3RyaW5nIChn ZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIkIChwa2cpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRy ID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWls ICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtdHNfZm9yX2NvbW1p dCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmV2LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVl Y3h4OjpScG1UcyAqKnJldHVybiQpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKCpycG10c19mb3JfY29tbWl0JCkgKAotKyAgICAg ICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpydXN0OjpTdHIpCi0rICAg ICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG10c19mb3JfY29tbWl0OwotKyAgICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiB0aHJvdyQ7Ci0rICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsg ICAgICAgIFsmXQotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6cnBt b3N0cmVlY3h4OjpScG1UcyAqKHJwbXRzX2Zvcl9jb21taXQkIChyZXBvLCByZXYpLnJlbGVhc2Ug KCkpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9LAot KyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4gdGhy b3ckOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRycG1kYl9wYWNrYWdlX25hbWVfbGlzdCAoCi0rICAgICAgOjpzdGQ6Omlu dDMyX3QgZGZkLCA6OnJ1c3Q6OlN0cmluZyBjb25zdCAqcGF0aCwgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKCpycG1kYl9wYWNrYWdlX25hbWVfbGlzdCQpICg6OnN0ZDo6aW50MzJfdCwg OjpydXN0OjpTdHJpbmcpCi0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG1kYl9wYWNrYWdl X25hbWVfbGlzdDsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6OnJ1 c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewotKyAg ICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKAotKyAg ICAgICAgICAgICAgICBycG1kYl9wYWNrYWdlX25hbWVfbGlzdCQgKGRmZCwgOjpydXN0OjpTdHJp bmcgKDo6cnVzdDo6dW5zYWZlX2JpdGNvcHksICpwYXRoKSkpOwotKyAgICAgICAgICAgIHRocm93 JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6 OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4gdGhyb3ckOwotKyAgfQotKwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1UcyRwYWNr YWdlX21ldGEgKDo6cnBtb3N0cmVlY3h4OjpScG1UcyBjb25zdCAmc2VsZiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG5hbWUs IDo6cnVzdDo6U3RyIGFyY2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgKipyZXR1cm4kKSBub2V4 Y2VwdAotKyAgewotKyAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGE+ICg6OnJwbW9zdHJlZWN4eDo6UnBtVHM6OipwYWNrYWdlX21ldGEkKSAoCi0rICAgICAg ICA6OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIpIGNvbnN0Ci0rICAgICAgICA9ICY6OnJwbW9zdHJl ZWN4eDo6UnBtVHM6OnBhY2thZ2VfbWV0YTsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhy b3ckOwotKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsg ICAgICAgICAgewotKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGEgKigKLSsgICAgICAgICAgICAgICAgKHNlbGYuKnBhY2thZ2VfbWV0YSQpIChuYW1l LCBhcmNoKS5yZWxlYXNlICgpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsK LSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsK LSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIDo6c3RkOjp1aW50NjRfdAotKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNpemUgKDo6cnBtb3N0cmVlY3h4 OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OnVp bnQ2NF90ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipzaXplJCkgKCkgY29uc3QKLSsg ICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6c2l6ZTsKLSsgICAgcmV0dXJu IChzZWxmLipzaXplJCkgKCk7Ci0rICB9Ci0rCi0rICA6OnN0ZDo6dWludDY0X3QKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRidWlsZHRpbWUgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZikgbm9leGNlcHQKLSsgIHsKLSsg ICAgOjpzdGQ6OnVpbnQ2NF90ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipidWlsZHRp bWUkKSAoKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpi dWlsZHRpbWU7Ci0rICAgIHJldHVybiAoc2VsZi4qYnVpbGR0aW1lJCkgKCk7Ci0rICB9Ci0rCi0r ICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkY2hhbmdl bG9ncyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+ICpyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAg ICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1l dGE6OipjaGFuZ2Vsb2dzJCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQ YWNrYWdlTWV0YTo6Y2hhbmdlbG9nczsKLSsgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6VmVjPDo6 c3RkOjp1aW50NjRfdD4gKChzZWxmLipjaGFuZ2Vsb2dzJCkgKCkpOwotKyAgfQotKwotKyAgdm9p ZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNyY19wa2cgKDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciAqcmV0dXJuJCkg bm9leGNlcHQKLSsgIHsKLSsgICAgOjpydXN0OjpTdHIgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YTo6KnNyY19wa2ckKSAoKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlBh Y2thZ2VNZXRhOjpzcmNfcGtnOwotKyAgICBuZXcgKHJldHVybiQpOjpydXN0OjpTdHIgKChzZWxm LipzcmNfcGtnJCkgKCkpOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRwcm92aWRlZF9wYXRocyAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqcHJvdmlk ZWRfcGF0aHMkKSAoKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhOjpwcm92aWRlZF9wYXRoczsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwot KyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAg ICAgewotKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKChzZWxmLipwcm92aWRlZF9wYXRocyQpICgpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRy ID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWls ICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFja2FnZV92YXJpYW50 X2xpc3RfZm9yX2NvbW1pdCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJldiwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNl bGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0 dXJuJCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICooKnBh Y2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQkKSAoCi0rICAgICAgICA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmLCA6OnJ1c3Q6OlN0ciwgOjpycG1vc3RyZWVjeHg6OkdDYW5j ZWxsYWJsZSBjb25zdCAmKQotKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cGFja2FnZV92YXJp YW50X2xpc3RfZm9yX2NvbW1pdDsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwot KyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAg ICAgewotKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQg KigKLSsgICAgICAgICAgICAgICAgcGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdCQgKHJl cG8sIHJldiwgY2FuY2VsbGFibGUpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0 cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQp KTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSB9IC8vIGV4dGVybiAiQyIKLSAKLS1ib29s IGlzX2JhcmVfc3BsaXRfeGF0dHJzKCkgewotK2Jvb2wKLStpc19iYXJlX3NwbGl0X3hhdHRycyAo KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19iYXJl X3NwbGl0X3hhdHRycygmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9 Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxp dF94YXR0cnMgKCZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0r ICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsK LSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t Ym9vbCBpc19odHRwX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfaHR0cF9hcmcoYXJnKTsKLStib29sCi0raXNf aHR0cF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2h0dHBfYXJnIChhcmcpOwotIH0KLSAKLS1ib29sIGlz X29zdHJlZV9jb250YWluZXIoKSB7Ci0rYm9vbAotK2lzX29zdHJlZV9jb250YWluZXIgKCkKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfb3N0cmVlX2Nv bnRhaW5lcigmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfb3N0cmVlX2NvbnRhaW5l ciAoJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJwbW9z dHJlZWN4eDo6U3lzdGVtSG9zdFR5cGUgZ2V0X3N5c3RlbV9ob3N0X3R5cGUoKSB7Ci0rOjpycG1v c3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlCi0rZ2V0X3N5c3RlbV9ob3N0X3R5cGUgKCkKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZT4gcmV0 dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRnZXRfc3lzdGVtX2hvc3RfdHlwZSgmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZ2V0X3N5c3RlbV9ob3N0X3R5cGUgKCZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJv ciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4k LnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCByZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUoOjpycG1vc3Ry ZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUo dCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3JlcXVpcmVfc3lzdGVtX2hv c3RfdHlwZSAoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpCi0rewotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJlcXVp cmVfc3lzdGVtX2hvc3RfdHlwZSAodCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0r ICAgIH0KLSB9Ci0gCi0tYm9vbCBpc19ycG1fYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQg ewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19ycG1fYXJnKGFyZyk7 Ci0rYm9vbAotK2lzX3JwbV9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQKLSt7Ci0rICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX3JwbV9hcmcgKGFyZyk7Ci0gfQot IAotLXZvaWQgY2xpZW50X3N0YXJ0X2RhZW1vbigpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfc3RhcnRfZGFlbW9u KCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NsaWVudF9zdGFydF9kYWVt b24gKCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY2xpZW50X3N0YXJ0X2RhZW1vbiAoKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4g Y2xpZW50X2hhbmRsZV9mZF9hcmd1bWVudCg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFy Y2gsIGJvb2wgaXNfcmVwbGFjZSkgewotKzo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PgotK2Ns aWVudF9oYW5kbGVfZmRfYXJndW1lbnQgKDo6cnVzdDo6U3RyIGFyZywgOjpydXN0OjpTdHIgYXJj aCwgYm9vbCBpc19yZXBsYWNlKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpW ZWM8OjpzdGQ6OmludDMyX3Q+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9oYW5kbGVfZmRfYXJndW1l bnQoYXJnLCBhcmNoLCBpc19yZXBsYWNlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y2xpZW50X2hhbmRsZV9mZF9hcmd1bWVudCAoCi0rICAgICAgYXJnLCBhcmNoLCBpc19yZXBsYWNl LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6 U3RyaW5nIGNsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3RyZWVjeHg6OkdW YXJpYW50IGNvbnN0ICZwcm9ncmVzcykgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5nCi0rY2xp ZW50X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyAoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNv bnN0ICZwcm9ncmVzcykgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVu dF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MocHJvZ3Jlc3MsICZyZXR1cm4kLnZhbHVlKTsKLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjbGllbnRfcmVuZGVyX2Rvd25sb2FkX3Byb2dyZXNzIChwcm9ncmVzcywgJnJl dHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9 Ci0gCi0tYm9vbCBydW5uaW5nX2luX2NvbnRhaW5lcigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVubmluZ19pbl9jb250YWluZXIoKTsKLStib29s Ci0rcnVubmluZ19pbl9jb250YWluZXIgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fY29udGFpbmVyICgpOwotIH0KLSAKLS1i b29sIGNvbmZpcm0oKSB7Ci0rYm9vbAotK2NvbmZpcm0gKCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybSgmcmV0dXJuJC52YWx1ZSk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29uZmlybSAoJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0r ICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwot IH0KLSAKLS12b2lkIGNvbmZpcm1fb3JfYWJvcnQoKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybV9vcl9hYm9ydCgp OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjb25maXJtX29yX2Fib3J0ICgp Ci0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQgKCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBCdWJibGV3cmFwOjpsYXlvdXQ6OnNp emUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1 YmJsZXdyYXAkb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK0J1YmJsZXdyYXA6 OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3Rk OjpzaXplX3QgQnViYmxld3JhcDo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRhbGlnbm9m KCk7Ci0rOjpzdGQ6OnNpemVfdAotK0J1YmJsZXdyYXA6OmxheW91dDo6YWxpZ24gKCkgbm9leGNl cHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAk b3BlcmF0b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0tdm9pZCBidWJibGV3cmFwX3NlbGZ0ZXN0KCkg ewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGJ1YmJsZXdyYXBfc2VsZnRlc3QoKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0K LSt2b2lkCi0rYnViYmxld3JhcF9zZWxmdGVzdCAoKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX3NlbGZ0 ZXN0ICgpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLTo6 cnVzdDo6VmVjPDo6c3RkOjp1aW50OF90PiBidWJibGV3cmFwX3J1bl9zeW5jKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywg Ym9vbCBjYXB0dXJlX3N0ZG91dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5 IG11dGFiaWxpdHkpIHsKLSs6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4KLStidWJibGV3cmFw X3J1bl9zeW5jICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gY29uc3QgJmFyZ3MsCi0rICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYXB0dXJl X3N0ZG91dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkp Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4+ IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9ydW5fc3luYyhyb290ZnNfZGZkLCBhcmdzLCBjYXB0 dXJlX3N0ZG91dCwgbXV0YWJpbGl0eSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1 YmJsZXdyYXBfcnVuX3N5bmMgKAotKyAgICAgIHJvb3Rmc19kZmQsIGFyZ3MsIGNhcHR1cmVfc3Rk b3V0LCBtdXRhYmlsaXR5LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFw X25ldyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcD4KLStidWJibGV3cmFwX25ldyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz X2ZkKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OkJ1YmJsZXdyYXA+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3KHJvb3Rmc19mZCwg JnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik Ci0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXcgKHJv b3Rmc19mZCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwot KyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXdfd2l0 aF9tdXRhYmlsaXR5KDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCwgOjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcD4KLStidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkgKDo6c3Rk OjppbnQzMl90IHJvb3Rmc19mZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KQotK3sKLSAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+ PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eShyb290ZnNfZmQs IG11dGFiaWxpdHksICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0K LS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25l d193aXRoX211dGFiaWxpdHkgKAotKyAgICAgIHJvb3Rmc19mZCwgbXV0YWJpbGl0eSwgJnJldHVy biQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnN0ZDo6aW50MzJfdCBC dWJibGV3cmFwOjpnZXRfcm9vdGZzX2ZkKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGdldF9yb290ZnNfZmQoKnRoaXMp OwotKzo6c3RkOjppbnQzMl90Ci0rQnViYmxld3JhcDo6Z2V0X3Jvb3Rmc19mZCAoKSBjb25zdCBu b2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCRnZXRfcm9vdGZzX2ZkICgqdGhpcyk7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6YXBw ZW5kX2J3cmFwX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVuZF9id3JhcF9hcmcoKnRoaXMsIGFyZyk7 Ci0rdm9pZAotK0J1YmJsZXdyYXA6OmFwcGVuZF9id3JhcF9hcmcgKDo6cnVzdDo6U3RyIGFyZykg bm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRh cHBlbmRfYndyYXBfYXJnICgqdGhpcywgYXJnKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjph cHBlbmRfY2hpbGRfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQgewotLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYXBwZW5kX2NoaWxkX2FyZygqdGhpcywgYXJn KTsKLSt2b2lkCi0rQnViYmxld3JhcDo6YXBwZW5kX2NoaWxkX2FyZyAoOjpydXN0OjpTdHIgYXJn KSBub2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JGFwcGVuZF9jaGlsZF9hcmcgKCp0aGlzLCBhcmcpOwotIH0KLSAKLS12b2lkIEJ1YmJsZXdyYXA6 OnNldGVudig6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdCB7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRlbnYoKnRoaXMsIGssIHYpOwot K3ZvaWQKLStCdWJibGV3cmFwOjpzZXRlbnYgKDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYp IG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAk c2V0ZW52ICgqdGhpcywgaywgdik7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6dGFrZV9mZCg6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNl cHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCgq dGhpcywgc291cmNlX2ZkLCB0YXJnZXRfZmQpOwotK3ZvaWQKLStCdWJibGV3cmFwOjp0YWtlX2Zk ICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9l eGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtl X2ZkICgqdGhpcywgc291cmNlX2ZkLCB0YXJnZXRfZmQpOwotIH0KLSAKLS12b2lkIEJ1YmJsZXdy YXA6OnNldF9pbmhlcml0X3N0ZGluKCkgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0X2luaGVyaXRfc3RkaW4oKnRoaXMpOwotK3ZvaWQKLStC dWJibGV3cmFwOjpzZXRfaW5oZXJpdF9zdGRpbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldF9pbmhlcml0X3N0ZGluICgqdGhpcyk7 Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6dGFrZV9zdGRpbl9mZCg6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJHRha2Vfc3RkaW5fZmQoKnRoaXMsIHNvdXJjZV9mZCk7Ci0rdm9pZAotK0J1YmJsZXdy YXA6OnRha2Vfc3RkaW5fZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQKLSt7 Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGluX2Zk ICgqdGhpcywgc291cmNlX2ZkKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjp0YWtlX3N0ZG91 dF9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2ZkKCp0aGlzLCBzb3VyY2Vf ZmQpOwotK3ZvaWQKLStCdWJibGV3cmFwOjp0YWtlX3N0ZG91dF9mZCAoOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRC dWJibGV3cmFwJHRha2Vfc3Rkb3V0X2ZkICgqdGhpcywgc291cmNlX2ZkKTsKLSB9Ci0gCi0tdm9p ZCBCdWJibGV3cmFwOjp0YWtlX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5v ZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vf c3RkZXJyX2ZkKCp0aGlzLCBzb3VyY2VfZmQpOwotK3ZvaWQKLStCdWJibGV3cmFwOjp0YWtlX3N0 ZGVycl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkICgqdGhpcywg c291cmNlX2ZkKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjp0YWtlX3N0ZG91dF9hbmRfc3Rk ZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQgewotLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCgq dGhpcywgc291cmNlX2ZkKTsKLSt2b2lkCi0rQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfYW5kX3N0 ZGVycl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJf ZmQgKCp0aGlzLCBzb3VyY2VfZmQpOwotIH0KLSAKLS12b2lkIEJ1YmJsZXdyYXA6OmJpbmRfcmVh ZCg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0IHsKLS0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZCgqdGhpcywgc3JjLCBk ZXN0KTsKLSt2b2lkCi0rQnViYmxld3JhcDo6YmluZF9yZWFkICg6OnJ1c3Q6OlN0ciBzcmMsIDo6 cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEJ1YmJsZXdyYXAkYmluZF9yZWFkICgqdGhpcywgc3JjLCBkZXN0KTsKLSB9Ci0gCi0tdm9p ZCBCdWJibGV3cmFwOjpiaW5kX3JlYWR3cml0ZSg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3Ry IGRlc3QpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3 cmFwJGJpbmRfcmVhZHdyaXRlKCp0aGlzLCBzcmMsIGRlc3QpOwotK3ZvaWQKLStCdWJibGV3cmFw OjpiaW5kX3JlYWR3cml0ZSAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4 Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRf cmVhZHdyaXRlICgqdGhpcywgc3JjLCBkZXN0KTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjpz ZXR1cF9jb21wYXRfdmFyKCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0dXBfY29tcGF0X3ZhcigqdGhp cyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK0J1YmJsZXdyYXA6OnNldHVw X2NvbXBhdF92YXIgKCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXR1cF9jb21wYXRfdmFyICgqdGhp cyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBC dWJibGV3cmFwOjpydW4oOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2Vs bGFibGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHJ1bigqdGhpcywgY2FuY2VsbGFibGUpOwotLSAgaWYg KGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStCdWJibGV3cmFwOjpydW4gKDo6cnBtb3N0cmVl Y3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKQotK3sKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JHJ1biAoKnRoaXMsIGNhbmNlbGxhYmxlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0r ICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsK LSsgICAgfQotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0 YWJpbGl0eV9mb3JfdW5pZmllZF9jb3JlKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG11dGFiaWxpdHlfZm9yX3VuaWZp ZWRfY29yZSh1bmlmaWVkX2NvcmUpOwotKzo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJp bGl0eQotK211dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29yZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5v ZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmls aXR5X2Zvcl91bmlmaWVkX2NvcmUgKHVuaWZpZWRfY29yZSk7Ci0gfQotIAotLXZvaWQgdXNyb3Zl cmxheV9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykg ewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHVzcm92ZXJsYXlfZW50cnlwb2ludChhcmdzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7 Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK LS0gIH0KLSt2b2lkCi0rdXNyb3ZlcmxheV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gY29uc3QgJmFyZ3MpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHVzcm92ZXJsYXlfZW50cnlwb2ludCAoYXJn cyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBh cHBseWxpdmVfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFy Z3MpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRhcHBseWxpdmVfZW50cnlwb2ludChhcmdzKTsKLS0gIGlmIChlcnJvciQucHRy KSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKLS0gIH0KLSt2b2lkCi0rYXBwbHlsaXZlX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBjb25zdCAmYXJncykKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2VudHJ5cG9pbnQgKGFy Z3MpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQg YXBwbHlsaXZlX2ZpbmlzaCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lz cm9vdCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9maW5pc2goc3lzcm9vdCk7Ci0tICBpZiAoZXJyb3IkLnB0 cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7Ci0tICB9Ci0rdm9pZAotK2FwcGx5bGl2ZV9maW5pc2ggKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTeXNyb290IGNvbnN0ICZzeXNyb290KQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNoIChzeXNy b290KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lk IGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1bihyb290ZnNf ZGZkKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29tcG9zZXV0aWxfbGVn YWN5X3ByZXBfZGV2X2FuZF9ydW4gKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpCi0rewotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4gKHJvb3Rmc19kZmQp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgcHJp bnRfb3N0cmVlX3R4bl9zdGF0cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwb1RyYW5zYWN0aW9u U3RhdHMgJnN0YXRzKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cHJpbnRfb3N0cmVlX3R4bl9zdGF0cyhzdGF0cyk7Ci0rdm9pZAotK3ByaW50X29zdHJlZV90eG5f c3RhdHMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMp IG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29zdHJl ZV90eG5fc3RhdHMgKHN0YXRzKTsKLSB9Ci0gCi0tdm9pZCB3cml0ZV9jb21taXRfaWQoOjpydXN0 OjpTdHIgdGFyZ2V0X3BhdGgsIDo6cnVzdDo6U3RyIHJldmlzaW9uKSB7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkd3JpdGVfY29t bWl0X2lkKHRhcmdldF9wYXRoLCByZXZpc2lvbik7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9 Ci0rdm9pZAotK3dyaXRlX2NvbW1pdF9pZCAoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsIDo6cnVz dDo6U3RyIHJldmlzaW9uKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3cml0ZV9jb21taXRfaWQgKHRhcmdldF9wYXRoLCBy ZXZpc2lvbik7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0t dm9pZCBjbGl3cmFwX3dyaXRlX3dyYXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3RmcykgewotLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNsaXdyYXBfd3JpdGVfd3JhcHBlcnMocm9vdGZzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0t ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0g IH0KLSt2b2lkCi0rY2xpd3JhcF93cml0ZV93cmFwcGVycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjbGl3cmFwX3dyaXRlX3dyYXBwZXJzIChyb290ZnMpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgY2xpd3JhcF93cml0ZV9zb21l X3dyYXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGNvbnN0ICZhcmdzKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzKHJvb3Rm cywgYXJncyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NsaXdyYXBfd3Jp dGVfc29tZV93cmFwcGVycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0ZV9z b21lX3dyYXBwZXJzIChyb290ZnMsIGFyZ3MpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsK LSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OwotKyAgICB9Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIGNsaXdyYXBfZGVzdGRpcigpIG5vZXhj ZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK2NsaXdyYXBfZGVzdGRpciAoKSBub2V4Y2VwdAotK3sK LSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF9kZXN0ZGlyKCZyZXR1cm4kLnZhbHVlKTsK LS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBjb250 YWluZXJfZW5jYXBzdWxhdGUoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsKLS0g IDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQo OjpzdGQ6Om1vdmUoYXJncykpOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9lbmNhcHN1bGF0ZSgmYXJncyQudmFs dWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNsaXdyYXBfZGVzdGRpciAoJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZAotK2NvbnRhaW5lcl9lbmNhcHN1 bGF0ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpCi0rewotKyAgOjpydXN0OjpN YW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1v dmUgKGFyZ3MpKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5jYXBzdWxhdGUgKCZhcmdzJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBkZXBsb3lf ZnJvbV9zZWxmX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsK LS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJn cyQoOjpzdGQ6Om1vdmUoYXJncykpOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCgm YXJncyQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStkZXBsb3lf ZnJvbV9zZWxmX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKQot K3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4g YXJncyQgKDo6c3RkOjptb3ZlIChhcmdzKSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lfZnJvbV9zZWxm X2VudHJ5cG9pbnQgKCZhcmdzJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSB9Ci0gCi0tYm9vbCBQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvcj09KFBy dW5lZENvbnRhaW5lckluZm8gY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZvJG9wZXJhdG9y JGVxKCp0aGlzLCByaHMpOwotK2Jvb2wKLStQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvcj09 IChQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZvJG9w ZXJhdG9yJGVxICgqdGhpcywgcmhzKTsKLSB9Ci0gCi0tYm9vbCBQcnVuZWRDb250YWluZXJJbmZv OjpvcGVyYXRvciE9KFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJnJocykgY29uc3Qgbm9leGNl cHQgewotK2Jvb2wKLStQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvciE9IChQcnVuZWRDb250 YWluZXJJbmZvIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuICEoKnRo aXMgPT0gcmhzKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5l ckltYWdlU3RhdGU+IHB1bGxfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNv bnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJs ZSwgOjpydXN0OjpTdHIgaW1ncmVmLCA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpIHsKLSs6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4KLStwdWxsX2Nv bnRhaW5lciAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAg ICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxl LCA6OnJ1c3Q6OlN0ciBpbWdyZWYsCi0rICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRpZ2Vz dF9vdmVycmlkZSkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRh aW5lcihyZXBvLCBjYW5jZWxsYWJsZSwgaW1ncmVmLCBkaWdlc3Rfb3ZlcnJpZGUsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRhaW5lciAoCi0rICAgICAgcmVwbywgY2Fu Y2VsbGFibGUsIGltZ3JlZiwgZGlnZXN0X292ZXJyaWRlLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBp ZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJ bmZvIGNvbnRhaW5lcl9wcnVuZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAm c3lzcm9vdCkgewotKzo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvCi0rY29udGFp bmVyX3BydW5lICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkK LSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWlu ZXJJbmZvPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9wcnVuZShzeXNyb290LCAmcmV0dXJuJC52 YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfcHJ1bmUgKHN5c3Jvb3QsICZy ZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+IHF1ZXJ5X2NvbnRhaW5lcl9pbWFn ZV9jb21taXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6 U3RyIGMpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0 ZT4KLStxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgYykKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPj4gcmV0 dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0KHJlcG8sIGMsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAg ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHF1ZXJ5X2NvbnRhaW5lcl9pbWFnZV9jb21t aXQgKHJlcG8sIGMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7 Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0g Ci0tdm9pZCBwdXJnZV9yZWZzcGVjKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHVyZ2VfcmVmc3BlYyhyZXBvLCByZWZz cGVjKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rcHVyZ2VfcmVmc3BlYyAo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNw ZWMpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHB1cmdlX3JlZnNwZWMgKHJlcG8sIHJlZnNwZWMpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLWJvb2wgY2hlY2tfY29udGFpbmVyX3Vw ZGF0ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZikg ewotK2Jvb2wKLStjaGVja19jb250YWluZXJfdXBkYXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmKQot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19jb250 YWluZXJfdXBkYXRlKHJlcG8sIGNhbmNlbGxhYmxlLCBpbWdyZWYsICZyZXR1cm4kLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjaGVja19jb250YWluZXJfdXBkYXRlICgKLSsgICAgICByZXBvLCBjYW5j ZWxsYWJsZSwgaW1ncmVmLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6c3RkOjpzaXplX3QgVGVtcEV0Y0d1YXJkOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRv cGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVGVtcEV0Y0d1YXJkOjpsYXlvdXQ6 OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3RkOjpzaXpl X3QgVGVtcEV0Y0d1YXJkOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3IkYWxpZ25vZigp OwotKzo6c3RkOjpzaXplX3QKLStUZW1wRXRjR3VhcmQ6OmxheW91dDo6YWxpZ24gKCkgbm9leGNl cHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFy ZCRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IEZpbGVzeXN0ZW1T Y3JpcHRQcmVwOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNpemVvZigp OwotKzo6c3RkOjpzaXplX3QKLStGaWxlc3lzdGVtU2NyaXB0UHJlcDo6bGF5b3V0OjpzaXplICgp IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxl c3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3RkOjpzaXpl X3QgRmlsZXN5c3RlbVNjcmlwdFByZXA6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9w ZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rRmlsZXN5c3RlbVNjcmlwdFByZXA6 OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0g fQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+IHByZXBhcmVf dGVtcGV0Y19ndWFyZCg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKLSs6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPgotK3ByZXBhcmVfdGVtcGV0Y19ndWFyZCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV90ZW1w ZXRjX2d1YXJkKHJvb3RmcywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cHJlcGFyZV90ZW1wZXRjX2d1YXJkIChyb290ZnMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChl cnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1 cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBUZW1wRXRjR3VhcmQ6OnVuZG8oKSBjb25zdCB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVGVtcEV0Y0d1YXJkJHVuZG8oKnRoaXMpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot K3ZvaWQKLStUZW1wRXRjR3VhcmQ6OnVuZG8gKCkgY29uc3QKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJk JHVuZG8gKCp0aGlzKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0K LSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+IHBy ZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJlcCg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKLSs6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+Ci0rcHJlcGFy ZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpCi0rewotICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3Rl bVNjcmlwdFByZXA+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJl cChyb290ZnMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVf ZmlsZXN5c3RlbV9zY3JpcHRfcHJlcCAocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAo ZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgRmlsZXN5c3RlbVNjcmlwdFByZXA6OnVuZG8oKSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkdW5kbygqdGhpcyk7Ci0tICBpZiAoZXJyb3IkLnB0 cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7Ci0tICB9Ci0rdm9pZAotK0ZpbGVzeXN0ZW1TY3JpcHRQcmVwOjp1bmRvICgpCi0rewotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8gKCp0aGlzKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIHJ1bl9kZXBtb2QoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCwgOjpydXN0OjpTdHIga3ZlciwgYm9vbCB1bmlmaWVkX2NvcmUpIHsKLS0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRy dW5fZGVwbW9kKHJvb3Rmc19kZmQsIGt2ZXIsIHVuaWZpZWRfY29yZSk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rdm9pZAotK3J1bl9kZXBtb2QgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19k ZmQsIDo6cnVzdDo6U3RyIGt2ZXIsIGJvb2wgdW5pZmllZF9jb3JlKQotK3sKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHJ1bl9kZXBtb2QgKHJvb3Rmc19kZmQsIGt2ZXIsIHVuaWZpZWRfY29yZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBydW5fc3lzdXNlcnMoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSkgewotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2Vycyhy b290ZnNfZGZkLCBmb3JjZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3J1 bl9zeXN1c2VycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSkKLSt7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcnVuX3N5c3VzZXJzIChyb290ZnNfZGZkLCBmb3JjZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikK LSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBsb2dfdHJlZWZpbGUoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zikgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGxvZ190cmVlZmlsZSh0Zik7Ci0rdm9pZAotK2xvZ190cmVlZmlsZSAoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zikgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkbG9nX3RyZWVmaWxlICh0Zik7Ci0gfQotIAotLWJvb2wgaXNfY29u dGFpbmVyX2ltYWdlX3JlZmVyZW5jZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9y ZWZlcmVuY2UocmVmc3BlYyk7Ci0rYm9vbAotK2lzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2Ug KDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlIChyZWZzcGVjKTsK LSB9Ci0gCi0tYm9vbCBpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSg6OnJ1c3Q6 OlN0ciByZWZzcGVjKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlKHJlZnNwZWMpOwotK2Jv b2wKLStpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSAoOjpydXN0OjpTdHIgcmVm c3BlYykgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlIChyZWZzcGVjKTsKLSB9Ci0gCi0t OjpycG1vc3RyZWVjeHg6OlJlZnNwZWNUeXBlIHJlZnNwZWNfY2xhc3NpZnkoOjpydXN0OjpTdHIg cmVmc3BlYykgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRyZWZzcGVjX2NsYXNzaWZ5KHJlZnNwZWMpOwotKzo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlw ZQotK3JlZnNwZWNfY2xhc3NpZnkgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZWZzcGVjX2NsYXNzaWZ5IChy ZWZzcGVjKTsKLSB9Ci0gCi0tdm9pZCB2ZXJpZnlfa2VybmVsX2htYWMoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJ1c3Q6OlN0ciBtb2RkaXIpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2ZXJpZnlfa2VybmVsX2htYWMocm9v dGZzLCBtb2RkaXIpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLSt2ZXJpZnlf a2VybmVsX2htYWMgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgbW9kZGlyKQot K3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR2ZXJpZnlfa2VybmVsX2htYWMgKHJvb3RmcywgbW9kZGlyKTsKLSsgIGlmIChlcnJv ciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gc3RhZ2VfY29udGFpbmVyX3JwbXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJw bXMpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcnBtcyQoOjpzdGQ6Om1vdmUocnBtcykpOwotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PgotK3N0YWdlX2NvbnRhaW5lcl9ycG1zICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcnBt cykKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4+IHJwbXMkICg6OnN0ZDo6bW92ZSAocnBtcykpOwotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVy X3JwbXMoJnJwbXMkLnZhbHVlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRzdGFnZV9jb250YWluZXJfcnBtcyAoJnJwbXMkLnZhbHVlLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBz dGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGZk cykgewotLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ PiBmZHMkKDo6c3RkOjptb3ZlKGZkcykpOwotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgot K3N0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcyAoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ IGZkcykKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50 MzJfdD4+IGZkcyQgKDo6c3RkOjptb3ZlIChmZHMpKTsKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5l cl9ycG1fcmF3X2ZkcygmZmRzJC52YWx1ZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbV9yYXdfZmRzICgmZmRzJC52YWx1ZSwgJnJldHVy biQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIGNvbW1pdF9oYXNf bWF0Y2hpbmdfc2Vwb2xpY3koOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21taXQs IDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KSB7Ci0rYm9vbAot K2NvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3kgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBj b25zdCAmY29tbWl0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5KGNv bW1pdCwgcG9saWN5LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9 Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21t aXRfaGFzX21hdGNoaW5nX3NlcG9saWN5IChjb21taXQsIHBvbGljeSwgJnJldHVybiQudmFsdWUp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQg KmdldF9oZWFkZXJfdmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVw bywgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gpIHsKLSs6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQg KgotK2dldF9oZWFkZXJfdmFyaWFudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3Qg JnJlcG8sIDo6cnVzdDo6U3RyIGNhY2hlYnJhbmNoKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICo+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2hlYWRlcl92 YXJpYW50KHJlcG8sIGNhY2hlYnJhbmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0tfQot LQotLXZvaWQgY29tcG9zZV9idWlsZF9jaHVua2VkX29jaV9lbnRyeXBvaW50KDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKLS0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQoJmFyZ3MkLnZhbHVlKTsKLS0gIGlmIChl cnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKLS0gIH0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAg ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFudCAocmVwbywg Y2FjaGVicmFuY2gsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7 Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0r Ci0rdm9pZAotK2NvbXBvc2VfYnVpbGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCAoOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpCi0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8Ojpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbXBvc2VfYnVpbGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCAoJmFyZ3MkLnZh bHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lk IGNvbXBvc2VfaW1hZ2UoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsKLS0gIDo6 cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpz dGQ6Om1vdmUoYXJncykpOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfaW1hZ2UoJmFyZ3MkLnZhbHVlKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29tcG9zZV9pbWFnZSAoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGFyZ3MpCi0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b21wb3NlX2ltYWdlICgmYXJncyQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsK LSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OwotKyAgICB9Ci0gfQotIAotLXZvaWQgY29tcG9zZV9yb290ZnNfZW50cnlwb2ludCg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykgewotLSAgOjpydXN0OjpNYW51YWxseURyb3A8Ojpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCg6OnN0ZDo6bW92ZShhcmdzKSk7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y29tcG9zZV9yb290ZnNfZW50cnlwb2ludCgmYXJncyQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotK3ZvaWQKLStjb21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50ICg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gYXJncykKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkICg6OnN0ZDo6bW92ZSAoYXJncykpOwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcG9zZV9yb290ZnNfZW50cnlwb2ludCAoJmFyZ3MkLnZhbHVlKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIGNvbmZpZ3VyZV9i dWlsZF9yZXBvX2Zyb21fdGFyZ2V0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZi dWlsZF9yZXBvLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmdGFyZ2V0X3JlcG8p IHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRjb25maWd1cmVfYnVpbGRfcmVwb19mcm9tX3RhcmdldChidWlsZF9yZXBvLCB0YXJn ZXRfcmVwbyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbmZpZ3VyZV9i dWlsZF9yZXBvX2Zyb21fdGFyZ2V0ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm YnVpbGRfcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnRhcmdldF9yZXBvKQotK3sKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNv bmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0IChidWlsZF9yZXBvLCB0YXJnZXRfcmVwbyk7 Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBjb21w b3NlX3ByZXBhcmVfcm9vdGZzKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6 aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZp bGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBhcmVfcm9vdGZzKHNyY19yb290ZnNfZGZkLCBkZXN0X3Jv b3Rmc19kZmQsIHRyZWVmaWxlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0r Y29tcG9zZV9wcmVwYXJlX3Jvb3RmcyAoOjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6 c3RkOjppbnQzMl90IGRlc3Rfcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBh cmVfcm9vdGZzICgKLSsgICAgICBzcmNfcm9vdGZzX2RmZCwgZGVzdF9yb290ZnNfZGZkLCB0cmVl ZmlsZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9p ZCBjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZk KSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMocm9vdGZzX2RmZCk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBvc2Vwb3N0X25zc3dpdGNoX2FsdGZp bGVzICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vw b3N0X25zc3dpdGNoX2FsdGZpbGVzIChyb290ZnNfZGZkKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3MoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwg OjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBib29sIHVuaWZpZWRfY29yZSkgewotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBv c2VfcG9zdHByb2Nlc3Mocm9vdGZzX2RmZCwgdHJlZWZpbGUsIG5leHRfdmVyc2lvbiwgdW5pZmll ZF9jb3JlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29tcG9zZV9wb3N0 cHJvY2VzcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZ0cmVlZmlsZSwKLSsgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuZXh0X3Zl cnNpb24sIGJvb2wgdW5pZmllZF9jb3JlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzICgK LSsgICAgICByb290ZnNfZGZkLCB0cmVlZmlsZSwgbmV4dF92ZXJzaW9uLCB1bmlmaWVkX2NvcmUp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgY29t cG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgewotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9z dHByb2Nlc3NfZmluYWxfcHJlKHJvb3Rmc19kZmQsIHRyZWVmaWxlKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLSt2b2lkCi0rY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUgKDo6c3Rk OjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJl ZWZpbGUpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUgKHJv b3Rmc19kZmQsIHRyZWVmaWxlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgewot LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwocm9vdGZzX2RmZCwgdHJlZWZpbGUpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFs ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRyZWVmaWxlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAg ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwg KHJvb3Rmc19kZmQsIHRyZWVmaWxlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsg ICAgfQotIH0KLSAKLS12b2lkIGNvbnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2Vs bGFibGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kKHJvb3Rmc19kZmQsIGNhbmNl bGxhYmxlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29udmVydF92YXJf dG9fdG1wZmlsZXNfZCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxs YWJsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kIChyb290ZnNf ZGZkLCBjYW5jZWxsYWJsZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSB9Ci0gCi0tdm9pZCByb290ZnNfcHJlcGFyZV9saW5rcyg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLCBib29sIHNraXBf dXNybG9jYWwpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRyb290ZnNfcHJlcGFyZV9saW5rcyhyb290ZnNfZGZkLCB0cmVlZmls ZSwgc2tpcF91c3Jsb2NhbCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3Jv b3Rmc19wcmVwYXJlX2xpbmtzICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLAotKyAgICAgICAgICAgICAgICAgICAgICBi b29sIHNraXBfdXNybG9jYWwpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0r ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcm9vdGZzX3ByZXBhcmVfbGlua3Mg KHJvb3Rmc19kZmQsIHRyZWVmaWxlLCBza2lwX3VzcmxvY2FsKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIHdvcmthcm91bmRfc2VsaW51eF9jcm9z c19sYWJlbGluZyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0Nh bmNlbGxhYmxlICZjYW5jZWxsYWJsZSkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19s YWJlbGluZyhyb290ZnNfZGZkLCBjYW5jZWxsYWJsZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0rdm9pZAotK3dvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKQotK3sKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAocm9vdGZzX2RmZCwgY2FuY2VsbGFi bGUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQg cG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYig6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYihyb290ZnNfZGZkKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLSt2b2lkCi0rcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAocm9v dGZzX2RmZCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0t dm9pZCByZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwg Ym9vbCBub3JtYWxpemUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQocm9vdGZzX2Rm ZCwgbm9ybWFsaXplKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rcmV3cml0 ZV9ycG1kYl9mb3JfdGFyZ2V0ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIG5vcm1h bGl6ZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQgKHJvb3Rmc19k ZmQsIG5vcm1hbGl6ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9 Ci0gCi0tOjpzdGQ6OnVpbnQ2NF90IGRpcmVjdG9yeV9zaXplKDo6c3RkOjppbnQzMl90IGRmZCwg OjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIHsKLSs6OnN0 ZDo6dWludDY0X3QKLStkaXJlY3Rvcnlfc2l6ZSAoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkKLSt7Ci0gICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6c3RkOjp1aW50NjRfdD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJlY3Rvcnlfc2l6 ZShkZmQsIGNhbmNlbGxhYmxlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkaXJlY3Rvcnlfc2l6ZSAoZGZkLCBjYW5jZWxsYWJsZSwgJnJldHVybiQudmFsdWUpOwotKyAg aWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUg KHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVu dCAqZGVwbG95bWVudF9mb3JfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jv b3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCkgewotKzo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBs b3ltZW50ICoKLStkZXBsb3ltZW50X2Zvcl9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICo+IHJldHVybiQ7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGVwbG95bWVudF9mb3JfaWQoc3lzcm9vdCwgZGVwbG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7Ci0t ICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2Zvcl9pZCAoc3lzcm9vdCwgZGVwbG95X2lk LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6 U3RyaW5nIGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVT eXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpIHsKLSs6OnJ1c3Q6OlN0cmlu ZwotK2RlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lz cm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgZGVwbG95X2lkKQotK3sKLSAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9jaGVja3N1 bV9mb3JfaWQoc3lzcm9vdCwgZGVwbG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRkZXBsb3ltZW50X2NoZWNrc3VtX2Zvcl9pZCAoc3lzcm9vdCwgZGVwbG95X2lk LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICpkZXBsb3ltZW50X2dldF9iYXNlKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBvcHRfZGVwbG95X2lkLCA6 OnJ1c3Q6OlN0ciBvcHRfb3NfbmFtZSkgewotKzo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3lt ZW50ICoKLStkZXBsb3ltZW50X2dldF9iYXNlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwKLSsgICAgICAgICAgICAgICAg ICAgICA6OnJ1c3Q6OlN0ciBvcHRfb3NfbmFtZSkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICo+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95 bWVudF9nZXRfYmFzZShzeXNyb290LCBvcHRfZGVwbG95X2lkLCBvcHRfb3NfbmFtZSwgJnJldHVy biQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjpt b3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2V0X2Jhc2UgKAotKyAgICAgIHN5 c3Jvb3QsIG9wdF9kZXBsb3lfaWQsIG9wdF9vc19uYW1lLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBp ZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlm Zig6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0LCA6OnJwbW9zdHJlZWN4 eDo6RXhwb3J0ZWRNYW5pZmVzdERpZmYgY29uc3QgJmRpZmYpIG5vZXhjZXB0IHsKLS0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlm ZihkaWN0LCBkaWZmKTsKLStib29sCi0rZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZiAoOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6RXhwb3J0ZWRNYW5pZmVzdERpZmYgY29uc3Qg JmRpZmYpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkZXBsb3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmIChkaWN0LCBkaWZmKTsKLSB9Ci0gCi0tdm9p ZCBkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1lbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1l bnQoc3lzcm9vdCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2RhZW1vbl9z YW5pdHljaGVja19lbnZpcm9ubWVudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29u c3QgJnN5c3Jvb3QpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25t ZW50IChzeXNyb290KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0K LSAKLS06OnJ1c3Q6OlN0cmluZyBkZXBsb3ltZW50X2dlbmVyYXRlX2lkKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KSBub2V4Y2VwdCB7Ci0rOjpydXN0 OjpTdHJpbmcKLStkZXBsb3ltZW50X2dlbmVyYXRlX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl RGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1h eWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQoZGVwbG95bWVudCwgJnJldHVybiQudmFs dWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12b2lk IGRlcGxveW1lbnRfcG9wdWxhdGVfdmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3Qg JmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIHsK LS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQoc3lzcm9vdCwgZGVwbG95bWVudCwgZGlj dCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZGVwbG95bWVudF9nZW5lcmF0ZV9pZCAoZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUp OwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZAot K2RlcGxveW1lbnRfcG9wdWxhdGVfdmFyaWFudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRp Y3QpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9wb3B1bGF0ZV92YXJpYW50IChzeXNyb290 LCBkZXBsb3ltZW50LCBkaWN0KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS12b2lkIGdlbmVyYXRlX2Jhc2VsYXllcl9yZWZzKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFi bGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyhzeXNyb290LCByZXBvLCBjYW5jZWxs YWJsZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2dlbmVyYXRlX2Jhc2Vs YXllcl9yZWZzICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2Fu Y2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX2Jh c2VsYXllcl9yZWZzIChzeXNyb290LCByZXBvLCBjYW5jZWxsYWJsZSk7Ci0rICBpZiAoZXJyb3Ik LnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCB2YXJpYW50X2FkZF9yZW1vdGVf c3RhdHVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0 ciByZWZzcGVjLCA6OnJ1c3Q6OlN0ciBiYXNlX2NoZWNrc3VtLCA6OnJwbW9zdHJlZWN4eDo6R1Zh cmlhbnREaWN0IGNvbnN0ICZkaWN0KSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyhy ZXBvLCByZWZzcGVjLCBiYXNlX2NoZWNrc3VtLCBkaWN0KTsKLS0gIGlmIChlcnJvciQucHRyKSB7 Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK LS0gIH0KLSt2b2lkCi0rdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyAoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVj eHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJpYW50X2Fk ZF9yZW1vdGVfc3RhdHVzIChyZXBvLCByZWZzcGVjLCBiYXNlX2NoZWNrc3VtLCBkaWN0KTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJwbW9zdHJlZWN4 eDo6RGVwbG95bWVudExheWVyZWRNZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21t aXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0KSB7Ci0rOjpycG1vc3RyZWVjeHg6 OkRlcGxveW1lbnRMYXllcmVkTWV0YQotK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21t aXQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFy aWFudCBjb25zdCAmY29tbWl0KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3Ry ZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YT4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xh eWVyZWRtZXRhX2Zyb21fY29tbWl0KGRlcGxveW1lbnQsIGNvbW1pdCwgJnJldHVybiQudmFsdWUp OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVy biQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQgKAotKyAg ICAgIGRlcGxveW1lbnQsIGNvbW1pdCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5w dHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhIGRlcGxv eW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm cmVwbywgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQp IHsKLSs6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhCi0rZGVwbG95bWVudF9s YXllcmVkbWV0YV9sb2FkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBs b3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy cG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YT4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lt ZW50X2xheWVyZWRtZXRhX2xvYWQocmVwbywgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOwot LSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkIChyZXBvLCBk ZXBsb3ltZW50LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LTo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIHBhcnNlX292ZXJyaWRl X3NvdXJjZSg6OnJ1c3Q6OlN0ciBzb3VyY2UpIHsKLSs6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVS ZXBsYWNlbWVudFNvdXJjZQotK3BhcnNlX292ZXJyaWRlX3NvdXJjZSAoOjpydXN0OjpTdHIgc291 cmNlKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnRTb3VyY2U+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2Vfb3ZlcnJpZGVfc291cmNlKHNv dXJjZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2Vfb3ZlcnJp ZGVfc291cmNlIChzb3VyY2UsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlBhcnNlZFJldmlzaW9uIHBhcnNlX3JldmlzaW9uKDo6 cnVzdDo6U3RyIHNvdXJjZSkgewotKzo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbgotK3Bh cnNlX3JldmlzaW9uICg6OnJ1c3Q6OlN0ciBzb3VyY2UpCi0rewotICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2Vf cmV2aXNpb24oc291cmNlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2VfcmV2 aXNpb24gKHNvdXJjZSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAg IHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJ1c3Q6OlN0cmluZyBnZW5lcmF0ZV9vYmplY3RfcGF0aCg6OnJ1c3Q6OlN0ciBiYXNl LCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQpIHsKLSs6OnJ1c3Q6OlN0cmluZwotK2dlbmVyYXRl X29iamVjdF9wYXRoICg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQp Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRnZW5lcmF0ZV9vYmplY3RfcGF0aChiYXNlLCBuZXh0X3NlZ21lbnQsICZyZXR1cm4kLnZhbHVl KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1 cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX29iamVjdF9wYXRoIChiYXNlLCBuZXh0 X3NlZ21lbnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0r ICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsK LSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t dm9pZCBmYWlscG9pbnQoOjpydXN0OjpTdHIgcCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGZhaWxwb2ludChwKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rZmFpbHBvaW50ICg6OnJ1c3Q6OlN0ciBwKQot K3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRmYWlscG9pbnQgKHApOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAg ICB9Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgUnBtSW1wb3J0ZXJGbGFnczo6bGF5b3V0OjpzaXpl KCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1J bXBvcnRlckZsYWdzJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStScG1JbXBv cnRlckZsYWdzOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ikc2l6ZW9mICgp OwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFJwbUltcG9ydGVyRmxhZ3M6OmxheW91dDo6YWxpZ24o KSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyRmxhZ3Mkb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6c3RkOjpzaXplX3QKLStScG1JbXBv cnRlckZsYWdzOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJGFsaWdub2Yg KCk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdz PiBycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkgbm9leGNlcHQgewotLSAgcmV0dXJuIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZnJvbV9yYXcocnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkoKSk7 Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ci0rcnBtX2lt cG9ydGVyX2ZsYWdzX25ld19lbXB0eSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmZyb21fcmF3ICgKLSsgICAg ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtX2ltcG9ydGVyX2ZsYWdzX25ld19lbXB0 eSAoKSk7Ci0gfQotIAotLWJvb2wgUnBtSW1wb3J0ZXJGbGFnczo6aXNfaW1hX2VuYWJsZWQoKSBj b25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJsZWQoKnRoaXMpOwotK2Jvb2wKLStScG1JbXBvcnRl ckZsYWdzOjppc19pbWFfZW5hYmxlZCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRpc19pbWFfZW5hYmxl ZCAoKnRoaXMpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFJwbUltcG9ydGVyOjpsYXlvdXQ6OnNp emUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStScG1JbXBvcnRl cjo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6 c3RkOjpzaXplX3QgUnBtSW1wb3J0ZXI6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJGFs aWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUnBtSW1wb3J0ZXI6OmxheW91dDo6YWxpZ24gKCkg bm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlcj4gcnBtX2ltcG9ydGVyX25ldyg6OnJ1c3Q6OlN0ciBwa2dfbmFt ZSwgOjpydXN0OjpTdHIgb3N0cmVlX2JyYW5jaCwgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy RmxhZ3MgY29uc3QgJmZsYWdzKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyPgotK3JwbV9pbXBvcnRlcl9uZXcgKDo6cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6 OlN0ciBvc3RyZWVfYnJhbmNoLAotKyAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncykKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4+IHJldHVybiQ7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cnBtX2ltcG9ydGVyX25ldyhwa2dfbmFtZSwgb3N0cmVlX2JyYW5jaCwgZmxhZ3MsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1faW1wb3J0ZXJfbmV3ICgKLSsgICAgICBwa2dfbmFt ZSwgb3N0cmVlX2JyYW5jaCwgZmxhZ3MsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQu cHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZh bHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgUnBtSW1wb3J0ZXI6OmhhbmRsZV90cmFuc2xh dGVfcGF0aG5hbWUoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5n Ci0rUnBtSW1wb3J0ZXI6OmhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6U3RyIHBh dGgpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4g cmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYW5k bGVfdHJhbnNsYXRlX3BhdGhuYW1lKCp0aGlzLCBwYXRoLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSAoKnRoaXMsIHBh dGgsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFJwbUltcG9ydGVyOjpvc3RyZWVfYnJhbmNoKCkg Y29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5nCi0rUnBtSW1wb3J0ZXI6Om9zdHJlZV9i cmFuY2ggKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJG9zdHJlZV9icmFuY2goKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6 OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlciRvc3RyZWVfYnJhbmNoICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJp bmcgUnBtSW1wb3J0ZXI6OnBrZ19uYW1lKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6U3Ry aW5nCi0rUnBtSW1wb3J0ZXI6OnBrZ19uYW1lICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRwa2dfbmFtZSgqdGhpcywgJnJldHVybiQudmFs dWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHBrZ19uYW1lICgqdGhpcywgJnJldHVybiQu dmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t Ym9vbCBScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCgpIGNvbnN0IG5vZXhjZXB0 IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9j X2ZpbGVzX2FyZV9maWx0ZXJlZCgqdGhpcyk7Ci0rYm9vbAotK1JwbUltcG9ydGVyOjpkb2NfZmls ZXNfYXJlX2ZpbHRlcmVkICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgq dGhpcyk7Ci0gfQotIAotLXZvaWQgUnBtSW1wb3J0ZXI6OmRvY19maWxlc19pbnNlcnQoOjpydXN0 OjpTdHIgcGF0aCkgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyJGRvY19maWxlc19pbnNlcnQoKnRoaXMsIHBhdGgpOwotK3ZvaWQKLStScG1JbXBv cnRlcjo6ZG9jX2ZpbGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQKLSt7Ci0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2luc2Vy dCAoKnRoaXMsIHBhdGgpOwotIH0KLSAKLS1ib29sIFJwbUltcG9ydGVyOjpkb2NfZmlsZXNfY29u dGFpbnMoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfY29udGFpbnMoKnRo aXMsIHBhdGgpOwotK2Jvb2wKLStScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2NvbnRhaW5zICg6OnJ1 c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2NvbnRhaW5zICgqdGhpcywgcGF0 aCk7Ci0gfQotIAotLXZvaWQgUnBtSW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19pbnNlcnQoOjpy dXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdCB7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2luc2Vy dCgqdGhpcywgcGF0aCwgaW5kZXgpOwotK3ZvaWQKLStScG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJp ZGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4 Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1m aV9vdmVycmlkZXNfaW5zZXJ0ICgqdGhpcywgcGF0aCwgaW5kZXgpOwotIH0KLSAKLS1ib29sIFJw bUltcG9ydGVyOjpycG1maV9vdmVycmlkZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0aCkgY29u c3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1J bXBvcnRlciRycG1maV9vdmVycmlkZXNfY29udGFpbnMoKnRoaXMsIHBhdGgpOwotK2Jvb2wKLStS cG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBj b25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICgqdGhpcywgcGF0aCk7Ci0gfQot IAotLTo6c3RkOjp1aW50NjRfdCBScG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2dldCg6OnJ1 c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRlc19nZXQoKnRoaXMsIHBhdGgp OwotKzo6c3RkOjp1aW50NjRfdAotK1JwbUltcG9ydGVyOjpycG1maV9vdmVycmlkZXNfZ2V0ICg6 OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2dldCAoKnRoaXMs IHBhdGgpOwotIH0KLSAKLS1ib29sIFJwbUltcG9ydGVyOjppc19pbWFfZW5hYmxlZCgpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkaXNfaW1hX2VuYWJsZWQoKnRoaXMpOwotK2Jvb2wKLStScG1JbXBvcnRlcjo6aXNfaW1h X2VuYWJsZWQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ltYV9lbmFibGVkICgqdGhpcyk7Ci0gfQotIAot LXZvaWQgUnBtSW1wb3J0ZXI6OnR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyg6OnJwbW9zdHJlZWN4 eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciR0d2Vha19pbXBvcnRlZF9maWxlX2lu Zm8oKnRoaXMsIGZpbGVfaW5mbyk7Ci0rdm9pZAotK1JwbUltcG9ydGVyOjp0d2Vha19pbXBvcnRl ZF9maWxlX2luZm8gKDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykg Y29uc3Qgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvICgqdGhpcywgZmlsZV9pbmZvKTsKLSB9Ci0g Ci0tYm9vbCBScG1JbXBvcnRlcjo6aXNfZmlsZV9maWx0ZXJlZCg6OnJ1c3Q6OlN0ciBwYXRoLCA6 OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IHsKLStib29s Ci0rUnBtSW1wb3J0ZXI6OmlzX2ZpbGVfZmlsdGVyZWQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnBt b3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3QKLSt7Ci0gICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaXNfZmlsZV9m aWx0ZXJlZCgqdGhpcywgcGF0aCwgZmlsZV9pbmZvLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0tfQotLQotLXZvaWQgUnBtSW1wb3J0ZXI6OnRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSg6 OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmls ZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5KCp0aGlzLCBhYnNfcGF0 aCwgZmlsZV9pbmZvLCB1c2VybmFtZSwgZ3JvdXBuYW1lKTsKLS0gIGlmIChlcnJvciQucHRyKSB7 Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK LS0gIH0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19maWxlX2ZpbHRlcmVkICgKLSsgICAgICAqdGhpcywg cGF0aCwgZmlsZV9pbmZvLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0r fQotKwotK3ZvaWQKLStScG1JbXBvcnRlcjo6dHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICg6 OnJ1c3Q6OlN0ciBhYnNfcGF0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5h bWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciR0 cmFuc2xhdGVfdG9fdG1wZmlsZXNfZW50cnkgKAotKyAgICAgICAgICAqdGhpcywgYWJzX3BhdGgs IGZpbGVfaW5mbywgdXNlcm5hbWUsIGdyb3VwbmFtZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tYm9vbCBScG1JbXBvcnRlcjo6aGFzX3RtcGZpbGVzX2Vu dHJpZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyJGhhc190bXBmaWxlc19lbnRyaWVzKCp0aGlzKTsKLStib29sCi0r UnBtSW1wb3J0ZXI6Omhhc190bXBmaWxlc19lbnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYXNfdG1w ZmlsZXNfZW50cmllcyAoKnRoaXMpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBScG1JbXBvcnRl cjo6c2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0 OjpTdHJpbmcKLStScG1JbXBvcnRlcjo6c2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiBy ZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHNlcmlh bGl6ZV90bXBmaWxlc19jb250ZW50KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAK LS06OnJ1c3Q6OlN0cmluZyB0bXBmaWxlc190cmFuc2xhdGUoOjpydXN0OjpTdHIgYWJzX3BhdGgs IDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIg dXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkgewotKzo6cnVzdDo6U3RyaW5nCi0rdG1w ZmlsZXNfdHJhbnNsYXRlICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdG aWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLAotKyAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0ZShh YnNfcGF0aCwgZmlsZV9pbmZvLCB1c2VybmFtZSwgZ3JvdXBuYW1lLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdG1wZmlsZXNfdHJhbnNsYXRlICgKLSsgICAgICBhYnNfcGF0aCwgZmls ZV9pbmZvLCB1c2VybmFtZSwgZ3JvdXBuYW1lLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgYXBwZW5kX2RyYWN1dF9yYW5kb21fY3Bpbyg6OnN0ZDo6 aW50MzJfdCBmZCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8oZmQpOwotLSAgaWYg KGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLSthcHBlbmRfZHJhY3V0X3JhbmRvbV9jcGlvICg6 OnN0ZDo6aW50MzJfdCBmZCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoZmQp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLTo6c3RkOjpp bnQzMl90IGluaXRyYW1mc19vdmVybGF5X2dlbmVyYXRlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBjb25zdCAmZmlsZXMsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxh YmxlKSB7Ci0rOjpzdGQ6OmludDMyX3QKLStpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSAoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlcywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpCi0r ewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6aW50MzJfdD4gcmV0dXJuJDsKLS0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRp bml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZShmaWxlcywgY2FuY2VsbGFibGUsICZyZXR1cm4kLnZh bHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGluaXRyYW1mc19vdmVybGF5X2dlbmVyYXRlIChm aWxlcywgY2FuY2VsbGFibGUsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tdm9pZCBqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSgpIG5vZXhjZXB0IHsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFp bHVyZSgpOwotK3ZvaWQKLStqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2Vw dAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRqb3VybmFsX3ByaW50X3N0YWdp bmdfZmFpbHVyZSAoKTsKLSB9Ci0gCi0tdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2so OjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrKG1zZyk7Ci0rdm9pZAotK2NvbnNvbGVfcHJv Z3Jlc3NfYmVnaW5fdGFzayAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKG1zZyk7 Ci0gfQotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zKDo6cnVzdDo6U3Ry IG1zZywgOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX25faXRlbXMobXNnLCBuKTsKLSt2b2lk Ci0rY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zICg6OnJ1c3Q6OlN0ciBtc2csIDo6c3Rk Ojp1aW50NjRfdCBuKSBub2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX25faXRlbXMgKG1zZywgbik7Ci0gfQotIAotLXZvaWQg Y29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50KDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQg ewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5f cGVyY2VudChtc2cpOwotK3ZvaWQKLStjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQgKDo6 cnVzdDo6U3RyIG1zZykgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50IChtc2cpOwotIH0KLSAKLS12b2lkIGNv bnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7Ci0t ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfbWVzc2Fn ZShtc2cpOwotK3ZvaWQKLStjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1c3Q6OlN0 ciBtc2cpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNv bGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UgKG1zZyk7Ci0gfQotIAotLXZvaWQgY29uc29sZV9wcm9n cmVzc19zZXRfc3ViX21lc3NhZ2UoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2Uo bXNnKTsKLSt2b2lkCi0rY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UgKDo6cnVzdDo6 U3RyIG1zZykgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29u c29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UgKG1zZyk7Ci0gfQotIAotLXZvaWQgY29uc29s ZV9wcm9ncmVzc191cGRhdGUoOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0IHsKLS0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3VwZGF0ZShuKTsKLSt2b2lk Ci0rY29uc29sZV9wcm9ncmVzc191cGRhdGUgKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdAot K3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3VwZGF0 ZSAobik7Ci0gfQotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19lbmQoOjpydXN0OjpTdHIgc3Vm Zml4KSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9w cm9ncmVzc19lbmQoc3VmZml4KTsKLSt2b2lkCi0rY29uc29sZV9wcm9ncmVzc19lbmQgKDo6cnVz dDo6U3RyIHN1ZmZpeCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19lbmQgKHN1ZmZpeCk7Ci0gfQotIAotLWJvb2wgSGlzdG9yeUVu dHJ5OjpvcGVyYXRvcj09KEhpc3RvcnlFbnRyeSBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7 Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVy YXRvciRlcSgqdGhpcywgcmhzKTsKLStib29sCi0rSGlzdG9yeUVudHJ5OjpvcGVyYXRvcj09IChI aXN0b3J5RW50cnkgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRlcSAoKnRoaXMs IHJocyk7Ci0gfQotIAotLWJvb2wgSGlzdG9yeUVudHJ5OjpvcGVyYXRvciE9KEhpc3RvcnlFbnRy eSBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRuZSgqdGhpcywgcmhzKTsKLStib29s Ci0rSGlzdG9yeUVudHJ5OjpvcGVyYXRvciE9IChIaXN0b3J5RW50cnkgY29uc3QgJnJocykgY29u c3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhp c3RvcnlFbnRyeSRvcGVyYXRvciRuZSAoKnRoaXMsIHJocyk7Ci0gfQotIAotLTo6c3RkOjpzaXpl X3QgSGlzdG9yeUN0eDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJHNpemVvZigpOwotKzo6 c3RkOjpzaXplX3QKLStIaXN0b3J5Q3R4OjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3Ik c2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IEhpc3RvcnlDdHg6OmxheW91dDo6YWxp Z24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhp c3RvcnlDdHgkb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6c3RkOjpzaXplX3QKLStIaXN0b3J5Q3R4 OjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0gfQotIAotLTo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiBoaXN0b3J5X2N0eF9uZXcoKSB7 Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+Ci0raGlzdG9yeV9jdHhf bmV3ICgpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6SGlzdG9yeUN0eD4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9jdHhfbmV3KCZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X2N0eF9uZXcgKCZyZXR1cm4kLnZhbHVlKTsK LSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRy eSBIaXN0b3J5Q3R4OjpuZXh0X2VudHJ5KCkgewotKzo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50 cnkKLStIaXN0b3J5Q3R4OjpuZXh0X2VudHJ5ICgpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgk bmV4dF9lbnRyeSgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk SGlzdG9yeUN0eCRuZXh0X2VudHJ5ICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVy cm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOwotIH0KLSAKLS12b2lkIGhpc3RvcnlfcHJ1bmUoKSB7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9w cnVuZSgpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStoaXN0b3J5X3BydW5l ICgpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGhpc3RvcnlfcHJ1bmUgKCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBUb2tpb0hhbmRsZTo6bGF5b3V0Ojpz aXplKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU b2tpb0hhbmRsZSRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVG9raW9IYW5k bGU6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06 OnN0ZDo6c2l6ZV90IFRva2lvSGFuZGxlOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRh bGlnbm9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK1Rva2lvSGFuZGxlOjpsYXlvdXQ6OmFsaWduICgp IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tp b0hhbmRsZSRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFRva2lv RW50ZXJHdWFyZDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0r OjpzdGQ6OnNpemVfdAotK1Rva2lvRW50ZXJHdWFyZDo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3Vh cmQkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFRva2lvRW50ZXJH dWFyZDo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0 ZDo6c2l6ZV90Ci0rVG9raW9FbnRlckd1YXJkOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0r ewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQk b3BlcmF0b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRva2lvSGFuZGxlPiB0b2tpb19oYW5kbGVfZ2V0KCkgbm9leGNlcHQgewotLSAgcmV0dXJuIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmZyb21fcmF3KHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCR0b2tpb19oYW5kbGVfZ2V0KCkpOwotKzo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT4KLSt0b2tpb19oYW5kbGVfZ2V0ICgpIG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46 OmZyb21fcmF3ICgKLSsgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG9raW9faGFu ZGxlX2dldCAoKSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0Vu dGVyR3VhcmQ+IFRva2lvSGFuZGxlOjplbnRlcigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVy biA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6ZnJvbV9yYXco cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJGVudGVyKCp0aGlzKSk7Ci0r OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4KLStUb2tpb0hhbmRs ZTo6ZW50ZXIgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD46OmZyb21fcmF3ICgKLSsgICAgICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkZW50ZXIgKCp0aGlzKSk7Ci0gfQotIAot LWJvb2wgc2NyaXB0X2lzX2lnbm9yZWQoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3Jp cHQsIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25vcmVkKHBrZywgc2NyaXB0LCB1c2Vf a2VybmVsX2luc3RhbGwpOwotK2Jvb2wKLStzY3JpcHRfaXNfaWdub3JlZCAoOjpydXN0OjpTdHIg cGtnLCA6OnJ1c3Q6OlN0ciBzY3JpcHQsIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2NyaXB0X2lzX2ln bm9yZWQgKHBrZywgc2NyaXB0LCB1c2Vfa2VybmVsX2luc3RhbGwpOwotIH0KLSAKLS12b2lkIHRl c3R1dGlsc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmd2KSB7Ci0t ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3Yk KDo6c3RkOjptb3ZlKGFyZ3YpKTsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbHNfZW50cnlwb2ludCgmYXJndiQudmFs dWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLSt0ZXN0dXRpbHNfZW50cnlw b2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3YpCi0rewotKyAgOjpydXN0OjpN YW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmd2JCAoOjpzdGQ6Om1v dmUgKGFyZ3YpKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbHNfZW50cnlwb2ludCAoJmFyZ3YkLnZhbHVlKTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJ1c3Q6OlN0cmlu ZyBtYXliZV9zaGVsbF9xdW90ZSg6OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQgewotKzo6cnVz dDo6U3RyaW5nCi0rbWF5YmVfc2hlbGxfcXVvdGUgKDo6cnVzdDo6U3RyIGlucHV0KSBub2V4Y2Vw dAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0t ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWF5YmVfc2hlbGxfcXVvdGUoaW5wdXQsICZy ZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtYXliZV9zaGVsbF9xdW90ZSAoaW5wdXQsICZy ZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLWJvb2wgUmVmc3BlYzo6b3BlcmF0b3I9PShSZWZzcGVjIGNvbnN0ICZyaHMpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVmc3Bl YyRvcGVyYXRvciRlcSgqdGhpcywgcmhzKTsKLStib29sCi0rUmVmc3BlYzo6b3BlcmF0b3I9PSAo UmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVmc3BlYyRvcGVyYXRvciRlcSAoKnRoaXMsIHJocyk7Ci0g fQotIAotLWJvb2wgUmVmc3BlYzo6b3BlcmF0b3IhPShSZWZzcGVjIGNvbnN0ICZyaHMpIGNvbnN0 IG5vZXhjZXB0IHsKLStib29sCi0rUmVmc3BlYzo6b3BlcmF0b3IhPSAoUmVmc3BlYyBjb25zdCAm cmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiAhKCp0aGlzID09IHJocyk7Ci0gfQot IAotLWJvb2wgT3ZlcnJpZGVSZXBsYWNlbWVudDo6b3BlcmF0b3I9PShPdmVycmlkZVJlcGxhY2Vt ZW50IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcSgqdGhpcywgcmhz KTsKLStib29sCi0rT3ZlcnJpZGVSZXBsYWNlbWVudDo6b3BlcmF0b3I9PSAoT3ZlcnJpZGVSZXBs YWNlbWVudCBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcSAoKnRo aXMsIHJocyk7Ci0gfQotIAotLWJvb2wgT3ZlcnJpZGVSZXBsYWNlbWVudDo6b3BlcmF0b3IhPShP dmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKLStib29sCi0r T3ZlcnJpZGVSZXBsYWNlbWVudDo6b3BlcmF0b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25z dCAmcmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiAhKCp0aGlzID09IHJocyk7Ci0g fQotIAotLTo6c3RkOjpzaXplX3QgVHJlZWZpbGU6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsK LS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3Ik c2l6ZW9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK1RyZWVmaWxlOjpsYXlvdXQ6OnNpemUgKCkgbm9l eGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JG9wZXJhdG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBUcmVlZmlsZTo6bGF5 b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6c3RkOjpzaXplX3QKLStUcmVl ZmlsZTo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0t OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXcoOjpydXN0 OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKSB7Ci0rOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotK3RyZWVmaWxlX25ldyAoOjpydXN0OjpTdHIgZmlsZW5h bWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV9uZXcoZmlsZW5hbWUsIGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0cmVlZmlsZV9uZXcgKGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19lbXB0eSgpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGU+Ci0rdHJlZWZpbGVfbmV3X2VtcHR5ICgpCi0rewotICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+PiByZXR1 cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHRyZWVmaWxlX25ld19lbXB0eSgmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkdHJlZWZpbGVfbmV3X2VtcHR5ICgmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0 cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZp bGVfbmV3X2Zyb21fc3RyaW5nKDo6cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQpIHsKLSs6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ci0rdHJlZWZpbGVfbmV3X2Zyb21fc3Ry aW5nICg6OnJ1c3Q6OlN0ciBidWYsIGJvb2wgY2xpZW50KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcoYnVmLCBjbGllbnQsICZyZXR1cm4kLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19mcm9tX3N0cmluZyAoYnVmLCBjbGll bnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfY29tcG9zZSg6OnJ1 c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpIHsKLSs6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ci0rdHJlZWZpbGVfbmV3X2NvbXBvc2UgKDo6cnVzdDo6 U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkdHJlZWZpbGVfbmV3X2NvbXBvc2UoZmlsZW5hbWUsIGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1 ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY29tcG9zZSAoZmlsZW5hbWUs IGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVu dCg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpIHsKLSs6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ci0rdHJlZWZpbGVfbmV3X2NsaWVudCAoOjpy dXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKQotK3sKLSAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJu JDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0cmVlZmlsZV9uZXdfY2xpZW50KGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQu dmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudCAoZmlsZW5h bWUsIGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQot IAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2Ns aWVudF9mcm9tX2V0Yyg6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkgewotKzo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZT4KLSt0cmVlZmlsZV9uZXdfY2xpZW50X2Zyb21fZXRjICg6OnJ1 c3Q6OlN0ciBiYXNlYXJjaCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Ns aWVudF9mcm9tX2V0YyhiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0YyAoYmFzZWFyY2gsICZyZXR1cm4kLnZh bHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpzdGQ6OnVpbnQzMl90IHRyZWVm aWxlX2RlbGV0ZV9jbGllbnRfZXRjKCkgewotKzo6c3RkOjp1aW50MzJfdAotK3RyZWVmaWxlX2Rl bGV0ZV9jbGllbnRfZXRjICgpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWlu dDMyX3Q+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMoJnJldHVybiQu dmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMg KCZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQot KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpT dHIgVHJlZWZpbGU6OmdldF93b3JrZGlyKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OlN0cj46Om5ld191bmNoZWNrZWQocnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyKCp0aGlzKSk7Ci0rOjpydXN0OjpTdHIKLStU cmVlZmlsZTo6Z2V0X3dvcmtkaXIgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gOjpy dXN0OjppbXBsPDo6cnVzdDo6U3RyPjo6bmV3X3VuY2hlY2tlZCAoCi0rICAgICAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyICgqdGhpcykpOwotIH0KLSAK LS06OnN0ZDo6aW50MzJfdCBUcmVlZmlsZTo6Z2V0X3Bhc3N3ZF9mZCgpIG5vZXhjZXB0IHsKLS0g IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Bhc3N3ZF9m ZCgqdGhpcyk7Ci0rOjpzdGQ6OmludDMyX3QKLStUcmVlZmlsZTo6Z2V0X3Bhc3N3ZF9mZCAoKSBu b2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3Bhc3N3ZF9mZCAoKnRoaXMpOwotIH0KLSAKLS06OnN0ZDo6aW50MzJfdCBUcmVlZmls ZTo6Z2V0X2dyb3VwX2ZkKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3JvdXBfZmQoKnRoaXMpOwotKzo6c3RkOjppbnQzMl90 Ci0rVHJlZWZpbGU6OmdldF9ncm91cF9mZCAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkICgqdGhpcyk7Ci0g fQotIAotLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfanNvbl9zdHJpbmcoKSBjb25zdCBu b2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X2pzb25fc3RyaW5nICgp IGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmlu Zz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf anNvbl9zdHJpbmcoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfanNvbl9zdHJpbmcgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gVHJlZWZpbGU6OmdldF9vc3RyZWVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfb3N0cmVlX2xheWVycyAo KSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9vc3RyZWVfbGF5ZXJzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9sYXllcnMgKCp0aGlzLCAmcmV0dXJuJC52YWx1 ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5 ZXJzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1Ry ZWVmaWxlOjpnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdAotK3sK LSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1 cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVf b3ZlcnJpZGVfbGF5ZXJzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9hbGxfb3N0cmVlX2xheWVycygpIGNv bnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6 Z2V0X2FsbF9vc3RyZWVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2FsbF9vc3Ry ZWVfbGF5ZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRy ZWVmaWxlOjpnZXRfcmVwb3MoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9yZXBvcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4k OwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvcygqdGhp cywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvcyAoKnRo aXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X3Bh Y2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgot K1RyZWVmaWxlOjpnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMgKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6cmVxdWlyZV9hdXRvbWF0aWNfdmVy c2lvbl9wcmVmaXgoKSBjb25zdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6cmVxdWly ZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXggKCkgY29uc3QKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlcXVpcmVfYXV0 b21hdGljX3ZlcnNpb25fcHJlZml4KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCAoKnRo aXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJv ciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4k LnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6YWRkX3BhY2thZ2VzKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZykgewotLSAgOjpy dXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQo OjpzdGQ6Om1vdmUocGFja2FnZXMpKTsKLStib29sCi0rVHJlZWZpbGU6OmFkZF9wYWNrYWdlcyAo OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5n KQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcGFja2FnZXMkICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXMoKnRoaXMsICZw YWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzICgKLSsgICAgICAqdGhpcywgJnBhY2thZ2VzJC52 YWx1ZSwgYWxsb3dfZXhpc3RpbmcsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6aGFzX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQg ewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFj a2FnZXMoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6aGFzX3BhY2thZ2VzICgpIGNvbnN0IG5v ZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRoYXNfcGFja2FnZXMgKCp0aGlzKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IFRyZWVmaWxlOjpnZXRfbG9jYWxfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9sb2NhbF9wYWNrYWdlcyAo KSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9sb2NhbF9wYWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9wYWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJv b2wgVHJlZWZpbGU6OmFkZF9sb2NhbF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlE cm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBh Y2thZ2VzKSk7Ci0rYm9vbAotK1RyZWVmaWxlOjphZGRfbG9jYWxfcGFja2FnZXMgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZykKLSt7Ci0r ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2th Z2VzJCAoOjpzdGQ6Om1vdmUgKHBhY2thZ2VzKSk7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJv b2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2FsX3BhY2thZ2VzKCp0aGlzLCAmcGFj a2FnZXMkLnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVy cm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9wYWNrYWdlcyAoCi0rICAgICAgKnRoaXMsICZwYWNrYWdl cyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3Ik LnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52 YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0 X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9w YWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKnRoaXMs ICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxfZmlsZW92 ZXJyaWRlX3BhY2thZ2VzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6YWRkX2xvY2Fs X2ZpbGVvdmVycmlkZV9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2Fn ZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7 Ci0rYm9vbAotK1RyZWVmaWxlOjphZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfZXhpc3RpbmcpCi0rewotKyAgOjpydXN0 OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6 c3RkOjptb3ZlIChwYWNrYWdlcykpOwotICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1 cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKnRoaXMs ICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2Vz ICgKLSsgICAgICAgICAgKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAm cmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsg IHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZp bGU6OnJlbW92ZV9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMs IGJvb2wgYWxsb3dfbm9lbnQpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7Ci0rYm9v bAotK1RyZWVmaWxlOjpyZW1vdmVfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBwYWNrYWdlcywgYm9vbCBhbGxvd19ub2VudCkKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCAoOjpzdGQ6Om1vdmUgKHBh Y2thZ2VzKSk7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcmVtb3ZlX3BhY2thZ2VzKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19ub2Vu dCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdl cyAoCi0rICAgICAgKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X25vZW50LCAmcmV0dXJu JC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292 ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ci0rVHJlZWZpbGU6OmdldF9wYWNrYWdlc19vdmVy cmlkZV9yZXBsYWNlICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4+IHJldHVy biQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2Vz X292ZXJyaWRlX3JlcGxhY2UoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0 ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJv b2wgVHJlZWZpbGU6Omhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNl cHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNf cGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgqdGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpoYXNf cGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJy aWRlX3JlcGxhY2UgKCp0aGlzKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6YWRkX3BhY2thZ2Vz X292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgcmVw bGFjZW1lbnQpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiByZXBsYWNlbWVudCQoOjpzdGQ6Om1vdmUocmVwbGFj ZW1lbnQpKTsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKnRoaXMsICZyZXBsYWNlbWVudCQudmFsdWUp OwotK2Jvb2wKLStUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKDo6cnBt b3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4Y2VwdAotK3sK LSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiByZXBsYWNlbWVudCQgKAotKyAgICAgIDo6c3RkOjptb3ZlIChyZXBsYWNlbWVudCkpOwot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2Fn ZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKnRoaXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVwbGFj ZW1lbnQkLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3Zl cnJpZGVfcmVwbGFjZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJy aWRlX3JlcGxhY2UoKnRoaXMsIHBhY2thZ2UpOwotK2Jvb2wKLStUcmVlZmlsZTo6cmVtb3ZlX3Bh Y2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZSAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQKLSt7 Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9w YWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKCp0aGlzLCBwYWNrYWdlKTsKLSB9Ci0gCi0tOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZV9sb2NhbCgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4KLStUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCgqdGhpcywgJnJldHVybiQu dmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12 b2lkIFRyZWVmaWxlOjphZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9w PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2th Z2VzKSk7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwo KnRoaXMsICZwYWNrYWdlcyQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlk ZV9yZXBsYWNlX2xvY2FsICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZAotK1RyZWVmaWxlOjphZGRfcGFj a2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IHBhY2thZ2VzKQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPj4gcGFja2FnZXMkICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgqdGhpcywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2thZ2VzJC52YWx1ZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6cmVtb3Zl X3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4 Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJl bW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoKnRoaXMsIHBhY2thZ2UpOwotK2Jv b2wKLStUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpy dXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9j YWwgKCp0aGlzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKTsKLSB9Ci0g Ci0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3Zl cnJpZGVfcmVtb3ZlKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPgotK1RyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgpIGNvbnN0IG5v ZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12b2lkIFRyZWVmaWxl OjphZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBwYWNrYWdlcykgewotLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiBwYWNrYWdlcyQoOjpzdGQ6Om1vdmUocGFja2FnZXMpKTsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgqdGhpcywgJnJldHVybiQu dmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0rCi0r dm9pZAotK1RyZWVmaWxlOjphZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpCi0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8 OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNr YWdlcykpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92 ZSAoKnRoaXMsICZwYWNrYWdlcyQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsK LSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OwotKyAgICB9Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRl X3JlbW92ZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3Jl bW92ZSgqdGhpcywgcGFja2FnZSk7Ci0rYm9vbAotK1RyZWVmaWxlOjpyZW1vdmVfcGFja2FnZV9v dmVycmlkZV9yZW1vdmUgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0Ci0rewotKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9v dmVycmlkZV9yZW1vdmUgKCp0aGlzLCBwYWNrYWdlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6 aGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lKCp0aGlzLCBuYW1lKTsKLStib29s Ci0rVHJlZWZpbGU6Omhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoOjpydXN0OjpT dHIgbmFtZSkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoKnRo aXMsIG5hbWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpyZW1vdmVfYWxsX292ZXJyaWRlcygp IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkcmVtb3ZlX2FsbF9vdmVycmlkZXMoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6cmVtb3Zl X2FsbF9vdmVycmlkZXMgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfb3ZlcnJpZGVzICgqdGhpcyk7Ci0gfQot IAotLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9hbGxfcGFja2FnZXMoKSBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfcGFj a2FnZXMoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6cmVtb3ZlX2FsbF9wYWNrYWdlcyAoKSBu b2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkcmVtb3ZlX2FsbF9wYWNrYWdlcyAoKnRoaXMpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9leGNsdWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNl cHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfZXhjbHVk ZV9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9leGNsdWRlX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X3BsYXRmb3JtX21vZHVs ZSgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfcGxh dGZvcm1fbW9kdWxlICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfcGxhdGZvcm1fbW9kdWxlKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0t ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BsYXRmb3JtX21vZHVsZSAoKnRoaXMsICZyZXR1cm4k LnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2luc3RhbGxfbGFuZ3Mo KSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJlZWZp bGU6OmdldF9pbnN0YWxsX2xhbmdzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MoKnRoaXMs ICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5zdGFsbF9sYW5n cyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpmb3JtYXRfaW5zdGFs bF9sYW5nc19tYWNybygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVm aWxlOjpmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8o KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRmb3JtYXRfaW5z dGFsbF9sYW5nc19tYWNybyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBUcmVlZmlsZTo6Z2V0X2xvY2tmaWxlX3JlcG9zKCkgY29uc3Qgbm9leGNlcHQgewotKzo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfbG9ja2ZpbGVfcmVwb3Mg KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfbG9ja2ZpbGVfcmVwb3MoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9ja2ZpbGVfcmVwb3MgKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnJ1c3Q6OlN0ciBUcmVlZmlsZTo6Z2V0X3JlZigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVy biA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTdHI+OjpuZXdfdW5jaGVja2VkKHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVmKCp0aGlzKSk7Ci0rOjpydXN0OjpTdHIKLStU cmVlZmlsZTo6Z2V0X3JlZiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpTdHI+OjpuZXdfdW5jaGVja2VkICgKLSsgICAgICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlZiAoKnRoaXMpKTsKLSB9Ci0gCi0tYm9vbCBU cmVlZmlsZTo6Z2V0X2NsaXdyYXAoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwKCp0aGlzKTsKLStib29s Ci0rVHJlZWZpbGU6OmdldF9jbGl3cmFwICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcCAoKnRoaXMp OwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9jbGl3 cmFwX2JpbmFyaWVzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPgotK1RyZWVmaWxlOjpnZXRfY2xpd3JhcF9iaW5hcmllcyAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBy ZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3 cmFwX2JpbmFyaWVzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1v dmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2NsaXdyYXBfYmluYXJpZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpz ZXRfY2xpd3JhcChib29sIGVuYWJsZWQpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfY2xpd3JhcCgqdGhpcywgZW5hYmxlZCk7Ci0rdm9pZAot K1RyZWVmaWxlOjpzZXRfY2xpd3JhcCAoYm9vbCBlbmFibGVkKSBub2V4Y2VwdAotK3sKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfY2xpd3JhcCAoKnRoaXMsIGVu YWJsZWQpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6Omdl dF9jb250YWluZXJfY21kKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfY29udGFpbmVyX2NtZCAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBy ZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250 YWluZXJfY21kKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X2NvbnRhaW5lcl9jbWQgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfcmVh ZG9ubHlfZXhlY3V0YWJsZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWFkb25seV9leGVjdXRhYmxlcygqdGhp cyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29uc3Qg bm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9yZWFkb25seV9leGVjdXRhYmxlcyAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVm aWxlOjpnZXRfZG9jdW1lbnRhdGlvbigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2RvY3VtZW50YXRpb24oKnRoaXMp OwotK2Jvb2wKLStUcmVlZmlsZTo6Z2V0X2RvY3VtZW50YXRpb24gKCkgY29uc3Qgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9k b2N1bWVudGF0aW9uICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OmdldF9yZWNvbW1l bmRzKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfcmVjb21tZW5kcygqdGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpn ZXRfcmVjb21tZW5kcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlY29tbWVuZHMgKCp0aGlzKTsKLSB9Ci0g Ci0tYm9vbCBUcmVlZmlsZTo6Z2V0X3NlbGludXgoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zZWxpbnV4KCp0aGlz KTsKLStib29sCi0rVHJlZWZpbGU6OmdldF9zZWxpbnV4ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51 eCAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfc3lzdXNlcnNfaXNfZm9yY2Vk KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKCp0aGlzKTsKLStib29sCi0rVHJlZWZp bGU6OmdldF9zeXN1c2Vyc19pc19mb3JjZWQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zeXN1c2Vyc19pc19m b3JjZWQgKCp0aGlzKTsKLSB9Ci0gCi0tOjpzdGQ6OnVpbnQzMl90IFRyZWVmaWxlOjpnZXRfc2Vs aW51eF9sYWJlbF92ZXJzaW9uKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uKCp0 aGlzKTsKLSs6OnN0ZDo6dWludDMyX3QKLStUcmVlZmlsZTo6Z2V0X3NlbGludXhfbGFiZWxfdmVy c2lvbiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbiAoKnRoaXMpOwotIH0K LSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X2dwZ19rZXkoKSBjb25zdCBub2V4Y2Vw dCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X2dwZ19rZXkgKCkgY29uc3Qgbm9l eGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4k OwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ncGdfa2V5KCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkg KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X2F1dG9tYXRpY192 ZXJzaW9uX3N1ZmZpeCgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVm aWxlOjpnZXRfYXV0b21hdGljX3ZlcnNpb25fc3VmZml4ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYXV0b21hdGljX3ZlcnNpb25fc3Vm Zml4KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1 dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6Omdl dF9jb250YWluZXIoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXIoKnRoaXMpOwotK2Jvb2wKLStUcmVl ZmlsZTo6Z2V0X2NvbnRhaW5lciAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lciAoKnRoaXMpOwot IH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfbWFjaGluZWlkX2NvbXBhdCgpIGNvbnN0IG5vZXhj ZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X21hY2hpbmVpZF9jb21wYXQoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6Z2V0X21hY2hpbmVp ZF9jb21wYXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9tYWNoaW5laWRfY29tcGF0ICgqdGhpcyk7Ci0gfQot IAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2V0Y19ncm91cF9t ZW1iZXJzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgot K1RyZWVmaWxlOjpnZXRfZXRjX2dyb3VwX21lbWJlcnMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJu JDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3Vw X21lbWJlcnMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfZXRjX2dyb3VwX21lbWJlcnMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4g OjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRf Ym9vdF9sb2NhdGlvbl9pc19tb2R1bGVzKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYm9vdF9sb2NhdGlvbl9pc19t b2R1bGVzKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OmdldF9ib290X2xvY2F0aW9uX2lzX21v ZHVsZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKCp0aGlzKTsK LSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6dXNlX2tlcm5lbF9pbnN0YWxsKCkgY29uc3Qgbm9leGNl cHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR1c2Vf a2VybmVsX2luc3RhbGwoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6dXNlX2tlcm5lbF9pbnN0 YWxsICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSR1c2Vfa2VybmVsX2luc3RhbGwgKCp0aGlzKTsKLSB9Ci0gCi0tYm9v bCBUcmVlZmlsZTo6Z2V0X2ltYSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2ltYSgqdGhpcyk7Ci0rYm9vbAotK1Ry ZWVmaWxlOjpnZXRfaW1hICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW1hICgqdGhpcyk7Ci0gfQotIAotLTo6 cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfcmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0IHsK LSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfcmVsZWFzZXZlciAoKSBjb25zdCBub2V4 Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7 Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlbGVhc2V2ZXIo KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVsZWFz ZXZlciAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQg VHJlZWZpbGU6OmdldF9yZXBvX21ldGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0g IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fbWV0 YWRhdGFfdGFyZ2V0KCp0aGlzKTsKLSs6OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0 Ci0rVHJlZWZpbGU6OmdldF9yZXBvX21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Jl cG9fbWV0YWRhdGFfdGFyZ2V0ICgqdGhpcyk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpBZHZp c29yaWVzTWV0YWRhdGFUYXJnZXQgVHJlZWZpbGU6OmdldF9hZHZpc29yaWVzX21ldGFkYXRhX3Rh cmdldCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2Fkdmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0KCp0aGlzKTsKLSs6 OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0Ci0rVHJlZWZpbGU6OmdldF9h ZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Fkdmlzb3JpZXNfbWV0 YWRhdGFfdGFyZ2V0ICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OnJwbWRiX2JhY2tl bmRfaXNfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRycG1kYl9iYWNrZW5kX2lzX3RhcmdldCgqdGhpcyk7Ci0r Ym9vbAotK1RyZWVmaWxlOjpycG1kYl9iYWNrZW5kX2lzX3RhcmdldCAoKSBjb25zdCBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBt ZGJfYmFja2VuZF9pc190YXJnZXQgKCp0aGlzKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6c2hv dWxkX25vcm1hbGl6ZV9ycG1kYigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2hvdWxkX25vcm1hbGl6ZV9ycG1kYigqdGhp cyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpzaG91bGRfbm9ybWFsaXplX3JwbWRiICgpIGNvbnN0IG5v ZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRzaG91bGRfbm9ybWFsaXplX3JwbWRiICgqdGhpcyk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4 OjpPcHRVc3JMb2NhbCBUcmVlZmlsZTo6Z2V0X29wdF91c3Jsb2NhbCgpIGNvbnN0IG5vZXhjZXB0 IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29w dF91c3Jsb2NhbCgqdGhpcyk7Ci0rOjpycG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsCi0rVHJlZWZp bGU6OmdldF9vcHRfdXNybG9jYWwgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcHRfdXNybG9jYWwgKCp0aGlz KTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfZmls ZXNfcmVtb3ZlX3JlZ2V4KDo6cnVzdDo6U3RyIHBhY2thZ2UpIGNvbnN0IG5vZXhjZXB0IHsKLSs6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2ZpbGVzX3JlbW92ZV9y ZWdleCAoOjpydXN0OjpTdHIgcGFja2FnZSkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4 KCp0aGlzLCBwYWNrYWdlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoKnRoaXMsIHBhY2thZ2UsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6 U3RyaW5nIFRyZWVmaWxlOjpnZXRfY2hlY2tzdW0oOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8pIGNvbnN0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfY2hl Y2tzdW0gKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdAotK3sK LSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2NoZWNrc3VtKCp0aGlzLCByZXBvLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2hlY2tzdW0gKCp0aGlzLCByZXBvLCAmcmV0dXJu JC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFRy ZWVmaWxlOjpnZXRfb3N0cmVlX3JlZigpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmlu ZwotK1RyZWVmaWxlOjpnZXRfb3N0cmVlX3JlZiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9yZWYoKnRoaXMsICZyZXR1cm4k LnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX3JlZiAoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0PiBU cmVlZmlsZTo6Z2V0X3JlcG9fcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4g OjpydXN0OjppbXBsPDo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNv bnN0Pj46OnNsaWNlKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVw b19wYWNrYWdlcygqdGhpcykpOwotKzo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9Q YWNrYWdlIGNvbnN0PgotK1RyZWVmaWxlOjpnZXRfcmVwb19wYWNrYWdlcyAoKSBjb25zdCBub2V4 Y2VwdAotK3sKLSsgIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTbGljZTw6OnJwbW9zdHJl ZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+Pjo6c2xpY2UgKAotKyAgICAgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19wYWNrYWdlcyAoKnRoaXMpKTsKLSB9Ci0g Ci0tdm9pZCBUcmVlZmlsZTo6Y2xlYXJfcmVwb19wYWNrYWdlcygpIG5vZXhjZXB0IHsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRjbGVhcl9yZXBvX3BhY2thZ2VzKCp0 aGlzKTsKLSt2b2lkCi0rVHJlZWZpbGU6OmNsZWFyX3JlcG9fcGFja2FnZXMgKCkgbm9leGNlcHQK LSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkY2xlYXJfcmVwb19w YWNrYWdlcyAoKnRoaXMpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpwcmV0dHlwcmludF9qc29u X3N0ZG91dCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRwcmV0dHlwcmludF9qc29uX3N0ZG91dCgqdGhpcyk7Ci0rdm9pZAotK1RyZWVm aWxlOjpwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlwcmludF9qc29uX3N0ZG91 dCAoKnRoaXMpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpwcmludF9kZXByZWNhdGlvbl93YXJu aW5ncygpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncygqdGhpcyk7Ci0rdm9pZAotK1RyZWVm aWxlOjpwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9kZXByZWNhdGlvbl93 YXJuaW5ncyAoKnRoaXMpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpwcmludF9leHBlcmltZW50 YWxfbm90aWNlcygpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRwcmludF9leHBlcmltZW50YWxfbm90aWNlcygqdGhpcyk7Ci0rdm9pZAot K1RyZWVmaWxlOjpwcmludF9leHBlcmltZW50YWxfbm90aWNlcyAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9leHBlcmlt ZW50YWxfbm90aWNlcyAoKnRoaXMpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpzYW5pdHljaGVj a19leHRlcm5hbHMoKSBjb25zdCB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJuYWxz KCp0aGlzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rVHJlZWZpbGU6OnNh bml0eWNoZWNrX2V4dGVybmFscyAoKSBjb25zdAotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzYW5pdHljaGVj a19leHRlcm5hbHMgKCp0aGlzKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4g VHJlZWZpbGU6OmltcG9ydGVyX2ZsYWdzKDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBjb25zdCBub2V4 Y2VwdCB7Ci0tICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy RmxhZ3M+Ojpmcm9tX3JhdyhycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW1w b3J0ZXJfZmxhZ3MoKnRoaXMsIHBrZ19uYW1lKSk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyRmxhZ3M+Ci0rVHJlZWZpbGU6OmltcG9ydGVyX2ZsYWdzICg6OnJ1c3Q6 OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ojpmcm9tX3JhdyAoCi0rICAgICAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGltcG9ydGVyX2ZsYWdzICgqdGhpcywg cGtnX25hbWUpKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6OndyaXRlX3JlcG92 YXJzKDo6c3RkOjppbnQzMl90IHdvcmtkaXJfZGZkX3JhdykgY29uc3QgewotKzo6cnVzdDo6U3Ry aW5nCi0rVHJlZWZpbGU6OndyaXRlX3JlcG92YXJzICg6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2Rm ZF9yYXcpIGNvbnN0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4g cmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR3cml0ZV9yZXBvdmFycygqdGhpcywgd29ya2Rpcl9kZmRf cmF3LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkd3JpdGVfcmVwb3Zh cnMgKAotKyAgICAgICp0aGlzLCB3b3JrZGlyX2RmZF9yYXcsICZyZXR1cm4kLnZhbHVlKTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6c2V0X3JlbGVhc2V2ZXIo OjpydXN0OjpTdHIgcmVsZWFzZXZlcikgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWxlYXNldmVyKCp0 aGlzLCByZWxlYXNldmVyKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rVHJl ZWZpbGU6OnNldF9yZWxlYXNldmVyICg6OnJ1c3Q6OlN0ciByZWxlYXNldmVyKQotK3sKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHNldF9yZWxlYXNldmVyICgqdGhpcywgcmVsZWFzZXZlcik7Ci0rICBp ZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6 c2V0X3JlY29tbWVuZHMoYm9vbCB2YWwpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVjb21tZW5kcygq dGhpcywgdmFsKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rVHJlZWZpbGU6 OnNldF9yZWNvbW1lbmRzIChib29sIHZhbCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X3JlY29tbWVu ZHMgKCp0aGlzLCB2YWwpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0g fQotIAotLXZvaWQgVHJlZWZpbGU6OmVuYWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pIHsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRlbmFibGVfcmVwbygqdGhpcywgcmVwbyk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjplbmFibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbykK LSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZW5hYmxlX3JlcG8gKCp0aGlzLCByZXBvKTsKLSsgIGlmIChlcnJv ciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIFRyZWVmaWxlOjpkaXNhYmxl X3JlcG8oOjpydXN0OjpTdHIgcmVwbykgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGRpc2FibGVfcmVwbygqdGhp cywgcmVwbyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjpk aXNhYmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGRpc2FibGVf cmVwbyAoKnRoaXMsIHJlcG8pOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0gfQotIAotLXZvaWQgVHJlZWZpbGU6OnZhbGlkYXRlX2Zvcl9jb250YWluZXIoKSBjb25zdCB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkdmFsaWRhdGVfZm9yX2NvbnRhaW5lcigqdGhpcyk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjp2YWxpZGF0ZV9mb3JfY29udGFpbmVy ICgpIGNvbnN0Ci0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHZhbGlkYXRlX2Zvcl9jb250YWluZXIgKCp0aGlz KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJwbW9z dHJlZWN4eDo6UmVmc3BlYyBUcmVlZmlsZTo6Z2V0X2Jhc2VfcmVmc3BlYygpIGNvbnN0IG5vZXhj ZXB0IHsKLSs6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYwotK1RyZWVmaWxlOjpnZXRfYmFzZV9yZWZz cGVjICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9z dHJlZWN4eDo6UmVmc3BlYz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfYmFzZV9yZWZzcGVjKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Jhc2VfcmVmc3BlYyAoKnRoaXMsICZyZXR1cm4kLnZhbHVl KTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQg VHJlZWZpbGU6OnJlYmFzZSg6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3Vz dG9tX29yaWdpbl91cmwsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5v ZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZWJhc2Uo KnRoaXMsIG5ld19yZWZzcGVjLCBjdXN0b21fb3JpZ2luX3VybCwgY3VzdG9tX29yaWdpbl9kZXNj cmlwdGlvbik7Ci0rdm9pZAotK1RyZWVmaWxlOjpyZWJhc2UgKDo6cnVzdDo6U3RyIG5ld19yZWZz cGVjLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKLSsgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdAotK3sKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZWJhc2UgKCp0aGlzLCBuZXdfcmVm c3BlYywgY3VzdG9tX29yaWdpbl91cmwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKTsKLSB9Ci0gCi0tOjpy dXN0OjpTdHJpbmcgVHJlZWZpbGU6OmdldF9vcmlnaW5fY3VzdG9tX3VybCgpIGNvbnN0IG5vZXhj ZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV91cmwg KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3Ry aW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9vcmlnaW5fY3VzdG9tX3VybCgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9vcmlnaW5fY3VzdG9tX3VybCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6 U3RyaW5nIFRyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbigpIGNvbnN0IG5v ZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV9k ZXNjcmlwdGlvbiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24oKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlv biAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfb3ZlcnJpZGVf Y29tbWl0KCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5nCi0rVHJlZWZpbGU6Omdl dF9vdmVycmlkZV9jb21taXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9vdmVycmlkZV9jb21taXQoKnRoaXMsICZyZXR1cm4kLnZhbHVl KTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3ZlcnJpZGVfY29tbWl0ICgqdGhpcywgJnJl dHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9 Ci0gCi0tdm9pZCBUcmVlZmlsZTo6c2V0X292ZXJyaWRlX2NvbW1pdCg6OnJ1c3Q6OlN0ciBjaGVj a3N1bSkgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHNldF9vdmVycmlkZV9jb21taXQoKnRoaXMsIGNoZWNrc3VtKTsKLSt2b2lkCi0rVHJlZWZpbGU6 OnNldF9vdmVycmlkZV9jb21taXQgKDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdAotK3sK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfb3ZlcnJpZGVfY29t bWl0ICgqdGhpcywgY2hlY2tzdW0pOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gVHJlZWZpbGU6OmdldF9pbml0cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9leGNlcHQgewot Kzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX2V0 Y19maWxlcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMg KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpoYXNfaW5pdHJhbWZzX2V0Y19maWxlcygp IGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkaGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmls ZTo6aGFzX2luaXRyYW1mc19ldGNfZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19pbml0cmFtZnNfZXRj X2ZpbGVzICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmls ZXNfdHJhY2soOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdCB7Ci0t ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGZpbGVz JCg6OnN0ZDo6bW92ZShmaWxlcykpOwotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrKCp0aGlzLCAmZmlsZXMkLnZh bHVlKTsKLStib29sCi0rVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2sgKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQKLSt7Ci0rICA6OnJ1c3Q6Ok1h bnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGZpbGVzJCAoOjpzdGQ6Om1v dmUgKGZpbGVzKSk7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2sgKCp0aGlzLCAmZmlsZXMkLnZhbHVlKTsKLSB9 Ci0gCi0tYm9vbCBUcmVlZmlsZTo6aW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQgewotLSAgOjpydXN0OjpNYW51YWxs eURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBmaWxlcyQoOjpzdGQ6Om1vdmUoZmls ZXMpKTsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5p dHJhbWZzX2V0Y19maWxlc191bnRyYWNrKCp0aGlzLCAmZmlsZXMkLnZhbHVlKTsKLStib29sCi0r VHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdAotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gZmlsZXMkICg6OnN0ZDo6bW92ZSAoZmlsZXMpKTsK LSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZz X2V0Y19maWxlc191bnRyYWNrICgqdGhpcywgJmZpbGVzJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wg VHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwoKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19l dGNfZmlsZXNfdW50cmFja19hbGwoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6aW5pdHJhbWZz X2V0Y19maWxlc191bnRyYWNrX2FsbCAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNr X2FsbCAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX3JlZ2Vu ZXJhdGUoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSgqdGhpcyk7Ci0rYm9vbAot K1RyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKCkgY29uc3Qgbm9leGNlcHQKLSt7 Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0 cmFtZnNfcmVnZW5lcmF0ZSAoKnRoaXMpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gVHJlZWZpbGU6OmdldF9pbml0cmFtZnNfYXJncygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19hcmdz ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19hcmdzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0t ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19hcmdzICgqdGhpcywgJnJldHVybiQu dmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t dm9pZCBUcmVlZmlsZTo6c2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6TWFu dWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUo YXJncykpOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0 cmFtZnNfcmVnZW5lcmF0ZSgqdGhpcywgZW5hYmxlZCwgJmFyZ3MkLnZhbHVlKTsKLSt2b2lkCi0r VHJlZWZpbGU6OnNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykgbm9leGNlcHQKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVh bGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkICg6OnN0ZDo6bW92ZSAo YXJncykpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0 cmFtZnNfcmVnZW5lcmF0ZSAoKnRoaXMsIGVuYWJsZWQsICZhcmdzJC52YWx1ZSk7Ci0gfQotIAot LTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfdW5jb25maWd1cmVkX3N0YXRlKCkgY29uc3Qg bm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5nCi0rVHJlZWZpbGU6OmdldF91bmNvbmZpZ3VyZWRf c3RhdGUgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF91bmNvbmZpZ3VyZWRfc3RhdGUoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJl dHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlICgqdGhpcywgJnJldHVybiQu dmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t Ym9vbCBUcmVlZmlsZTo6bWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkoKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1heV9y ZXF1aXJlX2xvY2FsX2Fzc2VtYmx5KCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6Om1heV9yZXF1 aXJlX2xvY2FsX2Fzc2VtYmx5ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJs eSAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpoYXNfYW55X3BhY2thZ2VzKCkgY29u c3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRoYXNfYW55X3BhY2thZ2VzKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6Omhhc19hbnlf cGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19hbnlfcGFja2FnZXMgKCp0aGlzKTsKLSB9Ci0gCi0t Ym9vbCBUcmVlZmlsZTo6bWVyZ2VfdHJlZWZpbGUoOjpydXN0OjpTdHIgdHJlZWZpbGUpIHsKLSti b29sCi0rVHJlZWZpbGU6Om1lcmdlX3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSkKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWVy Z2VfdHJlZWZpbGUoKnRoaXMsIHRyZWVmaWxlLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRtZXJnZV90cmVlZmlsZSAoKnRoaXMsIHRyZWVmaWxlLCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6 OmdldF9ub19pbml0cmFtZnMoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ub19pbml0cmFtZnMoKnRoaXMpOwotK2Jv b2wKLStUcmVlZmlsZTo6Z2V0X25vX2luaXRyYW1mcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X25vX2luaXRy YW1mcyAoKnRoaXMpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFJlcG9QYWNrYWdlOjpsYXlvdXQ6 OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJlcG9QYWNrYWdlJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStSZXBvUGFj a2FnZTo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAot LTo6c3RkOjpzaXplX3QgUmVwb1BhY2thZ2U6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9y JGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUmVwb1BhY2thZ2U6OmxheW91dDo6YWxpZ24g KCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJl cG9QYWNrYWdlJG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0gfQotIAotLTo6cnVzdDo6U3RyIFJlcG9Q YWNrYWdlOjpnZXRfcmVwbygpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpTdHI+OjpuZXdfdW5jaGVja2VkKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRSZXBvUGFja2FnZSRnZXRfcmVwbygqdGhpcykpOwotKzo6cnVzdDo6U3RyCi0rUmVwb1BhY2th Z2U6OmdldF9yZXBvICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OlN0cj46Om5ld191bmNoZWNrZWQgKAotKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRnZXRfcmVwbyAoKnRoaXMpKTsKLSt9Ci0rCi0rOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rUmVwb1BhY2thZ2U6OmdldF9wYWNrYWdlcyAoKSBjb25z dCBub2V4Y2VwdAotK3sKLSsgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiByZXR1cm4kOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9Q YWNrYWdlJGdldF9wYWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBSZXBvUGFja2FnZTo6Z2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotKy8v IFJldHVybiB0aGUgbGlzdCBvZiByZXBvIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgdG8gc2Vh cmNoCi0rLy8gKGUuZy4gWyIvZXRjL3l1bS5yZXBvcy5kIiwgIi91c3Ivc2hhcmUvZG5mNS9yZXBv cy5kIl0pLgotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK2dldF9yZXBvc19kaXJzICgp IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1Bh Y2thZ2UkZ2V0X3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Z2V0X3JlcG9zX2RpcnMgKCZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIHZhcnN1YnN0aXR1dGUoOjpy dXN0OjpTdHIgcywgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNv bnN0ICZ2YXJzKSB7Ci0rOjpydXN0OjpTdHJpbmcKLSt2YXJzdWJzdGl0dXRlICg6OnJ1c3Q6OlN0 ciBzLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZh cnMpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsK LS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR2YXJzdWJzdGl0dXRlKHMsIHZhcnMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJv ciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR2YXJzdWJzdGl0dXRlIChzLCB2YXJzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3Ik LnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52 YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZmVhdHVyZXMo KSBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rZ2V0X2ZlYXR1cmVz ICgpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0 X2ZlYXR1cmVzKCZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfZmVhdHVyZXMgKCZy ZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6cnVzdDo6U3RyaW5nIGdldF9ycG1fYmFzZWFyY2goKSBub2V4Y2VwdCB7Ci0rOjpy dXN0OjpTdHJpbmcKLStnZXRfcnBtX2Jhc2VhcmNoICgpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRnZXRfcnBtX2Jhc2VhcmNoKCZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVy biA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRnZXRfcnBtX2Jhc2VhcmNoICgmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnN0ZDo6aW50MzJfdCBzZWFsZWRfbWVt ZmQoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3Qg Y29uc3Q+IGNvbnRlbnQpIHsKLSs6OnN0ZDo6aW50MzJfdAotK3NlYWxlZF9tZW1mZCAoOjpydXN0 OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNv bnRlbnQpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6aW50MzJfdD4gcmV0dXJu JDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRzZWFsZWRfbWVtZmQoZGVzY3JpcHRpb24sIGNvbnRlbnQsICZyZXR1cm4kLnZhbHVl KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1 cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNlYWxlZF9tZW1mZCAoZGVzY3JpcHRpb24sIGNvbnRl bnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBy dW5uaW5nX2luX3N5c3RlbWQoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fc3lzdGVtZCgpOwotK2Jvb2wKLStydW5uaW5nX2luX3N5 c3RlbWQgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHJ1bm5pbmdfaW5fc3lzdGVtZCAoKTsKLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkdWYXJp YW50ICpjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVj a3N1bV90bykgewotKzo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqCi0rY2FsY3VsYXRlX2Fkdmlz b3JpZXNfZGlmZiAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVz dDo6U3RyIGNoZWNrc3VtX2Zyb20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIgY2hlY2tzdW1fdG8pCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJl ZWN4eDo6R1ZhcmlhbnQgKj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZm KHJlcG8sIGNoZWNrc3VtX2Zyb20sIGNoZWNrc3VtX3RvLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZiAoCi0rICAgICAgcmVwbywgY2hlY2tz dW1fZnJvbSwgY2hlY2tzdW1fdG8sICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSg6OnJ1 c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLSt0cmFuc2xhdGVfcGF0 aF9mb3Jfb3N0cmVlICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZShwYXRoLCAmcmV0dXJuJC52YWx1 ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSAocGF0aCwgJnJldHVy biQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0g Ci0tOjpycG1vc3RyZWVjeHg6OkxpdmVBcHBseVN0YXRlIGdldF9saXZlX2FwcGx5X3N0YXRlKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkgewotKzo6cnBtb3N0cmVlY3h4 OjpMaXZlQXBwbHlTdGF0ZQotK2dldF9saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpCi0rewotICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGU+IHJldHVy biQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZ2V0X2xpdmVfYXBwbHlfc3RhdGUoc3lzcm9vdCwgZGVwbG95bWVudCwgJnJldHVy biQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjpt b3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAg ICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2xpdmVfYXBwbHlfc3RhdGUgKHN5 c3Jvb3QsIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tYm9vbCBoYXNfbGl2ZV9hcHBseV9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl U3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQg Y29uc3QgJmRlcGxveW1lbnQpIHsKLStib29sCi0raGFzX2xpdmVfYXBwbHlfc3RhdGUgKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAotKyAgICAgICAgICAgICAg ICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVu dCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGFzX2xp dmVfYXBwbHlfc3RhdGUoc3lzcm9vdCwgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkaGFzX2xpdmVfYXBwbHlfc3RhdGUgKHN5c3Jvb3QsIGRlcGxveW1l bnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBh cHBseWxpdmVfc3luY19yZWYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5 c3Jvb3QpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYoc3lzcm9vdCk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rdm9pZAotK2FwcGx5bGl2ZV9zeW5jX3JlZiAoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9zeW5jX3Jl ZiAoc3lzcm9vdCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tdm9pZCB0cmFuc2FjdGlvbl9hcHBseV9saXZlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNy b290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnRhcmdl dCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHRyYW5zYWN0aW9uX2FwcGx5X2xpdmUoc3lzcm9vdCwgdGFyZ2V0KTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpCi0rewot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoc3lzcm9vdCwgdGFyZ2V0KTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIG5vcm1hbGl6 ZV9ldGNfc2hhZG93KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIHsKLS0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVf ZXRjX3NoYWRvdyhyb290ZnNfZGZkKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lk Ci0rbm9ybWFsaXplX2V0Y19zaGFkb3cgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpCi0rewot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JG5vcm1hbGl6ZV9ldGNfc2hhZG93IChyb290ZnNfZGZkKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS1ib29sIHByZXBhcmVfcnBtX2xheWVyaW5nKDo6 c3RkOjppbnQzMl90IHJvb3RmcywgOjpzdGQ6OmludDMyX3QgbWVyZ2VfcGFzc3dkX2Rpcikgewot K2Jvb2wKLStwcmVwYXJlX3JwbV9sYXllcmluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0 ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3JwbV9sYXllcmluZyhyb290ZnMsIG1lcmdlX3Bh c3N3ZF9kaXIsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVf cnBtX2xheWVyaW5nIChyb290ZnMsIG1lcmdlX3Bhc3N3ZF9kaXIsICZyZXR1cm4kLnZhbHVlKTsK LSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBjb21wbGV0ZV9ycG1fbGF5ZXJpbmco OjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcGxldGVfcnBtX2xheWVyaW5nKHJvb3Rm cyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBsZXRlX3JwbV9sYXll cmluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wbGV0ZV9ycG1fbGF5ZXJp bmcgKHJvb3Rmcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tdm9pZCBkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzKDo6c3RkOjppbnQzMl90IHJvb3Rm cykgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGRlZHVwbGljYXRlX3RtcGZpbGVzX2VudHJpZXMocm9vdGZzKTsKLS0gIGlmIChl cnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRy aWVzIChyb290ZnMpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQot IAotLXZvaWQgcGFzc3dkX2NsZWFudXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFz c3dkX2NsZWFudXAocm9vdGZzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0r cGFzc3dkX2NsZWFudXAgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKLSt7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2Ns ZWFudXAgKHJvb3Rmcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9 Ci0gCi0tdm9pZCBtaWdyYXRlX2dyb3VwX2V4Y2VwdF9yb290KDo6c3RkOjppbnQzMl90IHJvb3Rm cywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdChyb290ZnMsIHByZXNlcnZlZF9ncm91cHMp OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLSttaWdyYXRlX2dyb3VwX2V4Y2Vw dF9yb290ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKQot K3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfZ3JvdXBfZXhjZXB0X3Jvb3QgKHJvb3RmcywgcHJlc2Vy dmVkX2dyb3Vwcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tdm9pZCBtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMp IHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdChyb290ZnMpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotK3ZvaWQKLSttaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAocm9v dGZzKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lk IHBhc3N3ZF9jb21wb3NlX3ByZXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnRyZWVmaWxlKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcChyb290ZnMs IHRyZWVmaWxlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rcGFzc3dkX2Nv bXBvc2VfcHJlcCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnRyZWVmaWxlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwIChyb290ZnMsIHRyZWVm aWxlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lk IHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNv bnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlmaWVkX2Nv cmUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwX3JlcG8ocm9vdGZzLCB0cmVlZmlsZSwgcmVw bywgcHJldmlvdXNfY2hlY2tzdW0sIHVuaWZpZWRfY29yZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0rdm9pZAotK3Bhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6 cnVzdDo6U3RyIHByZXZpb3VzX2NoZWNrc3VtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCB1bmlmaWVkX2NvcmUpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyAoCi0r ICAgICAgcm9vdGZzLCB0cmVlZmlsZSwgcmVwbywgcHJldmlvdXNfY2hlY2tzdW0sIHVuaWZpZWRf Y29yZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tYm9v bCBkaXJfY29udGFpbnNfdWlkKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3Qg aWQpIHsKLStib29sCi0rZGlyX2NvbnRhaW5zX3VpZCAoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6 c3RkOjp1aW50MzJfdCBpZCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVy biQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGlyX2NvbnRhaW5zX3VpZChkaXJmZCwgaWQsICZyZXR1cm4kLnZhbHVlKTsKLS0g IGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc191aWQgKGRpcmZkLCBpZCwgJnJldHVybiQu dmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4g OjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIGRpcl9jb250YWluc19n aWQoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCkgewotK2Jvb2wKLStk aXJfY29udGFpbnNfZ2lkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlk KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJfY29u dGFpbnNfZ2lkKGRpcmZkLCBpZCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12 b2lkIGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KSB7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMoZmZpX3JlcG8sIHJvb3Rmc19kZmQsIHRyZWVmaWxl LCBwcmV2aW91c19yZXYpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGlyX2NvbnRhaW5zX2dpZCAoZGlyZmQsIGlkLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStjaGVja19wYXNzd2RfZ3JvdXBfZW50cmllcyAoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmZmaV9yZXBvLCA6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19yZXYpCi0rewotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNo ZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzICgKLSsgICAgICBmZmlfcmVwbywgcm9vdGZzX2RmZCwg dHJlZWZpbGUsIHByZXZpb3VzX3Jldik7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0r ICAgIH0KLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiBwYXNz d2RkYl9vcGVuKDo6c3RkOjppbnQzMl90IHJvb3RmcykgewotKzo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpQYXNzd2REQj4KLStwYXNzd2RkYl9vcGVuICg6OnN0ZDo6aW50MzJfdCByb290ZnMp Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UGFzc3dkREI+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZGRiX29wZW4ocm9vdGZzLCAmcmV0dXJuJC52 YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkZGJfb3BlbiAocm9vdGZzLCAmcmV0dXJuJC52YWx1 ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgUGFzc3dkREI6 OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK1Bh c3N3ZERCOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0t OjpzdGQ6OnNpemVfdCBQYXNzd2REQjo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3IkYWxpZ25v ZigpOwotKzo6c3RkOjpzaXplX3QKLStQYXNzd2REQjo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3Bl cmF0b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgUGFzc3dkREI6Omxvb2t1 cF91c2VyKDo6c3RkOjp1aW50MzJfdCB1aWQpIGNvbnN0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1Bh c3N3ZERCOjpsb29rdXBfdXNlciAoOjpzdGQ6OnVpbnQzMl90IHVpZCkgY29uc3QKLSt7Ci0gICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERC JGxvb2t1cF91c2VyKCp0aGlzLCB1aWQsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF91c2VyICgqdGhpcywgdWlkLCAmcmV0dXJuJC52YWx1ZSk7 Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFBhc3N3ZERCOjps b29rdXBfZ3JvdXAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3QgewotKzo6cnVzdDo6U3RyaW5n Ci0rUGFzc3dkREI6Omxvb2t1cF9ncm91cCAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3QKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBh c3N3ZERCJGxvb2t1cF9ncm91cCgqdGhpcywgZ2lkLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfZ3JvdXAgKCp0aGlzLCBnaWQsICZyZXR1cm4k LnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJu IDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+IG5ld19wYXNzd2RfZW50cmllcygpIG5vZXhjZXB0IHsK LS0gIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmZy b21fcmF3KHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfcGFzc3dkX2VudHJpZXMoKSk7 Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+Ci0rbmV3X3Bhc3N3 ZF9lbnRyaWVzICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpQYXNzd2RFbnRyaWVzPjo6ZnJvbV9yYXcgKAotKyAgICAgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRuZXdfcGFzc3dkX2VudHJpZXMgKCkpOwotIH0KLSAKLS06OnN0ZDo6c2l6 ZV90IFBhc3N3ZEVudHJpZXM6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2Yo KTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUGFzc3dkRW50cmllczo6bGF5b3V0OjpzaXplICgpIG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRy aWVzJG9wZXJhdG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBQYXNzd2RFbnRy aWVzOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6 c2l6ZV90Ci0rUGFzc3dkRW50cmllczo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsg IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRv ciRhbGlnbm9mICgpOwotIH0KLSAKLS12b2lkIFBhc3N3ZEVudHJpZXM6OmFkZF9ncm91cF9jb250 ZW50KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkgewotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3 ZEVudHJpZXMkYWRkX2dyb3VwX2NvbnRlbnQoKnRoaXMsIHJvb3RmcywgcGF0aCk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1Bhc3N3ZEVudHJpZXM6OmFkZF9ncm91cF9jb250 ZW50ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpCi0rewotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUGFzc3dkRW50cmllcyRhZGRfZ3JvdXBfY29udGVudCAoKnRoaXMsIHJvb3RmcywgcGF0 aCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBQ YXNzd2RFbnRyaWVzOjphZGRfcGFzc3dkX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6 OnJ1c3Q6OlN0ciBwYXRoKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRhZGRfcGFzc3dkX2NvbnRlbnQo KnRoaXMsIHJvb3RmcywgcGF0aCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAot K1Bhc3N3ZEVudHJpZXM6OmFkZF9wYXNzd2RfY29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz LCA6OnJ1c3Q6OlN0ciBwYXRoKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAot KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX3Bh c3N3ZF9jb250ZW50ICgqdGhpcywgcm9vdGZzLCBwYXRoKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS1ib29sIFBhc3N3ZEVudHJpZXM6OmNvbnRhaW5zX2dy b3VwKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc19ncm91cCgqdGhpcywg dXNlcik7Ci0rYm9vbAotK1Bhc3N3ZEVudHJpZXM6OmNvbnRhaW5zX2dyb3VwICg6OnJ1c3Q6OlN0 ciB1c2VyKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc19ncm91cCAoKnRoaXMsIHVzZXIpOwotIH0K LSAKLS1ib29sIFBhc3N3ZEVudHJpZXM6OmNvbnRhaW5zX3VzZXIoOjpydXN0OjpTdHIgdXNlcikg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YXNzd2RFbnRyaWVzJGNvbnRhaW5zX3VzZXIoKnRoaXMsIHVzZXIpOwotK2Jvb2wKLStQYXNzd2RF bnRyaWVzOjpjb250YWluc191c2VyICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRj b250YWluc191c2VyICgqdGhpcywgdXNlcik7Ci0gfQotIAotLTo6c3RkOjp1aW50MzJfdCBQYXNz d2RFbnRyaWVzOjpsb29rdXBfdXNlcl9pZCg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCB7Ci0rOjpz dGQ6OnVpbnQzMl90Ci0rUGFzc3dkRW50cmllczo6bG9va3VwX3VzZXJfaWQgKDo6cnVzdDo6U3Ry IHVzZXIpIGNvbnN0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWludDMyX3Q+ IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBfdXNlcl9pZCgqdGhpcywgdXNlciwg JnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik Ci0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29r dXBfdXNlcl9pZCAoKnRoaXMsIHVzZXIsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQu cHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZh bHVlKTsKLSB9Ci0gCi0tOjpzdGQ6OnVpbnQzMl90IFBhc3N3ZEVudHJpZXM6Omxvb2t1cF9ncm91 cF9pZCg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3QgewotKzo6c3RkOjp1aW50MzJfdAotK1Bhc3N3 ZEVudHJpZXM6Omxvb2t1cF9ncm91cF9pZCAoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0Ci0rewot ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWludDMyX3Q+IHJldHVybiQ7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFz c3dkRW50cmllcyRsb29rdXBfZ3JvdXBfaWQoKnRoaXMsIGdyb3VwLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF9ncm91cF9pZCAoKnRo aXMsIGdyb3VwLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LTo6c3RkOjpzaXplX3QgRXh0ZW5zaW9uczo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgewotLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNp emVvZigpOwotKzo6c3RkOjpzaXplX3QKLStFeHRlbnNpb25zOjpsYXlvdXQ6OnNpemUgKCkgbm9l eGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lv bnMkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IEV4dGVuc2lvbnM6 OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEV4dGVuc2lvbnMkb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6c3RkOjpzaXplX3QK LStFeHRlbnNpb25zOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJGFsaWdub2YgKCk7 Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiBleHRlbnNp b25zX2xvYWQoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKSB7Ci0r OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+Ci0rZXh0ZW5zaW9uc19sb2Fk ICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKLSsgICAgICAgICAgICAg ICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFz ZV9wa2dzKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OkV4dGVuc2lvbnM+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGV4dGVuc2lvbnNfbG9hZChwYXRoLCBi YXNlYXJjaCwgYmFzZV9wa2dzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRleHRlbnNpb25zX2xvYWQgKHBhdGgsIGJhc2VhcmNoLCBiYXNlX3BrZ3MsICZyZXR1cm4kLnZh bHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IEV4dGVuc2lvbnM6OmdldF9yZXBvcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStFeHRlbnNpb25zOjpnZXRfcmVwb3MgKCkgY29uc3Qgbm9l eGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25z JGdldF9yZXBvcygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lv bnMkZ2V0X3JlcG9zICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IEV4dGVuc2lvbnM6OmdldF9vc19leHRlbnNpb25fcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7 Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rRXh0ZW5zaW9uczo6Z2V0X29zX2V4dGVu c2lvbl9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcygqdGhp cywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X29zX2V4dGVu c2lvbl9wYWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBFeHRlbnNpb25zOjpnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7 Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rRXh0ZW5zaW9uczo6Z2V0X2RldmVsb3Bt ZW50X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMoKnRoaXMs ICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9kZXZlbG9wbWVu dF9wYWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgRXh0ZW5zaW9uczo6c3RhdGVfY2hlY2tz dW1fY2hhbmdlZCg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNv bnN0IHsKLStib29sCi0rRXh0ZW5zaW9uczo6c3RhdGVfY2hlY2tzdW1fY2hhbmdlZCAoOjpydXN0 OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdAotK3sKLSAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHN0YXRlX2NoZWNr c3VtX2NoYW5nZWQoKnRoaXMsIGNoa3N1bSwgb3V0cHV0X2RpciwgJnJldHVybiQudmFsdWUpOwot LSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkc3RhdGVfY2hlY2tzdW1fY2hhbmdlZCAoCi0rICAgICAg KnRoaXMsIGNoa3N1bSwgb3V0cHV0X2RpciwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS12b2lkIEV4dGVuc2lvbnM6OnVwZGF0ZV9zdGF0ZV9jaGVja3N1bSg6 OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0IHsKLS0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRF eHRlbnNpb25zJHVwZGF0ZV9zdGF0ZV9jaGVja3N1bSgqdGhpcywgY2hrc3VtLCBvdXRwdXRfZGly KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rRXh0ZW5zaW9uczo6dXBkYXRl X3N0YXRlX2NoZWNrc3VtICg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9k aXIpIGNvbnN0Ci0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyR1cGRhdGVfc3RhdGVfY2hlY2tz dW0gKCp0aGlzLCBjaGtzdW0sIG91dHB1dF9kaXIpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAg IHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgRXh0ZW5zaW9uczo6c2VyaWFsaXplX3RvX2Rpcig6 OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdCB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzZXJpYWxpemVf dG9fZGlyKCp0aGlzLCBvdXRwdXRfZGlyKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2 b2lkCi0rRXh0ZW5zaW9uczo6c2VyaWFsaXplX3RvX2RpciAoOjpydXN0OjpTdHIgb3V0cHV0X2Rp cikgY29uc3QKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHNlcmlhbGl6ZV90b19kaXIgKCp0 aGlzLCBvdXRwdXRfZGlyKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQot IH0KLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IEV4dGVuc2lvbnM6 OmdlbmVyYXRlX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBj b25zdCB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotK0V4dGVuc2lv bnM6OmdlbmVyYXRlX3RyZWVmaWxlICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNy YykgY29uc3QKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZW5lcmF0ZV90cmVl ZmlsZSgqdGhpcywgc3JjLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRF eHRlbnNpb25zJGdlbmVyYXRlX3RyZWVmaWxlICgqdGhpcywgc3JjLCAmcmV0dXJuJC52YWx1ZSk7 Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgTG9ja2ZpbGVDb25m aWc6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0rOjpzdGQ6OnNp emVfdAotK0xvY2tmaWxlQ29uZmlnOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9y JHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBMb2NrZmlsZUNvbmZpZzo6bGF5b3V0 OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6c3RkOjpzaXplX3QKLStM b2NrZmlsZUNvbmZpZzo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3IkYWxpZ25v ZiAoKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmln PiBsb2NrZmlsZV9yZWFkKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5h bWVzKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPgotK2xv Y2tmaWxlX3JlYWQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5hbWVz KQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OkxvY2tmaWxlQ29uZmlnPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV9yZWFkKGZpbGVuYW1lcywg JnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12b2lkIGxvY2tmaWxlX3dyaXRlKDo6 cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNr YWdlcywgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVwb3MpIHsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRsb2NrZmlsZV93cml0ZShmaWxlbmFtZSwgcGFja2FnZXMsIHJwbW1kX3JlcG9zKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAg ICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3JlYWQgKGZpbGVuYW1l cywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotK30KLSsKLSt2b2lkCi0r bG9ja2ZpbGVfd3JpdGUgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4 R09iamVjdEFycmF5ICZwYWNrYWdlcywKLSsgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVwb3MpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVf d3JpdGUgKGZpbGVuYW1lLCBwYWNrYWdlcywgcnBtbWRfcmVwb3MpOwotKyAgaWYgKGVycm9yJC5w dHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4 OjpMb2NrZWRQYWNrYWdlPiBMb2NrZmlsZUNvbmZpZzo6Z2V0X2xvY2tlZF9wYWNrYWdlcygpIGNv bnN0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4KLStMb2Nr ZmlsZUNvbmZpZzo6Z2V0X2xvY2tlZF9wYWNrYWdlcyAoKSBjb25zdAotK3sKLSAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+PiBy ZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJGdldF9sb2NrZWRfcGFja2FnZXMoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0 ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAot KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJGdldF9s b2NrZWRfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0 cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gb3JpZ2lu X3RvX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIHsKLSs6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ci0rb3JpZ2luX3RvX3RyZWVmaWxlICg6 OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRvcmlnaW5fdG9fdHJlZWZpbGUoa2YsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRv cmlnaW5fdG9fdHJlZWZpbGUgKGtmLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0 cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSAqdHJlZWZpbGVfdG9fb3JpZ2lu KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpIHsKLSs6OnJwbW9zdHJlZWN4eDo6 R0tleUZpbGUgKgotK3RyZWVmaWxlX3RvX29yaWdpbiAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZ0ZikKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpH S2V5RmlsZSAqPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX3RvX29yaWdpbih0ZiwgJnJldHVybiQu dmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX3RvX29yaWdpbiAodGYsICZyZXR1cm4kLnZh bHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBvcmlnaW5fdmFsaWRhdGVf cm91bmR0cmlwKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0IHsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlw KGtmKTsKLSt2b2lkCi0rb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcCAoOjpycG1vc3RyZWVjeHg6 OkdLZXlGaWxlIGNvbnN0ICZrZikgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcCAoa2YpOwotIH0KLSAKLS06OnJ1c3Q6 OlN0cmluZyBjYWNoZV9icmFuY2hfdG9fbmV2cmEoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0 IHsKLSs6OnJ1c3Q6OlN0cmluZwotK2NhY2hlX2JyYW5jaF90b19uZXZyYSAoOjpydXN0OjpTdHIg bmV2cmEpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmlu Zz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNoZV9icmFuY2hf dG9fbmV2cmEobmV2cmEsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNoZV9icmFu Y2hfdG9fbmV2cmEgKG5ldnJhLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOwotIH0KLSB9IC8vIG5hbWVzcGFjZSBycG1vc3RyZWVjeHgKLSAK LS1leHRlcm4gIkMiIHsKLS06OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAqY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6 OkJ1YmJsZXdyYXAgKikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkQnViYmxld3JhcCRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFw PiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0 ZSAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2Mo KSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJ bWFnZVN0YXRlJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKikg bm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1h Z2VTdGF0ZSRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0 YXRlPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGFsbG9jKCkgbm9leGNlcHQ7 Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRlYWxsb2Mo OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4 eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxl c3lzdGVtU2NyaXB0UHJlcCRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6 OkZpbGVzeXN0ZW1TY3JpcHRQcmVwICopIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRyb3AoOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFJwbUltcG9ydGVyRmxhZ3MkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlJw bUltcG9ydGVyRmxhZ3MgKikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXIgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYygp IG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVy JGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICopIG5vZXhjZXB0OwotLXZvaWQg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRyb3AoOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9z dHJlZWN4eDo6SGlzdG9yeUN0eCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlD dHgkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRI aXN0b3J5Q3R4JGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKikgbm9leGNlcHQ7 Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9wKDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06 OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRU b2tpb0hhbmRsZSRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRva2lvSGFuZGxlJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICop IG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxl JGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiAqcHRyKSBub2V4 Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkICpjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9pZCBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRlYWxsb2MoOjpycG1v c3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRhbGxv YygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxl JGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICopIG5vZXhjZXB0OwotLXZvaWQgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRyb3AoOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlPiAqcHRyKSBub2V4Y2VwdDsKLS0KLS12b2lkIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbmV3KDo6cnVzdDo6VmVj PDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBub2V4Y2Vw dDsKLS12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFj ZW1lbnQkZHJvcCg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dD4gKnB0cikgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGxlbig6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJl ZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0tOjpzdGQ6 OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50JGNhcGFjaXR5KDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLS06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudCBjb25zdCAqY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVS ZXBsYWNlbWVudCRkYXRhKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxh Y2VtZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkcmVzZXJ2ZV90b3RhbCg6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnB0ciwgOjpzdGQ6OnNpemVf dCBuZXdfY2FwKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVl Y3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkc2V0X2xlbig6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0 OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudCR0cnVuY2F0ZSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNl bWVudD4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OwotLQotLXZvaWQgY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcoOjpydXN0OjpWZWM8 OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLXZv aWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wKDo6 cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRyKSBub2V4Y2VwdDsK LS06OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckbGVuKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25z dCAqcHRyKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JFN0cmluZ01hcHBpbmckY2FwYWNpdHkoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVj eHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLTo6cnBtb3N0cmVlY3h4 OjpTdHJpbmdNYXBwaW5nIGNvbnN0ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRT dHJpbmdNYXBwaW5nJGRhdGEoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBp bmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkU3RyaW5nTWFwcGluZyRyZXNlcnZlX3RvdGFsKDo6cnVzdDo6VmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhj ZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGlu ZyRzZXRfbGVuKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRy LCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHRydW5jYXRlKDo6cnVzdDo6VmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7 Ci0tCi0tOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUGFzc3dkREIkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRQYXNzd2REQiRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiAqKSBub2V4 Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRkcm9wKDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gKnB0cikgbm9leGNlcHQ7Ci0tCi0t OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRQYXNzd2RFbnRyaWVzJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RF bnRyaWVzICopIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBh c3N3ZEVudHJpZXMkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmll cz4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKmN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9p ZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRkZWFsbG9jKDo6cnBtb3N0 cmVlY3h4OjpFeHRlbnNpb25zICopIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEV4dGVuc2lvbnMkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0 ZW5zaW9ucz4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29u ZmlnICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckYWxsb2MoKSBu b2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZp ZyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqKSBub2V4Y2VwdDsKLS12 b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkcm9wKDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gKnB0cikgbm9leGNlcHQ7Ci0t Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJG5l dyg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikg bm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQ YWNrYWdlJGRyb3AoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpw dHIpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgY3h4YnJpZGdl MSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0eSg6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0t OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2UgY29uc3QgKmN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZGF0YSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2Ux JHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwoOjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3Qg bmV3X2NhcCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRMb2NrZWRQYWNrYWdlJHNldF9sZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkdHJ1bmNhdGUoOjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3Qg bGVuKSBub2V4Y2VwdDsKLS0KLS1zdGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21w bGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlv bj46OnR5cGU+Ojp2YWx1ZSwgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpDbGllbnRD b25uZWN0aW9uYCBpcyByZXF1aXJlZCIpOwotLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPikgPT0gc2l6ZW9mKHZv aWQgKiksICIiKTsKLS1zdGF0aWNfYXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+KSA9PSBhbGlnbm9mKHZvaWQgKiksICIiKTsK LS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlv biRudWxsKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9u PiAqcHRyKSBub2V4Y2VwdCB7Ci0tICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4oKTsKLS19Ci0tdm9pZCBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kcmF3KDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyLCA6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OnBvaW50ZXIgcmF3KSBub2V4 Y2VwdCB7Ci0tICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 Q2xpZW50Q29ubmVjdGlvbj4ocmF3KTsKLS19Ci0tOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+OjplbGVtZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRnZXQoOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+IGNvbnN0ICZwdHIpIG5vZXhj ZXB0IHsKLS0gIHJldHVybiBwdHIuZ2V0KCk7Ci0tfQotLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gJnB0cikgbm9leGNlcHQgewotLSAg cmV0dXJuIHB0ci5yZWxlYXNlKCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJw bW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICpwdHIpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6 ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OkNs aWVudENvbm5lY3Rpb24+Ojp2YWx1ZT57fShwdHIpOwotLX0KLS0KLS1zdGF0aWNfYXNzZXJ0KDo6 cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJl ZWN4eDo6UlBNRGlmZj46OnR5cGU+Ojp2YWx1ZSwgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVl Y3h4OjpSUE1EaWZmYCBpcyByZXF1aXJlZCIpOwotLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPikgPT0gc2l6ZW9mKHZvaWQgKiks ICIiKTsKLS1zdGF0aWNfYXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OlJQTURpZmY+KSA9PSBhbGlnbm9mKHZvaWQgKiksICIiKTsKLS12b2lkIGN4eGJyaWRn ZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRudWxsKDo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAqcHRyKSBub2V4Y2VwdCB7Ci0tICA6Om5ldyAocHRy KSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4oKTsKLS19Ci0tdm9p ZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkcmF3KDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAqcHRyLCA6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdCB7Ci0tICA6 Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4ocmF3 KTsKLS19Ci0tOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+OjplbGVt ZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlm ZiRnZXQoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+IGNvbnN0ICZw dHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBwdHIuZ2V0KCk7Ci0tfQotLTo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UlBNRGlmZj4gJnB0cikgbm9leGNlcHQgewotLSAgcmV0dXJuIHB0ci5yZWxlYXNl KCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZm JGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIpIG5v ZXhjZXB0IHsKLS0gIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxl dGU8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojp2YWx1ZT57fShwdHIpOwotLX0KLS0KLS1zdGF0 aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVu dDw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojp0eXBlPjo6dmFsdWUsICJkZWZpbml0aW9uIG9m IGA6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3NgIGlzIHJlcXVpcmVkIik7Ci0tc3RhdGljX2Fzc2Vy dChzaXplb2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPikgPT0g c2l6ZW9mKHZvaWQgKiksICIiKTsKLS1zdGF0aWNfYXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7 Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJG51bGwo OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyKSBub2V4Y2Vw dCB7Ci0tICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3M+KCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQ cm9ncmVzcyRyYXcoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAq cHRyLCA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojpwb2ludGVy IHJhdykgbm9leGNlcHQgewotLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPihyYXcpOwotLX0KLS06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UHJvZ3Jlc3M+OjplbGVtZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEkdW5pcXVl X3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3MkZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQcm9ncmVzcz4gY29uc3QgJnB0cikgbm9leGNlcHQgewotLSAgcmV0dXJuIHB0ci5n ZXQoKTsKLS19Ci0tOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6 cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJHJlbGVh c2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAmcHRyKSBub2V4 Y2VwdCB7Ci0tICByZXR1cm4gcHRyLnJlbGVhc2UoKTsKLS19Ci0tdm9pZCBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OmRlbGV0 ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVz cz46OnZhbHVlPnt9KHB0cik7Ci0tfQotLQotLXN0YXRpY19hc3NlcnQoOjpydXN0OjpkZXRhaWw6 OmlzX2NvbXBsZXRlPDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46 OnR5cGU+Ojp2YWx1ZSwgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpScG1Uc2AgaXMg cmVxdWlyZWQiKTsKLS1zdGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UnBtVHM+KSA9PSBzaXplb2Yodm9pZCAqKSwgIiIpOwotLXN0YXRpY19hc3Nl cnQoYWxpZ25vZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KSA9PSBh bGlnbm9mKHZvaWQgKiksICIiKTsKLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3Ry ZWVjeHgkUnBtVHMkbnVsbCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ ICpwdHIpIG5vZXhjZXB0IHsKLS0gIDo6bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpScG1Ucz4oKTsKLS19Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBt b3N0cmVlY3h4JFJwbVRzJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBt VHM+ICpwdHIsIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnBvaW50 ZXIgcmF3KSBub2V4Y2VwdCB7Ci0tICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UnBtVHM+KHJhdyk7Ci0tfQotLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpScG1Ucz46OmVsZW1lbnRfdHlwZSBjb25zdCAqY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRScG1UcyRnZXQoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlJwbVRzPiBjb25zdCAmcHRyKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcHRyLmdldCgpOwotLX0K LS06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojpwb2ludGVyIGN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkcmVsZWFzZSg6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICZwdHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBw dHIucmVsZWFzZSgpOwotLX0KLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkUnBtVHMkZHJvcCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpw dHIpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNf Y29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6dmFsdWU+e30ocHRyKTsKLS19Ci0tCi0t c3RhdGljX2Fzc2VydCg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9l eHRlbnQ8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6dHlwZT46OnZhbHVlLCAiZGVmaW5p dGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhYCBpcyByZXF1aXJlZCIpOwotLXN0 YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YT4pID09IHNpemVvZih2b2lkICopLCAiIik7Ci0tc3RhdGljX2Fzc2VydChhbGlnbm9m KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IGFsaWdu b2Yodm9pZCAqKSwgIiIpOwotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4 eCRQYWNrYWdlTWV0YSRudWxsKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YT4gKnB0cikgbm9leGNlcHQgewotLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9w dHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPigpOwotLX0KLS12b2lkIGN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkcmF3KDo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0IHsKLS0gIDo6 bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4o cmF3KTsKLS19Ci0tOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh Pjo6ZWxlbWVudF90eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JFBhY2thZ2VNZXRhJGdldCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGE+IGNvbnN0ICZwdHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBwdHIuZ2V0KCk7Ci0tfQot LTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIg Y3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRyZWxlYXNlKDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gJnB0cikgbm9leGNl cHQgewotLSAgcmV0dXJuIHB0ci5yZWxlYXNlKCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlx dWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKnB0cikgbm9leGNlcHQgewotLSAgOjpydXN0Ojpk ZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE+Ojp2YWx1ZT57fShwdHIpOwotLX0KLStleHRlcm4gIkMiCi0rewotKyAgOjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXAgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3 cmFwJGFsbG9jICgpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkQnViYmxld3JhcCRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAqKSBub2V4 Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkZHJv cCAoCi0rICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+ICpwdHIp IG5vZXhjZXB0OwotKwotKyAgOjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKgot KyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2Mg KCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWlu ZXJJbWFnZVN0YXRlJGRlYWxsb2MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJ bWFnZVN0YXRlICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkcm9wICgKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJw bW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVt cEV0Y0d1YXJkJGFsbG9jICgpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3Vh cmQgKikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1w RXRjR3VhcmQkZHJvcCAoCi0rICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBF dGNHdWFyZD4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3Rl bVNjcmlwdFByZXAgKgotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1T Y3JpcHRQcmVwJGFsbG9jICgpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZGVhbGxvYyAoCi0rICAgICAgOjpycG1vc3Ry ZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZHJvcCAoCi0rICAgICAg OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiAqcHRyKSBu b2V4Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICpjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRhbGxvYyAoKSBub2V4Y2VwdDsK LSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkZGVh bGxvYyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKikgbm9leGNl cHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdz JGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZs YWdzPiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAq Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGFsbG9jICgpIG5vZXhjZXB0 OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZGVhbGxv YyAoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZHJvcCAoCi0rICAgICAgOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsg IDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk SGlzdG9yeUN0eCRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEhpc3RvcnlDdHgkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHgg Kikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5 Q3R4JGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4 PiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAqY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGFsbG9jICgpIG5vZXhjZXB0Owot KyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZGVhbGxvYyAo OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZHJvcCAoCi0rICAgICAgOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsgIDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRUb2tpb0VudGVyR3VhcmQkYWxsb2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lkCi0rICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRlYWxsb2MgKDo6cnBtb3N0cmVl Y3h4OjpUb2tpb0VudGVyR3VhcmQgKikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkZHJvcCAoCi0rICAgICAgOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVl ZmlsZSRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFRyZWVmaWxlJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqKSBub2V4Y2Vw dDsKLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkcm9w ICg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpwdHIpIG5vZXhjZXB0Owot KwotKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxh Y2VtZW50JG5ldyAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnQ+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRyb3AgKAotKyAgICAgIDo6 cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcHRyKSBub2V4 Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk T3ZlcnJpZGVSZXBsYWNlbWVudCRsZW4gKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLSsgIDo6c3Rk OjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudCRjYXBhY2l0eSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnQ+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgKgotKyAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRkYXRhICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6 OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7 Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFj ZW1lbnQkcmVzZXJ2ZV90b3RhbCAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNl cHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVw bGFjZW1lbnQkc2V0X2xlbiAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92 ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLSsg IHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVu dCR0cnVuY2F0ZSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLSsKLSsgIHZv aWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcgKAot KyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAq cHRyKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk U3RyaW5nTWFwcGluZyRkcm9wICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz4gKnB0cikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbGVuICgKLSsgICAgICA6OnJ1 c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9leGNl cHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckY2FwYWNpdHkgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4 OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4 OjpTdHJpbmdNYXBwaW5nIGNvbnN0ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRT dHJpbmdNYXBwaW5nJGRhdGEgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpT dHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRyZXNlcnZlX3RvdGFsICgKLSsgICAg ICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6 OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRzZXRfbGVuICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6 OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5v ZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdN YXBwaW5nJHRydW5jYXRlICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3Ry aW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OwotKwotKyAgOjpy cG1vc3RyZWVjeHg6OlBhc3N3ZERCICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dk REIkYWxsb2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRQYXNzd2REQiRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKikgbm9leGNlcHQ7 Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCAo OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiAqcHRyKSBub2V4Y2VwdDsKLSsK LSsgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICpjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkUGFzc3dkRW50cmllcyRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6 OlBhc3N3ZEVudHJpZXMgKikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpQYXNzd2RFbnRyaWVzPiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRh bGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4 dGVuc2lvbnMkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKikgbm9leGNlcHQ7 Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AgKAot KyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiAqcHRyKSBub2V4 Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGFsbG9jICgpIG5vZXhjZXB0OwotKyAgdm9p ZAotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRlYWxsb2Mg KDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRyb3AgKAotKyAgICAgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gKnB0cikgbm9leGNlcHQ7 Ci0rCi0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2th Z2UkbmV3ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2Fn ZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZHJvcCAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1v c3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVf dCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGxlbiAoCi0r ICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpw dHIpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9z dHJlZWN4eCRMb2NrZWRQYWNrYWdlJGNhcGFjaXR5ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICA6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZSBjb25zdCAqY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkYXRhICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkcmVzZXJ2ZV90b3Rh bCAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpw dHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2Ukc2V0X2xlbiAoCi0rICAgICAgOjpy dXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXpl X3QgbGVuKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkTG9ja2VkUGFja2FnZSR0cnVuY2F0ZSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsK LSsKLSsgIHN0YXRpY19hc3NlcnQgKDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTwKLSsgICAg ICAgICAgICAgICAgICAgICA6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6Q2xp ZW50Q29ubmVjdGlvbj46OnR5cGU+Ojp2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICJkZWZpbml0 aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbmAgaXMgcmVxdWlyZWQiKTsK LSsgIHN0YXRpY19hc3NlcnQgKHNpemVvZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OkNsaWVudENvbm5lY3Rpb24+KSA9PSBzaXplb2YgKHZvaWQgKiksCi0rICAgICAgICAgICAg ICAgICAiIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4pID09IGFsaWdub2YgKHZvaWQgKiksCi0r ICAgICAgICAgICAgICAgICAiIik7Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIk cnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kbnVsbCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICpwdHIpIG5vZXhjZXB0Ci0r ICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNs aWVudENvbm5lY3Rpb24+ICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVf cHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJHJhdyAoCi0rICAgICAgOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICpwdHIsCi0rICAgICAg OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojpwb2lu dGVyIHJhdykgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKHJhdyk7Ci0rICB9Ci0rICA6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OmVsZW1lbnRf dHlwZSBjb25zdCAqCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVu dENvbm5lY3Rpb24kZ2V0ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6Q2xpZW50Q29ubmVjdGlvbj4gY29uc3QgJnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgcmV0 dXJuIHB0ci5nZXQgKCk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6Q2xpZW50Q29ubmVjdGlvbj46OnBvaW50ZXIKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRy cG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRyZWxlYXNlICgKLSsgICAgICA6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gJnB0cikgbm9leGNlcHQK LSsgIHsKLSsgICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4 YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJGRyb3AgKAot KyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9u PiAqcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0Ojpk ZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6dmFs dWU+e30ocHRyKTsKLSsgIH0KLSsKLSsgIHN0YXRpY19hc3NlcnQgKAotKyAgICAgIDo6cnVzdDo6 ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6 UlBNRGlmZj46OnR5cGU+Ojp2YWx1ZSwKLSsgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3Ry ZWVjeHg6OlJQTURpZmZgIGlzIHJlcXVpcmVkIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChzaXplb2Yg KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPikgPT0gc2l6ZW9mICh2 b2lkICopLCAiIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4pID09IGFsaWdub2YgKHZvaWQgKiksICIiKTsKLSsg IHZvaWQKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRudWxs ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKnB0 cikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UlBNRGlmZj4gKCk7Ci0rICB9Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkcmF3ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKnB0ciwKLSsgICAgICA6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdAotKyAg ewotKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmPiAocmF3KTsKLSsgIH0KLSsgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmPjo6ZWxlbWVudF90eXBlIGNvbnN0ICoKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRy cG1vc3RyZWVjeHgkUlBNRGlmZiRnZXQgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmPiBjb25zdCAmcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1 cm4gcHRyLmdldCAoKTsKLSsgIH0KLSsgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpSUE1EaWZmPjo6cG9pbnRlcgotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4 eCRSUE1EaWZmJHJlbGVhc2UgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpSUE1EaWZmPiAmcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1cm4gcHRyLnJlbGVh c2UgKCk7Ci0rICB9Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVl Y3h4JFJQTURpZmYkZHJvcCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlJQTURpZmY+ICpwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnVzdDo6ZGVsZXRlcl9p Zjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojp2 YWx1ZT57fShwdHIpOwotKyAgfQotKwotKyAgc3RhdGljX2Fzc2VydCAoCi0rICAgICAgOjpydXN0 OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz46OnR5cGU+Ojp2YWx1ZSwKLSsgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzYCBpcyByZXF1aXJlZCIpOwotKyAgc3RhdGljX2Fzc2VydCAoc2l6 ZW9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+KSA9PSBzaXpl b2YgKHZvaWQgKiksICIiKTsKLSsgIHN0YXRpY19hc3NlcnQgKGFsaWdub2YgKDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4pID09IGFsaWdub2YgKHZvaWQgKiksICIi KTsKLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jl c3MkbnVsbCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dy ZXNzPiAqcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKCk7Ci0rICB9Ci0rICB2b2lkCi0rICBjeHhi cmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJHJhdyAoCi0rICAgICAgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyLAotKyAgICAgIDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnBvaW50ZXIgcmF3KSBu b2V4Y2VwdAotKyAgewotKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQcm9ncmVzcz4gKHJhdyk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UHJvZ3Jlc3M+OjplbGVtZW50X3R5cGUgY29uc3QgKgotKyAgY3h4YnJpZGdl MSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRnZXQgKAotKyAgICAgIDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gY29uc3QgJnB0cikgbm9leGNlcHQK LSsgIHsKLSsgICAgcmV0dXJuIHB0ci5nZXQgKCk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojpwb2ludGVyCi0rICBjeHhicmlkZ2UxJHVuaXF1 ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJHJlbGVhc2UgKAotKyAgICAgIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gJnB0cikgbm9leGNlcHQKLSsgIHsKLSsg ICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1 bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRkcm9wICgKLSsgICAgICA6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+ICpwdHIpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPjo6dmFsdWU+e30ocHRyKTsKLSsgIH0KLSsKLSsgIHN0YXRpY19h c3NlcnQgKAotKyAgICAgIDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3Zl X2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojp0eXBlPjo6dmFsdWUsCi0rICAgICAgImRl ZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpScG1Uc2AgaXMgcmVxdWlyZWQiKTsKLSsgIHN0 YXRpY19hc3NlcnQgKHNpemVvZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJw bVRzPikgPT0gc2l6ZW9mICh2b2lkICopLCAiIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChhbGlnbm9m ICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KSA9PSBhbGlnbm9mICh2 b2lkICopLCAiIik7Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVl Y3h4JFJwbVRzJG51bGwgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpScG1Ucz4gKnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4 YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1UcyRyYXcgKAotKyAgICAgIDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKnB0ciwKLSsgICAgICA6OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQK LSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UnBtVHM+IChyYXcpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlJwbVRzPjo6ZWxlbWVudF90eXBlIGNvbnN0ICoKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRy cG1vc3RyZWVjeHgkUnBtVHMkZ2V0ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UnBtVHM+IGNvbnN0ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHJldHVybiBw dHIuZ2V0ICgpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJw bVRzPjo6cG9pbnRlcgotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1U cyRyZWxlYXNlICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBt VHM+ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHJldHVybiBwdHIucmVsZWFzZSAoKTsKLSsg IH0KLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMk ZHJvcCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAq cHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRh aWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnZhbHVlPnt9KHB0cik7Ci0r ICB9Ci0rCi0rICBzdGF0aWNfYXNzZXJ0ICgKLSsgICAgICA6OnJ1c3Q6OmRldGFpbDo6aXNfY29t cGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6 dHlwZT46OnZhbHVlLAotKyAgICAgICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGFgIGlzIHJlcXVpcmVkIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IHNpemVvZiAodm9p ZCAqKSwgIiIpOwotKyAgc3RhdGljX2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPikgPT0gYWxpZ25vZiAodm9pZCAqKSwgIiIpOwot KyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0 YSRudWxsICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGE+ICpwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAoKTsKLSsgIH0KLSsgIHZvaWQKLSsg IGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkcmF3ICgKLSsg ICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIs Ci0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6 cG9pbnRlciByYXcpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAocmF3KTsKLSsgIH0KLSsgIDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OmVsZW1lbnRfdHlwZSBj b25zdCAqCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRh JGdldCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhPiBjb25zdCAmcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1cm4gcHRyLmdldCAoKTsK LSsgIH0KLSsgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46 OnBvaW50ZXIKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1l dGEkcmVsZWFzZSAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBh Y2thZ2VNZXRhPiAmcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1cm4gcHRyLnJlbGVhc2Ug KCk7Ci0rICB9Ci0rICB2b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JFBhY2thZ2VNZXRhJGRyb3AgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YT4gKnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpydXN0OjpkZWxl dGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGE+Ojp2YWx1ZT57fShwdHIpOwotKyAgfQotIH0gLy8gZXh0ZXJuICJDIgotIAotLW5hbWVz cGFjZSBydXN0IHsKLS1pbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRnZTEgewotK25hbWVzcGFjZSBy dXN0Ci0rewotK2lubGluZSBuYW1lc3BhY2UgY3h4YnJpZGdlMQotK3sKLSB0ZW1wbGF0ZSA8Pgot LTo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdy YXA+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRhbGxvYygpOwotKzo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+OjphbGxvY2F0aW9u OjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkQnViYmxld3JhcCRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6 OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3Ry ZWVjeHg6OkJ1YmJsZXdyYXAgKnB0cikgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEJ1YmJsZXdyYXAkZGVhbGxvYyhwdHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3Ry ZWVjeHg6OkJ1YmJsZXdyYXA+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcCAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRCdWJibGV3cmFwJGRlYWxsb2MgKHB0cik7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBC b3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkZHJvcCh0aGlzKTsKLSt2b2lkCi0r Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sKLSsg IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRyb3AgKHRoaXMpOwotIH0K LSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICpCb3g8 OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9uOjphbGxvYygp IG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFp bmVySW1hZ2VTdGF0ZSRhbGxvYygpOwotKzo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0 YXRlICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0 aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4K LS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT46OmFsbG9jYXRp b246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKnB0cikgbm9l eGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3Rh dGUkZGVhbGxvYyhwdHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lcklt YWdlU3RhdGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jICgKLSsgICAgOjpycG1vc3RyZWVjeHg6OkNv bnRhaW5lckltYWdlU3RhdGUgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1w bGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPjo6 ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWlu ZXJJbWFnZVN0YXRlJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6Q29u dGFpbmVySW1hZ2VTdGF0ZT46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkcm9wICh0aGlzKTsKLSB9Ci0gdGVt cGxhdGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpCb3g8OjpycG1vc3RyZWVj eHg6OlRlbXBFdGNHdWFyZD46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgewotLSAgcmV0 dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkYWxsb2MoKTsKLSs6 OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBF dGNHdWFyZD46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkYWxsb2MgKCk7Ci0gfQotIHRl bXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD46OmFsbG9j YXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqcHRyKSBub2V4Y2Vw dCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRlYWxsb2Mo cHRyKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0 aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpwdHIpIG5vZXhjZXB0 Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9j IChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1w RXRjR3VhcmQ+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFRlbXBFdGNHdWFyZCRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6 OlRlbXBFdGNHdWFyZD46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRyb3AgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8Pgot LTo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqQm94PDo6cnBtb3N0cmVlY3h4 OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgewot LSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJl cCRhbGxvYygpOwotKzo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqCi0rQm94 PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmFsbG9jYXRpb246OmFsbG9j ICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRG aWxlc3lzdGVtU2NyaXB0UHJlcCRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJv eDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+OjphbGxvY2F0aW9uOjpkZWFs bG9jKDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqcHRyKSBub2V4Y2VwdCB7 Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZGVh bGxvYyhwdHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQ cmVwPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoCi0rICAgIDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lz dGVtU2NyaXB0UHJlcCAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0 ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmRy b3AoKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3Rl bVNjcmlwdFByZXAkZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxl c3lzdGVtU2NyaXB0UHJlcD46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZHJvcCAodGhpcyk7Ci0gfQotIHRl bXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKkJveDw6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQg ewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdz JGFsbG9jKCk7Ci0rOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKgotK0JveDw6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRl ckZsYWdzJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlckZsYWdzPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXJGbGFncyAqcHRyKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6 OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmFsbG9jYXRpb246OmRlYWxsb2MgKAot KyAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAqcHRyKSBub2V4Y2VwdAotK3sK LSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRlYWxsb2Mg KHB0cik7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyRmxhZ3M+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRyb3AgKHRoaXMpOwotIH0K LSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqQm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlcj46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgewotLSAg cmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYygpOwot Kzo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlcj46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYyAoKTsKLSB9Ci0gdGVt cGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+OjphbGxvY2F0 aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqcHRyKSBub2V4Y2VwdCB7 Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZGVhbGxvYyhwdHIp OwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPjo6YWxsb2NhdGlvbjo6 ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICpwdHIpIG5vZXhjZXB0Ci0rewot KyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MgKHB0cik7 Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy Pjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1J bXBvcnRlciRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRScG1JbXBvcnRlciRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9zdHJl ZWN4eDo6SGlzdG9yeUN0eCAqQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6YWxsb2Nh dGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JEhpc3RvcnlDdHgkYWxsb2MoKTsKLSs6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAq Ci0rQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkg bm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3Rv cnlDdHgkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVj eHg6Okhpc3RvcnlDdHg+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4ICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRI aXN0b3J5Q3R4JGRlYWxsb2MocHRyKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHgg KnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9y eUN0eCRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0 cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9z dHJlZWN4eDo6SGlzdG9yeUN0eD46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUg PD4KLS06OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKkJveDw6OnJwbW9zdHJlZWN4eDo6VG9r aW9IYW5kbGU+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkYWxsb2MoKTsKLSs6OnJwbW9zdHJl ZWN4eDo6VG9raW9IYW5kbGUgKgotK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojph bGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0t dm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPjo6YWxsb2NhdGlvbjo6ZGVhbGxv Yyg6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKnB0cikgbm9leGNlcHQgewotLSAgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRlYWxsb2MocHRyKTsKLSt2b2lkCi0r Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1w bGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmRyb3AoKSBu b2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZHJv cCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmRyb3Ag KCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5k bGUkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlRva2lv RW50ZXJHdWFyZCAqQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0 aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkVG9raW9FbnRlckd1YXJkJGFsbG9jKCk7Ci0rOjpycG1vc3RyZWVjeHg6OlRva2lvRW50 ZXJHdWFyZCAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0 aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZv aWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0aW9uOjpkZWFs bG9jKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKnB0cikgbm9leGNlcHQgewotLSAg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFsbG9jKHB0cik7 Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlv bjo6ZGVhbGxvYyAoCi0rICAgIDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKnB0cikg bm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1 YXJkJGRlYWxsb2MgKHB0cik7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3Ry ZWVjeHg6OlRva2lvRW50ZXJHdWFyZD46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRyb3AodGhpcyk7Ci0rdm9pZAotK0Jv eDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sK LSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkZHJvcCAodGhp cyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGFsbG9jKCk7Ci0r OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl Pjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8Pgot LXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT46OmFsbG9jYXRpb246OmRlYWxsb2Mo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkVHJlZWZpbGUkZGVhbGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJv eDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRyb3AgKHRoaXMpOwotIH0KLS10ZW1wbGF0 ZSA8PgotLVZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OlZlYygpIG5v ZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVw bGFjZW1lbnQkbmV3KHRoaXMpOwotK3RlbXBsYXRlIDw+IFZlYzw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD46OlZlYyAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbmV3ICh0aGlzKTsKLSB9Ci0g dGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dD46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRkcm9wKHRoaXMpOwotK3ZvaWQKLStWZWM8Ojpy cG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFj ZW1lbnQkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpzdGQ6OnNpemVfdCBWZWM8 OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpzaXplKCkgY29uc3Qgbm9leGNl cHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQkbGVuKHRoaXMpOwotKzo6c3RkOjpzaXplX3QKLStWZWM8OjpycG1vc3RyZWVj eHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAg cmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1l bnQkbGVuICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnN0ZDo6c2l6ZV90IFZlYzw6OnJw bW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OmNhcGFjaXR5KCkgY29uc3Qgbm9leGNl cHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQkY2FwYWNpdHkodGhpcyk7Ci0rOjpzdGQ6OnNpemVfdAotK1ZlYzw6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OmNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQkY2FwYWNpdHkgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0 cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICpWZWM8OjpycG1vc3RyZWVjeHg6Ok92 ZXJyaWRlUmVwbGFjZW1lbnQ+OjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkZGF0YSh0 aGlzKTsKLSs6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAqCi0rVmVj PDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6ZGF0YSAoKSBjb25zdCBub2V4 Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVy cmlkZVJlcGxhY2VtZW50JGRhdGEgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVj PDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6cmVzZXJ2ZV90b3RhbCg6OnN0 ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHJlc2VydmVfdG90YWwodGhpcywg bmV3X2NhcCk7Ci0rdm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dD46OnJlc2VydmVfdG90YWwgKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudCRyZXNlcnZlX3RvdGFsICh0aGlzLCBuZXdfY2FwKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12 b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnNldF9sZW4oOjpz dGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHNldF9sZW4odGhpcywgbGVuKTsKLSt2 b2lkCi0rVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6c2V0X2xlbiAo OjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkc2V0X2xlbiAodGhpcywgbGVu KTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVS ZXBsYWNlbWVudD46OnRydW5jYXRlKDo6c3RkOjpzaXplX3QgbGVuKSB7Ci0tICByZXR1cm4gY3h4 YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCR0cnVuY2F0 ZSh0aGlzLCBsZW4pOwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFj ZW1lbnQ+Ojp0cnVuY2F0ZSAoOjpzdGQ6OnNpemVfdCBsZW4pCi0rewotKyAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUg KHRoaXMsIGxlbik7Ci0gfQotLXRlbXBsYXRlIDw+Ci0tVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJp bmdNYXBwaW5nPjo6VmVjKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcodGhpcyk7Ci0rdGVtcGxhdGUgPD4gVmVjPDo6cnBt b3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6VmVjICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcgKHRoaXMpOwotIH0K LSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6 ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJl ZWN4eCRTdHJpbmdNYXBwaW5nJGRyb3AodGhpcyk7Ci0rdm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4 eDo6U3RyaW5nTWFwcGluZz46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wICh0aGlzKTsKLSB9 Ci0gdGVtcGxhdGUgPD4KLS06OnN0ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZz46OnNpemUoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRsZW4odGhpcyk7Ci0rOjpzdGQ6OnNp emVfdAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnNpemUgKCkgY29uc3Qg bm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk U3RyaW5nTWFwcGluZyRsZW4gKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6c3RkOjpzaXpl X3QgVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6Y2FwYWNpdHkoKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3Ry aW5nTWFwcGluZyRjYXBhY2l0eSh0aGlzKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6Y2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRj YXBhY2l0eSAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlN0cmlu Z01hcHBpbmcgY29uc3QgKlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmRhdGEo KSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyRkYXRhKHRoaXMpOwotKzo6cnBtb3N0cmVlY3h4OjpTdHJpbmdN YXBwaW5nIGNvbnN0ICoKLStWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpkYXRh ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JFN0cmluZ01hcHBpbmckZGF0YSAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0t dm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpyZXNlcnZlX3RvdGFsKDo6 c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckcmVzZXJ2ZV90b3RhbCh0aGlzLCBuZXdf Y2FwKTsKLSt2b2lkCi0rVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6cmVzZXJ2 ZV90b3RhbCAoOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBj eHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHJlc2VydmVfdG90 YWwgKHRoaXMsIG5ld19jYXApOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6c2V0X2xlbig6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNl cHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckc2V0X2xlbih0aGlzLCBsZW4pOwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6OlN0 cmluZ01hcHBpbmc+OjpzZXRfbGVuICg6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRz ZXRfbGVuICh0aGlzLCBsZW4pOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6dHJ1bmNhdGUoOjpzdGQ6OnNpemVfdCBsZW4pIHsKLS0g IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHRy dW5jYXRlKHRoaXMsIGxlbik7Ci0rdm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFw cGluZz46OnRydW5jYXRlICg6OnN0ZDo6c2l6ZV90IGxlbikKLSt7Ci0rICByZXR1cm4gY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSAodGhpcywg bGVuKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKkJveDw6 OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsK LS0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkYWxsb2MoKTsK LSs6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKgotK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dk REI+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+ Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPjo6YWxsb2NhdGlvbjo6ZGVhbGxv Yyg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKnB0cikgbm9leGNlcHQgewotLSAgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGRlYWxsb2MocHRyKTsKLSt2b2lkCi0rQm94PDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2REQj46OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6cnBtb3N0cmVl Y3h4OjpQYXNzd2REQiAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRQYXNzd2REQiRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQg Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94 PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBs YXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKkJveDw6OnJwbW9zdHJlZWN4 eDo6UGFzc3dkRW50cmllcz46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgewotLSAgcmV0 dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGFsbG9jKCk7Ci0r OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKgotK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFz c3dkRW50cmllcz46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGFsbG9jICgpOwotIH0K LSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPjo6 YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAqcHRyKSBu b2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRk ZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46 OmFsbG9jYXRpb246OmRlYWxsb2MgKAotKyAgICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmll cyAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNz d2RFbnRyaWVzJGRlYWxsb2MgKHB0cik7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8Ojpy cG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZHJvcCh0aGlzKTsKLSt2b2lkCi0r Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sK LSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRyb3AgKHRoaXMp OwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICpCb3g8Ojpy cG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsK LS0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYygp OwotKzo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OkV4 dGVuc2lvbnM+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYyAoKTsKLSB9Ci0gdGVt cGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz46OmFsbG9jYXRp b246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKnB0cikgbm9leGNlcHQgewot LSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkZGVhbGxvYyhwdHIpOwot K3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9uOjpkZWFs bG9jICg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRlYWxsb2MgKHB0cik7Ci0gfQot IHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+Ojpkcm9w KCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMk ZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6ZHJv cCAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNp b25zJGRyb3AgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpMb2Nr ZmlsZUNvbmZpZyAqQm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmFsbG9jYXRp b246OmFsbG9jKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRMb2NrZmlsZUNvbmZpZyRhbGxvYygpOwotKzo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNv bmZpZyAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmFsbG9jYXRpb246 OmFsbG9jICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRMb2NrZmlsZUNvbmZpZyRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJv eDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6 cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqcHRyKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZGVhbGxvYyhwdHIpOwotK3ZvaWQK LStCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPjo6YWxsb2NhdGlvbjo6ZGVhbGxv YyAoCi0rICAgIDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqcHRyKSBub2V4Y2VwdAot K3sKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkZWFsbG9j IChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpMb2Nr ZmlsZUNvbmZpZz46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkTG9ja2ZpbGVDb25maWckZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVl Y3h4OjpMb2NrZmlsZUNvbmZpZz46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZHJvcCAodGhpcyk7Ci0gfQotLXRlbXBs YXRlIDw+Ci0tVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6VmVjKCkgbm9leGNl cHQgewotLSAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRu ZXcodGhpcyk7Ci0rdGVtcGxhdGUgPD4gVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdl Pjo6VmVjICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkTG9ja2VkUGFja2FnZSRuZXcgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVj PDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIHJl dHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRyb3Ao dGhpcyk7Ci0rdm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmRyb3Ag KCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkTG9ja2VkUGFja2FnZSRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnN0ZDo6 c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnNpemUoKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9j a2VkUGFja2FnZSRsZW4odGhpcyk7Ci0rOjpzdGQ6OnNpemVfdAotK1ZlYzw6OnJwbW9zdHJlZWN4 eDo6TG9ja2VkUGFja2FnZT46OnNpemUgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4gKHRoaXMp OwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6c3RkOjpzaXplX3QgVmVjPDo6cnBtb3N0cmVlY3h4OjpM b2NrZWRQYWNrYWdlPjo6Y2FwYWNpdHkoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4 YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0eSh0aGlz KTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6 Y2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0 X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0eSAodGhpcyk7Ci0gfQotIHRl bXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2UgY29uc3QgKlZlYzw6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmRhdGEoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkYXRh KHRoaXMpOwotKzo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlIGNvbnN0ICoKLStWZWM8Ojpy cG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpkYXRhICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2Uk ZGF0YSAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+OjpyZXNlcnZlX3RvdGFsKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9l eGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkcmVzZXJ2ZV90b3RhbCh0aGlzLCBuZXdfY2FwKTsKLSt2b2lkCi0rVmVjPDo6cnBt b3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6cmVzZXJ2ZV90b3RhbCAoOjpzdGQ6OnNpemVfdCBu ZXdfY2FwKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9z dHJlZWN4eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwgKHRoaXMsIG5ld19jYXApOwotIH0K LSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6 c2V0X2xlbig6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2Ukc2V0X2xlbih0aGlzLCBsZW4p OwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpzZXRfbGVuICg6 OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0 X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRzZXRfbGVuICh0aGlzLCBsZW4pOwotIH0K LSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6 dHJ1bmNhdGUoOjpzdGQ6OnNpemVfdCBsZW4pIHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHRydW5jYXRlKHRoaXMsIGxlbik7Ci0rdm9p ZAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnRydW5jYXRlICg6OnN0ZDo6 c2l6ZV90IGxlbikKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkTG9ja2VkUGFja2FnZSR0cnVuY2F0ZSAodGhpcywgbGVuKTsKLSB9Ci0gfSAvLyBuYW1lc3Bh Y2UgY3h4YnJpZGdlMQotIH0gLy8gbmFtZXNwYWNlIHJ1c3QKLWRpZmYgLS1naXQgYS9ycG1vc3Ry ZWUtY3h4cnMuaCBiL3JwbW9zdHJlZS1jeHhycy5oCi1pbmRleCA5YWQxYzcyZWVhLi4xYzcwZmZk OTM1IDEwMDY0NAotLS0tIGEvcnBtb3N0cmVlLWN4eHJzLmgKLSsrKyBiL3JwbW9zdHJlZS1jeHhy cy5oCi1AQCAtMSwxNiArMSwxNSBAQAotICNwcmFnbWEgb25jZQotLSNpbmNsdWRlICJzcmMvbGli cHJpdi9ycG1vc3RyZWUtY3h4cnMtcHJlbHVkZS5oIgotKyNpbmNsdWRlICJycG1vc3RyZWUtY2xp ZW50bGliLmgiCi0gI2luY2x1ZGUgInJwbW9zdHJlZS1jb250YWluZXIuaHBwIgotICNpbmNsdWRl ICJycG1vc3RyZWUtY3h4cnN1dGlsLmhwcCIKLS0jaW5jbHVkZSAicnBtb3N0cmVlLXV0aWwuaCIK LS0jaW5jbHVkZSAicnBtb3N0cmVlbWFpbi5oIgotLSNpbmNsdWRlICJycG1vc3RyZWUtY2xpZW50 bGliLmgiCi0gI2luY2x1ZGUgInJwbW9zdHJlZS1kaWZmLmhwcCIKLSAjaW5jbHVkZSAicnBtb3N0 cmVlLWxpYmJ1aWx0aW4uaCIKLS0jaW5jbHVkZSAicnBtb3N0cmVlLXV0aWwuaCIKLSAjaW5jbHVk ZSAicnBtb3N0cmVlLW91dHB1dC5oIgotLSNpbmNsdWRlICJycG1vc3RyZWUtcnBtLXV0aWwuaCIK LSAjaW5jbHVkZSAicnBtb3N0cmVlLXBhY2thZ2UtdmFyaWFudHMuaCIKLSsjaW5jbHVkZSAicnBt b3N0cmVlLXJwbS11dGlsLmgiCi0rI2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCi0rI2luY2x1 ZGUgInJwbW9zdHJlZW1haW4uaCIKLSsjaW5jbHVkZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4 eHJzLXByZWx1ZGUuaCIKLSAjaW5jbHVkZSA8YWxnb3JpdGhtPgotICNpbmNsdWRlIDxhcnJheT4K LSAjaW5jbHVkZSA8Y2Fzc2VydD4KLUBAIC0zNiw5NCArMzUsOTggQEAKLSAjcHJhZ21hIGNsYW5n IGRpYWdub3N0aWMgaWdub3JlZCAiLVdkb2xsYXItaW4taWRlbnRpZmllci1leHRlbnNpb24iCi0g I2VuZGlmIC8vIF9fY2xhbmdfXwotIAotLW5hbWVzcGFjZSBydXN0IHsKLS1pbmxpbmUgbmFtZXNw YWNlIGN4eGJyaWRnZTEgewotK25hbWVzcGFjZSBydXN0Ci0rewotK2lubGluZSBuYW1lc3BhY2Ug Y3h4YnJpZGdlMQotK3sKLSAvLyAjaW5jbHVkZSAicnVzdC9jeHguaCIKLSAKLSAjaWZuZGVmIENY WEJSSURHRTFfUEFOSUMKLSAjZGVmaW5lIENYWEJSSURHRTFfUEFOSUMKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgRXhjZXB0aW9uPgotLXZvaWQgcGFuaWMgW1tub3JldHVybl1dIChjb25zdCBjaGFyICpt c2cpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBFeGNlcHRpb24+IHZvaWQgcGFuaWMgW1tub3JldHVy bl1dIChjb25zdCBjaGFyICptc2cpOwotICNlbmRpZiAvLyBDWFhCUklER0UxX1BBTklDCi0gCi0g c3RydWN0IHVuc2FmZV9iaXRjb3B5X3Q7Ci0gCi0tbmFtZXNwYWNlIHsKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1jbGFzcyBpbXBsOwotK25hbWVzcGFjZQotK3sKLSt0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gY2xhc3MgaW1wbDsKLSB9IC8vIG5hbWVzcGFjZQotIAotLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLTo6c3RkOjpzaXplX3Qgc2l6ZV9vZigpOwotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LTo6c3RkOjpzaXplX3QgYWxpZ25fb2YoKTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD46OnN0ZDo6 c2l6ZV90IHNpemVfb2YgKCk7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVfdCBh bGlnbl9vZiAoKTsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9TVFJJTkcKLSAjZGVmaW5l IENYWEJSSURHRTFfUlVTVF9TVFJJTkcKLS1jbGFzcyBTdHJpbmcgZmluYWwgewotK2NsYXNzIFN0 cmluZyBmaW5hbAotK3sKLSBwdWJsaWM6Ci0tICBTdHJpbmcoKSBub2V4Y2VwdDsKLS0gIFN0cmlu Zyhjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0tICBTdHJpbmcoU3RyaW5nICYmKSBub2V4Y2Vw dDsKLS0gIH5TdHJpbmcoKSBub2V4Y2VwdDsKLS0KLS0gIFN0cmluZyhjb25zdCBzdGQ6OnN0cmlu ZyAmKTsKLS0gIFN0cmluZyhjb25zdCBjaGFyICopOwotLSAgU3RyaW5nKGNvbnN0IGNoYXIgKiwg c3RkOjpzaXplX3QpOwotLSAgU3RyaW5nKGNvbnN0IGNoYXIxNl90ICopOwotLSAgU3RyaW5nKGNv bnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KTsKLSsgIFN0cmluZyAoKSBub2V4Y2VwdDsKLSsg IFN0cmluZyAoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0OwotKyAgU3RyaW5nIChTdHJpbmcgJiYp IG5vZXhjZXB0OwotKyAgflN0cmluZyAoKSBub2V4Y2VwdDsKLSsKLSsgIFN0cmluZyAoY29uc3Qg c3RkOjpzdHJpbmcgJik7Ci0rICBTdHJpbmcgKGNvbnN0IGNoYXIgKik7Ci0rICBTdHJpbmcgKGNv bnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpOwotKyAgU3RyaW5nIChjb25zdCBjaGFyMTZfdCAqKTsK LSsgIFN0cmluZyAoY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpOwotICNpZmRlZiBfX2Nw cF9jaGFyOF90Ci0tICBTdHJpbmcoY29uc3QgY2hhcjhfdCAqcyk7Ci0tICBTdHJpbmcoY29uc3Qg Y2hhcjhfdCAqcywgc3RkOjpzaXplX3QgbGVuKTsKLSsgIFN0cmluZyAoY29uc3QgY2hhcjhfdCAq cyk7Ci0rICBTdHJpbmcgKGNvbnN0IGNoYXI4X3QgKnMsIHN0ZDo6c2l6ZV90IGxlbik7Ci0gI2Vu ZGlmCi0gCi0tICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0IHN0ZDo6c3RyaW5nICYpIG5vZXhj ZXB0OwotLSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBjaGFyICopIG5vZXhjZXB0OwotLSAg c3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsK LS0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3QgY2hhcjE2X3QgKikgbm9leGNlcHQ7Ci0tICBz dGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2Vw dDsKLSsgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IHN0ZDo6c3RyaW5nICYpIG5vZXhjZXB0 OwotKyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3QgY2hhciAqKSBub2V4Y2VwdDsKLSsgIHN0 YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0Owot KyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3QgY2hhcjE2X3QgKikgbm9leGNlcHQ7Ci0rICBz dGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNl cHQ7Ci0gCi0tICBTdHJpbmcgJm9wZXJhdG9yPShjb25zdCBTdHJpbmcgJikgJiBub2V4Y2VwdDsK LS0gIFN0cmluZyAmb3BlcmF0b3I9KFN0cmluZyAmJikgJiBub2V4Y2VwdDsKLSsgIFN0cmluZyAm b3BlcmF0b3I9IChjb25zdCBTdHJpbmcgJikgJiBub2V4Y2VwdDsKLSsgIFN0cmluZyAmb3BlcmF0 b3I9IChTdHJpbmcgJiYpICYgbm9leGNlcHQ7Ci0gCi0tICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6 OnN0cmluZygpIGNvbnN0OwotKyAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcgKCkgY29u c3Q7Ci0gCi0tICBjb25zdCBjaGFyICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNp emVfdCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IGNo YXIgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIGNvbnN0IGNoYXIgKmNfc3RyKCkg bm9leGNlcHQ7Ci0rICBjb25zdCBjaGFyICpjX3N0ciAoKSBub2V4Y2VwdDsKLSAKLS0gIHN0ZDo6 c2l6ZV90IGNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIHJlc2VydmUoc2l6ZV90 IG5ld19jYXApIG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICB2b2lkIHJlc2VydmUgKHNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKLSAKLSAg IHVzaW5nIGl0ZXJhdG9yID0gY2hhciAqOwotLSAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdDsK LS0gIGl0ZXJhdG9yIGVuZCgpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgYmVnaW4gKCkgbm9leGNl cHQ7Ci0rICBpdGVyYXRvciBlbmQgKCkgbm9leGNlcHQ7Ci0gCi0gICB1c2luZyBjb25zdF9pdGVy YXRvciA9IGNvbnN0IGNoYXIgKjsKLS0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0 X2l0ZXJhdG9yIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgY2Vu ZCgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25z dF9pdGVyYXRvciBjYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBj ZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmlu ZyAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcgJikg Y29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yPChjb25zdCBTdHJpbmcgJikgY29uc3Qg bm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yPD0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgb3BlcmF0b3I9PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBv cGVyYXRvciE9IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPCAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjw9 IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPiAoY29u c3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBT dHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICB2b2lkIHN3YXAoU3RyaW5nICYpIG5vZXhj ZXB0OwotKyAgdm9pZCBzd2FwIChTdHJpbmcgJikgbm9leGNlcHQ7Ci0gCi0tICBTdHJpbmcodW5z YWZlX2JpdGNvcHlfdCwgY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0OwotKyAgU3RyaW5nICh1bnNh ZmVfYml0Y29weV90LCBjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0gCi0gcHJpdmF0ZToKLSAg IHN0cnVjdCBsb3NzeV90OwotLSAgU3RyaW5nKGxvc3N5X3QsIGNvbnN0IGNoYXIgKiwgc3RkOjpz aXplX3QpIG5vZXhjZXB0OwotLSAgU3RyaW5nKGxvc3N5X3QsIGNvbnN0IGNoYXIxNl90ICosIHN0 ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLS0gIGZyaWVuZCB2b2lkIHN3YXAoU3RyaW5nICZsaHMsIFN0 cmluZyAmcmhzKSBub2V4Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KLSsgIFN0cmluZyAobG9zc3lf dCwgY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBTdHJpbmcgKGxvc3N5 X3QsIGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIGZyaWVuZCB2 b2lkCi0rICBzd2FwIChTdHJpbmcgJmxocywgU3RyaW5nICZyaHMpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIGxocy5zd2FwIChyaHMpOwotKyAgfQotIAotICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJf dCwgMz4gcmVwcjsKLSB9OwotQEAgLTEzMSw0OCArMTM0LDQ5IEBAIGNsYXNzIFN0cmluZyBmaW5h bCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfU1RSCi0gI2RlZmluZSBDWFhCUklER0Ux X1JVU1RfU1RSCi0tY2xhc3MgU3RyIGZpbmFsIHsKLStjbGFzcyBTdHIgZmluYWwKLSt7Ci0gcHVi bGljOgotLSAgU3RyKCkgbm9leGNlcHQ7Ci0tICBTdHIoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0 OwotLSAgU3RyKGNvbnN0IHN0ZDo6c3RyaW5nICYpOwotLSAgU3RyKGNvbnN0IGNoYXIgKik7Ci0t ICBTdHIoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7Ci0rICBTdHIgKCkgbm9leGNlcHQ7Ci0r ICBTdHIgKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIFN0ciAoY29uc3Qgc3RkOjpzdHJp bmcgJik7Ci0rICBTdHIgKGNvbnN0IGNoYXIgKik7Ci0rICBTdHIgKGNvbnN0IGNoYXIgKiwgc3Rk OjpzaXplX3QpOwotIAotLSAgU3RyICZvcGVyYXRvcj0oY29uc3QgU3RyICYpICYgbm9leGNlcHQg PSBkZWZhdWx0OwotKyAgU3RyICZvcGVyYXRvcj0gKGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0g ZGVmYXVsdDsKLSAKLS0gIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7Ci0r ICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZyAoKSBjb25zdDsKLSAjaWYgX19jcGx1c3Bs dXMgPj0gMjAxNzAzTAotLSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmdfdmlldygpIGNv bnN0OwotKyAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmdfdmlldyAoKSBjb25zdDsKLSAj ZW5kaWYKLSAKLS0gIGNvbnN0IGNoYXIgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6 c2l6ZV90IHNpemUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IGxlbmd0aCgpIGNv bnN0IG5vZXhjZXB0OwotLSAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3Qg Y2hhciAqZGF0YSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IHNpemUgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBsZW5ndGggKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBib29sIGVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgU3RyKGNvbnN0IFN0ciAmKSBu b2V4Y2VwdCA9IGRlZmF1bHQ7Ci0tICB+U3RyKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAgU3Ry IChjb25zdCBTdHIgJikgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAgflN0ciAoKSBub2V4Y2VwdCA9 IGRlZmF1bHQ7Ci0gCi0gICB1c2luZyBpdGVyYXRvciA9IGNvbnN0IGNoYXIgKjsKLSAgIHVzaW5n IGNvbnN0X2l0ZXJhdG9yID0gY29uc3QgY2hhciAqOwotLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4o KSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0 OwotLSAgY29uc3RfaXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9p dGVyYXRvciBjZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBiZWdpbiAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0 X2l0ZXJhdG9yIGNlbmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0o Y29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0 ciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0ciAmKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3I8PShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIG9wZXJhdG9yPihjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBi b29sIG9wZXJhdG9yPj0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVy YXRvcj09IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0g KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBT dHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IFN0ciAmKSBj b25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBTdHIgJikgY29uc3Qgbm9l eGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPj0gKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsK LSAKLS0gIHZvaWQgc3dhcChTdHIgJikgbm9leGNlcHQ7Ci0rICB2b2lkIHN3YXAgKFN0ciAmKSBu b2V4Y2VwdDsKLSAKLSBwcml2YXRlOgotICAgY2xhc3MgdW5pbml0OwotLSAgU3RyKHVuaW5pdCkg bm9leGNlcHQ7Ci0rICBTdHIgKHVuaW5pdCkgbm9leGNlcHQ7Ci0gICBmcmllbmQgaW1wbDxTdHI+ OwotIAotICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJfdCwgMj4gcmVwcjsKLUBAIC0xODEsNzIg KzE4NSw3MiBAQCBjbGFzcyBTdHIgZmluYWwgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNU X1NMSUNFCi0gI2RlZmluZSBDWFhCUklER0UxX1JVU1RfU0xJQ0UKLS1uYW1lc3BhY2UgZGV0YWls IHsKLS10ZW1wbGF0ZSA8Ym9vbD4KLS1zdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmIHt9OwotLQot LXRlbXBsYXRlIDw+Ci0tc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZjxmYWxzZT4gewotLSAgY29w eV9hc3NpZ25hYmxlX2lmKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotLSAgY29weV9hc3NpZ25hYmxl X2lmKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0tICBj b3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPShjb25zdCBjb3B5X2Fzc2lnbmFibGVfaWYgJikg JiBub2V4Y2VwdCA9IGRlbGV0ZTsKLS0gIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9KGNv cHlfYXNzaWduYWJsZV9pZiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rbmFtZXNwYWNlIGRl dGFpbAotK3sKLSt0ZW1wbGF0ZSA8Ym9vbD4gc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZgotK3sK LSt9OwotKwotK3RlbXBsYXRlIDw+IHN0cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWY8ZmFsc2U+Ci0r ewotKyAgY29weV9hc3NpZ25hYmxlX2lmICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIGNvcHlf YXNzaWduYWJsZV9pZiAoY29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpIG5vZXhjZXB0ID0gZGVm YXVsdDsKLSsgIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9IChjb25zdCBjb3B5X2Fzc2ln bmFibGVfaWYgJikgJiBub2V4Y2VwdCA9IGRlbGV0ZTsKLSsgIGNvcHlfYXNzaWduYWJsZV9pZiAm b3BlcmF0b3I9IChjb3B5X2Fzc2lnbmFibGVfaWYgJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0Owot IH07Ci0gfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t Y2xhc3MgU2xpY2UgZmluYWwKLS0gICAgOiBwcml2YXRlIGRldGFpbDo6Y29weV9hc3NpZ25hYmxl X2lmPHN0ZDo6aXNfY29uc3Q8VD46OnZhbHVlPiB7Ci0rY2xhc3MgU2xpY2UgZmluYWwgOiBwcml2 YXRlIGRldGFpbDo6Y29weV9hc3NpZ25hYmxlX2lmPHN0ZDo6aXNfY29uc3Q8VD46OnZhbHVlPgot K3sKLSBwdWJsaWM6Ci0gICB1c2luZyB2YWx1ZV90eXBlID0gVDsKLSAKLS0gIFNsaWNlKCkgbm9l eGNlcHQ7Ci0tICBTbGljZShUICosIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKLSsgIFNs aWNlICgpIG5vZXhjZXB0OwotKyAgU2xpY2UgKFQgKiwgc3RkOjpzaXplX3QgY291bnQpIG5vZXhj ZXB0OwotIAotLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+Ci0tICBleHBsaWNpdCBTbGljZShDICZj KSA6IFNsaWNlKGMuZGF0YSgpLCBjLnNpemUoKSkge30KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBD PiBleHBsaWNpdCBTbGljZSAoQyAmYykgOiBTbGljZSAoYy5kYXRhICgpLCBjLnNpemUgKCkpIHt9 Ci0gCi0tICBTbGljZSAmb3BlcmF0b3I9KGNvbnN0IFNsaWNlPFQ+ICYpICYgbm9leGNlcHQgPSBk ZWZhdWx0OwotLSAgU2xpY2UgJm9wZXJhdG9yPShTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRl ZmF1bHQ7Ci0rICBTbGljZSAmb3BlcmF0b3I9IChjb25zdCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0 ID0gZGVmYXVsdDsKLSsgIFNsaWNlICZvcGVyYXRvcj0gKFNsaWNlPFQ+ICYmKSAmIG5vZXhjZXB0 ID0gZGVmYXVsdDsKLSAKLS0gIFQgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6 ZV90IHNpemUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IGxlbmd0aCgpIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAqZGF0YSAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7 Ci0rICBzdGQ6OnNpemVfdCBsZW5ndGggKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGVtcHR5 ICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgVCAmb3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBj b25zdCBub2V4Y2VwdDsKLS0gIFQgJmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0OwotLSAgVCAmZnJv bnQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIFQgJmJhY2soKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQg Jm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAmYXQgKHN0 ZDo6c2l6ZV90IG4pIGNvbnN0OwotKyAgVCAmZnJvbnQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBU ICZiYWNrICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgU2xpY2UoY29uc3QgU2xpY2U8VD4gJikg bm9leGNlcHQgPSBkZWZhdWx0OwotLSAgflNsaWNlKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAg U2xpY2UgKGNvbnN0IFNsaWNlPFQ+ICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIH5TbGljZSAo KSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0gCi0gICBjbGFzcyBpdGVyYXRvcjsKLS0gIGl0ZXJhdG9y IGJlZ2luKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBpdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGl0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgZW5k ICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgdm9pZCBzd2FwKFNsaWNlICYpIG5vZXhjZXB0Owot KyAgdm9pZCBzd2FwIChTbGljZSAmKSBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgotICAgY2xhc3Mg dW5pbml0OwotLSAgU2xpY2UodW5pbml0KSBub2V4Y2VwdDsKLSsgIFNsaWNlICh1bmluaXQpIG5v ZXhjZXB0OwotICAgZnJpZW5kIGltcGw8U2xpY2U+OwotLSAgZnJpZW5kIHZvaWQgc2xpY2VJbml0 KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0tICBmcmllbmQg dm9pZCAqc2xpY2VQdHIoY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLS0gIGZyaWVuZCBzdGQ6OnNp emVfdCBzbGljZUxlbihjb25zdCB2b2lkICopIG5vZXhjZXB0OwotKyAgZnJpZW5kIHZvaWQgc2xp Y2VJbml0ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotKyAg ZnJpZW5kIHZvaWQgKnNsaWNlUHRyIChjb25zdCB2b2lkICopIG5vZXhjZXB0OwotKyAgZnJpZW5k IHN0ZDo6c2l6ZV90IHNsaWNlTGVuIChjb25zdCB2b2lkICopIG5vZXhjZXB0OwotIAotICAgc3Rk OjphcnJheTxzdGQ6OnVpbnRwdHJfdCwgMj4gcmVwcjsKLSB9OwotIAotICNpZmRlZiBfX2NwcF9k ZWR1Y3Rpb25fZ3VpZGVzCi0gdGVtcGxhdGUgPHR5cGVuYW1lIEM+Ci0tZXhwbGljaXQgU2xpY2Uo QyAmYykKLS0gICAgLT4gU2xpY2U8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoKnN0 ZDo6ZGVjbHZhbDxDPigpLmRhdGEoKSk+PjsKLStleHBsaWNpdCBTbGljZSAoQyAmYykgLT4gU2xp Y2U8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUgKCpzdGQ6OmRlY2x2YWw8Qz4gKCku ZGF0YSAoKSk+PjsKLSAjZW5kaWYgLy8gX19jcHBfZGVkdWN0aW9uX2d1aWRlcwotIAotLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbCB7Ci0rdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbAotK3sKLSBw dWJsaWM6Ci0gI2lmIF9fY3BsdXNwbHVzID49IDIwMjAwMkwKLSAgIHVzaW5nIGl0ZXJhdG9yX2Nh dGVnb3J5ID0gc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yX3RhZzsKLUBAIC0yNTgsMzAgKzI2Miwz MiBAQCBjbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwgewotICAgdXNpbmcgcG9pbnRlciA9 IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8VD46OnR5cGU7Ci0gICB1c2luZyByZWZlcmVuY2Ug PSB0eXBlbmFtZSBzdGQ6OmFkZF9sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp0eXBlOwotIAotLSAgcmVm ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0OwotKyAgcmVmZXJlbmNlIG9wZXJhdG9y KiAoKSBjb25zdCBub2V4Y2VwdDsKLSAgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IG5vZXhj ZXB0OwotLSAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4 Y2VwdDsKLS0KLS0gIGl0ZXJhdG9yICZvcGVyYXRvcisrKCkgbm9leGNlcHQ7Ci0tICBpdGVyYXRv ciBvcGVyYXRvcisrKGludCkgbm9leGNlcHQ7Ci0tICBpdGVyYXRvciAmb3BlcmF0b3ItLSgpIG5v ZXhjZXB0OwotLSAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0OwotLQotLSAgaXRl cmF0b3IgJm9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKLS0gIGl0ZXJhdG9y ICZvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0tICBpdGVyYXRvciBvcGVy YXRvcisoZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKLS0gIGZyaWVuZCBpbmxpbmUg aXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBsaHMsIGl0ZXJhdG9yIHJocykgbm9l eGNlcHQgewotKyAgcmVmZXJlbmNlIG9wZXJhdG9yW10gKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qg bm9leGNlcHQ7Ci0rCi0rICBpdGVyYXRvciAmb3BlcmF0b3IrKyAoKSBub2V4Y2VwdDsKLSsgIGl0 ZXJhdG9yIG9wZXJhdG9yKysgKGludCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciAmb3BlcmF0b3It LSAoKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIG9wZXJhdG9yLS0gKGludCkgbm9leGNlcHQ7Ci0r Ci0rICBpdGVyYXRvciAmb3BlcmF0b3IrPSAoZGlmZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKLSsg IGl0ZXJhdG9yICZvcGVyYXRvci09IChkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OwotKyAgaXRl cmF0b3Igb3BlcmF0b3IrIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OwotKyAgZnJp ZW5kIGlubGluZSBpdGVyYXRvcgotKyAgb3BlcmF0b3IrIChkaWZmZXJlbmNlX3R5cGUgbGhzLCBp dGVyYXRvciByaHMpIG5vZXhjZXB0Ci0rICB7Ci0gICAgIHJldHVybiByaHMgKyBsaHM7Ci0gICB9 Ci0tICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsK LS0gIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9l eGNlcHQ7Ci0rICBpdGVyYXRvciBvcGVyYXRvci0gKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9l eGNlcHQ7Ci0rICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItIChjb25zdCBpdGVyYXRvciAmKSBj b25zdCBub2V4Y2VwdDsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciAmKSBj b25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciAmKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5v ZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7 Ci0tICBib29sIG9wZXJhdG9yPj0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0r ICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBvcGVyYXRvciE9IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgb3BlcmF0b3I8IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wg b3BlcmF0b3I8PSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9w ZXJhdG9yPiAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPj0gKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotIAotIHByaXZhdGU6Ci0g ICBmcmllbmQgY2xhc3MgU2xpY2U7Ci1AQCAtMjkwLDY4MyArMjk2LDgxMCBAQCBjbGFzcyBTbGlj ZTxUPjo6aXRlcmF0b3IgZmluYWwgewotIH07Ci0gCi0gI2lmIF9fY3BsdXNwbHVzID49IDIwMjAw MkwKLS1zdGF0aWNfYXNzZXJ0KHN0ZDo6cmFuZ2VzOjpjb250aWd1b3VzX3JhbmdlPHJ1c3Q6OlNs aWNlPGNvbnN0IHVpbnQ4X3Q+Pik7Ci0tc3RhdGljX2Fzc2VydChzdGQ6OmNvbnRpZ3VvdXNfaXRl cmF0b3I8cnVzdDo6U2xpY2U8Y29uc3QgdWludDhfdD46Oml0ZXJhdG9yPik7Ci0rc3RhdGljX2Fz c2VydCAoc3RkOjpyYW5nZXM6OmNvbnRpZ3VvdXNfcmFuZ2U8cnVzdDo6U2xpY2U8Y29uc3QgdWlu dDhfdD4+KTsKLStzdGF0aWNfYXNzZXJ0IChzdGQ6OmNvbnRpZ3VvdXNfaXRlcmF0b3I8cnVzdDo6 U2xpY2U8Y29uc3QgdWludDhfdD46Oml0ZXJhdG9yPik7Ci0gI2VuZGlmCi0gCi0tdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0tU2xpY2U8VD46OlNsaWNlKCkgbm9leGNlcHQgewotLSAgc2xpY2VJbml0 KHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPihhbGlnbl9vZjxUPigpKSwgMCk7Ci0rdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IFNsaWNlPFQ+OjpTbGljZSAoKSBub2V4Y2VwdAotK3sKLSsgIHNs aWNlSW5pdCAodGhpcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+IChhbGlnbl9vZjxUPiAoKSks IDApOwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1TbGljZTxUPjo6U2xpY2UoVCAq cywgc3RkOjpzaXplX3QgY291bnQpIG5vZXhjZXB0IHsKLS0gIGFzc2VydChzICE9IG51bGxwdHIg fHwgY291bnQgPT0gMCk7Ci0tICBzbGljZUluaXQodGhpcywKLS0gICAgICAgICAgICBzID09IG51 bGxwdHIgJiYgY291bnQgPT0gMAotLSAgICAgICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8 dm9pZCAqPihhbGlnbl9vZjxUPigpKQotLSAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlw ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgKj4ocyksCi0tICAgICAgICAgICAgY291 bnQpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBTbGljZTxUPjo6U2xpY2UgKFQgKnMsIHN0ZDo6 c2l6ZV90IGNvdW50KSBub2V4Y2VwdAotK3sKLSsgIGFzc2VydCAocyAhPSBudWxscHRyIHx8IGNv dW50ID09IDApOwotKyAgc2xpY2VJbml0ICh0aGlzLAotKyAgICAgICAgICAgICBzID09IG51bGxw dHIgJiYgY291bnQgPT0gMCA/IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4g KCkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RfY2Fz dDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSAqPiAocyksCi0rICAgICAgICAg ICAgIGNvdW50KTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAqU2xpY2U8VD46 OmRhdGEoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+ KHNsaWNlUHRyKHRoaXMpKTsKLStUICoKLStTbGljZTxUPjo6ZGF0YSAoKSBjb25zdCBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiByZWludGVycHJldF9jYXN0PFQgKj4gKHNsaWNlUHRyICh0aGlzKSk7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXN0ZDo6c2l6ZV90IFNsaWNlPFQ+Ojpz aXplKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHNsaWNlTGVuKHRoaXMpOwotK3N0ZDo6 c2l6ZV90Ci0rU2xpY2U8VD46OnNpemUgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g c2xpY2VMZW4gKHRoaXMpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1zdGQ6OnNp emVfdCBTbGljZTxUPjo6bGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMt PnNpemUoKTsKLStzdGQ6OnNpemVfdAotK1NsaWNlPFQ+OjpsZW5ndGggKCkgY29uc3Qgbm9leGNl cHQKLSt7Ci0rICByZXR1cm4gdGhpcy0+c2l6ZSAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6ZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gdGhpcy0+c2l6ZSgpID09IDA7Ci0rYm9vbAotK1NsaWNlPFQ+OjplbXB0eSAoKSBjb25zdCBu b2V4Y2VwdAotK3sKLSsgIHJldHVybiB0aGlzLT5zaXplICgpID09IDA7Ci0gfQotIAotIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgotLVQgJlNsaWNlPFQ+OjpvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4p IGNvbnN0IG5vZXhjZXB0IHsKLS0gIGFzc2VydChuIDwgdGhpcy0+c2l6ZSgpKTsKLS0gIGF1dG8g cHRyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihzbGljZVB0cih0aGlzKSkgKyBzaXplX29mPFQ+KCkg KiBuOwotLSAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4ocHRyKTsKLStUICYKLStTbGlj ZTxUPjo6b3BlcmF0b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBh c3NlcnQgKG4gPCB0aGlzLT5zaXplICgpKTsKLSsgIGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hh ciAqPiAoc2xpY2VQdHIgKHRoaXMpKSArIHNpemVfb2Y8VD4gKCkgKiBuOwotKyAgcmV0dXJuICpy ZWludGVycHJldF9jYXN0PFQgKj4gKHB0cik7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLVQgJlNsaWNlPFQ+OjphdChzdGQ6OnNpemVfdCBuKSBjb25zdCB7Ci0tICBpZiAobiA+PSB0 aGlzLT5zaXplKCkpIHsKLS0gICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJydXN0OjpTbGlj ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLS0gIH0KLStUICYKLStTbGljZTxUPjo6YXQgKHN0ZDo6 c2l6ZV90IG4pIGNvbnN0Ci0rewotKyAgaWYgKG4gPj0gdGhpcy0+c2l6ZSAoKSkKLSsgICAgewot KyAgICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1c3Q6OlNsaWNlIGluZGV4IG91dCBv ZiByYW5nZSIpOwotKyAgICB9Ci0gICByZXR1cm4gKCp0aGlzKVtuXTsKLSB9Ci0gCi0gdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0tVCAmU2xpY2U8VD46OmZyb250KCkgY29uc3Qgbm9leGNlcHQgewot LSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLStUICYKLStTbGljZTxUPjo6ZnJvbnQgKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0gICByZXR1cm4g KCp0aGlzKVswXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmU2xpY2U8VD46 OmJhY2soKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOwotLSAg cmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSgpIC0gMV07Ci0rVCAmCi0rU2xpY2U8VD46OmJhY2sg KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0rICBy ZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplICgpIC0gMV07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cmVmZXJlbmNlCi0tU2xpY2U8 VD46Oml0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gKnN0 YXRpY19jYXN0PFQgKj4odGhpcy0+cG9zKTsKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9y KiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPiAodGhp cy0+cG9zKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yOjpwb2ludGVyCi0tU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0+KCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4odGhpcy0+cG9zKTsK LStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IHJldHVybiBzdGF0aWNfY2FzdDxUICo+ICh0aGlzLT5wb3MpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5jZSBTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yW10oCi0tICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGF1dG8gcHRyID0g c3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKLS0gIHJl dHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+KHB0cik7Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0 ZXJhdG9yOjpyZWZlcmVuY2UKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yW10gKHR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0 Ci0rewotKyAgYXV0byBwdHIgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhp cy0+c3RyaWRlICogbjsKLSsgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+IChwdHIpOwot IH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKLS0gIHRoaXMt PnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsKLSt0 eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3IrKyAoKSBub2V4Y2VwdAotK3sKLSsgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4g KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAotIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yKysoaW50KSBub2V4Y2VwdCB7Ci0tICBhdXRvIHJldCA9IGl0 ZXJhdG9yKCp0aGlzKTsKLS0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+ cG9zKSArIHRoaXMtPnN0cmlkZTsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysgKGludCkgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHJl dCA9IGl0ZXJhdG9yICgqdGhpcyk7Ci0rICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlOwotICAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0oKSBub2V4Y2VwdCB7Ci0tICB0aGlzLT5wb3MgPSBzdGF0 aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7Ci0rdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0gKCkgbm9l eGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3Mp IC0gdGhpcy0+c3RyaWRlOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9y OjpvcGVyYXRvci0tKGludCkgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhp cyk7Ci0tICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlz LT5zdHJpZGU7Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvci0tIChpbnQpIG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVyYXRv ciAoKnRoaXMpOwotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9z KSAtIHRoaXMtPnN0cmlkZTsKLSAgIHJldHVybiByZXQ7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJhdG9y OjpvcGVyYXRvcis9KAotLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVu Y2VfdHlwZSBuKSBub2V4Y2VwdCB7Ci0tICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvciAmCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcis9ICh0eXBlbmFtZSBTbGljZTxU Pjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBub2V4Y2VwdAotK3sKLSsgIHRoaXMtPnBv cyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOwot ICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFt ZSBTbGljZTxUPjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPSgKLS0g ICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNl cHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhp cy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgotK1NsaWNlPFQ+ OjppdGVyYXRvcjo6b3BlcmF0b3ItPSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZm ZXJlbmNlX3R5cGUgbikgbm9leGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxj aGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlICogbjsKLSAgIHJldHVybiAqdGhpczsK LSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrKAotLSAgICB0eXBlbmFtZSBTbGljZTxU Pjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhdXRv IHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsKLS0gIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrICh0eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIGF1dG8g cmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsKLSsgIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSAgIHJldHVybiByZXQ7Ci0gfQotIAot IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLSgKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBp dGVyYXRvcigqdGhpcyk7Ci0tICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5w b3MpIC0gdGhpcy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y OjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHJldCA9IGl0 ZXJhdG9yICgqdGhpcyk7Ci0rICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+ cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLSB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2Vf dHlwZQotLVNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItKGNvbnN0IGl0ZXJhdG9yICZvdGhl cikgY29uc3Qgbm9leGNlcHQgewotLSAgYXV0byBkaWZmID0gc3RkOjpkaXN0YW5jZShzdGF0aWNf Y2FzdDxjaGFyICo+KG90aGVyLnBvcyksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSk7Ci0tICByZXR1cm4gZGlmZiAvIHN0YXRpY19j YXN0PHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlPigKLS0gICAg ICAgICAgICAgICAgICAgIHRoaXMtPnN0cmlkZSk7Ci0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVy YXRvci0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhdXRv IGRpZmYgPSBzdGQ6OmRpc3RhbmNlIChzdGF0aWNfY2FzdDxjaGFyICo+IChvdGhlci5wb3MpLCBz dGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpKTsKLSsgIHJldHVybiBkaWZmIC8gc3RhdGlj X2Nhc3Q8dHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGU+ICh0aGlz LT5zdHJpZGUpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+ OjppdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhj ZXB0IHsKLStib29sCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj09IChjb25zdCBpdGVy YXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA9PSBv dGhlci5wb3M7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNl cHQgewotK2Jvb2wKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0gKGNvbnN0IGl0ZXJh dG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zICE9IG90 aGVyLnBvczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6 aXRlcmF0b3I6Om9wZXJhdG9yPChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0 IHsKLStib29sCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjwgKGNvbnN0IGl0ZXJhdG9y ICZvdGhlcikgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zIDwgb3RoZXIu cG9zOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3I8PShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsK LStib29sCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjw9IChjb25zdCBpdGVyYXRvciAm b3RoZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA8PSBvdGhlci5w b3M7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvcj4oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0r Ym9vbAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+IChjb25zdCBpdGVyYXRvciAmb3Ro ZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA+IG90aGVyLnBvczsK LSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6 Om9wZXJhdG9yPj0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9v bAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+PSAoY29uc3QgaXRlcmF0b3IgJm90aGVy KSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPj0gb3RoZXIucG9zOwot IH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3IgU2xpY2U8VD46OmJlZ2luKCkgY29uc3Qgbm9leGNlcHQgewotK3R5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvcgotK1NsaWNlPFQ+OjpiZWdpbiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIGl0 ZXJhdG9yIGl0OwotLSAgaXQucG9zID0gc2xpY2VQdHIodGhpcyk7Ci0tICBpdC5zdHJpZGUgPSBz aXplX29mPFQ+KCk7Ci0rICBpdC5wb3MgPSBzbGljZVB0ciAodGhpcyk7Ci0rICBpdC5zdHJpZGUg PSBzaXplX29mPFQ+ICgpOwotICAgcmV0dXJuIGl0OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46OmVuZCgpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIGl0ZXJhdG9yIGl0ID0gdGhpcy0+YmVnaW4oKTsKLS0gIGl0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4oaXQucG9zKSArIGl0LnN0cmlkZSAqIHRoaXMtPnNpemUoKTsK LSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStTbGljZTxUPjo6ZW5kICgpIGNvbnN0IG5v ZXhjZXB0Ci0rewotKyAgaXRlcmF0b3IgaXQgPSB0aGlzLT5iZWdpbiAoKTsKLSsgIGl0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4gKGl0LnBvcykgKyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplICgp OwotICAgcmV0dXJuIGl0OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFNs aWNlPFQ+Ojpzd2FwKFNsaWNlICZyaHMpIG5vZXhjZXB0IHsKLS0gIHN0ZDo6c3dhcCgqdGhpcywg cmhzKTsKLSt2b2lkCi0rU2xpY2U8VD46OnN3YXAgKFNsaWNlICZyaHMpIG5vZXhjZXB0Ci0rewot KyAgc3RkOjpzd2FwICgqdGhpcywgcmhzKTsKLSB9Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfUlVT VF9TTElDRQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX0JPWAotICNkZWZpbmUgQ1hYQlJJ REdFMV9SVVNUX0JPWAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIEJveCBmaW5hbCB7 Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEJveCBmaW5hbAotK3sKLSBwdWJsaWM6Ci0g ICB1c2luZyBlbGVtZW50X3R5cGUgPSBUOwotLSAgdXNpbmcgY29uc3RfcG9pbnRlciA9Ci0tICAg ICAgdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcjx0eXBlbmFtZSBzdGQ6OmFkZF9jb25zdDxUPjo6 dHlwZT46OnR5cGU7Ci0rICB1c2luZyBjb25zdF9wb2ludGVyID0gdHlwZW5hbWUgc3RkOjphZGRf cG9pbnRlcjx0eXBlbmFtZSBzdGQ6OmFkZF9jb25zdDxUPjo6dHlwZT46OnR5cGU7Ci0gICB1c2lu ZyBwb2ludGVyID0gdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcjxUPjo6dHlwZTsKLSAKLS0gIEJv eCgpID0gZGVsZXRlOwotLSAgQm94KEJveCAmJikgbm9leGNlcHQ7Ci0tICB+Qm94KCkgbm9leGNl cHQ7Ci0rICBCb3ggKCkgPSBkZWxldGU7Ci0rICBCb3ggKEJveCAmJikgbm9leGNlcHQ7Ci0rICB+ Qm94ICgpIG5vZXhjZXB0OwotIAotLSAgZXhwbGljaXQgQm94KGNvbnN0IFQgJik7Ci0tICBleHBs aWNpdCBCb3goVCAmJik7Ci0rICBleHBsaWNpdCBCb3ggKGNvbnN0IFQgJik7Ci0rICBleHBsaWNp dCBCb3ggKFQgJiYpOwotIAotLSAgQm94ICZvcGVyYXRvcj0oQm94ICYmKSAmIG5vZXhjZXB0Owot KyAgQm94ICZvcGVyYXRvcj0gKEJveCAmJikgJiBub2V4Y2VwdDsKLSAKLSAgIGNvbnN0IFQgKm9w ZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0IFQgJm9wZXJhdG9yKigpIGNvbnN0 IG5vZXhjZXB0OwotKyAgY29uc3QgVCAmb3BlcmF0b3IqICgpIGNvbnN0IG5vZXhjZXB0OwotICAg VCAqb3BlcmF0b3ItPigpIG5vZXhjZXB0OwotLSAgVCAmb3BlcmF0b3IqKCkgbm9leGNlcHQ7Ci0r ICBUICZvcGVyYXRvciogKCkgbm9leGNlcHQ7Ci0gCi0tICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g RmllbGRzPgotLSAgc3RhdGljIEJveCBpbl9wbGFjZShGaWVsZHMgJiYuLi4pOwotKyAgdGVtcGxh dGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4gc3RhdGljIEJveCBpbl9wbGFjZSAoRmllbGRzICYmLi4u KTsKLSAKLS0gIHZvaWQgc3dhcChCb3ggJikgbm9leGNlcHQ7Ci0rICB2b2lkIHN3YXAgKEJveCAm KSBub2V4Y2VwdDsKLSAKLS0gIHN0YXRpYyBCb3ggZnJvbV9yYXcoVCAqKSBub2V4Y2VwdDsKLSsg IHN0YXRpYyBCb3ggZnJvbV9yYXcgKFQgKikgbm9leGNlcHQ7Ci0gCi0tICBUICppbnRvX3Jhdygp IG5vZXhjZXB0OwotKyAgVCAqaW50b19yYXcgKCkgbm9leGNlcHQ7Ci0gCi0gICAvKiBEZXByZWNh dGVkICovIHVzaW5nIHZhbHVlX3R5cGUgPSBlbGVtZW50X3R5cGU7Ci0gCi0gcHJpdmF0ZToKLSAg IGNsYXNzIHVuaW5pdDsKLSAgIGNsYXNzIGFsbG9jYXRpb247Ci0tICBCb3godW5pbml0KSBub2V4 Y2VwdDsKLS0gIHZvaWQgZHJvcCgpIG5vZXhjZXB0OwotKyAgQm94ICh1bmluaXQpIG5vZXhjZXB0 OwotKyAgdm9pZCBkcm9wICgpIG5vZXhjZXB0OwotIAotLSAgZnJpZW5kIHZvaWQgc3dhcChCb3gg JmxocywgQm94ICZyaHMpIG5vZXhjZXB0IHsgbGhzLnN3YXAocmhzKTsgfQotKyAgZnJpZW5kIHZv aWQKLSsgIHN3YXAgKEJveCAmbGhzLCBCb3ggJnJocykgbm9leGNlcHQKLSsgIHsKLSsgICAgbGhz LnN3YXAgKHJocyk7Ci0rICB9Ci0gCi0gICBUICpwdHI7Ci0gfTsKLSAKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1jbGFzcyBCb3g8VD46OnVuaW5pdCB7fTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gY2xhc3MgQm94PFQ+Ojp1bmluaXQKLSt7Ci0rfTsKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KLS1jbGFzcyBCb3g8VD46OmFsbG9jYXRpb24gewotLSAgc3RhdGljIFQgKmFsbG9jKCkgbm9l eGNlcHQ7Ci0tICBzdGF0aWMgdm9pZCBkZWFsbG9jKFQgKikgbm9leGNlcHQ7Ci0rdGVtcGxhdGUg PHR5cGVuYW1lIFQ+IGNsYXNzIEJveDxUPjo6YWxsb2NhdGlvbgotK3sKLSsgIHN0YXRpYyBUICph bGxvYyAoKSBub2V4Y2VwdDsKLSsgIHN0YXRpYyB2b2lkIGRlYWxsb2MgKFQgKikgbm9leGNlcHQ7 Ci0gCi0gcHVibGljOgotLSAgYWxsb2NhdGlvbigpIG5vZXhjZXB0IDogcHRyKGFsbG9jKCkpIHt9 Ci0tICB+YWxsb2NhdGlvbigpIG5vZXhjZXB0IHsKLS0gICAgaWYgKHRoaXMtPnB0cikgewotLSAg ICAgIGRlYWxsb2ModGhpcy0+cHRyKTsKLS0gICAgfQotKyAgYWxsb2NhdGlvbiAoKSBub2V4Y2Vw dCA6IHB0ciAoYWxsb2MgKCkpIHt9Ci0rICB+YWxsb2NhdGlvbiAoKSBub2V4Y2VwdAotKyAgewot KyAgICBpZiAodGhpcy0+cHRyKQotKyAgICAgIHsKLSsgICAgICAgIGRlYWxsb2MgKHRoaXMtPnB0 cik7Ci0rICAgICAgfQotICAgfQotICAgVCAqcHRyOwotIH07Ci0gCi0tdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tQm94PFQ+OjpCb3goQm94ICYmb3RoZXIpIG5vZXhjZXB0IDogcHRyKG90aGVyLnB0 cikgewotLSAgb3RoZXIucHRyID0gbnVsbHB0cjsKLS19Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IEJveDxUPjo6Qm94IChCb3ggJiZvdGhlcikgbm9leGNlcHQgOiBwdHIgKG90aGVyLnB0cikgeyBv dGhlci5wdHIgPSBudWxscHRyOyB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+ OjpCb3goY29uc3QgVCAmdmFsKSB7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6Qm94 IChjb25zdCBUICZ2YWwpCi0rewotICAgYWxsb2NhdGlvbiBhbGxvYzsKLS0gIDo6bmV3IChhbGxv Yy5wdHIpIFQodmFsKTsKLSsgIDo6bmV3IChhbGxvYy5wdHIpIFQgKHZhbCk7Ci0gICB0aGlzLT5w dHIgPSBhbGxvYy5wdHI7Ci0gICBhbGxvYy5wdHIgPSBudWxscHRyOwotIH0KLSAKLS10ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8VD46OkJveChUICYmdmFsKSB7Ci0rdGVtcGxhdGUgPHR5cGVu YW1lIFQ+IEJveDxUPjo6Qm94IChUICYmdmFsKQotK3sKLSAgIGFsbG9jYXRpb24gYWxsb2M7Ci0t ICA6Om5ldyAoYWxsb2MucHRyKSBUKHN0ZDo6bW92ZSh2YWwpKTsKLSsgIDo6bmV3IChhbGxvYy5w dHIpIFQgKHN0ZDo6bW92ZSAodmFsKSk7Ci0gICB0aGlzLT5wdHIgPSBhbGxvYy5wdHI7Ci0gICBh bGxvYy5wdHIgPSBudWxscHRyOwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8 VD46On5Cb3goKSBub2V4Y2VwdCB7Ci0tICBpZiAodGhpcy0+cHRyKSB7Ci0tICAgIHRoaXMtPmRy b3AoKTsKLS0gIH0KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+Ojp+Qm94ICgpIG5vZXhj ZXB0Ci0rewotKyAgaWYgKHRoaXMtPnB0cikKLSsgICAgewotKyAgICAgIHRoaXMtPmRyb3AgKCk7 Ci0rICAgIH0KLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+ICZCb3g8VD46 Om9wZXJhdG9yPShCb3ggJiZvdGhlcikgJiBub2V4Y2VwdCB7Ci0tICBpZiAodGhpcy0+cHRyKSB7 Ci0tICAgIHRoaXMtPmRyb3AoKTsKLS0gIH0KLStCb3g8VD4gJgotK0JveDxUPjo6b3BlcmF0b3I9 IChCb3ggJiZvdGhlcikgJiBub2V4Y2VwdAotK3sKLSsgIGlmICh0aGlzLT5wdHIpCi0rICAgIHsK LSsgICAgICB0aGlzLT5kcm9wICgpOwotKyAgICB9Ci0gICB0aGlzLT5wdHIgPSBvdGhlci5wdHI7 Ci0gICBvdGhlci5wdHIgPSBudWxscHRyOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KLS1jb25zdCBUICpCb3g8VD46Om9wZXJhdG9yLT4oKSBjb25zdCBu b2V4Y2VwdCB7Ci0rY29uc3QgVCAqCi0rQm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNl cHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cHRyOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KLS1jb25zdCBUICZCb3g8VD46Om9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsKLStjb25z dCBUICYKLStCb3g8VD46Om9wZXJhdG9yKiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVy biAqdGhpcy0+cHRyOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICpCb3g8VD46 Om9wZXJhdG9yLT4oKSBub2V4Y2VwdCB7Ci0rVCAqCi0rQm94PFQ+OjpvcGVyYXRvci0+KCkgbm9l eGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cHRyOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS1UICZCb3g8VD46Om9wZXJhdG9yKigpIG5vZXhjZXB0IHsKLStUICYKLStCb3g8VD46 Om9wZXJhdG9yKiAoKSBub2V4Y2VwdAotK3sKLSAgIHJldHVybiAqdGhpcy0+cHRyOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRmllbGRzPgot LUJveDxUPiBCb3g8VD46OmluX3BsYWNlKEZpZWxkcyAmJi4uLmZpZWxkcykgewotK0JveDxUPgot K0JveDxUPjo6aW5fcGxhY2UgKEZpZWxkcyAmJi4uLmZpZWxkcykKLSt7Ci0gICBhbGxvY2F0aW9u IGFsbG9jOwotICAgYXV0byBwdHIgPSBhbGxvYy5wdHI7Ci0tICA6Om5ldyAocHRyKSBUe3N0ZDo6 Zm9yd2FyZDxGaWVsZHM+KGZpZWxkcykuLi59OwotKyAgOjpuZXcgKHB0cikgVHsgc3RkOjpmb3J3 YXJkPEZpZWxkcz4gKGZpZWxkcykuLi4gfTsKLSAgIGFsbG9jLnB0ciA9IG51bGxwdHI7Ci0tICBy ZXR1cm4gZnJvbV9yYXcocHRyKTsKLSsgIHJldHVybiBmcm9tX3JhdyAocHRyKTsKLSB9Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBCb3g8VD46OnN3YXAoQm94ICZyaHMpIG5vZXhj ZXB0IHsKLSt2b2lkCi0rQm94PFQ+Ojpzd2FwIChCb3ggJnJocykgbm9leGNlcHQKLSt7Ci0gICB1 c2luZyBzdGQ6OnN3YXA7Ci0tICBzd2FwKHRoaXMtPnB0ciwgcmhzLnB0cik7Ci0rICBzd2FwICh0 aGlzLT5wdHIsIHJocy5wdHIpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8 VD4gQm94PFQ+Ojpmcm9tX3JhdyhUICpyYXcpIG5vZXhjZXB0IHsKLStCb3g8VD4KLStCb3g8VD46 OmZyb21fcmF3IChUICpyYXcpIG5vZXhjZXB0Ci0rewotICAgQm94IGJveCA9IHVuaW5pdHt9Owot ICAgYm94LnB0ciA9IHJhdzsKLSAgIHJldHVybiBib3g7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotLVQgKkJveDxUPjo6aW50b19yYXcoKSBub2V4Y2VwdCB7Ci0rVCAqCi0rQm94PFQ+ OjppbnRvX3JhdyAoKSBub2V4Y2VwdAotK3sKLSAgIFQgKnJhdyA9IHRoaXMtPnB0cjsKLSAgIHRo aXMtPnB0ciA9IG51bGxwdHI7Ci0gICByZXR1cm4gcmF3OwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1Cb3g8VD46OkJveCh1bmluaXQpIG5vZXhjZXB0IHt9Ci0rdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IEJveDxUPjo6Qm94ICh1bmluaXQpIG5vZXhjZXB0IHt9Ci0gI2VuZGlmIC8vIENY WEJSSURHRTFfUlVTVF9CT1gKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QK LSAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QKLS1zdHJ1Y3QgdW5zYWZlX2JpdGNv cHlfdCBmaW5hbCB7Ci0tICBleHBsaWNpdCB1bnNhZmVfYml0Y29weV90KCkgPSBkZWZhdWx0Owot K3N0cnVjdCB1bnNhZmVfYml0Y29weV90IGZpbmFsCi0rewotKyAgZXhwbGljaXQgdW5zYWZlX2Jp dGNvcHlfdCAoKSA9IGRlZmF1bHQ7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX0JJ VENPUFlfVAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1ZFQwotICNkZWZpbmUgQ1hYQlJJ REdFMV9SVVNUX1ZFQwotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFZlYyBmaW5hbCB7 Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFZlYyBmaW5hbAotK3sKLSBwdWJsaWM6Ci0g ICB1c2luZyB2YWx1ZV90eXBlID0gVDsKLSAKLS0gIFZlYygpIG5vZXhjZXB0OwotLSAgVmVjKHN0 ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPik7Ci0tICBWZWMoY29uc3QgVmVjICYpOwotLSAgVmVjKFZl YyAmJikgbm9leGNlcHQ7Ci0tICB+VmVjKCkgbm9leGNlcHQ7Ci0tCi0tICBWZWMgJm9wZXJhdG9y PShWZWMgJiYpICYgbm9leGNlcHQ7Ci0tICBWZWMgJm9wZXJhdG9yPShjb25zdCBWZWMgJikgJjsK LS0KLS0gIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZW1wdHko KSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0IFQgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKLS0g IFQgKmRhdGEoKSBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IGNhcGFjaXR5KCkgY29uc3Qgbm9l eGNlcHQ7Ci0tCi0tICBjb25zdCBUICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5v ZXhjZXB0OwotLSAgY29uc3QgVCAmYXQoc3RkOjpzaXplX3QgbikgY29uc3Q7Ci0tICBjb25zdCBU ICZmcm9udCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3QgVCAmYmFjaygpIGNvbnN0IG5vZXhj ZXB0OwotLQotLSAgVCAmb3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKLS0gIFQg JmF0KHN0ZDo6c2l6ZV90IG4pOwotLSAgVCAmZnJvbnQoKSBub2V4Y2VwdDsKLS0gIFQgJmJhY2so KSBub2V4Y2VwdDsKLS0KLS0gIHZvaWQgcmVzZXJ2ZShzdGQ6OnNpemVfdCBuZXdfY2FwKTsKLS0g IHZvaWQgcHVzaF9iYWNrKGNvbnN0IFQgJnZhbHVlKTsKLS0gIHZvaWQgcHVzaF9iYWNrKFQgJiZ2 YWx1ZSk7Ci0tICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLS0gIHZvaWQgZW1wbGFjZV9i YWNrKEFyZ3MgJiYuLi5hcmdzKTsKLS0gIHZvaWQgdHJ1bmNhdGUoc3RkOjpzaXplX3QgbGVuKTsK LS0gIHZvaWQgY2xlYXIoKTsKLSsgIFZlYyAoKSBub2V4Y2VwdDsKLSsgIFZlYyAoc3RkOjppbml0 aWFsaXplcl9saXN0PFQ+KTsKLSsgIFZlYyAoY29uc3QgVmVjICYpOwotKyAgVmVjIChWZWMgJiYp IG5vZXhjZXB0OwotKyAgflZlYyAoKSBub2V4Y2VwdDsKLSsKLSsgIFZlYyAmb3BlcmF0b3I9IChW ZWMgJiYpICYgbm9leGNlcHQ7Ci0rICBWZWMgJm9wZXJhdG9yPSAoY29uc3QgVmVjICYpICY7Ci0r Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBlbXB0eSAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBUICpkYXRhICgpIG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rCi0rICBjb25zdCBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25z dCBub2V4Y2VwdDsKLSsgIGNvbnN0IFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKLSsgIGNv bnN0IFQgJmZyb250ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3QgVCAmYmFjayAoKSBjb25z dCBub2V4Y2VwdDsKLSsKLSsgIFQgJm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0 OwotKyAgVCAmYXQgKHN0ZDo6c2l6ZV90IG4pOwotKyAgVCAmZnJvbnQgKCkgbm9leGNlcHQ7Ci0r ICBUICZiYWNrICgpIG5vZXhjZXB0OwotKwotKyAgdm9pZCByZXNlcnZlIChzdGQ6OnNpemVfdCBu ZXdfY2FwKTsKLSsgIHZvaWQgcHVzaF9iYWNrIChjb25zdCBUICZ2YWx1ZSk7Ci0rICB2b2lkIHB1 c2hfYmFjayAoVCAmJnZhbHVlKTsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiB2b2lk IGVtcGxhY2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpOwotKyAgdm9pZCB0cnVuY2F0ZSAoc3RkOjpz aXplX3QgbGVuKTsKLSsgIHZvaWQgY2xlYXIgKCk7Ci0gCi0gICB1c2luZyBpdGVyYXRvciA9IHR5 cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjsKLS0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7 Ci0tICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhj ZXB0OwotKyAgaXRlcmF0b3IgZW5kICgpIG5vZXhjZXB0OwotIAotICAgdXNpbmcgY29uc3RfaXRl cmF0b3IgPSB0eXBlbmFtZSBTbGljZTxjb25zdCBUPjo6aXRlcmF0b3I7Ci0tICBjb25zdF9pdGVy YXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsK LS0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJh dG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIHZvaWQg c3dhcChWZWMgJikgbm9leGNlcHQ7Ci0rICB2b2lkIHN3YXAgKFZlYyAmKSBub2V4Y2VwdDsKLSAK LS0gIFZlYyh1bnNhZmVfYml0Y29weV90LCBjb25zdCBWZWMgJikgbm9leGNlcHQ7Ci0rICBWZWMg KHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmKSBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgot LSAgdm9pZCByZXNlcnZlX3RvdGFsKHN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OwotLSAg dm9pZCBzZXRfbGVuKHN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0tICB2b2lkIGRyb3AoKSBu b2V4Y2VwdDsKLS0KLS0gIGZyaWVuZCB2b2lkIHN3YXAoVmVjICZsaHMsIFZlYyAmcmhzKSBub2V4 Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KLSsgIHZvaWQgcmVzZXJ2ZV90b3RhbCAoc3RkOjpzaXpl X3QgbmV3X2NhcCkgbm9leGNlcHQ7Ci0rICB2b2lkIHNldF9sZW4gKHN0ZDo6c2l6ZV90IGxlbikg bm9leGNlcHQ7Ci0rICB2b2lkIGRyb3AgKCkgbm9leGNlcHQ7Ci0rCi0rICBmcmllbmQgdm9pZAot KyAgc3dhcCAoVmVjICZsaHMsIFZlYyAmcmhzKSBub2V4Y2VwdAotKyAgewotKyAgICBsaHMuc3dh cCAocmhzKTsKLSsgIH0KLSAKLSAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7 Ci0gfTsKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46OlZlYyhzdGQ6OmluaXRp YWxpemVyX2xpc3Q8VD4gaW5pdCkgOiBWZWN7fSB7Ci0tICB0aGlzLT5yZXNlcnZlX3RvdGFsKGlu aXQuc2l6ZSgpKTsKLS0gIHN0ZDo6bW92ZShpbml0LmJlZ2luKCksIGluaXQuZW5kKCksIHN0ZDo6 YmFja19pbnNlcnRlcigqdGhpcykpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZl YyAoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXQpIDogVmVje30KLSt7Ci0rICB0aGlzLT5y ZXNlcnZlX3RvdGFsIChpbml0LnNpemUgKCkpOwotKyAgc3RkOjptb3ZlIChpbml0LmJlZ2luICgp LCBpbml0LmVuZCAoKSwgc3RkOjpiYWNrX2luc2VydGVyICgqdGhpcykpOwotIH0KLSAKLS10ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46OlZlYyhjb25zdCBWZWMgJm90aGVyKSA6IFZlYygp IHsKLS0gIHRoaXMtPnJlc2VydmVfdG90YWwob3RoZXIuc2l6ZSgpKTsKLS0gIHN0ZDo6Y29weShv dGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCp0aGlzKSk7Ci0r dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjIChjb25zdCBWZWMgJm90aGVyKSA6IFZl YyAoKQotK3sKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKG90aGVyLnNpemUgKCkpOwotKyAgc3Rk Ojpjb3B5IChvdGhlci5iZWdpbiAoKSwgb3RoZXIuZW5kICgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIg KCp0aGlzKSk7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6VmVjKFZl YyAmJm90aGVyKSBub2V4Y2VwdCA6IHJlcHIob3RoZXIucmVwcikgewotLSAgbmV3ICgmb3RoZXIp IFZlYygpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoVmVjICYmb3RoZXIp IG5vZXhjZXB0IDogcmVwciAob3RoZXIucmVwcikKLSt7Ci0rICBuZXcgKCZvdGhlcikgVmVjICgp OwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46On5WZWMoKSBub2V4Y2Vw dCB7Ci0tICB0aGlzLT5kcm9wKCk7Ci0tfQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46 On5WZWMgKCkgbm9leGNlcHQgeyB0aGlzLT5kcm9wICgpOyB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tVmVjPFQ+ICZWZWM8VD46Om9wZXJhdG9yPShWZWMgJiZvdGhlcikgJiBub2V4Y2Vw dCB7Ci0tICB0aGlzLT5kcm9wKCk7Ci0rVmVjPFQ+ICYKLStWZWM8VD46Om9wZXJhdG9yPSAoVmVj ICYmb3RoZXIpICYgbm9leGNlcHQKLSt7Ci0rICB0aGlzLT5kcm9wICgpOwotICAgdGhpcy0+cmVw ciA9IG90aGVyLnJlcHI7Ci0tICBuZXcgKCZvdGhlcikgVmVjKCk7Ci0rICBuZXcgKCZvdGhlcikg VmVjICgpOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1WZWM8VD4gJlZlYzxUPjo6b3BlcmF0b3I9KGNvbnN0IFZlYyAmb3RoZXIpICYgewotLSAgaWYg KHRoaXMgIT0gJm90aGVyKSB7Ci0tICAgIHRoaXMtPmRyb3AoKTsKLS0gICAgbmV3ICh0aGlzKSBW ZWMob3RoZXIpOwotLSAgfQotK1ZlYzxUPiAmCi0rVmVjPFQ+OjpvcGVyYXRvcj0gKGNvbnN0IFZl YyAmb3RoZXIpICYKLSt7Ci0rICBpZiAodGhpcyAhPSAmb3RoZXIpCi0rICAgIHsKLSsgICAgICB0 aGlzLT5kcm9wICgpOwotKyAgICAgIG5ldyAodGhpcykgVmVjIChvdGhlcik7Ci0rICAgIH0KLSAg IHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBWZWM8 VD46OmVtcHR5KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAw OwotK2Jvb2wKLStWZWM8VD46OmVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IHRoaXMtPnNpemUgKCkgPT0gMDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAq VmVjPFQ+OjpkYXRhKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGNvbnN0X2Nhc3Q8VCAqPihjb25z dF9jYXN0PGNvbnN0IFZlYzxUPiAqPih0aGlzKS0+ZGF0YSgpKTsKLStUICoKLStWZWM8VD46OmRh dGEgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY29uc3RfY2FzdDxUICo+IChjb25zdF9jYXN0 PGNvbnN0IFZlYzxUPiAqPiAodGhpcyktPmRhdGEgKCkpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1jb25zdCBUICZWZWM8VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29u c3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KG4gPCB0aGlzLT5zaXplKCkpOwotLSAgYXV0byBkYXRh ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KHRoaXMtPmRhdGEoKSk7Ci0tICByZXR1 cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCAqPihkYXRhICsgbiAqIHNpemVfb2Y8VD4oKSk7 Ci0rY29uc3QgVCAmCi0rVmVjPFQ+OjpvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBu b2V4Y2VwdAotK3sKLSsgIGFzc2VydCAobiA8IHRoaXMtPnNpemUgKCkpOwotKyAgYXV0byBkYXRh ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKLSsgIHJl dHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4g KCkpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jb25zdCBUICZWZWM8VD46OmF0 KHN0ZDo6c2l6ZV90IG4pIGNvbnN0IHsKLS0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgewotLSAg ICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4oInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2Ui KTsKLS0gIH0KLStjb25zdCBUICYKLStWZWM8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAot K3sKLSsgIGlmIChuID49IHRoaXMtPnNpemUgKCkpCi0rICAgIHsKLSsgICAgICBwYW5pYzxzdGQ6 Om91dF9vZl9yYW5nZT4gKCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0rICAgIH0K LSAgIHJldHVybiAoKnRoaXMpW25dOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1j b25zdCBUICZWZWM8VD46OmZyb250KCkgY29uc3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlz LT5lbXB0eSgpKTsKLStjb25zdCBUICYKLStWZWM8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0 Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotICAgcmV0dXJuICgqdGhpcylbMF07 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNvbnN0IFQgJlZlYzxUPjo6YmFjaygp IGNvbnN0IG5vZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Ci0tICByZXR1cm4g KCp0aGlzKVt0aGlzLT5zaXplKCkgLSAxXTsKLStjb25zdCBUICYKLStWZWM8VD46OmJhY2sgKCkg Y29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0rICByZXR1 cm4gKCp0aGlzKVt0aGlzLT5zaXplICgpIC0gMV07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLVQgJlZlYzxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdCB7Ci0t ICBhc3NlcnQobiA8IHRoaXMtPnNpemUoKSk7Ci0tICBhdXRvIGRhdGEgPSByZWludGVycHJldF9j YXN0PGNoYXIgKj4odGhpcy0+ZGF0YSgpKTsKLS0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxU ICo+KGRhdGEgKyBuICogc2l6ZV9vZjxUPigpKTsKLStUICYKLStWZWM8VD46Om9wZXJhdG9yW10g KHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAo KSk7Ci0rICBhdXRvIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHRoaXMtPmRhdGEg KCkpOwotKyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4gKGRhdGEgKyBuICogc2l6ZV9v ZjxUPiAoKSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlZlYzxUPjo6YXQo c3RkOjpzaXplX3QgbikgewotLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7Ci0tICAgIHBhbmlj PHN0ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOwotLSAg fQotK1QgJgotK1ZlYzxUPjo6YXQgKHN0ZDo6c2l6ZV90IG4pCi0rewotKyAgaWYgKG4gPj0gdGhp cy0+c2l6ZSAoKSkKLSsgICAgewotKyAgICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1 c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSsgICAgfQotICAgcmV0dXJuICgqdGhpcylb bl07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlZlYzxUPjo6ZnJvbnQoKSBu b2V4Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOwotK1QgJgotK1ZlYzxUPjo6ZnJv bnQgKCkgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0gICByZXR1 cm4gKCp0aGlzKVswXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmVmVjPFQ+ OjpiYWNrKCkgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLS0gIHJldHVy biAoKnRoaXMpW3RoaXMtPnNpemUoKSAtIDFdOwotK1QgJgotK1ZlYzxUPjo6YmFjayAoKSBub2V4 Y2VwdAotK3sKLSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSsgIHJldHVybiAoKnRoaXMp W3RoaXMtPnNpemUgKCkgLSAxXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9p ZCBWZWM8VD46OnJlc2VydmUoc3RkOjpzaXplX3QgbmV3X2NhcCkgewotLSAgdGhpcy0+cmVzZXJ2 ZV90b3RhbChuZXdfY2FwKTsKLSt2b2lkCi0rVmVjPFQ+OjpyZXNlcnZlIChzdGQ6OnNpemVfdCBu ZXdfY2FwKQotK3sKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKG5ld19jYXApOwotIH0KLSAKLSB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFZlYzxUPjo6cHVzaF9iYWNrKGNvbnN0IFQgJnZh bHVlKSB7Ci0tICB0aGlzLT5lbXBsYWNlX2JhY2sodmFsdWUpOwotK3ZvaWQKLStWZWM8VD46OnB1 c2hfYmFjayAoY29uc3QgVCAmdmFsdWUpCi0rewotKyAgdGhpcy0+ZW1wbGFjZV9iYWNrICh2YWx1 ZSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+OjpwdXNoX2Jh Y2soVCAmJnZhbHVlKSB7Ci0tICB0aGlzLT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7 Ci0rdm9pZAotK1ZlYzxUPjo6cHVzaF9iYWNrIChUICYmdmFsdWUpCi0rewotKyAgdGhpcy0+ZW1w bGFjZV9iYWNrIChzdGQ6Om1vdmUgKHZhbHVlKSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotLXZvaWQgVmVjPFQ+OjplbXBsYWNl X2JhY2soQXJncyAmJi4uLmFyZ3MpIHsKLS0gIGF1dG8gc2l6ZSA9IHRoaXMtPnNpemUoKTsKLS0g IHRoaXMtPnJlc2VydmVfdG90YWwoc2l6ZSArIDEpOwotLSAgOjpuZXcgKHJlaW50ZXJwcmV0X2Nh c3Q8VCAqPihyZWludGVycHJldF9jYXN0PGNoYXIgKj4odGhpcy0+ZGF0YSgpKSArCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplX29mPFQ+KCkpKQotLSAgICAgIFQo c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLS0gIHRoaXMtPnNldF9sZW4oc2l6ZSArIDEp OwotK3ZvaWQKLStWZWM8VD46OmVtcGxhY2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpCi0rewotKyAg YXV0byBzaXplID0gdGhpcy0+c2l6ZSAoKTsKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKHNpemUg KyAxKTsKLSsgIDo6bmV3IChyZWludGVycHJldF9jYXN0PFQgKj4gKHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhciAqPiAodGhpcy0+ZGF0YSAoKSkgKyBzaXplICogc2l6ZV9vZjxUPiAoKSkpCi0rICAgICAg VCAoc3RkOjpmb3J3YXJkPEFyZ3M+IChhcmdzKS4uLik7Ci0rICB0aGlzLT5zZXRfbGVuIChzaXpl ICsgMSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+OjpjbGVh cigpIHsKLS0gIHRoaXMtPnRydW5jYXRlKDApOwotK3ZvaWQKLStWZWM8VD46OmNsZWFyICgpCi0r ewotKyAgdGhpcy0+dHJ1bmNhdGUgKDApOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS10eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yIFZlYzxUPjo6YmVnaW4oKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gU2xpY2U8VD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7Ci0r dHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvcgotK1ZlYzxUPjo6YmVnaW4gKCkgbm9leGNlcHQKLSt7 Ci0rICByZXR1cm4gU2xpY2U8VD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmJlZ2lu ICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8VD46Oml0 ZXJhdG9yIFZlYzxUPjo6ZW5kKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIFNsaWNlPFQ+KHRoaXMt PmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmQoKTsKLSt0eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9y Ci0rVmVjPFQ+OjplbmQgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gU2xpY2U8VD4gKHRoaXMt PmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmVuZCAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmJlZ2luKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMtPmNiZWdpbigpOwotK3R5cGVuYW1lIFZl YzxUPjo6Y29uc3RfaXRlcmF0b3IKLStWZWM8VD46OmJlZ2luICgpIGNvbnN0IG5vZXhjZXB0Ci0r ewotKyAgcmV0dXJuIHRoaXMtPmNiZWdpbiAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmVuZCgpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5jZW5kKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+Ojpj b25zdF9pdGVyYXRvcgotK1ZlYzxUPjo6ZW5kICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0 dXJuIHRoaXMtPmNlbmQgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVu YW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjpjYmVnaW4oKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkp LmJlZ2luKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgotK1ZlYzxUPjo6Y2Jl Z2luICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0aGlz LT5kYXRhICgpLCB0aGlzLT5zaXplICgpKS5iZWdpbiAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmNlbmQo KSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgp LCB0aGlzLT5zaXplKCkpLmVuZCgpOwotK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IK LStWZWM8VD46OmNlbmQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gU2xpY2U8Y29u c3QgVD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmVuZCAoKTsKLSB9Ci0gCi0gdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBWZWM8VD46OnN3YXAoVmVjICZyaHMpIG5vZXhjZXB0 IHsKLSt2b2lkCi0rVmVjPFQ+Ojpzd2FwIChWZWMgJnJocykgbm9leGNlcHQKLSt7Ci0gICB1c2lu ZyBzdGQ6OnN3YXA7Ci0tICBzd2FwKHRoaXMtPnJlcHIsIHJocy5yZXByKTsKLSsgIHN3YXAgKHRo aXMtPnJlcHIsIHJocy5yZXByKTsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVj PFQ+OjpWZWModW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJl cHIoYml0cy5yZXByKSB7fQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAodW5z YWZlX2JpdGNvcHlfdCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIgKGJpdHMucmVw cikge30KLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX1ZFQwotIAotICNpZm5kZWYgQ1hYQlJJ REdFMV9SVVNUX09QQVFVRQotICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQotLWNsYXNz IE9wYXF1ZSB7Ci0rY2xhc3MgT3BhcXVlCi0rewotIHB1YmxpYzoKLS0gIE9wYXF1ZSgpID0gZGVs ZXRlOwotLSAgT3BhcXVlKGNvbnN0IE9wYXF1ZSAmKSA9IGRlbGV0ZTsKLS0gIH5PcGFxdWUoKSA9 IGRlbGV0ZTsKLSsgIE9wYXF1ZSAoKSA9IGRlbGV0ZTsKLSsgIE9wYXF1ZSAoY29uc3QgT3BhcXVl ICYpID0gZGVsZXRlOwotKyAgfk9wYXF1ZSAoKSA9IGRlbGV0ZTsKLSB9OwotICNlbmRpZiAvLyBD WFhCUklER0UxX1JVU1RfT1BBUVVFCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0lTX0NPTVBMRVRF Ci0gI2RlZmluZSBDWFhCUklER0UxX0lTX0NPTVBMRVRFCi0tbmFtZXNwYWNlIGRldGFpbCB7Ci0t bmFtZXNwYWNlIHsKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OnNpemVf dD4KLS1zdHJ1Y3QgaXNfY29tcGxldGUgOiBzdGQ6OmZhbHNlX3R5cGUge307Ci0tdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0tc3RydWN0IGlzX2NvbXBsZXRlPFQsIGRlY2x0eXBlKHNpemVvZihUKSk+ IDogc3RkOjp0cnVlX3R5cGUge307Ci0rbmFtZXNwYWNlIGRldGFpbAotK3sKLStuYW1lc3BhY2UK LSt7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjpzaXplX3Q+IHN0cnVj dCBpc19jb21wbGV0ZSA6IHN0ZDo6ZmFsc2VfdHlwZQotK3sKLSt9OwotK3RlbXBsYXRlIDx0eXBl bmFtZSBUPiBzdHJ1Y3QgaXNfY29tcGxldGU8VCwgZGVjbHR5cGUgKHNpemVvZiAoVCkpPiA6IHN0 ZDo6dHJ1ZV90eXBlCi0rewotK307Ci0gfSAvLyBuYW1lc3BhY2UKLSB9IC8vIG5hbWVzcGFjZSBk ZXRhaWwKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9JU19DT01QTEVURQotIAotICNpZm5kZWYgQ1hY QlJJREdFMV9MQVlPVVQKLSAjZGVmaW5lIENYWEJSSURHRTFfTEFZT1VUCi0tY2xhc3MgbGF5b3V0 IHsKLStjbGFzcyBsYXlvdXQKLSt7Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0 ZDo6c2l6ZV90IHNpemVfb2YgKCk7Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0 ZDo6c2l6ZV90IGFsaWduX29mICgpOwotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBmcmll bmQgc3RkOjpzaXplX3Qgc2l6ZV9vZigpOwotLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBm cmllbmQgc3RkOjpzaXplX3QgYWxpZ25fb2YoKTsKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUs IFQ+Ojp2YWx1ZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVf dD46OnR5cGUKLS0gIGRvX3NpemVfb2YoKSB7Ci0tICAgIHJldHVybiBUOjpsYXlvdXQ6OnNpemUo KTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3Bh cXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQotKyAgZG9fc2l6ZV9vZiAoKQotKyAg ewotKyAgICByZXR1cm4gVDo6bGF5b3V0OjpzaXplICgpOwotICAgfQotICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFz ZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdGQ6OnNpemVfdD46OnR5cGUKLS0gIGRvX3NpemVfb2YoKSB7Ci0tICAgIHJldHVybiBzaXpl b2YoVCk7Ci0rICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9v ZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCi0rICBkb19zaXplX29mICgp Ci0rICB7Ci0rICAgIHJldHVybiBzaXplb2YgKFQpOwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tICBzdGF0aWMKLS0gICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6 OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCi0tICAgICAgc2l6ZV9v ZigpIHsKLS0gICAgcmV0dXJuIGRvX3NpemVfb2Y8VD4oKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBz dGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+ Ojp0eXBlCi0rICBzaXplX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBkb19zaXplX29mPFQ+ICgp OwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlwZW5hbWUgc3Rk OjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgZG9fYWxpZ25f b2YoKSB7Ci0tICAgIHJldHVybiBUOjpsYXlvdXQ6OmFsaWduKCk7Ci0rICBzdGF0aWMgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6 OnNpemVfdD46OnR5cGUKLSsgIGRvX2FsaWduX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBUOjps YXlvdXQ6OmFsaWduICgpOwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0 aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2 YWx1ZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5 cGUKLS0gIGRvX2FsaWduX29mKCkgewotLSAgICByZXR1cm4gYWxpZ25vZihUKTsKLSsgIHN0YXRp YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZh bHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIGRvX2FsaWduX29mICgpCi0rICB7Ci0rICAgIHJl dHVybiBhbGlnbm9mIChUKTsKLSAgIH0KLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgc3Rh dGljCi0tICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxU Pjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgICAgIGFsaWduX29mKCkgewotLSAgICBy ZXR1cm4gZG9fYWxpZ25fb2Y8VD4oKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p ZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCi0rICBh bGlnbl9vZiAoKQotKyAgewotKyAgICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4gKCk7Ci0gICB9Ci0g fTsKLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1zdGQ6OnNpemVfdCBzaXplX29mKCkgewot LSAgcmV0dXJuIGxheW91dDo6c2l6ZV9vZjxUPigpOwotK3N0ZDo6c2l6ZV90Ci0rc2l6ZV9vZiAo KQotK3sKLSsgIHJldHVybiBsYXlvdXQ6OnNpemVfb2Y8VD4gKCk7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXN0ZDo6c2l6ZV90IGFsaWduX29mKCkgewotLSAgcmV0dXJuIGxheW91 dDo6YWxpZ25fb2Y8VD4oKTsKLStzdGQ6OnNpemVfdAotK2FsaWduX29mICgpCi0rewotKyAgcmV0 dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4gKCk7Ci0gfQotICNlbmRpZiAvLyBDWFhCUklER0UxX0xB WU9VVAotIH0gLy8gbmFtZXNwYWNlIGN4eGJyaWRnZTEKLUBAIC05NzgsNTEgKzExMTEsNTMgQEAg c3RkOjpzaXplX3QgYWxpZ25fb2YoKSB7Ci0gI2RlZmluZSBDWFhfREVGQVVMVF9WQUxVRSh2YWx1 ZSkKLSAjZW5kaWYKLSAKLS1uYW1lc3BhY2UgcnBtb3N0cmVlY3h4IHsKLS0gIHN0cnVjdCBTdHJp bmdNYXBwaW5nOwotLSAgZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90 OwotLSAgZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90Owot LSAgc3RydWN0IEJ1YmJsZXdyYXA7Ci0tICBzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZTsKLS0g IHN0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZjsKLS0gIHN0cnVjdCBQcnVuZWRDb250YWluZXJJ bmZvOwotLSAgZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90OwotLSAgc3Ry dWN0IFRlbXBFdGNHdWFyZDsKLS0gIHN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcDsKLS0gIHN0 cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGE7Ci0tICBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVu dFNvdXJjZTsKLS0gIGVudW0gY2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4 X3Q7Ci0tICBzdHJ1Y3QgUGFyc2VkUmV2aXNpb247Ci0tICBzdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFn czsKLS0gIHN0cnVjdCBScG1JbXBvcnRlcjsKLS0gIHN0cnVjdCBIaXN0b3J5RW50cnk7Ci0tICBz dHJ1Y3QgSGlzdG9yeUN0eDsKLS0gIHN0cnVjdCBUb2tpb0hhbmRsZTsKLS0gIHN0cnVjdCBUb2tp b0VudGVyR3VhcmQ7Ci0tICBlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1 aW50OF90OwotLSAgZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6 dWludDhfdDsKLS0gIHN0cnVjdCBSZWZzcGVjOwotLSAgZW51bSBjbGFzcyBPdmVycmlkZVJlcGxh Y2VtZW50VHlwZSA6IDo6c3RkOjp1aW50OF90OwotLSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1l bnQ7Ci0tICBlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0tICBzdHJ1 Y3QgVHJlZWZpbGU7Ci0tICBzdHJ1Y3QgUmVwb1BhY2thZ2U7Ci0tICBzdHJ1Y3QgTGl2ZUFwcGx5 U3RhdGU7Ci0tICBzdHJ1Y3QgUGFzc3dkREI7Ci0tICBzdHJ1Y3QgUGFzc3dkRW50cmllczsKLS0g IHN0cnVjdCBFeHRlbnNpb25zOwotLSAgc3RydWN0IExvY2tlZFBhY2thZ2U7Ci0tICBzdHJ1Y3Qg TG9ja2ZpbGVDb25maWc7Ci0tICB1c2luZyBDeHhHT2JqZWN0QXJyYXkgPSA6OnJwbW9zdHJlZWN4 eDo6Q3h4R09iamVjdEFycmF5OwotLSAgdXNpbmcgQ2xpZW50Q29ubmVjdGlvbiA9IDo6cnBtb3N0 cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOwotLSAgdXNpbmcgUlBNRGlmZiA9IDo6cnBtb3N0cmVl Y3h4OjpSUE1EaWZmOwotLSAgdXNpbmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0ID0gOjpycG1v c3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdDsKLS0gIHVzaW5nIFByb2dyZXNzID0g OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzOwotLSAgdXNpbmcgUnBtVHMgPSA6OnJwbW9zdHJlZWN4 eDo6UnBtVHM7Ci0tICB1c2luZyBQYWNrYWdlTWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YTsKLS19Ci0tCi0tbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7Ci0rbmFtZXNwYWNlIHJwbW9z dHJlZWN4eAotK3sKLStzdHJ1Y3QgU3RyaW5nTWFwcGluZzsKLStlbnVtIGNsYXNzIFN5c3RlbUhv c3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0rZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0 eSA6IDo6c3RkOjp1aW50OF90OwotK3N0cnVjdCBCdWJibGV3cmFwOwotK3N0cnVjdCBDb250YWlu ZXJJbWFnZVN0YXRlOwotK3N0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZjsKLStzdHJ1Y3QgUHJ1 bmVkQ29udGFpbmVySW5mbzsKLStlbnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4 X3Q7Ci0rc3RydWN0IFRlbXBFdGNHdWFyZDsKLStzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXA7 Ci0rc3RydWN0IERlcGxveW1lbnRMYXllcmVkTWV0YTsKLStzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNl bWVudFNvdXJjZTsKLStlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50 OF90OwotK3N0cnVjdCBQYXJzZWRSZXZpc2lvbjsKLStzdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFnczsK LStzdHJ1Y3QgUnBtSW1wb3J0ZXI7Ci0rc3RydWN0IEhpc3RvcnlFbnRyeTsKLStzdHJ1Y3QgSGlz dG9yeUN0eDsKLStzdHJ1Y3QgVG9raW9IYW5kbGU7Ci0rc3RydWN0IFRva2lvRW50ZXJHdWFyZDsK LStlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OwotK2VudW0g Y2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7Ci0rc3RydWN0 IFJlZnNwZWM7Ci0rZW51bSBjbGFzcyBPdmVycmlkZVJlcGxhY2VtZW50VHlwZSA6IDo6c3RkOjp1 aW50OF90OwotK3N0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50OwotK2VudW0gY2xhc3MgT3B0VXNy TG9jYWwgOiA6OnN0ZDo6dWludDhfdDsKLStzdHJ1Y3QgVHJlZWZpbGU7Ci0rc3RydWN0IFJlcG9Q YWNrYWdlOwotK3N0cnVjdCBMaXZlQXBwbHlTdGF0ZTsKLStzdHJ1Y3QgUGFzc3dkREI7Ci0rc3Ry dWN0IFBhc3N3ZEVudHJpZXM7Ci0rc3RydWN0IEV4dGVuc2lvbnM7Ci0rc3RydWN0IExvY2tlZFBh Y2thZ2U7Ci0rc3RydWN0IExvY2tmaWxlQ29uZmlnOwotK3VzaW5nIEN4eEdPYmplY3RBcnJheSA9 IDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk7Ci0rdXNpbmcgQ2xpZW50Q29ubmVjdGlv biA9IDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOwotK3VzaW5nIFJQTURpZmYgPSA6 OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjsKLSt1c2luZyBScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQg PSA6OnJwbW9zdHJlZWN4eDo6UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OwotK3VzaW5nIFByb2dy ZXNzID0gOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzOwotK3VzaW5nIFJwbVRzID0gOjpycG1vc3Ry ZWVjeHg6OlJwbVRzOwotK3VzaW5nIFBhY2thZ2VNZXRhID0gOjpycG1vc3RyZWVjeHg6OlBhY2th Z2VNZXRhOwotK30KLSsKLStuYW1lc3BhY2UgcnBtb3N0cmVlY3h4Ci0rewotICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmcKLSAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nCi0gLy8gQ3VycmVudGx5IGN4 eC1ycyBkb2Vzbid0IHN1cHBvcnQgbWFwcGluZ3M7IGxpa2UgcHJvYmFibHkgbW9zdCBwcm9qZWN0 cywKLUBAIC0xMDMwLDcgKzExNjUsOCBAQCBuYW1lc3BhY2UgcnBtb3N0cmVlY3h4IHsKLSAvLyBv dXIgZGF0YSBzaXplcyBhcmVuJ3QgbGFyZ2UsIHdlIHNlcmlhbGl6ZSB0aGlzIGFzIGEgdmVjdG9y IG9mIHN0cmluZ3MgcGFpcnMuCi0gLy8gSW4gdGhlIGZ1dHVyZSBpdCdzIGFsc28gbGlrZWx5IHRo YXQgY3h4LXJzIHdpbGwgc3VwcG9ydCBhIEMrKyBzdHJpbmdfdmlldwotIC8vIHNvIHdlIGNvdWxk IGF2b2lkIGR1cGxpY2F0aW5nIGluIHRoYXQgZGlyZWN0aW9uLgotLXN0cnVjdCBTdHJpbmdNYXBw aW5nIGZpbmFsIHsKLStzdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5hbAotK3sKLSAgIDo6cnVzdDo6 U3RyaW5nIGs7Ci0gICA6OnJ1c3Q6OlN0cmluZyB2OwotIAotQEAgLTEwNDEsNyArMTE3Nyw4IEBA IHN0cnVjdCBTdHJpbmdNYXBwaW5nIGZpbmFsIHsKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9y cG1vc3RyZWVjeHgkU3lzdGVtSG9zdFR5cGUKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1v c3RyZWVjeHgkU3lzdGVtSG9zdFR5cGUKLSAvLyBDbGFzc2lmeSB0aGUgcnVubmluZyBzeXN0ZW0u Ci0tZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKLStlbnVtIGNs YXNzIFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBPc3RyZWVDb250YWlu ZXIgPSAwLAotICAgT3N0cmVlSG9zdCA9IDEsCi0gICBVbmtub3duID0gMiwKLUBAIC0xMDUwLDcg KzExODcsOCBAQCBlbnVtIGNsYXNzIFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3Qgewot IAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwTXV0YWJp bGl0eQotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwTXV0 YWJpbGl0eQotLWVudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhf dCB7Ci0rZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90Ci0r ewotICAgSW1tdXRhYmxlID0gMCwKLSAgIFJvRmlsZXMgPSAxLAotICAgTXV0YXRlRnJlZWx5ID0g MiwKLUBAIC0xMDU5LDQ5ICsxMTk3LDUyIEBAIGVudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxp dHkgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkQnViYmxld3JhcAotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JEJ1YmJsZXdyYXAKLS1zdHJ1Y3QgQnViYmxld3JhcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6 Ok9wYXF1ZSB7Ci0tICA6OnN0ZDo6aW50MzJfdCBnZXRfcm9vdGZzX2ZkKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICB2b2lkIGFwcGVuZF9id3JhcF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsK LS0gIHZvaWQgYXBwZW5kX2NoaWxkX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotLSAg dm9pZCBzZXRlbnYoOjpydXN0OjpTdHIgaywgOjpydXN0OjpTdHIgdikgbm9leGNlcHQ7Ci0tICB2 b2lkIHRha2VfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJn ZXRfZmQpIG5vZXhjZXB0OwotLSAgdm9pZCBzZXRfaW5oZXJpdF9zdGRpbigpIG5vZXhjZXB0Owot LSAgdm9pZCB0YWtlX3N0ZGluX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7 Ci0tICB2b2lkIHRha2Vfc3Rkb3V0X2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNl cHQ7Ci0tICB2b2lkIHRha2Vfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9l eGNlcHQ7Ci0tICB2b2lkIHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQoOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkKSBub2V4Y2VwdDsKLS0gIHZvaWQgYmluZF9yZWFkKDo6cnVzdDo6U3RyIHNyYywg OjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7Ci0tICB2b2lkIGJpbmRfcmVhZHdyaXRlKDo6cnVz dDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7Ci0tICB2b2lkIHNldHVwX2Nv bXBhdF92YXIoKTsKLS0gIHZvaWQgcnVuKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29u c3QgJmNhbmNlbGxhYmxlKTsKLS0gIH5CdWJibGV3cmFwKCkgPSBkZWxldGU7Ci0rc3RydWN0IEJ1 YmJsZXdyYXAgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnN0ZDo6aW50 MzJfdCBnZXRfcm9vdGZzX2ZkICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBhcHBlbmRfYndy YXBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotKyAgdm9pZCBhcHBlbmRfY2hpbGRf YXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotKyAgdm9pZCBzZXRlbnYgKDo6cnVzdDo6 U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0OwotKyAgdm9pZCB0YWtlX2ZkICg6OnN0ZDo6 aW50MzJfdCBzb3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQ7Ci0r ICB2b2lkIHNldF9pbmhlcml0X3N0ZGluICgpIG5vZXhjZXB0OwotKyAgdm9pZCB0YWtlX3N0ZGlu X2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCB0YWtlX3N0 ZG91dF9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFr ZV9zdGRlcnJfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0rICB2b2lk IHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9l eGNlcHQ7Ci0rICB2b2lkIGJpbmRfcmVhZCAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBk ZXN0KSBub2V4Y2VwdDsKLSsgIHZvaWQgYmluZF9yZWFkd3JpdGUgKDo6cnVzdDo6U3RyIHNyYywg OjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7Ci0rICB2b2lkIHNldHVwX2NvbXBhdF92YXIgKCk7 Ci0rICB2b2lkIHJ1biAoOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2Vs bGFibGUpOwotKyAgfkJ1YmJsZXdyYXAgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZy aWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkQnViYmxld3JhcAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JEV4cG9ydGVkTWFuaWZlc3REaWZmCi0gI2RlZmluZSBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkRXhwb3J0ZWRNYW5pZmVzdERpZmYKLS1zdHJ1Y3QgRXhwb3J0ZWRN YW5pZmVzdERpZmYgZmluYWwgewotK3N0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZiBmaW5hbAot K3sKLSAgIC8vIENoZWNrIGlmIHRoZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQKLS0gIGJvb2wgaW5p dGlhbGl6ZWQgQ1hYX0RFRkFVTFRfVkFMVUUoZmFsc2UpOwotKyAgYm9vbCBpbml0aWFsaXplZCBD WFhfREVGQVVMVF9WQUxVRSAoZmFsc2UpOwotICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBwYWNr YWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3QgdG90YWwgQ1hYX0RF RkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgdG90YWwgQ1hYX0RFRkFVTFRfVkFM VUUgKDApOwotICAgLy8gVGhlIHNpemUgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrYWdlcyBp biB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3QgdG90YWxfc2l6ZSBDWFhfREVG QVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCB0b3RhbF9zaXplIENYWF9ERUZBVUxU X1ZBTFVFICgwKTsKLSAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcmVtb3ZlZCBwYWNrYWdlcyBp biB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3Qgbl9yZW1vdmVkIENYWF9ERUZB VUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVGQVVMVF9W QUxVRSAoMCk7Ci0gICAvLyBUaGUgc2l6ZSBvZiB0b3RhbCBudW1iZXIgb2YgcmVtb3ZlZCBwYWNr YWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3QgcmVtb3ZlZF9zaXpl IENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6ZSBD WFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGFkZGVkIHBh Y2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCBuX2FkZGVkIENY WF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IG5fYWRkZWQgQ1hYX0RFRkFV TFRfVkFMVUUgKDApOwotICAgLy8gVGhlIHNpemUgb2YgdG90YWwgbnVtYmVyIG9mIGFkZGVkIHBh Y2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCBhZGRlZF9zaXpl IENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGFkZGVkX3NpemUgQ1hY X0RFRkFVTFRfVkFMVUUgKDApOwotICAgLy8gVGhlIHZlcnNpb24gb2YgdGhlIG5leHQgdXBncmFk ZQotICAgOjpydXN0OjpTdHJpbmcgdmVyc2lvbjsKLSAKLUBAIC0xMTExLDEwICsxMjUyLDExIEBA IHN0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZiBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZQotICNkZWZpbmUgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUKLS0vLyBgQ29u dGFpbmVySW1hZ2VTdGF0ZWAgaXMgY3VycmVudGx5IGlkZW50aWNhbCB0byBvc3RyZWUtcnMtZXh0 J3MgYExheWVyZWRJbWFnZVN0YXRlYCBzdHJ1Y3QsIGJlY2F1c2UKLS0vLyBjeHgucnMgY3VycmVu dGx5IHJlcXVpcmVzIHR5cGVzIHVzZWQgYXMgZXh0ZXJuIFJ1c3QgdHlwZXMgdG8gYmUgZGVmaW5l ZCBieSB0aGUgc2FtZSBjcmF0ZQotKy8vIGBDb250YWluZXJJbWFnZVN0YXRlYCBpcyBjdXJyZW50 bHkgaWRlbnRpY2FsIHRvIG9zdHJlZS1ycy1leHQncyBgTGF5ZXJlZEltYWdlU3RhdGVgIHN0cnVj dCwKLSsvLyBiZWNhdXNlIGN4eC5ycyBjdXJyZW50bHkgcmVxdWlyZXMgdHlwZXMgdXNlZCBhcyBl eHRlcm4gUnVzdCB0eXBlcyB0byBiZSBkZWZpbmVkIGJ5IHRoZSBzYW1lIGNyYXRlCi0gLy8gdGhh dCBjb250YWlucyB0aGUgYnJpZGdlIHVzaW5nIHRoZW0sIHNvIHdlIHJlZGVmaW5lIGFuIGBDb250 YWluZXJJbXBvcnRgIHN0cnVjdCBoZXJlLgotLXN0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlIGZp bmFsIHsKLStzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBmaW5hbAotK3sKLSAgIDo6cnVzdDo6 U3RyaW5nIGJhc2VfY29tbWl0OwotICAgOjpydXN0OjpTdHJpbmcgbWVyZ2VfY29tbWl0OwotICAg OjpydXN0OjpTdHJpbmcgaW1hZ2VfZGlnZXN0OwotQEAgLTExMjgsMTkgKzEyNzAsMjEgQEAgc3Ry dWN0IENvbnRhaW5lckltYWdlU3RhdGUgZmluYWwgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFBydW5lZENvbnRhaW5lckluZm8KLSAjZGVmaW5lIENYWEJSSURH RTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQcnVuZWRDb250YWluZXJJbmZvCi0tc3RydWN0IFBydW5l ZENvbnRhaW5lckluZm8gZmluYWwgewotLSAgOjpzdGQ6OnVpbnQzMl90IGltYWdlcyBDWFhfREVG QVVMVF9WQUxVRSgwKTsKLS0gIDo6c3RkOjp1aW50MzJfdCBsYXllcnMgQ1hYX0RFRkFVTFRfVkFM VUUoMCk7Ci0rc3RydWN0IFBydW5lZENvbnRhaW5lckluZm8gZmluYWwKLSt7Ci0rICA6OnN0ZDo6 dWludDMyX3QgaW1hZ2VzIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSsgIDo6c3RkOjp1aW50MzJf dCBsYXllcnMgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotIAotLSAgYm9vbCBvcGVyYXRvcj09KFBy dW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJh dG9yIT0oUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgb3BlcmF0b3I9PSAoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBjb25z dCBub2V4Y2VwdDsKLSAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOwot IH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQcnVuZWRDb250 YWluZXJJbmZvCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlZnNw ZWNUeXBlCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlZnNwZWNUeXBl Ci0tZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90IHsKLStlbnVtIGNsYXNz IFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBPc3RyZWUgPSAwLAotICAgQ2hl Y2tzdW0gPSAxLAotICAgQ29udGFpbmVyID0gMiwKLUBAIC0xMTQ5LDQwICsxMjkzLDQ1IEBAIGVu dW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0gI2lmbmRlZiBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkCi0gI2RlZmluZSBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkCi0tc3RydWN0IFRlbXBFdGNHdWFy ZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICB2b2lkIHVuZG8oKSBjb25zdDsK LS0gIH5UZW1wRXRjR3VhcmQoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgVGVtcEV0Y0d1YXJkIGZpbmFs IDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgdm9pZCB1bmRvICgpIGNvbnN0OwotKyAg flRlbXBFdGNHdWFyZCAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVz dDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4 Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg c2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9l eGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRUZW1wRXRjR3VhcmQKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcAotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBt b3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwCi0tc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQ cmVwIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIHZvaWQgdW5kbygpOwotLSAg fkZpbGVzeXN0ZW1TY3JpcHRQcmVwKCkgPSBkZWxldGU7Ci0rc3RydWN0IEZpbGVzeXN0ZW1TY3Jp cHRQcmVwIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgdm9pZCB1bmRvICgp OwotKyAgfkZpbGVzeXN0ZW1TY3JpcHRQcmVwICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0g ICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGlj IDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMg OjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwCi0gCi0gI2lmbmRlZiBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRGVwbG95bWVudExheWVyZWRNZXRhCi0gI2RlZmlu ZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRGVwbG95bWVudExheWVyZWRNZXRhCi0t c3RydWN0IERlcGxveW1lbnRMYXllcmVkTWV0YSBmaW5hbCB7Ci0tICBib29sIGlzX2xheWVyZWQg Q1hYX0RFRkFVTFRfVkFMVUUoZmFsc2UpOwotK3N0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGEg ZmluYWwKLSt7Ci0rICBib29sIGlzX2xheWVyZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKGZhbHNlKTsK LSAgIDo6cnVzdDo6U3RyaW5nIGJhc2VfY29tbWl0OwotLSAgOjpzdGQ6OnVpbnQzMl90IGNsaWVu dGxheWVyX3ZlcnNpb24gQ1hYX0RFRkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDMyX3Qg Y2xpZW50bGF5ZXJfdmVyc2lvbiBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0gCi0gICB1c2luZyBJ c1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKLSB9OwotQEAgLTExOTAsNyArMTMzOSw4 IEBAIHN0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGEgZmluYWwgewotIAotICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UKLSAj ZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50 U291cmNlCi0tc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UgZmluYWwgewotK3N0cnVj dCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIGZpbmFsCi0rewotICAgOjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIGtpbmQ7Ci0gICA6OnJ1c3Q6OlN0cmluZyBuYW1lOwot IAotQEAgLTEyMDAsNyArMTM1MCw4IEBAIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNl IGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUGFyc2Vk UmV2aXNpb25LaW5kCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNl ZFJldmlzaW9uS2luZAotLWVudW0gY2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVp bnQ4X3QgewotK2VudW0gY2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3QK LSt7Ci0gICBWZXJzaW9uID0gMCwKLSAgIENoZWNrc3VtID0gMSwKLSB9OwotQEAgLTEyMDgsNyAr MTM1OSw4IEBAIGVudW0gY2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3Qg ewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlz aW9uCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNp b24KLS1zdHJ1Y3QgUGFyc2VkUmV2aXNpb24gZmluYWwgewotK3N0cnVjdCBQYXJzZWRSZXZpc2lv biBmaW5hbAotK3sKLSAgIDo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbktpbmQga2luZDsK LSAgIDo6cnVzdDo6U3RyaW5nIHZhbHVlOwotIAotQEAgLTEyMTgsNDQgKzEzNzAsNTAgQEAgc3Ry dWN0IFBhcnNlZFJldmlzaW9uIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncwotLXN0cnVjdCBScG1JbXBvcnRlckZsYWdz IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIGJvb2wgaXNfaW1hX2VuYWJsZWQo KSBjb25zdCBub2V4Y2VwdDsKLS0gIH5ScG1JbXBvcnRlckZsYWdzKCkgPSBkZWxldGU7Ci0rc3Ry dWN0IFJwbUltcG9ydGVyRmxhZ3MgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0r ICBib29sIGlzX2ltYV9lbmFibGVkICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgflJwbUltcG9ydGVy RmxhZ3MgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91 dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkg bm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0r ICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkg bm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0Owot ICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBt SW1wb3J0ZXJGbGFncwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JFJwbUltcG9ydGVyCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBt SW1wb3J0ZXIKLS1zdHJ1Y3QgUnBtSW1wb3J0ZXIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFx dWUgewotLSAgOjpydXN0OjpTdHJpbmcgaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSg6OnJ1c3Q6 OlN0ciBwYXRoKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIG9zdHJlZV9icmFuY2goKSBj b25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIHBrZ19uYW1lKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIGRvY19maWxlc19hcmVfZmlsdGVyZWQoKSBjb25zdCBub2V4Y2VwdDsKLS0g IHZvaWQgZG9jX2ZpbGVzX2luc2VydCg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKLS0gIGJv b2wgZG9jX2ZpbGVzX2NvbnRhaW5zKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0Owot LSAgdm9pZCBycG1maV9vdmVycmlkZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1 aW50NjRfdCBpbmRleCkgbm9leGNlcHQ7Ci0tICBib29sIHJwbWZpX292ZXJyaWRlc19jb250YWlu cyg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6c3RkOjp1aW50NjRfdCBy cG1maV9vdmVycmlkZXNfZ2V0KDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OwotLSAg Ym9vbCBpc19pbWFfZW5hYmxlZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCB0d2Vha19pbXBv cnRlZF9maWxlX2luZm8oOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZv KSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgaXNfZmlsZV9maWx0ZXJlZCg6OnJ1c3Q6OlN0ciBw YXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0Owot LSAgdm9pZCB0cmFuc2xhdGVfdG9fdG1wZmlsZXNfZW50cnkoOjpydXN0OjpTdHIgYWJzX3BhdGgs IDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIg dXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7Ci0tICBib29sIGhhc190bXBmaWxlc19l bnRyaWVzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBzZXJpYWxpemVfdG1w ZmlsZXNfY29udGVudCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgflJwbUltcG9ydGVyKCkgPSBkZWxl dGU7Ci0rc3RydWN0IFJwbUltcG9ydGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0r ewotKyAgOjpydXN0OjpTdHJpbmcgaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSAoOjpydXN0OjpT dHIgcGF0aCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgcGtnX25hbWUgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIGRvY19maWxlc19hcmVfZmlsdGVyZWQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICB2b2lkIGRvY19maWxlc19pbnNlcnQgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAg Ym9vbCBkb2NfZmlsZXNfY29udGFpbnMgKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgdm9pZCBycG1maV9vdmVycmlkZXNfaW5zZXJ0ICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0 ZDo6dWludDY0X3QgaW5kZXgpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1maV9vdmVycmlkZXNfY29u dGFpbnMgKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpzdGQ6OnVpbnQ2 NF90IHJwbWZpX292ZXJyaWRlc19nZXQgKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgYm9vbCBpc19pbWFfZW5hYmxlZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgdHdl YWtfaW1wb3J0ZWRfZmlsZV9pbmZvICg6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZm aWxlX2luZm8pIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBpc19maWxlX2ZpbHRlcmVkICg6OnJ1 c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8p IGNvbnN0OwotKyAgdm9pZCB0cmFuc2xhdGVfdG9fdG1wZmlsZXNfZW50cnkgKDo6cnVzdDo6U3Ry IGFic19wYXRoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0 cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBu YW1lKTsKLSsgIGJvb2wgaGFzX3RtcGZpbGVzX2VudHJpZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlN0cmluZyBzZXJpYWxpemVfdG1wZmlsZXNfY29udGVudCAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIH5ScG1JbXBvcnRlciAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJp ZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxp Z24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3Rk OjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxp Z24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlcgotQEAgLTEyNjQsNzMgKzE0MjIsODEgQEAgc3RydWN0 IFJwbUltcG9ydGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLSAjZGVmaW5lIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5RW50cnkKLSAvLyBBIGhpc3Rvcnkg ZW50cnkgaW4gdGhlIGpvdXJuYWwuIEl0IG1heSByZXByZXNlbnQgbXVsdGlwbGUgY29uc2VjdXRp dmUgYm9vdHMKLSAvLyBpbnRvIHRoZSBzYW1lIGRlcGxveW1lbnQuIFRoaXMgc3RydWN0IGlzIGV4 cG9zZWQgZGlyZWN0bHkgdmlhIEZGSSB0byBDLgotLXN0cnVjdCBIaXN0b3J5RW50cnkgZmluYWwg ewotK3N0cnVjdCBIaXN0b3J5RW50cnkgZmluYWwKLSt7Ci0gICAvLyBUaGUgZGVwbG95bWVudCBy b290IHRpbWVzdGFtcC4KLS0gIDo6c3RkOjp1aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENYWF9E RUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGRlcGxveV90aW1lc3RhbXAgQ1hY X0RFRkFVTFRfVkFMVUUgKDApOwotICAgLy8gVGhlIGNvbW1hbmQtbGluZSB0aGF0IHdhcyB1c2Vk IHRvIGNyZWF0ZSB0aGUgZGVwbG95bWVudCwgaWYgYW55LgotICAgOjpydXN0OjpTdHJpbmcgZGVw bG95X2NtZGxpbmU7Ci0gICAvLyBUaGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHRpbWVzIHRoZSBk ZXBsb3ltZW50IHdhcyBib290ZWQuCi0tICA6OnN0ZDo6dWludDY0X3QgYm9vdF9jb3VudCBDWFhf REVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBib290X2NvdW50IENYWF9ERUZB VUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSBmaXJzdCB0aW1lIHRoZSBkZXBsb3ltZW50IHdhcyBi b290ZWQgaWYgbXVsdGlwbGUgY29uc2VjdXRpdmUgdGltZXMuCi0tICA6OnN0ZDo6dWludDY0X3Qg Zmlyc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWlu dDY0X3QgZmlyc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotICAgLy8g VGhlIGxhc3QgdGltZSB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVkIGlmIG11bHRpcGxlIGNvbnNl Y3V0aXZlIHRpbWVzLgotLSAgOjpzdGQ6OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3RhbXAgQ1hY X0RFRkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgbGFzdF9ib290X3RpbWVzdGFt cCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0gICAvLyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG5vIG1v cmUgZW50cmllcy4KLS0gIGJvb2wgZW9mIENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKLSsgIGJv b2wgZW9mIENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0o SGlzdG9yeUVudHJ5IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvciE9 KEhpc3RvcnlFbnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9 PSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRv ciE9IChIaXN0b3J5RW50cnkgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0gICB1c2luZyBJc1Jl bG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUVudHJ5Ci0gCi0gI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUN0eAotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgKLS1zdHJ1Y3QgSGlzdG9yeUN0eCBmaW5hbCA6IHB1 YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5IG5l eHRfZW50cnkoKTsKLS0gIH5IaXN0b3J5Q3R4KCkgPSBkZWxldGU7Ci0rc3RydWN0IEhpc3RvcnlD dHggZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJwbW9zdHJlZWN4eDo6 SGlzdG9yeUVudHJ5IG5leHRfZW50cnkgKCk7Ci0rICB+SGlzdG9yeUN0eCAoKSA9IGRlbGV0ZTsK LSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91 dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3Rh dGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsg IHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3Rh dGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlm IC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4Ci0gCi0gI2lmbmRl ZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUKLSAjZGVmaW5lIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZQotLXN0cnVjdCBUb2tpb0hh bmRsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPiBlbnRlcigpIGNvbnN0IG5vZXhjZXB0OwotLSAg flRva2lvSGFuZGxlKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRva2lvSGFuZGxlIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRv a2lvRW50ZXJHdWFyZD4gZW50ZXIgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB+VG9raW9IYW5kbGUg KCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0g IHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNl cHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1 Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNl cHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsK LSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9IYW5k bGUKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0VudGVy R3VhcmQKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0VudGVy R3VhcmQKLS1zdHJ1Y3QgVG9raW9FbnRlckd1YXJkIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlIHsKLS0gIH5Ub2tpb0VudGVyR3VhcmQoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgVG9raW9FbnRl ckd1YXJkIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgflRva2lvRW50ZXJH dWFyZCAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0 OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBu b2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsg IHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBu b2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0g ICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tp b0VudGVyR3VhcmQKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVw b01ldGFkYXRhVGFyZ2V0Ci0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJl cG9NZXRhZGF0YVRhcmdldAotLWVudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6 OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4 X3QKLSt7Ci0gICBJbmxpbmUgPSAwLAotICAgRGV0YWNoZWQgPSAxLAotICAgRGlzYWJsZWQgPSAy LAotQEAgLTEzMzksNyArMTUwNSw4IEBAIGVudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDog OjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4 eCRBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1v c3RyZWVjeHgkQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0Ci0tZW51bSBjbGFzcyBBZHZpc29yaWVz TWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBjbGFzcyBBZHZpc29yaWVz TWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIElubGluZSA9IDAsCi0gICBE ZXRhY2hlZCA9IDEsCi0gICBEaXNhYmxlZCA9IDIsCi1AQCAtMTM0OCwzOSArMTUxNSw0MyBAQCBl bnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKLSAK LSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZWZzcGVjCi0gI2RlZmlu ZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVmc3BlYwotLXN0cnVjdCBSZWZzcGVj IGZpbmFsIHsKLStzdHJ1Y3QgUmVmc3BlYyBmaW5hbAotK3sKLSAgIDo6cnBtb3N0cmVlY3h4OjpS ZWZzcGVjVHlwZSBraW5kOwotICAgOjpydXN0OjpTdHJpbmcgcmVmc3BlYzsKLSAKLS0gIGJvb2wg b3BlcmF0b3I9PShSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVy YXRvciE9KFJlZnNwZWMgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9y PT0gKFJlZnNwZWMgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0g KFJlZnNwZWMgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0gICB1c2luZyBJc1JlbG9jYXRhYmxl ID0gOjpzdGQ6OnRydWVfdHlwZTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUmVmc3BlYwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJl ZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50VHlwZQotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3Jw bW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50VHlwZQotLWVudW0gY2xhc3MgT3ZlcnJpZGVS ZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBjbGFzcyBPdmVycmlkZVJl cGxhY2VtZW50VHlwZSA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgUmVwbyA9IDAsCi0gfTsKLSAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50 VHlwZQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVy cmlkZVJlcGxhY2VtZW50Ci0tc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnQgZmluYWwgewotK3N0 cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50IGZpbmFsCi0rewotICAgOjpydXN0OjpTdHJpbmcgZnJv bTsKLSAgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50VHlwZSBmcm9tX2tpbmQ7 Ci0gICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXM7Ci0gCi0tICBib29sIG9w ZXJhdG9yPT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgb3BlcmF0b3IhPShPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNvbnN0IG5vZXhj ZXB0OwotKyAgYm9vbCBvcGVyYXRvcj09IChPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNv bnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvciE9IChPdmVycmlkZVJlcGxhY2VtZW50IGNv bnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0 cnVlX3R5cGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JE92ZXJyaWRlUmVwbGFjZW1lbnQKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3Ry ZWVjeHgkT3B0VXNyTG9jYWwKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgk T3B0VXNyTG9jYWwKLS1lbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3Qgewot K2VudW0gY2xhc3MgT3B0VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIFZhciA9IDAs Ci0gICBSb290ID0gMSwKLSAgIFN0YXRlT3ZlcmxheSA9IDIsCi1AQCAtMTM4OSwxMjUgKzE1NjAs MTMxIEBAIGVudW0gY2xhc3MgT3B0VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0gI2lm bmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKLSAjZGVmaW5lIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUcmVlZmlsZQotLXN0cnVjdCBUcmVlZmlsZSBm aW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlN0ciBnZXRfd29ya2Rp cigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpzdGQ6OmludDMyX3QgZ2V0X3Bhc3N3ZF9mZCgpIG5v ZXhjZXB0OwotLSAgOjpzdGQ6OmludDMyX3QgZ2V0X2dyb3VwX2ZkKCkgbm9leGNlcHQ7Ci0tICA6 OnJ1c3Q6OlN0cmluZyBnZXRfanNvbl9zdHJpbmcoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5 ZXJzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X2FsbF9vc3RyZWVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X3JlcG9zKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6 OlN0cmluZyByZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCgpIGNvbnN0OwotLSAgYm9v bCBhZGRfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29s IGFsbG93X2V4aXN0aW5nKTsKLS0gIGJvb2wgaGFzX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX3BhY2thZ2VzKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBib29sIGFkZF9sb2NhbF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwotLSAgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKSBjb25z dCBub2V4Y2VwdDsKLS0gIGJvb2wgYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwot LSAgYm9vbCByZW1vdmVfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2th Z2VzLCBib29sIGFsbG93X25vZW50KTsKLS0gIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpP dmVycmlkZVJlcGxhY2VtZW50PiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgpIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgpIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSg6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQ7Ci0tICBi b29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UoOjpydXN0OjpTdHIgcGFja2FnZSkg bm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292 ZXJyaWRlX3JlcGxhY2VfbG9jYWwoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgYWRkX3BhY2th Z2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBh Y2thZ2VzKTsKLS0gIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6 OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2 b2lkIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzKTsKLS0gIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlKDo6 cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotLSAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJp ZGVfcmVtb3ZlX25hbWUoOjpydXN0OjpTdHIgbmFtZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IHJlbW92ZV9hbGxfb3ZlcnJpZGVzKCkgbm9leGNlcHQ7Ci0tICBib29sIHJlbW92ZV9hbGxfcGFj a2FnZXMoKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXhj bHVkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgZ2V0X3Bs YXRmb3JtX21vZHVsZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9pbnN0YWxsX2xhbmdzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0 cmluZyBmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NrZmlsZV9yZXBvcygpIGNvbnN0IG5vZXhj ZXB0OwotLSAgOjpydXN0OjpTdHIgZ2V0X3JlZigpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBn ZXRfY2xpd3JhcCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9jbGl3cmFwX2JpbmFyaWVzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIHNldF9j bGl3cmFwKGJvb2wgZW5hYmxlZCkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X2NvbnRhaW5lcl9jbWQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X3Jl YWRvbmx5X2V4ZWN1dGFibGVzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9kb2N1bWVu dGF0aW9uKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9yZWNvbW1lbmRzKCkgY29uc3Qg bm9leGNlcHQ7Ci0tICBib29sIGdldF9zZWxpbnV4KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IGdldF9zeXN1c2Vyc19pc19mb3JjZWQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6c3RkOjp1aW50 MzJfdCBnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1 c3Q6OlN0cmluZyBnZXRfZ3BnX2tleSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJp bmcgZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBnZXRfY29udGFpbmVyKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9tYWNoaW5laWRf Y29tcGF0KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X2V0Y19ncm91cF9tZW1iZXJzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9ib290 X2xvY2F0aW9uX2lzX21vZHVsZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgdXNlX2tlcm5l bF9pbnN0YWxsKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9pbWEoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9yZWxlYXNldmVyKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICA6OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0IGdldF9yZXBvX21ldGFkYXRh X3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNN ZXRhZGF0YVRhcmdldCBnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIGJvb2wgcnBtZGJfYmFja2VuZF9pc190YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsK LS0gIGJvb2wgc2hvdWxkX25vcm1hbGl6ZV9ycG1kYigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy cG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsIGdldF9vcHRfdXNybG9jYWwoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4 KDo6cnVzdDo6U3RyIHBhY2thZ2UpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcg Z2V0X2NoZWNrc3VtKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25z dDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9vc3RyZWVfcmVmKCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICA6OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gZ2V0X3Jl cG9fcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgY2xlYXJfcmVwb19wYWNrYWdl cygpIG5vZXhjZXB0OwotLSAgdm9pZCBwcmV0dHlwcmludF9qc29uX3N0ZG91dCgpIGNvbnN0IG5v ZXhjZXB0OwotLSAgdm9pZCBwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncygpIGNvbnN0IG5vZXhj ZXB0OwotLSAgdm9pZCBwcmludF9leHBlcmltZW50YWxfbm90aWNlcygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgdm9pZCBzYW5pdHljaGVja19leHRlcm5hbHMoKSBjb25zdDsKLS0gIDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiBpbXBvcnRlcl9mbGFncyg6OnJ1c3Q6 OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyB3cml0ZV9y ZXBvdmFycyg6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0OwotLSAgdm9pZCBz ZXRfcmVsZWFzZXZlcig6OnJ1c3Q6OlN0ciByZWxlYXNldmVyKTsKLS0gIHZvaWQgc2V0X3JlY29t bWVuZHMoYm9vbCB2YWwpOwotLSAgdm9pZCBlbmFibGVfcmVwbyg6OnJ1c3Q6OlN0ciByZXBvKTsK LS0gIHZvaWQgZGlzYWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pOwotLSAgdm9pZCB2YWxpZGF0 ZV9mb3JfY29udGFpbmVyKCkgY29uc3Q7Ci0tICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyBnZXRf YmFzZV9yZWZzcGVjKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIHJlYmFzZSg6OnJ1c3Q6OlN0 ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsIDo6cnVzdDo6U3Ry IGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcg Z2V0X29yaWdpbl9jdXN0b21fdXJsKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmlu ZyBnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy dXN0OjpTdHJpbmcgZ2V0X292ZXJyaWRlX2NvbW1pdCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9p ZCBzZXRfb3ZlcnJpZGVfY29tbWl0KDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKLS0g IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNv bnN0IG5vZXhjZXB0OwotLSAgYm9vbCBoYXNfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNvbnN0IG5v ZXhjZXB0OwotLSAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQ7Ci0tICBib29sIGluaXRyYW1mc19ldGNfZmls ZXNfdW50cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0Owot LSAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsKCkgbm9leGNlcHQ7Ci0tICBi b29sIGdldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbml0cmFtZnNfYXJncygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgdm9pZCBzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBn ZXRfdW5jb25maWd1cmVkX3N0YXRlKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG1heV9yZXF1 aXJlX2xvY2FsX2Fzc2VtYmx5KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGhhc19hbnlfcGFj a2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgbWVyZ2VfdHJlZWZpbGUoOjpydXN0OjpT dHIgdHJlZWZpbGUpOwotLSAgYm9vbCBnZXRfbm9faW5pdHJhbWZzKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICB+VHJlZWZpbGUoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgVHJlZWZpbGUgZmluYWwgOiBwdWJs aWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlN0ciBnZXRfd29ya2RpciAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIDo6c3RkOjppbnQzMl90IGdldF9wYXNzd2RfZmQgKCkgbm9leGNlcHQ7 Ci0rICA6OnN0ZDo6aW50MzJfdCBnZXRfZ3JvdXBfZmQgKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OlN0cmluZyBnZXRfanNvbl9zdHJpbmcgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zdHJlZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMg KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2Fs bF9vc3RyZWVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9yZXBvcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OlN0cmluZyByZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCAoKSBjb25zdDsKLSsgIGJv b2wgYWRkX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJv b2wgYWxsb3dfZXhpc3RpbmcpOwotKyAgYm9vbCBoYXNfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX3BhY2thZ2VzICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBhZGRfbG9jYWxfcGFja2FnZXMgKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7Ci0rICA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdl cyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0 aW5nKTsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfbm9lbnQpOwotKyAgOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNl ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFj ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxh Y2UgKDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4 Y2VwdDsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZSAoOjpydXN0OjpT dHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2 b2lkIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gcGFja2FnZXMpOwotKyAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9y ZXBsYWNlX2xvY2FsICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgdm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpOwotKyAgYm9vbCByZW1vdmVfcGFja2FnZV9v dmVycmlkZV9yZW1vdmUgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotKyAgYm9vbCBo YXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUgKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0 IG5vZXhjZXB0OwotKyAgYm9vbCByZW1vdmVfYWxsX292ZXJyaWRlcyAoKSBub2V4Y2VwdDsKLSsg IGJvb2wgcmVtb3ZlX2FsbF9wYWNrYWdlcyAoKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfZXhjbHVkZV9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6U3RyaW5nIGdldF9wbGF0Zm9ybV9tb2R1bGUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luc3RhbGxfbGFuZ3MgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybyAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9j a2ZpbGVfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0ciBnZXRfcmVmICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfY2xpd3JhcCAoKSBjb25zdCBub2V4Y2VwdDsK LSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfY2xpd3JhcF9iaW5hcmllcyAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0X2NsaXdyYXAgKGJvb2wgZW5hYmxlZCkgbm9leGNl cHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2NvbnRhaW5lcl9jbWQgKCkg Y29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9yZWFkb25seV9leGVjdXRhYmxlcyAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2RvY3VtZW50YXRpb24gKCkgY29uc3Qgbm9leGNlcHQ7 Ci0rICBib29sIGdldF9yZWNvbW1lbmRzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRf c2VsaW51eCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X3N5c3VzZXJzX2lzX2ZvcmNl ZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6c3RkOjp1aW50MzJfdCBnZXRfc2VsaW51eF9sYWJl bF92ZXJzaW9uICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2dwZ19r ZXkgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfYXV0b21hdGljX3Zl cnNpb25fc3VmZml4ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfY29udGFpbmVyICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfbWFjaGluZWlkX2NvbXBhdCAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXRjX2dyb3VwX21l bWJlcnMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9ib290X2xvY2F0aW9uX2lzX21v ZHVsZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2ltYSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6 cnVzdDo6U3RyaW5nIGdldF9yZWxlYXNldmVyICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpycG1v c3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQgKCkg Y29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRhVGFy Z2V0IGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IGJvb2wgcnBtZGJfYmFja2VuZF9pc190YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29s IHNob3VsZF9ub3JtYWxpemVfcnBtZGIgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJl ZWN4eDo6T3B0VXNyTG9jYWwgZ2V0X29wdF91c3Jsb2NhbCAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4ICg6OnJ1 c3Q6OlN0ciBwYWNrYWdlKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9j aGVja3N1bSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIGNvbnN0Owot KyAgOjpydXN0OjpTdHJpbmcgZ2V0X29zdHJlZV9yZWYgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6 OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gZ2V0X3JlcG9f cGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIGNsZWFyX3JlcG9fcGFja2FnZXMg KCkgbm9leGNlcHQ7Ci0rICB2b2lkIHByZXR0eXByaW50X2pzb25fc3Rkb3V0ICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgdm9pZCBwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncyAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIHZvaWQgcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICB2b2lkIHNhbml0eWNoZWNrX2V4dGVybmFscyAoKSBjb25zdDsKLSsgIDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPgotKyAgaW1wb3J0ZXJfZmxhZ3Mg KDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5n IHdyaXRlX3JlcG92YXJzICg6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0Owot KyAgdm9pZCBzZXRfcmVsZWFzZXZlciAoOjpydXN0OjpTdHIgcmVsZWFzZXZlcik7Ci0rICB2b2lk IHNldF9yZWNvbW1lbmRzIChib29sIHZhbCk7Ci0rICB2b2lkIGVuYWJsZV9yZXBvICg6OnJ1c3Q6 OlN0ciByZXBvKTsKLSsgIHZvaWQgZGlzYWJsZV9yZXBvICg6OnJ1c3Q6OlN0ciByZXBvKTsKLSsg IHZvaWQgdmFsaWRhdGVfZm9yX2NvbnRhaW5lciAoKSBjb25zdDsKLSsgIDo6cnBtb3N0cmVlY3h4 OjpSZWZzcGVjIGdldF9iYXNlX3JlZnNwZWMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHJl YmFzZSAoOjpydXN0OjpTdHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5f dXJsLAotKyAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRp b24pIG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fdXJsICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fZGVz Y3JpcHRpb24gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3ZlcnJp ZGVfY29tbWl0ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBzZXRfb3ZlcnJpZGVfY29tbWl0 ICg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBi b29sIGhhc19pbml0cmFtZnNfZXRjX2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBp bml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmls ZXMpIG5vZXhjZXB0OwotKyAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2sgKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQ7Ci0rICBib29sIGluaXRyYW1m c19ldGNfZmlsZXNfdW50cmFja19hbGwgKCkgbm9leGNlcHQ7Ci0rICBib29sIGdldF9pbml0cmFt ZnNfcmVnZW5lcmF0ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2FyZ3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHNl dF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gYXJncykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfdW5jb25maWd1 cmVkX3N0YXRlICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBtYXlfcmVxdWlyZV9sb2NhbF9h c3NlbWJseSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaGFzX2FueV9wYWNrYWdlcyAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgbWVyZ2VfdHJlZWZpbGUgKDo6cnVzdDo6U3RyIHRyZWVm aWxlKTsKLSsgIGJvb2wgZ2V0X25vX2luaXRyYW1mcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIH5U cmVlZmlsZSAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5 b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUo KSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsK LSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAo KSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7 Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRU cmVlZmlsZQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9Q YWNrYWdlCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2th Z2UKLS1zdHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewot LSAgOjpydXN0OjpTdHIgZ2V0X3JlcG8oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIH5SZXBv UGFja2FnZSgpID0gZGVsZXRlOwotK3N0cnVjdCBSZXBvUGFja2FnZSBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnVzdDo6U3RyIGdldF9yZXBvICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlcyAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIH5SZXBvUGFja2FnZSAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgot ICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGlj IDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQotQEAgLTE1MTcsNyArMTY5NCw4IEBAIHN0 cnVjdCBSZXBvUGFja2FnZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0gLy8gQSBj b3B5IG9mIExpdmVGc1N0YXRlIHRoYXQgaXMgYnJpZGdlZCB0byBDKys7IHRoZSBtYWluCi0gLy8g Y2hhbmdlIGhlcmUgaXMgd2UgY2FuJ3QgdXNlIE9wdGlvbjw+IHlldCwgc28gZW1wdHkgdmFsdWVz Ci0gLy8gYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBlbXB0eSBzdHJpbmcuCi0tc3RydWN0IExpdmVB cHBseVN0YXRlIGZpbmFsIHsKLStzdHJ1Y3QgTGl2ZUFwcGx5U3RhdGUgZmluYWwKLSt7Ci0gICA6 OnJ1c3Q6OlN0cmluZyBpbnByb2dyZXNzOwotICAgOjpydXN0OjpTdHJpbmcgY29tbWl0OwotIAot QEAgLTE1MjcsNjQgKzE3MDUsNzIgQEAgc3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsIHsKLSAK LSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2REQgotICNkZWZp bmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZERCCi0tc3RydWN0IFBhc3N3 ZERCIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6U3RyaW5nIGxv b2t1cF91c2VyKDo6c3RkOjp1aW50MzJfdCB1aWQpIGNvbnN0OwotLSAgOjpydXN0OjpTdHJpbmcg bG9va3VwX2dyb3VwKDo6c3RkOjp1aW50MzJfdCBnaWQpIGNvbnN0OwotLSAgflBhc3N3ZERCKCkg PSBkZWxldGU7Ci0rc3RydWN0IFBhc3N3ZERCIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVl Ci0rewotKyAgOjpydXN0OjpTdHJpbmcgbG9va3VwX3VzZXIgKDo6c3RkOjp1aW50MzJfdCB1aWQp IGNvbnN0OwotKyAgOjpydXN0OjpTdHJpbmcgbG9va3VwX2dyb3VwICg6OnN0ZDo6dWludDMyX3Qg Z2lkKSBjb25zdDsKLSsgIH5QYXNzd2REQiAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAg ZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6 OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg YWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6 c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg YWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRQYXNzd2REQgotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3Jw bW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzCi0tc3RydWN0IFBhc3N3ZEVudHJpZXMgZmluYWwgOiBw dWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgdm9pZCBhZGRfZ3JvdXBfY29udGVudCg6OnN0ZDo6 aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOwotLSAgdm9pZCBhZGRfcGFzc3dkX2Nv bnRlbnQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLS0gIGJvb2wg Y29udGFpbnNfZ3JvdXAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IGNvbnRhaW5zX3VzZXIoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnN0 ZDo6dWludDMyX3QgbG9va3VwX3VzZXJfaWQoOjpydXN0OjpTdHIgdXNlcikgY29uc3Q7Ci0tICA6 OnN0ZDo6dWludDMyX3QgbG9va3VwX2dyb3VwX2lkKDo6cnVzdDo6U3RyIGdyb3VwKSBjb25zdDsK LS0gIH5QYXNzd2RFbnRyaWVzKCkgPSBkZWxldGU7Ci0rc3RydWN0IFBhc3N3ZEVudHJpZXMgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICB2b2lkIGFkZF9ncm91cF9jb250ZW50 ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOwotKyAgdm9pZCBhZGRf cGFzc3dkX2NvbnRlbnQgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7 Ci0rICBib29sIGNvbnRhaW5zX2dyb3VwICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGJvb2wgY29udGFpbnNfdXNlciAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNl cHQ7Ci0rICA6OnN0ZDo6dWludDMyX3QgbG9va3VwX3VzZXJfaWQgKDo6cnVzdDo6U3RyIHVzZXIp IGNvbnN0OwotKyAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1cF9ncm91cF9pZCAoOjpydXN0OjpTdHIg Z3JvdXApIGNvbnN0OwotKyAgflBhc3N3ZEVudHJpZXMgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0 ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBz dGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcwotIAotICNpZm5kZWYgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMKLSAjZGVmaW5lIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRFeHRlbnNpb25zCi0tc3RydWN0IEV4dGVuc2lvbnMgZmluYWwg OiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9yZXBvcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9vc19leHRlbnNpb25fcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMoKSBjb25zdCBu b2V4Y2VwdDsKLS0gIGJvb2wgc3RhdGVfY2hlY2tzdW1fY2hhbmdlZCg6OnJ1c3Q6OlN0ciBjaGtz dW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotLSAgdm9pZCB1cGRhdGVfc3RhdGVf Y2hlY2tzdW0oOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25z dDsKLS0gIHZvaWQgc2VyaWFsaXplX3RvX2Rpcig6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25z dDsKLS0gIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gZ2VuZXJhdGVfdHJl ZWZpbGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0OwotLSAgfkV4 dGVuc2lvbnMoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgRXh0ZW5zaW9ucyBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVw b3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X29zX2V4dGVuc2lvbl9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQgKDo6cnVzdDo6U3RyIGNoa3N1bSwg OjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7Ci0rICB2b2lkIHVwZGF0ZV9zdGF0ZV9jaGVj a3N1bSAoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsK LSsgIHZvaWQgc2VyaWFsaXplX3RvX2RpciAoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7 Ci0rICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Ci0rICBnZW5lcmF0ZV90 cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0OwotKyAg fkV4dGVuc2lvbnMgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6 OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBz aXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNl cHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNp emUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhj ZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkRXh0ZW5zaW9ucwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JExvY2tlZFBhY2thZ2UKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRM b2NrZWRQYWNrYWdlCi0tc3RydWN0IExvY2tlZFBhY2thZ2UgZmluYWwgewotK3N0cnVjdCBMb2Nr ZWRQYWNrYWdlIGZpbmFsCi0rewotICAgOjpydXN0OjpTdHJpbmcgbmFtZTsKLSAgIDo6cnVzdDo6 U3RyaW5nIGV2cjsKLSAgIDo6cnVzdDo6U3RyaW5nIGFyY2g7Ci1AQCAtMTU5NiwyOTIgKzE3ODIs MzY3IEBAIHN0cnVjdCBMb2NrZWRQYWNrYWdlIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURH RTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZwotICNkZWZpbmUgQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnCi0tc3RydWN0IExvY2tmaWxlQ29u ZmlnIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiBnZXRfbG9ja2VkX3BhY2thZ2VzKCkgY29uc3Q7Ci0t ICB+TG9ja2ZpbGVDb25maWcoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgTG9ja2ZpbGVDb25maWcgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJl ZWN4eDo6TG9ja2VkUGFja2FnZT4gZ2V0X2xvY2tlZF9wYWNrYWdlcyAoKSBjb25zdDsKLSsgIH5M b2NrZmlsZUNvbmZpZyAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVz dDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4 Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg c2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9l eGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRMb2NrZmlsZUNvbmZpZwotIAotLXN0YXRpY19hc3NlcnQoOjpzdGQ6OmlzX2VudW08UnBt T3N0cmVlRGlmZlByaW50Rm9ybWF0Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Ci0tc3RhdGlj X2Fzc2VydChzaXplb2YoUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0KSA9PSBzaXplb2YoOjpzdGQ6 OnVpbnQ4X3QpLCAiaW5jb3JyZWN0IHNpemUiKTsKLS1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0 PDo6c3RkOjp1aW50OF90PihScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZG X1BSSU5UX0ZPUk1BVF9TVU1NQVJZKSA9PSAwLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGlu ICNbY3h4OjpicmlkZ2VdIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWlu dDhfdD4oUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JN QVRfRlVMTF9BTElHTkVEKSA9PSAxLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4 OjpicmlkZ2VdIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4o UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVM TF9NVUxUSUxJTkUpID09IDIsICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJy aWRnZV0iKTsKLStzdGF0aWNfYXNzZXJ0ICg6OnN0ZDo6aXNfZW51bTxScG1Pc3RyZWVEaWZmUHJp bnRGb3JtYXQ+Ojp2YWx1ZSwgImV4cGVjdGVkIGVudW0iKTsKLStzdGF0aWNfYXNzZXJ0IChzaXpl b2YgKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCkgPT0gc2l6ZW9mICg6OnN0ZDo6dWludDhfdCks ICJpbmNvcnJlY3Qgc2l6ZSIpOwotK3N0YXRpY19hc3NlcnQgKAotKyAgICBzdGF0aWNfY2FzdDw6 OnN0ZDo6dWludDhfdD4gKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZf UFJJTlRfRk9STUFUX1NVTU1BUlkpCi0rICAgICAgICA9PSAwLAotKyAgICAiZGlzYWdyZWVzIHdp dGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Ci0rc3RhdGljX2Fzc2VydCAoCi0rICAg IHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PiAoUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpS UE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9BTElHTkVEKQotKyAgICAgICAgPT0gMSwK LSsgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOwotK3N0 YXRpY19hc3NlcnQgKHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PiAoCi0rICAgICAgICAgICAg ICAgICAgIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9S TUFUX0ZVTExfTVVMVElMSU5FKQotKyAgICAgICAgICAgICAgICAgICA9PSAyLAotKyAgICAgICAg ICAgICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKLSsK LStib29sIGlzX2JhcmVfc3BsaXRfeGF0dHJzICgpOwotIAotLWJvb2wgaXNfYmFyZV9zcGxpdF94 YXR0cnMoKTsKLStib29sIGlzX2h0dHBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0Owot IAotLWJvb2wgaXNfaHR0cF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLStib29sIGlz X29zdHJlZV9jb250YWluZXIgKCk7Ci0gCi0tYm9vbCBpc19vc3RyZWVfY29udGFpbmVyKCk7Ci0r OjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIGdldF9zeXN0ZW1faG9zdF90eXBlICgpOwot IAotLTo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSBnZXRfc3lzdGVtX2hvc3RfdHlwZSgp OwotK3ZvaWQgcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlICg6OnJwbW9zdHJlZWN4eDo6U3lzdGVt SG9zdFR5cGUgdCk7Ci0gCi0tdm9pZCByZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUoOjpycG1vc3Ry ZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpOwotK2Jvb2wgaXNfcnBtX2FyZyAoOjpydXN0OjpTdHIg YXJnKSBub2V4Y2VwdDsKLSAKLS1ib29sIGlzX3JwbV9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4 Y2VwdDsKLSt2b2lkIGNsaWVudF9zdGFydF9kYWVtb24gKCk7Ci0gCi0tdm9pZCBjbGllbnRfc3Rh cnRfZGFlbW9uKCk7Ci0rOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGNsaWVudF9oYW5kbGVf ZmRfYXJndW1lbnQgKDo6cnVzdDo6U3RyIGFyZywgOjpydXN0OjpTdHIgYXJjaCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19y ZXBsYWNlKTsKLSAKLS06OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gY2xpZW50X2hhbmRsZV9m ZF9hcmd1bWVudCg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVw bGFjZSk7Ci0rOjpydXN0OjpTdHJpbmcgY2xpZW50X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyAo OjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZwcm9ncmVzcykgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpTdHJpbmcgY2xpZW50X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyg6OnJwbW9zdHJl ZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnByb2dyZXNzKSBub2V4Y2VwdDsKLStib29sIHJ1bm5pbmdf aW5fY29udGFpbmVyICgpIG5vZXhjZXB0OwotIAotLWJvb2wgcnVubmluZ19pbl9jb250YWluZXIo KSBub2V4Y2VwdDsKLStib29sIGNvbmZpcm0gKCk7Ci0gCi0tYm9vbCBjb25maXJtKCk7Ci0rdm9p ZCBjb25maXJtX29yX2Fib3J0ICgpOwotIAotLXZvaWQgY29uZmlybV9vcl9hYm9ydCgpOwotK3Zv aWQgYnViYmxld3JhcF9zZWxmdGVzdCAoKTsKLSAKLS12b2lkIGJ1YmJsZXdyYXBfc2VsZnRlc3Qo KTsKLSs6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4gYnViYmxld3JhcF9ydW5fc3luYyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s IGNhcHR1cmVfc3Rkb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0 eSk7Ci0gCi0tOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+IGJ1YmJsZXdyYXBfcnVuX3N5bmMo OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNv bnN0ICZhcmdzLCBib29sIGNhcHR1cmVfc3Rkb3V0LCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cE11dGFiaWxpdHkgbXV0YWJpbGl0eSk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXA+IGJ1YmJsZXdyYXBfbmV3ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQpOwotIAot LTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFwX25ldyg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZmQpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwPgotK2J1YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eSAoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2ZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpOwotIAotLTo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFwX25ld193aXRoX211dGFiaWxp dHkoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11 dGFiaWxpdHkgbXV0YWJpbGl0eSk7Ci0rOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmls aXR5IG11dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29yZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhj ZXB0OwotIAotLTo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5 X2Zvcl91bmlmaWVkX2NvcmUoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OwotK3ZvaWQgdXNy b3ZlcmxheV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFy Z3MpOwotIAotLXZvaWQgdXNyb3ZlcmxheV9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBjb25zdCAmYXJncyk7Ci0rdm9pZCBhcHBseWxpdmVfZW50cnlwb2ludCAoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKTsKLSAKLS12b2lkIGFwcGx5bGl2ZV9l bnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncyk7Ci0rdm9p ZCBhcHBseWxpdmVfZmluaXNoICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAm c3lzcm9vdCk7Ci0gCi0tdm9pZCBhcHBseWxpdmVfZmluaXNoKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKLSt2b2lkIGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVw X2Rldl9hbmRfcnVuICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKLSAKLS12b2lkIGNvbXBv c2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQp OwotK3ZvaWQgcHJpbnRfb3N0cmVlX3R4bl9zdGF0cyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJl cG9UcmFuc2FjdGlvblN0YXRzICZzdGF0cykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBwcmludF9vc3Ry ZWVfdHhuX3N0YXRzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAm c3RhdHMpIG5vZXhjZXB0OwotK3ZvaWQgd3JpdGVfY29tbWl0X2lkICg6OnJ1c3Q6OlN0ciB0YXJn ZXRfcGF0aCwgOjpydXN0OjpTdHIgcmV2aXNpb24pOwotIAotLXZvaWQgd3JpdGVfY29tbWl0X2lk KDo6cnVzdDo6U3RyIHRhcmdldF9wYXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbik7Ci0rdm9pZCBj bGl3cmFwX3dyaXRlX3dyYXBwZXJzICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotIAotLXZvaWQg Y2xpd3JhcF93cml0ZV93cmFwcGVycyg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotK3ZvaWQgY2xp d3JhcF93cml0ZV9zb21lX3dyYXBwZXJzICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncyk7Ci0gCi0tdm9pZCBjbGl3cmFwX3dyaXRl X3NvbWVfd3JhcHBlcnMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gY29uc3QgJmFyZ3MpOwotKzo6cnVzdDo6U3RyaW5nIGNsaXdyYXBfZGVzdGRpciAo KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OlN0cmluZyBjbGl3cmFwX2Rlc3RkaXIoKSBub2V4Y2Vw dDsKLSt2b2lkIGNvbnRhaW5lcl9lbmNhcHN1bGF0ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGFyZ3MpOwotIAotLXZvaWQgY29udGFpbmVyX2VuY2Fwc3VsYXRlKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBhcmdzKTsKLSt2b2lkIGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCAo OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOwotIAotLXZvaWQgZGVwbG95X2Zyb21f c2VsZl9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKLSs6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4KLStwdWxsX2NvbnRh aW5lciAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAgICAg ICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6 OnJ1c3Q6OlN0ciBpbWdyZWYsCi0rICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRpZ2VzdF9v dmVycmlkZSk7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdl U3RhdGU+IHB1bGxfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpy dXN0OjpTdHIgaW1ncmVmLCA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpOwotKzo6cnBtb3N0 cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvIGNvbnRhaW5lcl9wcnVuZSAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOwotIAotLTo6cnBtb3N0cmVlY3h4OjpQ cnVuZWRDb250YWluZXJJbmZvIGNvbnRhaW5lcl9wcnVuZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl U3lzcm9vdCBjb25zdCAmc3lzcm9vdCk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNv bnRhaW5lckltYWdlU3RhdGU+Ci0rcXVlcnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCAoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGMpOwotIAotLTo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBxdWVyeV9jb250 YWluZXJfaW1hZ2VfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LCA6OnJ1c3Q6OlN0ciBjKTsKLSt2b2lkIHB1cmdlX3JlZnNwZWMgKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKTsKLSAKLS12b2lkIHB1 cmdlX3JlZnNwZWMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVz dDo6U3RyIHJlZnNwZWMpOwotK2Jvb2wgY2hlY2tfY29udGFpbmVyX3VwZGF0ZSAoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpy dXN0OjpTdHIgaW1ncmVmKTsKLSAKLS1ib29sIGNoZWNrX2NvbnRhaW5lcl91cGRhdGUoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYpOwotKzo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+IHByZXBhcmVfdGVtcGV0Y19ndWFyZCAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VGVtcEV0Y0d1YXJkPiBwcmVwYXJlX3RlbXBldGNfZ3VhcmQoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KTsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+Ci0r cHJlcGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwot IAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD4gcHJl cGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Ci0rdm9p ZCBydW5fZGVwbW9kICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlN0ciBrdmVy LCBib29sIHVuaWZpZWRfY29yZSk7Ci0gCi0tdm9pZCBydW5fZGVwbW9kKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsIDo6cnVzdDo6U3RyIGt2ZXIsIGJvb2wgdW5pZmllZF9jb3JlKTsKLSt2b2lk IHJ1bl9zeXN1c2VycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSk7Ci0g Ci0tdm9pZCBydW5fc3lzdXNlcnMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3Jj ZSk7Ci0rdm9pZCBsb2dfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm dGYpIG5vZXhjZXB0OwotIAotLXZvaWQgbG9nX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmdGYpIG5vZXhjZXB0OwotK2Jvb2wgaXNfY29udGFpbmVyX2ltYWdlX3JlZmVy ZW5jZSAoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQ7Ci0gCi0tYm9vbCBpc19jb250YWlu ZXJfaW1hZ2VfcmVmZXJlbmNlKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotK2Jvb2wg aXNfY29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMp IG5vZXhjZXB0OwotIAotLWJvb2wgaXNfY29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2Uo OjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQ7Ci0rOjpycG1vc3RyZWVjeHg6OlJlZnNwZWNU eXBlIHJlZnNwZWNfY2xhc3NpZnkgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotIAot LTo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSByZWZzcGVjX2NsYXNzaWZ5KDo6cnVzdDo6U3Ry IHJlZnNwZWMpIG5vZXhjZXB0OwotK3ZvaWQgdmVyaWZ5X2tlcm5lbF9obWFjICg6OnN0ZDo6aW50 MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIG1vZGRpcik7Ci0gCi0tdm9pZCB2ZXJpZnlfa2VybmVs X2htYWMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBtb2RkaXIpOwotKzo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBzdGFnZV9jb250YWluZXJfcnBtcyAoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IHJwbXMpOwotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBz dGFnZV9jb250YWluZXJfcnBtcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcnBtcyk7Ci0r OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcyAo OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGZkcyk7Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2Zkcyg6OnJ1c3Q6OlZlYzw6OnN0ZDo6 aW50MzJfdD4gZmRzKTsKLStib29sIGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3kgKDo6cnBt b3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVNlUG9saWN5IGNvbnN0ICZwb2xp Y3kpOwotIAotLWJvb2wgY29tbWl0X2hhc19tYXRjaGluZ19zZXBvbGljeSg6OnJwbW9zdHJlZWN4 eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVNlUG9saWN5 IGNvbnN0ICZwb2xpY3kpOwotKzo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqZ2V0X2hlYWRlcl92 YXJpYW50ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY2FjaGVi cmFuY2gpOwotIAotLTo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqZ2V0X2hlYWRlcl92YXJpYW50 KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjYWNo ZWJyYW5jaCk7Ci0rdm9pZCBjb21wb3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKLSAKLS12b2lkIGNvbXBvc2VfYnVpbGRf Y2h1bmtlZF9vY2lfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7 Ci0rdm9pZCBjb21wb3NlX2ltYWdlICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7 Ci0gCi0tdm9pZCBjb21wb3NlX2ltYWdlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdz KTsKLSt2b2lkIGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBhcmdzKTsKLSAKLS12b2lkIGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOwotK3ZvaWQgY29uZmlndXJlX2J1aWxkX3JlcG9f ZnJvbV90YXJnZXQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBv LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbyk7Ci0gCi0tdm9pZCBjb25maWd1cmVfYnVp bGRfcmVwb19mcm9tX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVp bGRfcmVwbywgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnRhcmdldF9yZXBvKTsK LSt2b2lkIGNvbXBvc2VfcHJlcGFyZV9yb290ZnMgKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNf ZGZkLCA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKTsKLSAKLS12b2lk IGNvbXBvc2VfcHJlcGFyZV9yb290ZnMoOjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6 c3RkOjppbnQzMl90IGRlc3Rfcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0 cmVlZmlsZSk7Ci0rdm9pZCBjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCk7Ci0gCi0tdm9pZCBjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxl cyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKLSt2b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3Mg KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJl ZWZpbGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuZXh0X3ZlcnNp b24sIGJvb2wgdW5pZmllZF9jb3JlKTsKLSAKLS12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3MoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmls ZSwgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBib29sIHVuaWZpZWRfY29yZSk7Ci0rdm9pZCBj b21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnRyZWVmaWxlKTsKLSAKLS12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmlu YWxfcHJlKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmdHJlZWZpbGUpOwotK3ZvaWQgY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpOwotIAotLXZvaWQgY29t cG9zZV9wb3N0cHJvY2Vzc19maW5hbCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKTsKLSt2b2lkIGNvbnZlcnRfdmFyX3Rv X3RtcGZpbGVzX2QgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSk7Ci0gCi0tdm9pZCBjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNl bGxhYmxlKTsKLSt2b2lkIHJvb3Rmc19wcmVwYXJlX2xpbmtzICg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2tpcF91c3Jsb2NhbCk7Ci0gCi0tdm9pZCByb290 ZnNfcHJlcGFyZV9saW5rcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLCBib29sIHNraXBfdXNybG9jYWwpOwotK3ZvaWQg d29ya2Fyb3VuZF9zZWxpbnV4X2Nyb3NzX2xhYmVsaW5nICg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSk7Ci0gCi0tdm9pZCB3b3JrYXJvdW5kX3Nl bGludXhfY3Jvc3NfbGFiZWxpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3Ry ZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpOwotK3ZvaWQgcG9zdHByb2Nlc3NfY2xl YW51cF9ycG1kYiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCk7Ci0gCi0tdm9pZCBwb3N0cHJv Y2Vzc19jbGVhbnVwX3JwbWRiKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOwotK3ZvaWQgcmV3 cml0ZV9ycG1kYl9mb3JfdGFyZ2V0ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIG5v cm1hbGl6ZSk7Ci0gCi0tdm9pZCByZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUpOwotKzo6c3RkOjp1aW50NjRfdCBkaXJlY3Rv cnlfc2l6ZSAoOjpzdGQ6OmludDMyX3QgZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOwot IAotLTo6c3RkOjp1aW50NjRfdCBkaXJlY3Rvcnlfc2l6ZSg6OnN0ZDo6aW50MzJfdCBkZmQsIDo6 cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKLSs6OnJwbW9z dHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9mb3JfaWQgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgZGVwbG95X2lkKTsKLSAKLS06 OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9mb3JfaWQoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCk7 Ci0rOjpydXN0OjpTdHJpbmcgZGVwbG95bWVudF9jaGVja3N1bV9mb3JfaWQgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpOwotIAotLTo6cnVzdDo6U3Ry aW5nIGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNy b290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpOwotKzo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50ICpkZXBsb3ltZW50X2dldF9iYXNlICg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgb3B0X29zX25hbWUpOwotIAotLTo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICpk ZXBsb3ltZW50X2dldF9iYXNlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290 LCA6OnJ1c3Q6OlN0ciBvcHRfZGVwbG95X2lkLCA6OnJ1c3Q6OlN0ciBvcHRfb3NfbmFtZSk7Ci0r Ym9vbCBkZXBsb3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmICg6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnREaWN0IGNvbnN0ICZkaWN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2Vw dDsKLSAKLS1ib29sIGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYoOjpycG1vc3RyZWVjeHg6 OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCwgOjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZl c3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2VwdDsKLSt2b2lkIGRhZW1vbl9zYW5pdHljaGVja19l bnZpcm9ubWVudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qp OwotIAotLXZvaWQgZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50KDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKLSs6OnJ1c3Q6OlN0cmluZyBkZXBsb3lt ZW50X2dlbmVyYXRlX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAm ZGVwbG95bWVudCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpTdHJpbmcgZGVwbG95bWVudF9nZW5l cmF0ZV9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVu dCkgbm9leGNlcHQ7Ci0rdm9pZCBkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQgKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAm ZGVwbG95bWVudCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCk7Ci0gCi0tdm9pZCBkZXBsb3ltZW50X3Bv cHVsYXRlX3ZhcmlhbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KTsKLSt2b2lkIGdlbmVyYXRl X2Jhc2VsYXllcl9yZWZzICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lz cm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7Ci0gCi0tdm9pZCBn ZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBt b3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKLSt2b2lkIHZhcmlh bnRfYWRkX3JlbW90ZV9zdGF0dXMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1bSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpOwotIAotLXZv aWQgdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYywgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1 bSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCk7Ci0rOjpycG1vc3Ry ZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YQotK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJv bV9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3lt ZW50LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpHVmFyaWFudCBjb25zdCAmY29tbWl0KTsKLSAKLS06OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVu dExheWVyZWRNZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4 OjpHVmFyaWFudCBjb25zdCAmY29tbWl0KTsKLSs6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExh eWVyZWRNZXRhCi0rZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkICg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKLSAKLS06 OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1l dGFfbG9hZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOwotKzo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIHBhcnNlX292ZXJyaWRlX3NvdXJjZSAoOjpy dXN0OjpTdHIgc291cmNlKTsKLSAKLS06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dFNvdXJjZSBwYXJzZV9vdmVycmlkZV9zb3VyY2UoOjpydXN0OjpTdHIgc291cmNlKTsKLSs6OnJw bW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24gcGFyc2VfcmV2aXNpb24gKDo6cnVzdDo6U3RyIHNv dXJjZSk7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlBhcnNlZFJldmlzaW9uIHBhcnNlX3JldmlzaW9u KDo6cnVzdDo6U3RyIHNvdXJjZSk7Ci0rOjpydXN0OjpTdHJpbmcgZ2VuZXJhdGVfb2JqZWN0X3Bh dGggKDo6cnVzdDo6U3RyIGJhc2UsIDo6cnVzdDo6U3RyIG5leHRfc2VnbWVudCk7Ci0gCi0tOjpy dXN0OjpTdHJpbmcgZ2VuZXJhdGVfb2JqZWN0X3BhdGgoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0 OjpTdHIgbmV4dF9zZWdtZW50KTsKLSt2b2lkIGZhaWxwb2ludCAoOjpydXN0OjpTdHIgcCk7Ci0g Ci0tdm9pZCBmYWlscG9pbnQoOjpydXN0OjpTdHIgcCk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+IHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkg bm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxh Z3M+IHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkoKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+Ci0rcnBtX2ltcG9ydGVyX25ldyAoOjpydXN0 OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gsCi0rICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJmZsYWdzKTsKLSAK LS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+IHJwbV9pbXBvcnRlcl9u ZXcoOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gsIDo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncyk7Ci0rOjpydXN0OjpTdHJp bmcgdG1wZmlsZXNfdHJhbnNsYXRlICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVj eHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7 Ci0gCi0tOjpydXN0OjpTdHJpbmcgdG1wZmlsZXNfdHJhbnNsYXRlKDo6cnVzdDo6U3RyIGFic19w YXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6 U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOwotK3ZvaWQgYXBwZW5kX2RyYWN1 dF9yYW5kb21fY3BpbyAoOjpzdGQ6OmludDMyX3QgZmQpOwotIAotLXZvaWQgYXBwZW5kX2RyYWN1 dF9yYW5kb21fY3Bpbyg6OnN0ZDo6aW50MzJfdCBmZCk7Ci0rOjpzdGQ6OmludDMyX3QgaW5pdHJh bWZzX292ZXJsYXlfZ2VuZXJhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAm ZmlsZXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBt b3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKTsKLSAKLS06OnN0ZDo6aW50MzJf dCBpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Y29uc3QgJmZpbGVzLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSk7 Ci0rdm9pZCBqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2VwdDsKLSAKLS12 b2lkIGpvdXJuYWxfcHJpbnRfc3RhZ2luZ19mYWlsdXJlKCkgbm9leGNlcHQ7Ci0rdm9pZCBjb25z b2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0t dm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2soOjpydXN0OjpTdHIgbXNnKSBub2V4Y2Vw dDsKLSt2b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fbl9pdGVtcyAoOjpydXN0OjpTdHIgbXNn LCA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBjb25zb2xlX3Byb2dyZXNz X2JlZ2luX25faXRlbXMoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNl cHQ7Ci0rdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQgKDo6cnVzdDo6U3RyIG1z Zykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQoOjpy dXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSt2b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3Nh Z2UgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBjb25zb2xlX3Byb2dyZXNz X3NldF9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0rdm9pZCBjb25zb2xlX3By b2dyZXNzX3NldF9zdWJfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSAKLS12 b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9l eGNlcHQ7Ci0rdm9pZCBjb25zb2xlX3Byb2dyZXNzX3VwZGF0ZSAoOjpzdGQ6OnVpbnQ2NF90IG4p IG5vZXhjZXB0OwotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc191cGRhdGUoOjpzdGQ6OnVpbnQ2 NF90IG4pIG5vZXhjZXB0OwotK3ZvaWQgY29uc29sZV9wcm9ncmVzc19lbmQgKDo6cnVzdDo6U3Ry IHN1ZmZpeCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBjb25zb2xlX3Byb2dyZXNzX2VuZCg6OnJ1c3Q6 OlN0ciBzdWZmaXgpIG5vZXhjZXB0OwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4PiBoaXN0b3J5X2N0eF9uZXcgKCk7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6Okhpc3RvcnlDdHg+IGhpc3RvcnlfY3R4X25ldygpOwotK3ZvaWQgaGlzdG9yeV9wcnVuZSAo KTsKLSAKLS12b2lkIGhpc3RvcnlfcHJ1bmUoKTsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VG9raW9IYW5kbGU+IHRva2lvX2hhbmRsZV9nZXQgKCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiB0b2tpb19oYW5kbGVfZ2V0KCkgbm9l eGNlcHQ7Ci0rYm9vbCBzY3JpcHRfaXNfaWdub3JlZCAoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6 OlN0ciBzY3JpcHQsIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdDsKLSAKLS1ib29s IHNjcmlwdF9pc19pZ25vcmVkKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBi b29sIHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQ7Ci0rdm9pZCB0ZXN0dXRpbHNfZW50cnlw b2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3YpOwotIAotLXZvaWQgdGVzdHV0 aWxzX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3YpOwotKzo6cnVz dDo6U3RyaW5nIG1heWJlX3NoZWxsX3F1b3RlICg6OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpTdHJpbmcgbWF5YmVfc2hlbGxfcXVvdGUoOjpydXN0OjpTdHIgaW5wdXQp IG5vZXhjZXB0OwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZp bGVfbmV3ICg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpOwotIAot LTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3KDo6cnVz dDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCk7Ci0rOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZW1wdHkgKCk7Ci0gCi0tOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZW1wdHkoKTsKLSs6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19mcm9tX3N0 cmluZyAoOjpydXN0OjpTdHIgYnVmLCBib29sIGNsaWVudCk7Ci0gCi0tOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcoOjpydXN0OjpT dHIgYnVmLCBib29sIGNsaWVudCk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPiB0cmVlZmlsZV9uZXdfY29tcG9zZSAoOjpydXN0OjpTdHIgZmlsZW5hbWUsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpTdHIgYmFzZWFyY2gpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4gdHJlZWZpbGVfbmV3X2NvbXBvc2UoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6 U3RyIGJhc2VhcmNoKTsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRy ZWVmaWxlX25ld19jbGllbnQgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIg YmFzZWFyY2gpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJl ZWZpbGVfbmV3X2NsaWVudCg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFy Y2gpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3 X2NsaWVudF9mcm9tX2V0YyAoOjpydXN0OjpTdHIgYmFzZWFyY2gpOwotIAotLTo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0Yyg6 OnJ1c3Q6OlN0ciBiYXNlYXJjaCk7Ci0rOjpzdGQ6OnVpbnQzMl90IHRyZWVmaWxlX2RlbGV0ZV9j bGllbnRfZXRjICgpOwotIAotLTo6c3RkOjp1aW50MzJfdCB0cmVlZmlsZV9kZWxldGVfY2xpZW50 X2V0YygpOwotKy8vIFJldHVybiB0aGUgbGlzdCBvZiByZXBvIGNvbmZpZ3VyYXRpb24gZGlyZWN0 b3JpZXMgdG8gc2VhcmNoCi0rLy8gKGUuZy4gWyIvZXRjL3l1bS5yZXBvcy5kIiwgIi91c3Ivc2hh cmUvZG5mNS9yZXBvcy5kIl0pLgotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVw b3NfZGlycyAoKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OlN0cmluZyB2YXJzdWJzdGl0dXRlKDo6 cnVzdDo6U3RyIHMsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBj b25zdCAmdmFycyk7Ci0rOjpydXN0OjpTdHJpbmcgdmFyc3Vic3RpdHV0ZSAoOjpydXN0OjpTdHIg cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJl ZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZhcnMpOwotIAotLTo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBnZXRfZmVhdHVyZXMoKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2ZlYXR1cmVzICgpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6U3RyaW5nIGdl dF9ycG1fYmFzZWFyY2goKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OlN0cmluZyBnZXRfcnBtX2Jhc2Vh cmNoICgpIG5vZXhjZXB0OwotIAotLTo6c3RkOjppbnQzMl90IHNlYWxlZF9tZW1mZCg6OnJ1c3Q6 OlN0ciBkZXNjcmlwdGlvbiwgOjpydXN0OjpTbGljZTw6OnN0ZDo6dWludDhfdCBjb25zdD4gY29u dGVudCk7Ci0rOjpzdGQ6OmludDMyX3Qgc2VhbGVkX21lbWZkICg6OnJ1c3Q6OlN0ciBkZXNjcmlw dGlvbiwgOjpydXN0OjpTbGljZTw6OnN0ZDo6dWludDhfdCBjb25zdD4gY29udGVudCk7Ci0gCi0t Ym9vbCBydW5uaW5nX2luX3N5c3RlbWQoKSBub2V4Y2VwdDsKLStib29sIHJ1bm5pbmdfaW5fc3lz dGVtZCAoKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmNhbGN1bGF0 ZV9hZHZpc29yaWVzX2RpZmYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s IDo6cnVzdDo6U3RyIGNoZWNrc3VtX2Zyb20sIDo6cnVzdDo6U3RyIGNoZWNrc3VtX3RvKTsKLSs6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmNhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYgKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY2hlY2tzdW1fZnJv bSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnVzdDo6U3RyIGNoZWNrc3VtX3RvKTsKLSAKLS06OnJ1c3Q6OlN0cmluZyB0cmFuc2xhdGVf cGF0aF9mb3Jfb3N0cmVlKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKzo6cnVzdDo6U3Ry aW5nIHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0 OwotIAotLTo6cnBtb3N0cmVlY3h4OjpMaXZlQXBwbHlTdGF0ZSBnZXRfbGl2ZV9hcHBseV9zdGF0 ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOwotKzo6cnBtb3N0cmVl Y3h4OjpMaXZlQXBwbHlTdGF0ZQotK2dldF9saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOwotIAot LWJvb2wgaGFzX2xpdmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3Qg Y29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZk ZXBsb3ltZW50KTsKLStib29sIGhhc19saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCk7Ci0g Ci0tdm9pZCBhcHBseWxpdmVfc3luY19yZWYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3Qg Y29uc3QgJnN5c3Jvb3QpOwotK3ZvaWQgYXBwbHlsaXZlX3N5bmNfcmVmICg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCk7Ci0gCi0tdm9pZCB0cmFuc2FjdGlvbl9h cHBseV9saXZlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnRhcmdldCk7Ci0rdm9pZCB0cmFuc2FjdGlv bl9hcHBseV9saXZlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9v dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFu dCBjb25zdCAmdGFyZ2V0KTsKLSAKLS12b2lkIG5vcm1hbGl6ZV9ldGNfc2hhZG93KDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQpOwotK3ZvaWQgbm9ybWFsaXplX2V0Y19zaGFkb3cgKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQpOwotIAotLWJvb2wgcHJlcGFyZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyKTsKLStib29s IHByZXBhcmVfcnBtX2xheWVyaW5nICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6c3RkOjppbnQz Ml90IG1lcmdlX3Bhc3N3ZF9kaXIpOwotIAotLXZvaWQgY29tcGxldGVfcnBtX2xheWVyaW5nKDo6 c3RkOjppbnQzMl90IHJvb3Rmcyk7Ci0rdm9pZCBjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6c3Rk OjppbnQzMl90IHJvb3Rmcyk7Ci0gCi0tdm9pZCBkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVz KDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Ci0rdm9pZCBkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRy aWVzICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotIAotLXZvaWQgcGFzc3dkX2NsZWFudXAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzKTsKLSt2b2lkIHBhc3N3ZF9jbGVhbnVwICg6OnN0ZDo6aW50MzJf dCByb290ZnMpOwotIAotLXZvaWQgbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50 MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmcHJlc2VydmVk X2dyb3Vwcyk7Ci0rdm9pZCBtaWdyYXRlX2dyb3VwX2V4Y2VwdF9yb290ICg6OnN0ZDo6aW50MzJf dCByb290ZnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gY29uc3QgJnByZXNlcnZlZF9ncm91cHMpOwotIAotLXZvaWQgbWlncmF0 ZV9wYXNzd2RfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSt2b2lkIG1pZ3Jh dGVfcGFzc3dkX2V4Y2VwdF9yb290ICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotIAotLXZvaWQg cGFzc3dkX2NvbXBvc2VfcHJlcCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmdHJlZWZpbGUpOwotK3ZvaWQgcGFzc3dkX2NvbXBvc2VfcHJlcCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKTsKLSAK LS12b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlm aWVkX2NvcmUpOwotK3ZvaWQgcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvICg6OnN0ZDo6aW50MzJf dCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBwcmV2aW91 c19jaGVja3N1bSwgYm9vbCB1bmlmaWVkX2NvcmUpOwotIAotLWJvb2wgZGlyX2NvbnRhaW5zX3Vp ZCg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKLStib29sIGRpcl9j b250YWluc191aWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQpOwot IAotLWJvb2wgZGlyX2NvbnRhaW5zX2dpZCg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVp bnQzMl90IGlkKTsKLStib29sIGRpcl9jb250YWluc19naWQgKDo6c3RkOjppbnQzMl90IGRpcmZk LCA6OnN0ZDo6dWludDMyX3QgaWQpOwotIAotLXZvaWQgY2hlY2tfcGFzc3dkX2dyb3VwX2VudHJp ZXMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmZmaV9yZXBvLCA6OnN0ZDo6aW50 MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJ1 c3Q6OlN0ciBwcmV2aW91c19yZXYpOwotK3ZvaWQgY2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMg KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIHByZXZpb3VzX3Jldik7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCPiBwYXNzd2RkYl9vcGVuKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7 Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiBwYXNzd2RkYl9vcGVuICg6 OnN0ZDo6aW50MzJfdCByb290ZnMpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzPiBuZXdfcGFzc3dkX2VudHJpZXMoKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz4gbmV3X3Bhc3N3ZF9lbnRyaWVzICgpIG5v ZXhjZXB0OwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiBleHRl bnNpb25zX2xvYWQoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKTsK LSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4KLStleHRlbnNpb25zX2xv YWQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLAotKyAgICAgICAgICAg ICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZi YXNlX3BrZ3MpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZp Zz4gbG9ja2ZpbGVfcmVhZCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVu YW1lcyk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPgotK2xv Y2tmaWxlX3JlYWQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5hbWVz KTsKLSAKLS12b2lkIGxvY2tmaWxlX3dyaXRlKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9z dHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywgOjpycG1vc3RyZWVjeHg6OkN4eEdP YmplY3RBcnJheSAmcnBtbWRfcmVwb3MpOwotK3ZvaWQgbG9ja2ZpbGVfd3JpdGUgKDo6cnVzdDo6 U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywK LSsgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZy cG1tZF9yZXBvcyk7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiBv cmlnaW5fdG9fdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZik7Ci0r OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiBvcmlnaW5fdG9fdHJlZWZpbGUg KDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpOwotIAotLTo6cnBtb3N0cmVlY3h4 OjpHS2V5RmlsZSAqdHJlZWZpbGVfdG9fb3JpZ2luKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmdGYpOwotKzo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSAqdHJlZWZpbGVfdG9fb3JpZ2lu ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKTsKLSAKLS12b2lkIG9yaWdpbl92 YWxpZGF0ZV9yb3VuZHRyaXAoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZikgbm9l eGNlcHQ7Ci0rdm9pZCBvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwICg6OnJwbW9zdHJlZWN4eDo6 R0tleUZpbGUgY29uc3QgJmtmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OlN0cmluZyBjYWNoZV9i cmFuY2hfdG9fbmV2cmEoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0OwotKzo6cnVzdDo6U3Ry aW5nIGNhY2hlX2JyYW5jaF90b19uZXZyYSAoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0Owot IH0gLy8gbmFtZXNwYWNlIHJwbW9zdHJlZWN4eAotIAotICNpZmRlZiBfX2NsYW5nX18KLWRpZmYg LS1naXQgYS9ydXN0L3NyYy9jb21wb3NlLnJzIGIvcnVzdC9zcmMvY29tcG9zZS5ycwotaW5kZXgg MTA4MzU0MGUxNy4uN2YxMDg4MWE1OSAxMDA2NDQKLS0tLSBhL3J1c3Qvc3JjL2NvbXBvc2UucnMK LSsrKyBiL3J1c3Qvc3JjL2NvbXBvc2UucnMKLUBAIC0zMyw3ICszMyw3IEBAIHVzZSBjcmF0ZTo6 Y21kdXRpbHM6OkNvbW1hbmRSdW5FeHQ7Ci0gdXNlIGNyYXRlOjpjb250YWluZXJzX3N0b3JhZ2U6 Ok1vdW50OwotIHVzZSBjcmF0ZTo6Y3h4cnN1dGlsOjp7Q3h4UmVzdWx0LCBGRklHT2JqZWN0V3Jh cHBlcn07Ci0gdXNlIGNyYXRlOjppc29sYXRpb246OnNlbGZfY29tbWFuZDsKLS11c2UgY3JhdGU6 OntSUE1PU1RSRUVfUlBNREJfTE9DQVRJT04sIFJQTU9TVFJFRV9TWVNJTUFHRV9SUE1EQn07Ci0r dXNlIGNyYXRlOjp7UkVQT1NfRElSUywgUlBNT1NUUkVFX1JQTURCX0xPQ0FUSU9OLCBSUE1PU1RS RUVfU1lTSU1BR0VfUlBNREJ9OwotIAotIGNvbnN0IE9TVFJFRV9DT01QT1NFRlNfRElHRVNUX1Yw X0tFWTogJnN0ciA9ICJvc3RyZWUuY29tcG9zZWZzLmRpZ2VzdC52MCI7Ci0gCi1AQCAtNjQwLDIz ICs2NDAsMjQgQEAgZm4gbXV0YXRlX3NvdXJjZV9yb290KGV4ZWNfcm9vdDogJkRpciwgc291cmNl X3Jvb3Q6ICZVdGY4UGF0aCkgLT4gUmVzdWx0PCgpPiB7Ci0gICAgICAgICBwcmludGxuISgiU3lt bGlua2VkIHtSUE1PU1RSRUVfUlBNREJfTE9DQVRJT059IGluIHNvdXJjZSByb290Iik7Ci0gICAg IH0KLSAKLS0gICAgaWYgIXNvdXJjZV9yb290X2Rpci50cnlfZXhpc3RzKCJldGMiKT8gewotLSAg ICAgICAgcmV0dXJuIE9rKCgpKTsKLS0gICAgfQotLSAgICBpZiBsZXQgU29tZShyZXBvcykgPSBz b3VyY2Vfcm9vdF9kaXIKLS0gICAgICAgIC5vcGVuX2Rpcl9vcHRpb25hbCgiZXRjL3l1bS5yZXBv cy5kIikKLS0gICAgICAgIC5jb250ZXh0KCJPcGVuaW5nIHl1bS5yZXBvcy5kIik/Ci0tICAgIHsK LS0gICAgICAgIGZvciBlbnQgaW4gcmVwb3MuZW50cmllc191dGY4KCk/IHsKLS0gICAgICAgICAg ICBsZXQgZW50ID0gZW50PzsKLS0gICAgICAgICAgICBpZiAhZW50LmZpbGVfdHlwZSgpPy5pc19m aWxlKCkgewotLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgLy8gU2NhbiBhbGwgcmVw byBkaXJlY3RvcnkgbG9jYXRpb25zIGZvciAucmVwbyBmaWxlcyB0aGF0IG1heSBuZWVkCi0rICAg IC8vIEdQRyBrZXkgcGF0aCByZXdyaXRpbmcuCi0rICAgIGZvciByZXBvc19kaXIgaW4gUkVQT1Nf RElSUyB7Ci0rICAgICAgICBpZiBsZXQgU29tZShyZXBvcykgPSBzb3VyY2Vfcm9vdF9kaXIKLSsg ICAgICAgICAgICAub3Blbl9kaXJfb3B0aW9uYWwocmVwb3NfZGlyKQotKyAgICAgICAgICAgIC53 aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiT3BlbmluZyB7cmVwb3NfZGlyfSIpKT8KLSsgICAgICAg IHsKLSsgICAgICAgICAgICBmb3IgZW50IGluIHJlcG9zLmVudHJpZXNfdXRmOCgpPyB7Ci0rICAg ICAgICAgICAgICAgIGxldCBlbnQgPSBlbnQ/OwotKyAgICAgICAgICAgICAgICBpZiAhZW50LmZp bGVfdHlwZSgpPy5pc19maWxlKCkgewotKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0r ICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgbGV0IG5hbWU6IFV0ZjhQYXRoQnVm ID0gZW50LmZpbGVfbmFtZSgpPy5pbnRvKCk7Ci0rICAgICAgICAgICAgICAgIGxldCBTb21lKCJy ZXBvIikgPSBuYW1lLmV4dGVuc2lvbigpIGVsc2UgewotKyAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Ci0rICAgICAgICAgICAgICAgIH07Ci0rICAgICAgICAgICAgICAgIG11dGF0ZV9vbmVf ZG5mX3JlcG8oZXhlY19yb290LCBzb3VyY2Vfcm9vdCwgJnJlcG9zLCAmbmFtZSk/OwotICAgICAg ICAgICAgIH0KLS0gICAgICAgICAgICBsZXQgbmFtZTogVXRmOFBhdGhCdWYgPSBlbnQuZmlsZV9u YW1lKCk/LmludG8oKTsKLS0gICAgICAgICAgICBsZXQgU29tZSgicmVwbyIpID0gbmFtZS5leHRl bnNpb24oKSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgY29udGludWU7Ci0tICAgICAgICAgICAg fTsKLS0gICAgICAgICAgICBtdXRhdGVfb25lX2RuZl9yZXBvKGV4ZWNfcm9vdCwgc291cmNlX3Jv b3QsICZyZXBvcywgJm5hbWUpPzsKLSAgICAgICAgIH0KLSAgICAgfQotIAotQEAgLTE2ODQsNiAr MTY4NSwyOSBAQCBtb2QgdGVzdHMgewotICAgICAiI307Ci0gICAgICAgICBzaW1pbGFyX2Fzc2Vy dHM6OmFzc2VydF9lcSEoZXhwZWN0ZWQsIGZvdW5kX3JlcG9zKTsKLSAKLSsgICAgICAgIC8vIEFs c28gdGVzdCB3aXRoIHJlcG9zIGluIHRoZSBuZXcgL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQgbG9j YXRpb24KLSsgICAgICAgIHJvb3Rmcy5jcmVhdGVfZGlyX2FsbCgicmVwb3MvdXNyL3NoYXJlL2Ru ZjUvcmVwb3MuZCIpPzsKLSsgICAgICAgIHJvb3Rmcy5jcmVhdGVfZGlyX2FsbCgicmVwb3MvdXNy L3NoYXJlL3BraS9ycG0tZ3BnIik/OwotKyAgICAgICAgcm9vdGZzLndyaXRlKCJyZXBvcy91c3Iv c2hhcmUvcGtpL3JwbS1ncGcvcmVwbzUua2V5IiwgInJlcG81IGdwZyBrZXkiKT87Ci0rICAgICAg ICBsZXQgZG5mNV9yZXBvX2NvbnRlbnQgPSBpbmRvYzo6aW5kb2MhIHsgciMiCi0rICAgICAgICBb cmVwbzVdCi0rICAgICAgICBiYXNldXJsPWJsYWgKLSsgICAgICAgIGdwZ2tleT1maWxlOi8vL3Vz ci9zaGFyZS9wa2kvcnBtLWdwZy9yZXBvNS5rZXkKLSsgICAgIiN9OwotKyAgICAgICAgcm9vdGZz LndyaXRlKAotKyAgICAgICAgICAgICJyZXBvcy91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kL3Rlc3Qt ZG5mNS5yZXBvIiwKLSsgICAgICAgICAgICBkbmY1X3JlcG9fY29udGVudCwKLSsgICAgICAgICk/ OwotKyAgICAgICAgbXV0YXRlX3NvdXJjZV9yb290KHJvb3RmcywgInJlcG9zIi5pbnRvKCkpLnVu d3JhcCgpOwotKyAgICAgICAgbGV0IGZvdW5kX2RuZjVfcmVwb3MgPQotKyAgICAgICAgICAgIHJv b3Rmcy5yZWFkX3RvX3N0cmluZygicmVwb3MvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZC90ZXN0LWRu ZjUucmVwbyIpPzsKLSsgICAgICAgIGxldCBleHBlY3RlZF9kbmY1ID0gaW5kb2M6OmluZG9jISB7 IHIjIgotKyAgICAgICAgW3JlcG81XQotKyAgICAgICAgYmFzZXVybD1ibGFoCi0rICAgICAgICBn cGdrZXk9ZmlsZTovLy9yZXBvcy91c3Ivc2hhcmUvcGtpL3JwbS1ncGcvcmVwbzUua2V5Ci0rICAg ICIjfTsKLSsgICAgICAgIHNpbWlsYXJfYXNzZXJ0czo6YXNzZXJ0X2VxIShleHBlY3RlZF9kbmY1 LCBmb3VuZF9kbmY1X3JlcG9zKTsKLSsKLSAgICAgICAgIE9rKCgpKQotICAgICB9Ci0gfQotZGlm ZiAtLWdpdCBhL3J1c3Qvc3JjL2NvbXBvc2Vwb3N0LnJzIGIvcnVzdC9zcmMvY29tcG9zZXBvc3Qu cnMKLWluZGV4IGMxZmViNzM3ODkuLjFkOGVkM2EyZDcgMTAwNjQ0Ci0tLS0gYS9ydXN0L3NyYy9j b21wb3NlcG9zdC5ycwotKysrIGIvcnVzdC9zcmMvY29tcG9zZXBvc3QucnMKLUBAIC01MCw2ICs1 MCwyMyBAQCBwdWIoY3JhdGUpIGNvbnN0IFJQTU9TVFJFRV9SUE1EQl9MT0NBVElPTjogJnN0ciA9 ICJ1c3Ivc2hhcmUvcnBtIjsKLSBwdWIoY3JhdGUpIGNvbnN0IFJQTU9TVFJFRV9TWVNJTUFHRV9S UE1EQjogJnN0ciA9ICJ1c3IvbGliL3N5c2ltYWdlL3JwbSI7Ci0gcHViKGNyYXRlKSBjb25zdCBU UkFESVRJT05BTF9SUE1EQl9MT0NBVElPTjogJnN0ciA9ICJ2YXIvbGliL3JwbSI7Ci0gCi0rLy8v IFJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3Rvcmllcy4gVGhlIC9ldGMgcGF0aCBpcyBm b3IgdXNlci1hZGRlZAotKy8vLyBjb25maWd1cmF0aW9uOyB0aGUgL3VzciBwYXRoIGlzIGZvciBk aXN0cmlidXRpb24tcHJvdmlkZWQgY29uZmlndXJhdGlvbgotKy8vLyAoaW50cm9kdWNlZCB3aXRo IERORjUgaW4gRmVkb3JhIDQ1KS4KLStwdWIoY3JhdGUpIGNvbnN0IFlVTV9SRVBPU19EOiAmc3Ry ID0gImV0Yy95dW0ucmVwb3MuZCI7Ci0rcHViKGNyYXRlKSBjb25zdCBETkY1X1JFUE9TX0Q6ICZz dHIgPSAidXNyL3NoYXJlL2RuZjUvcmVwb3MuZCI7Ci0rcHViKGNyYXRlKSBjb25zdCBSRVBPU19E SVJTOiAmWyZzdHJdID0gJltZVU1fUkVQT1NfRCwgRE5GNV9SRVBPU19EXTsKLSsKLSsvLy8gQWJz b2x1dGUtcGF0aCB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUsIGZvciB1c2UgaW4gY29udGV4dHMgdGhh dCBuZWVkIHRoZW0uCi0rcHViKGNyYXRlKSBjb25zdCBBQlNfWVVNX1JFUE9TX0Q6ICZzdHIgPSAi L2V0Yy95dW0ucmVwb3MuZCI7Ci0rcHViKGNyYXRlKSBjb25zdCBBQlNfRE5GNV9SRVBPU19EOiAm c3RyID0gIi91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIjsKLSsKLSsvLy8gUmV0dXJuIHRoZSBsaXN0 IG9mIGFic29sdXRlIHJlcG8gY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcyB0byBzZWFyY2gsCi0r Ly8vIGV4cG9zZWQgdG8gQysrIHZpYSBjeHggYnJpZGdlLgotK3B1YihjcmF0ZSkgZm4gZ2V0X3Jl cG9zX2RpcnMoKSAtPiBWZWM8U3RyaW5nPiB7Ci0rICAgIHZlYyFbQUJTX1lVTV9SRVBPU19ELnRv X3N0cmluZygpLCBBQlNfRE5GNV9SRVBPU19ELnRvX3N0cmluZygpXQotK30KLSsKLSBjb25zdCBT RF9MT0NBTF9GU19UQVJHRVRfUkVRVUlSRVM6ICZzdHIgPSAidXNyL2xpYi9zeXN0ZW1kL3N5c3Rl bS9sb2NhbC1mcy50YXJnZXQucmVxdWlyZXMiOwotIAotICNbY29udGV4dCgiTW92aW5nIHt9Iiwg bmFtZSldCi1kaWZmIC0tZ2l0IGEvcnVzdC9zcmMvY291bnRtZS9yZXBvLnJzIGIvcnVzdC9zcmMv Y291bnRtZS9yZXBvLnJzCi1pbmRleCA3NDNkNzVjNjFlLi45ZjlmYWM5Njg4IDEwMDY0NAotLS0t IGEvcnVzdC9zcmMvY291bnRtZS9yZXBvLnJzCi0rKysgYi9ydXN0L3NyYy9jb3VudG1lL3JlcG8u cnMKLUBAIC0zLDE0ICszLDEyIEBACi0gdXNlIGFueWhvdzo6e0NvbnRleHQsIFJlc3VsdH07Ci0g dXNlIGZuX2Vycm9yX2NvbnRleHQ6OmNvbnRleHQ7Ci0gdXNlIHN0ZDo6ZnM7Ci0tdXNlIHN0ZDo6 cGF0aDo6UGF0aEJ1ZjsKLSt1c2Ugc3RkOjpwYXRoOjp7UGF0aCwgUGF0aEJ1Zn07Ci0gCi0gdXNl IGluaTo6SW5pOwotIAotIHVzZSBjcmF0ZTo6dXRpbHM7Ci0tCi0tLy8vIExvY2F0aW9uIGZvciBE TkYgcmVwb3NpdG9yaWVzIGNvbmZpZ3VyYXRpb24KLS1wdWIgY29uc3QgWVVNX1JFUE9TX0Q6ICZz dHIgPSAiL2V0Yy95dW0ucmVwb3MuZCI7Ci0rdXNlIGNyYXRlOjp7QUJTX0RORjVfUkVQT1NfRCwg QUJTX1lVTV9SRVBPU19EfTsKLSAKLSAvLy8gUmVwb3NpdG9yeSBjb25maWd1cmF0aW9uCi0gLy8v IE5vdCBleGhhdXN0aXZlIGFuZCBvbmx5IGluY2x1ZGVzIHRoZSBvcHRpb25zIG5lZWRlZCBmb3Ig Q291bnQgTWUgc3VwcG9ydC4KLUBAIC0yOCwxMiArMjYsMTcgQEAgZm4gaXNfdHJ1ZShzdHJpbmc6 ICZzdHIpIC0+IGJvb2wgewotICAgICBzdHJpbmcgPT0gIjEiIHx8IHN0cmluZyA9PSAieWVzIiB8 fCBzdHJpbmcgPT0gInRydWUiIHx8IHN0cmluZyA9PSAib24iCi0gfQotIAotLS8vLyBSZWFkIGFs bCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZXMgZnJvbSB0aGUgZGVmYXVsdCBsb2NhdGlv bgotLXB1YiBmbiBhbGwoKSAtPiBSZXN1bHQ8VmVjPFJlcG8+PiB7Ci0tICAgIGxldCBjb25maWdz ID0gZnM6OnJlYWRfZGlyKFlVTV9SRVBPU19EKQotLSAgICAgICAgLndpdGhfY29udGV4dCh8fCBm b3JtYXQhKCJDb3VsZCBub3QgbGlzdCBmaWxlcyBpbjoge30iLCBZVU1fUkVQT1NfRCkpPzsKLS0g ICAgbGV0IG11dCByZXBvcyA9IFZlYzo6bmV3KCk7Ci0tICAgIGZvciBjIGluIGNvbmZpZ3Mgewot Ky8vLyBSZWFkIHJlcG8gY29uZmlnIGZpbGVzIGZyb20gYSBzaW5nbGUgZGlyZWN0b3J5LCBhcHBl bmRpbmcgdG8gYHJlcG9zYC4KLSsvLy8gU2lsZW50bHkgc2tpcHMgdGhlIGRpcmVjdG9yeSBpZiBp dCBkb2VzIG5vdCBleGlzdC4KLStmbiBjb2xsZWN0X3JlcG9zX2Zyb21fZGlyKGRpcjogJlBhdGgs IHJlcG9zOiAmbXV0IFZlYzxSZXBvPikgLT4gUmVzdWx0PCgpPiB7Ci0rICAgIGxldCBlbnRyaWVz ID0gbWF0Y2ggZnM6OnJlYWRfZGlyKGRpcikgewotKyAgICAgICAgT2soZW50cmllcykgPT4gZW50 cmllcywKLSsgICAgICAgIEVycihlKSBpZiBlLmtpbmQoKSA9PSBzdGQ6OmlvOjpFcnJvcktpbmQ6 Ok5vdEZvdW5kID0+IHJldHVybiBPaygoKSksCi0rICAgICAgICBFcnIoZSkgPT4gewotKyAgICAg ICAgICAgIHJldHVybiBFcnIoZSkud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkNvdWxkIG5vdCBs aXN0IGZpbGVzIGluOiB7fSIsIGRpci5kaXNwbGF5KCkpKQotKyAgICAgICAgfQotKyAgICB9Owot KyAgICBmb3IgYyBpbiBlbnRyaWVzIHsKLSAgICAgICAgIGxldCBwYXRoID0gYz8ucGF0aCgpOwot ICAgICAgICAgbWF0Y2ggcGFyc2VfcmVwb19maWxlKCZwYXRoKSB7Ci0gICAgICAgICAgICAgRXJy KGUpID0+IHsKLUBAIC00Niw2ICs0OSwxNSBAQCBwdWIgZm4gYWxsKCkgLT4gUmVzdWx0PFZlYzxS ZXBvPj4gewotICAgICAgICAgICAgIE9rKG11dCByKSA9PiByZXBvcy5hcHBlbmQoJm11dCByKSwK LSAgICAgICAgIH0KLSAgICAgfQotKyAgICBPaygoKSkKLSt9Ci0rCi0rLy8vIFJlYWQgYWxsIHJl cG9zaXRvcnkgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIGJvdGggcmVwbyBjb25maWcgZGlyZWN0 b3JpZXMKLStwdWIgZm4gYWxsKCkgLT4gUmVzdWx0PFZlYzxSZXBvPj4gewotKyAgICBsZXQgbXV0 IHJlcG9zID0gVmVjOjpuZXcoKTsKLSsgICAgZm9yIGRpciBpbiAmW0FCU19ZVU1fUkVQT1NfRCwg QUJTX0RORjVfUkVQT1NfRF0gewotKyAgICAgICAgY29sbGVjdF9yZXBvc19mcm9tX2RpcihQYXRo OjpuZXcoZGlyKSwgJm11dCByZXBvcyk/OwotKyAgICB9Ci0gICAgIE9rKHJlcG9zKQotIH0KLSAK LWRpZmYgLS1naXQgYS9ydXN0L3NyYy9saWIucnMgYi9ydXN0L3NyYy9saWIucnMKLWluZGV4IDMx MzgzNjc3YTguLjAzNzgyNjk3NjMgMTAwNjQ0Ci0tLS0gYS9ydXN0L3NyYy9saWIucnMKLSsrKyBi L3J1c3Qvc3JjL2xpYi5ycwotQEAgLTcwMSw2ICs3MDEsMTMgQEAgcHViIG1vZCBmZmkgewotICAg ICAgICAgZm4gZ2V0X3BhY2thZ2VzKCZzZWxmKSAtPiBWZWM8U3RyaW5nPjsKLSAgICAgfQotIAot KyAgICAvLyBjb21wb3NlcG9zdC5ycwotKyAgICBleHRlcm4gIlJ1c3QiIHsKLSsgICAgICAgIC8v LyBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRvIHNl YXJjaAotKyAgICAgICAgLy8vIChlLmcuIFsiL2V0Yy95dW0ucmVwb3MuZCIsICIvdXNyL3NoYXJl L2RuZjUvcmVwb3MuZCJdKS4KLSsgICAgICAgIGZuIGdldF9yZXBvc19kaXJzKCkgLT4gVmVjPFN0 cmluZz47Ci0rICAgIH0KLSsKLSAgICAgLy8gdXRpbHMucnMKLSAgICAgZXh0ZXJuICJSdXN0IiB7 Ci0gICAgICAgICBmbiB2YXJzdWJzdGl0dXRlKHM6ICZzdHIsIHZhcnM6ICZWZWM8U3RyaW5nTWFw cGluZz4pIC0+IFJlc3VsdDxTdHJpbmc+OwotZGlmZiAtLWdpdCBhL3NyYy9kYWVtb24vcnBtb3N0 cmVlLXN5c3Jvb3QtdXBncmFkZXIuaCBiL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5c3Jvb3QtdXBn cmFkZXIuaAotaW5kZXggYjhmNjAyNjhkZS4uZTU2NDYwNGUwNSAxMDA2NDQKLS0tLSBhL3NyYy9k YWVtb24vcnBtb3N0cmVlLXN5c3Jvb3QtdXBncmFkZXIuaAotKysrIGIvc3JjL2RhZW1vbi9ycG1v c3RyZWUtc3lzcm9vdC11cGdyYWRlci5oCi1AQCAtNjUsNyArNjUsNyBAQCB0eXBlZGVmIGVudW0K LSAKLSAvKiBfTk9ORSBtZWFucyB3ZSdyZSBkb2luZyBwdXJlIG9zdHJlZSwgbm8gY2xpZW50LXNp ZGUgY29tcHV0YXRpb24uCi0gICogX0xPQ0FMIGlzIGp1c3QgZS5nLiBycG0tb3N0cmVlIGluaXRy YW1mcwotLSAqIF9SUE1NRF9SRVBPUyBpcyB3aGVyZSB3ZSdyZSBkb3dubG9hZGluZyBkYXRhIGZy b20gL2V0Yy95dW0ucmVwb3MuZAotKyAqIF9SUE1NRF9SRVBPUyBpcyB3aGVyZSB3ZSdyZSBkb3du bG9hZGluZyBkYXRhIGZyb20geXVtLnJlcG9zLmQgLyBkbmY1IHJlcG9zLmQKLSAgKi8KLSB0eXBl ZGVmIGVudW0KLSB7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4 IGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4Ci1pbmRleCBlOTQ0ZDkwOTE2Li40NTVj MmQwYWE4IDEwMDY0NAotLS0tIGEvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4Ci0rKysg Yi9zcmMvbGlicHJpdi9ycG1vc3RyZWUtY29yZS5jeHgKLUBAIC0xODYsNiArMTg2LDI1IEBAIHN0 YXRlX2FjdGlvbl9jaGFuZ2VkX2NiIChEbmZTdGF0ZSAqc3RhdGUsIERuZlN0YXRlQWN0aW9uIGFj dGlvbiwgY29uc3QgZ2NoYXIgKmFjCi0gICAgIH0KLSB9Ci0gCi0rLyogQnVpbGQgYSBOVUxMLXRl cm1pbmF0ZWQgYXJyYXkgb2YgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzLAotKyAqIHVz aW5nIHRoZSBjYW5vbmljYWwgbGlzdCBmcm9tIFJ1c3QuIElmIEByb290IGlzIG5vbi1OVUxMLCBl YWNoCi0rICogcGF0aCBpcyBwcmVmaXhlZCB3aXRoIGl0IChmb3IgZGVwbG95bWVudC9zb3VyY2Ug cm9vdCBjb250ZXh0cykuCi0rICovCi0rc3RhdGljIEdTdHJ2Ci0rYnVpbGRfcmVwb3NfZGlycyAo Y29uc3QgY2hhciAqcm9vdCkKLSt7Ci0rICBhdXRvIGRpcnMgPSBycG1vc3RyZWVjeHg6OmdldF9y ZXBvc19kaXJzICgpOwotKyAgYXV0byByZXQgPSBnX25ldzAgKGdjaGFyICosIGRpcnMuc2l6ZSAo KSArIDEpOwotKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJzLnNpemUgKCk7IGkrKykKLSsg ICAgewotKyAgICAgIGlmIChyb290KQotKyAgICAgICAgcmV0W2ldID0gZ19idWlsZF9maWxlbmFt ZSAocm9vdCwgZGlyc1tpXS5jX3N0ciAoKSwgTlVMTCk7Ci0rICAgICAgZWxzZQotKyAgICAgICAg cmV0W2ldID0gZ19zdHJkdXAgKGRpcnNbaV0uY19zdHIgKCkpOwotKyAgICB9Ci0rICByZXR1cm4g cmV0OwotK30KLSsKLSAvKiBMb3cgbGV2ZWwgQVBJIHRvIGNyZWF0ZSBhIGNvbnRleHQuICBBdm9p ZCB0aGlzIGluIHByZWZlcmVuY2UKLSAgKiB0byBjcmVhdGluZyBhIGNsaWVudCBvciBjb21wb3Nl IGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS4KLSAgKi8KLUBAIC0yMDYsNyArMjI1LDEzIEBAIHJw bW9zdHJlZV9jb250ZXh0X25ld19iYXNlIChPc3RyZWVSZXBvICpyZXBvKQotICAgc2VsZi0+ZG5m Y3R4ID0gZG5mX2NvbnRleHRfbmV3ICgpOwotICAgZG5mX2NvbnRleHRfc2V0X2h0dHBfcHJveHkg KHNlbGYtPmRuZmN0eCwgZ19nZXRlbnYgKCJodHRwX3Byb3h5IikpOwotIAotLSAgZG5mX2NvbnRl eHRfc2V0X3JlcG9fZGlyIChzZWxmLT5kbmZjdHgsICIvZXRjL3l1bS5yZXBvcy5kIik7Ci0rICAv KiBTZXQgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHVzaW5nIHRoZSBjYW5vbmljYWwg bGlzdCBmcm9tIFJ1c3QuCi0rICAgKiBUaGUgcmVwbyBsb2FkZXIgZ3JhY2VmdWxseSBza2lwcyBu b24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0rICAgKi8KLSsgIHsKLSsgICAgZ19hdXRvIChHU3Ry dikgcmVwb3NfZGlycyA9IGJ1aWxkX3JlcG9zX2RpcnMgKE5VTEwpOwotKyAgICBkbmZfY29udGV4 dF9zZXRfcmVwb3NfZGlyIChzZWxmLT5kbmZjdHgsIChjb25zdCBnY2hhciAqY29uc3QgKilyZXBv c19kaXJzKTsKLSsgIH0KLSAgIGRuZl9jb250ZXh0X3NldF9jYWNoZV9kaXIgKHNlbGYtPmRuZmN0 eCwgUlBNT1NUUkVFX0NPUkVfQ0FDSEVESVIgUlBNT1NUUkVFX0RJUl9DQUNIRV9SRVBPTUQpOwot ICAgZG5mX2NvbnRleHRfc2V0X3NvbHZfZGlyIChzZWxmLT5kbmZjdHgsIFJQTU9TVFJFRV9DT1JF X0NBQ0hFRElSIFJQTU9TVFJFRV9ESVJfQ0FDSEVfU09MVik7Ci0gICBkbmZfY29udGV4dF9zZXRf bG9ja19kaXIgKHNlbGYtPmRuZmN0eCwgIi9ydW4vcnBtLW9zdHJlZS8iIFJQTU9TVFJFRV9ESVJf TE9DSyk7Ci1AQCAtMzU3LDE2ICszODIsMjYgQEAgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9z X2RpciAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqcmVwb3NkaXIpCi0gICBn X2RlYnVnICgic2V0IG92ZXJyaWRlIGZvciByZXBvcyBkaXIiKTsKLSB9Ci0gCi0rLy8gU2FtZSBh cyBhYm92ZSBidXQgdXNpbmcgdGhlIG11bHRpLWRpcmVjdG9yeSB2YXJpYW50IHRvIGFsbG93IHNl dHRpbmcKLSsvLyBtdWx0aXBsZSByZXBvcyBkaXJzIChlLmcuIGJvdGggL2V0Yy95dW0ucmVwb3Mu ZCBhbmQgL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQpLgotK3ZvaWQKLStycG1vc3RyZWVfY29udGV4 dF9zZXRfcmVwb3NfZGlycyAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqY29u c3QgKnJlcG9zZGlycykKLSt7Ci0rICBkbmZfY29udGV4dF9zZXRfcmVwb3NfZGlyIChzZWxmLT5k bmZjdHgsIHJlcG9zZGlycyk7Ci0rICBzZWxmLT5yZXBvc19kaXJfY29uZmlndXJlZCA9IFRSVUU7 Ci0rICBnX2RlYnVnICgic2V0IG92ZXJyaWRlIGZvciByZXBvcyBkaXJzIChtdWx0aSkiKTsKLSt9 Ci0rCi0gLyogUGljayB1cCByZXBvcyBkaXIgYW5kIHBhc3N3ZCBmcm9tIEBjZmdfZGVwbG95bWVu dC4gKi8KLSB2b2lkCi0gcnBtb3N0cmVlX2NvbnRleHRfY29uZmlndXJlX2Zyb21fZGVwbG95bWVu dCAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZiwgT3N0cmVlU3lzcm9vdCAqc3lzcm9vdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPc3RyZWVEZXBsb3ltZW50 ICpjZmdfZGVwbG95bWVudCkKLSB7Ci0gICBnX2F1dG9mcmVlIGNoYXIgKmNmZ19kZXBsb3ltZW50 X3Jvb3QgPSBycG1vc3RyZWVfZ2V0X2RlcGxveW1lbnRfcm9vdCAoc3lzcm9vdCwgY2ZnX2RlcGxv eW1lbnQpOwotLSAgZ19hdXRvZnJlZSBjaGFyICpyZXBvc2RpciA9IGdfYnVpbGRfZmlsZW5hbWUg KGNmZ19kZXBsb3ltZW50X3Jvb3QsICJldGMveXVtLnJlcG9zLmQiLCBOVUxMKTsKLSAKLS0gIC8q IHBvaW50IGxpYmhpZiB0byB0aGUgeXVtLnJlcG9zLmQgYW5kIG9zLXJlbGVhc2Ugb2YgdGhlIG1l cmdlIGRlcGxveW1lbnQgKi8KLS0gIHJwbW9zdHJlZV9jb250ZXh0X3NldF9yZXBvc19kaXIgKHNl bGYsIHJlcG9zZGlyKTsKLSsgIC8qIFBvaW50IGxpYmRuZiB0byByZXBvIGNvbmZpZyBkaXJzIHVu ZGVyIHRoZSBtZXJnZSBkZXBsb3ltZW50LiAqLwotKyAgZ19hdXRvIChHU3RydikgcmVwb3NfZGly cyA9IGJ1aWxkX3JlcG9zX2RpcnMgKGNmZ19kZXBsb3ltZW50X3Jvb3QpOwotKyAgcnBtb3N0cmVl X2NvbnRleHRfc2V0X3JlcG9zX2RpcnMgKHNlbGYsIChjb25zdCBnY2hhciAqY29uc3QgKilyZXBv c19kaXJzKTsKLSAKLSAgIC8qIHBvaW50IHRoZSBjb3JlIHRvIHRoZSBwYXNzd2QgJiBncm91cCBv ZiB0aGUgbWVyZ2UgZGVwbG95bWVudCAqLwotICAgZ19hc3NlcnQgKCFzZWxmLT5wYXNzd2RfZGly KTsKLUBAIC02OTQsOSArNzI5LDkgQEAgcnBtb3N0cmVlX2NvbnRleHRfc2V0dXAgKFJwbU9zdHJl ZUNvbnRleHQgKnNlbGYsIGNvbnN0IGNoYXIgKmluc3RhbGxfcm9vdCwgY29uc3QKLSAgICAgICAv LyBvdmVycm9kZSB0aGUgcmVwb3MgZGlyLgotICAgICAgIGlmICghc2VsZi0+cmVwb3NfZGlyX2Nv bmZpZ3VyZWQpCi0gICAgICAgICB7Ci0tICAgICAgICAgIGdfYXV0b2ZyZWUgY2hhciAqc291cmNl X3JlcG9zID0gZ19idWlsZF9maWxlbmFtZSAoc291cmNlX3Jvb3QsICJldGMveXVtLnJlcG9zLmQi LCBOVUxMKTsKLS0gICAgICAgICAgZG5mX2NvbnRleHRfc2V0X3JlcG9fZGlyIChzZWxmLT5kbmZj dHgsIHNvdXJjZV9yZXBvcyk7Ci0tICAgICAgICAgIGdfZGVidWcgKCJTZXQgcmVwb3MgZGlyIGZy b20gc291cmNlIHJvb3QiKTsKLSsgICAgICAgICAgZ19hdXRvIChHU3RydikgcmVwb3NfZGlycyA9 IGJ1aWxkX3JlcG9zX2RpcnMgKHNvdXJjZV9yb290KTsKLSsgICAgICAgICAgZG5mX2NvbnRleHRf c2V0X3JlcG9zX2RpciAoc2VsZi0+ZG5mY3R4LCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3Nf ZGlycyk7Ci0rICAgICAgICAgIGdfZGVidWcgKCJTZXQgcmVwb3MgZGlycyBmcm9tIHNvdXJjZSBy b290Iik7Ci0gICAgICAgICB9Ci0gICAgIH0KLSAKLUBAIC0yMzcwLDggKzI0MDUsMTAgQEAgcnBt b3N0cmVlX2ZpbmRfYW5kX2Rvd25sb2FkX3BhY2thZ2VzIChjb25zdCBjaGFyICpjb25zdCAqcGFj a2FnZXMsIGNvbnN0IGNoYXIgKnMKLSAgIGlmICghcnBtb3N0cmVlX2NvbnRleHRfc2V0dXAgKGN0 eCwgTlVMTCwgc291cmNlX3Jvb3QsIGNhbmNlbGxhYmxlLCBlcnJvcikpCi0gICAgIHJldHVybiBn bG54X3ByZWZpeF9lcnJvciAoZXJyb3IsICJTZXR0aW5nIHVwIGRuZiBjb250ZXh0Iik7Ci0gCi0t ICBnX2F1dG9mcmVlIGNoYXIgKnJlcG9zZGlyID0gZ19idWlsZF9maWxlbmFtZSAocmVwb19yb290 ID86IHNvdXJjZV9yb290LCAiZXRjL3l1bS5yZXBvcy5kIiwgTlVMTCk7Ci0tICBkbmZfY29udGV4 dF9zZXRfcmVwb19kaXIgKGN0eC0+ZG5mY3R4LCByZXBvc2Rpcik7Ci0rICB7Ci0rICAgIGdfYXV0 byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWlsZF9yZXBvc19kaXJzIChyZXBvX3Jvb3QgPzogc291 cmNlX3Jvb3QpOwotKyAgICBkbmZfY29udGV4dF9zZXRfcmVwb3NfZGlyIChjdHgtPmRuZmN0eCwg KGNvbnN0IGdjaGFyICpjb25zdCAqKXJlcG9zX2RpcnMpOwotKyAgfQotIAotICAgYXV0byBmbGFn cyA9IChEbmZDb250ZXh0U2V0dXBTYWNrRmxhZ3MpKERORl9DT05URVhUX1NFVFVQX1NBQ0tfRkxB R19TS0lQX1JQTURCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBETkZfQ09OVEVYVF9TRVRVUF9TQUNLX0ZMQUdfU0tJUF9GSUxFTElTVFMpOwotZGlmZiAtLWdp dCBhL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmggYi9zcmMvbGlicHJpdi9ycG1vc3RyZWUt Y29yZS5oCi1pbmRleCA3MmVjZWNiNWFkLi5kNzQzMDBjZGExIDEwMDY0NAotLS0tIGEvc3JjL2xp YnByaXYvcnBtb3N0cmVlLWNvcmUuaAotKysrIGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUu aAotQEAgLTExNCw2ICsxMTQsNyBAQCB2b2lkIHJwbW9zdHJlZV9jb250ZXh0X2Rpc2FibGVfc2Vs aW51eCAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZik7Ci0gY29uc3QgY2hhciAqcnBtb3N0cmVlX2Nv bnRleHRfZ2V0X3JlZiAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZik7Ci0gCi0gdm9pZCBycG1vc3Ry ZWVfY29udGV4dF9zZXRfcmVwb3NfZGlyIChScG1Pc3RyZWVDb250ZXh0ICpzZWxmLCBjb25zdCBj aGFyICpyZXBvc2Rpcik7Ci0rdm9pZCBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlycyAo UnBtT3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqY29uc3QgKnJlcG9zZGlycyk7Ci0g Ci0gdm9pZCBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3MgKFJwbU9zdHJlZUNvbnRleHQgKnNl bGYsIE9zdHJlZVJlcG8gKmJhc2VfcmVwbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3N0cmVlUmVwbyAqcGtnY2FjaGVfcmVwbyk7Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvY29t bW9uL2xpYnRlc3RyZXBvcy5zaCBiL3Rlc3RzL2NvbW1vbi9saWJ0ZXN0cmVwb3Muc2gKLWluZGV4 IDllNzBhYWRjM2IuLjJjM2VmMzM2ZGQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9jb21tb24vbGlidGVz dHJlcG9zLnNoCi0rKysgYi90ZXN0cy9jb21tb24vbGlidGVzdHJlcG9zLnNoCi1AQCAtMjAsNyAr MjAsMTMgQEAKLSBzZXR1cF9ycG1tZF9yZXBvcygpIHsKLSAgICAgZGVzdD0kMQotICAgICBzaGlm dAotLSAgICByZXBvcz0ke1JQTU9TVFJFRV9DT01QT1NFX1RFU1RfVVNFX1JFUE9TOi0vZXRjL3l1 bS5yZXBvcy5kfQotKyAgICBpZiBbIC1uICIke1JQTU9TVFJFRV9DT01QT1NFX1RFU1RfVVNFX1JF UE9TOi19IiBdOyB0aGVuCi0rICAgICAgICByZXBvcz0ke1JQTU9TVFJFRV9DT01QT1NFX1RFU1Rf VVNFX1JFUE9TfQotKyAgICBlbGlmIFsgLWQgL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQgXTsgdGhl bgotKyAgICAgICAgcmVwb3M9L3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQKLSsgICAgZWxzZQotKyAg ICAgICAgcmVwb3M9L2V0Yy95dW0ucmVwb3MuZAotKyAgICBmaQotICAgICBmb3IgeCBpbiAke3Jl cG9zfS9mZWRvcmF7LC11cGRhdGVzfS5yZXBvOyBkbwotICAgICAgICAgYm49JChiYXNlbmFtZSAk e3h9KQotICAgICAgICAgY3AgJHggJHtkZXN0fS8ke2JufQotZGlmZiAtLWdpdCBhL3Rlc3RzL2Nv bXBvc2UtaW1hZ2Uuc2ggYi90ZXN0cy9jb21wb3NlLWltYWdlLnNoCi1pbmRleCA1MGFkMjcxNGFl Li4zNDEyNjA2YTg2IDEwMDc1NQotLS0tIGEvdGVzdHMvY29tcG9zZS1pbWFnZS5zaAotKysrIGIv dGVzdHMvY29tcG9zZS1pbWFnZS5zaAotQEAgLTU5LDcgKzU5LDEwIEBAICR7c3lzdGVtZF9zeXN1 c2Vyc30KLSByZXBvczoKLSAgIC0gZmVkb3JhICAjIEludGVudGlhbGx5IHVzaW5nIGZyb3plbiBH QSByZXBvCi0gRU9GCi0tY3AgL2V0Yy95dW0ucmVwb3MuZC8qLnJlcG8gLgotKyMgQ29weSByZXBv IGZpbGVzIGZyb20gd2hpY2hldmVyIGxvY2F0aW9uIGV4aXN0cwotK2ZvciBkIGluIC91c3Ivc2hh cmUvZG5mNS9yZXBvcy5kIC9ldGMveXVtLnJlcG9zLmQ7IGRvCi0rICB0ZXN0IC1kICIkZCIgJiYg Y3AgIiRkIi8qLnJlcG8gLiAyPi9kZXYvbnVsbCB8fCB0cnVlCi0rZG9uZQotIGlmIHJwbS1vc3Ry ZWUgY29tcG9zZSBpbWFnZSAtLWNhY2hlZGlyPS4uL2NhY2hlLWNvbnRhaW5lciAtLWxhYmVsPWZv bz1iYXIgLS1sYWJlbD1iYXo9YmxhaCAtLWluaXRpYWxpemUtbW9kZT1uZXZlciBtaW5pbWFsLnlh bWwgbWluaW1hbC5vY2lhcmNoaXZlIDI+L2Rldi9udWxsOyB0aGVuCi0gICBmYXRhbCAiYnVpbHQg YW4gaW1hZ2UgaW4gLS1pbml0aWFsaXplLW1vZGU9bmV2ZXIiCi0gZmkKLUBAIC05MCw3ICs5Mywx MCBAQCBwYWNrYWdlczoKLSByZXBvczoKLSAgIC0gZmVkb3JhICAjIEludGVudGlhbGx5IHVzaW5n IGZyb3plbiBHQSByZXBvCi0gRU9GCi0tY3AgL2V0Yy95dW0ucmVwb3MuZC8qLnJlcG8gLgotKyMg Q29weSByZXBvIGZpbGVzIGZyb20gd2hpY2hldmVyIGxvY2F0aW9uIGV4aXN0cwotK2ZvciBkIGlu IC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIC9ldGMveXVtLnJlcG9zLmQ7IGRvCi0rICB0ZXN0IC1k ICIkZCIgJiYgY3AgIiRkIi8qLnJlcG8gLiAyPi9kZXYvbnVsbCB8fCB0cnVlCi0rZG9uZQotICMg VW5mb3J0dW5hdGVseSwgLS1pbml0aWFsaXplLW1vZGU9aWYtbm90LWV4aXN0cyBpcyBicm9rZW4g d2l0aCAub2NpYXJjaGl2ZS4uLgotIHJwbS1vc3RyZWUgY29tcG9zZSBpbWFnZSAtLWNhY2hlZGly PS4uL2NhY2hlIC0tdG91Y2gtaWYtY2hhbmdlZD1jaGFuZ2VkLnN0YW1wIC0taW5pdGlhbGl6ZS1t b2RlPWFsd2F5cyBtaW5pbWFsLnlhbWwgbWluaW1hbC5vY2lhcmNoaXZlCi0gIyBUT0RPIGFjdHVh bGx5IHRlc3QgdGhpcyBjb250YWluZXIgaW1hZ2UKCmRpZmYgLS1naXQgYS9ycG0tb3N0cmVlLnNw ZWMgYi9ycG0tb3N0cmVlLnNwZWMKaW5kZXggNDIwZjQ3YS4uN2Y4ZTYzNCAxMDA2NDQKLS0tIGEv cnBtLW9zdHJlZS5zcGVjCisrKyBiL3JwbS1vc3RyZWUuc3BlYwpAQCAtMyw3ICszLDcgQEAKIAog U3VtbWFyeTogSHlicmlkIGltYWdlL3BhY2thZ2Ugc3lzdGVtCiBOYW1lOiBycG0tb3N0cmVlCi1W ZXJzaW9uOiAyMDI2LjIKK1ZlcnNpb246IDIwMjYuMwogUmVsZWFzZTogJXthdXRvcmVsZWFzZX0K IExpY2Vuc2U6IExHUEwtMi4wLW9yLWxhdGVyCiBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb3Jl b3MvcnBtLW9zdHJlZQpAQCAtMTEsMTYgKzExLDYgQEAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20v Y29yZW9zL3JwbS1vc3RyZWUKICMgaW4gdGhlIHVwc3RyZWFtIGdpdC4gIEl0IGFsc28gY29udGFp bnMgdmVuZG9yZWQgUnVzdCBzb3VyY2VzLgogU291cmNlMDogaHR0cHM6Ly9naXRodWIuY29tL2Nv cmVvcy9ycG0tb3N0cmVlL3JlbGVhc2VzL2Rvd25sb2FkL3Yle3ZlcnNpb259L3JwbS1vc3RyZWUt JXt2ZXJzaW9ufS50YXIueHoKIAotIyBTdXBwb3J0IHJlbG9jYXRlZCByZXBvIGNvbmZpZ3MgYW5k IEdQRyBrZXlzIChGZWRvcmEgNDUrKSAtICM1NjI0Ci0jIE1haW4gY29tbWl0IGZyb20gaHR0cHM6 Ly9naXRodWIuY29tL2NvcmVvcy9ycG0tb3N0cmVlL3B1bGwvNTYyNAotIyBTZWNvbmQgY29tbWl0 IGlzIGEgc3VicHJvamVjdCB1cGRhdGUgdGhhdCBjYW5ub3QgYXBwbHksIGluc3RlYWQKLSMgd2Ug aGF2ZSB0aGUgbmV4dCBwYXRjaAotUGF0Y2g6IDJkMTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5ZjBj NjRkNDlhYTgxNTQucGF0Y2gKLSMga2V5cmluZzogQWxzbyBzZWFyY2ggL3Vzci9zaGFyZS9wa2kv cnBtLWdwZyBmb3IgR1BHIGtleXMKLSMgaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1t YW5hZ2VtZW50L2xpYmRuZi9jb21taXQvYThlOWZjYzVjNWI4MGZlMjVlNzI1ZDAyOGU5ZjliODA4 Y2IwMjczZgotIyBlZGl0ZWQgdG8gYXBwbHkgdG8gdGhlIHJwbS1vc3RyZWUncyBidW5kbGVkIGxp YmRuZiAoanVzdCBhZGRlZCBvbmUgZXh0cmEgbGliZG5mLykKLVBhdGNoOiAwMDAxLWtleXJpbmct QWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3BnLWZvci1HUEcta2UucGF0Y2gKLQogIyBT ZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvcmVvcy9mZWRvcmEtY29yZW9zLXRyYWNrZXIvaXNzdWVz LzE3MTYKICMgb3N0cmVlIG5vdCBvbiBpNjg2IGZvciBSSEVMIDEwCiAjIGh0dHBzOi8vZ2l0aHVi LmNvbS9jb250YWluZXJzL2NvbXBvc2Vmcy9wdWxsLzIyOSNpc3N1ZWNvbW1lbnQtMTgzODczNTc2 NAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGI1NTVmZDcuLjBmZmRhMDcg MTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBAQAotU0hBNTEyIChy cG0tb3N0cmVlLTIwMjYuMi50YXIueHopID0gMWIxZWQ0M2NmZjE1OGJiNTEyMTIwMmQ2ZGZkZjE3 NjhiYzRlZTJkNzE3NDU3M2YyMDE5OWY4YTQxNDhkMzc3NWU4Y2ViZGU2NGU2MzMwZjNmYTNlZDkw NWY4NjViZmM5YThmM2JhMTZhYzE0ZDk2NGY0M2EwMTYxMzhmNzIyNWQKK1NIQTUxMiAocnBtLW9z dHJlZS0yMDI2LjMudGFyLnh6KSA9IDM0NTg2YTNlMWZmOWFjYzg4Y2E2MmU1NjUwY2EzMGZjZmU1 ODI1YjY2MDllZjM2ZDljNjAxZDU1OGNhOTQ2OGEyOTUyMjRhYmMzNTIwMTM1ZmIzODA1ZmNiODYw ZWRiMjViOGE5Njg5ZjU2Y2FmNDlkMWRmOTU1OTQyNTMxOGU1Cg==