X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=9ug04qPEFhNjFZ2cxGzZE/ZJsReJKCtsnJt1OIUyg6A=; b=ScqSF2g+8Ra1apt10EaqTJ9QxIoGZGR9kzpn0JAcF8BDHX7UGMtN2HSkQ7D8jAYDfM DnwfH1LvqmH4HOZ4rJ2P7+6tXqFlSa1YNkaGorw9Wzeve2Mo3gR8Vet8NMUb5MrtEZBY KSGIzhU0g0NEYqgerb+aObeNMPAh8wQk1RjzfLpHRVO+9WqErQKNvv+o1wzD5hZb+1Ug oSd8oj0xDZDa+5Z7jPGmK13el9Ha0mwvB0h+Yw30CLZE4F1xfv7DMNUGyNPE5TJEoFsk kUyOg81k+yYrhjRam7pYirA15UU+zZuEL7XSWToDeDuqAw/7GjUq3Eao4xp5DJgln0s3 tw5w== MIME-Version: 1.0 Sender: silicon DOT on DOT inspiration AT gmail DOT com Date: Tue, 31 Jul 2012 12:42:53 +1000 X-Google-Sender-Auth: kZvavB-GP0to8VxlkHnLJxRNudU Message-ID: Subject: [geda-user] I've updated footgen to work with nanometer base units From: Stephen Ecob To: mail AT dlharmon DOT com, geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=f46d0407160b9866d604c6172244 Reply-To: geda-user AT delorie DOT com --f46d0407160b9866d604c6172244 Content-Type: text/plain; charset=ISO-8859-1 For those of you who use Darrell Harmon's very useful "footgen" script, here's an updated version. The changes are: # Changed fundamental units from centimils to nanometers # Changed flags from integers to strings (as per newer format) # Changed a few hard coded distances from values such as # 1000, 4000 or 3940 (centimils) to 1000000nm. These hard # coded distances are still ugly, but now at least they are # metric ugly instead of imperial ugly I haven't had time to carefully check all of the generated footprints, only the ones I use. Some of the footprints will be visibly different because of the changes to hard coded distances in the script. It would be nice if hard coded distances were removed, if you are affected by the changes to them then perhaps you can tackle that task:) Stephen Ecob Silicon On Inspiration Sydney Australia www.sioi.com.au Spartan 6 LX75 with 2GB DDR3 DIMM for $375: http://www.sioi.com.au/shop/product_info.php/cPath/24/products_id/56 --f46d0407160b9866d604c6172244 Content-Type: application/octet-stream; name="footgen.py" Content-Disposition: attachment; filename="footgen.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5adqkht0 IyEvdXNyL2Jpbi9weXRob24KIyBwYWNrYWdlLnB5CiMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcg RGFycmVsbCBIYXJtb24KIyBHZW5lcmF0ZXMgZm9vdHByaW50cyBmb3IgUENCIGZyb20gdGV4dCBk ZXNjcmlwdGlvbgojIFRoZSBHUEwgYXBwbGllcyBvbmx5IHRvIHRoZSBweXRob24gc2NyaXB0cy4K IyB0aGUgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIGFuZCB0aGUgZm9vdHByaW50IGRlZmluaXRpb24g ZmlsZXMKIyBhcmUgcHVibGljIGRvbWFpbgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQoj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZl LCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCgojIEFkZGVkIGRpaCBwYXRjaCBmcm9tIERhdmlk IENhcnIgLSA4LzI4LzIwMDUgRGFycmVsbCBIYXJtb24KCiMgMS82LzIwMDcKIyBCdWdmaXggZnJv bSBEYXZpZCBDYXJyIHRvIGNvcnJlY3Qgcm93IGFuZCBjb2wgcmV2ZXJzYWwgaW4gQkdBIG9taXRi YWxscwojIFNldmVyYWwgaW1wcm92ZW1lbnRzIHNlbnQgdG8gbWUgYnkgUGV0ZXIgQmF4ZW5kYWxl LCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9uCiMgYnkgRExIOiBTcXVhcmUgcGluIDEgb24gYWxsIHRo cm91Z2ggaG9sZSwgb3B0aW9uYWwgaW5zaWRlIHNpbGtzY3JlZW4gb24KIyBTTyBwYXJ0cyB3aXRo IGRpYWdvbmFsIGNvcm5lciBmb3IgcGluIDEsIHRvIGVuYWJsZSB1c2Ugc2lsa3N0eWxlID0gImlu c2lkZSIsCiMgZGlzYWJsZWQgYnkgZGVmYXVsdCBvciB1c2Ugc2lsa3N0eWxlID0gIm5vbmUiCgoj IDkvMjgvMjAwOAojIEFkZGVkIHBhdGNoIGJ5IERhdmlkIENhcnIgdG8gYWRkIHNpbGtzdHlsZT0i Y29ybmVycyIgb3B0aW9uIG9uIHFmcAojIHNldCBzaWxrYm94d2lkdGggYW5kIHNpbGtib3hoZWln aCBpZiB1c2luZyB0aGlzIHN0eWxlCgojIDkvMjgvMjAwOAojIEFkZGVkIHJlZmRlc3ggYW5kIHJl ZmRlc3kgYXR0cmlidXRlcyB3aGljaCBhbGxvdyB0aGUgcmVmZXJlbmNlIGRlc2lnbmF0b3IgdG8g YmUgcG9zaXRpb25lZCBhcyBkZXNpcmVkCiMgUHJldmlvdXNseSB0aGUgcmVmZXJlbmNlIGRlc2ln bmF0b3Igd2FzIGxvY2F0ZWQgYXQgdGhlIG9yaWdpbi4gVGhpcyBpcyBzdGlsbCB0aGUgZGVmYXVs dC4KCiMgOS8yOS8yMDA4CiMgQWxsb3cgbmVnYXRpdmUgbnVtYmVycyBpbiBmb290cHJpbnQgZGVm aW5pdGlvbiBmaWxlCgojIDEwLzIyLzIwMDgKIyBhZGRlZCAic2tldyIgb3B0aW9uIHRvIFNPCiMg dGFrZSBvdXQgZGVidWcgcHJpbnQgZm9yIGV4cGFuZGVkbGlzdAoKIyAyLzkvMjAwOSBETEgKIyBh bGxvdyBleHBvc2VkIHBhZHMgb24gU08gcGFydHMKIyBhZGRlZCAicmVjdCIgb3B0aW9uCiMgaWYg InJlY3QiIGlzIHNldCwgaXQgd2lsbCBjcmVhdGUgYSByZWN0YW5ndWxhciBleHBvc2VkIHBhZC4g SXQgbXVzdCBiZSA+PSB0byB0aGUgZXAgdmFsdWUuCiMgSXQgc2V0cyB0aGUgaGVpZ2h0LCBhbmQg aXMgb25seSBhdmFpbGFibGUgaW4gc28gYXQgdGhpcyB0aW1lLgoKIyAyLzI0LzIwMDkgRExICiMg QWRkZWQgc3VwcG9ydCBmb3Igc2lsa2JveHdpZHRoIGFuZCBzaWxrYm94aGVpZ2h0IHRvIHNpcCwg ZGlwCgojIDQvMjkvMjAwOQojIEFwcGxpZWQgYnVnZml4IHBhdGNoIGZvciBkaWggZnJvbSBMZXZl bnRlIEtvdmFjcwojIEFwcGxpZWQgcGF0Y2ggYWRkaW5nIGRpaGYgKGRvdWJsZSByb3cgcmVjZXB0 YWNsZSkgZnJvbSBMZXZlbnRlIEtvdmFjcwoKIyAyMDEyMDczMSBTdGVwaGVuIEVjb2IKIyBDaGFu Z2VkIGZ1bmRhbWVudGFsIHVuaXRzIGZyb20gY2VudGltaWxzIHRvIG5hbm9tZXRlcnMKIyBDaGFu Z2VkIGZsYWdzIGZyb20gaW50ZWdlcnMgdG8gc3RyaW5ncyAoYXMgcGVyIG5ld2VyIGZvcm1hdCkK IyBDaGFuZ2VkIGEgZmV3IGhhcmQgY29kZWQgZGlzdGFuY2VzIGZyb20gdmFsdWVzIHN1Y2ggYXMg CiMgMTAwMCwgNDAwMCBvciAzOTQwIChjZW50aW1pbHMpIHRvIDEwMDAwMDBubS4gIFRoZXNlIGhh cmQKIyBjb2RlZCBkaXN0YW5jZXMgYXJlIHN0aWxsIHVnbHksIGJ1dCBub3cgYXQgbGVhc3QgdGhl eSBhcmUKIyBtZXRyaWMgdWdseSBpbnN0ZWFkIG9mIGltcGVyaWFsIHVnbHkKCiMgbGlzdCBvZiBh dHRyaWJ1dGVzIHRvIGJlIGRlZmluZWQgaW4gZmlsZQpkZWYgZGVmYXR0cigpOgogICAgcmV0dXJu IFtbImVsZW1lbnRkaXIiLCIiXSwKICAgICAgICAgICAgWyJwYXJ0IiwiIl0sXAogICAgICAgICAg ICBbInR5cGUiLCIiXSxcCiAgICAgICAgICAgIFsicGluc2hpZ2giLCAwXSxcCiAgICAgICAgICAg IFsicGlucyIsMF0sXAogICAgICAgICAgICBbInJvd3MiLDBdLFwKICAgICAgICAgICAgWyJjb2xz IiwwXSxcCiAgICAgICAgICAgIFsicGl0Y2giLDBdLFwKICAgICAgICAgICAgWyJzaWxrb2Zmc2V0 IiwwXSxcCiAgICAgICAgICAgIFsic2lsa3dpZHRoIiwwXSxcCiAgICAgICAgICAgIFsic2lsa2Jv eHdpZHRoIiwwXSxcCiAgICAgICAgICAgIFsic2lsa2JveGhlaWdodCIsMF0sXAogICAgICAgICAg ICBbInNpbGtzdHlsZSIsIiJdLFwKICAgICAgICAgICAgWyJvbWl0YmFsbHMiLCIiXSxcCiAgICAg ICAgICAgIFsicGFkZGlhIiwwXSxcCiAgICAgICAgICAgIFsiZGlhIiwwXSxcCiAgICAgICAgICAg IFsibWFza2NsZWFyIiwwXSxcCiAgICAgICAgICAgIFsicG9seWNsZWFyIiwwXSxcCiAgICAgICAg ICAgIFsiZXAiLDBdLFwKICAgICAgICAgICAgWyJyZWN0IiwwXSxcCiAgICAgICAgICAgIFsicGFk d2lkdGgiLDBdLFwKICAgICAgICAgICAgWyJwYWRoZWlnaHQiLDBdLFwKICAgICAgICAgICAgWyJ0 YWJ3aWR0aCIsMF0sXAogICAgICAgICAgICBbInRhYmhlaWdodCIsMF0sXAogICAgICAgICAgICBb IndpZHRoIiwwXSxcCiAgICAgICAgICAgIFsiaGVpZ2h0IiwwXSxcCiAgICAgICAgICAgIFsicmVm ZGVzeCIsMF0sXAogICAgICAgICAgICBbInJlZmRlc3kiLDBdLFwKICAgICAgICAgICAgWyJza2V3 IiwwXSxcCiAgICAgICAgICAgIFsicmVjdCIsMF0sXAogICAgICAgICAgICBbImRyaWxsIiwwXV0K CiMgQkdBIHJvdyBuYW1lcyAyMCB0b3RhbApyb3duYW1lID0gWydBJywgJ0InLCAnQycsICdEJywg J0UnLCAnRicsICdHJywgJ0gnLCAnSicsXAogICAgICAgICAgICdLJywgJ0wnLCAnTScsICdOJywg J1AnLCAnUicsICdUJywgJ1UnLCAnVicsICdXJywgJ1knXQoKIyBnZW5lcmF0ZSBiYWxsIG5hbWUg ZnJvbSByb3cgYW5kIGNvbHVtbiAoZm9yIEJHQSkKZGVmIGJhbGxuYW1lKGNvbCwgcm93KToKICAg IGJhbGwgPSAiIgogICAgIyBjYW4gaGFuZGxlIHVwIHRvIGJhbGwgWVkKICAgIHdoaWxlIHJvdz4y MDoKICAgICAgICBiYWxsPXJvd25hbWVbKHJvdy8yMCkgLSAxXQogICAgICAgIHJvdyA9IHJvdyUy MAogICAgcmV0dXJuIGJhbGwrcm93bmFtZVtyb3ctMV0rc3RyKGNvbCkKCiMgZmluZCBYIGFuZCBZ IHBvc2l0aW9uIG9mIGJhbGwgZnJvbSBuYW1lCmRlZiBiYWxscG9zKGJhbGxfbmFtZSk6CiAgICBj b2wgPSAiIgogICAgcm93ID0gMAogICAgZm9yIGNoYXIgaW4gYmFsbF9uYW1lOgogICAgICAgIGlm IGNoYXIuaXNkaWdpdCgpOgogICAgICAgICAgICBjb2wgPSBjb2wrY2hhcgogICAgICAgIGlmIGNo YXIuaXNhbHBoYSgpOgogICAgICAgICAgICByb3cgPSByb3cgKiAyMAogICAgICAgICAgICBjb3Vu dCA9IDEKICAgICAgICAgICAgZm9yIHZhbCBpbiByb3duYW1lOgogICAgICAgICAgICAgICAgaWYg dmFsPT1jaGFyOgogICAgICAgICAgICAgICAgICAgIHJvdyA9IHJvdyArIGNvdW50CiAgICAgICAg ICAgICAgICBjb3VudCA9IGNvdW50ICsxCiAgICBjb2wgPSBpbnQoY29sKQogICAgcmV0dXJuIFtj b2wscm93XQogICAgCiMgZXhwYW5kIEIxOkM1IHRvIGxpc3Qgb2YgYmFsbHMKZGVmIGV4cGFuZGV4 cHIoaW5wdXRidWYpOgogICAgIyBzaW5nbGUgYmFsbCBoYXMgbm8gOgogICAgaWYgaW5wdXRidWYu ZmluZCgiOiIpPT0tMToKICAgICAgICByZXR1cm4gIiBcIiIgKyBpbnB1dGJ1ZiArICJcIiIKICAg ICMgbXVsdGlwbGUgYmFsbHMKICAgIGV4cGFuZGVkID0gIiIKICAgIHBvczEgPSBiYWxscG9zKGlu cHV0YnVmWzppbnB1dGJ1Zi5maW5kKCI6IildKQogICAgcG9zMiA9IGJhbGxwb3MoaW5wdXRidWZb aW5wdXRidWYuZmluZCgiOiIpKzE6XSkKICAgICMgTWFrZSBzdXJlIG9yZGVyIGlzIGluY3JlYXNp bmcgCiAgICBpZiBwb3MxWzBdPnBvczJbMF06CiAgICAgICAgdG1wID0gcG9zMVswXQogICAgICAg IHBvczFbMF0gPSBwb3MyWzBdCiAgICAgICAgcG9zMlswXSA9IHRtcAogICAgaWYgcG9zMVsxXT5w b3MyWzFdOgogICAgICAgIHRtcCA9IHBvczFbMV0KICAgICAgICBwb3MxWzFdID0gcG9zMlsxXQog ICAgICAgIHBvczJbMV0gPSB0bXAKICAgIGZvciBjb2wgaW4gcmFuZ2UocG9zMVswXSwgcG9zMlsw XSsxKToKICAgICAgICBmb3Igcm93IGluIHJhbmdlKHBvczFbMV0sIHBvczJbMV0rMSk6CiAgICAg ICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWQgKyAiICIgKyJcIiIrIGJhbGxuYW1lKGNvbCwgcm93 KSsiXCIiCiAgICByZXR1cm4gZXhwYW5kZWQKCiMgZXhwYW5kIGxpc3Qgb2YgYmFsbHMgdG8gb21p dApkZWYgZXhwYW5kb21pdGxpc3Qob21pdGxpc3QpOgogICAgZXhwYW5kZWRsaXN0ID0gIiIKICAg IHRtcGJ1ZiA9ICIiCiAgICBpZiBub3Qgb21pdGxpc3Q6CiAgICAgICAgcmV0dXJuICIiCiAgICBm b3IgY2hhcmFjdGVyIGluIG9taXRsaXN0OgogICAgICAgIGlmIGNoYXJhY3Rlci5pc2FscGhhKCkg b3IgY2hhcmFjdGVyLmlzZGlnaXQoKSBvciBjaGFyYWN0ZXI9PSI6IjoKICAgICAgICAgICAgdG1w YnVmID0gdG1wYnVmICsgY2hhcmFjdGVyCiAgICAgICAgZWxpZiBjaGFyYWN0ZXIgPT0gJywnOgog ICAgICAgICAgICBleHBhbmRlZGxpc3QgPSBleHBhbmRlZGxpc3QgKyBleHBhbmRleHByKHRtcGJ1 ZikKICAgICAgICAgICAgdG1wYnVmID0gJycKICAgICNsYXN0IHZhbHVlIHdpbGwgYmUgaW4gdG1w YnVmCiAgICBleHBhbmRlZGxpc3QgPSBleHBhbmRlZGxpc3QgKyBleHBhbmRleHByKHRtcGJ1ZikK ICAgICMgZGVidWc6IHByaW50IGV4cGFuZGVkbGlzdAogICAgcmV0dXJuIGV4cGFuZGVkbGlzdAog ICAgCmRlZiBmaW5kYXR0cihhdHRybGlzdCwgbmFtZSk6CiAgICBmb3IgYXR0cmlidXRlIGluIGF0 dHJsaXN0OgogICAgICAgIGlmIGF0dHJpYnV0ZVswXT09bmFtZToKICAgICAgICAgICAgcmV0dXJu IGF0dHJpYnV0ZVsxXQogICAgcHJpbnQgIkF0dHJpYnV0ZSAlcyBub3QgZm91bmQiICUgbmFtZQog ICAgcHJpbnQgYXR0cmxpc3QKICAgIHJldHVybiAwCgpkZWYgY2hhbmdlYXR0cihhdHRybGlzdCwg bmFtZSwgbmV3dmFsKToKICAgIGZvciBhdHRyaWJ1dGUgaW4gYXR0cmxpc3Q6CiAgICAgICAgaWYg YXR0cmlidXRlWzBdPT1uYW1lOgogICAgICAgICAgICBhdHRyaWJ1dGVbMV0gPSBuZXd2YWwKICAg ICAgICAgICAgcmV0dXJuCiAgICBwcmludCAiQXR0cmlidXRlICVzIG5vdCBmb3VuZCIgJSBuYW1l CiAgICBwcmludCBhdHRybGlzdAogICAgcmV0dXJuIDAKCiMgRm9ybWF0IG9mIHBhZCBsaW5lOgoj IFBhZFstMTc1MDAgLTEzNTAwIC0xNzUwMCAtNzAwMCAyMDAwIDEwMDAgMzAwMCAiMSIgIjEiIDB4 MDAwMDAxODBdCiMgWDEgWTEgWDIgWTIgV2lkdGggcG9seWNsZWFyIG1hc2sgLi4uLgpkZWYgcGFk KHgxLCB5MSwgeDIsIHkyLCB3aWR0aCwgY2xlYXIsIG1hc2ssIHBpbm5hbWUsIHNoYXBlKToKICAg IGlmIHNoYXBlPT0icm91bmQiOgogICAgICAgIGZsYWdzID0gIiIKICAgIGVsc2U6CiAgICAgICAg ZmxhZ3MgPSAic3F1YXJlIgogICAgcmV0dXJuICJcdFBhZFslZG5tICVkbm0gJWRubSAlZG5tICVk bm0gJWRubSAlZG5tIFwiJXNcIiBcIiVzXCIgXCIlc1wiXVxuIlwKICAgICAgICAgICAlICh4MSwg eTEsIHgyLCB5Miwgd2lkdGgsIGNsZWFyKjIsIG1hc2srd2lkdGgsIHBpbm5hbWUsIHBpbm5hbWUs IGZsYWdzKQoKZGVmIHBhZGN0cih4LHksaGVpZ2h0LHdpZHRoLGNsZWFyLG1hc2sscGlubmFtZSk6 CiAgICBsaW5ld2lkdGggPSBtaW4oaGVpZ2h0LHdpZHRoKQogICAgbGluZWxlbmd0aCA9IGFicyho ZWlnaHQtd2lkdGgpCiAgICBpZiBoZWlnaHQ+d2lkdGg6CiAgICAgICAgI3ZlcnRjYWwgcGFkCiAg ICAgICAgeDEgPSB4CiAgICAgICAgeDIgPSB4CiAgICAgICAgeTEgPSB5IC0gbGluZWxlbmd0aC8y CiAgICAgICAgeTIgPSB5ICsgbGluZWxlbmd0aC8yCiAgICBlbHNlOgogICAgICAgICNob3Jpem9u dGFsIHBhZAogICAgICAgIHgxID0geCAtIGxpbmVsZW5ndGgvMgogICAgICAgIHgyID0geCArIGxp bmVsZW5ndGgvMgogICAgICAgIHkxID0geQogICAgICAgIHkyID0geQogICAgcmV0dXJuIHBhZCh4 MSx5MSx4Mix5MixsaW5ld2lkdGgsY2xlYXIsbWFzayxwaW5uYW1lLCJzcXVhcmUiKSAgICAgICAg CgojIGJhbGwgaXMgYSB6ZXJvIGxlbmd0aCByb3VuZCBwYWQKZGVmIGJhbGwoeCwgeSwgZGlhLCBj bGVhciwgbWFzaywgbmFtZSk6CiAgICByZXR1cm4gcGFkKHgsIHksIHgsIHksIGRpYSwgY2xlYXIs IG1hc2ssIG5hbWUsICJyb3VuZCIpCgojIGRyYXcgc2lsa3NjcmVlbiBsaW5lCmRlZiBzaWxrKHgx LCB5MSwgeDIsIHkyLCB3aWR0aCk6CiAgICByZXR1cm4gIlx0RWxlbWVudExpbmUgWyVkbm0gJWRu bSAlZG5tICVkbm0gJWRubV1cbiIgJSAoeDEsIHkxLCB4MiwgeTIsIHdpZHRoKQojIGRyYXcgc2ls a3NjcmVlbiBib3gKZGVmIGJveCh4MSwgeTEsIHgyLCB5Miwgd2lkdGgpOgogICAgcmV0dXJuIHNp bGsoeDEseTEseDIseTEsd2lkdGgpK1wKICAgICAgICAgICBzaWxrKHgyLHkxLHgyLHkyLHdpZHRo KStcCiAgICAgICAgICAgc2lsayh4Mix5Mix4MSx5Mix3aWR0aCkrXAogICAgICAgICAgIHNpbGso eDEseTIseDEseTEsd2lkdGgpCgojIGRyYXcgaW5zaWRlIGJveCAoUFJCKQojIGRyYXdzIHNpbGtz Y3JlZW4gYm94IGZvciBTTyBvciBRRlAgdHlwZSBwYXJ0cyB3aXRoIG5vdGNoZWQgcGluICMxIGNv cm5lcgpkZWYgaW5zaWRlYm94KHgxLCB5MSwgeDIsIHkyLCB3aWR0aCk6CiAgICByZXR1cm4gc2ls ayh4MSx5MSx4Mix5MSx3aWR0aCkrXAogICAgICAgICAgIHNpbGsoeDIseTEseDIseTIrMTAwMCx3 aWR0aCkrXAogICAgICAgICAgIHNpbGsoeDIseTIrMTAwMCx4MisxMDAwLHkyLHdpZHRoKStcCiAg ICAgICAgICAgc2lsayh4MisxMDAwLHkyLHgxLHkyLHdpZHRoKStcCiAgICAgICAgICAgc2lsayh4 MSx5Mix4MSx5MSx3aWR0aCkKCmRlZiBiZ2EoYXR0cmxpc3QpOgogICAgIyBkZWZpbml0aW9ucyBu ZWVkZWQgdG8gZ2VuZXJhdGUgYmdhCiAgICBjb2xzID0gZmluZGF0dHIoYXR0cmxpc3QsICJjb2xz IikKICAgIHJvd3MgPSBmaW5kYXR0cihhdHRybGlzdCwgInJvd3MiKQogICAgcGl0Y2ggPSBmaW5k YXR0cihhdHRybGlzdCwgInBpdGNoIikKICAgIGJhbGxkaWEgPSBmaW5kYXR0cihhdHRybGlzdCwg ImRpYSIpCiAgICBwb2x5Y2xlYXIgPSBmaW5kYXR0cihhdHRybGlzdCwgInBvbHljbGVhciIpCiAg ICBtYXNrY2xlYXIgPSBmaW5kYXR0cihhdHRybGlzdCwgIm1hc2tjbGVhciIpCiAgICBzaWxrd2lk dGggPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGt3aWR0aCIpCiAgICBzaWxrb2Zmc2V0ID0gZmlu ZGF0dHIoYXR0cmxpc3QsICJzaWxrb2Zmc2V0IikKICAgIHNpbGtib3h3aWR0aCA9IGZpbmRhdHRy KGF0dHJsaXN0LCAic2lsa2JveHdpZHRoIikKICAgIHNpbGtib3hoZWlnaHQgPSBmaW5kYXR0cihh dHRybGlzdCwgInNpbGtib3hoZWlnaHQiKQogICAgcmVmZGVzeCA9IGZpbmRhdHRyKGF0dHJsaXN0 LCAicmVmZGVzeCIpCiAgICByZWZkZXN5ID0gZmluZGF0dHIoYXR0cmxpc3QsICJyZWZkZXN5IikK ICAgIG9taXRsaXN0ID0gZXhwYW5kb21pdGxpc3QoZmluZGF0dHIoYXR0cmxpc3QsICJvbWl0YmFs bHMiKSkKICAgIHdpZHRoID0gKGNvbHMtMSkqcGl0Y2grYmFsbGRpYQogICAgaGVpZ2h0ID0gKHJv d3MtMSkqcGl0Y2grYmFsbGRpYQogICAgIyBlbnN1cmUgc2lsa3NjcmVlbiBkb2Vzbid0IG92ZXJs YXAgYmFsbHMKICAgIGlmIHNpbGtib3h3aWR0aDx3aWR0aCBvciBzaWxrYm94aGVpZ2h0PGhlaWdo dDoKICAgICAgICBzaWxrYm94eCA9IHdpZHRoLzIgKyBzaWxrb2Zmc2V0CiAgICAgICAgc2lsa2Jv eHkgPSBoZWlnaHQvMiArIHNpbGtvZmZzZXQKICAgIGVsc2U6CiAgICAgICAgc2lsa2JveHggPSBz aWxrYm94d2lkdGgvMgogICAgICAgIHNpbGtib3h5ID0gc2lsa2JveGhlaWdodC8yCiAgICBiZ2Fl bHQgPSAiRWxlbWVudFtcIlwiIFwiRGVzY1wiIFwiTmFtZVwiIFwiVmFsXCIgMTAwMCAxMDAwICVk bm0gJWRubSAwIDEwMCBcIlwiXVxuKFxuIiAlIChyZWZkZXN4LCAtMTAwMDAwMCAtIHJlZmRlc3kp CiAgICAjIHNpbGtzY3JlZW4gb3V0bGluZQogICAgYmdhZWx0ID0gYmdhZWx0ICsgYm94KHNpbGti b3h4LHNpbGtib3h5LC1zaWxrYm94eCwtc2lsa2JveHksc2lsa3dpZHRoKQogICAgIyBwaW4gMSBp bmRpY2F0b3IgMW1tIGxvbmcgdGljawogICAgYmdhZWx0ID0gYmdhZWx0ICsgc2lsaygtc2lsa2Jv eHgsIC1zaWxrYm94eSwgLShzaWxrYm94eCsxMDAwMDAwKSwgLShzaWxrYm94eSsxMDAwMDAwKSwg c2lsa3dpZHRoKQogICAgIyBwb3NpdGlvbiBvZiBiYWxsIEExCiAgICB4b2ZmID0gLWludCgoY29s cysxKSpwaXRjaC8yKQogICAgeW9mZiA9IC1pbnQoKHJvd3MrMSkqcGl0Y2gvMikKICAgIGZvciBy b3cgaW4gcmFuZ2UoMSwgcm93cysxKToKICAgICAgICBmb3IgY29sIGluIHJhbmdlKDEsIDErY29s cyk6CiAgICAgICAgICAgICMgZm91bmQgYnVnIGhlcmUgcm93LGNvbCByZXZlcnNlZAogICAgICAg ICAgICBpZiBvbWl0bGlzdC5maW5kKCJcIiIrYmFsbG5hbWUoY29sLHJvdykrIlwiIik9PS0xOgog ICAgICAgICAgICAgICAgeCA9IHhvZmYgKyAocGl0Y2gqY29sKQogICAgICAgICAgICAgICAgeSA9 IHlvZmYgKyAocGl0Y2gqcm93KQogICAgICAgICAgICAgICAgYmdhZWx0ID0gYmdhZWx0ICsgYmFs bCh4LCB5LCBiYWxsZGlhLCBwb2x5Y2xlYXIsIG1hc2tjbGVhciwgYmFsbG5hbWUoY29sLHJvdykp CiAgICByZXR1cm4gYmdhZWx0KyIpXG4iCgojIGRyYXcgYSByb3cgb2Ygc3F1YXJlIHBhZHMKIyBw b3MgaXMgY2VudGVyIHBvc2l0aW9uCiMgd2hpY2h3YXkgY2FuIGJlIHVwIGRvd24gbGVmdCByaWdo dApkZWYgcm93b2ZwYWRzKHBvcywgcGl0Y2gsIHdoaWNod2F5LCBwYWRsZW4sIHBhZGhlaWdodCwg c3RhcnRudW0sIG51bXBhZHMsIG1hc2tjbGVhciwgcG9seWNsZWFyKToKICAgIHBhZHMgPSAiIgog ICAgcm93bGVuID0gcGl0Y2ggKiAobnVtcGFkcyAtIDEpCiAgICBpZiB3aGljaHdheSA9PSAiZG93 biI6CiAgICAgICAgeCA9IHBvc1swXQogICAgICAgIHkgPSBwb3NbMV0gLSByb3dsZW4vMgogICAg ICAgIGZvciBwYWRudW0gaW4gcmFuZ2UgKHN0YXJ0bnVtLCBzdGFydG51bStudW1wYWRzKToKICAg ICAgICAgICAgcGFkcyA9IHBhZHMgKyBwYWRjdHIoeCx5LHBhZGhlaWdodCxwYWRsZW4scG9seWNs ZWFyLG1hc2tjbGVhcixzdHIocGFkbnVtKSkKICAgICAgICAgICAgeSA9IHkgKyBwaXRjaAogICAg ZWxpZiB3aGljaHdheSA9PSAidXAiOgogICAgICAgIHggPSBwb3NbMF0KICAgICAgICB5ID0gcG9z WzFdICsgcm93bGVuLzIKICAgICAgICBmb3IgcGFkbnVtIGluIHJhbmdlIChzdGFydG51bSwgc3Rh cnRudW0rbnVtcGFkcyk6CiAgICAgICAgICAgIHBhZHMgPSBwYWRzICsgcGFkY3RyKHgseSxwYWRo ZWlnaHQscGFkbGVuLHBvbHljbGVhcixtYXNrY2xlYXIsc3RyKHBhZG51bSkpCiAgICAgICAgICAg IHkgPSB5IC0gcGl0Y2gKICAgIGVsaWYgd2hpY2h3YXkgPT0gInJpZ2h0IjoKICAgICAgICB4ID0g cG9zWzBdIC0gcm93bGVuLzIKICAgICAgICB5ID0gcG9zWzFdCiAgICAgICAgZm9yIHBhZG51bSBp biByYW5nZSAoc3RhcnRudW0sIHN0YXJ0bnVtK251bXBhZHMpOgogICAgICAgICAgICBwYWRzID0g cGFkcyArIHBhZGN0cih4LHkscGFkaGVpZ2h0LHBhZGxlbixwb2x5Y2xlYXIsbWFza2NsZWFyLHN0 cihwYWRudW0pKQogICAgICAgICAgICB4ID0geCArIHBpdGNoCiAgICBlbGlmIHdoaWNod2F5ID09 ICJsZWZ0IjoKICAgICAgICB4ID0gcG9zWzBdICsgcm93bGVuLzIKICAgICAgICB5ID0gcG9zWzFd CiAgICAgICAgZm9yIHBhZG51bSBpbiByYW5nZSAoc3RhcnRudW0sIHN0YXJ0bnVtK251bXBhZHMp OgogICAgICAgICAgICBwYWRzID0gcGFkcyArIHBhZGN0cih4LHkscGFkaGVpZ2h0LHBhZGxlbixw b2x5Y2xlYXIsbWFza2NsZWFyLHN0cihwYWRudW0pKQogICAgICAgICAgICB4ID0geCAtIHBpdGNo CiAgICByZXR1cm4gcGFkcwoKZGVmIHFmcChhdHRybGlzdCk6CiAgICBwaW5zID0gZmluZGF0dHIo YXR0cmxpc3QsICJwaW5zIikKICAgIHBpbnNoaWdoID0gZmluZGF0dHIoYXR0cmxpc3QsICJwaW5z aGlnaCIpCiAgICBwYWR3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGFkd2lkdGgiKQogICAg cGFkaGVpZ2h0ID0gZmluZGF0dHIoYXR0cmxpc3QsICJwYWRoZWlnaHQiKQogICAgcGl0Y2ggPSBm aW5kYXR0cihhdHRybGlzdCwgInBpdGNoIikKICAgIHdpZHRoID0gZmluZGF0dHIoYXR0cmxpc3Qs ICJ3aWR0aCIpCiAgICBoZWlnaHQgPSBmaW5kYXR0cihhdHRybGlzdCwgImhlaWdodCIpCiAgICBw b2x5Y2xlYXIgPSBmaW5kYXR0cihhdHRybGlzdCwgInBvbHljbGVhciIpCiAgICBtYXNrY2xlYXIg PSBmaW5kYXR0cihhdHRybGlzdCwgIm1hc2tjbGVhciIpCiAgICBzaWxrd2lkdGggPSBmaW5kYXR0 cihhdHRybGlzdCwgInNpbGt3aWR0aCIpCiAgICBzaWxrb2Zmc2V0ID0gZmluZGF0dHIoYXR0cmxp c3QsICJzaWxrb2Zmc2V0IikKICAgIHNpbGtib3h3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAi c2lsa2JveHdpZHRoIikKICAgIHNpbGtib3hoZWlnaHQgPSBmaW5kYXR0cihhdHRybGlzdCwgInNp bGtib3hoZWlnaHQiKQogICAgc2lsa3N0eWxlID0gZmluZGF0dHIoYXR0cmxpc3QsICJzaWxrc3R5 bGUiKQogICAgZXAgPSBmaW5kYXR0cihhdHRybGlzdCwgImVwIikKICAgIHJlZmRlc3ggPSBmaW5k YXR0cihhdHRybGlzdCwgInJlZmRlc3giKQogICAgcmVmZGVzeSA9IGZpbmRhdHRyKGF0dHJsaXN0 LCAicmVmZGVzeSIpCiAgICBxZnBlbHQgPSAiRWxlbWVudFtcIlwiIFwiRGVzY1wiIFwiTmFtZVwi IFwiVmFsXCIgMTAwMCAxMDAwICVkbm0gJWRubSAwIDEwMCBcIlwiXVxuKFxuIiAlIChyZWZkZXN4 LCAtMTAwMDAwMCAtIHJlZmRlc3kpCiAgICBpZiBwaW5zaGlnaD09MDoKICAgICAgICBwaW5zaGln aCA9IHBpbnMvNAogICAgICAgIHBpbnN3aWRlID0gcGlucy80CiAgICAgICAgaGVpZ2h0ID0gd2lk dGgKICAgIGVsc2U6CiAgICAgICAgcGluc3dpZGUgPSAocGlucy0yKnBpbnNoaWdoKS8yCiAgICBp ZiBwaW5zaGlnaDoKICAgICAgICAjIGRyYXcgbGVmdCBzaWRlCiAgICAgICAgcWZwZWx0ID0gcWZw ZWx0ICsgcm93b2ZwYWRzKFstKHdpZHRoK3BhZHdpZHRoKS8yLDBdLCBwaXRjaCwgImRvd24iLCBw YWR3aWR0aCxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGhlaWdodCwg MSwgcGluc2hpZ2gsIG1hc2tjbGVhciwgcG9seWNsZWFyKQogICAgICAgICMgZHJhdyByaWdodCBz aWRlCiAgICAgICAgcWZwZWx0ID0gcWZwZWx0ICsgcm93b2ZwYWRzKFsod2lkdGgrcGFkd2lkdGgp LzIsMF0sIHBpdGNoLCAidXAiLCBwYWR3aWR0aCxcCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhZGhlaWdodCwgcGluc2hpZ2grcGluc3dpZGUrMSwgcGluc2hpZ2gsXAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrY2xlYXIsIHBvbHljbGVhcikKICAg IGlmIHBpbnN3aWRlOgogICAgICAgICMgZHJhdyBib3R0b20KICAgICAgICBxZnBlbHQgPSBxZnBl bHQgKyByb3dvZnBhZHMoWzAsKGhlaWdodCtwYWR3aWR0aCkvMl0sIHBpdGNoLCAicmlnaHQiLCBw YWRoZWlnaHQsXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWR3aWR0aCwg cGluc2hpZ2grMSwgcGluc3dpZGUsIG1hc2tjbGVhciwgcG9seWNsZWFyKQogICAgICAgICMgZHJh dyB0b3AKICAgICAgICBxZnBlbHQgPSBxZnBlbHQgKyByb3dvZnBhZHMoWzAsLShoZWlnaHQrcGFk d2lkdGgpLzJdLCBwaXRjaCwgImxlZnQiLCBwYWRoZWlnaHQsXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYWR3aWR0aCwgMipwaW5zaGlnaCtwaW5zd2lkZSsxLCBwaW5zd2lk ZSwgbWFza2NsZWFyLCBwb2x5Y2xlYXIpCiAgICAjIGV4cG9zZWQgcGFkIHBhY2thZ2VzOgogICAg aWYgZXA6CiAgICAgICAgcWZwZWx0ID1xZnBlbHQgKyBwYWQoMCwwLDAsMCxlcCxwb2x5Y2xlYXIs bWFza2NsZWFyLHN0cihwaW5zKzEpLCJzcXVhcmUiKQogICAgaWYgc2lsa3N0eWxlID09ICJpbnNp ZGUiOgogICAgICAgIHggPSB3aWR0aC8yIC0gc2lsa29mZnNldAogICAgICAgIHkgPSBoZWlnaHQv MiAtIHNpbGtvZmZzZXQKICAgICAgICBxZnBlbHQgPSBxZnBlbHQgKyBib3goeCx5LC14LC15LHNp bGt3aWR0aCkKICAgICAgICBxZnBlbHQgPSBxZnBlbHQgKyBzaWxrKC14LC15LC0oeCsxMDAwMDAw KSwtKHkrMTAwMDAwMCksc2lsa3dpZHRoKQogICAgZWxpZiBzaWxrc3R5bGUgPT0gIm91dHNpZGUi OgogICAgICAgIHggPSAod2lkdGgrMipwYWR3aWR0aCkvMiArIHNpbGtvZmZzZXQKICAgICAgICB5 ID0gKGhlaWdodCsyKnBhZHdpZHRoKS8yICsgc2lsa29mZnNldAogICAgICAgIHFmcGVsdCA9IHFm cGVsdCArIGJveCh4LHksLXgsLXksc2lsa3dpZHRoKQogICAgICAgIHFmcGVsdCA9IHFmcGVsdCAr IHNpbGsoLXgsLXksLSh4KzEwMDAwMDApLC0oeSsxMDAwMDAwKSxzaWxrd2lkdGgpCiAgICBlbGlm IHNpbGtzdHlsZSA9PSAiY29ybmVycyI6CiAgICAgICAgeF9zdG9wID0gMC41KnBpdGNoKihwaW5z d2lkZS0xKSArIC41KnBhZGhlaWdodCArIHNpbGt3aWR0aAogICAgICAgIHlfc3RvcCA9IDAuNSpw aXRjaCoocGluc2hpZ2gtMSkgKyAuNSpwYWRoZWlnaHQgKyBzaWxrd2lkdGgKICAgICAgICB4ID0g c2lsa2JveHdpZHRoLzIgKyBzaWxrd2lkdGgvMgogICAgICAgIHkgPSBzaWxrYm94aGVpZ2h0LzIg KyBzaWxrd2lkdGgvMgogICAgICAgICNVTAogICAgICAgIHFmcGVsdCA9IHFmcGVsdCArIHNpbGso LXgsLXksLXhfc3RvcCwteSxzaWxrd2lkdGgpCiAgICAgICAgcWZwZWx0ID0gcWZwZWx0ICsgc2ls aygteCwteSwteCwteV9zdG9wLHNpbGt3aWR0aCkKICAgICAgICAjVVIKICAgICAgICBxZnBlbHQg PSBxZnBlbHQgKyBzaWxrKHgsLXkseF9zdG9wLC15LHNpbGt3aWR0aCkKICAgICAgICBxZnBlbHQg PSBxZnBlbHQgKyBzaWxrKHgsLXkseCwteV9zdG9wLHNpbGt3aWR0aCkKICAgICAgICAjTEwKICAg ICAgICBxZnBlbHQgPSBxZnBlbHQgKyBzaWxrKC14LHksLXhfc3RvcCx5LHNpbGt3aWR0aCkKICAg ICAgICBxZnBlbHQgPSBxZnBlbHQgKyBzaWxrKC14LHksLXgseV9zdG9wLHNpbGt3aWR0aCkKICAg ICAgICAjTFIKICAgICAgICBxZnBlbHQgPSBxZnBlbHQgKyBzaWxrKHgseSx4X3N0b3AseSxzaWxr d2lkdGgpCiAgICAgICAgcWZwZWx0ID0gcWZwZWx0ICsgc2lsayh4LHkseCx5X3N0b3Asc2lsa3dp ZHRoKQogICAgICAgICNQaW4gMQogICAgICAgIHFmcGVsdCA9IHFmcGVsdCArIHNpbGsoLXgsLXks LSh4KzEwMDAwMDApLC0oeSsxMDAwMDAwKSxzaWxrd2lkdGgpCgogICAgcmV0dXJuIHFmcGVsdCsi KVxuIgoKIyBkZWYgcm93b2ZwYWRzKHBvcywgcGl0Y2gsIHdoaWNod2F5LCBwYWRsZW4sIHBhZGhl aWdodCwgc3RhcnRudW0sIG51bXBhZHMsIG1hc2tjbGVhciwgcG9seWNsZWFyKToKIyB1c2VzIHBp bnMsIHBhZHdpZHRoLCBwYWRoZWlnaHQsIHBpdGNoCmRlZiBzbyhhdHRybGlzdCk6CiAgICBwaW5z ID0gZmluZGF0dHIoYXR0cmxpc3QsICJwaW5zIikKICAgIHBpdGNoID0gZmluZGF0dHIoYXR0cmxp c3QsICJwaXRjaCIpCiAgICB3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAid2lkdGgiKQogICAg cGFkd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgInBhZHdpZHRoIikKICAgIHBhZGhlaWdodCA9 IGZpbmRhdHRyKGF0dHJsaXN0LCAicGFkaGVpZ2h0IikKICAgIHBvbHljbGVhciA9IGZpbmRhdHRy KGF0dHJsaXN0LCAicG9seWNsZWFyIikKICAgIG1hc2tjbGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0 LCAibWFza2NsZWFyIikKICAgIHNpbGt3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAic2lsa3dp ZHRoIikKICAgIHNpbGtvZmZzZXQgPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGtvZmZzZXQiKQog ICAgc2lsa2JveGhlaWdodCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAic2lsa2JveGhlaWdodCIpCiAg ICBzaWxrc3R5bGUgPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGtzdHlsZSIpCiAgICByZWZkZXN4 ID0gZmluZGF0dHIoYXR0cmxpc3QsICJyZWZkZXN4IikKICAgIHJlZmRlc3kgPSBmaW5kYXR0cihh dHRybGlzdCwgInJlZmRlc3kiKQogICAgc2tldyA9IGZpbmRhdHRyKGF0dHJsaXN0LCAic2tldyIp CiAgICBlcCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAiZXAiKQogICAgcmVjdCA9IGZpbmRhdHRyKGF0 dHJsaXN0LCAicmVjdCIpCiAgICBpZiBwaW5zICUgMjoKICAgICAgICBwcmludCAiT2RkIG51bWJl ciBvZiBwaW5zOiB0aGF0IGlzIGEgcHJvYmxlbSIKICAgICAgICBwcmludCAiU2tpcHBpbmcgIiAr IGZpbmRhdHRyKGF0dHJsaXN0LCAidHlwZSIpCiAgICAgICAgcmV0dXJuICIiCiAgICByb3dwb3Mg PSAod2lkdGgrcGFkd2lkdGgpLzIKICAgIHNvZWx0ID0gIkVsZW1lbnRbXCJcIiBcIkRlc2NcIiBc Ik5hbWVcIiBcIlZhbFwiIDEwMDAgMTAwMCAlZG5tICVkbm0gMCAxMDAgXCJcIl1cbihcbiIgJSAo cmVmZGVzeCwgLTEwMDAwMDAgLSByZWZkZXN5KQogICAgc29lbHQgPSBzb2VsdCArIHJvd29mcGFk cyhbLXJvd3Bvcywtc2tld10sIHBpdGNoLCAiZG93biIsIHBhZHdpZHRoLCBwYWRoZWlnaHQsIDEs IHBpbnMvMiwgbWFza2NsZWFyLCBwb2x5Y2xlYXIpCiAgICBzb2VsdCA9IHNvZWx0ICsgcm93b2Zw YWRzKFtyb3dwb3Msc2tld10sIHBpdGNoLCAidXAiLCBwYWR3aWR0aCwgcGFkaGVpZ2h0LCAxK3Bp bnMvMiwgcGlucy8yLCBtYXNrY2xlYXIsIHBvbHljbGVhcikKICAgIHNpbGtib3hoZWlnaHQgPSBt YXgocGl0Y2gqKHBpbnMtMikvMitwYWRoZWlnaHQrMipzaWxrb2Zmc2V0LHNpbGtib3hoZWlnaHQp CiAgICAKICAgIHNpbGt5ID0gc2lsa2JveGhlaWdodC8yCiAgICBsZW4gPSAwCiAgICBwcmludCAi RVAiICsgc3RyKGVwKQogICAgcHJpbnQgIkVQSEVJR0hUIiArIHN0cihyZWN0KQogICAgaWYgcmVj dDoKICAgICAgICBsZW4gPSAocmVjdCAtIGVwKSAvIDIKICAgIGlmIGVwOgogICAgICAgIHNvZWx0 ID0gc29lbHQgKyBwYWQoMCxsZW4sMCwtbGVuLGVwLHBvbHljbGVhcixtYXNrY2xlYXIsc3RyKHBp bnMrMSksInJlY3QiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg IyBJbnNpZGUgYm94IHdpdGggbm90Y2hlZCBjb3JuZXIgYXMgc3VibWl0dGVkIGluIHBhdGNoIGJ5 IFBSQgogICAgaWYoc2lsa3N0eWxlID09ICJpbnNpZGUiKToKICAgICAgICBzaWxreCA9IHdpZHRo LzIgLSBzaWxrb2Zmc2V0CiAgICAgICAgc29lbHQgPSBzb2VsdCArIGluc2lkZWJveChzaWxreCxz aWxreSwtc2lsa3gsLXNpbGt5LHNpbGt3aWR0aCkKICAgIGVsc2U6CiAgICAgICAgc2lsa3ggPSB3 aWR0aC8yICsgc2lsa29mZnNldCArIHBhZHdpZHRoCiAgICAgICAgc29lbHQgPSBzb2VsdCArIGJv eChzaWxreCxzaWxreSwtc2lsa3gsLXNpbGt5LHNpbGt3aWR0aCkKICAgICAgICBzb2VsdCA9IHNv ZWx0ICsgc2lsaygwLC1zaWxreSsxMDAwMDAwLC0xMDAwMDAwLC1zaWxreSxzaWxrd2lkdGgpCiAg ICAgICAgc29lbHQgPSBzb2VsdCArIHNpbGsoMCwtc2lsa3krMTAwMDAwMCwxMDAwMDAwLC1zaWxr eSxzaWxrd2lkdGgpCiAgICByZXR1cm4gc29lbHQrIilcbiIKCmRlZiB0d29wYWQoYXR0cmxpc3Qp OgogICAgd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgIndpZHRoIikKICAgIHBhZHdpZHRoID0g ZmluZGF0dHIoYXR0cmxpc3QsICJwYWR3aWR0aCIpCiAgICBwYWRoZWlnaHQgPSBmaW5kYXR0cihh dHRybGlzdCwgInBhZGhlaWdodCIpCiAgICBwb2x5Y2xlYXIgPSBmaW5kYXR0cihhdHRybGlzdCwg InBvbHljbGVhciIpCiAgICBtYXNrY2xlYXIgPSBmaW5kYXR0cihhdHRybGlzdCwgIm1hc2tjbGVh ciIpCiAgICBzaWxrd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGt3aWR0aCIpCiAgICBz aWxrYm94d2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGtib3h3aWR0aCIpCiAgICBzaWxr Ym94aGVpZ2h0ID0gZmluZGF0dHIoYXR0cmxpc3QsICJzaWxrYm94aGVpZ2h0IikKICAgIHNpbGtv ZmZzZXQgPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGtvZmZzZXQiKQogICAgcmVmZGVzeCA9IGZp bmRhdHRyKGF0dHJsaXN0LCAicmVmZGVzeCIpCiAgICByZWZkZXN5ID0gZmluZGF0dHIoYXR0cmxp c3QsICJyZWZkZXN5IikKICAgIHR3b3BhZGVsdCA9ICJFbGVtZW50W1wiXCIgXCJEZXNjXCIgXCJO YW1lXCIgXCJWYWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJdXG4oXG4iICUgKHJl ZmRlc3gsIC0xMDAwMDAwIC0gcmVmZGVzeSkKICAgIHR3b3BhZGVsdCA9IHR3b3BhZGVsdCArIHJv d29mcGFkcyhbMCwwXSwgd2lkdGgrcGFkd2lkdGgsICJyaWdodCIsIHBhZHdpZHRoLCBwYWRoZWln aHQsIDEsIDIsIG1hc2tjbGVhciwgcG9seWNsZWFyKQogICAgc2lsa3ggPSBtYXgoKHdpZHRoKzIq cGFkd2lkdGgpLzIgKyBzaWxrb2Zmc2V0LHNpbGtib3h3aWR0aC8yKQogICAgc2lsa3kgPSBtYXgo cGFkaGVpZ2h0LzIgKyBzaWxrb2Zmc2V0LCBzaWxrYm94aGVpZ2h0LzIpCiAgICB0d29wYWRlbHQg PSB0d29wYWRlbHQgKyBib3goc2lsa3gsc2lsa3ksLXNpbGt4LC1zaWxreSxzaWxrd2lkdGgpCiAg ICByZXR1cm4gdHdvcGFkZWx0KyIpXG4iCgojIFNPVDIyMywgRERQQUssIFRPLTI2MywgZXRjCmRl ZiB0YWJiZWQoYXR0cmxpc3QpOgogICAgcGlucyA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGlucyIp CiAgICB0YWJ3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAidGFid2lkdGgiKQogICAgdGFiaGVp Z2h0ID0gZmluZGF0dHIoYXR0cmxpc3QsICJ0YWJoZWlnaHQiKQogICAgaGVpZ2h0ID0gZmluZGF0 dHIoYXR0cmxpc3QsICJoZWlnaHQiKQogICAgcGFkd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwg InBhZHdpZHRoIikKICAgIHBhZGhlaWdodCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGFkaGVpZ2h0 IikKICAgIHBvbHljbGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicG9seWNsZWFyIikKICAgIG1h c2tjbGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0LCAibWFza2NsZWFyIikKICAgIHNpbGt3aWR0aCA9 IGZpbmRhdHRyKGF0dHJsaXN0LCAic2lsa3dpZHRoIikKICAgIHNpbGtvZmZzZXQgPSBmaW5kYXR0 cihhdHRybGlzdCwgInNpbGtvZmZzZXQiKQogICAgcGl0Y2ggPSBmaW5kYXR0cihhdHRybGlzdCwg InBpdGNoIikKICAgIHJlZmRlc3ggPSBmaW5kYXR0cihhdHRybGlzdCwgInJlZmRlc3giKQogICAg cmVmZGVzeSA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicmVmZGVzeSIpCiAgICB0b3RhbGhlaWdodCA9 IGhlaWdodCt0YWJoZWlnaHQrcGFkaGVpZ2h0CiAgICB0b3RhbHdpZHRoID0gbWF4KHRhYndpZHRo LCAocGlucy0xKSpwaXRjaCtwYWR3aWR0aCkKICAgIHNpbGt4ID0gdG90YWx3aWR0aC8yICsgc2ls a29mZnNldAogICAgc2lsa3kgPSB0b3RhbGhlaWdodC8yICsgc2lsa29mZnNldAogICAgdGFieSA9 IC0odG90YWxoZWlnaHQtdGFiaGVpZ2h0KS8yCiAgICBwYWRzeSA9IC0ocGFkaGVpZ2h0IC0gdG90 YWxoZWlnaHQpLzIKICAgIHRhYmJlZGVsdCA9ICJFbGVtZW50W1wiXCIgXCJEZXNjXCIgXCJOYW1l XCIgXCJWYWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJdXG4oXG4iICUgKHJlZmRl c3gsIC0xMDAwMDAwIC0gcmVmZGVzeSkKICAgIHRhYmJlZGVsdCA9IHRhYmJlZGVsdCArIHJvd29m cGFkcyhbMCxwYWRzeV0sIHBpdGNoLCAicmlnaHQiLCBwYWR3aWR0aCwgcGFkaGVpZ2h0LCAxLCBw aW5zLCBtYXNrY2xlYXIsIHBvbHljbGVhcikKICAgIHRhYmJlZGVsdCA9IHRhYmJlZGVsdCArIHBh ZGN0cigwLHRhYnksdGFiaGVpZ2h0LHRhYndpZHRoLHBvbHljbGVhcixtYXNrY2xlYXIsc3RyKHBp bnMrMSkpCiAgICB0YWJiZWRlbHQgPSB0YWJiZWRlbHQgKyBib3goc2lsa3gsc2lsa3ksLXNpbGt4 LC1zaWxreSxzaWxrd2lkdGgpCiAgICByZXR1cm4gdGFiYmVkZWx0KyIpXG4iCiMgIFBpblsxNzUw MCAtMjQwMDAgNjQwMCAyMDAwIDY0MDAgMzUwMCAiIiAiMSIgMHgwMDAwMDAwMV0KIyB4LHkscGFk ZGlhLHBvbHljbGVhcixtYXNrY2xlYXIsZHJpbGwsbmFtZSxuYW1lLGZsYWdzCgpkZWYgcGluKHgs eSxkaWEsZHJpbGwsbmFtZSxwb2x5Y2xlYXIsbWFza2NsZWFyKToKICAgIGlmIG5hbWUgPT0gIjEi OgogICAgICAgIHBpbmZsYWdzID0gIjB4MDAwMDAxMDAiCiAgICBlbHNlOgogICAgICAgIHBpbmZs YWdzID0gIjB4MDAwMDAwMDAiCiAgICByZXR1cm4gIlx0UGluWyAlZG5tICVkbm0gJWRubSAlZG5t ICVkbm0gJWRubSBcIiVzXCIgXCIlc1wiICVzXVxuIiAlICh4LHksZGlhLHBvbHljbGVhcioyLG1h c2tjbGVhcitkaWEsZHJpbGwsbmFtZSxuYW1lLHBpbmZsYWdzKQoKZGVmIGRpcChhdHRybGlzdCk6 CiAgICBwaW5zID0gZmluZGF0dHIoYXR0cmxpc3QsICJwaW5zIikKICAgIGRyaWxsID0gZmluZGF0 dHIoYXR0cmxpc3QsICJkcmlsbCIpCiAgICBwYWRkaWEgPSBmaW5kYXR0cihhdHRybGlzdCwgInBh ZGRpYSIpCiAgICB3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAid2lkdGgiKQogICAgcG9seWNs ZWFyID0gZmluZGF0dHIoYXR0cmxpc3QsICJwb2x5Y2xlYXIiKQogICAgbWFza2NsZWFyID0gZmlu ZGF0dHIoYXR0cmxpc3QsICJtYXNrY2xlYXIiKQogICAgc2lsa3dpZHRoID0gZmluZGF0dHIoYXR0 cmxpc3QsICJzaWxrd2lkdGgiKQogICAgcGl0Y2ggPSBmaW5kYXR0cihhdHRybGlzdCwgInBpdGNo IikKICAgIHJlZmRlc3ggPSBmaW5kYXR0cihhdHRybGlzdCwgInJlZmRlc3giKQogICAgcmVmZGVz eSA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicmVmZGVzeSIpCiAgICB5ID0gLShwaW5zLzItMSkqcGl0 Y2gvMgogICAgeCA9IHdpZHRoLzIKICAgIGRpcGVsdCA9ICJFbGVtZW50W1wiXCIgXCJEZXNjXCIg XCJOYW1lXCIgXCJWYWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJdXG4oXG4iICUg KHJlZmRlc3gsIC0xMDAwMDAwIC0gcmVmZGVzeSkKICAgIGZvciBwaW5udW0gaW4gcmFuZ2UgKDEs MStwaW5zLzIpOgogICAgICAgIGRpcGVsdCA9IGRpcGVsdCArIHBpbigteCx5LHBhZGRpYSxkcmls bCxzdHIocGlubnVtKSxwb2x5Y2xlYXIsbWFza2NsZWFyKQogICAgICAgIHkgPSB5ICsgcGl0Y2gK ICAgIHkgPSB5IC0gcGl0Y2gKICAgIGZvciBwaW5udW0gaW4gcmFuZ2UgKDErcGlucy8yLCBwaW5z KzEpOgogICAgICAgIGRpcGVsdCA9IGRpcGVsdCArIHBpbih4LHkscGFkZGlhLGRyaWxsLHN0cihw aW5udW0pLHBvbHljbGVhcixtYXNrY2xlYXIpCiAgICAgICAgeSA9IHkgLSBwaXRjaAogICAgc2ls a3kgPSBwaW5zKnBpdGNoLzQKICAgIHNpbGt4ID0gKHdpZHRoK3BpdGNoKS8yCiAgICBkaXBlbHQg PSBkaXBlbHQgKyBib3goc2lsa3gsc2lsa3ksLXNpbGt4LC1zaWxreSxzaWxrd2lkdGgpCiAgICBk aXBlbHQgPSBkaXBlbHQgKyBib3goLXNpbGt4LC1zaWxreSwtc2lsa3grcGl0Y2gsLXNpbGt5K3Bp dGNoLHNpbGt3aWR0aCkKICAgIHJldHVybiBkaXBlbHQrIilcbiIKCmRlZiBkaWgoYXR0cmxpc3Qp OgogICAgcGlucyA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGlucyIpCiAgICBkcmlsbCA9IGZpbmRh dHRyKGF0dHJsaXN0LCAiZHJpbGwiKQogICAgcGFkZGlhID0gZmluZGF0dHIoYXR0cmxpc3QsICJw YWRkaWEiKQogICAgd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgIndpZHRoIikKICAgIHBvbHlj bGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicG9seWNsZWFyIikKICAgIG1hc2tjbGVhciA9IGZp bmRhdHRyKGF0dHJsaXN0LCAibWFza2NsZWFyIikKICAgIHNpbGt3aWR0aCA9IGZpbmRhdHRyKGF0 dHJsaXN0LCAic2lsa3dpZHRoIikKICAgIHBpdGNoID0gZmluZGF0dHIoYXR0cmxpc3QsICJwaXRj aCIpCiAgICByZWZkZXN4ID0gZmluZGF0dHIoYXR0cmxpc3QsICJyZWZkZXN4IikKICAgIHJlZmRl c3kgPSBmaW5kYXR0cihhdHRybGlzdCwgInJlZmRlc3kiKQogICAgc2lsa2JveHdpZHRoID0gZmlu ZGF0dHIoYXR0cmxpc3QsICJzaWxrYm94d2lkdGgiKQogICAgc2lsa2JveGhlaWdodCA9IGZpbmRh dHRyKGF0dHJsaXN0LCAic2lsa2JveGhlaWdodCIpCiAgICB5ID0gLShwaW5zLzItMSkqcGl0Y2gv MgogICAgeCA9IHdpZHRoLzIKICAgIGRpaGVsdCA9ICJFbGVtZW50W1wiXCIgXCJEZXNjXCIgXCJO YW1lXCIgXCJWYWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJdXG4oXG4iICUgKHJl ZmRlc3gsIC0xMDAwMDAwIC0gcmVmZGVzeSkKICAgIGZvciBwaW5udW0gaW4gcmFuZ2UgKDEsMStw aW5zLDIpOgogICAgICAgIGRpaGVsdCA9IGRpaGVsdCArIHBpbigteCx5LHBhZGRpYSxkcmlsbCxz dHIocGlubnVtKSxwb2x5Y2xlYXIsbWFza2NsZWFyKQogICAgICAgIHkgPSB5ICsgcGl0Y2gKICAg IHkgPSAtKHBpbnMvMi0xKSpwaXRjaC8yCiAgICBmb3IgcGlubnVtIGluIHJhbmdlICgyLDErcGlu cywyKToKICAgICAgICBkaWhlbHQgPSBkaWhlbHQgKyBwaW4oeCx5LHBhZGRpYSxkcmlsbCxzdHIo cGlubnVtKSxwb2x5Y2xlYXIsbWFza2NsZWFyKQogICAgICAgIHkgPSB5ICsgcGl0Y2gKICAgIHNp bGt5ID0gbWF4KHBpbnMqcGl0Y2gvNCxzaWxrYm94aGVpZ2h0LzIpCiAgICBzaWxreCA9IG1heCgo d2lkdGgrcGl0Y2gpLzIsc2lsa2JveHdpZHRoLzIpCiAgICBkaWhlbHQgPSBkaWhlbHQgKyBib3go c2lsa3gsc2lsa3ksLXNpbGt4LC1zaWxreSxzaWxrd2lkdGgpCiAgICBkaWhlbHQgPSBkaWhlbHQg KyBib3goLXNpbGt4LC1zaWxreSwtc2lsa3grcGl0Y2gsLXNpbGt5K3BpdGNoLHNpbGt3aWR0aCkK ICAgIHJldHVybiBkaWhlbHQrIilcbiIKCmRlZiBkaWhmKGF0dHJsaXN0KToKICAgIHBpbnMgPSBm aW5kYXR0cihhdHRybGlzdCwgInBpbnMiKQogICAgZHJpbGwgPSBmaW5kYXR0cihhdHRybGlzdCwg ImRyaWxsIikKICAgIHBhZGRpYSA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGFkZGlhIikKICAgIHdp ZHRoID0gZmluZGF0dHIoYXR0cmxpc3QsICJ3aWR0aCIpCiAgICBwb2x5Y2xlYXIgPSBmaW5kYXR0 cihhdHRybGlzdCwgInBvbHljbGVhciIpCiAgICBtYXNrY2xlYXIgPSBmaW5kYXR0cihhdHRybGlz dCwgIm1hc2tjbGVhciIpCiAgICBzaWxrd2lkdGggPSBmaW5kYXR0cihhdHRybGlzdCwgInNpbGt3 aWR0aCIpCiAgICBwaXRjaCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicGl0Y2giKQogICAgcmVmZGVz eCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAicmVmZGVzeCIpCiAgICByZWZkZXN5ID0gZmluZGF0dHIo YXR0cmxpc3QsICJyZWZkZXN5IikKICAgIHkgPSAtKHBpbnMvMi0xKSpwaXRjaC8yCiAgICB4ID0g d2lkdGgvMgogICAgZGloZmVsdCA9ICJFbGVtZW50W1wiXCIgXCJEZXNjXCIgXCJOYW1lXCIgXCJW YWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJdXG4oXG4iICUgKHJlZmRlc3gsIC0x MDAwMDAwIC0gcmVmZGVzeSkKICAgIGZvciBwaW5udW0gaW4gcmFuZ2UgKDEsMStwaW5zLDIpOgog ICAgICAgIGRpaGZlbHQgPSBkaWhmZWx0ICsgcGluKHgseSxwYWRkaWEsZHJpbGwsc3RyKHBpbm51 bSkscG9seWNsZWFyLG1hc2tjbGVhcikKICAgICAgICB5ID0geSArIHBpdGNoCiAgICB5ID0gLShw aW5zLzItMSkqcGl0Y2gvMgogICAgZm9yIHBpbm51bSBpbiByYW5nZSAoMiwxK3BpbnMsMik6CiAg ICAgICAgZGloZmVsdCA9IGRpaGZlbHQgKyBwaW4oLXgseSxwYWRkaWEsZHJpbGwsc3RyKHBpbm51 bSkscG9seWNsZWFyLG1hc2tjbGVhcikKICAgICAgICB5ID0geSArIHBpdGNoCiAgICBzaWxreSA9 IHBpbnMqcGl0Y2gvNAogICAgc2lsa3ggPSAod2lkdGgrcGl0Y2gpLzIKICAgIGRpaGZlbHQgPSBk aWhmZWx0ICsgYm94KHNpbGt4LHNpbGt5LC1zaWxreCwtc2lsa3ksc2lsa3dpZHRoKQogICAgZGlo ZmVsdCA9IGRpaGZlbHQgKyBib3goc2lsa3gsLXNpbGt5LC1zaWxreCtwaXRjaCwtc2lsa3krcGl0 Y2gsc2lsa3dpZHRoKQogICAgcmV0dXJuIGRpaGZlbHQrIilcbiIKICAgICAgICAgICAgCgpkZWYg c2lwKGF0dHJsaXN0KToKICAgIHBpbnMgPSBmaW5kYXR0cihhdHRybGlzdCwgInBpbnMiKQogICAg ZHJpbGwgPSBmaW5kYXR0cihhdHRybGlzdCwgImRyaWxsIikKICAgIHBhZGRpYSA9IGZpbmRhdHRy KGF0dHJsaXN0LCAicGFkZGlhIikKICAgIHBvbHljbGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0LCAi cG9seWNsZWFyIikKICAgIG1hc2tjbGVhciA9IGZpbmRhdHRyKGF0dHJsaXN0LCAibWFza2NsZWFy IikKICAgIHNpbGt3aWR0aCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAic2lsa3dpZHRoIikKICAgIHBp dGNoID0gZmluZGF0dHIoYXR0cmxpc3QsICJwaXRjaCIpCiAgICByZWZkZXN4ID0gZmluZGF0dHIo YXR0cmxpc3QsICJyZWZkZXN4IikKICAgIHJlZmRlc3kgPSBmaW5kYXR0cihhdHRybGlzdCwgInJl ZmRlc3kiKQogICAgc2lsa2JveHdpZHRoID0gZmluZGF0dHIoYXR0cmxpc3QsICJzaWxrYm94d2lk dGgiKQogICAgc2lsa2JveGhlaWdodCA9IGZpbmRhdHRyKGF0dHJsaXN0LCAic2lsa2JveGhlaWdo dCIpCiAgICB5ID0gLShwaW5zLTEpKnBpdGNoLzIKICAgIHNpcGVsdCA9ICJFbGVtZW50W1wiXCIg XCJEZXNjXCIgXCJOYW1lXCIgXCJWYWxcIiAxMDAwIDEwMDAgJWRubSAlZG5tIDAgMTAwIFwiXCJd XG4oXG4iICUgKHJlZmRlc3gsIC0xMDAwMDAwIC0gcmVmZGVzeSkKICAgIGZvciBwaW5udW0gaW4g cmFuZ2UgKDEsMStwaW5zKToKICAgICAgICBzaXBlbHQgPSBzaXBlbHQgKyBwaW4oMCx5LHBhZGRp YSxkcmlsbCxzdHIocGlubnVtKSxwb2x5Y2xlYXIsbWFza2NsZWFyKQogICAgICAgIHkgPSB5ICsg cGl0Y2gKICAgIHNpbGt5ID0gbWF4KHBpbnMqcGl0Y2gvMixzaWxrYm94aGVpZ2h0LzIpCiAgICBz aWxreCA9IG1heChwaXRjaC8yLHNpbGtib3h3aWR0aC8yKQogICAgc2lwZWx0ID0gc2lwZWx0ICsg Ym94KHNpbGt4LHNpbGt5LC1zaWxreCwtc2lsa3ksc2lsa3dpZHRoKQogICAgc2lwZWx0ID0gc2lw ZWx0ICsgYm94KC1zaWxreCwtc2lsa3ksLXNpbGt4K3BpdGNoLC1zaWxreStwaXRjaCxzaWxrd2lk dGgpCiAgICByZXR1cm4gc2lwZWx0KyIpXG4iCgpkZWYgZ2VucGFydChhdHRyaWJ1dGVzKToKICAg IHBhcnR0eXBlID0gZmluZGF0dHIoYXR0cmlidXRlcywgInR5cGUiKQogICAgaWYgcGFydHR5cGU9 PSdiZ2EnOgogICAgICAgIHJldHVybiBiZ2EoYXR0cmlidXRlcykKICAgIGVsaWYgcGFydHR5cGU9 PSdxZnAnOgogICAgICAgIHJldHVybiBxZnAoYXR0cmlidXRlcykKICAgIGVsaWYgcGFydHR5cGU9 PSdzbyc6CiAgICAgICAgcmV0dXJuIHNvKGF0dHJpYnV0ZXMpCiAgICBlbGlmIHBhcnR0eXBlPT0n dHdvcGFkJzoKICAgICAgICByZXR1cm4gdHdvcGFkKGF0dHJpYnV0ZXMpCiAgICBlbGlmIHBhcnR0 eXBlPT0ndGFiYmVkJzoKICAgICAgICByZXR1cm4gdGFiYmVkKGF0dHJpYnV0ZXMpCiAgICBlbGlm IHBhcnR0eXBlID09ICdkaXAnOgogICAgICAgIHJldHVybiBkaXAoYXR0cmlidXRlcykKICAgIGVs aWYgcGFydHR5cGUgPT0gJ2RpaCc6CiAgICAgICAgcmV0dXJuIGRpaChhdHRyaWJ1dGVzKQogICAg ZWxpZiBwYXJ0dHlwZSA9PSAnZGloZic6CiAgICAgICAgcmV0dXJuIGRpaGYoYXR0cmlidXRlcykK ICAgIGVsaWYgcGFydHR5cGUgPT0gJ3NpcCc6CiAgICAgICAgcmV0dXJuIHNpcChhdHRyaWJ1dGVz KQogICAgZWxzZToKICAgICAgICBwcmludCAiVW5rbm93biB0eXBlICIrcGFydHR5cGUKICAgIHBy aW50ICIiCiAgICByZXR1cm4gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAoKZGVmIGlucXVvdGVzKG9yaWdzdHJpbmcpOgogICAgcXVvdGVwb3MgPSBy ZS5zZWFyY2goIlwiLipcIiIsIG9yaWdzdHJpbmcpCiAgICBpZiBxdW90ZXBvczoKICAgICAgICBy ZXR1cm4gb3JpZ3N0cmluZ1txdW90ZXBvcy5zdGFydCgpKzE6cXVvdGVwb3MuZW5kKCktMV0KICAg IHJldHVybiAiIgoKIyBjb252ZXJ0IHZhbHVlcyBmcm9tIHNvdXJjZSB1bml0cyBpbnRvIG5hbm9t ZXRlcnMKZGVmIHN0cjJwY2J1bml0cyhkaXN0KToKICAgIG51bWJlciA9IHJlLnNlYXJjaCgnWy0/ MC05XC5dKycsIGRpc3QpCiAgICBpZiBudW1iZXI6CiAgICAgICAgdmFsID0gZmxvYXQobnVtYmVy Lmdyb3VwKCkpCiAgICBlbHNlOgogICAgICAgIHJldHVybiAwCiAgICBpZiBkaXN0W251bWJlci5l bmQoKTpdLmZpbmQoIm1tIikhPS0xOgogICAgICAgIHJldHVybiBpbnQoMC41ICsgMTAwMDAwMCAq IHZhbCkKICAgIGVsaWYgZGlzdFtudW1iZXIuZW5kKCk6XS5maW5kKCJtaWwiKSE9LTE6CiAgICAg ICAgcmV0dXJuIGludCgwLjUgKyB2YWwgKiAyNS40ICogMTAwMCkKICAgIGVsaWYgZGlzdFtudW1i ZXIuZW5kKCk6XS5maW5kKCJpbiIpIT0tMToKICAgICAgICByZXR1cm4gaW50KDAuNSArIHZhbCAq IDI1LjQgKiAxMDAwMDAwKQogICAgcmV0dXJuIGludCgwLjUgKyB2YWwpCgppbXBvcnQgc3lzCiNp bXBvcnQgc3RyaW5nCmltcG9ydCByZQoKIyBvcGVuIGlucHV0IGZpbGUKaWYgc3lzLmFyZ3ZbMTpd OgogICAgdHJ5OgogICAgICAgIGluX2ZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAncicpCiAgICBl eGNlcHQgSU9FcnJvciwgbXNnOgogICAgICAgIHByaW50ICdDYW5cJ3Qgb3BlbiAiJXMiOicgJSBz eXMuYXJndlsxXSwgbXNnCiAgICAgICAgc3lzLmV4aXQoMSkKZWxzZToKICAgIGluX2ZpbGUgPSBz eXMuc3RkaW4KICAgIHByaW50ICJObyBmaWxlIGdpdmVuIHNvIHVzaW5nIHN0ZGluIgoKIyBsaXN0 IG9mIGF0dHJpYnV0ZXMgdG8gYmUgZGVmaW5lZCBpbiBmaWxlCmF0dHJpYnV0ZXMgPSBkZWZhdHRy KCkKIyBtYWluIHByb2Nlc3NpbmcgbG9vcCBlbnRlciBwcm9jZXNzaW5nIGVsZW1lbnRzCmxpbmVu dW0gPSAxCndoaWxlIDE6CiAgICB2YWxpZGxpbmUgPSAwCiAgICBsaW5lID0gaW5fZmlsZS5yZWFk bGluZSgpCiAgICBsaW5lbnVtID0gbGluZW51bSArIDEKICAgIGlmIG5vdCBsaW5lOgogICAgICAg IGJyZWFrCiAgICAjIHN0cmlwIGNvbW1lbnRzCiAgICBpZiBsaW5lLmZpbmQoIiMiKSA9PSAwOgog ICAgICAgIGNvbnRpbnVlCiAgICBpZiBsaW5lLmZpbmQoIiMiKSE9LTE6CiAgICAgICAgbGluZSA9 IGxpbmVbOmxpbmUuZmluZCgiIyIpLTFdCiAgICAjIHN0cmlwIHdoaXRlc3BhY2UKICAgIGxpbmUg PSBsaW5lLnN0cmlwKCkKICAgIGlmIGxpbmUgPT0gIiI6CiAgICAgICAgY29udGludWUKICAgIGlm IGxpbmUuZmluZCgiY2xlYXJhbGwiKSE9LTE6CiAgICAgICAgYXR0cmlidXRlcyA9IGRlZmF0dHIo KQogICAgICAgIGNvbnRpbnVlCiAgICBmb3IgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXM6CiAgICAg ICAgaWYgbGluZS5maW5kKGF0dHJpYnV0ZVswXSkhPS0xOgogICAgICAgICAgICBhdHRyaWJ1dGVb MV09aW5xdW90ZXMobGluZSkKICAgICAgICAgICAgaWYgbm90IGF0dHJpYnV0ZVsxXToKICAgICAg ICAgICAgICAgIGF0dHJpYnV0ZVsxXT1zdHIycGNidW5pdHMobGluZSkKICAgICAgICAgICAgdmFs aWRsaW5lID0gMQogICAgICAgICAgICBicmVhawogICAgaWYgYXR0cmlidXRlWzBdID09ICJwYXJ0 IjoKICAgICAgICBmaWxlbmFtZSA9IGZpbmRhdHRyKGF0dHJpYnV0ZXMsImVsZW1lbnRkaXIiKSsi LyIrZmluZGF0dHIoYXR0cmlidXRlcywicGFydCIpCiAgICAgICAgcHJpbnQgImdlbmVyYXRlZCAl cyIgJSBmaWxlbmFtZQogICAgICAgIG91dHB1dF9maWxlID0gb3BlbihmaWxlbmFtZSwgInciKQog ICAgICAgIG91dHB1dF9maWxlLndyaXRlKGdlbnBhcnQoYXR0cmlidXRlcykpCiAgICAgICAgb3V0 cHV0X2ZpbGUuY2xvc2UoKQogICAgICAgIHZhbGlkbGluZSA9IDEKICAgIGlmIG5vdCB2YWxpZGxp bmU6CiAgICAgICAgcHJpbnQgIklnbm9yaW5nIGdhcmJhZ2UgYXQgbGluZSAlZCA6JXMiICUgKGxp bmVudW0sIGxpbmUpCgkJCQpwcmludCAiJWQgbGluZXMgcmVhZCIgJSBsaW5lbnVtCnN5cy5leGl0 KDApCg== --f46d0407160b9866d604c6172244 Content-Type: application/octet-stream; name=footprintdata Content-Disposition: attachment; filename=footprintdata Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5adqnhc1 IyBQQ0IgZm9vdHByaW50cwojIENvbnZlcnQgdG8gbmV3bGliIGJ5IHVzaW5nIGZvb3RnZW4ucHkK IyBUaGlzIGZpbGUgaXMgbm90IGNvcHlyaWdodGVkCiMgWW91IG1heSB1c2UgdGhlc2UgZm9vdHBy aW50cyBhcyB5b3Ugd2lzaC4KIyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgZGF0YSBp cyBhY2N1cmF0ZQojIGNoZWNrIHRoZSBkYXRhc2hlZXRzIGZvciB5b3VyIGNvbXBvbmVudHMKCmVs ZW1lbnRkaXIgPSAiZWxlbWVudHMiCQkjIHdoZXJlIHRvIHB1dCBnZW5lcmF0ZWQgZmlsZXMKIyBw dXQgYWxsIHJlZmVyZW5jZSBkZXNpZ25hdG9ycyAxbW0gYWJvdmUgb3JpZ2luCnJlZmRlc3ggPSAw bW0KcmVmZGVzeSA9IDFtbQojIFhpbGlueCBCR0EgcGFja2FnZXMKIyBkYXRhIGZyb20gWEFQUDE1 NwojIEVudGVyZWQgYnkgRGFycmVsbCBIYXJtb24KIyB2YWx1ZXMgZm9yIGFsbCAxbW0gcGl0Y2gg WGlsaW54IEJHQQoJdHlwZSA9ICJiZ2EiCglwaXRjaCA9IDFtbQoJc2lsa3dpZHRoID0gMTAgbWls cwoJc2lsa29mZnNldCA9IDFtbQkJIyB1c2VkIGlmIHNpbGtib3ggaXMgaW52YWxpZAoJZGlhID0g MC40bW0KCW1hc2tjbGVhciA9IDYgbWlsCQkjIHRvdGFsIGFkZGl0aW9uYWwgb3BlbmluZzogMyBt aWxzIGZyb20gcGFkIHRvIG1hc2sKCXBvbHljbGVhciA9IDggbWlsCiMgWGlsaW54IEZUMjU2IDFt bSBwaXRjaCBCR0EKCXNpbGtib3h3aWR0aCA9IDE3bW0KCXNpbGtib3hoZWlnaHQgPSAxN21tCgly b3dzID0gMTYKCWNvbHMgPSAxNgpwYXJ0ICJGVDI1Ni5mcCIKCXJvd3MgPSAyMgoJY29scyA9IDIy CgkjIHNvbWUgYmFsbHMgbWlzc2luZyBvbiBGRzQ1NgoJb21pdGJhbGxzID0gIkg4OlI4LEg4Okgx NSxSODpSMTUsSDE1OlIxNSIKcGFydCAiRkc0NTYuZnAiCglyb3dzID0gMjYKCWNvbHMgPSAyNgoJ b21pdGJhbGxzID0gIiIKcGFydCAiRkc2NzYuZnAiCglyb3dzID0gMzAKCWNvbHMgPSAzMApwYXJ0 ICJGRzkwMC5mcCIKCXJvd3MgPSAzNAoJY29scyA9IDM0CnBhcnQgIkZHMTE1Ni5mcCIKCiMgWGls aW54IFZpcnRleC01IHBhY2thZ2VzLCBpbmZvIGZyb20gVUcxOTUgKHY0LjIpIGVudGVyZWQgYnkg TC4gRG9vbGl0dGxlCgl0eXBlID0gImJnYSIKCXBpdGNoID0gMW1tCglkaWEgPSAwLjQ1bW0gICAg IyBleHRyYXBvbGF0ZWQgZnJvbSBVRzExMiB0YWJsZSA1LTMKIyBzdGFydCBpbmRpdmlkdWFsIHBh Y2thZ2VzCglyb3dzID0gMTgKCWNvbHMgPSAxOApwYXJ0ICJGRjMyMy5mcCIgICAgICAgICMgc3Ry YW5nZSBidXQgdHJ1ZQpwYXJ0ICJGRjMyNC5mcCIKCXJvd3MgPSAyNgoJY29scyA9IDI2CglvbWl0 YmFsbHMgPSAiQTEsQjEsRzEsSDEsTjEsUDEsVzEsWTEsQUUxLEFGMSxKOSIKcGFydCAiRkY2NjUu ZnAiCglvbWl0YmFsbHMgPSAiIgpwYXJ0ICJGRjY3Ni5mcCIKCXJvd3MgPSAzNAoJY29scyA9IDM0 CglvbWl0YmFsbHMgPSAiQTEsQTQsQTUsQTEwLEEzNCxFMSxGMSxMMSxNMSxVMSxWMSxBQzEsQUQx LEFKMSxBSzEsQVAxLEFQNCxBUDUsQVAxMCxBUDM0IgpwYXJ0ICJGRjExMzYuZnAiCglvbWl0YmFs bHMgPSAiQTM0LEFQMSxBUDM0IgpwYXJ0ICJGRjExNTMuZnAiCglyb3dzID0gNDIKCWNvbHMgPSA0 MgoJb21pdGJhbGxzID0gIkE0MixBMTgsQTEzLEExMixBNyxBNixBMSxEMSxKMSxLMSxSMSxUMSxB QTEsQUIxLEFHMSxBSDEsQU4xLEFQMSxBVzEsQkIxLEJCNixCQjcsQkIxMixCQjEzLEJCMTgsQkI0 MiIKcGFydCAiRkYxNzM4LmZwIgoJb21pdGJhbGxzID0gIkExLEE0MixCQjEsQkI0MiIKcGFydCAi RkYxNzYwLmZwIgoKIyBYaWxpbnggU3BhcnRhbiA2IHBhY2thZ2VzLCBpbmZvIGZyb20gVUczODUg ZW50ZXJlZCBieSBTdGVwaGVuIEVjb2IKCXR5cGUgPSAiYmdhIgoJb21pdGJhbGxzID0gIiIKCXBp dGNoID0gMC41bW0KCXNpbGtvZmZzZXQgPSAwLjc1bW0JCSMgdXNlZCBpZiBzaWxrYm94IGlzIGlu dmFsaWQKCXNpbGtib3h3aWR0aCA9IDFtbQoJc2lsa2JveGhlaWdodCA9IDFtbQoJc2lsa3dpZHRo ID0gNiBtaWxzCglkaWEgPSAwLjI3bW0gICAgIyBmcm9tIFVHMzkzCgltYXNrY2xlYXIgPSAwLjA4 bW0JCSMgdG90YWwgYWRkaXRpb25hbCBvcGVuaW5nIGZyb20gcGFkIHRvIG1hc2sKCXJvd3MgPSAx NAoJY29scyA9IDE0CnBhcnQgIkNQRzE5Ni5mcCIKCXBpdGNoID0gMC44bW0KCXNpbGtvZmZzZXQg PSAwLjltbQkJIyB1c2VkIGlmIHNpbGtib3ggaXMgaW52YWxpZAoJc2lsa3dpZHRoID0gNyBtaWxz CglkaWEgPSAwLjM3bW0gICAgIyBmcm9tIFVHMzkzCgltYXNrY2xlYXIgPSAwLjFtbQkJIyB0b3Rh bCBhZGRpdGlvbmFsIG9wZW5pbmcgZnJvbSBwYWQgdG8gbWFzawoJcm93cyA9IDE1Cgljb2xzID0g MTUKcGFydCAiQ1NHMjI1LmZwIgoJcm93cyA9IDE4Cgljb2xzID0gMTgKcGFydCAiQ1NHMzI0LmZw IgoJcm93cyA9IDIyCgljb2xzID0gMjIKcGFydCAiQ1NHNDg0LmZwIgoJcGl0Y2ggPSAxbW0KCXNp bGtvZmZzZXQgPSAxLjBtbQkJIyB1c2VkIGlmIHNpbGtib3ggaXMgaW52YWxpZAoJc2lsa3dpZHRo ID0gOCBtaWxzCglkaWEgPSAwLjRtbSAgICAjIGZyb20gVUczOTMKCW1hc2tjbGVhciA9IDAuMW1t CQkjIHRvdGFsIGFkZGl0aW9uYWwgb3BlbmluZyBmcm9tIHBhZCB0byBtYXNrCglyb3dzID0gMTYK CWNvbHMgPSAxNgpwYXJ0ICJGVEcyNTYuZnAiCglyb3dzID0gMjIKCWNvbHMgPSAyMgpwYXJ0ICJG R0c0ODQuZnAiCglyb3dzID0gMjYKCWNvbHMgPSAyNgpwYXJ0ICJGR0c2NzYuZnAiCglyb3dzID0g MzAKCWNvbHMgPSAzMApwYXJ0ICJGR0c5MDAuZnAiCgojIFFGUCB0eXBlIHBhcnRzCgl0eXBlICJx ZnAiCQkjIHBpbnMgbXVzdCBiZSBkaXZpc2libGUgYnkgNAoJcGl0Y2ggPSAwLjUgbW0KCXBpbnMg PSAxNDQKCXBhZHdpZHRoID0gMS42IG1tCgl3aWR0aCA9IDE5LjhtbQoJaGVpZ2h0ID0gMTkuOG1t CglwYWRoZWlnaHQgPSAwLjMybW0KCW1hc2tjbGVhciA9IDAuMTRtbQkJIyB0b3RhbCBhZGRpdGlv bmFsIG9wZW5pbmcgZnJvbSBwYWQgdG8gbWFzay4gU0VFOiB3YXMgMC4xOW1tIDIwMTIwNzMxCglz aWxrc3R5bGUgPSAiaW5zaWRlIgoJc2lsa29mZnNldCA9IDAuNW1tCnBhcnQgIlRRRzE0NC5mcCIK CXBpbnMgPSAxNzYKCXdpZHRoID0gMjQgbW0JCSMgZGlzdGFuY2UgaW5zaWRlIHBpbnMKCWhlaWdo dCA9IDI0IG1tCglwYWR3aWR0aCA9IDEuNSBtbQoJcGFkaGVpZ2h0ID0gMC4yNSBtbQoJc2lsa29m ZnNldCA9IDAuMjVtbSAJCSMgaW5zaWRlIHBhZHMgd2l0aCAxbW0gY2xlYXJhbmNlCnBhcnQgIkxR RlAxNzYuZnAiCglwaW5zID0gNDgKCXdpZHRoID0gN21tCglwYWRoZWlnaHQgPSAwLjI3bW0KCXBh ZHdpZHRoID0gMS4ybW0KCXNpbGtvZmZzZXQgPSAwLjI1bW0KcGFydCAiVFFGUDQ4LmZwIgoJI2Vw ID0gMm1tCQkJIyAybW0gc3F1YXJlIGV4cG9zZWQgdGhlcm1hbCBwYWQKCWVwID0gNG1tCQkJIyBj aGFuZ2VkIDUvMTMvMDQgRGFycmVsbCBIYXJtb24KcGFydCAiVFFGUDQ4RVAuZnAiCQkJCSMgQUQ5 OTU0IERhdGFzaGVldAoJZXAgPSAwCQkJCSMgdHVybiBvZmYgZXAKCXBpbnMgPSAxNgoJd2lkdGgg PSAyLjltbQoJcGFkd2lkdGggPSAxbW0KCXBpdGNoID0gMC42NW1tCnBhcnQgIlFGTjE2LmZwIgoJ ZXAgPSAybW0KCSMgQ2hlY2tlZCBhZ2FpbnN0IEFEWEwzMjAKcGFydCAiUUZOMTZFUC5mcCIKCWVw ID0gMAoJcGlucyA9IDY0Cgl3aWR0aCA9IDhtbQoJcGl0Y2ggPSAwLjVtbQoJc2lsa2JveHdpZHRo ID0gOS41bW0KCXNpbGtib3hoZWlnaHQgPSA5LjVtbQpwYXJ0ICJRRk42NC5mcCIKCWVwID0gNy4x NW1tCnBhcnQgIlFGTjY0RVAuZnAiCgkjIHVzZWQgb24gTGluZWFyIFRlY2hub2xvZ3kncyBMVEMy MjQ5IGFuZCByZWxhdGVkIGhpZ2ggc3BlZWQgQURDcwoJZXAgPSAzLjQ1bW0KCXBpbnMgPSAzMgoJ cGl0Y2ggPSAwLjUwbW0KCXdpZHRoID0gNC4xMG1tCgloZWlnaHQgPSA0LjEwbW0KCXBhZHdpZHRo ID0gMC43MG1tCglwYWRoZWlnaHQgPSAwLjI1bW0KCXNpbGtvZmZzZXQgPSAwLjFtbQoJc2lsa3dp ZHRoID0gNiBtaWxzCnBhcnQgIlFGTjMyVUguZnAiCQoJIyB1c2VkIG9uIE5YUHMgTFBDMTExMSBm YW1pbHkKCWVwID0gNC41bW0KCXBpbnMgPSAzMgoJcGl0Y2ggPSAwLjY1bW0KCXdpZHRoID0gNS40 MG1tCgloZWlnaHQgPSA1LjQwbW0KCXBhZHdpZHRoID0gMS4xNW1tCglwYWRoZWlnaHQgPSAwLjM1 bW0KCXNpbGtvZmZzZXQgPSAwLjJtbQoJc2lsa3dpZHRoID0gMTAgbWlscwpwYXJ0ICJIVlFGTjMz LmZwIgoJIyB1c2VkIG9uIFRJIENDMjU0MAoJZXAgPSA0LjVtbQoJcGlucyA9IDQwCglwaXRjaCA9 IDAuNW1tCgl3aWR0aCA9IDUuMTBtbQoJaGVpZ2h0ID0gNS4xMG1tCglwYWR3aWR0aCA9IDEuMW1t CglwYWRoZWlnaHQgPSAwLjI4bW0KCXNpbGtvZmZzZXQgPSAwLjJtbQoJc2lsa3dpZHRoID0gMTAg bWlscwpwYXJ0ICJQVlFGTjQwLmZwIgoJIyB1c2VkIG9uIEludGVyc2lsIEFEQyBmYW1pbHkKCWVw ID0gNm1tCglwaW5zID0gNzIKCXBpdGNoID0gMC41bW0KCXdpZHRoID0gOW1tCgloZWlnaHQgPSA5 bW0KCXBhZHdpZHRoID0gMC43bW0KCXBhZGhlaWdodCA9IDAuMjNtbQoJc2lsa29mZnNldCA9IDAu Mm1tCglzaWxrd2lkdGggPSAxMCBtaWxzCnBhcnQgIlFGTjcyLmZwIgoJc2lsa2JveHdpZHRoID0g MAoJc2lsa3dpZHRoID0gMTAgbWlscwoJIyB1c2VkIG9uIEN5cHJlc3MncyBDWTdDNjgwMTMtTEY1 NgoJZXAgPSA2bW0KCXBpbnMgPSA1NgoJcGl0Y2ggPSAwLjUwbW0KCXdpZHRoID0gNy4xMG1tCglo ZWlnaHQgPSA3LjEwbW0KCXBhZHdpZHRoID0gMC43MG1tCglwYWRoZWlnaHQgPSAwLjI4bW0KCXNp bGtzdHlsZSA9ICJvdXRzaWRlIgpwYXJ0ICJRRk41NkxGLmZwIgoJc2lsa29mZnNldCA9IDAuNW1t CgllcCA9IDAKCXBpbnMgPSA2OAoKCXBpbnMgPSAxMDAKCSMgcmVjdGFuZ3VsYXIgcGFja2FnZQoJ cGluc2hpZ2ggPSAzMAoJcGl0Y2ggPSAwLjY1bW0KCXdpZHRoID0gMTRtbQoJaGVpZ2h0ID0gMjBt bQoJcGFkd2lkdGggPSAxLjNtbQoJcGFkaGVpZ2h0ID0gMC4zNW1tCglzaWxrc3R5bGUgPSAiaW5z aWRlIgpwYXJ0ICJDWTdDNjgwMTNUUTEwMC5mcCIKCglwaW5zID0gNgoJdHlwZSAic28iCgl3aWR0 aCA9IDEuNW1tCglwaXRjaCA9IDAuNjVtbQoJcGFkaGVpZ2h0ID0gMC4zM21tCglwYWR3aWR0aCA9 IDEuNm1tCglzaWxrb2Zmc2V0ID0gMTUgbWlscwoJc2lsa2JveGhlaWdodCA9IDMuMW1tCglzaWxr d2lkdGggPSAxMCBtaWxzCglzaWxrc3R5bGUgPSAiaW5zaWRlIgpwYXJ0ICJUU1NPUDYuZnAiCiMg U09JQyBwYXJ0cwojIGRhdGEgZnJvbSBUSSBTQkZBMDE1QQojIGVudGVyZWQgYnkgRGFycmVsbCBI YXJtb24KCXBpbnMgPSA4Cgl0eXBlICJzbyIKCXdpZHRoID0gOTMgbWlscwoJcGl0Y2ggPSA1MCBt aWxzCglwYWRoZWlnaHQgPSAyMCBtaWxzCglwYWR3aWR0aCA9IDk0IG1pbHMKCXNpbGtvZmZzZXQg PSAxNSBtaWxzCglzaWxrYm94aGVpZ2h0ID0gMC4yaW4KCXNpbGt3aWR0aCA9IDEwIG1pbHMKCXNp bGtzdHlsZSA9ICJpbnNpZGUiCnBhcnQgIlNPLTguZnAiCglwaW5zID0gMTQKCXNpbGtib3hoZWln aHQgPSAwLjM0NCBpbgpwYXJ0ICJTTy0xNC5mcCIKCXBpbnMgPSAxNgoJc2lsa2JveGhlaWdodCA9 IDAuMzk0IGluCnBhcnQgIlNPLTE2LmZwIgojIGNoYW5nZSB3aWR0aCB0byBiZWdpbiB3aWRlIHBh cnRzCglwaW5zID0gMTYKCXdpZHRoID0gMjU4IG1pbHMKCXBhZHdpZHRoID0gOTkgbWlscwoJc2ls a2JveGhlaWdodCA9IDAuNDEzIGluCnBhcnQgIlNPLTE2Vy5mcCIKCXBpbnMgPSAxOAoJc2lsa2Jv eGhlaWdodCA9IDAuNDYzIGluCnBhcnQgIlNPLTE4Vy5mcCIKCXBpbnMgPSAyMAoJc2lsa2JveGhl aWdodCA9IDAuNTEyIGluCnBhcnQgIlNPLTIwVy5mcCIKCXBpbnMgPSAyNAoJc2lsa2JveGhlaWdo dCA9IDAuNjE0IGluCnBhcnQgIlNPLTI0Vy5mcCIKCXBpbnMgPSAyOAoJc2lsa2JveGhlaWdodCA9 IDAuNzEzIGluCnBhcnQgIlNPLTI4Vy5mcCIKCXBpbnMgPSA2CglwaXRjaCA9IDM3LjQgbWlscwoJ d2lkdGggPSAwLjAzOCBpbgoJcGFkaGVpZ2h0ID0gMjAgbWlsCglwYWR3aWR0aCA9IDU4IG1pbAoJ c2lsa2JveGhlaWdodCA9IDAuMTE4IGluCglzaWxrc3R5bGUgPSAib3V0c2lkZSIKcGFydCAiU09U MjMtNi5mcCIKCXBhZHdpZHRoID0gNjggbWlsCglwaW5zID0gOAoJcGl0Y2ggPSAyNS42IG1pbHMK CXdpZHRoID0gMC4wMTkgaW4KcGFydCAiU09UMjMtOC5mcCIKCXdpZHRoID0gMC4xMDEgaW4KCXBh ZGhlaWdodCA9IDE1IG1pbAoJcGFkd2lkdGggPSA2NiBtaWwKCXNpbGtib3hoZWlnaHQgPSAwLjEy MiBpbgoJc2lsa3N0eWxlID0gImluc2lkZSIKcGFydCAiTVNPUC04LmZwIgoJcGlucyA9IDIwCglw YWR3aWR0aCA9IDg5IG1pbHMKCXdpZHRoID0gMC4xODEgaW4KCXNpbGtib3hoZWlnaHQgPSAwLjI5 NSBpbgpwYXJ0ICJTU09QLTIwLmZwIgoJcGlucyA9IDI0CglzaWxrYm94aGVpZ2h0ID0gMC4zNTUg aW4KcGFydCAiU1NPUC0yNC5mcCIKCXBpbnMgPSAyOAoJc2lsa2JveGhlaWdodCA9IDAuNDEzIGlu CnBhcnQgIlNTT1AtMjguZnAiCglwaXRjaCA9IDI1IG1pbAoJcGlucyA9IDE2Cgl3aWR0aCA9IDAu MDkzIGluCglwYWR3aWR0aCA9IDk0IG1pbAoJc2lsa2JveGhlaWdodCA9IDAuMTk3IGluCnBhcnQg IlNTT1AtMTYuZnAiCglwaW5zID0gNDgKCXBhZHdpZHRoID0gODkgbWlsCgl3aWR0aCA9IDAuMjc5 IGluCglzaWxrYm94aGVpZ2h0ID0gMC42MzAgaW4KcGFydCAiU1NPUC00OC5mcCIKCXBpbnMgPSA1 NgoJc2lsa2JveGhlaWdodCA9IDAuNzMwIGluCnBhcnQgIlNTT1AtNTYuZnAiCglwaW5zID0gNjYK CXBhZHdpZHRoID0gMS4zMCBtbQoJcGl0Y2ggPSAwLjY1IG1tCgl3aWR0aCA9IDEwLjE2IG1tCglz aWxrYm94aGVpZ2h0ID0gMjIuMjJtbQpwYXJ0ICJUU09QLTY2LmZwIgojIGFzIHVzZWQgb24gYSBN Qzc0VkhDMUdUMDQsIERGIHN1ZmZpeDogU0MtODhBL1NPVC0zNTMvU0MtNzAKIyBleGNlcHQgeW91 J2xsIGhhdmUgdG8gcmVtb3ZlIHBpbiA1IGFuZCByZW5hbWUgcGluIDYgYXMgNS4KCXBpbnMgPSA2 CglwYWR3aWR0aCA9IDAuNDAgbW0KCXBpdGNoID0gMC42NSBtbQoJd2lkdGggPSAxLjQwIG1tCglw YWR3aWR0aCA9IDAuOTAgbW0KCXNpbGtib3hoZWlnaHQgPSAyLjIwIG1tCnBhcnQgIlNDLTg4QS5m cCIKCglwaW5zID0gMjAKCXBpdGNoID0gMC44IG1tCglwYWRoZWlnaHQgPSAwLjUgbW0KCXBhZHdp ZHRoID0gMi4wIG1tCgl3aWR0aCA9IDYuMiBtbQoJc2tldyA9IDAuMiBtbQoJc2lsa2JveGhlaWdo dCA9IDE0LjI1IG1tCnBhcnQgIlNGUC1iYXNlLmZwIiAgICAjIGluY29tcGxldGUsIG5lZWRzIG1v dW50aW5nIGhvbGVzIGFuZCBtb3JlCiAgICAgICAgZXAgPSAzIG1tCglyZWN0ID0gNiBtbQpwYXJ0 ICJTRlAtYmFzZS5mcCIgICAgIyBpbmNvbXBsZXRlLCBuZWVkcyBtb3VudGluZyBob2xlcyBhbmQg bW9yZQoJZXAgPSAwCglza2V3ID0gMAoJcGlucyA9IDE2CglwaXRjaCA9IDEuMG1tCglwYWRoZWln aHQgPSAwLjdtbQoJcGFkd2lkdGggPSAxLjdtbQoJd2lkdGggPSA0LjNtbQoJc2lsa2JveGhlaWdo dCA9IDguMG1tCnBhcnQgIlNvbG9TdGFja2VyLTE2LmZwIgojIFNPSSBwYXJ0IFMwMzcgNiBwaW4g b3B0b2NvdXBsZXIKCXBpbnMgPSA2CglwYWR3aWR0aCA9IDEuNTZtbQoJd2lkdGggPSA3LjQ5bW0K CXBhZGhlaWdodCA9IDEuNzhtbQoJcGl0Y2ggPSAyLjU0bW0KCXNpbGtzdHlsZSA9ICJpbnNpZGUi CglzaWxrYm94aGVpZ2h0ID0gMG1tCglzaWxrYm94d2lkdGggPSAwbW0KCXNpbGtvZmZzZXQgPSAw LjRtbQpwYXJ0ICJTMDM3LmZwIgojIEFEVDEtMVdUIDYgcGluIHRyYW5zZm9ybWVyCglwaW5zID0g NgoJcGFkd2lkdGggPSAxMDBtaWwKCXdpZHRoID0gMTAwbWlsCglwYWRoZWlnaHQgPSA2NW1pbAoJ cGl0Y2ggPSAxMDBtaWwKCXNpbGtzdHlsZSA9ICJpbnNpZGUiCglzaWxrYm94aGVpZ2h0ID0gMG1t CglzaWxrYm94d2lkdGggPSAwbW0KCXNpbGtvZmZzZXQgPSAwLjRtbQpwYXJ0ICJBRFQxLmZwIgoJ cGlucyA9IDQKCXBhZHdpZHRoID0gMi4xbW0KCXdpZHRoID0gNy4wbW0KCXBhZGhlaWdodCA9IDEu NG1tCglwaXRjaCA9IDQuNDhtbQoJc2lsa3N0eWxlID0gImluc2lkZSIKCXNpbGtib3hoZWlnaHQg PSAwbW0KCXNpbGtib3h3aWR0aCA9IDBtbQoJc2lsa29mZnNldCA9IDAuNW1tCnBhcnQgIlR5Y29C dXR0b24uZnAiCglwYWR3aWR0aCA9IDEuNW1tCgl3aWR0aCA9IDAuN21tCglwYWRoZWlnaHQgPSAx LjdtbQoJcGl0Y2ggPSAyLjU0bW0KCXNpbGtzdHlsZSA9ICJvdXRzaWRlIgoJc2lsa2JveGhlaWdo dCA9IDBtbQoJc2lsa2JveHdpZHRoID0gMG1tCglzaWxrb2Zmc2V0ID0gMC41bW0KcGFydCAiUGVy aWNvbU9zYy5mcCIKICAgICAJcmVjdCA9IDAKIyBlbmQgU09JQwoKIyBESVAgcGFydHMKCXR5cGUg PSAiZGlwIgoJZHJpbGwgPSAzMCBtaWwKCXBhZGRpYSA9IDU1IG1pbAoJcGlucyA9IDgKCXdpZHRo ID0gMC4zIGluCglwaXRjaCA9IDAuMSBpbgpwYXJ0ICJESVA4LmZwIgoJcGlucyA9IDE0CnBhcnQg IkRJUDE0LmZwIgoJcGlucyA9IDE2CnBhcnQgIkRJUDE2LmZwIgoJcGlucyA9IDE4CnBhcnQgIkRJ UDE4LmZwIgoJcGlucyA9IDIwCnBhcnQgIkRJUDIwLmZwIgoJcGlucyA9IDI0CnBhcnQgIkRJUDI0 Ti5mcCIKCXBpbnMgPSAyOApwYXJ0ICJESVAyOE4uZnAiCgl3aWR0aCA9IDAuNiBpbgpwYXJ0ICJE SVAyOFcuZnAiCglwaW5zID0gMjQKcGFydCAiRElQMjRXLmZwIgoJcGlucyA9IDQwCnBhcnQgIkRJ UDQwLmZwIgojIHRyYWRpdGlvbmFsICgxMDAgbWlsKSBkb3VibGUtcm93IGhlYWRlcnMKCXdpZHRo ID0gMC4xIGluCglwaW5zID0gMTAKCWRyaWxsID0gNDAgbWlscwoJcGFkZGlhID0gNzAgbWlscwpw YXJ0ICJIRFIxMC5mcCIKCXBpbnMgPSAxNgpwYXJ0ICJIRFIxNi5mcCIKCXBpbnMgPSAyMApwYXJ0 ICJIRFIyMC5mcCIKCXBpbnMgPSAyNgpwYXJ0ICJIRFIyNi5mcCIKCXBpbnMgPSAzNApwYXJ0ICJI RFIzNC5mcCIKCXBpbnMgPSA0MApwYXJ0ICJIRFI0MC5mcCIKIyBzaW5nbGUtcm93IGhlYWRlcnMK CXR5cGUgPSAic2lwIgoJcGlucyA9IDIKcGFydCAiU0lQMi5mcCIKCXBpbnMgPSAzCnBhcnQgIlNJ UDMuZnAiCglwaW5zID0gNApwYXJ0ICJTSVA0LmZwIgoJcGlucyA9IDUKcGFydCAiU0lQNS5mcCIK CXBpbnMgPSA2CnBhcnQgIlNJUDYuZnAiCglwaW5zID0gOApwYXJ0ICJTSVA4LmZwIgoJcGlucyA9 IDEwCnBhcnQgIlNJUDEwLmZwIgojIG1ldHJpYyAoMm1tKSBkb3VibGUtcm93IGhlYWRlcnMKCXR5 cGUgPSAiZGlwIgoJcGl0Y2ggPSAyIG1tCgl3aWR0aCA9IDIgbW0KCXBpbnMgPSAyCglkcmlsbCA9 IDMwIG1pbHMKCXBhZGRpYSA9IDYwIG1pbHMKcGFydCAiSERSMl8ybW0uZnAiCglwaW5zICA9IDgK cGFydCAiSERSOF8ybW0uZnAiCglwaW5zID0gMTQKcGFydCAiSERSMTRfMm1tLmZwIgoJcGlucyA9 IDE2CnBhcnQgIkhEUjE2XzJtbS5mcCIKCXBpbnMgPSAyNApwYXJ0ICJIRFIyNF8ybW0uZnAiCgoK I1RhYmJlZCBwYXJ0cwoJIyBwYXJhbWV0ZXJzIGNvbW1vbiB0byBhbGwgRERQQUsKCSMgZnJvbSBU SSBTQkZBMDE1QQoJIyBFbnRlcmVkIGJ5IERhcnJlbGwgSGFybW9uCgl0eXBlID0gInRhYmJlZCIK CXBhZGhlaWdodCA9IDUuMDhtbQoJdGFiaGVpZ2h0ID0gMTEuNDNtbQoJdGFid2lkdGggPSAxMi45 NW1tCgkjIGRpc3RhbmNlIGZyb20gcGFkcyB0byB0YWIgcGFkCgloZWlnaHQgPSAyLjE2bW0KCSMg RERQQUszIHNwZWNpZmljCglwaXRjaCA9IDIuNTRtbQoJcGlucyA9IDMKCXBhZHdpZHRoID0gMS4z NW1tCnBhcnQgPSAiRERQQUszLmZwIgoJIyBERFBBSyA1CglwaXRjaCA9IDEuNzBtbQoJcGFkd2lk dGggPSAwLjk3bW0KCXBpbnMgPSA1CnBhcnQgPSAiRERQQUs1LmZwIgoJIyBERFBBSyA3CglwaXRj aCA9IDEuMjdtbQoJcGFkd2lkdGggPSAwLjg5bW0KCXBpbnMgPSA3CnBhcnQgPSAiRERQQUs3LmZw IgoJIyBTT1QyMjMKCXRhYndpZHRoID0gNC43Mm1tCgl0YWJoZWlnaHQgPSAyLjExbW0KCWhlaWdo dCA9IDMuODltbQoJcGFkaGVpZ2h0ID0gMi4xMW1tCgkjIDMgcGluIHNwZWNpZmljCglwaW5zID0g MwoJcGFkd2lkdGggPSAwLjgxbW0KCXBpdGNoID0gMi4zMG1tCnBhcnQgPSAiU09UMjIzLTMuZnAi CglwaW5zID0gNQoJcGFkd2lkdGggPSAwLjUxbW0KCXBpdGNoID0gMS4yN21tCnBhcnQgPSAiU09U MjIzLTUuZnAiCiMgU09JIHBhcnQgUzAyMCwgaHlicmlkIFNPVDIzIGFuZCBTT1Q1MjMKCXRhYndp ZHRoID0gMC43bW0KCXRhYmhlaWdodCA9IDEuMW1tCgloZWlnaHQgPSAwLjhtbQoJcGFkaGVpZ2h0 ID0gMS4xbW0KCXBpbnMgPSAyCglwYWR3aWR0aCA9IDAuN21tCglwaXRjaCA9IDEuM21tCnBhcnQg PSAiUzAyMC5mcCIKCgojIDAyMDEsIDA0MDIsIDA2MDMsIC4uLi4KCXR5cGUgInR3b3BhZCIKCXNp bGtib3hoZWlnaHQgPSAwCglzaWxrYm94d2lkdGggPSAwCgl3aWR0aCA9IDAuMjUwbW0KCXBhZHdp ZHRoID0gMC4yMjVtbQoJcGFkaGVpZ2h0ID0gMC4zMDBtbQoJc2lsa29mZnNldCA9IDYgbWlsCglz aWxrd2lkdGggPSA1IG1pbApwYXJ0ICIwMjAxLmZwIgoJd2lkdGggPSAwLjVtbQoJcGFkd2lkdGgg PSAwLjRtbQoJcGFkaGVpZ2h0ID0gMC41bW0KcGFydCAiMDQwMi5mcCIKI0h5YnJpZCAwNjAzLzA0 MDIgZm9vdHByaW50CglzaWxrd2lkdGggPSAxMCBtaWxzCgl3aWR0aCA9IDAuNW1tCglwYWR3aWR0 aCA9IDAuODVtbQoJcGFkaGVpZ2h0ID0gMC44bW0KcGFydCAiMDUwMy5mcCIKI0h5YnJpZCAwNjAz LzA0MDIgZm9vdHByaW50Cgl3aWR0aCA9IDAuOG1tCglwYWR3aWR0aCA9IDAuN21tCglwYWRoZWln aHQgPSAwLjhtbQpwYXJ0ICIwNjAzLmZwIgojSHlicmlkIDA4MDUvMDYwMyBmb290cHJpbnQKCXdp ZHRoID0gMC44bW0KCXBhZHdpZHRoID0gMC45bW0KCXBhZGhlaWdodCA9IDEuMm1tCnBhcnQgIjA3 MDQuZnAiCiNIeWJyaWQgMDgwNS8wNjAzIGZvb3RwcmludAoJd2lkdGggPSAxbW0KCXBhZHdpZHRo ID0gMC44bW0KCXBhZGhlaWdodCA9IDEuMm1tCnBhcnQgIjA4MDUuZnAiCgl3aWR0aCA9IDJtbQoJ cGFkd2lkdGggPSAwLjhtbQoJcGFkaGVpZ2h0ID0gMS41bW0KcGFydCAiMTIwNi5mcCIKCSMgSEM0 OVVTTUQgWFRBTAoJc2lsa3dpZHRoID0gMTAgbWlsCgl3aWR0aCA9IDRtbQoJcGFkd2lkdGggPSA0 LjdtbQoJcGFkaGVpZ2h0ID0gMC44bW0KCXNpbGtib3hoZWlnaHQgPSA1bW0KcGFydCAiSEM0OVVT TUQuZnAiCgkjIFRESyBTTEY3MDMyIGluZHVjdG9yCgl3aWR0aCA9IDQuOW1tCglwYWR3aWR0aCA9 IDEuNW1tCglwYWRoZWlnaHQgPSAyLjJtbQoJc2lsa2JveGhlaWdodCA9IDdtbQoJc2lsa2JveHdp ZHRoID0gOG1tCnBhcnQgIlNMRjcwMzIuZnAiCgkjIENvRXYvVHljbyBEUyBzZXJpZXMgaW5kdWN0 b3IsIERTNjYzMAoJd2lkdGggPSAwLjE2MGluCglwYWR3aWR0aCA9IDAuMDU1aW4KCXBhZGhlaWdo dCA9IDAuMTQwaW4KCXNpbGtib3hoZWlnaHQgPSAwLjE3N2luCglzaWxrYm94d2lkdGggPSAwaW4K cGFydCAiRFM2NjMwLmZwIgkKICAgICAgICAjIE9TUkFNIExFRCAiMTIwNiIKICAgICAgICB3aWR0 aCA9IDIuMG1tCglwYWR3aWR0aCA9IDEuNW1tCglwYWRoZWlnaHQgPSAxLjVtbQoJc2lsa2JveGhl aWdodCA9IDIuMG1tCglzaWxrYm94d2lkdGggPSAwaW4KcGFydCAiT1NSQU1fTEVEXzEyMDYuZnAi Cg== --f46d0407160b9866d604c6172244--