From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6670 invoked by alias); 10 Jan 2014 15:05:37 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 6657 invoked by uid 89); 10 Jan 2014 15:05:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qa0-f47.google.com Received: from mail-qa0-f47.google.com (HELO mail-qa0-f47.google.com) (209.85.216.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 10 Jan 2014 15:05:33 +0000 Received: by mail-qa0-f47.google.com with SMTP id f11so4008101qae.6 for ; Fri, 10 Jan 2014 07:05:31 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.49.52.34 with SMTP id q2mr8373012qeo.10.1389366331228; Fri, 10 Jan 2014 07:05:31 -0800 (PST) Received: by 10.229.195.196 with HTTP; Fri, 10 Jan 2014 07:05:31 -0800 (PST) In-Reply-To: References: <87zjn47ref.fsf@fleche.redhat.com> Date: Fri, 10 Jan 2014 15:05:00 -0000 Message-ID: Subject: Re: [PATCH 5/5] Fix for D demangling in GDB From: Iain Buclaw To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=047d7bea3f34a4393c04ef9f0ee3 X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00282.txt.bz2 --047d7bea3f34a4393c04ef9f0ee3 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 857 On 10 January 2014 13:24, Iain Buclaw wrote: > On 9 January 2014 21:54, Tom Tromey wrote: >> The usual approach in cases like this is to do a "pure move" patch to >> move the functions to another file, followed by a second patch to >> implement the fixes. >> > > OK, I'll split it into two separate patches. > Second change, move D demangling routines out of d-lang.c into d-support.c, which is intended to house other language support functions that don't really have a home elsewhere. 2014-01-10 Iain Buclaw gdb/ * d-lang.c (parse_call_convention) (parse_attributes, parse_function_types) (parse_function_args, parse_type, parse_identifier) (call_convention_p, d_parse_symbol): Move functions to ... * d-support.c: ... New file. --- --047d7bea3f34a4393c04ef9f0ee3 Content-Type: text/x-patch; charset=US-ASCII; name="dlang-p5b.patch" Content-Disposition: attachment; filename="dlang-p5b.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hq9ktqdy0 Content-length: 44591 IGdkYi9DaGFuZ2VMb2cgICB8ICAgIDggKwogZ2RiL01ha2VmaWxlLmluIHwg ICAgMyArLQogZ2RiL2QtbGFuZy5jICAgIHwgIDU4MyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnZGIv ZC1sYW5nLmggICAgfCAgICAyICsKIGdkYi9kLXN1cHBvcnQuYyB8ICA2MDYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2MTggaW5zZXJ0aW9ucygr KSwgNTg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmls ZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCA4MjRiMjZiLi5mNTU3YmZl IDEwMDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2Vm aWxlLmluCkBAIC03MjcsNyArNzI3LDcgQEAgU0ZJTEVTID0gYWRhLWV4cC55 IGFkYS1sYW5nLmMgYWRhLXR5cGVwcmludC5jIGFkYS12YWxwcmludC5jIGFk YS10YXNrcy5jIFwKIAljaGFyc2V0LmMgY2xlYW51cHMuYyBjbGktb3V0LmMg Y29mZnJlYWQuYyBjb2ZmLXBlLXJlYWQuYyBcCiAJY29tcGxhaW50cy5jIGNv bXBsZXRlci5jIGNvbnRpbnVhdGlvbnMuYyBjb3JlZmlsZS5jIGNvcmVsb3cu YyBcCiAJY3AtYWJpLmMgY3Atc3VwcG9ydC5jIGNwLW5hbWVzcGFjZS5jIGNw LXZhbHByaW50LmMgXAotCWQtbGFuZy5jIGQtdmFscHJpbnQuYyBcCisJZC1s YW5nLmMgZC1zdXBwb3J0LmMgZC12YWxwcmludC5jIFwKIAljcC1uYW1lLXBh cnNlci55IFwKIAlkYnhyZWFkLmMgZGVtYW5nbGUuYyBkaWN0aW9uYXJ5LmMg ZGlzYXNtLmMgZG91Ymxlc3QuYyBkdW1teS1mcmFtZS5jIFwKIAlkd2FyZjJl eHByLmMgZHdhcmYybG9jLmMgZHdhcmYycmVhZC5jIGR3YXJmMi1mcmFtZS5j IFwKQEAgLTk0Nyw2ICs5NDcsNyBAQCBDT01NT05fT0JTID0gJChERVBGSUxF UykgJChDT05GSUdfT0JTKSAkKFlZT0JKKSBcCiAJaW5saW5lLWZyYW1lLm8g XAogCWdudS12Mi1hYmkubyBnbnUtdjMtYWJpLm8gY3AtYWJpLm8gY3Atc3Vw cG9ydC5vIFwKIAljcC1uYW1lc3BhY2UubyBcCisJZC1zdXBwb3J0Lm8gXAog CXJlZ2dyb3Vwcy5vIHJlZ3NldC5vIFwKIAl0cmFkLWZyYW1lLm8gXAogCXRy YW1wLWZyYW1lLm8gXApkaWZmIC0tZ2l0IGEvZ2RiL2QtbGFuZy5jIGIvZ2Ri L2QtbGFuZy5jCmluZGV4IGY0NWZhZTguLjlmZGQ3YmIgMTAwNjQ0Ci0tLSBh L2dkYi9kLWxhbmcuYworKysgYi9nZGIvZC1sYW5nLmMKQEAgLTI2LDExICsy Niw2IEBACiAjaW5jbHVkZSAicGFyc2VyLWRlZnMuaCIKICNpbmNsdWRlICJn ZGJfb2JzdGFjay5oIgogCi0jaW5jbHVkZSAic2FmZS1jdHlwZS5oIgotCi1z dGF0aWMgY29uc3QgY2hhciAqcGFyc2VfZnVuY3Rpb25fYXJncyAoc3RydWN0 IG9ic3RhY2sgKiwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyBjb25zdCBjaGFy ICpwYXJzZV90eXBlIChzdHJ1Y3Qgb2JzdGFjayAqLCBjb25zdCBjaGFyICop OwotCiAvKiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sIHRvIHVzZSB0byBnZXQg dGhlIG5hbWUgb2YgdGhlIG1haW4gc3VicHJvZ3JhbS4gICovCiBzdGF0aWMg Y29uc3QgY2hhciBEX01BSU5bXSA9ICJEIG1haW4iOwogCkBAIC01Miw1ODQg KzQ3LDYgQEAgZF9tYWluX25hbWUgKHZvaWQpCiAgIHJldHVybiBOVUxMOwog fQogCi0vKiBEZW1hbmdsZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZyb20g TUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KLSAgIFJldHVybiB0 aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFp bHVyZS4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1wYXJzZV9jYWxsX2Nv bnZlbnRpb24gKHN0cnVjdCBvYnN0YWNrICp0ZW1wYnVmLCBjb25zdCBjaGFy ICptYW5nbGUpCi17Ci0gIGlmIChtYW5nbGUgPT0gTlVMTCB8fCAqbWFuZ2xl ID09ICdcMCcpCi0gICAgcmV0dXJuIG1hbmdsZTsKLQotICBzd2l0Y2ggKCpt YW5nbGUpCi0gICAgewotICAgIGNhc2UgJ0YnOiAvKiAoRCkgKi8KLSAgICAg IG1hbmdsZSsrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnVSc6IC8qIChD KSAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiZXh0ZXJuKEMpICIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAnVyc6IC8qIChXaW5kb3dzKSAqLwotICAgICAgbWFuZ2xlKys7Ci0g ICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJuKFdpbmRv d3MpICIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnVic6IC8qIChQYXNj YWwpICovCi0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJleHRlcm4oUGFzY2FsKSAiKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgJ1InOiAvKiAoQysrKSAqLwotICAgICAgbWFuZ2xlKys7 Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJuKEMr KykgIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0 dXJuIE5VTEw7Ci0gICAgfQotCi0gIHJldHVybiBtYW5nbGU7Ci19Ci0KLS8q IERlbWFuZ2xlIHRoZSBEIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgZnJvbSBNQU5H TEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVGLgotICAgUmV0dXJuIHRoZSBy ZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBmYWlsdXJl LiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLXBhcnNlX2F0dHJpYnV0ZXMg KHN0cnVjdCBvYnN0YWNrICp0ZW1wYnVmLCBjb25zdCBjaGFyICptYW5nbGUp Ci17Ci0gIGlmIChtYW5nbGUgPT0gTlVMTCB8fCAqbWFuZ2xlID09ICdcMCcp Ci0gICAgcmV0dXJuIG1hbmdsZTsKLQotICB3aGlsZSAoKm1hbmdsZSA9PSAn TicpCi0gICAgewotICAgICAgbWFuZ2xlKys7Ci0gICAgICBzd2l0Y2ggKCpt YW5nbGUpCi0JewotCWNhc2UgJ2EnOiAvKiBwdXJlICovCi0JICBtYW5nbGUr KzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJwdXJlICIpOwot CSAgY29udGludWU7Ci0JY2FzZSAnYic6IC8qIG5vdGhyb3cgKi8KLQkgIG1h bmdsZSsrOwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIm5vdGhy b3cgIik7Ci0JICBjb250aW51ZTsKLQljYXNlICdjJzogLyogcmVmICovCi0J ICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJy ZWYgIik7Ci0JICBjb250aW51ZTsKLQljYXNlICdkJzogLyogQHByb3BlcnR5 ICovCi0JICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJAcHJvcGVydHkgIik7Ci0JICBjb250aW51ZTsKLQljYXNlICdlJzog LyogQHRydXN0ZWQgKi8KLQkgIG1hbmdsZSsrOwotCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIkB0cnVzdGVkICIpOwotCSAgY29udGludWU7Ci0J Y2FzZSAnZic6IC8qIEBzYWZlICovCi0JICBtYW5nbGUrKzsKLQkgIG9ic3Rh Y2tfZ3Jvd19zdHIgKHRlbXBidWYsICJAc2FmZSAiKTsKLQkgIGNvbnRpbnVl OwotCWNhc2UgJ2cnOgotCWNhc2UgJ2gnOgotCSAgLyogaW5vdXQgcGFyYW1l dGVyIGlzIHJlcHJlc2VudGVkIGFzICdOZycuCi0JICAgICB2ZWN0b3IgcGFy YW1ldGVyIGlzIHJlcHJlc2VudGVkIGFzICdOaCcuCi0JICAgICBJZiB3ZSBz ZWUgdGhpcywgdGhlbiB3ZSBrbm93IHdlJ3JlIHJlYWxseSBpbiB0aGUKLQkg ICAgIHBhcmFtZXRlciBsaXN0LiAgUmV3aW5kIGFuZCBicmVhay4gICovCi0J ICBtYW5nbGUtLTsKLQl9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIHJldHVy biBtYW5nbGU7Ci19Ci0KLS8qIERlbWFuZ2xlIHRoZSBmdW5jdGlvbiB0eXBl IGZyb20gTUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KLSAgIFJl dHVybiB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5VTEwg b24gZmFpbHVyZS4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1wYXJzZV9m dW5jdGlvbl90eXBlIChzdHJ1Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3Qg Y2hhciAqbWFuZ2xlKQotewotICBzdHJ1Y3Qgb2JzdGFjayBvYmF0dHIsIG9i YXJncywgb2J0eXBlOwotICBjaGFyICphdHRyLCAqYXJncywgKnR5cGU7Ci0g IHNpemVfdCBzemF0dHIsIHN6YXJncywgc3p0eXBlOwotCi0gIGlmIChtYW5n bGUgPT0gTlVMTCB8fCAqbWFuZ2xlID09ICdcMCcpCi0gICAgcmV0dXJuIG1h bmdsZTsKLQotICAvKiBUaGUgb3JkZXIgb2YgdGhlIG1hbmdsZWQgc3RyaW5n IGlzOgotICAgICBUeXBlRnVuY3Rpb24gOjoKLSAgICAgICAgQ2FsbENvbnZl bnRpb24gRnVuY0F0dHJzIEFyZ3VtZW50cyBBcmdDbG9zZSBUeXBlCi0KLSAg ICAgVGhlIGRlbWFuZ2xlZCBzdHJpbmcgaXMgcmUtb3JkZXJlZCBhczoKLSAg ICAgICAgQ2FsbENvbnZlbnRpb24gVHlwZSBBcmd1bWVudHMgRnVuY0F0dHJz Ci0gICAqLwotICBvYnN0YWNrX2luaXQgKCZvYmF0dHIpOwotICBvYnN0YWNr X2luaXQgKCZvYmFyZ3MpOwotICBvYnN0YWNrX2luaXQgKCZvYnR5cGUpOwot Ci0gIC8qIEZ1bmN0aW9uIGNhbGwgY29udmVudGlvbi4gICovCi0gIG1hbmds ZSA9IHBhcnNlX2NhbGxfY29udmVudGlvbiAodGVtcGJ1ZiwgbWFuZ2xlKTsK LQotICAvKiBGdW5jdGlvbiBhdHRyaWJ1dGVzLiAgKi8KLSAgbWFuZ2xlID0g cGFyc2VfYXR0cmlidXRlcyAoJm9iYXR0ciwgbWFuZ2xlKTsKLSAgc3phdHRy ID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJm9iYXR0cik7Ci0gIGF0dHIgPSBv YnN0YWNrX2ZpbmlzaCAoJm9iYXR0cik7Ci0KLSAgLyogRnVuY3Rpb24gYXJn dW1lbnRzLiAgKi8KLSAgbWFuZ2xlID0gcGFyc2VfZnVuY3Rpb25fYXJncyAo Jm9iYXJncywgbWFuZ2xlKTsKLSAgc3phcmdzID0gb2JzdGFja19vYmplY3Rf c2l6ZSAoJm9iYXJncyk7Ci0gIGFyZ3MgPSBvYnN0YWNrX2ZpbmlzaCAoJm9i YXJncyk7Ci0KLSAgLyogRnVuY3Rpb24gcmV0dXJuIHR5cGUuICAqLwotICBt YW5nbGUgPSBwYXJzZV90eXBlICgmb2J0eXBlLCBtYW5nbGUpOwotICBzenR5 cGUgPSBvYnN0YWNrX29iamVjdF9zaXplICgmb2J0eXBlKTsKLSAgdHlwZSA9 IG9ic3RhY2tfZmluaXNoICgmb2J0eXBlKTsKLQotICAvKiBBcHBlbmQgdG8g YnVmZmVyIGluIG9yZGVyLiAqLwotICBvYnN0YWNrX2dyb3cgKHRlbXBidWYs IHR5cGUsIHN6dHlwZSk7Ci0gIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICIoIik7Ci0gIG9ic3RhY2tfZ3JvdyAodGVtcGJ1ZiwgYXJncywgc3phcmdz KTsKLSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIikgIik7Ci0gIG9i c3RhY2tfZ3JvdyAodGVtcGJ1ZiwgYXR0ciwgc3phdHRyKTsKLQotICBvYnN0 YWNrX2ZyZWUgKCZvYmF0dHIsIE5VTEwpOwotICBvYnN0YWNrX2ZyZWUgKCZv YmFyZ3MsIE5VTEwpOwotICBvYnN0YWNrX2ZyZWUgKCZvYnR5cGUsIE5VTEwp OwotICByZXR1cm4gbWFuZ2xlOwotfQotCi0vKiBEZW1hbmdsZSB0aGUgYXJn dW1lbnQgbGlzdCBmcm9tIE1BTkdMRSBhbmQgYXBwZW5kIGl0IHRvIFRFTVBC VUYuCi0gICBSZXR1cm4gdGhlIHJlbWFpbmluZyBzdHJpbmcgb24gc3VjY2Vz cyBvciBOVUxMIG9uIGZhaWx1cmUuICAqLwotc3RhdGljIGNvbnN0IGNoYXIg KgotcGFyc2VfZnVuY3Rpb25fYXJncyAoc3RydWN0IG9ic3RhY2sgKnRlbXBi dWYsIGNvbnN0IGNoYXIgKm1hbmdsZSkKLXsKLSAgc2l6ZV90IG4gPSAwOwot Ci0gIHdoaWxlIChtYW5nbGUgJiYgKm1hbmdsZSAhPSAnXDAnKQotICAgIHsK LSAgICAgIHN3aXRjaCAoKm1hbmdsZSkKLQl7Ci0JY2FzZSAnWCc6IC8qICh2 YXJpYWRpYyBUIHQuLi4pIHN0eWxlLiAgKi8KLQkgIG1hbmdsZSsrOwotCSAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIi4uLiIpOwotCSAgcmV0dXJu IG1hbmdsZTsKLQljYXNlICdZJzogLyogKHZhcmlhZGljIFQgdCwgLi4uKSBz dHlsZS4gICovCi0JICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICIsIC4uLiIpOwotCSAgcmV0dXJuIG1hbmdsZTsKLQljYXNl ICdaJzogLyogTm9ybWFsIGZ1bmN0aW9uLiAgKi8KLQkgIG1hbmdsZSsrOwot CSAgcmV0dXJuIG1hbmdsZTsKLQl9Ci0KLSAgICAgIGlmIChuKyspCi0Jb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIiwgIik7Ci0KLSAgICAgIGlmICgq bWFuZ2xlID09ICdNJykgLyogc2NvcGUoVCkgKi8KLQl7Ci0JICBtYW5nbGUr KzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJzY29wZSAiKTsK LQl9Ci0KLSAgICAgIHN3aXRjaCAoKm1hbmdsZSkKLQl7Ci0JY2FzZSAnSic6 IC8qIG91dChUKSAqLwotCSAgbWFuZ2xlKys7Ci0JICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAib3V0ICIpOwotCSAgYnJlYWs7Ci0JY2FzZSAnSyc6 IC8qIHJlZihUKSAqLwotCSAgbWFuZ2xlKys7Ci0JICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAicmVmICIpOwotCSAgYnJlYWs7Ci0JY2FzZSAnTCc6 IC8qIGxhenkoVCkgKi8KLQkgIG1hbmdsZSsrOwotCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgImxhenkgIik7Ci0JICBicmVhazsKLQl9Ci0gICAg ICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotICAg IH0KLSAgcmV0dXJuIG1hbmdsZTsKLX0KLQotLyogRGVtYW5nbGUgdGhlIHR5 cGUgZnJvbSBNQU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVGLgotICAg UmV0dXJuIHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgTlVM TCBvbiBmYWlsdXJlLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLXBhcnNl X3R5cGUgKHN0cnVjdCBvYnN0YWNrICp0ZW1wYnVmLCBjb25zdCBjaGFyICpt YW5nbGUpCi17Ci0gIGlmIChtYW5nbGUgPT0gTlVMTCB8fCAqbWFuZ2xlID09 ICdcMCcpCi0gICAgcmV0dXJuIG1hbmdsZTsKLQotICBzd2l0Y2ggKCptYW5n bGUpCi0gICAgewotICAgIGNhc2UgJ08nOiAvKiBzaGFyZWQoVCkgKi8KLSAg ICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgInNoYXJlZCgiKTsKLSAgICAgIG1hbmdsZSA9IHBhcnNlX3R5cGUgKHRl bXBidWYsIG1hbmdsZSk7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1w YnVmLCAiKSIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICd4 JzogLyogY29uc3QoVCkgKi8KLSAgICAgIG1hbmdsZSsrOwotICAgICAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImNvbnN0KCIpOwotICAgICAgbWFu Z2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKLSAgICAgIG9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIpIik7Ci0gICAgICByZXR1cm4g bWFuZ2xlOwotICAgIGNhc2UgJ3knOiAvKiBpbW11dGFibGUoVCkgKi8KLSAg ICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgImltbXV0YWJsZSgiKTsKLSAgICAgIG1hbmdsZSA9IHBhcnNlX3R5cGUg KHRlbXBidWYsIG1hbmdsZSk7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAiKSIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNl ICdOJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAgaWYgKCptYW5nbGUgPT0g J2cnKSAvKiB3aWxkKFQpICovCi0JewotCSAgbWFuZ2xlKys7Ci0JICBvYnN0 YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaW5vdXQoIik7Ci0JICBtYW5nbGUg PSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotCSAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgIikiKTsKLQkgIHJldHVybiBtYW5nbGU7Ci0J fQotICAgICAgZWxzZSBpZiAoKm1hbmdsZSA9PSAnaCcpIC8qIHZlY3RvcihU KSAqLwotCXsKLQkgIG1hbmdsZSsrOwotCSAgLyogVGhlIGJhc2V0eXBlIGZv ciB2ZWN0b3JzIGFyZSBhbHdheXMgc3RhdGljIGFycmF5cy4gICovCi0JICBp ZiAoKm1hbmdsZSAhPSAnRycpCi0JICAgIHJldHVybiBOVUxMOwotCSAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIl9fdmVjdG9yKCIpOwotCSAgbWFu Z2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKLQkgIG9ic3Rh Y2tfZ3Jvd19zdHIgKHRlbXBidWYsICIpIik7Ci0JICByZXR1cm4gbWFuZ2xl OwotCX0KLSAgICAgIGVsc2UKLQlyZXR1cm4gTlVMTDsKLSAgICBjYXNlICdB JzogLyogZHluYW1pYyBhcnJheSAoVFtdKSAqLwotICAgICAgbWFuZ2xlKys7 Ci0gICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUp OwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIltdIik7Ci0g ICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ0cnOiAvKiBzdGF0aWMg YXJyYXkgKFRbTl0pICovCi0gICAgewotICAgICAgY29uc3QgY2hhciAqbnVt cHRyOwotICAgICAgc2l6ZV90IG51bSA9IDA7Ci0gICAgICBtYW5nbGUrKzsK LQotICAgICAgbnVtcHRyID0gbWFuZ2xlOwotICAgICAgd2hpbGUgKElTRElH SVQgKCptYW5nbGUpKQotCXsKLQkgIG51bSsrOwotCSAgbWFuZ2xlKys7Ci0J fQotICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xl KTsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJbIik7Ci0g ICAgICBvYnN0YWNrX2dyb3cgKHRlbXBidWYsIG51bXB0ciwgbnVtKTsKLSAg ICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJdIik7Ci0gICAgICBy ZXR1cm4gbWFuZ2xlOwotICAgIH0KLSAgICBjYXNlICdIJzogLyogYXNzb2Np YXRpdmUgYXJyYXkgKFRbVF0pICovCi0gICAgewotICAgICAgc3RydWN0IG9i c3RhY2sgb2J0eXBlOwotICAgICAgY2hhciAqdHlwZTsKLSAgICAgIHNpemVf dCBzenR5cGU7Ci0gICAgICBtYW5nbGUrKzsKLQotICAgICAgb2JzdGFja19p bml0ICgmb2J0eXBlKTsKLSAgICAgIG1hbmdsZSA9IHBhcnNlX3R5cGUgKCZv YnR5cGUsIG1hbmdsZSk7Ci0gICAgICBzenR5cGUgPSBvYnN0YWNrX29iamVj dF9zaXplICgmb2J0eXBlKTsKLSAgICAgIHR5cGUgPSBvYnN0YWNrX2Zpbmlz aCAoJm9idHlwZSk7Ci0KLSAgICAgIG1hbmdsZSA9IHBhcnNlX3R5cGUgKHRl bXBidWYsIG1hbmdsZSk7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1w YnVmLCAiWyIpOwotICAgICAgb2JzdGFja19ncm93ICh0ZW1wYnVmLCB0eXBl LCBzenR5cGUpOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1Ziwg Il0iKTsKLQotICAgICAgb2JzdGFja19mcmVlICgmb2J0eXBlLCBOVUxMKTsK LSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgfQotICAgIGNhc2UgJ1AnOiAv KiBwb2ludGVyIChUKikgKi8KLSAgICAgIG1hbmdsZSsrOwotICAgICAgbWFu Z2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKLSAgICAgIG9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIqIik7Ci0gICAgICByZXR1cm4g bWFuZ2xlOwotICAgIGNhc2UgJ0knOiAvKiBpZGVudCBUICovCi0gICAgY2Fz ZSAnQyc6IC8qIGNsYXNzIFQgKi8KLSAgICBjYXNlICdTJzogLyogc3RydWN0 IFQgKi8KLSAgICBjYXNlICdFJzogLyogZW51bSBUICovCi0gICAgY2FzZSAn VCc6IC8qIHR5cGVkZWYgVCAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBy ZXR1cm4gZF9wYXJzZV9zeW1ib2wgKHRlbXBidWYsIG1hbmdsZSk7Ci0gICAg Y2FzZSAnRCc6IC8qIGRlbGVnYXRlIFQgKi8KLSAgICAgIG1hbmdsZSsrOwot ICAgICAgbWFuZ2xlID0gcGFyc2VfZnVuY3Rpb25fdHlwZSAodGVtcGJ1Ziwg bWFuZ2xlKTsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJk ZWxlZ2F0ZSIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICdC JzogLyogdHVwbGUgVCAqLwotICAgICAgLyogVE9ETzogSGFuZGxlIHRoaXMu ICAqLwotICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBGdW5jdGlvbiB0 eXBlcyAqLwotICAgIGNhc2UgJ0YnOiBjYXNlICdVJzogY2FzZSAnVyc6Ci0g ICAgY2FzZSAnVic6IGNhc2UgJ1InOgotICAgICAgbWFuZ2xlID0gcGFyc2Vf ZnVuY3Rpb25fdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKLSAgICAgIG9ic3Rh Y2tfZ3Jvd19zdHIgKHRlbXBidWYsICJmdW5jdGlvbiIpOwotICAgICAgcmV0 dXJuIG1hbmdsZTsKLQotICAgIC8qIEJhc2ljIHR5cGVzICovCi0gICAgY2Fz ZSAnbic6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJub25lIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwot ICAgIGNhc2UgJ3YnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAidm9pZCIpOwotICAgICAgcmV0dXJuIG1h bmdsZTsKLSAgICBjYXNlICdnJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImJ5dGUiKTsKLSAgICAgIHJl dHVybiBtYW5nbGU7Ci0gICAgY2FzZSAnaCc6Ci0gICAgICBtYW5nbGUrKzsK LSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ1Ynl0ZSIpOwot ICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICdzJzoKLSAgICAgIG1h bmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInNo b3J0Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ3QnOgot ICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1w YnVmLCAidXNob3J0Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNh c2UgJ2knOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiaW50Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwot ICAgIGNhc2UgJ2snOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAidWludCIpOwotICAgICAgcmV0dXJuIG1h bmdsZTsKLSAgICBjYXNlICdsJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImxvbmciKTsKLSAgICAgIHJl dHVybiBtYW5nbGU7Ci0gICAgY2FzZSAnbSc6Ci0gICAgICBtYW5nbGUrKzsK LSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ1bG9uZyIpOwot ICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICdmJzoKLSAgICAgIG1h bmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImZs b2F0Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ2QnOgot ICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1w YnVmLCAiZG91YmxlIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNh c2UgJ2UnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAicmVhbCIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsK LQotICAgIC8qIEltYWdpbmFyeSBhbmQgQ29tcGxleCB0eXBlcyAqLwotICAg IGNhc2UgJ28nOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAiaWZsb2F0Iik7Ci0gICAgICByZXR1cm4gbWFu Z2xlOwotICAgIGNhc2UgJ3AnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBv YnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaWRvdWJsZSIpOwotICAgICAg cmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICdqJzoKLSAgICAgIG1hbmdsZSsr OwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImlyZWFsIik7 Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ3EnOgotICAgICAg bWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi Y2Zsb2F0Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ3In OgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAiY2RvdWJsZSIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAg ICBjYXNlICdjJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgImNyZWFsIik7Ci0gICAgICByZXR1cm4gbWFu Z2xlOwotCi0gICAgLyogT3RoZXIgdHlwZXMgKi8KLSAgICBjYXNlICdiJzoK LSAgICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgImJvb2wiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2Fz ZSAnYSc6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJjaGFyIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwot ICAgIGNhc2UgJ3UnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAid2NoYXIiKTsKLSAgICAgIHJldHVybiBt YW5nbGU7Ci0gICAgY2FzZSAndyc6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAg IG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJkY2hhciIpOwotICAgICAg cmV0dXJuIG1hbmdsZTsKLQotICAgIGRlZmF1bHQ6IC8qIHVuaGFuZGxlZCAq LwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0vKiBFeHRyYWN0 IHRoZSBpZGVudGlmaWVyIGZyb20gTUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8g VEVNUEJVRi4KLSAgIFJldHVybiB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiBz dWNjZXNzIG9yIE5VTEwgb24gZmFpbHVyZS4gICovCi1zdGF0aWMgY29uc3Qg Y2hhciAqCi1wYXJzZV9pZGVudGlmaWVyIChzdHJ1Y3Qgb2JzdGFjayAqdGVt cGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQotewotICBpZiAobWFuZ2xlID09 IE5VTEwgfHwgKm1hbmdsZSA9PSAnXDAnKQotICAgIHJldHVybiBtYW5nbGU7 Ci0KLSAgaWYgKElTRElHSVQgKCptYW5nbGUpKQotICAgIHsKLSAgICAgIGNo YXIgKmVuZHB0cjsKLSAgICAgIGxvbmcgaSA9IHN0cnRvbCAobWFuZ2xlLCAm ZW5kcHRyLCAxMCk7Ci0KLSAgICAgIGlmIChpIDw9IDAgfHwgc3RybGVuIChl bmRwdHIpIDwgaSkKLQlyZXR1cm4gTlVMTDsKLQotICAgICAgbWFuZ2xlID0g ZW5kcHRyOwotCi0gICAgICAvKiBObyBzdXBwb3J0IGZvciBkZW1hbmdsaW5n IHRlbXBsYXRlcy4gICovCi0gICAgICBpZiAoaSA+PSA1ICYmIHN0cm5jbXAg KG1hbmdsZSwgIl9fVCIsIDMpID09IDApCi0JcmV0dXJuIE5VTEw7Ci0KLSAg ICAgIGlmIChzdHJuY21wIChtYW5nbGUsICJfX2N0b3IiLCBpKSA9PSAwKQot CXsKLQkgIC8qIENvbnN0cnVjdG9yIHN5bWJvbCBmb3IgYSBjbGFzcy9zdHJ1 Y3QuICAqLwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInRoaXMi KTsKLQkgIG1hbmdsZSArPSBpOwotCSAgcmV0dXJuIG1hbmdsZTsKLQl9Ci0g ICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX2R0b3IiLCBpKSA9 PSAwKQotCXsKLQkgIC8qIERlc3RydWN0b3Igc3ltYm9sIGZvciBhIGNsYXNz L3N0cnVjdC4gICovCi0JICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi fnRoaXMiKTsKLQkgIG1hbmdsZSArPSBpOwotCSAgcmV0dXJuIG1hbmdsZTsK LQl9Ci0gICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX3Bvc3Ri bGl0IiwgaSkgPT0gMCkKLQl7Ci0JICAvKiBQb3N0YmxpdCBzeW1ib2wgZm9y IGEgc3RydWN0LiAgKi8KLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJ0aGlzKHRoaXMpIik7Ci0JICBtYW5nbGUgKz0gaTsKLQkgIHJldHVybiBt YW5nbGU7Ci0JfQotICAgICAgZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAi X19pbml0WiIsIGkrMSkgPT0gMCkKLQl7Ci0JICAvKiBUaGUgc3RhdGljIGlu aXRpYWxpc2VyIGZvciBhIGdpdmVuIHN5bWJvbC4gICovCi0JICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAiaW5pdCQiKTsKLQkgIG1hbmdsZSArPSBp ICsgMTsKLQkgIHJldHVybiBtYW5nbGU7Ci0JfQotICAgICAgZWxzZSBpZiAo c3RybmNtcCAobWFuZ2xlLCAiX19DbGFzc1oiLCBpKzEpID09IDApCi0Jewot CSAgLyogVGhlIGNsYXNzaW5mbyBzeW1ib2wgZm9yIGEgZ2l2ZW4gY2xhc3Mu ICAqLwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImNsYXNzaW5m byQiKTsKLQkgIG1hbmdsZSArPSBpICsgMTsKLQkgIHJldHVybiBtYW5nbGU7 Ci0JfQotICAgICAgZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX192dGJs WiIsIGkrMSkgPT0gMCkKLQl7Ci0JICAvKiBUaGUgdnRhYmxlIHN5bWJvbCBm b3IgYSBnaXZlbiBjbGFzcy4gICovCi0JICBvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAidnRibCQiKTsKLQkgIG1hbmdsZSArPSBpICsgMTsKLQkgIHJl dHVybiBtYW5nbGU7Ci0JfQotICAgICAgZWxzZSBpZiAoc3RybmNtcCAobWFu Z2xlLCAiX19JbnRlcmZhY2VaIiwgaSsxKSA9PSAwKQotCXsKLQkgIC8qIFRo ZSBpbnRlcmZhY2Ugc3ltYm9sIGZvciBhIGdpdmVuIGNsYXNzLiAgKi8KLQkg IG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJpbnRlcmZhY2UkIik7Ci0J ICBtYW5nbGUgKz0gaSArIDE7Ci0JICByZXR1cm4gbWFuZ2xlOwotCX0KLSAg ICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fTW9kdWxlSW5mb1oi LCBpKzEpID09IDApCi0JewotCSAgLyogVGhlIE1vZHVsZUluZm8gc3ltYm9s IGZvciBhIGdpdmVuIG1vZHVsZS4gICovCi0JICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAibW9kdWxlaW5mbyQiKTsKLQkgIG1hbmdsZSArPSBpICsg MTsKLQkgIHJldHVybiBtYW5nbGU7Ci0JfQotICAgICAgb2JzdGFja19ncm93 ICh0ZW1wYnVmLCBtYW5nbGUsIGkpOwotICAgICAgbWFuZ2xlICs9IGk7Ci0g ICAgfQotICBlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIG1h bmdsZTsKLX0KLQotc3RhdGljIGludAotY2FsbF9jb252ZW50aW9uX3AgKGNv bnN0IGNoYXIgKm1hbmdsZSkKLXsKLSAgc2l6ZV90IGk7Ci0KLSAgc3dpdGNo ICgqbWFuZ2xlKQotICAgIHsKLSAgICBjYXNlICdGJzogY2FzZSAnVSc6IGNh c2UgJ1YnOgotICAgIGNhc2UgJ1cnOiBjYXNlICdSJzoKLSAgICAgIHJldHVy biAxOwotCi0gICAgY2FzZSAnTSc6IC8qIFByZWZpeCBmb3IgZnVuY3Rpb25z IG5lZWRpbmcgJ3RoaXMnICovCi0gICAgICBpID0gMTsKLSAgICAgIGlmICht YW5nbGVbaV0gPT0gJ3gnKQotCWkrKzsKLQotICAgICAgc3dpdGNoIChtYW5n bGVbaV0pCi0JewotCWNhc2UgJ0YnOiBjYXNlICdVJzogY2FzZSAnVic6Ci0J Y2FzZSAnVyc6IGNhc2UgJ1InOgotCSAgcmV0dXJuIDE7Ci0JfQotCi0gICAg ZGVmYXVsdDoKLSAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLyogRXh0 cmFjdCBhbmQgZGVtYW5nbGUgdGhlIHN5bWJvbCBpbiBNQU5HTEUgYW5kIGFw cGVuZCBpdCB0byBURU1QQlVGLgotICAgUmV0dXJuIHRoZSByZW1haW5pbmcg c2lnbmF0dXJlIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBmYWlsdXJlLiAgKi8K LWNvbnN0IGNoYXIgKgotZF9wYXJzZV9zeW1ib2wgKHN0cnVjdCBvYnN0YWNr ICp0ZW1wYnVmLCBjb25zdCBjaGFyICptYW5nbGUpCi17Ci0gIHNpemVfdCBu ID0gMDsKLSAgZG8KLSAgICB7Ci0gICAgICBpZiAobisrKQotCW9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICIuIik7Ci0KLSAgICAgIG1hbmdsZSA9IHBh cnNlX2lkZW50aWZpZXIgKHRlbXBidWYsIG1hbmdsZSk7Ci0KLSAgICAgIGlm IChtYW5nbGUgJiYgY2FsbF9jb252ZW50aW9uX3AgKG1hbmdsZSkpCi0Jewot CSAgY2hhciAqc2F2ZWQ7Ci0KLQkgIC8qIFNraXAgb3ZlciAndGhpcycgcGFy YW1ldGVyLiAgKi8KLQkgIGlmICgqbWFuZ2xlID09ICdNJykKLQkgICAgbWFu Z2xlICs9IChtYW5nbGVbMV0gPT0gJ3gnKSA/IDIgOiAxOwotCi0JICAvKiBT a2lwIG92ZXIgY2FsbGluZyBjb252ZW50aW9uIGFuZCBhdHRyaWJ1dGVzIGlu IHF1YWxpZmllZCBuYW1lLiAgKi8KLQkgIHNhdmVkID0gb2JzdGFja19uZXh0 X2ZyZWUgKHRlbXBidWYpOwotCSAgbWFuZ2xlID0gcGFyc2VfY2FsbF9jb252 ZW50aW9uICh0ZW1wYnVmLCBtYW5nbGUpOwotCSAgbWFuZ2xlID0gcGFyc2Vf YXR0cmlidXRlcyAodGVtcGJ1ZiwgbWFuZ2xlKTsKLQkgIG9ic3RhY2tfbmV4 dF9mcmVlICh0ZW1wYnVmKSA9IHNhdmVkOwotCi0JICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiKCIpOwotCSAgbWFuZ2xlID0gcGFyc2VfZnVuY3Rp b25fYXJncyAodGVtcGJ1ZiwgbWFuZ2xlKTsKLQkgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICIpIik7Ci0KLQkgIC8qIERlbWFuZ2xlIHRoZSBmdW5j dGlvbiByZXR1cm4gdHlwZSBhcyBhIGtpbmQgb2Ygc2FuaXR5IHRlc3QuICAq LwotCSAgaWYgKG1hbmdsZSAmJiAhSVNESUdJVCAoKm1hbmdsZSkpCi0JICAg IHsKLQkgICAgICBzYXZlZCA9IG9ic3RhY2tfbmV4dF9mcmVlICh0ZW1wYnVm KTsKLQkgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5n bGUpOwotCSAgICAgIG9ic3RhY2tfbmV4dF9mcmVlICh0ZW1wYnVmKSA9IHNh dmVkOwotCSAgICB9Ci0JfQotICAgIH0KLSAgd2hpbGUgKG1hbmdsZSAmJiBJ U0RJR0lUICgqbWFuZ2xlKSk7Ci0KLSAgcmV0dXJuIG1hbmdsZTsKLX0KLQog LyogSW1wbGVtZW50cyB0aGUgbGFfZGVtYW5nbGUgbGFuZ3VhZ2VfZGVmbiBy b3V0aW5lIGZvciBsYW5ndWFnZSBELiAgKi8KIGNoYXIgKgogZF9kZW1hbmds ZSAoY29uc3QgY2hhciAqc3ltYm9sLCBpbnQgb3B0aW9ucykKZGlmZiAtLWdp dCBhL2dkYi9kLWxhbmcuaCBiL2dkYi9kLWxhbmcuaAppbmRleCBhMWI0NDU2 Li5jYTkxMjZiIDEwMDY0NAotLS0gYS9nZGIvZC1sYW5nLmgKKysrIGIvZ2Ri L2QtbGFuZy5oCkBAIC02Miw2ICs2Miw4IEBAIGV4dGVybiBjaGFyICpkX2Rl bWFuZ2xlIChjb25zdCBjaGFyICptYW5nbGVkLCBpbnQgb3B0aW9ucyk7CiAK IGV4dGVybiBjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kX3R5cGUgKmJ1aWx0aW5f ZF90eXBlIChzdHJ1Y3QgZ2RiYXJjaCAqKTsKIAorLyogRGVmaW5lZCBpbiBk LXN1cHBvcnQuYyAgKi8KKwogZXh0ZXJuIGNvbnN0IGNoYXIgKmRfcGFyc2Vf c3ltYm9sIChzdHJ1Y3Qgb2JzdGFjayAqLCBjb25zdCBjaGFyICopOwogCiAv KiBEZWZpbmVkIGluIGQtdmFscHJpbnQuYyAgKi8KZGlmZiAtLWdpdCBhL2dk Yi9kLXN1cHBvcnQuYyBiL2dkYi9kLXN1cHBvcnQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThhY2Y4Ci0tLSAvZGV2L251bGwK KysrIGIvZ2RiL2Qtc3VwcG9ydC5jCkBAIC0wLDAgKzEsNjA2IEBACisvKiBE IGxhbmd1YWdlIHN1cHBvcnQgcm91dGluZXMgZm9yIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNs dWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZC1sYW5nLmgiCisjaW5jbHVkZSAi Z2RiX29ic3RhY2suaCIKKworI2luY2x1ZGUgInNhZmUtY3R5cGUuaCIKKwor c3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2Z1bmN0aW9uX2FyZ3MgKHN0cnVj dCBvYnN0YWNrICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgY29uc3QgY2hh ciAqcGFyc2VfdHlwZSAoc3RydWN0IG9ic3RhY2sgKiwgY29uc3QgY2hhciAq KTsKKworLyogRGVtYW5nbGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBmcm9t IE1BTkdMRSBhbmQgYXBwZW5kIGl0IHRvIFRFTVBCVUYuCisgICBSZXR1cm4g dGhlIHJlbWFpbmluZyBzdHJpbmcgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZh aWx1cmUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorcGFyc2VfY2FsbF9j b252ZW50aW9uIChzdHJ1Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hh ciAqbWFuZ2xlKQoreworICBpZiAobWFuZ2xlID09IE5VTEwgfHwgKm1hbmds ZSA9PSAnXDAnKQorICAgIHJldHVybiBtYW5nbGU7CisKKyAgc3dpdGNoICgq bWFuZ2xlKQorICAgIHsKKyAgICBjYXNlICdGJzogLyogKEQpICovCisgICAg ICBtYW5nbGUrKzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1UnOiAvKiAo QykgKi8KKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0 ciAodGVtcGJ1ZiwgImV4dGVybihDKSAiKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgJ1cnOiAvKiAoV2luZG93cykgKi8KKyAgICAgIG1hbmdsZSsrOwor ICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImV4dGVybihXaW5k b3dzKSAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1YnOiAvKiAoUGFz Y2FsKSAqLworICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiZXh0ZXJuKFBhc2NhbCkgIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICdSJzogLyogKEMrKykgKi8KKyAgICAgIG1hbmdsZSsr OworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImV4dGVybihD KyspICIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gbWFuZ2xlOworfQorCisv KiBEZW1hbmdsZSB0aGUgRCBmdW5jdGlvbiBhdHRyaWJ1dGVzIGZyb20gTUFO R0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KKyAgIFJldHVybiB0aGUg cmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVy ZS4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwYXJzZV9hdHRyaWJ1dGVz IChzdHJ1Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xl KQoreworICBpZiAobWFuZ2xlID09IE5VTEwgfHwgKm1hbmdsZSA9PSAnXDAn KQorICAgIHJldHVybiBtYW5nbGU7CisKKyAgd2hpbGUgKCptYW5nbGUgPT0g J04nKQorICAgIHsKKyAgICAgIG1hbmdsZSsrOworICAgICAgc3dpdGNoICgq bWFuZ2xlKQorCXsKKwljYXNlICdhJzogLyogcHVyZSAqLworCSAgbWFuZ2xl Kys7CisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAicHVyZSAiKTsK KwkgIGNvbnRpbnVlOworCWNhc2UgJ2InOiAvKiBub3Rocm93ICovCisJICBt YW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJub3Ro cm93ICIpOworCSAgY29udGludWU7CisJY2FzZSAnYyc6IC8qIHJlZiAqLwor CSAgbWFuZ2xlKys7CisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi cmVmICIpOworCSAgY29udGludWU7CisJY2FzZSAnZCc6IC8qIEBwcm9wZXJ0 eSAqLworCSAgbWFuZ2xlKys7CisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1w YnVmLCAiQHByb3BlcnR5ICIpOworCSAgY29udGludWU7CisJY2FzZSAnZSc6 IC8qIEB0cnVzdGVkICovCisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJAdHJ1c3RlZCAiKTsKKwkgIGNvbnRpbnVlOwor CWNhc2UgJ2YnOiAvKiBAc2FmZSAqLworCSAgbWFuZ2xlKys7CisJICBvYnN0 YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiQHNhZmUgIik7CisJICBjb250aW51 ZTsKKwljYXNlICdnJzoKKwljYXNlICdoJzoKKwkgIC8qIGlub3V0IHBhcmFt ZXRlciBpcyByZXByZXNlbnRlZCBhcyAnTmcnLgorCSAgICAgdmVjdG9yIHBh cmFtZXRlciBpcyByZXByZXNlbnRlZCBhcyAnTmgnLgorCSAgICAgSWYgd2Ug c2VlIHRoaXMsIHRoZW4gd2Uga25vdyB3ZSdyZSByZWFsbHkgaW4gdGhlCisJ ICAgICBwYXJhbWV0ZXIgbGlzdC4gIFJld2luZCBhbmQgYnJlYWsuICAqLwor CSAgbWFuZ2xlLS07CisJfQorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1 cm4gbWFuZ2xlOworfQorCisvKiBEZW1hbmdsZSB0aGUgZnVuY3Rpb24gdHlw ZSBmcm9tIE1BTkdMRSBhbmQgYXBwZW5kIGl0IHRvIFRFTVBCVUYuCisgICBS ZXR1cm4gdGhlIHJlbWFpbmluZyBzdHJpbmcgb24gc3VjY2VzcyBvciBOVUxM IG9uIGZhaWx1cmUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorcGFyc2Vf ZnVuY3Rpb25fdHlwZSAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNvbnN0 IGNoYXIgKm1hbmdsZSkKK3sKKyAgc3RydWN0IG9ic3RhY2sgb2JhdHRyLCBv YmFyZ3MsIG9idHlwZTsKKyAgY2hhciAqYXR0ciwgKmFyZ3MsICp0eXBlOwor ICBzaXplX3Qgc3phdHRyLCBzemFyZ3MsIHN6dHlwZTsKKworICBpZiAobWFu Z2xlID09IE5VTEwgfHwgKm1hbmdsZSA9PSAnXDAnKQorICAgIHJldHVybiBt YW5nbGU7CisKKyAgLyogVGhlIG9yZGVyIG9mIHRoZSBtYW5nbGVkIHN0cmlu ZyBpczoKKyAgICAgVHlwZUZ1bmN0aW9uIDo6CisgICAgICAgIENhbGxDb252 ZW50aW9uIEZ1bmNBdHRycyBBcmd1bWVudHMgQXJnQ2xvc2UgVHlwZQorCisg ICAgIFRoZSBkZW1hbmdsZWQgc3RyaW5nIGlzIHJlLW9yZGVyZWQgYXM6Cisg ICAgICAgIENhbGxDb252ZW50aW9uIFR5cGUgQXJndW1lbnRzIEZ1bmNBdHRy cworICAgKi8KKyAgb2JzdGFja19pbml0ICgmb2JhdHRyKTsKKyAgb2JzdGFj a19pbml0ICgmb2JhcmdzKTsKKyAgb2JzdGFja19pbml0ICgmb2J0eXBlKTsK KworICAvKiBGdW5jdGlvbiBjYWxsIGNvbnZlbnRpb24uICAqLworICBtYW5n bGUgPSBwYXJzZV9jYWxsX2NvbnZlbnRpb24gKHRlbXBidWYsIG1hbmdsZSk7 CisKKyAgLyogRnVuY3Rpb24gYXR0cmlidXRlcy4gICovCisgIG1hbmdsZSA9 IHBhcnNlX2F0dHJpYnV0ZXMgKCZvYmF0dHIsIG1hbmdsZSk7CisgIHN6YXR0 ciA9IG9ic3RhY2tfb2JqZWN0X3NpemUgKCZvYmF0dHIpOworICBhdHRyID0g b2JzdGFja19maW5pc2ggKCZvYmF0dHIpOworCisgIC8qIEZ1bmN0aW9uIGFy Z3VtZW50cy4gICovCisgIG1hbmdsZSA9IHBhcnNlX2Z1bmN0aW9uX2FyZ3Mg KCZvYmFyZ3MsIG1hbmdsZSk7CisgIHN6YXJncyA9IG9ic3RhY2tfb2JqZWN0 X3NpemUgKCZvYmFyZ3MpOworICBhcmdzID0gb2JzdGFja19maW5pc2ggKCZv YmFyZ3MpOworCisgIC8qIEZ1bmN0aW9uIHJldHVybiB0eXBlLiAgKi8KKyAg bWFuZ2xlID0gcGFyc2VfdHlwZSAoJm9idHlwZSwgbWFuZ2xlKTsKKyAgc3p0 eXBlID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJm9idHlwZSk7CisgIHR5cGUg PSBvYnN0YWNrX2ZpbmlzaCAoJm9idHlwZSk7CisKKyAgLyogQXBwZW5kIHRv IGJ1ZmZlciBpbiBvcmRlci4gKi8KKyAgb2JzdGFja19ncm93ICh0ZW1wYnVm LCB0eXBlLCBzenR5cGUpOworICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVm LCAiKCIpOworICBvYnN0YWNrX2dyb3cgKHRlbXBidWYsIGFyZ3MsIHN6YXJn cyk7CisgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIpICIpOworICBv YnN0YWNrX2dyb3cgKHRlbXBidWYsIGF0dHIsIHN6YXR0cik7CisKKyAgb2Jz dGFja19mcmVlICgmb2JhdHRyLCBOVUxMKTsKKyAgb2JzdGFja19mcmVlICgm b2JhcmdzLCBOVUxMKTsKKyAgb2JzdGFja19mcmVlICgmb2J0eXBlLCBOVUxM KTsKKyAgcmV0dXJuIG1hbmdsZTsKK30KKworLyogRGVtYW5nbGUgdGhlIGFy Z3VtZW50IGxpc3QgZnJvbSBNQU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1Q QlVGLgorICAgUmV0dXJuIHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nl c3Mgb3IgTlVMTCBvbiBmYWlsdXJlLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK3BhcnNlX2Z1bmN0aW9uX2FyZ3MgKHN0cnVjdCBvYnN0YWNrICp0ZW1w YnVmLCBjb25zdCBjaGFyICptYW5nbGUpCit7CisgIHNpemVfdCBuID0gMDsK KworICB3aGlsZSAobWFuZ2xlICYmICptYW5nbGUgIT0gJ1wwJykKKyAgICB7 CisgICAgICBzd2l0Y2ggKCptYW5nbGUpCisJeworCWNhc2UgJ1gnOiAvKiAo dmFyaWFkaWMgVCB0Li4uKSBzdHlsZS4gICovCisJICBtYW5nbGUrKzsKKwkg IG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIuLi4iKTsKKwkgIHJldHVy biBtYW5nbGU7CisJY2FzZSAnWSc6IC8qICh2YXJpYWRpYyBUIHQsIC4uLikg c3R5bGUuICAqLworCSAgbWFuZ2xlKys7CisJICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiLCAuLi4iKTsKKwkgIHJldHVybiBtYW5nbGU7CisJY2Fz ZSAnWic6IC8qIE5vcm1hbCBmdW5jdGlvbi4gICovCisJICBtYW5nbGUrKzsK KwkgIHJldHVybiBtYW5nbGU7CisJfQorCisgICAgICBpZiAobisrKQorCW9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIsICIpOworCisgICAgICBpZiAo Km1hbmdsZSA9PSAnTScpIC8qIHNjb3BlKFQpICovCisJeworCSAgbWFuZ2xl Kys7CisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAic2NvcGUgIik7 CisJfQorCisgICAgICBzd2l0Y2ggKCptYW5nbGUpCisJeworCWNhc2UgJ0on OiAvKiBvdXQoVCkgKi8KKwkgIG1hbmdsZSsrOworCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIm91dCAiKTsKKwkgIGJyZWFrOworCWNhc2UgJ0sn OiAvKiByZWYoVCkgKi8KKwkgIG1hbmdsZSsrOworCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgInJlZiAiKTsKKwkgIGJyZWFrOworCWNhc2UgJ0wn OiAvKiBsYXp5KFQpICovCisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJsYXp5ICIpOworCSAgYnJlYWs7CisJfQorICAg ICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKKyAg ICB9CisgIHJldHVybiBtYW5nbGU7Cit9CisKKy8qIERlbWFuZ2xlIHRoZSB0 eXBlIGZyb20gTUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KKyAg IFJldHVybiB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5V TEwgb24gZmFpbHVyZS4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwYXJz ZV90eXBlIChzdHJ1Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAq bWFuZ2xlKQoreworICBpZiAobWFuZ2xlID09IE5VTEwgfHwgKm1hbmdsZSA9 PSAnXDAnKQorICAgIHJldHVybiBtYW5nbGU7CisKKyAgc3dpdGNoICgqbWFu Z2xlKQorICAgIHsKKyAgICBjYXNlICdPJzogLyogc2hhcmVkKFQpICovCisg ICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJzaGFyZWQoIik7CisgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0 ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIikiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAn eCc6IC8qIGNvbnN0KFQpICovCisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJjb25zdCgiKTsKKyAgICAgIG1h bmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisgICAgICBv YnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiKSIpOworICAgICAgcmV0dXJu IG1hbmdsZTsKKyAgICBjYXNlICd5JzogLyogaW1tdXRhYmxlKFQpICovCisg ICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJpbW11dGFibGUoIik7CisgICAgICBtYW5nbGUgPSBwYXJzZV90eXBl ICh0ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19ncm93X3N0ciAo dGVtcGJ1ZiwgIikiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2Fz ZSAnTic6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIGlmICgqbWFuZ2xlID09 ICdnJykgLyogd2lsZChUKSAqLworCXsKKwkgIG1hbmdsZSsrOworCSAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImlub3V0KCIpOworCSAgbWFuZ2xl ID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xlKTsKKwkgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICIpIik7CisJICByZXR1cm4gbWFuZ2xlOwor CX0KKyAgICAgIGVsc2UgaWYgKCptYW5nbGUgPT0gJ2gnKSAvKiB2ZWN0b3Io VCkgKi8KKwl7CisJICBtYW5nbGUrKzsKKwkgIC8qIFRoZSBiYXNldHlwZSBm b3IgdmVjdG9ycyBhcmUgYWx3YXlzIHN0YXRpYyBhcnJheXMuICAqLworCSAg aWYgKCptYW5nbGUgIT0gJ0cnKQorCSAgICByZXR1cm4gTlVMTDsKKwkgIG9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJfX3ZlY3RvcigiKTsKKwkgIG1h bmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisJICBvYnN0 YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiKSIpOworCSAgcmV0dXJuIG1hbmds ZTsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIE5VTEw7CisgICAgY2FzZSAn QSc6IC8qIGR5bmFtaWMgYXJyYXkgKFRbXSkgKi8KKyAgICAgIG1hbmdsZSsr OworICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFuZ2xl KTsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJbXSIpOwor ICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICdHJzogLyogc3RhdGlj IGFycmF5IChUW05dKSAqLworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKm51 bXB0cjsKKyAgICAgIHNpemVfdCBudW0gPSAwOworICAgICAgbWFuZ2xlKys7 CisKKyAgICAgIG51bXB0ciA9IG1hbmdsZTsKKyAgICAgIHdoaWxlIChJU0RJ R0lUICgqbWFuZ2xlKSkKKwl7CisJICBudW0rKzsKKwkgIG1hbmdsZSsrOwor CX0KKyAgICAgIG1hbmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmds ZSk7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiWyIpOwor ICAgICAgb2JzdGFja19ncm93ICh0ZW1wYnVmLCBudW1wdHIsIG51bSk7Cisg ICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiXSIpOworICAgICAg cmV0dXJuIG1hbmdsZTsKKyAgICB9CisgICAgY2FzZSAnSCc6IC8qIGFzc29j aWF0aXZlIGFycmF5IChUW1RdKSAqLworICAgIHsKKyAgICAgIHN0cnVjdCBv YnN0YWNrIG9idHlwZTsKKyAgICAgIGNoYXIgKnR5cGU7CisgICAgICBzaXpl X3Qgc3p0eXBlOworICAgICAgbWFuZ2xlKys7CisKKyAgICAgIG9ic3RhY2tf aW5pdCAoJm9idHlwZSk7CisgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICgm b2J0eXBlLCBtYW5nbGUpOworICAgICAgc3p0eXBlID0gb2JzdGFja19vYmpl Y3Rfc2l6ZSAoJm9idHlwZSk7CisgICAgICB0eXBlID0gb2JzdGFja19maW5p c2ggKCZvYnR5cGUpOworCisgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0 ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIlsiKTsKKyAgICAgIG9ic3RhY2tfZ3JvdyAodGVtcGJ1ZiwgdHlw ZSwgc3p0eXBlKTsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJdIik7CisKKyAgICAgIG9ic3RhY2tfZnJlZSAoJm9idHlwZSwgTlVMTCk7 CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIH0KKyAgICBjYXNlICdQJzog LyogcG9pbnRlciAoVCopICovCisgICAgICBtYW5nbGUrKzsKKyAgICAgIG1h bmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisgICAgICBv YnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiKiIpOworICAgICAgcmV0dXJu IG1hbmdsZTsKKyAgICBjYXNlICdJJzogLyogaWRlbnQgVCAqLworICAgIGNh c2UgJ0MnOiAvKiBjbGFzcyBUICovCisgICAgY2FzZSAnUyc6IC8qIHN0cnVj dCBUICovCisgICAgY2FzZSAnRSc6IC8qIGVudW0gVCAqLworICAgIGNhc2Ug J1QnOiAvKiB0eXBlZGVmIFQgKi8KKyAgICAgIG1hbmdsZSsrOworICAgICAg cmV0dXJuIGRfcGFyc2Vfc3ltYm9sICh0ZW1wYnVmLCBtYW5nbGUpOworICAg IGNhc2UgJ0QnOiAvKiBkZWxlZ2F0ZSBUICovCisgICAgICBtYW5nbGUrKzsK KyAgICAgIG1hbmdsZSA9IHBhcnNlX2Z1bmN0aW9uX3R5cGUgKHRlbXBidWYs IG1hbmdsZSk7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi ZGVsZWdhdGUiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAn Qic6IC8qIHR1cGxlIFQgKi8KKyAgICAgIC8qIFRPRE86IEhhbmRsZSB0aGlz LiAgKi8KKyAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogRnVuY3Rpb24g dHlwZXMgKi8KKyAgICBjYXNlICdGJzogY2FzZSAnVSc6IGNhc2UgJ1cnOgor ICAgIGNhc2UgJ1YnOiBjYXNlICdSJzoKKyAgICAgIG1hbmdsZSA9IHBhcnNl X2Z1bmN0aW9uX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisgICAgICBvYnN0 YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZnVuY3Rpb24iKTsKKyAgICAgIHJl dHVybiBtYW5nbGU7CisKKyAgICAvKiBCYXNpYyB0eXBlcyAqLworICAgIGNh c2UgJ24nOgorICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAibm9uZSIpOworICAgICAgcmV0dXJuIG1hbmdsZTsK KyAgICBjYXNlICd2JzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgInZvaWQiKTsKKyAgICAgIHJldHVybiBt YW5nbGU7CisgICAgY2FzZSAnZyc6CisgICAgICBtYW5nbGUrKzsKKyAgICAg IG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJieXRlIik7CisgICAgICBy ZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ2gnOgorICAgICAgbWFuZ2xlKys7 CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAidWJ5dGUiKTsK KyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAncyc6CisgICAgICBt YW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJz aG9ydCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICd0JzoK KyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgInVzaG9ydCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBj YXNlICdpJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgImludCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsK KyAgICBjYXNlICdrJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgInVpbnQiKTsKKyAgICAgIHJldHVybiBt YW5nbGU7CisgICAgY2FzZSAnbCc6CisgICAgICBtYW5nbGUrKzsKKyAgICAg IG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJsb25nIik7CisgICAgICBy ZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ20nOgorICAgICAgbWFuZ2xlKys7 CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAidWxvbmciKTsK KyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAnZic6CisgICAgICBt YW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJm bG9hdCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICdkJzoK KyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgImRvdWJsZSIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBj YXNlICdlJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgInJlYWwiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7 CisKKyAgICAvKiBJbWFnaW5hcnkgYW5kIENvbXBsZXggdHlwZXMgKi8KKyAg ICBjYXNlICdvJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgImlmbG9hdCIpOworICAgICAgcmV0dXJuIG1h bmdsZTsKKyAgICBjYXNlICdwJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImlkb3VibGUiKTsKKyAgICAg IHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAnaic6CisgICAgICBtYW5nbGUr KzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJpcmVhbCIp OworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICdxJzoKKyAgICAg IG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1Ziwg ImNmbG9hdCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICdy JzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAo dGVtcGJ1ZiwgImNkb3VibGUiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7Cisg ICAgY2FzZSAnYyc6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICJjcmVhbCIpOworICAgICAgcmV0dXJuIG1h bmdsZTsKKworICAgIC8qIE90aGVyIHR5cGVzICovCisgICAgY2FzZSAnYic6 CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJib29sIik7CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIGNh c2UgJ2EnOgorICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiY2hhciIpOworICAgICAgcmV0dXJuIG1hbmdsZTsK KyAgICBjYXNlICd1JzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgIndjaGFyIik7CisgICAgICByZXR1cm4g bWFuZ2xlOworICAgIGNhc2UgJ3cnOgorICAgICAgbWFuZ2xlKys7CisgICAg ICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZGNoYXIiKTsKKyAgICAg IHJldHVybiBtYW5nbGU7CisKKyAgICBkZWZhdWx0OiAvKiB1bmhhbmRsZWQg Ki8KKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLyogRXh0cmFj dCB0aGUgaWRlbnRpZmllciBmcm9tIE1BTkdMRSBhbmQgYXBwZW5kIGl0IHRv IFRFTVBCVUYuCisgICBSZXR1cm4gdGhlIHJlbWFpbmluZyBzdHJpbmcgb24g c3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuICAqLworc3RhdGljIGNvbnN0 IGNoYXIgKgorcGFyc2VfaWRlbnRpZmllciAoc3RydWN0IG9ic3RhY2sgKnRl bXBidWYsIGNvbnN0IGNoYXIgKm1hbmdsZSkKK3sKKyAgaWYgKG1hbmdsZSA9 PSBOVUxMIHx8ICptYW5nbGUgPT0gJ1wwJykKKyAgICByZXR1cm4gbWFuZ2xl OworCisgIGlmIChJU0RJR0lUICgqbWFuZ2xlKSkKKyAgICB7CisgICAgICBj aGFyICplbmRwdHI7CisgICAgICBsb25nIGkgPSBzdHJ0b2wgKG1hbmdsZSwg JmVuZHB0ciwgMTApOworCisgICAgICBpZiAoaSA8PSAwIHx8IHN0cmxlbiAo ZW5kcHRyKSA8IGkpCisJcmV0dXJuIE5VTEw7CisKKyAgICAgIG1hbmdsZSA9 IGVuZHB0cjsKKworICAgICAgLyogTm8gc3VwcG9ydCBmb3IgZGVtYW5nbGlu ZyB0ZW1wbGF0ZXMuICAqLworICAgICAgaWYgKGkgPj0gNSAmJiBzdHJuY21w IChtYW5nbGUsICJfX1QiLCAzKSA9PSAwKQorCXJldHVybiBOVUxMOworCisg ICAgICBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX19jdG9yIiwgaSkgPT0gMCkK Kwl7CisJICAvKiBDb25zdHJ1Y3RvciBzeW1ib2wgZm9yIGEgY2xhc3Mvc3Ry dWN0LiAgKi8KKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ0aGlz Iik7CisJICBtYW5nbGUgKz0gaTsKKwkgIHJldHVybiBtYW5nbGU7CisJfQor ICAgICAgZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX19kdG9yIiwgaSkg PT0gMCkKKwl7CisJICAvKiBEZXN0cnVjdG9yIHN5bWJvbCBmb3IgYSBjbGFz cy9zdHJ1Y3QuICAqLworCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1Ziwg In50aGlzIik7CisJICBtYW5nbGUgKz0gaTsKKwkgIHJldHVybiBtYW5nbGU7 CisJfQorICAgICAgZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX19wb3N0 YmxpdCIsIGkpID09IDApCisJeworCSAgLyogUG9zdGJsaXQgc3ltYm9sIGZv ciBhIHN0cnVjdC4gICovCisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVm LCAidGhpcyh0aGlzKSIpOworCSAgbWFuZ2xlICs9IGk7CisJICByZXR1cm4g bWFuZ2xlOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwg Il9faW5pdFoiLCBpKzEpID09IDApCisJeworCSAgLyogVGhlIHN0YXRpYyBp bml0aWFsaXNlciBmb3IgYSBnaXZlbiBzeW1ib2wuICAqLworCSAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgImluaXQkIik7CisJICBtYW5nbGUgKz0g aSArIDE7CisJICByZXR1cm4gbWFuZ2xlOworCX0KKyAgICAgIGVsc2UgaWYg KHN0cm5jbXAgKG1hbmdsZSwgIl9fQ2xhc3NaIiwgaSsxKSA9PSAwKQorCXsK KwkgIC8qIFRoZSBjbGFzc2luZm8gc3ltYm9sIGZvciBhIGdpdmVuIGNsYXNz LiAgKi8KKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJjbGFzc2lu Zm8kIik7CisJICBtYW5nbGUgKz0gaSArIDE7CisJICByZXR1cm4gbWFuZ2xl OworCX0KKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fdnRi bFoiLCBpKzEpID09IDApCisJeworCSAgLyogVGhlIHZ0YWJsZSBzeW1ib2wg Zm9yIGEgZ2l2ZW4gY2xhc3MuICAqLworCSAgb2JzdGFja19ncm93X3N0ciAo dGVtcGJ1ZiwgInZ0YmwkIik7CisJICBtYW5nbGUgKz0gaSArIDE7CisJICBy ZXR1cm4gbWFuZ2xlOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1h bmdsZSwgIl9fSW50ZXJmYWNlWiIsIGkrMSkgPT0gMCkKKwl7CisJICAvKiBU aGUgaW50ZXJmYWNlIHN5bWJvbCBmb3IgYSBnaXZlbiBjbGFzcy4gICovCisJ ICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaW50ZXJmYWNlJCIpOwor CSAgbWFuZ2xlICs9IGkgKyAxOworCSAgcmV0dXJuIG1hbmdsZTsKKwl9Cisg ICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX01vZHVsZUluZm9a IiwgaSsxKSA9PSAwKQorCXsKKwkgIC8qIFRoZSBNb2R1bGVJbmZvIHN5bWJv bCBmb3IgYSBnaXZlbiBtb2R1bGUuICAqLworCSAgb2JzdGFja19ncm93X3N0 ciAodGVtcGJ1ZiwgIm1vZHVsZWluZm8kIik7CisJICBtYW5nbGUgKz0gaSAr IDE7CisJICByZXR1cm4gbWFuZ2xlOworCX0KKyAgICAgIG9ic3RhY2tfZ3Jv dyAodGVtcGJ1ZiwgbWFuZ2xlLCBpKTsKKyAgICAgIG1hbmdsZSArPSBpOwor ICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBt YW5nbGU7Cit9CisKK3N0YXRpYyBpbnQKK2NhbGxfY29udmVudGlvbl9wIChj b25zdCBjaGFyICptYW5nbGUpCit7CisgIHNpemVfdCBpOworCisgIHN3aXRj aCAoKm1hbmdsZSkKKyAgICB7CisgICAgY2FzZSAnRic6IGNhc2UgJ1UnOiBj YXNlICdWJzoKKyAgICBjYXNlICdXJzogY2FzZSAnUic6CisgICAgICByZXR1 cm4gMTsKKworICAgIGNhc2UgJ00nOiAvKiBQcmVmaXggZm9yIGZ1bmN0aW9u cyBuZWVkaW5nICd0aGlzJyAqLworICAgICAgaSA9IDE7CisgICAgICBpZiAo bWFuZ2xlW2ldID09ICd4JykKKwlpKys7CisKKyAgICAgIHN3aXRjaCAobWFu Z2xlW2ldKQorCXsKKwljYXNlICdGJzogY2FzZSAnVSc6IGNhc2UgJ1YnOgor CWNhc2UgJ1cnOiBjYXNlICdSJzoKKwkgIHJldHVybiAxOworCX0KKworICAg IGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8qIEV4 dHJhY3QgYW5kIGRlbWFuZ2xlIHRoZSBzeW1ib2wgaW4gTUFOR0xFIGFuZCBh cHBlbmQgaXQgdG8gVEVNUEJVRi4KKyAgIFJldHVybiB0aGUgcmVtYWluaW5n IHNpZ25hdHVyZSBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVyZS4gICov Citjb25zdCBjaGFyICoKK2RfcGFyc2Vfc3ltYm9sIChzdHJ1Y3Qgb2JzdGFj ayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQoreworICBzaXplX3Qg biA9IDA7CisgIGRvCisgICAgeworICAgICAgaWYgKG4rKykKKwlvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAiLiIpOworCisgICAgICBtYW5nbGUgPSBw YXJzZV9pZGVudGlmaWVyICh0ZW1wYnVmLCBtYW5nbGUpOworCisgICAgICBp ZiAobWFuZ2xlICYmIGNhbGxfY29udmVudGlvbl9wIChtYW5nbGUpKQorCXsK KwkgIGNoYXIgKnNhdmVkOworCisJICAvKiBTa2lwIG92ZXIgJ3RoaXMnIHBh cmFtZXRlci4gICovCisJICBpZiAoKm1hbmdsZSA9PSAnTScpCisJICAgIG1h bmdsZSArPSAobWFuZ2xlWzFdID09ICd4JykgPyAyIDogMTsKKworCSAgLyog U2tpcCBvdmVyIGNhbGxpbmcgY29udmVudGlvbiBhbmQgYXR0cmlidXRlcyBp biBxdWFsaWZpZWQgbmFtZS4gICovCisJICBzYXZlZCA9IG9ic3RhY2tfbmV4 dF9mcmVlICh0ZW1wYnVmKTsKKwkgIG1hbmdsZSA9IHBhcnNlX2NhbGxfY29u dmVudGlvbiAodGVtcGJ1ZiwgbWFuZ2xlKTsKKwkgIG1hbmdsZSA9IHBhcnNl X2F0dHJpYnV0ZXMgKHRlbXBidWYsIG1hbmdsZSk7CisJICBvYnN0YWNrX25l eHRfZnJlZSAodGVtcGJ1ZikgPSBzYXZlZDsKKworCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIigiKTsKKwkgIG1hbmdsZSA9IHBhcnNlX2Z1bmN0 aW9uX2FyZ3MgKHRlbXBidWYsIG1hbmdsZSk7CisJICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiKSIpOworCisJICAvKiBEZW1hbmdsZSB0aGUgZnVu Y3Rpb24gcmV0dXJuIHR5cGUgYXMgYSBraW5kIG9mIHNhbml0eSB0ZXN0LiAg Ki8KKwkgIGlmIChtYW5nbGUgJiYgIUlTRElHSVQgKCptYW5nbGUpKQorCSAg ICB7CisJICAgICAgc2F2ZWQgPSBvYnN0YWNrX25leHRfZnJlZSAodGVtcGJ1 Zik7CisJICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFu Z2xlKTsKKwkgICAgICBvYnN0YWNrX25leHRfZnJlZSAodGVtcGJ1ZikgPSBz YXZlZDsKKwkgICAgfQorCX0KKyAgICB9CisgIHdoaWxlIChtYW5nbGUgJiYg SVNESUdJVCAoKm1hbmdsZSkpOworCisgIHJldHVybiBtYW5nbGU7Cit9CisK --047d7bea3f34a4393c04ef9f0ee3--