From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10379 invoked by alias); 16 May 2003 17:46:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 10347 invoked by uid 71); 16 May 2003 17:46:00 -0000 Resent-Date: 16 May 2003 17:46:00 -0000 Resent-Message-ID: <20030516174600.10346.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, arno@heho.snv.jussieu.fr Received: (qmail 24692 invoked by uid 48); 16 May 2003 17:38:47 -0000 Message-Id: <20030516173847.24691.qmail@sources.redhat.com> Date: Fri, 16 May 2003 17:46:00 -0000 From: arno@heho.snv.jussieu.fr Reply-To: arno@heho.snv.jussieu.fr To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5 X-SW-Source: 2003-05/txt/msg01868.txt.bz2 List-Id: >Number: 10824 >Category: c >Synopsis: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri May 16 17:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: arno@heho.snv.jussieu.fr >Release: "3.4 20030516 (experimental)" >Organization: >Environment: >Description: >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="dcigettext.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dcigettext.c" LyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmFsIGRjaWdldHRleHQgZnVuY3Rpb24uCiAg IENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgoKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAogICBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBv cHRpb24pCiAgIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCiAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoK ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu ZXJhbCBQdWJsaWMKICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKICAgVVNBLiAgKi8KCi8q IFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBj cHkoKS4KICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmln Lmg+IG1heSBpbmNsdWRlCiAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhh cyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KI2lmbmRlZiBfR05VX1NPVVJDRQoj IGRlZmluZSBfR05VX1NPVVJDRQkxCiNlbmRpZgoKI2lmZGVmIEhBVkVfQ09ORklHX0gKIyBpbmNs dWRlIDxjb25maWcuaD4KI2VuZGlmCgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgojaWZkZWYgX19H TlVDX18KIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKIyBkZWZpbmUgSEFWRV9BTExP Q0EgMQojZWxzZQojIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCiMg IGluY2x1ZGUgPGFsbG9jYS5oPgojIGVsc2UKIyAgaWZkZWYgX0FJWAogI3ByYWdtYSBhbGxvY2EK IyAgZWxzZQojICAgaWZuZGVmIGFsbG9jYQpjaGFyICphbGxvY2EgKCk7CiMgICBlbmRpZgojICBl bmRpZgojIGVuZGlmCiNlbmRpZgoKI2luY2x1ZGUgPGVycm5vLmg+CiNpZm5kZWYgZXJybm8KZXh0 ZXJuIGludCBlcnJubzsKI2VuZGlmCiNpZm5kZWYgX19zZXRfZXJybm8KIyBkZWZpbmUgX19zZXRf ZXJybm8odmFsKSBlcnJubyA9ICh2YWwpCiNlbmRpZgoKI2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5j bHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpZiAhSEFWRV9TVFJDSFIgJiYg IWRlZmluZWQgX0xJQkMKIyBpZm5kZWYgc3RyY2hyCiMgIGRlZmluZSBzdHJjaHIgaW5kZXgKIyBl bmRpZgojZW5kaWYKCiNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQwoj IGluY2x1ZGUgPHVuaXN0ZC5oPgojZW5kaWYKCiNpbmNsdWRlIDxsb2NhbGUuaD4KCiNpZiBkZWZp bmVkIEhBVkVfU1lTX1BBUkFNX0ggfHwgZGVmaW5lZCBfTElCQwojIGluY2x1ZGUgPHN5cy9wYXJh bS5oPgojZW5kaWYKCiNpbmNsdWRlICJnZXR0ZXh0UC5oIgojaWZkZWYgX0xJQkMKIyBpbmNsdWRl IDxsaWJpbnRsLmg+CiNlbHNlCiMgaW5jbHVkZSAibGliZ251aW50bC5oIgojZW5kaWYKI2luY2x1 ZGUgImhhc2gtc3RyaW5nLmgiCgovKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCiNpZmRlZiBfTElC QwojIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CiNlbHNlCi8qIFByb3ZpZGUgZHVtbXkgaW1w bGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KIyBkZWZpbmUgX19saWJj X2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLCBOQU1FKQojIGRlZmluZSBfX2xpYmNfbG9j a19sb2NrKE5BTUUpCiMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKQojIGRlZmluZSBf X2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKIyBkZWZpbmUgX19s aWJjX3J3bG9ja19yZGxvY2soTkFNRSkKIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFN RSkKI2VuZGlmCgovKiBBbGlnbm1lbnQgb2YgdHlwZXMuICAqLwojaWYgZGVmaW5lZCBfX0dOVUNf XyAmJiBfX0dOVUNfXyA+PSAyCiMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZ UEUpCiNlbHNlCiMgZGVmaW5lIGFsaWdub2YoVFlQRSkgXAogICAgKChpbnQpICYoKHN0cnVjdCB7 IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQojZW5kaWYKCi8qIFRo ZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2 ZSBkaWZmZXJlbnQKICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBs aWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5r ZWQgc3RhdGljYWxseS4gICovCiNpZiAhZGVmaW5lZCBfTElCQwojIGRlZmluZSBfbmxfZGVmYXVs dF9kZWZhdWx0X2RvbWFpbiBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbl9fCiMgZGVmaW5lIF9u bF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluX18KIyBk ZWZpbmUgX25sX2RlZmF1bHRfZGlybmFtZSBfbmxfZGVmYXVsdF9kaXJuYW1lX18KIyBkZWZpbmUg X25sX2RvbWFpbl9iaW5kaW5ncyBfbmxfZG9tYWluX2JpbmRpbmdzX18KI2VuZGlmCgovKiBTb21l IGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRl Zi5oPi4gICovCiNpZm5kZWYgb2Zmc2V0b2YKIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkg KChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCiNlbmRpZgoKLyogQEAgZW5kIG9mIHByb2xv ZyBAQCAqLwoKI2lmZGVmIF9MSUJDCi8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMu ICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAogICBiZWNhdXNlIHNvbWUgQU5TSSBD IGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CiAgIGZpbGUg YW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLgogICBHQ0MgTE9DQUw6IERv bid0IHVzZSAjZWxpZi4gICovCiMgZGVmaW5lIGdldGN3ZCBfX2dldGN3ZAojIGlmbmRlZiBzdHBj cHkKIyAgZGVmaW5lIHN0cGNweSBfX3N0cGNweQojIGVuZGlmCiMgZGVmaW5lIHRmaW5kIF9fdGZp bmQKI2Vsc2UKIyBpZiAhZGVmaW5lZCBIQVZFX0dFVENXRApjaGFyICpnZXR3ZCAoKTsKIyAgZGVm aW5lIGdldGN3ZChidWYsIG1heCkgZ2V0d2QgKGJ1ZikKIyBlbHNlCiMgIGlmICFkZWZpbmVkIEhB VkVfREVDTF9HRVRDV0QKY2hhciAqZ2V0Y3dkICgpOwojICBlbmRpZgojIGVuZGlmCiMgaWZuZGVm IEhBVkVfU1RQQ1BZCnN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29u c3QgY2hhciAqc3JjKSk7CiMgZW5kaWYKIyBpZm5kZWYgSEFWRV9NRU1QQ1BZCnN0YXRpYyB2b2lk ICptZW1wY3B5IFBBUkFNUyAoKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4p KTsKIyBlbmRpZgojZW5kaWYKCi8qIEFtb3VudCB0byBpbmNyZWFzZSBidWZmZXIgc2l6ZSBieSBp biBlYWNoIHRyeS4gICovCiNkZWZpbmUgUEFUSF9JTkNSIDMyCgovKiBUaGUgZm9sbG93aW5nIGlz IGZyb20gcGF0aG1heC5oLiAgKi8KLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUg Z2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCiAgIFBBVEhfTUFYIGJ1dCBtaWdo dCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcwogICBsYXRl ciBpbmNsdWRlZCAoYXMgb24gTU9SRS9CU0QgNC4zKS4gICovCiNpZiBkZWZpbmVkIF9QT1NJWF9W RVJTSU9OIHx8IChkZWZpbmVkIEhBVkVfTElNSVRTX0ggJiYgIWRlZmluZWQgX19HTlVDX18pCiMg aW5jbHVkZSA8bGltaXRzLmg+CiNlbmRpZgoKI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKIyBkZWZp bmUgX1BPU0lYX1BBVEhfTUFYIDI1NQojZW5kaWYKCiNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBk ZWZpbmVkIF9QQ19QQVRIX01BWAojIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BD X1BBVEhfTUFYKSA8IDEgPyAxMDI0IDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKI2Vu ZGlmCgovKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4u ICAqLwojaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYm ICFkZWZpbmVkIE1BWFBBVEhMRU4KIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2VuZGlmCgojaWYg IWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBNQVhQQVRITEVOCiMgZGVmaW5lIFBBVEhfTUFY IE1BWFBBVEhMRU4KI2VuZGlmCgojaWZuZGVmIFBBVEhfTUFYCiMgZGVmaW5lIFBBVEhfTUFYIF9Q T1NJWF9QQVRIX01BWAojZW5kaWYKCi8qIFBhdGhuYW1lIHN1cHBvcnQuCiAgIElTU0xBU0goQykg ICAgICAgICAgIHRlc3RzIHdoZXRoZXIgQyBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFj dGVyLgogICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1 dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJl IGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KICAgSVNfUEFUSF9XSVRIX0RJ UihQKSAgdGVzdHMgd2hldGhlciBQIGNvbnRhaW5zIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24u CiAqLwojaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBf X0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCiAgLyogV2luMzIsIE9TLzIsIERPUyAqLwojIGRl ZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQojIGRlZmluZSBIQVNf REVWSUNFKFApIFwKICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQ KVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKICAgICAmJiAoUClbMV0gPT0gJzonKQoj IGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJ Q0UgKFApKQojIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKICAgIChzdHJjaHIgKFAsICcv JykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkp CiNlbHNlCiAgLyogVW5peCAqLwojIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQojIGRl ZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKIyBkZWZpbmUgSVNfUEFU SF9XSVRIX0RJUihQKSAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwpCiNlbmRpZgoKLyogWFBHMyBk ZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKICAg YGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRo ZSBjdXJyZW50CiAgICAgc2V0dGluZyBvZiBgbG9jYWwnLicnCiAgIEhvd2V2ZXIgaXQgZG9lcyBu b3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKICAgSVNP IEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3Rl bXMgKGUuZy4KICAgdGhvc2UgdXNpbmcgR05VIEMgTGlicmFyeSkuICAqLwojaWYgZGVmaW5lZCBf TElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIp CiMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKI2VuZGlmCgovKiBUaGlzIGlzIHRoZSB0eXBlIHVz ZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKICAgYXJlIHN0 b3JlZC4gICovCnN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90CnsKICAvKiBEb21haW4gaW4gd2hp Y2ggdG8gc2VhcmNoLiAgKi8KICBjaGFyICpkb21haW5uYW1lOwoKICAvKiBUaGUgY2F0ZWdvcnku ICAqLwogIGludCBjYXRlZ29yeTsKCiAgLyogU3RhdGUgb2YgdGhlIGNhdGFsb2cgY291bnRlciBh dCB0aGUgcG9pbnQgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLwogIGludCBjb3VudGVyOwoKICAv KiBDYXRhbG9nIHdoZXJlIHRoZSBzdHJpbmcgd2FzIGZvdW5kLiAgKi8KICBzdHJ1Y3QgbG9hZGVk X2wxMG5maWxlICpkb21haW47CgogIC8qIEFuZCBmaW5hbGx5IHRoZSB0cmFuc2xhdGlvbi4gICov CiAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CiAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsK CiAgLyogUG9pbnRlciB0byB0aGUgc3RyaW5nIGluIHF1ZXN0aW9uLiAgKi8KICBjaGFyIG1zZ2lk W1pFUk9dOwp9OwoKLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xh dGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKICAgb25seSBpZiB0aGUgc3lzdGVtIHByb3ZpZGVzIHRo ZSBgdHNlYXJjaCcgZnVuY3Rpb24gZmFtaWx5LiAgKi8KI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNI IHx8IGRlZmluZWQgX0xJQkMKIyBpbmNsdWRlIDxzZWFyY2guaD4KCnN0YXRpYyB2b2lkICpyb290 OwoKIyBpZmRlZiBfTElCQwojICBkZWZpbmUgdHNlYXJjaCBfX3RzZWFyY2gKIyBlbmRpZgoKLyog RnVuY3Rpb24gdG8gY29tcGFyZSB0d28gZW50cmllcyBpbiB0aGUgdGFibGUgb2Yga25vd24gdHJh bnNsYXRpb25zLiAgKi8Kc3RhdGljIGludCB0cmFuc2NtcCBQQVJBTVMgKChjb25zdCB2b2lkICpw MSwgY29uc3Qgdm9pZCAqcDIpKTsKc3RhdGljIGludAp0cmFuc2NtcCAocDEsIHAyKQogICAgIGNv bnN0IHZvaWQgKnAxOwogICAgIGNvbnN0IHZvaWQgKnAyOwp7CiAgY29uc3Qgc3RydWN0IGtub3du X3RyYW5zbGF0aW9uX3QgKnMxOwogIGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpz MjsKICBpbnQgcmVzdWx0OwoKICBzMSA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25f dCAqKSBwMTsKICBzMiA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKSBwMjsK CiAgcmVzdWx0ID0gc3RyY21wIChzMS0+bXNnaWQsIHMyLT5tc2dpZCk7CiAgaWYgKHJlc3VsdCA9 PSAwKQogICAgewogICAgICByZXN1bHQgPSBzdHJjbXAgKHMxLT5kb21haW5uYW1lLCBzMi0+ZG9t YWlubmFtZSk7CiAgICAgIGlmIChyZXN1bHQgPT0gMCkKCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVn b3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAoJICAgb3BlcmF0aW9uKSBzaW5j ZSBpdCBpcyBob3BlZnVsbHkgYWx3YXlzIHRoZSBzYW1lIChuYW1lbHkKCSAgIExDX01FU1NBR0VT KS4gICovCglyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CiAgICB9CgogIHJl dHVybiByZXN1bHQ7Cn0KI2VuZGlmCgovKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGRvbWFpbiB1c2Vk IGZvciBnZXR0ZXh0KDMpIHByaW9yIGFueSBjYWxsIHRvCiAgIHRleHRkb21haW4oMykuICBUaGUg ZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyAibWVzc2FnZXMiLiAgKi8KY29uc3QgY2hhciBfbmxf ZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKCi8qIFZhbHVlIHVzZWQgYXMg dGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KY29uc3QgY2hhciAqX25sX2N1 cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKCi8qIENv bnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8K Y29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CgovKiBMaXN0IHdp dGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucyBjcmVhdGVkIGJ5IGJpbmR0ZXh0ZG9tYWlu KCkKICAgY2FsbHMuICAqLwpzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKCi8q IFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCnN0YXRpYyBjaGFyICpwbHVyYWxf bG9va3VwIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbiwKCQkJCSAgICB1 bnNpZ25lZCBsb25nIGludCBuLAoJCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLAoJCQkJ ICAgIHNpemVfdCB0cmFuc2xhdGlvbl9sZW4pKQogICAgIGludGVybmFsX2Z1bmN0aW9uOwpzdGF0 aWMgdW5zaWduZWQgbG9uZyBpbnQgcGx1cmFsX2V2YWwgUEFSQU1TICgoc3RydWN0IGV4cHJlc3Np b24gKnBleHAsCgkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbikpCiAgICAgaW50ZXJuYWxf ZnVuY3Rpb247CnN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGlu dCBjYXRlZ29yeSkpIGludGVybmFsX2Z1bmN0aW9uOwpzdGF0aWMgY29uc3QgY2hhciAqZ3Vlc3Nf Y2F0ZWdvcnlfdmFsdWUgUEFSQU1TICgoaW50IGNhdGVnb3J5LAoJCQkJCQkgY29uc3QgY2hhciAq Y2F0ZWdvcnluYW1lKSkKICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKCgovKiBGb3IgdGhvc2UgbG9v c2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKICAg c29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KI2lmZGVmIEhBVkVfQUxMT0NB Ci8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLwojIGRlZmluZSBBRERfQkxPQ0sobGlzdCwg YWRkcmVzcykgLyogbm90aGluZyAqLwojIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3Ro aW5nICovCiNlbHNlCnN0cnVjdCBibG9ja19saXN0CnsKICB2b2lkICphZGRyZXNzOwogIHN0cnVj dCBibG9ja19saXN0ICpuZXh0Owp9OwojIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJ CQkgICAgICBcCiAgZG8gewkJCQkJCQkJCSAgICAgIFwKICAgIHN0cnVjdCBibG9ja19saXN0ICpu ZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAog ICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3 IGVsZW1lbnQgdG8JICAgICAgXAogICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCiAg ICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKICAgICAgbmV3cC0+YWRkcmVzcyA9 IChhZGRyKTsJCQkJCQkgICAgICBcCiAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAg ICAgXAogICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCiAgICB9CQkJCQkJCQkJICAg ICAgXAogIH0gd2hpbGUgKDApCiMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAg XAogIGRvIHsJCQkJCQkJCQkgICAgICBcCiAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJ ICAgICAgXAogICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwK ICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAogICAgICBmcmVlIChvbGQpOwkJ CQkJCQkgICAgICBcCiAgICB9CQkJCQkJCQkJICAgICAgXAogIH0gd2hpbGUgKDApCiMgdW5kZWYg YWxsb2NhCiMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKI2VuZGlmCS8qIGhh dmUgYWxsb2NhICovCgoKI2lmZGVmIF9MSUJDCi8qIExpc3Qgb2YgYmxvY2tzIGFsbG9jYXRlZCBm b3IgdHJhbnNsYXRpb25zLiAgKi8KdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAp7CiAgc3Ry dWN0IHRyYW5zbWVtX2xpc3QgKm5leHQ7CiAgY2hhciBkYXRhW1pFUk9dOwp9IHRyYW5zbWVtX2Js b2NrX3Q7CnN0YXRpYyBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqdHJhbnNtZW1fbGlzdDsKI2Vsc2UK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRyYW5zbWVtX2Jsb2NrX3Q7CiNlbmRpZgoKCi8qIE5hbWVz IGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3Qg Y2xhc2gKICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kg Qy4gIEJ1dCB0aGlzIHNvdXJjZQogICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5 IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtl IGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KI2lmZGVmIF9MSUJDCiMgZGVmaW5lIERDSUdFVFRFWFQg X19kY2lnZXR0ZXh0CiNlbHNlCiMgZGVmaW5lIERDSUdFVFRFWFQgZGNpZ2V0dGV4dF9fCiNlbmRp ZgoKLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0 dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCiNpZmRlZiBfTElCQwpfX2xpYmNfcndsb2NrX2RlZmlu ZV9pbml0aWFsaXplZCAoLCBfbmxfc3RhdGVfbG9jaykKI2VuZGlmCgovKiBDaGVja2luZyB3aGV0 aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRl cwogICBlYXNpZXIgbWV0aG9kcyB0aGVyZWZvcmUgd2UgbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4g ICovCiNpZmRlZiBfTElCQwojIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2Vj dXJlCiMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUKI2Vsc2UKIyBpZm5kZWYgSEFWRV9HRVRVSUQK IyAgZGVmaW5lIGdldHVpZCgpIDAKIyBlbmRpZgojIGlmbmRlZiBIQVZFX0dFVEdJRAojICBkZWZp bmUgZ2V0Z2lkKCkgMAojIGVuZGlmCiMgaWZuZGVmIEhBVkVfR0VURVVJRAojICBkZWZpbmUgZ2V0 ZXVpZCgpIGdldHVpZCgpCiMgZW5kaWYKIyBpZm5kZWYgSEFWRV9HRVRFR0lECiMgIGRlZmluZSBn ZXRlZ2lkKCkgZ2V0Z2lkKCkKIyBlbmRpZgpzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CiMgZGVm aW5lIEVOQUJMRV9TRUNVUkUgKGVuYWJsZV9zZWN1cmUgPT0gMSkKIyBkZWZpbmUgREVURVJNSU5F X1NFQ1VSRSBcCiAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCiAgICB7CQkJ CQkJCQkJICAgICAgXAogICAgICBpZiAoZ2V0dWlkICgpICE9IGdldGV1aWQgKCkgfHwgZ2V0Z2lk ICgpICE9IGdldGVnaWQgKCkpCQkgICAgICBcCgllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAg ICBcCiAgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKCWVuYWJsZV9zZWN1cmUgPSAtMTsJCQkJCQkg ICAgICBcCiAgICB9CiNlbmRpZgoKLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBt ZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CiAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlm IFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKICAgZGVwZW5kaW5nIG9uIHRo ZSBwbHVyYWwgZm9ybSBkZXRlcm1pbmVkIGJ5IE4uICAqLwpjaGFyICoKRENJR0VUVEVYVCAoZG9t YWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIHBsdXJhbCwgbiwgY2F0ZWdvcnkpCiAgICAgY29uc3Qg Y2hhciAqZG9tYWlubmFtZTsKICAgICBjb25zdCBjaGFyICptc2dpZDE7CiAgICAgY29uc3QgY2hh ciAqbXNnaWQyOwogICAgIGludCBwbHVyYWw7CiAgICAgdW5zaWduZWQgbG9uZyBpbnQgbjsKICAg ICBpbnQgY2F0ZWdvcnk7CnsKI2lmbmRlZiBIQVZFX0FMTE9DQQogIHN0cnVjdCBibG9ja19saXN0 ICpibG9ja19saXN0ID0gTlVMTDsKI2VuZGlmCiAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9t YWluOwogIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOwogIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFt ZTsKICBjb25zdCBjaGFyICpjYXRlZ29yeXZhbHVlOwogIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlu bmFtZTsKICBjaGFyICpzaW5nbGVfbG9jYWxlOwogIGNoYXIgKnJldHZhbDsKICBzaXplX3QgcmV0 bGVuOwogIGludCBzYXZlZF9lcnJubzsKI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmlu ZWQgX0xJQkMKICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOwogIHN0cnVjdCBr bm93bl90cmFuc2xhdGlvbl90ICoqZm91bmRwID0gTlVMTDsKICBzaXplX3QgbXNnaWRfbGVuOwoj ZW5kaWYKICBzaXplX3QgZG9tYWlubmFtZV9sZW47CgogIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMg Z2l2ZW4gcmV0dXJuIE5VTEwuICAqLwogIGlmIChtc2dpZDEgPT0gTlVMTCkKICAgIHJldHVybiBO VUxMOwoKICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOwoKICAvKiBJZiBE T01BSU5OQU1FIGlzIE5VTEwsIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBkZWZhdWx0IGRvbWFp bi4gIElmCiAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1h a2UgbXVjaCBzZW5zZSBidXQgdGhlCiAgICAgZGVmaW5pdGlvbiBsZWZ0IHRoaXMgdW5kZWZpbmVk LiAgKi8KICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQogICAgZG9tYWlubmFtZSA9IF9ubF9jdXJy ZW50X2RlZmF1bHRfZG9tYWluOwoKI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQg X0xJQkMKICBtc2dpZF9sZW4gPSBzdHJsZW4gKG1zZ2lkMSkgKyAxOwoKICAvKiBUcnkgdG8gZmlu ZCB0aGUgdHJhbnNsYXRpb24gYW1vbmcgdGhvc2Ugd2hpY2ggd2UgZm91bmQgYXQKICAgICBzb21l IHRpbWUuICAqLwogIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQoJICAg YWxsb2NhIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKSArIG1z Z2lkX2xlbik7CiAgbWVtY3B5IChzZWFyY2gtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CiAg c2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKICBzZWFyY2gtPmNhdGVn b3J5ID0gY2F0ZWdvcnk7CgogIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAq KikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKICBpZiAoZm91bmRwICE9IE5VTEwg JiYgKCpmb3VuZHApLT5jb3VudGVyID09IF9ubF9tc2dfY2F0X2NudHIpCiAgICB7CiAgICAgIC8q IE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KICAgICAgaWYgKHBsdXJhbCkKCXJldHZhbCA9IHBs dXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9u LAoJCQkJKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGgpOwogICAgICBlbHNlCglyZXR2YWwg PSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOwoKICAgICAgX19saWJjX3J3bG9ja191 bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKICAgICAgcmV0dXJuIHJldHZhbDsKICAgIH0KI2VuZGlm CgogIC8qIFByZXNlcnZlIHRoZSBgZXJybm8nIHZhbHVlLiAgKi8KICBzYXZlZF9lcnJubyA9IGVy cm5vOwoKICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgb3Igbm90LiAgKi8K ICBERVRFUk1JTkVfU0VDVVJFOwoKICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAq LwogIGZvciAoYmluZGluZyA9IF9ubF9kb21haW5fYmluZGluZ3M7IGJpbmRpbmcgIT0gTlVMTDsg YmluZGluZyA9IGJpbmRpbmctPm5leHQpCiAgICB7CiAgICAgIGludCBjb21wYXJlID0gc3RyY21w IChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKICAgICAgaWYgKGNvbXBhcmUgPT0g MCkKCS8qIFdlIGZvdW5kIGl0ISAgKi8KCWJyZWFrOwogICAgICBpZiAoY29tcGFyZSA8IDApCgl7 CgkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCgkgIGJpbmRpbmcgPSBOVUxMOwoJICBi cmVhazsKCX0KICAgIH0KCiAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKICAgIGRpcm5hbWUgPSAoY2hh ciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOwogIGVsc2UgaWYgKElTX0FCU09MVVRFX1BBVEggKGJp bmRpbmctPmRpcm5hbWUpKQogICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CiAgZWxzZQog ICAgewogICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUg bm93LiAgKi8KICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJu YW1lKSArIDE7CiAgICAgIHNpemVfdCBwYXRoX21heDsKICAgICAgY2hhciAqcmV0OwoKICAgICAg cGF0aF9tYXggPSAodW5zaWduZWQgaW50KSBQQVRIX01BWDsKICAgICAgcGF0aF9tYXggKz0gMjsJ CS8qIFRoZSBnZXRjd2QgZG9jcyBzYXkgdG8gZG8gdGhpcy4gICovCgogICAgICBmb3IgKDs7KQoJ ewoJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsK CSAgQUREX0JMT0NLIChibG9ja19saXN0LCBkaXJuYW1lKTsKCgkgIF9fc2V0X2Vycm5vICgwKTsK CSAgcmV0ID0gZ2V0Y3dkIChkaXJuYW1lLCBwYXRoX21heCk7CgkgIGlmIChyZXQgIT0gTlVMTCB8 fCBlcnJubyAhPSBFUkFOR0UpCgkgICAgYnJlYWs7CgoJICBwYXRoX21heCArPSBwYXRoX21heCAv IDI7CgkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKCX0KCiAgICAgIGlmIChyZXQgPT0gTlVMTCkK CXsKCSAgLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERv bid0IHNpZ25hbCBhbgoJICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBz dHJpbmcuICAqLwoJICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CgkgIF9fbGliY19yd2xvY2tf dW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CgkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7Cgkg IHJldHVybiAocGx1cmFsID09IDAKCQkgID8gKGNoYXIgKikgbXNnaWQxCgkJICAvKiBVc2UgdGhl IEdlcm1hbmljIHBsdXJhbCBydWxlLiAgKi8KCQkgIDogbiA9PSAxID8gKGNoYXIgKikgbXNnaWQx IDogKGNoYXIgKikgbXNnaWQyKTsKCX0KCiAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRp cm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKICAgIH0KCiAgLyogTm93IGRl dGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8K ICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CiAgY2F0ZWdvcnl2 YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKCiAg ZG9tYWlubmFtZV9sZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpOwogIHhkb21haW5uYW1lID0gKGNo YXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKCQkJCSArIGRvbWFpbm5hbWVfbGVu ICsgNSk7CiAgQUREX0JMT0NLIChibG9ja19saXN0LCB4ZG9tYWlubmFtZSk7CgogIHN0cGNweSAo bWVtcGNweSAoc3RwY3B5IChzdHBjcHkgKHhkb21haW5uYW1lLCBjYXRlZ29yeW5hbWUpLCAiLyIp LAoJCSAgZG9tYWlubmFtZSwgZG9tYWlubmFtZV9sZW4pLAoJICAiLm1vIik7CgogIC8qIENyZWF0 aW5nIHdvcmtpbmcgYXJlYS4gICovCiAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAo c3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOwogIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2lu Z2xlX2xvY2FsZSk7CgoKICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlz IGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKICAgICBnb3QgYW4gb3JkZXJlZCBsaXN0IG9mIGxh bmd1YWdlcyB0byBjb25zaWRlciBmb3IgdGhlIHRyYW5zbGF0aW9uLiAgKi8KICB3aGlsZSAoMSkK ICAgIHsKICAgICAgLyogTWFrZSBDQVRFR09SWVZBTFVFIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1l bnQgb2YgdGhlIGxpc3QuICAqLwogICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAn ICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQoJKytjYXRlZ29yeXZhbHVlOwogICAgICBpZiAo Y2F0ZWdvcnl2YWx1ZVswXSA9PSAnXDAnKQoJewoJICAvKiBUaGUgd2hvbGUgY29udGVudHMgb2Yg Q0FURUdPUllWQUxVRSBoYXMgYmVlbiBzZWFyY2hlZCBidXQKCSAgICAgbm8gdmFsaWQgZW50cnkg aGFzIGJlZW4gZm91bmQuICBXZSBzb2x2ZSB0aGlzIHNpdHVhdGlvbgoJICAgICBieSBpbXBsaWNp dGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgoJICAgICB3aWxs IHRha2UgcGxhY2UuICAqLwoJICBzaW5nbGVfbG9jYWxlWzBdID0gJ0MnOwoJICBzaW5nbGVfbG9j YWxlWzFdID0gJ1wwJzsKCX0KICAgICAgZWxzZQoJewoJICBjaGFyICpjcCA9IHNpbmdsZV9sb2Nh bGU7CgkgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVsw XSAhPSAnOicpCgkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOwoJICAqY3AgPSAnXDAnOwoK CSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNz aW5nIGZpbGVzCgkgICAgIG91dHNpZGUgdGhlIGRlZGljYXRlZCBkaXJlY3Rvcmllcy4gICovCgkg IGlmIChFTkFCTEVfU0VDVVJFICYmIElTX1BBVEhfV0lUSF9ESVIgKHNpbmdsZV9sb2NhbGUpKQoJ ICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KCSAgICBjb250aW51ZTsKCX0KCiAgICAgIC8q IElmIHRoZSBjdXJyZW50IGxvY2FsZSB2YWx1ZSBpcyBDIChvciBQT1NJWCkgd2UgZG9uJ3QgbG9h ZCBhCgkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCiAgICAgIGlmIChzdHJjbXAgKHNp bmdsZV9sb2NhbGUsICJDIikgPT0gMAoJICB8fCBzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJQT1NJ WCIpID09IDApCgl7CgkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKCSAgX19saWJjX3J3bG9j a191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKCSAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsK CSAgcmV0dXJuIChwbHVyYWwgPT0gMAoJCSAgPyAoY2hhciAqKSBtc2dpZDEKCQkgIC8qIFVzZSB0 aGUgR2VybWFuaWMgcGx1cmFsIHJ1bGUuICAqLwoJCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dp ZDEgOiAoY2hhciAqKSBtc2dpZDIpOwoJfQoKCiAgICAgIC8qIEZpbmQgc3RydWN0dXJlIGRlc2Ny aWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBtYXRjaGluZyB0aGUKCSBET01BSU5OQU1FIGFuZCBD QVRFR09SWS4gICovCiAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2lu Z2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOwoKICAgICAgaWYgKGRvbWFpbiAhPSBO VUxMKQoJewoJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgbXNnaWQx LCAmcmV0bGVuKTsKCgkgIGlmIChyZXR2YWwgPT0gTlVMTCkKCSAgICB7CgkgICAgICBpbnQgY250 OwoKCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyAr K2NudCkKCQl7CgkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2Nu dF0sIGJpbmRpbmcsCgkJCQkJIG1zZ2lkMSwgJnJldGxlbik7CgoJCSAgaWYgKHJldHZhbCAhPSBO VUxMKQoJCSAgICB7CgkJICAgICAgZG9tYWluID0gZG9tYWluLT5zdWNjZXNzb3JbY250XTsKCQkg ICAgICBicmVhazsKCQkgICAgfQoJCX0KCSAgICB9CgoJICBpZiAocmV0dmFsICE9IE5VTEwpCgkg ICAgewoJICAgICAgLyogRm91bmQgdGhlIHRyYW5zbGF0aW9uIG9mIE1TR0lEMSBpbiBkb21haW4g RE9NQUlOOgoJCSBzdGFydGluZyBhdCBSRVRWQUwsIFJFVExFTiBieXRlcy4gICovCgkgICAgICBG UkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CgkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8p OwojaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQwoJICAgICAgaWYgKGZv dW5kcCA9PSBOVUxMKQoJCXsKCQkgIC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBhbmQgYWRkIGl0IHRv IHRoZSBzZWFyY2ggdHJlZS4gICovCgkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3 cDsKCgkJICBuZXdwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopCgkJICAgIG1hbGxv YyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKCQkJICAgICsg bXNnaWRfbGVuICsgZG9tYWlubmFtZV9sZW4gKyAxKTsKCQkgIGlmIChuZXdwICE9IE5VTEwpCgkJ ICAgIHsKCQkgICAgICBuZXdwLT5kb21haW5uYW1lID0KCQkJbWVtcGNweSAobmV3cC0+bXNnaWQs IG1zZ2lkMSwgbXNnaWRfbGVuKTsKCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRv bWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CgkJICAgICAgbmV3cC0+Y2F0ZWdvcnkgPSBj YXRlZ29yeTsKCQkgICAgICBuZXdwLT5jb3VudGVyID0gX25sX21zZ19jYXRfY250cjsKCQkgICAg ICBuZXdwLT5kb21haW4gPSBkb21haW47CgkJICAgICAgbmV3cC0+dHJhbnNsYXRpb24gPSByZXR2 YWw7CgkJICAgICAgbmV3cC0+dHJhbnNsYXRpb25fbGVuZ3RoID0gcmV0bGVuOwoKCQkgICAgICAv KiBJbnNlcnQgdGhlIGVudHJ5IGluIHRoZSBzZWFyY2ggdHJlZS4gICovCgkJICAgICAgZm91bmRw ID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKQoJCQl0c2VhcmNoIChuZXdwLCAmcm9v dCwgdHJhbnNjbXApOwoJCSAgICAgIGlmIChmb3VuZHAgPT0gTlVMTAoJCQkgIHx8IF9fYnVpbHRp bl9leHBlY3QgKCpmb3VuZHAgIT0gbmV3cCwgMCkpCgkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAg Ki8KCQkJZnJlZSAobmV3cCk7CgkJICAgIH0KCQl9CgkgICAgICBlbHNlCgkJewoJCSAgLyogV2Ug Y2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLwoJCSAgKCpmb3VuZHApLT5jb3VudGVy ID0gX25sX21zZ19jYXRfY250cjsKCQkgICgqZm91bmRwKS0+ZG9tYWluID0gZG9tYWluOwoJCSAg KCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKCQkgICgqZm91bmRwKS0+dHJhbnNsYXRp b25fbGVuZ3RoID0gcmV0bGVuOwoJCX0KI2VuZGlmCgkgICAgICAvKiBOb3cgZGVhbCB3aXRoIHBs dXJhbC4gICovCgkgICAgICBpZiAocGx1cmFsKQoJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRv bWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOwoKCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChf bmxfc3RhdGVfbG9jayk7CgkgICAgICByZXR1cm4gcmV0dmFsOwoJICAgIH0KCX0KICAgIH0KICAv KiBOT1RSRUFDSEVEICovCn0KCgpjaGFyICoKaW50ZXJuYWxfZnVuY3Rpb24KX25sX2ZpbmRfbXNn IChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZywgbXNnaWQsIGxlbmd0aHApCiAgICAgc3RydWN0 IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGU7CiAgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFp bmJpbmRpbmc7CiAgICAgY29uc3QgY2hhciAqbXNnaWQ7CiAgICAgc2l6ZV90ICpsZW5ndGhwOwp7 CiAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKICBzaXplX3QgYWN0OwogIGNoYXIgKnJl c3VsdDsKICBzaXplX3QgcmVzdWx0bGVuOwoKICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0g MCkKICAgIF9ubF9sb2FkX2RvbWFpbiAoZG9tYWluX2ZpbGUsIGRvbWFpbmJpbmRpbmcpOwoKICBp ZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKICAgIHJldHVybiBOVUxMOwoKICBkb21haW4g PSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CgogIC8qIExvY2F0 ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCiAgaWYgKGRvbWFpbi0+aGFzaF9z aXplID4gMiAmJiBkb21haW4tPmhhc2hfdGFiICE9IE5VTEwpCiAgICB7CiAgICAgIC8qIFVzZSB0 aGUgaGFzaGluZyB0YWJsZS4gICovCiAgICAgIG5sc191aW50MzIgbGVuID0gc3RybGVuIChtc2dp ZCk7CiAgICAgIG5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOwogICAg ICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CiAgICAgIG5s c191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7 CgogICAgICB3aGlsZSAoMSkKCXsKCSAgbmxzX3VpbnQzMiBuc3RyID0gVyAoZG9tYWluLT5tdXN0 X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CgoJICBpZiAobnN0ciA9PSAwKQoJICAgIC8q IEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLwoJICAgIHJldHVybiBOVUxMOwoKCSAgLyog Q29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci0xLgoJ ICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVy YWwgZW50cmllcwoJICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgc3RyaW5ncyB3aXRoIGFuIGVtYmVk ZGVkIE5VTC4gICovCgkgIGlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3Rh Yltuc3RyIC0gMV0ubGVuZ3RoKSA+PSBsZW4KCSAgICAgICYmIChzdHJjbXAgKG1zZ2lkLAoJCQkg IGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAoJCQkJCSAgICBkb21haW4tPm9y aWdfdGFiW25zdHIgLSAxXS5vZmZzZXQpKQoJCSAgPT0gMCkpCgkgICAgewoJICAgICAgYWN0ID0g bnN0ciAtIDE7CgkgICAgICBnb3RvIGZvdW5kOwoJICAgIH0KCgkgIGlmIChpZHggPj0gZG9tYWlu LT5oYXNoX3NpemUgLSBpbmNyKQoJICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7 CgkgIGVsc2UKCSAgICBpZHggKz0gaW5jcjsKCX0KICAgICAgLyogTk9UUkVBQ0hFRCAqLwogICAg fQogIGVsc2UKICAgIHsKICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBz ZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgoJIG1lc3NhZ2VzLiAgKi8KICAgICAgc2l6ZV90 IHRvcCwgYm90dG9tOwoKICAgICAgYm90dG9tID0gMDsKICAgICAgYWN0ID0gMDsKICAgICAgdG9w ID0gZG9tYWluLT5uc3RyaW5nczsKICAgICAgd2hpbGUgKGJvdHRvbSA8IHRvcCkKCXsKCSAgaW50 IGNtcF92YWw7CgoJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CgkgIGNtcF92YWwgPSBzdHJj bXAgKG1zZ2lkLCAoZG9tYWluLT5kYXRhCgkJCQkgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwK CQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKCSAgaWYgKGNtcF92YWwgPCAw KQoJICAgIHRvcCA9IGFjdDsKCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCgkgICAgYm90dG9tID0g YWN0ICsgMTsKCSAgZWxzZQoJICAgIGdvdG8gZm91bmQ7Cgl9CiAgICAgIC8qIE5vIHRyYW5zbGF0 aW9uIHdhcyBmb3VuZC4gICovCiAgICAgIHJldHVybiBOVUxMOwogICAgfQoKIGZvdW5kOgogIC8q IFRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQgYXQgaW5kZXggQUNULiAgSWYgd2UgaGF2ZSB0byBj b252ZXJ0IHRoZQogICAgIHN0cmluZyB0byB1c2UgYSBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldCwg dGhpcyBpcyB0aGUgdGltZS4gICovCiAgcmVzdWx0ID0gKChjaGFyICopIGRvbWFpbi0+ZGF0YQoJ ICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ub2Zmc2V0 KSk7CiAgcmVzdWx0bGVuID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFi W2FjdF0ubGVuZ3RoKSArIDE7CgojaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCiAgaWYg KGRvbWFpbi0+Y29kZXNldF9jbnRyCiAgICAgICE9IChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBk b21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKSkKICAgIHsKICAgICAgLyogVGhlIGRvbWFp bidzIGNvZGVzZXQgaGFzIGNoYW5nZWQgdGhyb3VnaCBiaW5kX3RleHRkb21haW5fY29kZXNldCgp Cgkgc2luY2UgdGhlIG1lc3NhZ2UgY2F0YWxvZyB3YXMgaW5pdGlhbGl6ZWQgb3IgbGFzdCBhY2Nl c3NlZC4gIFdlCgkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCiAgICAg IF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOwogICAgICBfbmxfaW5pdF9kb21haW5fY29u diAoZG9tYWluX2ZpbGUsIGRvbWFpbiwgZG9tYWluYmluZGluZyk7CiAgICB9CgogIGlmICgKIyBp ZmRlZiBfTElCQwogICAgICBkb21haW4tPmNvbnYgIT0gKF9fZ2NvbnZfdCkgLTEKIyBlbHNlCiMg IGlmIEhBVkVfSUNPTlYKICAgICAgZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMQojICBlbmRp ZgojIGVuZGlmCiAgICAgICkKICAgIHsKICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEg Y29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCgkgYXBwcm9wcmlhdGUgdGFibGUgd2l0aCB0 aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIHRhYmxlCgkgb2YgdHJhbnNsYXRpb25zIGluIHRoZSBm aWxlLCB3aGVyZSB3ZSBjYW4gcHV0IHRoZSBwb2ludGVycwoJIHRvIHRoZSBjb252ZXJ0ZWQgc3Ry aW5ncyBpbi4KCSBUaGVyZSBpcyBhIHNsaWdodCBjb21wbGljYXRpb24gd2l0aCBwbHVyYWwgZW50 cmllcy4gIFRoZXkKCSBhcmUgcmVwcmVzZW50ZWQgYnkgY29uc2VjdXRpdmUgTlVMIHRlcm1pbmF0 ZWQgc3RyaW5ncy4gIFdlCgkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExF TiBieXRlcywgaW5jbHVkaW5nCgkgTlVMcy4gICovCgogICAgICBpZiAoZG9tYWluLT5jb252X3Rh YiA9PSBOVUxMCgkgICYmICgoZG9tYWluLT5jb252X3RhYiA9IChjaGFyICoqKSBjYWxsb2MgKGRv bWFpbi0+bnN0cmluZ3MsCgkJCQkJCSAgICBzaXplb2YgKGNoYXIgKikpKQoJICAgICAgPT0gTlVM TCkpCgkvKiBNYXJrIHRoYXQgd2UgZGlkbid0IHN1Y2NlZWQgYWxsb2NhdGluZyBhIHRhYmxlLiAg Ki8KCWRvbWFpbi0+Y29udl90YWIgPSAoY2hhciAqKikgLTE7CgogICAgICBpZiAoX19idWlsdGlu X2V4cGVjdCAoZG9tYWluLT5jb252X3RhYiA9PSAoY2hhciAqKikgLTEsIDApKQoJLyogTm90aGlu ZyB3ZSBjYW4gZG8sIG5vIG1vcmUgbWVtb3J5LiAgKi8KCWdvdG8gY29udmVydGVkOwoKICAgICAg aWYgKGRvbWFpbi0+Y29udl90YWJbYWN0XSA9PSBOVUxMKQoJewoJICAvKiBXZSBoYXZlbid0IHVz ZWQgdGhpcyBzdHJpbmcgc28gZmFyLCBzbyBpdCBpcyBub3QKCSAgICAgdHJhbnNsYXRlZCB5ZXQu ICBEbyB0aGlzIG5vdy4gICovCgkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1v cnkgaGFuZGxpbmcuCgkgICAgIFdlIGFsbG9jYXRlIGFsd2F5cyBsYXJnZXIgYmxvY2tzIHdoaWNo IGdldCB1c2VkIG92ZXIKCSAgICAgdGltZS4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWFueSBzbWFs bCBhbGxvY2F0aW9ucy4gICAqLwoJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0 YXRpYywgbG9jaykKIyBkZWZpbmUgSU5JVElBTF9CTE9DS19TSVpFCTQwODAKCSAgc3RhdGljIHVu c2lnbmVkIGNoYXIgKmZyZWVtZW07CgkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOwoKCSAg Y29uc3QgdW5zaWduZWQgY2hhciAqaW5idWY7CgkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKCSAg aW50IG1hbGxvY19jb3VudDsKIyBpZm5kZWYgX0xJQkMKCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJh bnNtZW1fbGlzdCA9IE5VTEw7CiMgZW5kaWYKCgkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOwoK CSAgaW5idWYgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZXN1bHQ7CgkgIG91dGJ1ZiA9IGZy ZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CgoJICBtYWxsb2NfY291bnQgPSAwOwoJICB3aGlsZSAo MSkKCSAgICB7CgkgICAgICB0cmFuc21lbV9ibG9ja190ICpuZXdtZW07CiMgaWZkZWYgX0xJQkMK CSAgICAgIHNpemVfdCBub25fcmV2ZXJzaWJsZTsKCSAgICAgIGludCByZXM7CgoJICAgICAgaWYg KGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKCQlnb3RvIHJlc2l6ZV9mcmVlbWVtOwoK CSAgICAgIHJlcyA9IF9fZ2NvbnYgKGRvbWFpbi0+Y29udiwKCQkJICAgICAmaW5idWYsIGluYnVm ICsgcmVzdWx0bGVuLAoJCQkgICAgICZvdXRidWYsCgkJCSAgICAgb3V0YnVmICsgZnJlZW1lbV9z aXplIC0gc2l6ZW9mIChzaXplX3QpLAoJCQkgICAgICZub25fcmV2ZXJzaWJsZSk7CgoJICAgICAg aWYgKHJlcyA9PSBfX0dDT05WX09LIHx8IHJlcyA9PSBfX0dDT05WX0VNUFRZX0lOUFVUKQoJCWJy ZWFrOwoKCSAgICAgIGlmIChyZXMgIT0gX19HQ09OVl9GVUxMX09VVFBVVCkKCQl7CgkJICBfX2xp YmNfbG9ja191bmxvY2sgKGxvY2spOwoJCSAgZ290byBjb252ZXJ0ZWQ7CgkJfQoKCSAgICAgIGlu YnVmID0gcmVzdWx0OwojIGVsc2UKIyAgaWYgSEFWRV9JQ09OVgoJICAgICAgY29uc3QgY2hhciAq aW5wdHIgPSAoY29uc3QgY2hhciAqKSBpbmJ1ZjsKCSAgICAgIHNpemVfdCBpbmxlZnQgPSByZXN1 bHRsZW47CgkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CgkgICAgICBzaXpl X3Qgb3V0bGVmdDsKCgkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQoJ CWdvdG8gcmVzaXplX2ZyZWVtZW07CgoJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNp emVvZiAoc2l6ZV90KTsKCSAgICAgIGlmIChpY29udiAoZG9tYWluLT5jb252LAoJCQkgKElDT05W X0NPTlNUIGNoYXIgKiopICZpbnB0ciwgJmlubGVmdCwKCQkJICZvdXRwdHIsICZvdXRsZWZ0KQoJ CSAgIT0gKHNpemVfdCkgKC0xKSkKCQl7CgkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBv dXRwdHI7CgkJICBicmVhazsKCQl9CgkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCgkJewoJCSAg X19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKCQkgIGdvdG8gY29udmVydGVkOwoJCX0KIyAgZW5k aWYKIyBlbmRpZgoKCSAgICByZXNpemVfZnJlZW1lbToKCSAgICAgIC8qIFdlIG11c3QgYWxsb2Nh dGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCgkgICAgICBpZiAobWFs bG9jX2NvdW50ID4gMCkKCQl7CgkJICArK21hbGxvY19jb3VudDsKCQkgIGZyZWVtZW1fc2l6ZSA9 IG1hbGxvY19jb3VudCAqIElOSVRJQUxfQkxPQ0tfU0laRTsKCQkgIG5ld21lbSA9ICh0cmFuc21l bV9ibG9ja190ICopIHJlYWxsb2MgKHRyYW5zbWVtX2xpc3QsCgkJCQkJCQkgZnJlZW1lbV9zaXpl KTsKIyBpZmRlZiBfTElCQwoJCSAgaWYgKG5ld21lbSAhPSBOVUxMKQoJCSAgICB0cmFuc21lbV9s aXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKCQkgIGVsc2UKCQkgICAgewoJCSAgICAgIHN0cnVj dCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OwoKCQkgICAgICB0cmFuc21lbV9s aXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKCQkgICAgICBmcmVlIChvbGQpOwoJCSAgICB9CiMg ZW5kaWYKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgbWFsbG9jX2NvdW50ID0gMTsKCQkgIGZyZWVt ZW1fc2l6ZSA9IElOSVRJQUxfQkxPQ0tfU0laRTsKCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9j a190ICopIG1hbGxvYyAoZnJlZW1lbV9zaXplKTsKCQl9CgkgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdCAobmV3bWVtID09IE5VTEwsIDApKQoJCXsKCQkgIGZyZWVtZW0gPSBOVUxMOwoJCSAgZnJl ZW1lbV9zaXplID0gMDsKCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CgkJICBnb3RvIGNv bnZlcnRlZDsKCQl9CgojIGlmZGVmIF9MSUJDCgkgICAgICAvKiBBZGQgdGhlIGJsb2NrIHRvIHRo ZSBsaXN0IG9mIGJsb2NrcyB3ZSBoYXZlIHRvIGZyZWUKICAgICAgICAgICAgICAgICBhdCBzb21l IHBvaW50LiAgKi8KCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CgkgICAgICB0 cmFuc21lbV9saXN0ID0gbmV3bWVtOwoKCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7Cgkg ICAgICBmcmVlbWVtX3NpemUgLT0gb2Zmc2V0b2YgKHN0cnVjdCB0cmFuc21lbV9saXN0LCBkYXRh KTsKIyBlbHNlCgkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOwoJICAgICAgZnJlZW1lbSA9 IG5ld21lbTsKIyBlbmRpZgoKCSAgICAgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVf dCk7CgkgICAgfQoKCSAgLyogV2UgaGF2ZSBub3cgaW4gb3VyIGJ1ZmZlciBhIGNvbnZlcnRlZCBz dHJpbmcuICBQdXQgdGhpcwoJICAgICBpbnRvIHRoZSB0YWJsZSBvZiBjb252ZXJzaW9ucy4gICov CgkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXpl X3QpOwoJICBkb21haW4tPmNvbnZfdGFiW2FjdF0gPSAoY2hhciAqKSBmcmVlbWVtOwoJICAvKiBT aHJpbmsgZnJlZW1lbSwgYnV0IGtlZXAgaXQgYWxpZ25lZC4gICovCgkgIGZyZWVtZW1fc2l6ZSAt PSBvdXRidWYgLSBmcmVlbWVtOwoJICBmcmVlbWVtID0gb3V0YnVmOwoJICBmcmVlbWVtICs9IGZy ZWVtZW1fc2l6ZSAmIChhbGlnbm9mIChzaXplX3QpIC0gMSk7CgkgIGZyZWVtZW1fc2l6ZSA9IGZy ZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKCgkgIF9fbGliY19sb2NrX3Vu bG9jayAobG9jayk7Cgl9CgogICAgICAvKiBOb3cgZG9tYWluLT5jb252X3RhYlthY3RdIGNvbnRh aW5zIHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwKCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KICAg ICAgcmVzdWx0ID0gZG9tYWluLT5jb252X3RhYlthY3RdICsgc2l6ZW9mIChzaXplX3QpOwogICAg ICByZXN1bHRsZW4gPSAqKHNpemVfdCAqKSBkb21haW4tPmNvbnZfdGFiW2FjdF07CiAgICB9Cgog Y29udmVydGVkOgogIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCgojZW5k aWYgLyogX0xJQkMgfHwgSEFWRV9JQ09OViAqLwoKICAqbGVuZ3RocCA9IHJlc3VsdGxlbjsKICBy ZXR1cm4gcmVzdWx0Owp9CgoKLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8Kc3RhdGlj IGNoYXIgKgppbnRlcm5hbF9mdW5jdGlvbgpwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHRyYW5z bGF0aW9uLCB0cmFuc2xhdGlvbl9sZW4pCiAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9t YWluOwogICAgIHVuc2lnbmVkIGxvbmcgaW50IG47CiAgICAgY29uc3QgY2hhciAqdHJhbnNsYXRp b247CiAgICAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbjsKewogIHN0cnVjdCBsb2FkZWRfZG9tYWlu ICpkb21haW5kYXRhID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbi0+ZGF0YTsKICB1 bnNpZ25lZCBsb25nIGludCBpbmRleDsKICBjb25zdCBjaGFyICpwOwoKICBpbmRleCA9IHBsdXJh bF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOwogIGlmIChpbmRleCA+PSBkb21haW5kYXRh LT5ucGx1cmFscykKICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0IG1lYW5zIHRo ZSBwbHVyYWwgZXhwcmVzc2lvbiBhbmQgdGhlCiAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRv IG5vdCBtYXRjaC4gICovCiAgICBpbmRleCA9IDA7CgogIC8qIFNraXAgSU5ERVggc3RyaW5ncyBh dCBUUkFOU0xBVElPTi4gICovCiAgcCA9IHRyYW5zbGF0aW9uOwogIHdoaWxlIChpbmRleC0tID4g MCkKICAgIHsKI2lmZGVmIF9MSUJDCiAgICAgIHAgPSBfX3Jhd21lbWNociAocCwgJ1wwJyk7CiNl bHNlCiAgICAgIHAgPSBzdHJjaHIgKHAsICdcMCcpOwojZW5kaWYKICAgICAgLyogQW5kIHNraXAg b3ZlciB0aGUgTlVMIGJ5dGUuICAqLwogICAgICBwKys7CgogICAgICBpZiAocCA+PSB0cmFuc2xh dGlvbiArIHRyYW5zbGF0aW9uX2xlbikKCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0 IG1lYW5zIHRoZSBwbHVyYWwgZXhwcmVzc2lvbgoJICAgZXZhbHVhdGVkIHRvIGEgdmFsdWUgbGFy Z2VyIHRoYW4gdGhlIG51bWJlciBvZiB2YXJpYW50cwoJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEu ICAqLwoJcmV0dXJuIChjaGFyICopIHRyYW5zbGF0aW9uOwogICAgfQogIHJldHVybiAoY2hhciAq KSBwOwp9CgoKLyogRnVuY3Rpb24gdG8gZXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFu ZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLwpzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQKaW50 ZXJuYWxfZnVuY3Rpb24KcGx1cmFsX2V2YWwgKHBleHAsIG4pCiAgICAgc3RydWN0IGV4cHJlc3Np b24gKnBleHA7CiAgICAgdW5zaWduZWQgbG9uZyBpbnQgbjsKewogIHN3aXRjaCAocGV4cC0+bmFy Z3MpCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQoJewoJ Y2FzZSB2YXI6CgkgIHJldHVybiBuOwoJY2FzZSBudW06CgkgIHJldHVybiBwZXhwLT52YWwubnVt OwoJZGVmYXVsdDoKCSAgYnJlYWs7Cgl9CiAgICAgIC8qIE5PVFJFQUNIRUQgKi8KICAgICAgYnJl YWs7CiAgICBjYXNlIDE6CiAgICAgIHsKCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIGxub3Qu ICAqLwoJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdz WzBdLCBuKTsKCXJldHVybiAhIGFyZzsKICAgICAgfQogICAgY2FzZSAyOgogICAgICB7Cgl1bnNp Z25lZCBsb25nIGludCBsZWZ0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBu KTsKCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQoJICByZXR1cm4gbGVmdGFyZyB8fCBwbHVy YWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOwoJZWxzZSBpZiAocGV4cC0+b3BlcmF0aW9u ID09IGxhbmQpCgkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJn c1sxXSwgbik7CgllbHNlCgkgIHsKCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBs dXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CgoJICAgIHN3aXRjaCAocGV4cC0+b3Bl cmF0aW9uKQoJICAgICAgewoJICAgICAgY2FzZSBtdWx0OgoJCXJldHVybiBsZWZ0YXJnICogcmln aHRhcmc7CgkgICAgICBjYXNlIGRpdmlkZToKCQlyZXR1cm4gbGVmdGFyZyAvIHJpZ2h0YXJnOwoJ ICAgICAgY2FzZSBtb2R1bGU6CgkJcmV0dXJuIGxlZnRhcmcgJSByaWdodGFyZzsKCSAgICAgIGNh c2UgcGx1czoKCQlyZXR1cm4gbGVmdGFyZyArIHJpZ2h0YXJnOwoJICAgICAgY2FzZSBtaW51czoK CQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOwoJICAgICAgY2FzZSBsZXNzX3RoYW46CgkJcmV0 dXJuIGxlZnRhcmcgPCByaWdodGFyZzsKCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgoJCXJldHVy biBsZWZ0YXJnID4gcmlnaHRhcmc7CgkgICAgICBjYXNlIGxlc3Nfb3JfZXF1YWw6CgkJcmV0dXJu IGxlZnRhcmcgPD0gcmlnaHRhcmc7CgkgICAgICBjYXNlIGdyZWF0ZXJfb3JfZXF1YWw6CgkJcmV0 dXJuIGxlZnRhcmcgPj0gcmlnaHRhcmc7CgkgICAgICBjYXNlIGVxdWFsOgoJCXJldHVybiBsZWZ0 YXJnID09IHJpZ2h0YXJnOwoJICAgICAgY2FzZSBub3RfZXF1YWw6CgkJcmV0dXJuIGxlZnRhcmcg IT0gcmlnaHRhcmc7CgkgICAgICBkZWZhdWx0OgoJCWJyZWFrOwoJICAgICAgfQoJICB9CgkvKiBO T1RSRUFDSEVEICovCglicmVhazsKICAgICAgfQogICAgY2FzZSAzOgogICAgICB7CgkvKiBwZXhw LT5vcGVyYXRpb24gbXVzdCBiZSBxbW9wLiAgKi8KCXVuc2lnbmVkIGxvbmcgaW50IGJvb2xhcmcg PSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOwoJcmV0dXJuIHBsdXJhbF9ldmFs IChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKICAgICAgfQogICAgfQogIC8q IE5PVFJFQUNIRUQgKi8KICByZXR1cm4gMDsKfQoKCi8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50 YXRpb24gb2YgbG9jYWxlIENBVEVHT1JZLiAgKi8Kc3RhdGljIGNvbnN0IGNoYXIgKgppbnRlcm5h bF9mdW5jdGlvbgpjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSkKICAgICBpbnQgY2F0ZWdvcnk7 CnsKICBjb25zdCBjaGFyICpyZXR2YWw7CgogIHN3aXRjaCAoY2F0ZWdvcnkpCiAgewojaWZkZWYg TENfQ09MTEFURQogIGNhc2UgTENfQ09MTEFURToKICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsK ICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExDX0NUWVBFCiAgY2FzZSBMQ19DVFlQRToKICAgIHJl dHZhbCA9ICJMQ19DVFlQRSI7CiAgICBicmVhazsKI2VuZGlmCiNpZmRlZiBMQ19NT05FVEFSWQog IGNhc2UgTENfTU9ORVRBUlk6CiAgICByZXR2YWwgPSAiTENfTU9ORVRBUlkiOwogICAgYnJlYWs7 CiNlbmRpZgojaWZkZWYgTENfTlVNRVJJQwogIGNhc2UgTENfTlVNRVJJQzoKICAgIHJldHZhbCA9 ICJMQ19OVU1FUklDIjsKICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExDX1RJTUUKICBjYXNlIExD X1RJTUU6CiAgICByZXR2YWwgPSAiTENfVElNRSI7CiAgICBicmVhazsKI2VuZGlmCiNpZmRlZiBM Q19NRVNTQUdFUwogIGNhc2UgTENfTUVTU0FHRVM6CiAgICByZXR2YWwgPSAiTENfTUVTU0FHRVMi OwogICAgYnJlYWs7CiNlbmRpZgojaWZkZWYgTENfUkVTUE9OU0UKICBjYXNlIExDX1JFU1BPTlNF OgogICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExD X0FMTAogIGNhc2UgTENfQUxMOgogICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQg aXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKICAgICAgIHZhbHVlLiAgKi8KICAgIHJl dHZhbCA9ICJMQ19BTEwiOwogICAgYnJlYWs7CiNlbmRpZgogIGRlZmF1bHQ6CiAgICAvKiBJZiB5 b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAq LwogICAgcmV0dmFsID0gIkxDX1hYWCI7CiAgfQoKICByZXR1cm4gcmV0dmFsOwp9CgovKiBHdWVz cyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2 YXJpYWJsZXMuICAqLwpzdGF0aWMgY29uc3QgY2hhciAqCmludGVybmFsX2Z1bmN0aW9uCmd1ZXNz X2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQogICAgIGludCBjYXRlZ29y eTsKICAgICBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWU7CnsKICBjb25zdCBjaGFyICpsYW5ndWFn ZTsKICBjb25zdCBjaGFyICpyZXR2YWw7CiAgKHZvaWQpIGNhdGVnb3J5OyAgLyogc2h1dCB1cCBj b21waWxlciAqLwogICh2b2lkKSBjYXRlZ29yeW5hbWU7ICAvKiBkaXR0byAqLwogIAogIC8qIFRo ZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CiAg ICAgdmFyaWFibGUuICBCdXQgd2UgZG9uJ3QgdXNlIHRoZSB2YWx1ZSBpZiB0aGUgY3VycmVudGx5 IHNlbGVjdGVkCiAgICAgbG9jYWxlIGlzIHRoZSBDIGxvY2FsZS4gIFRoaXMgaXMgYSBHTlUgZXh0 ZW5zaW9uLiAgKi8KICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CiAgaWYgKGxhbmd1 YWdlICE9IE5VTEwgJiYgbGFuZ3VhZ2VbMF0gPT0gJ1wwJykKICAgIGxhbmd1YWdlID0gTlVMTDsK CiAgLyogV2UgaGF2ZSB0byBwcm9jZWVkIHdpdGggdGhlIFBPU0lYIG1ldGhvZHMgb2YgbG9va2lu ZyB0byBgTENfQUxMJywKICAgICBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUgc3lzdGVt cyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZQogICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2Vs Zi4gICovCiNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfU0VUTE9DQUxFICYmIGRl ZmluZWQgSEFWRV9MQ19NRVNTQUdFUyAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwpCiAgcmV0 dmFsID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCk7CiNlbHNlCiAgLyogU2V0dGluZyBvZiBM Q19BTEwgb3ZlcndyaXRlcyBhbGwgb3RoZXIuICAqLwogIHJldHZhbCA9IGdldGVudiAoIkxDX0FM TCIpOwogIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKICAgIHsKICAg ICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCiAg ICAgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKICAgICAgaWYgKHJldHZhbCA9PSBO VUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQoJewoJICAvKiBMYXN0IHBvc3NpYmlsaXR5IGlzIHRo ZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KCSAgcmV0dmFsID0gZ2V0ZW52ICgiTEFO RyIpOwoJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCgkgICAgLyog V2UgdXNlIEMgYXMgdGhlIGRlZmF1bHQgZG9tYWluLiAgUE9TSVggc2F5cyB0aGlzIGlzCgkgICAg ICAgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gICovCgkgICAgcmV0dXJuICJDIjsKCX0KICAgIH0K I2VuZGlmCgogIHJldHVybiBsYW5ndWFnZSAhPSBOVUxMICYmIHN0cmNtcCAocmV0dmFsLCAiQyIp ICE9IDAgPyBsYW5ndWFnZSA6IHJldHZhbDsKfQoKLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICov CgovKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJh cnkuICBTbyB3ZQogICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIElu IEdOVSBDIExpYnJhcnkgdGhpcwogICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFs c28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQogICB0byBiZSBkZWZpbmVkLiAgKi8KI2lm ICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKc3RhdGljIGNoYXIgKgpzdHBjcHkgKGRlc3QsIHNyYykK ICAgICBjaGFyICpkZXN0OwogICAgIGNvbnN0IGNoYXIgKnNyYzsKewogIHdoaWxlICgoKmRlc3Qr KyA9ICpzcmMrKykgIT0gJ1wwJykKICAgIC8qIERvIG5vdGhpbmcuICovIDsKICByZXR1cm4gZGVz dCAtIDE7Cn0KI2VuZGlmCgojaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKc3RhdGljIHZvaWQg KgptZW1wY3B5IChkZXN0LCBzcmMsIG4pCiAgICAgdm9pZCAqZGVzdDsKICAgICBjb25zdCB2b2lk ICpzcmM7CiAgICAgc2l6ZV90IG47CnsKICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNw eSAoZGVzdCwgc3JjLCBuKSArIG4pOwp9CiNlbmRpZgoKCiNpZmRlZiBfTElCQwovKiBJZiB3ZSB3 YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAogICBw cm9ncmFtJ3MgZW5kLiAgKi8Kc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCmZy ZWVfbWVtICh2b2lkKQp7CiAgdm9pZCAqb2xkOwoKICB3aGlsZSAoX25sX2RvbWFpbl9iaW5kaW5n cyAhPSBOVUxMKQogICAgewogICAgICBzdHJ1Y3QgYmluZGluZyAqb2xkcCA9IF9ubF9kb21haW5f YmluZGluZ3M7CiAgICAgIF9ubF9kb21haW5fYmluZGluZ3MgPSBfbmxfZG9tYWluX2JpbmRpbmdz LT5uZXh0OwogICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQoJ LyogWWVzLCB0aGlzIGlzIGEgcG9pbnRlciBjb21wYXJpc29uLiAgKi8KCWZyZWUgKG9sZHAtPmRp cm5hbWUpOwogICAgICBmcmVlIChvbGRwLT5jb2Rlc2V0KTsKICAgICAgZnJlZSAob2xkcCk7CiAg ICB9CgogIGlmIChfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZh dWx0X2RvbWFpbikKICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLwog ICAgZnJlZSAoKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4pOwoKICAvKiBSZW1v dmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCiAgX190 ZGVzdHJveSAocm9vdCwgZnJlZSk7CiAgcm9vdCA9IE5VTEw7CgogIHdoaWxlICh0cmFuc21lbV9s aXN0ICE9IE5VTEwpCiAgICB7CiAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CiAgICAgIHRyYW5z bWVtX2xpc3QgPSB0cmFuc21lbV9saXN0LT5uZXh0OwogICAgICBmcmVlIChvbGQpOwogICAgfQp9 Cgp0ZXh0X3NldF9lbGVtZW50IChfX2xpYmNfc3ViZnJlZXJlcywgZnJlZV9tZW0pOwojZW5kaWYK