From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Alex Riesen" Subject: Re: Yet another Perforce importer Date: Thu, 10 May 2007 15:37:18 +0200 Message-ID: <81b0412b0705100637g1072f5c7y54f781b67a569690@mail.gmail.com> References: <20070505224805.GD2898@steel.home> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_161334_16804840.1178804238300" To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Thu May 10 15:37:36 2007 Return-path: Envelope-to: gcvg-git@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1Hm8pq-0006Er-Uv for gcvg-git@gmane.org; Thu, 10 May 2007 15:37:35 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755344AbXEJNhW (ORCPT ); Thu, 10 May 2007 09:37:22 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757777AbXEJNhV (ORCPT ); Thu, 10 May 2007 09:37:21 -0400 Received: from an-out-0708.google.com ([209.85.132.242]:61806 "EHLO an-out-0708.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755344AbXEJNhT (ORCPT ); Thu, 10 May 2007 09:37:19 -0400 Received: by an-out-0708.google.com with SMTP id d18so141206and for ; Thu, 10 May 2007 06:37:18 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=kJ1jT9yuJ/hWP2rGRaugsCpKYoAaBuse/UUaQ9rB83pzlCjXqX1nK8fuAhzRQ+kVEPU8g200sZFCV3RNeg6VV3jY3VsX+pOC8iK+YlicYvmzmW+4jPyddp33bybs1Y3RyCCxu4R0RAGN0Tvrx6rXXH1gOHmAyDPKqMHyybWlAGY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=EC1lfBdoIB9OZ72CtwSNGgIsBJxkA7yiBCgnknAR5vCNUYhVb5UUBD1AQxcU2CfkiRDYasNHqAlDNcPQseSCRDVSlYPl2tGZIV4UxN0+BpQMz1N9kZTMRz5FjWxyiky0sWRqYY/JGqDINFryhJF6LRbxsDZg2UwHC5hyQ1JXMQ0= Received: by 10.100.207.16 with SMTP id e16mr246625ang.1178804238371; Thu, 10 May 2007 06:37:18 -0700 (PDT) Received: by 10.100.225.3 with HTTP; Thu, 10 May 2007 06:37:18 -0700 (PDT) In-Reply-To: <20070505224805.GD2898@steel.home> Sender: git-owner@vger.kernel.org Precedence: bulk X-Mailing-List: git@vger.kernel.org Archived-At: ------=_Part_161334_16804840.1178804238300 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Updated. A very bad bug fixed (the old script cut the imported history from the previous history on first import). And I'm sorry for txt (and for .bat). ------=_Part_161334_16804840.1178804238300 Content-Type: text/plain; name=git-p4-import.bat.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f1j9kzwb Content-Disposition: attachment; filename="git-p4-import.bat.txt" QHJlbSA9ICdOVDogQ01ELkVYRSB2aW06IHN5bnRheD1wZXJsIG5vZXQgc3c9NApAcGVybCAteCAt cyAlMCAtLSAlKgpAZXhpdApAcmVtICc7CiMhcGVybCAtdwojbGluZSA3Cgpsb2NhbCAkVkVSQk9T RSA9IDA7CmxvY2FsICREUllSVU4gPSAwOwpsb2NhbCAkQVVUT19DT01NSVQgPSAwOwpsb2NhbCAk SlVTVF9DT01NSVQgPSAwOwpsb2NhbCAkUDRDTElFTlQgPSB1bmRlZjsKbG9jYWwgQEVESVRfQ09N TUlUID0gMDsKbG9jYWwgQEZVTExfSU1QT1JUID0gMDsKbG9jYWwgQERFU0MgPSAoKTsKbG9jYWwg JFNQRUMgPSB1bmRlZjsKbG9jYWwgQFA0QVJHUyA9ICgpOwpsb2NhbCAkUDRIQVZFX0ZJTEUgPSB1 bmRlZjsKbG9jYWwgJVA0VVNFUlMgPSAoKTsKbG9jYWwgJEZVTExfREVTQyA9IDE7CnB1c2goQFA0 QVJHUywgJy1QJywgJEVOVntQNFBBU1NXRH0pCiAgICBpZiBkZWZpbmVkKCRFTlZ7UDRQQVNTV0R9 KSBhbmQgbGVuZ3RoKCRFTlZ7UDRQQVNTV0R9KTsKdXNlIEN3ZDsKbG9jYWwgJHN0YXJ0X2RpciA9 IGN3ZCgpOwoKc3ViIHJlYWRfYXJncyB7CiAgICBteSAoJGluX2NsaWVudCwgJGluX2NsLCAkaW5f ZmksICRpbl9wNCkgPSAoMCwwLDAsMCk7CiAgICBmb3JlYWNoIG15ICRmICggQF8gKSB7CglpZiAo JGluX2NsaWVudCkgeyAkaW5fY2xpZW50ID0gMDsgJFA0Q0xJRU5UID0gJGY7IG5leHQgfQoJaWYg KCRpbl9jbCkgeyAkaW5fY2w9MDsgcHVzaChAREVTQywiYyRmIik7IG5leHQgfQoJaWYgKCRpbl9m aSkgeyAkaW5fZmk9MDsgcHVzaChAREVTQywiZiRmIik7IG5leHQgfQoJaWYgKCRpbl9wNCkgeyAk aW5fcDQ9MDsgcHVzaChAREVTQywiNCRmIik7IG5leHQgfQoJJERSWVJVTj0xLCBuZXh0IGlmICRm IGVxICctbicgb3IgJGYgZXEgJy0tZHJ5LXJ1bic7CgkkQVVUT19DT01NSVQ9MSwgbmV4dCBpZiAk ZiBlcSAnLXknIG9yICRmIGVxICctLXllcyc7CgkkSlVTVF9DT01NSVQ9MSwgbmV4dCBpZiAkZiBl cSAnLS1qdXN0LWNvbW1pdCc7CgkkRURJVF9DT01NSVQ9MSwgbmV4dCBpZiAoJGYgZXEgJy1lJykg b3IgKCRmIGVxICctLWVkaXQnKTsKCSRGVUxMX0lNUE9SVD0xLCBuZXh0IGlmICRmIGVxICctLWZ1 bGwnOwoJJEZVTExfREVTQysrLCBuZXh0IGlmICRmIGVxICctLXA0LWRlc2MnOwoJJFZFUkJPU0Ur KywgbmV4dCBpZiAkZiBlcSAnLXYnIG9yICRmIGVxICctLXZlcmJvc2UnOwoJJGluX2NsaWVudCA9 IDEsIG5leHQgaWYgJGYgZXEgJy0tY2xpZW50JzsKCSRpbl9jbCA9IDEsIG5leHQgaWYgJGYgZXEg Jy1DJzsKCSRpbl9maSA9IDEsIG5leHQgaWYgJGYgZXEgJy1GJzsKCSRpbl9wNCA9IDEsIG5leHQg aWYgKCRmIGVxICctLXB0cicpIG9yICgkZiBlcSAnLS1wNCcpOwoJaWYgKCRmIGVxICctLWhlbHAn IG9yICRmIGVxICctaCcpIHsKCSAgICBwcmludCA8PEVPRjsKJDAgPHNwZWNpZmljYXRpb24+IFst bnwtLWRyeS1ydW5dIFsteXwtLXllc10gWy0tY2xpZW50IDxjbGllbnQtbmFtZT5dIFwKWy1lfC0t ZWRpdF0gWy0tanVzdC1jb21taXRdIFstLWZ1bGxdIFstdnwtLXZlcmJvc2VdIFstQyA8Y2hhbmdl LW51bWJlcj5dIFwKWy1GIDxmaWxlbmFtZT5dIFstLXB0cnwtLXA0IDxwNC1wYXRoLWFuZC9vci1y ZXZpc2lvbj5dIFstLXA0LWRlc2NdCgpQZXJmb3JjZSBjbGllbnQgc3RhdGUgaW1wb3J0ZXIuIENy ZWF0ZXMgYSBnaXQgY29tbWl0IG9uIHRoZSBjdXJyZW50CmJyYW5jaCBmcm9tIGEgc3RhdGUgdGhl IGdpdmVuIHA0IGNsaWVudCBhbmQgd29ya2luZyBkaXJlY3RvcnkgaG9sZC4KCjxzcGVjaWZpY2F0 aW9uPiBtdXN0IGJlIGdpdmVuIGFuZCBpcyBleHBlY3RlZCB0byBiZSBhIGZpbGUgd2hpY2ggd2ls bCBiZQpzdG9yZWQgb24gdGhlIHNpZGUgYnJhbmNoIHVuZGVyIHRoZSBuYW1lICJzcGVjIi4KUmVt b3RlLXRvLWxvY2FsIG1hcHBpbmcgYW5kIHRoZSByZXZpc2lvbnMgb2YgZmlsZXMgYXJlIHN0b3Jl ZCBpbiAiaGF2ZSIsCmFuZCB0aGUgY2xpZW50IGRlZmluaXRpb24gLSBpbiAiY2xpZW50Ii4KCi0t Y2xpZW50IGNsaWVudCBTcGVjaWZ5IGNsaWVudCBuYW1lIChzYXZlZCBpbiAuZ2l0L3A0L2NsaWVu dCBmb3IgdGhlIG5leHQgdGltZSkKLS1mdWxsICAgICAgICAgIFBlcmZvcm0gZnVsbCBpbXBvcnQs IGRvbid0IGV2ZW4gdHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCBjaGFuZ2VkCi15fC0teWVzICAgICAg ICBDb21taXQgYXV0b21hdGljYWxseSAoYnkgZGVmYXVsdCBvbmx5IGluZGV4IHVwZGF0ZWQpCi0t anVzdC1jb21taXQgICBUbyBiZSB1c2VkIGFmdGVyIHlvdSBmb3Jnb3QgdG8gcnVuIHdpdGggLS15 ZXMgZmlyc3QgdGltZQotbnwtLWRyeS1ydW4gICAgRG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggYW5k IGRvIG5vdCBjb21taXQKLWV8LS1lZGl0ICAgICAgIEVkaXQgY29tbWl0IGRlc2NyaXB0aW9uIGJl Zm9yZSBjb21taXR0aW5nCi12fC0tdmVyYm9zZSAgICBCZSBtb3JlIHZlcmJvc2UuIENhbiBiZSBn aXZlbiBtYW55IHRpbWVzLCBpbmNyZWFzZXMgdmVyYm9zaXR5Ci1GIGZpbGUgICAgICAgICBUYWtl IGRlc2NyaXB0aW9uIGZvciB0aGUgY29tbWl0IGZyb20gYSBmaWxlIGluIHRoZQogICAgICAgICAg ICAgICAgbmV4dCBwYXJhbWV0ZXIKLUMgY2hhbmdlICAgICAgIFRha2UgZGVzY3JpcHRpb24gZm9y IHRoZSBjb21taXQgZnJvbSB0aGlzIHA0IGNoYW5nZQotLXA0fC0tcHRyIHA0LXBhdGgtYW5kL29y LXJldmlzaW9uIFRha2UgZGVzY3JpcHRpb24gZm9yIHRoZSBjb21taXQgZnJvbSB0aGUgcDQKICAg ICAgICAgICAgICAgIGNoYW5nZSBkZXNjcmliZWQgYnkgdGhpcyBwNCBwYXRoLCBwb3NzaWJseSBp bmNsdWRpbmcgcmV2aXNpb24KICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24KLS1wNC1kZXNj ICAgICAgIEluY3JlYXNlIGFtb3VudCBvZiBqdW5rIGZyb20gcDQgY2hhbmdlIGRlc2NyaXB0aW9u CgpUaGUgZGVzY3JpcHRpb25zIHRha2VuIGZyb20gcDQgY2hhbmdlcyBnaXZlbiBieSAtQyBhbmQg LS1wNCB3aWxsCmJlIGNvbmNhdGVuYXRlZCBpZiB0aGUgb3B0aW9ucyBnaXZlbiBtdWx0aXBsZSB0 aW1lcy4KCkVPRgoJICAgIGV4aXQoMCk7Cgl9Cgl3YXJuICIkMDogc3BlYyB3YXMgYWxyZWFkeSBz ZXQsICRTUEVDIGlnbm9yZWRcbiIgaWYgZGVmaW5lZCgkU1BFQyk7CgkkU1BFQyA9ICRmOwogICAg fQp9CnJlYWRfYXJncyhAQVJHVik7Cgpsb2NhbCAoJEdJVF9ESVIpID0gcXh7Z2l0IHJldi1wYXJz ZSAtLWdpdC1kaXJ9OwokR0lUX0RJUiA9fiBzL1xyP1xuJC8vcyBpZiBkZWZpbmVkKCRHSVRfRElS KTsKZGllICIkMDogZ2l0IGRpcmVjdG9yeSBub3QgZm91bmRcbiIgaWYgIWRlZmluZWQoJEdJVF9E SVIpIG9yICEtZCAkR0lUX0RJUjsKCmxvY2FsICRlZGl0b3IgPSAkRU5We1ZJU1VBTH07CiRlZGl0 b3IgPSAkRU5We0VESVRPUn0gdW5sZXNzIGRlZmluZWQoJGVkaXRvcik7CiRlZGl0b3IgPSAnZDov UHJvZ3JhbXMvVmltL3ZpbTcwL2d2aW0uZXhlJyB1bmxlc3MgZGVmaW5lZCgkZWRpdG9yKTsKZGll ICIkMDogbm8gZWRpdG9yIGRlZmluZWRcbiIgdW5sZXNzIGRlZmluZWQoJGVkaXRvcik7CgojIFA0 IGNsaWVudCB3YXMgZ2l2ZW4gaW4gY29tbWFuZC1saW5lLiBTdG9yZSBpdAppZiAoIGRlZmluZWQo JFA0Q0xJRU5UKSApIHsKICAgIG1rZGlyICIkR0lUX0RJUi9wNCIsIDA3Nzc7CiAgICBpZiAoIG9w ZW4oRiwgJz4nLCAiJEdJVF9ESVIvcDQvY2xpZW50IikgKSB7CglwcmludCBGICIkUDRDTElFTlRc biI7CgljbG9zZShGKTsKICAgIH0gZWxzZSB7CglkaWUgIiQwOiBjYW5ub3Qgc3RvcmUgY2xpZW50 IG5hbWU6ICQhXG4iCiAgICB9Cn0gZWxzZSB7CiAgICBpZiAoIG9wZW4oRiwgJzwnLCAiJEdJVF9E SVIvcDQvY2xpZW50IikgKSB7CgkoJFA0Q0xJRU5UKSA9IDxGPjsKCWNsb3NlKEYpOwoJJFA0Q0xJ RU5UID1+IHMvXlxzKi8vLCRQNENMSUVOVCA9fiBzL1xzKiQvLyBpZiBkZWZpbmVkKCRQNENMSUVO VCk7CiAgICB9Cn0KZGllICJQNCBjbGllbnQgbm90IGRlZmluZWRcbiIgaWYgIWRlZmluZWQoJFA0 Q0xJRU5UKSBvciAhbGVuZ3RoKCRQNENMSUVOVCk7CnByaW50ICJyZWFkaW5nIFA0IGNsaWVudCAk UDRDTElFTlRcbiIgaWYgJFZFUkJPU0U7CmxvY2FsICgkUDRST09ULCAkcDRjbG50LCAkUDRIT1NU KTsKb3BlbihteSAkZmRvLCAnPicsICIkR0lUX0RJUi9wNC9jbGllbnQuZGVmIikgb3IgZGllICJw NC9jbGllbnQuZGVmOiAkIVxuIjsKYmlubW9kZSgkZmRvKTsKb3BlbihteSAkZmRpLCAnLXwnLCAi cDQgY2xpZW50IC1vICRQNENMSUVOVCIpIG9yIGRpZSAicDQgY2xpZW50OiAkIVxuIjsKYmlubW9k ZSgkZmRpKTsKbXkgJGxhc3RfbGluZV9sZW4gPSAwOwp3aGlsZSAoPCRmZGk+KSB7CiAgICBuZXh0 IGlmIC9eIy9vOwogICAgaWYgKCBtL15ccypSb290OlxzKihcUyspW1xcXC9dKlxzKiQvc28gKSB7 ICRQNFJPT1QgPSAkMSB9CiAgICBlbHNpZiAoIG0vXlxzKkNsaWVudDpccyooXFMrKS9vICkgeyAk cDRjbG50ID0gJDEgfQogICAgZWxzaWYgKCBtL15ccypIb3N0OlxzKihcUyspL28gKSB7ICRQNEhP U1QgPSAkMSB9CiAgICAoJFZFUkJPU0UgYW5kIHByaW50KSwgbmV4dCBpZiAvXihBY2Nlc3N8VXBk YXRlKTovOwogICAgcy9ccj9cbiQvL3NvOwogICAgbXkgJGxlbiA9IGxlbmd0aCgkXyk7CiAgICBw cmludCAkZmRvICIkX1xuIiBpZiAkbGVuIG9yICRsZW4gIT0gJGxhc3RfbGluZV9sZW47CiAgICAk bGFzdF9saW5lX2xlbiA9ICRsZW47Cn0KY2xvc2UoJGZkaSk7CmNsb3NlKCRmZG8pOwoKZGllICJD bGllbnQgcm9vdCBub3QgZGVmaW5lZFxuIiB1bmxlc3MgZGVmaW5lZCgkUDRST09UKTsKaWYgKCAk VkVSQk9TRSApIHsKICAgIHByaW50ICJHSVRfRElSOiAkR0lUX0RJUlxuIjsKICAgIHByaW50ICJS b290OiAkUDRST09UIChjd2Q6ICRzdGFydF9kaXIpXG4iOwogICAgcHJpbnQgIkhvc3Q6ICRQNEhP U1RcbiI7CiAgICBwcmludCAiQ2xpZW50OiAkcDRjbG50XG4iIGlmICRwNGNsbnQgbmUgJFA0Q0xJ RU5UOwp9Cm15ICgkZ2l0X2hlYWQsJGdpdF9wNF9oZWFkLCRnaXRfcDRfaGF2ZSkgPSAmZ2l0X3A0 X2luaXQ7CgppZiAoJEpVU1RfQ09NTUlUKSB7CiAgICBnaXRfcDRfY29tbWl0KCRnaXRfaGVhZCwg JGdpdF9wNF9oZWFkKTsKICAgIGV4aXQgMDsKfQoKbG9jYWwgJWdpdGlnbm9yZV9kaXJzID0gKCk7 CiRnaXRpZ25vcmVfZGlyc3snLyd9ID0gcmVhZF9maWx0ZXJfZmlsZSgiJEdJVF9ESVIvaW5mby9l eGNsdWRlIik7CnB1c2goQHskZ2l0aWdub3JlX2RpcnN7Jy8nfX0sIEB7cmVhZF9maWx0ZXJfZmls ZSgnLmdpdGlnbm9yZScpfSk7CgpteSAlZ2l0X2luZGV4ID0gKCk7CiQvID0gIlwwIjsKbXkgQGdp dF9YID0gKCk7CnByaW50ICJSZWFkaW5nIGdpdCBmaWxlIGxpc3QoZ2l0IGxzLWZpbGVzIEBnaXRf WCAtLWNhY2hlZCAteikuLi5cbiIgaWYgJFZFUkJPU0U7CmZvcmVhY2ggKCBxeHtnaXQgbHMtZmls ZXMgQGdpdF9YIC0tY2FjaGVkIC16fSApIHsKICAgIGNob3A7ICMgY2hvcCBcMAogICAgbmV4dCBp ZiBtL15cLmdpdGlnbm9yZSQvbzsKICAgIG5leHQgaWYgbS9cL1wuZ2l0aWdub3JlJC9vOwogICAg bmV4dCBpZiBmaWx0ZXJlZCgkXyk7CiAgICAkZ2l0X2luZGV4eyRffSA9IDE7Cn0KCm15IEBnaXRf YWRkID0gKCk7Cm15IEBnaXRfYWRkeCA9ICgpOwpteSBAZ2l0X2RlbCA9ICgpOwpteSBAZ2l0X3Vw ZCA9ICgpOwoKcHJpbnQgIlJlYWRpbmcgUDQgZmlsZSBsaXN0Li4uXG4iIGlmICRWRVJCT1NFOwps b2NhbCAoJENvbmZsaWN0cywkSWdub3JlZCwkQWRkZWQsJERlbGV0ZWQsJFVwZGF0ZWQpID0gKDAs MCwwLDAsMCk7CiQvID0gIlxuIjsKbXkgJGluX25hbWUgPSAwOwpteSBAcm9vdCA9IHNwbGl0KC9b XC9cXF0rLywgJFA0Uk9PVCk7Cm15ICVwNF9pbmRleCA9ICgpOwpteSAlcDRfYV9sYyA9ICgpOwpt eSAlbG5hbWVzID0gKCk7Cm15ICVsY29uZmxpY3RzID0gKCk7CmlmIChvcGVuZGlyKERJUiwgJy4n KSkgewogICAgJGxuYW1lc3snLid9ID0gW2dyZXAgeyRfIG5lICcuJyBhbmQgJF8gbmUgJy4uJ30g cmVhZGRpcihESVIpXTsKICAgIGNsb3NlZGlyKERJUik7CiAgICAjcHJpbnQgInJlYWQgJHN0YXJ0 X2RpciAoIixzY2FsYXIoQHskbG5hbWVzeycuJ319KSwiKVxuIjsKfQpvcGVuKG15ICRoYXZlLCAi cDQgLUcgQFA0QVJHUyAtYyAkUDRDTElFTlQgLUggJFA0SE9TVCAtZCAkUDRST09UIGhhdmUgfCIp IG9yCiAgICBkaWUgIiQwOiBmYWlsZWQgdG8gc3RhcnQgcDQ6ICQhXG4iOwpiaW5tb2RlKCRoYXZl KTsKJFA0SEFWRV9GSUxFID0gIiRHSVRfRElSL3A0L2hhdmUiOwpvcGVuKG15ICRzdG9yZWRoYXZl LCAnPicsICRQNEhBVkVfRklMRSkgb3IgZGllICIkUDRIQVZFX0ZJTEU6ICQhXG4iOwpiaW5tb2Rl KCRzdG9yZWRoYXZlKTsKbXkgJGVudDsKd2hpbGUgKGRlZmluZWQoJGVudD1yZWFkX3B5ZGljdF9l bnRyeSgkaGF2ZSkpKSB7CiAgICBuZXh0IGlmICFkZWZpbmVkKCRlbnQtPntkZXBvdEZpbGV9KSBv ciAhZGVmaW5lZCgkZW50LT57Y2xpZW50RmlsZX0pOwogICAgbXkgJGEgPSAkZW50LT57ZGVwb3RG aWxlfTsKICAgICRlbnQtPntjbGllbnRGaWxlfSA9fiBtIV4vL1teL10rLyguKikhbzsKICAgIG15 ICRiID0gJDE7CiAgICBteSBAYmIgPSBzcGxpdCgvXC8rLywgJGIpOwogICAgcHJpbnQgJHN0b3Jl ZGhhdmUgIiRhXDAkZW50LT57Y2xpZW50RmlsZX1cMCRlbnQtPntoYXZlUmV2fVwwXG4iOwoKICAg IGlmICggJF5PIGVxICdNU1dpbjMyJyApIHsKCSMgc3R1cGlkIHdpbmRvd3MsIGRhZnQgYWN0aXZl c3RhdGUsIGR1bWIgUDQKCSMgVGhpcyBwaWVjZSBiZWxvdyBpcyBjaGVja2luZyBmb3IgZmlsZSBu YW1lIGNvbmZsaWN0cwoJIyB3aGljaCBoYXBwZW4gb24gd2luZG93cyBiZWNhdXNlIG9mIGl0IG1h bmdsaW5nIHRoZSBuYW1lcy4KCW15ICRibGMgPSBsYyAkYjsKCWlmICggJCNiYiA+IDAgKSB7Cgkg ICAgbXkgJHBhdGggPSAnLic7CgkgICAgZm9yZWFjaCBteSAkbiAoQGJiWzAgLi4gJCNiYiAtMV0p IHsKCQlteSBAY29uZmxpY3RzID0KCQkgICAgZ3JlcCB7bGMgJF8gZXEgbGMgJG4gYW5kICRfIG5l ICRufSBAeyRsbmFtZXN7JHBhdGh9fTsKCQlpZiAoQGNvbmZsaWN0cyBhbmQgIWV4aXN0cygkbGNv bmZsaWN0c3siJHBhdGgvJG4ifSkpIHsKCQkgICAgd2FybiAid2FybmluZzogJGEgLT4gJGJcbiIu CgkJCSAid2FybmluZzogY29uZmxpY3QgYmV0d2VlbiBwYXRoIFwiJHBhdGgvJG5cIiBhbmQgIi4K CQkJICJsb2NhbCBmaWxlc3lzdGVtIGluIFwiQGNvbmZsaWN0c1wiXG4iOwoJCSAgICAkQ29uZmxp Y3RzKys7CgkJICAgICRsY29uZmxpY3RzeyIkcGF0aC8kbiJ9ID0gMTsKCQl9CgkJJHBhdGggLj0g Ii8kbiI7CgkJaWYgKCFleGlzdHMoJGxuYW1lc3skcGF0aH0pKSB7CgkJICAgIGlmIChvcGVuZGly KERJUiwgJHBhdGgpKSB7CgkJCSRsbmFtZXN7JHBhdGh9ID0KCQkJICAgIFtncmVwIHskXyBuZSAn LicgYW5kICRfIG5lICcuLid9IHJlYWRkaXIoRElSKV07CgkJCWNsb3NlZGlyKERJUik7CgkJCSNw cmludCAicmVhZCAkcGF0aCAoIixzY2FsYXIoQHskbG5hbWVzeyRwYXRofX0pLCIpXG4iOwoJCSAg ICB9CgkJfQoJICAgIH0KCX0KCWlmICghZXhpc3RzKCRwNF9hX2xjeyRibGN9KSkgewoJICAgICRw NF9hX2xjeyRibGN9ID0gWyRhLCAkYl07Cgl9IGVsc2UgewoJICAgIHdhcm4oIndhcm5pbmc6ICRh IC0+ICRiXG4iLgoJCSAid2FybmluZzogY29uZmxpY3RzIHdpdGggIi4KCQkgJHA0X2FfbGN7JGJs Y30tPlswXS4iIC0+ICIuCgkJICRwNF9hX2xjeyRibGN9LT5bMV0uIlxuIik7CgkgICAgJENvbmZs aWN0cysrOwoJICAgIG5leHQ7Cgl9CiAgICB9CgogICAgbXkgJGk7CiAgICBmb3IgKCRpID0gMDsg JGkgPCAkI2JiOyArKyRpKSB7CglteSAkYmRpciA9IGpvaW4oJy8nLEBiYlswIC4uICRpXSkgLiAn Lyc7CglpZiAoICFleGlzdHMoJGdpdGlnbm9yZV9kaXJzeyRiZGlyfSkgKSB7CgkgICAgJGdpdGln bm9yZV9kaXJzeyRiZGlyfSA9IHJlYWRfZmlsdGVyX2ZpbGUoIiRiZGlyLmdpdGlnbm9yZSIpOwoJ fQogICAgfQogICAgaWYgKGZpbHRlcmVkKCRiKSkgewoJcHJpbnQgIiBpICRiXG4iIGlmICRWRVJC T1NFID4gMzsKCSRJZ25vcmVkKys7CgluZXh0CiAgICB9CiAgICAkcDRfaW5kZXh7JGJ9ID0gJGE7 CiAgICBpZiAoIGV4aXN0cygkZ2l0X2luZGV4eyRifSkgKSB7CglteSAkbmVlZHVwID0gMTsKCWlm IChkZWZpbmVkKCRnaXRfcDRfaGF2ZSkpIHsKCSAgICAkcHJldiA9ICRnaXRfcDRfaGF2ZS0+eyRh fTsKCSAgICBpZiAoZGVmaW5lZCgkcHJldikpIHsKCQkkcHJldi0+WzBdID1+IG0hXi8vW14vXSsv KC4qKSFvOwoJCSRuZWVkdXAgPSAwIGlmICgkYiBlcSAkMSkgYW5kICgkcHJldi0+WzFdIGVxICRl bnQtPntoYXZlUmV2fSk7CgkJaWYgKCRuZWVkdXAgYW5kICRWRVJCT1NFID4gMSkgewoJCSAgICBt eSAkcmVhc29uOwoJCSAgICAkcmVhc29uID0gJ2xvY2FsIGZpbGUnIGlmICRiIG5lICQxOwoJCSAg ICAkcmVhc29uID0gJ3JldmlzaW9uJyBpZiAkcHJldi0+WzFdIG5lICRlbnQtPntoYXZlUmV2fTsK CQkgICAgcHJpbnQgIiRhICgkcmVhc29uIGNoYW5nZWQpXG4iOwoJCX0KCSAgICB9Cgl9CglpZiAo JG5lZWR1cCkgewoJICAgICRVcGRhdGVkKys7CgkgICAgcHVzaChAZ2l0X3VwZCwgJGIpOwoJfQog ICAgfSBlbHNlIHsKCSRBZGRlZCsrOwoJaWYgKCAkYiA9fiBtL1wuKGJhdHxjbWR8cGx8c2h8ZXhl fGRsbCkkL2lvICkKCXsgcHVzaChAZ2l0X2FkZHgsICRiKSB9IGVsc2UgeyBwdXNoKEBnaXRfYWRk LCAkYikgfQogICAgfQp9CmNsb3NlKCRzdG9yZWRoYXZlKTsKY2xvc2UoJGhhdmUpOwp1bmRlZiAl cDRfYV9sYzsKCkBnaXRfZGVsID0gZ3JlcCB7ICFleGlzdHMoJHA0X2luZGV4eyRffSkgfSBrZXlz ICVnaXRfaW5kZXg7CiREZWxldGVkID0gJCNnaXRfZGVsICsgMTsKCiNmb3JlYWNoIChrZXlzICVn aXRfaW5kZXgpCiN7IHB1c2goQGdpdF9kZWwsICRfKSBpZiAhZXhpc3RzKCRwNF9pbmRleHskX30p IH0KCmlmICggJERSWVJVTiApIHsKICAgIHByaW50KCQjZ2l0X2FkZCskI2dpdF9hZGR4KyAyLCIg ZmlsZXMgdG8gYWRkXG4iKSBpZiAkVkVSQk9TRTsKICAgIHByaW50IG1hcCB7IiBhICRfXG4ifSBA Z2l0X2FkZCBpZiAkVkVSQk9TRSA+IDI7CiAgICBwcmludCBtYXAgeyIgYSAkX1xuIn0gQGdpdF9h ZGR4IGlmICRWRVJCT1NFID4gMjsKICAgIHByaW50KCQjZ2l0X2RlbCsxLCIgZmlsZXMgdG8gdW5y ZWdcbiIpIGlmICRWRVJCT1NFOwogICAgcHJpbnQgbWFwIHsiIGQgJF9cbiJ9IEBnaXRfZGVsIGlm ICRWRVJCT1NFID4gMjsKICAgIHByaW50KCQjZ2l0X3VwZCsxLCIgZmlsZXMgdG8gdXBkYXRlXG4i KSBpZiAkVkVSQk9TRTsKICAgIHByaW50IG1hcCB7IiB1ICRfXG4ifSBAZ2l0X3VwZCBpZiAkVkVS Qk9TRSA+IDI7CiAgICBwcmludCAiYWRkZWQ6ICRBZGRlZCwgdW5yZWdkOiAkRGVsZXRlZCwgdXBk YXRlZDogJFVwZGF0ZWQsIGlnbm9yZWQ6ICRJZ25vcmVkIjsKICAgIHByaW50ICIsIGNvbmZsaWN0 czogJENvbmZsaWN0cyIgaWYgJENvbmZsaWN0czsKICAgIHByaW50ICJcbiI7Cn0gZWxzZSB7CiAg ICBpZiAoQGdpdF9hZGQgfHwgQGdpdF9hZGR4KSB7CglwcmludCgkI2dpdF9hZGQrJCNnaXRfYWRk eCsgMiwKCSAgICAgICIgZmlsZXMgfCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC16IC0tc3RkaW5c biIpCgkgICAgaWYgJFZFUkJPU0U7CglpZiAoQGdpdF9hZGQpIHsKCSAgICBvcGVuKEdJVCwgJ3wg Z2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNobW9kPS14IC16IC0tc3RkaW4nKSBvcgoJCWRpZSAi JDAgZ2l0LXVwZGF0ZS1pbmRleChhZGQpOiAkIVxuIjsKCSAgICBwcmludCBHSVQgbWFwIHtwcmlu dCAiIGEgJF9cbiIgaWYgJFZFUkJPU0UgPiAxOyAiJF9cMCJ9IEBnaXRfYWRkOwoJICAgIGNsb3Nl KEdJVCk7Cgl9CglpZiAoQGdpdF9hZGR4KSB7CgkgICAgb3BlbihHSVQsICd8IGdpdCB1cGRhdGUt aW5kZXggLS1hZGQgLS1jaG1vZD0reCAteiAtLXN0ZGluJykgb3IKCQlkaWUgIiQwIGdpdC11cGRh dGUtaW5kZXgoYWRkKTogJCFcbiI7CgkgICAgcHJpbnQgR0lUIG1hcCB7cHJpbnQgIiBhICRfXG4i IGlmICRWRVJCT1NFID4gMTsgIiRfXDAifSBAZ2l0X2FkZHg7CgkgICAgY2xvc2UoR0lUKTsKCX0K ICAgIH0KCiAgICBpZiAoQGdpdF9kZWwpIHsKCXByaW50KCQjZ2l0X2RlbCsxLCIgZmlsZXMgfCBn aXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC16IC0tc3RkaW5cbiIpCgkgICAgaWYgJFZFUkJPU0U7 CglvcGVuKEdJVCwgJ3wgZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAteiAtLXN0ZGlu Jykgb3IKCSAgICBkaWUgIiQwIGdpdC11cGRhdGUtaW5kZXgoZGVsKTogJCFcbiI7CglwcmludCBH SVQgbWFwIHtwcmludCAiIGQgJF9cbiIgaWYgJFZFUkJPU0UgPiAxOyAiJF9cMCJ9IEBnaXRfZGVs OwoJY2xvc2UoR0lUKTsKICAgIH0KCiAgICBpZiAoQGdpdF91cGQpIHsKCXByaW50KCQjZ2l0X3Vw ZCsxLCIgZmlsZXMgfCBnaXQgdXBkYXRlLWluZGV4IC16IC0tc3RkaW5cbiIpCgkgICAgaWYgJFZF UkJPU0U7CglvcGVuKEdJVCwgJ3wgZ2l0IHVwZGF0ZS1pbmRleCAteiAtLXN0ZGluJykgb3IKCSAg ICBkaWUgIiQwIGdpdC11cGRhdGUtaW5kZXgodXBkKTogJCFcbiI7CglwcmludCBHSVQgbWFwIHtw cmludCAiIHUgJF9cbiIgaWYgJFZFUkJPU0UgPiAxOyAiJF9cMCJ9IEBnaXRfdXBkOwoJY2xvc2Uo R0lUKTsKICAgIH0KICAgIAogICAgcHJpbnQgImFkZGVkOiAkQWRkZWQsIHVucmVnZDogJERlbGV0 ZWQsIHVwZGF0ZWQ6ICRVcGRhdGVkLCBpZ25vcmVkOiAkSWdub3JlZCI7CiAgICBwcmludCAiLCBj b25mbGljdHM6ICRDb25mbGljdHMiIGlmICRDb25mbGljdHM7CiAgICBwcmludCAiXG4iOwogICAg Z2l0X3A0X2NvbW1pdCgkZ2l0X2hlYWQsICRnaXRfcDRfaGVhZCkgaWYgJEFVVE9fQ09NTUlUOwp9 CgpleGl0IDA7CgpzdWIgZmlsdGVyZWQgewogICAgbXkgJG5hbWUgPSBzaGlmdDsKICAgIHN0dWR5 KCRuYW1lKTsKICAgIG15IEBwYXRoID0gc3BsaXQoL1wvKy9vLCAkbmFtZSk7CiAgICBteSAkZGly ID0gJyc7CiAgICAkbmFtZSA9ICcnOwogICAgCiAgICBmb3JlYWNoIG15ICRkIChAcGF0aCkgewoJ JG5hbWUgLj0gJGQ7CiMJcHJpbnQgU1RERVJSICIkZGlyOiAkbmFtZSAkZFxuIiBpZiAkdjsKCWZv cmVhY2ggbXkgJHJlIChAeyRnaXRpZ25vcmVfZGlyc3snLyd9fSkgewoJICAgIHJldHVybiAxIGlm ICRuYW1lID1+IG0vJHJlLzsKCSAgICByZXR1cm4gMSBpZiAkZCA9fiBtLyRyZS87Cgl9CglpZiAo IGxlbmd0aCgkZGlyKSBhbmQgZXhpc3RzKCRnaXRpZ25vcmVfZGlyc3skZGlyfSkgKSB7CgkgICAg Zm9yZWFjaCBteSAkcmUgKEB7JGdpdGlnbm9yZV9kaXJzeyRkaXJ9fSkgewoJCXJldHVybiAxIGlm ICRuYW1lID1+IG0vJHJlLzsKCQlyZXR1cm4gMSBpZiAkZCA9fiBtLyRyZS87CgkgICAgfQoJfQoJ JG5hbWUgLj0gJy8nOwoJJGRpciA9ICRuYW1lOwogICAgfQojICAgIHByaW50IFNUREVSUiAiJG5h bWUgbm90IGZpbHRlcmVkXG4iIGlmICR2OwogICAgcmV0dXJuIDA7Cn0KCnN1YiByZWFkX2ZpbHRl cl9maWxlIHsKICAgIG15IEBmaWx0cyA9ICgpOwogICAgbXkgJGZpbGUgPSBzaGlmdDsKICAgIGlm ICggb3BlbihteSAkaWYsICc8JywgJGZpbGUpICkgewoJcHJpbnQgImFkZGVkIGlnbm9yZSBmaWxl ICRmaWxlXG4iIGlmICRWRVJCT1NFOwoJJC8gPSAiXG4iOwoJd2hpbGUgKG15ICRsID0gPCRpZj4p IHsKCSAgICBuZXh0IGlmICRsID1+IC9eXHMqIy9vOwoJICAgIG5leHQgaWYgJGwgPX4gL15ccyok L287CgkgICAgJGwgPX4gcy9bXHJcbl0rJC8vc287CgkgICAgJGwgPX4gcy9cLi9cXC4vZ287Cgkg ICAgJGwgPX4gcy9cKi8uKi9nbzsKCSAgICBpZiAoICRsID1+IG0vXC8vICkgewoJCSRsID0gIl4k bCgkfC8pIjsKCSAgICB9IGVsc2UgewoJCSRsID0gIihefC8pJGxcJCI7CgkgICAgfQoJICAgIHBy aW50ICIgZmlsdGVyICRsXG4iIGlmICRWRVJCT1NFID4gMTsKCSAgICBwdXNoKEBmaWx0cywgcXIv JGwvKTsKCX0KCWNsb3NlKCRpZik7CiAgICB9CiAgICByZXR1cm4gXEBmaWx0czsKfQoKc3ViIHJf cHlzdHIKewogICAgbXkgJGZkID0gc2hpZnQ7CiAgICBteSAoJGxlbiwkc3RyKT0oJycsJycpOwog ICAgbXkgKCRjLCRyZCwkYikgPSAoNCwwLCcnKTsKICAgIHdoaWxlICgkYyA+IDApIHsKCSRyZCA9 IHN5c3JlYWQoJGZkLCRiLCRjKTsKCXdhcm4oImZhaWxlZCB0byByZWFkIGxlbjogJCEiKSwgcmV0 dXJuIHVuZGVmIGlmICFkZWZpbmVkKCRyZCk7Cgl3YXJuKCJub3QgZW5vdWdoIGRhdGEgZm9yIGxl biIpLCByZXR1cm4gdW5kZWYgaWYgISRyZDsKCSRsZW4gLj0gJGI7CgkkYyAtPSAkcmQ7CiAgICB9 CiAgICAkbGVuID0gdW5wYWNrKCdWJywkbGVuKTsKICAgIHdoaWxlICgkbGVuID4gMCkgewoJJHJk ID0gc3lzcmVhZCgkZmQsJGIsJGxlbik7Cgl3YXJuKCJmYWlsZWQgdG8gcmVhZCBkYXRhOiAkISIp LCByZXR1cm4gdW5kZWYgaWYgIWRlZmluZWQoJHJkKTsKCXdhcm4oIm5vdCBlbm91Z2ggZGF0YSIp LCByZXR1cm4gdW5kZWYgaWYgISRyZDsKCSRzdHIgLj0gJGI7CgkkbGVuIC09ICRyZDsKICAgIH0K ICAgIHJldHVybiAkc3RyOwp9CgpzdWIgcmVhZF9weWRpY3RfZW50cnkKewogICAgbXkgJGYgPSBz aGlmdDsKICAgIG15ICgkYnVmLCRyZCk7CiAgICBGSUw6IHdoaWxlICgxKSB7CgkjIG9iamVjdCB0 eXBlIGlkZW50aWZpZXIKCSRyZCA9IHN5c3JlYWQoJGYsICRidWYsIDEpOwoJbGFzdCBGSUwgaWYg JHJkID09IDA7Cgl3YXJuKCJvYmplY3QgdHlwZTogJCFcbiIpLGxhc3QgaWYgJHJkICE9IDE7Cgkj ICd7JyBpcyBhIHB5dGhvbiBtYXJzaGFsbGVkIGRpY3QKCXdhcm4oIm9iamVjdCB0eXBlOiBub3Qg e1xuIiksbGFzdCBpZiAkYnVmIG5lICd7JzsKCW15ICRlbnQgPSB7fTsKCVBBSVI6IHdoaWxlICgx KSB7CgkgICAgbXkgKCRiLCRrZXkpOwoJICAgICMga2V5IHR5cGUgaWRlbnRpZmllcgoJICAgICRy ZCA9IHN5c3JlYWQoJGYsICRiLCAxKTsKCSAgICB3YXJuKCJrZXkgdHlwZTogJCFcbiIpLGxhc3Qg RklMIGlmICRyZCAhPSAxOwoJICAgIGlmICgkYiBlcSAncycpIHsgIyBsZW5ndGgtcHJlZml4ZWQg c3RyaW5nCgkJJGtleSA9IHJfcHlzdHIoJGYpOwoJCXdhcm4oImtleTogJCFcbiIpLGxhc3QgRklM IGlmICFkZWZpbmVkKCRiKTsKCSAgICB9IGVsc2lmICgkYiBlcSAnMCcpIHsgIyBOVUxMLWVsZW1l bnQsIGVuZCBvZiBlbnRyeQoJCWxhc3QgUEFJUjsKCSAgICB9IGVsc2UgewoJCXdhcm4oImtleSB0 eXBlOiBub3QgcyIpOwoJCWxhc3QgRklMOwoJICAgIH0KCSAgICAjIHZhbHVlIHR5cGUgaWRlbnRp ZmllcgoJICAgICRyZCA9IHN5c3JlYWQoJGYsICRiLCAxKTsKCSAgICB3YXJuKCIka2V5IHZhbHVl IHR5cGU6ICQhXG4iKSxsYXN0IEZJTCBpZiAkcmQgIT0gMTsKCSAgICBpZiAoJGIgZXEgJ3MnKSB7 ICMgbGVuZ3RoLXByZWZpeGVkIHN0cmluZwoJCSRiID0gcl9weXN0cigkZik7CgkJd2FybigiJGtl eSB2YWx1ZTogJCEiKSxsYXN0IEZJTCBpZiAhZGVmaW5lZCgkYik7CgkJJGVudC0+eyRrZXl9ID0g JGI7CgkgICAgfSBlbHNlIHsKCQl3YXJuKCIka2V5IHZhbHVlIHR5cGU6IG5vdCBzICgkYikiKTsK CQlsYXN0IEZJTDsKCSAgICB9Cgl9CglyZXR1cm4gJGVudDsKICAgIH0KICAgIHJldHVybiB1bmRl ZjsKfQoKc3ViIGNsMm1zZyB7CiAgICBteSAkY2wgPSBzaGlmdDsKICAgIG15KCRvMSwkbzIsJGkp OwogICAgaWYoIW9wZW4oJG8xLCAnPj4nLCAiJEdJVF9ESVIvcDQvbXNnIikpIHsKCXdhcm4gInA0 L21zZzogJCFcbiI7CglyZXR1cm47CiAgICB9CiAgICBiaW5tb2RlKCRvMSk7CiAgICBpZighb3Bl bigkbzIsICc+PicsICIkR0lUX0RJUi9wNC9wNG1zZyIpKSB7Cgl3YXJuICJwNC9wNG1zZzogJCFc biI7CgljbG9zZSgkbzEpOwoJcmV0dXJuCiAgICB9CiAgICBiaW5tb2RlKCRvMik7CiAgICBpZigh b3BlbigkaSwgJy18JywgInA0IGRlc2NyaWJlIC1zICRjbCIpKXsKCXdhcm4gInA0IGRlc2NyaWJl OiAkIVxuIjsKCWNsb3NlKCRvMSk7CgljbG9zZSgkbzIpOwoJcmV0dXJuCiAgICB9CiAgICBiaW5t b2RlKCRpKTsKICAgIHByaW50ICRvMSAiJGNsOiAiIGlmICRGVUxMX0RFU0M7CiAgICBwcmludCAk bzIgIiRjbDogIjsKICAgIG15IEBhOwogICAgbXkgJHUgPSB1bmRlZjsKICAgIHdoaWxlIChteSAk bCA9IDwkaT4pIHsKCWlmICgkbCA9fiAvXkNoYW5nZSBcZCsgYnkgKFxTKylAW14gXSogb24gKFte XHJcbl0qKS9zbykgewoJICAgICR1ID0gJDE7CgkgICAgJEVOVntHSVRfQVVUSE9SX0RBVEV9ID0g JDIgaWYgbGVuZ3RoKCQyKTsKCX0KCWxhc3QgaWYgJEZVTExfREVTQyA8IDIgYW5kICRsID1+IC9e XHMqQWZmZWN0ZWQgZmlsZXMgXC57M31ccyokL3NvOwoJJGwgPX4gcy9ccj9cbiQvL3NvOwoJcHVz aCBAYSwgJGw7CiAgICB9CiAgICBjbG9zZSgkaSk7CiAgICBwcmludCAkbzIgc3Vic3RyKCRhWzJd LDEpLCJcbiI7ICMgcDQgc2lkZS1icmFuY2ggY29tbWl0IGRlc2NyaXB0aW9uCiAgICBjbG9zZSgk bzIpOwogICAgIyBpbXBvcnQgYnJhbmNoIGNvbW1pdCBkZXNjcmlwdGlvbgogICAgaWYgKCRGVUxM X0RFU0MgPiAxKSB7CgkjIGRlc2MgbGV2ZWwgMis6IGtlZXAgdGhlIENoYW5nZSBsaW5lCglwcmlu dCAkbzEgbWFwIHsiJF9cbiJ9IChzdWJzdHIoJGFbMl0sMSksIlxuIixAYSk7CiAgICB9IGVsc2Ug ewoJIyBsZXZlbHMgMCBhbmQgMTogcmVtb3ZlIHRoZSBDaGFuZ2UgbGluZQoJcHJpbnQgJG8xIG1h cCB7IChsZW5ndGgoJF8pID8gc3Vic3RyKCRfLDEpOicnKS4iXG4iIH0gQGFbMi4uJCNhXTsKICAg IH0KICAgIGNsb3NlKCRvMSk7CiAgICBpZiAoZGVmaW5lZCgkdSkpIHsKCWlmICghZXhpc3RzKCRQ NFVTRVJTeyR1fSkpIHsKCSAgICBteSAoJG1haWwsJG5hbWUpID0gZ3JlcCB7L14oRW1haWx8RnVs bE5hbWUpOi99IHF4e3A0IHVzZXIgLW8gJHV9OwoJICAgIGlmICgkPyA9PSAwIGFuZCBkZWZpbmVk KCRtYWlsKSBhbmQgZGVmaW5lZCgkbmFtZSkpIHsKCQlzL15cUys6CShbXlxyXG5dKilccj9cbiQv JDEvc28gZm9yICgkbWFpbCwkbmFtZSk7CgkJaWYgKGxlbmd0aCgkbmFtZSkgYW5kIGxlbmd0aCgk bWFpbCkpIHsKCQkgICAgJFA0VVNFUlN7JHV9ID0ge25hbWU9PiRuYW1lLCBlbWFpbD0+JG1haWx9 OwoJCX0KCSAgICB9Cgl9CglpZiAoJFA0VVNFUlN7JHV9KSB7CgkgICAgJHA0dSA9ICRQNFVTRVJT eyR1fTsKCSAgICAkRU5We0dJVF9BVVRIT1JfTkFNRX0gID0gJHA0dS0+e25hbWV9OwoJICAgICRF TlZ7R0lUX0FVVEhPUl9FTUFJTH0gPSAkcDR1LT57ZW1haWx9OwoJfQogICAgfQp9CgpzdWIgZ2l0 X3A0X2luaXQgewogICAgbXkgKCRjb21taXQsJHBhcmVudCwkcDRjb21taXQsJHA0cGFyZW50KTsK ICAgIG15ICgkSEVBRCkgPSBxeHtnaXQgcmV2LXBhcnNlIEhFQUR9OwogICAgJEhFQUQgPSAnJyBp ZiAkPzsKICAgIG15ICgkcDRoZWFkKSA9IHF4e2dpdCByZXYtcGFyc2UgcmVmcy9wNGltcG9ydC8k UDRDTElFTlR9OwogICAgJHA0aGVhZCA9ICcnIGlmICQ/OwogICAgcy9ccj9cbi8vZ3MgZm9yICgk SEVBRCwgJHA0aGVhZCk7CiAgICBkaWUgIk5vIEhFQUQgY29tbWl0ISBSZWZ1c2luZyB0byBpbXBv cnQuXG4iIGlmICFsZW5ndGgoJEhFQUQpOwogICAgaWYgKGxlbmd0aCgkcDRoZWFkKSkgewoJKCRj b21taXQsJHA0cGFyZW50KSA9CgkgICAgZ3JlcCB7IHMvXnBhcmVudCAoLns0MH0pLiovJDEvcyB9 CgkgICAgcXh7Z2l0IGNhdC1maWxlIGNvbW1pdCAkcDRoZWFkfTsKCSRjb21taXQgPSAkcDRwYXJl bnQgPSAnJyBpZiAkPzsKCSRwNHBhcmVudCA9ICcnIGlmICFkZWZpbmVkKCRwNHBhcmVudCk7CiAg ICB9IGVsc2UgewoJJGNvbW1pdCA9ICRwNHBhcmVudCA9ICcnOwogICAgfQogICAgd2hpbGUgKCgk Y29tbWl0IG5lICRIRUFEKSBhbmQgbGVuZ3RoKCRwNHBhcmVudCkpIHsKCSRwNGhlYWQgPSAkcDRw YXJlbnQ7CgkoJGNvbW1pdCwkcDRwYXJlbnQpID0KCSAgICBncmVwIHsgcy9ecGFyZW50ICguezQw fSkuKi8kMS9zIH0KCSAgICBxeHtnaXQgY2F0LWZpbGUgY29tbWl0ICRwNGhlYWR9OwoJJGNvbW1p dCA9ICRwNHBhcmVudCA9ICcnIGlmICQ/OwoJaWYgKCRWRVJCT1NFIGFuZCAoJEhFQUQgZXEgJGNv bW1pdCkpIHsKCSAgICBwcmludCAiZm91bmQgcDQgaW1wb3J0IGNvbW1pdCAiOwoJICAgIHN5c3Rl bSgnZ2l0JywnbmFtZS1yZXYnLCRwNGhlYWQpOwoJfQogICAgfQogICAgd2FybiAiQ3VycmVudCBI RUFEIHdhcyBub3QgaW1wb3J0ZWQgZnJvbSAkUDRDTElFTlQsIGRvaW5nIGZ1bGwgaW1wb3J0XG4i CglpZiAkSEVBRCBuZSAkY29tbWl0OwogICAgbXkgJHA0aGF2ZSA9IHVuZGVmOwogICAgaWYgKCEk RlVMTF9JTVBPUlQgYW5kICgkSEVBRCBlcSAkY29tbWl0KSBhbmQgbGVuZ3RoKCRwNGhlYWQpKSB7 CglpZiAob3BlbihteSAkZiwgJy18JywgImdpdCBjYXQtZmlsZSBibG9iICRwNGhlYWQ6aGF2ZSIp KSB7CgkgICAgbXkgJG9sZCA9ICQvOwoJICAgICQvID0gIlwwIjsKCSAgICBteSAkY250ID0gMDsK CSAgICB3aGlsZSgxKSB7CgkJbXkgJHA0bmFtZSA9IDwkZj47CgkJbGFzdCBpZiAhZGVmaW5lZCgk cDRuYW1lKTsKCQkkcDRuYW1lID1+IHMvXi4vL3NvIGlmICRjbnQ7ICMgcmVtb3ZlIFxuCgkJbXkg JG5hbWUgPSA8JGY+OwoJCW15ICRyZXYgPSA8JGY+OwoJCWxhc3QgaWYgIWRlZmluZWQoJG5hbWUp IG9yICFkZWZpbmVkKCRyZXYpOwoJCWNob3AoJHA0bmFtZSwkbmFtZSwkcmV2KTsKCQkrKyRjbnQ7 CgkJaWYgKGRlZmluZWQoJHA0aGF2ZSkpIHsKCQkgICAgJHA0aGF2ZS0+eyRwNG5hbWV9ID0gWyRu YW1lLCRyZXZdOwoJCX0gZWxzZSB7CgkJICAgICRwNGhhdmUgPSB7JHA0bmFtZT0+WyRuYW1lLCRy ZXZdfTsKCQl9CgkgICAgfQoJICAgICQvID0gJG9sZDsKCSAgICBjbG9zZSgkZik7CgkgICAgcHJp bnQgImxvYWRlZCAkY250IHJldmlzaW9ucyBmcm9tICRwNGhlYWRcbiIgaWYgJFZFUkJPU0U7Cgl9 CiAgICB9CiAgICByZXR1cm4gKCRIRUFELCAkcDRoZWFkLCAkcDRoYXZlKTsKfQoKc3ViIGdpdF9w NF9jb21taXQgewogICAgbXkgKCRIRUFELCAkcDRoZWFkKSA9IEBfOwogICAgbXkgKCRjb21taXQs JHBhcmVudCwkcDRjb21taXQsJHA0cGFyZW50KTsKCiAgICBteSAoJGZkbywkZmRpLCRyYyk7CiAg ICAkcmMgPSBzeXN0ZW0oJ2dpdCcsJ2RpZmYtaW5kZXgnLCctLWV4aXQtY29kZScsJy0tcXVpZXQn LCctLWNhY2hlZCcsJ0hFQUQnKTsKICAgIGlmICgkcmMgPT0gMCkgewoJd2FybigiTm8gY2hhbmdl c1xuIik7CglyZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICREUllSVU47CgogICAgbXkgJHA0 eCA9ICIkR0lUX0RJUi9wNC9pZHgudG1wIjsKICAgIHVubGluaygkcDR4KTsKICAgIG15ICRvbGRp ZHggPSAkRU5We0dJVF9JTkRFWF9GSUxFfTsKCiAgICAkRU5We1BBR0VSfSA9ICdjYXQnOwogICAg JEVOVntHSVRfSU5ERVhfRklMRX0gPSAkcDR4OwoKICAgIGlmICghZGVmaW5lZCgkU1BFQykgb3Ig IW9wZW4oU1RESU4sICc8JywgJFNQRUMpKSB7CglpZiAoICReTyBlcSAnTVNXaW4zMicgKSB7Cgkg ICAgb3BlbihTVERJTiwgJzwnLCAnTlVMJykgb3IgZGllICIkU1BFQzogJCFcbiI7Cgl9IGVsc2Ug ewoJICAgIG9wZW4oU1RESU4sICc8JywgJy9kZXYvbnVsbCcpIG9yIGRpZSAiJFNQRUM6ICQhXG4i OwoJfQogICAgfQogICAgbXkgKCRwNHNwZWMpID0gcXh7Z2l0IGhhc2gtb2JqZWN0IC10IGJsb2Ig LXcgLS1zdGRpbn07CiAgICBkaWUgIkZhaWxlZCB0byBzdG9yZSAkU1BFQyBpbiBnaXQgcmVwb1xu IiBpZiAkPzsKCiAgICBvcGVuKFNURElOLCAnPCcsICIkR0lUX0RJUi9wNC9jbGllbnQuZGVmIikg b3IgZGllICJjbGRlZjogJCFcbiI7CiAgICBteSAoJHA0Y2xudCkgPSBxeHtnaXQgaGFzaC1vYmpl Y3QgLXQgYmxvYiAtdyAtLXN0ZGlufTsKICAgIGRpZSAiRmFpbGVkIHRvIHNhdmUgbWFwcGluZ3Mg b2YgJFA0Q0xJRU5UIGluIGdpdCByZXBvIiBpZiAkPzsKCiAgICBpZiAoIWRlZmluZWQoJFA0SEFW RV9GSUxFKSkgewoJcHJpbnQgInJlYWRpbmcgc3RhdGUgb2YgJFA0Q0xJRU5UXG4iIGlmICRWRVJC T1NFOwoJJFA0SEFWRV9GSUxFID0gIiRHSVRfRElSL3A0L2hhdmUiOyAKCW9wZW4oJGZkbywgJz4n LCAkUDRIQVZFX0ZJTEUpIG9yIGRpZSAicDQvaGF2ZTogJCFcbiI7CgliaW5tb2RlKCRmZG8pOwoJ b3BlbigkZmRpLCAicDQgLUcgQFA0QVJHUyAtYyAkUDRDTElFTlQgLUggJFA0SE9TVCAtZCAkUDRS T09UIGhhdmV8Iikgb3IKCSAgICBkaWUgInA0IGhhdmU6ICQhXG4iOwoJYmlubW9kZSgkZmRpKTsK CW15ICRlbnQ7Cgl3aGlsZSAoZGVmaW5lZCgkZW50PXJlYWRfcHlkaWN0X2VudHJ5KCRmZGkpKSkg ewoJICAgIG5leHQgaWYgIWRlZmluZWQoJGVudC0+e2RlcG90RmlsZX0pOwoJICAgIG5leHQgaWYg IWRlZmluZWQoJGVudC0+e2NsaWVudEZpbGV9KTsKCSAgICBwcmludCAkZmRvICIkZW50LT57ZGVw b3RGaWxlfVwwIiwKCQkgICAgICAgIiRlbnQtPntjbGllbnRGaWxlfVwwIiwKCQkgICAgICAgIiRl bnQtPntoYXZlUmV2fVwwXG4iOwoJfQoJY2xvc2UoJGZkaSk7CgljbG9zZSgkZmRvKTsKICAgIH0K CiAgICBvcGVuKFNURElOLCAnPCcsICRQNEhBVkVfRklMRSkgb3IgZGllICIkUDRIQVZFX0ZJTEU6 ICQhXG4iOwogICAgbXkgKCRwNGhhdmUpID0gcXh7Z2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcg LS1zdGRpbn07CiAgICBkaWUgIkZhaWxlZCB0byBzYXZlIHN0YXRlIG9mICRQNENMSUVOVCBpbiBn aXQgcmVwbyIgaWYgJD87CgogICAgdW5saW5rKCIkR0lUX0RJUi9wNC9tc2ciLCAiJEdJVF9ESVIv cDQvcDRtc2ciKTsKICAgIGZvcmVhY2ggbXkgJGkgKEBERVNDKSB7CgkkaSA9fiBzL14oLikvL287 CglpZiAoJ2MnIGVxICQxKSB7CgkgICAgcHJpbnQgInJlYWRpbmcgY2hhbmdlcyBmb3IgJGlcbiIg aWYgJFZFUkJPU0U7CgkgICAgY2wybXNnKCRpKTsKCX0gZWxzaWYgKCdmJyBlcSAkMSkgewoJICAg IG15KCRvMSwkbzIsJGkpOwoJICAgIGlmIChvcGVuKCRvMSwgJz4+JywgIiRHSVRfRElSL3A0L21z ZyIpKSB7CgkJaWYgKG9wZW4oJG8yLCAnPj4nLCAiJEdJVF9ESVIvcDQvcDRtc2ciKSkgewoJCSAg ICBpZiAob3BlbigkaSwgJzwnLCAkaSkpIHsKCQkJbXkgJG4gPSAwOwoJCQl3aGlsZSg8JGk+KSB7 CgkJCSAgICAkbisrOwoJCQkgICAgcHJpbnQgJG8xICRfOwoJCQkgICAgcHJpbnQgJG8yICRfIGlm ICRuID09IDE7CgkJCX0KCQkJY2xvc2UoJGkpOwoJCSAgICB9CgkJICAgIGNsb3NlKCRvMik7CgkJ fQoJCWNsb3NlKCRvMSk7CgkgICAgfQoJfSBlbHNpZiAoJzQnIGVxICQxKSB7CgkgICAgcHJpbnQg InJlYWRpbmcgY2hhbmdlcyBmb3IgJGlcbiIgaWYgJFZFUkJPU0U7CgkgICAgbXkgKCRjaGFuZ2Up PXF4e3A0IGNoYW5nZXMgLW0xICRpfTsKCSAgICBpZiAoIWRlZmluZWQoJGNoYW5nZSkgb3IgJGNo YW5nZSAhfiBtL1xzKyhcZCspXHMvKSB7CgkJZGllICIkaSBkb2VzIG5vdCByZXNvbHZlIGludG8g YSBjaGFuZ2UgbnVtYmVyXG4iOwoJICAgIH0KCSAgICBjbDJtc2coJDEpOwoJfQogICAgfQogICAg c3lzdGVtKCIkZWRpdG9yICRHSVRfRElSL3A0L21zZyIpIGlmICRFRElUX0NPTU1JVDsKCiAgICBp ZiAoZGVmaW5lZCgkb2xkaWR4KSkgeyAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvbGRpZHggfQog ICAgZWxzZSB7IGRlbGV0ZSAkRU5We0dJVF9JTkRFWF9GSUxFfSB9CgogICAgIwogICAgIyBTdG9y ZSB0aGUgaW1wb3J0ZWQgZmlsZSBkYXRhCiAgICAjCgogICAgaWYgKCAkXk8gZXEgJ01TV2luMzIn ICkgeyBvcGVuKFNUREVSUiwgIk5VTCIpIH0KICAgIGVsc2UgeyBvcGVuKFNUREVSUiwgIi9kZXYv bnVsbCIpIH0KCiAgICBteSAoJHRyZWUpID0gcXh7Z2l0IHdyaXRlLXRyZWV9OwogICAgZGllICJG YWlsZWQgdG8gd3JpdGUgY3VycmVudCB0cmVlXG4iIGlmICQ/OwogICAgJHBhcmVudCA9IGxlbmd0 aCgkSEVBRCkgPyAiLXAgJEhFQUQiOiAnJzsKICAgIG9wZW4oU1RESU4sICc8JywgIiRHSVRfRElS L3A0L21zZyIpIG9yIGRpZSAicDQvbXNnOiAkIVxuIjsKICAgICR0cmVlID1+IHMvXHI/XG4vL2dz OwogICAgKCRjb21taXQpPXF4e2dpdCBjb21taXQtdHJlZSAkdHJlZSAkcGFyZW50fTsKICAgIGRp ZSAiZmFpbGVkIHRvIGNvbW1pdCBjdXJyZW50IHRyZWVcbiIgaWYgJD87CiAgICBzL1xyP1xuLy9n cyBmb3IgKCRjb21taXQpOwoKICAgICMKICAgICMgU3RvcmluZyBpbXBvcnQgY29udHJvbCBkYXRh CiAgICAjCiAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRwNHg7CiAgICBvcGVuKCRmZG8sICd8 LScsICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0taW5kZXgtaW5mbycpIG9yCglkaWUgImNvdWxk IG5vdCBzdGFydCBnaXQgdXBkYXRlLWluZGV4XG4iOwogICAgYmlubW9kZSgkZmRvKTsKICAgIHMv XHI/XG4vL2dzIGZvciAoJHA0c3BlYywkcDRjbG50LCRwNGhhdmUpOwogICAgcHJpbnQgJGZkbyAi MTAwNjQ0ICRwNHNwZWNcdHNwZWNcbiI7CiAgICBwcmludCAkZmRvICIxMDA2NDQgJHA0Y2xudFx0 Y2xpZW50XG4iOwogICAgcHJpbnQgJGZkbyAiMTAwNjQ0ICRwNGhhdmVcdGhhdmVcbiI7CiAgICBj bG9zZSgkZmRvKTsKICAgIGlmKCQ/KSB7CglkaWUgIkZhaWxlZCB0byBzdG9yZSAkU1BFQyBpbiBw NGltcG9ydCBpbmRleCBhbmQgZ2l0IHJlcG9cbiIuCgkgICAgIkZhaWxlZCB0byBzYXZlIG1hcHBp bmdzIG9mICRQNENMSUVOVCBpbiBwNGltcG9ydCBpbmRleCBhbmQgZ2l0IHJlcG9cbiIuCgkgICAg IkZhaWxlZCB0byBzYXZlIHN0YXRlIG9mICRQNENMSUVOVCBpbiBwNGltcG9ydCBpbmRleCBhbmQg Z2l0IHJlcG9cbiIKICAgIH0KICAgIG15ICgkcDR0cmVlKT1xeHtnaXQgd3JpdGUtdHJlZX07CiAg ICBkaWUgIkZhaWxlZCB0byBzdG9yZSAkU1BFQyAodHJlZSkgaW4gZ2l0IHJlcG9cbiIgaWYgJD87 CgogICAgIyBCaW5kIGltcG9ydCBjb250cm9sIGRhdGEgdG8gdGhlIGZpbGUgZGF0YQogICAgJHA0 cGFyZW50PSItcCAkY29tbWl0IjsKICAgICRwNHBhcmVudD0iJHA0cGFyZW50IC1wICRwNGhlYWQi IGlmIGxlbmd0aCgkcDRoZWFkKTsKICAgIG9wZW4oU1RESU4sICc8JywgIiRHSVRfRElSL3A0L3A0 bXNnIikgb3IgZGllICJwNC9wNG1zZzogJCFcbiI7CiAgICAkcDR0cmVlID1+IHMvXHI/XG4vL2dz OwogICAgKCRwNGNvbW1pdCk9cXh7Z2l0IGNvbW1pdC10cmVlICRwNHRyZWUgJHA0cGFyZW50fTsK ICAgIGRpZSAiRmFpbGVkIHRvIHN0b3JlICRTUEVDIChjb21taXQpIGluIGdpdCByZXBvXG4iIGlm ICQ/OwogICAgJHA0Y29tbWl0ID1+IHMvXHI/XG4vL2dzOwoKICAgICMgRmluaXNoaW5nIHRvdWNo ZXM6IHVwZGF0ZSByZWZlcmVuY2VzCiAgICBzeXN0ZW0oJ2dpdCcsJ3VwZGF0ZS1yZWYnLCctbScs J2JhY2t1cCByZWYgb2YgY3VycmVudCBicmFuY2gnLAoJICAgJ3A0L2JhY2t1cC1IRUFEJywnSEVB RCcpOwogICAgc3lzdGVtKCdnaXQnLCd1cGRhdGUtcmVmJywnLW0nLCdiYWNrdXAgcmVmIG9mIHA0 aW1wb3J0JywKCSAgICdwNC9iYWNrdXAtcDRpbXBvcnQnLCJyZWZzL3A0aW1wb3J0LyRQNENMSUVO VCIpOwogICAgJHJjID0gc3lzdGVtKCdnaXQnLCd1cGRhdGUtcmVmJywnLW0nLCdkYXRhIG9mIHA0 aW1wb3J0JywnSEVBRCcsJGNvbW1pdCk7CiAgICBkaWUgIkZhaWxlZCB0byB1cGRhdGUgSEVBRFxu IiBpZiAkcmM7CiAgICAkcmMgPSBzeXN0ZW0oJ2dpdCcsJ3VwZGF0ZS1yZWYnLCctbScsJ3A0aW1w b3J0JywicmVmcy9wNGltcG9ydC8kUDRDTElFTlQiLCRwNGNvbW1pdCk7CiAgICBkaWUgIkZhaWxl ZCB0byBzdG9yZSAkU1BFQyAocmVmZXJlbmNlKSBpbiBnaXQgcmVwb1xuIiBpZiAkcmM7CgogICAg aWYgKCRWRVJCT1NFKSB7CglwcmludCBTVERPVVQgKGdyZXAge3MvXHI/XG4vL2dzO3MvLio/XHMv L30gcXh7Z2l0IG5hbWUtcmV2IHJlZnMvcDRpbXBvcnQvJFA0Q0xJRU5UfSksICI6XG4iOwoJc3lz dGVtKCdnaXQnLCdsb2cnLCctLW1heC1jb3VudD0xJywnLS1wcmV0dHk9Zm9ybWF0OiVoICVzJW4n LCRwNGNvbW1pdCk7CiAgICB9CiAgICBwcmludCBTVERPVVQgKGdyZXAge3MvXHI/XG4vL2dzO3Mv Lio/XHMvL30gcXh7Z2l0IG5hbWUtcmV2IEhFQUR9KSwgIjpcbiI7CiAgICBzeXN0ZW0oJ2dpdCcs J2xvZycsJy0tbWF4LWNvdW50PTEnLCctLXByZXR0eT1mb3JtYXQ6JWggJXMlbicsJGNvbW1pdCk7 Cn0KCg== ------=_Part_161334_16804840.1178804238300--