From owner-freebsd-ports@FreeBSD.ORG Fri Dec 9 13:43:32 2011 Return-Path: Delivered-To: ports@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 75CF31065670 for ; Fri, 9 Dec 2011 13:43:32 +0000 (UTC) (envelope-from fiziologus@gmail.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id 16E638FC0A for ; Fri, 9 Dec 2011 13:43:31 +0000 (UTC) Received: by vbbfr13 with SMTP id fr13so3911387vbb.13 for ; Fri, 09 Dec 2011 05:43:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=5z1jV2Bl774ID8u1fBj/qnzOzj+SvECAXu7RfQPNxkc=; b=nEnsiI/pGFJ/QGygpV9M6DJxAf6g23v46AUiH5utp5eVBZEjynm03UwjK2nsa3l4mB 71X2MZ7hbMhP0Q4YWY22wDnsdm/684/Bz+aycpaonnQlJuEwk4RMirKX+ZnYWW79RZWn AZs42vvO0CL5WRZLwr3/2c/rC22RN/omOYg2s= MIME-Version: 1.0 Received: by 10.52.178.70 with SMTP id cw6mr4281953vdc.6.1323436433683; Fri, 09 Dec 2011 05:13:53 -0800 (PST) Received: by 10.220.199.3 with HTTP; Fri, 9 Dec 2011 05:13:53 -0800 (PST) Date: Fri, 9 Dec 2011 16:13:53 +0300 Message-ID: From: green dog To: ports@FreeBSD.org Content-Type: multipart/mixed; boundary=20cf3071cca883364d04b3a88e48 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: Subject: [update] graphics/py-soya3d X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Dec 2011 13:43:32 -0000 --20cf3071cca883364d04b3a88e48 Content-Type: text/plain; charset=ISO-8859-1 update to 0.15rc1 --20cf3071cca883364d04b3a88e48 Content-Type: text/plain; charset=US-ASCII; name="diff.txt" Content-Disposition: attachment; filename="diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvz82xv20 ZGlmZiAtcnVOIHB5LXNveWEzZC9NYWtlZmlsZSBweS1zb3lhM2QubmV3L01ha2VmaWxlCi0tLSBw eS1zb3lhM2QvTWFrZWZpbGUJMjAxMC0wNC0yOCAwMTo1ODoyNy4wMDAwMDAwMDAgKzA0MDAKKysr IHB5LXNveWEzZC5uZXcvTWFrZWZpbGUJMjAxMS0xMS0yNSAxNDoyNjozNi4wMDAwMDAwMDAgKzA0 MDAKQEAgLTYsMTIgKzYsMTIgQEAKICMKIAogUE9SVE5BTUU9CXNveWEzZAotUE9SVFZFUlNJT049 CTAuMTQKLVBPUlRSRVZJU0lPTj0JNQorRElTVFZFUlNJT049CTAuMTVyYzEKK1BPUlRSRVZJU0lP Tj0JMQogQ0FURUdPUklFUz0JZ3JhcGhpY3MgcHl0aG9uCiBNQVNURVJfU0lURVM9CWh0dHA6Ly9k b3dubG9hZC5nbmEub3JnL3NveWEvCiBQS0dOQU1FUFJFRklYPQkke1BZVEhPTl9QS0dOQU1FUFJF RklYfQotRElTVE5BTUU9CVNveWEtJHtQT1JUVkVSU0lPTn0KK0RJU1ROQU1FPQlTb3lhLSR7RElT VFZFUlNJT059CiBESVNURklMRVM9CSR7RElTVE5BTUV9JHtFWFRSQUNUX1NVRlh9CiBESVNUX1NV QkRJUj0JcHl0aG9uCiAKQEAgLTU1LDYgKzU1LDkgQEAKIAlAJHtSRUlOUExBQ0VfQ01EfSAtZSBc CiAJCSdzfCUlTE9DQUxCQVNFJSV8JHtMT0NBTEJBU0V9fGcnIC1lIFwKIAkJCSdzfC91c3IvaW5j bHVkZXwke0xPQ0FMQkFTRX0vaW5jbHVkZXxnJyAke1dSS1NSQ30vc2V0dXAucHkKKyNSZXBsYWNl IGJhZCBmaWxlIChjb250ZW50IGJpbmFyeSBzaW1ib2xzKQorCUAke1JNfSAke1dSS1NSQ30vZWRp dG9yL3dvcmxkLnB5ICYmIFwKKwkke0NQfSAke0ZJTEVTRElSfS93b3JsZC5weSAke1dSS1NSQ30v ZWRpdG9yCiAKIHBvc3QtaW5zdGFsbDoKIC5pZiAhZGVmaW5lZChOT1BPUlRFWEFNUExFUykKZGlm ZiAtcnVOIHB5LXNveWEzZC9kaXN0aW5mbyBweS1zb3lhM2QubmV3L2Rpc3RpbmZvCi0tLSBweS1z b3lhM2QvZGlzdGluZm8JMjAxMS0wNy0wMyAxODoxMjowMi4wMDAwMDAwMDAgKzA0MDAKKysrIHB5 LXNveWEzZC5uZXcvZGlzdGluZm8JMjAxMS0xMS0yNSAxNDoyNDo1Ni4wMDAwMDAwMDAgKzA0MDAK QEAgLTEsNCArMSw0IEBACi1TSEEyNTYgKHB5dGhvbi9Tb3lhLTAuMTQudGFyLmJ6MikgPSBkY2I5 MzIwNmQ3MTU0ZGM1NzVlYzZlZWI3ZmEzZWNmZDZiZmI3OGZhMjMzZGI2MzllNDIzODU3Y2QyYTk5 NTkwCi1TSVpFIChweXRob24vU295YS0wLjE0LnRhci5iejIpID0gOTA1NjU5CitTSEEyNTYgKHB5 dGhvbi9Tb3lhLTAuMTVyYzEudGFyLmJ6MikgPSAyNTY3NzE0YmMzMTJhMTcxYmI1YjMxY2I4NTQ4 MDRhNzhjZmY4NzhlOGQ1Y2QyMzUyY2YzN2Y0OGM4ZWI2ZGQ2CitTSVpFIChweXRob24vU295YS0w LjE1cmMxLnRhci5iejIpID0gOTEwNTc2CiBTSEEyNTYgKHB5dGhvbi9Tb3lhVHV0b3JpYWwtMC4x NC50YXIuYnoyKSA9IDg2ZDViODE4OWU3ZjdiNDI2OTk3NmE2NWYyM2E1MTI5MWJiOTljNjI3MmYy ODg0Y2JkMTI5YTZlOWNjNmNiZWMKIFNJWkUgKHB5dGhvbi9Tb3lhVHV0b3JpYWwtMC4xNC50YXIu YnoyKSA9IDUyMjM2NzQKZGlmZiAtcnVOIHB5LXNveWEzZC9maWxlcy9wYXRjaC1zZXR1cC5weSBw eS1zb3lhM2QubmV3L2ZpbGVzL3BhdGNoLXNldHVwLnB5Ci0tLSBweS1zb3lhM2QvZmlsZXMvcGF0 Y2gtc2V0dXAucHkJMjAwOS0wNC0yNyAwNToxNjozNS4wMDAwMDAwMDAgKzA0MDAKKysrIHB5LXNv eWEzZC5uZXcvZmlsZXMvcGF0Y2gtc2V0dXAucHkJMjAxMS0xMS0yNSAxNDoyNDo1Ni4wMDAwMDAw MDAgKzA0MDAKQEAgLTEsMTQgKzEsNiBAQAotLS0tIHNldHVwLnB5CTIwMDktMDQtMjIgMTA6MDA6 MjMuMDAwMDAwMDAwIC0wNTAwCi0rKysgc2V0dXAucHkJMjAwOS0wNC0yMiAxMDowMzoyMy4wMDAw MDAwMDAgLTA1MDAKLUBAIC0yMSw2ICsyMSw3IEBACi0gCi0gIyBNb2RpZnkgdGhlIGZvbGxvd2lu ZyBpZiBuZWVkZWQgOgotIFVTRV9PUEVOQUwgPSAxICAgICAjIHVzZSBPcGVuQUwKLStIQVZFX1BZ UkVYID0gMAotICNVU0VfT1BFTkFMID0gMAotIAotICMgTW9kaWZ5IHRoZSBmb2xsb3dpbmcgaWYg bmVlZGVkIDoKLUBAIC0zMiw3ICszMyw3IEBACistLS0gc2V0dXAucHkuYmFrCTIwMTAtMDEtMTkg MDA6Mzk6NTcuMDAwMDAwMDAwICswMzAwCisrKysgc2V0dXAucHkJMjAxMS0xMS0yNSAwNTo0Mzow OS4wMDAwMDAwMDAgKzA0MDAKK0BAIC0zMiw3ICszMiw3IEBACiAgSU5DRElSID0gWwogIAkjIm9k ZS0wLjUvaW5jbHVkZSIsCiAgCSIvdXNyL2luY2x1ZGUiLApAQCAtMTcsNyArOSw3IEBACiAgCSIv dXNyL1gxMVI2L2luY2x1ZGUiLAogIAkiL3Vzci9YMTEvaW5jbHVkZSIsCiAgCSIvdXNyL2luY2x1 ZGUvZnJlZXR5cGUyIiwKLUBAIC00OCw3ICs0OSw3IEBACitAQCAtNDgsNyArNDgsNyBAQAogIExJ QkRJUiA9IFsKICAJIyJvZGUtMC41L2xpYiIsCiAgCSIvdXNyL2xpYiIsCkBAIC0yNiwxOSArMTgs MjYgQEAKICAJIi9vcHQvbG9jYWwvbGliIiwgIyBGb3IgTWFjIE9TIFggImRhcndpbiBwb3J0Igog IAkiL3Vzci9YMTFSNi9saWIiLAogIAkiL3Vzci9YMTEvbGliIiwKLUBAIC03OSwxMSArODAsNiBA QAorQEAgLTgxLDEyICs4MSwxMiBAQAogIFNESVNUSU5HID0gKCJzZGlzdCIgaW4gc3lzLmFyZ3Zb MTpdKSBhbmQgbm90ICgiLS1oZWxwIiBpbiBzeXMuYXJndlsxOl0pCiAgCiAgTUFDT1NYX0RFUExP WU1FTlRfVEFSR0VUICA9IG9zLmdldGVudignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKIC10 cnk6CiAtCWZyb20gUHlyZXguRGlzdHV0aWxzIGltcG9ydCBidWlsZF9leHQKLS0JSEFWRV9QWVJF WCA9IDEKLS1leGNlcHQ6Ci0tCUhBVkVfUFlSRVggPSAwCi0gCi0gIyBPbmx5IGVuYWJsZSBQeXJl eCBjb21waWxhdGlvbiBmb3IgU1ZOIHNvdXJjZXMKLSBpZiBub3Qgb3MucGF0aC5leGlzdHMob3Mu cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICIuc3ZuIikpOgotQEAgLTE1OSw2 ICsxNTUsNyBAQAorLQlVU0VfUFlSRVggPSAxCistZXhjZXB0IEltcG9ydEVycm9yOgorLQlVU0Vf UFlSRVggPSAwCistCXByaW50ICJObyBQeXJleCBmb3VuZCIKKysjdHJ5OgorKyMJZnJvbSBQeXJl eC5EaXN0dXRpbHMgaW1wb3J0IGJ1aWxkX2V4dAorKyMJVVNFX1BZUkVYID0gMQorKyNleGNlcHQg SW1wb3J0RXJyb3I6CisrVVNFX1BZUkVYID0gMAorKyMJcHJpbnQgIk5vIFB5cmV4IGZvdW5kIgor IAorIGlmIFVTRV9QWVJFWDogcHJpbnQgIlB5cmV4IGNvbXBpbGF0aW9uIGVuYWJsZWQhIgorIGVs c2U6ICAgICAgICAgIHByaW50ICJQeXJleCBjb21waWxhdGlvbiBkaXNhYmxlZC4iCitAQCAtMTcy LDYgKzE3Miw3IEBACiAgCQlERUZJTkVTLmFwcGVuZCgoJ1NPWUFfTUFDT1NYJywxKSkKICAJZWxz ZToKICAJCUxJQlMuYXBwZW5kKCJvcGVuYWwiKQpkaWZmIC1ydU4gcHktc295YTNkL2ZpbGVzL3dv cmxkLnB5IHB5LXNveWEzZC5uZXcvZmlsZXMvd29ybGQucHkKLS0tIHB5LXNveWEzZC9maWxlcy93 b3JsZC5weQkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMAorKysgcHktc295YTNk Lm5ldy9maWxlcy93b3JsZC5weQkyMDExLTExLTI1IDE0OjI0OjU2LjAwMDAwMDAwMCArMDQwMApA QCAtMCwwICsxLDcyMyBAQAorIyAtKi0gaW5kZW50LXRhYnMtbW9kZTogdCAtKi0KKworIyBTb3lh IDNECisjIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEplYW4tQmFwdGlzdGUgTEFNWQorIworIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworZnJvbSBlZGl0b2JqLm9ic2VydmUgaW1wb3J0 ICoKK2ltcG9ydCBlZGl0b2JqLmN1c3RvbSBhcyBjdXN0b20KK2ltcG9ydCBUa2ludGVyLCB0aW1l LCB3ZWFrcmVmCitpbXBvcnQgc295YSwgc295YS5vcGVuZ2wsIHNveWEuc2RsY29uc3QsIHNveWEu Y3ViZSBhcyBjdWJlLCBzb3lhLmN1cnNvciBhcyBjdXJzb3IKKworU1RFUCAgICA9IDAuMTI1CitF UFNJTE9OID0gMC4wMDEKKworIyBBZGRpdGlvbm5hbCBrZXkgYmluZGluZy4gKEEgZGljdCBtYXBw aW5nIGtleSBJRCB0byBhIGxhbWJkYSB0YWtpbmcgMiBhcmdzLCB0aGUgcm9vdCB3b3JsZCBhbmQg dGhlIGVkaXRlZCBvYmplY3QpLgorS0VZX0JJTkRJTkdTID0ge30KKworY2xhc3MgV29ybGRFZGl0 b3I6CisJZGVmIF9faW5pdF9fKHNlbGYsIHdvcmxkLCBkaWFsb2cpOgorCQlzZWxmLmFjdGl2ZSAg ICAgICAgICAgICAgPSAwCisJCXNlbGYuZGlhbG9nICAgICAgICAgICAgICA9IGRpYWxvZworCQlz ZWxmLmhhbmRsZXMgICAgICAgICAgICAgPSBbXQorCQlzZWxmLnZlcnRleF9oYW5kbGVzICAgICAg PSBbXQorCQlzZWxmLmNoaWxkcmVuX3Zpc2liaWxpdHkgPSB7IHdvcmxkIDogMSB9CisJCQorCQlz ZWxmLndvcmxkID0gc2VsZi5jdXJyZW50ID0gd29ybGQKKwkJCisJCXNlbGYuc2NlbmUgID0gc295 YS5Xb3JsZCgpCisJCXNlbGYuc2NlbmUubmFtZSA9ICJfX3NjZW5lX18iCisJCXNlbGYuc2NlbmUu YXRtb3NwaGVyZSA9IHNveWEuQXRtb3NwaGVyZSgpCisJCXNlbGYuc2NlbmUuYXRtb3NwaGVyZS5h bWJpZW50ID0gKDAuNSwgMC41LCAwLjUsIDEuMCkKKwkJCisJCXNlbGYuY2FtZXJhID0gc295YS5D YW1lcmEoc2VsZi5zY2VuZSkKKwkJc2VsZi5jYW1lcmEuc2V0X3h5eigwLjAsIDAuMCwgNS4wKQor CQlzZWxmLmNhbWVyYS5yb3RhdGVfeSg0NSkKKwkJc295YS5zZXRfcm9vdF93aWRnZXQoc2VsZi5j YW1lcmEpCisJCQorCQlzZWxmLmxpZ2h0ID0gc295YS5MaWdodChzZWxmLnNjZW5lKQorCQlzZWxm LmxpZ2h0LnNldF94eXooMC4yLCAyLjAsIDIuMikKKwkJc2VsZi5saWdodC50b3BfbGV2ZWwgPSAx CisJCXNlbGYubGlnaHQuY2FzdF9zaGFkb3cgPSAwCisJCQorCQlzZWxmLmN1cnNvciA9IEN1cnNv cihzZWxmLnNjZW5lLCBzZWxmLmNhbWVyYSwgc2VsZi5oYW5kbGVzLCBzZWxmLmxpZ2h0KQorCQlz ZWxmLmN1cnNvci5uYW1lID0gImN1cnNvciIKKwkJCisJCXNlbGYuY29udGVudCA9IHNveWEuV29y bGQoc2VsZi5zY2VuZSkKKwkJc2VsZi5jb250ZW50Lm5hbWUgPSAiX19jb250ZW50X18iCisJCXNl bGYuY29udGVudC5hcHBlbmQod29ybGQpCisJCQorCQlzZWxmLmFkZF9oYW5kbGVzX2Zvcih3b3Js ZCkKKwkJCisJCW9ic2VydmVfdHJlZSh3b3JsZCwgc2VsZi5vbl9jaGFuZ2VkKQorCQkKKwkJc2Vs Zi5sYXN0X2NsaWNrICA9IDAKKwkJc2VsZi5jYW1lcmFfbW9kZSA9IDAKKwkJCisJZGVmIGFkZF9o YW5kbGVzX2ZvcihzZWxmLCBpdGVtKToKKwkJaWYgICBpc2luc3RhbmNlKGl0ZW0sIHNveWEuU3By aXRlKToKKwkJCXNlbGYuaGFuZGxlcy5hcHBlbmQoUG9zaXRpb25IYW5kbGUoc2VsZi5jb250ZW50 LCBzZWxmLCBpdGVtKSkKKwkJCQorCQllbGlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5GYWNlKToK KwkJCWZvciB2ZXJ0ZXggaW4gaXRlbS52ZXJ0aWNlczogc2VsZi5hZGRfaGFuZGxlc19mb3JfdmVy dGV4KHZlcnRleCkKKwkJCQorCQllbGlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5Db29yZFN5c3Qp OgorCQkJc2VsZi5oYW5kbGVzLmFwcGVuZChQb3NpdGlvbkhhbmRsZSAgIChzZWxmLmNvbnRlbnQs IHNlbGYsIGl0ZW0pKQorCQkJc2VsZi5oYW5kbGVzLmFwcGVuZChPcmllbnRhdGlvbkhhbmRsZShz ZWxmLmNvbnRlbnQsIHNlbGYsIGl0ZW0pKQorCQkJCisJCWlmICAgaXNpbnN0YW5jZShpdGVtLCBz b3lhLldvcmxkKSBhbmQgc2VsZi5jaGlsZHJlbl92aXNpYmlsaXR5LmdldChpdGVtLCAwKToKKwkJ CWZvciBzdWJpdGVtIGluIGl0ZW0uY2hpbGRyZW46IHNlbGYuYWRkX2hhbmRsZXNfZm9yKHN1Yml0 ZW0pCisJCQkKKwlkZWYgYWRkX2hhbmRsZXNfZm9yX3ZlcnRleChzZWxmLCB2ZXJ0ZXgpOgorCQlp ZiBnZXRhdHRyKHZlcnRleCwgImltbWF0dXJlIiwgMCk6IHJldHVybgorCQkKKwkJZm9yIGhhbmRs ZSBpbiBzZWxmLnZlcnRleF9oYW5kbGVzOgorCQkJaWYgaGFuZGxlLmlzX2Zvcih2ZXJ0ZXgpOiBy ZXR1cm4KKwkJCisJCWZvciBoYW5kbGUgaW4gc2VsZi52ZXJ0ZXhfaGFuZGxlczoKKwkJCXYgPSBo YW5kbGUudmVydGljZXNbMF0KKwkJCWlmICh2LnBhcmVudCBpcyB2ZXJ0ZXgucGFyZW50KSBhbmQg KGFicyh2LnggLSB2ZXJ0ZXgueCkgPCBFUFNJTE9OKSBhbmQgKGFicyh2LnkgLSB2ZXJ0ZXgueSkg PCBFUFNJTE9OKSBhbmQgKGFicyh2LnogLSB2ZXJ0ZXgueikgPCBFUFNJTE9OKToKKwkJCQloYW5k bGUuYWRkX3ZlcnRleCh2ZXJ0ZXgpCisJCQkJcmV0dXJuIGhhbmRsZQorCQllbHNlOgorCQkJaGFu ZGxlID0gVmVydGV4SGFuZGxlKHNlbGYuY29udGVudCwgc2VsZiwgdmVydGV4KQorCQkJc2VsZi5o YW5kbGVzLmFwcGVuZChoYW5kbGUpCisJCQlzZWxmLnZlcnRleF9oYW5kbGVzLmFwcGVuZChoYW5k bGUpCisJCQkKKwlkZWYgcmVtb3ZlX2hhbmRsZXNfb2Yoc2VsZiwgaXRlbSk6CisJCWZvciBoYW5k bGUgaW4gc2VsZi5oYW5kbGVzWzpdOiBoYW5kbGUuZGVsX2ZvcihpdGVtKQorCQkKKwkJaWYgICBp c2luc3RhbmNlKGl0ZW0sIHNveWEuRmFjZSk6CisJCQlmb3IgaGFuZGxlIGluIHNlbGYudmVydGV4 X2hhbmRsZXNbOl06CisJCQkJZm9yIHZlcnRleCBpbiBpdGVtLnZlcnRpY2VzOiBoYW5kbGUuZGVs X2Zvcih2ZXJ0ZXgpCisJCQkJCisJCWVsaWYgaXNpbnN0YW5jZShpdGVtLCBzb3lhLldvcmxkKToK KwkJCWZvciBzdWJpdGVtIGluIGl0ZW06IHNlbGYucmVtb3ZlX2hhbmRsZXNfb2Yoc3ViaXRlbSkK KwkJCQorCWRlZiBzZWxlY3RfaGFuZGxlc19mb3Ioc2VsZiwgaXRlbSk6CisJCXNlbGYuY3VycmVu dCA9IGl0ZW0KKwkJZm9yIGhhbmRsZSBpbiBzZWxmLmhhbmRsZXM6CisJCQlpZiBoYW5kbGUuaXNf Zm9yKGl0ZW0pOiBoYW5kbGUuc2VsZWN0KCkKKwkJCQorCWRlZiBjaGlsZHJlbl9lZGl0ZWQoc2Vs Ziwgd29ybGQsIHZpc2libGUpOgorCQlzZWxmLmNoaWxkcmVuX3Zpc2liaWxpdHlbd29ybGRdID0g dmlzaWJsZQorCQlpZiB2aXNpYmxlOgorCQkJZm9yIGl0ZW0gaW4gd29ybGQuY2hpbGRyZW46CisJ CQkJZm9yIGhhbmRsZSBpbiBzZWxmLmhhbmRsZXM6CisJCQkJCWlmIGhhbmRsZS5pc19mb3IoaXRl bSk6IGNvbnRpbnVlCisJCQkJc2VsZi5hZGRfaGFuZGxlc19mb3IoaXRlbSkKKwkJZWxzZToKKwkJ CWZvciBpdGVtIGluIHdvcmxkLmNoaWxkcmVuOiBzZWxmLnJlbW92ZV9oYW5kbGVzX29mKGl0ZW0p CisJCQkKKwlkZWYgb25fZXZlbnQoc2VsZiwgZXZlbnQpOgorCQkjcHJpbnQgZXZlbnQKKwkJaWYg ICBldmVudFswXSA9PSBzb3lhLnNkbGNvbnN0Lk1PVVNFTU9USU9OOgorCQkJaWYgc295YS5nZXRf bW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9DVFJMOgorCQkJCXNlbGYuY3Vyc29yLmdyaWRfc3Rl cCA9IFNURVAKKwkJCWVsc2U6IHNlbGYuY3Vyc29yLmdyaWRfc3RlcCA9IDAuMAorCQkJCisJCQlp ZiBzZWxmLmNhbWVyYV9tb2RlOgorCQkJCXNlbGYuY2FtZXJhLnR1cm5feShmbG9hdChldmVudFsz XSkpCisJCQkJc2VsZi5jYW1lcmEudHVybl94KGZsb2F0KGV2ZW50WzRdKSkKKwkJCQkKKwkJCXgs IHkgPSBldmVudFsxXSwgZXZlbnRbMl0KKwkJCWlmICAgeCA9PSAwOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEs IC0wLjEsICAwLjAsIDAuMCkKKwkJCWVsaWYgeCA9PSBzZWxmLmNhbWVyYS5nZXRfc2NyZWVuX3dp ZHRoKCkgIC0gMTogc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjEs ICAwLjAsIDAuMCkKKwkJCWlmICAgeSA9PSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjAsICAwLjEs IDAuMCkKKwkJCWVsaWYgeSA9PSBzZWxmLmNhbWVyYS5nZXRfc2NyZWVuX2hlaWdodCgpIC0gMTog c2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjAsIC0wLjEsIDAuMCkK KwkJCQorCQkJc2VsZi5jdXJzb3IubW91c2VfbW92ZWQoeCwgeSkKKwkJCQorCQllbGlmIGV2ZW50 WzBdID09IHNveWEuc2RsY29uc3QuTU9VU0VCVVRUT05ET1dOOgorCQkJaWYgZXZlbnRbMV0gPCAz OiAjIExlZnQgb3IgbWlkZGxlIGJ1dHRvbgorCQkJCWN1cnJlbnQgPSB0aW1lLnRpbWUoKQorCQkJ CWlmIGN1cnJlbnQgLSBzZWxmLmxhc3RfY2xpY2sgPCAwLjI6CisJCQkJCXNlbGYuY3Vyc29yLmJ1 dHRvbl9wcmVzc2VkKDIsIHNveWEuZ2V0X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQp ICMgRG91YmxlLWNsaWNrIGlzIHRoZSBzYW1lIHRoYXQgbWlkZGxlIGNsaWNrCisJCQkJZWxzZToK KwkJCQkJc2VsZi5jdXJzb3IuYnV0dG9uX3ByZXNzZWQoZXZlbnRbMV0sIHNveWEuZ2V0X21vZCgp ICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpCisJCQkJc2VsZi5sYXN0X2NsaWNrID0gY3VycmVu dAorCQkJZWxpZiBldmVudFsxXSA9PSAzOiBzZWxmLmNhbWVyYV9tb2RlID0gMQorCQkJCisJCWVs aWYgZXZlbnRbMF0gPT0gc295YS5zZGxjb25zdC5NT1VTRUJVVFRPTlVQOgorCQkJaWYgc2VsZi5j YW1lcmFfbW9kZToKKwkJCQlpZiAgIGV2ZW50WzFdID09IDM6IHNlbGYuY2FtZXJhX21vZGUgPSAw CisJCQkJZWxpZiBldmVudFsxXSA9PSA0OiBzZWxmLl96b29tKC0xLjApCisJCQkJZWxpZiBldmVu dFsxXSA9PSA1OiBzZWxmLl96b29tKCAxLjApCisJCQllbHNlOgorCQkJCWlmICAgZXZlbnRbMV0g PCAgMzogc2VsZi5jdXJzb3IuYnV0dG9uX3JlbGVhc2VkKGV2ZW50WzFdKQorCQkJCWVsaWYgZXZl bnRbMV0gPT0gNDogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKC0wLjI1KQorCQkJCWVsaWYgZXZl bnRbMV0gPT0gNTogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKCAwLjI1KQorCQkJCQorCQllbGlm IGV2ZW50WzBdID09IHNveWEuc2RsY29uc3QuS0VZRE9XTjoKKwkJCSMgUGFnZSB1cCwgcGFnZSBk b3duCisJCQlpZiAgIGV2ZW50WzFdID09IDI4MDogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKC0x IC0gOSAqIChzb3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29uc3QuTU9EX1NISUZUKSkKKwkJCWVs aWYgZXZlbnRbMV0gPT0gMjgxOiBzZWxmLmN1cnNvci5tb3VzZV9yb2xsZWQoIDEgKyA5ICogKHNv eWEuZ2V0X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpKQorCQkJCisJCQkjIExlZnQs IHJpZ2h0LCB1cCwgZG93bgorCQkJZWxpZiBldmVudFsxXSA9PSAyNzY6IHNlbGYuY2FtZXJhICs9 IHNveWEuVmVjdG9yKHNlbGYuY2FtZXJhLCAtMS4wIC0gOS4wICogKHNveWEuZ2V0X21vZCgpICYg c295YS5zZGxjb25zdC5NT0RfU0hJRlQpLCAgMC4wLCAwLjApCisJCQllbGlmIGV2ZW50WzFdID09 IDI3NTogc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAxLjAgKyA5LjAg KiAoc295YS5nZXRfbW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9TSElGVCksICAwLjAsIDAuMCkK KwkJCWVsaWYgZXZlbnRbMV0gPT0gMjczOiBzZWxmLmNhbWVyYSArPSBzb3lhLlZlY3RvcihzZWxm LmNhbWVyYSwgIDAuMCwgIDEuMCArIDkuMCAqIChzb3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29u c3QuTU9EX1NISUZUKSwgMC4wKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNzQ6IHNlbGYuY2FtZXJh ICs9IHNveWEuVmVjdG9yKHNlbGYuY2FtZXJhLCAgMC4wLCAtMS4wIC0gOS4wICogKHNveWEuZ2V0 X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpLCAwLjApCisJCQkKKwkJCSMgbyA6IHRv Z2dsZSBvcnRobyBjYW1lcmEKKwkJCWVsaWYgZXZlbnRbMV0gPT0gMTExOgorCQkJCXNlbGYuY2Ft ZXJhLm9ydGhvID0gbm90IHNlbGYuY2FtZXJhLm9ydGhvCisJCQkJc2VsZi5jYW1lcmEuZm92ID0g NjAuMAorCQkJCQorCQkJIyArLCAtIDogem9vbQorCQkJZWxpZiBldmVudFsxXSA9PSAyNzA6IHNl bGYuX3pvb20oLTEuMCAtIDkgKiAoc295YS5nZXRfbW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9T SElGVCkpCisJCQllbGlmIGV2ZW50WzFdID09IDI2OTogc2VsZi5fem9vbSggMS4wICsgOSAqIChz b3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29uc3QuTU9EX1NISUZUKSkKKwkJCQorCQkJIyA0LCA2 LCA4LCAyLCA1LCAwIDogcHJlZGVmaW5lZCB2aWV3cworCQkJZWxpZiBldmVudFsxXSA9PSAyNjA6 CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheSwgY2FtZXJheiA9 IHNlbGYuY2FtZXJhLnksIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRp dHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXoobWluKChhICUgc2VsZi5zY2VuZSkueCwgKGIg JSBzZWxmLnNjZW5lKS54KSAtIDMuMCwgY2FtZXJheSwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVy YS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAxLjAsICAwLjAsICAwLjApKQorCQkJZWxpZiBl dmVudFsxXSA9PSAyNjI6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2Ft ZXJheSwgY2FtZXJheiA9IHNlbGYuY2FtZXJhLnksIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNh bWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXoobWF4KChhICUgc2Vs Zi5zY2VuZSkueCwgKGIgJSBzZWxmLnNjZW5lKS54KSArIDMuMCwgY2FtZXJheSwgY2FtZXJheikK KwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsIC0xLjAsICAwLjAsICAw LjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNjQ6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0 X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJheiA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJh LnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94 eXooY2FtZXJheCwgbWF4KChhICUgc2VsZi5zY2VuZSkueSwgKGIgJSBzZWxmLnNjZW5lKS55KSAr IDMuMCwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUs ICAwLjAsIC0xLjAsICAwLjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNTg6CisJCQkJYSwgYiA9 IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJheiA9IHNlbGYuY2FtZXJh LngsIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNl bGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwgbWluKChhICUgc2VsZi5zY2VuZSkueSwgKGIgJSBz ZWxmLnNjZW5lKS55KSAtIDMuMCwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNv eWEuVmVjdG9yKE5vbmUsICAwLjAsICAxLjAsICAwLjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAy NjE6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJh eSA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJhLnkKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRl bnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwgY2FtZXJheSwgbWluKChh ICUgc2VsZi5zY2VuZSkueiwgKGIgJSBzZWxmLnNjZW5lKS56KSAtIDMuMCkKKwkJCQlzZWxmLmNh bWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAwLjAsICAwLjAsICAxLjApKQorCQkJZWxp ZiBldmVudFsxXSA9PSAyNTY6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJ Y2FtZXJheCwgY2FtZXJheSA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJhLnkKKwkJCQlzZWxm LmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwg Y2FtZXJheSwgbWF4KChhICUgc2VsZi5zY2VuZSkueiwgKGIgJSBzZWxmLnNjZW5lKS56KSArIDMu MCkKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAwLjAsICAwLjAs IC0xLjApKQorCQkJCQorCQkJIyBxLCB0IDogbmV3IHF1YWQsIG5ldyB0cmlhbmdsZQorCQkJZWxp ZiBldmVudFsxXSA9PSAxMTM6CisJCQkJaWYgaGFzYXR0cihzZWxmLmN1cnJlbnQsICJjaGlsZHJl biIpOiBpbnRvID0gc2VsZi5jdXJyZW50CisJCQkJZWxzZTogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnRvID0gc2VsZi5jdXJyZW50LnBhcmVudAorCQkJCWludG8uYXBwZW5kKHNv eWEuUXVhZCgpKQorCQkJZWxpZiBldmVudFsxXSA9PSAxMTY6CisJCQkJaWYgaGFzYXR0cihzZWxm LmN1cnJlbnQsICJjaGlsZHJlbiIpOiBpbnRvID0gc2VsZi5jdXJyZW50CisJCQkJZWxzZTogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvID0gc2VsZi5jdXJyZW50LnBhcmVudAor CQkJCWludG8uYXBwZW5kKHNveWEuVHJpYW5nbGUoKSkKKwkJCWVsc2U6CisJCQkJaWYgS0VZX0JJ TkRJTkdTLmhhc19rZXkoZXZlbnRbMV0pOgorCQkJCQlLRVlfQklORElOR1NbZXZlbnRbMV1dKHNl bGYud29ybGQsIHNlbGYuY3VycmVudCkKKwkJCQkJCisJZGVmIF96b29tKHNlbGYsIHopOgorCQlp ZiBzZWxmLmNhbWVyYS5vcnRobzogc2VsZi5jYW1lcmEuZm92ID0gc2VsZi5jYW1lcmEuZm92ICog KDEuMCArIHogLyAxMC4wKQorCQllbHNlOiAgICAgICAgICAgICAgICAgc2VsZi5jYW1lcmEgKz0g c295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsIDAuMCwgMC4wLCB6KQorCQkJCisJZGVmIHJlbmRlcihz ZWxmKToKKwkJaWYgc2VsZi5hY3RpdmU6CisJCQlzZWxmLnNjZW5lLmJlZ2luX3JvdW5kKCkKKwkJ CXNlbGYuc2NlbmUuYWR2YW5jZV90aW1lKDEuMCkKKwkJCXNlbGYuc2NlbmUuYmVnaW5fcm91bmQo KQorCQkJc2VsZi5zY2VuZS5hZHZhbmNlX3RpbWUoMS4wKQorCQkJc2VsZi5zY2VuZS5iZWdpbl9y b3VuZCgpCisJCQlzZWxmLnNjZW5lLmFkdmFuY2VfdGltZSgxLjApCisJCQlzZWxmLnNjZW5lLmJl Z2luX3JvdW5kKCkKKwkJCXNlbGYuc2NlbmUuYWR2YW5jZV90aW1lKDEuMCkKKwkJCXNlbGYuc2Nl bmUuYmVnaW5fcm91bmQoKQorCQkJc2VsZi5zY2VuZS5hZHZhbmNlX3RpbWUoMS4wKQorCQkJc295 YS5yZW5kZXIoKQorCQkJCisJZGVmIGFjdGl2YXRlKHNlbGYsIGV2ZW50ID0gTm9uZSk6CisJCWlm IG5vdCBzZWxmLmFjdGl2ZToKKwkJCXNlbGYuYWN0aXZlID0gMQorCQkJc295YS5zZXRfcm9vdF93 aWRnZXQoc2VsZi5jYW1lcmEpCisJCQlzb3lhLmN1cnNvcl9zZXRfdmlzaWJsZSgwKQorCQkJc2Vs Zi5hdXRvX3JlbmRlcigpCisJCQkKKwlkZWYgYXV0b19yZW5kZXIoc2VsZik6CisJCWZvciBldmVu dCBpbiBzb3lhLmNvYWxlc2NlX21vdGlvbl9ldmVudChzb3lhLnByb2Nlc3NfZXZlbnQoKSk6IHNl bGYub25fZXZlbnQoZXZlbnQpCisJCXNlbGYucmVuZGVyKCkKKwkJc2VsZi5jYW5jZWwgPSBzZWxm LmRpYWxvZy5hZnRlcigxNTAsIHNlbGYuYXV0b19yZW5kZXIpCisJCQorCWRlZiBkZWFjdGl2YXRl KHNlbGYsIGV2ZW50ID0gTm9uZSk6CisJCWlmIHNlbGYuYWN0aXZlOgorCQkJc2VsZi5hY3RpdmUg PSAwCisJCQlzb3lhLmN1cnNvcl9zZXRfdmlzaWJsZSgxKQorCQkJc2VsZi5kaWFsb2cuYWZ0ZXJf Y2FuY2VsKHNlbGYuY2FuY2VsKQorCQkJCisJZGVmIG9uX2NoYW5nZWQoc2VsZiwgb2JqLCB0eXBl LCBuZXcsIG9sZCk6CisJCWlmIHR5cGUgaXMgbGlzdDoKKwkJCWZvciBpdGVtIGluIG5ldzoKKwkJ CQlpZiBub3QgaXRlbSBpbiBvbGQ6CisJCQkJCXNlbGYuYWRkX2hhbmRsZXNfZm9yKGl0ZW0pCisJ CQkJCWlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5GYWNlKToKKwkJCQkJCWZvciB2ZXJ0ZXggaW4g aXRlbS52ZXJ0aWNlczoKKwkJCQkJCQlpZiBnZXRhdHRyKHZlcnRleCwgImltbWF0dXJlIiwgMCk6 CisJCQkJCQkJCXNlbGYuY3Vyc29yLm1hbmFnZV9jbGljayhGYWNlQ2xpY2tNYW5hZ2VyKHNlbGYs IGl0ZW0pKQorCQkJCQkJCQlicmVhaworCQkJCQllbGlmIGhhc2F0dHIoaXRlbS5fX2NsYXNzX18s ICJfX2NsaWNrbWFuYWdlcl9fIik6CisJCQkJCQlzZWxmLmN1cnNvci5tYW5hZ2VfY2xpY2soaXRl bS5fX2NsYXNzX18uX19jbGlja21hbmFnZXJfXyhzZWxmLCBpdGVtKSkKKwkJCQkJCQorCQkJZm9y IGl0ZW0gaW4gb2xkOgorCQkJCWlmIG5vdCBpdGVtIGluIG5ldzogc2VsZi5yZW1vdmVfaGFuZGxl c19vZihpdGVtKQorCQkJCQorCQllbHNlOgorCQkJaWYgKG5vdCBoYXNhdHRyKG9iaiwgImNoaWxk cmVuIikpIGFuZCAobm90IGhhc2F0dHIob2JqLCAiaXRlbXMiKSk6CisJCQkJdW5vYnNlcnZlX3Ry ZWUob2JqLCBzZWxmLm9uX2NoYW5nZWQpCisJCQkJCitSRUQgICAgPSBzb3lhLk1hdGVyaWFsKCk7 IFJFRCAgIC5kaWZmdXNlID0gKDEuMCwgMC4wLCAwLjAsIDEuMCkKK0dSRUVOICA9IHNveWEuTWF0 ZXJpYWwoKTsgR1JFRU4gLmRpZmZ1c2UgPSAoMC4wLCAxLjAsIDAuMCwgMS4wKQorQkxVRSAgID0g c295YS5NYXRlcmlhbCgpOyBCTFVFICAuZGlmZnVzZSA9ICgwLjAsIDAuMCwgMS4wLCAxLjApCitZ RUxMT1cgPSBzb3lhLk1hdGVyaWFsKCk7IFlFTExPVy5kaWZmdXNlID0gKDEuMCwgMS4wLCAwLjAs IDEuMCkKKworUkVEX0hBTkRMRSA9IEdSRUVOX0hBTkRMRSA9IEJMVUVfSEFORExFID0gWUVMTE9X X0hBTkRMRSA9IE5vbmUKKworZGVmIGJ1aWxkX2hhbmRsZXMoKToKKwlnbG9iYWwgUkVEX0hBTkRM RSwgR1JFRU5fSEFORExFLCBCTFVFX0hBTkRMRSwgWUVMTE9XX0hBTkRMRQorCQorCXJlZF9jdWJl ICAgID0gY3ViZS5DdWJlKE5vbmUsIFJFRCk7ICAgIHJlZF9jdWJlICAgLnNjYWxlKFNURVAsIFNU RVAsIFNURVApCisJZ3JlZW5fY3ViZSAgPSBjdWJlLkN1YmUoTm9uZSwgR1JFRU4pOyAgZ3JlZW5f Y3ViZSAuc2NhbGUoU1RFUCwgU1RFUCwgU1RFUCkKKwlibHVlX2N1YmUgICA9IGN1YmUuQ3ViZShO b25lLCBCTFVFKTsgICBibHVlX2N1YmUgIC5zY2FsZShTVEVQLCBTVEVQLCBTVEVQKQorCXllbGxv d19jdWJlID0gY3ViZS5DdWJlKE5vbmUsIFlFTExPVyk7IHllbGxvd19jdWJlLnNjYWxlKFNURVAs IFNURVAsIFNURVApCisJCisJUkVEX0hBTkRMRSAgICA9IHJlZF9jdWJlICAgLnRvX21vZGVsKCkK KwlHUkVFTl9IQU5ETEUgID0gZ3JlZW5fY3ViZSAudG9fbW9kZWwoKQorCUJMVUVfSEFORExFICAg PSBibHVlX2N1YmUgIC50b19tb2RlbCgpCisJWUVMTE9XX0hBTkRMRSA9IHllbGxvd19jdWJlLnRv X21vZGVsKCkKKwkKK2J1aWxkX2hhbmRsZXMoKQorCitjbGFzcyBDdXJzb3IoY3Vyc29yLkN1cnNv cik6CisJZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCA9IE5vbmUsIGNhbWVyYSA9IE5vbmUsIGhh bmRsZXMgPSBOb25lLCBsaWdodCA9IE5vbmUpOgorCQljdXJzb3IuQ3Vyc29yLl9faW5pdF9fKHNl bGYsIHBhcmVudCwgY2FtZXJhLCBHUkVFTl9IQU5ETEUpCisJCQorCQlzZWxmLmhhbmRsZXMgICAg ICAgID0gaGFuZGxlcworCQlzZWxmLmRyYWdpbmcgICAgICAgID0gMAorCQlzZWxmLmxpZ2h0ICAg ICAgICAgID0gbGlnaHQKKwkJc2VsZi5jbGlja19tYW5hZ2VycyA9IFtdCisJCQorCWRlZiBtYW5h Z2VfY2xpY2soc2VsZiwgY2xpY2tfbWFuYWdlcik6CisJCXNlbGYuY2xpY2tfbWFuYWdlcnMuYXBw ZW5kKGNsaWNrX21hbmFnZXIpCisJCQorCWRlZiBtb3ZlKHNlbGYsIHBvcyk6IHNlbGYuYWRkX3Zl Y3RvcihzZWxmID4+IHBvcykKKwkJCisJZGVmIGFkZF92ZWN0b3Ioc2VsZiwgZGVwKToKKwkJY3Vy c29yLkN1cnNvci5hZGRfdmVjdG9yKHNlbGYsIGRlcCkKKwkJZm9yIGhhbmRsZSBpbiBzZWxmLmhh bmRsZXM6IGhhbmRsZS5jdXJzb3JfbW92ZWQoc2VsZiwgc2VsZi5pc19uZWFyLCBkZXApCisJCXNl bGYubGlnaHQubW92ZShzZWxmKQorCQkKKwkJaWYgc2VsZi5jbGlja19tYW5hZ2VyczoKKwkJCWlm IG5vdCBzZWxmLmNsaWNrX21hbmFnZXJzWy0xXS5vbl9tb3Rpb24oc2VsZik6IGRlbCBzZWxmLmNs aWNrX21hbmFnZXJzWy0xXQorCQkJCisJX19pYWRkX18gPSBhZGRfdmVjdG9yCisJCisJZGVmIGlz X25lYXIoc2VsZiwgcG9zaXRpb24pOiByZXR1cm4gcG9zaXRpb24uZGlzdGFuY2VfdG8oc2VsZikg PCBTVEVQCisJZGVmIG5lYXIoc2VsZiwgYSwgYik6IHJldHVybiAoKHNlbGYuZGlzdGFuY2VfdG8o YSkgPCBzZWxmLmRpc3RhbmNlX3RvKGIpKSBhbmQgYSkgb3IgYgorCQorCWRlZiBidXR0b25fcHJl c3NlZChzZWxmLCBidXR0b24sIG11bHRpc2VsZWN0ID0gMCk6CisJCWlmICAgYnV0dG9uID09IDE6 CisJCQlwcmVkID0gc2VsZi5pc19uZWFyCisJCQlwcmludCAiJXMsICVzLCAlcyIgJSAoc2VsZi54 LCBzZWxmLnksIHNlbGYueikKKwkJZWxzZTogICAgICAgICAgICAgcHJlZCA9IHNlbGYuaXNfdW5k ZXJfdGVzdGVyKFNURVApCisJCQorCQlpZiBzZWxmLmNsaWNrX21hbmFnZXJzOgorCQkJaWYgbm90 IHNlbGYuY2xpY2tfbWFuYWdlcnNbLTFdLm9uX2NsaWNrKHNlbGYpOiBkZWwgc2VsZi5jbGlja19t YW5hZ2Vyc1stMV0KKwkJZWxzZToKKwkJCWhhbmRsZXMgPSBmaWx0ZXIocHJlZCwgc2VsZi5oYW5k bGVzKQorCQkJaWYgaGFuZGxlczoKKwkJCQloYW5kbGUgPSBtaW4obWFwKGxhbWJkYSBoYW5kbGU6 IChzZWxmLmRpc3RhbmNlX3RvKGhhbmRsZSksIGhhbmRsZSksIGhhbmRsZXMpKVsxXQorCQkJCSMg bW92ZSB0aGUgY3Vyc29yIGF0IHRoZSBoYW5kbGUncyBaIChpbiB0aGUgY2FtZXJhIGNvb3JkaW5h dGUgc3lzdGVtKQorCQkJCW1vdXNlID0gc2VsZiAlIHNlbGYuY2FtZXJhCisJCQkJc2VsZi5tb3Vz ZV9yb2xsZWQoKGhhbmRsZSAlIHNlbGYuY2FtZXJhKS56IC0gbW91c2UueikKKwkJCQloYW5kbGUu c2VsZWN0KCkKKwkJCQkKKwkJCQlpZiBub3QgbXVsdGlzZWxlY3Q6CisJCQkJCWZvciBoIGluIHNl bGYuaGFuZGxlczoKKwkJCQkJCWlmIG5vdCBoIGlzIGhhbmRsZTogaC5oaWdobGlnaHQoMCkKKwkJ CWVsc2U6CisJCQkJZm9yIGggaW4gc2VsZi5oYW5kbGVzOiBoLmhpZ2hsaWdodCgwKQorCQkJCQor CQkJc2VsZi5kcmFnaW5nID0gMQorCQkJCQorCWRlZiBidXR0b25fcmVsZWFzZWQoc2VsZiwgYnV0 dG9uKToKKwkJZm9yIGhhbmRsZSBpbiBzZWxmLnNlbGVjdGVkX2hhbmRsZXMoKToKKwkJCWhhbmRs ZS5jdXJzb3JfZW5kbW92ZShzZWxmKQorCQkJCisJCWlmIHNlbGYuY2xpY2tfbWFuYWdlcnM6CisJ CQlpZiBub3Qgc2VsZi5jbGlja19tYW5hZ2Vyc1stMV0ub25fcmVsZWFzZShzZWxmKTogZGVsIHNl bGYuY2xpY2tfbWFuYWdlcnNbLTFdCisJCWVsc2U6IHNlbGYuZHJhZ2luZyA9IDAKKwkJCisJZGVm IHNlbGVjdGVkX2hhbmRsZXMgICAgICAgIChzZWxmKTogcmV0dXJuIGZpbHRlcihsYW1iZGEgaGFu ZGxlOiBoYW5kbGUuc2VsZWN0ZWQgICAsIHNlbGYuaGFuZGxlcykKKwlkZWYgaGlnaGxpZ2h0ZWRf aGFuZGxlcyAgICAgKHNlbGYpOiByZXR1cm4gZmlsdGVyKGxhbWJkYSBoYW5kbGU6IGhhbmRsZS5o aWdobGlnaHRlZCwgc2VsZi5oYW5kbGVzKQorCWRlZiBoaWdobGlnaHRlZF9vbmx5X2hhbmRsZXMo c2VsZik6IHJldHVybiBmaWx0ZXIobGFtYmRhIGhhbmRsZTogaGFuZGxlLmhpZ2hsaWdodGVkIGFu ZCBub3QgaGFuZGxlLnNlbGVjdGVkLCBzZWxmLmhhbmRsZXMpCisJZGVmIG5lYXJlc3Rfc2VsZWN0 ZWRfaGFuZGxlKHNlbGYpOgorCQlzZWxlY3RlZF9oYW5kbGVzID0gc2VsZi5zZWxlY3RlZF9oYW5k bGVzKCkKKwkJcmV0dXJuIHNlbGVjdGVkX2hhbmRsZXMgYW5kIG1pbihtYXAobGFtYmRhIGhhbmRs ZTogKHNlbGYuZGlzdGFuY2VfdG8oaGFuZGxlKSwgaGFuZGxlKSwgc2VsZWN0ZWRfaGFuZGxlcykp WzFdCisJZGVmIG92ZXJfaGFuZGxlKHNlbGYpOgorCQloYW5kbGVzID0gc2VsZi5oaWdobGlnaHRl ZF9vbmx5X2hhbmRsZXMoKQorCQlyZXR1cm4gaGFuZGxlcyBhbmQgbWluKG1hcChsYW1iZGEgaGFu ZGxlOiAoc2VsZi5kaXN0YW5jZV90byhoYW5kbGUpLCBoYW5kbGUpLCBoYW5kbGVzKSlbMV0KKwkJ CitjbGFzcyBDbGlja01hbmFnZXI6CisJZGVmIG9uX21vdGlvbihzZWxmLCBjdXJzb3IpOgorCQki IiJDYWxsZWQgd2hlbiB0aGUgY3Vyc29yIGlzIG1vdmVkLiBNdXN0IHJldHVybnMgdHJ1ZSBpZiB0 aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwgb3IgZmFsc2UgaWYgdGhpcyBtYW5hZ2VyJ3Mg dGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJuIDEKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vy c29yKToKKwkJIiIiQ2FsbGVkIHdoZW4gdGhlIGN1cnNvciBpcyBjbGlja2VkLiBNdXN0IHJldHVy bnMgdHJ1ZSBpZiB0aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwgb3IgZmFsc2UgaWYgdGhp cyBtYW5hZ2VyJ3MgdGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJuIDEKKwlkZWYgb25fcmVs ZWFzZShzZWxmLCBjdXJzb3IpOgorCQkiIiJDYWxsZWQgd2hlbiB0aGUgY3Vyc29yIGlzIHJlbGVh c2VkLiBNdXN0IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwg b3IgZmFsc2UgaWYgdGhpcyBtYW5hZ2VyJ3MgdGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJu IDEKKwkKK2NsYXNzIEZhY2VDbGlja01hbmFnZXIoQ2xpY2tNYW5hZ2VyKToKKwlkZWYgX19pbml0 X18oc2VsZiwgZWRpdG9yLCBmYWNlKToKKwkJc2VsZi5lZGl0b3IgPSBlZGl0b3IKKwkJc2VsZi5m YWNlICAgPSBmYWNlCisJCQorCWRlZiBvbl9tb3Rpb24oc2VsZiwgY3Vyc29yKToKKwkJaSA9IDAK KwkJd2hpbGUgbm90IGdldGF0dHIoc2VsZi5mYWNlLnZlcnRpY2VzW2ldLCAiaW1tYXR1cmUiLCAw KTogaSA9IGkgKyAxCisJCQorCQl3aGlsZSBpIDwgbGVuKHNlbGYuZmFjZS52ZXJ0aWNlcyk6CisJ CQlzZWxmLmZhY2UudmVydGljZXNbaV0ucGFyZW50ID0gc2VsZi5mYWNlLnBhcmVudAorCQkJc2Vs Zi5mYWNlLnZlcnRpY2VzW2ldLm1vdmUoY3Vyc29yKQorCQkJaSA9IGkgKyAxCisJCQkKKwkJcmV0 dXJuIDEKKwkKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vyc29yKToKKwkJaSA9IDAKKwkJd2hpbGUg bm90IGdldGF0dHIoc2VsZi5mYWNlLnZlcnRpY2VzW2ldLCAiaW1tYXR1cmUiLCAwKTogaSA9IGkg KyAxCisJCQorCQl2ZXJ0ZXggPSBzZWxmLmZhY2UudmVydGljZXNbaV0KKwkJZGVsIHZlcnRleC5p bW1hdHVyZQorCQkKKwkJaGFuZGxlID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxl OgorCQkJaWYgaXNpbnN0YW5jZShoYW5kbGUsIFZlcnRleEhhbmRsZSk6CisJCQkJaGFuZGxlLmFk ZF92ZXJ0ZXgoc2VsZi5mYWNlLnZlcnRpY2VzW2ldKQorCQkJZWxzZToKKwkJCQlzZWxmLmZhY2Uu dmVydGljZXNbaV0ucGFyZW50ID0gc2VsZi5mYWNlLnBhcmVudAorCQkJCXNlbGYuZmFjZS52ZXJ0 aWNlc1tpXS5tb3ZlKGhhbmRsZSkKKwkJCQkKKwkJCQlzZWxmLmVkaXRvci5hZGRfaGFuZGxlc19m b3JfdmVydGV4KHZlcnRleCkKKwkJZWxzZToKKwkJCXNlbGYuZmFjZS52ZXJ0aWNlc1tpXS5wYXJl bnQgPSBzZWxmLmZhY2UucGFyZW50CisJCQlzZWxmLmZhY2UudmVydGljZXNbaV0ubW92ZShjdXJz b3IpCisJCQkKKwkJCXNlbGYuZWRpdG9yLmFkZF9oYW5kbGVzX2Zvcl92ZXJ0ZXgodmVydGV4KQor CQkJCisJCXJldHVybiBpIDwgbGVuKHNlbGYuZmFjZS52ZXJ0aWNlcykgLSAxCisJCitjbGFzcyBN b3ZlQ2xpY2tNYW5hZ2VyKENsaWNrTWFuYWdlcik6CisJZGVmIF9faW5pdF9fKHNlbGYsIGVkaXRv ciwgaXRlbSk6CisJCXNlbGYuZWRpdG9yID0gZWRpdG9yCisJCXNlbGYuaXRlbSAgID0gaXRlbQor CQkKKwlkZWYgb25fbW90aW9uKHNlbGYsIGN1cnNvcik6CisJCXNlbGYuaXRlbS5tb3ZlKGN1cnNv cikKKwkJcmV0dXJuIDEKKwkKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vyc29yKToKKwkJaGFuZGxl ID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxlOgorCQkJc2VsZi5pdGVtLm1vdmUo aGFuZGxlKQorCQllbHNlOgorCQkJc2VsZi5pdGVtLm1vdmUoY3Vyc29yKQorCQkJCisJCXJldHVy biAwCisKKyMgTGlzdCBvZiAzRCBpdGVtcycgY2xhc3NlcyB0aGF0IGFyZSBwb3NpdGlvbm5lZCBh dCB0aGUgbmV4dCBtb3VzZSBjbGljaydzIHBvc2l0aW9uLgorCitjbGFzcyBIYW5kbGUoc295YS5C b2R5KToKKwlkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IgPSBOb25lKToKKwkJc295 YS5Cb2R5Ll9faW5pdF9fKHNlbGYsIHBhcmVudCwgc2VsZi5OQVRVUkFMKQorCQlzZWxmLmVkaXRv ciAgICAgID0gZWRpdG9yCisJCXNlbGYuc2VsZWN0ZWQgICAgPSAwCisJCXNlbGYuaGlnaGxpZ2h0 ZWQgPSAwCisJCXNlbGYuaWRlYWwgICAgICAgPSBzb3lhLlBvaW50KHBhcmVudCkKKwkJCisJZGVm IGRlbF9mb3Ioc2VsZiwgaXRlbSk6CisJCWlmIHNlbGYuaXNfZm9yKGl0ZW0pOgorCQkJc2VsZi5w YXJlbnQucmVtb3ZlKHNlbGYpCisJCQlzZWxmLmVkaXRvci5oYW5kbGVzLnJlbW92ZShzZWxmKQor CQkJcmV0dXJuIDEKKwkJCisJZGVmIGhpZ2hsaWdodChzZWxmLCB2YWx1ZSA9IDEpOgorCQlzZWxm LmhpZ2hsaWdodGVkID0gdmFsdWUKKwkJaWYgdmFsdWU6CisJCQlzZWxmLnNldF9tb2RlbChHUkVF Tl9IQU5ETEUpCisJCWVsc2U6CisJCQlpZiBzZWxmLnNlbGVjdGVkOiBzZWxmLnNlbGVjdCgwKQor CQkJc2VsZi5zZXRfbW9kZWwoc2VsZi5OQVRVUkFMKQorCQkJCisJZGVmIHNlbGVjdChzZWxmLCB2 YWx1ZSA9IDEpOgorCQlzZWxmLnNlbGVjdGVkID0gdmFsdWUKKwkJaWYgdmFsdWU6CisJCQlpZiBu b3Qgc2VsZi5oaWdobGlnaHRlZDogc2VsZi5oaWdobGlnaHQoMSkKKwkJCQorCWRlZiBjdXJzb3Jf bW92ZWQoc2VsZiwgY3Vyc29yLCBwcmVkLCBkZXApOgorCQlpZiBzZWxmLnNlbGVjdGVkOgorCQkJ aWYgY3Vyc29yLmRyYWdpbmc6CisJCQkJc2VsZi5pZGVhbCArPSBkZXAKKwkJCQlpZiBjdXJzb3Iu Z3JpZF9zdGVwOgorCQkJCQlwb3MgICA9IHNlbGYuaWRlYWwuY29weSgpCisJCQkJCXN0ZXAgID0g Y3Vyc29yLmdyaWRfc3RlcAorCQkJCQlkICAgICA9IHN0ZXAgLyAyLjAKKwkJCQkJcG9zLnggPSAo KHBvcy54ICsgZCkgLy8gc3RlcCkgKiBzdGVwCisJCQkJCXBvcy55ID0gKChwb3MueSArIGQpIC8v IHN0ZXApICogc3RlcAorCQkJCQlwb3MueiA9ICgocG9zLnogKyBkKSAvLyBzdGVwKSAqIHN0ZXAK KwkJCQkJc2VsZi5tb3ZlKHBvcykKKwkJCQllbHNlOiBzZWxmLm1vdmUoc2VsZi5pZGVhbCkKKwkJ ZWxzZToKKwkJCWlmIHNlbGYuaGlnaGxpZ2h0ZWQ6CisJCQkJaWYgbm90IHByZWQoc2VsZik6IHNl bGYuaGlnaGxpZ2h0KDApCisJCQllbGlmIHByZWQoc2VsZik6IHNlbGYuaGlnaGxpZ2h0KCkKKwkJ CQorCWRlZiBjdXJzb3JfZW5kbW92ZShzZWxmLCBjdXJzb3IpOiBwYXNzCisJCisKK2NsYXNzIFBv c2l0aW9uSGFuZGxlKEhhbmRsZSk6CisJTkFUVVJBTCA9IEJMVUVfSEFORExFCisJZGVmIF9faW5p dF9fKHNlbGYsIHBhcmVudCwgZWRpdG9yLCBwb3NpdGlvbik6CisJCUhhbmRsZS5fX2luaXRfXyhz ZWxmLCBwYXJlbnQsIGVkaXRvcikKKwkJCisJCXNlbGYucG9zaXRpb24gPSBwb3NpdGlvbgorCQlz ZWxmLmlkZWFsLm1vdmUocG9zaXRpb24pCisJCUhhbmRsZS5tb3ZlKHNlbGYsIHBvc2l0aW9uKQor CQkKKwkJb2JzZXJ2ZShwb3NpdGlvbiwgc2VsZi5vbl9jaGFuZ2VkKQorCQl3b3JsZCA9IHBvc2l0 aW9uLnBhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFy ZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGlzX2ZvciAo c2VsZiwgaXRlbSk6IHJldHVybiBpdGVtIGlzIHNlbGYucG9zaXRpb24KKwkKKwlkZWYgbW92ZShz ZWxmLCBwb3NpdGlvbik6CisJCUhhbmRsZS5tb3ZlKHNlbGYsIHBvc2l0aW9uKQorCQlzZWxmLnBv c2l0aW9uLm1vdmUocG9zaXRpb24pCisJCQorCWRlZiBhZGRfdmVjdG9yKHNlbGYsIHZlY3Rvcik6 CisJCUhhbmRsZS5hZGRfdmVjdG9yKHNlbGYsIHZlY3RvcikKKwkJc2VsZi5wb3NpdGlvbi5hZGRf dmVjdG9yKHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92ZWN0b3IKKwkKKwlkZWYgb25fY2hhbmdl ZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJaWYgdHlwZSBpcyBvYmplY3Q6CisJCQlp ZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdbInkiXSAhPSBvbGRbInkiXSkgb3IgKG5l d1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlIYW5kbGUubW92ZShzZWxmLCBvYmopCisJCQkJc2Vs Zi5pZGVhbC5tb3ZlKG9iaikKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0gb2xkWyJwYXJlbnQiXToK KwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJlbnQiXSwgb2xkWyJwYXJlbnQiXSkK KwkJCQlIYW5kbGUubW92ZShzZWxmLCBzZWxmLnBvc2l0aW9uKQorCQkJCXNlbGYuaWRlYWwubW92 ZShvYmopCisJCQkJCisJZGVmIG9uX3BhcmVudF9jaGFuZ2VkKHNlbGYsIG9iaiwgdHlwZSwgbmV3 LCBvbGQpOgorCQlpZiB0eXBlIGlzIG9iamVjdDoKKwkJCWlmIChuZXdbIngiXSAhPSBvbGRbIngi XSkgb3IgKG5ld1sieSJdICE9IG9sZFsieSJdKSBvciAobmV3WyJ6Il0gIT0gb2xkWyJ6Il0pOgor CQkJCUhhbmRsZS5tb3ZlKHNlbGYsIHNlbGYucG9zaXRpb24pCisJCQkJc2VsZi5pZGVhbC5tb3Zl KHNlbGYucG9zaXRpb24pCisJCQlpZiBuZXdbInBhcmVudCJdICE9IG9sZFsicGFyZW50Il06CisJ CQkJc2VsZi51cGRhdGVfaGllcmFyY2h5KG5ld1sicGFyZW50Il0sIG9sZFsicGFyZW50Il0pCisJ CQkJSGFuZGxlLm1vdmUoc2VsZiwgc2VsZi5wb3NpdGlvbikKKwkJCQlzZWxmLmlkZWFsLm1vdmUo c2VsZi5wb3NpdGlvbikKKwkJCQkKKwlkZWYgdXBkYXRlX2hpZXJhcmNoeShzZWxmLCBuZXdwYXJl bnQsIG9sZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50CisJCXdoaWxlIHdvcmxkOgorCQkJ dW5vYnNlcnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3Js ZC5wYXJlbnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9i c2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBh cmVudAorCQkJCisJZGVmIF9fcmVwcl9fKHNlbGYpOiByZXR1cm4gIjxQb3NpdGlvbkhhbmRsZSBm b3IgJXM+IiAlIChzZWxmLnBvc2l0aW9uLCkKKwkKK2NsYXNzIFZlcnRleEhhbmRsZShIYW5kbGUp OgorCU5BVFVSQUwgPSBSRURfSEFORExFCisJZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZWRp dG9yLCB2ZXJ0ZXgpOgorCQlIYW5kbGUuX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IpCisJ CXNlbGYudmVydGljZXMgPSBbdmVydGV4XQorCQlIYW5kbGUubW92ZShzZWxmLCB2ZXJ0ZXgpCisJ CXNlbGYuaWRlYWwubW92ZSh2ZXJ0ZXgpCisJCQorCQlvYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9j aGFuZ2VkKQorCQl3b3JsZCA9IHZlcnRleC5wYXJlbnQKKwkJd2hpbGUgd29ybGQ6CisJCQlvYnNl cnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJl bnQKKwkJCQorCWRlZiBpc19mb3Ioc2VsZiwgaXRlbSk6CisJCWZvciB2ZXJ0ZXggaW4gc2VsZi52 ZXJ0aWNlczoKKwkJCWlmIHZlcnRleCBpcyBpdGVtOiByZXR1cm4gMQorCQlyZXR1cm4gMAorCQor CWRlZiBkZWxfZm9yKHNlbGYsIGl0ZW0pOgorCQlmb3IgdmVydGV4IGluIHNlbGYudmVydGljZXM6 CisJCQlpZiB2ZXJ0ZXggaXMgaXRlbToKKwkJCQlzZWxmLnZlcnRpY2VzLnJlbW92ZSh2ZXJ0ZXgp CisJCQkJdW5vYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9jaGFuZ2VkKQorCQkJCWlmIG5vdCBzZWxm LnZlcnRpY2VzOgorCQkJCQlzZWxmLnBhcmVudC5yZW1vdmUoc2VsZikKKwkJCQkJc2VsZi5lZGl0 b3IuaGFuZGxlcy5yZW1vdmUoc2VsZikKKwkJCQkJc2VsZi5lZGl0b3IudmVydGV4X2hhbmRsZXMu cmVtb3ZlKHNlbGYpCisJCQkJCQorCWRlZiBkZWxfZm9yX2FsbChzZWxmKToKKwkJZm9yIHZlcnRl eCBpbiBzZWxmLnZlcnRpY2VzOgorCQkJdW5vYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9jaGFuZ2Vk KQorCQkJCisJCXNlbGYucGFyZW50LnJlbW92ZShzZWxmKQorCQlzZWxmLmVkaXRvci5oYW5kbGVz LnJlbW92ZShzZWxmKQorCQkKKwlkZWYgbW92ZShzZWxmLCBwb3NpdGlvbik6CisJCUhhbmRsZS5t b3ZlKHNlbGYsIHBvc2l0aW9uKQorCQlmb3IgdmVydGV4IGluIHNlbGYudmVydGljZXM6IHZlcnRl eC5tb3ZlKHBvc2l0aW9uKQorCQkKKwlkZWYgYWRkX3ZlY3RvcihzZWxmLCB2ZWN0b3IpOgorCQlI YW5kbGUuYWRkX3ZlY3RvcihzZWxmLCB2ZWN0b3IpCisJCWZvciB2ZXJ0ZXggaW4gc2VsZi52ZXJ0 aWNlczoKKwkJCXZlcnRleC5hZGRfdmVjdG9yKHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92ZWN0 b3IKKwkKKwlkZWYgb25fY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJaWYg dHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdbInki XSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlpZiBsZW4oc2Vs Zi52ZXJ0aWNlcykgPT0gMToKKwkJCQkJSGFuZGxlLm1vdmUoc2VsZiwgb2JqKQorCQkJCQlzZWxm LmlkZWFsLm1vdmUob2JqKQorCQkJCWVsc2U6CisJCQkJCXNlbGYuZ2l2ZV91cF92ZXJ0ZXgob2Jq KQorCQkJCQkKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0gb2xkWyJwYXJlbnQiXTogc2VsZi5naXZl X3VwX3ZlcnRleChvYmopCisJCQkKKwlkZWYgb25fcGFyZW50X2NoYW5nZWQoc2VsZiwgb2JqLCB0 eXBlLCBvbGQsIG5ldyk6CisJCWlmIHR5cGUgaXMgb2JqZWN0OgorCQkJaWYgKG5ld1sieCJdICE9 IG9sZFsieCJdKSBvciAobmV3WyJ5Il0gIT0gb2xkWyJ5Il0pIG9yIChuZXdbInoiXSAhPSBvbGRb InoiXSk6CisJCQkJSGFuZGxlLm1vdmUoc2VsZiwgc2VsZi52ZXJ0aWNlc1swXSkKKwkJCQlzZWxm LmlkZWFsLm1vdmUoc2VsZi52ZXJ0aWNlc1swXSkKKwkJCWVsaWYgbmV3WyJwYXJlbnQiXSAhPSBv bGRbInBhcmVudCJdOgorCQkJCXNlbGYudXBkYXRlX2hpZXJhcmNoeShuZXdbInBhcmVudCJdLCBv bGRbInBhcmVudCJdKQorCQkJCUhhbmRsZS5tb3ZlKHNlbGYsIHNlbGYudmVydGljZXNbMF0pCisJ CQkJc2VsZi5pZGVhbC5tb3ZlKHNlbGYudmVydGljZXNbMF0pCisJCQkKKwlkZWYgdXBkYXRlX2hp ZXJhcmNoeShzZWxmLCBuZXdwYXJlbnQsIG9sZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50 CisJCXdoaWxlIHdvcmxkOgorCQkJdW5vYnNlcnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFu Z2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJlbnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAor CQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQp CisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGFkZF92ZXJ0ZXgoc2VsZiwgdmVy dGV4KToKKwkJdmVydGV4LnBhcmVudCA9IHNlbGYudmVydGljZXNbMF0ucGFyZW50CisJCXZlcnRl eC5tb3ZlKHNlbGYpCisJCXNlbGYudmVydGljZXMuYXBwZW5kKHZlcnRleCkKKwkJb2JzZXJ2ZSh2 ZXJ0ZXgsIHNlbGYub25fY2hhbmdlZCkKKwkJCisJZGVmIGdpdmVfdXBfdmVydGV4KHNlbGYsIHZl cnRleCk6CisJCXNlbGYuZGVsX2Zvcih2ZXJ0ZXgpCisJCXNlbGYuZWRpdG9yLmFkZF9oYW5kbGVz X2Zvcl92ZXJ0ZXgodmVydGV4KQorCQkKKwlkZWYgY3Vyc29yX2VuZG1vdmUoc2VsZiwgY3Vyc29y KToKKwkJaGFuZGxlID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxlOgorCQkJaWYg aXNpbnN0YW5jZShoYW5kbGUsIFZlcnRleEhhbmRsZSk6CisJCQkJc2VsZi5kZWxfZm9yX2FsbCgp CisJCQkJZm9yIHZlcnRleCBpbiBzZWxmLnZlcnRpY2VzOiBoYW5kbGUuYWRkX3ZlcnRleCh2ZXJ0 ZXgpCisJCQllbHNlOgorCQkJCXNlbGYubW92ZShoYW5kbGUpCisJCQkJCisJZGVmIF9fcmVwcl9f KHNlbGYpOiByZXR1cm4gIjxWZXJ0ZXhIYW5kbGUgZm9yICVzPiIgJSAoc2VsZi52ZXJ0aWNlcywp CisKK2NsYXNzIE9yaWVudGF0aW9uSGFuZGxlKEhhbmRsZSk6CisJTkFUVVJBTCA9IFlFTExPV19I QU5ETEUKKwlkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IsIG9yaWVudGF0aW9uKToK KwkJSGFuZGxlLl9faW5pdF9fKHNlbGYsIHBhcmVudCwgZWRpdG9yKQorCQkKKwkJc2VsZi5vcmll bnRhdGlvbiA9IG9yaWVudGF0aW9uCisJCXNlbGYucGxhY2UoKQorCQlzZWxmLmlkZWFsLm1vdmUo c295YS5Qb2ludChvcmllbnRhdGlvbiwgMC4wLCAwLjAsIC0xLjApKQorCQkKKwkJb2JzZXJ2ZShv cmllbnRhdGlvbiwgc2VsZi5vbl9jaGFuZ2VkKQorCQl3b3JsZCA9IG9yaWVudGF0aW9uLnBhcmVu dAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5n ZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGlzX2ZvciAoc2VsZiwgaXRl bSk6IHJldHVybiBpdGVtIGlzIHNlbGYub3JpZW50YXRpb24KKwkKKwlkZWYgcGxhY2Uoc2VsZik6 IEhhbmRsZS5tb3ZlKHNlbGYsIHNveWEuUG9pbnQoc2VsZi5vcmllbnRhdGlvbiwgMC4wLCAwLjAs IC0xLjApKQorCQkKKwlkZWYgbW92ZShzZWxmLCBwb3NpdGlvbik6CisJCWlmIHNveWEuZ2V0X21v ZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQ6CisJCQlwb3NpdGlvbiA9IHNveWEuUG9pbnQo cG9zaXRpb24ucGFyZW50LCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KQorCQkJ cG9zaXRpb24uY29udmVydF90byhzZWxmLm9yaWVudGF0aW9uLnBhcmVudCkKKwkJCXBvc2l0aW9u LnkgPSBzZWxmLm9yaWVudGF0aW9uLnkKKwkJc2VsZi5vcmllbnRhdGlvbi5sb29rX2F0KHBvc2l0 aW9uKQorCQlzZWxmLnBsYWNlKCkKKwkJCisJZGVmIGFkZF92ZWN0b3Ioc2VsZiwgdmVjdG9yKToK KwkJc2VsZi5tb3ZlKHNlbGYucG9zaXRpb24oKSArIHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92 ZWN0b3IKKwkKKwlkZWYgb25fY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJ aWYgdHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdb InkiXSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlzZWxmLnBs YWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0g b2xkWyJwYXJlbnQiXToKKwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJlbnQiXSwg b2xkWyJwYXJlbnQiXSkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCQlzZWxmLnBsYWNl KCkKKwkJCQorCWRlZiBvbl9wYXJlbnRfY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xk KToKKwkJaWYgdHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9y IChuZXdbInkiXSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlz ZWxmLnBsYWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCWlmIG5ld1sicGFyZW50 Il0gIT0gb2xkWyJwYXJlbnQiXToKKwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJl bnQiXSwgb2xkWyJwYXJlbnQiXSkKKwkJCQlzZWxmLnBsYWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1v dmUoc2VsZikKKwkJCQkKKwlkZWYgdXBkYXRlX2hpZXJhcmNoeShzZWxmLCBuZXdwYXJlbnQsIG9s ZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50CisJCXdoaWxlIHdvcmxkOgorCQkJdW5vYnNl cnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJl bnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUo d29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAor CQkJCisJZGVmIF9fcmVwcl9fKHNlbGYpOiByZXR1cm4gIjxPcmllbnRhdGlvbkhhbmRsZSBmb3Ig JXM+IiAlIChzZWxmLm9yaWVudGF0aW9uLCkK --20cf3071cca883364d04b3a88e48--