From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1LGjdL-0004qP-5i for mharc-grub-devel@gnu.org; Sat, 27 Dec 2008 19:35:55 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LGjdI-0004qK-Bp for grub-devel@gnu.org; Sat, 27 Dec 2008 19:35:52 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LGjdE-0004q8-Oa for grub-devel@gnu.org; Sat, 27 Dec 2008 19:35:51 -0500 Received: from [199.232.76.173] (port=49879 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LGjdE-0004q5-GR for grub-devel@gnu.org; Sat, 27 Dec 2008 19:35:48 -0500 Received: from mta-out.inet.fi ([195.156.147.13]:52278 helo=jenni2.inet.fi) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LGjdC-00023p-3n for grub-devel@gnu.org; Sat, 27 Dec 2008 19:35:48 -0500 Received: from [84.249.165.26] (84.249.165.26) by jenni2.inet.fi (8.5.014) id 48FC5A88030C2DE7 for grub-devel@gnu.org; Sun, 28 Dec 2008 02:35:45 +0200 Message-ID: <4956C9DC.3090703@nic.fi> Date: Sun, 28 Dec 2008 02:35:40 +0200 From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= User-Agent: Thunderbird 2.0.0.18 (Windows/20081105) MIME-Version: 1.0 To: The development of GRUB 2 References: <20080901092753.3918cf73@gamma.lan> <20081004214640.5ab21f53@gibibit.com> <48E87FB9.8070603@nic.fi> <20081030121106.4efffecc@gibibit.com> <20081030205736.7e080a5e@gibibit.com> <493ADE06.7080001@nic.fi> <20081222091443.7280e623@gibibit.com> <49513053.20207@nic.fi> <20081223171711.15128818@gibibit.com> <4956C98F.3030006@nic.fi> In-Reply-To: <4956C98F.3030006@nic.fi> X-Enigmail-Version: 0.95.7 Content-Type: multipart/mixed; boundary="------------020205090500050207050607" X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Subject: Re: [PATCH] GSoC #10 new font engine (UTF-8 support+bugfix) X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Dec 2008 00:35:53 -0000 This is a multi-part message in MIME format. --------------020205090500050207050607 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit And the actual patch... --------------020205090500050207050607 Content-Type: text/plain; name="grub2-new-fontengine.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2-new-fontengine.patch" SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9u IDE5MzQpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5MiBAQAor MjAwOC0xMi0yOCAgQ29saW4gRCBCZW5uZXR0ICA8Y29saW5AZ2liaWJpdC5jb20+CisKKwlO ZXcgZm9udCBlbmdpbmUuCisJCisJQWRkaXRpb25hbCBjaGFuZ2VzIGJ5IFZlc2EgSsOkw6Rz a2Vsw6RpbmVuIDxjaGFhY0BuaWMuZmk+IHRvIGFkYXB0IHRvCisJYnVpbGQgc3lzdGVtIGFu ZCBmaXhlZCBnZnh0ZXJtLmMgdG8gd29yayB3aXRoIGRpZmZlcmVudAlzaXplZCBmb250cy4K KworCSogY29uZmlndXJlLmFjOiBDaGFuZ2VkIFVOSUZPTlRfSEVYIHRvIFVOSUZPTlRfQkRG LgorCQorCSogY29uZmlndXJlOiBSZS1nZW5lcmF0ZWQuCisJCisJKiBESVNUTElTVDogUmVt b3ZlZCBmb250L21hbmFnZXIuYy4KKwlBZGRlZCBmb250L2ZvbnQuYy4KKwlBZGRlZCBmb250 L2ZvbnRfY21kLmMuCisJCisJKiBNYWtlZmlsZS5pbjogQ2hhbmdlZCBVTklGT05UX0hFWCB0 byBVTklGT05UX0JERi4gIEFkZGVkIEZvbnQgdG9vbAorCWNvbXBpbGF0aW9uLgorCQorCSog aW5jbHVkZS9ncnViL21pc2MuaCAoZ3J1Yl91dGY4X3RvX3VjczQpOiBDaGFuZ2VkIHByb3Rv dHlwZS4gIENoYW5nZWQgdXNlcnMuCisJCisJKiBrZXJuL21pc2MuYyAoZ3J1Yl91dGY4X3Rv X3VjczQpOiBDaGFuZ2VkIHByb3RvdHlwZS4gCisKKwkqIGtlcm4vdGVybS5jOiBDaGFuZ2Vk IHVzZXJzIG9mIGdydWJfdXRmOF90b191Y3M0LgorCQorCSogbm9ybWFsL21lbnUuYzogTGlr ZXdpc2UuCisJCQorCSogY29uZi9jb21tb24ucm1rIChmb250X21vZF9TT1VSQ0VTKTogUmVt b3ZlZCBmb250L21hbmFnZXIuYy4KKwkoZm9udF9tb2RfU09VUkNFUyk6IEFkZGVkIGZvbnQv Zm9udF9jbWQuYywgZm9udC9mb250LmMuCisJCisJKiBpbmNsdWRlL2dydWIvZm9udC5oOiBS ZXBsYWNlZCB3aXRoIG5ldyBmaWxlLgorCQorCSogaW5jbHVkZS9ncnViL3ZpZGVvLmggKEdS VUJfVklERU9fTU9ERV9UWVBFX0FMUEhBKTogQ2hhbmdlZCB2YWx1ZS4KKwkoR1JVQl9WSURF T19NT0RFX1RZUEVfRE9VQkxFX0JVRkZFUkVEKTogTGlrZXdpc2UuCisJKEdSVUJfVklERU9f TU9ERV9UWVBFX0NPTE9SX01BU0spOiBMaWtld2lzZS4KKwkoR1JVQl9WSURFT19NT0RFX1RZ UEVfMUJJVF9CSVRNQVApOiBBZGRlZC4KKwkoZ3J1Yl92aWRlb19ibGl0X2Zvcm1hdCk6IEFk ZGVkIEdSVUJfVklERU9fQkxJVF9GT1JNQVRfMUJJVF9QQUNLRUQuCisJKGdydWJfdmlkZW9f bW9kZV9pbmZvKTogQWRkZWQgYmdfcmVkLCBiZ19ncmVlbiwgYmdfYmx1ZSwgYmdfYWxwaGEs IAorCWZnX3JlZCwgZmdfZ3JlZW4sIGZnX2JsdWUsIGZnX2FscGhhLgorCShncnViX3ZpZGVv X2FkYXB0ZXIpOiBSZW1vdmVkIGJsaXRfZ2x5cGguCisJKGdydWJfdmlkZW9fYmxpdF9nbHlw aCk6IFJlbW92ZWQuCQorCQorCSogZm9udC9tYW5hZ2VyLmM6IFJlbW92ZWQgZmlsZS4KKwkK KwkqIGZvbnQvZm9udC5jOiBOZXcgZmlsZS4gCisJCisJKiBmb250L2ZvbnRfY21kLmM6IExp a2V3aXNlLgorCQorCSogdmlkZW8vdmlkZW8uYyAoZ3J1Yl92aWRlb19ibGl0X2dseXBoKTog UmVtb3ZlZC4KKwkKKwkqIHZpZGVvL2kzODYvcGMvdmJlLmMgKGdydWJfdmlkZW9fdmJlX21h cF9yZ2IpOiBBZGRlZCAxLWJpdCBzdXBwb3J0LgorCShncnViX3ZpZGVvX3ZiZV9tYXBfcmdi YSk6IExpa2V3aXNlLgorCShncnViX3ZpZGVvX3ZiZV91bm1hcF9jb2xvcl9pbnQpOiBMaWtl d2lzZS4KKwkoZ3J1Yl92aWRlb192YmVfYmxpdF9nbHlwaCk6IFJlbW92ZWQuCisJKGdydWJf dmlkZW9fdmJlX2FkYXB0ZXIpOiBSZW1vdmVkIGJsaXRfZ2x5cGguCisJCisJKiB2aWRlby9p Mzg2L3BjL3ZiZXV0aWwuYyAoZ2V0X2RhdGFfcHRyKTogQWRkZWQgMS1iaXQgc3VwcG9ydC4K KwkoZ2V0X3BpeGVsKTogTGlrZXdpc2UuCisJKHNldF9waXhlbCk6IExpa2V3aXNlLiAKKwkK KwkqIGNvbW1hbmRzL3ZpZGVvdGVzdC5jIChncnViX2NtZF92aWRlb3Rlc3QpOiBBZGRlZCBt b3JlIHRlc3RzIGZvciBmb250cy4KKwkKKwkqIHRlcm0vZ2Z4dGVybS5jOiBBZGFwdGVkIHRv IG5ldyBmb250IGVuZ2luZS4KKwkKKwkqIHRlcm0vaTM4Ni9wYy92ZXNhZmIuYzogTWFya2Vk IGFzIGRlcHJlY2F0ZWQuICBNYWRlIGl0IGNvbXBpbGUuCisJCisJKiB0ZXJtL2kzODYvcGMv dmdhLmM6IExpa2V3aXNlLgorCQorCSogdXRpbC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnVi L2ZvbnR0b29sL0JERkxvYWRlci5qYXZhOiBOZXcgZmlsZS4KKwkKKwkqIHV0aWwvZm9udHRv b2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9DaGFyRGVmcy5qYXZhOiBMaWtld2lzZS4K KwkKKwkqIHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9DaGFyYWN0 ZXJSYW5nZS5qYXZhOiBMaWtld2lzZS4KKwkKKwkqIHV0aWwvZm9udHRvb2wvc3JjL29yZy9n bnUvZ3J1Yi9mb250dG9vbC9DaGFyYWN0ZXJSYW5nZS5qYXZhOiBMaWtld2lzZS4KKwkKKwkq IHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9Db252ZXJ0ZXIuamF2 YTogTGlrZXdpc2UuCisJCisJKiB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9u dHRvb2wvRm9udC5qYXZhOiBMaWtld2lzZS4KKwkKKwkqIHV0aWwvZm9udHRvb2wvc3JjL29y Zy9nbnUvZ3J1Yi9mb250dG9vbC9HbHlwaC5qYXZhOiBMaWtld2lzZS4KKwkKKwkqIHV0aWwv Zm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9QRkYyU2VjdGlvbnMuamF2YTog TGlrZXdpc2UuCisJCisJKiB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRv b2wvUEZGMldyaXRlci5qYXZhOiBMaWtld2lzZS4KKworCSogdXRpbC9ncnViLmQvMDBfaGVh ZGVyLmluOiBDaGFuZ2VkIHRvIHVzZSBuZXcgbG9hZGZvbnQgY29tbWFuZC4KKwkKKwkqIHV0 aWwvZ3J1Yi1ta2NvbmZpZ19saWIuaW46IENoYW5nZWQgZm9udCBleHRlbnNpb24uCisJCiAy MDA4LTEyLTEyICBBbGV4IFNtaXRoICA8YWxleEBhbGV4LXNtaXRoLm1lLnVrPgogCiAJKiBm cy9pMzg2L3BjL3B4ZS5jIChncnViX3B4ZWZzX29wZW4pOiBIYW5kbGUgdGhlIG9uZSBvcGVu IGNvbm5lY3Rpb24KSW5kZXg6IGtlcm4vdGVybS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtlcm4v dGVybS5jCShyZXZpc2lvbiAxOTM0KQorKysga2Vybi90ZXJtLmMJKHdvcmtpbmcgY29weSkK QEAgLTEsNiArMSw2IEBACiAvKgogICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rs b2FkZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMywyMDA1LDIwMDcgIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMiwyMDAzLDIw MDUsMjAwNywyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAqCiAgKiAg R1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwOCw3ICsyMDgsNyBAQAogICBncnVi X3NzaXplX3QgcmV0OwogCiAgIGJ1ZltzaXplKytdID0gYzsKLSAgcmV0ID0gZ3J1Yl91dGY4 X3RvX3VjczQgKCZjb2RlLCBidWYsIHNpemUpOworICByZXQgPSBncnViX3V0ZjhfdG9fdWNz NCAoJmNvZGUsIDEsIGJ1Ziwgc2l6ZSwgMCk7CiAgIAogICBpZiAocmV0ID4gMCkKICAgICB7 CkluZGV4OiBrZXJuL21pc2MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZXJuL21pc2MuYwkocmV2 aXNpb24gMTkzNCkKKysrIGtlcm4vbWlzYy5jCSh3b3JraW5nIGNvcHkpCkBAIC05NTEsMTMg Kzk1MSwxNiBAQAogICByZXR1cm4gZGVzdDsKIH0KIAotLyogQ29udmVydCBhbiBVVEYtOCBz dHJpbmcgdG8gYW4gVUNTLTQgc3RyaW5nLiBSZXR1cm4gdGhlIG51bWJlciBvZgotICAgY2hh cmFjdGVycyBjb252ZXJ0ZWQuIERFU1QgbXVzdCBiZSBhYmxlIHRvIGhvbGQgYXQgbGVhc3Qg U0laRQotICAgY2hhcmFjdGVycyAod2hlbiB0aGUgaW5wdXQgaXMgdW5rbm93bikuIElmIGFu IGludmFsaWQgc2VxdWVuY2UgaXMgZm91bmQsCi0gICByZXR1cm4gLTEuICAqLworLyogQ29u dmVydCBhIChwb3NzaWJseSBudWxsLXRlcm1pbmF0ZWQpIFVURi04IHN0cmluZyBvZiBhdCBt b3N0IFNSQ1NJWkUKKyAgIGJ5dGVzIChpZiBTUkNTSVpFIGlzIC0xLCBpdCBpcyBpZ25vcmVk KSBpbiBsZW5ndGggdG8gYSBVQ1MtNCBzdHJpbmcuCisgICBSZXR1cm4gdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzIGNvbnZlcnRlZC4gREVTVCBtdXN0IGJlIGFibGUgdG8gaG9sZAorICAg YXQgbGVhc3QgREVTVFNJWkUgY2hhcmFjdGVycy4gSWYgYW4gaW52YWxpZCBzZXF1ZW5jZSBp cyBmb3VuZCwgcmV0dXJuIC0xLgorICAgSWYgU1JDRU5EIGlzIG5vdCBOVUxMLCB0aGVuICpT UkNFTkQgaXMgc2V0IHRvIHRoZSBuZXh0IGJ5dGUgYWZ0ZXIgdGhlCisgICBsYXN0IGJ5dGUg dXNlZCBpbiBTUkMuICAqLwogZ3J1Yl9zc2l6ZV90Ci1ncnViX3V0ZjhfdG9fdWNzNCAoZ3J1 Yl91aW50MzJfdCAqZGVzdCwgY29uc3QgZ3J1Yl91aW50OF90ICpzcmMsCi0JCSAgIGdydWJf c2l6ZV90IHNpemUpCitncnViX3V0ZjhfdG9fdWNzNCAoZ3J1Yl91aW50MzJfdCAqZGVzdCwg Z3J1Yl9zaXplX3QgZGVzdHNpemUsCisJCSAgIGNvbnN0IGdydWJfdWludDhfdCAqc3JjLCBn cnViX3NpemVfdCBzcmNzaXplLAorCQkgICBjb25zdCBncnViX3VpbnQ4X3QgKipzcmNlbmQp CiB7CiAgIGdydWJfdWludDMyX3QgKnAgPSBkZXN0OwogICBpbnQgY291bnQgPSAwOwpAQCAt OTYzLDEwICs5NjYsMTQgQEAKICAgaW50IGNvdW50ID0gMDsKICAgZ3J1Yl91aW50MzJfdCBj b2RlID0gMDsKICAgCi0gIHdoaWxlIChzaXplLS0pCisgIGlmIChzcmNlbmQpCisgICAgKnNy Y2VuZCA9IHNyYzsKKworICB3aGlsZSAoc3Jjc2l6ZSAmJiBkZXN0c2l6ZSkKICAgICB7CiAg ICAgICBncnViX3VpbnQzMl90IGMgPSAqc3JjKys7Ci0gICAgICAKKyAgICAgIGlmIChzcmNz aXplICE9IChncnViX3NpemVfdCktMSkKKwlzcmNzaXplLS07CiAgICAgICBpZiAoY291bnQp CiAJewogCSAgaWYgKChjICYgMHhjMCkgIT0gMHg4MCkKQEAgLTk4Myw2ICs5OTAsOSBAQAog CX0KICAgICAgIGVsc2UKIAl7CisJICBpZiAoYyA9PSAwKQorCSAgICBicmVhazsKKwkgIAog CSAgaWYgKChjICYgMHg4MCkgPT0gMHgwMCkKIAkgICAgY29kZSA9IGM7CiAJICBlbHNlIGlm ICgoYyAmIDB4ZTApID09IDB4YzApCkBAIC0xMDExLDcgKzEwMjEsNiBAQAogCSAgICAgIGNv ZGUgPSBjICYgMHgwMTsKIAkgICAgfQogCSAgZWxzZQotCSAgICAvKiBpbnZhbGlkICovCiAJ ICAgIHJldHVybiAtMTsKIAl9CiAKQEAgLTEwMTYsOSArMTAyNSwxNCBAQAogCX0KIAogICAg ICAgaWYgKGNvdW50ID09IDApCi0JKnArKyA9IGNvZGU7CisJeworCSAgKnArKyA9IGNvZGU7 CisJICBkZXN0c2l6ZS0tOworCX0KICAgICB9CiAKKyAgaWYgKHNyY2VuZCkKKyAgICAqc3Jj ZW5kID0gc3JjOwogICByZXR1cm4gcCAtIGRlc3Q7CiB9CiAKSW5kZXg6IHRlcm0vZ2Z4dGVy bS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHRlcm0vZ2Z4dGVybS5jCShyZXZpc2lvbiAxOTM0KQor KysgdGVybS9nZnh0ZXJtLmMJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDYgQEAKICNk ZWZpbmUgREVGQVVMVF9WSURFT19IRUlHSFQJNDgwCiAjZGVmaW5lIERFRkFVTFRfVklERU9f RkxBR1MJMAogCi0jZGVmaW5lIERFRkFVTFRfQ0hBUl9XSURUSCAgCTgKLSNkZWZpbmUgREVG QVVMVF9DSEFSX0hFSUdIVCAJMTYKLQogI2RlZmluZSBERUZBVUxUX0JPUkRFUl9XSURUSAkx MAogCiAjZGVmaW5lIERFRkFVTFRfU1RBTkRBUkRfQ09MT1IgIDB4MDcKQEAgLTY5LDI3ICs2 NiwzMiBAQAogCiBzdHJ1Y3QgZ3J1Yl92aXJ0dWFsX3NjcmVlbgogewotICAvKiBEaW1lbnNp b25zIG9mIHRoZSB2aXJ0dWFsIHNjcmVlbi4gICovCisgIC8qIERpbWVuc2lvbnMgb2YgdGhl IHZpcnR1YWwgc2NyZWVuIGluIHBpeGVscy4gICovCiAgIHVuc2lnbmVkIGludCB3aWR0aDsK ICAgdW5zaWduZWQgaW50IGhlaWdodDsKIAotICAvKiBPZmZzZXQgaW4gdGhlIGRpc3BsYXku ICAqLworICAvKiBPZmZzZXQgaW4gdGhlIGRpc3BsYXkgaW4gcGl4ZWxzLiAgKi8KICAgdW5z aWduZWQgaW50IG9mZnNldF94OwogICB1bnNpZ25lZCBpbnQgb2Zmc2V0X3k7CiAKLSAgLyog VFRZIENoYXJhY3RlciBzaXplcy4gICovCi0gIHVuc2lnbmVkIGludCBjaGFyX3dpZHRoOwot ICB1bnNpZ25lZCBpbnQgY2hhcl9oZWlnaHQ7CisgIC8qIFRUWSBDaGFyYWN0ZXIgc2l6ZXMg aW4gcGl4ZXMuICAqLworICB1bnNpZ25lZCBpbnQgbm9ybWFsX2NoYXJfd2lkdGg7CisgIHVu c2lnbmVkIGludCBub3JtYWxfY2hhcl9oZWlnaHQ7CiAKLSAgLyogVmlydHVhbCBzY3JlZW4g VFRZIHNpemUuICAqLworICAvKiBWaXJ0dWFsIHNjcmVlbiBUVFkgc2l6ZSBpbiBjaGFyYWN0 ZXJzLiAgKi8KICAgdW5zaWduZWQgaW50IGNvbHVtbnM7CiAgIHVuc2lnbmVkIGludCByb3dz OwogCi0gIC8qIEN1cnJlbnQgY3Vyc29yIGRldGFpbHMuICAqLworICAvKiBDdXJyZW50IGN1 cnNvciBsb2NhdGlvbiBpbiBjaGFyYWN0ZXJzLiAgKi8KICAgdW5zaWduZWQgaW50IGN1cnNv cl94OwogICB1bnNpZ25lZCBpbnQgY3Vyc29yX3k7CisKKyAgLyogQ3VycmVudCBjdXJzb3Ig c3RhdGUuICovCiAgIGludCBjdXJzb3Jfc3RhdGU7CiAKKyAgLyogRm9udCBzZXR0aW5ncy4g Ki8KKyAgZ3J1Yl9mb250X3QgZm9udDsKKwogICAvKiBUZXJtaW5hbCBjb2xvciBzZXR0aW5n cy4gICovCiAgIGdydWJfdWludDhfdCBzdGFuZGFyZF9jb2xvcl9zZXR0aW5nOwogICBncnVi X3VpbnQ4X3Qgbm9ybWFsX2NvbG9yX3NldHRpbmc7CkBAIC0xMjUsNiArMTI3LDEwIEBACiBz dGF0aWMgdm9pZCBkaXJ0eV9yZWdpb25fYWRkIChpbnQgeCwgaW50IHksIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQg aGVpZ2h0KTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfbm9ybWFsX2NoYXJh Y3Rlcl93aWR0aCAoZ3J1Yl9mb250X3QgZm9udCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFy IGNhbGN1bGF0ZV9jaGFyYWN0ZXJfd2lkdGggKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKmds eXBoKTsKKwogc3RhdGljIHZvaWQKIHNldF90ZXJtX2NvbG9yIChncnViX3VpbnQ4X3QgdGVy bV9jb2xvcikKIHsKQEAgLTE2OCw3ICsxNzQsOCBAQAogCiBzdGF0aWMgZ3J1Yl9lcnJfdAog Z3J1Yl92aXJ0dWFsX3NjcmVlbl9zZXR1cCAodW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGlu dCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1 bnNpZ25lZCBpbnQgaGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZm9udF9uYW1lKQogewogICAvKiBGcmVlIG9sZCB2aXJ0 dWFsIHNjcmVlbi4gICovCiAgIGdydWJfdmlydHVhbF9zY3JlZW5fZnJlZSAoKTsKQEAgLTE3 NCw2ICsxODEsMTAgQEAKICAgZ3J1Yl92aXJ0dWFsX3NjcmVlbl9mcmVlICgpOwogCiAgIC8q IEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGRhdGEuICAqLworICB2aXJ0dWFsX3NjcmVlbi5m b250ID0gZ3J1Yl9mb250X2dldCAoZm9udF9uYW1lKTsKKyAgaWYgKCF2aXJ0dWFsX3NjcmVl bi5mb250KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRk9OVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIk5vIGZvbnQgbG9hZGVkLiIpOwogICB2aXJ0dWFsX3Nj cmVlbi53aWR0aCA9IHdpZHRoOwogICB2aXJ0dWFsX3NjcmVlbi5oZWlnaHQgPSBoZWlnaHQ7 CiAgIHZpcnR1YWxfc2NyZWVuLm9mZnNldF94ID0geDsKQEAgLTE3OCw4ICsxODksMTAgQEAK ICAgdmlydHVhbF9zY3JlZW4uaGVpZ2h0ID0gaGVpZ2h0OwogICB2aXJ0dWFsX3NjcmVlbi5v ZmZzZXRfeCA9IHg7CiAgIHZpcnR1YWxfc2NyZWVuLm9mZnNldF95ID0geTsKLSAgdmlydHVh bF9zY3JlZW4uY2hhcl93aWR0aCA9IERFRkFVTFRfQ0hBUl9XSURUSDsKLSAgdmlydHVhbF9z Y3JlZW4uY2hhcl9oZWlnaHQgPSBERUZBVUxUX0NIQVJfSEVJR0hUOworICB2aXJ0dWFsX3Nj cmVlbi5ub3JtYWxfY2hhcl93aWR0aCA9CisgICAgY2FsY3VsYXRlX25vcm1hbF9jaGFyYWN0 ZXJfd2lkdGggKHZpcnR1YWxfc2NyZWVuLmZvbnQpOworICB2aXJ0dWFsX3NjcmVlbi5ub3Jt YWxfY2hhcl9oZWlnaHQgPQorICAgIGdydWJfZm9udF9nZXRfbWF4X2NoYXJfaGVpZ2h0ICh2 aXJ0dWFsX3NjcmVlbi5mb250KTsKICAgdmlydHVhbF9zY3JlZW4uY3Vyc29yX3ggPSAwOwog ICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSA9IDA7CiAgIHZpcnR1YWxfc2NyZWVuLmN1cnNv cl9zdGF0ZSA9IDE7CkBAIC0xODUsOCArMTk4LDggQEAKICAgdmlydHVhbF9zY3JlZW4uY3Vy c29yX3N0YXRlID0gMTsKIAogICAvKiBDYWxjdWxhdGUgc2l6ZSBvZiB0ZXh0IGJ1ZmZlci4g ICovCi0gIHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMgPSB2aXJ0dWFsX3NjcmVlbi53aWR0aCAv IHZpcnR1YWxfc2NyZWVuLmNoYXJfd2lkdGg7Ci0gIHZpcnR1YWxfc2NyZWVuLnJvd3MgPSB2 aXJ0dWFsX3NjcmVlbi5oZWlnaHQgLyB2aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodDsKKyAg dmlydHVhbF9zY3JlZW4uY29sdW1ucyA9IHZpcnR1YWxfc2NyZWVuLndpZHRoIC8gdmlydHVh bF9zY3JlZW4ubm9ybWFsX2NoYXJfd2lkdGg7CisgIHZpcnR1YWxfc2NyZWVuLnJvd3MgPSB2 aXJ0dWFsX3NjcmVlbi5oZWlnaHQgLyB2aXJ0dWFsX3NjcmVlbi5ub3JtYWxfY2hhcl9oZWln aHQ7CiAKICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0ZXh0IGJ1ZmZlci4gICovCiAgIHZp cnR1YWxfc2NyZWVuLnRleHRfYnVmZmVyID0KQEAgLTIyNSw2ICsyMzgsNyBAQAogc3RhdGlj IGdydWJfZXJyX3QKIGdydWJfZ2Z4dGVybV9pbml0ICh2b2lkKQogeworICBjaGFyICpmb250 X25hbWU7CiAgIGNoYXIgKm1vZGV2YXI7CiAgIGludCB3aWR0aCA9IERFRkFVTFRfVklERU9f V0lEVEg7CiAgIGludCBoZWlnaHQgPSBERUZBVUxUX1ZJREVPX0hFSUdIVDsKQEAgLTIzMiw2 ICsyNDYsMTEgQEAKICAgaW50IGZsYWdzID0gREVGQVVMVF9WSURFT19GTEFHUzsKICAgZ3J1 Yl92aWRlb19jb2xvcl90IGNvbG9yOwogCisgIC8qIFNlbGVjdCB0aGUgZm9udCB0byB1c2Uu ICovCisgIGZvbnRfbmFtZSA9IGdydWJfZW52X2dldCAoImdmeHRlcm1fZm9udCIpOworICBp ZiAoISBmb250X25hbWUpCisgICAgZm9udF9uYW1lID0gIiI7ICAgLyogQWxsb3cgZmFsbGJh Y2sgdG8gYW55IGZvbnQuICovCisKICAgLyogUGFyc2UgZ2Z4bW9kZSBlbnZpcm9ubWVudCB2 YXJpYWJsZSBpZiBzZXQuICAqLwogICBtb2RldmFyID0gZ3J1Yl9lbnZfZ2V0ICgiZ2Z4bW9k ZSIpOwogICBpZiAobW9kZXZhcikKQEAgLTQ3MSw3ICs0OTAsNyBAQAogCiAgIC8qIENyZWF0 ZSB2aXJ0dWFsIHNjcmVlbi4gICovCiAgIGlmIChncnViX3ZpcnR1YWxfc2NyZWVuX3NldHVw IChERUZBVUxUX0JPUkRFUl9XSURUSCwgREVGQVVMVF9CT1JERVJfV0lEVEgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KSAhPSBHUlVCX0VSUl9O T05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwg Zm9udF9uYW1lKSAhPSBHUlVCX0VSUl9OT05FKQogICAgIHsKICAgICAgIGdydWJfdmlkZW9f cmVzdG9yZSAoKTsKICAgICAgIHJldHVybiBncnViX2Vycm5vOwpAQCAtNjU3LDcgKzY3Niw3 IEBACiB3cml0ZV9jaGFyICh2b2lkKQogewogICBzdHJ1Y3QgZ3J1Yl9jb2xvcmVkX2NoYXIg KnA7Ci0gIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggZ2x5cGg7CisgIHN0cnVjdCBncnViX2Zv bnRfZ2x5cGggKmdseXBoOwogICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3I7CiAgIGdydWJf dmlkZW9fY29sb3JfdCBiZ2NvbG9yOwogICB1bnNpZ25lZCBpbnQgeDsKQEAgLTY2Miw2ICs2 ODEsNyBAQAogICBncnViX3ZpZGVvX2NvbG9yX3QgYmdjb2xvcjsKICAgdW5zaWduZWQgaW50 IHg7CiAgIHVuc2lnbmVkIGludCB5OworICBpbnQgYXNjZW50OwogCiAgIC8qIEZpbmQgb3V0 IGFjdGl2ZSBjaGFyYWN0ZXIuICAqLwogICBwID0gKHZpcnR1YWxfc2NyZWVuLnRleHRfYnVm ZmVyCkBAIC02NzEsNyArNjkxLDggQEAKICAgcCAtPSBwLT5pbmRleDsKIAogICAvKiBHZXQg Z2x5cGggZm9yIGNoYXJhY3Rlci4gICovCi0gIGdydWJfZm9udF9nZXRfZ2x5cGggKHAtPmNv ZGUsICZnbHlwaCk7CisgIGdseXBoID0gZ3J1Yl9mb250X2dldF9nbHlwaCAodmlydHVhbF9z Y3JlZW4uZm9udCwgcC0+Y29kZSk7CisgIGFzY2VudCA9IGdydWJfZm9udF9nZXRfYXNjZW50 ICh2aXJ0dWFsX3NjcmVlbi5mb250KTsKIAogICBjb2xvciA9IHAtPmZnX2NvbG9yOwogICBi Z2NvbG9yID0gcC0+YmdfY29sb3I7CkBAIC02NzYsMTMgKzY5NywxMyBAQAogICBjb2xvciA9 IHAtPmZnX2NvbG9yOwogICBiZ2NvbG9yID0gcC0+YmdfY29sb3I7CiAKLSAgeCA9IHZpcnR1 YWxfc2NyZWVuLmN1cnNvcl94ICogdmlydHVhbF9zY3JlZW4uY2hhcl93aWR0aDsKLSAgeSA9 IHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ICogdmlydHVhbF9zY3JlZW4uY2hhcl9oZWlnaHQ7 CisgIHggPSB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCAqIHZpcnR1YWxfc2NyZWVuLm5vcm1h bF9jaGFyX3dpZHRoOworICB5ID0gdmlydHVhbF9zY3JlZW4uY3Vyc29yX3kgKiB2aXJ0dWFs X3NjcmVlbi5ub3JtYWxfY2hhcl9oZWlnaHQ7CiAKICAgLyogUmVuZGVyIGdseXBoIHRvIHRl eHQgbGF5ZXIuICAqLwogICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAo dGV4dF9sYXllcik7Ci0gIGdydWJfdmlkZW9fZmlsbF9yZWN0IChiZ2NvbG9yLCB4LCB5LCBn bHlwaC53aWR0aCwgZ2x5cGguaGVpZ2h0KTsKLSAgZ3J1Yl92aWRlb19ibGl0X2dseXBoICgm Z2x5cGgsIGNvbG9yLCB4LCB5KTsKKyAgZ3J1Yl92aWRlb19maWxsX3JlY3QgKGJnY29sb3Is IHgsIHksIGdseXBoLT53aWR0aCwgZ2x5cGgtPmhlaWdodCk7CisgIGdydWJfZm9udF9kcmF3 X2dseXBoIChnbHlwaCwgY29sb3IsIHgsIHkgKyBhc2NlbnQpOwogICBncnViX3ZpZGVvX3Nl dF9hY3RpdmVfcmVuZGVyX3RhcmdldCAoR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0RJU1BM QVkpOwogCiAgIC8qIE1hcmsgY2hhcmFjdGVyIHRvIGJlIGRyYXduLiAgKi8KQEAgLTY4Nywx MSArNzA4LDExIEBACiAKICAgLyogTWFyayBjaGFyYWN0ZXIgdG8gYmUgZHJhd24uICAqLwog ICBkaXJ0eV9yZWdpb25fYWRkICh2aXJ0dWFsX3NjcmVlbi5vZmZzZXRfeCArIHgsIHZpcnR1 YWxfc2NyZWVuLm9mZnNldF95ICsgeSwKLSAgICAgICAgICAgICAgICAgICAgZ2x5cGgud2lk dGgsIGdseXBoLmhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGdseXBoLT53aWR0aCwg Z2x5cGgtPmhlaWdodCk7CiB9CiAKIHN0YXRpYyB2b2lkCi13cml0ZV9jdXJzb3IgKHZvaWQp CitkcmF3X2N1cnNvciAoaW50IHNob3cpCiB7CiAgIHVuc2lnbmVkIGludCB4OwogICB1bnNp Z25lZCBpbnQgeTsKQEAgLTcwMCwxMiArNzIxLDIyIEBACiAgIGdydWJfdmlkZW9fY29sb3Jf dCBjb2xvcjsKIAogICAvKiBEZXRlcm1pbmUgY3Vyc29yIHByb3BlcnRpZXMgYW5kIHBvc2l0 aW9uIG9uIHRleHQgbGF5ZXIuICovCi0gIHggPSB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCAq IHZpcnR1YWxfc2NyZWVuLmNoYXJfd2lkdGg7Ci0gIHkgPSAoKHZpcnR1YWxfc2NyZWVuLmN1 cnNvcl95ICsgMSkgKiB2aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCkgLSAzOyAgCi0gIHdp ZHRoID0gdmlydHVhbF9zY3JlZW4uY2hhcl93aWR0aDsKKyAgeCA9IHZpcnR1YWxfc2NyZWVu LmN1cnNvcl94ICogdmlydHVhbF9zY3JlZW4ubm9ybWFsX2NoYXJfd2lkdGg7CisgIHkgPSAo dmlydHVhbF9zY3JlZW4uY3Vyc29yX3kgKiB2aXJ0dWFsX3NjcmVlbi5ub3JtYWxfY2hhcl9o ZWlnaHQKKyAgICAgICArIGdydWJfZm9udF9nZXRfYXNjZW50ICh2aXJ0dWFsX3NjcmVlbi5m b250KSk7CisgIHdpZHRoID0gdmlydHVhbF9zY3JlZW4ubm9ybWFsX2NoYXJfd2lkdGg7CiAg IGhlaWdodCA9IDI7CiAKLSAgY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5mZ19jb2xvcjsKKyAg aWYgKHNob3cpCisgICAgeworICAgICAgY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5mZ19jb2xv cjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjb2xvciA9IHZpcnR1YWxfc2NyZWVu LmJnX2NvbG9yOworICAgICAgeSA9IHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ICogdmlydHVh bF9zY3JlZW4ubm9ybWFsX2NoYXJfaGVpZ2h0OworICAgICAgaGVpZ2h0ID0gdmlydHVhbF9z Y3JlZW4ubm9ybWFsX2NoYXJfaGVpZ2h0OworICAgIH0KIAogICAvKiBSZW5kZXIgY3Vyc29y IHRvIHRleHQgbGF5ZXIuICAqLwogICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3Rh cmdldCAodGV4dF9sYXllcik7CkBAIC03MjcsNyArNzU4LDcgQEAKICAgaWYgKCFiaXRtYXAp CiAgICAgewogICAgICAgLyogUmVtb3ZlIGN1cnNvci4gICovCi0gICAgICB3cml0ZV9jaGFy ICgpOworICAgICAgZHJhd19jdXJzb3IgKDApOwogCiAgICAgICAvKiBSZWRyYXcgb25seSBj aGFuZ2VkIHJlZ2lvbnMuICAqLwogICAgICAgZGlydHlfcmVnaW9uX3JlZHJhdyAoKTsKQEAg LTc1NSw3ICs3ODYsNyBAQAogICAvKiBTY3JvbGwgcGh5c2ljYWwgc2NyZWVuLiAgKi8KICAg Z3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKHRleHRfbGF5ZXIpOwogICBj b2xvciA9IHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yOwotICBncnViX3ZpZGVvX3Njcm9sbCAo Y29sb3IsIDAsIC12aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCk7CisgIGdydWJfdmlkZW9f c2Nyb2xsIChjb2xvciwgMCwgLXZpcnR1YWxfc2NyZWVuLm5vcm1hbF9jaGFyX2hlaWdodCk7 CiAgIGdydWJfdmlkZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JF TkRFUl9UQVJHRVRfRElTUExBWSk7CiAgIAogICAvKiBJZiB3ZSBoYXZlIGJpdG1hcCwgcmUt ZHJhdyBzY3JlZW4sIG90aGVyd2lzZSBzY3JvbGwgcGh5c2ljYWwgc2NyZWVuIHRvby4gICov CkBAIC03NjcsMTYgKzc5OCwxNiBAQAogICBlbHNlCiAgICAgeyAgICAgIAogICAgICAgLyog Q2xlYXIgbmV3IGJvcmRlciBhcmVhLiAgKi8KLSAgICAgIGdydWJfdmlkZW9fZmlsbF9yZWN0 IChjb2xvciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF9zY3JlZW4u b2Zmc2V0X3gsIHZpcnR1YWxfc2NyZWVuLm9mZnNldF95LCAKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi53aWR0aCwgdmlydHVhbF9zY3JlZW4uY2hhcl9o ZWlnaHQpOwotICAgICAgCisgICAgICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF9zY3JlZW4ub2Zmc2V0X3gsIHZp cnR1YWxfc2NyZWVuLm9mZnNldF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZp cnR1YWxfc2NyZWVuLndpZHRoLCB2aXJ0dWFsX3NjcmVlbi5ub3JtYWxfY2hhcl9oZWlnaHQp OworCiAgICAgICAvKiBTY3JvbGwgcGh5c2ljYWwgc2NyZWVuLiAgKi8KLSAgICAgIGdydWJf dmlkZW9fc2Nyb2xsIChjb2xvciwgMCwgLXZpcnR1YWxfc2NyZWVuLmNoYXJfaGVpZ2h0KTsg ICAgICAKKyAgICAgIGdydWJfdmlkZW9fc2Nyb2xsIChjb2xvciwgMCwgLXZpcnR1YWxfc2Ny ZWVuLm5vcm1hbF9jaGFyX2hlaWdodCk7CiAKICAgICAgIC8qIERyYXcgY3Vyc29yIGlmIHZp c2libGUuICAqLwogICAgICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKLSAg ICAgICAgd3JpdGVfY3Vyc29yICgpOworCWRyYXdfY3Vyc29yICgxKTsKICAgICB9CiB9CiAK QEAgLTc5MSw3ICs4MjIsNyBAQAogICAgIHsKICAgICAgIC8qIEVyYXNlIGN1cnJlbnQgY3Vy c29yLCBpZiBhbnkuICAqLwogICAgICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0 ZSkKLSAgICAgICAgd3JpdGVfY2hhciAoKTsKKwlkcmF3X2N1cnNvciAoMCk7CiAKICAgICAg IHN3aXRjaCAoYykKICAgICAgICAgewpAQCAtODE0LDE4ICs4NDUsMjcgQEAKIAogICAgICAg LyogUmVkcmF3IGN1cnNvciBpZiB2aXNpYmxlLiAgKi8KICAgICAgIGlmICh2aXJ0dWFsX3Nj cmVlbi5jdXJzb3Jfc3RhdGUpCi0gICAgICAgIHdyaXRlX2N1cnNvciAoKTsKKwlkcmF3X2N1 cnNvciAoMSk7CiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgc3RydWN0IGdydWJfZm9u dF9nbHlwaCBnbHlwaDsKKyAgICAgIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKmdseXBoOwog ICAgICAgc3RydWN0IGdydWJfY29sb3JlZF9jaGFyICpwOworICAgICAgdW5zaWduZWQgY2hh ciBjaGFyX3dpZHRoOworCisgICAgICAvKiBFcmFzZSBjdXJyZW50IGN1cnNvciwgaWYgYW55 LiAgKi8KKyAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUpCisJZHJhd19j dXJzb3IgKDApOwogCi0gICAgICAvKiBHZXQgcHJvcGVydGllcyBvZiB0aGUgY2hhcmFjdGVy LiAgKi8gICAgCi0gICAgICBncnViX2ZvbnRfZ2V0X2dseXBoIChjLCAmZ2x5cGgpOworICAg ICAgLyogR2V0IHByb3BlcnRpZXMgb2YgdGhlIGNoYXJhY3Rlci4gICovCisgICAgICBnbHlw aCA9IGdydWJfZm9udF9nZXRfZ2x5cGggKHZpcnR1YWxfc2NyZWVuLmZvbnQsIGMpOworCisg ICAgICAvKiBDYWxjdWxhdGUgYWN0dWFsIGNoYXJhY3RlciB3aWR0aCBmb3IgZ2x5cGguIFRo aXMgaXMgbnVtYmVyIG9mCisgICAgICAgICB0aW1lcyBvZiBub3JtYWxfZm9udF93aWR0aC4g ICovCisgICAgICBjaGFyX3dpZHRoID0gY2FsY3VsYXRlX2NoYXJhY3Rlcl93aWR0aChnbHlw aCk7CiAKICAgICAgIC8qIElmIHdlIGFyZSBhYm91dCB0byBleGNlZWQgbGluZSBsZW5ndGgs IHdyYXAgdG8gbmV4dCBsaW5lLiAgKi8KLSAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJz b3JfeCArIGdseXBoLmNoYXJfd2lkdGggPiB2aXJ0dWFsX3NjcmVlbi5jb2x1bW5zKQorICAg ICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ICsgY2hhcl93aWR0aCA+IHZpcnR1YWxf c2NyZWVuLmNvbHVtbnMpCiAgICAgICAgIGdydWJfcHV0Y2hhciAoJ1xuJyk7CiAKICAgICAg IC8qIEZpbmQgcG9zaXRpb24gb24gdmlydHVhbCBzY3JlZW4sIGFuZCBmaWxsIGluZm9ybWF0 aW9uLiAgKi8KQEAgLTgzNSwxOCArODc1LDE4IEBACiAgICAgICBwLT5jb2RlID0gYzsKICAg ICAgIHAtPmZnX2NvbG9yID0gdmlydHVhbF9zY3JlZW4uZmdfY29sb3I7CiAgICAgICBwLT5i Z19jb2xvciA9IHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yOwotICAgICAgcC0+d2lkdGggPSBn bHlwaC5jaGFyX3dpZHRoIC0gMTsKKyAgICAgIHAtPndpZHRoID0gY2hhcl93aWR0aCAtIDE7 CiAgICAgICBwLT5pbmRleCA9IDA7CiAKICAgICAgIC8qIElmIHdlIGhhdmUgbGFyZ2UgZ2x5 cGgsIGFkZCBmaXh1cCBpbmZvLiAgKi8KLSAgICAgIGlmIChnbHlwaC5jaGFyX3dpZHRoID4g MSkKKyAgICAgIGlmIChjaGFyX3dpZHRoID4gMSkKICAgICAgICAgewogICAgICAgICAgIHVu c2lnbmVkIGk7CiAKLSAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgZ2x5cGguY2hhcl93aWR0 aDsgaSsrKQorICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBjaGFyX3dpZHRoOyBpKyspCiAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBbaV0uY29kZSA9ICcgJzsKLSAgICAgICAg ICAgICAgcFtpXS53aWR0aCA9IGdseXBoLmNoYXJfd2lkdGggLSAxOworICAgICAgICAgICAg ICBwW2ldLndpZHRoID0gY2hhcl93aWR0aCAtIDE7CiAgICAgICAgICAgICAgIHBbaV0uaW5k ZXggPSBpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NTUsNyArODk1LDcgQEAK ICAgICAgIHdyaXRlX2NoYXIgKCk7CiAKICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBzY3JvbGwg c2NyZWVuIHdoZW4gbmVlZGVkIGFuZCB3cmFwIGxpbmUgY29ycmVjdGx5LiAgKi8KLSAgICAg IHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ICs9IGdseXBoLmNoYXJfd2lkdGg7CisgICAgICB2 aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCArPSBjaGFyX3dpZHRoOwogICAgICAgaWYgKHZpcnR1 YWxfc2NyZWVuLmN1cnNvcl94ID49IHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMpCiAgICAgICAg IHsKICAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCA9IDA7CkBAIC04NjgsMTgg KzkwOCw1OCBAQAogCiAgICAgICAvKiBEcmF3IGN1cnNvciBpZiB2aXNpYmxlLiAgKi8KICAg ICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUpCi0gICAgICAgIHdyaXRlX2N1 cnNvciAoKTsKKwlkcmF3X2N1cnNvciAoMSk7CiAgICAgfQogfQogCisvKiBVc2UgQVNDSUkg Y2hhcmFjdGVycyB0byBkZXRlcm1pbmUgbm9ybWFsIGNoYXJhY3RlciB3aWR0aC4gICovCitz dGF0aWMgdW5zaWduZWQgaW50CitjYWxjdWxhdGVfbm9ybWFsX2NoYXJhY3Rlcl93aWR0aCAo Z3J1Yl9mb250X3QgZm9udCkKK3sKKyAgc3RydWN0IGdydWJfZm9udF9nbHlwaCAqZ2x5cGg7 CisgIHVuc2lnbmVkIGludCB3aWR0aCA9IDA7CisgIHVuc2lnbmVkIGludCBpOworCisgIC8q IEdldCBwcm9wZXJ0aWVzIG9mIGV2ZXJ5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIuICAq LworICBmb3IgKGkgPSAzMjsgaSA8IDEyNzsgaSsrKQorICAgIHsKKyAgICAgIGdseXBoID0g Z3J1Yl9mb250X2dldF9nbHlwaCAoZm9udCwgaSk7CisKKyAgICAgIC8qIFNraXAgdW5rbm93 biBjaGFyYWN0ZXJzLiAgU2hvdWxkIG5ldmVyIGhhcHBlbiBvbiBub3JtYWwgY29uZGl0aW9u cy4gICovCisgICAgICBpZiAoISBnbHlwaCkKKwljb250aW51ZTsKKworICAgICAgaWYgKGds eXBoLT5kZXZpY2Vfd2lkdGggPiB3aWR0aCkKKwl3aWR0aCA9IGdseXBoLT5kZXZpY2Vfd2lk dGg7CisgICAgfQorCisgIHJldHVybiB3aWR0aDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNo YXIKK2NhbGN1bGF0ZV9jaGFyYWN0ZXJfd2lkdGggKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGgg KmdseXBoKQoreworICBpZiAoISBnbHlwaCB8fCBnbHlwaC0+ZGV2aWNlX3dpZHRoID09IDAp CisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIChnbHlwaC0+ZGV2aWNlX3dpZHRoCisgICAg ICAgICAgKyAodmlydHVhbF9zY3JlZW4ubm9ybWFsX2NoYXJfd2lkdGggLSAxKSkKKyAgICAg ICAgIC8gdmlydHVhbF9zY3JlZW4ubm9ybWFsX2NoYXJfd2lkdGg7Cit9CisKIHN0YXRpYyBn cnViX3NzaXplX3QKIGdydWJfZ2Z4dGVybV9nZXRjaGFyd2lkdGggKGdydWJfdWludDMyX3Qg YykKIHsKLSAgc3RydWN0IGdydWJfZm9udF9nbHlwaCBnbHlwaDsKKyAgc3RydWN0IGdydWJf Zm9udF9nbHlwaCAqZ2x5cGg7CisgIHVuc2lnbmVkIGNoYXIgY2hhcl93aWR0aDsKIAotICBn cnViX2ZvbnRfZ2V0X2dseXBoIChjLCAmZ2x5cGgpOworICAvKiBHZXQgcHJvcGVydGllcyBv ZiB0aGUgY2hhcmFjdGVyLiAgKi8KKyAgZ2x5cGggPSBncnViX2ZvbnRfZ2V0X2dseXBoICh2 aXJ0dWFsX3NjcmVlbi5mb250LCBjKTsKIAotICByZXR1cm4gZ2x5cGguY2hhcl93aWR0aDsK KyAgLyogQ2FsY3VsYXRlIGFjdHVhbCBjaGFyYWN0ZXIgd2lkdGggZm9yIGdseXBoLiAgKi8K KyAgY2hhcl93aWR0aCA9IGNhbGN1bGF0ZV9jaGFyYWN0ZXJfd2lkdGggKGdseXBoKTsKKwor ICByZXR1cm4gY2hhcl93aWR0aDsKIH0KIAogc3RhdGljIGdydWJfdWludDE2X3QKQEAgLTkw Myw4ICs5ODMsOSBAQAogICBpZiAoeSA+PSB2aXJ0dWFsX3NjcmVlbi5yb3dzKQogICAgIHkg PSB2aXJ0dWFsX3NjcmVlbi5yb3dzIC0gMTsKIAorICAvKiBFcmFzZSBjdXJyZW50IGN1cnNv ciwgaWYgYW55LiAgKi8KICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKLSAg ICB3cml0ZV9jaGFyICgpOworICAgIGRyYXdfY3Vyc29yICgwKTsKIAogICB2aXJ0dWFsX3Nj cmVlbi5jdXJzb3JfeCA9IHg7CiAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ID0geTsKQEAg LTkwOSw4ICs5OTAsOSBAQAogICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCA9IHg7CiAgIHZp cnR1YWxfc2NyZWVuLmN1cnNvcl95ID0geTsKIAorICAvKiBEcmF3IGN1cnNvciBpZiB2aXNp YmxlLiAgKi8KICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKLSAgICB3cml0 ZV9jdXJzb3IgKCk7CisgICAgZHJhd19jdXJzb3IgKDEpOwogfQogCiBzdGF0aWMgdm9pZApA QCAtOTk1LDkgKzEwNzcsOSBAQAogICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3N0YXRl ICE9IG9uKQogICAgIHsKICAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUp Ci0gICAgICAgIHdyaXRlX2NoYXIgKCk7CisJZHJhd19jdXJzb3IgKDApOwogICAgICAgZWxz ZQotICAgICAgICB3cml0ZV9jdXJzb3IgKCk7CisJZHJhd19jdXJzb3IgKDEpOwogCiAgICAg ICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUgPSBvbjsKICAgICB9CkluZGV4OiB0ZXJt L2kzODYvcGMvdmVzYWZiLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVybS9pMzg2L3BjL3Zlc2Fm Yi5jCShyZXZpc2lvbiAxOTM0KQorKysgdGVybS9pMzg2L3BjL3Zlc2FmYi5jCSh3b3JraW5n IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmll ZCBCb290bG9hZGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LDIwMDcgIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNSwyMDA3LDIwMDgg IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICoKICAqICBHUlVCIGlzIGZyZWUg c29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQpAQCAtMTYsNiArMTYsOCBAQAogICogIGFsb25nIHdpdGggR1JVQi4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisv LyBUT0RPOiBEZXByZWNhdGVkIGFuZCBicm9rZW4uIFNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBh cyB0aGVyZSBpcyBWQkUgZHJpdmVyIGluIFZpZGVvIHN1YnN5c3RlbS4KKwogI2luY2x1ZGUg PGdydWIvbWFjaGluZS9tZW1vcnkuaD4KICNpbmNsdWRlIDxncnViL21hY2hpbmUvdmdhLmg+ CiAjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL3ZiZS5oPgpAQCAtMjUwLDEwICsyNTIsMTEgQEAK IAkgIGJyZWFrOwogCiAJZGVmYXVsdDoKLQkgIHJldHVybiBncnViX2ZvbnRfZ2V0X2dseXBo IChjb2RlLCBiaXRtYXAsIHdpZHRoKTsKKwkgIHJldHVybiBncnViX2ZvbnRfZ2V0X2dseXBo X2FueSAoY29kZSwgYml0bWFwLCB3aWR0aCk7CiAJfQogICAgIH0KIAorICAvKiBUT0RPIFRo aXMgaXMgd3JvbmcgZm9yIHRoZSBuZXcgZm9udCBtb2R1bGUuICBTaG91bGQgaXQgYmUgZml4 ZWQ/ICAqLwogICBpZiAoYml0bWFwKQogICAgIGdydWJfbWVtY3B5IChiaXRtYXAsCiAJCSB2 Z2FfZm9udCArIGNvZGUgKiB2aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCwKSW5kZXg6IHRl cm0vaTM4Ni9wYy92Z2EuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXJtL2kzODYvcGMvdmdhLmMJ KHJldmlzaW9uIDE5MzQpCisrKyB0ZXJtL2kzODYvcGMvdmdhLmMJKHdvcmtpbmcgY29weSkK QEAgLTE2LDYgKzE2LDggQEAKICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAorLy8gVE9ETzogRGVwcmVj YXRlZCBhbmQgYnJva2VuLiBOZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gVmlkZW8gRHJpdmVy IQorCiAjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL3ZnYS5oPgogI2luY2x1ZGUgPGdydWIvbWFj aGluZS9jb25zb2xlLmg+CiAjaW5jbHVkZSA8Z3J1Yi9jcHUvaW8uaD4KQEAgLTY1LDYgKzY3 LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY29sb3JlZF9jaGFyIHRleHRfYnVmW1RFWFRfV0lEVEgg KiBURVhUX0hFSUdIVF07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBzYXZlZF9tYXBfbWFzazsK IHN0YXRpYyBpbnQgcGFnZSA9IDA7CitzdGF0aWMgZ3J1Yl9mb250X3QgZm9udCA9IDA7CiAK ICNkZWZpbmUgU0VRVUVOQ0VSX0FERFJfUE9SVAkweDNDNAogI2RlZmluZSBTRVFVRU5DRVJf REFUQV9QT1JUCTB4M0M1CkBAIC0xNjEsNiArMTY0LDkgQEAKICAgc2F2ZWRfbWFwX21hc2sg PSBnZXRfbWFwX21hc2sgKCk7CiAgIHNldF9tYXBfbWFzayAoMHgwZik7CiAgIHNldF9zdGFy dF9hZGRyZXNzIChQQUdFX09GRlNFVCAocGFnZSkpOworICBmb250ID0gZ3J1Yl9mb250X2dl dCAoIiIpOyAgLyogQ2hvb3NlIGFueSBmb250LCBmb3Igbm93LiAqLworICBpZiAoIWZvbnQp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GT05ULCAiTm8gZm9udCBs b2FkZWQuIik7CiAgIAogICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKIH0KQEAgLTE4NSw3ICsx OTEsNyBAQAogd3JpdGVfY2hhciAodm9pZCkKIHsKICAgc3RydWN0IGNvbG9yZWRfY2hhciAq cCA9IHRleHRfYnVmICsgeHBvcyArIHlwb3MgKiBURVhUX1dJRFRIOwotICBzdHJ1Y3QgZ3J1 Yl9mb250X2dseXBoIGdseXBoOworICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpnbHlwaDsK ICAgdW5zaWduZWQgY2hhciAqbWVtX2Jhc2U7CiAgIHVuc2lnbmVkIHBsYW5lOwogCkBAIC0x OTQsNyArMjAwLDcgQEAKICAgcCAtPSBwLT5pbmRleDsKIAogICAvKiBHZXQgZ2x5cGggZm9y IGNoYXJhY3Rlci4gICovCi0gIGdydWJfZm9udF9nZXRfZ2x5cGggKHAtPmNvZGUsICZnbHlw aCk7CisgIGdseXBoID0gZ3J1Yl9mb250X2dldF9nbHlwaCAoZm9udCwgcC0+Y29kZSk7CiAg IAogICBmb3IgKHBsYW5lID0gMHgwMTsgcGxhbmUgPD0gMHgwODsgcGxhbmUgPDw9IDEpCiAg ICAgewpAQCAtMjA4LDE0ICsyMTQsMTcgQEAKIAkgICB5IDwgQ0hBUl9IRUlHSFQ7CiAJICAg eSsrLCBtZW0gKz0gVEVYVF9XSURUSCkKIAl7CisgICAgICAgICAgLyogVE9ETyBSZS1pbXBs ZW1lbnQgZ2x5cGggZHJhd2luZyBmb3IgdmdhIG1vZHVsZS4gICovCisjaWYgMAogCSAgdW5z aWduZWQgaTsKIAotCSAgZm9yIChpID0gMDsgaSA8IGdseXBoLmNoYXJfd2lkdGggJiYgb2Zm c2V0IDwgMzI7IGkrKykKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyX3dpZHRoID0gMTsgLyog VE9ETyBGaWd1cmUgb3V0IHdpZGUgY2hhcmFjdGVycy4gICovCisJICBmb3IgKGkgPSAwOyBp IDwgY2hhcl93aWR0aCAmJiBvZmZzZXQgPCAzMjsgaSsrKQogCSAgICB7CiAJICAgICAgdW5z aWduZWQgY2hhciBmZ19tYXNrLCBiZ19tYXNrOwogCSAgICAgIAotCSAgICAgIGZnX21hc2sg PSAocC0+ZmdfY29sb3IgJiBwbGFuZSkgPyBnbHlwaC5iaXRtYXBbb2Zmc2V0XSA6IDA7Ci0J ICAgICAgYmdfbWFzayA9IChwLT5iZ19jb2xvciAmIHBsYW5lKSA/IH4oZ2x5cGguYml0bWFw W29mZnNldF0pIDogMDsKKwkgICAgICBmZ19tYXNrID0gKHAtPmZnX2NvbG9yICYgcGxhbmUp ID8gZ2x5cGgtPmJpdG1hcFtvZmZzZXRdIDogMDsKKwkgICAgICBiZ19tYXNrID0gKHAtPmJn X2NvbG9yICYgcGxhbmUpID8gfihnbHlwaC0+Yml0bWFwW29mZnNldF0pIDogMDsKIAkgICAg ICBvZmZzZXQrKzsKIAogCSAgICAgIGlmIChjaGVja192Z2FfbWVtIChtZW0gKyBpKSkKQEAg LTIyMSw2ICsyMzAsNyBAQAogCSAgICAgIGlmIChjaGVja192Z2FfbWVtIChtZW0gKyBpKSkK IAkJbWVtW2ldID0gKGZnX21hc2sgfCBiZ19tYXNrKTsKIAkgICAgfQorI2VuZGlmIC8qIDAg Ki8gCiAJfQogICAgIH0KIApAQCAtMzIwLDEyICszMzAsMTMgQEAKICAgICB9CiAgIGVsc2UK ICAgICB7Ci0gICAgICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoIGdseXBoOworICAgICAgc3Ry dWN0IGdydWJfZm9udF9nbHlwaCAqZ2x5cGg7CiAgICAgICBzdHJ1Y3QgY29sb3JlZF9jaGFy ICpwOworICAgICAgdW5zaWduZWQgY2hhcl93aWR0aCA9IDE7CiAgICAgICAKLSAgICAgIGdy dWJfZm9udF9nZXRfZ2x5cGgoYywgJmdseXBoKTsKKyAgICAgIGdseXBoID0gZ3J1Yl9mb250 X2dldF9nbHlwaChmb250LCBjKTsKIAotICAgICAgaWYgKHhwb3MgKyBnbHlwaC5jaGFyX3dp ZHRoID4gVEVYVF9XSURUSCkKKyAgICAgIGlmICh4cG9zICsgY2hhcl93aWR0aCA+IFRFWFRf V0lEVEgpCiAJZ3J1Yl9wdXRjaGFyICgnXG4nKTsKIAogICAgICAgcCA9IHRleHRfYnVmICsg eHBvcyArIHlwb3MgKiBURVhUX1dJRFRIOwpAQCAtMzMyLDE3ICszNDMsMTcgQEAKICAgICAg IHAtPmNvZGUgPSBjOwogICAgICAgcC0+ZmdfY29sb3IgPSBmZ19jb2xvcjsKICAgICAgIHAt PmJnX2NvbG9yID0gYmdfY29sb3I7Ci0gICAgICBwLT53aWR0aCA9IGdseXBoLmNoYXJfd2lk dGggLSAxOworICAgICAgcC0+d2lkdGggPSBjaGFyX3dpZHRoIC0gMTsKICAgICAgIHAtPmlu ZGV4ID0gMDsKIAotICAgICAgaWYgKGdseXBoLmNoYXJfd2lkdGggPiAxKQorICAgICAgaWYg KGNoYXJfd2lkdGggPiAxKQogCXsKIAkgIHVuc2lnbmVkIGk7CiAKLQkgIGZvciAoaSA9IDE7 IGkgPCBnbHlwaC5jaGFyX3dpZHRoOyBpKyspCisJICBmb3IgKGkgPSAxOyBpIDwgY2hhcl93 aWR0aDsgaSsrKQogCSAgICB7CiAJICAgICAgcFtpXS5jb2RlID0gJyAnOwotCSAgICAgIHBb aV0ud2lkdGggPSBnbHlwaC5jaGFyX3dpZHRoIC0gMTsKKwkgICAgICBwW2ldLndpZHRoID0g Y2hhcl93aWR0aCAtIDE7CiAJICAgICAgcFtpXS5pbmRleCA9IGk7CiAJICAgIH0KIAl9CkBA IC0zNDksNyArMzYwLDcgQEAKIAkgIAogICAgICAgd3JpdGVfY2hhciAoKTsKICAgCi0gICAg ICB4cG9zICs9IGdseXBoLmNoYXJfd2lkdGg7CisgICAgICB4cG9zICs9IGNoYXJfd2lkdGg7 CiAgICAgICBpZiAoeHBvcyA+PSBURVhUX1dJRFRIKQogCXsKIAkgIHhwb3MgPSAwOwpAQCAt MzgxLDExICszOTIsMTYgQEAKIHN0YXRpYyBncnViX3NzaXplX3QKIGdydWJfdmdhX2dldGNo YXJ3aWR0aCAoZ3J1Yl91aW50MzJfdCBjKQogeworI2lmIDAKICAgc3RydWN0IGdydWJfZm9u dF9nbHlwaCBnbHlwaDsKICAgCi0gIGdydWJfZm9udF9nZXRfZ2x5cGggKGMsICZnbHlwaCk7 CisgIGdseXBoID0gZ3J1Yl9mb250X2dldF9nbHlwaCAoYyk7CiAgIAogICByZXR1cm4gZ2x5 cGguY2hhcl93aWR0aDsKKyNlbHNlCisgICh2b2lkKSBjOyAgIC8qIFByZXZlbnQgd2Fybmlu Zy4gICovCisgIHJldHVybiAxOyAgIC8qIFRPRE8gRml4IHdpZGUgY2hhcmFjdGVycz8gICov CisjZW5kaWYKIH0KIAogc3RhdGljIGdydWJfdWludDE2X3QKSW5kZXg6IGNvbmYvY29tbW9u LnJtawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBjb25mL2NvbW1vbi5ybWsJKHJldmlzaW9uIDE5MzQp CisrKyBjb25mL2NvbW1vbi5ybWsJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw3ICszNjQsNyBA QAogaGVscF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCiAKICMgRm9yIGZvbnQu bW9kLgotZm9udF9tb2RfU09VUkNFUyA9IGZvbnQvbWFuYWdlci5jCitmb250X21vZF9TT1VS Q0VTID0gZm9udC9mb250X2NtZC5jIGZvbnQvZm9udC5jCiBmb250X21vZF9DRkxBR1MgPSAk KENPTU1PTl9DRkxBR1MpCiBmb250X21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykK IApJbmRleDogbm9ybWFsL21lbnUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBub3JtYWwvbWVudS5j CShyZXZpc2lvbiAxOTM0KQorKysgbm9ybWFsL21lbnUuYwkod29ya2luZyBjb3B5KQpAQCAt MTE2LDYgKzExNiw3IEBACiB7CiAgIGludCB4OwogICBjb25zdCBjaGFyICp0aXRsZTsKKyAg Z3J1Yl9zaXplX3QgdGl0bGVfbGVuOwogICBncnViX3NzaXplX3QgbGVuOwogICBncnViX3Vp bnQzMl90ICp1bmljb2RlX3RpdGxlOwogICBncnViX3NzaXplX3QgaTsKQEAgLTEyMiw3ICsx MjMsOCBAQAogICBncnViX3VpbnQ4X3Qgb2xkX2NvbG9yX25vcm1hbCwgb2xkX2NvbG9yX2hp Z2hsaWdodDsKIAogICB0aXRsZSA9IGVudHJ5ID8gZW50cnktPnRpdGxlIDogIiI7Ci0gIHVu aWNvZGVfdGl0bGUgPSBncnViX21hbGxvYyAoZ3J1Yl9zdHJsZW4gKHRpdGxlKSAqIHNpemVv ZiAoKnVuaWNvZGVfdGl0bGUpKTsKKyAgdGl0bGVfbGVuID0gZ3J1Yl9zdHJsZW4gKHRpdGxl KTsKKyAgdW5pY29kZV90aXRsZSA9IGdydWJfbWFsbG9jICh0aXRsZV9sZW4gKiBzaXplb2Yg KCp1bmljb2RlX3RpdGxlKSk7CiAgIGlmICghIHVuaWNvZGVfdGl0bGUpCiAgICAgLyogWFhY IEhvdyB0byBzaG93IHRoaXMgZXJyb3I/ICAqLwogICAgIHJldHVybjsKQEAgLTEyNyw4ICsx MjksOCBAQAogICAgIC8qIFhYWCBIb3cgdG8gc2hvdyB0aGlzIGVycm9yPyAgKi8KICAgICBy ZXR1cm47CiAgIAotICBsZW4gPSBncnViX3V0ZjhfdG9fdWNzNCAodW5pY29kZV90aXRsZSwg KGdydWJfdWludDhfdCAqKSB0aXRsZSwKLQkJCSAgIGdydWJfc3RybGVuICh0aXRsZSkpOwor ICBsZW4gPSBncnViX3V0ZjhfdG9fdWNzNCAodW5pY29kZV90aXRsZSwgdGl0bGVfbGVuLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdydWJfdWludDhfdCAqKSB0aXRsZSwgLTEs IDApOwogICBpZiAobGVuIDwgMCkKICAgICB7CiAgICAgICAvKiBJdCBpcyBhbiBpbnZhbGlk IHNlcXVlbmNlLiAgKi8KSW5kZXg6IGluY2x1ZGUvZ3J1Yi9taXNjLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gaW5jbHVkZS9ncnViL21pc2MuaAkocmV2aXNpb24gMTkzNCkKKysrIGluY2x1ZGUv Z3J1Yi9taXNjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKiBtaXNjLmgg LSBwcm90b3R5cGVzIGZvciBtaXNjIGZ1bmN0aW9ucyAqLwogLyoKICAqICBHUlVCICAtLSAg R1JhbmQgVW5pZmllZCBCb290bG9hZGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMs MjAwNSwyMDA2LDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogIENv cHlyaWdodCAoQykgMjAwMiwyMDAzLDIwMDUsMjAwNiwyMDA3LDIwMDggIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgogICoKICAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQpAQCAtNzcsOCArNzcsMTAgQEAKIAkJCQkJICAgICAgIGdydWJfdWludDE2X3QgKnNyYywK IAkJCQkJICAgICAgIGdydWJfc2l6ZV90IHNpemUpOwogZ3J1Yl9zc2l6ZV90IEVYUE9SVF9G VU5DKGdydWJfdXRmOF90b191Y3M0KSAoZ3J1Yl91aW50MzJfdCAqZGVzdCwKKwkJCQkJICAg ICBncnViX3NpemVfdCBkZXN0c2l6ZSwKIAkJCQkJICAgICBjb25zdCBncnViX3VpbnQ4X3Qg KnNyYywKLQkJCQkJICAgICBncnViX3NpemVfdCBzaXplKTsKKwkJCQkJICAgICBncnViX3Np emVfdCBzcmNzaXplLAorCQkJCQkgICAgIGNvbnN0IGdydWJfdWludDhfdCAqKnNyY2VuZCk7 CiBncnViX3VpbnQ2NF90IEVYUE9SVF9GVU5DKGdydWJfZGl2bW9kNjQpIChncnViX3VpbnQ2 NF90IG4sCiAJCQkJCSAgZ3J1Yl91aW50MzJfdCBkLCBncnViX3VpbnQzMl90ICpyKTsKIApJ bmRleDogaW5jbHVkZS9ncnViL2ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2dy dWIvZm9udC5oCShyZXZpc2lvbiAxOTM0KQorKysgaW5jbHVkZS9ncnViL2ZvbnQuaAkod29y a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgR1JVQiAgLS0gIEdSYW5kIFVu aWZpZWQgQm9vdGxvYWRlcgotICogIENvcHlyaWdodCAoQykgMjAwMywyMDA3ICBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNywy MDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAqCiAgKiAgR1JVQiBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDM0ICsyMCw5NiBAQAogI2RlZmluZSBHUlVCX0ZP TlRfSEVBREVSCTEKIAogI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnVi L3ZpZGVvLmg+CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2Ygb3BhcXVlIHN0cnVjdHVy ZSBncnViX2ZvbnQuCisgICBVc2VycyBvbmx5IHBhc3Mgc3RydWN0IGdydWJfZm9udCBwb2lu dGVycyB0byB0aGUgZm9udCBtb2R1bGUgZnVuY3Rpb25zLAorICAgYW5kIGRvIG5vdCBoYXZl IGtub3dsZWRnZSBvZiB0aGUgc3RydWN0dXJlIGNvbnRlbnRzLiAgKi8KK3N0cnVjdCBncnVi X2ZvbnQ7CisKKy8qIEZvbnQgdHlwZSB1c2VkIHRvIGFjY2VzcyBmb250IGZ1bmN0aW9ucy4g ICovCit0eXBlZGVmIHN0cnVjdCBncnViX2ZvbnQgKmdydWJfZm9udF90OworCitzdHJ1Y3Qg Z3J1Yl9mb250X25vZGUKK3sKKyAgc3RydWN0IGdydWJfZm9udF9ub2RlICpuZXh0OworICBn cnViX2ZvbnRfdCB2YWx1ZTsKK307CiAKLSNkZWZpbmUgR1JVQl9GT05UX01BR0lDCSJQUEZc eDdmIgorLyogR2xvYmFsIGZvbnQgcmVnaXN0cnkuICAqLworZXh0ZXJuIHN0cnVjdCBncnVi X2ZvbnRfbm9kZSAqZ3J1Yl9mb250X2xpc3Q7CiAKIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGgK IHsKLSAgLyogR2x5cGggd2lkdGggaW4gcGl4ZWxzLiAgKi8KLSAgZ3J1Yl91aW50OF90IHdp ZHRoOwotICAKLSAgLyogR2x5cGggaGVpZ2h0IGluIHBpeGVscy4gICovCi0gIGdydWJfdWlu dDhfdCBoZWlnaHQ7Ci0gIAotICAvKiBHbHlwaCB3aWR0aCBpbiBjaGFyYWN0ZXJzLiAgKi8K LSAgZ3J1Yl91aW50OF90IGNoYXJfd2lkdGg7Ci0gIAotICAvKiBHbHlwaCBiYXNlbGluZSBw b3NpdGlvbiBpbiBwaXhlbHMgKGZyb20gdXApLiAgKi8KLSAgZ3J1Yl91aW50OF90IGJhc2Vs aW5lOwotICAKLSAgLyogR2x5cGggYml0bWFwIGRhdGEgYXJyYXkgb2YgYnl0ZXMgaW4gKCh3 aWR0aCArIDcpIC8gOCkgKiBoZWlnaHQuCi0gICAgIEJpdG1hcCBpcyBmb3JtdWxhdGVkIGJ5 IGhlaWdodCBzY2FubGluZXMsIGVhY2ggc2NhbmxpbmUgaGF2aW5nCi0gICAgIHdpZHRoIG51 bWJlciBvZiBwaXhlbHMuIFBpeGVscyBhcmUgY29kZWQgYXMgYml0cywgdmFsdWUgMSBtZWFu aW5nCi0gICAgIG9mIG9wYXF1ZSBwaXhlbCBhbmQgMCBpcyB0cmFuc3BhcmVudC4gSWYgd2lk dGggZG9lcyBub3QgZml0IGJ5dGUKLSAgICAgYm91bmRhcnksIGl0IHdpbGwgYmUgcGFkZGVk IHdpdGggMCB0byBtYWtlIGl0IGZpdC4gICovCi0gIGdydWJfdWludDhfdCBiaXRtYXBbMzJd OworICAvKiBSZWZlcmVuY2UgdG8gdGhlIGZvbnQgdGhpcyBnbHlwaCBiZWxvbmdzIHRvLiAg Ki8KKyAgZ3J1Yl9mb250X3QgZm9udDsKKworICAvKiBHbHlwaCBiaXRtYXAgd2lkdGggaW4g cGl4ZWxzLiAgKi8KKyAgZ3J1Yl91aW50MTZfdCB3aWR0aDsKKworICAvKiBHbHlwaCBiaXRt YXAgaGVpZ2h0IGluIHBpeGVscy4gICovCisgIGdydWJfdWludDE2X3QgaGVpZ2h0OworCisg IC8qIEdseXBoIGJpdG1hcCB4IG9mZnNldCBpbiBwaXhlbHMuICBBZGQgdG8gc2NyZWVuIGNv b3JkaW5hdGUuICAqLworICBncnViX2ludDE2X3Qgb2Zmc2V0X3g7CisKKyAgLyogR2x5cGgg Yml0bWFwIHkgb2Zmc2V0IGluIHBpeGVscy4gIFN1YnRyYWN0IGZyb20gc2NyZWVuIGNvb3Jk aW5hdGUuICAqLworICBncnViX2ludDE2X3Qgb2Zmc2V0X3k7CisKKyAgLyogTnVtYmVyIG9m IHBpeGVscyB0byBhZHZhbmNlIHRvIHN0YXJ0IHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisg IGdydWJfdWludDE2X3QgZGV2aWNlX3dpZHRoOworCisgIC8qIFJvdy1tYWpvciBvcmRlciwg cGFja2VkIGJpdHMgKG5vIHBhZGRpbmc7IHJvd3MgY2FuIGJyZWFrIHdpdGhpbiBhIGJ5dGUp LgorICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpcyAod2lkdGggKiBoZWlnaHQgKyA3 KSAvIDguICBXaXRoaW4gYQorICAgICBieXRlLCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQg aXMgdGhlIGZpcnN0IChsZWZ0bW9zdC91cHBlcm1vc3QpIHBpeGVsLgorICAgICBQaXhlbHMg YXJlIGNvZGVkIGFzIGJpdHMsIHZhbHVlIDEgbWVhbmluZyBvZiBvcGFxdWUgcGl4ZWwgYW5k IDAgaXMKKyAgICAgdHJhbnNwYXJlbnQuICBJZiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBk b2VzIG5vdCBmaXQgYnl0ZSBib3VuZGFyeSwgaXQKKyAgICAgd2lsbCBiZSBwYWRkZWQgd2l0 aCAwIGJpdHMgdG8gbWFrZSBpdCBmaXQuICAqLworICBncnViX3VpbnQ4X3QgYml0bWFwWzBd OwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpncnViX2ZvbnRfZ2x5 cGhfdDsKKy8qIEluaXRpYWxpemUgdGhlIGZvbnQgbG9hZGVyLgorICAgTXVzdCBiZSBjYWxs ZWQgYmVmb3JlIGFueSBmb250cyBhcmUgbG9hZGVkIG9yIHVzZWQuICAqLwordm9pZCBncnVi X2ZvbnRfbG9hZGVyX2luaXQgKHZvaWQpOworCisvKiBMb2FkIGEgZm9udCBhbmQgYWRkIGl0 IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdsb2JhbCBmb250IGxpc3QuCisgICBSZXR1cm5z OiAwIHVwb24gc3VjY2Vzczsgbm9uemVybyB1cG9uIGZhaWx1cmUuICAqLworaW50IGdydWJf Zm9udF9sb2FkIChjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qIEdldCB0aGUgZm9udCB0 aGF0IGhhcyB0aGUgc3BlY2lmaWVkIG5hbWUuICBGb250IG5hbWVzIGFyZSBpbiB0aGUgZm9y bQorICAgIkZhbWlseSBOYW1lIEJvbGQgSXRhbGljIDE0Iiwgd2hlcmUgQm9sZCBhbmQgSXRh bGljIGFyZSBvcHRpb25hbC4KKyAgIElmIG5vIGZvbnQgbWF0Y2hlcyB0aGUgbmFtZSBzcGVj aWZpZWQsIHRoZSBtb3N0IHJlY2VudGx5IGxvYWRlZCBmb250CisgICBpcyByZXR1cm5lZCBh cyBhIGZhbGxiYWNrLiAgKi8KK2dydWJfZm9udF90IGdydWJfZm9udF9nZXQgKGNvbnN0IGNo YXIgKmZvbnRfbmFtZSk7CisKK2NvbnN0IGNoYXIgKmdydWJfZm9udF9nZXRfbmFtZSAoZ3J1 Yl9mb250X3QgZm9udCk7CisKK2ludCBncnViX2ZvbnRfZ2V0X21heF9jaGFyX3dpZHRoIChn cnViX2ZvbnRfdCBmb250KTsKKworaW50IGdydWJfZm9udF9nZXRfbWF4X2NoYXJfaGVpZ2h0 IChncnViX2ZvbnRfdCBmb250KTsKKworaW50IGdydWJfZm9udF9nZXRfYXNjZW50IChncnVi X2ZvbnRfdCBmb250KTsKKworaW50IGdydWJfZm9udF9nZXRfZGVzY2VudCAoZ3J1Yl9mb250 X3QgZm9udCk7CisKK2ludCBncnViX2ZvbnRfZ2V0X2xlYWRpbmcgKGdydWJfZm9udF90IGZv bnQpOworCitpbnQgZ3J1Yl9mb250X2dldF9oZWlnaHQgKGdydWJfZm9udF90IGZvbnQpOwor CitpbnQgZ3J1Yl9mb250X2dldF9zdHJpbmdfd2lkdGggKGdydWJfZm9udF90IGZvbnQsIGNv bnN0IGNoYXIgKnN0cik7CisKK3N0cnVjdCBncnViX2ZvbnRfZ2x5cGggKmdydWJfZm9udF9n ZXRfZ2x5cGggKGdydWJfZm9udF90IGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBncnViX3VpbnQzMl90IGNvZGUpOwogCi1pbnQgZ3J1Yl9m b250X2dldF9nbHlwaCAoZ3J1Yl91aW50MzJfdCBjb2RlLAotCQkJIGdydWJfZm9udF9nbHlw aF90IGdseXBoKTsKK3N0cnVjdCBncnViX2ZvbnRfZ2x5cGggKmdydWJfZm9udF9nZXRfZ2x5 cGhfd2l0aF9mYWxsYmFjayAoZ3J1Yl9mb250X3QgZm9udCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50MzJf dCBjb2RlKTsKKworZ3J1Yl9lcnJfdCBncnViX2ZvbnRfZHJhd19nbHlwaCAoc3RydWN0IGdy dWJfZm9udF9nbHlwaCAqZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3J1Yl92aWRlb19jb2xvcl90IGNvbG9yLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBsZWZ0X3gsIGludCBiYXNlbGluZV95KTsKKwor Z3J1Yl9lcnJfdCBncnViX2ZvbnRfZHJhd19zdHJpbmcgKGNvbnN0IGNoYXIgKnN0ciwgZ3J1 Yl9mb250X3QgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnVi X3ZpZGVvX2NvbG9yX3QgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGxlZnRfeCwgaW50IGJhc2VsaW5lX3kpOwogCiAjZW5kaWYgLyogISBHUlVCX0ZP TlRfSEVBREVSICovCkluZGV4OiBpbmNsdWRlL2dydWIvdmlkZW8uaAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBpbmNsdWRlL2dydWIvdmlkZW8uaAkocmV2aXNpb24gMTkzNCkKKysrIGluY2x1ZGUv Z3J1Yi92aWRlby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKIHN0cnVj dCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQ7CiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25z IGZvciB1c2VkIGRhdGEgc3RydWN0dXJlcy4gICovCi1zdHJ1Y3QgZ3J1Yl9mb250X2dseXBo Owogc3RydWN0IGdydWJfdmlkZW9fYml0bWFwOwogCiAvKiBEZWZpbmVzIHVzZWQgdG8gZGVz Y3JpYmUgdmlkZW8gbW9kZSBvciByZW5kZXJpbmcgdGFyZ2V0LiAgKi8KLSNkZWZpbmUgR1JV Ql9WSURFT19NT0RFX1RZUEVfQUxQSEEJCTB4MDAwMDAwMDgKLSNkZWZpbmUgR1JVQl9WSURF T19NT0RFX1RZUEVfRE9VQkxFX0JVRkZFUkVECTB4MDAwMDAwMDQKKyNkZWZpbmUgR1JVQl9W SURFT19NT0RFX1RZUEVfQUxQSEEJCTB4MDAwMDAwMjAKKyNkZWZpbmUgR1JVQl9WSURFT19N T0RFX1RZUEVfRE9VQkxFX0JVRkZFUkVECTB4MDAwMDAwMTAKKyNkZWZpbmUgR1JVQl9WSURF T19NT0RFX1RZUEVfMUJJVF9CSVRNQVAJMHgwMDAwMDAwNAogI2RlZmluZSBHUlVCX1ZJREVP X01PREVfVFlQRV9JTkRFWF9DT0xPUgkweDAwMDAwMDAyCiAjZGVmaW5lIEdSVUJfVklERU9f TU9ERV9UWVBFX1JHQgkJMHgwMDAwMDAwMQogCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5l IEdSVUJfVklERU9fTU9ERV9UWVBFX1JHQgkJMHgwMDAwMDAwMQogCiAvKiBEZWZpbmVzIHVz ZWQgdG8gbWFzayBmbGFncy4gICovCi0jZGVmaW5lIEdSVUJfVklERU9fTU9ERV9UWVBFX0NP TE9SX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgR1JVQl9WSURFT19NT0RFX1RZUEVfQ09M T1JfTUFTSwkJMHgwMDAwMDAwRgogCiAvKiBEZWZpbmVzIHVzZWQgdG8gc3BlY2lmeSByZXF1 ZXN0ZWQgYml0IGRlcHRoLiAgKi8KICNkZWZpbmUgR1JVQl9WSURFT19NT0RFX1RZUEVfREVQ VEhfTUFTSwkJMHgwMDAwZmYwMApAQCAtNzIsNyArNzIsMTAgQEAKICAgICBHUlVCX1ZJREVP X0JMSVRfRk9STUFUX0JHUl81NjUsCiAKICAgICAvKiBXaGVuIG5lZWRlZCwgZGVjb2RlIGNv bG9yIG9yIGp1c3QgdXNlIHZhbHVlIGFzIGlzLiAgKi8KLSAgICBHUlVCX1ZJREVPX0JMSVRf Rk9STUFUX0lOREVYQ09MT1IKKyAgICBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX0lOREVYQ09M T1IsCisgICAgCisgICAgLyogVHdvIGNvbG9yIGJpdG1hcDsgYml0cyBwYWNrZWQ6IHJvd3Mg YXJlIG5vdCBwYWRkZWQgdG8gYnl0ZSBib3VuZGFyeS4gICovCisgICAgR1JVQl9WSURFT19C TElUX0ZPUk1BVF8xQklUX1BBQ0tFRAogICB9OwogCiAvKiBEZWZpbmUgYmxpdHRpbmcgb3Bl cmF0b3JzLiAgKi8KQEAgLTEzNSw2ICsxMzgsMTggQEAKICAgLyogV2hhdCBpcyBsb2NhdGlv biBvZiByZXNlcnZlZCBjb2xvciBiaXRzLiAgSW4gSW5kZXggQ29sb3IgbW9kZSwKICAgICAg dGhpcyBpcyAwLiAgKi8KICAgdW5zaWduZWQgaW50IHJlc2VydmVkX2ZpZWxkX3BvczsKKwor ICAvKiBGb3IgMS1iaXQgYml0bWFwcywgdGhlIGJhY2tncm91bmQgY29sb3IuICBVc2VkIGZv ciBiaXRzID0gMC4gICovCisgIGdydWJfdWludDhfdCBiZ19yZWQ7CisgIGdydWJfdWludDhf dCBiZ19ncmVlbjsKKyAgZ3J1Yl91aW50OF90IGJnX2JsdWU7CisgIGdydWJfdWludDhfdCBi Z19hbHBoYTsKKworICAvKiBGb3IgMS1iaXQgYml0bWFwcywgdGhlIGZvcmVncm91bmQgY29s b3IuICBVc2VkIGZvciBiaXRzID0gMS4gICovCisgIGdydWJfdWludDhfdCBmZ19yZWQ7Cisg IGdydWJfdWludDhfdCBmZ19ncmVlbjsKKyAgZ3J1Yl91aW50OF90IGZnX2JsdWU7CisgIGdy dWJfdWludDhfdCBmZ19hbHBoYTsKIH07CiAKIHN0cnVjdCBncnViX3ZpZGVvX3BhbGV0dGVf ZGF0YQpAQCAtMTg4LDkgKzIwMyw2IEBACiAgIGdydWJfZXJyX3QgKCpmaWxsX3JlY3QpIChn cnViX3ZpZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCk7 CiAKLSAgZ3J1Yl9lcnJfdCAoKmJsaXRfZ2x5cGgpIChzdHJ1Y3QgZ3J1Yl9mb250X2dseXBo ICpnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3ZpZGVvX2NvbG9y X3QgY29sb3IsIGludCB4LCBpbnQgeSk7Ci0KICAgZ3J1Yl9lcnJfdCAoKmJsaXRfYml0bWFw KSAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICpiaXRtYXAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gZ3J1Yl92aWRlb19ibGl0X29wZXJhdG9ycyBvcGVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBvZmZzZXRfeCwg aW50IG9mZnNldF95LApAQCAtMjYwLDkgKzI3Miw2IEBACiBncnViX2Vycl90IGdydWJfdmlk ZW9fZmlsbF9yZWN0IChncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwg dW5zaWduZWQgaW50IGhlaWdodCk7CiAKLWdydWJfZXJyX3QgZ3J1Yl92aWRlb19ibGl0X2ds eXBoIChzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpnbHlwaCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQg eSk7Ci0KIGdydWJfZXJyX3QgZ3J1Yl92aWRlb19ibGl0X2JpdG1hcCAoc3RydWN0IGdydWJf dmlkZW9fYml0bWFwICpiaXRtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gZ3J1Yl92aWRlb19ibGl0X29wZXJhdG9ycyBvcGVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBvZmZzZXRfeCwgaW50 IG9mZnNldF95LApJbmRleDogTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFrZWZp bGUuaW4JKHJldmlzaW9uIDE5MzQpCisrKyBNYWtlZmlsZS5pbgkod29ya2luZyBjb3B5KQpA QCAtMSw2ICsxLDYgQEAKICMgLSotIG1ha2VmaWxlIC0qLQogIwotIyBDb3B5cmlnaHQgKEMp IDE5OTQsMTk5NSwxOTk2LDE5OTcsMTk5OCwxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDQsMjAw NSwyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdo dCAoQykgMTk5NCwxOTk1LDE5OTYsMTk5NywxOTk4LDE5OTksMjAwMCwyMDAxLDIwMDIsMjAw NCwyMDA1LDIwMDYsMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgog IwogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBhdXRob3IKICMg Z2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBp dCwKQEAgLTg4LDcgKzg4LDcgQEAKIExJQkNVUlNFUyA9IEBMSUJDVVJTRVNACiBMSUJMWk8g PSBATElCTFpPQAogWUFDQyA9IEBZQUNDQAotVU5JRk9OVF9IRVggPSBAVU5JRk9OVF9IRVhA CitVTklGT05UX0JERiA9IEBVTklGT05UX0JERkAKIAogIyBPcHRpb25zLgogZW5hYmxlX2dy dWJfZW11ID0gQGVuYWJsZV9ncnViX2VtdUAKQEAgLTE0OCw5ICsxNDgsOSBAQAogcGFydG1h cC5sc3Q6ICQoUEFSVE1BUEZJTEVTKQogCWNhdCAkXiAvZGV2L251bGwgfCBzb3J0ID4gJEAK IAotaWZlcSAoLCAkKFVOSUZPTlRfSEVYKSkKK2lmZXEgKCwgJChVTklGT05UX0JERikpCiBl bHNlCi1wa2dkYXRhX0RBVEEgKz0gdW5pY29kZS5wZmYgYXNjaWkucGZmCitwa2dkYXRhX0RB VEEgKz0gdW5pY29kZS5wZjIgYXNjaWkucGYyCiAKICMgQXJyb3dzIGFuZCBsaW5lcyBhcmUg bmVlZGVkIHRvIGRyYXcgdGhlIG1lbnUsIHNvIHdlIGFsd2F5cyBpbmNsdWRlIHRoZW0KIFVO SUNPREVfQVJST1dTPTB4MjE5MC0weDIxOTMKQEAgLTE1NiwxMSArMTU2LDE4IEBACiBVTklD T0RFX0FSUk9XUz0weDIxOTAtMHgyMTkzCiBVTklDT0RFX0xJTkVTPTB4MjUwMS0weDI1MUIK IAotdW5pY29kZS5wZmY6ICQoVU5JRk9OVF9IRVgpCi0JcnVieSAkKHNyY2RpcikvdXRpbC91 bmlmb250MnBmZi5yYiAkKFVOSUZPTlRfSEVYKSA+ICRACisjIE5vdGU6IGZvbnR0b29sIHNo b3VsZCBiZSByZXBsYWNlZCB3aXRoIEMgb25seSBpbXBsZW1lbnRhdGlvbgorCiskKGJ1aWxk ZGlyKS9mb250dG9vbC9mb250dG9vbC5qYXI6IAorCW1rZGlyIC1wICIkKGJ1aWxkZGlyKS9m b250dG9vbC9zcmMiCisJamF2YWMgLXNvdXJjZSAxLjUgLXRhcmdldCAxLjUgLWcgLWRlcHJl Y2F0aW9uIC1lbmNvZGluZyBVVEYtOCAtZCAiJChidWlsZGRpcikvZm9udHRvb2wvc3JjIiBg ZmluZCAiJChzcmNkaXIpL3V0aWwvZm9udHRvb2wvc3JjLyIgLW5hbWUgJyouamF2YSdgCisJ amFyIGNmICQoYnVpbGRkaXIpL2ZvbnR0b29sL2ZvbnR0b29sLmphciAtQyAkKGJ1aWxkZGly KS9mb250dG9vbC9zcmMgLgogCi1hc2NpaS5wZmY6ICQoVU5JRk9OVF9IRVgpCi0JcnVieSAk KHNyY2RpcikvdXRpbC91bmlmb250MnBmZi5yYiAweDAtMHg3ZiAkKFVOSUNPREVfQVJST1dT KSAkKFVOSUNPREVfTElORVMpICQoVU5JRk9OVF9IRVgpID4gJEAKK3VuaWNvZGUucGYyOiAk KFVOSUZPTlRfQkRGKSAkKGJ1aWxkZGlyKS9mb250dG9vbC9mb250dG9vbC5qYXIKKwlqYXZh IC1jcCAkKGJ1aWxkZGlyKS9mb250dG9vbC9mb250dG9vbC5qYXIgb3JnLmdudS5ncnViLmZv bnR0b29sLkNvbnZlcnRlciAtLWluPSQoVU5JRk9OVF9CREYpIC0tb3V0PSRACisKK2FzY2lp LnBmMjogJChVTklGT05UX0JERikgJChidWlsZGRpcikvZm9udHRvb2wvZm9udHRvb2wuamFy CisJamF2YSAtY3AgJChidWlsZGRpcikvZm9udHRvb2wvZm9udHRvb2wuamFyIG9yZy5nbnUu Z3J1Yi5mb250dG9vbC5Db252ZXJ0ZXIgLS1pbj0kKFVOSUZPTlRfQkRGKSAtLW91dD0kQCAw eDAtMHg3ZiAkKFVOSUNPREVfQVJST1dTKSAkKFVOSUNPREVfTElORVMpCiBlbmRpZgogCiAj IFVzZWQgZm9yIGJ1aWxkaW5nIG1vZHVsZXMgZXh0ZXJuYWxseQpJbmRleDogRElTVExJU1QK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gRElTVExJU1QJKHJldmlzaW9uIDE5MzQpCisrKyBESVNUTElT VAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBACiBkb2NzL2dydWIuY2ZnCiBk b2NzL2dydWIudGV4aQogZG9jcy90ZXhpbmZvLnRleAotZm9udC9tYW5hZ2VyLmMKK2ZvbnQv Zm9udC5jCitmb250L2ZvbnRfY21kLmMKIGZzL2FmZnMuYwogZnMvYWZzLmMKIGZzL2NwaW8u YwpJbmRleDogY29uZmlndXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZQkocmV2aXNp b24gMTkzNCkKKysrIGNvbmZpZ3VyZQkod29ya2luZyBjb3B5KQpAQCAtNjY3LDcgKzY2Nyw3 IEBACiBwbGF0Zm9ybQogQ01QCiBZQUNDCi1VTklGT05UX0hFWAorVU5JRk9OVF9CREYKIElO U1RBTExfUFJPR1JBTQogSU5TVEFMTF9TQ1JJUFQKIElOU1RBTExfREFUQQpAQCAtMjEwNyw5 ICsyMTA3LDkgQEAKICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQogZmkKIAotZm9yIGZp bGUgaW4gL3Vzci9zaGFyZS91bmlmb250L3VuaWZvbnQuaGV4IDsgZG8KK2ZvciBmaWxlIGlu IC91c3Ivc3JjL3VuaWZvbnQuYmRmIDsgZG8KICAgaWYgdGVzdCAtZSAkZmlsZSA7IHRoZW4K LSAgICBVTklGT05UX0hFWD0kZmlsZQorICAgIFVOSUZPTlRfQkRGPSRmaWxlCiAKICAgICBi cmVhawogICBmaQpAQCAtOTExMCw3ICs5MTEwLDcgQEAKIHBsYXRmb3JtISRwbGF0Zm9ybSRh Y19kZWxpbQogQ01QISRDTVAkYWNfZGVsaW0KIFlBQ0MhJFlBQ0MkYWNfZGVsaW0KLVVOSUZP TlRfSEVYISRVTklGT05UX0hFWCRhY19kZWxpbQorVU5JRk9OVF9CREYhJFVOSUZPTlRfQkRG JGFjX2RlbGltCiBJTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQog SU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCiBJTlNUQUxMX0RBVEEh JElOU1RBTExfREFUQSRhY19kZWxpbQpJbmRleDogdmlkZW8vdmlkZW8uYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSB2aWRlby92aWRlby5jCShyZXZpc2lvbiAxOTM0KQorKysgdmlkZW8vdmlkZW8u Ywkod29ya2luZyBjb3B5KQpAQCAtMzM2LDE3ICszMzYsNiBAQAogICByZXR1cm4gZ3J1Yl92 aWRlb19hZGFwdGVyX2FjdGl2ZS0+ZmlsbF9yZWN0IChjb2xvciwgeCwgeSwgd2lkdGgsIGhl aWdodCk7CiB9CiAKLS8qIEJsaXQgZ2x5cGggdG8gc2NyZWVuIHVzaW5nIHNwZWNpZmllZCBj b2xvci4gICovCi1ncnViX2Vycl90Ci1ncnViX3ZpZGVvX2JsaXRfZ2x5cGggKHN0cnVjdCBn cnViX2ZvbnRfZ2x5cGggKmdseXBoLAotICAgICAgICAgICAgICAgICAgICAgICBncnViX3Zp ZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSkKLXsKLSAgaWYgKCEgZ3J1Yl92aWRl b19hZGFwdGVyX2FjdGl2ZSkKLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0RFVklDRSwgIk5vIHZpZGVvIG1vZGUgYWN0aXZhdGVkIik7Ci0KLSAgcmV0dXJuIGdydWJf dmlkZW9fYWRhcHRlcl9hY3RpdmUtPmJsaXRfZ2x5cGggKGdseXBoLCBjb2xvciwgeCwgeSk7 Ci19Ci0KIC8qIEJsaXQgYml0bWFwIHRvIHNjcmVlbi4gICovCiBncnViX2Vycl90CiBncnVi X3ZpZGVvX2JsaXRfYml0bWFwIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKmJpdG1hcCwK SW5kZXg6IHZpZGVvL2kzODYvcGMvdmJlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdmlkZW8vaTM4 Ni9wYy92YmUuYwkocmV2aXNpb24gMTkzNCkKKysrIHZpZGVvL2kzODYvcGMvdmJlLmMJKHdv cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxncnViL3R5cGVzLmg+ CiAjaW5jbHVkZSA8Z3J1Yi9kbC5oPgogI2luY2x1ZGUgPGdydWIvbWlzYy5oPgotI2luY2x1 ZGUgPGdydWIvZm9udC5oPgogI2luY2x1ZGUgPGdydWIvbW0uaD4KICNpbmNsdWRlIDxncnVi L3ZpZGVvLmg+CiAjaW5jbHVkZSA8Z3J1Yi9iaXRtYXAuaD4KQEAgLTcxMCw2ICs3MDksMTYg QEAKIAogICAgICAgcmV0dXJuIG1pbmluZGV4OwogICAgIH0KKyAgZWxzZSBpZiAoKHJlbmRl cl90YXJnZXQtPm1vZGVfaW5mby5tb2RlX3R5cGUgCisgICAgICAgICAgICAmIEdSVUJfVklE RU9fTU9ERV9UWVBFXzFCSVRfQklUTUFQKSAhPSAwKQorICAgIHsKKyAgICAgICBpZiAocmVk ID09IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5mZ19yZWQKKyAgICAgICAgICAgJiYgZ3Jl ZW4gPT0gcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmZnX2dyZWVuCisgICAgICAgICAgICYm IGJsdWUgPT0gcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmZnX2JsdWUpCisgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgIGVs c2UKICAgICB7CiAgICAgICBncnViX3VpbnQzMl90IHZhbHVlOwpAQCAtNzQwLDYgKzc0OSwx NyBAQAogICAgIC8qIE5vIGFscGhhIGF2YWlsYWJsZSBpbiBpbmRleCBjb2xvciBtb2Rlcywg anVzdCB1c2UKICAgICAgICBzYW1lIHZhbHVlIGFzIGluIG9ubHkgUkdCIG1vZGVzLiAgKi8K ICAgICByZXR1cm4gZ3J1Yl92aWRlb192YmVfbWFwX3JnYiAocmVkLCBncmVlbiwgYmx1ZSk7 CisgIGVsc2UgaWYgKChyZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ubW9kZV90eXBlIAorICAg ICAgICAgICAgJiBHUlVCX1ZJREVPX01PREVfVFlQRV8xQklUX0JJVE1BUCkgIT0gMCkKKyAg ICB7CisgICAgICBpZiAocmVkID09IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5mZ19yZWQK KyAgICAgICAgICAmJiBncmVlbiA9PSByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uZmdfZ3Jl ZW4KKyAgICAgICAgICAmJiBibHVlID09IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5mZ19i bHVlCisgICAgICAgICAgJiYgYWxwaGEgPT0gcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmZn X2FscGhhKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQogICBlbHNlCiAgICAgewogICAgICAgZ3J1Yl91aW50MzJfdCB2YWx1ZTsK QEAgLTgwMiw2ICs4MjIsMjQgQEAKICAgICAgICphbHBoYSA9IGZyYW1lYnVmZmVyLnBhbGV0 dGVbY29sb3JdLmE7CiAgICAgICByZXR1cm47CiAgICAgfQorICBlbHNlIGlmICgobW9kZV9p bmZvLT5tb2RlX3R5cGUKKyAgICAgICAgICAgICYgR1JVQl9WSURFT19NT0RFX1RZUEVfMUJJ VF9CSVRNQVApICE9IDApCisgICAgeworICAgICAgaWYgKGNvbG9yICYgMSkKKyAgICAgICAg eworICAgICAgICAgICpyZWQgPSBtb2RlX2luZm8tPmZnX3JlZDsKKyAgICAgICAgICAqZ3Jl ZW4gPSBtb2RlX2luZm8tPmZnX2dyZWVuOworICAgICAgICAgICpibHVlID0gbW9kZV9pbmZv LT5mZ19ibHVlOworICAgICAgICAgICphbHBoYSA9IG1vZGVfaW5mby0+ZmdfYWxwaGE7Cisg ICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICpyZWQgPSBtb2Rl X2luZm8tPmJnX3JlZDsKKyAgICAgICAgICAqZ3JlZW4gPSBtb2RlX2luZm8tPmJnX2dyZWVu OworICAgICAgICAgICpibHVlID0gbW9kZV9pbmZvLT5iZ19ibHVlOworICAgICAgICAgICph bHBoYSA9IG1vZGVfaW5mby0+YmdfYWxwaGE7CisgICAgICAgIH0KKyAgICB9CiAgIGVsc2UK ICAgICB7CiAgICAgICBncnViX3VpbnQzMl90IHRtcDsKQEAgLTkyNSw3NiArOTYzLDYgQEAK ICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiB9CiAKLS8vIFRPRE86IFJlbW92ZSB0aGlzIG1l dGhvZCBhbmQgcmVwbGFjZSB3aXRoIGJpdG1hcCBiYXNlZCBnbHlwaHMKLXN0YXRpYyBncnVi X2Vycl90Ci1ncnViX3ZpZGVvX3ZiZV9ibGl0X2dseXBoIChzdHJ1Y3QgZ3J1Yl9mb250X2ds eXBoICogZ2x5cGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3ZpZGVvX2Nv bG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSkKLXsKLSAgc3RydWN0IGdydWJfdmlkZW9faTM4 Nl92YmVibGl0X2luZm8gdGFyZ2V0OwotICB1bnNpZ25lZCBpbnQgd2lkdGg7Ci0gIHVuc2ln bmVkIGludCBjaGFyd2lkdGg7Ci0gIHVuc2lnbmVkIGludCBoZWlnaHQ7Ci0gIHVuc2lnbmVk IGludCBpOwotICB1bnNpZ25lZCBpbnQgajsKLSAgdW5zaWduZWQgaW50IHhfb2Zmc2V0ID0g MDsKLSAgdW5zaWduZWQgaW50IHlfb2Zmc2V0ID0gMDsKLQotICAvKiBNYWtlIHN1cmUgdGhl cmUgaXMgc29tZXRoaW5nIHRvIGRvLiAgKi8KLSAgaWYgKHggPj0gKGludClyZW5kZXJfdGFy Z2V0LT52aWV3cG9ydC53aWR0aCkKLSAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLQotICBp ZiAoeSA+PSAoaW50KXJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LmhlaWdodCkKLSAgICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKLQotICAvKiBDYWxjdWxhdGUgZ2x5cGggZGltZW5zaW9ucy4g ICovCi0gIHdpZHRoID0gKChnbHlwaC0+d2lkdGggKyA3KSAvIDgpICogODsKLSAgY2hhcndp ZHRoID0gd2lkdGg7Ci0gIGhlaWdodCA9IGdseXBoLT5oZWlnaHQ7Ci0KLSAgaWYgKHggKyAo aW50KXdpZHRoIDwgMCkKLSAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLQotICBpZiAoeSAr IChpbnQpaGVpZ2h0IDwgMCkKLSAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLQotICAvKiBE byBub3QgYWxsb3cgZHJhd2luZyBvdXQgb2Ygdmlld3BvcnQuICAqLwotICBpZiAoeCA8IDAp Ci0gICAgewotICAgICAgd2lkdGggKz0geDsKLSAgICAgIHhfb2Zmc2V0ID0gKHVuc2lnbmVk IGludCkteDsKLSAgICAgIHggPSAwOwotICAgIH0KLSAgaWYgKHkgPCAwKQotICAgIHsKLSAg ICAgIGhlaWdodCArPSB5OwotICAgICAgeV9vZmZzZXQgPSAodW5zaWduZWQgaW50KS15Owot ICAgICAgeSA9IDA7Ci0gICAgfQotCi0gIGlmICgoeCArIHdpZHRoKSA+IHJlbmRlcl90YXJn ZXQtPnZpZXdwb3J0LndpZHRoKQotICAgIHdpZHRoID0gcmVuZGVyX3RhcmdldC0+dmlld3Bv cnQud2lkdGggLSB4OwotICBpZiAoKHkgKyBoZWlnaHQpID4gcmVuZGVyX3RhcmdldC0+dmll d3BvcnQuaGVpZ2h0KQotICAgIGhlaWdodCA9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lmhl aWdodCAtIHk7Ci0KLSAgLyogQWRkIHZpZXdwb3J0IG9mZnNldC4gICovCi0gIHggKz0gcmVu ZGVyX3RhcmdldC0+dmlld3BvcnQueDsKLSAgeSArPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9y dC55OwotCi0gIC8qIFVzZSB2YmVibGl0X2luZm8gdG8gZW5jYXBzdWxhdGUgcmVuZGVyaW5n LiAgKi8KLSAgdGFyZ2V0Lm1vZGVfaW5mbyA9ICZyZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm87 Ci0gIHRhcmdldC5kYXRhID0gcmVuZGVyX3RhcmdldC0+ZGF0YTsKLQotICAvKiBEcmF3IGds eXBoLiAgKi8KLSAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQotICAgIGZvciAoaSA9 IDA7IGkgPCB3aWR0aDsgaSsrKQotICAgICAgaWYgKChnbHlwaC0+Yml0bWFwWygoaSArIHhf b2Zmc2V0KSAvIDgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAoaiArIHlfb2Zmc2V0 KSAqIChjaGFyd2lkdGggLyA4KV0KLSAgICAgICAgICAgJiAoMSA8PCAoKGNoYXJ3aWR0aCAt IChpICsgeF9vZmZzZXQpIC0gMSkgJSA4KSkpKQotICAgICAgICBzZXRfcGl4ZWwgKCZ0YXJn ZXQsIHgraSwgeStqLCBjb2xvcik7Ci0KLSAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Ci19Ci0K IC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGdpdmVuIGNvb3JkaW5hdGVz IGFyZSB3aXRoaW4gYm91bmRzIG9mCiAgICBoYW5kbGVkIGRhdGEuICAqLwogc3RhdGljIHZv aWQKQEAgLTE2MTksNyArMTU4Nyw2IEBACiAgICAgLm1hcF9yZ2JhID0gZ3J1Yl92aWRlb192 YmVfbWFwX3JnYmEsCiAgICAgLnVubWFwX2NvbG9yID0gZ3J1Yl92aWRlb192YmVfdW5tYXBf Y29sb3IsCiAgICAgLmZpbGxfcmVjdCA9IGdydWJfdmlkZW9fdmJlX2ZpbGxfcmVjdCwKLSAg ICAuYmxpdF9nbHlwaCA9IGdydWJfdmlkZW9fdmJlX2JsaXRfZ2x5cGgsCiAgICAgLmJsaXRf Yml0bWFwID0gZ3J1Yl92aWRlb192YmVfYmxpdF9iaXRtYXAsCiAgICAgLmJsaXRfcmVuZGVy X3RhcmdldCA9IGdydWJfdmlkZW9fdmJlX2JsaXRfcmVuZGVyX3RhcmdldCwKICAgICAuc2Ny b2xsID0gZ3J1Yl92aWRlb192YmVfc2Nyb2xsLApJbmRleDogdmlkZW8vaTM4Ni9wYy92YmV1 dGlsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gdmlkZW8vaTM4Ni9wYy92YmV1dGlsLmMJKHJldmlz aW9uIDE5MzQpCisrKyB2aWRlby9pMzg2L3BjL3ZiZXV0aWwuYwkod29ya2luZyBjb3B5KQpA QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxv YWRlcgotICogIENvcHlyaWdodCAoQykgMjAwNiwyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNywyMDA4ICBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAqCiAgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKQEAgLTUyLDYgKzUyLDEyIEBACiAgICAgICAgICAgICArIHkgKiBzb3VyY2UtPm1v ZGVfaW5mby0+cGl0Y2gKICAgICAgICAgICAgICsgeDsKICAgICAgIGJyZWFrOworCisgICAg Y2FzZSAxOgorICAgICAgLyogRm9yIDEtYml0IGJpdG1hcHMsIGFkZHJlc3NpbmcgbmVlZHMg dG8gYmUgZG9uZSBhdCB0aGUgYml0IGxldmVsCisgICAgICAgICBhbmQgaXQgZG9lc24ndCBt YWtlIHNlbnNlLCBpbiBnZW5lcmFsLCB0byBhc2sgZm9yIGEgcG9pbnRlcgorICAgICAgICAg dG8gYSBwYXJ0aWN1bGFyIHBpeGVsJ3MgZGF0YS4gICovCisgICAgICBicmVhazsKICAgICB9 CiAKICAgcmV0dXJuIHB0cjsKQEAgLTg2LDYgKzkyLDE3IEBACiAgICAgICBjb2xvciA9ICoo Z3J1Yl91aW50OF90ICopZ2V0X2RhdGFfcHRyIChzb3VyY2UsIHgsIHkpOwogICAgICAgYnJl YWs7CiAKKyAgICBjYXNlIDE6CisgICAgICBpZiAoc291cmNlLT5tb2RlX2luZm8tPmJsaXRf Zm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfMUJJVF9QQUNLRUQpCisgICAgICAg IHsKKyAgICAgICAgICBpbnQgYml0X2luZGV4ID0geSAqIHNvdXJjZS0+bW9kZV9pbmZvLT53 aWR0aCArIHg7CisgICAgICAgICAgZ3J1Yl91aW50OF90ICpwdHIgPSAoZ3J1Yl91aW50OF90 ICopc291cmNlLT5kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJpdF9p bmRleCAvIDg7CisgICAgICAgICAgaW50IGJpdF9wb3MgPSA3IC0gYml0X2luZGV4ICUgODsK KyAgICAgICAgICBjb2xvciA9ICgqcHRyID4+IGJpdF9wb3MpICYgMHgwMTsKKyAgICAgICAg fQorICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgICAgfQpA QCAtMTQzLDYgKzE2MCwxNyBAQAogICAgICAgfQogICAgICAgYnJlYWs7CiAKKyAgICBjYXNl IDE6CisgICAgICBpZiAoc291cmNlLT5tb2RlX2luZm8tPmJsaXRfZm9ybWF0ID09IEdSVUJf VklERU9fQkxJVF9GT1JNQVRfMUJJVF9QQUNLRUQpCisgICAgICAgIHsKKyAgICAgICAgICBp bnQgYml0X2luZGV4ID0geSAqIHNvdXJjZS0+bW9kZV9pbmZvLT53aWR0aCArIHg7CisgICAg ICAgICAgZ3J1Yl91aW50OF90ICpwdHIgPSAoZ3J1Yl91aW50OF90ICopc291cmNlLT5kYXRh CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJpdF9pbmRleCAvIDg7CisgICAg ICAgICAgaW50IGJpdF9wb3MgPSA3IC0gYml0X2luZGV4ICUgODsKKyAgICAgICAgICAqcHRy ID0gKCpwdHIgJiB+KDEgPDwgYml0X3BvcykpIHwgKChjb2xvciAmIDB4MDEpIDw8IGJpdF9w b3MpOworICAgICAgICB9CisgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICBi cmVhazsKICAgICB9CkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29u ZmlndXJlLmFjCShyZXZpc2lvbiAxOTM0KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNv cHkpCkBAIC0xMjcsOSArMTI3LDkgQEAKICAgQUNfTVNHX0VSUk9SKFtiaXNvbiBpcyBub3Qg Zm91bmRdKQogZmkKIAotZm9yIGZpbGUgaW4gL3Vzci9zaGFyZS91bmlmb250L3VuaWZvbnQu aGV4IDsgZG8KK2ZvciBmaWxlIGluIC91c3Ivc3JjL3VuaWZvbnQuYmRmIDsgZG8KICAgaWYg dGVzdCAtZSAkZmlsZSA7IHRoZW4KLSAgICBBQ19TVUJTVChbVU5JRk9OVF9IRVhdLCBbJGZp bGVdKQorICAgIEFDX1NVQlNUKFtVTklGT05UX0JERl0sIFskZmlsZV0pCiAgICAgYnJlYWsK ICAgZmkKIGRvbmUKSW5kZXg6IGZvbnQvZm9udF9jbWQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBm b250L2ZvbnRfY21kLmMJKHJldmlzaW9uIDApCisrKyBmb250L2ZvbnRfY21kLmMJKHJldmlz aW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qIGZvbnRfY21kLmMgLSBGb250IGNvbW1hbmQg ZGVmaW5pdGlvbi4gKi8KKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxv YWRlcgorICogIENvcHlyaWdodCAoQykgMjAwMywyMDA1LDIwMDYsMjAwNywyMDA4ICBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Z3J1Yi9mb250 Lmg+CisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+Cisj aW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisKK3N0YXRpYyBncnViX2Vycl90Citsb2FkZm9udF9j b21tYW5kIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAqc3RhdGUgX19hdHRyaWJ1dGVfXyAoKHVu dXNlZCkpLAorCSAgICAgIGludCBhcmdjLAorCSAgICAgIGNoYXIgKiphcmdzKQoreworICBp ZiAoYXJnYyA9PSAwKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJH VU1FTlQsICJubyBmb250IHNwZWNpZmllZCIpOworCisgIHdoaWxlIChhcmdjLS0pCisgICAg aWYgKGdydWJfZm9udF9sb2FkICgqYXJncysrKSAhPSAwKQorICAgICAgcmV0dXJuIEdSVUJf RVJSX0JBRF9GT05UOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMg Z3J1Yl9lcnJfdAorbHNmb250c19jb21tYW5kIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAqc3Rh dGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgICAgICAgICAgICBpbnQgYXJn YyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgICAgICAgICAgIGNoYXIgKiph cmdzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKK3sKKyAgc3RydWN0IGdydWJfZm9udF9u b2RlICpub2RlOworCisgIGdydWJfcHJpbnRmICgiTG9hZGVkIGZvbnRzOlxuIik7CisgIGZv ciAobm9kZSA9IGdydWJfZm9udF9saXN0OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkKKyAg ICB7CisgICAgICBncnViX2ZvbnRfdCBmb250ID0gbm9kZS0+dmFsdWU7CisgICAgICBncnVi X3ByaW50ZiAoIiVzXG4iLCBncnViX2ZvbnRfZ2V0X25hbWUgKGZvbnQpKTsKKyAgICB9CisK KyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK0dSVUJfTU9EX0lOSVQoZm9udF9tYW5h Z2VyKQoreworICBncnViX2ZvbnRfbG9hZGVyX2luaXQgKCk7CisKKyAgZ3J1Yl9yZWdpc3Rl cl9jb21tYW5kICgibG9hZGZvbnQiLCBsb2FkZm9udF9jb21tYW5kLCBHUlVCX0NPTU1BTkRf RkxBR19CT1RILAorCQkJICJsb2FkZm9udCBGSUxFLi4uIiwKKwkJCSAiU3BlY2lmeSBvbmUg b3IgbW9yZSBmb250IGZpbGVzIHRvIGxvYWQuIiwgMCk7CisKKyAgZ3J1Yl9yZWdpc3Rlcl9j b21tYW5kICgibHNmb250cyIsIGxzZm9udHNfY29tbWFuZCwgR1JVQl9DT01NQU5EX0ZMQUdf Qk9USCwKKwkJCSAibHNmb250cyIsCisJCQkgIkxpc3QgdGhlIGxvYWRlZCBmb250cy4iLCAw KTsKK30KKworR1JVQl9NT0RfRklOSShmb250X21hbmFnZXIpCit7CisgIC8qIFRPRE86IERl dGVybWluZSB3YXkgdG8gZnJlZSBhbGxvY2F0ZWQgcmVzb3VyY2VzLiAgCisgICAgIFdhcm5p bmc6IHBvc3NpYmxlIHBvaW50ZXIgcmVmZXJlbmNlcyBjb3VsZCBiZSBpbiB1c2UuICAqLwor CisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgibG9hZGZvbnQiKTsKK30KKwpJbmRleDog Zm9udC9mb250LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZm9udC9mb250LmMJKHJldmlzaW9uIDAp CisrKyBmb250L2ZvbnQuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDI2IEBACisvKiBm b250LmMgLSBGb250IEFQSSBhbmQgZm9udCBmaWxlIGxvYWRlci4gICovCisvKgorICogIEdS VUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIw MDMsMjAwNSwyMDA2LDIwMDcsMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVC IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3 aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2luY2x1ZGUgPGdydWIvYnVmaW8uaD4KKyNpbmNsdWRlIDxncnViL2RsLmg+ CisjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+CisjaW5jbHVkZSA8Z3J1Yi9mb250Lmg+CisjaW5j bHVkZSA8Z3J1Yi9taXNjLmg+CisjaW5jbHVkZSA8Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdy dWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL3ZpZGVvLmg+CisjaW5jbHVkZSA8Z3J1Yi9i aXRtYXAuaD4KKworI2lmbmRlZiBGT05UX0RFQlVHCisjZGVmaW5lIEZPTlRfREVCVUcgMAor I2VuZGlmCisKK3N0cnVjdCBjaGFyX2luZGV4X2VudHJ5Cit7CisgIGdydWJfdWludDMyX3Qg Y29kZTsKKyAgZ3J1Yl91aW50OF90IHN0b3JhZ2VfZmxhZ3M7CisgIGdydWJfdWludDMyX3Qg b2Zmc2V0OworICAKKyAgLyogR2x5cGggaWYgbG9hZGVkLCBvciBOVUxMIG90aGVyd2lzZS4g ICovCisgIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKmdseXBoOworfTsKKworI2RlZmluZSBG T05UX1dFSUdIVF9OT1JNQUwgMTAwCisjZGVmaW5lIEZPTlRfV0VJR0hUX0JPTEQgMjAwCisK K3N0cnVjdCBncnViX2ZvbnQKK3sKKyAgY2hhciAqbmFtZTsKKyAgZ3J1Yl9maWxlX3QgZmls ZTsKKyAgY2hhciAqZmFtaWx5OworICBzaG9ydCBwb2ludF9zaXplOworICBzaG9ydCB3ZWln aHQ7CisgIHNob3J0IG1heF9jaGFyX3dpZHRoOworICBzaG9ydCBtYXhfY2hhcl9oZWlnaHQ7 CisgIHNob3J0IGFzY2VudDsKKyAgc2hvcnQgZGVzY2VudDsKKyAgc2hvcnQgbGVhZGluZzsK KyAgZ3J1Yl91aW50MzJfdCBudW1fY2hhcnM7CisgIHN0cnVjdCBjaGFyX2luZGV4X2VudHJ5 ICpjaGFyX2luZGV4OworfTsKKworLyogRGVmaW5pdGlvbiBvZiBmb250IHJlZ2lzdHJ5LiAg Ki8KK3N0cnVjdCBncnViX2ZvbnRfbm9kZSAqZ3J1Yl9mb250X2xpc3Q7CisKK3N0YXRpYyBp bnQgcmVnaXN0ZXJfZm9udCAoZ3J1Yl9mb250X3QgZm9udCk7CitzdGF0aWMgdm9pZCBmb250 X2luaXQgKGdydWJfZm9udF90IGZvbnQpOworc3RhdGljIHZvaWQgZnJlZV9mb250IChncnVi X2ZvbnRfdCBmb250KTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9mb250IChncnViX2ZvbnRfdCBm b250KTsKKworc3RydWN0IGZvbnRfZmlsZV9zZWN0aW9uCit7CisgIC8qIFRoZSBmaWxlIHRo aXMgc2VjdGlvbiBpcyBpbi4gICovCisgIGdydWJfZmlsZV90IGZpbGU7CisgIAorICAvKiBG T1VSQ0MgbmFtZSBvZiB0aGUgc2VjdGlvbi4gICovCisgIGNoYXIgbmFtZVs0XTsKKyAgCisg IC8qIExlbmd0aCBvZiB0aGUgc2VjdGlvbiBjb250ZW50cy4gICovCisgIGdydWJfdWludDMy X3QgbGVuZ3RoOworICAKKyAgLyogU2V0IGJ5IG9wZW5fc2VjdGlvbigpIG9uIEVPRi4gICov CisgIGludCBlb2Y7Cit9OworCisvKiBGb250IGZpbGUgZm9ybWF0IGNvbnN0YW50cy4gICov CitzdGF0aWMgY29uc3QgY2hhciBwZmYyX21hZ2ljWzRdID0geyAnUCcsICdGJywgJ0YnLCAn MicgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHNlY3Rpb25fbmFtZXNfZmlsZVs0XSA9IHsgJ0Yn LCAnSScsICdMJywgJ0UnIH07CitzdGF0aWMgY29uc3QgY2hhciBzZWN0aW9uX25hbWVzX2Zv bnRfbmFtZVs0XSA9IHsgJ04nLCAnQScsICdNJywgJ0UnIH07CitzdGF0aWMgY29uc3QgY2hh ciBzZWN0aW9uX25hbWVzX3BvaW50X3NpemVbNF0gPSB7ICdQJywgJ1QnLCAnUycsICdaJyB9 Oworc3RhdGljIGNvbnN0IGNoYXIgc2VjdGlvbl9uYW1lc193ZWlnaHRbNF0gPSB7ICdXJywg J0UnLCAnSScsICdHJyB9Oworc3RhdGljIGNvbnN0IGNoYXIgc2VjdGlvbl9uYW1lc19tYXhf Y2hhcl93aWR0aFs0XSA9IHsgJ00nLCAnQScsICdYJywgJ1cnIH07CitzdGF0aWMgY29uc3Qg Y2hhciBzZWN0aW9uX25hbWVzX21heF9jaGFyX2hlaWdodFs0XSA9IHsgJ00nLCAnQScsICdY JywgJ0gnIH07CitzdGF0aWMgY29uc3QgY2hhciBzZWN0aW9uX25hbWVzX2FzY2VudFs0XSA9 IHsgJ0EnLCAnUycsICdDJywgJ0UnIH07CitzdGF0aWMgY29uc3QgY2hhciBzZWN0aW9uX25h bWVzX2Rlc2NlbnRbNF0gPSB7ICdEJywgJ0UnLCAnUycsICdDJyB9Oworc3RhdGljIGNvbnN0 IGNoYXIgc2VjdGlvbl9uYW1lc19jaGFyX2luZGV4WzRdID0geyAnQycsICdIJywgJ0knLCAn WCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHNlY3Rpb25fbmFtZXNfZGF0YVs0XSA9IHsgJ0Qn LCAnQScsICdUJywgJ0EnIH07CisKKy8qIFJlcGxhY2UgdW5rbm93biBnbHlwaHMgd2l0aCBh IHJvdW5kZWQgcXVlc3Rpb24gbWFyay4gICovCitzdGF0aWMgZ3J1Yl91aW50OF90IHVua25v d25fZ2x5cGhfYml0bWFwW10gPQoreworICAvKiAgICAgICA3NjU0MzIxMCAqLworICAweDdD LCAvKiAgb29vb28gICAqLworICAweDgyLCAvKiBvICAgICBvICAqLworICAweEJBLCAvKiBv IG9vbyBvICAqLworICAweEFBLCAvKiBvIG8gbyBvICAqLworICAweEFBLCAvKiBvIG8gbyBv ICAqLworICAweDhBLCAvKiBvICAgbyBvICAqLworICAweDlBLCAvKiBvICBvbyBvICAqLwor ICAweDkyLCAvKiBvICBvICBvICAqLworICAweDkyLCAvKiBvICBvICBvICAqLworICAweDky LCAvKiBvICBvICBvICAqLworICAweDkyLCAvKiBvICBvICBvICAqLworICAweDgyLCAvKiBv ICAgICBvICAqLworICAweDkyLCAvKiBvICBvICBvICAqLworICAweDgyLCAvKiBvICAgICBv ICAqLworICAweDdDLCAvKiAgb29vb28gICAqLworICAweDAwICAvKiAgICAgICAgICAqLwor fTsKKworLyogVGhlICJ1bmtub3duIGdseXBoIiBnbHlwaCwgdXNlZCBhcyBhIGxhc3QgcmVz b3J0LiAgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICp1bmtub3duX2dseXBo OworCisvKiBUaGUgZm9udCBzdHJ1Y3R1cmUgdXNlZCB3aGVuIG5vIG90aGVyIGZvbnQgaXMg bG9hZGVkLiAgVGhpcyBmdW5jdGlvbnMKKyAgIGFzIGEgIk51bGwgT2JqZWN0IiBwYXR0ZXJu LCBzbyB0aGF0IGNvZGUgZXZlcnl3aGVyZSBkb2VzIG5vdCBoYXZlIHRvCisgICBjaGVjayBm b3IgYSBOVUxMIGdydWJfZm9udF90IHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgYSBudWxsIHBv aW50ZXIuICAqLworc3RhdGljIHN0cnVjdCBncnViX2ZvbnQgbnVsbF9mb250OworCisvKiBG bGFnIHRvIGVuc3VyZSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQgb25seSBvbmNlLiAgKi8KK3N0 YXRpYyBncnViX3VpbnQ4X3QgZm9udF9sb2FkZXJfaW5pdGlhbGl6ZWQ7CisKK3ZvaWQKK2dy dWJfZm9udF9sb2FkZXJfaW5pdCAodm9pZCkKK3sKKyAgLyogT25seSBpbml0aWFsaXplIGZv bnQgbG9hZGVyIG9uY2UuICAqLworICBpZiAoZm9udF9sb2FkZXJfaW5pdGlhbGl6ZWQpCisg ICAgcmV0dXJuOworCisgIC8qIE1ha2UgZ2x5cGggZm9yIHVua25vd24gZ2x5cGguICAqLwor ICB1bmtub3duX2dseXBoID0gZ3J1Yl9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBncnViX2ZvbnRf Z2x5cGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZih1bmtub3du X2dseXBoX2JpdG1hcCkpOworICBpZiAoISB1bmtub3duX2dseXBoKQorICAgIHJldHVybjsK KworICB1bmtub3duX2dseXBoLT53aWR0aCA9IDg7CisgIHVua25vd25fZ2x5cGgtPmhlaWdo dCA9IDE2OworICB1bmtub3duX2dseXBoLT5vZmZzZXRfeCA9IDA7CisgIHVua25vd25fZ2x5 cGgtPm9mZnNldF95ID0gMDsKKyAgdW5rbm93bl9nbHlwaC0+ZGV2aWNlX3dpZHRoID0gODsK KyAgZ3J1Yl9tZW1jcHkodW5rbm93bl9nbHlwaC0+Yml0bWFwLAorICAgICAgICAgICAgICB1 bmtub3duX2dseXBoX2JpdG1hcCwgc2l6ZW9mKHVua25vd25fZ2x5cGhfYml0bWFwKSk7CisK KyAgLyogSW5pdGlhbGl6ZSB0aGUgbnVsbCBmb250LiAgKi8KKyAgZm9udF9pbml0ICgmbnVs bF9mb250KTsKKyAgbnVsbF9mb250Lm5hbWUgPSAiPE5vIEZvbnQ+IjsKKyAgbnVsbF9mb250 LmFzY2VudCA9IHVua25vd25fZ2x5cGgtPmhlaWdodDsKKyAgbnVsbF9mb250LmRlc2NlbnQg PSAxOworICBudWxsX2ZvbnQubWF4X2NoYXJfd2lkdGggPSB1bmtub3duX2dseXBoLT53aWR0 aDsKKyAgbnVsbF9mb250Lm1heF9jaGFyX2hlaWdodCA9IHVua25vd25fZ2x5cGgtPmhlaWdo dDsKKworICBmb250X2xvYWRlcl9pbml0aWFsaXplZCA9IDE7Cit9CisKKy8qIEluaXRpYWxp emUgdGhlIGZvbnQgb2JqZWN0IHdpdGggaW5pdGlhbCBkZWZhdWx0IHZhbHVlcy4gICovCitz dGF0aWMgdm9pZAorZm9udF9pbml0IChncnViX2ZvbnRfdCBmb250KQoreworICBmb250LT5u YW1lID0gMDsKKyAgZm9udC0+ZmlsZSA9IDA7CisgIGZvbnQtPmZhbWlseSA9IDA7CisgIGZv bnQtPnBvaW50X3NpemUgPSAwOworICBmb250LT53ZWlnaHQgPSAwOworICAKKyAgLyogRGVm YXVsdCBsZWFkaW5nIHZhbHVlLCBub3QgaW4gZm9udCBmaWxlIHlldC4gICovCisgIGZvbnQt PmxlYWRpbmcgPSAxOworICAKKyAgZm9udC0+bWF4X2NoYXJfd2lkdGggPSAwOworICBmb250 LT5tYXhfY2hhcl9oZWlnaHQgPSAwOworICBmb250LT5hc2NlbnQgPSAwOworICBmb250LT5k ZXNjZW50ID0gMDsKKyAgZm9udC0+bnVtX2NoYXJzID0gMDsKKyAgZm9udC0+Y2hhcl9pbmRl eCA9IDA7Cit9CisKKy8qIE9wZW4gdGhlIG5leHQgc2VjdGlvbiBpbiB0aGUgZmlsZS4KKwor ICAgT24gc3VjY2VzcywgdGhlIHNlY3Rpb24gbmFtZSBpcyBzdG9yZWQgaW4gc2VjdGlvbi0+ bmFtZSBhbmQgdGhlIGxlbmd0aCBpbgorICAgc2VjdGlvbi0+bGVuZ3RoLCBhbmQgMCBpcyBy ZXR1cm5lZC4gIE9uIGZhaWx1cmUsIDEgaXMgcmV0dXJuZWQgYW5kCisgICBncnViX2Vycm5v IGlzIHNldCBhcHByb3JpYXRlbHkgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgorCisgICBJZiAx IGlzIHJldHVybmVkIGR1ZSB0byBiZWluZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCB0aGVu IHNlY3Rpb24tPmVvZiBpcworICAgc2V0IHRvIDE7IG90aGVyd2lzZSwgc2VjdGlvbi0+ZW9m IGlzIHNldCB0byAwLiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fc2VjdGlvbiAoZ3J1Yl9maWxl X3QgZmlsZSwgc3RydWN0IGZvbnRfZmlsZV9zZWN0aW9uICpzZWN0aW9uKQoreworICBncnVi X3NzaXplX3QgcmV0dmFsOworICBncnViX3VpbnQzMl90IHJhd19sZW5ndGg7CisKKyAgc2Vj dGlvbi0+ZmlsZSA9IGZpbGU7CisgIHNlY3Rpb24tPmVvZiA9IDA7CisKKyAgLyogUmVhZCB0 aGUgRk9VUkNDIHNlY3Rpb24gbmFtZS4gICovCisgIHJldHZhbCA9IGdydWJfZmlsZV9yZWFk IChmaWxlLCBzZWN0aW9uLT5uYW1lLCA0KTsKKyAgaWYgKHJldHZhbCA+PSAwICYmIHJldHZh bCA8IDQpCisgICAgeworICAgICAgLyogRU9GIGVuY291bnRlcmVkLiAgKi8KKyAgICAgIHNl Y3Rpb24tPmVvZiA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGVsc2UgaWYgKHJl dHZhbCA8IDApCisgICAgeworICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZPTlQs CisgICAgICAgICAgICAgICAgICAiRm9udCBmb3JtYXQgZXJyb3I6IGNhbid0IHJlYWQgc2Vj dGlvbiBuYW1lIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgLyogUmVhZCB0aGUg YmlnLWVuZGlhbiAzMi1iaXQgc2VjdGlvbiBsZW5ndGguICAqLworICByZXR2YWwgPSBncnVi X2ZpbGVfcmVhZCAoZmlsZSwgKGNoYXIgKikgJnJhd19sZW5ndGgsIDQpOworICBpZiAocmV0 dmFsID49IDAgJiYgcmV0dmFsIDwgNCkKKyAgICB7CisgICAgICAvKiBFT0YgZW5jb3VudGVy ZWQuICAqLworICAgICAgc2VjdGlvbi0+ZW9mID0gMTsKKyAgICAgIHJldHVybiAxOworICAg IH0KKyAgZWxzZSBpZiAocmV0dmFsIDwgMCkKKyAgICB7CisgICAgICBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRk9OVCwKKyAgICAgICAgICAgICAgICAgICJGb250IGZvcm1hdCBlcnJv cjogY2FuJ3QgcmVhZCBzZWN0aW9uIGxlbmd0aCIpOworICAgICAgcmV0dXJuIDE7CisgICAg fQorCisgIC8qIENvbnZlcnQgYnl0ZS1vcmRlciBhbmQgc3RvcmUgaW4gKmxlbmd0aC4gICov CisgIHNlY3Rpb24tPmxlbmd0aCA9IGdydWJfYmVfdG9fY3B1MzIgKHJhd19sZW5ndGgpOwor CisgIHJldHVybiAwOworfQorCisvKiBTaXplIGluIGJ5dGVzIG9mIGVhY2ggY2hhcmFjdGVy IGluZGV4IChDSElYIHNlY3Rpb24pCisgICBlbnRyeSBpbiB0aGUgZm9udCBmaWxlLiAgKi8K KyNkZWZpbmUgRk9OVF9DSEFSX0lOREVYX0VOVFJZX1NJWkUgKDQgKyAxICsgNCkKKworLyog TG9hZCB0aGUgY2hhcmFjdGVyIGluZGV4IChDSElYKSBzZWN0aW9uIGNvbnRlbnRzIGZyb20g dGhlIGZvbnQgZmlsZS4gIFRoaXMKKyAgIHByZXN1bWVzIHRoYXQgdGhlIHBvc2l0aW9uIG9m IEZJTEUgaXMgcG9zaXRpb25lZCBpbW1lZGlhdGVseSBhZnRlciB0aGUKKyAgIHNlY3Rpb24g bGVuZ3RoIGZvciB0aGUgQ0hJWCBzZWN0aW9uIChpLmUuLCBhdCB0aGUgc3RhcnQgb2YgdGhl IHNlY3Rpb24KKyAgIGNvbnRlbnRzKS4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3MsIG5vbnpl cm8gZm9yIGZhaWx1cmUgKGluIHdoaWNoIGNhc2UKKyAgIGdydWJfZXJybm8gaXMgc2V0IGFw cHJvcHJpYXRlbHkpLiAgKi8KK3N0YXRpYyBpbnQKK2xvYWRfZm9udF9pbmRleCAoZ3J1Yl9m aWxlX3QgZmlsZSwgZ3J1Yl91aW50MzJfdCBzZWN0X2xlbmd0aCwgc3RydWN0CisgICAgICAg ICAgICAgICAgIGdydWJfZm9udCAqZm9udCkKK3sKKyAgdW5zaWduZWQgaTsKKworI2lmIEZP TlRfREVCVUcgPj0gMgorICBncnViX3ByaW50ZigibG9hZF9mb250X2luZGV4KHNlY3RfbGVu Z3RoPSVkKVxuIiwgc2VjdF9sZW5ndGgpOworI2VuZGlmCisKKyAgLyogU2FuaXR5IGNoZWNr OiBlbnN1cmUgc2VjdGlvbiBsZW5ndGggaXMgZGl2aXNpYmxlIGJ5IHRoZSBlbnRyeSBzaXpl LiAgKi8KKyAgaWYgKChzZWN0X2xlbmd0aCAlIEZPTlRfQ0hBUl9JTkRFWF9FTlRSWV9TSVpF KSAhPSAwKQorICAgIHsKKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GT05ULAor ICAgICAgICAgICAgICAgICAgIkZvbnQgZmlsZSBmb3JtYXQgZXJyb3I6IGNoYXJhY3RlciBp bmRleCBsZW5ndGggJWQgIgorICAgICAgICAgICAgICAgICAgImlzIG5vdCBhIG11bHRpcGxl IG9mIHRoZSBlbnRyeSBzaXplICVkIiwKKyAgICAgICAgICAgICAgICAgIHNlY3RfbGVuZ3Ro LCBGT05UX0NIQVJfSU5ERVhfRU5UUllfU0laRSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9 CisKKyAgLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4gICovCisgIGZv bnQtPm51bV9jaGFycyA9IHNlY3RfbGVuZ3RoIC8gRk9OVF9DSEFSX0lOREVYX0VOVFJZX1NJ WkU7CisKKyAgLyogQWxsb2NhdGUgdGhlIGNoYXJhY3RlciBpbmRleCBhcnJheS4gICovCisg IGZvbnQtPmNoYXJfaW5kZXggPSBncnViX21hbGxvYyAoZm9udC0+bnVtX2NoYXJzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKHN0cnVjdCBjaGFyX2lu ZGV4X2VudHJ5KSk7CisgIGlmICghIGZvbnQtPmNoYXJfaW5kZXgpCisgICAgcmV0dXJuIDE7 CisKKyNpZiBGT05UX0RFQlVHID49IDIKKyAgZ3J1Yl9wcmludGYoIm51bV9jaGFycz0lZClc biIsIGZvbnQtPm51bV9jaGFycyk7CisjZW5kaWYKKworICAvKiBMb2FkIHRoZSBjaGFyYWN0 ZXIgaW5kZXggZGF0YSBmcm9tIHRoZSBmaWxlLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGZv bnQtPm51bV9jaGFyczsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBjaGFyX2luZGV4X2Vu dHJ5ICplbnRyeSA9ICZmb250LT5jaGFyX2luZGV4W2ldOworCisgICAgICAvKiBSZWFkIGNv ZGUgcG9pbnQgdmFsdWU7IGNvbnZlcnQgdG8gbmF0aXZlIGJ5dGUgb3JkZXIuICAqLworICAg ICAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSAmZW50cnktPmNvZGUsIDQp ICE9IDQpCisgICAgICAgIHJldHVybiAxOworICAgICAgZW50cnktPmNvZGUgPSBncnViX2Jl X3RvX2NwdTMyIChlbnRyeS0+Y29kZSk7CisKKyAgICAgIC8qIFJlYWQgc3RvcmFnZSBmbGFn cyBieXRlLiAgKi8KKyAgICAgIGlmIChncnViX2ZpbGVfcmVhZCAoZmlsZSwgKGNoYXIgKikg JmVudHJ5LT5zdG9yYWdlX2ZsYWdzLCAxKSAhPSAxKQorICAgICAgICByZXR1cm4gMTsKKwor ICAgICAgLyogUmVhZCBnbHlwaCBkYXRhIG9mZnNldDsgY29udmVydCB0byBuYXRpdmUgYnl0 ZSBvcmRlci4gICovCisgICAgICBpZiAoZ3J1Yl9maWxlX3JlYWQgKGZpbGUsIChjaGFyICop ICZlbnRyeS0+b2Zmc2V0LCA0KSAhPSA0KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVu dHJ5LT5vZmZzZXQgPSBncnViX2JlX3RvX2NwdTMyIChlbnRyeS0+b2Zmc2V0KTsKKworICAg ICAgLyogTm8gZ2x5cGggbG9hZGVkLiAgV2lsbCBiZSBsb2FkZWQgb24gZGVtYW5kIGFuZCBj YWNoZWQgdGhlcmVhZnRlci4gICovCisgICAgICBlbnRyeS0+Z2x5cGggPSAwOworCisjaWYg Rk9OVF9ERUJVRyA+PSA1CisgICAgICAvKiBQcmludCB0aGUgMXN0IDEwIGNoYXJhY3RlcnMu ICAqLworICAgICAgaWYgKGkgPCAxMCkKKyAgICAgICAgZ3J1Yl9wcmludGYoImM9JWQgbz0l ZFxuIiwgZW50cnktPmNvZGUsIGVudHJ5LT5vZmZzZXQpOworI2VuZGlmCisgICAgfQorCisg IHJldHVybiAwOworfQorCisvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVk IHNlY3Rpb24gYXMgYSBzdHJpbmcsIHdoaWNoIGlzCisgICBhbGxvY2F0ZWQgb24gdGhlIGhl YXAuICBSZXR1cm5zIDAgaWYgdGhlcmUgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNoYXIg KgorcmVhZF9zZWN0aW9uX2FzX3N0cmluZyAoc3RydWN0IGZvbnRfZmlsZV9zZWN0aW9uICpz ZWN0aW9uKQoreworICBjaGFyICpzdHI7CisgIGdydWJfc3NpemVfdCByZXQ7CisKKyAgc3Ry ID0gZ3J1Yl9tYWxsb2MgKHNlY3Rpb24tPmxlbmd0aCArIDEpOworICBpZiAoISBzdHIpCisg ICAgcmV0dXJuIDA7CisKKyAgcmV0ID0gZ3J1Yl9maWxlX3JlYWQgKHNlY3Rpb24tPmZpbGUs IHN0ciwgc2VjdGlvbi0+bGVuZ3RoKTsKKyAgaWYgKHJldCA8IDAgfHwgcmV0ICE9IChncnVi X3NzaXplX3QpIHNlY3Rpb24tPmxlbmd0aCkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKHN0 cik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgc3RyW3NlY3Rpb24tPmxlbmd0aF0g PSAnXDAnOworICByZXR1cm4gc3RyOworfQorCisvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0 aGUgY3VycmVudCBzZWN0aW9uIGFzIGEgMTYtYml0IGludGVnZXIgdmFsdWUsCisgICB3aGlj aCBpcyBzdG9yZWQgaW50byAqVkFMVUUuCisgICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBu b256ZXJvIHVwb24gZmFpbHVyZS4gICovCitzdGF0aWMgaW50CityZWFkX3NlY3Rpb25fYXNf c2hvcnQgKHN0cnVjdCBmb250X2ZpbGVfc2VjdGlvbiAqc2VjdGlvbiwgZ3J1Yl9pbnQxNl90 ICp2YWx1ZSkKK3sKKyAgZ3J1Yl91aW50MTZfdCByYXdfdmFsdWU7CisKKyAgaWYgKHNlY3Rp b24tPmxlbmd0aCAhPSAyKQorICAgIHsKKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GT05ULAorICAgICAgICAgICAgICAgICAgIkZvbnQgZmlsZSBmb3JtYXQgZXJyb3I6IHNl Y3Rpb24gJWMlYyVjJWMgbGVuZ3RoICIKKyAgICAgICAgICAgICAgICAgICJpcyAlZCBidXQg c2hvdWxkIGJlIDIiLAorICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+bmFtZVswXSwgc2Vj dGlvbi0+bmFtZVsxXSwKKyAgICAgICAgICAgICAgICAgIHNlY3Rpb24tPm5hbWVbMl0sIHNl Y3Rpb24tPm5hbWVbM10sCisgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5sZW5ndGgpOwor ICAgICAgcmV0dXJuIDE7CisgICAgfQorICBpZiAoZ3J1Yl9maWxlX3JlYWQgKHNlY3Rpb24t PmZpbGUsIChjaGFyICopICZyYXdfdmFsdWUsIDIpICE9IDIpCisgICAgcmV0dXJuIDE7CisK KyAgKnZhbHVlID0gZ3J1Yl9iZV90b19jcHUxNiAocmF3X3ZhbHVlKTsKKyAgcmV0dXJuIDA7 Cit9CisKKy8qIExvYWQgYSBmb250IGFuZCBhZGQgaXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0 aGUgZ2xvYmFsIGZvbnQgbGlzdC4KKyAgIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3MsIG5vbnpl cm8gdXBvbiBmYWlsdXJlLiAgKi8KK2ludAorZ3J1Yl9mb250X2xvYWQgKGNvbnN0IGNoYXIg KmZpbGVuYW1lKQoreworICBncnViX2ZpbGVfdCBmaWxlID0gMDsKKyAgc3RydWN0IGZvbnRf ZmlsZV9zZWN0aW9uIHNlY3Rpb247CisgIGNoYXIgbWFnaWNbNF07CisgIGdydWJfZm9udF90 IGZvbnQgPSAwOworCisjaWYgRk9OVF9ERUJVRyA+PSAxCisgIGdydWJfcHJpbnRmKCJhZGRf Zm9udCglcylcbiIsIGZpbGVuYW1lKTsKKyNlbmRpZgorCisgIGZpbGUgPSBncnViX2J1ZmZp bGVfb3BlbiAoZmlsZW5hbWUsIDEwMjQpOworICBpZiAoIWZpbGUpCisgICAgZ290byBmYWls OworCisjaWYgRk9OVF9ERUJVRyA+PSAzCisgIGdydWJfcHJpbnRmKCJmaWxlIG9wZW5lZFxu Iik7CisjZW5kaWYKKworICAvKiBSZWFkIHRoZSBGSUxFIHNlY3Rpb24uICBJdCBpbmRpY2F0 ZXMgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKyAgaWYgKG9wZW5fc2VjdGlvbiAoZmlsZSwgJnNl Y3Rpb24pICE9IDApCisgICAgZ290byBmYWlsOworCisjaWYgRk9OVF9ERUJVRyA+PSAzCisg IGdydWJfcHJpbnRmKCJvcGVuZWQgRklMRSBzZWN0aW9uXG4iKTsKKyNlbmRpZgorICBpZiAo Z3J1Yl9tZW1jbXAgKHNlY3Rpb24ubmFtZSwgc2VjdGlvbl9uYW1lc19maWxlLCA0KSAhPSAw KQorICAgIHsKKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GT05ULAorICAgICAg ICAgICAgICAgICAgIkZvbnQgZmlsZSBmb3JtYXQgZXJyb3I6IDFzdCBzZWN0aW9uIG11c3Qg YmUgRklMRSIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKworI2lmIEZPTlRfREVCVUcg Pj0gMworICBncnViX3ByaW50Zigic2VjdGlvbiBuYW1lIG9rXG4iKTsKKyNlbmRpZgorICBp ZiAoc2VjdGlvbi5sZW5ndGggIT0gNCkKKyAgICB7CisgICAgICBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRk9OVCwKKyAgICAgICAgICAgICAgICAgICJGb250IGZpbGUgZm9ybWF0IGVy cm9yIChmaWxlIHR5cGUgSUQgbGVuZ3RoIGlzICVkICIKKyAgICAgICAgICAgICAgICAgICJi dXQgc2hvdWxkIGJlIDQpIiwgc2VjdGlvbi5sZW5ndGgpOworICAgICAgZ290byBmYWlsOwor ICAgIH0KKworI2lmIEZPTlRfREVCVUcgPj0gMworICBncnViX3ByaW50Zigic2VjdGlvbiBs ZW5ndGggb2tcbiIpOworI2VuZGlmCisgIC8qIENoZWNrIHRoZSBmaWxlIGZvcm1hdCB0eXBl IGNvZGUuICAqLworICBpZiAoZ3J1Yl9maWxlX3JlYWQgKGZpbGUsIG1hZ2ljLCA0KSAhPSA0 KQorICAgIGdvdG8gZmFpbDsKKworI2lmIEZPTlRfREVCVUcgPj0gMworICBncnViX3ByaW50 ZigicmVhZCBtYWdpYyBva1xuIik7CisjZW5kaWYKKworICBpZiAoZ3J1Yl9tZW1jbXAgKG1h Z2ljLCBwZmYyX21hZ2ljLCA0KSAhPSAwKQorICAgIHsKKyAgICAgIGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GT05ULCAiSW52YWxpZCBmb250IG1hZ2ljICV4ICV4ICV4ICV4IiwKKyAg ICAgICAgICAgICAgICAgIG1hZ2ljWzBdLCBtYWdpY1sxXSwgbWFnaWNbMl0sIG1hZ2ljWzNd KTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyNpZiBGT05UX0RFQlVHID49IDMKKyAg Z3J1Yl9wcmludGYoImNvbXBhcmUgbWFnaWMgb2tcbiIpOworI2VuZGlmCisKKyAgLyogQWxs b2NhdGUgdGhlIGZvbnQgb2JqZWN0LiAgKi8KKyAgZm9udCA9IChncnViX2ZvbnRfdCkgZ3J1 Yl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGdydWJfZm9udCkpOworICBpZiAoISBmb250KQor ICAgIGdvdG8gZmFpbDsKKworICBmb250X2luaXQgKGZvbnQpOworICBmb250LT5maWxlID0g ZmlsZTsKKworI2lmIEZPTlRfREVCVUcgPj0gMworICBncnViX3ByaW50ZigiYWxsb2NhdGUg Zm9udCBvazsgbG9hZGluZyBmb250IGluZm9cbiIpOworI2VuZGlmCisKKyAgLyogTG9hZCB0 aGUgZm9udCBpbmZvcm1hdGlvbi4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlm IChvcGVuX3NlY3Rpb24gKGZpbGUsICZzZWN0aW9uKSAhPSAwKQorICAgICAgICB7CisgICAg ICAgICAgaWYgKHNlY3Rpb24uZW9mKQorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg ICAvKiBEb25lIHJlYWRpbmcgdGhlIGZvbnQgZmlsZS4gICovCisgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyNpZiBGT05UX0RFQlVHID49 IDIKKyAgICAgIGdydWJfcHJpbnRmKCJvcGVuZWQgc2VjdGlvbiAlYyVjJWMlYyBva1xuIiwK KyAgICAgICAgICAgICAgICAgIHNlY3Rpb24ubmFtZVswXSwgc2VjdGlvbi5uYW1lWzFdLAor ICAgICAgICAgICAgICAgICAgc2VjdGlvbi5uYW1lWzJdLCBzZWN0aW9uLm5hbWVbM10pOwor I2VuZGlmCisKKyAgICAgIGlmIChncnViX21lbWNtcCAoc2VjdGlvbi5uYW1lLCBzZWN0aW9u X25hbWVzX2ZvbnRfbmFtZSwgNCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGZvbnQt Pm5hbWUgPSByZWFkX3NlY3Rpb25fYXNfc3RyaW5nICgmc2VjdGlvbik7CisgICAgICAgICAg aWYgKCFmb250LT5uYW1lKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9Cisg ICAgICBlbHNlIGlmIChncnViX21lbWNtcCAoc2VjdGlvbi5uYW1lLCBzZWN0aW9uX25hbWVz X3BvaW50X3NpemUsIDQpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocmVhZF9z ZWN0aW9uX2FzX3Nob3J0ICgmc2VjdGlvbiwgJmZvbnQtPnBvaW50X3NpemUpICE9IDApCisg ICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJf bWVtY21wIChzZWN0aW9uLm5hbWUsIHNlY3Rpb25fbmFtZXNfd2VpZ2h0LCA0KSA9PSAwKQor ICAgICAgICB7CisgICAgICAgICAgY2hhciAqd3Q7CisgICAgICAgICAgd3QgPSByZWFkX3Nl Y3Rpb25fYXNfc3RyaW5nICgmc2VjdGlvbik7CisgICAgICAgICAgaWYgKCF3dCkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIC8qIENvbnZlcnQgdGhlIHdlaWdodCBzdHJp bmcgJ25vcm1hbCcgb3IgJ2JvbGQnIGludG8gYSBudW1iZXIuICAqLworICAgICAgICAgIGlm IChncnViX3N0cmNtcCAod3QsICJub3JtYWwiKSA9PSAwKQorICAgICAgICAgICAgZm9udC0+ d2VpZ2h0ID0gRk9OVF9XRUlHSFRfTk9STUFMOworICAgICAgICAgIGVsc2UgaWYgKGdydWJf c3RyY21wICh3dCwgImJvbGQiKSA9PSAwKQorICAgICAgICAgICAgZm9udC0+d2VpZ2h0ID0g Rk9OVF9XRUlHSFRfQk9MRDsKKyAgICAgICAgICBncnViX2ZyZWUgKHd0KTsKKyAgICAgICAg fQorICAgICAgZWxzZSBpZiAoZ3J1Yl9tZW1jbXAgKHNlY3Rpb24ubmFtZSwgc2VjdGlvbl9u YW1lc19tYXhfY2hhcl93aWR0aCwgNCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlm IChyZWFkX3NlY3Rpb25fYXNfc2hvcnQgKCZzZWN0aW9uLCAmZm9udC0+bWF4X2NoYXJfd2lk dGgpICE9IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgIGVs c2UgaWYgKGdydWJfbWVtY21wIChzZWN0aW9uLm5hbWUsIHNlY3Rpb25fbmFtZXNfbWF4X2No YXJfaGVpZ2h0LCA0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHJlYWRfc2Vj dGlvbl9hc19zaG9ydCAoJnNlY3Rpb24sICZmb250LT5tYXhfY2hhcl9oZWlnaHQpICE9IDAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdy dWJfbWVtY21wIChzZWN0aW9uLm5hbWUsIHNlY3Rpb25fbmFtZXNfYXNjZW50LCA0KSA9PSAw KQorICAgICAgICB7CisgICAgICAgICAgaWYgKHJlYWRfc2VjdGlvbl9hc19zaG9ydCAoJnNl Y3Rpb24sICZmb250LT5hc2NlbnQpICE9IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7Cisg ICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfbWVtY21wIChzZWN0aW9uLm5hbWUsIHNl Y3Rpb25fbmFtZXNfZGVzY2VudCwgNCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlm IChyZWFkX3NlY3Rpb25fYXNfc2hvcnQgKCZzZWN0aW9uLCAmZm9udC0+ZGVzY2VudCkgIT0g MCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAo Z3J1Yl9tZW1jbXAgKHNlY3Rpb24ubmFtZSwgc2VjdGlvbl9uYW1lc19jaGFyX2luZGV4LCA0 KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGxvYWRfZm9udF9pbmRleCAoZmls ZSwgc2VjdGlvbi5sZW5ndGgsIGZvbnQpICE9IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfbWVtY21wIChzZWN0aW9uLm5hbWUs IHNlY3Rpb25fbmFtZXNfZGF0YSwgNCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8q IFdoZW4gdGhlIERBVEEgc2VjdGlvbiBtYXJrZXIgaXMgcmVhY2hlZCwgd2Ugc3RvcCByZWFk aW5nLiAgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAg ICAgICB7CisgICAgICAgICAgLyogVW5oYW5kbGVkIHNlY3Rpb24gdHlwZSwgc2ltcGx5IHNr aXAgcGFzdCBpdC4gICovCisjaWYgRk9OVF9ERUJVRyA+PSAzCisgICAgICAgICAgZ3J1Yl9w cmludGYoIlVuaGFuZGxlZCBzZWN0aW9uIHR5cGUsIHNraXBwaW5nLlxuIik7CisjZW5kaWYK KyAgICAgICAgICBncnViX29mZl90IHNlY3Rpb25fZW5kID0gZ3J1Yl9maWxlX3RlbGwgKGZp bGUpICsgc2VjdGlvbi5sZW5ndGg7CisgICAgICAgICAgaWYgKChpbnQpIGdydWJfZmlsZV9z ZWVrIChmaWxlLCBzZWN0aW9uX2VuZCkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCEgZm9udC0+bmFtZSkKKyAgICB7CisgICAg ICBncnViX3ByaW50ZiAoIk5vdGU6IEZvbnQgaGFzIG5vIG5hbWUuXG4iKTsKKyAgICAgIGZv bnQtPm5hbWUgPSBncnViX3N0cmR1cCAoIlVua25vd24iKTsKKyAgICB9CisKKyNpZiBGT05U X0RFQlVHID49IDEKKyAgZ3J1Yl9wcmludGYgKCJMb2FkZWQgZm9udCBgJXMnLlxuIgorICAg ICAgICAgICAgICAgIkFzY2VudD0lZCBEZXNjZW50PSVkIE1heFc9JWQgTWF4SD0lZCBOdW1i ZXIgb2YgY2hhcmFjdGVycz0lZC5cbiIsCisgICAgICAgICAgICAgICBmb250LT5uYW1lLAor ICAgICAgICAgICAgICAgZm9udC0+YXNjZW50LCBmb250LT5kZXNjZW50LAorICAgICAgICAg ICAgICAgZm9udC0+bWF4X2NoYXJfd2lkdGgsIGZvbnQtPm1heF9jaGFyX2hlaWdodCwKKyAg ICAgICAgICAgICAgIGZvbnQtPm51bV9jaGFycyk7CisjZW5kaWYKKworICBpZiAoZm9udC0+ bWF4X2NoYXJfd2lkdGggPT0gMAorICAgICAgfHwgZm9udC0+bWF4X2NoYXJfaGVpZ2h0ID09 IDAKKyAgICAgIHx8IGZvbnQtPm51bV9jaGFycyA9PSAwCisgICAgICB8fCBmb250LT5jaGFy X2luZGV4ID09IDAKKyAgICAgIHx8IGZvbnQtPmFzY2VudCA9PSAwCisgICAgICB8fCBmb250 LT5kZXNjZW50ID09IDApCisgICAgeworICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZPTlQsCisgICAgICAgICAgICAgICAgICAiSW52YWxpZCBmb250IGZpbGU6IG1pc3Npbmcg c29tZSByZXF1aXJlZCBkYXRhLiIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKworICAv KiBBZGQgdGhlIGZvbnQgdG8gdGhlIGdsb2JhbCBmb250IHJlZ2lzdHJ5LiAgKi8KKyAgaWYg KHJlZ2lzdGVyX2ZvbnQgKGZvbnQpICE9IDApCisgICAgZ290byBmYWlsOworCisgIHJldHVy biAwOworCitmYWlsOgorICBmcmVlX2ZvbnQgKGZvbnQpOworICByZXR1cm4gMTsKK30KKwor LyogUmVhZCBhIDE2LWJpdCBiaWctZW5kaWFuIGludGVnZXIgZnJvbSBGSUxFLCBjb252ZXJ0 IGl0IHRvIG5hdGl2ZSBieXRlCisgICBvcmRlciwgYW5kIHN0b3JlIGl0IGluICpWQUxVRS4K KyAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuICAqLworc3RhdGljIGlu dAorcmVhZF9iZV91aW50MTYgKGdydWJfZmlsZV90IGZpbGUsIGdydWJfdWludDE2X3QgKiB2 YWx1ZSkKK3sKKyAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSB2YWx1ZSwg MikgIT0gMikKKyAgICByZXR1cm4gMTsKKyAgKnZhbHVlID0gZ3J1Yl9iZV90b19jcHUxNiAo KnZhbHVlKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfYmVfaW50MTYg KGdydWJfZmlsZV90IGZpbGUsIGdydWJfaW50MTZfdCAqIHZhbHVlKQoreworICAvKiBGb3Ig dGhlIHNpZ25lZCBpbnRlZ2VyIHZlcnNpb24sIHVzZSB0aGUgc2FtZSBjb2RlIGFzIGZvciB1 bnNpZ25lZC4gICovCisgIHJldHVybiByZWFkX2JlX3VpbnQxNiAoZmlsZSwgKGdydWJfdWlu dDE2X3QgKikgdmFsdWUpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGFy YWN0ZXIgaW5kZXggZW50cnkgZm9yIHRoZSBnbHlwaCBjb3JyZXNwb25kaW5nIHRvCisgICB0 aGUgY29kZXBvaW50IENPREUgaW4gdGhlIGZvbnQgRk9OVC4gIElmIG5vdCBmb3VuZCwgcmV0 dXJuIHplcm8uICAqLworc3RhdGljIHN0cnVjdCBjaGFyX2luZGV4X2VudHJ5ICoKK2ZpbmRf Z2x5cGggKGNvbnN0IGdydWJfZm9udF90IGZvbnQsIGdydWJfdWludDMyX3QgY29kZSkKK3sK KyAgZ3J1Yl91aW50MzJfdCBpOworICBncnViX3VpbnQzMl90IGxlbiA9IGZvbnQtPm51bV9j aGFyczsKKyAgc3RydWN0IGNoYXJfaW5kZXhfZW50cnkgKnRhYmxlID0gZm9udC0+Y2hhcl9p bmRleDsKKworICAvKiBEbyBhIGxpbmVhciBzZWFyY2guICAqLworICBmb3IgKGkgPSAwOyBp IDwgbGVuOyBpKyspCisgICAgeworICAgICAgaWYgKHRhYmxlW2ldLmNvZGUgPT0gY29kZSkK KyAgICAgICAgcmV0dXJuICZ0YWJsZVtpXTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisK Ky8qIEdldCBhIGdseXBoIGZvciB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgQ09ERSBpbiBGT05U LiAgVGhlIGdseXBoIGlzIGxvYWRlZAorICAgZnJvbSB0aGUgZm9udCBmaWxlIGlmIGhhcyBu b3QgYmVlbiBsb2FkZWQgeWV0LgorICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGdseXBo IGlmIGZvdW5kLCBvciAwIGlmIGl0IGlzIG5vdCBmb3VuZC4gICovCitzdGF0aWMgc3RydWN0 IGdydWJfZm9udF9nbHlwaCAqCitncnViX2ZvbnRfZ2V0X2dseXBoX2ludGVybmFsIChncnVi X2ZvbnRfdCBmb250LCBncnViX3VpbnQzMl90IGNvZGUpCit7CisgIHN0cnVjdCBjaGFyX2lu ZGV4X2VudHJ5ICppbmRleF9lbnRyeTsKKworICBpbmRleF9lbnRyeSA9IGZpbmRfZ2x5cGgg KGZvbnQsIGNvZGUpOworICBpZiAoaW5kZXhfZW50cnkpCisgICAgeworICAgICAgc3RydWN0 IGdydWJfZm9udF9nbHlwaCAqZ2x5cGggPSAwOworICAgICAgZ3J1Yl91aW50MTZfdCB3aWR0 aDsKKyAgICAgIGdydWJfdWludDE2X3QgaGVpZ2h0OworICAgICAgZ3J1Yl9pbnQxNl90IHhv ZmY7CisgICAgICBncnViX2ludDE2X3QgeW9mZjsKKyAgICAgIGdydWJfaW50MTZfdCBkd2lk dGg7CisgICAgICBpbnQgbGVuOworCisgICAgICBpZiAoaW5kZXhfZW50cnktPmdseXBoKQor ICAgICAgICAvKiBSZXR1cm4gY2FjaGVkIGdseXBoLiAgKi8KKyAgICAgICAgcmV0dXJuIGlu ZGV4X2VudHJ5LT5nbHlwaDsKKworICAgICAgaWYgKCEgZm9udC0+ZmlsZSkKKyAgICAgICAg LyogTm8gb3BlbiBmaWxlLCBjYW4ndCBsb2FkIGFueSBnbHlwaHMuICAqLworICAgICAgICBy ZXR1cm4gMDsgICAgIAorCisgICAgICAvKiBNYWtlIHN1cmUgd2UgY2FuIGZpbmQgZ2x5cGhz IGZvciBlcnJvciBtZXNzYWdlcy4gIFB1c2ggYWN0aXZlCisgICAgICAgICBlcnJvciBtZXNz YWdlIHRvIGVycm9yIHN0YWNrIGFuZCByZXNldCBlcnJvciBtZXNzYWdlLiAgKi8KKyAgICAg IGdydWJfZXJyb3JfcHVzaCAoKTsKKworICAgICAgZ3J1Yl9maWxlX3NlZWsgKGZvbnQtPmZp bGUsIGluZGV4X2VudHJ5LT5vZmZzZXQpOworCisgICAgICAvKiBSZWFkIHRoZSBnbHlwaCB3 aWR0aCwgaGVpZ2h0LCBhbmQgYmFzZWxpbmUuICAqLworICAgICAgaWYgKHJlYWRfYmVfdWlu dDE2KGZvbnQtPmZpbGUsICZ3aWR0aCkgIT0gMAorICAgICAgICAgIHx8IHJlYWRfYmVfdWlu dDE2KGZvbnQtPmZpbGUsICZoZWlnaHQpICE9IDAKKyAgICAgICAgICB8fCByZWFkX2JlX2lu dDE2KGZvbnQtPmZpbGUsICZ4b2ZmKSAhPSAwCisgICAgICAgICAgfHwgcmVhZF9iZV9pbnQx Nihmb250LT5maWxlLCAmeW9mZikgIT0gMAorICAgICAgICAgIHx8IHJlYWRfYmVfaW50MTYo Zm9udC0+ZmlsZSwgJmR3aWR0aCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHJlbW92 ZV9mb250IChmb250KTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAg ICBsZW4gPSAod2lkdGggKiBoZWlnaHQgKyA3KSAvIDg7CisgICAgICBnbHlwaCA9IGdydWJf bWFsbG9jIChzaXplb2YgKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGgpICsgbGVuKTsKKyAgICAg IGlmICghIGdseXBoKQorICAgICAgICB7CisgICAgICAgICAgcmVtb3ZlX2ZvbnQgKGZvbnQp OworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgIGdseXBoLT5mb250 ID0gZm9udDsKKyAgICAgIGdseXBoLT53aWR0aCA9IHdpZHRoOworICAgICAgZ2x5cGgtPmhl aWdodCA9IGhlaWdodDsKKyAgICAgIGdseXBoLT5vZmZzZXRfeCA9IHhvZmY7CisgICAgICBn bHlwaC0+b2Zmc2V0X3kgPSB5b2ZmOworICAgICAgZ2x5cGgtPmRldmljZV93aWR0aCA9IGR3 aWR0aDsKKworICAgICAgLyogRG9uJ3QgdHJ5IHRvIHJlYWQgZW1wdHkgYml0bWFwcyAoZS5n Liwgc3BhY2UgY2hhcmFjdGVycykuICAqLworICAgICAgaWYgKGxlbiAhPSAwKQorICAgICAg ICB7CisgICAgICAgICAgaWYgKGdydWJfZmlsZV9yZWFkIChmb250LT5maWxlLCAoY2hhciAq KSBnbHlwaC0+Yml0bWFwLCBsZW4pICE9IGxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgcmVtb3ZlX2ZvbnQgKGZvbnQpOworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBSZXN0b3JlIG9sZCBlcnJvciBt ZXNzYWdlLiAgKi8KKyAgICAgIGdydWJfZXJyb3JfcG9wICgpOworCisgICAgICAvKiBDYWNo ZSB0aGUgZ2x5cGguICAqLworICAgICAgaW5kZXhfZW50cnktPmdseXBoID0gZ2x5cGg7CisK KyAgICAgIHJldHVybiBnbHlwaDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZy ZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IEZPTlQuCisgICBUaGlzIHNob3VsZCBub3QgYmUgY2Fs bGVkIGlmIHRoZSBmb250IGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvCisgICB1c2VycyAo b25jZSBpdCBpcyBhZGRlZCB0byB0aGUgZ2xvYmFsIGZvbnQgbGlzdCksIHNpbmNlIHRoZXJl IHdvdWxkCisgICBiZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBkYW5nbGluZyBwb2ludGVyLiAg Ki8KK3N0YXRpYyB2b2lkCitmcmVlX2ZvbnQgKGdydWJfZm9udF90IGZvbnQpCit7CisgIGlm IChmb250KQorICAgIHsKKyAgICAgIGlmIChmb250LT5maWxlKQorICAgICAgICBncnViX2Zp bGVfY2xvc2UgKGZvbnQtPmZpbGUpOworICAgICAgZ3J1Yl9mcmVlIChmb250LT5uYW1lKTsK KyAgICAgIGdydWJfZnJlZSAoZm9udC0+ZmFtaWx5KTsKKyAgICAgIGdydWJfZnJlZSAoZm9u dC0+Y2hhcl9pbmRleCk7CisgICAgICBncnViX2ZyZWUgKGZvbnQpOworICAgIH0KK30KKwor LyogQWRkIEZPTlQgdG8gdGhlIGdsb2JhbCBmb250IHJlZ2lzdHJ5LgorICAgUmV0dXJucyAw IHVwb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlCisgICAodGhlIGZvbnQgd2FzIG5v dCByZWdpc3RlcmVkKS4gICovCitzdGF0aWMgaW50CityZWdpc3Rlcl9mb250IChncnViX2Zv bnRfdCBmb250KQoreworICBzdHJ1Y3QgZ3J1Yl9mb250X25vZGUgKm5vZGUgPSAwOworCisg IG5vZGUgPSBncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9mb250X25vZGUpKTsK KyAgaWYgKCEgbm9kZSkKKyAgICByZXR1cm4gMTsKKworICBub2RlLT52YWx1ZSA9IGZvbnQ7 CisgIG5vZGUtPm5leHQgPSBncnViX2ZvbnRfbGlzdDsKKyAgZ3J1Yl9mb250X2xpc3QgPSBu b2RlOworCisgIHJldHVybiAwOworfQorCisvKiBSZW1vdmUgdGhlIGZvbnQgZnJvbSB0aGUg Z2xvYmFsIGZvbnQgbGlzdC4gIFdlIGRvbid0IGFjdHVhbGx5IGZyZWUgdGhlCisgICBmb250 J3MgbWVtb3J5IHNpbmNlIHVzZXJzIGNvdWxkIGJlIGhvbGRpbmcgcmVmZXJlbmNlcyB0byB0 aGUgZm9udC4gICovCitzdGF0aWMgdm9pZAorcmVtb3ZlX2ZvbnQgKGdydWJfZm9udF90IGZv bnQpCit7CisgIHN0cnVjdCBncnViX2ZvbnRfbm9kZSAqKm5leHRwLCAqY3VyOworCisgIGZv ciAobmV4dHAgPSAmZ3J1Yl9mb250X2xpc3QsIGN1ciA9ICpuZXh0cDsKKyAgICAgICBjdXI7 CisgICAgICAgbmV4dHAgPSAmY3VyLT5uZXh0LCBjdXIgPSBjdXItPm5leHQpCisgICAgewor ICAgICAgaWYgKGN1ci0+dmFsdWUgPT0gZm9udCkKKyAgICAgICAgeworICAgICAgICAgICpu ZXh0cCA9IGN1ci0+bmV4dDsKKworICAgICAgICAgIC8qIEZyZWUgdGhlIG5vZGUsIGJ1dCBu b3QgdGhlIGZvbnQgaXRzZWxmLiAgKi8KKyAgICAgICAgICBncnViX2ZyZWUgKGN1cik7CisK KyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIEdldCBhIGZv bnQgZnJvbSB0aGUgbGlzdCBvZiBsb2FkZWQgZm9udHMuICBUaGlzIGZ1bmN0aW9uIHdpbGwg cmV0dXJuCisgICBhbm90aGVyIGZvbnQgaWYgdGhlIHJlcXVlc3RlZCBmb250IGlzIG5vdCBh dmFpbGFibGUuICBJZiBubyBmb250cyBhcmUKKyAgIGxvYWRlZCwgdGhlbiBhIHNwZWNpYWwg J251bGwgZm9udCcgaXMgcmV0dXJuZWQsIHdoaWNoIGNvbnRhaW5zIG5vIGdseXBocywKKyAg IGJ1dCBpcyBub3QgYSBudWxsIHBvaW50ZXIgc28gdGhlIGNhbGxlciBtYXkgb21pdCBjaGVj a3MgZm9yIE5VTEwuICAqLworZ3J1Yl9mb250X3QKK2dydWJfZm9udF9nZXQgKGNvbnN0IGNo YXIgKmZvbnRfbmFtZSkKK3sKKyAgc3RydWN0IGdydWJfZm9udF9ub2RlICpub2RlOworCisg IGZvciAobm9kZSA9IGdydWJfZm9udF9saXN0OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkK KyAgICB7CisgICAgICBncnViX2ZvbnRfdCBmb250ID0gbm9kZS0+dmFsdWU7CisgICAgICBp ZiAoZ3J1Yl9zdHJjbXAgKGZvbnQtPm5hbWUsIGZvbnRfbmFtZSkgPT0gMCkKKyAgICAgICAg cmV0dXJuIGZvbnQ7CisgICAgfQorCisgIC8qIElmIG5vIGZvbnQgYnkgdGhhdCBuYW1lIGlz IGZvdW5kLCByZXR1cm4gdGhlIGZpcnN0IGZvbnQgaW4gdGhlIGxpc3QKKyAgICAgYXMgYSBm YWxsYmFjay4gICovCisgIGlmIChncnViX2ZvbnRfbGlzdCAmJiBncnViX2ZvbnRfbGlzdC0+ dmFsdWUpCisgICAgcmV0dXJuIGdydWJfZm9udF9saXN0LT52YWx1ZTsKKyAgZWxzZQorICAg IC8qIFRoZSBudWxsX2ZvbnQgaXMgYSBsYXN0IHJlc29ydC4gICovCisgICAgcmV0dXJuICZu dWxsX2ZvbnQ7Cit9CisKKy8qIEdldCB0aGUgZnVsbCBuYW1lIG9mIHRoZSBmb250LiAgRm9y IGluc3RhbmNlLCAiSGVsdmV0aWNhIEJvbGQgMTIiLiAgKi8KK2NvbnN0IGNoYXIgKgorZ3J1 Yl9mb250X2dldF9uYW1lIChncnViX2ZvbnRfdCBmb250KQoreworICByZXR1cm4gZm9udC0+ bmFtZTsKK30KKworLyogR2V0IHRoZSBtYXhpbXVtIHdpZHRoIG9mIGFueSBjaGFyYWN0ZXIg aW4gdGhlIGZvbnQgaW4gcGl4ZWxzLiAgKi8KK2ludAorZ3J1Yl9mb250X2dldF9tYXhfY2hh cl93aWR0aCAoZ3J1Yl9mb250X3QgZm9udCkKK3sKKyAgcmV0dXJuIGZvbnQtPm1heF9jaGFy X3dpZHRoOworfQorCisvKiBHZXQgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFueSBjaGFyYWN0 ZXIgaW4gdGhlIGZvbnQgaW4gcGl4ZWxzLiAgKi8KK2ludAorZ3J1Yl9mb250X2dldF9tYXhf Y2hhcl9oZWlnaHQgKGdydWJfZm9udF90IGZvbnQpCit7CisgIHJldHVybiBmb250LT5tYXhf Y2hhcl9oZWlnaHQ7Cit9CisKKy8qIEdldCB0aGUgZGlzdGFuY2UgaW4gcGl4ZWxzIGZyb20g dGhlIHRvcCBvZiBjaGFyYWN0ZXJzIHRvIHRoZSBiYXNlbGluZS4gICovCitpbnQKK2dydWJf Zm9udF9nZXRfYXNjZW50IChncnViX2ZvbnRfdCBmb250KQoreworICByZXR1cm4gZm9udC0+ YXNjZW50OworfQorCisvKiBHZXQgdGhlIGRpc3RhbmNlIGluIHBpeGVscyBmcm9tIHRoZSBi YXNlbGluZSB0byB0aGUgbG93ZXN0IGRlc2NlbmRlcnMKKyAgIChmb3IgaW5zdGFuY2UsIGlu IGEgbG93ZXJjYXNlICd5JywgJ2cnLCBldGMuKS4gICovCitpbnQKK2dydWJfZm9udF9nZXRf ZGVzY2VudCAoZ3J1Yl9mb250X3QgZm9udCkKK3sKKyAgcmV0dXJuIGZvbnQtPmRlc2NlbnQ7 Cit9CisKKy8qIEdldCB0aGUgKnN0YW5kYXJkIGxlYWRpbmcqIG9mIHRoZSBmb250IGluIHBp eGVsLCB3aGljaCBpcyB0aGUgc3BhY2luZworICAgYmV0d2VlbiB0d28gbGluZXMgb2YgdGV4 dC4gIFNwZWNpZmljYWxseSwgaXQgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlCisgICBkZXNj ZW50IG9mIG9uZSBsaW5lIGFuZCB0aGUgYXNjZW50IG9mIHRoZSBuZXh0IGxpbmUuICBUaGlz IGlzIGluY2x1ZGVkCisgICBpbiB0aGUgKmhlaWdodCogbWV0cmljLiAgKi8KK2ludAorZ3J1 Yl9mb250X2dldF9sZWFkaW5nIChncnViX2ZvbnRfdCBmb250KQoreworICByZXR1cm4gZm9u dC0+bGVhZGluZzsKK30KKworLyogR2V0IHRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgYmV0d2Vl biBiYXNlbGluZXMgb2YgYWRqYWNlbnQgbGluZXMgb2YgdGV4dC4gICovCitpbnQKK2dydWJf Zm9udF9nZXRfaGVpZ2h0IChncnViX2ZvbnRfdCBmb250KQoreworICByZXR1cm4gZm9udC0+ YXNjZW50ICsgZm9udC0+ZGVzY2VudCArIGZvbnQtPmxlYWRpbmc7Cit9CisKKy8qIEdldCB0 aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBzcGVjaWZpZWQgVVRGLTggc3RyaW5nLCB3aGVu IHJlbmRlcmVkIGluCisgICBpbiB0aGUgc3BlY2lmaWVkIGZvbnQgKGJ1dCBmYWxsaW5nIGJh Y2sgb24gb3RoZXIgZm9udHMgZm9yIGdseXBocyB0aGF0CisgICBhcmUgbWlzc2luZykuICAq LworaW50CitncnViX2ZvbnRfZ2V0X3N0cmluZ193aWR0aCAoZ3J1Yl9mb250X3QgZm9udCwg Y29uc3QgY2hhciAqc3RyKQoreworICBpbnQgd2lkdGg7CisgIHN0cnVjdCBncnViX2ZvbnRf Z2x5cGggKmdseXBoOworICBncnViX3VpbnQzMl90IGNvZGU7CisgIGNvbnN0IGdydWJfdWlu dDhfdCAqcHRyOworCisgIGZvciAocHRyID0gKGNvbnN0IGdydWJfdWludDhfdCAqKSBzdHIs IHdpZHRoID0gMDsKKyAgICAgICBncnViX3V0ZjhfdG9fdWNzNCAoJmNvZGUsIDEsIHB0ciwg LTEsICZwdHIpID4gMDsgKQorICAgIHsKKyAgICAgIGdseXBoID0gZ3J1Yl9mb250X2dldF9n bHlwaF93aXRoX2ZhbGxiYWNrIChmb250LCBjb2RlKTsKKyAgICAgIHdpZHRoICs9IGdseXBo LT5kZXZpY2Vfd2lkdGg7CisgICAgfQorCisgIHJldHVybiB3aWR0aDsKK30KKworLyogR2V0 IHRoZSBnbHlwaCBmb3IgRk9OVCBjb3JyZXNwb25kaW5nIHRvIHRoZSBVbmljb2RlIGNvZGUg cG9pbnQgQ09ERS4KKyAgIFJldHVybnMgYSBwb2ludGVyIHRvIGFuIGdseXBoIGluZGljYXRp bmcgdGhlcmUgaXMgbm8gZ2x5cGggYXZhaWxhYmxlCisgICBpZiBDT0RFIGRvZXMgbm90IGV4 aXN0IGluIHRoZSBmb250LiAgVGhlIGdseXBocyBhcmUgY2FjaGVkIG9uY2UgbG9hZGVkLiAg Ki8KK3N0cnVjdCBncnViX2ZvbnRfZ2x5cGggKgorZ3J1Yl9mb250X2dldF9nbHlwaCAoZ3J1 Yl9mb250X3QgZm9udCwgZ3J1Yl91aW50MzJfdCBjb2RlKQoreworICBzdHJ1Y3QgZ3J1Yl9m b250X2dseXBoICpnbHlwaDsKKyAgZ2x5cGggPSBncnViX2ZvbnRfZ2V0X2dseXBoX2ludGVy bmFsIChmb250LCBjb2RlKTsKKyAgaWYgKGdseXBoID09IDApCisgICAgZ2x5cGggPSB1bmtu b3duX2dseXBoOworICByZXR1cm4gZ2x5cGg7Cit9CisKKworLyogQ2FsY3VsYXRlIGEgc3Vi amVjdCB2YWx1ZSByZXByZXNlbnRpbmcgImhvdyBzaW1pbGFyIiB0d28gZm9udHMgYXJlLgor ICAgVGhpcyBpcyB1c2VkIHRvIHByaW9yaXRpemUgdGhlIG9yZGVyIHRoYXQgZm9udHMgYXJl IHNjYW5uZWQgZm9yIG1pc3NpbmcKKyAgIGdseXBocy4gIFRoZSBvYmplY3QgaXMgdG8gc2Vs ZWN0IGdseXBocyBmcm9tIHRoZSBtb3N0IHNpbWlsYXIgZm9udAorICAgcG9zc2libGUsIGZv ciB0aGUgYmVzdCBhcHBlYXJhbmNlLgorICAgVGhlIGhldXJpc3RpYyBpcyBjcnVkZSwgYnV0 IGl0IGhlbHBzIGdyZWF0bHkgd2hlbiBmb250cyBvZiBzaW1pbGFyCisgICBzaXplcyBhcmUg dXNlZCBzbyB0aGF0IHRpbnkgOCBwb2ludCBnbHlwaHMgYXJlIG5vdCBtaXhlZCBpbnRvIGEg c3RyaW5nCisgICBvZiAyNCBwb2ludCB0ZXh0IHVubGVzcyB0aGVyZSBpcyBubyBvdGhlciBj aG9pY2UuICAqLworc3RhdGljIGludAorZ2V0X2ZvbnRfZGl2ZXJzaXR5KGdydWJfZm9udF90 IGEsIGdydWJfZm9udF90IGIpCit7CisgIGludCBkOworCisgIGQgPSAwOworCisgIGlmIChh LT5hc2NlbnQgJiYgYi0+YXNjZW50KQorICAgIGQgKz0gZ3J1Yl9hYnMgKGEtPmFzY2VudCAt IGItPmFzY2VudCkgKiA4OworICBlbHNlCisgICAgLyogUGVuYWx0eSBmb3IgbWlzc2luZyBh dHRyaWJ1dGVzLiAgKi8KKyAgICBkICs9IDUwOworCisgIGlmIChhLT5tYXhfY2hhcl9oZWln aHQgJiYgYi0+bWF4X2NoYXJfaGVpZ2h0KQorICAgIGQgKz0gZ3J1Yl9hYnMgKGEtPm1heF9j aGFyX2hlaWdodCAtIGItPm1heF9jaGFyX2hlaWdodCkgKiA4OworICBlbHNlCisgICAgLyog UGVuYWx0eSBmb3IgbWlzc2luZyBhdHRyaWJ1dGVzLiAgKi8KKyAgICBkICs9IDUwOworICAK KyAgLyogV2VpZ2h0IGlzIGEgbWlub3IgZmFjdG9yLiAqLworICBkICs9IChhLT53ZWlnaHQg IT0gYi0+d2VpZ2h0KSA/IDUgOiAwOworCisgIHJldHVybiBkOworfQorCisvKiBHZXQgYSBn bHlwaCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2RlcG9pbnQgQ09ERS4gIElmIEZPTlQgY29u dGFpbnMgdGhlCisgICBzcGVjaWZpZWQgZ2x5cGgsIHRoZW4gaXQgaXMgcmV0dXJuZWQuICBP dGhlcndpc2UsIGFsbCBvdGhlciBsb2FkZWQgZm9udHMKKyAgIGFyZSBzZWFyY2hlZCB1bnRp bCBvbmUgaXMgZm91bmQgdGhhdCBjb250YWlucyBhIGdseXBoIGZvciBDT0RFLgorICAgSWYg bm8gZ2x5cGggaXMgYXZhaWxhYmxlIGZvciBDT0RFIGluIHRoZSBsb2FkZWQgZm9udHMsIHRo ZW4gYSBnbHlwaAorICAgcmVwcmVzZW50aW5nIGFuIHVua25vd24gY2hhcmFjdGVyIGlzIHJl dHVybmVkLgorICAgVGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zIE5VTEwuCisgICBUaGUg cmV0dXJuZWQgZ2x5cGggaXMgb3duZWQgYnkgdGhlIGZvbnQgbWFuYWdlciBhbmQgc2hvdWxk IG5vdCBiZSBmcmVlZAorICAgYnkgdGhlIGNhbGxlci4gIFRoZSBnbHlwaHMgYXJlIGNhY2hl ZC4gICovCitzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICoKK2dydWJfZm9udF9nZXRfZ2x5cGhf d2l0aF9mYWxsYmFjayAoZ3J1Yl9mb250X3QgZm9udCwgZ3J1Yl91aW50MzJfdCBjb2RlKQor eworICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpnbHlwaDsKKyAgc3RydWN0IGdydWJfZm9u dF9ub2RlICpub2RlOworICAvKiBLZWVwIHRyYWNrIG9mIG5leHQgbm9kZSwgaW4gY2FzZSB0 aGVyZSdzIGFuIEkvTyBlcnJvciBpbgorICAgICBncnViX2ZvbnRfZ2V0X2dseXBoX2ludGVy bmFsKCkgYW5kIHRoZSBmb250IGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gICovCisgIHN0 cnVjdCBncnViX2ZvbnRfbm9kZSAqbmV4dDsKKyAgLyogSW5mb3JtYXRpb24gb24gdGhlIGJl c3QgZ2x5cGggZm91bmQgc28gZmFyLCB0byBoZWxwIGZpbmQgdGhlIGdseXBoIGluCisgICAg IHRoZSBiZXN0IG1hdGNoaW5nIHRvIHRoZSByZXF1ZXN0ZWQgb25lLiAgKi8KKyAgaW50IGJl c3RfZGl2ZXJzaXR5OworICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpiZXN0X2dseXBoOwor CisgIGlmIChmb250KQorICAgIHsKKyAgICAgIC8qIEZpcnN0IHRyeSB0byBnZXQgdGhlIGds eXBoIGZyb20gdGhlIHNwZWNpZmllZCBmb250LiAgKi8KKyAgICAgIGdseXBoID0gZ3J1Yl9m b250X2dldF9nbHlwaF9pbnRlcm5hbCAoZm9udCwgY29kZSk7CisgICAgICBpZiAoZ2x5cGgp CisgICAgICAgIHJldHVybiBnbHlwaDsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlLCBzZWFy Y2ggYWxsIGxvYWRlZCBmb250cyBmb3IgdGhlIGdseXBoIGFuZCB1c2UgdGhlIG9uZSBmcm9t CisgICAgIHRoZSBmb250IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgZm9udC4g ICovCisgIGJlc3RfZGl2ZXJzaXR5ID0gMTAwMDA7CisgIGJlc3RfZ2x5cGggPSAwOworCisg IGZvciAobm9kZSA9IGdydWJfZm9udF9saXN0OyBub2RlOyBub2RlID0gbmV4dCkKKyAgICB7 CisgICAgICBncnViX2ZvbnRfdCBjdXJmb250OworCisgICAgICBjdXJmb250ID0gbm9kZS0+ dmFsdWU7CisgICAgICBuZXh0ID0gbm9kZS0+bmV4dDsKKworICAgICAgZ2x5cGggPSBncnVi X2ZvbnRfZ2V0X2dseXBoX2ludGVybmFsIChjdXJmb250LCBjb2RlKTsKKyAgICAgIGlmIChn bHlwaCkKKyAgICAgICAgeworICAgICAgICAgIGludCBkOworCisgICAgICAgICAgZCA9IGdl dF9mb250X2RpdmVyc2l0eSAoY3VyZm9udCwgZm9udCk7CisgICAgICAgICAgaWYgKGQgPCBi ZXN0X2RpdmVyc2l0eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYmVzdF9kaXZl cnNpdHkgPSBkOworICAgICAgICAgICAgICBiZXN0X2dseXBoID0gZ2x5cGg7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGJlc3RfZ2x5cGgpCisgICAgcmV0 dXJuIGJlc3RfZ2x5cGg7CisgIGVsc2UKKyAgICAvKiBHbHlwaCBub3QgYXZhaWxhYmxlIGlu IGFueSBmb250LiAgUmV0dXJuIHVua25vd24gZ2x5cGguICAqLworICAgIHJldHVybiB1bmtu b3duX2dseXBoOworfQorCisKKy8qIERyYXcgdGhlIHNwZWNpZmllZCBnbHlwaCBhdCAoeCwg eSkuICBUaGUgeSBjb29yZGluYXRlIGRlc2lnbmF0ZXMgdGhlCisgICBiYXNlbGluZSBvZiB0 aGUgY2hhcmFjdGVyLCB3aGlsZSB0aGUgeCBjb29yZGluYXRlIGRlc2lnbmF0ZXMgdGhlIGxl ZnQKKyAgIHNpZGUgbG9jYXRpb24gb2YgdGhlIGNoYXJhY3Rlci4gICovCitncnViX2Vycl90 CitncnViX2ZvbnRfZHJhd19nbHlwaCAoc3RydWN0IGdydWJfZm9udF9nbHlwaCAqZ2x5cGgs CisgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl92aWRlb19jb2xvcl90IGNvbG9yLAorICAg ICAgICAgICAgICAgICAgICAgIGludCBsZWZ0X3gsIGludCBiYXNlbGluZV95KQoreworICBz dHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgZ2x5cGhfYml0bWFwOworCisgIC8qIERvbid0IHRy eSB0byBkcmF3IGVtcHR5IGdseXBocyAoVSswMDIwLCBldGMuKS4gICovCisgIGlmIChnbHlw aC0+d2lkdGggPT0gMCB8fCBnbHlwaC0+aGVpZ2h0ID09IDApCisgICAgcmV0dXJuIEdSVUJf RVJSX05PTkU7CisKKyAgZ2x5cGhfYml0bWFwLm1vZGVfaW5mby53aWR0aCA9IGdseXBoLT53 aWR0aDsKKyAgZ2x5cGhfYml0bWFwLm1vZGVfaW5mby5oZWlnaHQgPSBnbHlwaC0+aGVpZ2h0 OworICBnbHlwaF9iaXRtYXAubW9kZV9pbmZvLm1vZGVfdHlwZSA9CisgICAgKDEgPDwgR1JV Ql9WSURFT19NT0RFX1RZUEVfREVQVEhfUE9TKQorICAgIHwgR1JVQl9WSURFT19NT0RFX1RZ UEVfMUJJVF9CSVRNQVA7CisgIGdseXBoX2JpdG1hcC5tb2RlX2luZm8uYmxpdF9mb3JtYXQg PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUXzFCSVRfUEFDS0VEOworICBnbHlwaF9iaXRtYXAu bW9kZV9pbmZvLmJwcCA9IDE7CisgIAorICAvKiBSZWFsbHkgMSBiaXQgcGVyIHBpeGVsLiAg Ki8KKyAgZ2x5cGhfYml0bWFwLm1vZGVfaW5mby5ieXRlc19wZXJfcGl4ZWwgPSAwOworICAK KyAgLyogUGFja2VkIGRlbnNlbHkgYXMgYml0cy4gICovCisgIGdseXBoX2JpdG1hcC5tb2Rl X2luZm8ucGl0Y2ggPSBnbHlwaC0+d2lkdGg7CisgIAorICBnbHlwaF9iaXRtYXAubW9kZV9p bmZvLm51bWJlcl9vZl9jb2xvcnMgPSAyOworICBnbHlwaF9iaXRtYXAubW9kZV9pbmZvLmJn X3JlZCA9IDA7CisgIGdseXBoX2JpdG1hcC5tb2RlX2luZm8uYmdfZ3JlZW4gPSAwOworICBn bHlwaF9iaXRtYXAubW9kZV9pbmZvLmJnX2JsdWUgPSAwOworICBnbHlwaF9iaXRtYXAubW9k ZV9pbmZvLmJnX2FscGhhID0gMDsKKyAgZ3J1Yl92aWRlb191bm1hcF9jb2xvcihjb2xvciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfYml0bWFwLm1vZGVfaW5mby5mZ19y ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2JpdG1hcC5tb2RlX2luZm8u ZmdfZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2JpdG1hcC5tb2Rl X2luZm8uZmdfYmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfYml0bWFw Lm1vZGVfaW5mby5mZ19hbHBoYSk7CisgIGdseXBoX2JpdG1hcC5kYXRhID0gZ2x5cGgtPmJp dG1hcDsKKworICBpbnQgYml0bWFwX2xlZnQgPSBsZWZ0X3ggKyBnbHlwaC0+b2Zmc2V0X3g7 CisgIGludCBiaXRtYXBfYm90dG9tID0gYmFzZWxpbmVfeSAtIGdseXBoLT5vZmZzZXRfeTsK KyAgaW50IGJpdG1hcF90b3AgPSBiaXRtYXBfYm90dG9tIC0gZ2x5cGgtPmhlaWdodDsKKwor ICByZXR1cm4gZ3J1Yl92aWRlb19ibGl0X2JpdG1hcCAoJmdseXBoX2JpdG1hcCwgR1JVQl9W SURFT19CTElUX0JMRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0 bWFwX2xlZnQsIGJpdG1hcF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPndpZHRo LCBnbHlwaC0+aGVpZ2h0KTsKK30KKworLyogRHJhdyBhIFVURi04IHN0cmluZyBvZiB0ZXh0 IG9uIHRoZSBjdXJyZW50IHZpZGVvIHJlbmRlciB0YXJnZXQuCisgICBUaGUgeCBjb29yZGlu YXRlIHNwZWNpZmllcyB0aGUgc3RhcnRpbmcgeCBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IGNo YXJhY3RlciwKKyAgIHdoaWxlIHRoZSB5IGNvb3JkaW5hdGUgc3BlY2lmaWVzIHRoZSBiYXNl bGluZSBwb3NpdGlvbi4KKyAgIElmIHRoZSBzdHJpbmcgY29udGFpbnMgYSBjaGFyYWN0ZXIg dGhhdCBGT05UIGRvZXMgbm90IGNvbnRhaW4sIHRoZW4KKyAgIGEgZ2x5cGggZnJvbSBhbm90 aGVyIGxvYWRlZCBmb250IG1heSBiZSB1c2VkIGluc3RlYWQuICAqLworZ3J1Yl9lcnJfdAor Z3J1Yl9mb250X2RyYXdfc3RyaW5nIChjb25zdCBjaGFyICpzdHIsIGdydWJfZm9udF90IGZv bnQsCisgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvciwK KyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlZnRfeCwgaW50IGJhc2VsaW5lX3kpCit7 CisgIGludCB4OworICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICpnbHlwaDsKKyAgZ3J1Yl91 aW50MzJfdCBjb2RlOworICBjb25zdCBncnViX3VpbnQ4X3QgKnB0cjsKKworICBmb3IgKHB0 ciA9IChjb25zdCBncnViX3VpbnQ4X3QgKikgc3RyLCB4ID0gbGVmdF94OworICAgICAgIGdy dWJfdXRmOF90b191Y3M0ICgmY29kZSwgMSwgcHRyLCAtMSwgJnB0cikgPiAwOyApCisgICAg eworICAgICAgZ2x5cGggPSBncnViX2ZvbnRfZ2V0X2dseXBoX3dpdGhfZmFsbGJhY2sgKGZv bnQsIGNvZGUpOworICAgICAgaWYgKGdydWJfZm9udF9kcmF3X2dseXBoIChnbHlwaCwgY29s b3IsIHgsIGJhc2VsaW5lX3kpCisgICAgICAgICAgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAg ICAgcmV0dXJuIGdydWJfZXJybm87CisgICAgICB4ICs9IGdseXBoLT5kZXZpY2Vfd2lkdGg7 CisgICAgfQorCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCkluZGV4OiBmb250L21h bmFnZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmb250L21hbmFnZXIuYwkocmV2aXNpb24gMTkz NCkKKysrIGZvbnQvbWFuYWdlci5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4MyArMCwwIEBA Ci0vKgotICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKLSAqICBDb3B5 cmlnaHQgKEMpIDIwMDMsMjAwNSwyMDA2LDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgotICoKLSAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g KiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg YWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgotICovCi0KLSNpbmNsdWRlIDxncnViL2ZpbGUuaD4KLSNpbmNsdWRlIDxncnVi L21pc2MuaD4KLSNpbmNsdWRlIDxncnViL2RsLmg+Ci0jaW5jbHVkZSA8Z3J1Yi9ub3JtYWwu aD4KLSNpbmNsdWRlIDxncnViL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Z3J1Yi9tbS5oPgotI2lu Y2x1ZGUgPGdydWIvZm9udC5oPgotI2luY2x1ZGUgPGdydWIvYnVmaW8uaD4KLQotc3RydWN0 IGVudHJ5Ci17Ci0gIGdydWJfdWludDMyX3QgY29kZTsKLSAgZ3J1Yl91aW50MzJfdCBvZmZz ZXQ7Ci19OwotCi1zdHJ1Y3QgZm9udAotewotICBzdHJ1Y3QgZm9udCAqbmV4dDsKLSAgZ3J1 Yl9maWxlX3QgZmlsZTsKLSAgZ3J1Yl91aW50MzJfdCBudW07Ci0gIHN0cnVjdCBlbnRyeSB0 YWJsZVswXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZm9udCAqZm9udF9saXN0OwotCi0vKiBG aWxsIHVua25vd24gZ2x5cGgncyB3aXRoIHJvdW5kZWQgcXVlc3Rpb24gbWFyay4gICovCi1z dGF0aWMgZ3J1Yl91aW50OF90IHVua25vd25fZ2x5cGhbMTZdID0KLXsgICAgICAgLyogNzY1 NDMyMTAgKi8KLSAgMHg3QywgLyogIG9vb29vICAgKi8KLSAgMHg4MiwgLyogbyAgICAgbyAg Ki8KLSAgMHhCQSwgLyogbyBvb28gbyAgKi8KLSAgMHhBQSwgLyogbyBvIG8gbyAgKi8KLSAg MHhBQSwgLyogbyBvIG8gbyAgKi8KLSAgMHg4QSwgLyogbyAgIG8gbyAgKi8KLSAgMHg5QSwg LyogbyAgb28gbyAgKi8KLSAgMHg5MiwgLyogbyAgbyAgbyAgKi8KLSAgMHg5MiwgLyogbyAg byAgbyAgKi8KLSAgMHg5MiwgLyogbyAgbyAgbyAgKi8KLSAgMHg5MiwgLyogbyAgbyAgbyAg Ki8KLSAgMHg4MiwgLyogbyAgICAgbyAgKi8KLSAgMHg5MiwgLyogbyAgbyAgbyAgKi8KLSAg MHg4MiwgLyogbyAgICAgbyAgKi8KLSAgMHg3QywgLyogIG9vb29vICAgKi8KLSAgMHgwMCAg LyogICAgICAgICAgKi8KLX07Ci0KLXN0YXRpYyBpbnQKLWFkZF9mb250IChjb25zdCBjaGFy ICpmaWxlbmFtZSkKLXsKLSAgZ3J1Yl9maWxlX3QgZmlsZSA9IDA7Ci0gIGNoYXIgbWFnaWNb NF07Ci0gIGdydWJfdWludDMyX3QgbnVtLCBpOwotICBzdHJ1Y3QgZm9udCAqZm9udCA9IDA7 Ci0KLSAgZmlsZSA9IGdydWJfYnVmZmlsZV9vcGVuIChmaWxlbmFtZSwgMCk7Ci0gIGlmICgh IGZpbGUpCi0gICAgZ290byBmYWlsOwotCi0gIGlmIChncnViX2ZpbGVfcmVhZCAoZmlsZSwg bWFnaWMsIDQpICE9IDQpCi0gICAgZ290byBmYWlsOwotCi0gIGlmIChncnViX21lbWNtcCAo bWFnaWMsIEdSVUJfRk9OVF9NQUdJQywgNCkgIT0gMCkKLSAgICB7Ci0gICAgICBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRk9OVCwgImludmFsaWQgZm9udCBtYWdpYyIpOwotICAgICAg Z290byBmYWlsOwotICAgIH0KLQotICBpZiAoZ3J1Yl9maWxlX3JlYWQgKGZpbGUsIChjaGFy ICopICZudW0sIDQpICE9IDQpCi0gICAgZ290byBmYWlsOwotCi0gIG51bSA9IGdydWJfbGVf dG9fY3B1MzIgKG51bSk7Ci0gIGZvbnQgPSAoc3RydWN0IGZvbnQgKikgZ3J1Yl9tYWxsb2Mg KHNpemVvZiAoc3RydWN0IGZvbnQpCi0JCQkJICAgICAgKyBzaXplb2YgKHN0cnVjdCBlbnRy eSkgKiBudW0pOwotICBpZiAoISBmb250KQotICAgIGdvdG8gZmFpbDsKLQotICBmb250LT5m aWxlID0gZmlsZTsKLSAgZm9udC0+bnVtID0gbnVtOwotCi0gIGZvciAoaSA9IDA7IGkgPCBu dW07IGkrKykKLSAgICB7Ci0gICAgICBncnViX3VpbnQzMl90IGNvZGUsIG9mZnNldDsKLSAg ICAgIAotICAgICAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSAmY29kZSwg NCkgIT0gNCkKLQlnb3RvIGZhaWw7Ci0KLSAgICAgIGlmIChncnViX2ZpbGVfcmVhZCAoZmls ZSwgKGNoYXIgKikgJm9mZnNldCwgNCkgIT0gNCkKLQlnb3RvIGZhaWw7Ci0KLSAgICAgIGZv bnQtPnRhYmxlW2ldLmNvZGUgPSBncnViX2xlX3RvX2NwdTMyIChjb2RlKTsKLSAgICAgIGZv bnQtPnRhYmxlW2ldLm9mZnNldCA9IGdydWJfbGVfdG9fY3B1MzIgKG9mZnNldCk7Ci0gICAg fQotCi0gIGZvbnQtPm5leHQgPSBmb250X2xpc3Q7Ci0gIGZvbnRfbGlzdCA9IGZvbnQ7Ci0K LSAgcmV0dXJuIDE7Ci0KLSBmYWlsOgotICBpZiAoZm9udCkKLSAgICBncnViX2ZyZWUgKGZv bnQpOwotCi0gIGlmIChmaWxlKQotICAgIGdydWJfZmlsZV9jbG9zZSAoZmlsZSk7Ci0KLSAg cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW1vdmVfZm9udCAoc3RydWN0IGZvbnQg KmZvbnQpCi17Ci0gIHN0cnVjdCBmb250ICoqcCwgKnE7Ci0KLSAgZm9yIChwID0gJmZvbnRf bGlzdCwgcSA9ICpwOyBxOyBwID0gJihxLT5uZXh0KSwgcSA9IHEtPm5leHQpCi0gICAgaWYg KHEgPT0gZm9udCkKLSAgICAgIHsKLSAgICAgICAgKnAgPSBxLT5uZXh0OwotCQotCWdydWJf ZmlsZV9jbG9zZSAoZm9udC0+ZmlsZSk7Ci0JZ3J1Yl9mcmVlIChmb250KTsKLQkKLSAgICAg ICAgYnJlYWs7Ci0gICAgICB9Ci19Ci0KLS8qIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBn bHlwaCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2RlcG9pbnQgQ09ERQotICAgaW4gdGhlIGZv bnQgRk9OVC4gIElmIG5vIGZvdW5kLCByZXR1cm4gemVyby4gICovCi1zdGF0aWMgZ3J1Yl91 aW50MzJfdAotZmluZF9nbHlwaCAoY29uc3Qgc3RydWN0IGZvbnQgKmZvbnQsIGdydWJfdWlu dDMyX3QgY29kZSkKLXsKLSAgZ3J1Yl91aW50MzJfdCBzdGFydCA9IDA7Ci0gIGdydWJfdWlu dDMyX3QgZW5kID0gZm9udC0+bnVtIC0gMTsKLSAgY29uc3Qgc3RydWN0IGVudHJ5ICp0YWJs ZSA9IGZvbnQtPnRhYmxlOwotICAKLSAgLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiAgKi8K LSAgaWYgKGZvbnQtPm51bSA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIC8qIERvIGEgYmlu YXJ5IHNlYXJjaC4gICovCi0gIHdoaWxlIChzdGFydCA8PSBlbmQpCi0gICAgewotICAgICAg Z3J1Yl91aW50MzJfdCBpID0gKHN0YXJ0ICsgZW5kKSAvIDI7Ci0KLSAgICAgIGlmICh0YWJs ZVtpXS5jb2RlIDwgY29kZSkKLQlzdGFydCA9IGkgKyAxOwotICAgICAgZWxzZSBpZiAodGFi bGVbaV0uY29kZSA+IGNvZGUpCi0JZW5kID0gaSAtIDE7Ci0gICAgICBlbHNlCi0JcmV0dXJu IHRhYmxlW2ldLm9mZnNldDsKLSAgICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIFNldCB0 aGUgZ2x5cGggdG8gc29tZXRoaW5nIHN0dXBpZC4gICovCi1zdGF0aWMgdm9pZAotZmlsbF93 aXRoX2RlZmF1bHRfZ2x5cGggKGdydWJfZm9udF9nbHlwaF90IGdseXBoKQotewotICB1bnNp Z25lZCBpOwotCi0gIC8qIFVzZSBwcmUtZGVmaW5lZCBwYXR0ZXJuIHRvIGZpbGwgdW5rbm93 biBnbHlwaHMuICAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSAgICBnbHlwaC0+ Yml0bWFwW2ldID0gdW5rbm93bl9nbHlwaFtpXTsKLQotICBnbHlwaC0+Y2hhcl93aWR0aCA9 IDE7Ci0gIGdseXBoLT53aWR0aCA9IGdseXBoLT5jaGFyX3dpZHRoICogODsKLSAgZ2x5cGgt PmhlaWdodCA9IDE2OwotICBnbHlwaC0+YmFzZWxpbmUgPSAoMTYgKiAzKSAvIDQ7Ci19Ci0K LS8qIEdldCBhIGdseXBoIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvZGVwb2ludCBDT0RFLiAg QWx3YXlzIGZpbGwgZ2x5cGgKLSAgIGluZm9ybWF0aW9uIHdpdGggc29tZXRoaW5nLCBldmVu IGlmIG5vIGdseXBoIGlzIGZvdW5kLiAgKi8KLWludAotZ3J1Yl9mb250X2dldF9nbHlwaCAo Z3J1Yl91aW50MzJfdCBjb2RlLAotCQkgICAgIGdydWJfZm9udF9nbHlwaF90IGdseXBoKQot ewotICBzdHJ1Y3QgZm9udCAqZm9udDsKLSAgZ3J1Yl91aW50OF90IGJpdG1hcFszMl07Ci0K LSAgLyogRklYTUU6IEl0IGlzIG5lY2Vzc2FyeSB0byBjYWNoZSBnbHlwaHMhICAqLwotICAK LSByZXN0YXJ0OgotICBmb3IgKGZvbnQgPSBmb250X2xpc3Q7IGZvbnQ7IGZvbnQgPSBmb250 LT5uZXh0KQotICAgIHsKLSAgICAgIGdydWJfdWludDMyX3Qgb2Zmc2V0OwotCi0gICAgICBv ZmZzZXQgPSBmaW5kX2dseXBoIChmb250LCBjb2RlKTsKLSAgICAgIGlmIChvZmZzZXQpCi0J ewotCSAgZ3J1Yl91aW50MzJfdCB3OwotCSAgaW50IGxlbjsKLQotICAgICAgICAgIC8qIE1h a2Ugc3VyZSB3ZSBjYW4gZmluZCBnbHlwaHMgZm9yIGVycm9yIG1lc3NhZ2VzLiAgUHVzaCBh Y3RpdmUKLSAgICAgICAgICAgICBlcnJvciBtZXNzYWdlIHRvIGVycm9yIHN0YWNrIGFuZCBy ZXNldCBlcnJvciBtZXNzYWdlLiAgKi8KLSAgICAgICAgICBncnViX2Vycm9yX3B1c2ggKCk7 Ci0JICAKLQkgIGdydWJfZmlsZV9zZWVrIChmb250LT5maWxlLCBvZmZzZXQpOwotCSAgaWYg KChsZW4gPSBncnViX2ZpbGVfcmVhZCAoZm9udC0+ZmlsZSwgKGNoYXIgKikgJncsIHNpemVv ZiAodykpKQotCSAgICAgICE9IHNpemVvZiAodykpCi0JICAgIHsKLSAgICAgICAgICAgICAg cmVtb3ZlX2ZvbnQgKGZvbnQpOwotICAgICAgICAgICAgICBnb3RvIHJlc3RhcnQ7Ci0JICAg IH0KLQotCSAgdyA9IGdydWJfbGVfdG9fY3B1MzIgKHcpOwotCSAgaWYgKHcgIT0gMSAmJiB3 ICE9IDIpCi0JICAgIHsKLQkgICAgICAvKiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRk9O VCwgImludmFsaWQgd2lkdGgiKTsgKi8KLQkgICAgICByZW1vdmVfZm9udCAoZm9udCk7Ci0J ICAgICAgZ290byByZXN0YXJ0OwotCSAgICB9Ci0KLQkgIGlmIChncnViX2ZpbGVfcmVhZCAo Zm9udC0+ZmlsZSwgKGNoYXIgKikgYml0bWFwLCB3ICogMTYpCi0JICAgICAgIT0gKGdydWJf c3NpemVfdCkgdyAqIDE2KQotCSAgICB7Ci0JICAgICAgcmVtb3ZlX2ZvbnQgKGZvbnQpOwot CSAgICAgIGdvdG8gcmVzdGFydDsKLQkgICAgfQotCi0gICAgICAgICAgLyogRmlsbCBnbHlw aCB3aXRoIGluZm9ybWF0aW9uLiAgKi8JICAgIAotICAgICAgICAgIGdydWJfbWVtY3B5IChn bHlwaC0+Yml0bWFwLCBiaXRtYXAsIHcgKiAxNik7Ci0gICAgICAgICAgCi0JICBnbHlwaC0+ Y2hhcl93aWR0aCA9IHc7Ci0JICBnbHlwaC0+d2lkdGggPSBnbHlwaC0+Y2hhcl93aWR0aCAq IDg7Ci0JICBnbHlwaC0+aGVpZ2h0ID0gMTY7Ci0JICBnbHlwaC0+YmFzZWxpbmUgPSAoMTYg KiAzKSAvIDQ7Ci0JICAKLQkgIC8qIFJlc3RvcmUgb2xkIGVycm9yIG1lc3NhZ2UuICAqLwot ICAgICAgICAgIGdydWJfZXJyb3JfcG9wICgpOwotICAgICAgICAgIAotCSAgcmV0dXJuIDE7 Ci0JfQotICAgIH0KLQotICAvKiBVZ2doLi4uICBObyBmb250IHdhcyBmb3VuZC4gICovCi0g IGZpbGxfd2l0aF9kZWZhdWx0X2dseXBoIChnbHlwaCk7Ci0gIHJldHVybiAwOwotfQotCi1z dGF0aWMgZ3J1Yl9lcnJfdAotZm9udF9jb21tYW5kIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAq c3RhdGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAotCSAgICAgIGludCBhcmdjICBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCi0JICAgICAgY2hhciAqKmFyZ3MgX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpKQotewotICBpZiAoYXJnYyA9PSAwKQotICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJubyBmb250IHNwZWNpZmllZCIpOwotCi0g IHdoaWxlIChhcmdjLS0pCi0gICAgaWYgKCEgYWRkX2ZvbnQgKCphcmdzKyspKQotICAgICAg cmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLUdSVUJfTU9EX0lOSVQoZm9udF9tYW5h Z2VyKQotewotICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJmb250IiwgZm9udF9jb21tYW5k LCBHUlVCX0NPTU1BTkRfRkxBR19CT1RILAotCQkJICJmb250IEZJTEUuLi4iLAotCQkJICJT cGVjaWZ5IG9uZSBvciBtb3JlIGZvbnQgZmlsZXMgdG8gZGlzcGxheS4iLCAwKTsKLX0KLQot R1JVQl9NT0RfRklOSShmb250X21hbmFnZXIpCi17Ci0gIGdydWJfdW5yZWdpc3Rlcl9jb21t YW5kICgiZm9udCIpOwotfQpJbmRleDogY29tbWFuZHMvdmlkZW90ZXN0LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gY29tbWFuZHMvdmlkZW90ZXN0LmMJKHJldmlzaW9uIDE5MzQpCisrKyBjb21t YW5kcy92aWRlb3Rlc3QuYwkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg KiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgotICogIENvcHlyaWdodCAo QykgMjAwNiwyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDYsMjAwNywyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KICAqCiAgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDggKzM2LDYg QEAKICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfVklERU9fTU9ERV9UWVBFX0lOREVY X0NPTE9SKSAhPSBHUlVCX0VSUl9OT05FKQogICAgIHJldHVybiBncnViX2Vycm5vOwogCi0g IGdydWJfZ2V0a2V5ICgpOwotCiAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvcjsKICAgdW5z aWduZWQgaW50IHg7CiAgIHVuc2lnbmVkIGludCB5OwpAQCAtNDQsOSArNDIsMTUgQEAKICAg dW5zaWduZWQgaW50IHdpZHRoOwogICB1bnNpZ25lZCBpbnQgaGVpZ2h0OwogICBpbnQgaTsK LSAgc3RydWN0IGdydWJfZm9udF9nbHlwaCBnbHlwaDsKKyAgZ3J1Yl9mb250X3Qgc2Fuc2Jp ZzsKKyAgZ3J1Yl9mb250X3Qgc2FuczsKKyAgZ3J1Yl9mb250X3Qgc2Fuc3NtYWxsOworICBn cnViX2ZvbnRfdCBmaXhlZDsKKyAgc3RydWN0IGdydWJfZm9udF9nbHlwaCAqZ2x5cGg7CiAg IHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnRleHRfbGF5ZXI7CiAgIGdydWJf dmlkZW9fY29sb3JfdCBwYWxldHRlWzE2XTsKKyAgY29uc3QgY2hhciAqc3RyOworICBpbnQg dGV4dHk7CiAKICAgZ3J1Yl92aWRlb19nZXRfdmlld3BvcnQgKCZ4LCAmeSwgJndpZHRoLCAm aGVpZ2h0KTsKIApAQCAtNjUsOCArNjksMTUgQEAKICAgY29sb3IgPSBncnViX3ZpZGVvX21h cF9yZ2IgKDAsIDI1NSwgMjU1KTsKICAgZ3J1Yl92aWRlb19maWxsX3JlY3QgKGNvbG9yLCAx MDAsIDEwMCwgMTAwLCAxMDApOwogCi0gIGdydWJfZm9udF9nZXRfZ2x5cGggKCcqJywgJmds eXBoKTsgIAotICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIDIwMCAs MCk7CisgIHNhbnNiaWcgPSBncnViX2ZvbnRfZ2V0ICgiSGVsdmV0aWNhIEJvbGQgMjQiKTsK KyAgc2FucyA9IGdydWJfZm9udF9nZXQgKCJIZWx2ZXRpY2EgQm9sZCAxNCIpOworICBzYW5z c21hbGwgPSBncnViX2ZvbnRfZ2V0ICgiSGVsdmV0aWNhIDgiKTsKKyAgZml4ZWQgPSBncnVi X2ZvbnRfZ2V0ICgiRml4ZWQgMjAiKTsKKyAgaWYgKCEgc2Fuc2JpZyB8fCAhIHNhbnMgfHwg ISBzYW5zc21hbGwgfHwgISBmaXhlZCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZPTlQsICJObyBmb250IGxvYWRlZC4iKTsKKworICBnbHlwaCA9IGdydWJfZm9u dF9nZXRfZ2x5cGggKGZpeGVkLCAnKicpOworICBncnViX2ZvbnRfZHJhd19nbHlwaCAoZ2x5 cGgsIGNvbG9yLCAyMDAgLDApOwogCiAgIGdydWJfdmlkZW9fc2V0X3ZpZXdwb3J0ICh4ICsg MTUwLCB5ICsgMTUwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggLSAxNTAg KiAyLCBoZWlnaHQgLSAxNTAgKiAyKTsKQEAgLTc3LDEyICs4OCw2MyBAQAogCiAgIGNvbG9y ID0gZ3J1Yl92aWRlb19tYXBfcmdiICgyNTUsIDI1NSwgMjU1KTsKIAotICBncnViX2ZvbnRf Z2V0X2dseXBoICgnQScsICZnbHlwaCk7Ci0gIGdydWJfdmlkZW9fYmxpdF9nbHlwaCAoJmds eXBoLCBjb2xvciwgMTYsIDE2KTsKLSAgZ3J1Yl9mb250X2dldF9nbHlwaCAoJ0InLCAmZ2x5 cGgpOwotICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIDE2ICogMiwg MTYpOworICB0ZXh0eSA9IDMyOworICBncnViX2ZvbnRfZHJhd19zdHJpbmcgKCJUaGUgcXVp Y2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZy4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHNhbnMsIGNvbG9yLCAxNiwgdGV4dHkpOworICB0ZXh0eSArPSBncnVi X2ZvbnRfZ2V0X2Rlc2NlbnQgKHNhbnMpICsgZ3J1Yl9mb250X2dldF9sZWFkaW5nIChzYW5z KTsKKworICB0ZXh0eSArPSBncnViX2ZvbnRfZ2V0X2FzY2VudCAoZml4ZWQpOworICBncnVi X2ZvbnRfZHJhd19zdHJpbmcgKCJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRo ZSBsYXp5IGRvZy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkLCBjb2xvciwg MTYsIHRleHR5KTsKKyAgdGV4dHkgKz0gZ3J1Yl9mb250X2dldF9kZXNjZW50IChmaXhlZCkg KyBncnViX2ZvbnRfZ2V0X2xlYWRpbmcgKGZpeGVkKTsKKworICAvKiBUbyBjb252ZXJ0IFVu aWNvZGUgY2hhcmFjdGVycyBpbnRvIFVURi04IGZvciB0aGlzIHRlc3QsIHRoZSBmb2xsb3dp bmcKKyAgICAgY29tbWFuZCBpcyB1c2VmdWw6CisgICAgICAgZWNobyAtbmUgJ1x4MDBceDAw XHgyNlx4M0EnIHwgaWNvbnYgLWYgVVRGLTMyQkUgLXQgVVRGLTggfCBvZCAtdCB4MQorICAg ICBUaGlzIGNvbnZlcnRzIHRoZSBVbmljb2RlIGNoYXJhY3RlciBVKzI2M0EgdG8gVVRGLTgu ICAqLworCisgIC8qIENoYXJhY3RlcnMgdXNlZDoKKyAgICAgQ29kZSBwb2ludCAgRGVzY3Jp cHRpb24gICAgICAgICAgICAgICAgICAgIFVURi04IGVuY29kaW5nCisgICAgIC0tLS0tLS0t LS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLQorICAg ICBVKzI2M0EgICAgICB1bmZpbGxlZCBzbWlsZXkgZmFjZSAgICAgICAgICAgRTIgOTggQkEK KyAgICAgVSswMEExICAgICAgaW52ZXJ0ZWQgZXhjbGFtYXRpb24gcG9pbnQgICAgIEMyIEEx CisgICAgIFUrMDBBMyAgICAgIEJyaXRpc2ggcG91bmQgY3VycmVuY3kgc3ltYm9sICBDMiBB MworICAgICBVKzAzQzQgICAgICBHcmVlayB0YXUgICAgICAgICAgICAgICAgICAgICAgQ0Yg ODQKKyAgICAgVSswMEU0ICAgICAgbG93ZXJjYXNlIGxldHRlciBhIHdpdGggdW1sYXV0IEMz IEE0CisgICAgIFUrMjEyNCAgICAgIHNldCAnWicgc3ltYm9sIChpbnRlZ2VycykgICAgICBF MiA4NCBBNAorICAgICBVKzIyODcgICAgICBzdWJzZXQgc3ltYm9sICAgICAgICAgICAgICAg ICAgRTIgOEEgODcKKyAgICAgVSsyMTFEICAgICAgc2V0ICdSJyBzeW1ib2wgKHJlYWwgbnVt YmVycykgIEUyIDg0IDlEICAqLworCisgIHN0ciA9CisgICAgIlVuaWNvZGUgdGVzdDogaGFw cHlceEUyXHg5OFx4QkEgXHhDMlx4QTMgNS4wMCIKKyAgICAiIFx4QzJceEExXHhDRlx4ODRc eEMzXHhBNHUhICIKKyAgICAiIFx4RTJceDg0XHhBNFx4RTJceDhBXHg4N1x4RTJceDg0XHg5 RCI7CisgIGNvbG9yID0gZ3J1Yl92aWRlb19tYXBfcmdiICgxMjgsIDEyOCwgMjU1KTsKKwor ICAvKiBBbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGV4aXN0IGluIHRoZSAnRml4ZWQg MjAnICgxMHgyMCkgZm9udC4gICovCisgIHRleHR5ICs9IGdydWJfZm9udF9nZXRfYXNjZW50 KGZpeGVkKTsKKyAgZ3J1Yl9mb250X2RyYXdfc3RyaW5nIChzdHIsIGZpeGVkLCBjb2xvciwg MTYsIHRleHR5KTsKKyAgdGV4dHkgKz0gZ3J1Yl9mb250X2dldF9kZXNjZW50IChmaXhlZCkg KyBncnViX2ZvbnRfZ2V0X2xlYWRpbmcgKGZpeGVkKTsKKworICAvKiBTb21lIGNoYXJhY3Rl ciBkb24ndCBleGlzdCBpbiB0aGUgSGVsdmV0aWNhIGZvbnQsIHNvIHRoZSBmb250IGVuZ2lu ZQorICAgICB3aWxsIGZhbGwgYmFjayB0byB1c2luZyBnbHlwaHMgZnJvbSBhbm90aGVyIGZv bnQgdGhhdCBkb2VzIGNvbnRhaW4gdGhlbS4KKyAgICAgVE9ETyBUaGUgZm9udCBlbmdpbmUg c2hvdWxkIGJlIHNtYXJ0IGFib3V0IHNlbGVjdGluZyBhIHJlcGxhY2VtZW50IGZvbnQKKyAg ICAgYW5kIHByaW9yaXRpemUgZm9udHMgd2l0aCBzaW1pbGFyIHNpemVzLiAgKi8KKworICB0 ZXh0eSArPSBncnViX2ZvbnRfZ2V0X2FzY2VudChzYW5zYmlnKTsKKyAgZ3J1Yl9mb250X2Ry YXdfc3RyaW5nIChzdHIsIHNhbnNiaWcsIGNvbG9yLCAxNiwgdGV4dHkpOworICB0ZXh0eSAr PSBncnViX2ZvbnRfZ2V0X2Rlc2NlbnQgKHNhbnNiaWcpICsgZ3J1Yl9mb250X2dldF9sZWFk aW5nIChzYW5zYmlnKTsKIAotICBncnViX2ZvbnRfZ2V0X2dseXBoICgnKicsICZnbHlwaCk7 CisgIHRleHR5ICs9IGdydWJfZm9udF9nZXRfYXNjZW50KHNhbnMpOworICBncnViX2ZvbnRf ZHJhd19zdHJpbmcgKHN0ciwgc2FucywgY29sb3IsIDE2LCB0ZXh0eSk7CisgIHRleHR5ICs9 IGdydWJfZm9udF9nZXRfZGVzY2VudCAoc2FucykgKyBncnViX2ZvbnRfZ2V0X2xlYWRpbmcg KHNhbnMpOworCisgIHRleHR5ICs9IGdydWJfZm9udF9nZXRfYXNjZW50KHNhbnNzbWFsbCk7 CisgIGdydWJfZm9udF9kcmF3X3N0cmluZyAoc3RyLCBzYW5zc21hbGwsIGNvbG9yLCAxNiwg dGV4dHkpOworICB0ZXh0eSArPSAoZ3J1Yl9mb250X2dldF9kZXNjZW50IChzYW5zc21hbGwp CisgICAgICAgICAgICArIGdydWJfZm9udF9nZXRfbGVhZGluZyAoc2Fuc3NtYWxsKSk7CisK KyAgZ2x5cGggPSBncnViX2ZvbnRfZ2V0X2dseXBoIChmaXhlZCwgJyonKTsKIAogICBmb3Ig KGkgPSAwOyBpIDwgMTY7IGkrKykKICAgICB7CkBAIC04OCw3ICsxNTAsNyBAQAogICAgIHsK ICAgICAgIGNvbG9yID0gZ3J1Yl92aWRlb19tYXBfY29sb3IgKGkpOwogICAgICAgcGFsZXR0 ZVtpXSA9IGNvbG9yOwotICAgICAgZ3J1Yl92aWRlb19ibGl0X2dseXBoICgmZ2x5cGgsIGNv bG9yLCAxNiArIGkgKiAxNiwgMzIpOworICAgICAgZ3J1Yl9mb250X2RyYXdfZ2x5cGggKGds eXBoLCBjb2xvciwgMTYgKyBpICogMTYsIDIyMCk7CiAgICAgfQogCiAgIGdydWJfdmlkZW9f c2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRFUl9UQVJHRVRfRElT UExBWSk7CkluZGV4OiB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRvb2wv QkRGTG9hZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXRpbC9mb250dG9vbC9zcmMvb3Jn L2dudS9ncnViL2ZvbnR0b29sL0JERkxvYWRlci5qYXZhCShyZXZpc2lvbiAwKQorKysgdXRp bC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL0JERkxvYWRlci5qYXZhCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MSBAQAorLyoqCisgKiAgR1JVQiAgLS0gIEdSYW5k IFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KK3BhY2thZ2Ugb3JnLmdudS5ncnViLmZvbnR0 b29sOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tl bml6ZXI7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CitpbXBvcnQgamF2YS51 dGlsLnJlZ2V4LlBhdHRlcm47CisKK3B1YmxpYyBjbGFzcyBCREZMb2FkZXIgeworICAgIHBy aXZhdGUgZmluYWwgQnVmZmVyZWRSZWFkZXIgaW47CisgICAgcHJpdmF0ZSBmaW5hbCBGb250 IGZvbnQ7CisgICAgcHJpdmF0ZSBpbnQgbWF4Q2hhcldpZHRoOworICAgIHByaXZhdGUgaW50 IG1heENoYXJIZWlnaHQ7CisKKyAgICBCREZMb2FkZXIoQnVmZmVyZWRSZWFkZXIgaW4pIHsK KyAgICAgICAgdGhpcy5pbiA9IGluOworICAgICAgICB0aGlzLmZvbnQgPSBuZXcgRm9udCgp OworICAgICAgICB0aGlzLm1heENoYXJXaWR0aCA9IDA7CisgICAgICAgIHRoaXMubWF4Q2hh ckhlaWdodCA9IDA7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQkRG RmlsZShTdHJpbmcgZmlsZW5hbWUpIHsKKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0g bnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0 cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVuYW1lKSk7CisgICAgICAgICAgICBmaW5h bCBTdHJpbmcgc2lnbmF0dXJlID0gIlNUQVJURk9OVCAiOworICAgICAgICAgICAgYnl0ZVtd IGIgPSBuZXcgYnl0ZVtzaWduYXR1cmUubGVuZ3RoKCldOworICAgICAgICAgICAgaW4ucmVh ZEZ1bGx5KGIpOworICAgICAgICAgICAgaW4uY2xvc2UoKTsKKworICAgICAgICAgICAgU3Ry aW5nIHMgPSBuZXcgU3RyaW5nKGIsICJVUy1BU0NJSSIpOworICAgICAgICAgICAgcmV0dXJu IHNpZ25hdHVyZS5lcXVhbHMocyk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUp IHsKKyAgICAgICAgICAgIGlmIChpbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5 IHsKKyAgICAgICAgICAgICAgICAgICAgaW4uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9 IGNhdGNoIChJT0V4Y2VwdGlvbiBlMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZ25v cmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBGb250 IGxvYWRGb250UmVzb3VyY2UoU3RyaW5nIHJlc291cmNlTmFtZSkgdGhyb3dzIElPRXhjZXB0 aW9uIHsKKyAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBCREZMb2FkZXIuY2xhc3MuZ2V0Q2xh c3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7CisgICAgICAg IGlmIChpbiA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4 Y2VwdGlvbigiRm9udCByZXNvdXJjZSAiICsgcmVzb3VyY2VOYW1lICsgIiBub3QgZm91bmQi KTsKKyAgICAgICAgcmV0dXJuIGxvYWRGb250RnJvbVN0cmVhbShpbik7CisgICAgfQorCisg ICAgcHVibGljIHN0YXRpYyBGb250IGxvYWRGb250RmlsZShTdHJpbmcgZmlsZW5hbWUpIHRo cm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIElucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJ bnB1dFN0cmVhbShmaWxlbmFtZSk7CisgICAgICAgIHJldHVybiBsb2FkRm9udEZyb21TdHJl YW0oaW4pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEZvbnQgbG9hZEZvbnRGcm9t U3RyZWFtKElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAg ICAgICBCdWZmZXJlZFJlYWRlciBpbjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlu ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwg IklTTy04ODU5LTEiKSk7CisgICAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdF eGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o IkVuY29kaW5nIG5vdCBzdXBwb3J0ZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBCREZMb2FkZXIoaW4pLmxvYWRGb250KCk7Cisg ICAgfQorCisgICAgcHJpdmF0ZSBGb250IGxvYWRGb250KCkgdGhyb3dzIElPRXhjZXB0aW9u IHsKKyAgICAgICAgbG9hZEZvbnRJbmZvKCk7CisgICAgICAgIHdoaWxlIChsb2FkQ2hhcigp KSB7CisgICAgICAgICAgICAvKiBMb29wLiAqLworICAgICAgICB9CisKKyAgICAgICAgZm9u dC5zZXRNYXhDaGFyV2lkdGgobWF4Q2hhcldpZHRoKTsKKyAgICAgICAgZm9udC5zZXRNYXhD aGFySGVpZ2h0KG1heENoYXJIZWlnaHQpOworICAgICAgICByZXR1cm4gZm9udDsKKyAgICB9 CisKKyAgICBwcml2YXRlIHZvaWQgbG9hZEZvbnRJbmZvKCkgdGhyb3dzIElPRXhjZXB0aW9u IHsKKyAgICAgICAgZmluYWwgUGF0dGVybiBzdHJpbmdTZXR0aW5nUGF0dGVybiA9IFBhdHRl cm4uY29tcGlsZSgiXihcXHcrKVxccytcIihbXlwiXSspXCIkIik7CisgICAgICAgIFN0cmlu ZyBsaW5lOworICAgICAgICAvLyBMb2FkIHRoZSBnbG9iYWwgZm9udCBpbmZvcm1hdGlvbiB0 aGF0IGFwcGVhcnMgYmVmb3JlIENIQVJTLgorICAgICAgICBmaW5hbCBpbnQgVU5TRVQgPSBJ bnRlZ2VyLk1JTl9WQUxVRTsKKyAgICAgICAgZm9udC5zZXRBc2NlbnQoVU5TRVQpOworICAg ICAgICBmb250LnNldERlc2NlbnQoVU5TRVQpOworICAgICAgICBmb250LnNldEZhbWlseSgi VW5rbm93biIpOworICAgICAgICBmb250LnNldEJvbGQoZmFsc2UpOworICAgICAgICBmb250 LnNldEl0YWxpYyhmYWxzZSk7CisgICAgICAgIGZvbnQuc2V0UG9pbnRTaXplKEZvbnQuVU5L Tk9XTl9QT0lOVF9TSVpFKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGluZSA9IGlu LnJlYWRMaW5lKCk7CisgICAgICAgICAgICBpZiAobGluZSA9PSBudWxsKQorICAgICAgICAg ICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQkRGIGZvcm1hdCBlcnJvcjogZW5kIG9m IGZpbGUgd2hpbGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJyZWFkaW5nIGdsb2JhbCBmb250IGluZm9ybWF0aW9uIik7CisKKyAgICAgICAgICAgIFN0 cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZSk7CisgICAgICAg ICAgICBpZiAoc3QuaGFzTW9yZVRva2VucygpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5n IG5hbWUgPSBzdC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAobmFtZS5lcXVh bHMoIkZPTlRfQVNDRU5UIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdC5oYXNN b3JlVG9rZW5zKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNl cHRpb24oIkJERiBmb3JtYXQgZXJyb3I6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJubyB0b2tlbnMgYWZ0ZXIgIiArIG5hbWUpOworICAg ICAgICAgICAgICAgICAgICBmb250LnNldEFzY2VudChJbnRlZ2VyLnBhcnNlSW50KHN0Lm5l eHRUb2tlbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygi Rk9OVF9ERVNDRU5UIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdC5oYXNNb3Jl VG9rZW5zKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRp b24oIkJERiBmb3JtYXQgZXJyb3I6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJubyB0b2tlbnMgYWZ0ZXIgIiArIG5hbWUpOworICAgICAg ICAgICAgICAgICAgICBmb250LnNldERlc2NlbnQoSW50ZWdlci5wYXJzZUludChzdC5uZXh0 VG9rZW4oKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoIlBP SU5UX1NJWkUiKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0Lmhhc01vcmVUb2tl bnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigi QkRGIGZvcm1hdCBlcnJvcjogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIm5vIHRva2VucyBhZnRlciAiICsgbmFtZSk7CisgICAgICAgICAg ICAgICAgICAgIC8vIERpdmlkZSBieSAxMCwgc2luY2UgaXQgaXMgc3RvcmVkIFgxMC4KKyAg ICAgICAgICAgICAgICAgICAgZm9udC5zZXRQb2ludFNpemUoSW50ZWdlci5wYXJzZUludChz dC5uZXh0VG9rZW4oKSkgLyAxMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1l LmVxdWFscygiRkFNSUxZX05BTUUiKSkgeworICAgICAgICAgICAgICAgICAgICBNYXRjaGVy IG1hdGNoZXIgPSBzdHJpbmdTZXR0aW5nUGF0dGVybi5tYXRjaGVyKGxpbmUpOworICAgICAg ICAgICAgICAgICAgICBpZiAoIW1hdGNoZXIubWF0Y2hlcygpKQorICAgICAgICAgICAgICAg ICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJCREYgZm9ybWF0IGVycm9yOiAiICsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSBk b2Vzbid0IG1hdGNoIHN0cmluZyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAic2V0dGluZyBwYXR0ZXJuOiAiICsgbGluZSk7CisgICAgICAg ICAgICAgICAgICAgIGZvbnQuc2V0RmFtaWx5KG1hdGNoZXIuZ3JvdXAoMikpOworICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoIldFSUdIVF9OQU1FIikpIHsKKyAg ICAgICAgICAgICAgICAgICAgTWF0Y2hlciBtYXRjaGVyID0gc3RyaW5nU2V0dGluZ1BhdHRl cm4ubWF0Y2hlcihsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVyLm1h dGNoZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlv bigiQkRGIGZvcm1hdCBlcnJvcjogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImxpbmUgZG9lc24ndCBtYXRjaCBzdHJpbmcgIiArCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHRpbmcgcGF0 dGVybjogIiArIGxpbmUpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgd2VpZ2h0TmFt ZSA9IG1hdGNoZXIuZ3JvdXAoMik7CisgICAgICAgICAgICAgICAgICAgIGZvbnQuc2V0Qm9s ZCgiYm9sZCIuZXF1YWxzSWdub3JlQ2FzZSh3ZWlnaHROYW1lKSk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygiU0xBTlQiKSkgeworICAgICAgICAgICAgICAg ICAgICBNYXRjaGVyIG1hdGNoZXIgPSBzdHJpbmdTZXR0aW5nUGF0dGVybi5tYXRjaGVyKGxp bmUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXIubWF0Y2hlcygpKQorICAg ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJCREYgZm9ybWF0 IGVycm9yOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibGluZSBkb2Vzbid0IG1hdGNoIHN0cmluZyAiICsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0dGluZyBwYXR0ZXJuOiAiICsgbGlu ZSk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzbGFudFR5cGUgPSBtYXRjaGVyLmdy b3VwKDIpOworICAgICAgICAgICAgICAgICAgICBmb250LnNldEl0YWxpYyghIlIiLmVxdWFs c0lnbm9yZUNhc2Uoc2xhbnRUeXBlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChu YW1lLmVxdWFscygiQ0hBUlMiKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz IHRoZSBlbmQgb2YgdGhlIGdsb2JhbCBmb250IGluZm9ybWF0aW9uIGFuZAorICAgICAgICAg ICAgICAgICAgICAvLyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgZGVmaW5pdGlv bnMuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgb3RoZXIgZmllbGRzLgorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CisK KyAgICAgICAgaWYgKGZvbnQuZ2V0QXNjZW50KCkgPT0gVU5TRVQpCisgICAgICAgICAgICB0 aHJvdyBuZXcgSU9FeGNlcHRpb24oIkJERiBmb3JtYXQgZXJyb3I6IG5vIEZPTlRfQVNDRU5U IHByb3BlcnR5Iik7CisgICAgICAgIGlmIChmb250LmdldERlc2NlbnQoKSA9PSBVTlNFVCkK KyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQkRGIGZvcm1hdCBlcnJvcjog bm8gRk9OVF9ERVNDRU5UIHByb3BlcnR5Iik7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29s ZWFuIGxvYWRDaGFyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGxp bmU7CisgICAgICAgIC8vIEZpbmQgc3RhcnQgb2YgY2hhcmFjdGVyCisgICAgICAgIGRvIHsK KyAgICAgICAgICAgIGxpbmUgPSBpbi5yZWFkTGluZSgpOworICAgICAgICAgICAgaWYgKGxp bmUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg ICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxpbmUpOworICAg ICAgICAgICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSAmJiBzdC5uZXh0VG9rZW4oKS5lcXVh bHMoIlNUQVJUQ0hBUiIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdC5oYXNNb3JlVG9r ZW5zKCkpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQkRG IGZvcm1hdCBlcnJvcjogbm8gY2hhcmFjdGVyIG5hbWUgYWZ0ZXIgU1RBUlRDSEFSIik7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUg KHRydWUpOworCisgICAgICAgIC8vIEZpbmQgcHJvcGVydGllcworICAgICAgICBmaW5hbCBp bnQgVU5TRVQgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKyAgICAgICAgaW50IGNvZGVQb2ludCA9 IFVOU0VUOworICAgICAgICBpbnQgYmJ4ID0gVU5TRVQ7CisgICAgICAgIGludCBiYnkgPSBV TlNFVDsKKyAgICAgICAgaW50IGJib3ggPSBVTlNFVDsKKyAgICAgICAgaW50IGJib3kgPSBV TlNFVDsKKyAgICAgICAgaW50IGR3aWR0aCA9IFVOU0VUOworICAgICAgICBkbyB7CisgICAg ICAgICAgICBsaW5lID0gaW4ucmVhZExpbmUoKTsKKyAgICAgICAgICAgIGlmIChsaW5lID09 IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3Ry aW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihsaW5lKTsKKyAgICAgICAg ICAgIGlmIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcg ZmllbGQgPSBzdC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGQuZXF1 YWxzKCJFTkNPRElORyIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3QuaGFzTW9y ZVRva2VucygpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0 aW9uKCJCREYgZm9ybWF0IGVycm9yOiBubyBlbmNvZGluZyAjIGFmdGVyIEVOQ09ESU5HIik7 CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb2RlUG9pbnRTdHIgPSBzdC5uZXh0VG9r ZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gSW50ZWdlci5wYXJzZUlu dChjb2RlUG9pbnRTdHIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZXF1 YWxzKCJCQlgiKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0Lmhhc01vcmVUb2tl bnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigi QkRGIGZvcm1hdCBlcnJvcjogbm8gdG9rZW5zIGFmdGVyIEJCWCIpOworICAgICAgICAgICAg ICAgICAgICBiYnggPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKKyAgICAg ICAgICAgICAgICAgICAgYmJ5ID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7 CisgICAgICAgICAgICAgICAgICAgIGJib3ggPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRU b2tlbigpKTsKKyAgICAgICAgICAgICAgICAgICAgYmJveSA9IEludGVnZXIucGFyc2VJbnQo c3QubmV4dFRva2VuKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZXF1 YWxzKCJEV0lEVEgiKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0Lmhhc01vcmVU b2tlbnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlv bigiQkRGIGZvcm1hdCBlcnJvcjogbm8gdG9rZW5zIGFmdGVyIERXSURUSCIpOworICAgICAg ICAgICAgICAgICAgICBkd2lkdGggPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigp KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGR3aWR0aFkgPSBJbnRlZ2VyLnBhcnNlSW50 KHN0Lm5leHRUb2tlbigpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIERXSURUSCBZ IHZhbHVlIHNob3VsZCBiZSB6ZXJvIGZvciBhbnkgbm9ybWFsIGZvbnQuCisgICAgICAgICAg ICAgICAgICAgIGlmIChkd2lkdGhZICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQkRGIGZvcm1hdCBlcnJvcjogZHdpZHRoIFkgdmFs dWUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi aXMgbm9uemVybyAoIiArIGR3aWR0aFkgKyAiKSAiICsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGNoYXIgIiArIGNvZGVQb2ludCArICIu Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGZpZWxkLmVxdWFscygiQklUTUFQIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 IC8vIG5vdyByZWFkIHRoZSBiaXRtYXAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0gd2hpbGUgKHRydWUpOworCisgICAgICAgIGlmIChjb2RlUG9pbnQg PT0gVU5TRVQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkJERiBmb3Jt YXQgZXJyb3I6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBj b2RlIHBvaW50IHNldCIpOworICAgICAgICBpZiAoYmJ4ID09IFVOU0VUIHx8IGJieSA9PSBV TlNFVCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQkRGIGZvcm1hdCBl cnJvcjogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJieC9iYnkg bWlzc2luZzogIiArIGJieCArICIsICIgKyBiYnkgKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIgZm9yIGNoYXIgIiArIGNvZGVQb2ludCk7CisKKyAgICAgICAgaWYg KGJib3ggPT0gVU5TRVQgfHwgYmJveSA9PSBVTlNFVCkKKyAgICAgICAgICAgIHRocm93IG5l dyBJT0V4Y2VwdGlvbigiQkRGIGZvcm1hdCBlcnJvcjogIiArCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImJib3gvYmJveSBtaXNzaW5nOiAiICsgYmJveCArICIsICIg KyBiYm95ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvciBjaGFy ICIgKyBjb2RlUG9pbnQpOworCisgICAgICAgIGlmIChkd2lkdGggPT0gVU5TRVQpCisgICAg ICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkJERiBmb3JtYXQgZXJyb3I6ICIgKwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkd2lkdGggbWlzc2luZyBmb3Ig Y2hhciAiICsgY29kZVBvaW50KTsKKworICAgICAgICBmaW5hbCBpbnQgZ2x5cGhXaWR0aCA9 IGJieDsKKyAgICAgICAgZmluYWwgaW50IGdseXBoSGVpZ2h0ID0gYmJ5OworICAgICAgICBp ZiAoZ2x5cGhXaWR0aCA+IG1heENoYXJXaWR0aCkKKyAgICAgICAgICAgIG1heENoYXJXaWR0 aCA9IGdseXBoV2lkdGg7CisgICAgICAgIGlmIChnbHlwaEhlaWdodCA+IG1heENoYXJIZWln aHQpCisgICAgICAgICAgICBtYXhDaGFySGVpZ2h0ID0gZ2x5cGhIZWlnaHQ7CisKKyAgICAg ICAgLy8gUmVhZCB0aGUgYml0bWFwCisgICAgICAgIEdseXBoIGdseXBoID0gbmV3IEdseXBo KGNvZGVQb2ludCwgZ2x5cGhXaWR0aCwgZ2x5cGhIZWlnaHQsIGJib3gsIGJib3ksIGR3aWR0 aCk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZ2x5cGhIZWlnaHQ7IHkrKykgewor ICAgICAgICAgICAgbGluZSA9IGluLnJlYWRMaW5lKCk7CisgICAgICAgICAgICBpZiAobGlu ZSA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg IGZvciAoaW50IGIgPSAwOyBiIDwgbGluZS5sZW5ndGgoKTsgYisrKSB7CisgICAgICAgICAg ICAgICAgaW50IHYgPSBJbnRlZ2VyLnBhcnNlSW50KENoYXJhY3Rlci50b1N0cmluZyhsaW5l LmNoYXJBdChiKSksIDE2KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gYiAqIDQs IGkgPSAwOyBpIDwgNCAmJiB4IDwgZ2x5cGhXaWR0aDsgeCsrLCBpKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgYm9vbGVhbiBzZXQgPSAodiAmIDB4OCkgIT0gMDsKKyAgICAgICAgICAg ICAgICAgICAgdiA8PD0gMTsKKyAgICAgICAgICAgICAgICAgICAgZ2x5cGguc2V0UGl4ZWwo eCwgeSwgc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICBmb250LnB1dEdseXBoKGNvZGVQb2ludCwgZ2x5cGgpOworICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CkluZGV4OiB1dGlsL2ZvbnR0b29sL3NyYy9vcmcv Z251L2dydWIvZm9udHRvb2wvQ2hhckRlZnMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1dGls L2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRvb2wvQ2hhckRlZnMuamF2YQkocmV2 aXNpb24gMCkKKysrIHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9D aGFyRGVmcy5qYXZhCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorLyoqCisgKiAg R1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykg MjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KK3BhY2thZ2Ugb3Jn LmdudS5ncnViLmZvbnR0b29sOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRT dHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEu aW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZh LnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2 YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CisKK2NsYXNzIENoYXJE ZWZzIHsKKyAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSAiMSIuZXF1YWxzKFN5c3RlbS5n ZXRQcm9wZXJ0eSgiZm9udHRvb2wuZGVidWciKSk7CisgICAgcHJpdmF0ZSBUcmVlTWFwPElu dGVnZXIsIEdseXBoPiBnbHlwaHM7CisgICAgcHJpdmF0ZSBCeXRlQXJyYXlPdXRwdXRTdHJl YW0gY2hhckRlZnNEYXRhOworICAgIHByaXZhdGUgaW50IG1heENoYXJXaWR0aDsKKyAgICBw cml2YXRlIGludCBtYXhDaGFySGVpZ2h0OworICAgIHByaXZhdGUgSGFzaE1hcDxJbnRlZ2Vy LCBDaGFyU3RvcmFnZUluZm8+IGNoYXJJbmRleDsKKworICAgIHB1YmxpYyBDaGFyRGVmcyhG b250IGZvbnQpIHsKKyAgICAgICAgdGhpcy5nbHlwaHMgPSBmb250LmdldEdseXBocygpOwor ICAgICAgICB0aGlzLmNoYXJJbmRleCA9IG51bGw7CisgICAgICAgIHRoaXMuY2hhckRlZnNE YXRhID0gbnVsbDsKKworICAgICAgICBjYWxjdWxhdGVNYXhTaXplcygpOworICAgIH0KKwor ICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVNYXhTaXplcygpIHsKKyAgICAgICAgbWF4Q2hh cldpZHRoID0gMDsKKyAgICAgICAgbWF4Q2hhckhlaWdodCA9IDA7CisgICAgICAgIGZvciAo R2x5cGggZ2x5cGggOiBnbHlwaHMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZpbmFsIGlu dCB3ID0gZ2x5cGguZ2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBoID0gZ2x5 cGguZ2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAodyA+IG1heENoYXJXaWR0aCkKKyAg ICAgICAgICAgICAgICBtYXhDaGFyV2lkdGggPSB3OworICAgICAgICAgICAgaWYgKGggPiBt YXhDaGFySGVpZ2h0KQorICAgICAgICAgICAgICAgIG1heENoYXJIZWlnaHQgPSBoOworICAg ICAgICB9CisgICAgfQorCisgICAgdm9pZCBidWlsZERlZmluaXRpb25zKExpc3Q8Q2hhcmFj dGVyUmFuZ2U+IHJhbmdlTGlzdCkgeworICAgICAgICBjaGFySW5kZXggPSBuZXcgSGFzaE1h cDxJbnRlZ2VyLCBDaGFyU3RvcmFnZUluZm8+KCk7CisgICAgICAgIEhhc2hNYXA8Q2hhckRl ZiwgTG9uZz4gY2hhckRlZkluZGV4ID0gbmV3IEhhc2hNYXA8Q2hhckRlZiwgTG9uZz4oKTsK KyAgICAgICAgY2hhckRlZnNEYXRhID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwor ICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIGNoYXJEZWZzID0gbmV3IERhdGFPdXRwdXRTdHJl YW0oY2hhckRlZnNEYXRhKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIExvb3Ag dGhyb3VnaCBhbGwgdGhlIGdseXBocywgd3JpdGluZyB0aGUgZ2x5cGggZGF0YSB0byB0aGUK KyAgICAgICAgICAgIC8vIGluLW1lbW9yeSBieXRlIHN0cmVhbSwgY29sbGFwc2luZyBkdXBs aWNhdGUgZ2x5cGhzLCBhbmQKKyAgICAgICAgICAgIC8vIGNvbnN0cnVjdGluZyBpbmRleCBp bmZvcm1hdGlvbi4KKyAgICAgICAgICAgIGZvciAoR2x5cGggZ2x5cGggOiBnbHlwaHMudmFs dWVzKCkpIHsKKyAgICAgICAgICAgIAkvLyBEZXRlcm1pbmUgaWYgZ2x5cGggc2hvdWxkIGJl IGluY2x1ZGVkIGluIHdyaXR0ZW4gZmlsZQorCQkJCWlmIChyYW5nZUxpc3Quc2l6ZSgpID4g MCkgeworCSAgICAgICAgICAgIAlib29sZWFuIHNraXAgPSB0cnVlOworCSAgICAgICAgICAg IAkKKwkJCQkJZm9yIChJdGVyYXRvcjxDaGFyYWN0ZXJSYW5nZT4gaXRlciA9IHJhbmdlTGlz dC5pdGVyYXRvcigpOyBpdGVyCisJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCUNoYXJh Y3RlclJhbmdlIGl0ZW0gPSBpdGVyLm5leHQoKTsKKworCQkJCQkJaWYgKGl0ZW0uaXNXaXRo aW5SYW5nZShnbHlwaC5nZXRDb2RlUG9pbnQoKSkpIHsKKwkJCQkJCQlza2lwID0gZmFsc2U7 CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoc2tpcCkgewor CQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9CisgICAgICAgICAgICAJCisgICAgICAg ICAgICAgICAgQ2hhckRlZiBjaGFyRGVmID0gbmV3IENoYXJEZWYoZ2x5cGguZ2V0V2lkdGgo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlw aC5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnbHlwaC5nZXRCaXRtYXAoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hh ckRlZkluZGV4LmNvbnRhaW5zS2V5KGNoYXJEZWYpKSB7CisgICAgICAgICAgICAgICAgICAg IC8vIFVzZSBhbHJlYWR5LXdyaXR0ZW4gZ2x5cGguCisgICAgICAgICAgICAgICAgICAgIGlm IChkZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJE dXBsaWNhdGUgZ2x5cGggZm9yIGNoYXJhY3RlciBVKyUwNFglbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5nZXRDb2RlUG9pbnQoKSk7Cisg ICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGFyT2Zmc2V0ID0gY2hhckRlZkluZGV4 LmdldChjaGFyRGVmKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBD aGFyU3RvcmFnZUluZm8gaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 IENoYXJTdG9yYWdlSW5mbyhnbHlwaC5nZXRDb2RlUG9pbnQoKSwgY2hhck9mZnNldCk7Cisg ICAgICAgICAgICAgICAgICAgIGNoYXJJbmRleC5wdXQoZ2x5cGguZ2V0Q29kZVBvaW50KCks IGluZm8pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IC8vIFdyaXRlIGdseXBoIGRhdGEuCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBj aGFyT2Zmc2V0ID0gY2hhckRlZnMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBmaW5h bCBDaGFyU3RvcmFnZUluZm8gaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmV3IENoYXJTdG9yYWdlSW5mbyhnbHlwaC5nZXRDb2RlUG9pbnQoKSwgY2hhck9mZnNldCk7 CisgICAgICAgICAgICAgICAgICAgIGNoYXJJbmRleC5wdXQoZ2x5cGguZ2V0Q29kZVBvaW50 KCksIGluZm8pOworCisgICAgICAgICAgICAgICAgICAgIGNoYXJEZWZJbmRleC5wdXQoY2hh ckRlZiwgKGxvbmcpIGNoYXJPZmZzZXQpOworCisgICAgICAgICAgICAgICAgICAgIGNoYXJE ZWZzLndyaXRlU2hvcnQoZ2x5cGguZ2V0V2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAg IGNoYXJEZWZzLndyaXRlU2hvcnQoZ2x5cGguZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg ICAgICAgICBjaGFyRGVmcy53cml0ZVNob3J0KGdseXBoLmdldEJib3goKSk7CisgICAgICAg ICAgICAgICAgICAgIGNoYXJEZWZzLndyaXRlU2hvcnQoZ2x5cGguZ2V0QmJveSgpKTsKKyAg ICAgICAgICAgICAgICAgICAgY2hhckRlZnMud3JpdGVTaG9ydChnbHlwaC5nZXREZXZpY2VX aWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhckRlZnMud3JpdGUoZ2x5cGguZ2V0 Qml0bWFwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRp bWVFeGNlcHRpb24oIkVycm9yIHdyaXRpbmcgdG8gaW4tbWVtb3J5IGJ5dGUgc3RyZWFtIiwg ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldE1heENoYXJXaWR0 aCgpIHsKKyAgICAgICAgcmV0dXJuIG1heENoYXJXaWR0aDsKKyAgICB9CisKKyAgICBwdWJs aWMgaW50IGdldE1heENoYXJIZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBtYXhDaGFySGVp Z2h0OworICAgIH0KKworICAgIHB1YmxpYyBIYXNoTWFwPEludGVnZXIsIENoYXJTdG9yYWdl SW5mbz4gZ2V0Q2hhckluZGV4KCkgeworICAgICAgICBpZiAoY2hhckluZGV4ID09IG51bGwp IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGNo YXJJbmRleDsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZVtdIGdldERlZmluaXRpb25EYXRh KCkgeworICAgICAgICBpZiAoY2hhckRlZnNEYXRhID09IG51bGwpIHRocm93IG5ldyBJbGxl Z2FsU3RhdGVFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGNoYXJEZWZzRGF0YS50b0J5 dGVBcnJheSgpOworICAgIH0KKworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2hhckRl ZiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IHdpZHRoOworICAgICAgICBwcml2YXRl IGZpbmFsIGludCBoZWlnaHQ7CisgICAgICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIGRhdGE7 CisKKyAgICAgICAgcHVibGljIENoYXJEZWYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBieXRl W10gZGF0YSkgeworICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOworICAgICAgICAg ICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRh OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBv KSB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAg ICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVy biBmYWxzZTsKKworICAgICAgICAgICAgQ2hhckRlZiBjaGFyRGVmID0gKENoYXJEZWYpIG87 CisKKyAgICAgICAgICAgIGlmIChoZWlnaHQgIT0gY2hhckRlZi5oZWlnaHQpIHJldHVybiBm YWxzZTsKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBjaGFyRGVmLndpZHRoKSByZXR1cm4g ZmFsc2U7CisgICAgICAgICAgICBpZiAoIUFycmF5cy5lcXVhbHMoZGF0YSwgY2hhckRlZi5k YXRhKSkgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg ICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgICAgICBp bnQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0ID0gd2lkdGg7CisgICAgICAgICAgICBy ZXN1bHQgPSAzMSAqIHJlc3VsdCArIGhlaWdodDsKKyAgICAgICAgICAgIHJlc3VsdCA9IDMx ICogcmVzdWx0ICsgQXJyYXlzLmhhc2hDb2RlKGRhdGEpOworICAgICAgICAgICAgcmV0dXJu IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworCisJcHVibGljIGludCBnZXRJbmRleFNp emUoKSB7CisJCWlmIChjaGFySW5kZXggPT0gbnVsbCkKKwkJCXJldHVybiAwOworCQkKKwkJ cmV0dXJuIGNoYXJJbmRleC5zaXplKCk7CisJfQorfQpJbmRleDogdXRpbC9mb250dG9vbC9z cmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL0NoYXJTdG9yYWdlSW5mby5qYXZhCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9DaGFy U3RvcmFnZUluZm8uamF2YQkocmV2aXNpb24gMCkKKysrIHV0aWwvZm9udHRvb2wvc3JjL29y Zy9nbnUvZ3J1Yi9mb250dG9vbC9DaGFyU3RvcmFnZUluZm8uamF2YQkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwzNiBAQAorLyoqCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9v dGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisgKi8KK3BhY2thZ2Ugb3JnLmdudS5ncnViLmZvbnR0b29sOworCitjbGFz cyBDaGFyU3RvcmFnZUluZm8geworICAgIHByaXZhdGUgZmluYWwgaW50IGNvZGVQb2ludDsK KyAgICBwcml2YXRlIGZpbmFsIGludCBmaWxlT2Zmc2V0OworCisgICAgcHVibGljIENoYXJT dG9yYWdlSW5mbyhpbnQgY29kZVBvaW50LCBpbnQgZmlsZU9mZnNldCkgeworICAgICAgICB0 aGlzLmNvZGVQb2ludCA9IGNvZGVQb2ludDsKKyAgICAgICAgdGhpcy5maWxlT2Zmc2V0ID0g ZmlsZU9mZnNldDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldENvZGVQb2ludCgpIHsK KyAgICAgICAgcmV0dXJuIGNvZGVQb2ludDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdl dEZpbGVPZmZzZXQoKSB7CisgICAgICAgIHJldHVybiBmaWxlT2Zmc2V0OworICAgIH0KK30K SW5kZXg6IHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9DaGFyYWN0 ZXJSYW5nZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHV0aWwvZm9udHRvb2wvc3JjL29yZy9n bnUvZ3J1Yi9mb250dG9vbC9DaGFyYWN0ZXJSYW5nZS5qYXZhCShyZXZpc2lvbiAwKQorKysg dXRpbC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL0NoYXJhY3RlclJhbmdl LmphdmEJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qKgorICogIEdSVUIgIC0t ICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29m dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCitwYWNrYWdlIG9yZy5nbnUuZ3J1 Yi5mb250dG9vbDsKKworLyoqCisgKiBAYXV0aG9yIGNoYWFjCisgKgorICovCitwdWJsaWMg Y2xhc3MgQ2hhcmFjdGVyUmFuZ2UgeworCXByaXZhdGUgaW50IHN0YXJ0OworCXByaXZhdGUg aW50IGVuZDsKKwkKKwlwdWJsaWMgQ2hhcmFjdGVyUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5k KSB7CisJCXRoaXMuc3RhcnQgPSBzdGFydDsKKwkJdGhpcy5lbmQgPSBlbmQ7CisJfQorCisJ cHVibGljIGludCBnZXRTdGFydCgpIHsKKwkJcmV0dXJuIHN0YXJ0OworCX0KKworCXB1Ymxp YyBpbnQgZ2V0RW5kKCkgeworCQlyZXR1cm4gZW5kOworCX0KKwkKKwlwcm90ZWN0ZWQgYm9v bGVhbiBpc0NvbWJpbmFibGUoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIHsKKwkJaWYgKGdldFN0 YXJ0KCkgPD0gcmFuZ2UuZ2V0U3RhcnQoKSAmJiByYW5nZS5nZXRTdGFydCgpIDw9IGdldEVu ZCgpKQorCQkJcmV0dXJuIHRydWU7CisJCQorCQlpZiAocmFuZ2UuZ2V0U3RhcnQoKSA8PSBn ZXRTdGFydCgpICYmIGdldFN0YXJ0KCkgPD0gcmFuZ2UuZ2V0RW5kKCkpCisJCQlyZXR1cm4g dHJ1ZTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGlzV2l0 aGluUmFuZ2UoaW50IHZhbHVlKSB7CisJCWlmICh2YWx1ZSA+PSBzdGFydCAmJiB2YWx1ZSA8 PSBlbmQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJ cHVibGljIGJvb2xlYW4gY29tYmluZShDaGFyYWN0ZXJSYW5nZSByYW5nZSkgeworCQlpbnQg c3RhcnQ7CisJCWludCBlbmQ7CisJCQorCQlpZiAoISBpc0NvbWJpbmFibGUocmFuZ2UpKQor CQkJcmV0dXJuIGZhbHNlOworCQkKKwkJc3RhcnQgPSBnZXRTdGFydCgpOworCQlpZiAocmFu Z2UuZ2V0U3RhcnQoKSA8IHN0YXJ0KQorCQkJc3RhcnQgPSByYW5nZS5nZXRTdGFydCgpOwor CQkKKwkJZW5kID0gZ2V0RW5kKCk7CisJCWlmIChyYW5nZS5nZXRFbmQoKSA+IGVuZCkKKwkJ CWVuZCA9IHJhbmdlLmdldEVuZCgpOworCQkKKwkJcmV0dXJuIHRydWU7CisJfQorfQpJbmRl eDogdXRpbC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL0NvbnZlcnRlci5q YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9m b250dG9vbC9Db252ZXJ0ZXIuamF2YQkocmV2aXNpb24gMCkKKysrIHV0aWwvZm9udHRvb2wv c3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9Db252ZXJ0ZXIuamF2YQkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwxNjggQEAKKy8qKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJv b3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorICovCitwYWNrYWdlIG9yZy5nbnUuZ3J1Yi5mb250dG9vbDsKKworaW1w b3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsK K2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisK Ky8qKgorICogUHJvZ3JhbSB0byBjb252ZXJ0IEJERiBmb250cyBpbnRvIFBGRjIgZm9udHMg Zm9yIHVzZSB3aXRoIEdSVUIuCisgKi8KK3B1YmxpYyBjbGFzcyBDb252ZXJ0ZXIgeworICAg IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaWYg KGFyZ3MubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgcHJpbnRVc2FnZUFuZEV4aXQoKTsK KyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBpbiA9IG51bGw7CisgICAgICAgIFN0cmlu ZyBvdXQgPSBudWxsOworICAgICAgICBMaXN0IDxDaGFyYWN0ZXJSYW5nZT4gcmFuZ2VMaXN0 ID0gbmV3IEFycmF5TGlzdDxDaGFyYWN0ZXJSYW5nZT4oKTsKKworICAgICAgICB0cnkgewor ICAgICAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykgeworCQkJCWlmIChhcmcuc3Rh cnRzV2l0aCgiLS0iKSkgeworCQkJCQlTdHJpbmcgb3B0aW9uOworCQkJCQlTdHJpbmcgdmFs dWU7CisJCQkJCWludCBlcXVhbHNQb3MgPSBhcmcuaW5kZXhPZignPScpOworCQkJCQlpZiAo ZXF1YWxzUG9zIDwgMCkgeworCQkJCQkJb3B0aW9uID0gYXJnLnN1YnN0cmluZygyKTsKKwkJ CQkJCXZhbHVlID0gbnVsbDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW9wdGlvbiA9IGFyZy5z dWJzdHJpbmcoMiwgZXF1YWxzUG9zKTsKKwkJCQkJCXZhbHVlID0gYXJnLnN1YnN0cmluZyhl cXVhbHNQb3MgKyAxKTsKKwkJCQkJfQorCisJCQkJCWlmICgiaW4iLmVxdWFscyhvcHRpb24p KSB7CisJCQkJCQlpZiAodmFsdWUgPT0gbnVsbCkKKwkJCQkJCQl0aHJvdyBuZXcgQ29tbWFu ZExpbmVFeGNlcHRpb24ob3B0aW9uCisJCQkJCQkJCQkrICIgb3B0aW9uIHJlcXVpcmVzIGEg dmFsdWUuIik7CisJCQkJCQlpbiA9IHZhbHVlOworCQkJCQl9IGVsc2UgaWYgKCJvdXQiLmVx dWFscyhvcHRpb24pKSB7CisJCQkJCQlpZiAodmFsdWUgPT0gbnVsbCkKKwkJCQkJCQl0aHJv dyBuZXcgQ29tbWFuZExpbmVFeGNlcHRpb24ob3B0aW9uCisJCQkJCQkJCQkrICIgb3B0aW9u IHJlcXVpcmVzIGEgdmFsdWUuIik7CisJCQkJCQlvdXQgPSB2YWx1ZTsKKwkJCQkJfQorCQkJ CX0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoIjB4IikpIHsKKwkJCQkJLy8gUmFuZ2Ugc3Bl Y2lmaWVyCisJCQkJCVN0cmluZyBzdHJSYW5nZVtdID0gYXJnLnNwbGl0KCItIik7CisKKwkJ CQkJaWYgKHN0clJhbmdlLmxlbmd0aCA+IDApIHsKKwkJCQkJCWJvb2xlYW4gdmFsaWRSYW5n ZSA9IHRydWU7CisJCQkJCQlpbnQgc3RhcnQ7CisJCQkJCQlpbnQgZW5kOworCisJCQkJCQlp ZiAoc3RyUmFuZ2UubGVuZ3RoID4gMikgeworCQkJCQkJCXZhbGlkUmFuZ2UgPSBmYWxzZTsK KwkJCQkJCX0gZWxzZSBpZiAoc3RyUmFuZ2UubGVuZ3RoID09IDIKKwkJCQkJCQkJJiYgIXN0 clJhbmdlWzFdLnN0YXJ0c1dpdGgoIjB4IikpIHsKKwkJCQkJCQl2YWxpZFJhbmdlID0gZmFs c2U7CisJCQkJCQl9IGVsc2UKKwkJCQkJCXsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlzdGFy dCA9IEludGVnZXIucGFyc2VJbnQoc3RyUmFuZ2VbMF0KKwkJCQkJCQkJCQkuc3Vic3RyaW5n KDIpLCAxNik7CisJCQkJCQkJCWVuZCA9IHN0YXJ0OworCisJCQkJCQkJCWlmIChzdHJSYW5n ZS5sZW5ndGggPT0gMikgeworCQkJCQkJCQkJZW5kID0gSW50ZWdlci5wYXJzZUludChzdHJS YW5nZVsxXQorCQkJCQkJCQkJCQkuc3Vic3RyaW5nKDIpLCAxNik7CisJCQkJCQkJCX0KKwkJ CQkJCQkJCisJCQkJCQkJCUNoYXJhY3RlclJhbmdlIHJhbmdlID0gbmV3IENoYXJhY3RlclJh bmdlKAorCQkJCQkJCQkJCXN0YXJ0LCBlbmQpOworCQkJCQkJCQlib29sZWFuIGFkZCA9IHRy dWU7CisJCQkJCQkJCQorCQkJCQkJCQkvLyBGaXJzdCwgdHJ5IHRvIGNvbWJpbmUgcmFuZ2Ug dG8gZXhpc3RpbmcgcmFuZ2VzCisJCQkJCQkJCWZvciAoSXRlcmF0b3I8Q2hhcmFjdGVyUmFu Z2U+IGl0ZXIgPSByYW5nZUxpc3QuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7ICkKKwkJ CQkJCQkJeworCQkJCQkJCQkJQ2hhcmFjdGVyUmFuZ2UgaXRlbSA9IGl0ZXIubmV4dCgpOwor CQkJCQkJCQkJCisJCQkJCQkJCQlpZiAocmFuZ2UuZXF1YWxzKGl0ZW0pKQorCQkJCQkJCQkJ eworCQkJCQkJCQkJCWFkZCA9IGZhbHNlOworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJ CQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCQlpZiAoaXRlbS5jb21iaW5lKHJhbmdlKSkKKwkJ CQkJCQkJCXsKKwkJCQkJCQkJCQkvLyBTdGFydCBmcm9tIGJlZ2lubmluZyBvZiBsaXN0IHVz aW5nIGNvbWJpbmVkIHJhbmdlCisJCQkJCQkJCQkJcmFuZ2UgPSBpdGVtOworCQkJCQkJCQkJ CWl0ZXIgPSByYW5nZUxpc3QuaXRlcmF0b3IoKTsKKwkJCQkJCQkJCQlhZGQgPSBmYWxzZTsK KwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQkKKwkJCQkJCQkJLy8gSWYgcmFuZ2Ug Y291bGQgbm90IGJlIGNvbWJpbmVkIG9yIG5vIG1hdGNoaW5nIHJhbmdlLCBhZGQgaXQgdG8g dGhlIGxpc3QKKwkJCQkJCQkJaWYgKGFkZCkKKwkJCQkJCQkJeworCQkJCQkJCQkJcmFuZ2VM aXN0LmFkZChyYW5nZSk7CisJCQkJCQkJCX0KKworCQkJCQkJCX0gY2F0Y2ggKE51bWJlckZv cm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJCXZhbGlkUmFuZ2UgPSBmYWxzZTsKKwkJCQkJ CQl9CisKKwkJCQkJCX0KKworCQkJCQkJaWYgKCF2YWxpZFJhbmdlKSB7CisJCQkJCQkJdGhy b3cgbmV3IENvbW1hbmRMaW5lRXhjZXB0aW9uKCJJbnZhbGlkIHJhbmdlIGAiCisJCQkJCQkJ CQkrIGFyZyArICInLiIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1hbmRMaW5lRXhjZXB0aW9uKCJOb24tb3B0 aW9uIGFyZ3VtZW50IGAiICsgYXJnICsgIicuIik7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluID09IG51bGwgfHwgb3V0ID09IG51bGwp IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZExpbmVFeGNlcHRpb24oIkJv dGggLS1pbj1YIGFuZCAtLW91dD1ZIG11c3QgYmUgc3BlY2lmaWVkLiIpOworICAgICAgICAg ICAgfQorICAgICAgICB9IGNhdGNoIChDb21tYW5kTGluZUV4Y2VwdGlvbiBlKSB7CisgICAg ICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkp OworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICB0 cnkgeworICAgICAgICAgICAgLy8gUmVhZCBCREYuCisgICAgICAgICAgICBGb250IGZvbnQg PSBCREZMb2FkZXIubG9hZEZvbnRGaWxlKGluKTsKKworICAgICAgICAgICAgLy8gV3JpdGUg UEZGMi4KKyAgICAgICAgICAgIG5ldyBQRkYyV3JpdGVyKG91dCkud3JpdGVGb250KGZvbnQs IHJhbmdlTGlzdCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAg ICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSS9PIGVycm9yIGNvbnZlcnRpbmcgZm9udDog IiArIGUpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAg IFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0 aWMgY2xhc3MgQ29tbWFuZExpbmVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAg ICAgICBwdWJsaWMgQ29tbWFuZExpbmVFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKyAg ICAgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJp dmF0ZSBzdGF0aWMgdm9pZCBwcmludFVzYWdlQW5kRXhpdCgpIHsKKyAgICAgICAgU3lzdGVt LmVyci5wcmludGxuKCJHTlUgR1JVQiBGb250IENvbnZlcnNpb24gVG9vbCIpOworICAgICAg ICBTeXN0ZW0uZXJyLnByaW50bG4oKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJV c2FnZTogQ29udmVydGVyIC0taW49SU4uYmRmIC0tb3V0PU9VVC5wZjIiKTsKKyAgICAgICAg U3lzdGVtLmVyci5wcmludGxuKCk7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0K K30KSW5kZXg6IHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9Gb250 LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gdXRpbC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnVi L2ZvbnR0b29sL0ZvbnQuamF2YQkocmV2aXNpb24gMCkKKysrIHV0aWwvZm9udHRvb2wvc3Jj L29yZy9nbnUvZ3J1Yi9mb250dG9vbC9Gb250LmphdmEJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsMTIzIEBACisvKioKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVy CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdS VUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAqLworcGFja2FnZSBvcmcuZ251LmdydWIuZm9udHRvb2w7CisKK2ltcG9ydCBqYXZh LnV0aWwuVHJlZU1hcDsKKworcHVibGljIGNsYXNzIEZvbnQgeworICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgaW50IFVOS05PV05fUE9JTlRfU0laRSA9IC0xOworCisgICAgcHJpdmF0ZSBU cmVlTWFwPEludGVnZXIsIEdseXBoPiBnbHlwaHM7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmFt aWx5OworICAgIHByaXZhdGUgYm9vbGVhbiBib2xkOworICAgIHByaXZhdGUgYm9vbGVhbiBp dGFsaWM7CisgICAgcHJpdmF0ZSBpbnQgcG9pbnRTaXplOworICAgIHByaXZhdGUgaW50IG1h eENoYXJXaWR0aDsKKyAgICBwcml2YXRlIGludCBtYXhDaGFySGVpZ2h0OworICAgIHByaXZh dGUgaW50IGFzY2VudDsKKyAgICBwcml2YXRlIGludCBkZXNjZW50OworCisgICAgcHVibGlj IEZvbnQoKSB7CisgICAgICAgIGdseXBocyA9IG5ldyBUcmVlTWFwPEludGVnZXIsIEdseXBo PigpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmFtaWx5KCkgeworICAgICAg ICByZXR1cm4gZmFtaWx5OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEZhbWlseShT dHJpbmcgZmFtaWx5KSB7CisgICAgICAgIHRoaXMuZmFtaWx5ID0gZmFtaWx5OworICAgIH0K KworICAgIHB1YmxpYyBib29sZWFuIGlzQm9sZCgpIHsKKyAgICAgICAgcmV0dXJuIGJvbGQ7 CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Qm9sZChib29sZWFuIGJvbGQpIHsKKyAg ICAgICAgdGhpcy5ib2xkID0gYm9sZDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBp c0l0YWxpYygpIHsKKyAgICAgICAgcmV0dXJuIGl0YWxpYzsKKyAgICB9CisKKyAgICBwdWJs aWMgdm9pZCBzZXRJdGFsaWMoYm9vbGVhbiBpdGFsaWMpIHsKKyAgICAgICAgdGhpcy5pdGFs aWMgPSBpdGFsaWM7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRQb2ludFNpemUoKSB7 CisgICAgICAgIHJldHVybiBwb2ludFNpemU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQg c2V0UG9pbnRTaXplKGludCBwb2ludFNpemUpIHsKKyAgICAgICAgdGhpcy5wb2ludFNpemUg PSBwb2ludFNpemU7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRNYXhDaGFyV2lkdGgo KSB7CisgICAgICAgIHJldHVybiBtYXhDaGFyV2lkdGg7CisgICAgfQorCisgICAgcHVibGlj IHZvaWQgc2V0TWF4Q2hhcldpZHRoKGludCBtYXhDaGFyV2lkdGgpIHsKKyAgICAgICAgdGhp cy5tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lkdGg7CisgICAgfQorCisgICAgcHVibGljIGlu dCBnZXRNYXhDaGFySGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gbWF4Q2hhckhlaWdodDsK KyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRNYXhDaGFySGVpZ2h0KGludCBtYXhDaGFy SGVpZ2h0KSB7CisgICAgICAgIHRoaXMubWF4Q2hhckhlaWdodCA9IG1heENoYXJIZWlnaHQ7 CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRBc2NlbnQoKSB7CisgICAgICAgIHJldHVy biBhc2NlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QXNjZW50KGludCBhc2Nl bnQpIHsKKyAgICAgICAgdGhpcy5hc2NlbnQgPSBhc2NlbnQ7CisgICAgfQorCisgICAgcHVi bGljIGludCBnZXREZXNjZW50KCkgeworICAgICAgICByZXR1cm4gZGVzY2VudDsKKyAgICB9 CisKKyAgICBwdWJsaWMgdm9pZCBzZXREZXNjZW50KGludCBkZXNjZW50KSB7CisgICAgICAg IHRoaXMuZGVzY2VudCA9IGRlc2NlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHV0 R2x5cGgoaW50IGNvZGVQb2ludCwgR2x5cGggZ2x5cGgpIHsKKyAgICAgICAgZ2x5cGhzLnB1 dChjb2RlUG9pbnQsIGdseXBoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVHJlZU1hcDxJbnRl Z2VyLCBHbHlwaD4gZ2V0R2x5cGhzKCkgeworICAgICAgICByZXR1cm4gZ2x5cGhzOworICAg IH0KKworICAgIHB1YmxpYyBHbHlwaCBnZXRHbHlwaChpbnQgY29kZVBvaW50KSB7CisgICAg ICAgIHJldHVybiBnbHlwaHMuZ2V0KGNvZGVQb2ludCk7CisgICAgfQorCisgICAgcHVibGlj IFN0cmluZyBnZXRTdGFuZGFyZE5hbWUoKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbmFt ZSA9IG5ldyBTdHJpbmdCdWlsZGVyKGdldEZhbWlseSgpKTsKKyAgICAgICAgaWYgKGlzQm9s ZCgpKSBuYW1lLmFwcGVuZCgiIEJvbGQiKTsKKyAgICAgICAgaWYgKGlzSXRhbGljKCkpIG5h bWUuYXBwZW5kKCIgSXRhbGljIik7CisgICAgICAgIG5hbWUuYXBwZW5kKCcgJyk7CisgICAg ICAgIG5hbWUuYXBwZW5kKGdldFBvaW50U2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG5hbWUu dG9TdHJpbmcoKTsKKyAgICB9Cit9CkluZGV4OiB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251 L2dydWIvZm9udHRvb2wvR2x5cGguamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1dGlsL2ZvbnR0 b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRvb2wvR2x5cGguamF2YQkocmV2aXNpb24gMCkK KysrIHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUvZ3J1Yi9mb250dG9vbC9HbHlwaC5qYXZh CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorLyoqCisgKiAgR1JVQiAgLS0gIEdS YW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KK3BhY2thZ2Ugb3JnLmdudS5ncnViLmZv bnR0b29sOworCitwdWJsaWMgY2xhc3MgR2x5cGggeworICAgIHByaXZhdGUgZmluYWwgaW50 IGNvZGVQb2ludDsKKyAgICBwcml2YXRlIGZpbmFsIGludCB3aWR0aDsKKyAgICBwcml2YXRl IGZpbmFsIGludCBoZWlnaHQ7CisKKyAgICAvLyBUaGVzZSBkZWZpbmUgdGhlIGFtb3VudHMg dG8gc2hpZnQgdGhlIGNoYXJhY3RlciBiaXRtYXAgYnkKKyAgICAvLyBiZWZvcmUgZHJhd2lu ZyBpdC4gIFNlZQorICAgIC8vICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL2Rldm5ldC9mb250 L3BkZnMvNTAwNS5CREZfU3BlYy5wZGYKKyAgICAvLyBhbmQKKyAgICAvLyAgICBodHRwOi8v d3d3LmxpbnV4YmFiYmxlLmNvbS9kb2N1bWVudGF0aW9uL3gvYmRmLworICAgIC8vIGZvciBl eHBsYW5hdG9yeSBmaWd1cmVzLgorICAgIHByaXZhdGUgZmluYWwgaW50IGJib3g7CisgICAg cHJpdmF0ZSBmaW5hbCBpbnQgYmJveTsKKworICAgIC8vIE51bWJlciBvZiBwaXhlbHMgdG8g YWR2YW5jZSBob3Jpem9udGFsbHkgZnJvbSB0aGlzIGNoYXJhY3RlcidzIG9yaWdpbgorICAg IC8vIHRvIHRoZSBvcmlnaW4gb2YgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgIHByaXZhdGUg ZmluYWwgaW50IGRldmljZVdpZHRoOworCisgICAgLy8gUm93LW1ham9yIG9yZGVyLCBubyBw YWRkaW5nLiAgUm93cyBjYW4gYnJlYWsgd2l0aGluIGEgYnl0ZS4KKyAgICAvLyBNU2IgaXMg Zmlyc3QgKGxlZnRtb3N0L3VwcGVybW9zdCkgcGl4ZWwuCisgICAgcHJpdmF0ZSBmaW5hbCBi eXRlW10gYml0bWFwOworCisgICAgcHVibGljIEdseXBoKGludCBjb2RlUG9pbnQsIGludCB3 aWR0aCwgaW50IGhlaWdodCwgaW50IGJib3gsIGludCBiYm95LCBpbnQgZGV2aWNlV2lkdGgp IHsKKyAgICAgICAgdGhpcyhjb2RlUG9pbnQsIHdpZHRoLCBoZWlnaHQsIGJib3gsIGJib3ks IGRldmljZVdpZHRoLAorICAgICAgICAgICAgIG5ldyBieXRlWyh3aWR0aCAqIGhlaWdodCAr IDcpIC8gOF0pOworICAgIH0KKworICAgIHB1YmxpYyBHbHlwaChpbnQgY29kZVBvaW50LCBp bnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIGludCBiYm94LCBpbnQg YmJveSwgaW50IGRldmljZVdpZHRoLAorICAgICAgICAgICAgICAgICBieXRlW10gYml0bWFw KSB7CisgICAgICAgIHRoaXMuY29kZVBvaW50ID0gY29kZVBvaW50OworICAgICAgICB0aGlz LndpZHRoID0gd2lkdGg7CisgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAg ICB0aGlzLmJib3kgPSBiYm95OworICAgICAgICB0aGlzLmJib3ggPSBiYm94OworICAgICAg ICB0aGlzLmRldmljZVdpZHRoID0gZGV2aWNlV2lkdGg7CisgICAgICAgIHRoaXMuYml0bWFw ID0gYml0bWFwOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBpeGVsKGludCB4LCBp bnQgeSwgYm9vbGVhbiB2YWx1ZSkgeworICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAgfHwg eCA+PSB3aWR0aCB8fCB5ID49IGhlaWdodCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxl Z2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHBp eGVsIGxvY2F0aW9uICgiICsgeCArICIsICIgKyB5ICsgIikgZm9yICIKKyAgICAgICAgICAg ICAgICAgICAgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICIgZ2x5cGgiKTsKKworICAgICAg ICBpbnQgYml0SW5kZXggPSB5ICogd2lkdGggKyB4OworICAgICAgICBpbnQgYnl0ZUluZGV4 ID0gYml0SW5kZXggLyA4OworICAgICAgICBpbnQgYml0UG9zID0gYml0SW5kZXggJSA4Owor ICAgICAgICBpbnQgdiA9IHZhbHVlID8gMHg4MCA+Pj4gYml0UG9zIDogMDsKKyAgICAgICAg aW50IG1hc2sgPSB+KDB4ODAgPj4+IGJpdFBvcyk7CisgICAgICAgIGJpdG1hcFtieXRlSW5k ZXhdID0gKGJ5dGUpICgoYml0bWFwW2J5dGVJbmRleF0gJiBtYXNrKSB8IHYpOworICAgIH0K KworICAgIHB1YmxpYyBpbnQgZ2V0Q29kZVBvaW50KCkgeworICAgICAgICByZXR1cm4gY29k ZVBvaW50OworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7CisgICAgICAg IHJldHVybiB3aWR0aDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsK KyAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEJi b3goKSB7CisgICAgICAgIHJldHVybiBiYm94OworICAgIH0KKworICAgIHB1YmxpYyBpbnQg Z2V0QmJveSgpIHsKKyAgICAgICAgcmV0dXJuIGJib3k7CisgICAgfQorCisgICAgcHVibGlj IGludCBnZXREZXZpY2VXaWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZVdpZHRoOwor ICAgIH0KKworICAgIHB1YmxpYyBieXRlW10gZ2V0Qml0bWFwKCkgeworICAgICAgICByZXR1 cm4gYml0bWFwOworICAgIH0KK30KSW5kZXg6IHV0aWwvZm9udHRvb2wvc3JjL29yZy9nbnUv Z3J1Yi9mb250dG9vbC9QRkYyU2VjdGlvbnMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1dGls L2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRvb2wvUEZGMlNlY3Rpb25zLmphdmEJ KHJldmlzaW9uIDApCisrKyB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9udHRv b2wvUEZGMlNlY3Rpb25zLmphdmEJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8q KgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmln aHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBH UlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCitwYWNr YWdlIG9yZy5nbnUuZ3J1Yi5mb250dG9vbDsKKworLyoqCisgKiBTZWN0aW9uIG5hbWUgY29u c3RhbnRzIGZvciB0aGUgUEZGMiBmaWxlIGZvcm1hdC4KKyAqLworcHVibGljIGNsYXNzIFBG RjJTZWN0aW9ucyB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFID0gIkZJTEUiOwor ICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9OQU1FID0gIk5BTUUiOworICAgIHN0YXRp YyBmaW5hbCBTdHJpbmcgRk9OVF9GQU1JTFkgPSAiRkFNSSI7CisgICAgc3RhdGljIGZpbmFs IFN0cmluZyBGT05UX1dFSUdIVCA9ICJXRUlHIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5n IEZPTlRfU0xBTlQgPSAiU0xBTiI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX1BP SU5UX1NJWkUgPSAiUFRTWiI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfQ0hBUl9X SURUSCA9ICJNQVhXIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIE1BWF9DSEFSX0hFSUdI VCA9ICJNQVhIIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRfQVNDRU5UID0gIkFT Q0UiOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9ERVNDRU5UID0gIkRFU0MiOwor ICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hBUl9JTkRFWCA9ICJDSElYIjsKKyAgICBzdGF0 aWMgZmluYWwgU3RyaW5nIFJFTUFJTkRFUl9JU19EQVRBID0gIkRBVEEiOworfQpJbmRleDog dXRpbC9mb250dG9vbC9zcmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL1BGRjJXcml0ZXIuamF2 YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSB1dGlsL2ZvbnR0b29sL3NyYy9vcmcvZ251L2dydWIvZm9u dHRvb2wvUEZGMldyaXRlci5qYXZhCShyZXZpc2lvbiAwKQorKysgdXRpbC9mb250dG9vbC9z cmMvb3JnL2dudS9ncnViL2ZvbnR0b29sL1BGRjJXcml0ZXIuamF2YQkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwxNTQgQEAKKy8qKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJv b3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorICovCitwYWNrYWdlIG9yZy5nbnUuZ3J1Yi5mb250dG9vbDsKKworaW1w b3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9F eGNlcHRpb247CitpbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOworaW1wb3J0IGph dmEudXRpbC5MaXN0OworCisvLyBUT0RPIEFkZCBERUZMQVRFIGNvbXByZXNzZWQgYmxvY2tz IG9mIGNoYXJhY3RlcnMuCitwdWJsaWMgY2xhc3MgUEZGMldyaXRlciB7CisgICAgcHJpdmF0 ZSBSYW5kb21BY2Nlc3NGaWxlIGY7CisgICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVudFNlY3Rp b247CisgICAgcHJpdmF0ZSBsb25nIGN1cnJlbnRTZWN0aW9uU3RhcnQ7CisKKyAgICBwdWJs aWMgUEZGMldyaXRlcihTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNl cHRpb24geworICAgICAgICB0aGlzLmYgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZShmaWxlbmFt ZSwgInJ3Iik7CisgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb24gPSBudWxsOworICAgICAg ICB0aGlzLmN1cnJlbnRTZWN0aW9uU3RhcnQgPSAtMTsKKyAgICB9CisKKyAgICBwdWJsaWMg dm9pZCB3cml0ZUZvbnQoRm9udCBmb250LCBMaXN0PENoYXJhY3RlclJhbmdlPiByYW5nZUxp c3QpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIENsZWFyIGV4aXN0aW5nIGZp bGUuCisgICAgCWYuc2V0TGVuZ3RoKDApOworICAgIAkKKyAgICAgICAgLy8gV3JpdGUgZmls ZSB0eXBlIElEIGhlYWRlci4KKyAgICAgICAgd3JpdGVTZWN0aW9uKFBGRjJTZWN0aW9ucy5G SUxFLCAiUEZGMiIpOworCisgICAgICAgIHdyaXRlU2VjdGlvbihQRkYyU2VjdGlvbnMuRk9O VF9OQU1FLCBmb250LmdldFN0YW5kYXJkTmFtZSgpKTsKKyAgICAgICAgd3JpdGVTZWN0aW9u KFBGRjJTZWN0aW9ucy5GT05UX0ZBTUlMWSwgZm9udC5nZXRGYW1pbHkoKSk7CisgICAgICAg IHdyaXRlU2VjdGlvbihQRkYyU2VjdGlvbnMuRk9OVF9XRUlHSFQsIGZvbnQuaXNCb2xkKCkg PyAiYm9sZCIgOiAibm9ybWFsIik7CisgICAgICAgIHdyaXRlU2VjdGlvbihQRkYyU2VjdGlv bnMuRk9OVF9TTEFOVCwgZm9udC5pc0l0YWxpYygpID8gIml0YWxpYyIgOiAibm9ybWFsIik7 CisgICAgICAgIGlmIChmb250LmdldFBvaW50U2l6ZSgpICE9IEZvbnQuVU5LTk9XTl9QT0lO VF9TSVpFKQorICAgICAgICAgICAgd3JpdGVTaG9ydFNlY3Rpb24oUEZGMlNlY3Rpb25zLkZP TlRfUE9JTlRfU0laRSwgZm9udC5nZXRQb2ludFNpemUoKSk7CisKKyAgICAgICAgLy8gQ29u c3RydWN0IGNoYXJhY3RlciBkZWZpbml0aW9ucy4KKyAgICAgICAgQ2hhckRlZnMgY2hhckRl ZnMgPSBuZXcgQ2hhckRlZnMoZm9udCk7CisgICAgICAgIGNoYXJEZWZzLmJ1aWxkRGVmaW5p dGlvbnMocmFuZ2VMaXN0KTsKKworICAgICAgICAvLyBXcml0ZSBtYXggY2hhcmFjdGVyIHdp ZHRoIGFuZCBoZWlnaHQgbWV0cmljcy4KKyAgICAgICAgd3JpdGVTaG9ydFNlY3Rpb24oUEZG MlNlY3Rpb25zLk1BWF9DSEFSX1dJRFRILCBjaGFyRGVmcy5nZXRNYXhDaGFyV2lkdGgoKSk7 CisgICAgICAgIHdyaXRlU2hvcnRTZWN0aW9uKFBGRjJTZWN0aW9ucy5NQVhfQ0hBUl9IRUlH SFQsIGNoYXJEZWZzLmdldE1heENoYXJIZWlnaHQoKSk7CisgICAgICAgIHdyaXRlU2hvcnRT ZWN0aW9uKFBGRjJTZWN0aW9ucy5GT05UX0FTQ0VOVCwgZm9udC5nZXRBc2NlbnQoKSk7Cisg ICAgICAgIHdyaXRlU2hvcnRTZWN0aW9uKFBGRjJTZWN0aW9ucy5GT05UX0RFU0NFTlQsIGZv bnQuZ2V0RGVzY2VudCgpKTsKKworICAgICAgICAvLyBXcml0ZSBjaGFyYWN0ZXIgaW5kZXgg d2l0aCBwb2ludGVycyB0byB0aGUgY2hhcmFjdGVyIGRlZmluaXRpb25zLgorICAgICAgICBi ZWdpblNlY3Rpb24oUEZGMlNlY3Rpb25zLkNIQVJfSU5ERVgpOworCisgICAgICAgIC8vIERl dGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHNvIHdlIGNhbiBwcm9wZXJseSByZWZl ciB0byB0aGUKKyAgICAgICAgLy8gY2hhcmFjdGVyIGRlZmluaXRpb24gb2Zmc2V0IGluIHRo ZSBpbmRleC4gIFRoZSBhY3R1YWwgbnVtYmVyIG9mCisgICAgICAgIC8vIGJ5dGVzIHdyaXR0 ZW4gaXMgY29tcGFyZWQgdG8gdGhlIGNhbGN1bGF0ZWQgdmFsdWUgdG8gZW5zdXJlIHdlCisg ICAgICAgIC8vIGFyZSBjb3JyZWN0LgorICAgICAgICBmaW5hbCBpbnQgaW5kZXhTdGFydCA9 IChpbnQpIGYuZ2V0RmlsZVBvaW50ZXIoKTsKKyAgICAgICAgZmluYWwgaW50IGNhbGN1bGF0 ZWRJbmRleExlbmd0aCA9CisgICAgICAgICAgICAgICAgY2hhckRlZnMuZ2V0SW5kZXhTaXpl KCkgKiAoNCArIDEgKyA0KTsKKyAgICAgICAgZmluYWwgaW50IGNoYXJEZWZTdGFydCA9IGlu ZGV4U3RhcnQgKyBjYWxjdWxhdGVkSW5kZXhMZW5ndGggKyA4OworCisgICAgICAgIGZvciAo Q2hhclN0b3JhZ2VJbmZvIHN0b3JhZ2VJbmZvIDogY2hhckRlZnMuZ2V0Q2hhckluZGV4KCku dmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGYud3JpdGVJbnQoc3RvcmFnZUluZm8uZ2V0Q29k ZVBvaW50KCkpOworICAgICAgICAgICAgZi53cml0ZUJ5dGUoMCk7ICAgLy8gU3RvcmFnZSBm bGFnczogYml0cyAxLi4wID0gMDBiIDogdW5jb21wcmVzc2VkLgorICAgICAgICAgICAgZi53 cml0ZUludChjaGFyRGVmU3RhcnQgKyBzdG9yYWdlSW5mby5nZXRGaWxlT2Zmc2V0KCkpOwor ICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IGluZGV4RW5kID0gKGludCkgZi5nZXRG aWxlUG9pbnRlcigpOworICAgICAgICBpZiAoaW5kZXhFbmQgLSBpbmRleFN0YXJ0ICE9IGNh bGN1bGF0ZWRJbmRleExlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF eGNlcHRpb24oIkluY29ycmVjdCBpbmRleCBsZW5ndGggY2FsY3VsYXRlZCwgY2FsYz0iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNhbGN1bGF0ZWRJbmRl eExlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFj dHVhbD0iICsgKGluZGV4RW5kIC0gaW5kZXhTdGFydCkpOworICAgICAgICB9CisgICAgICAg IGVuZFNlY3Rpb24oUEZGMlNlY3Rpb25zLkNIQVJfSU5ERVgpOworCisgICAgICAgIGYud3Jp dGVCeXRlcyhQRkYyU2VjdGlvbnMuUkVNQUlOREVSX0lTX0RBVEEpOworICAgICAgICBmLndy aXRlSW50KC0xKTsgICAgIC8vIERhdGEgdGFrZXMgdXAgdGhlIHJlc3Qgb2YgdGhlIGZpbGUu CisgICAgICAgIGYud3JpdGUoY2hhckRlZnMuZ2V0RGVmaW5pdGlvbkRhdGEoKSk7CisKKyAg ICAgICAgZi5jbG9zZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBiZWdpblNlY3Rp b24oU3RyaW5nIHNlY3Rpb25OYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2 ZXJpZnlPa1RvQmVnaW5TZWN0aW9uKHNlY3Rpb25OYW1lKTsKKworICAgICAgICBmLndyaXRl Qnl0ZXMoc2VjdGlvbk5hbWUpOworICAgICAgICBmLndyaXRlSW50KC0xKTsgICAgIC8vIFBs YWNlaG9sZGVyIGZvciB0aGUgc2VjdGlvbiBsZW5ndGguCisgICAgICAgIGN1cnJlbnRTZWN0 aW9uID0gc2VjdGlvbk5hbWU7CisgICAgICAgIGN1cnJlbnRTZWN0aW9uU3RhcnQgPSBmLmdl dEZpbGVQb2ludGVyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuZFNlY3Rpb24o U3RyaW5nIHNlY3Rpb25OYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2ZXJp ZnlPa1RvRW5kU2VjdGlvbihzZWN0aW9uTmFtZSk7CisKKyAgICAgICAgbG9uZyBzZWN0aW9u RW5kID0gZi5nZXRGaWxlUG9pbnRlcigpOworICAgICAgICBsb25nIHNlY3Rpb25MZW5ndGgg PSBzZWN0aW9uRW5kIC0gY3VycmVudFNlY3Rpb25TdGFydDsKKyAgICAgICAgZi5zZWVrKGN1 cnJlbnRTZWN0aW9uU3RhcnQgLSA0KTsKKyAgICAgICAgZi53cml0ZUludCgoaW50KSBzZWN0 aW9uTGVuZ3RoKTsKKyAgICAgICAgZi5zZWVrKHNlY3Rpb25FbmQpOworICAgICAgICBjdXJy ZW50U2VjdGlvbiA9IG51bGw7CisgICAgICAgIGN1cnJlbnRTZWN0aW9uU3RhcnQgPSAtMTsK KyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmVyaWZ5T2tUb0JlZ2luU2VjdGlvbihTdHJp bmcgc2VjdGlvbk5hbWUpIHsKKyAgICAgICAgaWYgKHNlY3Rpb25OYW1lLmxlbmd0aCgpICE9 IDQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAor ICAgICAgICAgICAgICAgICAgICAiU2VjdGlvbiBuYW1lcyBtdXN0IGJlIDQgY2hhcmFjdGVy czogYCIgKyBzZWN0aW9uTmFtZSArICInLiIpOworICAgICAgICBpZiAoY3VycmVudFNlY3Rp b24gIT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp b24oCisgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHN0YXJ0IGAiICsgc2VjdGlv bk5hbWUKKyAgICAgICAgICAgICAgICAgICAgKyAiJyBzZWN0aW9uIGJlZm9yZSBlbmRpbmcg dGhlIHByZXZpb3VzIHNlY3Rpb24gYCIKKyAgICAgICAgICAgICAgICAgICAgKyBjdXJyZW50 U2VjdGlvbiArICInLiIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2ZXJpZnlPa1Rv RW5kU2VjdGlvbihTdHJpbmcgc2VjdGlvbk5hbWUpIHsKKyAgICAgICAgaWYgKHNlY3Rpb25O YW1lLmxlbmd0aCgpICE9IDQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl RXhjZXB0aW9uKCJJbnZhbGlkIHNlY3Rpb24gbmFtZSAnIiArIHNlY3Rpb25OYW1lCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIic7IG11c3QgYmUg NCBjaGFyYWN0ZXJzLiIpOworICAgICAgICBpZiAoY3VycmVudFNlY3Rpb24gPT0gbnVsbCkK KyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAg ICAgICAgICAgICAgICJBdHRlbXB0IHRvIGVuZCBzZWN0aW9uIGAiICsgc2VjdGlvbk5hbWUK KyAgICAgICAgICAgICAgICAgICAgKyAiJyB3aGVuIG5vIHNlY3Rpb24gYWN0aXZlLiIpOwor ICAgICAgICBpZiAoIXNlY3Rpb25OYW1lLmVxdWFscyhjdXJyZW50U2VjdGlvbikpCisgICAg ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAg ICAgICAgICAiQXR0ZW1wdCB0byBlbmQgYCIgKyBzZWN0aW9uTmFtZQorICAgICAgICAgICAg ICAgICAgICArICInIHNlY3Rpb24gZHVyaW5nIGFjdGl2ZSBzZWN0aW9uIGAiCisgICAgICAg ICAgICAgICAgICAgICsgY3VycmVudFNlY3Rpb24gKyAiJy4iKTsKKyAgICB9CisKKyAgICBw cml2YXRlIHZvaWQgd3JpdGVTZWN0aW9uKFN0cmluZyBzZWN0aW9uTmFtZSwgU3RyaW5nIGNv bnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2ZXJpZnlPa1RvQmVnaW5T ZWN0aW9uKHNlY3Rpb25OYW1lKTsKKyAgICAgICAgZi53cml0ZUJ5dGVzKHNlY3Rpb25OYW1l KTsKKyAgICAgICAgZi53cml0ZUludChjb250ZW50cy5sZW5ndGgoKSk7CisgICAgICAgIGYu d3JpdGVCeXRlcyhjb250ZW50cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRl U2hvcnRTZWN0aW9uKFN0cmluZyBzZWN0aW9uTmFtZSwgaW50IHZhbHVlKSB0aHJvd3MgSU9F eGNlcHRpb24geworICAgICAgICB2ZXJpZnlPa1RvQmVnaW5TZWN0aW9uKHNlY3Rpb25OYW1l KTsKKyAgICAgICAgZi53cml0ZUJ5dGVzKHNlY3Rpb25OYW1lKTsKKyAgICAgICAgZi53cml0 ZUludCgyKTsKKyAgICAgICAgZi53cml0ZVNob3J0KHZhbHVlKTsKKyAgICB9Cit9CkluZGV4 OiB1dGlsL2dydWIuZC8wMF9oZWFkZXIuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXRpbC9ncnVi LmQvMDBfaGVhZGVyLmluCShyZXZpc2lvbiAxOTM0KQorKysgdXRpbC9ncnViLmQvMDBfaGVh ZGVyLmluCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgZmkKIAogICAg IGNhdCA8PCBFT0YKLWlmIGZvbnQgYG1ha2Vfc3lzdGVtX3BhdGhfcmVsYXRpdmVfdG9faXRz X3Jvb3QgJHtHUlVCX0ZPTlRfUEFUSH1gIDsgdGhlbgoraWYgbG9hZGZvbnQgYG1ha2Vfc3lz dGVtX3BhdGhfcmVsYXRpdmVfdG9faXRzX3Jvb3QgJHtHUlVCX0ZPTlRfUEFUSH1gIDsgdGhl bgogICBzZXQgZ2Z4bW9kZT0ke0dSVUJfR0ZYTU9ERX0KICAgaW5zbW9kIGdmeHRlcm0KICAg aW5zbW9kICR7dmlkZW9fYmFja2VuZH0KSW5kZXg6IHV0aWwvZ3J1Yi1ta2NvbmZpZ19saWIu aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gdXRpbC9ncnViLW1rY29uZmlnX2xpYi5pbgkocmV2aXNp b24gMTkzNCkKKysrIHV0aWwvZ3J1Yi1ta2NvbmZpZ19saWIuaW4JKHdvcmtpbmcgY29weSkK QEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICMgRklYTUU6IFdlIHByZWZlciBhc2NpaSBiZWNh dXNlIGxvYWRpbmcgY29tcGxldGUgZm9udHMgaXMgdG9vIHNsb3cgKGFuZAogICAgICMgd2Ug ZG9uJ3QgeWV0IHByb3ZpZGUgdGhlIGdldHRleHQgbWFnaWMgdGhhdCB3b3VsZCBtYWtlIHVu aWNvZGUgdXNlZnVsKS4KICAgICBmb3IgYmFzZW5hbWUgaW4gYXNjaWkgdW5pY29kZSB1bmlm b250IDsgZG8KLSAgICAgIHBhdGg9IiR7ZGlyfS8ke2Jhc2VuYW1lfS5wZmYiCisgICAgICBw YXRoPSIke2Rpcn0vJHtiYXNlbmFtZX0ucGYyIgogICAgICAgaWYgaXNfcGF0aF9yZWFkYWJs ZV9ieV9ncnViICR7cGF0aH0gPiAvZGV2L251bGwgOyB0aGVuCiAgICAgICAgIGVjaG8gIiR7 cGF0aH0iCiAgICAgICAgIHJldHVybiAwCg== --------------020205090500050207050607--