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:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=GpsdAnCurJTXv0T69Wj/wI9fPelurRFiafUYIVc0ti0=; b=F6iap/kgRa8wh0Wti/xUXEsF80mRTpZla1D8SDg3Oqkog2an4IIMxtEoTGsbr4h5DX j0n/I4xlzWQxR9CKIlpIfk0j8lmhJO8jCkdytSUnm1PWKZJgFah8Ctlz5IPpAeerBohs IU64kWpHHQcKAbjr+0i3xVDuyJSlJhMs8lHcBOXymD78UmTQcqIdfm2YxHM10R7n6zW3 rbO+6F7SV6NbPsSeRD2x/xqVK0slQ079DbnwQaOl8IZ45cX/C4dy8fEoj8VFJKo7a4tx cEdMACLVX9AoW909WPAvBJSbHMbV67QL4IMsLhWLGuGroNyw/BYylxLqES8aPmy0oKX1 jN5Q== MIME-Version: 1.0 X-Received: by 10.60.85.39 with SMTP id e7mr21878494oez.94.1370613512208; Fri, 07 Jun 2013 06:58:32 -0700 (PDT) In-Reply-To: References: Date: Fri, 7 Jun 2013 17:58:31 +0400 Message-ID: Subject: Re: [geda-user] Re: refdes renumber From: =?KOI8-R?B?4czFy9PFyiDowdLYy8/X08vJyg==?= To: geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=089e0111b6aa8559e104de90d337 Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --089e0111b6aa8559e104de90d337 Content-Type: multipart/alternative; boundary=089e0111b6aa8559dd04de90d335 --089e0111b6aa8559dd04de90d335 Content-Type: text/plain; charset=ISO-8859-1 This script completely compatible with refdes_renum script of geda project. Main difference of this script that his renumber REFDESs attribute in schematic files or schematic and PCB files sumaltenuously. Also this script can read the project file and renumber REFDESs in all files of current project. New option (versus refdes_renum of geda-gaf project) is: --sort option allowing useage various method of renumber as well as gschem text renumber tool ( diagonal, top to bottom, bottom to top, left to right, right to left, file) --component option allowing component coordinate instead coordinate of text attribute (REFDES) --log write to stdout Summary report. If using with --verbose option also write to stdout, context information of replace. In future I planning add --graph option for GUI to this script, similar gschem TU (autonumber text tool) window. --089e0111b6aa8559dd04de90d335 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

This script completely compatible with refdes= _renum script of geda project.

Main difference of this scri= pt that his renumber REFDESs attribute in schematic files or schematic and = PCB files sumaltenuously.
Also this script can read the project file and renumber REFDESs in= all files of current project.

New option (versus refdes_re= num of geda-gaf project) is:
--sort option allowing useage various method of renumber as well a= s gschem text renumber tool ( diagonal, top to bottom, bottom to top, left = to right, right to left, file)
--component option allowing = component coordinate instead coordinate of text attribute (REFDES)
--log= write to stdout Summary report. If using with --verbose option also write = to stdout, context information of replace.

In future I planning add --graph option for GUI to this script, similar= gschem TU (autonumber text tool) window.
--089e0111b6aa8559dd04de90d335-- --089e0111b6aa8559e104de90d337 Content-Type: application/octet-stream; name="refdes_renum.py" Content-Disposition: attachment; filename="refdes_renum.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hhnefed10 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKaGVscCA9ICIiIgpVc2FnZToKCglyZWZkZXNfcmVudW0u cHkgWy0tbm9jb3B5XSBbLS1wZ3NraXAgW251bWJlcl0gXSBmaWxlMS5zY2ggW2ZpbGUyLnNjaCBm aWxlLnBjYiBbIHBhdGh0by9wcm9qZWN0ZmlsZSBdIF0KCXJlZmRlc19yZW51bS5weSAtLWhlbHAK CXJlZmRlc19yZW51bS5weSAtLXZlcnNpb24KCnJlZmRlc19yZW51bS5weSByZWFkcyBhIGdzY2hl bSBzY2hlbWF0aWMgZmlsZSBvciBmaWxlcyBhbmQgcmVudW1iZXJzIGFsbCByZWZlcmVuY2UKZGVz aWduYXRvcnMuICBUaGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGFyZSBudW1iZXJlZCBzdGFydGlu ZyB3aXRoIDEgYW5kIHRoZQpvbGQgc2NoZW1hdGljIGZpbGUgaXMgcmVwbGFjZWQgYnkgdGhlIG1v ZGlmaWVkIHNjaGVtYXRpYyBmaWxlLiBBbHNvIHJlcGxhY2VkIFJFRkRFU3MgaW4gcGNiIGZpbGUo cykgYWNjb3JkaW5nbHkgdG8gc2NoZW1hdGljIGZpbGUocykuCnJlZmRlc19yZW51bS5weSBjYW4g cmVhZCB0aGUgcHJvamVjdCBmaWxlKGZpbGVzKSBhbmQgcmVudW1iZXIgYWxsIFJFRkRFU3MgaW4g cHJvamVjdC4KCnJlZmRlc19yZW51bS5weSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoK CiAgICAtLWhlbHAgICAgICBEaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZS4KCiAgICAtLW5vY29w eSAgICBJZiBnaXZlbiwgdGhpcyBmbGFnIGxlYXZlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW4gbmV3 IGZpbGVzCiAgICAgICAgICAgICAgICB3aG9zZSBuYW1lcyBhcmUgZ2VuZXJhdGVkIGJ5IGFwcGVu ZGluZyBhICIucmVudW0iIHRvIHRoZQogICAgICAgICAgICAgICAgb3JpZ2luYWwgZmlsZSBuYW1l cy4gIFRoZSBkZWZhdWx0IGlzIHRvIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwuCgogICAgLS1wZ3Nr aXAgTiAgV2hlbiB0aGlzIGZsYWcgaXMgdXNlZCwgY29tcG9uZW50cyBvbiB0aGUgZmlyc3Qgc2No ZW1hdGljIHNoZWV0CiAgICAgICAgICAgICAgICBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgd2l0aCAx MDEuICBPbiB0aGUgc2Vjb25kIHNoZWV0LCB0aGV5IHN0YXJ0CiAgICAgICAgICAgICAgICB3aXRo IDIwMSwgZXRjICBTcGVjaWZ5aW5nIGEgdmFsdWUgKE4pIGdpdmVzIHRoZSBzdGVwIGJldHdlZW4g cGFnZXMuCiAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAtLXBnc2tpcCAxMCB3aWxsIHN0YXJ0 IHdpdGggMTEsIDIxLCAzMSwgZXRjLgoKICAgIC0tZ2VudGxlICAgIFRoaXMgZmxhZyB0ZWxscyBy ZWZkZXNfcmVudW0ucHkgdG8gbGVhdmUgYW55IHJlZmRlc2VzCiAgICAgICAgICAgICAgICBhbG9u ZSBpZiB0aGV5IGFscmVhZHkgaGF2ZSBudW1iZXJzLiAgVXNlIHRoaXMgb3B0aW9uIHRvIG51bWJl cgogICAgICAgICAgICAgICAgbmV3IGNvbXBvbmVudHMgaW4gYSBzY2hlbWF0aWMgd2hpY2ggaGFz IGFscmVhZHkgYmVlbiBudW1iZXJlZC4KICAgICAgICAgICAgICAgIE5vdGUgdGhhdCAtLWdlbnRs ZSBpcyBzZXQgYnkgZGVmYXVsdCEKCiAgICAtLWZvcmNlICAgICBTZXQgdGhpcyBmbGFnIHRvIHJl bnVtYmVyIGFsbCByZWZkZXNlcywgd2hldGhlciB0aGV5IGFyZSBhbHJlYWR5CiAgICAgICAgICAg ICAgICBudW1iZXJlZCBvciBub3QuCgoJLS1zb3J0IEFMRwlTZXQgdGhlIHNvcnRlZCBhbGdvcml0 aG0uCgkJCQlQZXJtaXNzaWJsZSB2YWx1ZSBmb3IgLS1zb3J0IG9wdGlvbiAoQUxHKSBpczoKCQlk aWFnCQktIERpYWdvbmFsIHJlbnVtYmVyIChhcyBnc2NoZW0gcHJvZ3JhbSkKCQl0b3B0b2JvdAkt IFJlbnVtYmVyIHJlZmRlcyBiZWdhbiB3aXRoIHRvcCBhbmQgZW5kcyBhdCBib3R0b20uCgkJYm90 dG90b3AJLSBSZW51bWJlciByZWZkZXMgY29udHJhcml3aXNlIGFzIHRvcHRvYm90CgkJbGVmdHRv cmlnaHQJLSBSZW51bWJlciByZWZkZXMgYmVnYW4gd2l0aCBsZWZ0IGFuZCB0byByaWdodAoJCXJp Z2h0dG9sZWZ0IC0gUmVudW1iZXIgcmVmZGVzIGNvbnRyYXJpd2lzZSBhcyBsZWZ0dG9yaWdodAoJ CWZpbGUJCS0gUmVudW1iZXIgcmVmZGVzIGFzIHRleHQgZmlsZSBvcmRlcgoKCS0tbG9nCQlQcmlu dCByZW51bWJlciBpbmZvcm1hdGhpb24gdG8gc3Rkb3V0CgoJLS1jb21wb25lbnQgUmVudW1iZXIg cmVmZGVzIHdpdGggY29tcG9uZW50IGNvb3JkaW5hdGVzCgkJCQlCeSBkZWZhdWx0IHJlZmRlc19y ZW51bS5weSBwcm9ncmFtIHVzaW5nIGNvb3JkaW5hdGVzIG9mICJyZWZkZXMiIGF0dHJpYnV0ZXMK CiAgICAtLXZlcmJvc2UgICBFbmFibGVzIHZlcmJvc2Ugb3V0cHV0LgoKICAgIC0tdmVyc2lvbiAg IFNob3dzIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcHJvZ3JhbS4KCgpSZXR1cm4gY29kZXM6CgoJcmVm ZGVzX3JlbnVtLnB5IHJldHVybnMgdGhlIGZvbGxvd2luZyBjb2RlcyB0byB0aGUgc2hlbGwgdXBv biBjb21wbGV0aW9uOgoKICAgICAgICAgIDAgICBQcm9ncmFtIHJhbiBzdWNjZXNzZnVsbHkuCiAg ICAgICAgICAxICAgRXJyb3Igb3BlbmluZyBvciByZWFkaW5nIGlucHV0IGZpbGUuCiAgICAgICAg ICAyICAgRXJyb3Igb3BlbmluZyBvciB3cml0aW5nIG91dHB1dCBmaWxlLgogICAgICAgICAgMyAg IFRvbyBtYW55IGNvbXBvbmVudHMgZm9yIC0tcGdza2lwIHNldHRpbmcuCiAgICAgICAgICA0ICAg SW50ZXJuYWwgZXJyb3IgKHByb2dyYW0gYnVnIGVuY291bnRlcmVkKS4KClVzYWdlIGV4YW1wbGVz OgoKMS4JVG8gcmVudW1iZXIgdGhlIHJlZmVyZW5jZSBkZXNpZ25hdG9ycyBpbiBhIHNpbmdsZSBw YWdlIHNjaGVtYXRpYwoJbXlzY2guc2NoOgoKCQlyZWZkZXNfcmVudW0ucHkgbXlzY2guc2NoCgkJ CgoyLglUbyByZW51bWJlciB0aGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGluIHNjaGVtYXRpYyBw YWdlcyBwZzEuc2NoLAoJcGcyLnNjaCBhbmQgcGczLnNjaCwgd2l0aCB0aGUgcmVmZXJlbmNlIGRl c2lnbmF0b3JzIG9uIHBnMS5zY2gKCWJlZ2lubmluZyBhdCAxMDEsIHRoZSBkZXNpZ25hdG9ycyBv biBwZzIuc2NoIGJlZ2lubmluZyBhdCAyMDEsCglhbmQgdGhlIGRlc2lnbmF0b3JzIG9uIHBnMy5z Y2ggYmVnaW5uaW5nIGF0IDMwMToKCgkJcmVmZGVzX3JlbnVtLnB5IC0tcGdza2lwIHBnMS5zY2gg cGcyLnNjaCBwZzMuc2NoCgoJCjMuCUZvcmNlIHJlcGxhY2VkIHRoZSBSRUZERVNzIGluIHNjaGVt YXRpYyBhbmQgUENCIGZpbGVzLgoJTm8gZm9yZ290IGdzY2gycGNiIHByb2dyYW0gZm9yIGdlbmVy YXRlIHByb3BlciBuZXRsaXN0IDopCgkJCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgZm9vMS5z Y2ggZm9vMi5zY2ggZm9vLnBjYgoJCgo0LglGb3JjZSByZXBsYWNlZCB0aGUgUkVGREVTcyBpbiBj dXJyZW50IChvciBub24gY3VycmVudCkgd29ya2VkIHByb2plY3QuCgkJCgkJcmVmZGVzX3JlbnVt LnB5IC0tZm9yY2UgcHJvamVjdAoJCXJlZmRlc19yZW51bS5weSAtLWZvcmNlIC4uLy4uL2Rlc2ln bi9nZWRhL3Byb2plY3QKCQoKNS4JUmVwbGFjaW5nIHdpdGggbm9uIGRlZmF1bHQgc29ydGluZyBh bGdvcml0aG0KCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgcHJvamVjdCAtLXNvcnQgbGVmdHRv cmlnaHQKCQoKCnJlZmRlc19yZW51bS5weSB3YXMgd3JpdHRlbiBieSBLaGFya292c2t5IEFsZXhl eSA8c3ZldG9ub21lckBnbWFpbC5jb20+CiIiIgoKdmVyc2lvbj0ncmVmZGVzX3JlbnVtLnB5IHYx LjAgYnkgS2hhcmtvdnNreSBBbGV4ZXkgOiknCnNvcnRfbWV0aG9kID0gWydkaWFnJywndG9wdG9i b3QnLCdib3R0b3RvcCcsJ2xlZnR0b3JpZ2h0JywncmlnaHR0b2xlZnQnLCdmaWxlJ10KCmltcG9y dCBzeXMsb3MKaW1wb3J0IHJlCgppZiBsZW4oc3lzLmFyZ3YpID09IDE6CglwcmludCBoZWxwCgll eGl0KDApCgppZiAnLS1oZWxwJyBpbiBzeXMuYXJndjoKCXByaW50IGhlbHAKCWV4aXQoMCkKCmlm ICctLXZlcnNpb24nIGluIHN5cy5hcmd2OgoJcHJpbnQgdmVyc2lvbgoJZXhpdCgwKQoKaWYgJy0t bm9jb3B5JyAgaW4gc3lzLmFyZ3Y6CglTdWZmaXggPSAnLnJlbnVtJwoJc3lzLmFyZ3YucmVtb3Zl KCctLW5vY29weScpCmVsc2U6CglTdWZmaXggPSAnJwoKaWYgJy0tcGdza2lwJyAgaW4gc3lzLmFy Z3Y6CglpZiBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1wZ3NraXAnKSsxXSBpcyBpbnQ6CgkJ YWRkX3BhZ2VfbnVtID0gc3lzLmFyZ3Zbc3lzLmFyZ3YuaW5kZXgoJy0tcGdza2lwJykrMV0KCWVs c2U6YWRkX3BhZ2VfbnVtID0gMTAwICNQYWdlIGluY3JlbWVudCAKCXN5cy5hcmd2ID0gc3lzLmFy Z3ZbOnN5cy5hcmd2LmluZGV4KCctLXBnc2tpcCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4 KCctLXBnc2tpcCcpKzI6XQplbHNlOgoJYWRkX3BhZ2VfbnVtID0gMCNQYWdlIGluY3JlbWVudCAK CmlmICctLWdlbnRsZScgIGluIHN5cy5hcmd2OgoJc3lzLmFyZ3YucmVtb3ZlKCctLWdlbnRsZScp CglpZiAnLS1mb3JjZScgIGluIHN5cy5hcmd2OgoJCXByaW50ICdEbyBub3QgdXNlIFwiLS1nZW50 bGVcIiBhbmQgXCItLWZvcmNlXCIgc3VtYWx0ZW51b3VzbHknCgkJZXhpdCgwKQoKaWYgJy0tZm9y Y2UnICBpbiBzeXMuYXJndjoKCWZvcmNlID0gVHJ1ZQoJc3lzLmFyZ3YucmVtb3ZlKCctLWZvcmNl JykKZWxzZToKCWZvcmNlID0gRmFsc2UKCmlmICctLXZlcmJvc2UnICBpbiBzeXMuYXJndjoKCXZl cmJvc2UgPSBUcnVlCglzeXMuYXJndi5yZW1vdmUoJy0tdmVyYm9zZScpCmVsc2U6Cgl2ZXJib3Nl ID0gRmFsc2UKCmlmICctLXNvcnQnICBpbiBzeXMuYXJndjoKCWlmIHN5cy5hcmd2W3N5cy5hcmd2 LmluZGV4KCctLXNvcnQnKSsxXSBpbiBzb3J0X21ldGhvZDoKCQlzb3J0ID0gc3lzLmFyZ3Zbc3lz LmFyZ3YuaW5kZXgoJy0tc29ydCcpKzFdICNzb3J0IG1ldGhvZAoJZWxzZToKCQlwcmludCAnVW5r bm93biBhcmd1bWVudCBmb3IgLS1zb3J0IG9yIHNvcnQgbWV0aG9kIGlzIHNraXBwZWQnCgkJcHJp bnQgJ1RoZSBwZXJtaXNzaWJsZSB2YWx1ZSBmb3Igc29ydCBtZXRob2Q6ICcgLCBzdHIoc29ydF9t ZXRob2QpCgkJZXhpdCgwKQoJc3lzLmFyZ3YgPSBzeXMuYXJndls6c3lzLmFyZ3YuaW5kZXgoJy0t c29ydCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCctLXNvcnQnKSsyOl0KZWxzZToKCXNv cnQgPSAndG9wdG9ib3QnCgppZiAnLS1sb2cnIGluIHN5cy5hcmd2OgoJbG9nID0gVHJ1ZQoJc3lz LmFyZ3YucmVtb3ZlKCctLWxvZycpCmVsc2U6Cglsb2cgPSBGYWxzZQoKaWYgJy0tY29tcG9uZW50 JyBpbiBzeXMuYXJndjoKCXJlZmRlcyA9IEZhbHNlICMgZm9yIGNvbXBvbmVudCBjb29yZGluYXRl cyB1c2luZwoJc3lzLmFyZ3YucmVtb3ZlKCctLWNvbXBvbmVudCcpIAplbHNlOgoJcmVmZGVzID0g VHJ1ZQoKcGNibmFtZXMgPSBbXQpwY2Jjb250ZW50ID0gW10Kc2NoZW1fbmFtZXMgPSBbXQpmb3Ig aSBpbiBzeXMuYXJndlsxOl06CglpZiByZS5zZWFyY2goJy4qXC5wY2IkJyxpLGZsYWdzPXJlLkRP VEFMTCk6ICNUcnVlIGlmIGVuZCBvZiBmaWxlbmFtZSBpcyAucGNiCgkJaWYgaSBub3QgaW4gcGNi bmFtZXM6CgkJCXBjYm5hbWVzLmFwcGVuZChpKQoJZWxpZiByZS5zZWFyY2goJy4qXC5zY2gkJyxp LGZsYWdzPXJlLkRPVEFMTCk6ICNUcnVlIGlmIGVuZCBvZiBmaWxlbmFtZSBpcyAuc2NoCgkJaWYg aSBub3QgaW4gc2NoZW1fbmFtZXM6CgkJCXNjaGVtX25hbWVzLmFwcGVuZChpKQoJZWxzZTogI2Zp bGUgaXMgbm90IHBjYiBhbmQgc2NoID0+IHRoaXMgZmlsZSBpcyBwcm9qZWN0IGZpbGUKCQlmaWxl PW9wZW4oaSwncnQnKQoJCWNvbnRlbnQgPSBmaWxlLnJlYWQoKQoJCWZpbGUuY2xvc2UoKQoJCWZv ciB0ZW1wMSBpbiByZS5maW5kYWxsKCdzY2hlbWF0aWNzXHMrLipcLnNjaCcsY29udGVudCxmbGFn cz1yZS5ET1RBTEwpOiAjVGhpcyBzdHJpbmcgYXJlIGNvbnRhbmluZyB0aGUgc2NoZW1hdGljIGZp bGUgbmFtZXMKCQkJZm9yIHRlbXAgaW4gdGVtcDEuc3BsaXQoKVsxOl06CgkJCQl0ZW1wID0gb3Mu cGF0aC5kaXJuYW1lKGkpKycvJysgdGVtcCAjIEFkZCBwYXRoIHRvIGZpbGUgKFVzZWZ1bCBpZiBw cm9qZWN0IGZpbGUgbm90IGluIGN1cnJlbnQgZGlyZWN0b3J5KQoJCQkJaWYgdGVtcCBub3QgaW4g c2NoZW1fbmFtZXM6CgkJCQkJc2NoZW1fbmFtZXMuYXBwZW5kKHRlbXApCgkJZm9yIHRlbXAxIGlu IHJlLmZpbmRhbGwoJ291dHB1dC1uYW1lXHMrLipcLnBjYicsY29udGVudCxmbGFncz1yZS5ET1RB TEwpOiNUaGlzIHN0cmluZyBhcmUgY29udGFuaW5nIHRoZSBzY2hlbWF0aWMgZmlsZSBuYW1lcwoJ CQlmb3IgdGVtcCBpbiB0ZW1wMS5zcGxpdCgpWzE6XToKCQkJCXRlbXAgPSBvcy5wYXRoLmRpcm5h bWUoaSkrJy8nKyB0ZW1wICsgJy5wY2InIyBBZGQgcGF0aCB0byBmaWxlIChVc2VmdWwgaWYgcHJv amVjdCBmaWxlIG5vdCBpbiBjdXJyZW50IGRpcmVjdG9yeSkuIEFmdGVyIGFkZCAucGNiIChhY3R1 YWwgZm9yIHByb2plY3QgZmlsZSkgCiNXaGVuIGluIHByb2plY3QgZmlsZSAib3V0cHV0LW5hbWUg Zm9vLnBjYiIsIGdzY2gycGNiIGNyZWF0ZSAgZm9vLnBjYi5wY2IsIHRoZXJlZm9yZSB0aGlzIGZp bGUgSVMgbWFpbiBQQ0IuCgkJCQlpZiB0ZW1wIG5vdCBpbiBwY2JuYW1lczoKCQkJCQlwY2JuYW1l cy5hcHBlbmQodGVtcCkKIyBSZWFkIGNvbnRlY3Qgb2YgUENCIGZpbGVzIApmb3IgaSBpbiBwY2Ju YW1lczoKCWZpbGU9b3BlbihpLCdydCcpCglwY2Jjb250ZW50LmFwcGVuZChmaWxlLnJlYWQoKSkK CWZpbGUuY2xvc2UoKQojIFJlYWQgY29udGVjdCBvZiBQQ0IgZmlsZXMgCgpwYWdlX251bSA9IDAK Zm9yIGZpbGVuYW1lIGluIHNjaGVtX25hbWVzOiAKCSNSZWFkIGNvbnRlbnQgU0NIIGZpbGVzIG9u ZSBhdCBhIHRpbWUhISEgSW4gZnV0dXJlIG1heSBiZSByZXBsYWNlIGZvciByZWFkIGNvbnRlbnQg YWxsIFNDSCBmaWxlcwoJZmlsZT1vcGVuKGZpbGVuYW1lLCdydCcpCgljb250ZW50ID0gZmlsZS5y ZWFkKCkKCWZpbGUuY2xvc2UoKQoKI0ZpbmQgYWxsIHJlcGxhY2luZyBzdHJpbmdzIGluIGN1cnJl bnQgc2NoZW1hdGljCglpZiByZWZkZXM9PVRydWU6ICNJZiB1c2VkIHJlZmRlcyBhdHRyaWJ1dGUg Y29vcmRpbmF0ZXMKCQlpZiBmb3JjZTojIEFsbCByZWZkZXMgYXR0cmlidXRlcyBhcmUgc2VsZWN0 ZWQKCQkJY29tcF9saXN0ICA9IHJlLmZpbmRhbGwoJ1RbXlxuXStccytyZWZkZXM9XHcqXD8/Jyxj b250ZW50LGZsYWdzPXJlLkRPVEFMTCkKCQllbHNlOiMgT25seSBOT04gbnVtYmVyaW5nIHJlZmRl cyBhdHRyaWJ1dGVzIGFyZSBzZWxlY3RlZCAoRXhhbXBsZTogUj8gREQ/IGV0Yy4pCgkJCWNvbXBf bGlzdCAgPSByZS5maW5kYWxsKCdUW15cbl0rXHMrcmVmZGVzPVx3Klw/Jyxjb250ZW50LGZsYWdz PXJlLkRPVEFMTCkKCQkKCWVsc2U6ICNJZiB1c2VkIGNvbXBvbmVudCBjb29yZGluYXRlcyAobGlz dCBvZiBzdHJpbmdzKQoJCWlmIGZvcmNlOgoJCQkjZm9yIGVtYmVkZGVkIGNvbXBvbmVudHMKCQkJ Y29tcF9saXN0ICA9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytcZCtc cytFTUJFRERFRC4rP1xbLis/XF1ccytce1tee31dKnJlZmRlcz1cdypcPz9bXnt9XSpcfScsY29u dGVudCxmbGFncz1yZS5ET1RBTEwpCgkJCSNmb3Igbm9uIGVtYmVkZGVkIGNvbXBvbmVudHMKCQkJ Y29tcF9saXN0ICs9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytcZCtb XlxuXStccytce1tee31dKnJlZmRlcz1cdypcPz9bXnt9XSpcfScsY29udGVudCxmbGFncz1yZS5E T1RBTEwpCgkJZWxzZToKCQkJI2ZvciBlbWJlZGRlZCBjb21wb25lbnRzCgkJCWNvbXBfbGlzdCAg PSByZS5maW5kYWxsKCdDXHMrXGQrXHMrXGQrXHMrXGQrXHMrXGQrXHMrXGQrXHMrRU1CRURERUQu Kz9cWy4rP1xdXHMrXHtbXnt9XSpyZWZkZXM9XHcqXD9bXnt9XSpcfScsY29udGVudCxmbGFncz1y ZS5ET1RBTEwpCgkJCSNmb3Igbm9uIGVtYmVkZGVkIGNvbXBvbmVudHMKCQkJY29tcF9saXN0ICs9 IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytcZCtbXlxuXStccytce1te e31dKnJlZmRlcz1cdypcP1tee31dKlx9Jyxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCkKCglpZiBu b3QgY29tcF9saXN0OiAjVHJ1ZSBpZiBubyBSRUZERVNzIGZvciByZXBsYWNpbmcKCQljb250aW51 ZQoJCglwYWdlX251bSArPSBhZGRfcGFnZV9udW0gICMgQWRkaW5nIFBhZ2UgYmlhcyBmb3IgbmV3 IGZpbGUgCgkjIE9idGFpbmluZyB0aGUgY29tcG9uZW50IGxpc3QKCWZvciBpIGluIHJhbmdlKDAs bGVuKGNvbXBfbGlzdCkpOiAjRmluZCBjb29yZGluYXRlcyB0byByZXBsYWNpbmcKCQl4eSA9IGNv bXBfbGlzdFtpXS5zcGxpdChOb25lLDMpWzE6M10KCQl4eVswXSA9IGludCh4eVswXSkKCQl4eVsx XSA9IGludCh4eVsxXSkKCiNTZWxlY3QgcmVwbGFjaW5nIGFsZ29yeXRobSBieSBwcm9wZXIgc2V0 dXAgY29vcmRpbmF0ZXMgbG9jYXRpb24gb3JkZXIgYW5kIHNvbWUgY29tcHV0YXRpb24KCQlpZiBz b3J0ID09ICdkaWFnJzoKCQkJY29tcF9saXN0W2ldID0gW3h5WzBdIC0geHlbMV1dICsgW2NvbXBf bGlzdFtpXV0KCQllbGlmIHNvcnQgPT0gJ2xlZnR0b3JpZ2h0JzoKCQkJY29tcF9saXN0W2ldID0g W3h5WzBdXSArIFsteHlbMV1dICsgW2NvbXBfbGlzdFtpXV0KCQllbGlmIHNvcnQgPT0gJ3RvcHRv Ym90JzoKCQkJY29tcF9saXN0W2ldID0gWy14eVsxXV0gKyBbeHlbMF1dICsgW2NvbXBfbGlzdFtp XV0KCQllbGlmIHNvcnQgPT0gJ3JpZ2h0dG9sZWZ0JzoKCQkJY29tcF9saXN0W2ldID0gWy14eVsw XV0gKyBbeHlbMV1dICsgW2NvbXBfbGlzdFtpXV0KCQllbGlmIHNvcnQgPT0gJ2JvdHRvdG9wJzoK CQkJY29tcF9saXN0W2ldID0gW3h5WzFdXSArIFsteHlbMF1dICsgW2NvbXBfbGlzdFtpXV0KCQll bHNlOgoJCQljb21wX2xpc3RbaV0gPSBbY29tcF9saXN0W2ldXQoKCQkjY29tcF9saXN0IGNvbnRl bnQ6IFtjb29yZDEsIGNvb3JkMiwgJ3JlcGxhY2VkIHN0cmluZyBvZiBmaWxlJ10KCQkjRXhhbXBs ZToJCQlbLTUwODAwICwgNjUxMDAgLCAnQyA2NTEwMCA1MDgwMCAuLi4gcmVzaXN0b3ItMS5zeW0g ey4uLi5yZWZkZXM9UjEyLi4ufSddCgkJCgkJI0ZpbmQgdGhlIHJlcGxhY2VkIFJFRkRFUyBsZXR0 ZXIgcHJlZml4IGFuZCBudW1iZXIgc3VmZml4IGFuZCBBREQgdG8gY29tcG9uZW50IGxpc3QgCgkJ cmVmZGVzPXJlLnNlYXJjaCgnKC4qKXJlZmRlcz0oW0EtWl0qKShcZCt8XD8qKScsY29tcF9saXN0 W2ldWy0xXSxmbGFncz1yZS5ET1RBTEwpCgkJY29tcF9saXN0W2ldLmluc2VydCgwLHJlZmRlcy5n cm91cCgyKSkKCQljb21wX2xpc3RbaV0uYXBwZW5kKHJlZmRlcy5ncm91cCgzKSBpZiByZWZkZXMu Z3JvdXAoMykgZWxzZSAnJykgI0ZvciBsZXR0ZXJzIG9ubHkgUkVGREVTcyAoaW4gZnV0dXJlIFdl IGNhbiByZW1vdmUgdGhleSBmcm9tIHJlY3BsYWNpbmcgbGlzdCkKCgkJI2NvbXBfbGlzdCBjb250 ZW50OiBbJ1JFRkRFUyBwcmVmaXgnLCBjb29yZDEsIGNvb3JkMiwgJ3JlcGxhY2VkIHN0cmluZyBv ZiBmaWxlJwkJCQkJCQkJLCdPbGQgTlVNQkVSIG9mIFJFRkRFUyddCgkJI0V4YW1wbGU6CQkJWyAg J1InCQkJLCAtNTA4MDAgLCA2NTEwMCAsICdDIDY1MTAwIDUwODAwIC4uLiByZXNpc3Rvci0xLnN5 bSB7Li4uLnJlZmRlcz1SMTIuLi59LCcxMiddCgoKCSMgU29ydGluZyB0aGUgcmVwbGFjZWQgY29t cG9uZW50L3JlZmRlcyBsaXN0IHdpdGggUkVGREVTcyBwcmVmaXggYW5kIGFmdGVyIHdpdGggc2Vs ZWN0ZWQgc29ydCBhbGdvcml0aG0KCWNvbXBfbGlzdCA9IHNvcnRlZChjb21wX2xpc3QpCgkKCXJl Zl9jdXJyX3ByZWY9JycKCWlmICdyZWZfbGFzdF9udW1zJyBub3QgaW4gbG9jYWxzKCk6CgkJcmVm X2xhc3RfbnVtcz17fSAjTGFzdHMgbnVtYmVycyBmb3IgUkVGREVTcyBwcmV2aW91cyBzY2hlbWF0 aWMgKEZvciBkaXNjb250aW51b3VzIHJlbnVtYmVyICh3aXRob3V0IC0tcGdza2lwKSkgCgkJI0V4 YW1wbGUgb2YgdGhpcyBkaWN0IGNvbnRlbnQ6IHsnREQnOjUsICdSJzoxNCwgJ0MnOjQ1fQoKCWZv ciBpIGluIGNvbXBfbGlzdDogI1JlcGxhY2luZyBzb3J0ZWQgYXR0cmlidXRlcwoJCSNDb21wbGV4 IGNhbHVsYXRlIG9mIGN1cnJlbnQgUkVGREVTIAoJCWlmIHJlZl9jdXJyX3ByZWYgPT0gaVswXToK CQkJcmVmX2N1cnJfbnVtICs9IDEKCQllbHNlOgoJCQl0cnk6cmVmX2N1cnJfbnVtID0gcGFnZV9u dW0gKyAxIGlmIHBhZ2VfbnVtICE9IDAgZWxzZSByZWZfbGFzdF9udW1zW2lbMF1dICsgMSAKCQkJ ZXhjZXB0OnJlZl9jdXJyX251bT0xCgkJCXJlZl9jdXJyX3ByZWYgPSBpWzBdCgkJcmVmX2xhc3Rf bnVtc1tyZWZfY3Vycl9wcmVmXT1yZWZfY3Vycl9udW0gIyBBZGQgY3VycmVudCBSRUZERVMgaW4g bGFzdCBudW1iZXJzCgkJaS5hcHBlbmQoc3RyKHJlZl9jdXJyX251bSkpICNBZGQgY3VycmVudCBu dW1iZXIgdG8gY29tcG9uZW50IGxpc3QKCgkJI2NvbXBfbGlzdCBjb250ZW50OiBbJ1JFRkRFUyBw cmVmaXgnLCBjb29yZDEsIGNvb3JkMiwgJ3JlcGxhY2VkIHN0cmluZyBvZiBmaWxlJwkJCQksJ09s ZCBOVU1CRVInLCdOZXcgTlVNQkVSJ10KCQkjRXhhbXBsZToJCQlbICAnUicJCQksIC01MDgwMCAs IDY1MTAwICwgJ0MgNjUxMDAgNTA4MDAgLi4uey4uLi5yZWZkZXM9UjEyLi4ufSwJJzEyJwkgLAkn NCddCgkJCgkJY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShpW34yXSxpW34yXS5yZXBsYWNlKCdy ZWZkZXM9JytpWzBdK2lbfjFdLCdyZWZkZXM9JytpWzBdK2lbfjBdKSkgI1JlcGxhY2luZyBjdXJy ZW50IHN0cmluZyB3aXRoIE5ldyBSRUZERVMKCQlpZiBsb2cgYW5kIHZlcmJvc2U6CgkJCXByaW50 ICdSZXBsYWNpbmcgaW4gc2NoIDogJywgaVswXStpW34xXSwgJyA9PiAnLCBpWzBdK2lbfjBdCgkJ CXByaW50ICc8PDwgJywgaVt+Ml0KCQkJcHJpbnQgJz4+PiAnLCBpW34yXS5yZXBsYWNlKCdyZWZk ZXM9JytpWzBdK2lbfjFdLCdyZWZkZXM9JytpWzBdK2lbfjBdKQoJCQlwcmludCAnLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwoKCQlmb3IgcGNiX2luZGV4IGluIHJhbmdlKDAs bGVuKHBjYmNvbnRlbnQpKTogI1NlYXJjaCBjdXJyZW50IFJFRkRFUyBpbiBwY2IgZmlsZXMgYW5k IEFERCBjb250ZXh0IG9mIFJFRkRFUyAoYXBwcm9wcmlhdGUgZWxlbWVudCBvbnRleCBjb21wbGV0 ZWx5KSB0byBsaXN0IG9mIHJlcGxhY2VzCgkJCWVsZW0gPSByZS5zZWFyY2goJ0VsZW1lbnRcW1te W1xdXSoiJXMiW15bXF1dKlxdJyAlKGlbMF0raVt+MV0pLHBjYmNvbnRlbnRbcGNiX2luZGV4XSAs ZmxhZ3M9cmUuRE9UQUxMKQoJCQlpZiBlbGVtOgoJCQkJdHJ5OgoJCQkJCXBjYl9yZXBsYWNlcy5h cHBlbmQoW3BjYl9pbmRleCxlbGVtLmdyb3VwKCksZWxlbS5ncm91cCgpLnJlcGxhY2UoaVswXStp W34xXSxpWzBdK2lbfjBdKV0pIAoJCQkJZXhjZXB0OnBjYl9yZXBsYWNlcyA9ICBbW3BjYl9pbmRl eCxlbGVtLmdyb3VwKCksZWxlbS5ncm91cCgpLnJlcGxhY2UoaVswXStpW34xXSxpWzBdK2lbfjBd KV1dICNDcmVhdGUgbmV3IHJlcGxhY2UgbGlzdAoJCQkJaWYgbG9nIGFuZCB2ZXJib3NlOgoJCQkJ CXByaW50ICdSZXBsYWNpbmcgaW4gcGNiOiAnLCBpWzBdK2lbfjFdLCAnID0+ICcsIGlbMF0raVt+ MF0KCQkJCQlwcmludCAnPDw8ICcsIGVsZW0uZ3JvdXAoKQoJCQkJCXByaW50ICc+Pj4gJywgZWxl bS5ncm91cCgpLnJlcGxhY2UoaVswXStpW34xXSxpWzBdK2lbfjBdKQoJCQkJCXByaW50ICctLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCgoJaWYgJ3BjYl9yZXBsYWNlcycgaW4g dmFycygpOiAjSWYgUENCIHJlcGxhY2UgbGlzdCBhcmUgZXhpc3RzCgkJZm9yIGkgaW4gcGNiX3Jl cGxhY2VzOgkjUmVwbGFjZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGNvbnRleHRzLCBjb250YWlu aW5nIHJlcGxhY2VkIFJFRkRFU3MKCQkJcGNiY29udGVudFtpWzBdXSA9IHBjYmNvbnRlbnRbaVsw XV0ucmVwbGFjZShpWzFdLGlbMl0pCgojIFdyaXRlIGN1cnJlbnQgcmVwbGFjZWQgY29udGVudCAo c2NoZW1hdGljKSB0byBjdXJyZW50IHNjaGVtYXRpYyBmaWxlCglmaWxlPW9wZW4oZmlsZW5hbWUr U3VmZml4LCd3dCcpCglmaWxlLndyaXRlKGNvbnRlbnQpCglmaWxlLmNsb3NlKCkKCiNXcml0ZSBh bGwgUENCIHJlcGxhY2VkIGNvbnRlbnRzIHRvIGNvcnJlc3BvbmluZyBQQ0IgZmlsZQpmb3IgaSBp biByYW5nZSgwLGxlbihwY2Jjb250ZW50KSk6CglmaWxlPW9wZW4ocGNibmFtZXNbaV0rU3VmZml4 LCd3dCcpCglmaWxlLndyaXRlKHBjYmNvbnRlbnRbaV0pCglmaWxlLmNsb3NlKCkKCiNQcmludCBs b2cgbWVzc2FnZSB0byBzdGRvdXQgKHN1bW1hcnkgcmVwbGFjZWQpCmlmIGxvZzoKCXByaW50ICdT dW1tYXJ5IHJlcGxhY2VkJwoJZm9yIGkgaW4gY29tcF9saXN0OgoJCXByaW50IGlbMF0raVt+MV0s ICcgPT4gJywgaVswXStpW34wXQoJCQoK --089e0111b6aa8559e104de90d337--