Re: Re: This routine cannot be called because another command structure has results pending
"Sébastien Sablé" <[email protected]> Mon, 4 Dec 2006 12:22:47 +0100
| Newsgroups | gmane.comp.python.sybase |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_21731_16256565.1165231367573 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Andrew, 2006/7/6, Andrew McNamara <[email protected]>: > ... > As to whether it make it into a future release, I can certainly apply > it to the repository, but neither Dave nor I have a Sybase installation > to test it against at the moment (and neither of us can really spare > the time). > > That raises the question - should the project be moved to Sourceforge? I'= m > not convinced the move would solve anything: it would still require at > least one developer with C skills and the time to review and test patches= , > cut releases, and reply to queries - is there anyone on the list willing > to commit to that? I would like to volunteer to do that. We are using python-sybase in a few tools at the company where I work and so we would like to contribute to this project and ensure it is properly tested. Actually I have already done most of the work: * I merged most of the patches provided on this list * I added some corrections of my own * I added a unit test suite based on the DB API 2.0 driver compliance unit test suite + extra * this unit test suite has been added to our automated testing framework so that it runs frequently on the following platforms and sybase clients: i686-pc-linux-gnu - Sybase ASE 12.5.1 and 15.0 (32bits) sparc-sun-solaris2.10 - Sybase ASE 12.5.1 and 15.0 (32bits and 64bits) sparc-sun-solaris2.8 - Sybase ASE 12.5.1 and 15.0 (32bits) powerpc-ibm-aix5.3.0.0 - Sybase ASE 12.5.1 and 15.0 (32bits) powerpc-ibm-aix5.2.0.0 - Sybase ASE 12.5.1 and 15.0 (32bits) alphaev68-dec-osf5.1 - Sybase ASE 12.5.1 and 15.0 (32bits) I join a patch which includes the modifications and the unit test suite. If that is OK with you and Dave, I would be happy to help you "review and test patches, cut releases, and reply to queries" for coming versions of python-sybase. regards -- S=E9bastien Sabl=E9 SunGard GP3 - Runtime ------=_Part_21731_16256565.1165231367573 Content-Type: text/x-patch; name=sybase-0.37ssa.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_evasgx49 Content-Disposition: attachment; filename="sybase-0.37ssa.diff" SW5kZXg6IHRlc3RzL2RiYXBpMjAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHMvZGJhcGkyMC5weQko Li4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL2RiYXBpMjAu cHkJKC4uLi90cnVuay9zeWJhc2UpCShyw6l2aXNpb24gMjc2KQpAQCAtMCwwICsxLDg1OSBAQAor IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisnJycgUHl0aG9uIERCIEFQSSAyLjAgZHJpdmVyIGNvbXBs aWFuY2UgdW5pdCB0ZXN0IHN1aXRlLiAKKyAgICAKKyAgICBUaGlzIHNvZnR3YXJlIGlzIFB1Ymxp YyBEb21haW4gYW5kIG1heSBiZSB1c2VkIHdpdGhvdXQgcmVzdHJpY3Rpb25zLgorCisgIk5vdyB3 ZSBoYXZlIGJvb3plIGFuZCBiYXJmbGllcyBlbnRlcmluZyB0aGUgZGlzY3Vzc2lvbiwgcGx1cyBy dW1vdXJzIG9mCisgIERCQXMgb24gZHJ1Z3MuLi4gYW5kIEkgd29uJ3QgdGVsbCB5b3Ugd2hhdCBm bGFzaGVzIHRocm91Z2ggbXkgbWluZCBlYWNoCisgIHRpbWUgSSByZWFkIHRoZSBzdWJqZWN0IGxp bmUgd2l0aCAnQW5hbCBDb21wbGlhbmNlJyBpbiBpdC4gIEFsbCBhcm91bmQKKyAgdGhpcyBpcyB0 dXJuaW5nIG91dCB0byBiZSBhIHRob3JvdWdobHkgdW53aG9sZXNvbWUgdW5pdCB0ZXN0LiIKKwor ICAgIC0tIElhbiBCaWNraW5nCisKKyAgaHR0cDovL3N0dWFydGJpc2hvcC5uZXQvU29mdHdhcmUv REJBUEkyMFRlc3RTdWl0ZS8KKycnJworCitfX3Jjc19pZF9fICA9ICckSWQ6IGRiYXBpMjAucHks diAxLjEwIDIwMDMvMTAvMDkgMDM6MTQ6MTQgemVuemVuIEV4cCAkJworX192ZXJzaW9uX18gPSAn JFJldmlzaW9uOiAxLjEwICQnWzExOi0yXQorX19hdXRob3JfXyA9ICdTdHVhcnQgQmlzaG9wIDx6 ZW5Ac2hhbmdyaS1sYS5kcm9wYmVhci5pZC5hdT4nCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0 IHRpbWUKKworIyAkTG9nOiBkYmFwaTIwLnB5LHYgJAorIyBSZXZpc2lvbiAxLjEwICAyMDAzLzEw LzA5IDAzOjE0OjE0ICB6ZW56ZW4KKyMgQWRkIHRlc3QgZm9yIERCIEFQSSAyLjAgb3B0aW9uYWwg ZXh0ZW5zaW9uLCB3aGVyZSBkYXRhYmFzZSBleGNlcHRpb25zCisjIGFyZSBleHBvc2VkIGFzIGF0 dHJpYnV0ZXMgb24gdGhlIENvbm5lY3Rpb24gb2JqZWN0LgorIworIyBSZXZpc2lvbiAxLjkgIDIw MDMvMDgvMTMgMDE6MTY6MzYgIHplbnplbgorIyBNaW5vciB0d2VhayBmcm9tIFN0ZWZhbiBGbGVp dGVyCisjCisjIFJldmlzaW9uIDEuOCAgMjAwMy8wNC8xMCAwMDoxMzoyNSAgemVuemVuCisjIENo YW5nZXMsIGFzIHBlciBzdWdnZXN0aW9ucyBieSBNLi1BLiBMZW1idXJnCisjIC0gQWRkIGEgdGFi bGUgcHJlZml4LCB0byBlbnN1cmUgbmFtZXNwYWNlIGNvbGxpc2lvbnMgY2FuIGFsd2F5cyBiZSBh dm9pZGVkCisjCisjIFJldmlzaW9uIDEuNyAgMjAwMy8wMi8yNiAyMzozMzozNyAgemVuemVuCisj IEJyZWFrIG91dCBEREwgaW50byBoZWxwZXIgZnVuY3Rpb25zLCBhcyBwZXIgcmVxdWVzdCBieSBE YXZpZCBSdXNoYnkKKyMKKyMgUmV2aXNpb24gMS42ICAyMDAzLzAyLzIxIDAzOjA0OjMzICB6ZW56 ZW4KKyMgU3R1ZmYgZnJvbSBIZW5yaWsgRWtlbHVuZDoKKyMgICAgIGFkZGVkIHRlc3RfTm9uZQor IyAgICAgYWRkZWQgdGVzdF9uZXh0c2V0ICYgaG9va3MKKyMKKyMgUmV2aXNpb24gMS41ICAyMDAz LzAyLzE3IDIyOjA4OjQzICB6ZW56ZW4KKyMgSW1wbGVtZW50IHN1Z2dlc3Rpb25zIGFuZCBjb2Rl IGZyb20gSGVucmlrIEVrbHVuZCAtIHRlc3QgdGhhdCBjdXJzb3IuYXJyYXlzaXplCisjIGRlZmF1 bHRzIHRvIDEgJiBnZW5lcmljIGN1cnNvci5jYWxscHJvYyB0ZXN0IGFkZGVkCisjCisjIFJldmlz aW9uIDEuNCAgMjAwMy8wMi8xNSAwMDoxNjozMyAgemVuemVuCisjIENoYW5nZXMsIGFzIHBlciBz dWdnZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgYnkgTS4tQS4gTGVtYnVyZywKKyMgTWF0dGhldyBU LiBLcm9tZXIsIEZlZGVyaWNvIERpIEdyZWdvcmlvIGFuZCBEYW5pZWwgRGl0dG1hcgorIyAtIENs YXNzIHJlbmFtZWQKKyMgLSBOb3cgYSBzdWJjbGFzcyBvZiBUZXN0Q2FzZSwgdG8gYXZvaWQgcmVx dWlyaW5nIHRoZSBkcml2ZXIgc3R1YgorIyAgIHRvIHVzZSBtdWx0aXBsZSBpbmhlcml0YW5jZQor IyAtIFJldmVyc2VkIHRoZSBwb2xhcml0eSBvZiBidWdneSB0ZXN0IGluIHRlc3RfZGVzY3JpcHRp b24KKyMgLSBUZXN0IGV4Y2VwdGlvbiBoZWlyYXJjaHkgY29ycmVjdGx5CisjIC0gc2VsZi5wb3B1 bGF0ZSBpcyBub3cgc2VsZi5fcG9wdWxhdGUoKSwgc28gaWYgYSBkcml2ZXIgc3R1YgorIyAgIG92 ZXJyaWRlcyBzZWxmLmRkbDEgdGhpcyBjaGFuZ2UgcHJvcG9nYXRlcworIyAtIFZBUkNIQVIgY29s dW1ucyBub3cgaGF2ZSBhIHdpZHRoLCB3aGljaCB3aWxsIGhvcGVmdWxseSBtYWtlIHRoZQorIyAg IERETCBldmVuIG1vcmUgcG9ydGlibGUgKHRoaXMgd2lsbCBiZSByZXZlcnNlZCBpZiBpdCBjYXVz ZXMgbW9yZSBwcm9ibGVtcykKKyMgLSBjdXJzb3Iucm93Y291bnQgYmVpbmcgY2hlY2tlZCBhZnRl ciB2YXJpb3VzIGV4ZWN1dGUgYW5kIGZldGNoWFhYIG1ldGhvZHMKKyMgLSBDaGVjayBmb3IgZmV0 Y2hhbGwgYW5kIGZldGNobWFueSByZXR1cm5pbmcgZW1wdHkgbGlzdHMgYWZ0ZXIgcmVzdWx0cwor IyAgIGFyZSBleGhhdXN0ZWQgKGFscmVhZHkgY2hlY2tpbmcgZm9yIGVtcHR5IGxpc3RzIGlmIHNl bGVjdCByZXRyaWV2ZWQKKyMgICBub3RoaW5nCisjIC0gRml4IGJ1Z3MgaW4gdGVzdF9zZXRvdXRw dXRzaXplX2Jhc2ljIGFuZCB0ZXN0X3NldGlucHV0c2l6ZXMKKyMKKworY2xhc3MgRGF0YWJhc2VB UEkyMFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJyBUZXN0IGEgZGF0YWJhc2Ugc2Vs Zi5kcml2ZXIgZm9yIERCIEFQSSAyLjAgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgVGhpcyBpbXBs ZW1lbnRhdGlvbiB0ZXN0cyBHYWRmbHksIGJ1dCB0aGUgVGVzdENhc2UKKyAgICAgICAgaXMgc3Ry dWN0dXJlZCBzbyB0aGF0IG90aGVyIHNlbGYuZHJpdmVycyBjYW4gc3ViY2xhc3MgdGhpcyAKKyAg ICAgICAgdGVzdCBjYXNlIHRvIGVuc3VyZSBjb21waWxpYW5jZSB3aXRoIHRoZSBEQi1BUEkuIEl0 IGlzIAorICAgICAgICBleHBlY3RlZCB0aGF0IHRoaXMgVGVzdENhc2UgbWF5IGJlIGV4cGFuZGVk IGluIHRoZSBmdXR1cmUKKyAgICAgICAgaWYgYW1iaWd1aXRpZXMgb3IgZWRnZSBjb25kaXRpb25z IGFyZSBkaXNjb3ZlcmVkLgorCisgICAgICAgIFRoZSAnT3B0aW9uYWwgRXh0ZW5zaW9ucycgYXJl IG5vdCB5ZXQgYmVpbmcgdGVzdGVkLgorCisgICAgICAgIHNlbGYuZHJpdmVycyBzaG91bGQgc3Vi Y2xhc3MgdGhpcyB0ZXN0LCBvdmVycmlkaW5nIHNldFVwLCB0ZWFyRG93biwKKyAgICAgICAgc2Vs Zi5kcml2ZXIsIGNvbm5lY3RfYXJncyBhbmQgY29ubmVjdF9rd19hcmdzLiBDbGFzcyBzcGVjaWZp Y2F0aW9uCisgICAgICAgIHNob3VsZCBiZSBhcyBmb2xsb3dzOgorCisgICAgICAgIGltcG9ydCBk YmFwaTIwIAorICAgICAgICBjbGFzcyBteXRlc3QoZGJhcGkyMC5EYXRhYmFzZUFQSTIwVGVzdCk6 CisgICAgICAgICAgIFsuLi5dIAorCisgICAgICAgIERvbid0ICdpbXBvcnQgRGF0YWJhc2VBUEky MFRlc3QgZnJvbSBkYmFwaTIwJywgb3IgeW91IHdpbGwKKyAgICAgICAgY29uZnVzZSB0aGUgdW5p dCB0ZXN0ZXIgLSBqdXN0ICdpbXBvcnQgZGJhcGkyMCcuCisgICAgJycnCisKKyAgICAjIFRoZSBz ZWxmLmRyaXZlciBtb2R1bGUuIFRoaXMgc2hvdWxkIGJlIHRoZSBtb2R1bGUgd2hlcmUgdGhlICdj b25uZWN0JworICAgICMgbWV0aG9kIGlzIHRvIGJlIGZvdW5kCisgICAgZHJpdmVyID0gTm9uZQor ICAgIGNvbm5lY3RfYXJncyA9ICgpICMgTGlzdCBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25u ZWN0CisgICAgY29ubmVjdF9rd19hcmdzID0ge30gIyBLZXl3b3JkIGFyZ3VtZW50cyBmb3IgY29u bmVjdAorICAgIHRhYmxlX3ByZWZpeCA9ICdkYmFwaTIwdGVzdF8nICMgSWYgeW91IG5lZWQgdG8g c3BlY2lmeSBhIHByZWZpeCBmb3IgdGFibGVzCisKKyAgICBkZGwxID0gJ2NyZWF0ZSB0YWJsZSAl c2Jvb3plIChuYW1lIHZhcmNoYXIoMjApKScgJSB0YWJsZV9wcmVmaXgKKyAgICBkZGwyID0gJ2Ny ZWF0ZSB0YWJsZSAlc2JhcmZseXMgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHRhYmxlX3ByZWZpeAor ICAgIHhkZGwxID0gJ2Ryb3AgdGFibGUgJXNib296ZScgJSB0YWJsZV9wcmVmaXgKKyAgICB4ZGRs MiA9ICdkcm9wIHRhYmxlICVzYmFyZmx5cycgJSB0YWJsZV9wcmVmaXgKKworICAgIGxvd2VyZnVu YyA9ICdsb3dlcicgIyBOYW1lIG9mIHN0b3JlZCBwcm9jZWR1cmUgdG8gY29udmVydCBzdHJpbmct Pmxvd2VyY2FzZQorICAgICAgICAKKyAgICAjIFNvbWUgZHJpdmVycyBtYXkgbmVlZCB0byBvdmVy cmlkZSB0aGVzZSBoZWxwZXJzLCBmb3IgZXhhbXBsZSBhZGRpbmcKKyAgICAjIGEgJ2NvbW1pdCcg YWZ0ZXIgdGhlIGV4ZWN1dGUuCisgICAgZGVmIGV4ZWN1dGVEREwxKHNlbGYsY29uLGN1cnNvcik6 CisgICAgICAgIGN1cnNvci5leGVjdXRlKHNlbGYuZGRsMSkKKworICAgIGRlZiBleGVjdXRlRERM MihzZWxmLGNvbixjdXJzb3IpOgorICAgICAgICBjdXJzb3IuZXhlY3V0ZShzZWxmLmRkbDIpCisK KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICcnJyBzZWxmLmRyaXZlcnMgc2hvdWxkIG92 ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gcmVxdWlyZWQgc2V0dXAKKyAgICAgICAgICAg IGlmIGFueSBpcyBuZWNlc3NhcnksIHN1Y2ggYXMgY3JlYXRpbmcgdGhlIGRhdGFiYXNlLgorICAg ICAgICAnJycKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAg ICAnJycgc2VsZi5kcml2ZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3Jt IHJlcXVpcmVkIGNsZWFudXAKKyAgICAgICAgICAgIGlmIGFueSBpcyBuZWNlc3NhcnksIHN1Y2gg YXMgZGVsZXRpbmcgdGhlIHRlc3QgZGF0YWJhc2UuCisgICAgICAgICAgICBUaGUgZGVmYXVsdCBk cm9wcyB0aGUgdGFibGVzIHRoYXQgbWF5IGJlIGNyZWF0ZWQuCisgICAgICAgICcnJworICAgICAg ICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0g Y29uLmN1cnNvcigpCisgICAgICAgICAgICBmb3IgZGRsIGluIChzZWxmLnhkZGwxLHNlbGYueGRk bDIpOgorICAgICAgICAgICAgICAgIHRyeTogCisgICAgICAgICAgICAgICAgICAgIGN1ci5leGVj dXRlKGRkbCkKKyAgICAgICAgICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgICAgICAg ICAgZXhjZXB0IHNlbGYuZHJpdmVyLkVycm9yOiAKKyAgICAgICAgICAgICAgICAgICAgIyBBc3N1 bWUgdGFibGUgZGlkbid0IGV4aXN0LiBPdGhlciB0ZXN0cyB3aWxsIGNoZWNrIGlmCisgICAgICAg ICAgICAgICAgICAgICMgZXhlY3V0ZSBpcyBidXN0ZWQuCisgICAgICAgICAgICAgICAgICAgIHBh c3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYg X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRy aXZlci5jb25uZWN0KAorICAgICAgICAgICAgICAgICpzZWxmLmNvbm5lY3RfYXJncywqKnNlbGYu Y29ubmVjdF9rd19hcmdzCisgICAgICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgQXR0cmli dXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGNvbm5lY3QgbWV0aG9kIGZvdW5k IGluIHNlbGYuZHJpdmVyIG1vZHVsZSIpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGNvbik6Cisg ICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGNvbiA9 IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYXBp bGV2ZWwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTXVzdCBleGlzdAorICAg ICAgICAgICAgYXBpbGV2ZWwgPSBzZWxmLmRyaXZlci5hcGlsZXZlbAorICAgICAgICAgICAgIyBN dXN0IGVxdWFsIDIuMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcGlsZXZlbCwnMi4w JykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWls KCJEcml2ZXIgZG9lc24ndCBkZWZpbmUgYXBpbGV2ZWwiKQorCisgICAgZGVmIHRlc3RfdGhyZWFk c2FmZXR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE11c3QgZXhpc3QKKyAg ICAgICAgICAgIHRocmVhZHNhZmV0eSA9IHNlbGYuZHJpdmVyLnRocmVhZHNhZmV0eQorICAgICAg ICAgICAgIyBNdXN0IGJlIGEgdmFsaWQgdmFsdWUKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVz cyh0aHJlYWRzYWZldHkgaW4gKDAsMSwyLDMpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJy b3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRyaXZlciBkb2Vzbid0IGRlZmluZSB0aHJlYWRz YWZldHkiKQorCisgICAgZGVmIHRlc3RfcGFyYW1zdHlsZShzZWxmKToKKyAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgIyBNdXN0IGV4aXN0CisgICAgICAgICAgICBwYXJhbXN0eWxlID0gc2VsZi5k cml2ZXIucGFyYW1zdHlsZQorICAgICAgICAgICAgIyBNdXN0IGJlIGEgdmFsaWQgdmFsdWUKKyAg ICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhwYXJhbXN0eWxlIGluICgKKyAgICAgICAgICAgICAg ICAncW1hcmsnLCdudW1lcmljJywnbmFtZWQnLCdmb3JtYXQnLCdweWZvcm1hdCcKKyAgICAgICAg ICAgICAgICApKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBz ZWxmLmZhaWwoIkRyaXZlciBkb2Vzbid0IGRlZmluZSBwYXJhbXN0eWxlIikKKworICAgIGRlZiB0 ZXN0X0V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHJlcXVpcmVkIGV4Y2Vw dGlvbnMgZXhpc3QsIGFuZCBhcmUgaW4gdGhlCisgICAgICAgICMgZGVmaW5lZCBoZWlyYXJjaHku CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLldhcm5pbmcs U3RhbmRhcmRFcnJvcikpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNlbGYu ZHJpdmVyLkVycm9yLFN0YW5kYXJkRXJyb3IpKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisg ICAgICAgICAgICBpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLkludGVyZmFjZUVycm9yLHNlbGYuZHJp dmVyLkVycm9yKQorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAg ICAgICAgICBpc3N1YmNsYXNzKHNlbGYuZHJpdmVyLkRhdGFiYXNlRXJyb3Isc2VsZi5kcml2ZXIu RXJyb3IpCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAg ICAgIGlzc3ViY2xhc3Moc2VsZi5kcml2ZXIuT3BlcmF0aW9uYWxFcnJvcixzZWxmLmRyaXZlci5F cnJvcikKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKAorICAgICAgICAg ICAgaXNzdWJjbGFzcyhzZWxmLmRyaXZlci5JbnRlZ3JpdHlFcnJvcixzZWxmLmRyaXZlci5FcnJv cikKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKAorICAgICAgICAgICAg aXNzdWJjbGFzcyhzZWxmLmRyaXZlci5JbnRlcm5hbEVycm9yLHNlbGYuZHJpdmVyLkVycm9yKQor ICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAgICAgICAgICBpc3N1 YmNsYXNzKHNlbGYuZHJpdmVyLlByb2dyYW1taW5nRXJyb3Isc2VsZi5kcml2ZXIuRXJyb3IpCisg ICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgIGlzc3Vi Y2xhc3Moc2VsZi5kcml2ZXIuTm90U3VwcG9ydGVkRXJyb3Isc2VsZi5kcml2ZXIuRXJyb3IpCisg ICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9FeGNlcHRpb25zQXNDb25uZWN0aW9uQXR0cmli dXRlcyhzZWxmKToKKyAgICAgICAgIyBPUFRJT05BTCBFWFRFTlNJT04KKyAgICAgICAgIyBUZXN0 IGZvciB0aGUgb3B0aW9uYWwgREIgQVBJIDIuMCBleHRlbnNpb24sIHdoZXJlIHRoZSBleGNlcHRp b25zCisgICAgICAgICMgYXJlIGV4cG9zZWQgYXMgYXR0cmlidXRlcyBvbiB0aGUgQ29ubmVjdGlv biBvYmplY3QKKyAgICAgICAgIyBJIGZpZ3VyZSB0aGlzIG9wdGlvbmFsIGV4dGVuc2lvbiB3aWxs IGJlIGltcGxlbWVudGVkIGJ5IGFueQorICAgICAgICAjIGRyaXZlciBhdXRob3Igd2hvIGlzIHVz aW5nIHRoaXMgdGVzdCBzdWl0ZSwgc28gaXQgaXMgZW5hYmxlZAorICAgICAgICAjIGJ5IGRlZmF1 bHQuCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBkcnYgPSBzZWxmLmRy aXZlcgorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29uLldhcm5pbmcgaXMgZHJ2Lldhcm5pbmcp CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb24uRXJyb3IgaXMgZHJ2LkVycm9yKQorICAgICAg ICBzZWxmLmZhaWxVbmxlc3MoY29uLkludGVyZmFjZUVycm9yIGlzIGRydi5JbnRlcmZhY2VFcnJv cikKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbi5EYXRhYmFzZUVycm9yIGlzIGRydi5EYXRh YmFzZUVycm9yKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29uLk9wZXJhdGlvbmFsRXJyb3Ig aXMgZHJ2Lk9wZXJhdGlvbmFsRXJyb3IpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb24uSW50 ZWdyaXR5RXJyb3IgaXMgZHJ2LkludGVncml0eUVycm9yKQorICAgICAgICBzZWxmLmZhaWxVbmxl c3MoY29uLkludGVybmFsRXJyb3IgaXMgZHJ2LkludGVybmFsRXJyb3IpCisgICAgICAgIHNlbGYu ZmFpbFVubGVzcyhjb24uUHJvZ3JhbW1pbmdFcnJvciBpcyBkcnYuUHJvZ3JhbW1pbmdFcnJvcikK KyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbi5Ob3RTdXBwb3J0ZWRFcnJvciBpcyBkcnYuTm90 U3VwcG9ydGVkRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICAgICAg Y29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQ29tbWl0 IG11c3Qgd29yaywgZXZlbiBpZiBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICBj b24uY29tbWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisK KyAgICBkZWYgdGVzdF9yb2xsYmFjayhzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVj dCgpCisgICAgICAgICMgSWYgcm9sbGJhY2sgaXMgZGVmaW5lZCwgaXQgc2hvdWxkIGVpdGhlciB3 b3JrIG9yIHRocm93CisgICAgICAgICMgdGhlIGRvY3VtZW50ZWQgZXhjZXB0aW9uCisgICAgICAg IGlmIGhhc2F0dHIoY29uLCdyb2xsYmFjaycpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg ICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5kcml2ZXIuTm90 U3VwcG9ydGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIAorICAgIGRlZiB0ZXN0 X2N1cnNvcihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRy eToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBmaW5hbGx5OgorICAg ICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N1cnNvcl9pc29sYXRpb24oc2Vs Zik6CisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAg ICAgICAjIE1ha2Ugc3VyZSBjdXJzb3JzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBjb25uZWN0aW9u IGhhdmUKKyAgICAgICAgICAgICMgdGhlIGRvY3VtZW50ZWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9u IGxldmVsCisgICAgICAgICAgICBjdXIxID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBjdXIy ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIxKQor ICAgICAgICAgICAgY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1Zp Y3RvcmlhIEJpdHRlcicpIiAlICgKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3ByZWZpeAor ICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICBjdXIyLmV4ZWN1dGUoInNlbGVjdCBuYW1l IGZyb20gJXNib296ZSIgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIGJvb3plID0g Y3VyMi5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihib296ZSks MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJvb3plWzBdKSwxKQorICAgICAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbChib296ZVswXVswXSwnVmljdG9yaWEgQml0dGVyJykKKyAg ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9k ZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAg IHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2VsZi5l eGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZGVz Y3JpcHRpb24sTm9uZSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uIHNob3Vs ZCBiZSBub25lIGFmdGVyIGV4ZWN1dGluZyBhICcKKyAgICAgICAgICAgICAgICAnc3RhdGVtZW50 IHRoYXQgY2FuIHJldHVybiBubyByb3dzIChzdWNoIGFzIERETCknCisgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBz ZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1ci5kZXNjcmlwdGlvbiksMSwKKyAgICAgICAgICAg ICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uIGRlc2NyaWJlcyB0b28gbWFueSBjb2x1bW5zJworICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1ci5kZXNj cmlwdGlvblswXSksNywKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdIHR1 cGxlcyBtdXN0IGhhdmUgNyBlbGVtZW50cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICBzZWxmLmFzc2VydEVxdWFsKGN1ci5kZXNjcmlwdGlvblswXVswXS5sb3dlcigpLCduYW1lJywK KyAgICAgICAgICAgICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdWzBdIG11c3QgcmV0dXJuIGNv bHVtbiBuYW1lJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzFdLHNlbGYuZHJpdmVyLlNUUklORywKKyAgICAgICAgICAg ICAgICAnY3Vyc29yLmRlc2NyaXB0aW9uW3hdWzFdIG11c3QgcmV0dXJuIGNvbHVtbiB0eXBlLiBH b3QgJXInCisgICAgICAgICAgICAgICAgICAgICUgY3VyLmRlc2NyaXB0aW9uWzBdWzFdCisgICAg ICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSBzZWxmLmRlc2NyaXB0aW9u IGdldHMgcmVzZXQKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDIoY29uLGN1cikKKyAgICAg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmRlc2NyaXB0aW9uLE5vbmUsCisgICAgICAgICAg ICAgICAgJ2N1cnNvci5kZXNjcmlwdGlvbiBub3QgYmVpbmcgc2V0IHRvIE5vbmUgd2hlbiBleGVj dXRpbmcgJworICAgICAgICAgICAgICAgICduby1yZXN1bHQgc3RhdGVtZW50cyAoZWcuIERETCkn CisgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNs b3NlKCkKKworICAgIGRlZiB0ZXN0X3Jvd2NvdW50KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxm Ll9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigp CisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgICAgICBzZWxm LmFzc2VydEVxdWFsKGN1ci5yb3djb3VudCwtMSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLnJv d2NvdW50IHNob3VsZCBiZSAtMSBhZnRlciBleGVjdXRpbmcgbm8tcmVzdWx0ICcKKyAgICAgICAg ICAgICAgICAnc3RhdGVtZW50cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBjdXIu ZXhlY3V0ZSgiaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKCdWaWN0b3JpYSBCaXR0ZXInKSIg JSAoCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9wcmVmaXgKKyAgICAgICAgICAgICAgICAp KQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMSksCisg ICAgICAgICAgICAgICAgJ2N1cnNvci5yb3djb3VudCBzaG91bGQgPT0gbnVtYmVyIG9yIHJvd3Mg aW5zZXJ0ZWQsIG9yICcKKyAgICAgICAgICAgICAgICAnc2V0IHRvIC0xIGFmdGVyIGV4ZWN1dGlu ZyBhbiBpbnNlcnQgc3RhdGVtZW50JworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGN1 ci5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tICVzYm9vemUiICUgc2VsZi50YWJsZV9wcmVmaXgp CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSwxKSwKKyAg ICAgICAgICAgICAgICAnY3Vyc29yLnJvd2NvdW50IHNob3VsZCA9PSBudW1iZXIgb2Ygcm93cyBy ZXR1cm5lZCwgb3IgJworICAgICAgICAgICAgICAgICdzZXQgdG8gLTEgYWZ0ZXIgZXhlY3V0aW5n IGEgc2VsZWN0IHN0YXRlbWVudCcKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxm LmNvbW1pdChjb24pCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwyKGNvbixjdXIpCisgICAg ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ci5yb3djb3VudCwtMSwKKyAgICAgICAgICAgICAg ICAnY3Vyc29yLnJvd2NvdW50IG5vdCBiZWluZyByZXNldCB0byAtMSBhZnRlciBleGVjdXRpbmcg JworICAgICAgICAgICAgICAgICduby1yZXN1bHQgc3RhdGVtZW50cycKKyAgICAgICAgICAgICAg ICApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgbG93 ZXJfZnVuYyA9ICdsb3dlcicKKyAgICBkZWYgdGVzdF9jYWxscHJvYyhzZWxmKToKKyAgICAgICAg Y29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNv bi5jdXJzb3IoKQorICAgICAgICAgICAgaWYgc2VsZi5sb3dlcl9mdW5jIGFuZCBoYXNhdHRyKGN1 ciwnY2FsbHByb2MnKToKKyAgICAgICAgICAgICAgICByID0gY3VyLmNhbGxwcm9jKHNlbGYubG93 ZXJfZnVuYywoJ0ZPTycsKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihy KSwxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclswXSwnRk9PJykKKyAgICAg ICAgICAgICAgICByID0gY3VyLmZldGNoYWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKGxlbihyKSwxLCdjYWxscHJvYyBwcm9kdWNlZCBubyByZXN1bHQgc2V0JykKKyAgICAg ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyWzBdKSwxLAorICAgICAgICAgICAgICAg ICAgICAnY2FsbHByb2MgcHJvZHVjZWQgaW52YWxpZCByZXN1bHQgc2V0JworICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzBdWzBdLCdmb28n LAorICAgICAgICAgICAgICAgICAgICAnY2FsbHByb2MgcHJvZHVjZWQgaW52YWxpZCByZXN1bHRz JworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBj b24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGNvbiA9IHNl bGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29y KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICAgICAg IyBjdXJzb3IuZXhlY3V0ZSBzaG91bGQgcmFpc2UgYW4gRXJyb3IgaWYgY2FsbGVkIGFmdGVyIGNv bm5lY3Rpb24KKyAgICAgICAgIyBjbG9zZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2Vs Zi5kcml2ZXIuRXJyb3Isc2VsZi5leGVjdXRlRERMMSxjb24sY3VyKQorCisgICAgICAgICMgY29u bmVjdGlvbi5jb21taXQgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBhZnRlciBjb25u ZWN0aW9uJworICAgICAgICAjIGNsb3NlZC4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNl bGYuZHJpdmVyLkVycm9yLGNvbi5jb21taXQpCisKKyAgICAgICAgIyBjb25uZWN0aW9uLmNsb3Nl IHNob3VsZCByYWlzZSBhbiBFcnJvciBpZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAg c2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIuRXJyb3IsY29uLmNsb3NlKQorCisgICAgZGVm IHRlc3RfZXhlY3V0ZShzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAg ICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2Vs Zi5fcGFyYW1pbnNlcnQoY29uLGN1cikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNv bi5jbG9zZSgpCisKKyAgICBkZWYgX3BhcmFtaW5zZXJ0KHNlbGYsY29uLGN1cik6CisgICAgICAg IHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBp bnRvICVzYm9vemUgdmFsdWVzICgnVmljdG9yaWEgQml0dGVyJykiICUgKAorICAgICAgICAgICAg c2VsZi50YWJsZV9wcmVmaXgKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuZmFpbFVubGVz cyhjdXIucm93Y291bnQgaW4gKC0xLDEpKQorCisgICAgICAgIGlmIHNlbGYuZHJpdmVyLnBhcmFt c3R5bGUgPT0gJ3FtYXJrJzoKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKAorICAgICAgICAgICAg ICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoPyknICUgc2VsZi50YWJsZV9wcmVmaXgs CisgICAgICAgICAgICAgICAgKCJDb29wZXIncyIsKQorICAgICAgICAgICAgICAgICkKKyAgICAg ICAgZWxpZiBzZWxmLmRyaXZlci5wYXJhbXN0eWxlID09ICdudW1lcmljJzoKKyAgICAgICAgICAg IGN1ci5leGVjdXRlKAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVl cyAoOjEpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICgiQ29vcGVyJ3Mi LCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHls ZSA9PSAnbmFtZWQnOgorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoCisgICAgICAgICAgICAgICAg J2luc2VydCBpbnRvICVzYm9vemUgdmFsdWVzICg6YmVlciknICUgc2VsZi50YWJsZV9wcmVmaXgs IAorICAgICAgICAgICAgICAgIHsnYmVlcic6IkNvb3BlcidzIn0KKyAgICAgICAgICAgICAgICAp CisgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAnZm9ybWF0JzoKKyAgICAg ICAgICAgIGN1ci5leGVjdXRlKAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3pl IHZhbHVlcyAoJSVzKScgJSBzZWxmLnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAoIkNv b3BlcidzIiwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBh cmFtc3R5bGUgPT0gJ3B5Zm9ybWF0JzoKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKAorICAgICAg ICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJSUoYmVlcilzKScgJSBzZWxm LnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICB7J2JlZXInOiJDb29wZXIncyJ9CisgICAg ICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdJbnZh bGlkIHBhcmFtc3R5bGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGlu ICgtMSwxKSkKKworICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3pl JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICByZXMgPSBjdXIuZmV0Y2hhbGwoKQorICAg ICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLDIsJ2N1cnNvci5mZXRjaGFsbCByZXR1cm5l ZCB0b28gZmV3IHJvd3MnKQorICAgICAgICBiZWVycyA9IFtyZXNbMF1bMF0scmVzWzFdWzBdXQor ICAgICAgICBiZWVycy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiZWVyc1swXSwi Q29vcGVyJ3MiLAorICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5jb3Jy ZWN0IGRhdGEsIG9yIGRhdGEgaW5zZXJ0ZWQgJworICAgICAgICAgICAgJ2luY29ycmVjdGx5Jwor ICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzFdLCJWaWN0b3Jp YSBCaXR0ZXIiLAorICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5jb3Jy ZWN0IGRhdGEsIG9yIGRhdGEgaW5zZXJ0ZWQgJworICAgICAgICAgICAgJ2luY29ycmVjdGx5Jwor ICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXhlY3V0ZW1hbnkoc2VsZik6CisgICAgICAg IGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBj b24uY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAg ICAgICAgIGxhcmdzID0gWyAoIkNvb3BlcidzIiwpICwgKCJCb2FnJ3MiLCkgXQorICAgICAgICAg ICAgbWFyZ3MgPSBbIHsnYmVlcic6ICJDb29wZXIncyJ9LCB7J2JlZXInOiAiQm9hZydzIn0gXQor ICAgICAgICAgICAgaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAncW1hcmsnOgorICAgICAg ICAgICAgICAgIGN1ci5leGVjdXRlbWFueSgKKyAgICAgICAgICAgICAgICAgICAgJ2luc2VydCBp bnRvICVzYm9vemUgdmFsdWVzICg/KScgJSBzZWxmLnRhYmxlX3ByZWZpeCwKKyAgICAgICAgICAg ICAgICAgICAgbGFyZ3MKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxpZiBz ZWxmLmRyaXZlci5wYXJhbXN0eWxlID09ICdudW1lcmljJzoKKyAgICAgICAgICAgICAgICBjdXIu ZXhlY3V0ZW1hbnkoCisgICAgICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZh bHVlcyAoOjEpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICBsYXJn cworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBh cmFtc3R5bGUgPT0gJ25hbWVkJzoKKyAgICAgICAgICAgICAgICBjdXIuZXhlY3V0ZW1hbnkoCisg ICAgICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoOmJlZXIpJyAl IHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICBtYXJncworICAgICAgICAg ICAgICAgICAgICApCisgICAgICAgICAgICBlbGlmIHNlbGYuZHJpdmVyLnBhcmFtc3R5bGUgPT0g J2Zvcm1hdCc6CisgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KAorICAgICAgICAgICAg ICAgICAgICAnaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKCUlcyknICUgc2VsZi50YWJsZV9w cmVmaXgsCisgICAgICAgICAgICAgICAgICAgIGxhcmdzCisgICAgICAgICAgICAgICAgICAgICkK KyAgICAgICAgICAgIGVsaWYgc2VsZi5kcml2ZXIucGFyYW1zdHlsZSA9PSAncHlmb3JtYXQnOgor ICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlbWFueSgKKyAgICAgICAgICAgICAgICAgICAgJ2lu c2VydCBpbnRvICVzYm9vemUgdmFsdWVzICglJShiZWVyKXMpJyAlICgKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYudGFibGVfcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICApLAor ICAgICAgICAgICAgICAgICAgICBtYXJncworICAgICAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5rbm93biBwYXJhbXN0eWxl JykKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDIpLAor ICAgICAgICAgICAgICAgICdpbnNlcnQgdXNpbmcgY3Vyc29yLmV4ZWN1dGVtYW55IHNldCBjdXJz b3Iucm93Y291bnQgdG8gJworICAgICAgICAgICAgICAgICdpbmNvcnJlY3QgdmFsdWUgJXInICUg Y3VyLnJvd2NvdW50CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUo J3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAg ICAgIHJlcyA9IGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl bihyZXMpLDIsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCByZXRyaWV2ZWQgaW5j b3JyZWN0IG51bWJlciBvZiByb3dzJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGJl ZXJzID0gW3Jlc1swXVswXSxyZXNbMV1bMF1dCisgICAgICAgICAgICBiZWVycy5zb3J0KCkKKyAg ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMF0sIkJvYWcncyIsJ2luY29ycmVjdCBk YXRhIHJldHJpZXZlZCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzFdLCJD b29wZXIncyIsJ2luY29ycmVjdCBkYXRhIHJldHJpZXZlZCcpCisgICAgICAgIGZpbmFsbHk6Cisg ICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmV0Y2hvbmUoc2VsZik6Cisg ICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBj dXIgPSBjb24uY3Vyc29yKCkKKworICAgICAgICAgICAgIyBjdXJzb3IuZmV0Y2hvbmUgc2hvdWxk IHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICMgZXhlY3V0aW5n IGEgc2VsZWN0LXR5cGUgcXVlcnkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYu ZHJpdmVyLkVycm9yLGN1ci5mZXRjaG9uZSkKKworICAgICAgICAgICAgIyBjdXJzb3IuZmV0Y2hv bmUgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxlZCBhZnRlcgorICAgICAgICAgICAgIyBl eGVjdXRpbmcgYSBxdWVyeSB0aGF0IGNhbm5ub3QgcmV0dXJuIHJvd3MKKyAgICAgICAgICAgIHNl bGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNl bGYuZHJpdmVyLkVycm9yLGN1ci5mZXRjaG9uZSkKKworICAgICAgICAgICAgY3VyLmV4ZWN1dGUo J3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmZldGNob25lKCksTm9uZSwKKyAgICAgICAgICAgICAg ICAnY3Vyc29yLmZldGNob25lIHNob3VsZCByZXR1cm4gTm9uZSBpZiBhIHF1ZXJ5IHJldHJpZXZl cyAnCisgICAgICAgICAgICAgICAgJ25vIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMCkpCisKKyAgICAgICAg ICAgICMgY3Vyc29yLmZldGNob25lIHNob3VsZCByYWlzZSBhbiBFcnJvciBpZiBjYWxsZWQgYWZ0 ZXIKKyAgICAgICAgICAgICMgZXhlY3V0aW5nIGEgcXVlcnkgdGhhdCBjYW5ubm90IHJldHVybiBy b3dzCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMg KCdWaWN0b3JpYSBCaXR0ZXInKSIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9wcmVm aXgKKyAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2Vs Zi5kcml2ZXIuRXJyb3IsY3VyLmZldGNob25lKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgn c2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAg ICAgciA9IGN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihy KSwxLAorICAgICAgICAgICAgICAgICdjdXJzb3IuZmV0Y2hvbmUgc2hvdWxkIGhhdmUgcmV0cmll dmVkIGEgc2luZ2xlIHJvdycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFz c2VydEVxdWFsKHJbMF0sJ1ZpY3RvcmlhIEJpdHRlcicsCisgICAgICAgICAgICAgICAgJ2N1cnNv ci5mZXRjaG9uZSByZXRyaWV2ZWQgaW5jb3JyZWN0IGRhdGEnCisgICAgICAgICAgICAgICAgKQor ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZmV0Y2hvbmUoKSxOb25lLAorICAgICAg ICAgICAgICAgICdjdXJzb3IuZmV0Y2hvbmUgc2hvdWxkIHJldHVybiBOb25lIGlmIG5vIG1vcmUg cm93cyBhdmFpbGFibGUnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWls VW5sZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg ICAgICBjb24uY2xvc2UoKQorCisgICAgc2FtcGxlcyA9IFsKKyAgICAgICAgJ0Nhcmx0b24gQ29s ZCcsCisgICAgICAgICdDYXJsdG9uIERyYWZ0JywKKyAgICAgICAgJ01vdW50YWluIEdvYXQnLAor ICAgICAgICAnUmVkYmFjaycsCisgICAgICAgICdWaWN0b3JpYSBCaXR0ZXInLAorICAgICAgICAn WFhYWCcKKyAgICAgICAgXQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgJycn IFJldHVybiBhIGxpc3Qgb2Ygc3FsIGNvbW1hbmRzIHRvIHNldHVwIHRoZSBEQiBmb3IgdGhlIGZl dGNoCisgICAgICAgICAgICB0ZXN0cy4KKyAgICAgICAgJycnCisgICAgICAgIHBvcHVsYXRlID0g WworICAgICAgICAgICAgImluc2VydCBpbnRvICVzYm9vemUgdmFsdWVzICgnJXMnKSIgJSAoc2Vs Zi50YWJsZV9wcmVmaXgscykgCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc2VsZi5zYW1wbGVz CisgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiBwb3B1bGF0ZQorCisgICAgZGVmIHRlc3Rf ZmV0Y2htYW55KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAg dHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisKKyAgICAgICAgICAgICMgY3Vy c29yLmZldGNobWFueSBzaG91bGQgcmFpc2UgYW4gRXJyb3IgaWYgY2FsbGVkIHdpdGhvdXQKKyAg ICAgICAgICAgICNpc3N1aW5nIGEgcXVlcnkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz KHNlbGYuZHJpdmVyLkVycm9yLGN1ci5mZXRjaG1hbnksNCkKKworICAgICAgICAgICAgc2VsZi5l eGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgZm9yIHNxbCBpbiBzZWxmLl9wb3B1bGF0 ZSgpOgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKHNxbCkKKworICAgICAgICAgICAgY3Vy LmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkK KyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwobGVuKHIpLDEsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgcmV0cmll dmVkIGluY29ycmVjdCBudW1iZXIgb2Ygcm93cywgJworICAgICAgICAgICAgICAgICdkZWZhdWx0 IG9mIGFycmF5c2l6ZSBpcyBvbmUuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGN1 ci5hcnJheXNpemU9MTAKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KDMpICMgU2hvdWxk IGdldCAzIHJvd3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLDMsCisgICAg ICAgICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgcmV0cmlldmVkIGluY29ycmVjdCBudW1iZXIg b2Ygcm93cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByID0gY3VyLmZldGNobWFu eSg0KSAjIFNob3VsZCBnZXQgMiBtb3JlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl bihyKSwyLAorICAgICAgICAgICAgICAgICdjdXJzb3IuZmV0Y2htYW55IHJldHJpZXZlZCBpbmNv cnJlY3QgbnVtYmVyIG9mIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgciA9 IGN1ci5mZXRjaG1hbnkoNCkgIyBTaG91bGQgYmUgYW4gZW1wdHkgc2VxdWVuY2UKKyAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLDAsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5m ZXRjaG1hbnkgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzZXF1ZW5jZSBhZnRlciAnCisgICAgICAg ICAgICAgICAgJ3Jlc3VsdHMgYXJlIGV4aGF1c3RlZCcKKyAgICAgICAgICAgICkKKyAgICAgICAg ICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorCisgICAgICAgICAg ICAjIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGN1cnNvci5hcnJheXNpemUKKyAgICAgICAgICAgIGN1 ci5hcnJheXNpemU9NAorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20g JXNib296ZScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2ht YW55KCkgIyBTaG91bGQgZ2V0IDQgcm93cworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs ZW4ociksNCwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmFycmF5c2l6ZSBub3QgYmVpbmcgaG9u b3VyZWQgYnkgZmV0Y2htYW55JworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHIgPSBj dXIuZmV0Y2htYW55KCkgIyBTaG91bGQgZ2V0IDIgbW9yZQorICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbChsZW4ociksMikKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2htYW55KCkgIyBTaG91 bGQgYmUgYW4gZW1wdHkgc2VxdWVuY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu KHIpLDApCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSw2 KSkKKworICAgICAgICAgICAgY3VyLmFycmF5c2l6ZT02CisgICAgICAgICAgICBjdXIuZXhlY3V0 ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAg ICAgICAgcm93cyA9IGN1ci5mZXRjaG1hbnkoKSAjIFNob3VsZCBnZXQgYWxsIHJvd3MKKyAgICAg ICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorICAgICAgICAg ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocm93cyksNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwobGVuKHJvd3MpLDYpCisgICAgICAgICAgICByb3dzID0gW3JbMF0gZm9yIHIgaW4gcm93 c10KKyAgICAgICAgICAgIHJvd3Muc29ydCgpCisgICAgICAgICAgCisgICAgICAgICAgICAjIE1h a2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0IGRhdGEgYmFjayBvdXQKKyAgICAgICAgICAgIGZvciBp IGluIHJhbmdlKDAsNik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ld LHNlbGYuc2FtcGxlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgJ2luY29ycmVjdCBkYXRhIHJl dHJpZXZlZCBieSBjdXJzb3IuZmV0Y2htYW55JworICAgICAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgIHJvd3MgPSBjdXIuZmV0Y2htYW55KCkgIyBTaG91bGQgcmV0dXJuIGFuIGVtcHR5 IGxpc3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJvd3MpLDAsCisgICAgICAg ICAgICAgICAgJ2N1cnNvci5mZXRjaG1hbnkgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzZXF1ZW5j ZSBpZiAnCisgICAgICAgICAgICAgICAgJ2NhbGxlZCBhZnRlciB0aGUgd2hvbGUgcmVzdWx0IHNl dCBoYXMgYmVlbiBmZXRjaGVkJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYu ZmFpbFVubGVzcyhjdXIucm93Y291bnQgaW4gKC0xLDYpKQorICAgICAgICAgICAgc2VsZi5jb21t aXQoY29uKQorCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwyKGNvbixjdXIpCisgICAgICAg ICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2JhcmZseXMnICUgc2VsZi50YWJs ZV9wcmVmaXgpCisgICAgICAgICAgICByID0gY3VyLmZldGNobWFueSgpICMgU2hvdWxkIGdldCBl bXB0eSBzZXF1ZW5jZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksMCwKKyAg ICAgICAgICAgICAgICAnY3Vyc29yLmZldGNobWFueSBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHNl cXVlbmNlIGlmICcKKyAgICAgICAgICAgICAgICAncXVlcnkgcmV0cmlldmVkIG5vIHJvd3MnCisg ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3Vu dCBpbiAoLTEsMCkpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgp CisKKyAgICBkZWYgdGVzdF9mZXRjaGFsbChzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29u bmVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAg ICAgICAgICAgIyBjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxl ZAorICAgICAgICAgICAgIyB3aXRob3V0IGV4ZWN1dGluZyBhIHF1ZXJ5IHRoYXQgbWF5IHJldHVy biByb3dzIChzdWNoCisgICAgICAgICAgICAjIGFzIGEgc2VsZWN0KQorICAgICAgICAgICAgc2Vs Zi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIuRXJyb3IsIGN1ci5mZXRjaGFsbCkKKworICAgICAg ICAgICAgc2VsZi5leGVjdXRlRERMMShjb24sY3VyKQorICAgICAgICAgICAgZm9yIHNxbCBpbiBz ZWxmLl9wb3B1bGF0ZSgpOgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKHNxbCkKKworICAg ICAgICAgICAgIyBjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJhaXNlIGFuIEVycm9yIGlmIGNhbGxl ZAorICAgICAgICAgICAgIyBhZnRlciBleGVjdXRpbmcgYSBhIHN0YXRlbWVudCB0aGF0IGNhbm5v dCByZXR1cm4gcm93cworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5kcml2ZXIu RXJyb3IsY3VyLmZldGNoYWxsKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5h bWUgZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcm93cyA9 IGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50 IGluICgtMSxsZW4oc2VsZi5zYW1wbGVzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs KGxlbihyb3dzKSxsZW4oc2VsZi5zYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAnY3Vyc29yLmZl dGNoYWxsIGRpZCBub3QgcmV0cmlldmUgYWxsIHJvd3MnCisgICAgICAgICAgICAgICAgKQorICAg ICAgICAgICAgcm93cyA9IFtyWzBdIGZvciByIGluIHJvd3NdCisgICAgICAgICAgICByb3dzLnNv cnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW4oc2VsZi5zYW1wbGVzKSk6Cisg ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ldLHNlbGYuc2FtcGxlc1tpXSwK KyAgICAgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNvcnJlY3Qgcm93 cycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByb3dzID0gY3VyLmZldGNoYWxsKCkK KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgbGVuKHJvd3Mp LDAsCisgICAgICAgICAgICAgICAgJ2N1cnNvci5mZXRjaGFsbCBzaG91bGQgcmV0dXJuIGFuIGVt cHR5IGxpc3QgaWYgY2FsbGVkICcKKyAgICAgICAgICAgICAgICAnYWZ0ZXIgdGhlIHdob2xlIHJl c3VsdCBzZXQgaGFzIGJlZW4gZmV0Y2hlZCcKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSxsZW4oc2VsZi5zYW1wbGVzKSkp CisgICAgICAgICAgICBzZWxmLmNvbW1pdChjb24pCisKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0 ZURETDIoY29uLGN1cikKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9t ICVzYmFyZmx5cycgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHJvd3MgPSBjdXIu ZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBpbiAo LTEsMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyb3dzKSwwLAorICAgICAg ICAgICAgICAgICdjdXJzb3IuZmV0Y2hhbGwgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBsaXN0IGlm ICcKKyAgICAgICAgICAgICAgICAnYSBzZWxlY3QgcXVlcnkgcmV0dXJucyBubyByb3dzJworICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg ICAgY29uLmNsb3NlKCkKKyAgICAKKyAgICBkZWYgdGVzdF9taXhlZGZldGNoKHNlbGYpOgorICAg ICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3Vy ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisg ICAgICAgICAgICBmb3Igc3FsIGluIHNlbGYuX3BvcHVsYXRlKCk6CisgICAgICAgICAgICAgICAg Y3VyLmV4ZWN1dGUoc3FsKQorCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUg ZnJvbSAlc2Jvb3plJyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcm93czEgID0g Y3VyLmZldGNob25lKCkKKyAgICAgICAgICAgIHJvd3MyMyA9IGN1ci5mZXRjaG1hbnkoMikKKyAg ICAgICAgICAgIHJvd3M0ICA9IGN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICByb3dzNTYgPSBj dXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGN1ci5yb3djb3VudCBp biAoLTEsNikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyb3dzMjMpLDIsCisg ICAgICAgICAgICAgICAgJ2ZldGNobWFueSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIHJv d3MnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o cm93czU2KSwyLAorICAgICAgICAgICAgICAgICdmZXRjaGFsbCByZXR1cm5lZCBpbmNvcnJlY3Qg bnVtYmVyIG9mIHJvd3MnCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICByb3dzID0g W3Jvd3MxWzBdXQorICAgICAgICAgICAgcm93cy5leHRlbmQoW3Jvd3MyM1swXVswXSxyb3dzMjNb MV1bMF1dKQorICAgICAgICAgICAgcm93cy5hcHBlbmQocm93czRbMF0pCisgICAgICAgICAgICBy b3dzLmV4dGVuZChbcm93czU2WzBdWzBdLHJvd3M1NlsxXVswXV0pCisgICAgICAgICAgICByb3dz LnNvcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW4oc2VsZi5zYW1wbGVzKSk6 CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dzW2ldLHNlbGYuc2FtcGxlc1tp XSwKKyAgICAgICAgICAgICAgICAgICAgJ2luY29ycmVjdCBkYXRhIHJldHJpZXZlZCBvciBpbnNl cnRlZCcKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg ICAgY29uLmNsb3NlKCkKKworICAgIGRlZiBoZWxwX25leHRzZXRfc2V0VXAoc2VsZixjdXIpOgor ICAgICAgICAnJycgU2hvdWxkIGNyZWF0ZSBhIHByb2NlZHVyZSBjYWxsZWQgZGVsZXRlbWUKKyAg ICAgICAgICAgIHRoYXQgcmV0dXJucyB0d28gcmVzdWx0IHNldHMsIGZpcnN0IHRoZSAKKwkgICAg bnVtYmVyIG9mIHJvd3MgaW4gYm9vemUgdGhlbiAibmFtZSBmcm9tIGJvb3plIgorICAgICAgICAn JycKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwnSGVscGVyIG5vdCBpbXBsZW1l bnRlZCcKKyAgICAgICAgI3NxbD0iIiIKKyAgICAgICAgIyAgICBjcmVhdGUgcHJvY2VkdXJlIGRl bGV0ZW1lIGFzCisgICAgICAgICMgICAgYmVnaW4KKyAgICAgICAgIyAgICAgICAgc2VsZWN0IGNv dW50KCopIGZyb20gYm9vemUKKyAgICAgICAgIyAgICAgICAgc2VsZWN0IG5hbWUgZnJvbSBib296 ZQorICAgICAgICAjICAgIGVuZAorICAgICAgICAjIiIiCisgICAgICAgICNjdXIuZXhlY3V0ZShz cWwpCisKKyAgICBkZWYgaGVscF9uZXh0c2V0X3RlYXJEb3duKHNlbGYsY3VyKToKKyAgICAgICAg J0lmIGNsZWFuaW5nIHVwIGlzIG5lZWRlZCBhZnRlciBuZXh0U2V0VGVzdCcKKyAgICAgICAgcmFp c2UgTm90SW1wbGVtZW50ZWRFcnJvciwnSGVscGVyIG5vdCBpbXBsZW1lbnRlZCcKKyAgICAgICAg I2N1ci5leGVjdXRlKCJkcm9wIHByb2NlZHVyZSBkZWxldGVtZSIpCisKKyAgICBkZWYgdGVzdF9u ZXh0c2V0KHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5 OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBpZiBub3QgaGFz YXR0cihjdXIsJ25leHRzZXQnKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAg ICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZURETDEoY29uLGN1cikKKyAgICAg ICAgICAgICAgICBzcWw9c2VsZi5fcG9wdWxhdGUoKQorICAgICAgICAgICAgICAgIGZvciBzcWwg aW4gc2VsZi5fcG9wdWxhdGUoKToKKyAgICAgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGUoc3Fs KQorCisgICAgICAgICAgICAgICAgc2VsZi5oZWxwX25leHRzZXRfc2V0VXAoY3VyKQorCisgICAg ICAgICAgICAgICAgY3VyLmNhbGxwcm9jKCdkZWxldGVtZScpCisgICAgICAgICAgICAgICAgbnVt YmVyb2Zyb3dzPWN1ci5mZXRjaG9uZSgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IG51bWJlcm9m cm93c1swXT09IGxlbihzZWxmLnNhbXBsZXMpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGN1ci5u ZXh0c2V0KCkKKyAgICAgICAgICAgICAgICBuYW1lcz1jdXIuZmV0Y2hhbGwoKQorICAgICAgICAg ICAgICAgIGFzc2VydCBsZW4obmFtZXMpID09IGxlbihzZWxmLnNhbXBsZXMpCisgICAgICAgICAg ICAgICAgcz1jdXIubmV4dHNldCgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHMgPT0gTm9uZSwn Tm8gbW9yZSByZXR1cm4gc2V0cywgc2hvdWxkIHJldHVybiBOb25lJworICAgICAgICAgICAgZmlu YWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmhlbHBfbmV4dHNldF90ZWFyRG93bihjdXIpCisK KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVz dF9uZXh0c2V0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCdEcml2 ZXJzIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyB0ZXN0JworCisgICAgZGVmIHRlc3RfYXJyYXlzaXpl KHNlbGYpOgorICAgICAgICAjIE5vdCBtdWNoIGhlcmUgLSByZXN0IG9mIHRoZSB0ZXN0cyBmb3Ig dGhpcyBhcmUgaW4gdGVzdF9mZXRjaG1hbnkKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVjdCgp CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAg ICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIoY3VyLCdhcnJheXNpemUnKSwKKyAgICAgICAgICAg ICAgICAnY3Vyc29yLmFycmF5c2l6ZSBtdXN0IGJlIGRlZmluZWQnCisgICAgICAgICAgICAgICAg KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0 ZXN0X3NldGlucHV0c2l6ZXMoc2VsZik6CisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg IGN1ci5zZXRpbnB1dHNpemVzKCAoMjUsKSApCisgICAgICAgICAgICBzZWxmLl9wYXJhbWluc2Vy dChjb24sY3VyKSAjIE1ha2Ugc3VyZSBjdXJzb3Igc3RpbGwgd29ya3MKKyAgICAgICAgZmluYWxs eToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXRvdXRwdXRzaXpl X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QgaXMgdG8gbWFrZSBzdXJlIHNldG91 dHB1dHNpemUgZG9lc24ndCBibG93IHVwCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg IGN1ci5zZXRvdXRwdXRzaXplKDEwMDApCisgICAgICAgICAgICBjdXIuc2V0b3V0cHV0c2l6ZSgy MDAwLDApCisgICAgICAgICAgICBzZWxmLl9wYXJhbWluc2VydChjb24sY3VyKSAjIE1ha2Ugc3Vy ZSB0aGUgY3Vyc29yIHN0aWxsIHdvcmtzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBj b24uY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0b3V0cHV0c2l6ZShzZWxmKToKKyAgICAgICAg IyBSZWFsIHRlc3QgZm9yIHNldG91dHB1dHNpemUgaXMgZHJpdmVyIGRlcGVuZGFudAorICAgICAg ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCdEcml2ZXIgbmVlZCB0byBvdmVycmlkZSB0aGlz IHRlc3QnCisKKyAgICBkZWYgdGVzdF9Ob25lKHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9j b25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisg ICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgICAgICBjdXIuZXhl Y3V0ZSgnaW5zZXJ0IGludG8gJXNib296ZSB2YWx1ZXMgKE5VTEwpJyAlIHNlbGYudGFibGVfcHJl Zml4KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCBuYW1lIGZyb20gJXNib296ZScg JSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHIgPSBjdXIuZmV0Y2hhbGwoKQorICAg ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksMSkKKyAgICAgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwobGVuKHJbMF0pLDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF1b MF0sTm9uZSwnTlVMTCB2YWx1ZSBub3QgcmV0dXJuZWQgYXMgTm9uZScpCisgICAgICAgIGZpbmFs bHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfRGF0ZShzZWxmKToK KyAgICAgICAgZDEgPSBzZWxmLmRyaXZlci5EYXRlKDIwMDIsMTIsMjUpCisgICAgICAgIGQyID0g c2VsZi5kcml2ZXIuRGF0ZUZyb21UaWNrcyh0aW1lLm1rdGltZSgoMjAwMiwxMiwyNSwwLDAsMCww LDAsMCkpKQorICAgICAgICAjIENhbiB3ZSBhc3N1bWUgdGhpcz8gQVBJIGRvZXNuJ3Qgc3BlY2lm eSwgYnV0IGl0IHNlZW1zIGltcGxpZWQKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHN0cihk MSksc3RyKGQyKSkKKworICAgIGRlZiB0ZXN0X1RpbWUoc2VsZik6CisgICAgICAgIHQxID0gc2Vs Zi5kcml2ZXIuVGltZSgxMyw0NSwzMCkKKyAgICAgICAgdDIgPSBzZWxmLmRyaXZlci5UaW1lRnJv bVRpY2tzKHRpbWUubWt0aW1lKCgyMDAxLDEsMSwxMyw0NSwzMCwwLDAsMCkpKQorICAgICAgICAj IENhbiB3ZSBhc3N1bWUgdGhpcz8gQVBJIGRvZXNuJ3Qgc3BlY2lmeSwgYnV0IGl0IHNlZW1zIGlt cGxpZWQKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksc3RyKHQyKSkKKworICAg IGRlZiB0ZXN0X1RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgdDEgPSBzZWxmLmRyaXZlci5UaW1l c3RhbXAoMjAwMiwxMiwyNSwxMyw0NSwzMCkKKyAgICAgICAgdDIgPSBzZWxmLmRyaXZlci5UaW1l c3RhbXBGcm9tVGlja3MoCisgICAgICAgICAgICB0aW1lLm1rdGltZSgoMjAwMiwxMiwyNSwxMyw0 NSwzMCwwLDAsMCkpCisgICAgICAgICAgICApCisgICAgICAgICMgQ2FuIHdlIGFzc3VtZSB0aGlz PyBBUEkgZG9lc24ndCBzcGVjaWZ5LCBidXQgaXQgc2VlbXMgaW1wbGllZAorICAgICAgICAjIHNl bGYuYXNzZXJ0RXF1YWwoc3RyKHQxKSxzdHIodDIpKQorCisgICAgZGVmIHRlc3RfQmluYXJ5KHNl bGYpOgorICAgICAgICBiID0gc2VsZi5kcml2ZXIuQmluYXJ5KCdTb21ldGhpbmcnKQorICAgICAg ICBiID0gc2VsZi5kcml2ZXIuQmluYXJ5KCcnKQorCisgICAgZGVmIHRlc3RfU1RSSU5HKHNlbGYp OgorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihzZWxmLmRyaXZlciwnU1RSSU5HJyks CisgICAgICAgICAgICAnbW9kdWxlLlNUUklORyBtdXN0IGJlIGRlZmluZWQnCisgICAgICAgICAg ICApCisKKyAgICBkZWYgdGVzdF9CSU5BUlkoc2VsZik6CisgICAgICAgIHNlbGYuZmFpbFVubGVz cyhoYXNhdHRyKHNlbGYuZHJpdmVyLCdCSU5BUlknKSwKKyAgICAgICAgICAgICdtb2R1bGUuQklO QVJZIG11c3QgYmUgZGVmaW5lZC4nCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9OVU1C RVIoc2VsZik6CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKHNlbGYuZHJpdmVyLCdO VU1CRVInKSwKKyAgICAgICAgICAgICdtb2R1bGUuTlVNQkVSIG11c3QgYmUgZGVmaW5lZC4nCisg ICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9EQVRFVElNRShzZWxmKToKKyAgICAgICAgc2Vs Zi5mYWlsVW5sZXNzKGhhc2F0dHIoc2VsZi5kcml2ZXIsJ0RBVEVUSU1FJyksCisgICAgICAgICAg ICAnbW9kdWxlLkRBVEVUSU1FIG11c3QgYmUgZGVmaW5lZC4nCisgICAgICAgICAgICApCisKKyAg ICBkZWYgdGVzdF9ST1dJRChzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIo c2VsZi5kcml2ZXIsJ1JPV0lEJyksCisgICAgICAgICAgICAnbW9kdWxlLlJPV0lEIG11c3QgYmUg ZGVmaW5lZC4nCisgICAgICAgICAgICApCisKSW5kZXg6IHRlc3RzL3Rlc3Rfc3liYXNlX2RiYXBp MjAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gdGVzdHMvdGVzdF9zeWJhc2VfZGJhcGkyMC5weQkoLi4uL2Jy YW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL3Rlc3Rfc3liYXNlX2Ri YXBpMjAucHkJKC4uLi90cnVuay9zeWJhc2UpCShyw6l2aXNpb24gMjc2KQpAQCAtMCwwICsxLDUz IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zLCBzeXMKK2ltcG9ydCB1bml0 dGVzdAorZnJvbSBDb25maWdQYXJzZXIgaW1wb3J0IFNhZmVDb25maWdQYXJzZXIKKworIiIiIFRo aXMgdGVzdCBtb2R1bGUgcmVxdWlyZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gfi8uc3liYXNl X2RiYXBpMjAuY29uZgord2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworW0Jhc2UgMV0KKwor c2VydmVyPW15c2VydmVyCitkYXRhYmFzZT1teWRhdGFiYXNlCit1c2VyPW15dXNlcgorcGFzc3dv cmQ9bXlwYXNzd29yZGQKKworW0Jhc2UgMl0KKy4uLgorIiIiCisKK2lmIG9zLmVudmlyb24uZ2V0 KCJTWUJBU0UiLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICBpbXBvcnQgc3liYXNlX2RiYXBpMjAK KworICAgIGNvbmZpZyA9IFNhZmVDb25maWdQYXJzZXIoKQorICAgIHRyeToKKyAgICAgICAgY29u ZmlnLnJlYWQob3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigifiIsICIuc3liYXNlX2Ri YXBpMjAuY29uZiIpKSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVs c2U6CisgICAgICAgIGN1cm5iID0gMAorICAgICAgICBmb3Igc2VjdGlvbiBpbiBjb25maWcuc2Vj dGlvbnMoKToKKyAgICAgICAgICAgIHNlcnZlciA9IGNvbmZpZy5nZXQoc2VjdGlvbiwgInNlcnZl ciIpCisgICAgICAgICAgICB1c2VyID0gY29uZmlnLmdldChzZWN0aW9uLCAidXNlciIpCisgICAg ICAgICAgICBwYXNzd2QgPSBjb25maWcuZ2V0KHNlY3Rpb24sICJwYXNzd29yZCIpCisgICAgICAg ICAgICBkYXRhYmFzZSA9IGNvbmZpZy5nZXQoc2VjdGlvbiwgImRhdGFiYXNlIikKKyAgICAgICAg CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFRlc3RTeWJhc2UlcyhzeWJhc2VfZGJhcGkyMC5U ZXN0U3liYXNlKToKKyAgICAgICAgICAgIGNvbm5lY3RfYXJncyA9IChzZXJ2ZXIsIHVzZXIsIHBh c3N3ZCwgZGF0YWJhc2UpCisgICAgICAgICAgICBjb25uZWN0X2t3X2FyZ3MgPSB7J2F1dG9fY29t bWl0JzogMH0iIiIgJSBzZXJ2ZXIpCisgICAgICAgIAorICAgICAgICAgICAgZXhlYygiIiJjbGFz cyBUZXN0U3liYXNlJXNBdXRvQ29tbWl0KHN5YmFzZV9kYmFwaTIwLlRlc3RTeWJhc2UpOgorICAg ICAgICAgICAgY29ubmVjdF9hcmdzID0gKHNlcnZlciwgdXNlciwgcGFzc3dkLCBkYXRhYmFzZSkK KyAgICAgICAgICAgIGNvbm5lY3Rfa3dfYXJncyA9IHsnYXV0b19jb21taXQnOiAxfSIiIiAlIHNl cnZlcikKKworICAgICAgICAgICAgZXhlYygiIiJjbGFzcyBUZXN0U3liYXNlJXNBdXRvQ29tbWl0 Rm9yY2Uoc3liYXNlX2RiYXBpMjAuVGVzdFN5YmFzZSk6CisgICAgICAgICAgICBjb25uZWN0X2Fy Z3MgPSAoc2VydmVyLCB1c2VyLCBwYXNzd2QsIGRhdGFiYXNlKQorICAgICAgICAgICAgY29ubmVj dF9rd19hcmdzID0geydhdXRvX2NvbW1pdCc6IDF9CisgICAgICAgICAgICBmb3JjZV9jb21taXQg PSAxIiIiICUgc2VydmVyKQorCisgICAgICAgICAgICBjdXJuYiArPSAxCisKK2lmIF9fbmFtZV9f ID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiB0ZXN0cy9zeWJhc2Vf ZGJhcGkyMC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0cy9zeWJhc2VfZGJhcGkyMC5weQkoLi4uL2Jy YW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gMCkKKysrIHRlc3RzL3N5YmFzZV9kYmFwaTIw LnB5CSguLi4vdHJ1bmsvc3liYXNlKQkocsOpdmlzaW9uIDI3NikKQEAgLTAsMCArMSwyNjAgQEAK KyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGRiYXBpMjAKK2ltcG9ydCBTeWJhc2UKK2lt cG9ydCBwb3BlbjIKKworCitjbGFzcyBUZXN0U3liYXNlKGRiYXBpMjAuRGF0YWJhc2VBUEkyMFRl c3QpOgorCisgICAgZHJpdmVyID0gU3liYXNlICAgIAorICAgIGRyaXZlci5fY3R4LmRlYnVnID0g MQorICAgIGRyaXZlci5zZXRfZGVidWcob3Blbignc3liYXNlX2RlYnVnLmxvZycsICd3JykpCisK KyAgICBjb25uZWN0X2FyZ3MgPSAoKQorICAgIGxvd2VyX2Z1bmMgPSAnbG93ZXInICMgRm9yIHN0 b3JlZCBwcm9jZWR1cmUgdGVzdAorCisgICAgZm9yY2VfY29tbWl0ID0gMAorCisgICAgZGVmIGNv bW1pdChzZWxmLGNvbik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3Rfa3dfYXJncy5nZXQo ImF1dG9fY29tbWl0IiwgMCkgb3Igc2VsZi5mb3JjZV9jb21taXQ6CisgICAgICAgICAgICBjb24u Y29tbWl0KCkgICAgICAgIAorCisgICAgZGVmIGV4ZWN1dGVEREwxKHNlbGYsY29uLGN1cnNvcik6 CisgICAgICAgICMgU3liYXNlIG5lZWRzIE5VTEwgdG8gYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRv IGFsbG93IE5VTEwgdmFsdWVzCisKKyAgICAgICAgc2VsZi5kZGwxID0gJ2NyZWF0ZSB0YWJsZSAl c2Jvb3plIChuYW1lIHZhcmNoYXIoMjApIE5VTEwpJyAlIHNlbGYudGFibGVfcHJlZml4CisgICAg ICAgIGN1cnNvci5leGVjdXRlKHNlbGYuZGRsMSkKKyAgICAgICAgc2VsZi5jb21taXQoY29uKQor CisgICAgZGVmIGV4ZWN1dGVEREwyKHNlbGYsY29uLGN1cnNvcik6CisgICAgICAgIGN1cnNvci5l eGVjdXRlKHNlbGYuZGRsMikKKyAgICAgICAgc2VsZi5jb21taXQoY29uKQorCisgICAgZGVmIHNl dFVwKHNlbGYpOgorICAgICAgICAjIENhbGwgc3VwZXJjbGFzcyBzZXRVcCBJbiBjYXNlIHRoaXMg ZG9lcyBzb21ldGhpbmcgaW4gdGhlCisgICAgICAgICMgZnV0dXJlCisgICAgICAgIGRiYXBpMjAu RGF0YWJhc2VBUEkyMFRlc3Quc2V0VXAoc2VsZikgCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg ICAgY29uID0gc2VsZi5fY29ubmVjdCgpCisgICAgICAgICAgICBjb24uY2xvc2UoKQorICAgICAg ICBleGNlcHQ6CisgICAgICAgICAgICAjIGNtZCA9ICJwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2Ug ZGJhcGkyMF90ZXN0JyIKKyAgICAgICAgICAgICMgY291dCxjaW4gPSBwb3BlbjIucG9wZW4yKGNt ZCkKKyAgICAgICAgICAgICMgY2luLmNsb3NlKCkKKyAgICAgICAgICAgICMgY291dC5yZWFkKCkK KyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRi YXBpMjAuRGF0YWJhc2VBUEkyMFRlc3QudGVhckRvd24oc2VsZikKKworICAgIGRlZiBfcGFyYW1p bnNlcnQoc2VsZixjb24sY3VyKToKKyAgICAgICAgIyBPdmVycmlkZGVuOiBTeWJhc2UgZG9lcyBu b3QgaGFuZGxlZCBuYW1lZCBwYXJhbWV0ZXJzIGxpa2UKKyAgICAgICAgIyBkYmFwaTIwIGV4cGVj dHMKKworICAgICAgICAjIGRiYXBpMjA6ICBjLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyB2YWx1 ZXMgKDpiZWVyKSIsIHsiYmVlciI6ICJ3aGF0ZXZlciJ9KQorICAgICAgICAjIFN5YmFzZTogICBj LmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyB2YWx1ZXMgKEBiZWVyKSIsIHsiQGJlZXIiOiAid2hh dGV2ZXIifSkKKworICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAgIGN1 ci5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1ZpY3RvcmlhIEJpdHRlcicp IiAlICgKKyAgICAgICAgICAgIHNlbGYudGFibGVfcHJlZml4CisgICAgICAgICAgICApKQorICAg ICAgICBzZWxmLmZhaWxVbmxlc3MoY3VyLnJvd2NvdW50IGluICgtMSwxKSkKKworICAgICAgICBj dXIuZXhlY3V0ZSgKKyAgICAgICAgICAgICdpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoQGJl ZXIpJyAlIHNlbGYudGFibGVfcHJlZml4LCAKKyAgICAgICAgICAgIHsnQGJlZXInOiJDb29wZXIn cyJ9CisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjdXIucm93Y291bnQg aW4gKC0xLDEpKQorCisgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9tICVzYm9v emUnICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgIHJlcyA9IGN1ci5mZXRjaGFsbCgpCisg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksMiwnY3Vyc29yLmZldGNoYWxsIHJldHVy bmVkIHRvbyBmZXcgcm93cycpCisgICAgICAgIGJlZXJzID0gW3Jlc1swXVswXSxyZXNbMV1bMF1d CisgICAgICAgIGJlZXJzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJlZXJzWzBd LCJDb29wZXIncyIsCisgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNv cnJlY3QgZGF0YSwgb3IgZGF0YSBpbnNlcnRlZCAnCisgICAgICAgICAgICAnaW5jb3JyZWN0bHkn CisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMV0sIlZpY3Rv cmlhIEJpdHRlciIsCisgICAgICAgICAgICAnY3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNv cnJlY3QgZGF0YSwgb3IgZGF0YSBpbnNlcnRlZCAnCisgICAgICAgICAgICAnaW5jb3JyZWN0bHkn CisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9leGVjdXRlbWFueShzZWxmKToKKyAgICAg ICAgIyBPdmVycmlkZGVuOiBzYW1lIHJlYXNvbiBhcyBfcGFyYW1pbnNlcnQKKworICAgICAgICBj b24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29u LmN1cnNvcigpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVEREwxKGNvbixjdXIpCisgICAgICAg ICAgICBsYXJncyA9IFsgKCJDb29wZXIncyIsKSAsICgiQm9hZydzIiwpIF0KKyAgICAgICAgICAg IG1hcmdzID0gWyB7J0BiZWVyJzogIkNvb3BlcidzIn0sIHsnQGJlZXInOiAiQm9hZydzIn0gXQor ICAgICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KAorICAgICAgICAgICAgICAgICdpbnNlcnQgaW50 byAlc2Jvb3plIHZhbHVlcyAoQGJlZXIpJyAlIHNlbGYudGFibGVfcHJlZml4LAorICAgICAgICAg ICAgICAgIG1hcmdzCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5s ZXNzKGN1ci5yb3djb3VudCBpbiAoLTEsMiksCisgICAgICAgICAgICAgICAgJ2luc2VydCB1c2lu ZyBjdXJzb3IuZXhlY3V0ZW1hbnkgc2V0IGN1cnNvci5yb3djb3VudCB0byAnCisgICAgICAgICAg ICAgICAgJ2luY29ycmVjdCB2YWx1ZSAlcicgJSBjdXIucm93Y291bnQKKyAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IG5hbWUgZnJvbSAlc2Jvb3plJyAl IHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcmVzID0gY3VyLmZldGNoYWxsKCkKKyAg ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksMiwKKyAgICAgICAgICAgICAgICAn Y3Vyc29yLmZldGNoYWxsIHJldHJpZXZlZCBpbmNvcnJlY3QgbnVtYmVyIG9mIHJvd3MnCisgICAg ICAgICAgICAgICAgKQorICAgICAgICAgICAgYmVlcnMgPSBbcmVzWzBdWzBdLHJlc1sxXVswXV0K KyAgICAgICAgICAgIGJlZXJzLnNvcnQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChi ZWVyc1swXSwiQm9hZydzIiwnaW5jb3JyZWN0IGRhdGEgcmV0cmlldmVkJykKKyAgICAgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWwoYmVlcnNbMV0sIkNvb3BlcidzIiwnaW5jb3JyZWN0IGRhdGEgcmV0 cmlldmVkJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAg ICBkZWYgdGVzdF9kcm9wX25vbl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5f Y29ubmVjdCgpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICB0cnk6CisgICAg ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmRyaXZlci5EYXRhYmFzZUVycm9yLCBjdXIu ZXhlY3V0ZSwgJ2Ryb3AgdGFibGUgJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAg ICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZWxl Y3Rfbm9uX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAg ICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu YXNzZXJ0UmFpc2VzKHNlbGYuZHJpdmVyLkRhdGFiYXNlRXJyb3IsIGN1ci5leGVjdXRlLCAnc2Vs ZWN0ICogZnJvbSAlc2R1bW15JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICBmaW5hbGx5 OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2J1Z19yZXN1bHRfcGVu ZGluZyhzZWxmKToKKyAgICAgICAgIyB1bml0YXJ5IHRlc3QgZm9yIGEgYnVnIHJlcG9ydGVkIGJ5 IFJhbHBoIEhlaW5rZWwKKyAgICAgICAgIyBodHRwOi8vd3d3Lm9iamVjdC1jcmFmdC5jb20uYXUv cGlwZXJtYWlsL3B5dGhvbi1zeWJhc2UvMjAwMi1NYXkvMDAwMDM0Lmh0bWwKKworICAgICAgICBj b24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gY29u LmN1cnNvcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3VyLmV4ZWN1dGUo J3NlbGVjdCAqIGZyb20gJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAg IGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgn Y3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHNlbGYudGFibGVfcHJl Zml4KQorICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg ICAgICBjb24uY2xvc2UoKQorCisKKyAgICBkZWYgdGVzdF9idWdfcmVzdWx0X3BlbmRpbmcyKHNl bGYpOgorICAgICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg ICAgY3VyLmV4ZWN1dGUoJ2Ryb3AgdGFibGUgJXNkdW1teScgJSBzZWxmLnRhYmxlX3ByZWZpeCkK KyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBj dXIuZXhlY3V0ZSgnY3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkpJyAlIHNl bGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgIGZpbmFs bHk6CisgICAgICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYnVnX3Jlc3VsdF9w ZW5kaW5nM19mZXRjaGFsbChzZWxmKToKKyAgICAgICAgIyBXaGVuIG5vdCBpbiBhdXRvX2NvbW1p dCBtb2RlLCBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIGNvbW1pdCBhZnRlciBhIGZldGNoYWxsIGJl Y2F1c2Ugb2YgcmVzdWx0cyBwZW5kaW5nCisgICAgICAgIGNvbiA9IHNlbGYuX2Nvbm5lY3QoKQor ICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAg IGN1ci5leGVjdXRlKCdjcmVhdGUgdGFibGUgJXNib296ZSAobmFtZSB2YXJjaGFyKDIwKSknICUg c2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBjb24uY29tbWl0KCkKKyAgICAgICAgICAg IGN1ci5leGVjdXRlKCdzZWxlY3QgbmFtZSBmcm9tICVzYm9vemUnICUgc2VsZi50YWJsZV9wcmVm aXgpCisgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5jb21taXQo Y29uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRl ZiB0ZXN0X2R1cGxpY2F0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY29uID0gc2VsZi5fY29ubmVj dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAg ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCdkcm9wIHRhYmxlICVzYm9v emUnICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5kcml2ZXIu RGF0YWJhc2VFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjdXIuZXhl Y3V0ZSgnY3JlYXRlIHRhYmxlICVzYm9vemUgKG5hbWUgdmFyY2hhcigyMCkgUFJJTUFSWSBLRVkp JyAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBp bnRvICVzYm9vemUgdmFsdWVzICgnVmljdG9yaWEgQml0dGVyJykiICUgc2VsZi50YWJsZV9wcmVm aXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmRyaXZlci5JbnRlZ3JpdHlF cnJvciwgY3VyLmV4ZWN1dGUsICJpbnNlcnQgaW50byAlc2Jvb3plIHZhbHVlcyAoJ1ZpY3Rvcmlh IEJpdHRlcicpIiAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICBmaW5hbGx5OgorICAgICAg ICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NhbGxwcm9jKHNlbGYpOgorICAgICAg ICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBjcmVh dGUgcHJvY2VkdXJlIGxvd2VyCisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgiZHJvcCBwcm9jZWR1cmUg bG93ZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAgICAgIGV4 Y2VwdCBjb24uRGF0YWJhc2VFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg ICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHByb2NlZHVyZSBsb3dlcihAbmFtZSB2YXJjaGFyKDI1Nikp IGFzIHNlbGVjdCBsb3dlcihAbmFtZSkgY29tbWl0IHRyYW5zYWN0aW9uIikKKyAgICAgICAgICAg IHNlbGYuY29tbWl0KGNvbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9z ZSgpCisgICAgICAgIGRiYXBpMjAuRGF0YWJhc2VBUEkyMFRlc3QudGVzdF9jYWxscHJvYyhzZWxm KQorCisgICAgZGVmIHRlc3Rfbm9uX2V4aXN0aW5nX3Byb2Moc2VsZik6CisgICAgICAgIGNvbiA9 IHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGNyZWF0ZSBwcm9j ZWR1cmUgbG93ZXIKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAg dHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJkcm9wIHByb2NlZHVyZSBsb3dlciIp CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoY29uKQorICAgICAgICAgICAgZXhjZXB0IGNv bi5EYXRhYmFzZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYu YXNzZXJ0UmFpc2VzKHNlbGYuZHJpdmVyLlN0b3JlZFByb2NlZHVyZUVycm9yLGN1ci5jYWxscHJv YyxzZWxmLmxvd2VyX2Z1bmMsKCdGT08nLCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg ICBjb24uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbmF0aXZlX2RhdGV0aW1lKHNlbGYpOgorICAg ICAgICBjb24gPSBzZWxmLl9jb25uZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3Vy ID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgnY3JlYXRlIHRhYmxlICVz Ym9vemUgKGRheSBkYXRlKScgJSBzZWxmLnRhYmxlX3ByZWZpeCkKKyAgICAgICAgICAgIHNlbGYu Y29tbWl0KGNvbikKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byAlc2Jvb3pl IHZhbHVlcyAoJzIwMDYxMTI0JykiICUgc2VsZi50YWJsZV9wcmVmaXgpCisgICAgICAgICAgICBz ZWxmLmNvbW1pdChjb24pCisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0ICogZnJvbSAl c2Jvb3plIiAlIHNlbGYudGFibGVfcHJlZml4KQorICAgICAgICAgICAgcmVzID0gY3VyLmZldGNo YWxsKCkKKyAgICAgICAgICAgIGRhdGUgPSByZXNbMF1bMF0KKyAgICAgICAgICAgIGlmIHNlbGYu ZHJpdmVyLnVzZV9weV9kYXRldGltZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZGF0ZXRpbWUK KyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkYXRlLCBkYXRldGltZS5k YXRldGltZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0ZS55ZWFyLCAy MDA2KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUubW9udGgsIDExKQor ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5LCAyNCkKKyAgICAgICAg ICAgIGVsaWYgc2VsZi5kcml2ZXIudXNlX2RhdGV0aW1lOgorICAgICAgICAgICAgICAgIHByaW50 ICJXQVJOSU5HOiB1c2luZyBteC5EYXRlVGltZSBkYXRldGltZSBmb3JtYXQiCisgICAgICAgICAg ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcm9tIERhdGVUaW1lIGltcG9ydCBEYXRl VGltZVR5cGUKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAg ICAgICAgICAgIGZyb20gbXguRGF0ZVRpbWUgaW1wb3J0IERhdGVUaW1lVHlwZQorICAgICAgICAg ICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGRhdGUsIERhdGVUaW1lVHlwZSkpCisgICAg ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0ZS55ZWFyLCAyMDA2KQorICAgICAgICAg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUubW9udGgsIDExKQorICAgICAgICAgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5LCAyNCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgcHJpbnQgIldBUk5JTkc6IHVzaW5nIFN5YmFzZSBuYXRpdmUgZGF0ZXRpbWUg Zm9ybWF0IgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGRhdGUsIHNl bGYuZHJpdmVyLkRhdGVUaW1lVHlwZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh bHMoZGF0ZS55ZWFyLCAyMDA2KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRh dGUubW9udGgsIDEwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGUuZGF5 LCAyNCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpCisKKworIyBU T0RPOiB0aGUgZm9sbG93aW5nIHRlc3RzIG11c3QgYmUgb3ZlcnJpZGRlbgorCisgICAgZGVmIHRl c3RfbmV4dHNldChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc2V0b3V0cHV0 c2l6ZShzZWxmKToKKyAgICAgICAgcGFzcworCkluZGV4OiBjdHguYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj dHguYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisrKyBjdHguYwko Li4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xNDgxLDcgKzE0ODEsNyBA QAogICAgIFB5X1hERUNSRUYoc2VsZi0+Y2xpZW50bXNnX2NiKTsKICAgICBjdHhfZGVsX29iamVj dChzZWxmKTsKIAotICAgIFB5TWVtX0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7 CiB9CiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKENTX0NPTlRFWFRPYmosIHgpCkluZGV4OiBs b2NhbGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBsb2NhbGUuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2Up CShyw6l2aXNpb24gNzgpCisrKyBsb2NhbGUuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRl IHRyYXZhaWwpCkBAIC03Myw3ICs3Myw3IEBACiAJCSAgICAgIHZhbHVlX3N0cihWQUxfU1RBVFVT LCBzdGF0dXMpKTsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jdHgpOwotICAgIFB5TWVt X0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKIHN0YXRpYyBpbnQgY3Nk YXRlX3R5cGUoaW50IHR5cGUpCkluZGV4OiBudW1lcmljLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbnVtZXJp Yy5jCSguLi4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIG51bWVyaWMu YwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0yOTksNyArMjk5LDcg QEAKIHN0YXRpYyB2b2lkIE51bWVyaWNfZGVhbGxvYyhOdW1lcmljT2JqICpzZWxmKQogewogICAg IFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0 X0RFTChzZWxmKTsKIH0KIAogI2lmZGVmIEhBVkVfQ1NfQ01QCkluZGV4OiBjbWQuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBjbWQuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisr KyBjbWQuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC03ODgsNyAr Nzg4LDcgQEAKIAlTWV9DT05OX0VORF9USFJFQURTKHNlbGYtPmNvbm4pOwogCiAJaWYgKHNlbGYt PmRlYnVnKSB7Ci0JICAgIGRlYnVnX21zZygiY3RfcGFyYW0oY21kJXMsICZmbXQ9Iiwgc2VsZi0+ c2VyaWFsKTsKKwkgICAgZGVidWdfbXNnKCJjdF9wYXJhbShjbWQlZCwgJmZtdD0iLCBzZWxmLT5z ZXJpYWwpOwogCSAgICBkYXRhZm10X2RlYnVnKCZkYXRhZm10LT5mbXQpOwogCSAgICBkZWJ1Z19t c2coIiwgTlVMTCwgQ1NfVU5VU0VELCBDU19VTlVTRUQpIC0+ICVzXG4iLAogCQkgICAgICB2YWx1 ZV9zdHIoVkFMX1NUQVRVUywgc3RhdHVzKSk7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCQkgICAg ICBzZWxmLT5zZXJpYWwsIHZhbHVlX3N0cihWQUxfU1RBVFVTLCBzdGF0dXMpKTsKICAgICB9CiAg ICAgUHlfWERFQ1JFRihzZWxmLT5jb25uKTsKLSAgICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlP YmplY3RfREVMKHNlbGYpOwogfQogCiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihDU19DT01N QU5ET2JqLCB4KQpJbmRleDogZGF0YWJ1Zi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRhdGFidWYuYwkoLi4u L2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24gNzgpCisrKyBkYXRhYnVmLmMJKC4uLi90 cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAg aWYgKHNlbGYtPmluZGljYXRvciAhPSBOVUxMKQogCWZyZWUoc2VsZi0+aW5kaWNhdG9yKTsKIAot ICAgIFB5TWVtX0RFTChzZWxmKTsKKyAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKIC8qIENv ZGUgdG8gaGFuZGxlIGFjY2Vzc2luZyBEYXRhQnVmIG9iamVjdHMgYXMgc2VxdWVuY2Ugb2JqZWN0 cyAqLwpJbmRleDogaW9kZXNjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW9kZXNjLmMJKC4uLi9icmFuY2hl cy8yLjYvc3liYXNlKQkocsOpdmlzaW9uIDc4KQorKysgaW9kZXNjLmMJKC4uLi90cnVuay9zeWJh c2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIHZvaWQgQ1Nf SU9ERVNDX2RlYWxsb2MoQ1NfSU9ERVNDT2JqICpzZWxmKQogewogICAgIFNZX0xFQUtfVU5SRUco c2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0K IAogLyogQ29kZSB0byBhY2Nlc3Mgc3RydWN0dXJlIG1lbWJlcnMgYnkgYWNjZXNzaW5nIGF0dHJp YnV0ZXMgKi8KSW5kZXg6IHNldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNldHVwLnB5CSguLi4vYnJh bmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIHNldHVwLnB5CSguLi4vdHJ1bmsv c3liYXNlKQkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTMxLDYgKzMxLDEwIEBACiAgICAgICAgIG9j cyA9IG9zLmVudmlyb25bJ1NZQkFTRV9PQ1MnXQogICAgICAgICBzeWJhc2UgPSBvcy5wYXRoLmpv aW4oc3liYXNlLCBvY3MpCiAKK2hhdmU2NGJpdCA9IEZhbHNlICAgICAgICAKK2lmIHN5cy5tYXhp bnQgPiAyMTQ3NDgzNjQ3OgorICAgIGhhdmU2NGJpdCA9IFRydWUKKwogaWYgb3MubmFtZSA9PSAn cG9zaXgnOiAgICAgICAgICAgICAgICAgICMgdW5peAogICAgICMgTW9zdCBwZW9wbGUgd2lsbCBk ZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZWlyIFN5YmFzZQogICAgICMgaW5zdGFsbGF0aW9uIGlu IHRoZWlyIGVudmlyb25tZW50LgpAQCAtNTAsNyArNTQsMTEgQEAKICAgICAgICAgbGliX25hbWVz ID0gWydibGsnLCAnY3QnLCAnY3MnLCAnY29tbicsICd0Y2wnLCAnaW50bCcsICdpbnNjayddCiAg ICAgZWxzZToKICAgICAgICAgbGliX25hbWVzID0gWydibGsnLCAnY3QnLCAnY3MnLCAndGNsJywg J2NvbW4nLCAnaW50bCddCisgICAgIyBmb3IgU3liYXNlIDE1LjAKKyAgICBsaWJfbmFtZXMgKz0g WydzeWJibGsnLCAnc3liY3QnLCAnc3liY3MnLCAnc3lidGNsJywgJ3N5Ymluc2NrJywgJ3N5YmNv bW4nLCAnc3liaW50bCcsICdzeWJ1bmljJ10KICAgICBmb3IgbmFtZSBpbiBsaWJfbmFtZXM6Cisg ICAgICAgIGlmIGhhdmU2NGJpdDoKKyAgICAgICAgICAgIG5hbWUgKz0gJ19yNjQnCiAgICAgICAg IGxpYl9uYW1lID0gb3MucGF0aC5qb2luKHN5YmFzZSwgJ2xpYicsICdsaWIlcy5hJyAlIG5hbWUp CiAgICAgICAgIGlmIG9zLmFjY2VzcyhsaWJfbmFtZSwgb3MuUl9PSyk6CiAgICAgICAgICAgICBz eWJfbGlicy5hcHBlbmQobmFtZSkKQEAgLTg3LDcgKzk1LDEwIEBACiBydW50aW1lX2xpYnJhcnlf ZGlycyA9IE5vbmUKIHRyeToKICAgICBpZiBvcy51bmFtZSgpWzBdID09ICdTdW5PUyc6Ci0gICAg ICAgIHN5Yl9saWJzLmFwcGVuZCgnc3liZGInKQorICAgICAgICBpZiBoYXZlNjRiaXQ6CisgICAg ICAgICAgICBzeWJfbGlicy5hcHBlbmQoJ3N5YmRiNjQnKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgc3liX2xpYnMuYXBwZW5kKCdzeWJkYicpCiAgICAgICAgIHN5Yl9saWJzLnJlbW92ZSgn Y29tbicpCiAgICAgICAgIGV4dHJhX29iamVjdHMgPSBbb3MucGF0aC5qb2luKHN5Yl9saWJkaXIs ICdsaWJjb21uLmEnKV0KICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnMgPSBbc3liX2xpYmRp cl0KQEAgLTk2LDYgKzEwNyw5IEBACiAKIHN5Yl9tYWNyb3MgPSBbKCdXQU5UX0JVTEtDT1BZJywg Tm9uZSldCiAKK2lmIGhhdmU2NGJpdDoKKyAgICBzeWJfbWFjcm9zLmFwcGVuZCgoJ1NZQl9MUDY0 JywgTm9uZSkpCisKICMgZGlzdHV0aWxzIGRvZXMgbm90IGFsbG93IC1EIEhBVkVfRlJFRVREUz02 MCBzbyBJIGhhdmUgdG8gZmluZCB0aGlzCiAjIGFyZ3VtZW50IG15c2VsZiBhbmQgcmVtb3ZlIGl0 IGZyb20gc3lzLmFyZ3YgYW5kIHNldCB0aGUgbWFjcm8gdmlhCiAjIHRoZSBkZWZpbmVfbWFjcm9z IGFyZ3VtZW50IHRvIHRoZSBleHRlbnNpb24gbW9kdWxlLgpAQCAtMTc5LDcgKzE5Myw3IEBACiAg ICAgICAgIHNkaXN0LnJ1bihzZWxmKQogCiBzZXR1cChuYW1lPSJzeWJhc2UiLAotICAgICAgdmVy c2lvbj0iMC4zNyIsCisgICAgICB2ZXJzaW9uPSIwLjM3c3NhIiwKICAgICAgIG1haW50YWluZXI9 IkRhdmUgQ29sZSIsCiAgICAgICBtYWludGFpbmVyX2VtYWlsPSJkamNAb2JqZWN0LWNyYWZ0LmNv bS5hdSIsCiAgICAgICBkZXNjcmlwdGlvbj0iU3liYXNlIEV4dGVuc2lvbiB0byBQeXRob24iLApA QCAtMjAwLDUgKzIxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICBdLAog ICAgICAgY21kY2xhc3M9eydzZGlzdCc6IG15X3NkaXN0fSwKKyAgICAgICMgdGVzdF9zdWl0ZSA9 ICdub3NlLmNvbGxlY3RvcicgIyBlYXN5X3NldHVwIG9ubHkKICAgICAgICkKIApJbmRleDogYmxr LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gYmxrLmMJKC4uLi9icmFuY2hlcy8yLjYvc3liYXNlKQkocsOpdmlz aW9uIDc4KQorKysgYmxrLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpA QCAtNjc4LDcgKzY3OCw3IEBACiAgICAgfQogI2VuZGlmCiAgICAgUHlfWERFQ1JFRihzZWxmLT5j b25uKTsKLSAgICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQog CiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihDU19CTEtERVNDT2JqLCB4KQpJbmRleDogbXNn cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIG1zZ3MuYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2 aXNpb24gNzgpCisrKyBtc2dzLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWls KQpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIHZvaWQgQ1NfQ0xJRU5UTVNHX2RlYWxsb2MoQ1Nf Q0xJRU5UTVNHT2JqICpzZWxmKQogewogICAgIFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlN ZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogI2RlZmluZSBDTElF TlRfT0ZGKHgpIG9mZnNldG9mKENTX0NMSUVOVE1TRywgeCkKQEAgLTEyNiw3ICsxMjYsNyBAQAog c3RhdGljIHZvaWQgQ1NfU0VSVkVSTVNHX2RlYWxsb2MoQ1NfU0VSVkVSTVNHT2JqICpzZWxmKQog ewogICAgIFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5 T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogI2RlZmluZSBTRVJWX09GRih4KSBvZmZzZXRvZihDU19T RVJWRVJNU0csIHgpCkluZGV4OiBkYXRhZm10LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGF0YWZtdC5jCSgu Li4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIGRhdGFmbXQuYwkoLi4u L3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0 YXRpYyB2b2lkIENTX0RBVEFGTVRfZGVhbGxvYyhDU19EQVRBRk1UT2JqICpzZWxmKQogewogICAg IFNZX0xFQUtfVU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0 X0RFTChzZWxmKTsKIH0KIAogdm9pZCBkYXRhZm10X2RlYnVnKENTX0RBVEFGTVQgKmZtdCkKSW5k ZXg6IFRPRE8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gVE9ETwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShy w6l2aXNpb24gNzgpCisrKyBUT0RPCSguLi4vdHJ1bmsvc3liYXNlKQkoY29waWUgZGUgdHJhdmFp bCkKQEAgLTYsOCArNiw2IEBACiAKIC0gQkxPQiBjb2x1bW5zICh0ZXh0L2ltYWdlKQogCi0tIFB5 VW5pdAotCiAtIEJ1bGtjb3B5IGNvcHkgb3V0CiAKIC0gRGF0YUJ1ZltuXSA9IHZhbCBzaG91bGQg ZG8gbW9yZSBjb252ZXJzaW9ucwpJbmRleDogbW9uZXkuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtb25leS5j CSguLi4vYnJhbmNoZXMvMi42L3N5YmFzZSkJKHLDqXZpc2lvbiA3OCkKKysrIG1vbmV5LmMJKC4u Li90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMjYyLDcgKzI2Miw3IEBACiBz dGF0aWMgdm9pZCBNb25leV9kZWFsbG9jKE1vbmV5T2JqICpzZWxmKQogewogICAgIFNZX0xFQUtf VU5SRUcoc2VsZik7Ci0gICAgUHlNZW1fREVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxm KTsKIH0KIAogI2lmZGVmIEhBVkVfQ1NfQ01QCkluZGV4OiBkYXRldGltZS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGRhdGV0aW1lLmMJKC4uLi9icmFuY2hlcy8yLjYvc3liYXNlKQkocsOpdmlzaW9uIDc4KQor KysgZGF0ZXRpbWUuYwkoLi4uL3RydW5rL3N5YmFzZSkJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0x NTQsNyArMTU0LDcgQEAKIHsKICAgICBTWV9MRUFLX1VOUkVHKHNlbGYpOwogCi0gICAgUHlNZW1f REVMKHNlbGYpOworICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0 ICpEYXRlVGltZV9yZXByKERhdGVUaW1lT2JqICpzZWxmKQpJbmRleDogU3liYXNlLnB5Cj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIFN5YmFzZS5weQkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2UpCShyw6l2aXNpb24g NzgpCisrKyBTeWJhc2UucHkJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0cmF2YWlsKQpA QCAtMywxNiArMywyMyBAQAogIwogIyBMSUNFTkNFIC0gc2VlIExJQ0VOQ0UgZmlsZSBkaXN0cmli dXRlZCB3aXRoIHRoaXMgc29mdHdhcmUgZm9yIGRldGFpbHMuCiAjCisKIHRyeToKLSAgICBpbXBv cnQgRGF0ZVRpbWUKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSBhcyBweV9kYXRl dGltZQogICAgIHVzZV9kYXRldGltZSA9IDEKKyAgICB1c2VfcHlfZGF0ZXRpbWUgPSAxCiBleGNl cHQgSW1wb3J0RXJyb3I6CisgICAgdXNlX3B5X2RhdGV0aW1lID0gMAogICAgIHRyeToKLSAgICAg ICAgaW1wb3J0IG14LkRhdGVUaW1lCi0gICAgICAgIERhdGVUaW1lID0gbXguRGF0ZVRpbWUKKyAg ICAgICAgZnJvbSBEYXRlVGltZSBpbXBvcnQgRGF0ZVRpbWUKICAgICAgICAgdXNlX2RhdGV0aW1l ID0gMQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgdXNlX2RhdGV0aW1lID0gMAor ICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIG14LkRhdGVUaW1lIGltcG9ydCBEYXRlVGlt ZQorICAgICAgICAgICAgdXNlX2RhdGV0aW1lID0gMQorICAgICAgICBleGNlcHQgSW1wb3J0RXJy b3I6CisgICAgICAgICAgICB1c2VfZGF0ZXRpbWUgPSAwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0 aW1lCiBpbXBvcnQgc3RyaW5nCkBAIC0yMiw3ICsyOSw3IEBACiAKIHNldF9kZWJ1ZyhzeXMuc3Rk ZXJyKQogCi1fX3ZlcnNpb25fXyA9ICcwLjM3JworX192ZXJzaW9uX18gPSAnMC4zN3NzYScKIAog IyBEQi1BUEkgdmFsdWVzCiBhcGlsZXZlbCA9ICcyLjAnICAgICAgICAgICAgICAgICAgICAgICAg IyBEQiBBUEkgbGV2ZWwgc3VwcG9ydGVkCkBAIC04NSw2ICs5MiwxMCBAQAogICAgIHBhc3MKIAog CitjbGFzcyBTdG9yZWRQcm9jZWR1cmVFcnJvcihQcm9ncmFtbWluZ0Vycm9yKToKKyAgICBwYXNz CisKKwogY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IoRGF0YWJhc2VFcnJvcik6CiAgICAgcGFzcwog CkBAIC0xODYsNyArMTk3LDExIEBACiAKIGRlZiBfc2VydmVybXNnX2NiKGN0eCwgY29ubiwgbXNn KToKICAgICBtbiA9IG1zZy5tc2dudW1iZXIKLSAgICBpZiBtbiBpbiAoMCwgNTcwMSwgNTcwMywg NTcwNCkgb3IgKChtbiA+PSA2MjAwKSBhbmQgKG1uIDwgNjMwMCkpOgorICAgIGlmIG1uID09IDI2 MDE6ICMjIEF0dGVtcHQgdG8gaW5zZXJ0IGR1cGxpY2F0ZSBrZXkgcm93IGluIG9iamVjdCB3aXRo IHVuaXF1ZSBpbmRleAorICAgICAgICByYWlzZSBJbnRlZ3JpdHlFcnJvcihfZm10X3NlcnZlciht c2cpKQorICAgIGVsaWYgbW4gPT0gMjgxMjogIyMgUHJvY2VkdXJlIG5vdCBmb3VuZAorICAgICAg ICByYWlzZSBTdG9yZWRQcm9jZWR1cmVFcnJvcigncHJvY2VkdXJlIG5vdCBmb3VuZCAlcycsIF9m bXRfc2VydmVyKG1zZykpCisgICAgZWxpZiBtbiBpbiAoMCwgNTcwMSwgNTcwMywgNTcwNCkgb3Ig KChtbiA+PSA2MjAwKSBhbmQgKG1uIDwgNjMwMCkpOgogICAgICAgICAjIE5vbi1lcnJvcnM6CiAg ICAgICAgICMgICAgMCAgICAgIFBSSU5UCiAgICAgICAgICMgNTcwMSAgICAgIENoYW5nZWQgZGIg Y29udGV4dApAQCAtMjI0LDEwICsyMzksMTQgQEAKIAogCiBkZWYgX2NvbHVtbl92YWx1ZSh2YWwp OgotICAgIGlmIHVzZV9kYXRldGltZSBhbmQgdHlwZSh2YWwpIGlzIERhdGVUaW1lVHlwZToKLSAg ICAgICAgcmV0dXJuIERhdGVUaW1lLkRhdGVUaW1lKHZhbC55ZWFyLCB2YWwubW9udGggKyAxLCB2 YWwuZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmhvdXIsIHZhbC5t aW51dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuc2Vjb25kICsgdmFs Lm1zZWNvbmQgLyAxMDAwLjApCisgICAgaWYgdXNlX3B5X2RhdGV0aW1lIGFuZCB0eXBlKHZhbCkg aXMgRGF0ZVRpbWVUeXBlOgorICAgICAgICByZXR1cm4gcHlfZGF0ZXRpbWUodmFsLnllYXIsIHZh bC5tb250aCArIDEsIHZhbC5kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuaG91 ciwgdmFsLm1pbnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5zZWNvbmQsIHZh bC5tc2Vjb25kKjEwMDApCisgICAgZWxpZiB1c2VfZGF0ZXRpbWUgYW5kIHR5cGUodmFsKSBpcyBE YXRlVGltZVR5cGU6CisgICAgICAgIHJldHVybiBEYXRlVGltZSh2YWwueWVhciwgdmFsLm1vbnRo ICsgMSwgdmFsLmRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5ob3VyLCB2YWwubWlu dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsLnNlY29uZCArIHZhbC5tc2Vjb25kIC8g MTAwMC4wKQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2YWwKIApAQCAtNDk2LDYgKzUxNSwx MyBAQAogICAgICAgICAgICAgd2hpbGUgc2VsZi5fbG9ja19jb3VudDoKICAgICAgICAgICAgICAg ICBzZWxmLl91bmxvY2soKQogCisgICAgZGVmIF9yYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjKToK KyAgICAgICAgaWYgc2VsZi5fc3RhdGUgbm90IGluIChfTEFaWV9JRExFLCBfTEFaWV9DTE9TRUQp OgorICAgICAgICAgICAgaWYgc2VsZi5fb3duZXIuX2Nvbm4uY3RfY2FuY2VsKENTX0NBTkNFTF9B TEwpID09IENTX1NVQ0NFRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0X3N0YXRlKF9MQVpZ X0lETEUpCisgICAgICAgICAgICAgICAgc2VsZi5fdW5sb2NrKCkKKyAgICAgICAgcmFpc2UgZXhj CisKICAgICBkZWYgX3JhaXNlX2Vycm9yKHNlbGYsIGV4YywgdGV4dCk6CiAgICAgICAgIGlmIHNl bGYuX3N0YXRlIG5vdCBpbiAoX0xBWllfSURMRSwgX0xBWllfQ0xPU0VEKToKICAgICAgICAgICAg IGlmIHNlbGYuX293bmVyLl9jb25uLmN0X2NhbmNlbChDU19DQU5DRUxfQUxMKSA9PSBDU19TVUND RUVEOgpAQCAtNjE2LDcgKzY0MiwxMCBAQAogICAgICAgICBzZWxmLl9hcnJheSA9IFtdCiAgICAg ICAgIHNlbGYuX2FycmF5X3BvcyA9IDAKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0 YXR1cywgcmVzdWx0ID0gc2VsZi5fY21kLmN0X3Jlc3VsdHMoKQorICAgICAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5fY21kLmN0X3Jlc3VsdHMoKQor ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9y YWlzZV9leGNlcHRpb24oZSkKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSBDU19FTkRfUkVTVUxU UzoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfTEFaWV9FTkRfUkVTVUxUOgog ICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmxvY2soKQpAQCAtNjYwLDcgKzY4OSw2IEBACiAg ICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLnJvd2NvdW50ID0gc2VsZi5fY21kLmN0X3Jlc19p bmZvKENTX1JPV19DT1VOVCkKICAgICAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gQ1NfU1VDQ0VF RDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZXJyb3IoRXJyb3IsICdjdF9yZXNf aW5mbycpCi0gICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBlbHNlOgogICAgICAg ICAgICAgICAgIHNlbGYuX3JhaXNlX2Vycm9yKEVycm9yLCAnY3RfcmVzdWx0cycpCiAKQEAgLTY4 Myw2ICs3MTEsMTIgQEAKICAgICBkZWYgX3VubG9jayhzZWxmKToKICAgICAgICAgc2VsZi5fb3du ZXIuX3VubG9jaygpCiAKKyAgICBkZWYgX2NoZWNrcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNl bGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBp cyBjbG9zZWQnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmV0Y2hlcjoKKyAgICAgICAgICAgIHJh aXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhhcyBub3QgYmVlbiBleGVjdXRlZCcpCisKICAg ICBkZWYgY2FsbHByb2Moc2VsZiwgbmFtZSwgcGFyYW1zID0gKCkpOgogICAgICAgICAnJydEQi1B UEkgQ3Vyc29yLmNhbGxwcm9jKCkKICAgICAgICAgJycnCkBAIC03ODMsMTkgKzgxNywxMyBAQAog ICAgIGRlZiBmZXRjaG9uZShzZWxmKToKICAgICAgICAgJycnREItQVBJIEN1cnNvci5mZXRjaG9u ZSgpCiAgICAgICAgICcnJwotICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6Ci0gICAgICAgICAgICBy YWlzZSBQcm9ncmFtbWluZ0Vycm9yKCdjdXJzb3IgaXMgY2xvc2VkJykKLSAgICAgICAgaWYgbm90 IHNlbGYuX2ZldGNoZXI6Ci0gICAgICAgICAgICByYWlzZSBQcm9ncmFtbWluZ0Vycm9yKCdxdWVy eSBoYXMgbm90IGJlZW4gZXhlY3V0ZWQnKQorICAgICAgICBzZWxmLl9jaGVja3JlYWR5KCkKICAg ICAgICAgcmV0dXJuIHNlbGYuX2ZldGNoZXIuZmV0Y2hvbmUoKQogCiAgICAgZGVmIGZldGNobWFu eShzZWxmLCBudW0gPSAtMSk6CiAgICAgICAgICcnJ0RCLUFQSSBDdXJzb3IuZmV0Y2htYW55KCkK ICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHJhaXNl IFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBub3Qgc2Vs Zi5fZmV0Y2hlcjoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhh cyBub3QgYmVlbiBleGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQogICAgICAg ICBpZiBudW0gPCAwOgogICAgICAgICAgICAgbnVtID0gc2VsZi5hcnJheXNpemUKICAgICAgICAg cmV0dXJuIHNlbGYuX2ZldGNoZXIuZmV0Y2htYW55KG51bSkKQEAgLTgwMywxOSArODMxLDEzIEBA CiAgICAgZGVmIGZldGNoYWxsKHNlbGYpOgogICAgICAgICAnJydEQi1BUEkgQ3Vyc29yLmZldGNo YWxsKCkKICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAg IHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBu b3Qgc2VsZi5fZmV0Y2hlcjoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1 ZXJ5IGhhcyBub3QgYmVlbiBleGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQog ICAgICAgICByZXR1cm4gc2VsZi5fZmV0Y2hlci5mZXRjaGFsbCgpCiAKICAgICBkZWYgbmV4dHNl dChzZWxmKToKICAgICAgICAgJycnREItQVBJIEN1cnNvci5uZXh0c2V0KCkKICAgICAgICAgJycn Ci0gICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5n RXJyb3IoJ2N1cnNvciBpcyBjbG9zZWQnKQotICAgICAgICBpZiBub3Qgc2VsZi5fZmV0Y2hlcjoK LSAgICAgICAgICAgIHJhaXNlIFByb2dyYW1taW5nRXJyb3IoJ3F1ZXJ5IGhhcyBub3QgYmVlbiBl eGVjdXRlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrcmVhZHkoKQogICAgICAgICBkZXNjID0gc2Vs Zi5fZmV0Y2hlci5uZXh0c2V0KCkKICAgICAgICAgaWYgZGVzYzoKICAgICAgICAgICAgIHNlbGYu ZGVzY3JpcHRpb24gPSBkZXNjCkBAIC04NjYsNiArODg4LDI4IEBACiAgICAgICAgIGlmIG5vdCBk ZWxheV9jb25uZWN0OgogICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkKIAorICAgIGRlZiBfX2dl dGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgIyBFeHBvc2UgZXhjZXB0aW9uIGNsYXNzZXMg dmlhIHRoZSBDb25uZWN0aW9uIG9iamVjdCBzbworICAgICAgICAjIHByb2dyYW1tZXJzIGRvbid0 IGhhdmUgdG8gdGllIHRoZWlyIGNvZGUgdG8gdGhpcyBtb2R1bGUgd2l0aAorICAgICAgICAjICJm cm9tIFN5YmFzZSBpbXBvcnQgRGF0YWJhc2VFcnJvciIgYWxsIG92ZXIgdGhlIHBsYWNlLiAgU2Vl CisgICAgICAgICMgUEVQIDI0OSwgIk9wdGlvbmFsIERCIEFQSSBFeHRlbnNpb25zIi4KKyAgICAg ICAgbmFtZXMgPSAoJ1dhcm5pbmcnLAorICAgICAgICAgICAgICAgICAnRXJyb3InLAorICAgICAg ICAgICAgICAgICAnSW50ZXJmYWNlRXJyb3InLAorICAgICAgICAgICAgICAgICAnRGF0YWJhc2VF cnJvcicsCisgICAgICAgICAgICAgICAgICdEYXRhRXJyb3InLAorICAgICAgICAgICAgICAgICAn T3BlcmF0aW9uYWxFcnJvcicsCisgICAgICAgICAgICAgICAgICdJbnRlZ3JpdHlFcnJvcicsCisg ICAgICAgICAgICAgICAgICdJbnRlcm5hbEVycm9yJywKKyAgICAgICAgICAgICAgICAgJ1Byb2dy YW1taW5nRXJyb3InLAorICAgICAgICAgICAgICAgICAnU3RvcmVkUHJvY2VkdXJlRXJyb3InLAor ICAgICAgICAgICAgICAgICAnTm90U3VwcG9ydGVkRXJyb3InLAorICAgICAgICAgICAgICAgICkK KyAgICAgICAgaWYgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHN5 cy5tb2R1bGVzW3NlbGYuX19tb2R1bGVfX10sIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCiAgICAgZGVmIF9sb2NrKHNlbGYpOgog ICAgICAgICBpZiBzZWxmLl9kb19sb2NraW5nOgogICAgICAgICAgICAgc2VsZi5fY29ubmxvY2su YWNxdWlyZSgpCkBAIC05NjUsNiArMTAwOSwxNCBAQAogICAgIGRlZiBjb21taXQoc2VsZiwgbmFt ZSA9IE5vbmUpOgogICAgICAgICAnJydEQi1BUEkgQ29ubmVjdGlvbi5jb21taXQoKQogICAgICAg ICAnJycKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbmNlbCBhbGwgcmVzdWx0IHNldHMgYmVmb3Jl IGNvbW1pdGluZywKKyAgICAgICAgIyBvdGhlcndpc2Ugd2UgZ2V0IGEgcGVuZGluZyByZXN1bHRz IGVycm9yCisgICAgICAgIGlmIHNlbGYuX2lzX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHNlbGYu X2xvY2soKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm4uY3Rf Y2FuY2VsKENTX0NBTkNFTF9BTEwpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg ICAgIHNlbGYuX3VubG9jaygpCiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAgICAgICBzZWxmLmV4 ZWN1dGUoJ2NvbW1pdCB0cmFuc2FjdGlvbiAlcycgJSBuYW1lKQogICAgICAgICBlbHNlOgpJbmRl eDogY29ubi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbm4uYwkoLi4uL2JyYW5jaGVzLzIuNi9zeWJhc2Up CShyw6l2aXNpb24gNzgpCisrKyBjb25uLmMJKC4uLi90cnVuay9zeWJhc2UpCShjb3BpZSBkZSB0 cmF2YWlsKQpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKICAgICBTWV9MT0NLX0ZSRUUoc2VsZik7CiAg ICAgUHlfWERFQ1JFRihzZWxmLT5jdHgpOwogICAgIGNvbm5fZGVsX29iamVjdChzZWxmKTsKLSAg ICBQeU1lbV9ERUwoc2VsZik7CisgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCiAjZGVmaW5l IE9GRih4KSBvZmZzZXRvZihDU19DT05ORUNUSU9OT2JqLCB4KQo= ------=_Part_21731_16256565.1165231367573 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Python-sybase mailing list [email protected] https://www.object-craft.com.au/cgi-bin/mailman/listinfo/python-sybase ------=_Part_21731_16256565.1165231367573--