From owner-freebsd-cvsweb@FreeBSD.ORG Tue Aug 12 03:08:02 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 341A637B401 for ; Tue, 12 Aug 2003 03:08:02 -0700 (PDT) Received: from wehq.winbond.com.tw (wehq.winbond.com.tw [202.39.229.15]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1D71F43FBD for ; Tue, 12 Aug 2003 03:07:59 -0700 (PDT) (envelope-from XHChen@Winbond.com.tw) Received: from wemlg.winbond.com.tw (wemlg [10.2.6.199]) by wehq.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CA7utj010402 for ; Tue, 12 Aug 2003 18:07:56 +0800 (CST) Received: from WEHQIMC02.winbond.com.tw (wehqimc02 [10.2.6.99]) by wemlg.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CA7JCo027601 for ; Tue, 12 Aug 2003 18:07:26 +0800 (CST) Received: from WEHQIMC01.winbond.com.tw ([192.168.6.152]) by WEHQIMC02.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:05:50 +0800 Received: from weshml02.winbond.com.tw ([10.130.10.34]) by WEHQIMC01.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:05:44 +0800 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C360B9.49C45A42" X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 Date: Tue, 12 Aug 2003 18:05:41 +0800 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Graph of revisions for cvsweb.cgi Thread-Index: AcNguXRG6JCq/rGGSPOVilvjehLmKQ== From: "PC32 XHChen" To: X-OriginalArrivalTime: 12 Aug 2003 10:05:44.0049 (UTC) FILETIME=[4B074610:01C360B9] X-Content-Filtered-By: Mailman/MimeDel 2.1.1 Subject: Graph of revisions for cvsweb.cgi X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Aug 2003 10:08:02 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01C360B9.49C45A42 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 RGVhciBhbGw6DQoJSSBtb2RpZmllZCBjdnN3ZWIuY2dpIGZvciBzdXBwb3J0aW5nICJncmFwaCBz ZWxlY3Rpb24iIGFzIHdoYXQncyBpbiB3aW5jdnMuDQoJVGhhbmtzIGZvciB0cnlpbmcgaXQgIQ0K DQpCZXN0IHJlZ2FyZHMuDQp4aGNoZW5Ad2luYm9uZC5jb20udHcNCigyMS02MjM2NTk5OS0xODEx KQ0KQ2hlbiBYaWFvaHVpDQo= Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1UaGUgcHJpdmlsZWdlZCBjb25maWRl bnRpYWwgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZW1haWwgaXMgaW50ZW5kZWQgZm9y IHVzZSBvbmx5IGJ5IHRoZSBhZGRyZXNzZWVzIGFzIGluZGljYXRlZCBieSB0aGUgb3JpZ2luYWwg YXV0aG9yIG9mIHRoaXMgZW1haWwuIElmIHlvdSBhcmUgbm90IHRoZSBhZGRyZXNzZWUgaW5kaWNh dGVkIGluIHRoaXMgZW1haWwgb3IgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcnkgb2Yg dGhlIGVtYWlsIHRvIHN1Y2ggcGVyc29uLCBwbGVhc2Uga2luZGx5IHJlcGx5IHRoZSBzZW5kZXIg aW5kaWNhdGluZyBhY2NvcmRpbmdseSBhbmQgZGVsZXRlIGFsbCBjb3BpZXMgb2YgaXQgZnJvbSB5 b3VyIGNvbXB1dGVyIGFuZCBuZXR3b3JrIHNlcnZlciBpbW1lZGlhdGVseS4gV2UgdGhhbmsgeW91 IGZvciB5b3VyIGNvb3BlcmF0aW9uLiBJdCBpcyBhZHZpc2FibGUgdGhhdCBhbnkgdW5hdXRob3Jp emVkIHVzZSBvZiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgV2luYm9uZCBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkOyBhbmQgYW55IGluZm9ybWF0aW9uIGluIHRoaXMgZW1haWwgdGhhdCBkb2Vz IG5vdCByZWxhdGUgdG8gdGhlIG9mZmljaWFsIGJ1c2luZXNzIG9mIFdpbmJvbmQgc2hhbGwgYmUg ZGVlbWVkIGFzIG5laXRoZXIgZ2l2ZW4gbm9yIGVuZG9yc2VkIGJ5IFdpbmJvbmQuPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PUlmIHlvdXIgY29tcHV0ZXIgaXMgdW5hYmxlIHRvIGRl Y29kZSBDaGluZXNlIGZvbnQsIHBsZWFzZSBpZ25vcmUgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBU aGV5IGVzc2VudGlhbGx5IHJlcGVhdCB0aGUmbmJzcDsgRW5nbGlzaCBzdGF0ZW1lbnQgYWJvdmUu pburSKXzpLqp0qd0tdioublxpGyqurBdsqOpyr73sUupyrjqsFQsILbIscLFdq3stW+rSKRIq/yp d6SnpqyrSKRIqPq+XKSnpc4uILCyqM+xeqjDq0SzUav8qXekp6asq0ikSKnOpl2l9KbzreymXaZi pby4Z7HCxXaqurGhp86kp6RVpqyo7KW7q0il8ywgvdCxeqdpqr6t7LVvq0ikSKjDpd+nWbFOq0il 87FxuXG4o7tQuvS49Kb4qkG+uaSkpKmlSK74sKMuILnvqfOxeqq6plinQCwgp9qtzKX9prmtUMHC LiCvU6a5tKO/9CwgpfSm86W8uGexwsV2vtWm26jPpc612Ki5uXGkbKq6vvexS7jqsFSquqbmrLCs T7NRxFmu5rhUpO6qui4gq0il87tQtdioublxpGzA57d+tUzD9qSnpLquZSyko7FvtfissLXYqLm5 caRspKel37P1qc63TqijLg0K ------_=_NextPart_001_01C360B9.49C45A42 Content-Type: application/octet-stream; name="cvsweb.cgi" Content-Transfer-Encoding: base64 Content-Description: cvsweb.cgi Content-Disposition: attachment; filename="cvsweb.cgi" IyEvdXNyL2Jpbi9wZXJsIC13VAojCiMgY3Zzd2ViIC0gYSBDR0kgaW50ZXJmYWNlIHRvIENWUyB0 cmVlcy4KIwojIFdyaXR0ZW4gaW4gdGhlaXIgc3BhcmUgdGltZSBieQojICAgICAgICAgICAgIEJp bGwgRmVubmVyICAgICAgICAgIDxmZW5uZXJARnJlZUJTRC5vcmc+ICAgKG9yaWdpbmFsIHdvcmsp CiMgZXh0ZW5kZWQgYnkgSGVubmVyIFplbGxlciAgICAgICAgPHplbGxlckB0aGluay5kZT4sCiMg ICAgICAgICAgICAgSGVucmlrIE5vcmRzdHJvbSAgICAgPGhub0BoZW0ucGFzc2FnZW4uc2U+CiMg ICAgICAgICAgICAgS2VuIENvYXIgICAgICAgICAgICAgPGNvYXJAQXBhY2hlLk9yZz4KIyAgICAg ICAgICAgICBEaWNrIEJhbGFza2EgICAgICAgICA8ZGlja0BidWNrb3NvZnQuY29tPgojICAgICAg ICAgICAgIEFraW5vcmkgTVVTSEEgICAgICAgIDxrbnVARnJlZUJTRC5vcmc+CiMgICAgICAgICAg ICAgSmVucy1Vd2UgTWFnZXIgICAgICAgPGp1bUBoZWxpb3MuZGU+CiMgICAgICAgICAgICAgVmls bGUgU2t5dHTkICAgICAgICAgPHNjb3BARnJlZUJTRC5vcmc+CiMgICAgICAgICAgICAgVmFzc2ls aWkgS2hhY2hhdHVyb3YgPHZhc3NpbGlpQHRhcnVuei5vcmc+CiMKIyBCYXNlZCBvbjoKIyAqIEJp bGwgRmVubmVycyBjdnN3ZWIuY2dpIHJldmlzaW9uIDEuMjggYXZhaWxhYmxlIGZyb206CiMgICBo dHRwOi8vd3d3LkZyZWVCU0Qub3JnL2NnaS9jdnN3ZWIuY2dpL3d3dy9lbi9jZ2kvY3Zzd2ViLmNn aQojCiMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTggQmlsbCBGZW5uZXIKIyAgICAgICAgICAgKGMp IDE5OTgtMTk5OSBIZW5uZXIgWmVsbGVyCiMgICAgICAgICAgIChjKSAxOTk5ICAgICAgSGVucmlr IE5vcmRzdHJvbQojICAgICAgICAgICAoYykgMjAwMC0yMDAyIEFraW5vcmkgTVVTSEEKIyAgICAg ICAgICAgKGMpIDIwMDIgICAgICBWaWxsZSBTa3l0dOQKIyBBbGwgcmlnaHRzIHJlc2VydmVkLgoj CiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ UycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiMgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiMg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgojIFNV Q0ggREFNQUdFLgojCiMgJEZyZWVCU0Q6IHByb2plY3RzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS4x MTkuMi42IDIwMDIvMDkvMjYgMjA6NTY6MDUgc2NvcCBFeHAgJAojICRJZDogY3Zzd2ViLmNnaSx2 IDEuMTEyIDIwMDEvMDcvMjQgMTM6MDM6MTYgaHplbGxlciBFeHAgJAojICRJZGFlbW9uczogL2hv bWUvY3ZzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS44NCAyMDAxLzEwLzA3IDIwOjUwOjEwIGtudSBF eHAgJAojCiMjIwoKcmVxdWlyZSA1LjAwMDsKCnVzZSBzdHJpY3Q7Cgp1c2UgdmFycyBxdyAoCiAg ICAkY3Zzd2ViX3JldmlzaW9uCiAgICAkbXlkaXIgJHVuYW1lICRjb25maWcgJGFsbG93X3ZlcnNp b25fc2VsZWN0ICR2ZXJib3NlCiAgICBAQ1ZTcmVwb3NpdG9yaWVzIEBDVlNST09UICVDVlNST09U ICVDVlNST09UZGVzY3IKICAgICVNSVJST1JTICVERUZBVUxUVkFMVUUgJUlDT05TICVNVFlQRVMK ICAgIEBESUZGVFlQRVMgJURJRkZUWVBFUyBATE9HU09SVEtFWVMgJUxPR1NPUlRLRVlTCiAgICAl YWxsdGFncyBAdGFiY29sb3JzICVmaWxlaW5mbyAldGFncyBAYnJhbmNobmFtZXMgJW5hbWVwcmlu dGVkCiAgICAlc3ltcmV2ICVyZXZzeW0gQGFsbHJldmlzaW9ucyAlZGF0ZSAlYXV0aG9yIEByZXZk aXNwbGF5b3JkZXIKICAgIEByZXZpc2lvbnMgJXN0YXRlICVkaWZmbGluZXMgJWxvZyAlYnJhbmNo cG9pbnQgQHJldm9yZGVyCiAgICAkcHJjZ2kgQHByY2F0ZWdvcmllcyAkcmVfcHJjYXRlZ29yaWVz ICRwcmtleXdvcmQgJHJlX3Bya2V5d29yZCAkbWFuY2dpCiAgICAkY2hlY2tvdXRNYWdpYyAkZG9D aGVja291dCAkc2NyaXB0bmFtZSAkc2NyaXB0d2hlcmUKICAgICR3aGVyZSAkcGF0aGluZm8gJEJy b3dzZXIgJG5vZmlsZWxpbmtzICRtYXljb21wcmVzcwogICAgQHN0aWNreXZhcnMgQHVuc2FmZXZh cnMKICAgICVmdW5jbGluZV9yZWdleHAgJGlzX21vZF9wZXJsCiAgICAkaXNfbGlua3MgJGlzX2x5 bnggJGlzX3czbSAkaXNfbXNpZSAkaXNfbW96aWxsYTMgJGlzX3RleHRiYXNlZAogICAgJWlucHV0 ICRxdWVyeSAkYmFyZXF1ZXJ5ICRzb3J0YnkgJGJ5ZGF0ZSAkYnlyZXYgJGJ5YXV0aG9yCiAgICAk Ynlsb2cgJGJ5ZmlsZSAkZGVmYXVsdERpZmZUeXBlICRsb2dzb3J0ICRjdnN0cmVlICRjdnNyb290 CiAgICAkbWltZXR5cGUgJGNoYXJzZXQgJG91dHB1dF9maWx0ZXIgJGRlZmF1bHRUZXh0UGxhaW4g JGRlZmF1bHRWaWV3YWJsZQogICAgJGNvbW1hbmRfcGF0aCAlQ01EICRhbGxvd19jb21wcmVzcwog ICAgJGJhY2tpY29uICRkaXJpY29uICRmaWxlaWNvbgogICAgJGZ1bGxuYW1lICRuZXduYW1lICRj dnN0cmVlZGVmYXVsdAogICAgJGJvZHlfdGFnICRib2R5X3RhZ19mb3Jfc3JjICRsb2dvICRkZWZh dWx0dGl0bGUgJGFkZHJlc3MKICAgICRsb25nX2ludHJvICRzaG9ydF9pbnN0cnVjdGlvbiAkc2hv cnRMb2dMZW4KICAgICRzaG93X2F1dGhvciAkZGlydGFibGUgJHRhYmxlcGFkZGluZyAkY29sdW1u SGVhZGVyQ29sb3JEZWZhdWx0CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgJGhyX2JyZWFr YWJsZSAkc2hvd2Z1bmMgJGhyX2lnbndoaXRlCiAgICAkaHJfaWdua2V5c3Vic3QgJGRpZmZjb2xv ckhlYWRpbmcgJGRpZmZjb2xvckVtcHR5ICRkaWZmY29sb3JSZW1vdmUKICAgICRkaWZmY29sb3JD aGFuZ2UgJGRpZmZjb2xvckFkZCAkZGlmZmNvbG9yRGFya0NoYW5nZSAkZGlmZmZvbnRmYWNlCiAg ICAkZGlmZmZvbnRzaXplICRpbnB1dFRleHRTaXplICRtaW1lX3R5cGVzCiAgICAkYWxsb3dfYW5u b3RhdGUgJGFsbG93X21hcmt1cAogICAgJGFsbG93X2xvZ19leHRyYSAkYWxsb3dfZGlyX2V4dHJh ICRhbGxvd19zb3VyY2VfZXh0cmEKICAgICR1c2VfamF2YV9zY3JpcHQgJG9wZW5fZXh0ZXJuX3dp bmRvdwogICAgJGV4dGVybl93aW5kb3dfd2lkdGggJGV4dGVybl93aW5kb3dfaGVpZ2h0ICRlZGl0 X29wdGlvbl9mb3JtCiAgICAkc2hvd19zdWJkaXJfbGFzdG1vZCAkc2hvd19sb2dfaW5fbWFya3Vw ICRwcmVmb3JtYXRfaW5fbWFya3VwICR2CiAgICAkbmF2aWdhdGlvbkhlYWRlckNvbG9yICR0YWJs ZUJvcmRlckNvbG9yICRtYXJrdXBMb2dDb2xvcgogICAgJHRhYnN0b3AgJHN0YXRlICRhbm5UYWJs ZSAkc2VsICRjdXJicmFuY2ggQEhpZGVNb2R1bGVzIEBGb3JiaWRkZW5GaWxlcwogICAgJG1vZHVs ZSAkdXNlX2Rlc2NyaXB0aW9ucyAlZGVzY3JpcHRpb25zIEBteXR6ICRkd2hlcmUgJG1vZGRhdGUK ICAgICR1c2VfbW9kZGF0ZSAkaGFzX3psaWIgJGd6aXBfb3BlbgogICAgJGFsbG93X3RhciBAdGFy X29wdGlvbnMgQGd6aXBfb3B0aW9ucyBAemlwX29wdGlvbnMgQGN2c19vcHRpb25zCiAgICBAYW5u b3RhdGVfb3B0aW9ucyAkTE9HX0ZJTEVTRVBBUkFUT1IgJExPR19SRVZTRVBBUkFUT1IKICAgICR0 bXBkaXIgJEhUTUxfRE9DVFlQRSAkSFRNTF9NRVRBCik7CgpzdWIgcHJpbnREaWZmU2VsZWN0KCQp OwpzdWIgcHJpbnREaWZmTGlua3MoJCQpOwpzdWIgcHJpbnRMb2dTb3J0U2VsZWN0KCQpOwpzdWIg ZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCk7CnN1YiBodG1saWZ5X3N1YigmJCk7CnN1YiBodG1s aWZ5KCQ7JCk7CnN1YiBzcGFjZWRIdG1sVGV4dCgkOyQpOwpzdWIgbGluaygkJCk7CnN1YiByZXZj bXAoJCQpOwpzdWIgZmF0YWwoJCRAKTsKc3ViIHJlZGlyZWN0KCQpOwpzdWIgc2FmZWdsb2IoJCk7 CnN1YiBzZWFyY2hfcGF0aCgkKTsKc3ViIGdldE1pbWVUeXBlRnJvbVN1ZmZpeCgkKTsKc3ViIGhl YWQoJDskKTsKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKTsKc3ViIG9wZW5PdXRwdXRGaWx0ZXIoKTsK c3ViIGRvQW5ub3RhdGUoJCQpOwpzdWIgZG9DaGVja291dCgkJCk7CnN1YiBjdnN3ZWJNYXJrdXAo JCQkKTsKc3ViIHZpZXdhYmxlKCQpOwpzdWIgZG9EaWZmKCQkJCQkJCk7CnN1YiBnZXREaXJMb2dz KCQkQCk7CnN1YiByZWFkTG9nKCQ7JCk7CnN1YiBwcmludExvZygkOyQpOwpzdWIgZG9Mb2coJCk7 CnN1YiBkb0dyYXBoKCQpOyN4aGNoZW4Kc3ViIGZsdXNoX2RpZmZfcm93cygkJCQkKTsKc3ViIGh1 bWFuX3JlYWRhYmxlX2RpZmYoJCk7CnN1YiBuYXZpZ2F0ZUhlYWRlcigkJCQkJCk7CnN1YiBwbHVy YWxfd3JpdGUoJCQpOwpzdWIgcmVhZGFibGVUaW1lKCQkKTsKc3ViIGNsaWNrYWJsZVBhdGgoJCQp OwpzdWIgY2hvb3NlQ1ZTUm9vdCgpOwpzdWIgY2hvb3NlTWlycm9yKCk7CnN1YiBmaWxlU29ydENt cCgpOwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpOwpzdWIgZG93bmxvYWRfbGluaygkJCQ7JCk7CnN1 YiB0b2dnbGVRdWVyeSgkJCk7CnN1YiB1cmxlbmNvZGUoJCk7CnN1YiBodG1sanMoJCk7I3hoY2hl bgpzdWIgaHRtbHF1b3RlKCQpOwpzdWIgaHRtbHVucXVvdGUoJCk7CnN1YiBocmVmcXVvdGUoJCk7 CnN1YiBodHRwX2hlYWRlcig7JCk7CnN1YiBodG1sX2hlYWRlcigkKTsKc3ViIGh0bWxfZm9vdGVy KCk7CnN1YiBsaW5rX3RhZ3MoJCk7CnN1YiBmb3JiaWRkZW5fZmlsZSgkKTsKc3ViIGZvcmJpZGRl bl9tb2R1bGUoJCk7CgojIyMjIyBTdGFydCBvZiBDb25maWd1cmF0aW9uIEFyZWEgIyMjIyMjIyMK ZGVsZXRlICRFTlZ7UEFUSH07CgokY3Zzd2ViX3JldmlzaW9uID0gJzIuMC42JzsKCnVzZSBGaWxl OjpCYXNlbmFtZSAoKTsKCigkbXlkaXIpID0gKEZpbGU6OkJhc2VuYW1lOjpkaXJuYW1lKCQwKSA9 fiAvKC4qKS8pOyAgICAjIHVudGFpbnQKCiMgPT0gRURJVCB0aGlzID09CiMgTG9jYXRpb25zIHRv IHNlYXJjaCBmb3IgdXNlciBjb25maWd1cmF0aW9uLCBpbiBvcmRlcjoKZm9yICgiJG15ZGlyL2N2 c3dlYi5jb25mIiwgJy91c3IvbG9jYWwvZXRjL2N2c3dlYi9jdnN3ZWIuY29uZicpIHsKCWlmIChk ZWZpbmVkKCRfKSAmJiAtciAkXykgewoJCSRjb25maWcgPSAkXzsKCQlsYXN0OwoJfQp9CgojID09 IENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgPT0KIyBEZWZhdWx0cyBmb3IgY29uZmlndXJhdGlvbiB2 YXJpYWJsZXMgdGhhdCBzaG91bGRuJ3QgbmVlZAojIHRvIGJlIGNvbmZpZ3VyZWQuLgokYWxsb3df dmVyc2lvbl9zZWxlY3QgPSAxOwokYWxsb3dfbG9nX2V4dHJhID0gMTsKCiMjIyMjIEVuZCBvZiBD b25maWd1cmF0aW9uIEFyZWEgICAjIyMjIyMjIwoKIyMjIyMjIyMgQ29uZmlndXJhdGlvbiB2YXJp YWJsZXMgIyMjIyMjIyMjCiMgVGhlc2UgYXJlIGRlZmluZWQgdG8gYWxsb3cgY2hlY2tpbmcgd2l0 aCBwZXJsIC1jdwpAQ1ZTcmVwb3NpdG9yaWVzID0gQENWU1JPT1QgPSAlQ1ZTUk9PVCA9ICVNSVJS T1JTID0gJURFRkFVTFRWQUxVRSA9ICVJQ09OUyA9CiAgICAlTVRZUEVTID0gJXRhZ3MgPSAlYWxs dGFncyA9IEB0YWJjb2xvcnMgPSAlZmlsZWluZm8gPSAoKTsKJGN2c3RyZWVkZWZhdWx0ID0gJGJv ZHlfdGFnID0gJGJvZHlfdGFnX2Zvcl9zcmMgPSAkbG9nbyA9ICRkZWZhdWx0dGl0bGUgPQogICAg JGFkZHJlc3MgPSAkbG9uZ19pbnRybyA9ICRzaG9ydF9pbnN0cnVjdGlvbiA9ICRzaG9ydExvZ0xl biA9ICRzaG93X2F1dGhvciA9CiAgICAkZGlydGFibGUgPSAkdGFibGVwYWRkaW5nID0gJGNvbHVt bkhlYWRlckNvbG9yRGVmYXVsdCA9CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgPSAkaHJf YnJlYWthYmxlID0gJHNob3dmdW5jID0gJGhyX2lnbndoaXRlID0KICAgICRocl9pZ25rZXlzdWJz dCA9ICRkaWZmY29sb3JIZWFkaW5nID0gJGRpZmZjb2xvckVtcHR5ID0gJGRpZmZjb2xvclJlbW92 ZSA9CiAgICAkZGlmZmNvbG9yQ2hhbmdlID0gJGRpZmZjb2xvckFkZCAgPSAkZGlmZmNvbG9yRGFy a0NoYW5nZSA9ICRkaWZmZm9udGZhY2UgICA9CiAgICAkZGlmZmZvbnRzaXplICAgID0gJGlucHV0 VGV4dFNpemUgPSAkbWltZV90eXBlcyAgICAgICAgICA9ICRhbGxvd19hbm5vdGF0ZSA9CiAgICAk YWxsb3dfbWFya3VwICAgICAgICA9ICR1c2VfamF2YV9zY3JpcHQgICAgICA9ICRvcGVuX2V4dGVy bl93aW5kb3cgPQogICAgJGV4dGVybl93aW5kb3dfd2lkdGggPSAkZXh0ZXJuX3dpbmRvd19oZWln aHQgPSAkZWRpdF9vcHRpb25fZm9ybSAgID0KICAgICRzaG93X3N1YmRpcl9sYXN0bW9kID0gJHNo b3dfbG9nX2luX21hcmt1cCA9ICR2ID0gJG5hdmlnYXRpb25IZWFkZXJDb2xvciA9CiAgICAkdGFi bGVCb3JkZXJDb2xvciA9ICRtYXJrdXBMb2dDb2xvciA9ICR0YWJzdG9wID0gJHVzZV9tb2RkYXRl ID0gJG1vZGRhdGUgPQogICAgJGd6aXBfb3BlbiA9ICRIVE1MX0RPQ1RZUEUgPSAkSFRNTF9NRVRB ID0gdW5kZWY7CiR0bXBkaXIgPSBkZWZpbmVkKCRFTlZ7VE1QRElSfSkgPyAkRU5We1RNUERJUn0g OiAiL3Zhci90bXAiOwoKJExPR19GSUxFU0VQQVJBVE9SID0gcS9ePXs3N30kLzsKJExPR19SRVZT RVBBUkFUT1IgID0gcS9eLXsyOH0kLzsKCkBESUZGVFlQRVMgPSBxdyhoIEggdSBjIHMpOwpARElG RlRZUEVTe0BESUZGVFlQRVN9ID0gKAoJewoJCSdkZXNjcicgICA9PiAnY29sb3JlZCcsCgkJJ29w dHMnICAgID0+IFsnLXUnXSwKCQknY29sb3JlZCcgPT4gMSwKCX0sCgl7CgkJJ2Rlc2NyJyAgID0+ ICdsb25nIGNvbG9yZWQnLAoJCSdvcHRzJyAgICA9PiBbJy0tdW5pZmllZD0xNSddLAoJCSdjb2xv cmVkJyA9PiAxLAoJfSwKCXsKCQknZGVzY3InICAgPT4gJ3VuaWZpZWQnLAoJCSdvcHRzJyAgICA9 PiBbJy11J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAoJewoJCSdkZXNjcicgICA9PiAnY29udGV4 dCcsCgkJJ29wdHMnICAgID0+IFsnLWMnXSwKCQknY29sb3JlZCcgPT4gMCwKCX0sCgl7CgkJJ2Rl c2NyJyAgID0+ICdzaWRlIGJ5IHNpZGUnLAoJCSdvcHRzJyAgICA9PiBbJy0tc2lkZS1ieS1zaWRl JywgJy0td2lkdGg9MTY0J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAopOwoKQExPR1NPUlRLRVlT ID0gcXcoY3ZzIGRhdGUgcmV2KTsKQExPR1NPUlRLRVlTe0BMT0dTT1JUS0VZU30gPSAoCgl7CgkJ J2Rlc2NyJyA9PiAnTm90IHNvcnRlZCcsCgl9LAoJewoJCSdkZXNjcicgPT4gJ0NvbW1pdCBkYXRl JywKCX0sCgl7CgkJJ2Rlc2NyJyA9PiAnUmV2aXNpb24nLAoJfSwKKTsKCiRIVE1MX0RPQ1RZUEUg PQogICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0 aW9uYWwvL0VOIj4nOwoKJEhUTUxfTUVUQSA9IDw8RU9NOwo8bWV0YSBuYW1lPSJyb2JvdHMiIGNv bnRlbnQ9Im5vZm9sbG93Ij4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGcmVlQlNE LUNWU3dlYiAkY3Zzd2ViX3JldmlzaW9uIj4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3Jp cHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29u dGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+CkVPTQoKIyMjIyMgRW5kIG9mIGNv bmZpZ3VyYXRpb24gdmFyaWFibGVzICMjIyMjCgp1c2UgVGltZTo6TG9jYWwgKCk7CnVzZSBJUEM6 Ok9wZW4yIHF3KG9wZW4yKTsKCiMgQ2hlY2sgaWYgdGhlIHpsaWIgQyBsaWJyYXJ5IGludGVyZmFj ZSBpcyBpbnN0YWxsZWQsIGFuZCBpZiB5ZXMKIyB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGV4dHJh IGd6aXAgcHJvY2Vzcy4KZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07CiRoYXNfemxp YiA9ICEkQDsKCiR2ZXJib3NlICAgICAgID0gJHY7CiRjaGVja291dE1hZ2ljID0gIn5jaGVja291 dH4iOwokcGF0aGluZm8gICAgICA9IGRlZmluZWQoJEVOVntQQVRIX0lORk99KSA/ICRFTlZ7UEFU SF9JTkZPfSA6ICcnOwokd2hlcmUgICAgICAgICA9ICRwYXRoaW5mbzsKJGRvQ2hlY2tvdXQgPSAo JHdoZXJlID1+IG18Xi8kY2hlY2tvdXRNYWdpYy98KTsKJHdoZXJlID1+IHN8Xi8kY2hlY2tvdXRN YWdpYy98L3w7CiR3aGVyZSA9fiBzfF4vfHw7CiRzY3JpcHRuYW1lID0gZGVmaW5lZCgkRU5We1ND UklQVF9OQU1FfSkgPyAkRU5We1NDUklQVF9OQU1FfSA6ICcnOwokc2NyaXB0bmFtZSA9fiBzfF4v KnwvfDsKCiMgTGV0J3Mgd29ya2Fyb3VuZCB0aHR0cGQncyBzdHVwaWRpdHkuLgppZiAoJHNjcmlw dG5hbWUgPX4gbXwvJHwpIHsKCSRwYXRoaW5mbyAuPSAnLyc7CglteSAkcmUgPSBxdW90ZW1ldGEg JHBhdGhpbmZvOwoJJHNjcmlwdG5hbWUgPX4gcy8kcmUkLy87Cn0KCiRzY3JpcHR3aGVyZSA9ICRz Y3JpcHRuYW1lOwokc2NyaXB0d2hlcmUgLj0gJy8nIC4gdXJsZW5jb2RlKCR3aGVyZSk7CiR3aGVy ZSA9ICcvJyBpZiAoJHdoZXJlIGVxICcnKTsKCiRpc19tb2RfcGVybCA9IGRlZmluZWQoJEVOVntN T0RfUEVSTH0pOwoKIyBpbiBseW54LCBpdCBpdCB2ZXJ5IGFubm95aW5nIHRvIGhhdmUgdHdvIGxp bmtzCiMgcGVyIGZpbGUsIHNvIGRpc2FibGUgdGhlIGxpbmsgYXQgdGhlIGljb24KIyBpbiB0aGlz IGNhc2U6CiRCcm93c2VyID0gJEVOVntIVFRQX1VTRVJfQUdFTlR9IHx8ICcnOwokaXNfbGlua3Mg ICAgPSAoJEJyb3dzZXIgPX4gbWBeTGlua3MgYCk7CiRpc19seW54ICAgICA9ICgkQnJvd3NlciA9 fiBtYF5MeW54L2BpKTsKJGlzX3czbSAgICAgID0gKCRCcm93c2VyID1+IG1gXnczbS9gaSk7CiRp c19tc2llICAgICA9ICgkQnJvd3NlciA9fiBtYE1TSUVgKTsKJGlzX21vemlsbGEzID0gKCRCcm93 c2VyID1+IG1gXk1vemlsbGEvWzMtOV1gKTsKCiRpc190ZXh0YmFzZWQgPSAoJGlzX2xpbmtzIHx8 ICRpc19seW54IHx8ICRpc193M20pOwoKJG5vZmlsZWxpbmtzID0gJGlzX3RleHRiYXNlZDsKCiMg bmV3ZXIgYnJvd3NlcnMgYWNjZXB0IGd6aXAgY29udGVudCBlbmNvZGluZwojIGFuZCBzdGF0ZSB0 aGlzIGluIGEgaGVhZGVyCiMgKG5ldHNjYXBlIGRpZCBhbHdheXMgYnV0IGRpZG4ndCBzdGF0ZSBp dCkKIyBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IHRoZXNlCiMgIGJyYWluZGFtYWdlZCBNUy1J bnRlcm5ldCBFeHBsb2RlcnMgY2xhaW0gdGhhdCB0aGV5CiMgYWNjZXB0IGd6aXAgLi4gYnV0IGRv bid0IGluIGZhY3QgYW5kCiMgZGlzcGxheSBnYXJiYWdlIHRoZW4gOi0vCiMgVHVybiBvZmYgZ3pp cCBpZiBydW5uaW5nIHVuZGVyIG1vZF9wZXJsIGFuZCBubyB6bGliIGlzIGF2YWlsYWJsZSwKIyBw aXBpbmcgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBpbnNpZGUgdGhlIHNlcnZlci4KJG1heWNv bXByZXNzID0KICAgICgoKGRlZmluZWQoJEVOVntIVFRQX0FDQ0VQVF9FTkNPRElOR30pCiAgICAm JiAkRU5We0hUVFBfQUNDRVBUX0VOQ09ESU5HfSA9fiBtYGd6aXBgKSB8fCAkaXNfbW96aWxsYTMp ICYmICEkaXNfbXNpZQogICAgJiYgISgkaXNfbW9kX3BlcmwgJiYgISRoYXNfemxpYikpOwoKIyBw dXQgaGVyZSB0aGUgdmFyaWFibGVzIHdlIG5lZWQgaW4gb3JkZXIKIyB0byBob2xkIG91ciBzdGF0 ZSAtIHRoZXkgd2lsbCBiZSBhZGRlZCAod2l0aAojIHRoZWlyIGN1cnJlbnQgdmFsdWUpIHRvIGFu eSBsaW5rL3F1ZXJ5IHN0cmluZwojIHlvdSBjb25zdHJ1Y3QKQHN0aWNreXZhcnMgPSBxdyhjdnNy b290IGhpZGVhdHRpYyBzb3J0YnkgbG9nc29ydCBmIG9ubHlfd2l0aF90YWcpOwpAdW5zYWZldmFy cyA9IHF3KGxvZ3NvcnQgb25seV93aXRoX3RhZyByMSByMiByZXYgc29ydGJ5IHRyMSB0cjIpOwoK aWYgKC1mICRjb25maWcpIHsKCWRvICIkY29uZmlnIiBvciBmYXRhbCgiNTAwIEludGVybmFsIEVy cm9yIiwKCQkJICAgICAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlOiAlczxi cj48YnI+JXM8YnI+JywKCQkJICAgICAgJGNvbmZpZywgJEApOwp9IGVsc2UgewoJZmF0YWwoIjUw MCBJbnRlcm5hbCBFcnJvciIsCgkgICAgICAnQ29uZmlndXJhdGlvbiBub3QgZm91bmQuICBTZXQg dGhlIHZhcmlhYmxlIDxjb2RlPiRjb25maWc8L2NvZGU+IGluIGN2c3dlYi5jZ2kgdG8geW91ciA8 Yj5jdnN3ZWIuY29uZjwvYj4gY29uZmlndXJhdGlvbiBmaWxlIGZpcnN0LicKCSAgICAgKTsKfQoK dW5kZWYgJWlucHV0OwokcXVlcnkgPSAkRU5We1FVRVJZX1NUUklOR307CgppZiAoZGVmaW5lZCgk cXVlcnkpICYmICRxdWVyeSBuZSAnJykgewoJZm9yZWFjaCAoc3BsaXQgKC8mLywgJHF1ZXJ5KSkg ewoJCXkvKy8gLzsKCQlzLyUoLi4pL3NwcmludGYoIiVjIiwgaGV4KCQxKSkvZ2U7ICAgICMgdW5x dW90ZSAlLXF1b3RlZAoJCWlmICgvKFxTKyk9KC4qKS8pIHsKCQkJJGlucHV0eyQxfSA9ICQyIGlm ICgkMiBuZSAiIik7CgkJfSBlbHNlIHsKCQkJJGlucHV0eyRffSsrOwoJCX0KCX0KfQoKIyBGb3Ig YmFja3dhcmRzIGNvbXBhYmlsaXR5LCBzZXQgb25seV93aXRoX3RhZyB0byBvbmx5X29uX2JyYW5j aCBpZiBzZXQuCiRpbnB1dHtvbmx5X3dpdGhfdGFnfSA9ICRpbnB1dHtvbmx5X29uX2JyYW5jaH0K ICAgIGlmIChkZWZpbmVkKCRpbnB1dHtvbmx5X29uX2JyYW5jaH0pKTsKCiMgUHJldmVudCBjcm9z cy1zaXRlIHNjcmlwdGluZwpmb3JlYWNoIChAdW5zYWZldmFycykgewoJIyBDb2xvbnMgYXJlIG5l ZWRlZCBpbiBkaWZmcyBiZXR3ZWVuIHRhZ3MuCglpZiAoZGVmaW5lZCgkaW5wdXR7JF99KSAmJiAk aW5wdXR7JF99ID1+IC9bXlx3XC0uOl0vKSB7CgkJZmF0YWwoIjUwMCBJbnRlcm5hbCBFcnJvciIs CgkJICAgICAgJ01hbGZvcm1lZCBxdWVyeSAoJXM9JXMpJywKCQkgICAgICAkXywgJGlucHV0eyRf fSk7Cgl9Cn0KCmlmIChkZWZpbmVkKCRpbnB1dHsiY29udGVudC10eXBlIn0pKSB7CglmYXRhbCgi NTAwIEludGVybmFsIEVycm9yIiwgIlVuc3VwcG9ydGVkIGNvbnRlbnQtdHlwZSIpCgkgICAgaWYg KCRpbnB1dHsiY29udGVudC10eXBlIn0gIX4gL15bLTAtOUEtWmEtel0rXC9bLTAtOUEtWmEtel0r JC8pOwp9CgokREVGQVVMVFZBTFVFeydjdnNyb290J30gPSAkY3ZzdHJlZWRlZmF1bHQ7Cgpmb3Jl YWNoIChrZXlzICVERUZBVUxUVkFMVUUpIHsKCgkjIHJlcGxhY2Ugbm90IGdpdmVuIHBhcmFtZXRl cnMgd2l0aCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzCglpZiAoIWRlZmluZWQoJGlucHV0eyRffSkg fHwgJGlucHV0eyRffSBlcSAiIikgewoKCQkjIEVtcHR5IENoZWNrYm94ZXMgaW4gZm9ybXMgcmV0 dXJuIC0tIG5vdGhpbmcuIFNvIHdlIGRlZmluZSBhIGhlbHBlcgoJCSMgdmFyaWFibGUgaW4gdGhl c2UgZm9ybXMgKGNvcHQpIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIGp1c3Qgc2V0CgkJIyBwYXJh bWV0ZXJzIHdpdGggYSBjaGVja2JveAoJCWlmICghZGVmaW5lZCgkaW5wdXR7ImNvcHQifSkpIHsK CgkJCSMgJ2NvcHQnIGlzbid0IGRlZmluZWQgLS0+IGVtcHR5IGlucHV0IGlzIG5vdCB0aGUgcmVz dWx0CgkJCSMgb2YgZW1wdHkgaW5wdXQgY2hlY2tib3ggLS0+IHNldCBkZWZhdWx0CgkJCSRpbnB1 dHskX30gPSAkREVGQVVMVFZBTFVFeyRffQoJCQkgICAgaWYgKGRlZmluZWQoJERFRkFVTFRWQUxV RXskX30pKTsKCQl9IGVsc2UgewoKCQkJIyAnY29wdCcgaXMgZGVmaW5lZCAtPiB0aGUgcmVzdWx0 IG9mIGVtcHR5IGlucHV0IGNoZWNrYm94CgkJCSMgLT4gc2V0IHRvIHplcm8gKGRpc2FibGUpIGlm IGRlZmF1bHQgaXMgYSBib29sZWFuICgwfDEpLgoJCQkkaW5wdXR7JF99ID0gMAoJCQkgICAgaWYg KGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJCSAgICAmJiAoJERFRkFVTFRWQUxVRXskX30g ZXEgIjAiCgkJCSAgICB8fCAkREVGQVVMVFZBTFVFeyRffSBlcSAiMSIpKTsKCQl9Cgl9Cn0KCiRi YXJlcXVlcnkgPSAiIjsKbXkgQGJhcmVxdWVyeTsKZm9yZWFjaCAoQHN0aWNreXZhcnMpIHsKCgkj IGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB3aXRoIHRoZSBzdGlja3kgbm9uIGRlZmF1bHQgcGFy YW1ldGVycyBzZXQKCWlmIChkZWZpbmVkKCRpbnB1dHskX30pICYmICRpbnB1dHskX30gbmUgJycK CSAgICAmJiAhKGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gZXEgJERF RkFVTFRWQUxVRXskX30pKQoJewoJCXB1c2ggQGJhcmVxdWVyeSwKCQkgICAgam9pbiAoJz0nLCB1 cmxlbmNvZGUoJF8pLCB1cmxlbmNvZGUoJGlucHV0eyRffSkpOwoJfQp9CgojIGlzIHRoZXJlIGFu eSBxdWVyeSA/CmlmIChAYmFyZXF1ZXJ5KSB7CgkkYmFyZXF1ZXJ5ID0gam9pbiAoJyYnLCBAYmFy ZXF1ZXJ5KTsKCSRxdWVyeSAgICAgPSAiPyRiYXJlcXVlcnkiOwoJJGJhcmVxdWVyeSA9ICImJGJh cmVxdWVyeSI7Cn0gZWxzZSB7CgkkcXVlcnkgPSAiIjsKfQp1bmRlZiBAYmFyZXF1ZXJ5OwoKaWYg KGRlZmluZWQoJGlucHV0e3BhdGh9KSkgewoJcmVkaXJlY3QoIiRzY3JpcHRuYW1lLyRpbnB1dHtw YXRofSRxdWVyeSIpOwp9CgojIGdldCBhY3R1YWwgcGFyYW1ldGVycwokc29ydGJ5ICAgPSAkaW5w dXR7InNvcnRieSJ9OwokYnlkYXRlICAgPSAwOwokYnlyZXYgICAgPSAwOwokYnlhdXRob3IgPSAw OwokYnlsb2cgICAgPSAwOwokYnlmaWxlICAgPSAwOwppZiAoJHNvcnRieSBlcSAiZGF0ZSIpIHsK CSRieWRhdGUgPSAxOwp9IGVsc2lmICgkc29ydGJ5IGVxICJyZXYiKSB7CgkkYnlyZXYgPSAxOwp9 IGVsc2lmICgkc29ydGJ5IGVxICJhdXRob3IiKSB7CgkkYnlhdXRob3IgPSAxOwp9IGVsc2lmICgk c29ydGJ5IGVxICJsb2ciKSB7CgkkYnlsb2cgPSAxOwp9IGVsc2UgewoJJGJ5ZmlsZSA9IDE7Cn0K CiRkZWZhdWx0RGlmZlR5cGUgPSAkaW5wdXR7J2YnfTsKCiRsb2dzb3J0ID0gJGlucHV0eydsb2dz b3J0J307Cgp7CglteSBAdG1wID0gQENWU3JlcG9zaXRvcmllczsKCW15IEBwYWlyOwoKCXdoaWxl IChAcGFpciA9IHNwbGljZShAdG1wLCAwLCAyKSkgewoJCW15ICgka2V5LCAgICR2YWwpICAgICA9 IEBwYWlyOwoJCW15ICgkZGVzY3IsICRjdnNyb290KSA9IEAkdmFsOwoKCQluZXh0IGlmICEtZCAk Y3Zzcm9vdDsKCgkJJENWU1JPT1RkZXNjcnska2V5fSA9ICRkZXNjcjsKCQkkQ1ZTUk9PVHska2V5 fSAgICAgID0gJGN2c3Jvb3Q7CgkJcHVzaCBAQ1ZTUk9PVCwgJGtleTsKCX0KfQoKIyMgRGVmYXVs dCBDVlMtVHJlZQppZiAoIWRlZmluZWQoJENWU1JPT1R7JGN2c3RyZWVkZWZhdWx0fSkpIHsKCWZh dGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJICAgICAgJzxjb2RlPiRjdnN0cmVlZGVmYXVsdDwv Y29kZT4gcG9pbnRzIHRvIGEgcmVwb3NpdG9yeSAoJXMpIG5vdCBkZWZpbmVkIGluIDxjb2RlPiUl Q1ZTUk9PVDwvY29kZT4gKGVkaXQgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgJXMpJywKCSAgICAg ICRjdnN0cmVlZGVmYXVsdCwgJGNvbmZpZyk7Cn0KCiMgYWx0ZXJuYXRlIENWUy1UcmVlLCBjb25m aWd1cmVkIGluIGN2c3dlYi5jb25mCmlmICgkaW5wdXR7J2N2c3Jvb3QnfSAmJiAkQ1ZTUk9PVHsk aW5wdXR7J2N2c3Jvb3QnfX0pIHsKCSRjdnN0cmVlID0gJGlucHV0eydjdnNyb290J307Cn0gZWxz ZSB7CgkkY3ZzdHJlZSA9ICRjdnN0cmVlZGVmYXVsdDsKfQoKJGN2c3Jvb3QgPSAkQ1ZTUk9PVHsk Y3ZzdHJlZX07CgojIGNyZWF0ZSBpY29ucyBvdXQgb2YgZGVzY3JpcHRpb24KZm9yZWFjaCBteSAk ayAoa2V5cyAlSUNPTlMpIHsKCW5vIHN0cmljdCAncmVmcyc7CglteSAoJGl0eHQsICRpcGF0aCwg JGl3aWR0aCwgJGloZWlnaHQpID0gQHskSUNPTlN7JGt9fTsKCWlmICgkaXBhdGgpIHsKCQkkeyIk e2t9aWNvbiJ9ID0KCQkgICAgc3ByaW50ZigKCQkJJzxpbWcgc3JjPSIlcyIgYWx0PSIlcyIgYm9y ZGVyPSIwIiB3aWR0aD0iJWQiIGhlaWdodD0iJWQiPicsCgkJCWhyZWZxdW90ZSgkaXBhdGgpLCBo dG1scXVvdGUoJGl0eHQpLCAkaXdpZHRoLCAkaWhlaWdodCkKCX0gZWxzZSB7CgkJJHsiJHtrfWlj b24ifSA9ICRpdHh0OwoJfQp9CgpteSAkY29uZmlnX2N2c3RyZWUgPSAiJGNvbmZpZy0kY3ZzdHJl ZSI7CgojIERvIHNvbWUgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBjdnN0cmVlcwppZiAoLWYg JGNvbmZpZ19jdnN0cmVlKSB7CglkbyAiJGNvbmZpZ19jdnN0cmVlIiBvcgoJICAgIGZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBm aWxlOiAlczxicj48YnI+JXM8YnI+JywKCQkgICRjb25maWdfY3ZzdHJlZSwgJEApOwp9CnVuZGVm ICRjb25maWdfY3ZzdHJlZTsKCiRyZV9wcmNhdGVnb3JpZXMgPSAnKD86JyAuIGpvaW4gKCd8Jywg QHByY2F0ZWdvcmllcykgLiAnKScgaWYgQHByY2F0ZWdvcmllczsKJHJlX3Bya2V5d29yZCA9IHF1 b3RlbWV0YSgkcHJrZXl3b3JkKSBpZiBkZWZpbmVkKCRwcmtleXdvcmQpOwokcHJjZ2kgLj0gJyVz JyBpZiBkZWZpbmVkKCRwcmNnaSkgJiYgJHByY2dpICF+IC8lcy87CgokZnVsbG5hbWUgICAgICAg ICA9ICIkY3Zzcm9vdC8kd2hlcmUiOwokbWltZXR5cGUgICAgICAgICA9ICZnZXRNaW1lVHlwZUZy b21TdWZmaXgoJGZ1bGxuYW1lKTsKJGRlZmF1bHRUZXh0UGxhaW4gPSAoJG1pbWV0eXBlIGVxICJ0 ZXh0L3BsYWluIik7CiRkZWZhdWx0Vmlld2FibGUgID0gJGFsbG93X21hcmt1cCAmJiB2aWV3YWJs ZSgkbWltZXR5cGUpOwoKbXkgJHJld3JpdGUgPSAwOwoKaWYgKCRwYXRoaW5mbyA9fiBtfC8vfCkg ewoJJHBhdGhpbmZvID1+IHl8L3wvfHM7CgkkcmV3cml0ZSA9IDE7Cn0KCmlmICgtZCAkZnVsbG5h bWUgJiYgJHBhdGhpbmZvICF+IG18LyR8KSB7CgkkcGF0aGluZm8gLj0gJy8nOwoJJHJld3JpdGUg PSAxOwp9CgppZiAoIS1kICRmdWxsbmFtZSAmJiAkcGF0aGluZm8gPX4gbXwvJHwpIHsKCWNob3Ag JHBhdGhpbmZvOwoJJHJld3JpdGUgPSAxOwp9CgppZiAoJHJld3JpdGUpIHsKCXJlZGlyZWN0KCRz Y3JpcHRuYW1lIC4gdXJsZW5jb2RlKCRwYXRoaW5mbykgLiAkcXVlcnkpOwp9Cgp1bmRlZiAkcmV3 cml0ZTsKCmlmICghLWQgJGN2c3Jvb3QpIHsKCWZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJ ICAgICAgJyRDVlNST09UIG5vdCBmb3VuZCE8cD5UaGUgc2VydmVyIG9uIHdoaWNoIHRoZSBDVlMg dHJlZSBsaXZlcyBpcyBwcm9iYWJseSBkb3duLiAgUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBt aW51dGVzLicpOwp9CgojCiMgU2VlIGlmIHRoZSBtb2R1bGUgaXMgaW4gb3VyIGZvcmJpZGRlbiBs aXN0LgojCiR3aGVyZSA9fiBtOihbXi9dKik6OwokbW9kdWxlID0gJDE7CmlmICgkbW9kdWxlICYm ICZmb3JiaWRkZW5fbW9kdWxlKCRtb2R1bGUpKSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkg ICAgICAnQWNjZXNzIHRvICVzIGZvcmJpZGRlbi4nLAoJICAgICAgJHdoZXJlKTsKfQoKIwojIEhh bmRsZSB0YXJiYWxsIGRvd25sb2FkcyBiZWZvcmUgYW55IGhlYWRlcnMgYXJlIG91dHB1dC4KIwpp ZiAoJGlucHV0e3RhcmJhbGx9KSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkgICAgICAnRG93 bmxvYWRpbmcgdGFyYmFsbHMgaXMgcHJvaGliaXRlZC4nKQoJICAgIHVubGVzcyAkYWxsb3dfdGFy OwoJbXkgKCRtb2R1bGUpID0gKCR3aGVyZSA9fiBtLF4vPyguKiksKTsgICAgIyB1bnRhaW50Cgkk bW9kdWxlID1+IHMsLyhbXi9dKikkLCw7CglteSAoJGV4dCkgICAgID0gKCQxICAgICAgPX4gLyhc LnRhclwuZ3p8XC56aXApJC8pOwoJbXkgKCRiYXNlZGlyKSA9ICgkbW9kdWxlID1+IG0sKFteL10r KSQsKTsKCglpZiAoJGJhc2VkaXIgZXEgJycgfHwgJG1vZHVsZSBlcSAnJykgewoJCWZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgICAgICdZb3UgY2Fubm90IGRvd25sb2FkIHRoZSB0b3Ag bGV2ZWwgZGlyZWN0b3J5LicpOwoJfQoKCW15ICR0bXBleHBvcnRkaXIgPSAiJHRtcGRpci8uY3Zz d2ViLiQkLiIgLiBpbnQodGltZSk7CgoJbWtkaXIoJHRtcGV4cG9ydGRpciwgMDcwMCkKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdVbmFibGUgdG8gbWFrZSB0ZW1w b3JhcnkgZGlyZWN0b3J5OiAlcycsCgkJICAgICAkISk7CgoJbXkgQGZhdGFsOwoKCW15ICR0YWcg PQoJICAgIChleGlzdHMgJGlucHV0e29ubHlfd2l0aF90YWd9ICYmIGxlbmd0aCAkaW5wdXR7b25s eV93aXRoX3RhZ30pID8KCSAgICAkaW5wdXR7b25seV93aXRoX3RhZ30gOiAiSEVBRCI7CgoJaWYg KCR0YWcgZXEgJ01BSU4nKSB7CgkgICAgJHRhZyA9ICdIRUFEJzsKCX0KCglpZiAoc3lzdGVtICRD TUR7Y3ZzfSwgQGN2c19vcHRpb25zLCAnLVFkJywgJGN2c3Jvb3QsICdleHBvcnQnLCAnLXInLAoJ ICAgICR0YWcsICctZCcsICIkdG1wZXhwb3J0ZGlyLyRiYXNlZGlyIiwgJG1vZHVsZSkKCXsKCQlA ZmF0YWwgPSAoIjUwMCBJbnRlcm5hbCBFcnJvciIsCgkJCSAgJ2N2cyBjbyBmYWlsdXJlOiAlczog JXMnLAoJCQkgICQhLCAkbW9kdWxlKTsKCX0gZWxzZSB7CgkJJHwgPSAxOyAgICAjIEVzc2VudGlh bCB0byBnZXQgdGhlIGJ1ZmZlcmluZyByaWdodC4KCgkJaWYgKCRleHQgZXEgJy50YXIuZ3onKSB7 CgkJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ3ppcFxyXG5cclxuIjsKCgkJ CXN5c3RlbQoJCQkgICAgIiRDTUR7dGFyfSBAdGFyX29wdGlvbnMgLWNmIC0gLUMgJHRtcGV4cG9y dGRpciAkYmFzZWRpciB8ICRDTUR7Z3ppcH0gQGd6aXBfb3B0aW9ucyAtYyIKCQkJICAgIGFuZCBA ZmF0YWwgPQoJCQkJKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd0YXIgemMgZmFpbHVyZTog JXM6ICVzJywKCQkJICAgICAkISwgJGJhc2VkaXIpOwoJCX0gZWxzaWYgKCRleHQgZXEgJy56aXAn ICYmICRDTUR7emlwfSkgewoJCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXBc clxuXHJcbiI7CgoJCQlzeXN0ZW0KCQkJICAgICJjZCAkdG1wZXhwb3J0ZGlyICYmICRDTUR7emlw fSBAemlwX29wdGlvbnMgLXIgLSAkYmFzZWRpciIKCQkJICAgIGFuZCBAZmF0YWwgPQoJCQkJKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd6aXAgZmFpbHVyZTogJXM6ICVzJywKCQkJCSAkISwg JGJhc2VkaXIpOwoJCX0gZWxzZSB7CgkJCUBmYXRhbCA9CgkJCSAgICAoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgJ3Vuc3VwcG9ydGVkIGZpbGUgdHlwZScpOwoJCX0KCX0KCglzeXN0ZW0g JENNRHtybX0sICctcmYnLCAkdG1wZXhwb3J0ZGlyIGlmIC1kICR0bXBleHBvcnRkaXI7CgoJJmZh dGFsKEBmYXRhbCkgaWYgQGZhdGFsOwoKCWV4aXQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwojIFZpZXcgYSBkaXJlY3RvcnkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwppZiAoLWQgJGZ1bGxuYW1lKSB7CglteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoJb3Bl bmRpcigkZGgsICRmdWxsbmFtZSkgb3IgZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCQkJCSAnJXM6 ICVzJywKCQkJCQkgJHdoZXJlLCAkISk7CglteSBAZGlyID0gcmVhZGRpcigkZGgpOwoJY2xvc2Vk aXIoJGRoKTsKCW15IEBzdWJMZXZlbEZpbGVzID0gZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQGRp cikKCSAgICBpZiAoJHNob3dfc3ViZGlyX2xhc3Rtb2QpOwoJZ2V0RGlyTG9ncygkY3Zzcm9vdCwg JHdoZXJlLCBAc3ViTGV2ZWxGaWxlcyk7CgoJaWYgKCR3aGVyZSBlcSAnLycpIHsKCQlodG1sX2hl YWRlcigkZGVmYXVsdHRpdGxlKTsKCQkkbG9uZ19pbnRybyA9fiBzLyEhQ1ZTUk9PVGRlc2NyISEv JENWU1JPT1RkZXNjcnskY3ZzdHJlZX0vZzsKCQlwcmludCAkbG9uZ19pbnRybzsKCX0gZWxzZSB7 CgkJaHRtbF9oZWFkZXIoJHdoZXJlKTsKCQlwcmludCAkc2hvcnRfaW5zdHJ1Y3Rpb247Cgl9CgoJ aWYgKCR1c2VfZGVzY3JpcHRpb25zICYmIG9wZW4oREVTQywgIjwkY3Zzcm9vdC9DVlNST09UL2Rl c2NyaXB0aW9ucyIpKQoJewoJCXdoaWxlICg8REVTQz4pIHsKCQkJY2hvbXA7CgkJCW15ICgkZGly LCAkZGVzY3JpcHRpb24pID0gLyhcUyspXHMrKC4qKS87CgkJCSRkZXNjcmlwdGlvbnN7JGRpcn0g PSAkZGVzY3JpcHRpb247CgkJfQoJCWNsb3NlKERFU0MpOwoJfQoKCXByaW50ICI8cD48YSBuYW1l PVwiZGlybGlzdFwiPjwvYT48L3A+XG4iOwoKCSMgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIGRpcnMK CWlmICgkd2hlcmUgZXEgJy8nKSB7CgkJY2hvb3NlTWlycm9yICgpOwoJCWNob29zZUNWU1Jvb3Qg KCk7Cgl9IGVsc2UgewoJCXByaW50ICI8cD5DdXJyZW50IGRpcmVjdG9yeTogPGI+IiwgJmNsaWNr YWJsZVBhdGgoJHdoZXJlLCAwKSwKCQkgICAgIjwvYj48L3A+XG4iOwoKCQlwcmludCAiPHA+Q3Vy cmVudCB0YWc6IDxiPiIsICRpbnB1dHtvbmx5X3dpdGhfdGFnfSwiPC9iPjwvcD5cbiIKCQkgICAg aWYgJGlucHV0e29ubHlfd2l0aF90YWd9OwoKCX0KCglwcmludCAiPGhyIG5vc2hhZGU+XG4iOwoK CSMgVXNpbmcgPG1lbnU+IGluIHRoaXMgbWFubmVyIHZpb2xhdGVzIHRoZSBIVE1MMi4wIHNwZWMg YnV0CgkjIHByb3ZpZGVzIHRoZSByZXN1bHRzIHRoYXQgSSB3YW50IGluIG1vc3QgYnJvd3NlcnMu ICBBbm90aGVyCgkjIGNhc2Ugb2YgbGF5b3V0IHNwb29naW5nIHVwIEhUTUwuCgoJbXkgJGluZm9j b2xzID0gMDsKCWlmICgkZGlydGFibGUpIHsKCQlwcmludCAiPHRhYmxlIHN0eWxlPVwiYm9yZGVy LXdpZHRoOiAwIjsKCQlwcmludCAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGVCb3JkZXJDb2xv ciIKCQkgICAgaWYgKGRlZmluZWQgJHRhYmxlQm9yZGVyQ29sb3IpOwoJCXByaW50ICJcIiB3aWR0 aD1cIjEwMCVcIiBjZWxsc3BhY2luZz1cIjFcIiBjZWxscGFkZGluZz1cIiR0YWJsZXBhZGRpbmdc Ij5cbiI7CgkJJGluZm9jb2xzKys7CgkJcHJpbnRmICI8dHI+XG48dGggc3R5bGU9XCJ0ZXh0LWFs aWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlc1wiPiIsCgkJICAgICRieWZpbGUgPyAkY29s dW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCSAgICAkY29sdW1uSGVhZGVyQ29sb3JEZWZhdWx0OwoK CQlpZiAoJGJ5ZmlsZSkgewoJCQlwcmludCAnRmlsZSc7CgkJfSBlbHNlIHsKCQkJcHJpbnQgJmxp bmsoCgkJCQknRmlsZScsCgkJCQlzcHJpbnRmKAoJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCSZ0 b2dnbGVRdWVyeSgic29ydGJ5IiwgImZpbGUiKQoJCQkJKQoJCQkpOwoJCX0KCQlwcmludCAiPC90 aD5cbiI7CgoJCSMgZG8gbm90IGRpc3BsYXkgdGhlIG90aGVyIGNvbHVtbi1oZWFkZXJzLCBpZiB3 ZSBkbyBub3QgaGF2ZSBhbnkgZmlsZXMKCQkjIHdpdGggcmV2aXNpb24gaW5mb3JtYXRpb246CgkJ aWYgKHNjYWxhciglZmlsZWluZm8pKSB7CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBz dHlsZT0idGV4dC1hbGlnbjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAk YnlyZXYgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNv bG9yRGVmYXVsdDsKCgkJCWlmICgkYnlyZXYpIHsKCQkJCXByaW50ICdSZXYuJzsKCQkJfSBlbHNl IHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdSZXYuJywKCQkJCQlzcHJpbnRmKAoJCQkJCQknLi8l cyNkaXJsaXN0JywKCQkJCQkJJnRvZ2dsZVF1ZXJ5KCJzb3J0YnkiLCAicmV2IikKCQkJCQkpCgkJ CQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCQkJJGluZm9jb2xzKys7CgkJCXByaW50ZiAn PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlcyI+JywKCQkJ ICAgICRieWRhdGUgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhl YWRlckNvbG9yRGVmYXVsdDsKCgkJCWlmICgkYnlkYXRlKSB7CgkJCQlwcmludCAnQWdlJzsKCQkJ fSBlbHNlIHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdBZ2UnLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJkYXRlIikKCQkJ CQkpCgkJCQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCgkJCWlmICgkc2hvd19hdXRob3Ip IHsKCQkJCSRpbmZvY29scysrOwoJCQkJcHJpbnRmICc8dGggc3R5bGU9InRleHQtYWxpZ246IGxl ZnQ7IGJhY2tncm91bmQtY29sb3I6ICVzIj4nLAoJCQkJICAgICRieWF1dGhvciA/ICRjb2x1bW5I ZWFkZXJDb2xvclNvcnRlZCA6CgkJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CQlpZiAoJGJ5YXV0aG9yKSB7CgkJCQkJcHJpbnQgJ0F1dGhvcic7CgkJCQl9IGVsc2UgewoJCQkJ CXByaW50ICZsaW5rKAoJCQkJCQknQXV0aG9yJywKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVz I2Rpcmxpc3QnLAoJCQkJCQkJJnRvZ2dsZVF1ZXJ5KAoJCQkJCQkJCSJzb3J0YnkiLAoJCQkJCQkJ CSJhdXRob3IiCgkJCQkJCQkpCgkJCQkJCSkKCQkJCQkpOwoJCQkJfQoJCQkJcHJpbnQgIjwvdGg+ XG4iOwoJCQl9CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBzdHlsZT0idGV4dC1hbGln bjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAkYnlsb2cgPyAkY29sdW1u SGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CWlmICgkYnlsb2cpIHsKCQkJCXByaW50ICdMYXN0IGxvZyBlbnRyeSc7CgkJCX0gZWxzZSB7CgkJ CQlwcmludCAmbGluaygKCQkJCQknTGFzdCBsb2cgZW50cnknLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJsb2ciKQoJCQkJ CSkKCQkJCSk7CgkJCX0KCQkJcHJpbnQgIjwvdGg+XG4iOwoJCX0gZWxzaWYgKCR1c2VfZGVzY3Jp cHRpb25zKSB7CgkJCXByaW50ZiAnPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3Jv dW5kLWNvbG9yOiBzIj4nLAoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCQkJcHJp bnQgIkRlc2NyaXB0aW9uPC90aD5cbiI7CgkJCSRpbmZvY29scysrOwoJCX0KCQlwcmludCAiPC90 cj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8bWVudT5cbiI7Cgl9CglteSAkZGlycm93ID0gMDsK CglteSAkaTsKCWxvb2tpbmdmb3JhdHRpYzoKCWZvciAoJGkgPSAwIDsgJGkgPD0gJCNkaXIgOyAk aSsrKSB7CgkJaWYgKCRkaXJbJGldIGVxICJBdHRpYyIpIHsKCQkJbGFzdCBsb29raW5nZm9yYXR0 aWM7CgkJfQoJfQoKCWlmICghJGlucHV0eydoaWRlYXR0aWMnfSAmJiAoJGkgPD0gJCNkaXIpCgkg ICAgJiYgb3BlbmRpcigkZGgsICRmdWxsbmFtZSAuICIvQXR0aWMiKSkKCXsKCQlzcGxpY2UoQGRp ciwgJGksIDEsIGdyZXAoKHN8XnxBdHRpYy98LCAhbXwvXC58KSwgcmVhZGRpcigkZGgpKSk7CgkJ Y2xvc2VkaXIoJGRoKTsKCX0KCglteSAkaGlkZUF0dGljVG9nZ2xlTGluayA9CgkgICAgJGlucHV0 eydoaWRlYXR0aWMnfSA/ICcnIDoKCSAgICAmbGluaygnW0hpZGVdJywgc3ByaW50ZignLi8lcyNk aXJsaXN0JywgJnRvZ2dsZVF1ZXJ5KCJoaWRlYXR0aWMiKSkpOwoKCSMgU29ydCB3aXRob3V0IHRo ZSBBdHRpYy8gcGF0aG5hbWUuCgkjIHBsYWNlIGRpcmVjdG9yaWVzIGZpcnN0CgoJbXkgJGF0dGlj OwoJbXkgJHVybDsKCW15ICRmaWxldXJsOwoJbXkgJGZpbGVzZXhpc3RzOwoJbXkgJGZpbGVzZm91 bmQ7CgoJZm9yZWFjaCBteSAkZmlsZSAoc29ydCB7ICZmaWxlU29ydENtcCB9IEBkaXIpIHsKCgkJ bmV4dCBpZiAoJGZpbGUgZXEgJy4nKTsKCgkJIyBpZ25vcmUgQ1ZTIGxvY2sgYW5kIHN0YWxlIE5G UyBmaWxlcwoJCW5leHQgaWYgKCRmaWxlID1+IC9eI2N2c1wufF4sfF5cLm5mcy8pOwoKCQkjIENo ZWNrIHdoZXRoZXIgdG8gc2hvdyB0aGUgQ1ZTUk9PVCBwYXRoCgkJbmV4dCBpZiAoJGlucHV0eydo aWRlY3Zzcm9vdCd9ICYmICRmaWxlIGVxICdDVlNST09UJyk7CgoJCSMgQ2hlY2sgd2hldGhlciB0 aGUgbW9kdWxlIGlzIGluIHRoZSByZXN0cmljdGVkIGxpc3QKCQluZXh0IGlmICgkZmlsZSAmJiAm Zm9yYmlkZGVuX21vZHVsZSgkZmlsZSkpOwoKCQkjIElnbm9yZSBub24tcmVhZGFibGUgZmlsZXMK CQluZXh0IGlmICgkaW5wdXR7J2hpZGVub25yZWFkYWJsZSd9ICYmICEoLXIgIiRmdWxsbmFtZS8k ZmlsZSIpKTsKCgkJaWYgKCRmaWxlID1+IHN8XkF0dGljL3x8KSB7CgkJCSRhdHRpYyA9ICIgKGlu IHRoZSBBdHRpYykmbmJzcDsiIC4gJGhpZGVBdHRpY1RvZ2dsZUxpbms7CgkJfSBlbHNlIHsKCQkJ JGF0dGljID0gIiI7CgkJfQoKCQlpZiAoJGZpbGUgZXEgJy4uJyB8fCAtZCAiJGZ1bGxuYW1lLyRm aWxlIikgewoJCQluZXh0IGlmICgkZmlsZSBlcSAnLi4nICYmICR3aGVyZSBlcSAnLycpOwoJCQlt eSAoJHJldiwgJGRhdGUsICRsb2csICRhdXRob3IsICRmaWxlbmFtZSkgPQoJCQkgICAgQHskZmls ZWluZm97JGZpbGV9fQoJCQkgICAgaWYgKGRlZmluZWQoJGZpbGVpbmZveyRmaWxlfSkpOwoJCQlw cmludGYgIjx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAg ICAkdGFiY29sb3JzWyRkaXJyb3cgJSAyXSBpZiAkZGlydGFibGU7CgoJCQlpZiAoJGZpbGUgZXEg Jy4uJykgewoJCQkJJHVybCA9ICIuLi8kcXVlcnkiOwoJCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJ CQkJCXByaW50ICRiYWNraWNvbjsKCQkJCX0gZWxzZSB7CgkJCQkJcHJpbnQgJmxpbmsoJGJhY2tp Y29uLCAkdXJsKTsKCQkJCX0KCQkJCXByaW50ICcmbmJzcDsnLCAmbGluaygiUGFyZW50IERpcmVj dG9yeSIsICR1cmwpOwoJCQl9IGVsc2UgewoJCQkJJHVybCA9ICcuLycgLiB1cmxlbmNvZGUoJGZp bGUpIC4gIi8kcXVlcnkiOwoJCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmlsZVwiPjwvYT4iOwoKCQkJ CWlmICgkbm9maWxlbGlua3MpIHsKCQkJCQlwcmludCAkZGlyaWNvbjsKCQkJCX0gZWxzZSB7CgkJ CQkJcHJpbnQgJmxpbmsoJGRpcmljb24sICR1cmwpOwoJCQkJfQoJCQkJcHJpbnQgJyZuYnNwOycs ICZsaW5rKCIkZmlsZS8iLCAkdXJsKSwgJGF0dGljOwoKCQkJCWlmICgkZmlsZSBlcSAiQXR0aWMi KSB7CgkJCQkJcHJpbnQgIiZuYnNwOyAiOwoJCQkJCXByaW50ICZsaW5rKAoJCQkJCQkiW0Rvbid0 IGhpZGVdIiwKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkJJnRv Z2dsZVF1ZXJ5KAoJCQkJCQkJCSJoaWRlYXR0aWMiKQoJCQkJCQkpCgkJCQkJKTsKCQkJCX0KCQkJ fQoKCQkJIyBTaG93IGxhc3QgY2hhbmdlIGluIGRpcgoJCQlpZiAoJGZpbGVuYW1lKSB7CgkJCQlw cmludCAiPC90ZD5cbjx0ZD4mbmJzcDs8L3RkPlxuPHRkPiZuYnNwOyIKCQkJCSAgICBpZiAoJGRp cnRhYmxlKTsKCQkJCWlmICgkZGF0ZSkgewoJCQkJCXByaW50ICIgPGk+IiwKCQkJCQkgICAgcmVh ZGFibGVUaW1lKHRpbWUoKSAtICRkYXRlLCAwKSwKCQkJCQkgICAgIjwvaT4iOwoJCQkJfQoKCQkJ CWlmICgkc2hvd19hdXRob3IpIHsKCQkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoJCQkJCXByaW50ICRhdXRob3I7CgkJCQl9CgkJCQlwcmludCAiPC90ZD5cbjx0 ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJCQkJJGZpbGVuYW1lID1+IHMlXlteL10rLyUlOwoJ CQkJcHJpbnQgIiRmaWxlbmFtZS8kcmV2IjsKCQkJCXByaW50ICI8YnI+IiBpZiAoJGRpcnRhYmxl KTsKCgkJCQlpZiAoJGxvZykgewoJCQkJCXByaW50ICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQt c2l6ZTogc21hbGxlclwiPiIsCgkJCQkJICAmaHRtbGlmeSgKCQkJCQkJc3Vic3RyKCRsb2csIDAs ICRzaG9ydExvZ0xlbiksICRhbGxvd19kaXJfZXh0cmEpOwoJCQkJCWlmIChsZW5ndGggJGxvZyA+ IDgwKSB7CgkJCQkJCXByaW50ICIuLi4iOwoJCQkJCX0KCQkJCQlwcmludCAiPC9zcGFuPiI7CgkJ CQl9CgkJCX0gZWxzZSB7CgkJCQlteSAoJGR3aGVyZSkgPQoJCQkJICAgICgkd2hlcmUgbmUgIi8i ID8gJHdoZXJlIDogIiIpIC4gJGZpbGU7CgoJCQkJaWYgKCR1c2VfZGVzY3JpcHRpb25zCgkJCQkg ICAgJiYgZGVmaW5lZCAkZGVzY3JpcHRpb25zeyRkd2hlcmV9KQoJCQkJewoJCQkJCXByaW50ICI8 dGQgY29sc3Bhbj1cIiIsKCRpbmZvY29scyAtIDEpLAoJCQkJCSAgICAiXCI+Jm5ic3A7IgoJCQkJ CSAgICBpZiAkZGlydGFibGU7CgkJCQkJcHJpbnQgJGRlc2NyaXB0aW9uc3skZHdoZXJlfTsKCQkJ CX0gZWxzaWYgKCRkaXJ0YWJsZSAmJiAkaW5mb2NvbHMgPiAxKSB7CgoJCQkJCSMgY2xvc2UgdGhl IHJvdyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKCQkJCQkjIGNvbHVtbnMsIHNvIHRo YXQgdGhlIHZlcnRpY2FsIHNlcGVyYXRvcnMgYXJlIHZpc2libGUKCQkJCQlteSAoJGNvbHMpID0g JGluZm9jb2xzOwoJCQkJCXdoaWxlICgkY29scyA+IDEpIHsKCQkJCQkJcHJpbnQgIjwvdGQ+XG48 dGQ+Jm5ic3A7IjsKCQkJCQkJJGNvbHMtLTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlmICgkZGly dGFibGUpIHsKCQkJCXByaW50ICI8L3RkPlxuPC90cj5cbiI7CgkJCX0gZWxzZSB7CgkJCQlwcmlu dCAiPGJyPlxuIjsKCQkJfQoJCQkkZGlycm93Kys7CgkJfSBlbHNpZiAoJGZpbGUgPX4gcy8sdiQv LykgewoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcyBub3cgc28gd2UnbGwgZ2l2ZSBubyBoaW50 CgkJCSMgYWJvdXQgdGhlaXIgZXhpc3RlbmNlLiAgVGhpcyBzaG91bGQgcHJvYmFibHkgaGF2ZQoJ CQkjIGJlZW4gZG9uZSBlYXJsaWVyLCBidXQgaXQncyBzdHJhaWdodGZvcndhcmQgaGVyZS4KCQkJ bmV4dCBpZiBmb3JiaWRkZW5fZmlsZSgiJGZ1bGxuYW1lLyRmaWxlIik7CgoJCQkkZmlsZXVybCA9 ICgkYXR0aWMgPyAiQXR0aWMvIiA6ICIiKSAuIHVybGVuY29kZSgkZmlsZSk7CgkJCSR1cmwgPSAn Li8nIC4gJGZpbGV1cmwgLiAkcXVlcnk7CgkJCSRmaWxlc2V4aXN0cysrOwoJCQluZXh0IGlmICgh ZGVmaW5lZCgkZmlsZWluZm97JGZpbGV9KSk7CgkJCW15ICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvcikgPSBAeyRmaWxlaW5mb3skZmlsZX19OwoJCQkkZmlsZXNmb3VuZCsrOwoJCQlwcmludGYg Ijx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAgICR0YWJj b2xvcnNbJGRpcnJvdyAlIDJdIGlmICRkaXJ0YWJsZTsKCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmls ZVwiPjwvYT4iOwoKCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJCQkJcHJpbnQgJGZpbGVpY29uOwoJ CQl9IGVsc2UgewoJCQkJcHJpbnQgJmxpbmsoJGZpbGVpY29uLCAkdXJsKTsKCQkJfQoJCQlwcmlu dCAnJm5ic3A7JywgJmxpbmsoaHRtbHF1b3RlKCRmaWxlKSwgJHVybCksICRhdHRpYzsKCQkJcHJp bnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAoJGRpcnRhYmxlKTsKCQkJZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJHJldiwgJHJldiwKCQkJCSRkZWZhdWx0Vmlld2FibGUgPyAidGV4dC94LWN2c3dl Yi1tYXJrdXAiIDoKCQkJCXVuZGVmKTsKCQkJcHJpbnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAo JGRpcnRhYmxlKTsKCgkJCWlmICgkZGF0ZSkgewoJCQkJcHJpbnQgIiA8aT4iLCByZWFkYWJsZVRp bWUodGltZSgpIC0gJGRhdGUsIDApLAoJCQkJICAgICI8L2k+IjsKCQkJfQoJCQlpZiAoJHNob3df YXV0aG9yKSB7CgkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJ CQkJcHJpbnQgJGF1dGhvcjsKCQkJfQoJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoKCQkJaWYgKCRsb2cpIHsKCQkJCXByaW50ICIgPHNwYW4gc3R5bGU9XCJmb250 LXNpemU6IHNtYWxsZXJcIj4iLAoJCQkJICAgICZodG1saWZ5KHN1YnN0cigkbG9nLCAwLCAkc2hv cnRMb2dMZW4pLCAkYWxsb3dfZGlyX2V4dHJhKTsKCQkJCWlmIChsZW5ndGggJGxvZyA+IDgwKSB7 CgkJCQkJcHJpbnQgIi4uLiI7CgkJCQl9CgkJCQlwcmludCAiPC9zcGFuPiI7CgkJCX0KCQkJcHJp bnQgIjwvdGQ+XG4iIGlmICgkZGlydGFibGUpOwoJCQlwcmludCgoJGRpcnRhYmxlKSA/ICI8L3Ry PiIgOiAiPGJyPiIpOwoJCQkkZGlycm93Kys7CgkJfQoJCXByaW50ICJcbiI7Cgl9CgoJcHJpbnQo JGRpcnRhYmxlID8gIjwvdGFibGU+XG4iIDogIjwvbWVudT5cbiIpOwoKCWlmICgkZmlsZXNleGlz dHMgJiYgISRmaWxlc2ZvdW5kKSB7CgkJcHJpbnQKCQkgICAgIjxwPjxiPk5PVEU6PC9iPiBUaGVy ZSBhcmUgJGZpbGVzZXhpc3RzIGZpbGVzLCBidXQgbm9uZSBtYXRjaGVzIHRoZSBjdXJyZW50IHRh ZyAoJGlucHV0e29ubHlfd2l0aF90YWd9KS48L3A+XG4iOwoJfQoJaWYgKCRpbnB1dHtvbmx5X3dp dGhfdGFnfSAmJiAoISV0YWdzIHx8ICEkdGFnc3skaW5wdXR7b25seV93aXRoX3RhZ319KSkKCXsK CQkldGFncyA9ICVhbGx0YWdzCgl9CgoJaWYgKHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93 aXRoX3RhZ30gfHwgJGVkaXRfb3B0aW9uX2Zvcm0KCSAgICB8fCBkZWZpbmVkKCRpbnB1dHsib3B0 aW9ucyJ9KSkKCXsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7Cgl9CgoJaWYg KHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiPGZvcm0g bWV0aG9kPVwiZ2V0XCIgYWN0aW9uPVwiLi9cIj5cbiI7CgkJZm9yZWFjaCBteSAkdmFyIChAc3Rp Y2t5dmFycykgewoJCQlwcmludAoJCQkgICAgIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1c IiR2YXJcIiB2YWx1ZT1cIiRpbnB1dHskdmFyfVwiPlxuIgoJCQkgICAgaWYgKGRlZmluZWQoJGlu cHV0eyR2YXJ9KQoJCQkgICAgJiYgKCFkZWZpbmVkKCRERUZBVUxUVkFMVUV7JHZhcn0pCgkJCSAg ICB8fCAkaW5wdXR7JHZhcn0gbmUgJERFRkFVTFRWQUxVRXskdmFyfSkKCQkJICAgICYmICRpbnB1 dHskdmFyfSBuZSAiIiAmJiAkdmFyIG5lICJvbmx5X3dpdGhfdGFnIik7CgkJfQoJCXByaW50ICI8 cD48bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIlRcIj4iOwoJCXByaW50 ICJTaG93IG9ubHkgZmlsZXMgd2l0aCB0YWc6PC9sYWJlbD5cbiI7CgkJcHJpbnQgIjxzZWxlY3Qg aWQ9XCJvbmx5X3dpdGhfdGFnXCIgbmFtZT1cIm9ubHlfd2l0aF90YWdcIiI7CgkJcHJpbnQgIiBv bmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJCXBy aW50ICI+IjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkFsbCB0YWdzIC8gZGVmYXVsdCBi cmFuY2g8L29wdGlvbj5cbiI7CgoJCWZvcmVhY2ggbXkgJHRhZyAocmV2ZXJzZSBzb3J0IHsgbGMg JGEgY21wIGxjICRiIH0ga2V5cyAldGFncykgewoJCQlwcmludCAiPG9wdGlvbiIsCgkJCSAgICBk ZWZpbmVkKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSkKCQkJICAgICYmICRpbnB1dHtvbmx5X3dpdGhf dGFnfSBlcSAkdGFnID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkJICAgICI+JHRhZzwvb3B0aW9uPlxu IjsKCQl9CgkJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCQlwcmludCAiIDxsYWJlbCBmb3I9XCJwYXRo XCIgYWNjZXNza2V5PVwiUFwiPiI7CgkJcHJpbnQgIk1vZHVsZSBwYXRoIG9yIGFsaWFzOjwvbGFi ZWw+XG4iOwoJCXByaW50ZiAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwYXRoXCIgbmFtZT1c InBhdGhcIiB2YWx1ZT1cIiVzXCIgc2l6ZT1cIjE1XCI+XG4iLAoJCSAgICBodG1scXVvdGUoJHdo ZXJlKTsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNz a2V5PVwiR1wiPjwvcD5cbiI7CgkJcHJpbnQgIjwvZm9ybT5cbiI7Cgl9CgoJaWYgKCRhbGxvd190 YXIpIHsKCQlteSAoJGJhc2VmaWxlKSA9ICgkd2hlcmUgPX4gbSwoPzouKi8pPyhbXi9dKyksKTsK CgkJaWYgKGRlZmluZWQoJGJhc2VmaWxlKSAmJiAkYmFzZWZpbGUgbmUgJycpIHsKCQkJcHJpbnQg IjxociBub3NoYWRlPlxuIiwKCQkJICAgICI8ZGl2IGFsaWduPVwiY2VudGVyXCI+RG93bmxvYWQg dGhpcyBkaXJlY3RvcnkgaW4gIjsKCgkJCSMgTWFuZ2xlIHRoZSBmaWxlbmFtZSBzbyBicm93c2Vy cyBzaG93IGEgcmVhc29uYWJsZQoJCQkjIGZpbGVuYW1lIHRvIGRvd25sb2FkLgoJCQlwcmludCAm bGluaygidGFyYmFsbCIsICIuLyRiYXNlZmlsZS50YXIuZ3okcXVlcnkiCgkJCQkuICgkcXVlcnkg PyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQlpZiAoJENNRHt6aXB9KSB7CgkJCQlwcmlu dCAiIG9yICIsCgkJCQkgICAgJmxpbmsoInppcCBhcmNoaXZlIiwgIi4vJGJhc2VmaWxlLnppcCRx dWVyeSIKCQkJCQkuICgkcXVlcnkgPyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQl9CgkJ CXByaW50ICI8L2Rpdj5cbiI7CgkJfQoJfQoKCWlmICgkZWRpdF9vcHRpb25fZm9ybSB8fCBkZWZp bmVkKCRpbnB1dHsib3B0aW9ucyJ9KSkgewoKCQlteSAkZm9ybXdoZXJlID0gJHNjcmlwdHdoZXJl OwoJCSRmb3Jtd2hlcmUgPX4gc3xBdHRpYy8/JHx8IGlmICgkaW5wdXR7J2hpZGVhdHRpYyd9KTsK CgkJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7Zm9ybXdoZXJlfVwiPlxu IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY29wdFwiIHZhbHVlPVwi MVwiPlxuIjsKCQlpZiAoJGN2c3RyZWUgbmUgJGN2c3RyZWVkZWZhdWx0KSB7CgkJCXByaW50CgkJ CSAgICAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY3Zzcm9vdFwiIHZhbHVlPVwiJGN2 c3RyZWVcIj5cbiI7CgkJfQoJCXByaW50ICI8Y2VudGVyPlxuPHRhYmxlIGNlbGxwYWRkaW5nPVwi MFwiIGNlbGxzcGFjaW5nPVwiMFwiPiI7CgkJcHJpbnQgIlxuPHRyIHN0eWxlPVwiYmFja2dyb3Vu ZC1jb2xvcjogJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdFwiPlxuIjsKCQlwcmludCAiPHRoIGNv bHNwYW49XCIyXCI+UHJlZmVyZW5jZXM8L3RoPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0 ZD4iOwoJCXByaW50ICI8bGFiZWwgZm9yPVwic29ydGJ5XCIgYWNjZXNza2V5PVwiRlwiPlNvcnQg ZmlsZXMgYnkgIjsKCQlwcmludCAiPC9sYWJlbD48c2VsZWN0IGlkPVwic29ydGJ5XCIgbmFtZT1c InNvcnRieVwiPlxuIjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkZpbGU8L29wdGlvbj5c biI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlkYXRlID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAg IiB2YWx1ZT1cImRhdGVcIj5BZ2U8L29wdGlvbj5cbiI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlh dXRob3IgPyAiIHNlbGVjdGVkIiA6ICIiLAoJCSAgICAiIHZhbHVlPVwiYXV0aG9yXCI+QXV0aG9y PC9vcHRpb24+XG4iCgkJICAgIGlmICgkc2hvd19hdXRob3IpOwoJCXByaW50ICI8b3B0aW9uIiwg JGJ5cmV2ID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAgIiB2YWx1ZT1cInJldlwiPlJldmlzaW9u PC9vcHRpb24+XG4iOwoJCXByaW50ICI8b3B0aW9uIiwgJGJ5bG9nID8gIiBzZWxlY3RlZCIgOiAi IiwKCQkgICAgIiB2YWx1ZT1cImxvZ1wiPkxvZyBtZXNzYWdlPC9vcHRpb24+XG4iOwoJCXByaW50 ICI8L3NlbGVjdD5cbjwvdGQ+XG4iOwoJCXByaW50ICI8dGQ+PGxhYmVsIGZvcj1cImxvZ3NvcnRc IiBhY2Nlc3NrZXk9XCJMXCI+IjsKCQlwcmludCAiU29ydCBsb2cgYnk6IDwvbGFiZWw+IjsKCQlw cmludExvZ1NvcnRTZWxlY3QoMCk7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuIjsKCQlwcmludCAi PHRyPlxuPHRkPjxsYWJlbCBmb3I9XCJmXCIgYWNjZXNza2V5PVwiRFwiPiI7CgkJcHJpbnQgIkRp ZmYgZm9ybWF0OiA8L2xhYmVsPiI7CgkJcHJpbnREaWZmU2VsZWN0KDApOwoJCXByaW50ICI8L3Rk PlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJoaWRlYXR0aWNcIiBhY2Nlc3NrZXk9XCJB XCI+IjsKCQlwcmludCAiU2hvdyBBdHRpYyBmaWxlczogPC9sYWJlbD4iOwoJCXByaW50ICI8aW5w dXQgaWQ9XCJoaWRlYXR0aWNcIiBuYW1lPVwiaGlkZWF0dGljXCIgdHlwZT1cImNoZWNrYm94XCIi LAoJCSAgICAkaW5wdXR7J2hpZGVhdHRpYyd9ID8gIiBjaGVja2VkIiA6ICIiLAoJCSAgICAgIj48 L3RkPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNvbHNw YW49XCIyXCI+IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNoYW5n ZSBPcHRpb25zXCIgYWNjZXNza2V5PVwiQ1wiPiI7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuPC90 YWJsZT5cbjwvY2VudGVyPlxuPC9mb3JtPlxuIjsKCX0KCWh0bWxfZm9vdGVyKCk7Cn0KCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWaWV3IEZpbGVzCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKZWxzaWYgKC1mICRmdWxsbmFtZSAuICcsdicpIHsKCglpZiAoZm9yYmlk ZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZhdGFsKCc0MDMgRm9yYmlkZGVuJywKCQkgICAgICAn QWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmlsZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZp bGVzJyk7CgkJcmV0dXJuOwoJfQoKCSN4aGNoZW4KCWlmIChkZWZpbmVkKCRpbnB1dHsnZ3JhcGgn fSkpIHsKCQkmZG9HcmFwaCgkZnVsbG5hbWUpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydyZXYnfSkgfHwgJGRvQ2hlY2tvdXQpIHsKCQkmZG9DaGVja291dCgkZnVsbG5hbWUsICRp bnB1dHsncmV2J30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydhbm5vdGF0ZSd9KSAmJiAkYWxsb3dfYW5ub3RhdGUpIHsKCQkmZG9Bbm5vdGF0ZSgkaW5w dXR7J2Fubm90YXRlJ30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQo JGlucHV0eydyMSd9KSAmJiBkZWZpbmVkKCRpbnB1dHsncjInfSkpIHsKCQkmZG9EaWZmKAoJCQkk ZnVsbG5hbWUsICAgICAkaW5wdXR7J3IxJ30sCgkJCSRpbnB1dHsndHIxJ30sICRpbnB1dHsncjIn fSwKCQkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCQkpOwoJCWd6aXBjbG9zZSgpOwoJCWV4 aXQ7Cgl9CglwcmludCgiZ29pbmcgdG8gZG9sb2coJGZ1bGxuYW1lKVxuIikgaWYgKCR2ZXJib3Nl KTsKCSZkb0xvZygkZnVsbG5hbWUpOwoKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJ IyBWaWV3IERpZmYKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp9IGVsc2lmICgkZnVs bG5hbWUgPX4gcy9cLmRpZmYkLy8gJiYgLWYgJGZ1bGxuYW1lIC4gIix2IiAmJiAkaW5wdXR7J3Ix J30KICAgICYmICRpbnB1dHsncjInfSkKewoKCSMgJHdoZXJlLWRpZmYtcmVtb3ZhbCBpZiAnY3Zz IHJkaWZmJyBpcyB1c2VkCgkjIC4uIGJ1dCAnY3ZzIHJkaWZmJ2RvZXNuJ3Qgc3VwcG9ydCBzb21l IG9wdGlvbnMKCSMgcmNzZGlmZiBkb2VzICgtdyBhbmQgLXApLCBzbyBpdCBpcyBkaXNhYmxlZAoJ IyAkd2hlcmUgPX4gcy9cLmRpZmYkLy87CgoJIyBBbGxvdyBkaWZmcyB1c2luZyB0aGUgIi5kaWZm IiBleHRlbnNpb24KCSMgc28gdGhhdCBicm93c2VycyB0aGF0IGRlZmF1bHQgdG8gdGhlIFVSTAoJ IyBmb3IgYSBzYXZlIGZpbGVuYW1lIGRvbid0IHNhdmUgZGlmZidzIGFzCgkjIGUuZy4gZm9vLmMK CSZkb0RpZmYoCgkJJGZ1bGxuYW1lLCAgICAgJGlucHV0eydyMSd9LCAkaW5wdXR7J3RyMSd9LCAk aW5wdXR7J3IyJ30sCgkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCSk7CglnemlwY2xvc2Uo KTsKCWV4aXQ7Cn0gZWxzaWYgKCgkbmV3bmFtZSA9ICRmdWxsbmFtZSkgPX4gc3wvKFteL10rKSR8 L0F0dGljLyQxfCAmJiAtZiAkbmV3bmFtZSAuICIsdiIpCnsKCgkjIFRoZSBmaWxlIGhhcyBiZWVu IHJlbW92ZWQgYW5kIGlzIGluIHRoZSBBdHRpYy4KCSMgU2VuZCBhIHJlZGlyZWN0IHBvaW50aW5n IHRvIHRoZSBmaWxlIGluIHRoZSBBdHRpYy4KCShteSAkbmV3cGxhY2UgPSAkc2NyaXB0d2hlcmUp ID1+IHN8LyhbXi9dKykkfC9BdHRpYy8kMXw7CglpZiAoJEVOVntRVUVSWV9TVFJJTkd9IG5lICIi KSB7CgkJcmVkaXJlY3QoIiR7bmV3cGxhY2V9PyRFTlZ7UVVFUllfU1RSSU5HfSIpOwoJfSBlbHNl IHsKCQlyZWRpcmVjdCgkbmV3cGxhY2UpOwoJfQoJZXhpdDsKfSBlbHNpZiAoMCAmJiAobXkgQGZp bGVzID0gJnNhZmVnbG9iKCRmdWxsbmFtZSAuICIsdiIpKSkgewoJaHR0cF9oZWFkZXIoInRleHQv cGxhaW4iKTsKCXByaW50ICJZb3UgbWF0Y2hlZCB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIjsKCXBy aW50IGpvaW4gKCJcbiIsIEBmaWxlcyk7CgoJIyBGaW5kIHRoZSB0YWdzIGZyb20gZWFjaCBmaWxl CgkjIERpc3BsYXkgYSBmb3JtIG9mZmVyaW5nIGRpZmZzIGJldHdlZW4gc2FpZCB0YWdzCn0gZWxz ZSB7CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgKCR4dHJhLCAkbW9kdWxlKTsK CgkjIEFzc3VtZSBpdCdzIGEgbW9kdWxlIG5hbWUgd2l0aCBhIHBvdGVudGlhbCBwYXRoIGZvbGxv d2luZyBpdC4KCSR4dHJhID0gKCgkbW9kdWxlID0gJHdoZXJlKSA9fiBzfC8uKnx8KSA/ICQmIDog Jyc7CgoJIyBJcyB0aGVyZSBhbiBpbmRleGVkIHZlcnNpb24gb2YgbW9kdWxlcz8KCWlmIChvcGVu KCRmaCwgIjwgJGN2c3Jvb3QvQ1ZTUk9PVC9tb2R1bGVzIikpIHsKCQl3aGlsZSAoPCRmaD4pIHsK CQkJaWYgKC9eKFxTKylccysoXFMrKS9vICYmICRtb2R1bGUgZXEgJDEKCQkJICAgICYmIC1kICIk Y3Zzcm9vdC8kMiIgJiYgJG1vZHVsZSBuZSAkMikKCQkJewoJCQkJcmVkaXJlY3QoIiRzY3JpcHRu YW1lLyQyJHh0cmEkcXVlcnkiKTsKCQkJfQoJCX0KCX0KCWZhdGFsKCI0MDQgTm90IEZvdW5kIiwK CSAgICAgICclczogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCgkgICAgICAkd2hlcmUpOwp9 CgpnemlwY2xvc2UoKTsKCiMjIEVuZCBNQUlOCgpzdWIgcHJpbnREaWZmU2VsZWN0KCQpIHsKCW15 ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoJbXkgJGYgPSAkaW5wdXR7J2YnfTsKCglwcmludCAn PHNlbGVjdCBpZD0iZiIgbmFtZT0iZiInOwoJcHJpbnQgJyBvbmNoYW5nZT0idGhpcy5mb3JtLnN1 Ym1pdCgpIicgaWYgJHVzZV9qYXZhX3NjcmlwdDsKCXByaW50ICI+XG4iOwoKCWxvY2FsICRfOwoJ Zm9yIChARElGRlRZUEVTKSB7CgkJcHJpbnRmKCI8b3B0aW9uIHZhbHVlPVwiJXNcIiVzPiVzPC9v cHRpb24+XG4iLCAkXywKCQkgICAgJGYgZXEgJF8gPyAnIHNlbGVjdGVkJyA6ICcnLCAiXHUkRElG RlRZUEVTeyRffXsnZGVzY3InfSIpOwoJfQoKCXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgcHJp bnRMb2dTb3J0U2VsZWN0KCQpIHsKCW15ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoKCXByaW50 ICc8c2VsZWN0IGlkPSJsb2dzb3J0IiBuYW1lPSJsb2dzb3J0Iic7CglwcmludCAnIG9uY2hhbmdl PSJ0aGlzLmZvcm0uc3VibWl0KCkiJyBpZiAkdXNlX2phdmFfc2NyaXB0OwoJcHJpbnQgIj5cbiI7 CgoJbG9jYWwgJF87Cglmb3IgKEBMT0dTT1JUS0VZUykgewoJCXByaW50ZigiPG9wdGlvbiB2YWx1 ZT1cIiVzXCIlcz4lczwvb3B0aW9uPlxuIiwgJF8sCgkJICAgICRsb2dzb3J0IGVxICRfID8gJyBz ZWxlY3RlZCcgOiAnJywKCQkgICAgIlx1JExPR1NPUlRLRVlTeyRffXsnZGVzY3InfSIpOwoJfQoK CXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCkgewoJ bXkgKEBkaXJzKSA9IEBfOwoJbXkgKCRkaXJuYW1lLCBAZmlsZXMpOwoKCWZvcmVhY2ggJGRpcm5h bWUgKEBkaXJzKSB7CgkJbmV4dCBpZiAoJGRpcm5hbWUgZXEgIi4iKTsKCQluZXh0IGlmICgkZGly bmFtZSBlcSAiLi4iKTsKCQlteSAoJGRpcikgPSAiJGZ1bGxuYW1lLyRkaXJuYW1lIjsKCQluZXh0 IGlmICghLWQgJGRpcik7CgoJCW15ICgkbGFzdG1vZCkgICAgID0gdW5kZWY7CgkJbXkgKCRsYXN0 bW9kdGltZSkgPSB1bmRlZjsKCQlteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoKCQlvcGVu ZGlyKCRkaCwgJGRpcikgb3IgbmV4dDsKCQlteSAoQGZpbGVuYW1lcykgPSByZWFkZGlyKCRkaCk7 CgkJY2xvc2VkaXIoJGRoKTsKCgkJZm9yZWFjaCBteSAkZmlsZW5hbWUgKEBmaWxlbmFtZXMpIHsK CQkJJGZpbGVuYW1lID0gIiRkaXJuYW1lLyRmaWxlbmFtZSI7CgkJCW15ICgkZmlsZSkgPSAiJGZ1 bGxuYW1lLyRmaWxlbmFtZSI7CgkJCW5leHQgaWYgKCRmaWxlbmFtZSAhfiAvLHYkLyB8fCAhLWYg JGZpbGUpOwoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcy4KCQkJKG15ICRmID0gJGZpbGUpID1+ IHMvLHYkLy87CgkJCW5leHQgaWYgZm9yYmlkZGVuX2ZpbGUoJGYpOwoKCQkJJGZpbGVuYW1lID1+ IHMvLHYkLy87CgkJCW15ICRtb2R0aW1lID0gLU0gJGZpbGU7CgoJCQlpZiAoIWRlZmluZWQoJGxh c3Rtb2QpIHx8ICRtb2R0aW1lIDwgJGxhc3Rtb2R0aW1lKSB7CgkJCQkkbGFzdG1vZCAgICAgPSAk ZmlsZW5hbWU7CgkJCQkkbGFzdG1vZHRpbWUgPSAkbW9kdGltZTsKCQkJfQoJCX0KCQlwdXNoIChA ZmlsZXMsICRsYXN0bW9kKSBpZiAoZGVmaW5lZCgkbGFzdG1vZCkpOwoJfQoJcmV0dXJuIEBmaWxl czsKfQoKc3ViIGh0bWxpZnlfc3ViKCYkKSB7CgkobXkgJHByb2MsIGxvY2FsICRfKSA9IEBfOwoJ bXkgQGEgPSBzcGxpdCAobWAoPGEgW14+XSs+W148XSo8L2E+KWBpKTsKCW15ICRsaW5rZWQ7Cglt eSAkcmVzdWx0ID0gJyc7CgoJd2hpbGUgKCgkXywgJGxpbmtlZCkgPSBzcGxpY2UoQGEsIDAsIDIp KSB7CgkJJiRwcm9jKCk7CgkJJHJlc3VsdCAuPSAkXyAgICAgIGlmIGRlZmluZWQoJF8pOwoJCSRy ZXN1bHQgLj0gJGxpbmtlZCBpZiBkZWZpbmVkKCRsaW5rZWQpOwoJfQoKCSRyZXN1bHQ7Cn0KCnN1 YiBodG1saWZ5KCQ7JCkgewoJKGxvY2FsICRfLCBteSAkZXh0cmEpID0gQF87CgoJJF8gPSBodG1s cXVvdGUoJF8pOwoKCSMgZ2V0IFVSTCdzIGFzIGxpbmsKCXN7CiAgICAgIChodHRwfGZ0cHxodHRw cyk6Ly9cUysKICAgICB9ewoJICZsaW5rKCQmLCBodG1sdW5xdW90ZSgkJikpCiAgICAgfWVneDsK CgkjIGdldCBlLW1haWxzIGFzIGxpbmsKCSRfID0gaHRtbGlmeV9zdWIgewoJCXM8CgkgIFtcdys9 XC0uIV0rQFtcd1wtXSsoXC5bXHdcLV0rKSsKCSAgICA+PAoJICAgICAgJmxpbmsoJCYsICJtYWls dG86JCYiKQoJCT5lZ2l4OwoJICAgIH0KCSAgICAkXzsKCglpZiAoJGV4dHJhKSB7CgoJCSMgZ2V0 IFBSICMncyBhcyBsaW5rOiAiUFIjbm5ubiIgIlBSOiBubm5uLCAuLi4iICJQUiBubm5uLCAuLi4i ICJiaW4vbm5ubiIKCQlpZiAoZGVmaW5lZCgkcHJjZ2kpICYmIGRlZmluZWQoJHJlX3Bya2V5d29y ZCkpCgkJewoJCQlteSAkcHJldjsKCgkJCWRvIHsKCQkJCSRwcmV2ID0gJF87CgoJCQkJJF8gPSBo dG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkgICAgICAoXGIkcmVfcHJrZXl3b3JkWzpcI10/XHMqCgkJ ICAgICAgICg/OgoJCQlcIz8KCQkJXGQrWyxcc11ccyoKCQkgICAgICAgKSoKCQkgICAgICAgXCM/ KQoJCSAgICAgIChcZCspXGIKCQkgICAgIH17CgkJCSAkMSAuICZsaW5rKCQyLCBzcHJpbnRmKCRw cmNnaSwgJDIpKQoJCSAgICAgfWVnaXg7CgkJCQkgICAgfQoJCQkJICAgICRfOwoJCQl9IHdoaWxl ICgkXyBuZSAkcHJldik7CgoJCQlpZiAoZGVmaW5lZCgkcmVfcHJjYXRlZ29yaWVzKSkgewoJCQkJ JF8gPSBodG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkJICAoXGIkcmVfcHJjYXRlZ29yaWVzLyhcZCsp XGIpCgkJCX17CgkJCQkmbGluaygkMSwgc3ByaW50ZigkcHJjZ2ksICQyKSkKCQkJfWVnb3g7CgkJ CQkgICAgfQoJCQkJICAgICRfOwoJCQl9CgkJfQoKCQkjIGdldCBtYW5wYWdlIHNwZWNzIGFzIGxp bms6ICJmb28uMSIgImZvbygxKSIKCQlpZiAoZGVmaW5lZCgkbWFuY2dpKSkgewoJCQkkXyA9IGh0 bWxpZnlfc3ViIHsKCQkJCXN7CgkJICAoXGIoW2EtekEtWl1bXHcuXSspCgkJICAgKD86CgkJICAg IFwoIChbMC05bl0pIFwpXEIKCQkgICAgfAoJCSAgICBcLihbMC05bl0pXGIKCQkgICApCgkJICAp CgkJIH17CgkJICAgICAmbGluaygkMSwgc3ByaW50ZigkbWFuY2dpLCBkZWZpbmVkKCQzKSA/ICQz IDogJDQsICQyKSkKCQkgfWVneDsKCQkJICAgIH0KCQkJICAgICRfOwoJCX0KCX0KCgkkXzsKfQoK I3hoY2hlbgpzdWIgaHRtbGpzKCQpCnsKCWxvY2FsICgkXykgPSBAXzsKCglzL1xcL1xcXFwvZzsK CXMvXCcvXFxcJy9nOwoJcy9cbi9cXG4vZzsKCXMvXC8vXFxcLy9nOwoJJF87Cn0KCnN1YiBzcGFj ZWRIdG1sVGV4dCgkOyQpIHsKCWxvY2FsICRfID0gJF9bMF07CglteSAkdHMgPSAkX1sxXSB8fCAk dGFic3RvcDsKCgkjIEN1dCB0cmFpbGluZyBzcGFjZXMgYW5kIHRhYnMKCXMvWyBcdF0rJC8vOwoK CWlmIChkZWZpbmVkKCR0cykpIHsKCgkJIyBFeHBhbmQgdGFicwoJCTEgd2hpbGUgcy9cdCsvJyAn IHggKGxlbmd0aCgkJikgKiAkdHMgLSBsZW5ndGgoJGApICUgJHRzKS9lCgl9CgoJIyByZXBsYWNl IDx0YWI+IGFuZCA8c3BhY2U+IChcMDAxIGlzIHRvIHByb3RlY3QgdXMgZnJvbSBodG1saWZ5KQoJ IyBnemlwIGNhbiBtYWtlIGV4Y2VsbGVudCB1c2Ugb2YgdGhpcyByZXBlYXRpbmcgcGF0dGVybiA6 LSkKCWlmICgkaHJfYnJlYWthYmxlKSB7CgoJCSMgbWFrZSBldmVyeSBvdGhlciBzcGFjZSAnYnJl YWthYmxlJwoJCXMvICAvIFwwMDFuYnNwOy9nOyAgICAjIDIgKiA8c3BhY2U+CgkJICAgICAgICAg ICAgICAgICAgICAgICMgbGVhdmUgc2luZ2xlIHNwYWNlIGFzIGl0IGlzCgl9IGVsc2UgewoJCXMv IC9cMDAxbmJzcDsvZzsKCX0KCgkkXyA9IGh0bWxpZnkoJF8sICRhbGxvd19zb3VyY2VfZXh0cmEp OwoKCSMgdW5lc2NhcGUKCXkvXDAwMS8mLzsKCglyZXR1cm4gJF87Cn0KCiMgTm90ZSB0aGF0IHRo aXMgZG9lc24ndCBodG1scXVvdGUgdGhlIGZpcnN0IGFyZ3VtZW50Li4uCnN1YiBsaW5rKCQkKSB7 CglteSAoJG5hbWUsICR1cmwpID0gQF87CgoJJHVybCA9fiBzLzovc3ByaW50ZigiJSUlMDJ4Iiwg b3JkKCQmKSkvZWcKCSAgICBpZiAkdXJsID1+IC9eW15hLXpdLzsgICAgIyByZWxhdGl2ZQoKCXNw cmludGYgJzxhIGhyZWY9IiVzIj4lczwvYT4nLCBocmVmcXVvdGUoJHVybCksICRuYW1lOwp9Cgpz dWIgcmV2Y21wKCQkKSB7CglteSAoJHJldjEsICRyZXYyKSA9IEBfOwoKCSMgbWFrZSBubyBjb21w YXJpc29uIGZvciBhIHRhZyBvciBhIGJyYW5jaAoJcmV0dXJuIDAgaWYgJHJldjEgPX4gL1teXGQu XS8gfHwgJHJldjIgPX4gL1teXGQuXS87CgoJbXkgKEByMSkgPSBzcGxpdCAoL1wuLywgJHJldjEp OwoJbXkgKEByMikgPSBzcGxpdCAoL1wuLywgJHJldjIpOwoJbXkgKCRhLCAkYik7CgoJd2hpbGUg KCgkYSA9IHNoaWZ0IChAcjEpKSAmJiAoJGIgPSBzaGlmdCAoQHIyKSkpIHsKCQlpZiAoJGEgIT0g JGIpIHsKCQkJcmV0dXJuICRhIDw9PiAkYjsKCQl9Cgl9CglpZiAoQHIxKSB7IHJldHVybiAxOyB9 CglpZiAoQHIyKSB7IHJldHVybiAtMTsgfQoJcmV0dXJuIDA7Cn0KCnN1YiBmYXRhbCgkJEApIHsK CW15ICgkZXJyY29kZSwgJGZvcm1hdCwgQGFyZ3MpID0gQF87CglpZiAoJGlzX21vZF9wZXJsKSB7 CgkJQXBhY2hlLT5yZXF1ZXN0LT5zdGF0dXMoKHNwbGl0ICgvIC8sICRlcnJjb2RlKSlbMF0pOwoJ fSBlbHNlIHsKCQlwcmludCAiU3RhdHVzOiAkZXJyY29kZVxyXG4iOwoJfQoJaHRtbF9oZWFkZXIo IkVycm9yIik7CglwcmludCAiPHA+RXJyb3I6ICIsCgkgIHNwcmludGYoJGZvcm1hdCwgbWFwKGh0 bWxxdW90ZSgkXyksIEBhcmdzKSksCgkgICI8L3A+XG4iOwoJaHRtbF9mb290ZXIoKTsKCWV4aXQo MSk7Cn0KCnN1YiByZWRpcmVjdCgkKSB7CglteSAoJHVybCkgPSBAXzsKCWlmICgkaXNfbW9kX3Bl cmwpIHsKCQlBcGFjaGUtPnJlcXVlc3QtPnN0YXR1cygzMDEpOwoJCUFwYWNoZS0+cmVxdWVzdC0+ aGVhZGVyX291dChMb2NhdGlvbiA9PiAkdXJsKTsKCX0gZWxzZSB7CgkJcHJpbnQgIlN0YXR1czog MzAxIE1vdmVkXHJcbiI7CgkJcHJpbnQgIkxvY2F0aW9uOiAkdXJsXHJcbiI7Cgl9CglodG1sX2hl YWRlcigiTW92ZWQiKTsKCXByaW50ICI8cD5UaGlzIGRvY3VtZW50IGlzIGxvY2F0ZWQgIiwgJmxp bmsoJ2hlcmUnLCAkdXJsKSwgIjwvcD5cbiI7CglodG1sX2Zvb3RlcigpOwoJZXhpdCgxKTsKfQoK c3ViIHNhZmVnbG9iKCQpIHsKCW15ICgkZmlsZW5hbWUpID0gQF87CglteSAoJGRpcm5hbWUpOwoJ bXkgKEByZXN1bHRzKTsKCW15ICRkaCA9IGRvIHsgbG9jYWwgKCpESCk7IH07CgoJKCRkaXJuYW1l ID0gJGZpbGVuYW1lKSA9fiBzfC9bXi9dKyR8fDsKCSRmaWxlbmFtZSA9fiBzfC4qL3x8OwoKCWlm IChvcGVuZGlyKCRkaCwgJGRpcm5hbWUpKSB7CgkJbXkgJGdsb2IgPSAkZmlsZW5hbWU7CgkJbXkg JHQ7CgoJCSMJdHJhbnNmb3JtIGZpbGVuYW1lIGZyb20gZ2xvYiB0byByZWdleC4gIERlYWwgd2l0 aDoKCQkjCVssIHssID8sICogYXMgZ2xvYiBjaGFycwoJCSMJbWFrZSBzdXJlIHRvIGVzY2FwZSBh bGwgb3RoZXIgcmVnZXggY2hhcnMKCQkkZ2xvYiA9fiBzLyhbXC5cKFwpXHxcK10pL1xcJDEvZzsK CQkkZ2xvYiA9fiBzL1wqLy4qL2c7CgkJJGdsb2IgPX4gcy9cPy8uL2c7CgkJJGdsb2IgPX4gcy97 KFtefV0rKX0vKCR0ID0gJDEpID1+IHMtLC18LWc7ICIoJHQpIi9lZzsKCQlmb3JlYWNoIChyZWFk ZGlyKCRkaCkpIHsKCgkJCWlmICgvXiR7Z2xvYn0kLykgewoJCQkJcHVzaCAoQHJlc3VsdHMsICIk ZGlybmFtZS8iIC4gJF8pOwoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7Cgl9CgoJQHJlc3VsdHM7 Cn0KCnN1YiBzZWFyY2hfcGF0aCgkKSB7CglteSAoJGNvbW1hbmQpID0gQF87CglteSAkZDsKCglm b3IgJGQgKHNwbGl0ICgvOi8sICRjb21tYW5kX3BhdGgpKSB7CgkJcmV0dXJuICIkZC8kY29tbWFu ZCIgaWYgLXggIiRkLyRjb21tYW5kIjsKCX0KCgknJzsKfQoKc3ViIGdldE1pbWVUeXBlRnJvbVN1 ZmZpeCgkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHN1ZmZpeCk7 CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoKCSgkc3VmZml4ID0gJGZ1bGxuYW1lKSA9 fiBzL14uKlwuKFteLl0qKSQvJDEvOwoJJG1pbWV0eXBlID0gJE1UWVBFU3skc3VmZml4fTsKCSRt aW1ldHlwZSA9ICRNVFlQRVN7JyonfSBpZiAoISRtaW1ldHlwZSk7CgoJaWYgKCEkbWltZXR5cGUg JiYgLWYgJG1pbWVfdHlwZXMpIHsKCgkJIyBva2V5LCB0aGlzIGlzIHNvbWV0aGluZyBzcGVjaWFs IC0gc2VhcmNoIHRoZQoJCSMgbWltZS50eXBlcyBkYXRhYmFzZQoJCW9wZW4oJGZoLCAiPCRtaW1l X3R5cGVzIik7CgkJd2hpbGUgKDwkZmg+KSB7CgkJCWlmICgkXyA9fiAvXlxzKihcUytcL1xTKyku KlxiJHN1ZmZpeFxiLykgewoJCQkJJG1pbWV0eXBlID0gJDE7CgkJCQlsYXN0OwoJCQl9CgkJfQoJ CWNsb3NlKCRmaCk7Cgl9CgoJIyBva2V5LCBkaWRuJ3QgZmluZCBhbnl0aGluZyB1c2VmdWwgLi4K CWlmICghKCRtaW1ldHlwZSA9fiAvXFNcL1xTLykpIHsKCQkkbWltZXR5cGUgPSAidGV4dC9wbGFp biI7Cgl9CglyZXR1cm4gJG1pbWV0eXBlOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiMgcmVhZCBmaXJzdCBsaW5lcyBsaWtlIGhlYWQoMSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwpzdWIgaGVhZCgkOyQpIHsKCW15ICRmaCAgICAgICAgPSAkX1swXTsKCW15ICRs aW5lY291bnQgPSAkX1sxXSB8fCAxMDsKCglteSBAYnVmOwoKCWlmICgkbGluZWNvdW50ID4gMCkg ewoJCW15ICRpOwoJCWZvciAoJGkgPSAwIDsgIWVvZigkZmgpICYmICRpIDwgJGxpbmVjb3VudCA7 ICRpKyspIHsKCQkJcHVzaCBAYnVmLCBzY2FsYXIgPCRmaD47CgkJfQoJfSBlbHNlIHsKCQlAYnVm ID0gPCRmaD47Cgl9CgoJQGJ1ZjsKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoj IHNjYW4gdmltIGFuZCBFbWFjcyBkaXJlY3RpdmVzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKSB7CglteSAkdHMgPSB1bmRlZjsKCglmb3IgKEBf KSB7CgkJJHRzID0gJDEgaWYgL1xiKD86dHN8dGFic3RvcHx0YWItd2lkdGgpWzo9XVxzKihbMS05 XVxkKilcYi87Cgl9CgoJKCd0YWJzdG9wJyA9PiAkdHMpOwp9CgpzdWIgb3Blbk91dHB1dEZpbHRl cigpIHsKCXJldHVybiBpZiAhZGVmaW5lZCgkb3V0cHV0X2ZpbHRlcikgfHwgJG91dHB1dF9maWx0 ZXIgZXEgJyc7CgoJb3BlbihTVERPVVQsICJ8LSIpIGFuZCByZXR1cm47CgoJIyBjaGlsZCBvZiBj aGlsZAoJb3BlbihTVERFUlIsICc+L2Rldi9udWxsJyk7CglleGVjKCRvdXRwdXRfZmlsdGVyKSBv ciBleGl0IC0xOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2hvdyBBbm5v dGF0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc3ViIGRvQW5ub3RhdGUoJCQp IHsKCW15ICgkcmV2KSA9IEBfOwoJbXkgKCRwaWQpOwoJbXkgKCRwYXRobmFtZSwgJGZpbGVuYW1l KTsKCW15ICRyZWFkZXIgPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgJHdyaXRlciA9IGRvIHsg bG9jYWwgKCpGSCk7IH07CgoJIyBtYWtlIHN1cmUgdGhlIHJldmlzaW9ucyBhcmUgd2VsbGZvcm1l ZCwgZm9yIHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmICgkcmV2ID1+IC9bXlx3Ll0vKSB7CgkJ ZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkgIiVzIicsCgkJ ICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBz LyhBdHRpY1wvKT9bXlwvXSokLy87CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87 CgoJIyB0aGlzIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeQoJJHwgPSAxOwoJJHwgPSAwOyAgICAjIEZs dXNoCgoJIyBXb3JrIGFyb3VuZCBhIG1vZF9wZXJsIGJ1ZyAoPykgaW4gb3JkZXIgdG8gbWFrZSBv cGVuMigpIHdvcmsuCgkjIFNlYXJjaCBmb3IgInVudGllIFNURElOIiBpbiBtb2RfcGVybCBtYWls aW5nIGxpc3QgYXJjaGl2ZXMuCglteSAkb2xkX3N0ZGluOwoJaWYgKCRpc19tb2RfcGVybCAmJiAo JG9sZF9zdGRpbiA9IHRpZWQgKlNURElOKSkgewoJICBsb2NhbCAkXlcgPSB1bmRlZjsKCSAgdW50 aWUgKlNURElOOwoJfQoKCSMgdGhpcyBhbm5vdGF0ZSB2ZXJzaW9uIGlzIGJhc2VkIG9uIHRoZQoJ IyBjdnMgYW5ub3RhdGUtZGVtbyBQZXJsIHNjcmlwdCBieSBDeWNsaWMgU29mdHdhcmUKCSMgSXQg d2FzIHdyaXR0ZW4gYnkgQ3ljbGljIFNvZnR3YXJlLCBodHRwOi8vd3d3LmN5Y2xpYy5jb20vLCBh bmQgaXMgaW4KCSMgdGhlIHB1YmxpYyBkb21haW4uCgkjIHdlIGNvdWxkIGFiYW5kb24gdGhlIHVz ZSBvZiBybG9nLCByY3NkaWZmIGFuZCBjbyB1c2luZwoJIyB0aGUgY3Zzc2VydmVyIGluIGEgc2lt aWxpYXIgd2F5IG9uZSBkYXkgKC4uYWZ0ZXIgcmV3cml0ZSkKCSRwaWQgPSBvcGVuMigkcmVhZGVy LCAkd3JpdGVyLCAkQ01Ee2N2c30sIEBhbm5vdGF0ZV9vcHRpb25zLCAnc2VydmVyJykKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdGYXRhbCBFcnJvciAtIHVuYWJs ZSB0byBvcGVuIGN2cyBmb3IgYW5ub3RhdGlvbicpOwoKCSMgUmUtdGllIFNURElOIGlmIHdlIGZp ZGRsZWQgYXJvdW5kIHdpdGggaXQgZWFybGllciwganVzdCB0byBiZSBzdXJlLgoJdGllKCpTVERJ TiwgcmVmKCRvbGRfc3RkaW4pLCAkb2xkX3N0ZGluKSBpZiAoJG9sZF9zdGRpbiAmJiAhdGllZCgq U1RESU4pKTsKCgkjIE9LLCBmaXJzdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuICBB IHNpbXBsaWZpZWQgZXhhbXBsZSBpczoKCSMgICAgIFJvb3QgL2hvbWUva2luZ2Rvbi96d29yay9j dnNyb290CgkjICAgICBBcmd1bWVudCBmb28veHgKCSMgICAgIERpcmVjdG9yeSBmb28KCSMgICAg IC9ob21lL2tpbmdkb24vendvcmsvY3Zzcm9vdC9mb28KCSMgICAgIERpcmVjdG9yeSAuCgkjICAg ICAvaG9tZS9raW5nZG9uL3p3b3JrL2N2c3Jvb3QKCSMgICAgIGFubm90YXRlCgkjIGFsdGhvdWdo IGFzIHlvdSBjYW4gc2VlIHRoZXJlIGFyZSBhIGZldyBtb3JlIGRldGFpbHMuCgoJcHJpbnQgJHdy aXRlciAiUm9vdCAkY3Zzcm9vdFxuIjsKCXByaW50ICR3cml0ZXIKCSAgICAiVmFsaWQtcmVzcG9u c2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIENoZWNrZWQtaW4gVXBkYXRlZCBNZXJnZWQgUmVt b3ZlZCBNIEVcbiI7CgoJIyBEb24ndCB3b3JyeSBhYm91dCBzZW5kaW5nIHZhbGlkLXJlcXVlc3Rz LCB0aGUgc2VydmVyIGp1c3QgbmVlZHMgdG8KCSMgc3VwcG9ydCAiYW5ub3RhdGUiIGFuZCBpZiBp dCBkb2Vzbid0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiZSBkb25lLgoJcHJpbnQgJHdyaXRl ciAiVXNlVW5jaGFuZ2VkXG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgLXJcbiI7Cglwcmlu dCAkd3JpdGVyICJBcmd1bWVudCAkcmV2XG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgJHdo ZXJlXG4iOwoKCSMgVGhlIHByb3RvY29sIHJlcXVpcmVzIHVzIHRvIGZ1bGx5IGZha2UgYSB3b3Jr aW5nIGRpcmVjdG9yeSAoYXQKCSMgbGVhc3QgdG8gdGhlIHBvaW50IG9mIGluY2x1ZGluZyB0aGUg ZGlyZWN0b3JpZXMgZG93biB0byB0aGUgb25lCgkjIGNvbnRhaW5pbmcgdGhlIGZpbGUgaW4gcXVl c3Rpb24pLgoJIyBTbyBpZiAkd2hlcmUgaXMgImRpci9zZGlyL2ZpbGUiLCB0aGVuIEBkaXJzIHdp bGwgYmUgKCJkaXIiLCJzZGlyIiwiZmlsZSIpCglteSBAZGlycyA9IHNwbGl0ICgnLycsICR3aGVy ZSk7CglteSAkcGF0aCA9ICIiOwoJZm9yZWFjaCAoQGRpcnMpIHsKCgkJaWYgKCRwYXRoIGVxICIi KSB7CgoJCQkjIEluIG91ciBleGFtcGxlLCAkXyBpcyAiZGlyIi4KCQkJJHBhdGggPSAkXzsKCQl9 IGVsc2UgewoJCQlwcmludCAkd3JpdGVyICJEaXJlY3RvcnkgJHBhdGhcbiI7CgkJCXByaW50ICR3 cml0ZXIgIiRjdnNyb290LyRwYXRoXG4iOwoKCQkJIyBJbiBvdXIgZXhhbXBsZSwgJF8gaXMgInNk aXIiIGFuZCAkcGF0aCBiZWNvbWVzICJkaXIvc2RpciIKCQkJIyBBbmQgdGhlIG5leHQgdGltZSwg ImZpbGUiIGFuZCAiZGlyL3NkaXIvZmlsZSIgKHdoaWNoIHRoZW4gZ2V0cwoJCQkjIGlnbm9yZWQs IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBzZW5kIERpcmVjdG9yeSBmb3IgdGhlIGZpbGUpLgoJ CQkkcGF0aCAuPSAiLyRfIjsKCQl9Cgl9CgoJIyBBbmQgdGhlIGxhc3QgIkRpcmVjdG9yeSIgYmVm b3JlICJhbm5vdGF0ZSIgaXMgdGhlIHRvcCBsZXZlbC4KCXByaW50ICR3cml0ZXIgIkRpcmVjdG9y eSAuXG4iOwoJcHJpbnQgJHdyaXRlciAiJGN2c3Jvb3RcbiI7CgoJcHJpbnQgJHdyaXRlciAiYW5u b3RhdGVcbiI7CgoJIyBPSywgd2UndmUgc2VudCBvdXIgY29tbWFuZCB0byB0aGUgc2VydmVyLiAg VGhpbmcgdG8gZG8gaXMgdG8KCSMgY2xvc2UgdGhlIHdyaXRlciBzaWRlIGFuZCBnZXQgYWxsIHRo ZSByZXNwb25zZXMuICBJZiAiY3ZzIHNlcnZlciIKCSMgd2VyZSBuaWNlciBhYm91dCBidWZmZXJp bmcsIHRoZW4gd2UgY291bGQganVzdCBsZWF2ZSBpdCBvcGVuLCBJIHRoaW5rLgoJY2xvc2UoJHdy aXRlcikgb3IgZGllICJjYW5ub3QgY2xvc2U6ICQhIjsKCglodHRwX2hlYWRlcigpOwoKCW5hdmln YXRlSGVhZGVyKCRzY3JpcHR3aGVyZSwgJHBhdGhuYW1lLCAkZmlsZW5hbWUsICRyZXYsICJhbm5v dGF0ZSIpOwoJcHJpbnQKCSAgICAiPGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+QW5u b3RhdGlvbiBvZiAkcGF0aG5hbWUkZmlsZW5hbWUsIFJldmlzaW9uICRyZXY8L2gzPlxuIjsKCgkj IFJlYWR5IHRvIGdldCB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4KCSMgRm9yIGV4YW1w bGU6CgkjICAgICBFIEFubm90YXRpb25zIGZvciBmb28veHgKCSMgICAgIEUgKioqKioqKioqKioq KioqCgkjICAgICBNIDEuMyAgICAgICAgICAoa2luZ2RvbiAgMDYtU2VwLTk3KTogaGVsbG8KCSMg ICAgIG9rCglteSAoJGxpbmVOcikgPSAwOwoJbXkgKCRvbGRMcmV2LCAkb2xkTHVzcikgPSAoIiIs ICIiKTsKCW15ICgkcmV2cHJpbnQsICR1c3JwcmludCk7CgoJaWYgKCRhbm5UYWJsZSkgewoJCXBy aW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxs cGFkZGluZz1cIjBcIj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8cHJlPiI7Cgl9CgoJIyBwcmVm ZXRjaCBzZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkcmVhZGVyKTsKCglteSAlZCA9IHNj YW5fZGlyZWN0aXZlcyhAYnVmKTsKCgl3aGlsZSAoQGJ1ZiB8fCAhZW9mKCRyZWFkZXIpKSB7CgkJ JF8gPSBAYnVmID8gc2hpZnQgQGJ1ZiA6IDwkcmVhZGVyPjsKCgkJbXkgQHdvcmRzID0gc3BsaXQ7 CgoJCSMgQWRkaW5nIG9uZSBpcyBmb3IgdGhlIChzaW5nbGUpIHNwYWNlIHdoaWNoIGZvbGxvd3Mg JHdvcmRzWzBdLgoJCW15ICRyZXN0ID0gc3Vic3RyKCRfLCBsZW5ndGgoJHdvcmRzWzBdKSArIDEp OwoJCWlmICgkd29yZHNbMF0gZXEgIkUiKSB7CgkJCW5leHQ7CgkJfSBlbHNpZiAoJHdvcmRzWzBd IGVxICJNIikgewoJCQkkbGluZU5yKys7CgkJCShteSAkbHJldiA9IHN1YnN0cigkXywgMiwgIDEz KSkgPX4geS8gLy9kOwoJCQkobXkgJGx1c3IgPSBzdWJzdHIoJF8sIDE2LCA5KSkgID1+IHkvIC8v ZDsKCQkJbXkgJGxpbmUgPSBzdWJzdHIoJF8sIDM2KTsKCQkJbXkgJGlzQ3VycmVudFJldiA9ICgk cmV2IGVxICRscmV2KTsKCgkJCSMgd2Ugc2hvdWxkIHBhcnNlIHRoZSBkYXRlIGhlcmUgLi4KCQkJ aWYgKCRscmV2IGVxICRvbGRMcmV2KSB7CgkJCQkkcmV2cHJpbnQgPSBzcHJpbnRmKCclLThzJywg JycpOwoJCQl9IGVsc2UgewoJCQkJJHJldnByaW50ID0gc3ByaW50ZignJS04cycsICRscmV2KTsK CQkJCSRyZXZwcmludCA9fgoJCQkJICAgIHNgXFMrYCZsaW5rKCQmLCAiJHNjcmlwdHdoZXJlJHF1 ZXJ5I3JldiQmIilgZQoJCQkJICAgIDsgICAgIyBgCgkJCQkkb2xkTHVzciA9ICcnOwoJCQl9CgoJ CQlpZiAoJGx1c3IgZXEgJG9sZEx1c3IpIHsKCQkJCSR1c3JwcmludCA9ICcnOwoJCQl9IGVsc2Ug ewoJCQkJJHVzcnByaW50ID0gJGx1c3I7CgkJCX0KCQkJJG9sZExyZXYgPSAkbHJldjsKCQkJJG9s ZEx1c3IgPSAkbHVzcjsKCgkJCSMgU2V0IGJvbGQgZm9yIHRleHQtYmFzZWQgYnJvd3NlcnMgb25s eSAtIGdyYXBoaWNhbAoJCQkjIGJyb3dzZXJzIHNob3cgYm9sZCBmb250cyBhIGJpdCB3aWRlciB0 aGFuIHJlZ3VsYXIgZm9udHMsCgkJCSMgc28gaXQgbG9va3MgaXJyZWd1bGFyLgoJCQlwcmludCAi PGI+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4dGJhc2VkKTsKCgkJCXByaW50ZiAiJXMl cyAlLThzICU0ZDoiLCAkcmV2cHJpbnQsCgkJCSAgICAkaXNDdXJyZW50UmV2ID8gJyEnIDogJyAn LCAkdXNycHJpbnQsICRsaW5lTnI7CgkJCXByaW50IHNwYWNlZEh0bWxUZXh0KCRsaW5lLCAkZHsn dGFic3RvcCd9KTsKCgkJCXByaW50ICI8L2I+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4 dGJhc2VkKTsKCQl9IGVsc2lmICgkd29yZHNbMF0gZXEgIm9rIikgewoKCQkJIyBXZSBjb3VsZCBj b21wbGFpbiBhYm91dCBhbnkgdGV4dCByZWNlaXZlZCBhZnRlciB0aGlzLCBsaWtlIHRoZQoJCQkj IENWUyBjb21tYW5kIGxpbmUgY2xpZW50LiAgQnV0IGZvciBzaW1wbGljaXR5LCB3ZSBkb24ndC4K CQl9IGVsc2lmICgkd29yZHNbMF0gZXEgImVycm9yIikgewoJCQlmYXRhbCgiNTAwIEludGVybmFs IEVycm9yIiwKCQkJICAgICAgJ0Vycm9yIG9jY3VyZWQgZHVyaW5nIGFubm90YXRlOiA8Yj4lczwv Yj4nLAoJCQkgICAgICAkXyk7CgkJfQoJfQoKCWlmICgkYW5uVGFibGUpIHsKCQlwcmludCAiPC90 YWJsZT4iOwoJfSBlbHNlIHsKCQlwcmludCAiPC9wcmU+IjsKCX0KCWh0bWxfZm9vdGVyKCk7CgoJ Y2xvc2UoJHJlYWRlcikgb3Igd2FybiAiY2Fubm90IGNsb3NlOiAkISI7Cgl3YWl0Owp9CgojIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbWFrZSBDaGVja291dAojIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCnN1YiBkb0NoZWNrb3V0KCQkKSB7CglteSAoJGZ1bGxuYW1lLCAk cmV2KSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHJldm9wdCk7CglteSAkZmggPSBkbyB7IGxvY2Fs ICgqRkgpOyB9OwoKCWlmICgkcmV2IGVxICdIRUFEJyB8fCAkcmV2IGVxICcuJykgewoJCSRyZXYg PSB1bmRlZjsKCX0KCgkjIG1ha2Ugc3VyZSB0aGUgcmV2aXNpb25zIGEgd2VsbGZvcm1lZCwgZm9y IHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmIChkZWZpbmVkKCRyZXYpICYmICRyZXYgPX4gL1te XHcuXS8pIHsKCQlmYXRhbCgiNDA0IE5vdCBGb3VuZCIsCgkJICAgICAgJ01hbGZvcm1lZCBxdWVy eSAiJXMiJywKCQkgICAgICAkRU5We1FVRVJZX1NUUklOR30pOwoJfQoKCSMgZ2V0IG1pbWV0eXBl CglpZiAoZGVmaW5lZCgkaW5wdXR7ImNvbnRlbnQtdHlwZSJ9KQoJICAgICYmICgkaW5wdXR7ImNv bnRlbnQtdHlwZSJ9ID1+IC9cU1wvXFMvKSkKCXsKCQkkbWltZXR5cGUgPSAkaW5wdXR7ImNvbnRl bnQtdHlwZSJ9Cgl9IGVsc2UgewoJCSRtaW1ldHlwZSA9ICZnZXRNaW1lVHlwZUZyb21TdWZmaXgo JGZ1bGxuYW1lKTsKCX0KCglpZiAoZGVmaW5lZCgkcmV2KSkgewoJCSRyZXZvcHQgPSAiLXIkcmV2 IjsKCQlpZiAoJHVzZV9tb2RkYXRlKSB7CgkJCXJlYWRMb2coJGZ1bGxuYW1lLCAkcmV2KTsKCQkJ JG1vZGRhdGUgPSAkZGF0ZXskcmV2fTsKCQl9Cgl9IGVsc2UgewoJCSRyZXZvcHQgPSAiLXJIRUFE IjsKCgkJaWYgKCR1c2VfbW9kZGF0ZSkgewoJCQlyZWFkTG9nKCRmdWxsbmFtZSk7CgkJCSRtb2Rk YXRlID0gJGRhdGV7JHN5bXJldntIRUFEfX07CgkJfQoJfQoKCSMjIyBqdXN0IGZvciB0aGUgcmVj b3JkOgoJIyMjICdjdnMgY28nIHNlZW1zIHRvIGhhdmUgYSBidWcgcmVnYXJkaW5nIHNpbmdsZSBj aGVja291dCBvZgoJIyMjIGRpcmVjdG9yaWVzL2ZpbGVzIGhhdmluZyBzcGFjZXMgaW4gaXQ7Cgkj IyMgdGhpcyBpcyBhbiBpc3N1ZSB0aGF0IHNob3VsZCBiZSByZXNvbHZlZCBvbiBjdnMncyBzaWRl CgkjCgkjIFNhZmVseSBmb3IgYSBjaGlsZCBwcm9jZXNzIHRvIHJlYWQgZnJvbS4KCWlmICghb3Bl bigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQkgIyBjaGRpciB0byAkdG1wZGlyIGJlZm9yZSB0 byBhdm9pZCBub24tcmVhZGFibGUgY2dpLWJpbiBkaXJlY3RvcmllcwoJCWNoZGlyKCR0bXBkaXIp OwoJCW9wZW4oU1RERVJSLCAiPiZTVERPVVQiKTsgICAgIyBSZWRpcmVjdCBzdGRlcnIgdG8gc3Rk b3V0CgoJCSMgd29yayBhcm91bmQgYSBidWcgb2YgY3ZzIC1wOyBleHBhbmQgc3ltbGlua3MKCQl1 c2UgQ3dkICdhYnNfcGF0aCc7CgkJZXhlYygkQ01Ee2N2c30sIEBjdnNfb3B0aW9ucywKCQkgICAg ICctZCcsIGFic19wYXRoKCRjdnNyb290KSwKCQkgICAgICdjbycsICctcCcsCgkJICAgICAkcmV2 b3B0LCAkd2hlcmUpIG9yIGV4aXQgLTE7Cgl9CgoJaWYgKGVvZigkZmgpKSB7CgkJZmF0YWwoIjQw NCBOb3QgRm91bmQiLAoJCSAgICAgICclcyBpcyBub3QgKGFueSBsb25nZXIpIHBlcnRpbmVudCcs CgkJICAgICAgJHdoZXJlKTsKCX0KCgkjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJI0NoZWNraW5nIG91dCBzcXVpZC9z cmMvZnRwLmMKCSNSQ1M6ICAvdXNyL3NyYy9DVlMvc3F1aWQvc3JjL2Z0cC5jLHYKCSNWRVJTOiAx LjEuMS4yOC42LjIKCSMqKioqKioqKioqKioqKioKCgkjIFBhcnNlIENWUyBoZWFkZXIKCW15ICgk cmV2aXNpb24sICRmaWxlbmFtZSwgJGN2c2hlYWRlcik7CgkkZmlsZW5hbWUgPSAiIjsKCXdoaWxl ICg8JGZoPikgewoJCWxhc3QgaWYgKC9eXCpcKlwqXCovKTsKCQkkcmV2aXNpb24gPSAkMSBpZiAo L15WRVJTOiAoLiopJC8pOwoKCQlpZiAoL15DaGVja2luZyBvdXQgKC4qKSQvKSB7CgkJCSRmaWxl bmFtZSA9ICQxOwoJCQkkZmlsZW5hbWUgPX4gcy9eXC5cLyovLzsKCQl9CgkJJGN2c2hlYWRlciAu PSAkXzsKCX0KCglpZiAoJGZpbGVuYW1lIG5lICR3aGVyZSkgewoJCWZhdGFsKCI1MDAgSW50ZXJu YWwgRXJyb3IiLAoJCSAgICAgICdVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGN2cyBjbzogJXMnLAoJ CSAgICAgICRjdnNoZWFkZXIpOwoJfQoJJHwgPSAxOwoKCWlmICgkbWltZXR5cGUgZXEgInRleHQv eC1jdnN3ZWItbWFya3VwIikgewoJCSZjdnN3ZWJNYXJrdXAoJGZoLCAkZnVsbG5hbWUsICRyZXZp c2lvbik7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCRtaW1ldHlwZSk7CgkJcHJpbnQgPCRmaD47 Cgl9CgljbG9zZSgkZmgpOwp9CgpzdWIgY3Zzd2ViTWFya3VwKCQkJCkgewoJbXkgKCRmaWxlaGFu ZGxlLCAkZnVsbG5hbWUsICRyZXZpc2lvbikgPSBAXzsKCW15ICgkcGF0aG5hbWUsICAgJGZpbGVu YW1lKTsKCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBzLyhBdHRpY1wvKT9bXlwvXSokLy87Cgko JGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87CglteSAoJGZpbGV1cmwpID0gdXJsZW5j b2RlKCRmaWxlbmFtZSk7CgoJaHR0cF9oZWFkZXIoKTsKCgluYXZpZ2F0ZUhlYWRlcigkc2NyaXB0 d2hlcmUsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2aXNpb24sICJ2aWV3Iik7CglwcmludCAi PGhyIG5vc2hhZGU+IjsKCXByaW50ICI8dGFibGUgd2lkdGg9XCIxMDAlXCI+XG48dHI+XG48dGQg c3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFya3VwTG9nQ29sb3JcIj4iOwoJcHJpbnQgIkZp bGU6ICIsICZjbGlja2FibGVQYXRoKCR3aGVyZSwgMSk7CglwcmludCAiJm5ic3A7KCI7CgkmZG93 bmxvYWRfbGluaygkZmlsZXVybCwgJHJldmlzaW9uLCAiZG93bmxvYWQiKTsKCXByaW50ICIpIjsK CglpZiAoISRkZWZhdWx0VGV4dFBsYWluKSB7CgkJcHJpbnQgIiZuYnNwOygiOwoJCSZkb3dubG9h ZF9saW5rKCRmaWxldXJsLCAkcmV2aXNpb24sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQlw cmludCAiKSI7Cgl9CglwcmludCAiPGJyPlxuIjsKCglpZiAoJHNob3dfbG9nX2luX21hcmt1cCkg ewoJCXJlYWRMb2coJGZ1bGxuYW1lKTsgICAgIywkcmV2aXNpb24pOwoJCXByaW50TG9nKCRyZXZp c2lvbiwgMCk7Cgl9IGVsc2UgewoJCXByaW50ICJWZXJzaW9uOiA8Yj4kcmV2aXNpb248L2I+PGJy PlxuIjsKCQlwcmludCAiVGFnOiA8Yj4iLCAkaW5wdXR7b25seV93aXRoX3RhZ30sICI8L2I+PGJy PlxuIgoJCSAgICBpZiAkaW5wdXR7b25seV93aXRoX3RhZ307Cgl9CglwcmludCAiPC90ZD5cbjwv dHI+XG48L3RhYmxlPiI7CglteSAkdXJsID0gZG93bmxvYWRfdXJsKCRmaWxldXJsLCAkcmV2aXNp b24sICRtaW1ldHlwZSk7CglwcmludCAiPGhyIG5vc2hhZGU+IjsKCglpZiAoJG1pbWV0eXBlID1+ IC9eaW1hZ2UvKSB7CgkJcHJpbnRmICc8aW1nIHNyYz0iJXMiIGFsdD0iIj48YnI+JywgaHJlZnF1 b3RlKCIkdXJsJGJhcmVxdWVyeSIpOwoJfSBlbHNpZiAoJG1pbWV0eXBlID1+IG0lXmFwcGxpY2F0 aW9uL3BkZiUpIHsKCQlwcmludGYgJzxlbWJlZCBzcmM9IiVzIiB3aWR0aD0iMTAwJSI+PGJyPics CgkJICAgIGhyZWZxdW90ZSgiJHVybCRiYXJlcXVlcnkiKTsKCX0gZWxzaWYgKCRwcmVmb3JtYXRf aW5fbWFya3VwKSB7CgkJcHJpbnQgIjxwcmU+IjsKCgkJIyBwcmVmZXRjaCBzZXZlcmFsIGxpbmVz CgkJbXkgQGJ1ZiA9IGhlYWQoJGZpbGVoYW5kbGUpOwoKCQlteSAlZCA9IHNjYW5fZGlyZWN0aXZl cyhAYnVmKTsKCgkJd2hpbGUgKEBidWYgfHwgIWVvZigkZmlsZWhhbmRsZSkpIHsKCQkJJF8gPSBA YnVmID8gc2hpZnQgQGJ1ZiA6IDwkZmlsZWhhbmRsZT47CgoJCQlwcmludCBzcGFjZWRIdG1sVGV4 dCgkXywgJGR7J3RhYnN0b3AnfSk7CgkJfQoJCXByaW50ICI8L3ByZT4iOwoJfSBlbHNlIHsKCQlw cmludCAiPHByZT4iOwoKCQl3aGlsZSAoPCRmaWxlaGFuZGxlPikgewoJCQlwcmludCBodG1scXVv dGUoJF8pOwoJCX0KCQlwcmludCAiPC9wcmU+IjsKCX0KfQoKc3ViIHZpZXdhYmxlKCQpIHsKCW15 ICgkbWltZXR5cGUpID0gQF87CgoJJG1pbWV0eXBlID1+IG0lXigodGV4dHxpbWFnZSkvfGFwcGxp Y2F0aW9uL3BkZiklOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU2hvdyBD b2xvcmVkIERpZmYKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgZG9EaWZmKCQk JCQkJCkgewoJbXkgKCRmdWxsbmFtZSwgJHIxLCAkdHIxLCAkcjIsICR0cjIsICRmKSA9IEBfOwoJ bXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCW15ICgkcmV2MSwgJHJldjIsICRzeW0xLCAk c3ltMiwgJGYxLCAkZjIpOwoKCWlmICgmZm9yYmlkZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZh dGFsKCI0MDMgRm9yYmlkZGVuIiwKCQkgICAgICAnQWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmls ZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZpbGVzJyk7CgkJcmV0dXJuOwoJfQoKCWlmICgk cjEgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MSA9ICQxOwoJCSRzeW0xID0gJDM7Cgl9 CglpZiAoJHIxIGVxICd0ZXh0JykgewoJCSRyZXYxID0gJHRyMTsKCQkkc3ltMSA9ICIiOwoJfQoK CWlmICgkcjIgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MiA9ICQxOwoJCSRzeW0yID0g JDM7Cgl9CglpZiAoJHIyIGVxICd0ZXh0JykgewoJCSRyZXYyID0gJHRyMjsKCQkkc3ltMiA9ICIi OwoJfQoKCSMgbWFrZSBzdXJlIHRoZSByZXZpc2lvbnMgYSB3ZWxsZm9ybWVkLCBmb3Igc2VjdXJp dHkKCSMgcmVhc29ucyAuLgoJaWYgKCRyZXYxID1+IC9bXlx3Ll0vIHx8ICRyZXYyID1+IC9bXlx3 Ll0vKSB7CgkJZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkg IiVzIicsCgkJICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkjCgkjIHJldjEgYW5kIHJl djIgYXJlIG5vdyBib3RoIG51bWVyaWMgcmV2aXNpb25zLgoJIyBUaHVzIHdlIGRvIGEgRFdJTSBo ZXJlIGFuZCBzd2FwIHRoZW0gaWYgcmV2MSBpcyBhZnRlciByZXYyLgoJIyBYWFggc2hvdWxkIHdl IHdhcm4gYWJvdXQgdGhlIGZhY3QgdGhhdCB3ZSBkbyB0aGlzPwoJaWYgKCZyZXZjbXAoJHJldjEs ICRyZXYyKSA+IDApIHsKCQlteSAoJHRtcDEsICR0bXAyKSA9ICgkcmV2MSwgJHN5bTEpOwoJCSgk cmV2MSwgJHN5bTEpID0gKCRyZXYyLCAkc3ltMik7CgkJKCRyZXYyLCAkc3ltMikgPSAoJHRtcDEs ICR0bXAyKTsKCX0KCW15ICRkaWZmdHlwZSA9ICRESUZGVFlQRVN7JGZ9OwoKCWlmICghJGRpZmZ0 eXBlKSB7CgkJZmF0YWwoIjQwMCBCYWQgYXJndW1lbnRzIiwKCQkgICAgICAnRGlmZiBmb3JtYXQg JXMgbm90IHVuZGVyc3Rvb2QnLAoJCSAgICAgICRmKTsKCX0KCglteSBAZGlmZnR5cGUgICAgICAg PSBAeyRkaWZmdHlwZS0+eydvcHRzJ319OwoJbXkgJGh1bWFuX3JlYWRhYmxlID0gJGRpZmZ0eXBl LT57J2NvbG9yZWQnfTsKCgkjIGFwcGx5IHNwZWNpYWwgb3B0aW9ucwoJaWYgKCRzaG93ZnVuYykg ewoJCXB1c2ggQGRpZmZ0eXBlLCAnLXAnIGlmICRmIG5lICdzJzsKCgkJbXkgKCRyZTEsICRyZTIp OwoKCQl3aGlsZSAoKCRyZTEsICRyZTIpID0gZWFjaCAlZnVuY2xpbmVfcmVnZXhwKSB7CgkJCWlm ICgkZnVsbG5hbWUgPX4gLyRyZTEvKSB7CgkJCQlwdXNoIEBkaWZmdHlwZSwgJy1GJywgJHJlMjsK CQkJCWxhc3Q7CgkJCX0KCQl9Cgl9CgoJaWYgKCRodW1hbl9yZWFkYWJsZSkgewoJCWlmICgkaHJf aWdud2hpdGUpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICctdyc7CgkJfQoJCWlmICgkaHJfaWdua2V5 c3Vic3QpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICcta2snOwoJCX0KCX0KCglpZiAoIW9wZW4oJGZo LCAiLXwiKSkgeyAgICAjIGNoaWxkCgkJb3BlbihTVERFUlIsICI+JlNURE9VVCIpOyAgICAjIFJl ZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQKCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJZXhlYygkQ01E e3Jjc2RpZmZ9LCBAZGlmZnR5cGUsICItciRyZXYxIiwgIi1yJHJldjIiLCAkZnVsbG5hbWUpIG9y IGV4aXQgLTE7Cgl9CglpZiAoJGh1bWFuX3JlYWRhYmxlKSB7CgkJaHR0cF9oZWFkZXIoKTsKCQkm aHVtYW5fcmVhZGFibGVfZGlmZigkZmgsICRyZXYyKTsKCQlodG1sX2Zvb3RlcigpOwoJCWd6aXBj bG9zZSgpOwoJCWV4aXQ7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCJ0ZXh0L3BsYWluIik7Cgl9 CgoJIwoJIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KCSNSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQv dGNwX291dHB1dC5jLHYKCSNyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKCSNyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMTcKCSNkaWZmIC1jIC1yMS4xNiAtcjEuMTcKCSMqKiogL2hvbWUvbmN2cy9zcmMv c3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzExLzAzIDIyOjA4OjA4ICAgICAxLjE2 CgkjLS0tIC9ob21lL25jdnMvc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8x Mi8wNSAxNzo0NjozNSAgICAgMS4xNwoJIwoJIyBJZGVhczoKCSMgLSBudWtlIHRoZSBzdGRlcnIg b3V0cHV0IGlmIGl0J3Mgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUKCSMgLSBBZGQgIm5vIGRpZmZl cmVuY2VzIGZvdW5kIiBpZiB0aGUgZGlmZiBjb21tYW5kIHN1cHBsaWVkIG5vIG91dHB1dC4KCSMK CSMqKiogc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8xMS8wMyAyMjowODow OCAgICAgMS4xNgoJIy0tLSBzcmMvc3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzEy LzA1IDE3OjQ2OjM1ICAgICAxLjE3IFJFTEVOR18yXzFfMAoJIyAoYm9ndXMgZXhhbXBsZSwgYnV0 Li4uKQoJIwoJaWYgKGdyZXAgeyAkXyBlcSAnLXUnIH0gQGRpZmZ0eXBlKSB7CgkJJGYxID0gJy0t LSc7CgkJJGYyID0gJ1wrXCtcKyc7Cgl9IGVsc2UgewoJCSRmMSA9ICdcKlwqXConOwoJCSRmMiA9 ICctLS0nOwoJfQoKCXdoaWxlICg8JGZoPikgewoJCWlmIChtfF4kZjEgJGN2c3Jvb3R8bykgewoJ CQlzfCRjdnNyb290L3x8bzsKCQkJaWYgKCRzeW0xKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAk c3ltMVxuIjsKCQkJfQoJCX0gZWxzaWYgKG18XiRmMiAkY3Zzcm9vdHxvKSB7CgkJCXN8JGN2c3Jv b3QvfHxvOwoKCQkJaWYgKCRzeW0yKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAkc3ltMlxuIjsK CQkJfQoJCX0KCQlwcmludCAkXzsKCX0KCWNsb3NlKCRmaCk7Cn0KCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBTaG93IExvZ3MgLi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpzdWIgZ2V0RGlyTG9ncygkJEApIHsKCW15ICgkY3Zzcm9vdCwgJGRpcm5hbWUsIEBvdGhl ckZpbGVzKSA9IEBfOwoJbXkgKCRzdGF0ZSwgJG90aGVyRmlsZXMsICR0YWcsICRmaWxlLCAkZGF0 ZSwgJGJyYW5jaHBvaW50LCAkYnJhbmNoLAoJICAgICRsb2cpOwoJbXkgKCRyZXYsICRyZXZpc2lv biwgJHJldndhbnRlZCwgJGZpbGVuYW1lLCAkaGVhZCwgJGF1dGhvcik7CgoJJHRhZyA9ICRpbnB1 dHtvbmx5X3dpdGhfdGFnfTsKCglteSAoJERpck5hbWUpID0gIiRjdnNyb290LyR3aGVyZSI7Cglt eSAoQGZpbGVzLCBAZmlsZXRhZ3MpOwoJbXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCglw dXNoIChAZmlsZXMsICZzYWZlZ2xvYigiJERpck5hbWUvKix2IikpOwoJcHVzaCAoQGZpbGVzLCAm c2FmZWdsb2IoIiREaXJOYW1lL0F0dGljLyosdiIpKQoJICAgIGlmICghJGlucHV0eydoaWRlYXR0 aWMnfSk7Cglmb3JlYWNoIG15ICRmaWxlIChAb3RoZXJGaWxlcykgewoJCXB1c2ggKEBmaWxlcywg IiREaXJOYW1lLyRmaWxlIik7Cgl9CgoJIyBqdXN0IGV4ZWN1dGUgcmxvZyBpZiB0aGVyZSBhcmUg YW55IGZpbGVzCglpZiAoJCNmaWxlcyA8IDApIHsKCQlyZXR1cm47Cgl9CgoJaWYgKGRlZmluZWQo JHRhZykpIHsKCgkJI2Nhbid0IHVzZSAtcjx0YWc+IGFzIC0gaXMgYWxsb3dlZCBpbiB0YWduYW1l cywgYnV0IG1pc2ludGVycHJlYXRlZCBieSBybG9nLi4KCQlpZiAoIW9wZW4oJGZoLCAiLXwiKSkg eyAgICAjIGNoaWxkCgkJCW9wZW4oU1RERVJSLCAnPi9kZXYvbnVsbCcpOyAjIHJsb2cgbWF5IGNv bXBsYWluOyBpZ25vcmUuCgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9 LCBAZmlsZXMpIG9yIGV4aXQgLTE7CgkJfQoJfSBlbHNlIHsKCgkJaWYgKCFvcGVuKCRmaCwgIi18 IikpIHsgICAgIyBjaGlsZAoJCQlvcGVuKFNUREVSUiwgJz4vZGV2L251bGwnKTsgIyBybG9nIG1h eSBjb21wbGFpbjsgaWdub3JlLgoJCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJCWV4ZWMoJENNRHty bG9nfSwgJy1yJywgQGZpbGVzKSBvciBleGl0IC0xOwoJCX0KCX0KCSRzdGF0ZSA9ICJzdGFydCI7 CgoJd2hpbGUgKDwkZmg+KSB7CgkJaWYgKCRzdGF0ZSBlcSAic3RhcnQiKSB7CgoJCQkjTmV4dCBm aWxlLiBJbml0aWFsaXplIGZpbGUgdmFyaWFibGVzCgkJCSRyZXYgICAgICAgICA9ICcnOwoJCQkk cmV2d2FudGVkICAgPSAnJzsKCQkJJGJyYW5jaCAgICAgID0gJyc7CgkJCSRicmFuY2hwb2ludCA9 ICcnOwoJCQkkZmlsZW5hbWUgICAgPSAnJzsKCQkJJGxvZyAgICAgICAgID0gJyc7CgkJCSRyZXZp c2lvbiAgICA9ICcnOwoJCQklc3ltcmV2ICAgICAgPSAoKTsKCQkJQGZpbGV0YWdzICAgID0gKCk7 CgoJCQkjanVtcCB0byBoZWFkIHN0YXRlCgkJCSRzdGF0ZSA9ICJoZWFkIjsKCQl9CgkJcHJpbnQg IiRzdGF0ZTokXyIgaWYgKCR2ZXJib3NlKTsKCQlhZ2FpbjoKCgkJaWYgKCRzdGF0ZSBlcSAiaGVh ZCIpIHsKCgkJCSMkcmNzZmlsZSA9ICQxIGlmICgvXlJDUyBmaWxlOiAoLispJC8pOyAjbm90IHVz ZWQgKHlldCkKCgkJCWlmICgvXldvcmtpbmcgZmlsZTogKC4rKSQvKSB7CgkJCQkkZmlsZW5hbWUg PSAkMTsKCQkJfSBlbHNpZiAoL15oZWFkOiAoLispJC8pIHsKCQkJCSRoZWFkID0gJDE7CgkJCX0g ZWxzaWYgKC9eYnJhbmNoOiAoLispJC8pIHsKCQkJCSRicmFuY2ggPSAkMQoJCQl9IGVsc2lmICgv XnN5bWJvbGljIG5hbWVzOi8pIHsKCQkJCSRzdGF0ZSA9ICJ0YWdzIjsKCQkJCSgkYnJhbmNoID0g JGhlYWQpID1+IHMvXC5cZCskLy8KCQkJCSAgICBpZiAkYnJhbmNoIGVxICcnOwoJCQkJJGJyYW5j aCA9fiBzLyhcZCspJC8wLiQxLzsKCQkJCSRzeW1yZXZ7TUFJTn0gID0gJGJyYW5jaDsKCQkJCSRz eW1yZXZ7SEVBRH0gID0gJGJyYW5jaDsKCQkJCSRhbGx0YWdze01BSU59ID0gMTsKCQkJCSRhbGx0 YWdze0hFQUR9ID0gMTsKCQkJCXB1c2ggKEBmaWxldGFncywgIk1BSU4iLCAiSEVBRCIpOwoJCQl9 IGVsc2lmICgvJExPR19SRVZTRVBBUkFUT1IvbykgewoJCQkJJHN0YXRlID0gImxvZyI7CgkJCQkk cmV2ICAgPSAnJzsKCQkJCSRkYXRlICA9ICcnOwoJCQkJJGxvZyAgID0gJyc7CgoJCQkJIyBUcnkg dG8gcmVjb25zdHJ1Y3QgdGhlIHJlbGF0aXZlIGZpbGVuYW1lIGlmIFJDUyBzcGl0cyBvdXQgYSBm dWxsIHBhdGgKCQkJCSRmaWxlbmFtZSA9fiBzJV5cUSREaXJOYW1lXEUvJSU7CgkJCX0KCQkJbmV4 dDsKCQl9CgoJCWlmICgkc3RhdGUgZXEgInRhZ3MiKSB7CgkJCWlmICgvXlxzKyhbXjpdKyk6XHMr KFtcZFwuXSspXHMqJC8pIHsKCQkJCXB1c2ggKEBmaWxldGFncywgJDEpOwoJCQkJJHN5bXJldnsk MX0gID0gJDI7CgkJCQkkYWxsdGFnc3skMX0gPSAxOwoJCQkJbmV4dDsKCQkJfSBlbHNpZiAoL15c Uy8pIHsKCgkJCQlpZiAoZGVmaW5lZCgkdGFnKSkgewoJCQkJCWlmIChkZWZpbmVkKCRzeW1yZXZ7 JHRhZ30pCgkJCQkJICAgIHx8ICR0YWcgZXEgIkhFQUQiKQoJCQkJCXsKCQkJCQkJJHJldndhbnRl ZCA9CgkJCQkJCSAgICAkc3ltcmV2eyR0YWcgZXEgIkhFQUQiID8KCQkJCQkJICAgICJNQUlOIiA6 ICR0YWd9OwoJCQkJCQkoJGJyYW5jaCA9ICRyZXZ3YW50ZWQpID1+CgkJCQkJCSAgICBzL1xiMFwu Ly87CgkJCQkJCSgkYnJhbmNocG9pbnQgPSAkYnJhbmNoKSA9fgoJCQkJCQkgICAgcy9cLj9cZCsk Ly87CgkJCQkJCSRyZXZ3YW50ZWQgPSAnJwoJCQkJCQkgICAgaWYgKCRyZXZ3YW50ZWQgbmUgJGJy YW5jaCk7CgkJCQkJfSBlbHNpZiAoJHRhZyBuZSAiSEVBRCIpIHsKCQkJCQkJcHJpbnQKCQkJCQkJ ICAgICJUYWcgbm90IGZvdW5kLCBza2lwIHRoaXMgZmlsZSIKCQkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJCSRzdGF0ZSA9ICJza2lwIjsKCQkJCQkJbmV4dDsKCQkJCQl9CgkJCQl9CgoJCQkJ Zm9yZWFjaCBteSAkdGFnZm91bmQgKEBmaWxldGFncykgewoJCQkJCSR0YWdzeyR0YWdmb3VuZH0g PSAxOwoJCQkJfQoJCQkJJHN0YXRlID0gImhlYWQiOwoJCQkJZ290byBhZ2FpbjsKCQkJfQoJCX0K CgkJaWYgKCRzdGF0ZSBlcSAibG9nIikgewoJCQlpZiAoLyRMT0dfUkVWU0VQQVJBVE9SL28gfHwg LyRMT0dfRklMRVNFUEFSQVRPUi9vKSB7CgoJCQkJIyBFbmQgb2YgYSBsb2cgZW50cnkuCgkJCQlt eSAkcmV2YnJhbmNoID0gJHJldjsKCQkJCSRyZXZicmFuY2ggPX4gcy9cLlxkKyQvLzsKCQkJCXBy aW50ICIkZmlsZW5hbWUgJHJldiBXYW50ZWQ6ICRyZXZ3YW50ZWQgIiwKCQkJCSAgICAiUmV2YnJh bmNoOiAkcmV2YnJhbmNoIEJyYW5jaDogJGJyYW5jaCAiLAoJCQkJICAgICJCcmFuY2hwb2ludDog JGJyYW5jaHBvaW50XG4iCgkJCQkgICAgaWYgKCR2ZXJib3NlKTsKCgkJCQlpZiAoJHJldndhbnRl ZCBlcSAnJyAmJiAkYnJhbmNoIG5lICcnCgkJCQkgICAgJiYgJGJyYW5jaCBlcSAkcmV2YnJhbmNo IHx8ICFkZWZpbmVkKCR0YWcpKQoJCQkJewoJCQkJCXByaW50CgkJCQkJICAgICJGaWxlIHJldmlz aW9uICRyZXYgZm91bmQgZm9yIGJyYW5jaCAkYnJhbmNoXG4iCgkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJJHJldndhbnRlZCA9ICRyZXY7CgkJCQl9CgoJCQkJaWYgKCRyZXZ3YW50ZWQgbmUg JycgPyAkcmV2IGVxICRyZXZ3YW50ZWQgOgoJCQkJICAgICRicmFuY2hwb2ludCBuZSAnJyA/ICRy ZXYgZXEgJGJyYW5jaHBvaW50IDoKCQkJCSAgICAwICYmICgkcmV2IGVxICRoZWFkKSkKCQkJCXsg ICAgIyBEb24ndCB0aGluayBoZWFkIGlzIG5lZWRlZCBoZXJlLi4KCQkJCQlwcmludAoJCQkJCSAg ICAiRmlsZSBpbmZvICRyZXYgZm91bmQgZm9yICRmaWxlbmFtZVxuIgoJCQkJCSAgICBpZiAoJHZl cmJvc2UpOwoJCQkJCW15IEBmaW5mbyA9CgkJCQkJICAgICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvciwKCQkJCQkJJGZpbGVuYW1lKTsKCQkJCQlteSAoJG5hbWUpOwoJCQkJCSgkbmFtZSA9ICRm aWxlbmFtZSkgPX4gcyUvLiolJTsKCQkJCQkkZmlsZWluZm97JG5hbWV9ID0gW0BmaW5mb107CgkJ CQkJJHN0YXRlID0gImRvbmUiIGlmICgkcmV2IGVxICRyZXZ3YW50ZWQpOwoJCQkJfQoJCQkJJHJl diAgPSAnJzsKCQkJCSRkYXRlID0gJyc7CgkJCQkkbG9nICA9ICcnOwoJCQl9IGVsc2lmICgkZGF0 ZSBlcSAnJwoJCQkgICAgJiYgbXxeZGF0ZTpccysoXGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihc ZCspOihcZCspO3wKCQkJICAgICkKCQkJewoJCQkJbXkgJHlyID0gJDE7CgoJCQkJIyBkYW1uIDIt ZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJCWlmICgkeXIgPiAxMDApIHsKCQkJCQkkeXIgLT0g MTkwMDsKCQkJCX0KCQkJCSRkYXRlID0KCQkJCSAgICAmVGltZTo6TG9jYWw6OnRpbWVnbSgkNiwg JDUsICQ0LCAkMywgJDIgLSAxLAoJCQkJCSR5cik7CgkJCQkoJGF1dGhvcikgPSAvYXV0aG9yOiAo W147XSspLzsKCQkJCSRzdGF0ZSA9ICJsb2ciOwoJCQkJJGxvZyAgID0gJyc7CgkJCQluZXh0OwoJ CQl9IGVsc2lmICgkcmV2IGVxICcnICYmIC9ecmV2aXNpb24gKFxkKyg/OlwuXGQrKSspLiokLykg ewoJCQkJJHJldiA9ICQxOyAjIC4qJCBlYXRzIHVwIHRoZSBsb2NrZXIobG9ja2Vycz8pIGluZm8s IGlmIGFueQoJCQkJbmV4dDsKCQkJfSBlbHNlIHsKCQkJCSRsb2cgLj0gJF87CgkJCX0KCQl9CgoJ CWlmICgvJExPR19GSUxFU0VQQVJBVE9SL28pIHsKCQkJJHN0YXRlID0gInN0YXJ0IjsKCQkJbmV4 dDsKCQl9Cgl9CgoJaWYgKCQuID09IDApIHsKCQlmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwK CQkgICAgICAnRmFpbGVkIHRvIHNwYXduIEdOVSBybG9nIG9uIDxlbT4iJXMiPC9lbT4uICA8cD5E aWQgeW91IHNldCB0aGUgPGI+JGNvbW1hbmRfcGF0aDwvYj4gaW4geW91ciBjb25maWd1cmF0aW9u IGZpbGUgY29ycmVjdGx5ID8gKEN1cnJlbnRseSAiJXMiJywKCQkgICAgICBqb2luICgiLCAiLCBA ZmlsZXMpLCAkY29tbWFuZF9wYXRoKTsKCX0KCWNsb3NlKCRmaCk7Cn0KCnN1YiByZWFkTG9nKCQ7 JCkgewoJbXkgKCRmdWxsbmFtZSwgJHJldmlzaW9uKSA9IEBfOwoJbXkgKCRzeW1uYW1lcywgJGhl YWQsICRyZXYsICRiciwgJGJycCwgJGJyYW5jaCwgJGJyYW5jaHJldik7CglteSAkZmggPSBkbyB7 IGxvY2FsICgqRkgpOyB9OwoKCWlmIChkZWZpbmVkKCRyZXZpc2lvbikpIHsKCQkkcmV2aXNpb24g PSAiLXIkcmV2aXNpb24iOwoJfSBlbHNlIHsKCQkkcmV2aXNpb24gPSAiIjsKCX0KCgl1bmRlZiAl c3ltcmV2OwoJdW5kZWYgJXJldnN5bTsKCXVuZGVmIEBhbGxyZXZpc2lvbnM7Cgl1bmRlZiAlZGF0 ZTsKCXVuZGVmICVhdXRob3I7Cgl1bmRlZiAlc3RhdGU7Cgl1bmRlZiAlZGlmZmxpbmVzOwoJdW5k ZWYgJWxvZzsKCglwcmludCgiR29pbmcgdG8gcmxvZyAnJGZ1bGxuYW1lJ1xuIikgaWYgKCR2ZXJi b3NlKTsKCWlmICghb3BlbigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQlpZiAoJHJldmlzaW9u IG5lICcnKSB7CgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9LCAkcmV2 aXNpb24sICRmdWxsbmFtZSkgb3IgZXhpdCAtMTsKCQl9IGVsc2UgewoJCQlvcGVuT3V0cHV0Rmls dGVyKCk7CgkJCWV4ZWMoJENNRHtybG9nfSwgJGZ1bGxuYW1lKSBvciBleGl0IC0xOwoJCX0KCX0K Cgl3aGlsZSAoPCRmaD4pIHsKCQlwcmludCBpZiAoJHZlcmJvc2UpOwoJCWlmICgkc3ltbmFtZXMp IHsKCQkJaWYgKC9eXHMrKFteOl0rKTpccysoW1xkXC5dKykvKSB7CgkJCQkkc3ltcmV2eyQxfSA9 ICQyOwoJCQl9IGVsc2UgewoJCQkJJHN5bW5hbWVzID0gMDsKCQkJfQoJCX0gZWxzaWYgKC9eaGVh ZDpccysoW1xkXC5dKykvKSB7CgkJCSRoZWFkID0gJDE7CgkJfSBlbHNpZiAoL15icmFuY2g6XHMr KFtcZFwuXSspLykgewoJCQkkY3VyYnJhbmNoID0gJDE7CgkJfSBlbHNpZiAoL15zeW1ib2xpYyBu YW1lcy8pIHsKCQkJJHN5bW5hbWVzID0gMTsKCQl9IGVsc2lmICgvXi0tLS0tLykgewoJCQlsYXN0 OwoJCX0KCX0KCSgkY3VyYnJhbmNoID0gJGhlYWQpID1+IHMvXC5cZCskLy8gaWYgKCFkZWZpbmVk KCRjdXJicmFuY2gpKTsKCgkjIGVhY2ggbG9nIGVudHJ5IGlzIG9mIHRoZSBmb3JtOgoJIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkjIHJldmlzaW9uIDMuNy4xLjEKCSMgZGF0ZTogMTk5 NS8xMS8yOSAyMjoxNTo1MjsgIGF1dGhvcjogZmVubmVyOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiAr NSAtMwoJIyBsb2cgaW5mbwoJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJIyBGb3Ig YSBsb2NrZWQgcmV2aXNpb24sIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZSBzZXBhcmF0b3IgCgkj IGJlY29tZXMgc210aCBsaWtlCgkjIHJldmlzaW9uIDkuMTkJbG9ja2VkIGJ5OiB2YXNzaWxpaTsK Cglsb2dlbnRyeToKCgl3aGlsZSAoIS8kTE9HX0ZJTEVTRVBBUkFUT1IvbykgewoJCSRfID0gPCRm aD47CgkJbGFzdCBsb2dlbnRyeSBpZiAoIWRlZmluZWQoJF8pKTsgICAgIyBFT0YKCQlwcmludCAi UjoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgvXnJldmlzaW9uIChcZCsoPzpcLlxkKykrKS8p IHsKCQkJJHJldiA9ICQxOwoJCQl1bnNoaWZ0IChAYWxscmV2aXNpb25zLCAkcmV2KTsKCQl9IGVs c2lmICgvJExPR19GSUxFU0VQQVJBVE9SL28gfHwgLyRMT0dfUkVWU0VQQVJBVE9SL28pIHsKCQkJ bmV4dCBsb2dlbnRyeTsKCQl9IGVsc2UgewoKCQkJIyBUaGUgcmxvZyBvdXRwdXQgaXMgc3ludGFj dGljYWxseSBhbWJpZ3VvdXMuICBXZSBtdXN0CgkJCSMgaGF2ZSBndWVzc2VkIHdyb25nIGFib3V0 IHdoZXJlIHRoZSBlbmQgb2YgdGhlIGxhc3QgbG9nCgkJCSMgbWVzc2FnZSB3YXMuCgkJCSMgU2lu Y2UgdGhpcyBpcyBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGVvcGxlIHB1dCBybG9nIG91dHB1dAoJ CQkjIGluIHRoZWlyIGNvbW1pdCBtZXNzYWdlcywgZG9uJ3QgZXZlbiBib3RoZXIga2VlcGluZwoJ CQkjIHRoZXNlIGxpbmVzIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCByZXZpc2lvbiB0aGV5IGdv IHdpdGgKCQkJIyBhbnkgbW9yZS4KCQkJbmV4dCBsb2dlbnRyeTsKCQl9CgkJJF8gPSA8JGZoPjsK CQlwcmludCAiRDoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgKCQkgICAgbXxeZGF0ZTpccyso XGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihcZCspOihcZCspO1xzK2F1dGhvcjpccysoXFMrKTtc cytzdGF0ZTpccysoXFMrKTtccysobGluZXM6XHMrKFswLTlccystXSspKT98CgkJICAgICkKCQl7 CgkJCW15ICR5ciA9ICQxOwoKCQkJIyBkYW1uIDItZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJ aWYgKCR5ciA+IDEwMCkgewoJCQkJJHlyIC09IDE5MDA7CgkJCX0KCQkJJGRhdGV7JHJldn0gPQoJ CQkgICAgJlRpbWU6OkxvY2FsOjp0aW1lZ20oJDYsICQ1LCAkNCwgJDMsICQyIC0gMSwgJHlyKTsK CQkJJGF1dGhvcnskcmV2fSAgICA9ICQ3OwoJCQkkc3RhdGV7JHJldn0gICAgID0gJDg7CgkJCSRk aWZmbGluZXN7JHJldn0gPSAkMTA7CgkJfSBlbHNlIHsKCQkJZmF0YWwoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgICdFcnJvciBwYXJzaW5nIFJDUyBvdXRwdXQ6ICVzJywKCQkJICAgICAg JF8pOwoJCX0KCQlsaW5lOgoKCQl3aGlsZSAoPCRmaD4pIHsKCQkJcHJpbnQgIkw6IiwgJF8gaWYg KCR2ZXJib3NlKTsKCQkJbmV4dCBsaW5lIGlmICgvXmJyYW5jaGVzOlxzLyk7CgkJCWxhc3QgbGlu ZQoJCQkgICAgaWYgKC8kTE9HX0ZJTEVTRVBBUkFUT1IvbyB8fCAvJExPR19SRVZTRVBBUkFUT1Iv byk7CgkJCSRsb2d7JHJldn0gLj0gJF87CgkJfQoJCXByaW50ICJFOiIsICRfIGlmICgkdmVyYm9z ZSk7Cgl9CgljbG9zZSgkZmgpOwoJcHJpbnQgIkRvbmUgcmVhZGluZyBSQ1MgZmlsZVxuIiBpZiAo JHZlcmJvc2UpOwoKCUByZXZvcmRlciA9IHJldmVyc2Ugc29ydCB7IHJldmNtcCgkYSwgJGIpIH0g QGFsbHJldmlzaW9uczsKCXByaW50ICJEb25lIHNvcnRpbmcgcmV2aXNpb25zIiwgam9pbiAoIiAi LCBAcmV2b3JkZXIpLCAiXG4iCgkgICAgaWYgKCR2ZXJib3NlKTsKCgkjCgkjIEhFQUQgaXMgYW4g YXJ0aWZpY2lhbCB0YWcgd2hpY2ggaXMgc2ltcGx5IHRoZSBoaWdoZXN0IHRhZyBudW1iZXIgb24g dGhlIG1haW4KCSMgYnJhbmNoLCB1bmxlc3MgdGhlcmUgaXMgYSBicmFuY2ggdGFnIGluIHRoZSBS Q1MgZmlsZSBpbiB3aGljaCBjYXNlIGl0J3MgdGhlCgkjIGhpZ2hlc3QgcmV2aXNpb24gb24gdGhh dCBicmFuY2guICBGaW5kIGl0IGJ5IGxvb2tpbmcgdGhyb3VnaCBAcmV2b3JkZXI7IGl0CgkjIGlz IHRoZSBmaXJzdCBjb21taXQgbGlzdGVkIG9uIHRoZSBhcHByb3ByaWF0ZSBicmFuY2guCgkjIFRo aXMgaXMgbm90IG5lY2Nlc2FyeSB0aGUgc2FtZSByZXZpc2lvbiBhcyBtYXJrZWQgYXMgaGVhZCBp biB0aGUgUkNTIGZpbGUuCglteSAkaGVhZHJldiA9ICRjdXJicmFuY2ggfHwgIjEiOwoJKCRzeW1y ZXZ7Ik1BSU4ifSA9ICRoZWFkcmV2KSA9fiBzLyhcZCspJC8wLiQxLzsKCglmb3JlYWNoICRyZXYg KEByZXZvcmRlcikgewoJCWlmICgkcmV2ID1+IC9eKFxTKilcLlxkKyQvICYmICRoZWFkcmV2IGVx ICQxKSB7CgkJCSRzeW1yZXZ7IkhFQUQifSA9ICRyZXY7CgkJCWxhc3Q7CgkJfQoJfQoJKCRzeW1y ZXZ7IkhFQUQifSA9ICRoZWFkcmV2KSA9fiBzL1wuXGQrJC8vCgkgICAgaWYgKCFkZWZpbmVkKCRz eW1yZXZ7IkhFQUQifSkpOwoJcHJpbnQgIkRvbmUgZmluZGluZyBIRUFEXG4iIGlmICgkdmVyYm9z ZSk7CgoJIwoJIyBOb3cgdGhhdCB3ZSBrbm93IGFsbCBvZiB0aGUgcmV2aXNpb24gbnVtYmVycywg d2UgY2FuIGFzc29jaWF0ZQoJIyBhYnNvbHV0ZSByZXZpc2lvbiBudW1iZXJzIHdpdGggYWxsIG9m IHRoZSBzeW1ib2xpYyBuYW1lcywgYW5kCgkjIHBhc3MgdGhlbSB0byB0aGUgZm9ybSBzbyB0aGF0 IHRoZSBzYW1lIGFzc29jaWF0aW9uIGRvZXNuJ3QgaGF2ZQoJIyB0byBiZSBidWlsdCB0aGVuLgoJ IwoJdW5kZWYgQGJyYW5jaG5hbWVzOwoJdW5kZWYgJWJyYW5jaHBvaW50OwoJdW5kZWYgJHNlbDsK Cglmb3JlYWNoIChyZXZlcnNlIHNvcnQga2V5cyAlc3ltcmV2KSB7CgkJJHJldiA9ICRzeW1yZXZ7 JF99OwoJCWlmICgkcmV2ID1+IC9eKCguKilcLik/XGIwXC4oXGQrKSQvKSB7CgkJCXB1c2ggKEBi cmFuY2huYW1lcywgJF8pOwoKCQkJIwoJCQkjIEEgcmV2aXNpb24gbnVtYmVyIG9mIEEuQi4wLkQg cmVhbGx5IHRyYW5zbGF0ZXMgaW50bwoJCQkjICJ0aGUgaGlnaGVzdCBjdXJyZW50IHJldmlzaW9u IG9uIGJyYW5jaCBBLkIuRCIuCgkJCSMKCQkJIyBJZiB0aGVyZSBpcyBubyBicmFuY2ggQS5CLkQs IHRoZW4gaXQgdHJhbnNsYXRlcyBpbnRvCgkJCSMgdGhlIGhlYWQgQS5CIC4KCQkJIwoJCQkjIFRo aXMgcmVhc29uaW5nIGFsc28gYXBwbGllcyB0byB0aGUgbWFpbiBicmFuY2ggQS5CLAoJCQkjIHdp dGggdGhlIGJyYW5jaCBudW1iZXIgMC5BLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAoJCQkjIGl0 IGhhcyBubyBoZWFkIHRvIHRyYW5zbGF0ZSB0byBpZiB0aGVyZSBpcyBub3RoaW5nIG9uCgkJCSMg dGhlIGJyYW5jaCwgYnV0IEkgZ3Vlc3MgdGhpcyBjYW4gbmV2ZXIgaGFwcGVuPwoJCQkjCgkJCSMg KHRoZSBjb2RlIGJlbG93IGdyYWNlZnVsbHkgZm9yZ2V0cyBhYm91dCB0aGUgYnJhbmNoCgkJCSMg aWYgaXQgc2hvdWxkIGhhcHBlbikKCQkJIwoJCQkkaGVhZCA9IGRlZmluZWQoJDIpID8gJDIgOiAi IjsKCQkJJGJyYW5jaCA9ICQzOwoJCQkkYnJhbmNocmV2ID0gJGhlYWQgLiAoJGhlYWQgbmUgIiIg PyAiLiIgOiAiIikgLiAkYnJhbmNoOwoJCQlteSAkcmVnZXg7CgkJCSRyZWdleCA9IHF1b3RlbWV0 YSAkYnJhbmNocmV2OwoJCQkkcmV2ICAgPSAkaGVhZDsKCgkJCWZvcmVhY2ggbXkgJHIgKEByZXZv cmRlcikgewoJCQkJaWYgKCRyID1+IC9eJHtyZWdleH1cYi8pIHsKCQkJCQkkcmV2ID0gJGJyYW5j aHJldjsKCQkJCQlsYXN0OwoJCQkJfQoJCQl9CgkJCW5leHQgaWYgKCRyZXYgZXEgIiIpOwoKCQkJ aWYgKCRyZXYgbmUgJGhlYWQgJiYgJGhlYWQgbmUgIiIpIHsKCQkJCSRicmFuY2hwb2ludHskaGVh ZH0gLj0gIiwgIgoJCQkJICAgIGlmICgkYnJhbmNocG9pbnR7JGhlYWR9KTsKCQkJCSRicmFuY2hw b2ludHskaGVhZH0gLj0gJF87CgkJCX0KCQl9CgkJJHJldnN5bXskcmV2fSAuPSAiLCAiIGlmICgk cmV2c3lteyRyZXZ9KTsKCQkkcmV2c3lteyRyZXZ9IC49ICRfOwoJCSRzZWwgLj0gIjxvcHRpb24g dmFsdWU9XCIke3Jldn06JHtffVwiPiRfPC9vcHRpb24+XG4iOwoJfQoJcHJpbnQgIkRvbmUgYXNz b2NpYXRpbmcgcmV2aXNpb25zIHdpdGggYnJhbmNoZXNcbiIgaWYgKCR2ZXJib3NlKTsKCglteSAo JG9ubHlvbmJyYW5jaCwgJG9ubHlicmFuY2hwb2ludCk7CglpZiAoJG9ubHlvbmJyYW5jaCA9ICRp bnB1dHsnb25seV93aXRoX3RhZyd9KSB7CgkJJG9ubHlvbmJyYW5jaCA9ICRzeW1yZXZ7JG9ubHlv bmJyYW5jaH07CgkJaWYgKCRvbmx5b25icmFuY2ggPX4gcy9cYjBcLi8vKSB7CgkJCSgkb25seWJy YW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaCkgPX4gcy9cLlxkKyQvLzsKCQl9IGVsc2UgewoJCQkk b25seWJyYW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaDsKCQl9CgoJCWlmICghZGVmaW5lZCgkb25s eW9uYnJhbmNoKSB8fCAkb25seWJyYW5jaHBvaW50IGVxICIiKSB7CgkJCWZhdGFsKCI0MDQgVGFn IG5vdCBmb3VuZCIsCgkJCSAgICAgICdUYWcgJXMgbm90IGRlZmluZWQnLAoJCQkgICAgICAkaW5w dXR7J29ubHlfd2l0aF90YWcnfSk7CgkJfQoJfQoKCXVuZGVmIEByZXZpc2lvbnM7CgoJZm9yZWFj aCAoQGFsbHJldmlzaW9ucykgewoJCSgkYnIgID0gJF8pICA9fiBzL1wuXGQrJC8vOwoJCSgkYnJw ID0gJGJyKSA9fiBzL1wuXGQrJC8vOwoJCW5leHQKCQkgICAgaWYgKCRvbmx5b25icmFuY2ggJiYg JGJyIG5lICRvbmx5b25icmFuY2gKCQkgICAgJiYgJF8gbmUgJG9ubHlicmFuY2hwb2ludCk7CgkJ dW5zaGlmdCAoQHJldmlzaW9ucywgJF8pOwoJfQoKCWlmICgkbG9nc29ydCBlcSAiZGF0ZSIpIHsK CgkJIyBTb3J0IHRoZSByZXZpc2lvbnMgaW4gY29tbWl0IG9yZGVyIGFuIHNlY29uZGFyeSBzb3J0 IG9uIHJldmlzaW9uCgkJIyAoc2Vjb25kYXJ5IHNvcnQgbmVlZGVkIGZvciBpbXBvcnRlZCBzb3Vy Y2VzLCBvciB0aGUgZmlyc3QgbWFpbgoJCSMgcmV2aXNpb24gZ2V0cyBiZWZvcmUgdGhlIHNhbWUg cmV2aXNpb24gb24gdGhlIDEuMS4xIGJyYW5jaCkKCQlAcmV2ZGlzcGxheW9yZGVyID0KCQkgICAg c29ydCB7ICRkYXRleyRifSA8PT4gJGRhdGV7JGF9IHx8IC1yZXZjbXAoJGEsICRiKSB9CgkJICAg IEByZXZpc2lvbnM7Cgl9IGVsc2lmICgkbG9nc29ydCBlcSAicmV2IikgewoKCQkjIFNvcnQgdGhl IHJldmlzaW9ucyBpbiByZXZpc2lvbiBvcmRlciwgaGlnaGVzdCBmaXJzdAoJCUByZXZkaXNwbGF5 b3JkZXIgPSByZXZlcnNlIHNvcnQgeyByZXZjbXAoJGEsICRiKSB9IEByZXZpc2lvbnM7Cgl9IGVs c2UgewoKCQkjIE5vIHNvcnRpbmcuIFByZXNlbnQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmxvZyAv IGN2cyBsb2cKCQlAcmV2ZGlzcGxheW9yZGVyID0gQHJldmlzaW9uczsKCX0KCn0KCnN1YiBwcmlu dERpZmZMaW5rcygkJCkgewoJbXkgKCR0ZXh0LCAkdXJsKSA9IEBfOwoJbXkgQGV4dHJhOwoKCWxv Y2FsICRfOwoJZm9yICgkRElGRlRZUEVTeyRkZWZhdWx0RGlmZlR5cGV9eydjb2xvcmVkJ30gPyBx dyh1KSA6IHF3KGgpKSB7CgkJbXkgJGYgPSAkXyBlcSAkZGVmYXVsdERpZmZUeXBlID8gJycgOiAk XzsKCgkJcHVzaCBAZXh0cmEsICZsaW5rKGxjICRESUZGVFlQRVN7JF99eydkZXNjcid9LCAiJHVy bCZmPSRmIik7Cgl9CgoJcHJpbnQgJmxpbmsoJHRleHQsICR1cmwpLCAnICgnLCBqb2luICgnLCAn LCBAZXh0cmEpLCAnKSc7Cn0KCnN1YiBwcmludExvZygkOyQpIHsKCW15ICgkbGluaywgJGJyLCAk YnJwKTsKCSgkXywgJGxpbmspID0gQF87CgkoJGJyICA9ICRfKSAgPX4gcy9cLlxkKyQvLzsKCSgk YnJwID0gJGJyKSA9fiBzL1wuP1xkKyQvLzsKCW15ICgkaXNEZWFkLCAkcHJldik7CgoJJGxpbmsg PSAxIGlmICghZGVmaW5lZCgkbGluaykpOwoJJGlzRGVhZCA9ICgkc3RhdGV7JF99IGVxICJkZWFk Iik7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkbGluayAmJiAhJGlzRGVhZCkgewoJCW15ICgkZmls ZW5hbWUpOwoJCSgkZmlsZW5hbWUgPSAkd2hlcmUpID1+IHMvXi4qXC8vLzsKCQlteSAoJGZpbGV1 cmwpID0gdXJsZW5jb2RlKCRmaWxlbmFtZSk7CgkJcHJpbnQgIjxhIG5hbWU9XCJyZXYkX1wiPjwv YT4iOwoKCQlpZiAoZGVmaW5lZCgkcmV2c3lteyRffSkpIHsKCQkJZm9yZWFjaCBteSAkc3ltIChz cGxpdCAoIiwgIiwgJHJldnN5bXskX30pKSB7CgkJCQlwcmludCAiPGEgbmFtZT1cIiRzeW1cIj48 L2E+IjsKCQkJfQoJCX0KCgkJaWYgKGRlZmluZWQoJHJldnN5bXskYnJ9KSAmJiAkcmV2c3lteyRi cn0KCQkgICAgJiYgIWRlZmluZWQoJG5hbWVwcmludGVkeyRicn0pKQoJCXsKCQkJZm9yZWFjaCBt eSAkc3ltIChzcGxpdCAoIiwgIiwgJHJldnN5bXskYnJ9KSkgewoJCQkJcHJpbnQgIjxhIG5hbWU9 XCIkc3ltXCI+PC9hPiI7CgkJCX0KCQkJJG5hbWVwcmludGVkeyRicn0gPSAxOwoJCX0KCQlwcmlu dCAiXG4gUmV2aXNpb24gIjsKCQkmZG93bmxvYWRfbGluaygkZmlsZXVybCwgJF8sICRfLAoJCQkk ZGVmYXVsdFZpZXdhYmxlID8gInRleHQveC1jdnN3ZWItbWFya3VwIiA6IHVuZGVmKTsKCgkJaWYg KCRkZWZhdWx0Vmlld2FibGUpIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJF8sICJkb3dubG9hZCIsICRtaW1ldHlwZSk7CgkJCXByaW50ICIpIjsKCQl9CgoJ CWlmIChub3QgJGRlZmF1bHRUZXh0UGxhaW4pIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxv YWRfbGluaygkZmlsZXVybCwgJF8sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQkJcHJpbnQg IikiOwoJCX0KCgkJaWYgKCEkZGVmYXVsdFZpZXdhYmxlKSB7CgkJCXByaW50ICIgLyAoIjsKCQkJ JmRvd25sb2FkX2xpbmsoJGZpbGV1cmwsICRfLCAidmlldyIsCgkJCQkidGV4dC94LWN2c3dlYi1t YXJrdXAiKTsKCQkJcHJpbnQgIikiOwoJCX0KCgkJaWYgKCRhbGxvd19hbm5vdGF0ZSkgewoJCQlw cmludCAiIC0gIjsKCQkJcHJpbnQgJmxpbmsoCgkJCQknYW5ub3RhdGUnLAoJCQkJc3ByaW50ZigK CQkJCQknJXMvJXM/YW5ub3RhdGU9JXMlcycsICRzY3JpcHRuYW1lLAoJCQkJCXVybGVuY29kZSgk d2hlcmUpLCAgICAgJF8sCgkJCQkJJGJhcmVxdWVyeQoJCQkJKQoJCQkpOwoJCX0KCgkJIyBQbHVz IGEgc2VsZWN0IGxpbmsgaWYgZW5hYmxlZCwgYW5kIHRoaXMgdmVyc2lvbiBpc24ndCBzZWxlY3Rl ZAoJCWlmICgkYWxsb3dfdmVyc2lvbl9zZWxlY3QpIHsKCQkJaWYgKCghZGVmaW5lZCgkaW5wdXR7 InIxIn0pIHx8ICRpbnB1dHsicjEifSBuZSAkXykpIHsKCQkJCXByaW50ICIgLSAiOwoJCQkJcHJp bnQgJmxpbmsoCgkJCQkJJ1tzZWxlY3QgZm9yIGRpZmZzXScsCgkJCQkJc3ByaW50ZigKCQkJCQkJ JyVzP3IxPSVzJXMnLCAkc2NyaXB0d2hlcmUsCgkJCQkJCSRfLCAgICAgICAgICAgJGJhcmVxdWVy eQoJCQkJCSkKCQkJCSk7CgkJCX0gZWxzZSB7CgkJCQlwcmludCAiIC0gPGI+W3NlbGVjdGVkXTwv Yj4iOwoJCQl9CgkJfQoJfSBlbHNlIHsKCQlwcmludCAiUmV2aXNpb24gPGI+JF88L2I+IjsKCX0K CglpZiAoL14xXC4xXC4xXC5cZCskLykgewoJCXByaW50ICIgPGk+KHZlbmRvciBicmFuY2gpPC9p PiI7Cgl9CglpZiAoZGVmaW5lZCBAbXl0eikgewoJCW15ICgkZXN0KSA9ICRteXR6Wyhsb2NhbHRp bWUoJGRhdGV7JF99KSlbOF1dOwoJCXByaW50ICIsIDxpPiIsIHNjYWxhciBsb2NhbHRpbWUoJGRh dGV7JF99KSwgIiAkZXN0PC9pPiAoIjsKCX0gZWxzZSB7CgkJcHJpbnQgIiwgPGk+Iiwgc2NhbGFy IGdtdGltZSgkZGF0ZXskX30pLCAiIFVUQzwvaT4gKCI7Cgl9CglwcmludCByZWFkYWJsZVRpbWUo dGltZSgpIC0gJGRhdGV7JF99LCAxKSwgIiBhZ28pIjsKCXByaW50ICIgYnkgIjsKCXByaW50ICI8 aT4iLCAkYXV0aG9yeyRffSwgIjwvaT5cbiI7CglwcmludCAiPGJyPkJyYW5jaDogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskYnJ9KSA6ICRyZXZzeW17JGJyfSwKCSAgICAiPC9iPlxu IgoJICAgIGlmICgkcmV2c3lteyRicn0pOwoJcHJpbnQgIjxicj5DVlMgVGFnczogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskX30pIDogJHJldnN5bXskX30sCgkgICAgIjwvYj4iCgkg ICAgaWYgKCRyZXZzeW17JF99KTsKCXByaW50ICI8YnI+QnJhbmNoIHBvaW50IGZvcjogPGI+IiwK CSAgICAkbGluayA/IGxpbmtfdGFncygkYnJhbmNocG9pbnR7JF99KSA6ICRicmFuY2hwb2ludHsk X30sICI8L2I+XG4iCgkgICAgaWYgKCRicmFuY2hwb2ludHskX30pOwoKCSMgRmluZCB0aGUgcHJl dmlvdXMgcmV2aXNpb24KCW15IEBwcmV2cmV2ID0gc3BsaXQgKC9cLi8sICRfKTsKCWRvIHsKCQlp ZiAoLS0kcHJldnJldlskI3ByZXZyZXZdIDw9IDApIHsKCgkJCSMgSWYgaXQgd2FzIFguWS5aLjEs IGp1c3QgbWFrZSBpdCBYLlkKCQkJcG9wIChAcHJldnJldik7CgkJCXBvcCAoQHByZXZyZXYpOwoJ CX0KCQkkcHJldiA9IGpvaW4gKCIuIiwgQHByZXZyZXYpOwoJfSB1bnRpbCAoZGVmaW5lZCgkZGF0 ZXskcHJldn0pIHx8ICRwcmV2IGVxICIiKTsKCglpZiAoJHByZXYgbmUgIiIpIHsKCQlpZiAoJGRp ZmZsaW5lc3skX30pIHsKCQkJcHJpbnQKCQkJICAgICI8YnI+Q2hhbmdlcyBzaW5jZSA8Yj4kcHJl djogJGRpZmZsaW5lc3skX30gbGluZXM8L2I+IjsKCQl9Cgl9CgoJaWYgKCRpc0RlYWQpIHsKCQlw cmludCAiPGJyPjxiPjxpPkZJTEUgUkVNT1ZFRDwvaT48L2I+XG4iOwoJfSBlbHNpZiAoJGxpbmsp IHsKCQlteSAlZGlmZnJldiA9ICgpOwoJCSRkaWZmcmV2eyRffSA9IDE7CgkJJGRpZmZyZXZ7IiJ9 ID0gMTsKCQlwcmludCAnPGJyPic7CgkJbXkgJGRpZmYgPSAnRGlmZic7CgoJCSMKCQkjIE9mZmVy IGRpZmYgdG8gcHJldmlvdXMgcmV2aXNpb24KCQlpZiAoJHByZXYpIHsKCQkJJGRpZmZyZXZ7JHBy ZXZ9ID0gMTsKCgkJCW15ICR1cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0l cyVzJywgJHNjcmlwdHdoZXJlLAoJCQkJJHByZXYsICRfLCAkYmFyZXF1ZXJ5KTsKCgkJCXByaW50 ICRkaWZmLCAiIHRvIHByZXZpb3VzICI7CgkJCSRkaWZmID0gJyc7CgkJCXByaW50RGlmZkxpbmtz KCRwcmV2LCAkdXJsKTsKCQl9CgoJCSMKCQkjIFBsdXMsIGlmIGl0J3Mgb24gYSBicmFuY2gsIGFu ZCBpdCdzIG5vdCBhIHZlbmRvciBicmFuY2gsCgkJIyBvZmZlciBhIGRpZmYgd2l0aCB0aGUgYnJh bmNoIHBvaW50LgoJCWlmICgkcmV2c3lteyRicnB9ICYmICEvXjFcLjFcLjFcLlxkKyQvCgkJICAg ICYmICFkZWZpbmVkKCRkaWZmcmV2eyRicnB9KSkKCQl7CgkJCW15ICR1cmwgPQoJCQkgICAgc3By aW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJlLCAkYnJwLAoJCQkJJF8s ICRiYXJlcXVlcnkpOwoKCQkJcHJpbnQgJGRpZmYsICIgdG8gYnJhbmNocG9pbnQgIjsKCQkJJGRp ZmYgPSAnJzsKCQkJcHJpbnREaWZmTGlua3MoJGJycCwgJHVybCk7CgkJfQoKCQkjCgkJIyBQbHVz LCBpZiBpdCdzIG9uIGEgYnJhbmNoLCBhbmQgaXQncyBub3QgYSB2ZW5kb3IgYnJhbmNoLAoJCSMg b2ZmZXIgdG8gZGlmZiB3aXRoIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBoaWdoZXIgYnJhbmNo LgoJCSMgKGUuZy4gY2hhbmdlIGdldHMgY29tbWl0dGVkIGFuZCB0aGVuIGJyb3VnaHQKCQkjIG92 ZXIgdG8gLXN0YWJsZSkKCQlpZiAoL15cZCtcLlxkK1wuXGQrLyAmJiAhL14xXC4xXC4xXC5cZCsk LykgewoJCQlteSAoJGksICRuZXh0bWFpbik7CgoJCQlmb3IgKCRpID0gMCA7ICRpIDwgJCNyZXZv cmRlciAmJiAkcmV2b3JkZXJbJGldIG5lICRfIDsKCQkJICAgICRpKyspCgkJCXsKCQkJfQoJCQlt eSBAdG1wMiA9IHNwbGl0ICgvXC4vLCAkXyk7CgkJCWZvciAoJG5leHRtYWluID0gIiIgOyAkaSA+ IDAgOyAkaS0tKSB7CgkJCQlteSAkbmV4dCA9ICRyZXZvcmRlclskaSAtIDFdOwoJCQkJbXkgQHRt cDEgPSBzcGxpdCAoL1wuLywgJG5leHQpOwoKCQkJCWlmIChAdG1wMSA8IEB0bXAyKSB7CgkJCQkJ JG5leHRtYWluID0gJG5leHQ7CgkJCQkJbGFzdDsKCQkJCX0KCgkJCQkjIE9ubHkgdGhlIGhpZ2hl c3QgdmVyc2lvbiBvbiBhIGJyYW5jaCBzaG91bGQgaGF2ZQoJCQkJIyBhIGRpZmYgZm9yIHRoZSAi bmV4dCBtYWluIi4KCQkJCWxhc3QKCQkJCSAgICBpZiAoQHRtcDEgLSAxIDw9IEB0bXAyCgkJCQkg ICAgJiYgam9pbiAoIi4iLCBAdG1wMVswIC4uICQjdG1wMSAtIDFdKSBlcQoJCQkJICAgIGpvaW4g KCIuIiwgQHRtcDJbMCAuLiAkI3RtcDEgLSAxXSkpOwoJCQl9CgoJCQlpZiAoIWRlZmluZWQoJGRp ZmZyZXZ7JG5leHRtYWlufSkpIHsKCQkJCSRkaWZmcmV2eyRuZXh0bWFpbn0gPSAxOwoKCQkJCW15 ICR1cmwgPQoJCQkJICAgIHNwcmludGYoJyVzLmRpZmY/cjE9JXMmcjI9JXMlcycsCgkJCQkJJHNj cmlwdHdoZXJlLCAkbmV4dG1haW4sICRfLAoJCQkJCSRiYXJlcXVlcnkpOwoKCQkJCXByaW50ICRk aWZmLCAiIG5leHQgbWFpbiAiOwoJCQkJJGRpZmYgPSAnJzsKCQkJCXByaW50RGlmZkxpbmtzKCRu ZXh0bWFpbiwgJHVybCk7CgkJCX0KCQl9CgoJCSMgUGx1cyBpZiB1c2VyIGhhcyBzZWxlY3RlZCBv bmx5IHIxLCB0aGVuIHByZXNlbnQgYSBsaW5rCgkJIyB0byBtYWtlIGEgZGlmZiB0byB0aGF0IHJl dmlzaW9uCgkJaWYgKGRlZmluZWQoJGlucHV0eyJyMSJ9KSAmJiAhZGVmaW5lZCgkZGlmZnJldnsk aW5wdXR7InIxIn19KSkgewoJCQkkZGlmZnJldnskaW5wdXR7InIxIn19ID0gMTsKCgkJCW15ICR1 cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJl LAoJCQkJJGlucHV0eydyMSd9LCAkXywgJGJhcmVxdWVyeSk7CgoJCQlwcmludCAkZGlmZiwgIiB0 byBzZWxlY3RlZCAiOwoJCQkkZGlmZiA9ICcnOwoJCQlwcmludERpZmZMaW5rcygkaW5wdXR7J3Ix J30sICR1cmwpOwoJCX0KCgl9CglwcmludCAiXG48L3A+XG48cHJlPlxuIjsKCXByaW50ICZodG1s aWZ5KCRsb2d7JF99LCAkYWxsb3dfbG9nX2V4dHJhKTsKCXByaW50ICI8L3ByZT5cbiI7Cn0KCiN4 aGNoZW4Kc3ViIGRvR3JhcGgoJCkgewoJbXkgKCRmdWxsbmFtZSkgPSBAXzsKCW15ICgkZGlmZnJl diwgJHVwd2hlcmUsICRmaWxlbmFtZSwgJGJhY2t1cmwpOwoKCXJlYWRMb2coJGZ1bGxuYW1lKTsK CWh0bWxfaGVhZGVyKCJDVlMgcmV2aXNpb25zIHRyZWUgZm9yICR3aGVyZSIpOwoJKCR1cHdoZXJl ICA9ICR3aGVyZSkgPX4gc3woQXR0aWMvKT9bXi9dKyR8fDsKCSgkZmlsZW5hbWUgPSAkd2hlcmUp ID0gfiBzfF4uKi98fDsKCSRiYWNrdXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUo JHVwd2hlcmUpIC4gJHF1ZXJ5OwoJcHJpbnQgIjxwPlxuIjsKCXByaW50ICZsaW5rKCRiYWNraWNv biwgIiRiYWNrdXJsIyRmaWxlbmFtZSIpLCAiIDxiPlVwIHRvICIsCiAgICAgICAgICAgICZjbGlj a2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwvYj5cbjwvcD5cbiI7CiAgICAgICAgcHJpbnQgIjxw PlxuICI7CglwcmludCAiXG48L3A+XG48aHIgbm9zaGFkZT5cbiI7CglwcmludCAiPGZvbnQgY29s b3I9cmVkPjwvZm9udD48YnI+IjsKCglteSAkc2hvd2NvZGUgPSAwOwoJbXkgJGJBZGRDb21tYTsK CglwcmludCAiPHhtcD4iIGlmICRzaG93Y29kZTsKCShteSAkZmlsZXVybCA9ICR3aGVyZSkgPX4g cy9eLipcLy8vOwoJJGZpbGV1cmwgPSB1cmxlbmNvZGUoJGZpbGV1cmwpOwoJcHJpbnQgIjxzY3Jp cHQ+XG4iOwoJcHJpbnQgInZhciBzQmFyZXF1ZXJ5ID0gXCIiLmh0bWxqcygkYmFyZXF1ZXJ5KS4i XCI7XG4iOwoJcHJpbnQgInZhciBhc0JhcmVxdWVyeSA9IHNCYXJlcXVlcnkuc3BsaXQoXCcmXCcp O1xuIjsKCXByaW50ICJzQmFyZXF1ZXJ5ID0gXCJcIjtcbiI7CglwcmludCAidmFyIHNJZ25vcmUg PSBcIm9ubHlfd2l0aF90YWc9XCI7XG4iOwoJcHJpbnQgImZvciAodmFyIGkgPSAwOyBpIDwgYXNC YXJlcXVlcnkubGVuZ3RoOyBpKyspXG4iOwoJcHJpbnQgIntcbiI7CglwcmludCAiCWlmIChhc0Jh cmVxdWVyeVtpXS5sZW5ndGggPD0gMCkgY29udGludWU7XG4iOwoJcHJpbnQgIglpZiAoYXNCYXJl cXVlcnlbaV0uc3Vic3RyKDAsIHNJZ25vcmUubGVuZ3RoKSA9PSBzSWdub3JlKSBjb250aW51ZTtc biI7CglwcmludCAiCXNCYXJlcXVlcnkgKz0gXCImXCIgKyBhc0JhcmVxdWVyeVtpXTtcbiI7Cglw cmludCAifVxuIjsKCXByaW50ICJ2YXIgYVJldiA9IFxuW1xuIjsKCSRiQWRkQ29tbWEgPSAwOwoJ Zm9yZWFjaCAoQGFsbHJldmlzaW9ucykgewoJCWlmICgkYkFkZENvbW1hID09IDApIHsKCQkJJGJB ZGRDb21tYSA9IDE7CgkJfQoJCWVsc2UgewoJCQlwcmludCAiLFxuIjsKCQl9CgkJcHJpbnQgIntc biI7CgkJcHJpbnQgIglSZXY6IFwiJF9cIixcbiI7CgkJcHJpbnQgIglMb2c6IFwiIi5odG1sanMo aHRtbGlmeSgkbG9neyRffSwgJGFsbG93X2xvZ19leHRyYSkpLiJcIlxuIjsKCQlwcmludGYgIn0i OwoJfQoJcHJpbnRmICJcbl07XG4iOwoKCXByaW50ZiAidmFyIGFTeW0gPSBcbltcbiI7CgoJZm9y ZWFjaCBteSAkaSAoa2V5cyAlc3ltcmV2KSB7CgkJcHJpbnQgIntcbiI7CgkJcHJpbnQgIglTeW06 CVwiIi5odG1sanMoaHRtbHF1b3RlKCRpKSkuIlwiLFxuIjsKCQlwcmludCAiCVJldjoJXCIkc3lt cmV2eyRpfVwiXG4iOwoJCXByaW50ICJ9LFxuIjsKCX0KCXByaW50ICJ7XG4iOwoJcHJpbnQgIglT eW06CVwiIi5odG1sanMoaHRtbHF1b3RlKCRmaWxldXJsKSkuIlwiLFxuIjsKCXByaW50ICIJUmV2 OglcIjFcIlxuIjsKCXByaW50ICJ9XG4iOwoJcHJpbnQgIl07XG4iOwoKCXByaW50ICJmb3IgKHZh ciBpID0gMDsgaSA8IGFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglw cmludCAiCWlmIChhUmV2W2ldLkxvZy5zdWJzdHIoYVJldltpXS5Mb2cubGVuZ3RoIC0gMSkgPT0g XCdcXG5cJylcclxuIjsNCglwcmludCAiCQlhUmV2W2ldLkxvZyA9IGFSZXZbaV0uTG9nLnN1YnN0 cigwLCBhUmV2W2ldLkxvZy5sZW5ndGggLSAxKVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJp bnQgInZhciBzRmlsZSA9IGFTeW1bYVN5bS5sZW5ndGggLSAxXS5TeW07XHJcbiI7DQoJcHJpbnQg IlxyXG4iOwoKCXByaW50ICJmdW5jdGlvbiBTb3J0VmVyRnVuKHNhLCBzYilcclxuIjsNCglwcmlu dCAie1xyXG4iOw0KCXByaW50ICIJdmFyIGEgPSBzYS5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0K CXByaW50ICIJdmFyIGIgPSBzYi5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0KCXByaW50ICIJdmFy IGlhLCBpYiwgbGEsIGxiO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWxhID0gYS5s ZW5ndGg7XHJcbiI7DQoJcHJpbnQgIglsYiA9IGIubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBsYSAmJiBpIDwgbGI7IGkrKylcclxuIjsNCglwcmludCAiCXtcclxu IjsNCglwcmludCAiCQlpYSA9IHBhcnNlSW50KGFbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlp YiA9IHBhcnNlSW50KGJbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlpZiAoaWEgPCBpYikgcmV0 dXJuIC0xO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKGlhID4gaWIpIHJldHVybiAxO1xyXG4i Ow0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWlmIChsYSA8IGxi KSByZXR1cm4gLTE7XHJcbiI7DQoJcHJpbnQgIgllbHNlIGlmIChsYSA+IGxiKSByZXR1cm4gMTtc clxuIjsNCglwcmludCAiCWVsc2UgcmV0dXJuIDA7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJldlN0cnVjdChhUmV2KVxyXG4i Ow0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglhUmV2ID0gYVJldi5zb3J0KFNvcnRWZXJGdW4p O1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXBy aW50ICIJCVJldjogXCJcIixcclxuIjsNCglwcmludCAiCQlMb2c6IFwiXCIsXHJcbiI7DQoJcHJp bnQgIgkJaUxlbjogMCxcclxuIjsNCglwcmludCAiCQlhUmV2OiBbXVxyXG4iOw0KCXByaW50ICIJ fTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgaUxlbjtcclxuIjsNCglwcmlu dCAiCXZhciBzO1xyXG4iOw0KCXByaW50ICIJdmFyIGJFeGl0O1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBhUmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJe1xyXG4i Ow0KCXByaW50ICIJCWlMZW4gPSBhUmV2W2ldLlJldi5zcGxpdChcIi5cIikubGVuZ3RoO1xyXG4i Ow0KCXByaW50ICJcclxuIjsNCglwcmludCAiCQliRXhpdCA9IGZhbHNlO1xyXG4iOw0KCXByaW50 ICIJCWZvciAodmFyIGogPSBcInNSdFwiOyAhYkV4aXQ7KVxyXG4iOw0KCXByaW50ICIJCXtcclxu IjsNCglwcmludCAiCQkJcyA9IGogKyBcIi5hUmV2XCI7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0K CXByaW50ICIJCQl2YXIgdiA9IChcclxuIjsNCglwcmludCAiCQkJCQlcImlmICggXCIgKyBzICsg XCIubGVuZ3RoID09IDAgKVxcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwie1xcblwiXHJcbiI7 DQoJcHJpbnQgIgkJCQkrCQlcImJFeGl0ID0gdHJ1ZTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJ KwkJcyArIFwiWzBdID0gYVJldltpXTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJcyArIFwi WzBdLmlMZW4gPSBpTGVuO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbMF0uYVJl diA9IFtdO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwifVxcblwiXHJcbiI7DQoJcHJpbnQg IgkJCQkrCVwiZWxzZSBpZiAoIFwiICsgcyArIFwiWzBdLmlMZW4gPT0gaUxlbiApXFxuXCJcclxu IjsNCglwcmludCAiCQkJCSsJXCJ7XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCVwiYkV4aXQg PSB0cnVlO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbXCIgKyBzICsgXCIubGVu Z3RoXSA9IGFSZXZbaV07XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCXMgKyBcIltcIiArIHMg KyBcIi5sZW5ndGggLSAxXS5pTGVuID0gaUxlbjtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJ cyArIFwiW1wiICsgcyArIFwiLmxlbmd0aCAtIDFdLmFSZXYgPSBbXTtcXG5cIlxyXG4iOw0KCXBy aW50ICIJCQkJKwlcIn1cXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwlcImVsc2VcXG5cIlxyXG4i Ow0KCXByaW50ICIJCQkJKwlcIntcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJXCJqID0gXCdc IiArIHMgKyBcIltcJyArICggXCIgKyBzICsgXCIubGVuZ3RoIC0gMSApICsgXCddXCc7XFxuXCJc clxuIjsNCglwcmludCAiCQkJCSsJXCJ9XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSk7XHJcbiI7 DQoJcHJpbnQgIgkJCWV2YWwodik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJ fVxyXG4iOw0KCXByaW50ICIJcmV0dXJuIHNSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXBy aW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0VGFnKFJldiwgYVN5bSwgYk9uZSlcclxu IjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFwiXCI7XHJcbiI7DQoJcHJp bnQgIglpZiAoIWJPbmUpIHNSdCA9IFtdO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CWZvciAodmFyIGkgPSAwOyBpIDwgYVN5bS5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCXtc clxuIjsNCglwcmludCAiCQlpZiAoYVN5bVtpXS5SZXYgPT0gUmV2KVxyXG4iOw0KCXByaW50ICIJ CXtcclxuIjsNCglwcmludCAiCQkJcmV0dXJuIGFTeW1baV0uU3ltO1xyXG4iOw0KCXByaW50ICIJ CX1cclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJ cHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJl dkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSlcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ aWYgKHNSZXYuYVJldi5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJdmFyIHNSZXZQYXIgPSBzUmV2LmFSZXZbMF0uUmV2LnN1YnN0cigwLCBz UmV2LmFSZXZbMF0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJcHJpbnQgIglzUmV2 UGFyID0gc1JldlBhci5zdWJzdHIoMCwgc1JldlBhci5sYXN0SW5kZXhPZihcIi5cIikpO1xyXG4i Ow0KCXByaW50ICIJdmFyIHNSdCA9XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJ UmV2OiBzUmV2UGFyLFxyXG4iOw0KCXByaW50ICIJCUxvZzogXCJcIixcclxuIjsNCglwcmludCAi CQlhVGFnOiBbXSxcclxuIjsNCglwcmludCAiCQlhQnJjaDogW11cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgc0JyY2ggPSBudWxsO1xyXG4iOw0K CXByaW50ICIJdmFyIHNCcjtcclxuIjsNCglwcmludCAiCXZhciBzVGhpc0JyY2g7XHJcbiI7DQoJ cHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IHNSZXYuYVJldi5sZW5ndGg7IGkrKylcclxuIjsN CglwcmludCAiCXtcclxuIjsNCglwcmludCAiCQlzVGhpc0JyY2ggPSBzUmV2LmFSZXZbaV0uUmV2 LnN1YnN0cigwLCBzUmV2LmFSZXZbaV0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJ cHJpbnQgIgkJXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNCcmNoICE9IHNUaGlzQnJjaClcclxuIjsN CglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCXNCcmNoID0gc1RoaXNCcmNoO1xyXG4iOw0K CXByaW50ICIJCQlzUnQuYUJyY2hbc1J0LmFCcmNoLmxlbmd0aF0gPVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlCcmNoOiBzQnJjaCxcclxuIjsNCglwcmludCAiCQkJCVRh ZzogR2V0VGFnKHNCcmNoLCBhU3ltLCB0cnVlKSxcclxuIjsNCglwcmludCAiCQkJCWFSZXY6IFtd XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJCXNSdC5hQnJjaFtzUnQuYUJyY2gubGVuZ3RoIC0gMV0uYVJldltzUnQu YUJyY2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXYubGVuZ3RoXSA9XHJcbiI7DQoJcHJpbnQg IgkJe1xyXG4iOw0KCXByaW50ICIJCQlSZXY6IHNSZXYuYVJldltpXS5SZXYsXHJcbiI7DQoJcHJp bnQgIgkJCUxvZzogc1Jldi5hUmV2W2ldLkxvZyxcclxuIjsNCglwcmludCAiCQkJYVRhZzogR2V0 VGFnKHNSZXYuYVJldltpXS5SZXYsIGFTeW0sIGZhbHNlKSxcclxuIjsNCglwcmludCAiCQkJYUJy Y2g6IFtdXHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQl2YXIgc1N1YiA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1Jldi5hUmV2W2ldLCBhU3ltKTtcclxu IjsNCglwcmludCAiCQlpZiAoc1N1YiAhPSBudWxsKVxyXG4iOw0KCXByaW50ICIJCQlzUnQuYUJy Y2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXZbc1J0LmFCcmNoW3NSdC5hQnJjaC5sZW5ndGgg LSAxXS5hUmV2Lmxlbmd0aCAtIDFdLmFCcmNoID0gQ3JlYXRlUmV2QnJjaFN0cnVjdChzUmV2LmFS ZXZbaV0sIGFTeW0pLmFCcmNoO1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDbGVhblN5bVRCKGFTeW0p XHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBhUnQgPSBbXTtcclxuIjsNCglw cmludCAiCXZhciBpTG9vcCA9IGFTeW0ubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJdmFyIGlCcmNo LCBzQnJjaCwgc0hlYWRlcjtcclxuIjsNCglwcmludCAiCXZhciBpUFQ7XHJcbiI7DQoJcHJpbnQg Iglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7 DQoJcHJpbnQgIgkJaVBUID0gYVN5bVtpXS5SZXYubGFzdEluZGV4T2YoXCcuXCcpO1xyXG4iOw0K CXByaW50ICIJCWlmIChpUFQgPT0gLTEpIGNvbnRpbnVlO1xyXG4iOw0KCXByaW50ICIJCXNCcmNo ID0gYVN5bVtpXS5SZXYuc3Vic3RyKDAsIGlQVCk7XHJcbiI7DQoJcHJpbnQgIgkJaUJyY2ggPSBh U3ltW2ldLlJldi5zdWJzdHIoaVBUICsgMSk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICIJCWlQVCA9IHNCcmNoLmxhc3RJbmRleE9mKFwnLlwnKTtcclxuIjsNCglwcmludCAiCQlpZiAo c0JyY2guc3Vic3RyKGlQVCArIDEpID09IFwiMFwiKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsN CglwcmludCAiCQkJc0hlYWRlciA9IHNCcmNoLnN1YnN0cigwLCBpUFQgKyAxKTtcclxuIjsNCglw cmludCAiCQkJYVN5bVtpXS5SZXYgPSBzSGVhZGVyICsgaUJyY2g7XHJcbiI7DQoJcHJpbnQgIgkJ fVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWFTeW0g PSBhU3ltLnNvcnQoU29ydFZlckZ1bik7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1JldiA9IFwiXCI7 XHJcbiI7DQoJcHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJ cHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJaWYgKGFTeW1baV0uU3ltID09IFwiSEVBRFwiIHx8 IGFTeW1baV0uU3ltID09IFwiTUFJTlwiKVxyXG4iOw0KCXByaW50ICIJCQljb250aW51ZTtcclxu IjsNCglwcmludCAiCQllbHNlIGlmIChzUmV2ICE9IGFTeW1baV0uUmV2KVxyXG4iOw0KCXByaW50 ICIJCXtcclxuIjsNCglwcmludCAiCQkJc1JldiA9IGFTeW1baV0uUmV2O1xyXG4iOw0KCXByaW50 ICIJCQlhUnRbYVJ0Lmxlbmd0aF0gPSBcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50 ICIJCQkJUmV2OiBzUmV2LFxyXG4iOw0KCXByaW50ICIJCQkJU3ltOiBhU3ltW2ldLlN5bVxyXG4i Ow0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2Vc clxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmICh0eXBlb2YoYVJ0W2FSdC5s ZW5ndGggLSAxXS5TeW0pID09IFwic3RyaW5nXCIpXHJcbiI7DQoJcHJpbnQgIgkJCQlhUnRbYVJ0 Lmxlbmd0aCAtIDFdLlN5bSA9IFthUnRbYVJ0Lmxlbmd0aCAtIDFdLlN5bSwgYVN5bVtpXS5TeW1d O1xyXG4iOw0KCXByaW50ICIJCQllbHNlIGFSdFthUnQubGVuZ3RoIC0gMV0uU3ltW2FSdFthUnQu bGVuZ3RoIC0gMV0uU3ltLmxlbmd0aF0gPSBhU3ltW2ldLlN5bTtcclxuIjsNCglwcmludCAiCQl9 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJZm9yICh2 YXIgaSA9IDA7IGkgPCBhUnQubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJ cHJpbnQgIgkJaUJyY2ggPSBhUnRbaV0uUmV2LnNwbGl0KFwnLlwnKS5sZW5ndGg7XHJcbiI7DQoJ cHJpbnQgIgkJaWYgKE1hdGguZmxvb3IoaUJyY2ggLyAyKSAqIDIgIT0gaUJyY2gpXHJcbiI7DQoJ cHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJCQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pICE9IFwi c3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBhUnRbaV0uU3ltWzBdO1xyXG4iOw0KCXByaW50ICIJCX1c clxuIjsNCglwcmludCAiCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJ CQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pID09IFwic3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBbYVJ0 W2ldLlN5bV07XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXBy aW50ICIJcmV0dXJuIGFSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsN CglwcmludCAiZnVuY3Rpb24gQ3JlYXRlUmV2VHJlZShhUmV2LCBhU3ltKVxyXG4iOw0KCXByaW50 ICJ7XHJcbiI7DQoJcHJpbnQgIglhU3ltID0gQ2xlYW5TeW1UQihhU3ltKTtcclxuIjsNCglwcmlu dCAiCXZhciBzUmV2ID0gQ3JlYXRlUmV2U3RydWN0KGFSZXYpO1xyXG4iOw0KCXByaW50ICIJYUJy YW5jaE9uZSA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSkuYUJyY2hbMF07XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJcmV0dXJuIGFCcmFuY2hPbmU7XHJcbiI7DQoJcHJp bnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImFCcmFuY2hPbmUgPSBDcmVhdGVS ZXZUcmVlKGFSZXYsIGFTeW0pO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rp b24gR2V0QnJjaFJvd3NwYW4oQnJjaClcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ dmFyIGlTcGFuID0gMTtcclxuIjsNCglwcmludCAiCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5h UmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWlTcGFuICs9IEdldFJldlJvd3NwYW4o QnJjaC5hUmV2W2ldKTtcclxuIjsNCglwcmludCAiCXJldHVybiBpU3BhbjtcclxuIjsNCglwcmlu dCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0UmV2Um93c3Bh bihSZXYpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBpU3BhbiA9IFJldi5h VGFnLmxlbmd0aDtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNo Lmxlbmd0aCAhPSAwKVxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXByaW50ICIJCWZvciAodmFy IGkgPSAwIDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCQkJaVNw YW4gKz0gR2V0QnJjaFJvd3NwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQl9XHJc biI7DQoJcHJpbnQgIgllbHNlIGlmIChpU3BhbiA9PSAwKSBpU3BhbiA9IDE7XHJcbiI7DQoJcHJp bnQgIglyZXR1cm4gaVNwYW47XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJvd3NwYW4oQnJjaF9PUl9SZXYpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJjaCkgPT0gXCJzdHJp bmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaFJvd3NwYW4oQnJjaF9PUl9SZXYp O1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2LlJldikgPT0gXCJz dHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Um93c3BhbihCcmNoX09SX1Jl dik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXByaW50ICJ9XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBHZXRCcmNoQ29sc3BhbihCcmNoKVxy XG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0aCA8PSAw KSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2VcclxuIjsNCglwcmludCAiCXtcclxuIjsN CglwcmludCAiCQl2YXIgaU1heCA9IDA7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlTcGFuO1xyXG4i Ow0KCXByaW50ICIJCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5hUmV2Lmxlbmd0aDsgaSsrKVxy XG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaVNwYW4gPSBHZXRSZXZDb2xzcGFu KEJyY2guYVJldltpXSk7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpU3BhbiA+IGlNYXgpIGlNYXgg PSBpU3BhbjtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJcmV0dXJuIGlNYXg7 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJldkNvbHNwYW4oUmV2KVxyXG4iOw0KCXByaW50ICJ7XHJc biI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNoLmxlbmd0aCA8PSAwICYmIFJldi5hVGFnLmxlbmd0 aCA8PSAwKSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2UgaWYgKFJldi5hQnJjaC5sZW5n dGggPD0gMCkgcmV0dXJuIDI7XHJcbiI7DQoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7 XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlNYXggPSAwO1xyXG4iOw0KCXByaW50ICIJCXZhciBpU3Bh bjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBpID0gMDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7 IGkrKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlTcGFuID0gR2V0QnJj aENvbHNwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQkJaWYgKGlTcGFuID4gaU1h eCkgaU1heCA9IGlTcGFuO1xyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCQlyZXR1 cm4gMSArIGlNYXg7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIEdldENvbHNwYW4oQnJjaF9PUl9SZXYpXHJc biI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJj aCkgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaENvbHNwYW4o QnJjaF9PUl9SZXYpO1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2 LlJldikgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Q29sc3Bh bihCcmNoX09SX1Jldik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXBy aW50ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDcmVhdGVUQkFy cmF5KGlSb3dzLCBpQ29scylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaVJvd3Mg PSBpUm93cyAqIDIgLSAxO1xyXG4iOw0KCXByaW50ICIJaUNvbHMgPSBpQ29scyAqIDIgLSAxO1xy XG4iOw0KCXByaW50ICIJdmFyIGEgPSBuZXcgQXJyYXkoaVJvd3MpO1xyXG4iOw0KCXByaW50ICIJ Zm9yICh2YXIgaSA9IDA7IGkgPCBpUm93czsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWFbaV0gPSBu ZXcgQXJyYXkoaUNvbHMpO1xyXG4iOw0KCXByaW50ICIJcmV0dXJuIGE7XHJcbiI7DQoJcHJpbnQg In1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgInZhciBhVEIgPSBDcmVhdGVUQkFycmF5 KEdldFJvd3NwYW4oYUJyYW5jaE9uZSksIEdldENvbHNwYW4oYUJyYW5jaE9uZSkpO1xyXG4iOw0K CXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gU1YoaVJvdywgaUNvbCwgcylcclxuIjsN CglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaWYgKGlSb3cgPj0gYVRCLmxlbmd0aCkgYVRCW2lS b3ddID0gbmV3IEFycmF5O1xyXG4iOw0KCXByaW50ICIJYVRCW2lSb3ddW2lDb2xdID0gcztcclxu IjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gRmls bEJyY2hUQihCcmNoLCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQg Igl2YXIgc1J0ID0ge2lSb3c6IDEsIGlDb2w6IDF9O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCVNWKGlSb3crKywgaUNvbCwgXCJCXCIgKyBCcmNoLkJyY2ggKyBcIixcIiArIEJyY2gu VGFnKTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0 aCA+IDApXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaSA9IDA7 IGkgPCBCcmNoLmFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXBy aW50ICIJCQlTVihpUm93KyssIGlDb2wsIFwifFwiKTtcclxuIjsNCglwcmludCAiCQkJc1J0LmlS b3crKztcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJCVNWKGlSb3csIGlDb2wsIFwi VlwiICsgQnJjaC5hUmV2W2ldLlJldiArIFwiLFwiICsgQnJjaC5hUmV2W2ldLkxvZyk7XHJcbiI7 DQoJcHJpbnQgIgkJCXZhciBzRmlsbCA9IEZpbGxSZXZUQihCcmNoLmFSZXZbaV0sIGlSb3crKywg aUNvbCArIDEpO1xyXG4iOw0KCXByaW50ICIJCQlzUnQuaVJvdyArKztcclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChzRmlsbC5pUm93ID4gMSlcclxuIjsNCglwcmludCAiCQkJ e1xyXG4iOw0KCXByaW50ICIJCQkJZm9yICh2YXIgaiA9IDE7IGogPCBzRmlsbC5pUm93OyBqKysp XHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQkJaWYgKGkgKyAxIDwgQnJj aC5hUmV2Lmxlbmd0aClcclxuIjsNCglwcmludCAiCQkJCQkJU1YoaVJvdysrLCBpQ29sLCBcInxc Iik7XHJcbiI7DQoJcHJpbnQgIgkJCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQkJCX1c clxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50 ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBGaWxsUmV2VEIoUmV2 LCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1J0ID0g e2lSb3c6IDAsIGlDb2w6IDB9O1xyXG4iOw0KCXByaW50ICIJaWYgKFJldi5hQnJjaC5sZW5ndGgg PD0gMCAmJiBSZXYuYVRhZy5sZW5ndGggPD0gMClcclxuIjsNCglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQlyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXNSdC5pQ29sID0gMTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQg Igl2YXIgaU1heENvbCA9IDA7XHJcbiI7DQoJcHJpbnQgIgl2YXIgaVJvd0xhc3QgPSBpUm93O1xy XG4iOw0KCXByaW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYUJyY2gubGVuZ3RoOyBpKysp XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaiA9IGlSb3dMYXN0 ICsgMTsgaiA8IGlSb3c7IGorKylcclxuIjsNCglwcmludCAiCQkJU1YoaiwgaUNvbCwgXCJ8XCIp O1xyXG4iOw0KCXByaW50ICIJCWlSb3dMYXN0ID0gaVJvdztcclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgIgkJaWYgKGkgPT0gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQg IgkJCWlmIChSZXYuYUJyY2gubGVuZ3RoID4gMSB8fCBSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4i Ow0KCXByaW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJUXCIpO1xyXG4iOw0KCXByaW50ICIJCQll bHNlIFNWKGlSb3csIGlDb2wsIFwiLVwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIgkJZWxzZSBpZiAoaSArIDEgPT0gUmV2LmFCcmNoLmxlbmd0aClcclxuIjsNCglwcmludCAi CQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4iOw0KCXBy aW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJFXCIpO1xyXG4iOw0KCXByaW50ICIJCQllbHNlIFNW KGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJ ZWxzZSBTVihpUm93LCBpQ29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiCQl2YXIgc0ZpbGwgPSBGaWxsQnJjaFRCKFJldi5hQnJjaFtpXSwg aVJvdywgaUNvbCArIDEpXHJcbiI7DQoJcHJpbnQgIgkJaVJvdyArPSBzRmlsbC5pUm93O1xyXG4i Ow0KCXByaW50ICIJCXNSdC5pUm93ICs9IHNGaWxsLmlSb3c7XHJcbiI7DQoJcHJpbnQgIlxyXG4i Ow0KCXByaW50ICIJCWlmIChpICsgMSA8IFJldi5hQnJjaC5sZW5ndGggfHwgUmV2LmFUYWcubGVu Z3RoID4gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlSb3crKztcclxu IjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwgc0ZpbGwuaUNvbCkgaU1heENvbCA9 IHNGaWxsLmlDb2w7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXBy aW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYVRhZy5sZW5ndGg7IGkrKylcclxuIjsNCglw cmludCAiCXtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gaVJvd0xhc3QgKyAxOyBqIDwg aVJvdzsgaisrKVxyXG4iOw0KCXByaW50ICIJCQlTVihqLCBpQ29sLCBcInxcIik7XHJcbiI7DQoJ cHJpbnQgIgkJaVJvd0xhc3QgPSBpUm93O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQlpZiAoaSA9PSAwKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaWYgKFJl di5hQnJjaC5sZW5ndGggPT0gMClcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJ CQkJaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlSb3csIGlDb2wsIFwiVFwiKTtcclxuIjsN CglwcmludCAiCQkJCWVsc2UgU1YoaVJvdywgaUNvbCwgXCItXCIpO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlS b3csIGlDb2wsIFwiRVwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBpQ29sLCBc IkxcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2VcclxuIjsNCglw cmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpICsgMSA9PSBSZXYuYVRhZy5sZW5ndGgp IFNWKGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBp Q29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCQlTVihpUm93KyssIGlDb2wgKyAxLCBcIkdcIiArIFJldi5hVGFnW2ldICsgXCIsXCIg KyBSZXYuTG9nKTtcclxuIjsNCglwcmludCAiCQlzUnQuaVJvdysrO1xyXG4iOw0KCXByaW50ICIJ CWlmIChpICsgMSA8IFJldi5hVGFnLmxlbmd0aClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJ cHJpbnQgIgkJCWlSb3crKztcclxuIjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglw cmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwg MSkgaU1heENvbCA9IDE7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIglzUnQuaUNv bCArPSBpTWF4Q29sO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7 XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIkZpbGxCcmNo VEIoYUJyYW5jaE9uZSwgMCwgMCk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5j dGlvbiBTaG93TG9nKHNMb2cpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXdpbmRv dy5zdGF0dXMgPSB1bmVzY2FwZShzTG9nKTtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gQ3JlYXRlQlQoc1Nob3cpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCXZhciBzVHlwZSA9IHNTaG93LnN1YnN0cigwLCAxKTtcclxuIjsN CglwcmludCAiCXNTaG93ID0gc1Nob3cuc3Vic3RyKDEpO1xyXG4iOw0KCXByaW50ICIJXHJcbiI7 DQoJcHJpbnQgIglpZiAoc1R5cGUgPT0gXCJCXCIpXHJcbiI7CglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQl2YXIgc1Jldiwgc0JyY2g7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5z cGxpdChcIixcIiwgMik7XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0K CXByaW50ICIJCWlmIChzU2hvdy5sZW5ndGggPj0gMikgc0JyY2ggPSBzU2hvd1sxXTtcclxuIjsN CglwcmludCAiCQllbHNlIHNCcmNoID0gc1JldjtcclxuIjsKCXByaW50ICIJCXJldHVybiBcIjx0 YWJsZSB3aWR0aD0xMDAlIGhlaWdodD0qIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSM5OWNjMDAgY2Vs bHNwYWNpbmc9MD48dHI+PHRkIGFsaWduPWNlbnRlciBiZ2NvbG9yPSNjY2ZmNjY+PG5vYnI+PEI+ PGEgaHJlZj1cJ1wiICsgc0ZpbGUgKyAoc1JldiA9PSBcJzFcJyA/IFwiP1wiOihcIj9vbmx5X3dp dGhfdGFnPVwiICsgc0JyY2gpKSArIHNCYXJlcXVlcnkgKyBcIlwnPlwiICsgc0JyY2ggKyBcIjwv YT48L0I+PC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJfVxyXG4i OwoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIHNS ZXYsIHNMb2c7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5zcGxpdChcIixcIiwgMik7 XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0KCXByaW50ICIJCWlmIChz U2hvdy5sZW5ndGggPj0gMikgc0xvZyA9IHNTaG93WzFdO1xyXG4iOw0KCXByaW50ICIJCWVsc2Ug c0xvZyA9IFwiXCI7XHJcbiI7DQoJcHJpbnQgIgkJc0xvZyA9IGVzY2FwZShzTG9nKTtcclxuIjsN CglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNUeXBlID09IFwiR1wiKVxyXG4iOw0KCXBy aW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBib3JkZXI9MSBib3Jk ZXJjb2xvcj0jNjZjY2ZmIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1jZW50ZXIgYmdjb2xv cj0jY2NmZmZmPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhcXFwiXCIgKyBzTG9n ICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/b25seV93aXRoX3RhZz1cIiArIHNS ZXYgKyBzQmFyZXF1ZXJ5ICsgXCJcJz5cIiArIHNSZXYgKyBcIjwvYT48L0I+PC9ub2JyPjwvdGQ+ PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKHNUeXBlID09IFwiVlwi KVxyXG4iOw0KCXByaW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBi b3JkZXI9MSBib3JkZXJjb2xvcj0jZmZjYzY2IGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1j ZW50ZXIgYmdjb2xvcj0jZmZmZmNjPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhc XFwiXCIgKyBzTG9nICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/cmV2PVwiICsg c1JldiArIFwiJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cFwiICsgc0JhcmVxdWVy eSArIFwiXCc+XCIgKyBzUmV2ICsgXCI8L2E+PC9CPjwvbm9icj48L3RkPjwvdHI+PC90YWJsZT5c IjtcclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAidmFyIE5UQ29sID0gNztcclxuIjsNCglwcmludCAidmFyIE5UUm93ID0gMztc clxuIjsNCglwcmludCAidmFyIHMgPSBcIlwiO1xyXG4iOw0KCXByaW50ICJmb3IgKHZhciBpID0g MDsgaSA8IGFUQi5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ Zm9yIChuID0gMDsgbiA8IE5UUm93OyBuKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJp bnQgIgkJcyArPSBcIjx0cj5cIjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gMDsgaiA8 IGFUQltpXS5sZW5ndGg7IGorKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJ CWlmICh0eXBlb2YoYVRCW2ldW2pdKSA9PSBcInVuZGVmaW5lZFwiKVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKQlzICs9IFwiPHRkIGNvbHNwYW49XCIg KyBOVENvbCArIFwiIHJvd3NwYW49XCIgKyBOVFJvdyArIFwiPjxmb250IHNpemU9MT4mbmJzcDs8 L2ZvbnQ+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCQllbHNl IGlmIChhVEJbaV1bal0gPT0gXCItXCIpXHJcbiI7DQoJcHJpbnQgIgkJCXtcclxuIjsNCglwcmlu dCAiCQkJCWlmIChuICE9IE1hdGguZmxvb3IoTlRSb3cgLyAyKSkgcyArPSBcIjx0ZCBoZWlnaHQ9 NiBjb2xzcGFuPVwiICsgTlRDb2wgKyBcIj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJZWxz ZSBzICs9IFwiPHRkIGhlaWdodD0zIGNvbHNwYW49XCIgKyBOVENvbCArIFwiIGJnY29sb3I9I2Zm Y2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJ CX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwifFwiKVxyXG4iOw0K CXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKVxyXG4iOw0KCXByaW50 ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAy OyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93 ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCXMgKz0gXCI8dGQgd2lkdGg9OCByb3dzcGFuPVwiICsgTlRSb3cgKyBcIiBiZ2NvbG9yPSNm ZmNjNjY+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJ CQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNw OzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKGFUQltpXVtqXSA9PSBcJ0VcJylcclxuIjsNCglw cmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gIT0gTWF0aC5mbG9vcihOVFJvdyAv IDIpKVxyXG4iOw0KCXByaW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsg PSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQg d2lkdGg9MyBoZWlnaHQ9Nj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJCXMgKz0gXCI8dGQg d2lkdGg9OCBoZWlnaHQ9MSBiZ2NvbG9yPSNmZmNjNjY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0KCXByaW50ICIJ CQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCX1cclxuIjsNCglwcmludCAiCQkJCWVsc2VcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsN CglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0K CXByaW50ICIJCQkJCQlzICs9IFwiPHRkPjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9y ICgtLWs7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhl aWdodD0zIGJnY29sb3I9I2ZmY2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7 XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAi CQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwnTFwnKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7 DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+ PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCQlzICs9IFwiPHRkIHdpZHRoPTggaGVpZ2h0PTEg Ymdjb2xvcj0jZmZjYzY2PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICh2YXIgayA9 IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmludCAiCQkJCQkJcyArPSBcIjx0ZCB3 aWR0aD0zIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJp bnQgIgkJCQllbHNlIGlmIChuID09IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkID48Zm9udCBzaXplPTE+Jm5i c3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICgtLWs7IGsgPCBOVENv bDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGJnY29sb3I9I2ZmY2M2Nj48 Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJc biI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQg IgkJCQkJZm9yICh2YXIgayA9IDA7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJ CQlzICs9IFwiPHRkIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7 DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwi VFwiKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGgu Zmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJ CQlmb3IgKHZhciBrID0gMDsgayA8IE5UQ29sOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMg Kz0gXCI8dGQgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCX1cclxuIjsNCglw cmludCAiCQkJCWVsc2UgaWYgKG4gPT0gTWF0aC5mbG9vcihOVFJvdyAvIDIpKVxyXG4iOw0KCXBy aW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAoayA9IDA7IGsgPCBOVENvbDsgaysr KVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhlaWd0aD0zIGJnY29sb3I9I2ZmY2M2 Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJp bnQgIgkJCQkJZm9yICh2YXIgayA9IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmlu dCAiCQkJCQkJcyArPSBcIjx0ZCBoZWlnaHQ9NiB3aWR0aD0zPjwvdGQ+XCI7XHJcbiI7DQoJcHJp bnQgIgkJCQkJcyArPSBcIjx0ZCB3aWR0aD04IGJnY29sb3I9I2ZmY2M2Nj48L3RkPlwiO1xyXG4i Ow0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7 DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgd2lkdGg9Mz48L3RkPlwiO1xyXG4iOw0KCXByaW50 ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2VcclxuIjsN CglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gPT0gMCkJcyArPSBcIjx0ZCBh bGlnbj1jZW50ZXIgY29sc3Bhbj1cIiArIE5UQ29sICsgXCIgcm93c3Bhbj1cIiArIE5UUm93ICsg XCI+XCIgKyBDcmVhdGVCVChhVEJbaV1bal0pICsgXCI8L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCXMgKz0gXCI8L3RyPlwiO1xy XG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJpbnQgImRvY3VtZW50 LndyaXRlKFwiPHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MD48Zm9y bT5cIiArIHMgKyBcIjwvZm9ybT48L3RhYmxlPlwiKTtcbiI7DQoKCXByaW50ICI8L3NjcmlwdD5c biI7CglwcmludCAiPC94bXA+IiBpZiAkc2hvd2NvZGU7CgoKCWh0bWxfZm9vdGVyKCk7Cn0KCnN1 YiBkb0xvZygkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRkaWZmcmV2LCAkdXB3aGVy ZSwgJGZpbGVuYW1lLCAkYmFja3VybCk7CgoJcmVhZExvZygkZnVsbG5hbWUpOwoKCWh0bWxfaGVh ZGVyKCJDVlMgbG9nIGZvciAkd2hlcmUiKTsKCSgkdXB3aGVyZSAgPSAkd2hlcmUpID1+IHN8KEF0 dGljLyk/W14vXSskfHw7CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzfF4uKi98fDsKCSRiYWNr dXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUoJHVwd2hlcmUpIC4gJHF1ZXJ5OwoJ cHJpbnQgIjxwPlxuICI7CglwcmludCAmbGluaygkYmFja2ljb24sICIkYmFja3VybCMkZmlsZW5h bWUiKSwgIiA8Yj5VcCB0byAiLAoJICAgICZjbGlja2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwv Yj5cbjwvcD5cbiI7CglwcmludCAiPHA+XG4gIjsKCXByaW50ICZsaW5rKCdSZXF1ZXN0IGRpZmYg YmV0d2VlbiBhcmJpdHJhcnkgcmV2aXNpb25zJywgJyNkaWZmJyk7CglwcmludCAiXG48L3A+XG48 aHIgbm9zaGFkZT5cbiI7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkY3VyYnJhbmNoKSB7CgkJcHJp bnQgIkRlZmF1bHQgYnJhbmNoOiAiLCAoJHJldnN5bXskY3VyYnJhbmNofSB8fCAkY3VyYnJhbmNo KTsKCX0gZWxzZSB7CgkJcHJpbnQgIk5vIGRlZmF1bHQgYnJhbmNoIjsKCX0KCXByaW50ICI8YnI+ XG4iOwoKCWlmICgkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiQ3VycmVudCB0YWc6 ICRpbnB1dHtvbmx5X3dpdGhfdGFnfTxicj5cbiI7Cgl9CglwcmludCAiPC9wPlxuIjsKCgl1bmRl ZiAlbmFtZXByaW50ZWQ7CgoJZm9yIChteSAkaSA9IDAgOyAkaSA8PSAkI3JldmRpc3BsYXlvcmRl ciA7ICRpKyspIHsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7CgkJcHJpbnRM b2coJHJldmRpc3BsYXlvcmRlclskaV0pOwoJfQoKCXByaW50ICI8aHIgbm9zaGFkZT5cbjxwPlxu IjsKCXByaW50ICI8YSBuYW1lPVwiZGlmZlwiPlxuIjsKCXByaW50ICJUaGlzIGZvcm0gYWxsb3dz IHlvdSB0byByZXF1ZXN0IGRpZmYncyBiZXR3ZWVuIGFueSB0d29cbiI7CglwcmludCAicmV2aXNp b25zIG9mIGEgZmlsZS4gIFlvdSBtYXkgc2VsZWN0IGEgc3ltYm9saWMgcmV2aXNpb25cbiI7Cglw cmludCAibmFtZSB1c2luZyB0aGUgc2VsZWN0aW9uIGJveCBvciB5b3UgbWF5IHR5cGUgaW4gYSBu dW1lcmljXG4iOwoJcHJpbnQgIm5hbWUgdXNpbmcgdGhlIHR5cGUtaW4gdGV4dCBib3guXG4iOwoJ cHJpbnQgIjwvYT5cbjwvcD5cbiI7CglwcmludAoJICAgICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBh Y3Rpb249XCIke3NjcmlwdHdoZXJlfS5kaWZmXCIgbmFtZT1cImRpZmZfc2VsZWN0XCI+XG4iOwoK CWZvcmVhY2ggKEBzdGlja3l2YXJzKSB7CgkJcHJpbnRmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBu YW1lPSIlcyIgdmFsdWU9IiVzIj4nLCAkXywKCQkgICAgJGlucHV0eyRffSkKCQkgICAgaWYgKGRl ZmluZWQoJGlucHV0eyRffSkKCQkgICAgJiYgKCghZGVmaW5lZCgkREVGQVVMVFZBTFVFeyRffSkK CQkgICAgfHwgJGlucHV0eyRffSBuZSAkREVGQVVMVFZBTFVFeyRffSkgJiYgJGlucHV0eyRffSBu ZSAiIikpOwoJfQoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwiPlxuPHRyPlxu IjsKCXByaW50ICI8dGQgYWxpZ249XCJyaWdodFwiPiI7CglwcmludCAiPGxhYmVsIGZvcj1cInIx XCIgYWNjZXNza2V5PVwiMVwiPkRpZmZzIGJldHdlZW4gPC9sYWJlbD5cbiI7CglwcmludCAiPHNl bGVjdCBpZD1cInIxXCIgbmFtZT1cInIxXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJ0 ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAkc2VsOwoJ cHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclskI3JldmRp c3BsYXlvcmRlcl07CgkkZGlmZnJldiA9ICRpbnB1dHsicjEifSBpZiAoZGVmaW5lZCgkaW5wdXR7 InIxIn0pKTsKCXByaW50CgkgICAgIjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIkaW5wdXRU ZXh0U2l6ZVwiIG5hbWU9XCJ0cjFcIiB2YWx1ZT1cIiRkaWZmcmV2XCIgb25jaGFuZ2U9XCJ0aGlz LmZvcm0ucjEuc2VsZWN0ZWRJbmRleD0wXCI+PC90ZD5cbiI7CglwcmludCAiPHRkPjxicj48L3Rk PlxuPC90cj5cbiI7CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQg IjxsYWJlbCBmb3I9XCJyMlwiIGFjY2Vzc2tleT1cIjJcIj5hbmQgPC9sYWJlbD5cbiI7Cglwcmlu dCAiPHNlbGVjdCBpZD1cInIyXCIgbmFtZT1cInIyXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFs dWU9XCJ0ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAk c2VsOwoJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclsw XTsKCSRkaWZmcmV2ID0gJGlucHV0eyJyMiJ9IGlmIChkZWZpbmVkKCRpbnB1dHsicjIifSkpOwoJ cHJpbnQKCSAgICAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIiRpbnB1dFRleHRTaXplXCIg bmFtZT1cInRyMlwiIHZhbHVlPVwiJGRpZmZyZXZcIiBvbmNoYW5nZT1cInRoaXMuZm9ybS5yMi5z ZWxlY3RlZEluZGV4PTBcIj48L3RkPlxuIjsKCXByaW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJt aXRcIiB2YWx1ZT1cIiAgR2V0IERpZmZzICBcIiBhY2Nlc3NrZXk9XCJHXCI+PC90ZD5cbiI7Cglw cmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwvZm9ybT5cbiI7CglwcmludCAiPGhy IG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiRzY3Jp cHR3aGVyZVwiPlxuIjsKCXByaW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIj5cbiI7 CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQgIjxsYWJlbCBmb3I9 XCJmXCIgYWNjZXNza2V5PVwiRFwiPlByZWZlcnJlZCBEaWZmIHR5cGU6IjsKCXByaW50ICI8L2xh YmVsPjwvdGQ+XG4iOwoJcHJpbnQgIjx0ZD4iOwoJcHJpbnREaWZmU2VsZWN0KCR1c2VfamF2YV9z Y3JpcHQpOwoJcHJpbnQgIjwvdGQ+XG48dGQ+PC90ZD5cbjwvdHI+XG4iOwoKCWlmIChAYnJhbmNo bmFtZXMpIHsKCQlwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJCXByaW50ICI8 bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIkJcIj4iOwoJCXByaW50ICJW aWV3IG9ubHkgQnJhbmNoOjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQgIjx0ZD4iOwoJCXByaW50 ICI8YSBuYW1lPVwiYnJhbmNoXCI+PC9hPlxuIjsKCQlwcmludCAiPHNlbGVjdCBpZD1cIm9ubHlf d2l0aF90YWdcIiBuYW1lPVwib25seV93aXRoX3RhZ1wiIjsKCQlwcmludCAiIG9uY2hhbmdlPVwi dGhpcy5mb3JtLnN1Ym1pdCgpXCIiIGlmICR1c2VfamF2YV9zY3JpcHQ7CgkJcHJpbnQgIj5cbiI7 CgkJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJcIiI7CgkJcHJpbnQgIiBzZWxlY3RlZCIKCQkgICAg aWYgKGRlZmluZWQoJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0pCgkJICAgICYmICRpbnB1dHsib25s eV93aXRoX3RhZyJ9IGVxICIiKTsKCQlwcmludCAiPlNob3cgYWxsIGJyYW5jaGVzPC9vcHRpb24+ XG4iOwoKCQlmb3JlYWNoIChyZXZlcnNlIHNvcnQgQGJyYW5jaG5hbWVzKSB7CgkJCXByaW50ICI8 b3B0aW9uIjsKCQkJcHJpbnQgIiBzZWxlY3RlZCIKCQkJICAgIGlmIChkZWZpbmVkKCRpbnB1dHsi b25seV93aXRoX3RhZyJ9KQoJCQkgICAgJiYgJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0gZXEgJF8p OwoJCQlwcmludCAiPiR7X308L29wdGlvbj5cbiI7CgkJfQoJCXByaW50ICI8L3NlbGVjdD48L3Rk PlxuPHRkPjwvdGQ+XG48L3RyPlxuIjsKCX0KCglmb3JlYWNoIChAc3RpY2t5dmFycykgewoJCW5l eHQgaWYgKCRfIGVxICJmIik7CgkJbmV4dCBpZiAoJF8gZXEgIm9ubHlfd2l0aF90YWciKTsKCQlu ZXh0IGlmICgkXyBlcSAibG9nc29ydCIpOwoJCXByaW50ICI8aW5wdXQgdHlwZT1cImhpZGRlblwi IG5hbWU9XCIkX1wiIHZhbHVlPVwiJGlucHV0eyRffVwiPlxuIgoJCSAgICBpZiAoZGVmaW5lZCgk aW5wdXR7JF99KQoJCSAgICAmJiAoIWRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJICAgIHx8 ICRpbnB1dHskX30gbmUgJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gbmUgIiIpOwoJ fQoJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cInJpZ2h0XCI+IjsKCXByaW50ICI8YSBuYW1lPVwi bG9nc29ydFwiPjwvYT5cbiI7CglwcmludCAiPGxhYmVsIGZvcj1cImxvZ3NvcnRcIiBhY2Nlc3Nr ZXk9XCJMXCI+U29ydCBsb2cgYnk6IjsKCXByaW50ICI8L2xhYmVsPjwvdGQ+XG48dGQ+IjsKCXBy aW50TG9nU29ydFNlbGVjdCgkdXNlX2phdmFfc2NyaXB0KTsKCXByaW50ICI8L3RkPlxuIjsKCXBy aW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIiAgU2V0ICBcIiBhY2Nlc3Nr ZXk9XCJTXCI+PC90ZD5cbiI7CglwcmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwv Zm9ybT5cbiI7CglodG1sX2Zvb3RlcigpOwp9CgpzdWIgZmx1c2hfZGlmZl9yb3dzKCQkJCQpIHsK CW15ICRqOwoJbXkgKCRsZWZ0Q29sUmVmLCAkcmlnaHRDb2xSZWYsICRsZWZ0Um93LCAkcmlnaHRS b3cpID0gQF87CgoJaWYgKCFkZWZpbmVkKCRzdGF0ZSkpIHsKCQlyZXR1cm47Cgl9CgoJaWYgKCRz dGF0ZSBlcSAiUHJlQ2hhbmdlUmVtb3ZlIikgeyAgICAjIHdlIGp1c3QgZ290IHJlbW92ZS1saW5l cyBiZWZvcmUKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgOyAkaisrKSB7CgkJCXByaW50 CgkJCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1yZW1vdmVkXCI+Jm5ic3A7QCRsZWZ0Q29s UmVmWyRqXTwvdGQ+XG4iOwoJCQlwcmludAoJCQkgICAgIjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlc Ij4mbmJzcDs8L3RkPlxuPC90cj5cbiI7CgkJfQoJfSBlbHNpZiAoJHN0YXRlIGVxICJQcmVDaGFu Z2UiKSB7ICAgICMgc3RhdGUgZXEgIlByZUNoYW5nZSIKCQkgICAgIyB3ZSBnb3QgcmVtb3ZlcyB3 aXRoIHN1YnNlcXVlbnQgYWRkcwoKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgfHwgJGog PCAkcmlnaHRSb3cgOyAkaisrKQoJCXsgICAgIyBkdW1wIG91dCBib3RoIGNvbHMKCQkJcHJpbnQg Ijx0cj5cbiI7CgkJCWlmICgkaiA8ICRsZWZ0Um93KSB7CgkJCQlwcmludAoJCQkJICAgICI8dGQg Y2xhc3M9XCJkaWZmLWNoYW5nZWRcIj4mbmJzcDtAJGxlZnRDb2xSZWZbJGpdPC90ZD4iOwoJCQl9 IGVsc2UgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkLW1pc3Np bmdcIj4mbmJzcDs8L3RkPiI7CgkJCX0KCQkJcHJpbnQgIlxuIjsKCgkJCWlmICgkaiA8ICRyaWdo dFJvdykgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkXCI+Jm5i c3A7QCRyaWdodENvbFJlZlskal08L3RkPiI7CgkJCX0gZWxzZSB7CgkJCQlwcmludAoJCQkJICAg ICI8dGQgY2xhc3M9XCJkaWZmLWNoYW5nZWQtbWlzc2luZ1wiPiZuYnNwOzwvdGQ+IjsKCQkJfQoJ CQlwcmludCAiXG48L3RyPlxuIjsKCQl9Cgl9Cn0KCiMjCiMgRnVuY3Rpb24gdG8gZ2VuZXJhdGUg SHVtYW4gcmVhZGFibGUgZGlmZi1maWxlcwojIGh1bWFuX3JlYWRhYmxlX2RpZmYoU3RyaW5nIHJl dmlzaW9uX3RvX3JldHVybl90byk7CiMjCnN1YiBodW1hbl9yZWFkYWJsZV9kaWZmKCQpIHsKCW15 ICgkZGlmZnR4dCwgJHdoZXJlX25kLCAkZmlsZW5hbWUsICRwYXRobmFtZSwgJHNjcmlwdHdoZXJl X25kKTsKCW15ICgkZmgsICRyZXYpID0gQF87CglteSAoJGRhdGUxLCAkZGF0ZTIsICRyMWQsICRy MmQsICRyMXIsICRyMnIsICRyZXYxLCAkcmV2MiwgJHN5bTEsICRzeW0yKTsKCW15IChAcmlnaHRD b2wsIEBsZWZ0Q29sKTsKCgkoJHdoZXJlX25kICAgICAgID0gJHdoZXJlKSAgICAgICA9fiBzLy5k aWZmJC8vOwoJKCRmaWxlbmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy9eLipcLy8vOwoJ KCRwYXRobmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy8oQXR0aWNcLyk/W15cL10qJC8v OwoJKCRzY3JpcHR3aGVyZV9uZCA9ICRzY3JpcHR3aGVyZSkgPX4gcy8uZGlmZiQvLzsKCgluYXZp Z2F0ZUhlYWRlcigkc2NyaXB0d2hlcmVfbmQsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2LCAi ZGlmZiIpOwoKCSMgUmVhZCBoZWFkZXIgdG8gcGljayB1cCByZWFkIHJldmlzaW9uIGFuZCBkYXRl LCBpZiBwb3NzaWJsZQoJd2hpbGUgKDwkZmg+KSB7CgkJKCRyMWQsICRyMXIpID0gL1x0KC4qKVx0 KC4qKSQvIGlmICgvXi0tLSAvKTsKCQkoJHIyZCwgJHIycikgPSAvXHQoLiopXHQoLiopJC8gaWYg KC9eXCtcK1wrIC8pOwoJCWxhc3QgaWYgKC9eXCtcK1wrIC8pOwoJfQoKCWlmIChkZWZpbmVkKCRy MXIpICYmICRyMXIgPX4gL14oXGQrXC4pK1xkKyQvKSB7CgkJJHJldjEgID0gJHIxcjsKCQkkZGF0 ZTEgPSAkcjFkOwoJfQoJaWYgKGRlZmluZWQoJHIycikgJiYgJHIyciA9fiAvXihcZCtcLikrXGQr JC8pIHsKCQkkcmV2MiAgPSAkcjJyOwoJCSRkYXRlMiA9ICRyMmQ7Cgl9CgoJcHJpbnQKCSAgICAi PGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+RGlmZiBmb3IgLyR3aGVyZV9uZCBiZXR3 ZWVuIHZlcnNpb24gJHJldjEgYW5kICRyZXYyPC9oMz5cbiIsCgkgICAgIyBVc2luZyBzdHlsZT1c ImJvcmRlcjogbm9uZVwiIGhlcmUgYnJlYWtzIE5TIDQueCBiYWRseS4uLgoJICAgICI8dGFibGUg Ym9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIHdpZHRoPVwi MTAwJVwiPlxuIiwKCSAgICAiPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZlwi PlxuIiwgIjx0aCB3aWR0aD1cIjUwJVwiIHZhbGlnbj1cInRvcFwiPiIsCgkgICAgInZlcnNpb24g JHJldjEiOwoJcHJpbnQgIiwgJGRhdGUxIiAgICAgICAgIGlmIChkZWZpbmVkKCRkYXRlMSkpOwoJ cHJpbnQgIjxicj5UYWc6ICRzeW0xXG4iIGlmICgkc3ltMSk7CglwcmludCAiPC90aD5cbiIsICI8 dGggd2lkdGg9XCI1MCVcIiB2YWxpZ249XCJ0b3BcIj4iLCAidmVyc2lvbiAkcmV2MiI7Cglwcmlu dCAiLCAkZGF0ZTIiICAgICAgICAgaWYgKGRlZmluZWQoJGRhdGUyKSk7CglwcmludCAiPGJyPlRh ZzogJHN5bTJcbiIgaWYgKCRzeW0xKTsKCXByaW50ICI8L3RoPlxuIjsKCglteSAkbGVmdFJvdyAg PSAwOwoJbXkgJHJpZ2h0Um93ID0gMDsKCW15ICgkb2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1l LCAkZGlmZmNvZGUsICRyZXN0KTsKCgkjIFByb2Nlc3MgZGlmZiB0ZXh0CgoJIyBwcmVmZXRjaCBz ZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkZmgpOwoKCW15ICVkID0gc2Nhbl9kaXJlY3Rp dmVzKEBidWYpOwoKCXdoaWxlIChAYnVmIHx8ICFlb2YoJGZoKSkgewoJCSRkaWZmdHh0ID0gQGJ1 ZiA/IHNoaWZ0IEBidWYgOiA8JGZoPjsKCgkJaWYgKCRkaWZmdHh0ID1+IC9eQEAvKSB7CgkJCSgk b2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1lKSA9CgkJCSAgICAkZGlmZnR4dCA9fiAvQEAgXC0o WzAtOV0rKS4qXCsoWzAtOV0rKS4qQEAoLiopLzsKCQkJJGZ1bm5hbWUgPSBodG1scXVvdGUoJGZ1 bm5hbWUpOwoJCQkkZnVubmFtZSA9fiBzL1xzLyZuYnNwOy9nbzsKCQkJcHJpbnQKCQkJICAgICI8 dHIgY2xhc3M9XCJkaWZmLWhlYWRpbmdcIj5cbjx0ZCB3aWR0aD1cIjUwJVwiPiI7CgkJCXByaW50 CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1c IjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG9sZGxpbmU8L2I+IjsKCQkJcHJpbnQKCQkJ ICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPiRmdW5uYW1lPC9z cGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT4iOwoJCQlwcmludCAiPC90ZD5cbjx0ZCB3aWR0aD1c IjUwJVwiPiI7CgkJCXByaW50CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1c IjFcIiBjZWxscGFkZGluZz1cIjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG5ld2xpbmU8 L2I+IjsKCQkJcHJpbnQKCQkJICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21h bGxlclwiPiRmdW5uYW1lPC9zcGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT5cbiI7CgkJCXByaW50 ICI8L3RkPlxuIjsKCQkJJHN0YXRlICAgID0gImR1bXAiOwoJCQkkbGVmdFJvdyAgPSAwOwoJCQkk cmlnaHRSb3cgPSAwOwoJCX0gZWxzZSB7CgkJCSgkZGlmZmNvZGUsICRyZXN0KSA9ICRkaWZmdHh0 ID1+IC9eKFstKyBdKSguKikvOwoJCQkkXyA9IHNwYWNlZEh0bWxUZXh0KCRyZXN0LCAkZHsndGFi c3RvcCd9KTsKCgkJCSMjIyMjIyMjIwoJCQkjIGxpdHRsZSBzdGF0ZSBtYWNoaW5lIHRvIHBhcnNl IHVuaWZpZWQtZGlmZiBvdXRwdXQgKEhlbiwgemVsbGVyQHRoaW5rLmRlKQoJCQkjIGluIG9yZGVy IHRvIGdldCBzb21lIG5pY2UgJ2VkaWZmJy1tb2RlIG91dHB1dAoJCQkjIHN0YXRlczoKCQkJIyAg ImR1bXAiICAgICAgICAgICAgIC0ganVzdCBkdW1wIHRoZSB2YWx1ZQoJCQkjICAiUHJlQ2hhbmdl UmVtb3ZlIiAgLSB3ZSBiZWdhbiB3aXRoICctJyAuLiBzbyB0aGlzIGNvdWxkIGJlIHRoZSBzdGFy dCBvZiBhICdjaGFuZ2UnIGFyZWEgb3IganVzdCByZW1vdmUKCQkJIyAgIlByZUNoYW5nZSIgICAg ICAgIC0gb2tleSwgd2UgZ290IHNldmVyYWwgJy0nIGxpbmVzIGFuZCBtb3ZlZCB0byAnKycgbGlu ZXMgLT4gdGhpcyBpcyBhIGNoYW5nZSBibG9jawoJCQkjIyMjIyMjIyMjCgoJCQlpZiAoJGRpZmZj b2RlIGVxICcrJykgewoJCQkJaWYgKCRzdGF0ZSBlcSAiZHVtcCIpCgkJCQl7ICMgJ2NoYW5nZScg bmV2ZXIgYmVnaW5zIHdpdGggJysnOiBqdXN0IGR1bXAgb3V0IHZhbHVlCgkJCQkJcHJpbnQKCQkJ CQkgICAgIjx0cj5cbjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlcIj4mbmJzcDs8L3RkPlxuPHRkIGNs YXNzPVwiZGlmZi1hZGRlZFwiPiZuYnNwOyRfPC90ZD5cbjwvdHI+XG4iOwoJCQkJfSBlbHNlIHsg ICAgIyB3ZSBnb3QgbWludXMgYmVmb3JlCgkJCQkJJHN0YXRlID0gIlByZUNoYW5nZSI7CgkJCQkJ JHJpZ2h0Q29sWyRyaWdodFJvdysrXSA9ICRfOwoJCQkJfQoJCQl9IGVsc2lmICgkZGlmZmNvZGUg ZXEgJy0nKSB7CgkJCQkkc3RhdGUgPSAiUHJlQ2hhbmdlUmVtb3ZlIjsKCQkJCSRsZWZ0Q29sWyRs ZWZ0Um93KytdID0gJF87CgkJCX0gZWxzZSB7ICAgICMgZW1wdHkgZGlmZmNvZGUKCQkJCWZsdXNo X2RpZmZfcm93cyBcQGxlZnRDb2wsIFxAcmlnaHRDb2wsICRsZWZ0Um93LAoJCQkJICAgICRyaWdo dFJvdzsKCQkJCXByaW50ICI8dHI+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwv dGQ+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwvdGQ+XG48L3RyPlxuIjsKCQkJ CSRzdGF0ZSAgICA9ICJkdW1wIjsKCQkJCSRsZWZ0Um93ICA9IDA7CgkJCQkkcmlnaHRSb3cgPSAw OwoJCQl9CgkJfQoJfQoJY2xvc2UoJGZoKTsKCglmbHVzaF9kaWZmX3Jvd3MgXEBsZWZ0Q29sLCBc QHJpZ2h0Q29sLCAkbGVmdFJvdywgJHJpZ2h0Um93OwoKCSMgc3RhdGUgaXMgZW1wdHkgaWYgd2Ug ZGlkbid0IGhhdmUgYW55IGNoYW5nZQoJaWYgKCEkc3RhdGUpIHsKCQlwcmludCAiPHRyPlxuPHRk IGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD5cbjwvdHI+XG4iOwoJCXByaW50ICI8dHIgY2xhc3M9 XCJkaWZmLWVtcHR5XCI+XG4iOwoJCXByaW50CgkJICAgICI8dGQgY29sc3Bhbj1cIjJcIiBhbGln bj1cImNlbnRlclwiPjxiPi0gTm8gdmlld2FibGUgY2hhbmdlIC08L2I+PC90ZD5cbjwvdHI+XG4i OwoJfQoJcHJpbnQgIjwvdGFibGU+XG4iOwoKCXByaW50ICI8aHIgc3R5bGU9XCJ3aWR0aDogMTAw JVwiIG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7 c2NyaXB0d2hlcmV9XCI+XG4iOwoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwi PlxuPHRyPlxuPHRkPlxuIjsKCgkjIHByaW50IGxlZ2VuZAoJcHJpbnQgIjx0YWJsZSBib3JkZXI9 XCIxXCI+XG48dHI+XG48dGQ+IjsKCXByaW50ICJMZWdlbmQ6PGJyPjx0YWJsZSBzdHlsZT1cImJv cmRlcjogbm9uZVwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMVwiPlxuIjsKCXBy aW50CgkgICAgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiZGlmZi1yZW1vdmVk XCI+UmVtb3ZlZCBmcm9tIHYuJHJldjE8L3RkPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwiPiZu YnNwOzwvdGQ+XG48L3RyPlxuIjsKCXByaW50CgkgICAgIjx0ciBjbGFzcz1cImRpZmYtY2hhbmdl ZFwiPlxuPHRkIGFsaWduPVwiY2VudGVyXCIgY29sc3Bhbj1cIjJcIj5jaGFuZ2VkIGxpbmVzPC90 ZD5cbjwvdHI+XG4iOwoJcHJpbnQKCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwi PiZuYnNwOzwvdGQ+XG48dGQgYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cImRpZmYtYWRkZWRcIj5B ZGRlZCBpbiB2LiRyZXYyPC90ZD5cbjwvdHI+XG4iOwoJcHJpbnQgIjwvdGFibGU+XG48L3RkPlxu PC90cj5cbjwvdGFibGU+XG48L3RkPlxuPHRkPiI7CgoJIyBQcmludCBmb3JtYXQgc2VsZWN0b3IK CWZvcmVhY2ggbXkgJHZhciAoa2V5cyAlaW5wdXQpIHsKCQluZXh0IGlmICgkdmFyIGVxICJmIik7 CgkJbmV4dAoJCSAgICBpZiAoZGVmaW5lZCgkREVGQVVMVFZBTFVFeyR2YXJ9KQoJCSAgICAmJiAk REVGQVVMVFZBTFVFeyR2YXJ9IGVxICRpbnB1dHskdmFyfSk7CgkJcHJpbnQgIjxpbnB1dCB0eXBl PVwiaGlkZGVuXCIgbmFtZT1cIiIsIHVybGVuY29kZSgkdmFyKSwKCQkgICAgIlwiIHZhbHVlPVwi IiwgdXJsZW5jb2RlKCRpbnB1dHskdmFyfSksICJcIj5cbiI7Cgl9CglwcmludERpZmZTZWxlY3Qo JHVzZV9qYXZhX3NjcmlwdCk7CglwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1c IlNob3dcIj5cbiI7CglwcmludCAiPC90ZD5cbiI7CgoJcHJpbnQgIjwvdHI+XG48L3RhYmxlPlxu IjsKCXByaW50ICI8L2Zvcm0+XG4iOwp9CgpzdWIgbmF2aWdhdGVIZWFkZXIoJCQkJCQpIHsKCW15 ICgkc3doZXJlLCAkcGF0aCwgJGZpbGVuYW1lLCAkcmV2LCAkdGl0bGUpID0gQF87Cgkkc3doZXJl ID0gIiIgaWYgKCRzd2hlcmUgZXEgJHNjcmlwdHdoZXJlKTsKCSRzd2hlcmUgPSAnLi8nIC4gdXJs ZW5jb2RlKCRmaWxlbmFtZSkgaWYgKCRzd2hlcmUgZXEgIiIpOwoKCSMgVE9ETzogdGhpcyBzaG91 bGQgYmUgbW92ZWQgaW50byBleHRlcm5hbCBDU1MgZmlsZS4KCW15ICRjc3MgPSAnJzsKCWlmICgk dGl0bGUgZXEgJ2RpZmYnKSB7CgkgICAgJGNzcyA9ICIKPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wi PgouZGlmZi1oZWFkaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9ySGVhZGluZzsK fQouZGlmZi1zYW1lIHsKICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6 IHNtYWxsZXI7Cn0KLmRpZmYtZW1wdHkgewogIGJhY2tncm91bmQtY29sb3I6ICRkaWZmY29sb3JF bXB0eTsKfQouZGlmZi1hZGRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckFkZDsK ICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRp ZmYtcmVtb3ZlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvclJlbW92ZTsKICBmb250 LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hh bmdlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckNoYW5nZTsKICBmb250LWZhbWls eTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hhbmdlZC1t aXNzaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9yRGFya0NoYW5nZTsKfQo8L3N0 eWxlPiI7Cgl9CgoJcHJpbnQgPDxFT0Y7CiRIVE1MX0RPQ1RZUEUKPGh0bWw+CjxoZWFkPgo8dGl0 bGU+JHBhdGgkZmlsZW5hbWUgLSAkdGl0bGUgLSAkcmV2PC90aXRsZT4kY3NzCiRIVE1MX01FVEE8 L2hlYWQ+CiRib2R5X3RhZ19mb3Jfc3JjCjx0YWJsZSB3aWR0aD0iMTAwJSIgc3R5bGU9ImJvcmRl cjogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogJG5hdmlnYXRpb25IZWFkZXJDb2xvciIgY2VsbHNw YWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIj4KPHRyIHZhbGlnbj0iYm90dG9tIj48dGQ+CkVPRgoK CXByaW50ICZsaW5rKCRiYWNraWNvbiwgIiRzd2hlcmUkcXVlcnkjcmV2JHJldiIpOwoJcHJpbnQg IjxiPlJldHVybiB0byAiLCAmbGluaygkZmlsZW5hbWUsICIkc3doZXJlJHF1ZXJ5I3JldiRyZXYi KSwKCSAgICAiIENWUyBsb2ciOwoJcHJpbnQgIjwvYj4gJGZpbGVpY29uPC90ZD4iOwoKCXByaW50 ICI8dGQgYWxpZ249XCJyaWdodFwiPiRkaXJpY29uIDxiPlVwIHRvICIsCgkgICZjbGlja2FibGVQ YXRoKCRwYXRoLCAxKSwKCSAgICAiPC9iPjwvdGQ+IjsKCXByaW50ICI8L3RyPjwvdGFibGU+IjsK fQoKc3ViIHBsdXJhbF93cml0ZSgkJCkgewoJbXkgKCRudW0sICR0ZXh0KSA9IEBfOwoJaWYgKCRu dW0gIT0gMSkgewoJCSR0ZXh0IC49ICJzIjsKCX0KCglpZiAoJG51bSA+IDApIHsKCQlyZXR1cm4g am9pbiAoJyAnLCAkbnVtLCAkdGV4dCk7Cgl9IGVsc2UgewoJCXJldHVybiAiIjsKCX0KfQoKIyMK IyBwcmludCByZWFkYWJsZSB0aW1lc3RhbXAgaW4gdGVybXMgb2YKIyAnLi50aW1lIGFnbycKIyBI LiBaZWxsZXIgPHplbGxlckB0aGluay5kZT4KIyMKc3ViIHJlYWRhYmxlVGltZSgkJCkgewoJbXkg KCRpLCAkYnJlYWssICRyZXR2YWwpOwoJbXkgKCRzZWNzLCAkbG9uZykgPSBAXzsKCgkjIHRoaXMg ZnVuY3Rpb24gd29ya3MgY29ycmVjdCBmb3IgdGltZSA+PSAyIHNlY29uZHMKCWlmICgkc2VjcyA8 IDIpIHsKCQlyZXR1cm4gInZlcnkgbGl0dGxlIHRpbWUiOwoJfQoKCW15ICVkZXNjID0gKAoJCTEs ICAgICAgICAnc2Vjb25kJywgNjAsICAgICAnbWludXRlJywgMzYwMCwgICAgJ2hvdXInLAoJCTg2 NDAwLCAgICAnZGF5JywgICAgNjA0ODAwLCAnd2VlaycsICAgMjYyODAwMCwgJ21vbnRoJywKCQkz MTUzNjAwMCwgJ3llYXInCgkpOwoJbXkgQGJyZWFrcyA9IHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlz ICVkZXNjOwoJJGkgPSAwOwoKCXdoaWxlICgkaSA8PSAkI2JyZWFrcyAmJiAkc2VjcyA+PSAyICog JGJyZWFrc1skaV0pIHsKCQkkaSsrOwoJfQoJJGktLTsKCSRicmVhayAgPSAkYnJlYWtzWyRpXTsK CSRyZXR2YWwgPSBwbHVyYWxfd3JpdGUoaW50KCRzZWNzIC8gJGJyZWFrKSwgJGRlc2N7JGJyZWFr fSk7CgoJaWYgKCRsb25nID09IDEgJiYgJGkgPiAwKSB7CgkJbXkgJHJlc3QgPSAkc2VjcyAlICRi cmVhazsKCQkkaS0tOwoJCSRicmVhayA9ICRicmVha3NbJGldOwoJCW15ICRyZXN0dGltZSA9IHBs dXJhbF93cml0ZShpbnQoJHJlc3QgLyAkYnJlYWspLCAkZGVzY3skYnJlYWt9KTsKCQlpZiAoJHJl c3R0aW1lKSB7CgkJCSRyZXR2YWwgLj0gIiwgJHJlc3R0aW1lIjsKCQl9Cgl9CgoJcmV0dXJuICRy ZXR2YWw7Cn0KCiMjCiMgY2xpY2thYmxlUGF0aChTdHJpbmcgcGF0aG5hbWUsIGJvb2xlYW4gbGFz dF9pdGVtX2NsaWNrYWJsZSkKIwojIHJldHVybnMgYSBodG1sLWlmaWVkIHBhdGggd2hlcmVhcyBl YWNoIGRpcmVjdG9yeSBpcyBhIGxpbmsgZm9yCiMgZmFzdGVyIG5hdmlnYXRpb24uIGxhc3RfaXRl bV9jbGlja2FibGUgY29udHJvbHMgd2hldGhlciB0aGUKIyBiYXNlbmFtZSAobGFzdCBkaXJlY3Rv cnkvZmlsZSkgaXMgYSBsaW5rIGFzIHdlbGwKIyMKc3ViIGNsaWNrYWJsZVBhdGgoJCQpIHsKCW15 ICgkcGF0aG5hbWUsICRjbGlja0xhc3QpID0gQF87CglteSAkcmV0dmFsID0gJyc7CgoJaWYgKCRw YXRobmFtZSBlcSAnLycpIHsKCgkJIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLSBjaG9vc2VD VlNSb290KCkgaXMKCQkjIGludGVuZGVkIHRvIGRvIHRoaXMKCQkkcmV0dmFsID0gIlskY3ZzdHJl ZV0iOwoJfSBlbHNlIHsKCQkkcmV0dmFsIC49ICcgJyAuICZsaW5rKCJbJGN2c3RyZWVdIiwKCQkJ c3ByaW50ZignJXMvJXMjZGlybGlzdCcsICRzY3JpcHRuYW1lLCAkcXVlcnkpKTsKCQlteSAkd2hl cmVwYXRoID0gJyc7CgkJbXkgKCRsYXN0c2xhc2gpID0gJHBhdGhuYW1lID1+IG18LyR8OwoKCQlm b3JlYWNoIChzcGxpdCAoL1wvLywgJHBhdGhuYW1lKSkgewoJCQkkcmV0dmFsIC49ICIgLyAiOwoJ CQkkd2hlcmVwYXRoIC49ICIvJF8iOwoJCQlteSAoJGxhc3QpID0gIiR3aGVyZXBhdGgvIiBlcSAi LyRwYXRobmFtZSIKCQkJICAgIHx8ICR3aGVyZXBhdGggZXEgIi8kcGF0aG5hbWUiOwoKCQkJaWYg KCRjbGlja0xhc3QgfHwgISRsYXN0KSB7CgkJCQkkcmV0dmFsIC49ICZsaW5rKCRfLAoJCQkJCWpv aW4gKCcnLCAkc2NyaXB0bmFtZSwKCQkJCQl1cmxlbmNvZGUoJHdoZXJlcGF0aCksCgkJCQkJKCEk bGFzdCB8fCAkbGFzdHNsYXNoID8gJy8nIDogJycpLAoJCQkJCSRxdWVyeSwKCQkJCQkoISRsYXN0 IHx8ICRsYXN0c2xhc2ggPyAiI2Rpcmxpc3QiIDogIiIpCgkJCQkpKTsKCQkJfSBlbHNlIHsgICAg IyBkbyBub3QgbWFrZSBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgZGlyCgkJCQkkcmV0dmFsIC49ICRf OwoJCQl9CgkJfQoJfQoJcmV0dXJuICRyZXR2YWw7Cn0KCnN1YiBjaG9vc2VDVlNSb290KCkgewoK CXByaW50ICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBhY3Rpb249XCIke3NjcmlwdHdoZXJlfVwiPlxu IjsKCWlmICgyIDw9IEBDVlNST09UKSB7CgkJbXkgKCRrKTsKCQlmb3JlYWNoICRrIChrZXlzICVp bnB1dCkgewoJCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJGtcIiB2YWx1 ZT1cIiRpbnB1dHska31cIj5cbiIKCQkJICAgIGlmICgkaW5wdXR7JGt9KSAmJiAoJGsgbmUgImN2 c3Jvb3QiKTsKCQl9CgoJCSMgRm9ybS1FbGVtZW50cyBsb29rIHdpZXJkIGluIE5ldHNjYXBlIGlm IHRoZSBiYWNrZ3JvdW5kCgkJIyBpc24ndCBncmF5IGFuZCB0aGUgZm9ybSBlbGVtZW50cyBhcmUg bm90IHBsYWNlZAoJCSMgd2l0aGluIGEgdGFibGUgLi4uCgkJcHJpbnQgIjx0YWJsZSBzdHlsZT1c ImJvcmRlcjogbm9uZVwiPlxuPHRyPlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJjdnNy b290XCIgYWNjZXNza2V5PVwiQ1wiPkNWUyBSb290OjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQg Ijx0ZD5cbjxzZWxlY3QgaWQ9XCJjdnNyb290XCIgbmFtZT1cImN2c3Jvb3RcIiI7CgkJcHJpbnQg IiBvbmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJ CXByaW50ICI+XG4iOwoKCQlmb3JlYWNoICRrIChAQ1ZTUk9PVCkgewoJCQlwcmludCAiPG9wdGlv biB2YWx1ZT1cIiRrXCIiOwoJCQlwcmludCAiIHNlbGVjdGVkIiBpZiAoJGsgZXEgJGN2c3RyZWUp OwoJCQlwcmludCAiPiIsKCRDVlNST09UZGVzY3J7JGt9ID8gJENWU1JPT1RkZXNjcnska30gOiAk ayksCgkJCSAgICAiPC9vcHRpb24+XG4iOwoJCX0KCQlwcmludCAiPC9zZWxlY3Q+XG48L3RkPlxu PHRkPiI7Cgl9IGVsc2UgewoKCQkjIG5vIGNob2ljZSAtLSBidXQgd2UgbmVlZCB0aGUgZm9ybSB0 byBzZWxlY3QgbW9kdWxlL3BhdGgsCgkJIyBhdCBsZWFzdCBmb3IgTmV0c2NhcGUKCQlwcmludCAi PHA+XG4iOwoJCXByaW50ICJDVlMgUm9vdDogPGI+WyRjdnN0cmVlXTwvYj4iOwoJfQoKCXByaW50 ICIgPGxhYmVsIGZvcj1cIm1wYXRoXCIgYWNjZXNza2V5PVwiTVwiPk1vZHVsZSBwYXRoIG9yIGFs aWFzOiI7CglwcmludCAiPC9sYWJlbD5cbiI7CglwcmludCAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIg aWQ9XCJtcGF0aFwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCJcIiBzaXplPVwiMTVcIj5cbiI7Cglw cmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNza2V5PVwiT1wi PiI7CgoJaWYgKDIgPD0gQENWU1JPT1QpIHsKCQlwcmludCAiPC90ZD5cbjwvdHI+XG48L3RhYmxl PiI7Cgl9IGVsc2UgewoJCXByaW50ICI8L3A+IjsKCX0KCXByaW50ICJcbjwvZm9ybT4iOwp9Cgpz dWIgY2hvb3NlTWlycm9yKCkgewoKCSMgVGhpcyBjb2RlIGNvbWVzIGZyb20gdGhlIG9yaWdpbmFs IEJTRC1jdnN3ZWIKCSMgYW5kIG1heSBub3QgYmUgdXNlZnVsIGZvciB5b3VyIHNpdGU7IElmIHlv dSBkb24ndAoJIyBzZXQgJU1JUlJPUlMgdGhpcyB3b24ndCBzaG93IHVwLCBhbnl3YXkuCglzY2Fs YXIoJU1JUlJPUlMpIG9yIHJldHVybjsKCgkjIFNob3VsZCBwZXJoYXBzIGV4Y2x1ZGUgdGhlIGN1 cnJlbnQgc2l0ZSBzb21laG93Li4uCglwcmludCAiXG48cD5cblRoaXMgQ1ZTd2ViIGlzIG1pcnJv cmVkIGluXG4iOwoKCW15IEB0bXAgPSBtYXAoJmxpbmsoaHRtbHF1b3RlKCRfKSwgJE1JUlJPUlN7 JF99KSwKCQkgICAgICBzb3J0IGtleXMgJU1JUlJPUlMpOwoJbXkgJHRtcCA9IHBvcChAdG1wKTsK CglpZiAoc2NhbGFyKEB0bXApKSB7CgkgICAgcHJpbnQgam9pbignLCAnLCBAdG1wKSwgJyBhbmQg JzsKCX0KCglwcmludCAiJHRtcC5cbjwvcD5cbiI7Cn0KCnN1YiBmaWxlU29ydENtcCgpIHsKCW15 ICgkY29tcCkgPSAwOwoJbXkgKCRjLCAkZCwgJGFmLCAkYmYpOwoKCSgkYWYgPSAkYSkgPX4gcy8s diQvLzsKCSgkYmYgPSAkYikgPX4gcy8sdiQvLzsKCW15ICgkcmV2MSwgJGRhdGUxLCAkbG9nMSwg JGF1dGhvcjEsICRmaWxlbmFtZTEpID0gQHskZmlsZWluZm97JGFmfX0KCSAgICBpZiAoZGVmaW5l ZCgkZmlsZWluZm97JGFmfSkpOwoJbXkgKCRyZXYyLCAkZGF0ZTIsICRsb2cyLCAkYXV0aG9yMiwg JGZpbGVuYW1lMikgPSBAeyRmaWxlaW5mb3skYmZ9fQoJICAgIGlmIChkZWZpbmVkKCRmaWxlaW5m b3skYmZ9KSk7CgoJaWYgKGRlZmluZWQoJGZpbGVuYW1lMSkgJiYgZGVmaW5lZCgkZmlsZW5hbWUy KSAmJiAkYWYgZXEgJGZpbGVuYW1lMQoJICAgICYmICRiZiBlcSAkZmlsZW5hbWUyKQoJewoKCQkj IFR3byBmaWxlcwoJCSRjb21wID0gLXJldmNtcCgkcmV2MSwgJHJldjIpIGlmICgkYnlyZXYgJiYg JHJldjEgJiYgJHJldjIpOwoJCSRjb21wID0gKCRkYXRlMiA8PT4gJGRhdGUxKSBpZiAoJGJ5ZGF0 ZSAmJiAkZGF0ZTEgJiYgJGRhdGUyKTsKCQkkY29tcCA9ICgkbG9nMSBjbXAgJGxvZzIpIGlmICgk Ynlsb2cgJiYgJGxvZzEgJiYgJGxvZzIpOwoJCSRjb21wID0gKCRhdXRob3IxIGNtcCAkYXV0aG9y MikKCQkgICAgaWYgKCRieWF1dGhvciAmJiAkYXV0aG9yMSAmJiAkYXV0aG9yMik7Cgl9CgoJaWYg KCRjb21wID09IDApIHsKCgkJIyBEaXJlY3RvcmllcyBmaXJzdCwgdGhlbiBmaWxlcyB1bmRlciB2 ZXJzaW9uIGNvbnRyb2wsCgkJIyB0aGVuIG90aGVyLCAicm9ndWUiIGZpbGVzLgoJCSMgU29ydCBi eSBmaWxlbmFtZSBpZiBubyBvdGhlciBjcml0ZXJpYSBhdmFpbGFibGUuCgoJCW15ICRhZCA9ICgo LWQgIiRmdWxsbmFtZS8kYSIpID8gJ0QnCgkJICAgIDogKGRlZmluZWQoJGZpbGVpbmZveyRhZn0p ID8gJ0YnIDogJ1InKSk7CgkJbXkgJGJkID0gKCgtZCAiJGZ1bGxuYW1lLyRiIikgPyAnRCcKCQkg ICAgOiAoZGVmaW5lZCgkZmlsZWluZm97JGJmfSkgPyAnRicgOiAnUicpKTsKCQkoJGMgPSAkYSkg PX4gc3wuKi98fDsKCQkoJGQgPSAkYikgPX4gc3wuKi98fDsKCQkkY29tcCA9ICgiJGFkJGMiIGNt cCAiJGJkJGQiKTsKCX0KCXJldHVybiAkY29tcDsKfQoKIyBtYWtlIEEgdXJsIGZvciBkb3dubG9h ZGluZwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICRtaW1l dHlwZSkgPSBAXzsKCgkkcmV2aXNpb24gPX4gcy9cYjBcLi8vOwoKCWlmIChkZWZpbmVkKCRjaGVj a291dE1hZ2ljKQoJICAgICYmICghZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAi dGV4dC94LWN2c3dlYi1tYXJrdXAiKSkKCXsKCQlteSAkcGF0aCA9ICR3aGVyZTsKCQkkcGF0aCA9 fiBzfFteL10rJHx8OwoJCSR1cmwgPSAiJHNjcmlwdG5hbWUvJGNoZWNrb3V0TWFnaWMvJHtwYXRo fSR1cmwiOwoJfQoJJHVybCAuPSAiP3Jldj0kcmV2aXNpb24iOwoJJHVybCAuPSAnJmNvbnRlbnQt dHlwZT0nIC4gdXJsZW5jb2RlKCRtaW1ldHlwZSkgaWYgKGRlZmluZWQoJG1pbWV0eXBlKSk7CgoJ JHVybDsKfQoKIyBQcmVzZW50cyBhIGxpbmsgdG8gZG93bmxvYWQgdGhlCiMgc2VsZWN0ZWQgcmV2 aXNpb24Kc3ViIGRvd25sb2FkX2xpbmsoJCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICR0 ZXh0bGluaywgJG1pbWV0eXBlKSA9IEBfOwoJbXkgKCRmdWxsdXJsKSA9IGRvd25sb2FkX3VybCgk dXJsLCAkcmV2aXNpb24sICRtaW1ldHlwZSk7CgoJJGZ1bGx1cmwgPX4gcy86L3NwcmludGYoIiUl JTAyeCIsIG9yZCgkJikpL2VnOwoKCXByaW50ZiAnPGEgaHJlZj0iJXMiJywgaHJlZnF1b3RlKCIk ZnVsbHVybCRiYXJlcXVlcnkiKTsKCglpZiAoJG9wZW5fZXh0ZXJuX3dpbmRvdwoJICAgICYmICgh ZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAidGV4dC94LWN2c3dlYi1tYXJrdXAi KSkKCXsKCQlwcmludCAnIHRhcmdldD0iY3ZzX2NoZWNrb3V0Iic7CgoJCSMgd2Ugc2hvdWxkIGhh dmUKCQkjICAgJ2lmIChkb2N1bWVudC5jdnN3aW49PW51bGwpIGRvY3VtZW50LmN2c3dpbj13aW5k b3cub3BlbiguLi4nCgkJIyBpbiBvcmRlciB0byBhbGxvdyB0aGUgdXNlciB0byByZXNpemUgdGhl IHdpbmRvdzsgb3RoZXJ3aXNlCgkJIyB0aGUgdXNlciBtYXkgcmVzaXplIHRoZSB3aW5kb3csIGJ1 dCBvbiBuZXh0IGNoZWNrb3V0IC0gemFwIC0KCQkjIGl0cyBvcmlnaW5hbCAoY29uZmlndXJlZCBz LiBjdnN3ZWIuY29uZikgc2l6ZSBpcyBiYWNrIGFnYWluCgkJIyAuLiBhbm5veWluZyAoaWYgJGV4 dGVybl93aW5kb3dfKHdpZHRofGhlaWdodCkgaXMgZGVmaW5lZCkKCQkjIGJ1dCB0aGlzIGlmICgu Likgc29sdXRpb24gaXMgZmFyIGZyb20gcGVyZmVjdAoJCSMgd2hhdCB3ZSBuZWVkIHRvIGRvIGFz IHdlbGwgaXMKCQkjIDEpIHNhdmUgY3Zzd2luIGluIGFuIGludmlzaWJsZSBmcmFtZSB0aGF0IGFs d2F5cyBleGlzdHMKCQkjICAgIChkb2N1bWVudC5jdnN3aW4gd2lsbCBiZSB2b2lkIG9uIG5leHQg bG9hZCkKCQkjIDIpIG9uIGNsb3NlIG9mIHRoZSBjdnNfY2hlY2tvdXQgLSB3aW5kb3cgc2V0IHRo ZSBjdnN3aW4KCQkjICAgIHZhcmlhYmxlIHRvICdudWxsJyBhZ2FpbiAtIHNvIHRoYXQgaXQgd2ls bCBiZQoJCSMgICAgcmVvcGVuZW5kIHdpdGggdGhlIGNvbmZpZ3VyZWQgc2l6ZQoJCSMgYW55b25l IGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyID8KCQkjIC4uIHNvIGhlcmUgd2l0aG91dCBpZiAoLi4p OgoJCSMgY3VycmVudGx5LCB0aGUgYmVzdCB3YXkgaXMgdG8gY29tbWVudCBvdXQgdGhlIHNpemUg cGFyYW1ldGVycwoJCSMgKCRleHRlcm5fd2luZG93Li4uKSBpbiBjdnN3ZWIuY29uZi4KCQlpZiAo JHVzZV9qYXZhX3NjcmlwdCkgewoJCQlteSBAYXR0ciA9IHF3KHJlc2l6YWJsZSBzY3JvbGxiYXJz KTsKCgkJCXB1c2ggQGF0dHIsIHF3KHN0YXR1cyB0b29sYmFyKQoJCQkgICAgaWYgKGRlZmluZWQo JG1pbWV0eXBlKSAmJiAkbWltZXR5cGUgZXEgInRleHQvaHRtbCIpOwoKCQkJcHVzaCBAYXR0ciwg IndpZHRoPSRleHRlcm5fd2luZG93X3dpZHRoIgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93 aW5kb3dfd2lkdGgpKTsKCgkJCXB1c2ggQGF0dHIsICJoZWlnaHQ9JGV4dGVybl93aW5kb3dfaGVp Z2h0IgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93aW5kb3dfaGVpZ2h0KSk7CgoJCQkjIFdl IG5lZWQgdGhlICJyZXR1cm4gZmFsc2UiIGhlcmUgdG8gcHJldmVudCBicm93c2VycwoJCQkjIGZy b20gZm9sbG93aW5nIHRoZSBocmVmIGFmdGVyIHRoZSBvbmNsaWNrIGhhbmRsZXIuCgkJCSMgVGhp cyB3b3VsZCBlZmZlY3RpdmVseSBsb2FkIHRoZSBzYW1lIGRvY3VtZW50IGluCgkJCSMgdGhlIHNh bWUgd2luZG93ICp0d2ljZSouCgkJCXByaW50ZgoJCQkgICAgcWAgb25jbGljaz0id2luZG93Lm9w ZW4oJyVzJywnY3ZzX2NoZWNrb3V0JywnJXMnKTtyZXR1cm4gZmFsc2UiYCwKCQkJICAgIGhyZWZx dW90ZSgiJGZ1bGx1cmwkYmFyZXF1ZXJ5IiksIGpvaW4gKCcsJywgQGF0dHIpOwoJCX0KCX0KCXBy aW50ICI+PGI+JHRleHRsaW5rPC9iPjwvYT4iOwp9CgojIFJldHVybnMgYSBRdWVyeSBzdHJpbmcg d2l0aCB0aGUKIyBzcGVjaWZpZWQgcGFyYW1ldGVyIHRvZ2dsZWQKc3ViIHRvZ2dsZVF1ZXJ5KCQk KSB7CglteSAoJHRvZ2dsZSwgJHZhbHVlKSA9IEBfOwoJbXkgKCRuZXdxdWVyeSwgJHZhcik7Cglt eSAoJXZhcnMpOwoJJXZhcnMgPSAlaW5wdXQ7CgoJaWYgKGRlZmluZWQoJHZhbHVlKSkgewoJCSR2 YXJzeyR0b2dnbGV9ID0gJHZhbHVlOwoJfSBlbHNlIHsKCQkkdmFyc3skdG9nZ2xlfSA9ICR2YXJz eyR0b2dnbGV9ID8gMCA6IDE7Cgl9CgoJIyBCdWlsZCBhIG5ldyBxdWVyeSBvZiBub24tZGVmYXVs dCBwYXJhbWVudGVycwoJJG5ld3F1ZXJ5ID0gIiI7Cglmb3JlYWNoICR2YXIgKEBzdGlja3l2YXJz KSB7CgkJbXkgKCR2YWx1ZSkgPSBkZWZpbmVkKCR2YXJzeyR2YXJ9KSA/ICR2YXJzeyR2YXJ9IDog IiI7CgkJbXkgKCRkZWZhdWx0KSA9CgkJICAgIGRlZmluZWQoJERFRkFVTFRWQUxVRXskdmFyfSkg PyAkREVGQVVMVFZBTFVFeyR2YXJ9IDogIiI7CgoJCWlmICgkdmFsdWUgbmUgJGRlZmF1bHQpIHsK CQkJJG5ld3F1ZXJ5IC49ICImIiBpZiAoJG5ld3F1ZXJ5IG5lICIiKTsKCQkJJG5ld3F1ZXJ5IC49 IHVybGVuY29kZSgkdmFyKSAuICI9IiAuIHVybGVuY29kZSgkdmFsdWUpOwoJCX0KCX0KCglpZiAo JG5ld3F1ZXJ5KSB7CgkJcmV0dXJuICc/JyAuICRuZXdxdWVyeTsKCX0KCXJldHVybiAiIjsKfQoK c3ViIHVybGVuY29kZSgkKSB7Cglsb2NhbCAoJF8pID0gQF87CgoJcy9bXDAwMC0rey1cMzc3XS9z cHJpbnRmKCIlJSUwMngiLCBvcmQoJCYpKS9nZTsKCgkkXzsKfQoKc3ViIGh0bWxxdW90ZSgkKSB7 Cglsb2NhbCAoJF8pID0gQF87CgoJIyBTcGVjaWFsIENoYXJhY3RlcnM7IFJGQyAxODY2CglzLyYv JmFtcDsvZzsKCXMvXCIvJnF1b3Q7L2c7CglzLzwvJmx0Oy9nOwoJcy8+LyZndDsvZzsKCgkkXzsK fQoKc3ViIGh0bWx1bnF1b3RlKCQpIHsKCWxvY2FsICgkXykgPSBAXzsKCgkjIFNwZWNpYWwgQ2hh cmFjdGVyczsgUkZDIDE4NjYKCXMvJnF1b3Q7L1wiL2c7CglzLyZsdDsvPC9nOwoJcy8mZ3Q7Lz4v ZzsKCXMvJmFtcDsvJi9nOwoKCSRfOwp9CgpzdWIgaHJlZnF1b3RlKCQpIHsKCWxvY2FsICgkXykg PSBAXzsKCgl5LyAvKy87CgoJaHRtbHF1b3RlKCRfKQp9CgpzdWIgaHR0cF9oZWFkZXIoOyQpIHsK CW15ICRjb250ZW50X3R5cGUgPSBzaGlmdCB8fCAidGV4dC9odG1sIjsKCgkkY29udGVudF90eXBl IC49ICI7IGNoYXJzZXQ9JGNoYXJzZXQiCgkgICAgaWYgJGNvbnRlbnRfdHlwZSA9fiBtLF50ZXh0 LywgJiYgZGVmaW5lZCgkY2hhcnNldCkgJiYgJGNoYXJzZXQ7CgoJaWYgKGRlZmluZWQoJG1vZGRh dGUpKSB7CgkJaWYgKCRpc19tb2RfcGVybCkgewoJCQlBcGFjaGUtPnJlcXVlc3QtPmhlYWRlcl9v dXQoCgkJCQkiTGFzdC1Nb2RpZmllZCIgPT4gc2NhbGFyIGdtdGltZSgkbW9kZGF0ZSkKCQkJCS4g IiBHTVQiKTsKCQl9IGVsc2UgewoJCQlwcmludCAiTGFzdC1Nb2RpZmllZDogIiwgc2NhbGFyIGdt dGltZSgkbW9kZGF0ZSksCgkJCSAgICAiIEdNVFxyXG4iOwoJCX0KCX0KCglpZiAoJGlzX21vZF9w ZXJsKSB7CgkJQXBhY2hlLT5yZXF1ZXN0LT5jb250ZW50X3R5cGUoJGNvbnRlbnRfdHlwZSk7Cgl9 IGVsc2UgewoJCXByaW50ICJDb250ZW50LVR5cGU6ICRjb250ZW50X3R5cGVcclxuIjsKCX0KCglp ZiAoJGFsbG93X2NvbXByZXNzICYmICRtYXljb21wcmVzcykgewoJCWlmICgkaGFzX3psaWIKCQkg ICAgfHwgKGRlZmluZWQoJENNRHtnemlwfSkgJiYgb3BlbihHWklQLCAifCAkQ01Ee2d6aXB9IC0x IC1jIikpCgkJICAgICkKCQl7CgoJCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJCQlBcGFjaGUtPnJl cXVlc3QtPmNvbnRlbnRfZW5jb2RpbmcoIngtZ3ppcCIpOwoJCQkJQXBhY2hlLT5yZXF1ZXN0LT5o ZWFkZXJfb3V0KAoJCQkJCVZhcnkgPT4gIkFjY2VwdC1FbmNvZGluZyIpOwoJCQkJQXBhY2hlLT5y ZXF1ZXN0LT5zZW5kX2h0dHBfaGVhZGVyOwoJCQl9IGVsc2UgewoJCQkJcHJpbnQgIkNvbnRlbnQt RW5jb2Rpbmc6IHgtZ3ppcFxyXG4iOwoJCQkJcHJpbnQgIlZhcnk6IEFjY2VwdC1FbmNvZGluZ1xy XG4iCgkJCQkgICAgOyAgICAgICAgICAgICNSRkMgMjA2OCwgMTQuNDMKCQkJCXByaW50ICJcclxu IjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJJHwgPSAxOwoJCQkkfCA9IDA7ICAgICMgRmx1 c2ggaGVhZGVyIG91dHB1dAoKCQkJaWYgKCRoYXNfemxpYikgewoJCQkJdGllICpHWklQLCBfX1BB Q0tBR0VfXywgXCpTVERPVVQ7CgkJCX0KCQkJc2VsZWN0KEdaSVApOwoJCQkkZ3ppcF9vcGVuID0g MTsKCgkJCSMJICAgIHByaW50ICI8IS0tIGd6aXBwZWQgLS0+IiBpZiAoJGNvbnRlbnRfdHlwZSA9 fiBtfF50ZXh0L2h0bWxcYnwpOwoJCX0gZWxzZSB7CgkJCWlmICgkaXNfbW9kX3BlcmwpIHsKCQkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQkJfSBlbHNlIHsKCQkJCXByaW50 ICJcclxuIjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJcHJpbnQKCQkJICAgICI8c3BhbiBz dHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPlVuYWJsZSB0byBmaW5kIGd6aXAgYmluYXJ5IGlu IHRoZSA8Yj5cJGNvbW1hbmRfcGF0aDwvYj4gKCRjb21tYW5kX3BhdGgpIHRvIGNvbXByZXNzIG91 dHB1dDwvc3Bhbj48YnI+IjsKCQl9Cgl9IGVsc2UgewoKCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQl9IGVsc2UgewoJCQlwcmludCAi XHJcbiI7ICAgICMgQ2xvc2UgaGVhZGVycwoJCX0KCX0KfQoKc3ViIGh0bWxfaGVhZGVyKCQpIHsK CW15ICgkdGl0bGUpID0gQF87CglodHRwX2hlYWRlcigidGV4dC9odG1sIik7CglwcmludCA8PEVP SDsKJEhUTUxfRE9DVFlQRQo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT4kdGl0bGU8L3RpdGxlPgokSFRN TF9NRVRBPC9oZWFkPgokYm9keV90YWcKJGxvZ28gPGgxIGFsaWduPSJjZW50ZXIiPiR0aXRsZTwv aDE+CkVPSAp9CgpzdWIgaHRtbF9mb290ZXIoKSB7CglwcmludCAiPGhyIG5vc2hhZGU+XG48YWRk cmVzcz4kYWRkcmVzczwvYWRkcmVzcz5cbiIgaWYgJGFkZHJlc3M7CglwcmludCAiPC9ib2R5Plxu PC9odG1sPlxuIjsKfQoKc3ViIGxpbmtfdGFncygkKSB7CglteSAoJHRhZ3MpID0gQF87CglteSAo JHJldCkgID0gIiI7CglteSAoJGZpbGV1cmwsICRmaWxlbmFtZSk7CgoJKCRmaWxlbmFtZSA9ICR3 aGVyZSkgPX4gcy9eLipcLy8vOwoJJGZpbGV1cmwgPSAnLi8nIC4gdXJsZW5jb2RlKCRmaWxlbmFt ZSk7CgoJZm9yZWFjaCBteSAkc3ltIChzcGxpdCAoIiwgIiwgJHRhZ3MpKSB7CgkJJHJldCAuPSAi LFxuIiBpZiAoJHJldCBuZSAiIik7CgkJJHJldCAuPQoJCSAgICAmbGluaygkc3ltLCAkZmlsZXVy bCAuIHRvZ2dsZVF1ZXJ5KCdvbmx5X3dpdGhfdGFnJywgJHN5bSkpOwoJfQoJcmV0dXJuICIkcmV0 XG4iOwp9CgojCiMgU2VlIGlmIGEgbW9kdWxlIGlzIGxpc3RlZCBpbiB0aGUgY29uZmlnIGZpbGUn cyBASGlkZU1vZHVsZXMgbGlzdC4KIwpzdWIgZm9yYmlkZGVuX21vZHVsZSgkKSB7CglteSAoJG1v ZHVsZSkgPSBAXzsKCWxvY2FsICRfOwoKCWZvciAoQEhpZGVNb2R1bGVzKSB7CgkJcmV0dXJuIDEg aWYgJG1vZHVsZSA9fiAkXzsKCX0KCXJldHVybiAwOwp9CgpzdWIgZm9yYmlkZGVuX2ZpbGUoJCkg ewoJbXkgKCRwYXRoKSA9IEBfOwoJJHBhdGggPSAgc3Vic3RyKCRwYXRoLCBsZW5ndGgoJGN2c3Jv b3QpICsgMSk7Cglsb2NhbCAkXzsKCWZvciAoQEZvcmJpZGRlbkZpbGVzKSB7CgkJcmV0dXJuIDEg aWYgJHBhdGggPX4gJF87Cgl9CglyZXR1cm4gMDsKfQoKIyBDbG9zZSB0aGUgR1pJUCBoYW5kbGUg cmVtb3ZlIHRoZSB0aWUuCgpzdWIgZ3ppcGNsb3NlIHsKCWlmICgkZ3ppcF9vcGVuKSB7CgkJc2Vs ZWN0KFNURE9VVCk7CgkJY2xvc2UoR1pJUCk7CgkJdW50aWUgKkdaSVA7CgkJJGd6aXBfb3BlbiA9 IDA7Cgl9Cn0KCiMgaW1wbGVtZW50IGEgZ3ppcHBlZCBmaWxlIGhhbmRsZSB2aWEgdGhlIENvbXBy ZXNzOlpsaWIgY29tcHJlc3Npb24KIyBsaWJyYXJ5LgoKc3ViIE1BR0lDMSgpIHsgMHgxZiB9CnN1 YiBNQUdJQzIoKSB7IDB4OGIgfQpzdWIgT1NDT0RFKCkgeyAzIH0KCnN1YiBUSUVIQU5ETEUgewoJ bXkgKCRjbGFzcywgJG91dCkgPSBAXzsKCW15ICgkZCkgPSBDb21wcmVzczo6WmxpYjo6ZGVmbGF0 ZUluaXQoCgkJLUxldmVsICAgICAgPT4gQ29tcHJlc3M6OlpsaWI6OlpfQkVTVF9DT01QUkVTU0lP TigpLAoJCS1XaW5kb3dCaXRzID0+IC1Db21wcmVzczo6WmxpYjo6TUFYX1dCSVRTKCkKCSkgb3Ig cmV0dXJuIHVuZGVmOwoJbXkgKCRvKSA9IHsKCQloYW5kbGUgPT4gJG91dCwKCQlkaCAgICAgPT4g JGQsCgkJY3JjICAgID0+IDAsCgkJbGVuICAgID0+IDAsCgl9OwoJbXkgKCRoZWFkZXIpID0KCSAg ICBwYWNrKCJjMTAiLCBNQUdJQzEsIE1BR0lDMiwgQ29tcHJlc3M6OlpsaWI6OlpfREVGTEFURUQo KSwgMCwgMCwgMCwKCSAgICAwLCAwLCAwLCBPU0NPREUpOwoJcHJpbnQgeyRvLT57aGFuZGxlfX0g JGhlYWRlcjsKCXJldHVybiBibGVzcygkbywgJGNsYXNzKTsKfQoKc3ViIFBSSU5UIHsKCW15ICgk bykgICA9IHNoaWZ0OwoJbXkgKCRidWYpID0gam9pbiAoZGVmaW5lZCAkLCA/ICQsIDogIiIsIEBf KTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVmKTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykg PSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsKCXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVz c2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQpOwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6 OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkkby0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVu Owp9CgpzdWIgUFJJTlRGIHsKCW15ICgkbykgICA9IHNoaWZ0OwoJbXkgKCRmbXQpID0gc2hpZnQ7 CglteSAoJGJ1ZikgPSBzcHJpbnRmKCRmbXQsIEBfKTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVm KTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykgPSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsK CXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVzc2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQp OwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkk by0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgV1JJVEUgewoJbXkgKCRvLCAk YnVmLCAkbGVuLCAkb2ZmKSA9IEBfOwoJbXkgKCRjb21wcmVzc2VkLCAkc3RhdHVzKSA9ICRvLT57 ZGh9LT5kZWZsYXRlKHN1YnN0cigkYnVmLCAwLCAkbGVuKSk7CglwcmludCB7JG8tPntoYW5kbGV9 fSAkY29tcHJlc3NlZCBpZiBkZWZpbmVkKCRjb21wcmVzc2VkKTsKCSRvLT57Y3JjfSA9IENvbXBy ZXNzOjpabGliOjpjcmMzMihzdWJzdHIoJGJ1ZiwgMCwgJGxlbiksICRvLT57Y3JjfSk7Cgkkby0+ e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgQ0xPU0UgewoJbXkgKCRvKSA9IEBf OwoJcmV0dXJuIGlmICFkZWZpbmVkKCRvLT57ZGh9KTsKCW15ICgkYnVmKSA9ICRvLT57ZGh9LT5m bHVzaCgpOwoJJGJ1ZiAuPSBwYWNrKCJWIFYiLCAkby0+e2NyY30sICRvLT57bGVufSk7Cglwcmlu dCB7JG8tPntoYW5kbGV9fSAkYnVmOwoJdW5kZWYgJG8tPntkaH07Cn0KCnN1YiBERVNUUk9ZIHsK CW15ICgkbykgPSBAXzsKCUNMT1NFKCRvKTsKfQo= ------_=_NextPart_001_01C360B9.49C45A42--