ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA0NmNkZGE1Li5jNjNiNDBlIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDMgKzEsNTMgQEAKK0FTRiBWQ0wgMi41LjEKKworRGVwZW5kZW5jeSBjaGFuZ2VzOgorCitWQ0wgTWFuYWdlbWVudCBOb2RlOgorKiB1cGRhdGVkIHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBDZW50T1MgYW5kIFJlZCBIYXQKKworUmVsZWFzZSBOb3RlcyAtIFZDTCAtIFZlcnNpb24gMi41LjEKKyAgICAgICAgICAgIAorKiogQnVnCisgICAgKiBbVkNMLTEwNzldIC0gVmlydHVhbCBIb3N0cyBwYWdlIHJlZmVyZW5jZXMgQ29tcHV0ZXIgVXRpbGl0aWVzCisgICAgKiBbVkNMLTEwODBdIC0gV3JvbmcgcG9ydCBjYW4gYmUgZGVsaXZlcmVkIGluIFJEUCBmaWxlCisgICAgKiBbVkNMLTEwODFdIC0gVUlEIGNvbmZsaWN0IGZvciBhZG1pbiB1c2VyCisgICAgKiBbVkNMLTEwODJdIC0gbW9uaXRvcl92Y2xkLnBsIHRocm93cyBpbmNvcnJlY3QgbGFzdGNoZWNraW4gdGltZSBleGNlcHRpb24gYWZ0ZXIgRGF5bGlnaHQgU2F2aW5ncyBUaW1lIFJvbGVzIEJhY2sKKyAgICAqIFtWQ0wtMTA4M10gLSBEYXRhIGluIHNoYXJlcyBtb3VudGVkIHVuZGVyIExpbnV4IGhvbWUgZGlyZWN0b3JpZXMgbWF5IGJlIGRlbGV0ZWQKKyAgICAqIFtWQ0wtMTA5M10gLSB2U3BoZXJlX1NESy5wbTp2bV91bnJlZ2lzdGVyIC0gZmFpbGVkIHRvIHVucmVnaXN0ZXIgVk06CisgICAgKiBbVkNMLTExMDBdIC0gYmxvY2sgYWxsb2NhdGlvbiB1c2FnZSBncmFwaCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBmb3IgYWxsb2NhdGlvbnMgd2l0aCBhIHNpbmdsZSB0aW1lIHNsb3QKKyAgICAqIFtWQ0wtMTEwM10gLSBjaGFuZ2UgdmNsZHNlbWFwaG9yZS5waWQgZnJvbSBzbWFsbGludCB0byBtZWRpdW1pbnQKKyAgICAqIFtWQ0wtMTEwNV0gLSBTaGliYm9sZXRoIGF1dGhlbnRpY2F0aW9uIGJyb2tlbiBkdWUgdG8gYnVnIGluIGdldENyeXB0S2V5SUQKKyAgICAqIFtWQ0wtMTExMV0gLSBzdGF0Z3JhcGhjYWNoZSB0YWJsZSBub3QgY29ycmVjdGx5IGJlaW5nIHVzZWQKKyAgICAqIFtWQ0wtMTExM10gLSBpbWFnZSBjYXB0dXJlIGZvciBXaW5kb3dzIHN5c3RlbSBjb25maWd1cmVkIGFzIGRvbWFpbiBjb250cm9sbGVyIGZhaWxzCisgICAgKiBbVkNMLTExMTZdIC0gdXNlIGRhdGFiYXNlIGhvc3RuYW1lcyBmb3IgYWQgam9pbmVkIGNvbXB1dGVycworICAgICogW1ZDTC0xMTE3XSAtIHZjbGQgZmFpbHMgdG8gc2V0IGZpeGVkIElQIGFkZHJlc3MgZm9yIExpbnV4IHNlcnZlciByZXNlcnZhdGlvbnMgaWYgbWFuYWdlbWVudCBub2RlIG5vdCBzZXQgdG8gc3RhdGljCisgICAgKiBbVkNMLTExMTldIC0gd3JvbmcgZGF5IHN1Ym1pdHRlZCBmb3IgZnV0dXJlIHJlc2VydmF0aW9ucyBtYWRlIGluIHRoZSBldmVuaW5nCisgICAgKiBbVkNMLTExMjBdIC0gaW1hZ2UgY29udmVyc2lvbiBmcm9tIHZtZGsgdG8gcWNvdzIgYWx3YXlzIGRvbmUgdHdpY2UKKyAgICAgICAgCisqKiBOZXcgRmVhdHVyZQorICAgICogW1ZDTC0xMTEyXSAtIFNTTCBPZmZsb2FkCisgICAgICAgIAorKiogSW1wcm92ZW1lbnQKKyAgICAqIFtWQ0wtMTA0MV0gLSBDdXN0b21lciBmYWNpbmcgZW1haWwgbm90aWZpY2F0aW9ucyBhcmUgdWdseQorICAgICogW1ZDTC0xMDg0XSAtIHNldCBjYWNoZSBtb2RlIGZvciBsaWJ2aXJ0IFZNcworICAgICogW1ZDTC0xMDg1XSAtIENvbmZpZ3VyaW5nIFZDTCBXZWJzaXRlIHRvIHVzZSBjdXN0b20gcG9ydAorICAgICogW1ZDTC0xMDg5XSAtIENoYW5nZSBwaW5nIG1vZHVsZSB0byB1c2UgTmV0OjpQaW5nOjpFeHRlcm5hbAorICAgICogW1ZDTC0xMDkyXSAtIENoYW5nZSBpbnN0YWxsYXRpb24gc2NyaXB0IHRvIGluc3RhbGwgdGhlc2UgUlBNIFBlcmwgTW9kdWxlcworICAgICogW1ZDTC0xMDk0XSAtIGFkZCAuXCB0byB3aW5kb3dzIHVzZXIgbG9naW4gdG8gcHJldmVudCBhdXRvbWF0aWMgdXNlIG9mIE1pY3Jvc29mdCBhY2NvdW50cworICAgICogW1ZDTC0xMDk1XSAtIE1vdmUgdW5qb2luaW5nIG9mIFdpbmRvd3MgVk1zIGZyb20gQWN0aXZlIERpcmVjdG9yeSB0byBlYXJsaWVyIGluIHRoZSBkZXByb3Zpc2lvbiBwcm9jZXNzCisgICAgKiBbVkNMLTEwOTZdIC0gQWRkIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBtb3VudCBORlMgc2hhcmVzIHVuZGVyIFdpbmRvd3MKKyAgICAqIFtWQ0wtMTEwMV0gLSBDaGFuZ2UgY2htb2QgbW9kZSBmcm9tIHN0cmluZyB0byBvY3RhbCBudW1iZXIgdmFsdWUKKyAgICAqIFtWQ0wtMTEwNF0gLSBzZXQgY3B1IHRvcG9sb2d5IGZvciBsaWJ2aXJ0IFZNcworICAgICogW1ZDTC0xMTA2XSAtIG1ha2UgUEhQIGNvZGUgY29tcGF0aWJsZSB3aXRoIFBIUCA3CisgICAgKiBbVkNMLTExMDldIC0gZGF0ZSBkdXBsaWNhdGVkIG9uIHN0YXRpc3RpYyBncmFwaCBsYWJlbHMgZm9yIGRheSBhZnRlciBkYXlsaWdodCBzYXZpbmcgdGltZSByb2xscyBiYWNrCisgICAgKiBbVkNMLTExMTBdIC0gZXhwb3NlIG1heGluaXRpYWwgdGltZSBmb3IgaW1hZ2VzIGluIHdlYiBVSQorICAgICogW1ZDTC0xMTE0XSAtIG1pc2NlbGxhbmVvdXMgc21hbGwgd2ViIHVwZGF0ZXMKKyAgICAgICAgICAgIAorKiogVGFzaworICAgICogW1ZDTC0xMDk3XSAtIGFkZCBoaWRkZW4gZmlsZXMgdG8gZW1wdHkgZGlyZWN0b3JpZXMgdG8gZm9yY2UgdGhlbSB0byBiZSBpbmNsdWRlZCBpbiBHaXQgcmVwbworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiBBU0YgVkNMIDIuNQogCiBEZXBlbmRlbmN5IGNoYW5nZXM6CmRpZmYgLS1naXQgYS9JTlNUQUxMQVRJT04gYi9JTlNUQUxMQVRJT04KaW5kZXggYzU1ODNlOC4uZjZmNGE2MiAxMDA2NDQKLS0tIGEvSU5TVEFMTEFUSU9OCisrKyBiL0lOU1RBTExBVElPTgpAQCAtMSwxMCArMSwxMCBAQAotSW5zdGFsbGluZyBWQ0wgMi41CitJbnN0YWxsaW5nIFZDTCAyLjUuMQogCi1WQ0wgMi41IGlzIHRoZSBzZWNvbmQgcmVsZWFzZSB0byBpbmNsdWRlIGFuIGluc3RhbGxhdGlvbiBzY3JpcHQuIEFsbCB5b3UgbmVlZAotdG8gaW5zdGFsbCBWQ0wgaXMgdGhlIHNjcmlwdC4gSXQgd2lsbCBkb3dubG9hZCBhbmQgdmFsaWRhdGUgdGhlIFZDTCBzb2Z0d2FyZSBhbmQKLXRoZW4gaW5zdGFsbCBpdC4gVGhlIHNjcmlwdCBjYW4gYmUgdXNlZCB0byBpbnN0YWxsIGFsbCB0aHJlZSBwYXJ0cyBvZiBWQ0wKLShkYXRhYmFzZSwgd2ViIHBvcnRhbCwgYW5kIG1hbmFnZW1lbnQgbm9kZSkgb24gYSBzaW5nbGUgc3lzdGVtIG9yIHRvIGluc3RhbGwKLWVhY2ggcGFydCBpbmRpdmlkdWFsbHkgb24gc2VwYXJhdGUgc3lzdGVtcy4KK1ZDTCAyLjUuMSBjYW4gYmUgaW5zdGFsbGVkIHVzaW5nIGFuIGluc3RhbGxhdGlvbiBzY3JpcHQuIEFsbCB5b3UgbmVlZCB0bworaW5zdGFsbCBWQ0wgaXMgdGhlIHNjcmlwdC4gSXQgd2lsbCBkb3dubG9hZCBhbmQgdmFsaWRhdGUgdGhlIFZDTCBzb2Z0d2FyZQorYW5kIHRoZW4gaW5zdGFsbCBpdC4gVGhlIHNjcmlwdCBjYW4gYmUgdXNlZCB0byBpbnN0YWxsIGFsbCB0aHJlZSBwYXJ0cyBvZgorVkNMIChkYXRhYmFzZSwgd2ViIHBvcnRhbCwgYW5kIG1hbmFnZW1lbnQgbm9kZSkgb24gYSBzaW5nbGUgc3lzdGVtIG9yIHRvCitpbnN0YWxsIGVhY2ggcGFydCBpbmRpdmlkdWFsbHkgb24gc2VwYXJhdGUgc3lzdGVtcy4KIAogUnVubmluZyB0aGUgaW5zdGFsbGF0aW9uIHNjcmlwdCB3aXRoIG5vIGFyZ3VtZW50cyB3aWxsIHN0ZXAgeW91IHRocm91Z2gKIGluc3RhbGxpbmcgYWxsIHRocmVlIHBhcnRzIG9mIFZDTC4KQEAgLTUyLDcgKzUyLDcgQEAKIAogCiAKLU1JTlVBTCBJTlNUQUxMQVRJT04gSU5TVFJVQ1RJT05TCitNQU5VQUwgSU5TVEFMTEFUSU9OIElOU1RSVUNUSU9OUwogCiBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIG9mIGluc3RhbGxpbmcgVkNMIGlzIHRvIHVzZSB0aGUgaW5zdGFsbGF0aW9uIHNjcmlwdC4gU2VlCiBhYm92ZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gSWYgbWFudWFsIGluc3RhbGxhdGlvbiBpcyByZXF1aXJlZCwKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgSW1wb3J0IHRoZSB2Y2wuc3FsIGZpbGUgaW50byB0aGUgZGF0YWJhc2UuIFRoZSB2Y2wuc3FsIGZpbGUgaXMgaW5jbHVkZWQgaW4KICAgICAgIHRoZSBteXNxbCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBBcGFjaGUgVkNMIHNvdXJjZSBjb2RlCiAKLSAgICAgICAgbXlzcWwgdmNsIDwgYXBhY2hlLVZDTC0yLjUvbXlzcWwvdmNsLnNxbAorICAgICAgICBteXNxbCB2Y2wgPCBhcGFjaGUtVkNMLTIuNS4xL215c3FsL3ZjbC5zcWwKIAogMi4gSW5zdGFsbCBhbmQgQ29uZmlndXJlIHRoZSBXZWIgQ29tcG9uZW50cwogCkBAIC0xNTUsOCArMTU1LDggQEAKIAogICAgV2ViIFNlcnZlcjoKIAotICAgIEFwYWNoZSBIVFRQIFNlcnZlciB2MS4zIG9yIHYyLnggd2l0aCBTU0wgZW5hYmxlZAotICAgIFBIUCA1LjAgb3IgbGF0ZXIKKyAgICBBcGFjaGUgSFRUUCBTZXJ2ZXIgdjIueCB3aXRoIFNTTCBlbmFibGVkCisgICAgUEhQIDUueCBvciA3LngKIAogICAgUmVxdWlyZWQgTGludXggUGFja2FnZXM6CiAKQEAgLTE2NywxMiArMTY3LDEzIEBACiAgICBSZXF1aXJlZCBQSFAgTW9kdWxlczoKIAogICAgIHBocAorICAgIHBocC1nZXR0ZXh0CiAgICAgcGhwLWpzb24gKHJlcXVpcmVkIGlmIHlvdXIgUEhQIHZlcnNpb24gaXMgNS4yIG9yIGxhdGVyKQorICAgIHBocC1sZGFwIChpZiB5b3Ugd2lsbCBiZSB1c2luZyBMREFQIGF1dGhlbnRpY2F0aW9uKQogICAgIHBocC1teXNxbAogICAgIHBocC1vcGVuc3NsCiAgICAgcGhwLXhtbAogICAgIHBocC14bWxycGMKLSAgICBwaHAtbGRhcCAoaWYgeW91IHdpbGwgYmUgdXNpbmcgTERBUCBhdXRoZW50aWNhdGlvbikKIAogICAgQS4gSW5zdGFsbCB0aGUgUmVxdWlyZWQgTGludXggUGFja2FnZXMgJiBQSFAgTW9kdWxlcwogCkBAIC0yMjUsMTQgKzIyNiwxNCBAQAogICAgICAgQ29weSB0aGUgd2ViIGRpcmVjdG9yeSB0byBhIGxvY2F0aW9uIHVuZGVyIHRoZSB3ZWIgcm9vdCBvZiB5b3VyIHdlYgogICAgICAgc2VydmVyIGFuZCBuYXZpZ2F0ZSB0byB0aGUgZGVzdGluYXRpb24gLmh0LWluYyBzdWJkaXJlY3Rvcnk6CiAKLSAgICAgICAgY3AgLWFyIGFwYWNoZS1WQ0wtMi41L3dlYi8gL3Zhci93d3cvaHRtbC92Y2wtMi41Ci0gICAgICAgIGxuIC1zIC92YXIvd3d3L2h0bWwvdmNsLTIuNSAvdmFyL3d3dy9odG1sL3ZjbAorICAgICAgICBjcCAtYXIgYXBhY2hlLVZDTC0yLjUuMS93ZWIvIC92YXIvd3d3L2h0bWwvdmNsLTIuNS4xCisgICAgICAgIGxuIC1zIC92YXIvd3d3L2h0bWwvdmNsLTIuNS4xIC92YXIvd3d3L2h0bWwvdmNsCiAgICAgICAgIGNkIC92YXIvd3d3L2h0bWwvdmNsLy5odC1pbmMKIAogICAgICAgSWYgU0VMaW51eCBpcyBlbmFibGVkLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIHNldCB0aGUgY29udGV4dCBvZiB0aGUKICAgICAgIHdlYiBjb2RlIHRvIGh0dHBkX3N5c19jb250ZW50X3QKIAotICAgICAgICBjaGNvbiAtUiAtdCBodHRwZF9zeXNfY29udGVudF90IC92YXIvd3d3L2h0bWwvdmNsLTIuNQorICAgICAgICBjaGNvbiAtUiAtdCBodHRwZF9zeXNfY29udGVudF90IC92YXIvd3d3L2h0bWwvdmNsLTIuNS4xCiAKICAgICAgIENvcHkgc2VjcmV0cy1kZWZhdWx0LnBocCB0byBzZWNyZXRzLnBocDoKIApAQCAtMzUzLDggKzM1NCw4IEBACiAgICBQcmVyZXF1aXNpdGVzIFRoZSBmb2xsb3dpbmcgbWFuYWdlbWVudCBub2RlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYXNzdW1lCiAgICB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZXNlIHByZXZpb3VzIHNlY3Rpb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQ6CiAKLSAgICBWQ0wgMi41IERhdGFiYXNlIEluc3RhbGxhdGlvbgotICAgIFZDTCAyLjUgV2ViIENvZGUgSW5zdGFsbGF0aW9uCisgICAgVkNMIDIuNS4xIERhdGFiYXNlIEluc3RhbGxhdGlvbgorICAgIFZDTCAyLjUuMSBXZWIgQ29kZSBJbnN0YWxsYXRpb24KIAogICAgU3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zOgogCkBAIC0zOTIsMTEgKzM5MywxMiBAQAogCiAgICBUaGUgVkNMIG1hbmFnZW1lbnQgbm9kZSBkYWVtb24gKHZjbGQpIGlzIHdyaXR0ZW4gaW4gUGVybCBhbmQgaGFzIGJlZW4gdGVzdGVkCiAgICBvbiBQZXJsIDUuMTAgYW5kIDUuMTYuIFRoZSBmb2xsb3dpbmcgUGVybCBtb2R1bGVzIGF2YWlsYWJsZSBmcm9tIENQQU4gYXJlCi0gICBhbHNvIHJlcXVpcmVkIChzZWUgc3RlcCAyIGJlbG93IGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zKToKKyAgIGFsc28gcmVxdWlyZWQgKHNlZSBzdGVwIEIgYmVsb3cgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMpOgogCiAgICAgQ3J5cHQ6OkNCQyAtIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjcnlwdG9ncmFwaGljIGNpcGhlciBibG9jayBjaGFpbmluZyBtb2RlCiAgICAgQ3J5cHQ6Ok9wZW5TU0w6OlJTQSAtIFJTQSBlbmNvZGluZyBhbmQgZGVjb2RpbmcsIHVzaW5nIHRoZSBvcGVuU1NMIGxpYnJhcmllcwogICAgIENyeXB0OjpSaWpuZGFlbCAtIENyeXB0OjpDQkMgY29tcGxpYW50IFJpam5kYWVsIGVuY3J5cHRpb24gbW9kdWxlCisgICAgREJEOjpNeVNRTCAtIE15U1FMIGRyaXZlciBmb3IgdGhlIFBlcmw1IERhdGFiYXNlIEludGVyZmFjZSAoREJJKQogICAgIERCSSAtIEdlbmVyaWMgRGF0YWJhc2UgSW50ZXJmYWNlCiAgICAgRGlnZXN0OjpTSEExIC0gTklTVCBTSEEgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCiAgICAgRXhjZXB0aW9uOjpDbGFzczo6QmFzZSAtIGJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbiBvYmplY3RzCkBAIC00MDgsNiArNDEwLDcgQEAKICAgICBNYWlsOjpNYWlsZXIgLSBTaW1wbGUgbWFpbCBhZ2VudCBpbnRlcmZhY2UKICAgICBOZXQ6OkphYmJlciAtIEphYmJlciBwZXJsIGxpYnJhcnkKICAgICBOZXQ6Ok5ldG1hc2sgLSBwYXJzZSwgbWFuaXB1bGF0ZSBhbmQgbG9va3VwIElQIG5ldHdvcmsgYmxvY2tzCisgICAgTmV0OjpQaW5nOjpFeHRlcm5hbCAtIENyb3NzLXBsYXRmb3JtIFBlcmwgaW50ZXJmYWNlIHRvICJwaW5nIiB1dGlsaXRpZXMKICAgICBOZXQ6OlNTSDo6RXhwZWN0IC0gYSB3cmFwcGVyIHRvIHRoZSBzc2ggZXhlY3V0YWJsZSB0aGF0IGlzIGF2YWlsYWJsZSBpbgogICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0ncyBQQVRICiAgICAgT2JqZWN0OjpJbnNpZGVPdXQgLSBDb21wcmVoZW5zaXZlIGluc2lkZS1vdXQgb2JqZWN0IHN1cHBvcnQKQEAgLTQyMSw4ICs0MjQsOCBAQAogICAgICAgQ29weSB0aGUgbWFuYWdlbWVudG5vZGUgZGlyZWN0b3J5IHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3Ugd2FudCBpdCB0bwogICAgICAgcmVzaWRlICh0eXBpY2FsbHkgL3Vzci9sb2NhbCk6CiAKLSAgICAgICAgY3AgLWFyIGFwYWNoZS1WQ0wtMi41L21hbmFnZW1lbnRub2RlIC91c3IvbG9jYWwvdmNsLTIuNQotICAgICAgICBsbiAtcyAvdXNyL2xvY2FsL3ZjbC0yLjUgL3Vzci9sb2NhbC92Y2wKKyAgICAgICAgY3AgLWFyIGFwYWNoZS1WQ0wtMi41LjEvbWFuYWdlbWVudG5vZGUgL3Vzci9sb2NhbC92Y2wtMi41LjEKKyAgICAgICAgbG4gLXMgL3Vzci9sb2NhbC92Y2wtMi41LjEgL3Vzci9sb2NhbC92Y2wKIAogICAgQi4gSW5zdGFsbCB0aGUgUmVxdWlyZWQgTGludXggUGFja2FnZXMgJiBQZXJsIE1vZHVsZXMKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDIyZGJkNjIuLjlhMDA2MmUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsMTAgKzEsMTAgQEAKLUFwYWNoZSBWQ0wgMi41CitBcGFjaGUgVkNMIDIuNS4xCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBJTlNUQUxMQVRJT04KIAogUGxlYXNlIHNlZSB0aGUgSU5TVEFMTEFUSU9OIGZpbGUgb3IgdGhlIGluc3RhbGxhdGlvbiBndWlkZSBvbiB0aGUgQXBhY2hlIFZDTAotd2Vic2l0ZS4gKGh0dHA6Ly92Y2wuYXBhY2hlLm9yZy9kb2NzL1ZDTDI1SW5zdGFsbEd1aWRlLmh0bWwpCit3ZWJzaXRlLiAoaHR0cDovL3ZjbC5hcGFjaGUub3JnL2RvY3MvVkNMMjUxSW5zdGFsbEd1aWRlLmh0bWwpCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBTWVNURU0gUkVRVUlSRU1FTlRTCkBAIC0xNCw3ICsxNCw3IEBACiAtLS0tLS0tLS0tLS0KIAogVkNMIHdlYiBzZXJ2ZXIgTGludXggcGFja2FnZXM6Ci0qIEFwYWNoZSBIVFRQIFNlcnZlciB2MS4zIG9yIHYyLnggd2l0aCBTU0wgZW5hYmxlZAorKiBBcGFjaGUgSFRUUCBTZXJ2ZXIgdjIueCB3aXRoIFNTTCBlbmFibGVkCiAqIFBIUCA1LjAgb3IgbGF0ZXIKIAogVkNMIHdlYiBzZXJ2ZXIgUEhQIG1vZHVsZXM6CkBAIC00MCw4ICs0MCw3IEBACiAKIFZDTCBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBvcGVyYXRpbmcgc3lzdGVtczoKICogQ2VudE9TIHJlbGVhc2UgNi45IChGaW5hbCkKLSogQ2VudE9TIExpbnV4IHJlbGVhc2UgNy4zLjE2MTEgKENvcmUpCi0qIFJlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBTZXJ2ZXIgcmVsZWFzZSA2LjggKFNhbnRpYWdvKQorKiBDZW50T1MgTGludXggcmVsZWFzZSA3LjYuMTgxMCAoQ29yZSkKICogUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IFNlcnZlciByZWxlYXNlIDcuMyAoTWFpcG8pCiAKIFJlcXVpcmVkIExpbnV4IFBhY2thZ2VzOgpAQCAtNzIsNiArNzEsNyBAQAogKiBDcnlwdDo6Q0JDCiAqIENyeXB0OjpPcGVuU1NMOjpSU0EKICogQ3J5cHQ6OlJpam5kYWVsCisqIERCRDo6TXlTUUwKICogREJJCiAqIERpZ2VzdDo6U0hBMQogKiBFeGNlcHRpb246OkNsYXNzOjpCYXNlCkBAIC04Myw2ICs4Myw3IEBACiAqIE1haWw6Ok1haWxlcgogKiBOZXQ6OkphYmJlcgogKiBOZXQ6Ok5ldG1hc2sKKyogTmV0OjpQaW5nOjpFeHRlcm5hbAogKiBOZXQ6OlNTSDo6RXhwZWN0CiAqIE9iamVjdDo6SW5zaWRlT3V0CiAqIFJQQzo6WE1MOjpDbGllbnQKQEAgLTExOSwyMSArMTIwLDExIEBACiAgIGh0dHA6Ly93d3cudm13YXJlLmNvbS9zdXBwb3J0L2RldmVsb3Blci92aXBlcmx0b29sa2l0LwogICBUaGlzIGlzIG5vdCByZXF1aXJlZCBpZiBwcm92aXNpb25pbmcgdmlydHVhbCBtYWNoaW5lcyBvbiBzdGFuZGFsb25lIFZNd2FyZSBFU1gKICAgb3IgRVNYaSBob3N0cy4KLSogV2luZG93cyBYUCAmIFdpbmRvd3MgU2VydmVyIDIwMDMgYmFyZS1tZXRhbCBwcm92aXNpb25pbmcKLSAgVGhlIFN5c3ByZXAgdXRpbGl0eSBpcyByZXF1aXJlZCB0byBwcm92aXNpb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIKLSAgMjAwMyBiYXJlLW1ldGFsIGltYWdlcy4gVGhlIHV0aWxpdHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBNaWNyb3NvZnQuIEl0IGlzCi0gIGluY2x1ZGVkIGluIG5ld2VyIHZlcnNpb25zIG9mIFdpbmRvd3MuIFN5c3ByZXAgaXMgbm90IHJlcXVpcmVkIHRvIHByb3Zpc2lvbgotICB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzLgotKiBKYWJiZXIgbm90aWZpY2F0aW9ucwotICBWQ0wgaGFzIHRoZSBhYmlsaXR5IHRvIHNlbmQgaW5zdGFudCBtZXNzYWdlIG5vdGlmaWNhdGlvbnMgdXNpbmcgSmFiYmVyLiBUaGlzCi0gIGZlYXR1cmUgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGNvbmZpZ3VyaW5nIHRoZQotICAiamFiYmVyPVt5ZXN8bm9dIiBwcm9wZXJ0eSBpbiB0aGUgdmNsZC5jb25mIGZpbGUuIElmIHRoZSBKYWJiZXIgbm90aWZpY2F0aW9uCi0gIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIE5ldDo6SmFiYmVyIFBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQlVORExFRCAzUkQgUEFSVFkgU09GVFdBUkUKIAotQSBjb3B5IG9mIERvam8gVG9vbGtpdCB2ZXJzaW9uIDEuNi4yIGlzIGluY2x1ZGVkIGluIHVuZGVyIHdlYi9kb2pvLgorQSBjb3B5IG9mIERvam8gVG9vbGtpdCB2ZXJzaW9uIDEuNi41IGlzIGluY2x1ZGVkIGluIHVuZGVyIHdlYi9kb2pvLgogCiBQb3J0aW9ucyBvZiB0aGUgcGhwc2VjbGliIChodHRwOi8vcGhwc2VjbGliLnNvdXJjZWZvcmdlLm5ldCkgcHJvamVjdCBhcmUKIGluY2x1ZGVkIHVuZGVyIHdlYi8uaHQtaW5jL3BocHNlY2xpYi4KQEAgLTE3OCw0ICsxNjksNCBAQAogVGhlIGJhY2tlbmQgbWFuYWdlbWVudCBub2RlIGNvZGUgYWxzbyB1c2VzIHRoZSBTU0ggcHJvdG9jb2wgYW5kIHB1YmxpYyBrZXkKIGF1dGhlbnRpY2F0aW9uIHRvIGNvbm5lY3QgdG8gYW5kIGNvbnRyb2wgY29tcHV0ZSBub2RlcyBwcm92aXNpb25lZCBieSBhIFZDTAogbWFuYWdlbWVudCBub2RlIHNlcnZlciBhcyB3ZWxsIGFzIG90aGVyIGhvc3RzIHRoYXQgY29tcHJpc2UgYSBWQ0wgc3lzdGVtIHN1Y2ggYXMKLWh5cGVydmlzb3JzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2h5cGVydmlzb3JzLgpkaWZmIC0tZ2l0IGEvUkVMRUFTRV9OT1RFUyBiL1JFTEVBU0VfTk9URVMKaW5kZXggOGIwYWZhNS4uZWQzYzBhOCAxMDA2NDQKLS0tIGEvUkVMRUFTRV9OT1RFUworKysgYi9SRUxFQVNFX05PVEVTCkBAIC0xLDQgKzEsNCBAQAotVkNMIDIuNQorVkNMIDIuNS4xCiAKIEkuIEludHJvIGFuZCBEZXNjcmlwdGlvbgogCkBAIC0yMSwyNyArMjEsMTIgQEAKIAogSUkuIE5vdGFibGUgQ2hhbmdlcwogCi1UaGUgZm9sbG93aW5nIGFyZSBzb21lIG5vdGFibGUgY2hhbmdlcyBmcm9tIHByZXZpb3VzIHJlbGVhc2VzLgorVGhpcyBpcyBwcmltYXJpbHkgYSBidWcgZml4IHJlbGVhc2UuIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgCitjaGFuZ2VzIHdvcnRoIGhpZ2hsaWdodGluZy4KIAotQWRkZWQ6Ci0KLSogU3VwcG9ydCBmb3IgV2luZG93cyAxMCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAxNiBpbWFnZXMKLSogUmVzcG9uc2l2ZSB0aGVtZSAoZHJvcGRvd25tZW51cykgdG8gd2ViIHNpdGUKLSogU3VwcG9ydCBmb3IgYXV0b21hdGljYWxseSBqb2luaW5nIFdpbmRvd3MgaW1hZ2VzIHRvIGFuIEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluCi0qIEJhc2ljIGF1dG9tYXRpYyBtb3VudGluZyBvZiBORlMgc2hhcmVzIGZvciBhbGwgdXNlcnMKLSogQ3VzdG9taXphdGlvbiBvZiBlbWFpbCBtZXNzYWdlcyBzZW50IHRvIHVzZXJzIG9uIGEgcGVyLWFmZmlsaWF0aW9uIGJhc2lzCi0qIFN1cHBvcnQgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlndXJhdGlvbiBvZiB1ZncgYW5kIGZpcmV3YWxsZC1iYXNlZCBmaXJld2FsbHMKLSAgd2l0aGluIExpbnV4IGltYWdlcwotKiBTdXBwb3J0IGZvciBOQVQgaG9zdHMgd2hpY2ggdXNlIHVmdyBvcyBmaXJld2FsbGQtYmFzZWQgZmlyZXdhbGxzIGluY2x1ZGluZwotICBVYnVudHUgYW5kIFJlZEhhdC9DZW50T1MgNyBhbmQgbGF0ZXIKLSogU3VwcG9ydCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBjdXN0b20gc2NyaXB0cyBvbiBhIG1hbmFnZW1lbnQgbm9kZSBhdCB2YXJpb3VzCi0gIHN0YWdlcyBvZiB0aGUgcmVzZXJ2YXRpb24KLSogRGlzcGxheSBvZiByZXNlcnZhdGlvbiB0aW1lcyBpbiB0aGUgdXNlcidzIG93biB0aW1lem9uZQotCi1SZW1vdmVkOgotCi0qIFNlcnZlciBQcm9maWxlcwotKiBVc2Ugb2YgdGhlIFdpbmRvd3MgQWRtaW5pc3RyYXRvciB1c2VyIGFjY291bnQgZm9yIGltYWdpbmcgcmVzZXJ2YXRpb25zCisqIFBIUCBjb2RlIHVwZGF0ZWQgdG8gd29yayB3aXRoIFBIUCA3LnguCisqIFJ1ZGltZW50YXJ5IE5GUyBmaWxlIHNoYXJlIG1vdW50aW5nIGV4dGVuZGVkIHRvIHdvcmsgd2l0aCBXaW5kb3dzCisqIEFkZGVkIG1ldGhvZCBmb3IgdXNpbmcgSFRNTCBpbiB1c2VyIGVtYWlscyB0aHJvdWdoIGV4dGVybmFsIHNjcmlwdAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtODQsNyArNjksOSBAQAogCiBJZiB5b3UgZmluZCBhIGJ1ZywgcGxlYXNlIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdG8gb3VyIEpJUkEgYnVnIHRyYWNraW5nIHN5c3RlbSBhdAogaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1ZDTCAoeW91IHdpbGwgbmVlZCB0byBzZXQgdXAgYW4gYWNjb3VudAotdGhlcmUgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeSBkb25lIHNvIC0gaXQncyBmcmVlIHRvIGFueW9uZSkuCit0aGVyZSBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28gLSBpdCdzIGZyZWUgdG8gYW55b25lKS4gSWYgaXQgaXMgYSBzZWN1cml0eQorYnVnLCBkbyBub3Qgb3BlbiBhIEpJUkEgaXNzdWUuIEluc3RlYWQgcmVwb3J0IGl0IGluIGFuIGVtYWlsIHRvCitzZWN1cml0eUBhcGFjaGUub3JnLgogCiBJZiB5b3Ugd291bGQgbGlrZSB0byByZXF1cmVzdCBhIG5ldyBmZWF0dXJlLCB5b3UgY2FuIGFsc28gc3VibWl0IHRoYXQgaW4gdGhlCiBzYW1lIHdheSB0aHJvdWdoIEpJUkEgKGp1c3Qgc2VsZWN0ICJOZXcgRmVhdHVyZSIgb3IgIkltcHJvdmVtZW50IiBhcyB0aGUgSXNzdWUKZGlmZiAtLWdpdCBhL1VQR1JBREUgYi9VUEdSQURFCmluZGV4IDQyNTZhZDEuLjZiMGQ4ZDEgMTAwNjQ0Ci0tLSBhL1VQR1JBREUKKysrIGIvVVBHUkFERQpAQCAtMSwxMCArMSwxMCBAQAotVXBncmFkaW5nIHRvIFZDTCAyLjUKK1VwZ3JhZGluZyB0byBWQ0wgMi41LjEKIAotVkNMIDIuNSBpcyB0aGUgc2Vjb25kIHJlbGVhc2UgdG8gaW5jbHVkZSBhbiB1cGdyYWRlIHNjcmlwdC4gQWxsIHlvdSBuZWVkIHRvCi11cGdyYWRlIFZDTCBpcyB0aGUgc2NyaXB0LiBJdCB3aWxsIGRvd25sb2FkIGFuZCB2YWxpZGF0ZSB0aGUgVkNMIHNvZnR3YXJlIGFuZAotdGhlbiB1cGdyYWRlIHlvdXIgc3lzdGVtLiBUaGUgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIHVwZ3JhZGUgYWxsIHRocmVlIHBhcnRzIG9mCi1WQ0wgKGRhdGFiYXNlLCB3ZWIgcG9ydGFsLCBhbmQgbWFuYWdlbWVudCBub2RlKSBvciB0byB1cGdyYWRlIGVhY2ggcGFydAotaW5kaXZpZHVhbGx5LgorVkNMIDIuNS4xIGNhbiBiZSB1cGdyYWRlZCB1c2luZyBhbiB1cGdyYWRlIHNjcmlwdC4gQWxsIHlvdSBuZWVkIHRvIHVwZ3JhZGUKK1ZDTCBpcyB0aGUgc2NyaXB0LiBJdCB3aWxsIGRvd25sb2FkIGFuZCB2YWxpZGF0ZSB0aGUgVkNMIHNvZnR3YXJlIGFuZCB0aGVuCit1cGdyYWRlIHlvdXIgc3lzdGVtLiBUaGUgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIHVwZ3JhZGUgYWxsIHRocmVlIHBhcnRzIG9mCitWQ0wgKGRhdGFiYXNlLCB3ZWIgcG9ydGFsLCBhbmQgbWFuYWdlbWVudCBub2RlKSBvbiBhIHNpbmdsZSBzeXN0ZW0gb3IgdG8KK3VwZ3JhZGUgZWFjaCBwYXJ0IGluZGl2aWR1YWxseSBvbiBzZXBhcmF0ZSBzeXN0ZW1zLgogCiBSdW5uaW5nIHRoZSB1cGdyYWRlIHNjcmlwdCB3aXRoIG5vIGFyZ3VtZW50cyB3aWxsIHN0ZXAgeW91IHRocm91Z2ggdXBncmFkaW5nCiBhbGwgdGhyZWUgcGFydHMgb2YgVkNMLgpAQCAtNTcsMTAxICs1Nyw5MyBAQAogIDIuIENyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgVkNMIGRhdGFiYXNlLiBUaGlzIHdpbGwgcHJvdmlkZSBhIHJlc3RvcmUgcG9pbnQgaWYKICAgICBuZWNlc3NhcnkuCiAKLSAgICBteXNxbGR1bXAgdmNsID4gfi92Y2wtcHJlMi41LXVwZ3JhZGUuc3FsCisgICAgbXlzcWxkdW1wIHZjbCA+IH4vdmNsLXByZTIuNS4xLXVwZ3JhZGUuc3FsCiAKICAzLiBVcGRhdGVzIHRoZSBkYXRhYmFzZSBzY2hlbWEuCiAKLSAgICBteXNxbCB2Y2wgPCAvcm9vdC9hcGFjaGUtVkNMLTIuNS9teXNxbC91cGRhdGUtdmNsLnNxbAorICAgIG15c3FsIHZjbCA8IC9yb290L2FwYWNoZS1WQ0wtMi41LjEvbXlzcWwvdXBkYXRlLXZjbC5zcWwKIAogIDQuIFBvc3NpYmx5IG1vdmUgb2xkIHdlYiBjb2RlLiBJZiAvdmFyL3d3dy9odG1sL3ZjbCBpcyBhIGRpcmVjdG9yeSwgcmVuYW1lIGl0Ci0gICAgdG8gL3Zhci93d3cvaHRtbC92Y2wtMi40LjIuIFRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB5b3UgaW5zdGFsbGVkIHRoZQorICAgIHRvIC92YXIvd3d3L2h0bWwvdmNsLTIuNS4gVGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB0aGF0IHlvdSBpbnN0YWxsZWQgdGhlCiAgICAgVkNMIHdlYiBjb2RlIGF0IC92YXIvd3d3L2h0bWwvdmNsLiBJZiB5b3UgaW5zdGFsbGVkIGl0IGVsc2V3aGVyZSwgcmVwbGFjZQogICAgIC92YXIvd3d3L2h0bWwvdmNsIHdpdGggeW91ciB2Y2wgd2ViIHJvb3QuCiAKLSAgICBtdiAvdmFyL3d3dy9odG1sL3ZjbCAvdmFyL3d3dy9odG1sL3ZjbC0yLjQuMgorICAgIG12IC92YXIvd3d3L2h0bWwvdmNsIC92YXIvd3d3L2h0bWwvdmNsLTIuNQogCiAgNS4gRGlzYWJsZSBhY2Nlc3MgdG8gdGhlIG9sZCB3ZWIgY29kZQogCi0gICAgZWNobyAiUmVxdWlyZSBhbGwgZGVuaWVkIiA+IC92YXIvd3d3L2h0bWwvdmNsLTIuNC4yLy5odGFjY2VzcworICAgIGVjaG8gIlJlcXVpcmUgYWxsIGRlbmllZCIgPiAvdmFyL3d3dy9odG1sL3ZjbC0yLjUvLmh0YWNjZXNzCiAKICA2LiBDb3B5IHRoZSBuZXcgY29kZSBpbiBwbGFjZQogCi0gICAgY3AgLWFyIC9yb290L2FwYWNoZS1WQ0wtMi41L3dlYiAvdmFyL3d3dy9odG1sL3ZjbC0yLjUKLSAgICBsbiAtc2ZuIC92YXIvd3d3L2h0bWwvdmNsLTIuNSAvdmFyL3d3dy9odG1sL3ZjbAorICAgIGNwIC1hciAvcm9vdC9hcGFjaGUtVkNMLTIuNS4xL3dlYiAvdmFyL3d3dy9odG1sL3ZjbC0yLjUuMQorICAgIGxuIC1zZm4gL3Zhci93d3cvaHRtbC92Y2wtMi41LjEgL3Zhci93d3cvaHRtbC92Y2wKIAotIDcuIENvcHkgeW91ciAyLjQuMiBjb25maWcgZmlsZXMKKyA3LiBDb3B5IHlvdXIgMi41IGNvbmZpZyBmaWxlcwogCi0gICAgY2QgL3Zhci93d3cvaHRtbC92Y2wtMi40LjIvLmh0LWluYworICAgIGNkIC92YXIvd3d3L2h0bWwvdmNsLTIuNS8uaHQtaW5jCiAgICAgY3AgY29uZi5waHAgc2VjcmV0cy5waHAgcHVia2V5LnBlbSBrZXlzLnBlbSAvdmFyL3d3dy9odG1sL3ZjbC8uaHQtaW5jCisgICAgY3AgY3J5cHRrZXkvY3J5cHRrZXlpZCBjcnlwdGtleS9wcml2YXRlLnBlbSAvdmFyL3d3dy9odG1sL3ZjbC8uaHQtaW5jL2NyeXB0a2V5LwogCiAgOC4gSWYgeW91IGFyZSB1c2luZyBTRUxpbnV4LCBzZXQgdGhlIGNvcnJlY3QgY29udGV4dDoKIAotICAgIGNoY29uIC1SIC10IGh0dHBkX3N5c19jb250ZW50X3QgL3Zhci93d3cvaHRtbC92Y2wtMi41Ci0gICAgY2hjb24gLXQgaHR0cGRfc3lzX3J3X2NvbnRlbnRfdCAvdmFyL3d3dy9odG1sL3ZjbC0yLjUvLmh0LWluYy9tYWludGVuYW5jZQotICAgIGNoY29uIC10IGh0dHBkX3N5c19yd19jb250ZW50X3QgL3Zhci93d3cvaHRtbC92Y2wtMi41Ly5odC1pbmMvY3J5cHRrZXkKKyAgICBjaGNvbiAtUiAtdCBodHRwZF9zeXNfY29udGVudF90IC92YXIvd3d3L2h0bWwvdmNsLTIuNS4xCisgICAgY2hjb24gLXQgaHR0cGRfc3lzX3J3X2NvbnRlbnRfdCAvdmFyL3d3dy9odG1sL3ZjbC0yLjUuMS8uaHQtaW5jL21haW50ZW5hbmNlCisgICAgY2hjb24gLXQgaHR0cGRfc3lzX3J3X2NvbnRlbnRfdCAvdmFyL3d3dy9odG1sL3ZjbC0yLjUuMS8uaHQtaW5jL2NyeXB0a2V5CiAKLSA5LiBVcGRhdGUgY29uZi5waHA6IHRoZSBmb2xsb3dpbmcgaXRlbSBuZWVkcyB0byBiZSByZW1vdmVkIGZyb20gdGhlIGNvbmYucGhwCisgOS4gVXBkYXRlIGNvbmYucGhwOiB0aGUgZm9sbG93aW5nIGl0ZW0gbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbmYucGhwCiAgICAgZmlsZToKIAogICAgIChkb24ndCBmb3JnZXQgdG8gZWRpdCBjb25mLnBocCBpbiB0aGUgKm5ldyogbG9jYXRpb24pCiAgICAgdmltIC92YXIvd3d3L2h0bWwvdmNsLy5odC1pbmMvY29uZi5waHAKIAotICAgIGRlZmluZSgiTUFYVk1MSU1JVCIsICIxMDAiKTsKKyAgICBkZWZpbmUoIlNTTE9GRkxPQUQiLCAwKTsKIAotMTAuIFVwZGF0ZSBzZWNyZXRzLnBocDogJGNyeXB0a2V5IGluIHNlY3JldHMucGhwIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCB1c2luZwotICAgIG9wZW5zc2wuIEdlbmVyYXRlIHRoZSB2YWx1ZSBhbmQgc2V0IGl0IGluIHNlY3JldHMucGhwOgotCi0gICAgb3BlbnNzbCByYW5kIDMyIHwgYmFzZTY0Ci0gICAgdmltIC92YXIvd3d3L2h0bWwvdmNsLy5odC1pbmMvc2VjcmV0cy5waHAKLSAKLSAgICAkY3J5cHRrZXkgPSAneHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCc7ICMgc2V0IHRoaXMgdG8gb3V0cHV0IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJvcGVuc3NsIHJhbmQgMzIgfCBiYXNlNjQiCi0KLTExLiBNYWtlIHRoZSBtYWludGVuYW5jZSBhbmQgY3J5cHRrZXkgZGlyZWN0b3JpZXMgd3JpdGFibGUgYnkgdGhlIHdlYiBzZXJ2ZXIKKzEwLiBNYWtlIHRoZSBtYWludGVuYW5jZSBhbmQgY3J5cHRrZXkgZGlyZWN0b3JpZXMgd3JpdGFibGUgYnkgdGhlIHdlYiBzZXJ2ZXIKICAgICB1c2VyLiBOb3JtYWxseSB0aGlzIGlzIHRoZSBhcGFjaGUgdXNlciwgaWYgdXNpbmcgYSBkaWZmZXJlbnQgdXNlciBjaGFuZ2UKICAgICBiZWxvdyBjb21tYW5kIGFjY29yZGluZ2x5LgogCiAgICAgY2hvd24gYXBhY2hlIC92YXIvd3d3L2h0bWwvdmNsLy5odC1pbmMvbWFpbnRlbmFuY2UKICAgICBjaG93biBhcGFjaGUgL3Zhci93d3cvaHRtbC92Y2wvLmh0LWluYy9jcnlwdGtleQogCi0xMi4gU3RhcnQgaHR0cGQgc2VydmljZQorMTEuIFN0YXJ0IGh0dHBkIHNlcnZpY2UKIAogICAgIHNlcnZpY2UgaHR0cGQgc3RhcnQKIAotMTMuIENoZWNrIHRlc3RzZXR1cC5waHA6IENoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBjb3JyZWN0IGJ5IHZpZXdpbmcgdGhlCisxMi4gQ2hlY2sgdGVzdHNldHVwLnBocDogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIGNvcnJlY3QgYnkgdmlld2luZyB0aGUKICAgICB0ZXN0c2V0dXAucGhwIHNjcmlwdCBpbiB5b3VyIGJyb3dzZXIuIFRoaXMgc2NyaXB0IGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUKICAgICBkaXJlY3RvcnkgYXMgdGhlIGluZGV4LnBocCBzY3JpcHQuIEkuZS4KIAogICAgIGh0dHBzOi8veW91ci5zaXRlLnVybC92Y2wvdGVzdHNldHVwLnBocAogCi0xNC4gQ29weSBvbGQgbWFuYWdlbWVudCBub2RlIGNvZGU6Ci0gICAgSWYgL3Vzci9sb2NhbC92Y2wgaXMgYSBkaXJlY3RvcnksIGNvcHkgaXQgdG8gL3Vzci9sb2NhbC92Y2wtMi40LjIsIHJlbmFtZQotICAgIC91c3IvbG9jYWwvdmNsIHRvIC91c3IvbG9jYWwvdmNsLTIuNSwgYW5kIGNyZWF0ZSBhIHN5bWxpbmsuCi0gICAgSWYgL3Vzci9sb2NhbC92Y2wgaXMgYSBzeW1saW5rIHRvIHZjbC0yLjQuMiwgY29weSAvdXNyL2xvY2FsL3ZjbC0yLjQuMiB0bwotICAgIC91c3IvbG9jYWwvdmNsLTIuNSBhbmQgdXBkYXRlIHRoZSBzeW1saW5rLgorMTMuIENvcHkgb2xkIG1hbmFnZW1lbnQgbm9kZSBjb2RlOgorICAgIElmIC91c3IvbG9jYWwvdmNsIGlzIGEgZGlyZWN0b3J5LCBjb3B5IGl0IHRvIC91c3IvbG9jYWwvdmNsLTIuNSwgcmVuYW1lCisgICAgL3Vzci9sb2NhbC92Y2wgdG8gL3Vzci9sb2NhbC92Y2wtMi41LjEsIGFuZCBjcmVhdGUgYSBzeW1saW5rLgorICAgIElmIC91c3IvbG9jYWwvdmNsIGlzIGEgc3ltbGluayB0byB2Y2wtMi41LCBjb3B5IC91c3IvbG9jYWwvdmNsLTIuNSB0bworICAgIC91c3IvbG9jYWwvdmNsLTIuNS4xIGFuZCB1cGRhdGUgdGhlIHN5bWxpbmsuCiAKICAgICAoZm9yIGRpcmVjdG9yeSkKLSAgICBjcCAtYXIgL3Vzci9sb2NhbC92Y2wgL3Vzci9sb2NhbC92Y2wtMi40LjIKLSAgICBtdiAvdXNyL2xvY2FsL3ZjbCAvdXNyL2xvY2FsL3ZjbC0yLjUKLSAgICBsbiAtcyAvdXNyL2xvY2FsL3ZjbC0yLjUgL3Vzci9sb2NhbC92Y2wKKyAgICBjcCAtYXIgL3Vzci9sb2NhbC92Y2wgL3Vzci9sb2NhbC92Y2wtMi41CisgICAgbXYgL3Vzci9sb2NhbC92Y2wgL3Vzci9sb2NhbC92Y2wtMi41LjEKKyAgICBsbiAtcyAvdXNyL2xvY2FsL3ZjbC0yLjUuMSAvdXNyL2xvY2FsL3ZjbAogCiAgICAgKGZvciBzeW1saW5rKQotICAgIGNwIC1hciAvdXNyL2xvY2FsL3ZjbC0yLjQuMiAvdXNyL2xvY2FsL3ZjbC0yLjUKLSAgICBsbiAtc2ZuIC91c3IvbG9jYWwvdmNsLTIuNSAvdXNyL2xvY2FsL3ZjbAorICAgIGNwIC1hciAvdXNyL2xvY2FsL3ZjbC0yLjUgL3Vzci9sb2NhbC92Y2wtMi41LjEKKyAgICBsbiAtc2ZuIC91c3IvbG9jYWwvdmNsLTIuNS4xIC91c3IvbG9jYWwvdmNsCiAKLTE1LiBDb3B5IHRoZSBuZXcgbWFuYWdlbWVudCBub2RlIGNvZGUgb3ZlciB0aGUgb2xkIGNvZGU6CisxNC4gQ29weSB0aGUgbmV3IG1hbmFnZW1lbnQgbm9kZSBjb2RlIG92ZXIgdGhlIG9sZCBjb2RlOgogCi0gICAgL2Jpbi9jcCAtYXIgL3Jvb3QvYXBhY2hlLVZDTC0yLjUvbWFuYWdlbWVudG5vZGUvKiAvdXNyL2xvY2FsL3ZjbC0yLjUKKyAgICAvYmluL2NwIC1hciAvcm9vdC9hcGFjaGUtVkNMLTIuNS4xL21hbmFnZW1lbnRub2RlLyogL3Vzci9sb2NhbC92Y2wtMi41LjEKIAotMTYuIFJ1biBpbnN0YWxsX3BlcmxfbGlicy5wbCB0byBhZGQgYW55IG5ldyBwZXJsIGxpYnJhcnkgcmVxdWlyZW1lbnRzOgorMTUuIFJ1biBpbnN0YWxsX3BlcmxfbGlicy5wbCB0byBhZGQgYW55IG5ldyBwZXJsIGxpYnJhcnkgcmVxdWlyZW1lbnRzOgogCiAgICAgL3Vzci9sb2NhbC92Y2wvYmluL2luc3RhbGxfcGVybF9saWJzLnBsCiAKLTE3LiBTdGFydCB2Y2xkIHNlcnZpY2UKKzE2LiBTdGFydCB2Y2xkIHNlcnZpY2UKIAogICAgIHNlcnZpY2UgdmNsZCBzdGFydAogCi0xOC4gTWFrZSBzb21lIHRlc3QgcmVzZXJ2YXRpb25zIGFuZCB3YXRjaCB0aGUgdmNsZC5sb2cgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgaXMKKzE3LiBNYWtlIHNvbWUgdGVzdCByZXNlcnZhdGlvbnMgYW5kIHdhdGNoIHRoZSB2Y2xkLmxvZyB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcwogICAgIHdvcmtpbmcgY29ycmVjdGx5LgogCiAgICAgdGFpbCAtZiAvdmFyL2xvZy92Y2xkLmxvZwpkaWZmIC0tZ2l0IGEvZG9hcF92Y2wucmRmIGIvZG9hcF92Y2wucmRmCmluZGV4IDQyN2NhZmEuLmZhNWMxYWIgMTAwNjQ0Ci0tLSBhL2RvYXBfdmNsLnJkZgorKysgYi9kb2FwX3ZjbC5yZGYKQEAgLTQwLDYgKzQwLDEzIEBACiAgICAgPGNhdGVnb3J5IHJkZjpyZXNvdXJjZT0iaHR0cDovL3Byb2plY3RzLmFwYWNoZS5vcmcvY2F0ZWdvcnkvY2xvdWQiIC8+CiAgICAgPHJlbGVhc2U+CiAgICAgICA8VmVyc2lvbj4KKyAgICAgICAgPG5hbWU+QXBhY2hlIFZDTCAyLjUuMTwvbmFtZT4KKyAgICAgICAgPGNyZWF0ZWQ+MjAxOS0wNy0yNTwvY3JlYXRlZD4KKyAgICAgICAgPHJldmlzaW9uPjIuNS4xPC9yZXZpc2lvbj4KKyAgICAgIDwvVmVyc2lvbj4KKyAgICA8L3JlbGVhc2U+CisgICAgPHJlbGVhc2U+CisgICAgICA8VmVyc2lvbj4KICAgICAgICAgPG5hbWU+QXBhY2hlIFZDTCAyLjU8L25hbWU+CiAgICAgICAgIDxjcmVhdGVkPjIwMTctMDctMjc8L2NyZWF0ZWQ+CiAgICAgICAgIDxyZXZpc2lvbj4yLjU8L3JldmlzaW9uPgpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvYmluL2hlYWx0aF9jaGVjay5wbCBiL21hbmFnZW1lbnRub2RlL2Jpbi9oZWFsdGhfY2hlY2sucGwKaW5kZXggOWFmNmI3Zi4uNDY3NjgzNyAxMDA3NTUKLS0tIGEvbWFuYWdlbWVudG5vZGUvYmluL2hlYWx0aF9jaGVjay5wbAorKysgYi9tYW5hZ2VtZW50bm9kZS9iaW4vaGVhbHRoX2NoZWNrLnBsCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdygpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9iaW4vaW5zdGFsbF9wZXJsX2xpYnMucGwgYi9tYW5hZ2VtZW50bm9kZS9iaW4vaW5zdGFsbF9wZXJsX2xpYnMucGwKaW5kZXggODEyYjk1Ny4uZTk0Njk0OCAxMDA3NTUKLS0tIGEvbWFuYWdlbWVudG5vZGUvYmluL2luc3RhbGxfcGVybF9saWJzLnBsCisrKyBiL21hbmFnZW1lbnRub2RlL2Jpbi9pbnN0YWxsX3BlcmxfbGlicy5wbApAQCAtNjMsMTMgKzYzLDIwIEBACiAJJ3BlcmwtREJELU15U1FMJywKIAkncGVybC1EQkknLAogCSdwZXJsLURpZ2VzdC1TSEExJywKKwkncGVybC1FeHBlY3QnLAorCSdwZXJsLUZyb250aWVyLVJQQycsCisJJ3BlcmwtRnJvbnRpZXItUlBDLUNsaWVudCcsCiAJJ3BlcmwtSU8tU3RyaW5nJywKIAkncGVybC1KU09OJywKKwkncGVybC1MV1AtUHJvdG9jb2wtaHR0cHMnLAogCSdwZXJsLU1haWxUb29scycsCisJJ3BlcmwtTW8nLAogCSdwZXJsLU5ldC1KYWJiZXInLAogCSdwZXJsLU5ldC1OZXRtYXNrJywKIAkncGVybC1OZXQtU1NILUV4cGVjdCcsCisJJ3BlcmwtT2JqZWN0LUluc2lkZU91dCcsCiAJJ3BlcmwtUlBDLVhNTCcsCisJJ3BlcmwtU2NhbGFyLUxpc3QtVXRpbHMnLAogCSdwZXJsLVRleHQtQ1NWX1hTJywKIAkncGVybC1UaW1lLUhpUmVzJywKIAkncGVybC1YTUwtU2ltcGxlJywKQEAgLTc5LDIwICs4NiwxNyBAQAogCiBteSBAUEVSTF9NT0RVTEVTID0gKAogCSdDUEFOJywKLQknREJJJywKKwknQ3J5cHQ6OkNCQycsCiAJJ0RpZ2VzdDo6U0hBMScsCiAJJ0Zyb250aWVyOjpDbGllbnQnLAorCSdJTzo6U3RyaW5nJywKIAknTFdQOjpQcm90b2NvbDo6aHR0cHMnLAotCSdNYWlsOjpNYWlsZXInLAogCSdNbzo6YnVpbGRlcicsCisJJ05ldDo6UGluZzo6RXh0ZXJuYWwnLAogCSdOZXQ6OlNTSDo6RXhwZWN0JywKIAknT2JqZWN0OjpJbnNpZGVPdXQnLAotCSdSUEM6OlhNTCcsCiAJJ1NjYWxhcjo6VXRpbCcsCi0JJ1Rlcm06OkFOU0lDb2xvcicsCi0JJ1RpbWU6OkhpUmVzJywKLQknVVJJJywKLQknWUFNTCcsCisJJ1RleHQ6OkNTVl9YUycsCiApOwogCQogIyBTdG9yZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaW4gaGFzaApkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvYmluL21vbml0b3JfdmNsZC5wbCBiL21hbmFnZW1lbnRub2RlL2Jpbi9tb25pdG9yX3ZjbGQucGwKaW5kZXggZmEwYjc5Ni4uOWVhNjM2ZSAxMDA3NTUKLS0tIGEvbWFuYWdlbWVudG5vZGUvYmluL21vbml0b3JfdmNsZC5wbAorKysgYi9tYW5hZ2VtZW50bm9kZS9iaW4vbW9uaXRvcl92Y2xkLnBsCkBAIC01Myw3ICs1Myw3IEBACiB1c2UgbGliICIkRmluZEJpbjo6QmluLy4uL2xpYiI7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpAQCAtMTcwLDI3ICsxNzAsMzkgQEAKIH0KIAogbXkgJGN1cnJlbnRfZXBvY2hfc2Vjb25kcyA9IGNvbnZlcnRfdG9fZXBvY2hfc2Vjb25kcygpOwotbXkgJGxhc3RjaGVja2luX2Vwb2NoX3NlY29uZHMgPSBjb252ZXJ0X3RvX2Vwb2NoX3NlY29uZHMoJGxhc3RjaGVja2luX3RpbWVzdGFtcCk7CitteSAkY3VycmVudF90aW1lc3RhbXAgPSBtYWtlZGF0ZXN0cmluZygpOworbXkgJGxhc3RjaGVja2luX2Vwb2NoX3NlY29uZHMgPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntsYXN0Y2hlY2tpbl9lcG9jaH07CiBteSAkbGFzdGNoZWNraW5fc2Vjb25kc19hZ28gPSAoJGN1cnJlbnRfZXBvY2hfc2Vjb25kcyAtICRsYXN0Y2hlY2tpbl9lcG9jaF9zZWNvbmRzKTsKIAorIyBUaGlzIG1lc3NhZ2UgZGlzcGxheXMgdGhlIHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYW5hZ2VtZW50IG5vZGUgYW5kIHRoZSBkYXRhYmFzZQorbXkgJGRldGFpbGVkX3RzX21lc3NhZ2UgPSA8PCJFTkRfTUVTU0FHRSI7CisJQ3VycmVudCBUaW1lID0gJGN1cnJlbnRfdGltZXN0YW1wCisJQ3VycmVudCBlcG9jaCA9ICRjdXJyZW50X2Vwb2NoX3NlY29uZHMKKwlMYXN0IENoZWNraW4gVGltZSA9ICRsYXN0Y2hlY2tpbl90aW1lc3RhbXAKKwlMYXN0IENoZWNraW4gZXBvY2ggPSAkbGFzdGNoZWNraW5fZXBvY2hfc2Vjb25kcworRU5EX01FU1NBR0UKKwogaWYgKCRsYXN0Y2hlY2tpbl9zZWNvbmRzX2FnbyA8IDApIHsKLQlwcmludF93YXJuaW5nKCIkbWFuYWdlbWVudF9ub2RlX25hbWUgbGFzdCBjaGVja2luIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZTogJGxhc3RjaGVja2luX3RpbWVzdGFtcCwgZXhpdGluZyIpOworCXByaW50X3dhcm5pbmcoIiRtYW5hZ2VtZW50X25vZGVfbmFtZSBsYXN0IGNoZWNraW4gdGltZSBpcyBpbiB0aGUgZnV0dXJlOiAkbGFzdGNoZWNraW5fdGltZXN0YW1wKCRsYXN0Y2hlY2tpbl9lcG9jaF9zZWNvbmRzKSwgZXhpdGluZyIpOwogfQogZWxzaWYgKCRsYXN0Y2hlY2tpbl9zZWNvbmRzX2FnbyA8ICRsYXN0Y2hlY2tpbl93YXJuaW5nX3NlY29uZHMpIHsKLQlwcmludF9tZXNzYWdlKCIkbWFuYWdlbWVudF9ub2RlX25hbWUgbGFzdCBjaGVja2VkIGluICRsYXN0Y2hlY2tpbl9zZWNvbmRzX2FnbyBzZWNvbmRzIGFnbyBhdCAkbGFzdGNoZWNraW5fdGltZXN0YW1wIik7CisJcHJpbnRfbWVzc2FnZSgiJG1hbmFnZW1lbnRfbm9kZV9uYW1lIGxhc3QgY2hlY2tlZCBpbiAkbGFzdGNoZWNraW5fc2Vjb25kc19hZ28gc2Vjb25kcyBhZ28gYXQgJGxhc3RjaGVja2luX3RpbWVzdGFtcCgkbGFzdGNoZWNraW5fZXBvY2hfc2Vjb25kcykiKTsKIH0KIGVsc2lmICgkbGFzdGNoZWNraW5fc2Vjb25kc19hZ28gPj0gJGxhc3RjaGVja2luX2NyaXRpY2FsX3NlY29uZHMpIHsKLQlteSAkY3JpdGljYWxfbWVzc2FnZSA9ICJjcml0aWNhbCB0aHJlc2hvbGQgZXhjZWVkZWQsICRtYW5hZ2VtZW50X25vZGVfbmFtZSBsYXN0IGNoZWNrZWQgaW4gJGxhc3RjaGVja2luX3NlY29uZHNfYWdvIHNlY29uZHMgYWdvIGF0ICRsYXN0Y2hlY2tpbl90aW1lc3RhbXAiOworCW15ICRjcml0aWNhbF9tZXNzYWdlID0gImNyaXRpY2FsIHRocmVzaG9sZCBleGNlZWRlZCwgJG1hbmFnZW1lbnRfbm9kZV9uYW1lIGxhc3QgY2hlY2tlZCBpbiAkbGFzdGNoZWNraW5fc2Vjb25kc19hZ28gc2Vjb25kcyBhZ28gYXQgJGxhc3RjaGVja2luX3RpbWVzdGFtcCgkbGFzdGNoZWNraW5fZXBvY2hfc2Vjb25kcykiOwogCSMgQXR0ZW1wdCB0byByZXN0YXJ0IHRoZSB2Y2xkIHNlcnZpY2UKIAlpZiAoJG1uX29zLT5yZXN0YXJ0X3NlcnZpY2UoJHZjbGRfc2VydmljZV9uYW1lKSkgewogCQlwcmludF9jcml0aWNhbCgiJGNyaXRpY2FsX21lc3NhZ2UsICR2Y2xkX3NlcnZpY2VfbmFtZSBzZXJ2aWNlIHJlc3RhcnRlZCIpOworCQlwcmludF9jcml0aWNhbCgkZGV0YWlsZWRfdHNfbWVzc2FnZSk7CiAJfQogCWVsc2UgewogCQlwcmludF9jcml0aWNhbCgiJGNyaXRpY2FsX21lc3NhZ2UsIGZhaWxlZCB0byByZXN0YXJ0ICR2Y2xkX3NlcnZpY2VfbmFtZSBzZXJ2aWNlIik7CisJCXByaW50X2NyaXRpY2FsKCRkZXRhaWxlZF90c19tZXNzYWdlKTsKIAl9CiB9CiBlbHNlIHsKLQlwcmludF9jcml0aWNhbCgibGFzdCBjaGVja2luIHdhcm5pbmcgdGhyZXNob2xkIGV4Y2VlZGVkLCAkbWFuYWdlbWVudF9ub2RlX25hbWUgbGFzdCBjaGVja2VkIGluICRsYXN0Y2hlY2tpbl9zZWNvbmRzX2FnbyBzZWNvbmRzIGFnbyBhdCAkbGFzdGNoZWNraW5fdGltZXN0YW1wIik7CisJcHJpbnRfY3JpdGljYWwoImxhc3QgY2hlY2tpbiB3YXJuaW5nIHRocmVzaG9sZCBleGNlZWRlZCwgJG1hbmFnZW1lbnRfbm9kZV9uYW1lIGxhc3QgY2hlY2tlZCBpbiAkbGFzdGNoZWNraW5fc2Vjb25kc19hZ28gc2Vjb25kcyBhZ28gYXQgJGxhc3RjaGVja2luX3RpbWVzdGFtcCgkbGFzdGNoZWNraW5fZXBvY2hfc2Vjb25kcykiKTsKKwlwcmludF9jcml0aWNhbCgkZGV0YWlsZWRfdHNfbWVzc2FnZSk7CiB9CiAKIHByaW50X21lc3NhZ2UoJ2RvbmUnKTsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2Jpbi91cGdyYWRlX2RhdGFiYXNlLnBsIGIvbWFuYWdlbWVudG5vZGUvYmluL3VwZ3JhZGVfZGF0YWJhc2UucGwKaW5kZXggMTJjZWU4Ni4uMWE2NzEwYyAxMDA3NTUKLS0tIGEvbWFuYWdlbWVudG5vZGUvYmluL3VwZ3JhZGVfZGF0YWJhc2UucGwKKysrIGIvbWFuYWdlbWVudG5vZGUvYmluL3VwZ3JhZGVfZGF0YWJhc2UucGwKQEAgLTQxLDcgKzQxLDcgQEAKIHVzZSBsaWIgIiRGaW5kQmluOjpCaW4vLi4vbGliIjsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvYmluL3ZjbGQgYi9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZAppbmRleCA1ZGI5NjVkLi4yZGQ5MTljIDEwMDc1NQotLS0gYS9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZAorKysgYi9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZApAQCAtNDMsNyArNDMsNyBAQAogdXNlIGJhc2UgcXcoKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvYmluL3ZjbG1lc3NhZ2VzLnBsIGIvbWFuYWdlbWVudG5vZGUvYmluL3ZjbG1lc3NhZ2VzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhYTg0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsbWVzc2FnZXMucGwKQEAgLTAsMCArMSwyMTggQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1c2UgR2V0b3B0OjpMb25nOwordXNlIFlBTUw7Cit1c2UgREJJOwordXNlIERhdGE6OkR1bXBlcjsKKworbXkgJGdldG5hbWVzID0gMDsKK215ICRkdW1wbWVzc2FnZSA9ICcnOworbXkgJHNldG1lc3NhZ2UgPSAnJzsKK215ICRyZXNldG1lc3NhZ2UgPSAnJzsKK215ICRodG1sZmlsZSA9ICcnOworbXkgJHN1YmplY3QgPSAnJzsKK215ICRoZWxwID0gMDsKKworR2V0T3B0aW9ucyAoJ2dldG1lc3NhZ2VuYW1lcycgPT4gXCRnZXRuYW1lcywKKyAgICAgICAgICAgICdkdW1wbWVzc2FnZTpzJyA9PiBcJGR1bXBtZXNzYWdlLAorICAgICAgICAgICAgJ3Jlc2V0bWVzc2FnZTpzJyA9PiBcJHJlc2V0bWVzc2FnZSwKKyAgICAgICAgICAgICdzZXRtZXNzYWdlOnMnID0+IFwkc2V0bWVzc2FnZSwKKyAgICAgICAgICAgICdodG1sZmlsZTpzJyA9PiBcJGh0bWxmaWxlLAorICAgICAgICAgICAgJ3N1YmplY3Q6cycgPT4gXCRzdWJqZWN0LAorICAgICAgICAgICAgJ2hlbHB8PycgPT4gXCRoZWxwKTsKKworaWYgKCRoZWxwIHx8CisJKCRnZXRuYW1lcyA9PSAxICYmICgkZHVtcG1lc3NhZ2UgbmUgJycgfHwgJHNldG1lc3NhZ2UgbmUgJycgfHwgJHJlc2V0bWVzc2FnZSBuZSAnJyB8fCAkaHRtbGZpbGUgbmUgJycgfHwgJHN1YmplY3QgbmUgJycpKSB8fAorCSgkZ2V0bmFtZXMgPT0gMCAmJiAkZHVtcG1lc3NhZ2UgbmUgJycgJiYgKCRzZXRtZXNzYWdlIG5lICcnIHx8ICRyZXNldG1lc3NhZ2UgbmUgJycgfHwgJGh0bWxmaWxlIG5lICcnIHx8ICRzdWJqZWN0IG5lICcnKSkgfHwKKwkoJGdldG5hbWVzID09IDAgJiYgJHJlc2V0bWVzc2FnZSBuZSAnJyAmJiAoJHNldG1lc3NhZ2UgbmUgJycgfHwgJGR1bXBtZXNzYWdlIG5lICcnIHx8ICRodG1sZmlsZSBuZSAnJyB8fCAkc3ViamVjdCBuZSAnJykpIHx8CisJKCRnZXRuYW1lcyA9PSAwICYmICRzZXRtZXNzYWdlIG5lICcnICYmICgkZHVtcG1lc3NhZ2UgbmUgJycgfHwgJHJlc2V0bWVzc2FnZSBuZSAnJyB8fCAkaHRtbGZpbGUgZXEgJycgfHwgJHN1YmplY3QgZXEgJycpKSB8fAorCSgkZ2V0bmFtZXMgPT0gMCAmJiAkc2V0bWVzc2FnZSBlcSAnJyAmJiAkZHVtcG1lc3NhZ2UgZXEgJycgJiYgJHJlc2V0bWVzc2FnZSBlcSAnJykpCit7CisJcHJpbnQgIlVzYWdlOlxuXG4iOworCXByaW50ICJ2Y2xtZXNzYWdlcy5wbCAtLWdldG1lc3NhZ2VuYW1lc1xuIjsKKwlwcmludCAidmNsbWVzc2FnZXMucGwgLS1kdW1wbWVzc2FnZSAnPG5hbWUgb2YgbWVzc2FnZT4nXG4iOworCXByaW50ICJ2Y2xtZXNzYWdlcy5wbCAtLXNldG1lc3NhZ2UgJzxuYW1lIG9mIG1lc3NhZ2U+JyAtLWh0bWxmaWxlIDxmaWxlbmFtZT4gLS1zdWJqZWN0IDxtZXNzYWdlIHN1YmplY3Q+XG4iOworCXByaW50ICJ2Y2xtZXNzYWdlcy5wbCAtLXJlc2V0bWVzc2FnZSAnPG5hbWUgb2YgbWVzc2FnZT4nXG5cbiI7CisJcHJpbnQgInZjbG1lc3NhZ2VzLnBsIC0taGVscHwtP1xuXG4iOworCXByaW50ICJXaGVyZVxuXG4iOworCXByaW50ICItLWdldG1lc3NhZ2VuYW1lcyBkaXNwbGF5cyBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkXG4iOworCXByaW50ICItLWR1bXBtZXNzYWdlIGRpc3BsYXlzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbWVzc2FnZVxuIjsKKwlwcmludCAiLS1zZXRtZXNzYWdlIHNldHMgdGhlIHZhbHVlIG9mIGEgbWVzc2FnZSB0byB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBmaWxlXG4iOworCXByaW50ICItLXJlc2V0bWVzc2FnZSBzZXRzIHRoZSB2YWx1ZSBvZiBhIG1lc3NhZ2UgYmFjayB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYXMgZGlzdHJpYnV0ZWQgd2l0aCBWQ0xcblxuIjsKKwlwcmludCAiPG5hbWUgb2YgbWVzc2FnZT4gPSB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZSAoZW5jbG9zZSBpbiBzaW5nbGUgcXVvdGVzKVxuIjsKKwlwcmludCAiXHR1c2UgLS1nZXRtZXNzYWdlbmFtZXMgdG8gZ2V0IGEgbGlzdCBvZiBtZXNzYWdlIG5hbWVzXG5cbiI7CisJcHJpbnQgIjxmaWxlbmFtZT4gPSBmaWxlbmFtZSAoaW5jbHVkaW5nIHBhdGgpIG9mIGZpbGUgY29udGFpbmluZyBodG1sIGNvbnRlbnRzIGZvciBlbWFpbCBtZXNzYWdlXG5cbiI7CisJcHJpbnQgIjxtZXNzYWdlIHN1YmplY3Q+ID0gc3ViamVjdCBmb3IgZW1haWwgbWVzc2FnZSAoZW5jbG9zZSBpbiBzaW5nbGUgcXVvdGVzKVxuXG4iOworCWV4aXQgMDsKK30KKworbXkgJG1vZGUgPSAnZ2V0bmFtZXMnOworJG1vZGUgPSAnZHVtcG1lc3NhZ2UnIGlmKCRkdW1wbWVzc2FnZSBuZSAnJyk7CiskbW9kZSA9ICdzZXRtZXNzYWdlJyBpZigkc2V0bWVzc2FnZSBuZSAnJyk7CiskbW9kZSA9ICdyZXNldG1lc3NhZ2UnIGlmKCRyZXNldG1lc3NhZ2UgbmUgJycpOworCitteSAkbWVzc2FnZW5hbWUgPSAkZHVtcG1lc3NhZ2U7CiskbWVzc2FnZW5hbWUgPSAkc2V0bWVzc2FnZSBpZigkbW9kZSBlcSAnc2V0bWVzc2FnZScpOworJG1lc3NhZ2VuYW1lID0gJHJlc2V0bWVzc2FnZSBpZigkbW9kZSBlcSAncmVzZXRtZXNzYWdlJyk7CisKK215ICRkYXRhYmFzZSA9IGBncmVwIF5kYXRhYmFzZSAvZXRjL3ZjbC92Y2xkLmNvbmYgfCBhd2sgLUYgJz0nICd7cHJpbnQgXCQyfSdgOworbXkgJGhvc3RuYW1lID0gYGdyZXAgXnNlcnZlciAvZXRjL3ZjbC92Y2xkLmNvbmYgfCBhd2sgLUYgJz0nICd7cHJpbnQgXCQyfSdgOworbXkgJHVzZXIgPSBgZ3JlcCBeTG9ja2VyV3J0VXNlciAvZXRjL3ZjbC92Y2xkLmNvbmYgfCBhd2sgLUYgJz0nICd7cHJpbnQgXCQyfSdgOworbXkgJHBhc3N3b3JkID0gYGdyZXAgXndydFBhc3MgL2V0Yy92Y2wvdmNsZC5jb25mIHwgYXdrIC1GICc9JyAne3ByaW50IFwkMn0nYDsKKworY2hvbXAgJGRhdGFiYXNlOworY2hvbXAgJGhvc3RuYW1lOworY2hvbXAgJHVzZXI7CitjaG9tcCAkcGFzc3dvcmQ7CisKK215ICRkc24gPSAiREJJOm15c3FsOmRhdGFiYXNlPSRkYXRhYmFzZTtob3N0PSRob3N0bmFtZSI7CitteSAkZGJoID0gREJJLT5jb25uZWN0KCRkc24sICR1c2VyLCAkcGFzc3dvcmQpOworCisjID09PT09PT09PT09PT09PT09IGdldCBuYW1lcyA9PT09PT09PT09PT09PT09CitpZigkbW9kZSBlcSAnZ2V0bmFtZXMnKQoreworCW15ICRzdGggPSAkZGJoLT5wcmVwYXJlKAorCQkiU0VMRUNUIG5hbWUgRlJPTSB2YXJpYWJsZSBXSEVSRSBuYW1lIExJS0UgJ3VzZXJtZXNzYWdlJScgT1IgbmFtZSBMSUtFICdhZG1pbm1lc3NhZ2UlJyBPUkRFUiBCWSBuYW1lIikKKwkJb3IgZGllICJFcnJvcjogRmFpbGVkIHRvIHByZXBhcmUgZGF0YWJhc2UgcXVlcnk6ICRkYmgtPmVycnN0cigpIjsKKwkkc3RoLT5leGVjdXRlKCk7CisJd2hpbGUgKG15ICRyZWYgPSAkc3RoLT5mZXRjaHJvd19oYXNocmVmKCkpIHsKKwkJcHJpbnQgIiRyZWYtPnsnbmFtZSd9XG4iOworCX0KKwkkc3RoLT5maW5pc2g7CisJJHN0aC0+ZmluaXNoOworCSRkYmgtPmRpc2Nvbm5lY3Q7CisJZXhpdCAwOworfQorIyA9PT09PT09PT09PT09PT09IGR1bXAgbWVzc2FnZSA9PT09PT09PT09PT09PT0KK2Vsc2lmKCRtb2RlIGVxICdkdW1wbWVzc2FnZScpCit7CisJbXkgJHN0aCA9ICRkYmgtPnByZXBhcmUoCisJCSJTRUxFQ1QgdmFsdWUgRlJPTSB2YXJpYWJsZSBXSEVSRSBuYW1lID0gPyIpCisJCW9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byBwcmVwYXJlIGRhdGFiYXNlIHF1ZXJ5OiAkZGJoLT5lcnJzdHIoKSI7CisJJHN0aC0+ZXhlY3V0ZSgkbWVzc2FnZW5hbWUpOworCWlmKCRzdGgtPnJvd3MgPT0gMCkKKwl7CisJCXByaW50ICJFcnJvcjogRmFpbGVkIHRvIGZpbmQgbWVzc2FnZSB3aXRoIG5hbWUgJG1lc3NhZ2VuYW1lXG4iOworCQkkc3RoLT5maW5pc2g7CisJCSRkYmgtPmRpc2Nvbm5lY3Q7CisJCWV4aXQgMDsKKwl9CisJaWYoJHN0aC0+cm93cyA+IDEpCisJeworCQlwcmludCAiRXJyb3I6IEZvdW5kIG11bHRpcGxlIG1lc3NhZ2VzIHdpdGggbmFtZSAkbWVzc2FnZW5hbWVcbiI7CisJCSRzdGgtPmZpbmlzaDsKKwkJJGRiaC0+ZGlzY29ubmVjdDsKKwkJZXhpdCAwOworCX0KKwlteSAkcmVmID0gJHN0aC0+ZmV0Y2hyb3dfaGFzaHJlZigpOworCW15ICRkYXRhID0gWUFNTDo6TG9hZCgkcmVmLT57J3ZhbHVlJ30pOworCSNwcmludCBEdW1wZXIoJGRhdGEpOworCXByaW50ICJTdWJqZWN0OiAkZGF0YS0+eydzdWJqZWN0J31cbiI7CisJcHJpbnQgIk1lc3NhZ2U6XG4iOworCXByaW50ICIkZGF0YS0+eydtZXNzYWdlJ31cbiI7CisKKwkkc3RoLT5maW5pc2g7CisJJGRiaC0+ZGlzY29ubmVjdDsKKwlleGl0IDA7Cit9CisjID09PT09PT09PT09PT09PT09IHJlc2V0IG1lc3NhZ2UgPT09PT09PT09PT09PT09CitlbHNpZigkbW9kZSBlcSAncmVzZXRtZXNzYWdlJykKK3sKKwlteSAkc3RoID0gJGRiaC0+cHJlcGFyZSgKKwkJJ1NFTEVDVCB2YWx1ZSBGUk9NIG1lc3NhZ2VyZXNldCBXSEVSRSBuYW1lID0gPycpCisJCW9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byBwcmVwYXJlIGRhdGFiYXNlIHF1ZXJ5OiAkZGJoLT5lcnJzdHIoKSI7CisJJHN0aC0+ZXhlY3V0ZSgkbWVzc2FnZW5hbWUpIG9yIGRpZSAiRXJyb3I6IGZhaWxlZCB0byBxdWVyeSBkYXRhYmFzZTogJGRiaC0+ZXJyc3RyKCkiOworCWlmKCRzdGgtPnJvd3MgPT0gMCkKKwl7CisJCXByaW50ICJFcnJvcjogRmFpbGVkIHRvIGZpbmQgbWVzc2FnZSB3aXRoIG5hbWUgJG1lc3NhZ2VuYW1lXG4iOworCQkkc3RoLT5maW5pc2g7CisJCSRkYmgtPmRpc2Nvbm5lY3Q7CisJCWV4aXQgMDsKKwl9CisJaWYoJHN0aC0+cm93cyA+IDEpCisJeworCQlwcmludCAiRXJyb3I6IEZvdW5kIG11bHRpcGxlIG1lc3NhZ2VzIHdpdGggbmFtZSAkbWVzc2FnZW5hbWVcbiI7CisJCSRzdGgtPmZpbmlzaDsKKwkJJGRiaC0+ZGlzY29ubmVjdDsKKwkJZXhpdCAwOworCX0KKworCW15ICRyZWYgPSAkc3RoLT5mZXRjaHJvd19oYXNocmVmKCk7CisJbXkgJG1lc3NhZ2UgPSAkcmVmLT57J3ZhbHVlJ307CisKKwkkc3RoID0gJGRiaC0+cHJlcGFyZSgKKwkJIlVQREFURSB2YXJpYWJsZSBTRVQgdmFsdWUgPSA/LCBzZXRieSA9ICdzZXRlbWFpbCBzY3JpcHQnLCB0aW1lc3RhbXAgPSBOT1coKSBXSEVSRSBuYW1lID0gPyIpCisJCW9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byBwcmVwYXJlIGRhdGFiYXNlIHF1ZXJ5OiAkZGJoLT5lcnJzdHIoKSI7CisKKwkkc3RoLT5iaW5kX3BhcmFtKDEsICRtZXNzYWdlKTsKKwkkc3RoLT5iaW5kX3BhcmFtKDIsICRtZXNzYWdlbmFtZSk7CisJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byB1cGRhdGUgdmFsdWUgZm9yICRtZXNzYWdlbmFtZVxuIjsKKworCSRzdGgtPmZpbmlzaDsKKwkkZGJoLT5kaXNjb25uZWN0OworCXByaW50ICJTdWNjZXNzOiBWYWx1ZSByZXNldCBmb3IgJG1lc3NhZ2VuYW1lXG4iOworfQorIyA9PT09PT09PT09PT09PT09PSBzZXQgbWVzc2FnZSA9PT09PT09PT09PT09PT0KK2Vsc2lmKCRtb2RlIGVxICdzZXRtZXNzYWdlJykKK3sKKwlteSAkaHRtbGVtYWlsOworCW9wZW4obXkgJGZoLCAnPCcsICRodG1sZmlsZSkgb3IgZGllICJFcnJvcjogZmFpbGVkIHRvIG9wZW4gJGh0bWxmaWxlIGZvciByZWFkaW5nIjsKKwl7CisJCWxvY2FsICQvOworCQkkaHRtbGVtYWlsID0gPCRmaD47CisJfQorCWNsb3NlKCRmaCk7CisKKwlteSAkc3RoID0gJGRiaC0+cHJlcGFyZSgKKwkJJ1NFTEVDVCB2YWx1ZSBGUk9NIHZhcmlhYmxlIFdIRVJFIG5hbWUgPSA/JykKKwkJb3IgZGllICJFcnJvcjogRmFpbGVkIHRvIHByZXBhcmUgZGF0YWJhc2UgcXVlcnk6ICRkYmgtPmVycnN0cigpIjsKKwkkc3RoLT5leGVjdXRlKCRtZXNzYWdlbmFtZSkgb3IgZGllICJFcnJvcjogZmFpbGVkIHRvIHF1ZXJ5IGRhdGFiYXNlOiAkZGJoLT5lcnJzdHIoKSI7CisJaWYoJHN0aC0+cm93cyA9PSAwKQorCXsKKwkJcHJpbnQgIkVycm9yOiBGYWlsZWQgdG8gZmluZCBtZXNzYWdlIHdpdGggbmFtZSAkbWVzc2FnZW5hbWVcbiI7CisJCSRzdGgtPmZpbmlzaDsKKwkJJGRiaC0+ZGlzY29ubmVjdDsKKwkJZXhpdCAwOworCX0KKwlpZigkc3RoLT5yb3dzID4gMSkKKwl7CisJCXByaW50ICJFcnJvcjogRm91bmQgbXVsdGlwbGUgbWVzc2FnZXMgd2l0aCBuYW1lICRtZXNzYWdlbmFtZVxuIjsKKwkJJHN0aC0+ZmluaXNoOworCQkkZGJoLT5kaXNjb25uZWN0OworCQlleGl0IDA7CisJfQorCisJbXkgJHJlZiA9ICRzdGgtPmZldGNocm93X2hhc2hyZWYoKTsKKwlteSAkZGF0YSA9IFlBTUw6OkxvYWQoJHJlZi0+eyd2YWx1ZSd9KTsKKwkkZGF0YS0+eydtZXNzYWdlJ30gPSAkaHRtbGVtYWlsOworCSRkYXRhLT57J3N1YmplY3QnfSA9ICRzdWJqZWN0OworCW15ICR5YW1sID0gWUFNTDo6RHVtcCgkZGF0YSk7CisKKwkkc3RoID0gJGRiaC0+cHJlcGFyZSgKKwkJIlVQREFURSB2YXJpYWJsZSBTRVQgdmFsdWUgPSA/LCBzZXRieSA9ICdzZXRlbWFpbCBzY3JpcHQnLCB0aW1lc3RhbXAgPSBOT1coKSBXSEVSRSBuYW1lID0gPyIpCisJCW9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byBwcmVwYXJlIGRhdGFiYXNlIHF1ZXJ5OiAkZGJoLT5lcnJzdHIoKSI7CisKKwkkc3RoLT5iaW5kX3BhcmFtKDEsICR5YW1sKTsKKwkkc3RoLT5iaW5kX3BhcmFtKDIsICRtZXNzYWdlbmFtZSk7CisJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZSAiRXJyb3I6IEZhaWxlZCB0byB1cGRhdGUgdmFsdWUgZm9yICRtZXNzYWdlbmFtZVxuIjsKKworCSRzdGgtPmZpbmlzaDsKKwkkZGJoLT5kaXNjb25uZWN0OworCXByaW50ICJTdWNjZXNzOiBWYWx1ZSBmb3IgJG1lc3NhZ2VuYW1lIHVwZGF0ZWQgZnJvbSBjb250ZW50cyBvZiAkaHRtbGZpbGVcbiI7Cit9CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML0RhdGFTdHJ1Y3R1cmUucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML0RhdGFTdHJ1Y3R1cmUucG0KaW5kZXggZGQ2OTNlMy4uNTU4YzA5ZiAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9EYXRhU3RydWN0dXJlLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvRGF0YVN0cnVjdHVyZS5wbQpAQCAtNjYsNyArNjYsNyBAQAogdXNlIGJhc2UgcXcoKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpAQCAtNDA0LDYgKzQwNCw3IEBACiAjJFNVQlJPVVRJTkVfTUFQUElOR1N7aW1hZ2VfZG9tYWluX3Bhc3N3b3JkfSA9ICckc2VsZi0+cmVxdWVzdF9kYXRhLT57cmVzZXJ2YXRpb259e1JFU0VSVkFUSU9OX0lEfXtpbWFnZX17aW1hZ2Vkb21haW59e3Bhc3N3b3JkfSc7ICMgRXhwbGljaXQgc3Vicm91dGluZQogJFNVQlJPVVRJTkVfTUFQUElOR1N7aW1hZ2VfZG9tYWluX3NlY3JldF9pZH0gPSAnJHNlbGYtPnJlcXVlc3RfZGF0YS0+e3Jlc2VydmF0aW9ufXtSRVNFUlZBVElPTl9JRH17aW1hZ2V9e2ltYWdlZG9tYWlufXtzZWNyZXRpZH0nOwogJFNVQlJPVVRJTkVfTUFQUElOR1N7aW1hZ2VfZG9tYWluX3VzZXJuYW1lfSA9ICckc2VsZi0+cmVxdWVzdF9kYXRhLT57cmVzZXJ2YXRpb259e1JFU0VSVkFUSU9OX0lEfXtpbWFnZX17aW1hZ2Vkb21haW59e3VzZXJuYW1lfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3tpbWFnZV9kb21haW5fdXNlZGJob3N0bmFtZXN9ID0gJyRzZWxmLT5yZXF1ZXN0X2RhdGEtPntyZXNlcnZhdGlvbn17UkVTRVJWQVRJT05fSUR9e2ltYWdlfXtpbWFnZWRvbWFpbn17dXNlZGJob3N0bmFtZXN9JzsKICRTVUJST1VUSU5FX01BUFBJTkdTe2ltYWdlX2RvbWFpbl9iYXNlX291fSA9ICckc2VsZi0+cmVxdWVzdF9kYXRhLT57cmVzZXJ2YXRpb259e1JFU0VSVkFUSU9OX0lEfXtpbWFnZX17aW1hZ2Vkb21haW59e2ltYWdlYWRkb21haW59e2Jhc2VPVX0nOwogJFNVQlJPVVRJTkVfTUFQUElOR1N7aW1hZ2VfZG9tYWluX2NyeXB0c2VjcmV0fSA9ICckc2VsZi0+cmVxdWVzdF9kYXRhLT57cmVzZXJ2YXRpb259e1JFU0VSVkFUSU9OX0lEfXtpbWFnZX17aW1hZ2Vkb21haW59e2NyeXB0c2VjcmV0fXtjcnlwdHNlY3JldH0nOwogCkBAIC0yNjQxLDYgKzI2NDIsOCBAQAogCQkJbmV4dDsKIAkJfQogCQkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJleHRyYWN0ZWQgc3Vicm91dGluZSBtYXBwaW5nIGtleSBmcm9tIHNlY3Rpb24gb2YgaW5wdXQgc3RyaW5nOiAnJGlucHV0X3N1YnN0aXR1dGVfc2VjdGlvbicgLS0+ICckc3Vicm91dGluZV9tYXBwaW5nX2tleSciKTsKKwkJIyBza2lwIGtleXMgZGVyaXZlZCBmcm9tIFtpZiAuLi5dIGFuZCBbZW5kaWZdIHRvIHByZXZlbnQgY3JlYXRpb24gb2YgbWFwcGluZ3MgZnJvbSBIVE1MIGNvbW1lbnQgY29uZGl0aW9uYWxzCisJCW5leHQgaWYgKCRzdWJyb3V0aW5lX21hcHBpbmdfa2V5ID1+IC9eaWYgLyB8fCAkc3Vicm91dGluZV9tYXBwaW5nX2tleSBlcSAiZW5kaWYiKTsKIAkJCiAJCSMgQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlIGZyb20gdGhlIERhdGFTdHJ1Y3R1cmUgZGF0YQogCQkjIENoZWNrIGlmIERhdGFTdHJ1Y3R1cmUucG0gaW1wbGVtZW50cyBhIG1hdGNoaW5nICdnZXRfJyBmdW5jdGlvbgpAQCAtMjgwNCw3ICsyODA3LDcgQEAKIAogPWhlYWQyIGdldF9kb21haW5fY3JlZGVudGlhbHMKIAotIFBhcmFtZXRlcnMgIDogJGRvbWFpbl9pZGVudGlmaWVyCisgUGFyYW1ldGVycyAgOiAkaW1hZ2Vkb21haW5faWQgKG9wdGlvbmFsKQogIFJldHVybnMgICAgIDogYXJyYXkgKCR1c2VybmFtZSwgJGRvbWFpbl9wYXNzd29yZCkKICBEZXNjcmlwdGlvbiA6IEF0dGVtcHRzIHRvIGRldGVybWluZSBhbmQgZGVjcnlwdCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZvcgogICAgICAgICAgICAgICAgdGhlIGRvbWFpbiBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAKQEAgLTI4MTcsMjMgKzI4MjAsMjUgQEAKIAkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKIAkJcmV0dXJuIDA7CiAJfQotCQotCW15ICRkb21haW5faWRlbnRpZmllciA9IHNoaWZ0OwotCWlmICghZGVmaW5lZCgkZG9tYWluX2lkZW50aWZpZXIpKSB7Ci0JCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJkb21haW4gaWRlbnRpZmllciBhcmd1bWVudCB3YXMgbm90IHN1cHBsaWVkIik7Ci0JCXJldHVybjsKLQl9Ci0JCisKKwlteSAkcmVzZXJ2YXRpb25faWQgPSAkc2VsZi0+cmVzZXJ2YXRpb25faWQoKTsKIAlteSAkbWFuYWdlbWVudF9ub2RlX2lkID0gJHNlbGYtPmdldF9tYW5hZ2VtZW50X25vZGVfaWQoKTsKLQkKLQlteSAoJHVzZXJuYW1lLCAkc2VjcmV0X2lkLCAkZW5jcnlwdGVkX3Bhc3N3b3JkKSA9IGdldF9tYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzKCRtYW5hZ2VtZW50X25vZGVfaWQsICRkb21haW5faWRlbnRpZmllcik7Ci0JcmV0dXJuIHVubGVzcyAkdXNlcm5hbWUgJiYgJHNlY3JldF9pZCAmJiAkZW5jcnlwdGVkX3Bhc3N3b3JkOwotCQorCisJbXkgJGltYWdlZG9tYWluX2lkID0gc2hpZnQgfHwgJHNlbGYtPnJlcXVlc3RfZGF0YS0+e3Jlc2VydmF0aW9ufXskcmVzZXJ2YXRpb25faWR9e2NvbXB1dGVyfXtjdXJyZW50aW1hZ2V9e2ltYWdlZG9tYWlufXtpZH07CisKKwlteSAoJGRvbWFpbl9kbnNfbmFtZSwgJHVzZXJuYW1lLCAkc2VjcmV0X2lkLCAkZW5jcnlwdGVkX3Bhc3N3b3JkKSA9IGdldF9tYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzKCRtYW5hZ2VtZW50X25vZGVfaWQsICRpbWFnZWRvbWFpbl9pZCk7CisJcmV0dXJuIHVubGVzcyAkZG9tYWluX2Ruc19uYW1lICYmICR1c2VybmFtZSAmJiAkc2VjcmV0X2lkICYmICRlbmNyeXB0ZWRfcGFzc3dvcmQ7CisKIAlteSAkZGVjcnlwdGVkX3Bhc3N3b3JkID0gJHNlbGYtPm1uX29zLT5kZWNyeXB0X2NyeXB0c2VjcmV0KCRzZWNyZXRfaWQsICRlbmNyeXB0ZWRfcGFzc3dvcmQpIHx8IHJldHVybjsKIAlteSAkZGVjcnlwdGVkX3Bhc3N3b3JkX2xlbmd0aCA9IGxlbmd0aCgkZGVjcnlwdGVkX3Bhc3N3b3JkKTsKIAlteSAkZGVjcnlwdGVkX3Bhc3N3b3JkX2hpZGRlbiA9ICcqJyB4ICRkZWNyeXB0ZWRfcGFzc3dvcmRfbGVuZ3RoOwotCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGNyZWRlbnRpYWxzIGZvciBBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbjogJyRkZWNyeXB0ZWRfcGFzc3dvcmRfaGlkZGVuJyAoJGRlY3J5cHRlZF9wYXNzd29yZF9sZW5ndGggY2hhcmFjdGVycykiKTsKLQlyZXR1cm4gJGRlY3J5cHRlZF9wYXNzd29yZDsKKwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZlZCBjcmVkZW50aWFscyBmb3IgQWN0aXZlIERpcmVjdG9yeSBkb21haW46XG4iIC4KKyAgICAgICAgICAgICAgICJkb21haW4gSUQ6ICRpbWFnZWRvbWFpbl9pZDpcbiIgLgorICAgICAgICAgICAgICAgImRvbWFpbiBETlMgbmFtZTogJGRvbWFpbl9kbnNfbmFtZTpcbiIgLgorICAgICAgICAgICAgICAgImRvbWFpbiB1c2VybmFtZTogJHVzZXJuYW1lOlxuIiAuCisgICAgICAgICAgICAgICAiZG9tYWluIHBhc3N3b3JkOiAkZGVjcnlwdGVkX3Bhc3N3b3JkX2hpZGRlbiAoJGRlY3J5cHRlZF9wYXNzd29yZF9sZW5ndGggY2hhcmFjdGVycykiCisgICAgICAgICk7CisJcmV0dXJuICgkZG9tYWluX2Ruc19uYW1lLCAkdXNlcm5hbWUsICRkZWNyeXB0ZWRfcGFzc3dvcmQpOwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCmluZGV4IDFiYmZlN2IuLmVhNzUwZmUgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCkBAIC03NCw3ICs3NCw3IEBACiB1c2UgYmFzZSBxdygpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TLnBtCmluZGV4IDI3NmEzYjcuLjMyYzI1Y2YgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKQEAgLTQzNTUsNiArNDM1NSwxMCBAQAogCQkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiaWdub3JpbmcgU3VidmVyc2lvbiBmaWxlOiAkbW5fZmlsZV9wYXRoIik7CiAJCQkJbmV4dCBNTl9GSUxFOwogCQkJfQorCQkJZWxzaWYgKCRtbl9maWxlX3BhdGggPX4gL1wuZ2l0aWdub3JlL2kpIHsKKwkJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImlnbm9yaW5nIC5naXRpZ25vcmUgZmlsZTogJG1uX2ZpbGVfcGF0aCIpOworCQkJCW5leHQgTU5fRklMRTsKKwkJCX0KIAkJCWVsc2lmICgkbW5fZmlsZV9wYXRoID1+IC9cLyRvdGhlcl9hcmNoaXRlY3R1cmVcLy8pIHsKIAkJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImlnbm9yaW5nIGZpbGUgaW50ZW5kZWQgZm9yIGRpZmZlcmVudCBjb21wdXRlciBhcmNoaXRlY3R1cmU6ICRtbl9maWxlX3BhdGgiKTsKIAkJCQluZXh0IE1OX0ZJTEU7CkBAIC00NDQwLDEyICs0NDQ0LDE0IEBACiAJCW15ICRyb3V0ZXIgPSAkc2VydmVyX3ZhcmlhYmxlX2RhdGEtPntyb3V0ZXJ9OwogCQlteSAkbmV0bWFzayA9ICRzZXJ2ZXJfdmFyaWFibGVfZGF0YS0+e25ldG1hc2t9OwogCQlteSBAZG5zID0gQHskc2VydmVyX3ZhcmlhYmxlX2RhdGEtPntkbnN9fTsKKworCQlteSAkcmV0dXJuID0gMTsKIAkJCi0JCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAidXBkYXRlZCBkYXRhIHNlcnZlciByZXF1ZXN0IHJvdXRlciBpbmZvIikgaWYgKCRzZWxmLT5kYXRhLT5zZXRfc2VydmVyX3JlcXVlc3Rfcm91dGVyKCRzZXJ2ZXJfdmFyaWFibGVfZGF0YS0+e3JvdXRlcn0pKTsKLQkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJ1cGRhdGVkIGRhdGEgc2VydmVyIHJlcXVlc3QgbmV0bWFzayBpbmZvIikgaWYgKCRzZWxmLT5kYXRhLT5zZXRfc2VydmVyX3JlcXVlc3RfbmV0bWFzaygkc2VydmVyX3ZhcmlhYmxlX2RhdGEtPntuZXRtYXNrfSkpOwotCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgInVwZGF0ZWQgZGF0YSBzZXJ2ZXIgcmVxdWVzdCBkbnMgaW5mbyIpIGlmICgkc2VsZi0+ZGF0YS0+c2V0X3NlcnZlcl9yZXF1ZXN0X2Ruc19zZXJ2ZXJzKEB7JHNlcnZlcl92YXJpYWJsZV9kYXRhLT57ZG5zfX0pKTsKKwkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJ1cGRhdGVkIGRhdGEgc2VydmVyIHJlcXVlc3Qgcm91dGVyIGluZm8iKSBvciAkcmV0dXJuID0gMCBpZiAoJHNlbGYtPmRhdGEtPnNldF9zZXJ2ZXJfcmVxdWVzdF9yb3V0ZXIoJHNlcnZlcl92YXJpYWJsZV9kYXRhLT57cm91dGVyfSkpOworCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgInVwZGF0ZWQgZGF0YSBzZXJ2ZXIgcmVxdWVzdCBuZXRtYXNrIGluZm8iKSBvciAkcmV0dXJuID0gMCBpZiAoJHNlbGYtPmRhdGEtPnNldF9zZXJ2ZXJfcmVxdWVzdF9uZXRtYXNrKCRzZXJ2ZXJfdmFyaWFibGVfZGF0YS0+e25ldG1hc2t9KSk7CisJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAidXBkYXRlZCBkYXRhIHNlcnZlciByZXF1ZXN0IGRucyBpbmZvIikgb3IgJHJldHVybiA9IDAgaWYgKCRzZWxmLT5kYXRhLT5zZXRfc2VydmVyX3JlcXVlc3RfZG5zX3NlcnZlcnMoQHskc2VydmVyX3ZhcmlhYmxlX2RhdGEtPntkbnN9fSkpOwogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJvdXRlcj0gJHJvdXRlciwgbmV0bWFzaz0gJG5ldG1hc2ssIGRucz0gQGRucyIpOwotCQkKKwkJcmV0dXJuICRyZXR1cm47CiAJfQogCWVsc2UgewogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGEgaXMgbm90IHNldCBmb3IgJHZhcmlhYmxlX25hbWUiKTsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4LnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgucG0KaW5kZXggNGZkNjFiMS4uZGRhNzBhYiAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUyk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKQEAgLTY2OTksMjAgKzY2OTksMzAgQEAKIAkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCW15ICRjb21wdXRlcl9uYW1lID0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9zaG9ydF9uYW1lKCk7CiAJbXkgJHB1YmxpY19pcF9jb25maWd1cmF0aW9uID0gJHNlbGYtPmRhdGEtPmdldF9tYW5hZ2VtZW50X25vZGVfcHVibGljX2lwX2NvbmZpZ3VyYXRpb24oKTsKLQlteSBAcHVibGljX2Ruc19zZXJ2ZXJzID0gc2hpZnQgfHwgJHNlbGYtPmRhdGEtPmdldF9tYW5hZ2VtZW50X25vZGVfcHVibGljX2Ruc19zZXJ2ZXJzKCk7Ci0JCi0JaWYgKCRwdWJsaWNfaXBfY29uZmlndXJhdGlvbiAhfiAvc3RhdGljL2kpIHsJCi0JCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJ1bmFibGUgdG8gdXBkYXRlIHJlc29sdi5jb25mIG9uICRjb21wdXRlcl9uYW1lLCBtYW5hZ2VtZW50IG5vZGUncyBJUCBjb25maWd1cmF0aW9uIGlzIHNldCB0byAkcHVibGljX2lwX2NvbmZpZ3VyYXRpb24iKTsKKwlteSBAbW5fZG5zX3NlcnZlcnMgPSBzaGlmdCB8fCAkc2VsZi0+ZGF0YS0+Z2V0X21hbmFnZW1lbnRfbm9kZV9wdWJsaWNfZG5zX3NlcnZlcnMoKTsKKworCW15IEBzZXJ2ZXJfcmVxdWVzdF9kbnNfc2VydmVycyA9ICRzZWxmLT5kYXRhLT5nZXRfc2VydmVyX3JlcXVlc3RfZG5zX3NlcnZlcnMoKTsKKworCW15IEBkbnNfc2VydmVyczsKKwlpZiAoQHNlcnZlcl9yZXF1ZXN0X2Ruc19zZXJ2ZXJzKSB7CisJCUBkbnNfc2VydmVycyA9IEBzZXJ2ZXJfcmVxdWVzdF9kbnNfc2VydmVyczsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJzZXJ2ZXIgcmVxdWVzdCBzcGVjaWZpYyBETlMgc2VydmVycyB3aWxsIGJlIHN0YXRpY2FsbHkgc2V0IG9uICRjb21wdXRlcl9uYW1lOiAiIC4gam9pbigiLCAiLCBAZG5zX3NlcnZlcnMpKTsKKwl9CisJZWxzaWYgKCRwdWJsaWNfaXBfY29uZmlndXJhdGlvbiA9fiAvc3RhdGljL2kgJiYgQG1uX2Ruc19zZXJ2ZXJzKSB7CisJCUBkbnNfc2VydmVycyA9IEBtbl9kbnNfc2VydmVyczsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJtYW5hZ2VtZW50IG5vZGUgSVAgY29uZmlndXJhdGlvbiBzZXQgdG8gJHB1YmxpY19pcF9jb25maWd1cmF0aW9uLCBtYW5hZ2VtZW50IG5vZGUgRE5TIHNlcnZlcnMgd2lsbCBiZSBzdGF0aWNhbGx5IHNldCBvbiAkY29tcHV0ZXJfbmFtZTogIiAuIGpvaW4oIiwgIiwgQGRuc19zZXJ2ZXJzKSk7CisJfQorCWVsc2UgeworCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiJGNvbXB1dGVyX25hbWUgbm90IGNvbmZpZ3VyZWQgdG8gdXNlIHN0YXRpYyBETlMgc2VydmVyczpcbiIgLgorCQkJIm1hbmFnZW1lbnQgbm9kZSBJUCBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgOiAkcHVibGljX2lwX2NvbmZpZ3VyYXRpb25cbiIgLgorCQkJIm1hbmFnZW1lbnQgbm9kZSBETlMgc2VydmVycyBjb25maWd1cmVkICAgICAgICAgOiAiIC4gKEBtbl9kbnNfc2VydmVycyA/ICd5ZXMnIDogJ25vJykKKwkJKTsKIAkJcmV0dXJuOwogCX0KLQllbHNpZiAoIUBwdWJsaWNfZG5zX3NlcnZlcnMpIHsKLQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInVuYWJsZSB0byB1cGRhdGUgcmVzb2x2LmNvbmYgb24gJGNvbXB1dGVyX25hbWUsIEROUyBzZXJ2ZXIgYXJndW1lbnQgd2FzIG5vdCBwcm92aWRlZCBhbmQgbWFuYWdlbWVudCBub2RlJ3MgcHVibGljIEROUyBzZXJ2ZXIgaXMgbm90IGNvbmZpZ3VyZWQiKTsKLQkJcmV0dXJuOwotCX0KLQkKKwogCW15ICRyZXNvbHZfY29uZl9wYXRoID0gIi9ldGMvcmVzb2x2LmNvbmYiOwogCQogCW15IEByZXNvbHZfY29uZl9saW5lc19leGlzdGluZyA9ICRzZWxmLT5nZXRfZmlsZV9jb250ZW50cygkcmVzb2x2X2NvbmZfcGF0aCk7CkBAIC02NzI1LDE2ICs2NzM1LDE2IEBACiAJCQlwdXNoIEByZXNvbHZfY29uZl9saW5lc19uZXcsICRsaW5lOwogCQl9CiAJfQotCQorCiAJIyBBZGQgYSBjb21tZW50IG1hcmtpbmcgd2hhdCB3YXMgYWRkZWQgYnkgVkNMCiAJbXkgJHRpbWVzdGFtcCA9IFBPU0lYOjpzdHJmdGltZSgiJW0tJWQtJVkgJUg6JU06JVMiLCBsb2NhbHRpbWUpOwogCXB1c2ggQHJlc29sdl9jb25mX2xpbmVzX25ldywgIiMgJHRpbWVzdGFtcDogVGhlIGZvbGxvd2luZyB3YXMgYWRkZWQgYnkgVkNMIjsKIAkKIAkjIEFkZCBhIG5hbWVzZXJ2ZXIgbGluZSBmb3IgZWFjaCBjb25maWd1cmVkIEROUyBzZXJ2ZXIKLQlmb3IgbXkgJHB1YmxpY19kbnNfc2VydmVyIChAcHVibGljX2Ruc19zZXJ2ZXJzKSB7CisJZm9yIG15ICRwdWJsaWNfZG5zX3NlcnZlciAoQGRuc19zZXJ2ZXJzKSB7CiAJCXB1c2ggQHJlc29sdl9jb25mX2xpbmVzX25ldywgIm5hbWVzZXJ2ZXIgJHB1YmxpY19kbnNfc2VydmVyIjsKIAl9Ci0JCisKIAlteSAkcmVzb2x2X2NvbmZfY29udGVudHNfbmV3ID0gam9pbigiXG4iLCBAcmVzb2x2X2NvbmZfbGluZXNfbmV3KTsKIAlpZiAoJHNlbGYtPmNyZWF0ZV90ZXh0X2ZpbGUoJHJlc29sdl9jb25mX3BhdGgsICRyZXNvbHZfY29uZl9jb250ZW50c19uZXcpKSB7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAidXBkYXRlZCAkcmVzb2x2X2NvbmZfcGF0aCBvbiAkY29tcHV0ZXJfbmFtZTpcbiRyZXNvbHZfY29uZl9jb250ZW50c19uZXciKTsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L0VTWGkucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9FU1hpLnBtCmluZGV4IDRhYTUzNzEuLmRmZWQ5NDUgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L0VTWGkucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvRVNYaS5wbQpAQCAtNDQsNyArNDQsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpMaW51eCk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L01hbmFnZW1lbnROb2RlLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvTWFuYWdlbWVudE5vZGUucG0KaW5kZXggODRkM2RkMC4uZjRhNjNhOCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvTWFuYWdlbWVudE5vZGUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvTWFuYWdlbWVudE5vZGUucG0KQEAgLTQ0LDcgKzQ0LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6TGludXgpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CkBAIC01MDksNiArNTA5LDEzIEBACiAJCQluZXh0OwogCQl9CiAJCQorCQkjIElnbm9yZSB0aGUgLmdpdGlnbm9yZSBmaWxlcworCQlpZiAoJHNjcmlwdF9maWxlX3BhdGggPX4gL1wuZ2l0aWdub3JlL2kpIHsKKwkJCW15ICRtYXRjaGluZ19zZWN0aW9uID0gJDE7CisJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImlnbm9yaW5nIGdpdGlnbm9yZSBmaWxlIG9uIG1hbmFnZW1lbnQgbm9kZSBmcm9tIHNjcmlwdCBkaXJlY3RvcnkgJyRtYXRjaGluZ19zZWN0aW9uJzogJHNjcmlwdF9maWxlX3BhdGgiKTsKKwkJCW5leHQ7CisJCX0KKwkJCiAJCW15ICRjb21tYW5kID0gImNobW9kICt4ICRzY3JpcHRfZmlsZV9wYXRoICYmICRzY3JpcHRfZmlsZV9wYXRoICRtbl9qc29uX2ZpbGVfcGF0aCI7CiAJCW15ICgkZXhpdF9zdGF0dXMsICRvdXRwdXQpID0gJHNlbGYtPmV4ZWN1dGUoJGNvbW1hbmQpOwogCQlpZiAoIWRlZmluZWQoJG91dHB1dCkpIHsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L1VidW50dS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L1VidW50dS5wbQppbmRleCBhNDA1NjRjLi4zZGYzNTBiIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9VYnVudHUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvVWJ1bnR1LnBtCkBAIC0zOSw3ICszOSw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OkxpbnV4KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpAQCAtMTU0LDYgKzE1NCw3IEBACiAKID1jdXQKIAorPWhlYWQyIGNvbW1lbnQgb3V0IHRoaXMgZ2V0X25ldHdvcmtfY29uZmlndXJhdGlvbiB0byB1c2UgdmVyc2lvbiBvZiBmdW5jdGlvbiBpbiBMaW51eC5wbQogc3ViIGdldF9uZXR3b3JrX2NvbmZpZ3VyYXRpb24gewogCW15ICRzZWxmID0gc2hpZnQ7CiAJaWYgKHJlZigkc2VsZikgIX4gL1ZDTDo6TW9kdWxlL2kpIHsKQEAgLTIzOCw2ICsyMzksNyBAQAogCXJldHVybiAkc2VsZi0+e25ldHdvcmtfY29uZmlndXJhdGlvbn07CiAJCQogfQorPWN1dAogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L1VuaXhMYWIucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9Vbml4TGFiLnBtCmluZGV4IDU4YTJmNDEuLmYwYmUzZmEgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L1VuaXhMYWIucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvVW5peExhYi5wbQpAQCAtMzUsNyArMzUsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpMaW51eCk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2ZpcmV3YWxsLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwucG0KaW5kZXggODhkODlmNC4uNzYzOWVjNiAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwucG0KQEAgLTQwLDcgKzQwLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvZmlyZXdhbGxkLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvZmlyZXdhbGxkLnBtCmluZGV4IGI3Zjk0M2QuLmU5Mjc0OTggMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2ZpcmV3YWxsL2ZpcmV3YWxsZC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9maXJld2FsbC9maXJld2FsbGQucG0KQEAgLTM5LDcgKzM5LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6TGludXg6OmZpcmV3YWxsOjppcHRhYmxlcyk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiBvdXIgQElTQTsKIApkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvaXB0YWJsZXMucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9maXJld2FsbC9pcHRhYmxlcy5wbQppbmRleCA5YTUyNmFiLi5lYjI4YjQ4IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9maXJld2FsbC9pcHRhYmxlcy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9maXJld2FsbC9pcHRhYmxlcy5wbQpAQCAtMzksNyArMzksNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpMaW51eDo6ZmlyZXdhbGwpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogb3VyIEBJU0E7CiAKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2ZpcmV3YWxsL3Vmdy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2ZpcmV3YWxsL3Vmdy5wbQppbmRleCA2NzFiNWM2Li40YjQ0OWFhIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9maXJld2FsbC91ZncucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvdWZ3LnBtCkBAIC0zOSw3ICszOSw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OkxpbnV4OjpmaXJld2FsbDo6aXB0YWJsZXMpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogb3VyIEBJU0E7CiAKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9pbml0LnBtCmluZGV4IDA3ODExYTEuLjg4ZmFlZDAgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvaW5pdC5wbQpAQCAtNDAsNyArNDAsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9pbml0L1N5c1YucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9pbml0L1N5c1YucG0KaW5kZXggNzhmODU0MS4uODEwODg5YSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvaW5pdC9TeXNWLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQvU3lzVi5wbQpAQCAtNDIsNyArNDIsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpMaW51eDo6aW5pdCk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQvVXBzdGFydC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQvVXBzdGFydC5wbQppbmRleCA2NGY0ZWE3Li4yODQ4YjkzIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9pbml0L1Vwc3RhcnQucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvaW5pdC9VcHN0YXJ0LnBtCkBAIC00MSw3ICs0MSw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OkxpbnV4Ojppbml0KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvaW5pdC9zeXN0ZW1kLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvaW5pdC9zeXN0ZW1kLnBtCmluZGV4IGZkYTE5NWUuLjVkNjc1ODcgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2luaXQvc3lzdGVtZC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9MaW51eC9pbml0L3N5c3RlbWQucG0KQEAgLTQyLDcgKzQyLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6TGludXg6OmluaXQpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9PU1gucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9PU1gucG0KaW5kZXggODBkOGU5ZC4uYjU4ZTgxZCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvT1NYLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL09TWC5wbQpAQCAtNDMsNyArNDMsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MucG0KaW5kZXggM2RlMWFkMy4uZGRlNDhkNyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1MpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CkBAIC0zODUsNiArMzg1LDI1IEBACiAKID1pdGVtICoKIAorIElmIGNvbXB1dGVyIGlzIHBhcnQgb2YgQWN0aXZlIERpcmVjdG9yeSBEb21haW4sIHVuam9pbiBpdAorCis9Y3V0CisKKwlpZiAoJHNlbGYtPmFkX2dldF9jdXJyZW50X2RvbWFpbigpKSB7CisJCWlmICghJHNlbGYtPmFkX3Vuam9pbigpKSB7CisJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHJlbW92ZSBjb21wdXRlciBmcm9tIEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImNvbXB1dGVyIHN1Y2Nlc3NmdWxseSB1bmpvaW5lZCBmcm9tIGRvbWFpbiwgcmVib290aW5nIGZvciBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QiKTsKKwkJIyByZWJvb3QgaWYgdW5qb2luIHN1Y2Nlc3NmdWwKKwkJaWYgKCEkc2VsZi0+cmVib290KCkpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gcmVib290IGFmdGVyIHVuam9pbmluZyBmcm9tIGRvbWFpbiIpOworCQl9CisJfQorCisKKz1pdGVtICoKKwogIFNldCBBZG1pbmlzdHJhdG9yIGFjY291bnQgcGFzc3dvcmQgdG8ga25vd24gdmFsdWUKIAogPWN1dApAQCAtNDE1LDIwICs0MzQsNiBAQAogCWlmICghJGRlbGV0ZWRfdXNlcl9hY2NvdW50cykgewogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInVuYWJsZSB0byBkZWxldGUgdXNlciBhY2NvdW50cywgd2lsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVib290Iik7CiAJfQotCi09aXRlbSAqCi0KLSBJZiBjb21wdXRlciBpcyBwYXJ0IG9mIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluLCB1bmpvaW4gaXQKLQotPWN1dAotCi0JaWYgKCRzZWxmLT5hZF9nZXRfY3VycmVudF9kb21haW4oKSkgewotCQlpZiAoISRzZWxmLT5hZF91bmpvaW4oKSkgewotCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byByZW1vdmUgY29tcHV0ZXIgZnJvbSBBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KID1pdGVtICoKIAogIFNldCByb290IGFzIHRoZSBvd25lciBvZiAvaG9tZS9yb290CkBAIC02NzIsMTQgKzY3NywyNyBAQAogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAidW5hYmxlIHRvIHNldCBzc2hkIHNlcnZpY2Ugc3RhcnR1cCBtb2RlIHRvIG1hbnVhbCIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCisKKz1pdGVtICoKKworIFVubW91bnQgYW55IE5GUyBzaGFyZXMKKworPWN1dAorCisJaWYgKCEkc2VsZi0+dW5tb3VudF9uZnNfc2hhcmVzKCkpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInVuYWJsZSB0byB1bm1vdW50IE5GUyBzaGFyZXMiKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJDYWxsIHRvIHVubW91bnRfbmZzX3NoYXJlcyByZXR1cm5lZCBzdWNjZXNzZnVsbHkiKTsKKwl9CisKID1iYWNrCiAKID1jdXQKIAogCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAicmV0dXJuaW5nIDEiKTsKIAlyZXR1cm4gMTsKLQogfSAjIyBlbmQgc3ViIHByZV9jYXB0dXJlCiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEwODcsNiArMTEwNSw4IEBACiAJCXJldHVybiAwOwogCX0KIAkKKwlteSAkY29tcHV0ZXJfbmFtZSA9ICRzZWxmLT5kYXRhLT5nZXRfY29tcHV0ZXJfc2hvcnRfbmFtZSgpOworCQogCSMgQ2hlY2sgaWYgY3VzdG9tIHBvc3RfcmVzZXJ2YXRpb24gc2NyaXB0IGV4aXN0cyBpbiBpbWFnZQogCW15ICRzY3JpcHRfcGF0aCA9ICckU1lTVEVNUk9PVC92Y2xfcG9zdF9yZXNlcnZhdGlvbi5jbWQnOwogCWlmICgkc2VsZi0+ZmlsZV9leGlzdHMoJHNjcmlwdF9wYXRoKSkgewpAQCAtMTA5Nyw3ICsxMTE3LDE1IEBACiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiY3VzdG9tIHBvc3RfcmVzZXJ2YXRpb24gc2NyaXB0IGRvZXMgTk9UIGV4aXN0IGluIGltYWdlOiAkc2NyaXB0X3BhdGgiKTsKIAl9CiAJCi0JcmV0dXJuICRzZWxmLT5TVVBFUjo6cG9zdF9yZXNlcnZhdGlvbigpOworCSRzZWxmLT5TVVBFUjo6cG9zdF9yZXNlcnZhdGlvbigpOworCQorCSMgQ2hlY2sgaWYgdGhlIGNvbXB1dGVyIGlzIGpvaW5lZCB0byBhbnkgQUQgZG9tYWluCisJbXkgJGNvbXB1dGVyX2N1cnJlbnRfZG9tYWluX25hbWUgPSAkc2VsZi0+YWRfZ2V0X2N1cnJlbnRfZG9tYWluKCk7CisJaWYgKCRjb21wdXRlcl9jdXJyZW50X2RvbWFpbl9uYW1lKSB7CisJCSRzZWxmLT5hZF9kZWxldGVfY29tcHV0ZXIoKTsKKwl9CisJCisJcmV0dXJuIDE7CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTExMTcsMTUgKzExNDUsMjUgQEAKIAkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKIAkJcmV0dXJuIDA7CiAJfQotCQorCiAJbXkgJGNvbXB1dGVyX25hbWUgPSAkc2VsZi0+ZGF0YS0+Z2V0X2NvbXB1dGVyX3Nob3J0X25hbWUoKTsKLQkKKwogCSMgQ2hlY2sgaWYgdGhlIGNvbXB1dGVyIGlzIGpvaW5lZCB0byBhbnkgQUQgZG9tYWluCiAJbXkgJGNvbXB1dGVyX2N1cnJlbnRfZG9tYWluX25hbWUgPSAkc2VsZi0+YWRfZ2V0X2N1cnJlbnRfZG9tYWluKCk7CiAJaWYgKCRjb21wdXRlcl9jdXJyZW50X2RvbWFpbl9uYW1lKSB7Ci0JCSRzZWxmLT5hZF9kZWxldGVfY29tcHV0ZXIoJGNvbXB1dGVyX25hbWUsICRjb21wdXRlcl9jdXJyZW50X2RvbWFpbl9uYW1lKTsKKwkJIyBjaGVjayB0aGF0IG5vZGUgaXMgbm90IGEgZG9tYWluIGNvbnRyb2xsZXIKKwkJbXkgJGNoZWNrX2RjID0gJHNlbGYtPmFkX2NoZWNrX2RvbWFpbl9jb250cm9sbGVyKCk7CisJCWlmICghZGVmaW5lZCgkY2hlY2tfZGMpIHx8ICRjaGVja19kYyA9PSAwKSB7CisJCQkjIGlmIGNhbGwgdG8gYWRfY2hlY2tfZG9tYWluX2NvbnRyb2xsZXIgZmFpbHMsIHN0aWxsIGF0dGVtcHQgdG8KKwkJCSMgZGVsZXRlIGZyb20gZG9tYWluOyB1bnVzdWFsIGZvciBub2RlIHRvIGJlIGEgZG9tYWluIGNvbnRyb2xsZXIKKwkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiYXR0ZW1wdGluZyB0byBkZWxldGUgY29tcHV0ZXIgZnJvbSBkb21haW4iKTsKKwkJCSRzZWxmLT5hZF9kZWxldGVfY29tcHV0ZXIoKTsKKwkJfQorCQllbHNpZiAoJGNoZWNrX2RjID09IDEpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiY29tcHV0ZXIgaXMgYSBkb21haW4gY29udHJvbGxlciwgbm90IGF0dGVtcHRpbmcgdG8gZGVsZXRlIGNvbXB1dGVyIGZyb20gaXRzIG93biBkb21haW4iKTsKKwkJfQogCX0KLQkKKwogCXJldHVybiAkc2VsZi0+U1VQRVI6OnByZV9yZWxvYWQoKTsKIH0KIApAQCAtMTE2Myw2ICsxMjAxLDE0IEBACiAJCXJldHVybiAwOwogCX0KIAkKKwlpZiAoISRzZWxmLT51bm1vdW50X25mc19zaGFyZXMoKSkgeworCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHVubW91bnQgbmZzIHNoYXJlcyIpOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAic3VjY2Vzc2Z1bGx5IHVubW91bnRlZCBhbnkgTkZTIHNoYXJlcyIpOworCX0KKwogCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAiJGNvbXB1dGVyX25vZGVfbmFtZSBoYXMgYmVlbiBzYW5pdGl6ZWQiKTsKIAlyZXR1cm4gMTsKIH0gIyMgZW5kIHN1YiBzYW5pdGl6ZQpAQCAtMzg5MiwxMSArMzkzOCwxNCBAQAogCQkJCXJldHVybiAwOwogCQkJfQogCQkJCi0JCQkjIFNldCBzc2hkIHNlcnZpY2Ugc3RhcnR1cCBtb2RlIHRvIGF1dG8KLQkJCWlmICghJHNlbGYtPnNldF9zZXJ2aWNlX3N0YXJ0dXBfbW9kZSgnc3NoZCcsICdhdXRvJykpIHsKLQkJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAicmVib290IG5vdCBhdHRlbXB0ZWQsIHVuYWJsZSB0byBzZXQgc3NoZCBzZXJ2aWNlIHN0YXJ0dXAgbW9kZSB0byBhdXRvIik7CisJCQkjIFNldCBzc2hkIHNlcnZpY2Ugc3RhcnR1cCBtb2RlIHRvIG1hbnVhbAorCQkJaWYgKCEkc2VsZi0+c2V0X3NlcnZpY2Vfc3RhcnR1cF9tb2RlKCdzc2hkJywgJ21hbnVhbCcpKSB7CisJCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInJlYm9vdCBub3QgYXR0ZW1wdGVkLCB1bmFibGUgdG8gc2V0IHNzaGQgc2VydmljZSBzdGFydHVwIG1vZGUgdG8gbWFudWFsIik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CisJCQllbHNlIHsKKwkJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInNzaGQgc2VydmljZSBzZXQgdG8gbWFudWFsIHN0YXJ0Iik7CisJCQl9CiAJCQkKIAkJCSMgTWFrZSBzdXJlIHBpbmcgYWNjZXNzIGlzIGVuYWJsZWQgZnJvbSBwcml2YXRlIElQIGFkZHJlc3NlcwogCQkJaWYgKCEkc2VsZi0+ZmlyZXdhbGxfZW5hYmxlX3BpbmdfcHJpdmF0ZSgpKSB7CkBAIC03MDI3LDcgKzcwNzYsMTIgQEAKIAlpZiAoISRzZWxmLT5kZWxldGVfZmlsZXNfYnlfcGF0dGVybigkTk9ERV9DT05GSUdVUkFUSU9OX0RJUkVDVE9SWSwgJy4qXC5zdm4uKicpKSB7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJ1bmFibGUgdG8gZGVsZXRlIFN1YnZlcnNpb24gZmlsZXMgdW5kZXI6ICROT0RFX0NPTkZJR1VSQVRJT05fRElSRUNUT1JZIik7CiAJfQotCQorCisJIyBEZWxldGUgYW55IEdpdElnbm9yZSBmaWxlcyB3aGljaCBtYXkgaGF2ZSBiZWVuIGNvcGllZAorCWlmICghJHNlbGYtPmRlbGV0ZV9maWxlc19ieV9wYXR0ZXJuKCROT0RFX0NPTkZJR1VSQVRJT05fRElSRUNUT1JZLCAnLipcLmdpdGlnbm9yZS4qJykpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInVuYWJsZSB0byBkZWxldGUgR2l0SWdub3JlIGZpbGVzIHVuZGVyOiAkTk9ERV9DT05GSUdVUkFUSU9OX0RJUkVDVE9SWSIpOworCX0KKwogCSRzZWxmLT5zZXRfZmlsZV9vd25lcigkTk9ERV9DT05GSUdVUkFUSU9OX0RJUkVDVE9SWSwgJ3Jvb3QnKTsKIAkKIAkjIEZpbmQgYW55IGZpbGVzIGNvbnRhaW5pbmcgYSAnV0lORE9XU19ST09UX1BBU1NXT1JEJyBzdHJpbmcgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgcm9vdCBwYXNzd29yZApAQCAtODI5OSw2ICs4MzUzLDcgQEAKIAogW0hLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxQb2xpY2llc1xNaWNyb3NvZnRcV2luZG93c1xXaW5kb3dzVXBkYXRlXEFVXQogIk5vQXV0b1VwZGF0ZSI9ZHdvcmQ6MDAwMDAwMDEKKyJBVU9wdGlvbnMiPWR3b3JkOjAwMDAwMDAxCiBFT0YKIAogCSMgSW1wb3J0IHRoZSBzdHJpbmcgaW50byB0aGUgcmVnaXN0cnkKQEAgLTEyNjkwLDYgKzEyNzQ1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAkKKwlteSAkdXNlX2RhdGFiYXNlX2hvc3RuYW1lcyA9ICRzZWxmLT5kYXRhLT5nZXRfaW1hZ2VfZG9tYWluX3VzZWRiaG9zdG5hbWVzKCk7CiAJbXkgJGRhdGFiYXNlX2NvbXB1dGVyX2hvc3RuYW1lID0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9ob3N0bmFtZSgpOwogCW15ICRzeXN0ZW0zMl9wYXRoID0gJHNlbGYtPmdldF9zeXN0ZW0zMl9wYXRoKCkgfHwgcmV0dXJuOwogCQpAQCAtMTI3MjYsOCArMTI3ODIsMjAgQEAKIAkJJGRuc19zdWZmaXggPSAkMjsKIAl9CiAJCi0JIyBEaXNhYmxlICdDaGFuZ2UgcHJpbWFyeSBETlMgc3VmZml4IHdoZW4gZG9tYWluIG1lbWJlcnNoaXAgY2hhbmdlcycKLQkkc2VsZi0+cmVnX2FkZCgnSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldFxzZXJ2aWNlc1xUY3BpcFxQYXJhbWV0ZXJzJywgJ1N5bmNEb21haW5XaXRoTWVtYmVyc2hpcCcsICdSRUdfRFdPUkQnLCAwKTsKKwlpZiAoJHVzZV9kYXRhYmFzZV9ob3N0bmFtZXMgPT0gMSkgeworCQkkbmV3X2NvbXB1dGVyX25hbWUgPSAkZGF0YWJhc2VfY29tcHV0ZXJfaG9zdG5hbWU7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiYWN0aXZlIGRpcmVjdG9yeSBmb3JjZXMgdXNpbmcgZGF0YWJhc2UgY29uZmlndXJlZCBob3N0bmFtZTogJG5ld19jb21wdXRlcl9uYW1lIik7CisJCSMgRW5hYmxlICdDaGFuZ2UgcHJpbWFyeSBETlMgc3VmZml4IHdoZW4gZG9tYWluIG1lbWJlcnNoaXAgY2hhbmdlcycKKwkJJHNlbGYtPnJlZ19hZGQoJ0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcc2VydmljZXNcVGNwaXBcUGFyYW1ldGVycycsICdTeW5jRG9tYWluV2l0aE1lbWJlcnNoaXAnLCAnUkVHX0RXT1JEJywgMSk7CisJfQorCWVsc2UgeworCQkjIERpc2FibGUgJ0NoYW5nZSBwcmltYXJ5IEROUyBzdWZmaXggd2hlbiBkb21haW4gbWVtYmVyc2hpcCBjaGFuZ2VzJworCQkkc2VsZi0+cmVnX2FkZCgnSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldFxzZXJ2aWNlc1xUY3BpcFxQYXJhbWV0ZXJzJywgJ1N5bmNEb21haW5XaXRoTWVtYmVyc2hpcCcsICdSRUdfRFdPUkQnLCAwKTsKKwkJIyBTZXQgdGhlIEROUyBzdWZmaXggcmVnaXN0cnkga2V5CisJCWlmICgkZG5zX3N1ZmZpeCkgeworCQkJJHNlbGYtPnJlZ19hZGQoJ0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcc2VydmljZXNcVGNwaXBcUGFyYW1ldGVycycsICdOViBEb21haW4nLCAnUkVHX1NaJywgJGRuc19zdWZmaXgpOworCQl9CisJfQogCQogCSMgQXNzZW1ibGUgdGhlIGNvbW1hbmQKIAlteSAkY29tbWFuZCA9ICJlY2hvIHwgY21kLmV4ZSAvYyBcIiRzeXN0ZW0zMl9wYXRoL1diZW0vd21pYy5leGUgQ09NUFVURVJTWVNURU0gV0hFUkUgTmFtZT1cXFwiJUNPTVBVVEVSTkFNRSVcXFwiIFJlbmFtZSBcXFwiJG5ld19jb21wdXRlcl9uYW1lXFxcIlwiIjsKQEAgLTEyNzQ1LDExICsxMjgxMyw2IEBACiAJCXJldHVybiAwOwogCX0KIAkKLQkjIFNldCB0aGUgRE5TIHN1ZmZpeCByZWdpc3RyeSBrZXkKLQlpZiAoJGRuc19zdWZmaXgpIHsKLQkJJHNlbGYtPnJlZ19hZGQoJ0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcc2VydmljZXNcVGNwaXBcUGFyYW1ldGVycycsICdOViBEb21haW4nLCAnUkVHX1NaJywgJGRuc19zdWZmaXgpOwotCX0KLQkKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTM3ODAsNiArMTM4NDMsNyBAQAogCW15ICRjb21wdXRlcl9uYW1lCT0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9zaG9ydF9uYW1lKCk7CiAJbXkgJGltYWdlX25hbWUJPSAkc2VsZi0+ZGF0YS0+Z2V0X2ltYWdlX25hbWUoKTsKIAkKKwlteSAkaW1hZ2VfZG9tYWluX2lkID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9kb21haW5faWQoKTsKIAlteSAkZG9tYWluX2Ruc19uYW1lID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9kb21haW5fZG5zX25hbWUoKTsKIAlteSAkZG9tYWluX3VzZXJuYW1lID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9kb21haW5fdXNlcm5hbWUoKTsKIAlteSAkZG9tYWluX3Bhc3N3b3JkID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9kb21haW5fcGFzc3dvcmQoKTsKQEAgLTEzODEyLDcgKzEzODc2LDcgQEAKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImF0dGVtcHRpbmcgdG8gam9pbiAkY29tcHV0ZXJfbmFtZSB0byBBRFxuIiAuCiAJCSJkb21haW4gRE5TIG5hbWUgICAgOiAkZG9tYWluX2Ruc19uYW1lXG4iIC4KIAkJImRvbWFpbiB1c2VyIHN0cmluZyA6ICRkb21haW5fdXNlcl9zdHJpbmdcbiIgLgotCQkiZG9tYWluIHBhc3N3b3JkICAgIDogJGRvbWFpbl9wYXNzd29yZCAoZXNjYXBlZDogJGRvbWFpbl9wYXNzd29yZF9lc2NhcGVkKVxuIiAuCisJCSMiZG9tYWluIHBhc3N3b3JkICAgIDogJGRvbWFpbl9wYXNzd29yZCAoZXNjYXBlZDogJGRvbWFpbl9wYXNzd29yZF9lc2NhcGVkKVxuIiAuCiAJCSJkb21haW4gY29tcHV0ZXIgT1UgOiAiIC4gKCRjb21wdXRlcl9vdV9kbiA/ICRjb21wdXRlcl9vdV9kbiA6ICc8bm90IGNvbmZpZ3VyZWQ+JykKIAkpOwogCQpAQCAtMTM4NjMsMTIgKzEzOTI3LDE3IEBACiBcJHVzZXJuYW1lID0gJyRkb21haW5fdXNlcl9zdHJpbmcnCiBcJHBhc3N3b3JkID0gJyRkb21haW5fcGFzc3dvcmRfZXNjYXBlZCcKIFdyaXRlLUhvc3QgInVzZXJuYW1lIChiZXR3ZWVuID4qPCk6IGBuPlwkdXNlcm5hbWU8YG4iCi1Xcml0ZS1Ib3N0ICJwYXNzd29yZCAoYmV0d2VlbiA+KjwpOiBgbj5cJHBhc3N3b3JkPGBuIgogXCRwc19jcmVkZW50aWFsID0gTmV3LU9iamVjdCBTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlBzQ3JlZGVudGlhbChcJHVzZXJuYW1lLCAoQ29udmVydFRvLVNlY3VyZVN0cmluZyBcJHBhc3N3b3JkIC1Bc1BsYWluVGV4dCAtRm9yY2UpKQogQWRkLUNvbXB1dGVyIC1Eb21haW5OYW1lICckZG9tYWluX2Ruc19uYW1lJyAtQ3JlZGVudGlhbCBcJHBzX2NyZWRlbnRpYWwgJGRvbWFpbl9jb21wdXRlcl9jb21tYW5kX3NlY3Rpb24gLVZlcmJvc2UgLUVycm9yQWN0aW9uIFN0b3AKIEVPRgorCisjIG1vdmUgYW5kIHVuY29tbWVudCBiZWxvdyBsaW5lIHRvIGFib3ZlIEVPRiB0byBpbmNsdWRlIGRlY3J5cHRlZCBwYXNzd29yZCBpbiBvdXRwdXQgZm9yIGRlYnVnZ2luZworI1dyaXRlLUhvc3QgInBhc3N3b3JkIChiZXR3ZWVuID4qPCk6IGBuPlwkcGFzc3dvcmQ8YG4iCisKKwkobXkgJHNhbml0aXplZF9wYXNzd29yZCA9ICRkb21haW5fcGFzc3dvcmRfZXNjYXBlZCkgPX4gcy8uLyovZzsKKwkobXkgJHNhbml0aXplZF9zY3JpcHQgPSAkYWRfcG93ZXJzaGVsbF9zY3JpcHQpID1+IHMvcGFzc3dvcmQgPSAnLionXG4vcGFzc3dvcmQgPSAnJHNhbml0aXplZF9wYXNzd29yZCdcbi87CiAJCi0Jbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJhdHRlbXB0aW5nIHRvIGpvaW4gJGNvbXB1dGVyX25hbWUgdG8gJGRvbWFpbl9kbnNfbmFtZSBkb21haW4gdXNpbmcgUG93ZXJTaGVsbCBzY3JpcHQ6XG4kYWRfcG93ZXJzaGVsbF9zY3JpcHQiKTsKKwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImF0dGVtcHRpbmcgdG8gam9pbiAkY29tcHV0ZXJfbmFtZSB0byAkZG9tYWluX2Ruc19uYW1lIGRvbWFpbiB1c2luZyBQb3dlclNoZWxsIHNjcmlwdDpcbiRzYW5pdGl6ZWRfc2NyaXB0Iik7CiAJbXkgKCRleGl0X3N0YXR1cywgJG91dHB1dCkgPSAkc2VsZi0+cnVuX3Bvd2Vyc2hlbGxfYXNfc2NyaXB0KCRhZF9wb3dlcnNoZWxsX3NjcmlwdCwgMCwgMCk7ICMgKHBhdGgsIHNob3cgb3V0cHV0LCByZXRhaW4gZmlsZSkKIAlpZiAoIWRlZmluZWQoJG91dHB1dCkpIHsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBleGVjdXRlIFBvd2VyU2hlbGwgc2NyaXB0IHRvIGpvaW4gJGNvbXB1dGVyX25hbWUgdG8gQWN0aXZlIERpcmVjdG9yeSBkb21haW4iKTsKQEAgLTEzOTQ0LDYgKzE0MDEzLDggQEAKIAkJcmV0dXJuOwogCX0KIAllbHNlIHsKKwkJJHNlbGYtPnNldF9jdXJyZW50X2ltYWdlX3RhZygnYWRkb21haW5faWQnLCAkaW1hZ2VfZG9tYWluX2lkKTsKKwkJCiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCAkY29tcHV0ZXJfbmFtZSB0byBBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbjogJGRvbWFpbl9kbnNfbmFtZSwgdGltZSBzdGF0aXN0aWNzOlxuIiAuCiAJCQkiY29tcHV0ZXIgcmVuYW1lIHJlYm9vdCA6ICRyZW5hbWVfY29tcHV0ZXJfcmVib290X2R1cmF0aW9uIHNlY29uZHNcbiIgLgogCQkJIkFEIGpvaW4gcmVib290ICAgICAgICAgOiAkYWRfam9pbl9yZWJvb3RfZHVyYXRpb24gc2Vjb25kc1xuIiAuCkBAIC0xNDE2MCw3ICsxNDIzMSwxOSBAQAogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIiRjb21wdXRlcl9uYW1lIGRvZXMgbm90IG5lZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIEFEIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBqb2luZWQgdG8gYSBkb21haW4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCQorCisJIyBjaGVjayB0aGF0IG5vZGUgaXMgbm90IGEgZG9tYWluIGNvbnRyb2xsZXIKKwlteSAkY2hlY2tfZGMgPSAkc2VsZi0+YWRfY2hlY2tfZG9tYWluX2NvbnRyb2xsZXIoKTsKKwlpZiAoIWRlZmluZWQoJGNoZWNrX2RjKSB8fCAkY2hlY2tfZGMgPT0gMCkgeworCQkjIGlmIGNhbGwgdG8gYWRfY2hlY2tfZG9tYWluX2NvbnRyb2xsZXIgZmFpbHMsIHN0aWxsIGF0dGVtcHQgdG8KKwkJIyBkZWxldGUgZnJvbSBkb21haW47IHVudXN1YWwgZm9yIG5vZGUgdG8gYmUgYSBkb21haW4gY29udHJvbGxlcgorCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImF0dGVtcHRpbmcgdG8gZGVsZXRlIGNvbXB1dGVyIGZyb20gZG9tYWluIik7CisJfQorCWVsc2lmICgkY2hlY2tfZGMgPT0gMSkgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImNvbXB1dGVyIGlzIGEgZG9tYWluIGNvbnRyb2xsZXIsIG5vdCBhdHRlbXB0aW5nIHRvIGRlbGV0ZSBjb21wdXRlciBmcm9tIGl0cyBvd24gZG9tYWluIik7CisJCXJldHVybiAxOworCX0KKwogCSMgRXhwZWN0ZWQgb3V0cHV0OgogCSMgRXhlY3V0aW5nIChcXDxDT01QVVRFUk5BTUU+XFJPT1RcQ0lNVjI6V2luMzJfQ29tcHV0ZXJTeXN0ZW0uTmFtZT0iPENPTVBVVEVSTkFNRT4iKS0+VW5Kb2luRG9tYWluT3JXb3JrZ3JvdXAoKQogCSMgTWV0aG9kIGV4ZWN1dGlvbiBzdWNjZXNzZnVsLnMKQEAgLTE0MjcwLDcgKzE0MzUzLDcgQEAKIAkjCQogCSMJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJyZW1vdmVkICRjb21wdXRlcl9uYW1lIGZyb20gQWN0aXZlIERpcmVjdG9yeSBkb21haW4sIG91dHB1dDpcbiIgLiBqb2luKCJcbiIsIEAkb3V0cHV0KSk7CiAJCi0JJHNlbGYtPmFkX2RlbGV0ZV9jb21wdXRlcigkY29tcHV0ZXJfbmFtZSwgJGNvbXB1dGVyX2N1cnJlbnRfZG9tYWluKTsKKwkkc2VsZi0+YWRfZGVsZXRlX2NvbXB1dGVyKCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0Mzg4LDExICsxNDQ3MSwxMyBAQAogCW15ICRkb21haW5fdXNlcm5hbWU7CiAJbXkgJGRvbWFpbl9wYXNzd29yZDsKIAlteSAkaW1hZ2VfZG9tYWluX2Ruc19uYW1lID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9kb21haW5fZG5zX25hbWUoMCkgfHwgJyc7Ci0JaWYgKGRlZmluZWQoJGFyZ3VtZW50cy0+e2RvbWFpbl9kbnNfbmFtZX0pICYmICRhcmd1bWVudHMtPntkb21haW5fZG5zX25hbWV9IG5lICRpbWFnZV9kb21haW5fZG5zX25hbWUpIHsKKwlpZiAoZGVmaW5lZCgkYXJndW1lbnRzLT57ZG9tYWluX2Ruc19uYW1lfSkpIHsKIAkJJGRvbWFpbl9kbnNfbmFtZSA9ICRhcmd1bWVudHMtPntkb21haW5fZG5zX25hbWV9OwotCQkoJGRvbWFpbl91c2VybmFtZSwgJGRvbWFpbl9wYXNzd29yZCkgPSAkc2VsZi0+ZGF0YS0+Z2V0X2RvbWFpbl9jcmVkZW50aWFscygkZG9tYWluX2Ruc19uYW1lKTsKKwkJJGRvbWFpbl91c2VybmFtZSA9ICRhcmd1bWVudHMtPntkb21haW5fdXNlcm5hbWV9OworCQkkZG9tYWluX3Bhc3N3b3JkID0gJGFyZ3VtZW50cy0+e2RvbWFpbl9wYXNzd29yZH07CisJCQogCQlpZiAoIWRlZmluZWQoJGRvbWFpbl91c2VybmFtZSkgfHwgIWRlZmluZWQoJGRvbWFpbl9wYXNzd29yZCkpIHsKLQkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJ1bmFibGUgdG8gc2VhcmNoIGRvbWFpbjogJGRvbWFpbl9kbnNfbmFtZSwgZG9tYWluIEROUyBuYW1lIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgYnV0IGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIGZyb20gZXhpc3RpbmcgJ2FkZG9tYWluJyB0YWJsZSBlbnRyaWVzIik7CisJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAidW5hYmxlIHRvIHNlYXJjaCBkb21haW46ICRkb21haW5fZG5zX25hbWUsIGRvbWFpbiBETlMgbmFtZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIGJ1dCBjcmVkZW50aWFscyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTQ0NTgsMTAgKzE0NTQzLDEyIEBACiAKIFdyaXRlLUhvc3QgImRvbWFpbjogJGRvbWFpbl9kbnNfbmFtZSIKIFdyaXRlLUhvc3QgImRvbWFpbiB1c2VybmFtZSAoYmV0d2VlbiA+KjwpOiA+XCRkb21haW5fdXNlcm5hbWU8IgotV3JpdGUtSG9zdCAiZG9tYWluIHBhc3N3b3JkIChiZXR3ZWVuID4qPCk6ID5cJGRvbWFpbl9wYXNzd29yZDwiCi0KIEVPRgogCisjIG1vdmUgYW5kIHVuY29tbWVudCBiZWxvdyBsaW5lIHRvIGFib3ZlIEVPRiB0byBpbmNsdWRlIGRlY3J5cHRlZCBwYXNzd29yZCBpbiBvdXRwdXQgZm9yIGRlYnVnZ2luZworI1dyaXRlLUhvc3QgImRvbWFpbiBwYXNzd29yZCAoYmV0d2VlbiA+KjwpOiA+XCRkb21haW5fcGFzc3dvcmQ8IgorCisKIAkkcG93ZXJzaGVsbF9zY3JpcHRfY29udGVudHMgLj0gPDwnRU9GJzsKICR0eXBlID0gW1N5c3RlbS5EaXJlY3RvcnlTZXJ2aWNlcy5BY3RpdmVEaXJlY3RvcnkuRGlyZWN0b3J5Q29udGV4dFR5cGVdIkRvbWFpbiIKICRkaXJlY3RvcnlfY29udGV4dCA9IE5ldy1PYmplY3QgU3lzdGVtLkRpcmVjdG9yeVNlcnZpY2VzLkFjdGl2ZURpcmVjdG9yeS5EaXJlY3RvcnlDb250ZXh0KCR0eXBlLCAkZG9tYWluX2Ruc19uYW1lLCAkZG9tYWluX3VzZXJuYW1lLCAkZG9tYWluX3Bhc3N3b3JkKQpAQCAtMTQ0NzUsNyArMTQ1NjIsNyBAQAogICAgZWxzZSB7CiAgICAgICAkZXhjZXB0aW9uX21lc3NhZ2UgPSAkXy5FeGNlcHRpb24uTWVzc2FnZQogICAgfQotICAgV3JpdGUtSG9zdCAiRVJST1I6IGZhaWxlZCB0byBjb25uZWN0IHRvICRkb21haW5fZG5zX25hbWUgZG9tYWluLCB1c2VybmFtZTogJGRvbWFpbl91c2VybmFtZSwgcGFzc3dvcmQ6ICRkb21haW5fcGFzc3dvcmQsIGVycm9yOiAkZXhjZXB0aW9uX21lc3NhZ2UiCisgICBXcml0ZS1Ib3N0ICJFUlJPUjogZmFpbGVkIHRvIGNvbm5lY3QgdG8gJGRvbWFpbl9kbnNfbmFtZSBkb21haW4sIHVzZXJuYW1lOiAkZG9tYWluX3VzZXJuYW1lLCBlcnJvcjogJGV4Y2VwdGlvbl9tZXNzYWdlIgogICAgZXhpdAogfQogCkBAIC0xNDU3NywxNiArMTQ2NjQsMTEgQEAKIAogPWhlYWQyIGFkX2RlbGV0ZV9jb21wdXRlcgogCi0gUGFyYW1ldGVycyAgOiAkY29tcHV0ZXJfc2FtYWNjb3VudG5hbWUgKG9wdGlvbmFsKSwgJGRvbWFpbl9kbnNfbmFtZSAob3B0aW9uYWwpCisgUGFyYW1ldGVycyAgOiBub25lCiAgUmV0dXJucyAgICAgOiBib29sZWFuCiAgRGVzY3JpcHRpb24gOiBEZWxldGVzIGEgY29tcHV0ZXIgb2JqZWN0IGZyb20gdGhlIGFjdGl2ZSBkaXJlY3RvcnkgZG9tYWluIHdpdGggYQotICAgICAgICAgICAgICAgc0FNQWNjb3VudE5hbWUgYXR0cmlidXRlIG1hdGNoaW5nIHRoZSBhcmd1bWVudC4gSWYgbm8gYXJndW1lbnQgaXMKLSAgICAgICAgICAgICAgIHByb3ZpZGVkLCB0aGUgc2hvcnQgbmFtZSBvZiB0aGUgcmVzZXJ2YXRpb24gY29tcHV0ZXIgaXMgdXNlZC4KLSAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgVGhlIHNBTUFjY291bnROYW1lIGF0dHJpYnV0ZSBmb3IgY29tcHV0ZXJzIGluIEFjdGl2ZSBEaXJlY3RvcnkKLSAgICAgICAgICAgICAgIGFsd2F5cyBlbmQgd2l0aCBhIGRvbGxhciBzaWduLiBUaGUgdHJhaWxpbmcgZG9sbGFyIHNpZ24gZG9lcyBub3QKLSAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGFyZ3VtZW5hdC4gT25lIHdpbGwgYmUgYWRkZWQgdG8gdGhlCi0gICAgICAgICAgICAgICBMREFQIGZpbHRlciB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIG9iamVjdCB0byBkZWxldGUuCisJCQkJCXNBTUFjY291bnROYW1lIGF0dHJpYnV0ZSBtYXRjaGluZyB0aGUgc2hvcnQgbmFtZSBvZiB0aGUKKwkJCQkJcmVzZXJ2YXRpb24gY29tcHV0ZXIgdGhhdCBpcyB1c2VkLgogCiA9Y3V0CiAKQEAgLTE0NTk2LDI4ICsxNDY3OCw2NCBAQAogCQlub3RpZnkoJEVSUk9SU3snQ1JJVElDQUwnfSwgMCwgInN1YnJvdXRpbmUgd2FzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCBtdXN0IGJlIGNhbGxlZCBhcyBhIGNsYXNzIG1ldGhvZCIpOwogCQlyZXR1cm47CiAJfQorCisJIyBzdGF0aWMgdmFyaWFibGUgdG8gdHJhY2sgaWYgZnVuY3Rpb24gYmVpbmcgY2FsbCByZWN1cnNpdmVseQorCUNPUkU6OnN0YXRlICRyZWN1cnNpb24gPSAwOworCisJbXkgJGNvbXB1dGVyX3NhbWFjY291bnRuYW1lID0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9zaG9ydF9uYW1lKCk7CisKKwlteSAoJGRvbWFpbl9kbnNfbmFtZSwgJHVzZXJuYW1lLCAkZGVjcnlwdGVkX3Bhc3N3b3JkKTsKKwlteSAkcmV0dXJuOworCisJaWYoJHJlY3Vyc2lvbiA9PSAwKSB7CisJCSgkZG9tYWluX2Ruc19uYW1lLCAkdXNlcm5hbWUsICRkZWNyeXB0ZWRfcGFzc3dvcmQpID0gJHNlbGYtPmRhdGEtPmdldF9kb21haW5fY3JlZGVudGlhbHMoKTsKKwl9CisJZWxzZSB7CisJCW15ICRhZGRvbWFpbl9pZCA9ICRzZWxmLT5nZXRfY3VycmVudF9pbWFnZV90YWcoJ2FkZG9tYWluX2lkJyk7CisJCSRhZGRvbWFpbl9pZCA9fiBzLyBcKC4qJC8vOworCQlpZiAoIWRlZmluZWQoJGFkZG9tYWluX2lkKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJKCRkb21haW5fZG5zX25hbWUsICR1c2VybmFtZSwgJGRlY3J5cHRlZF9wYXNzd29yZCkgPSAkc2VsZi0+ZGF0YS0+Z2V0X2RvbWFpbl9jcmVkZW50aWFscygkYWRkb21haW5faWQpOworCX0KKwlpZiAoIWRlZmluZWQoJGRvbWFpbl9kbnNfbmFtZSkgfHwgIWRlZmluZWQoJHVzZXJuYW1lKSB8fCAhZGVmaW5lZCgkZGVjcnlwdGVkX3Bhc3N3b3JkKSkgeworCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIGdldCBkb21haW4gY3JlZGVudGlhbHMgZm9yICRjb21wdXRlcl9zYW1hY2NvdW50bmFtZSIpOworCQlpZiAoJHJlY3Vyc2lvbiA9PSAwKSB7CisJCQkkcmVjdXJzaW9uID0gMTsKKwkJCSRyZXR1cm4gPSAkc2VsZi0+YWRfZGVsZXRlX2NvbXB1dGVyKCk7CisJCQkkcmVjdXJzaW9uID0gMDsKKwkJCXJldHVybiAkcmV0dXJuOworCQl9CisJCXJldHVybjsKKwl9CiAJCi0JbXkgKCRjb21wdXRlcl9zYW1hY2NvdW50bmFtZSwgJGRvbWFpbl9kbnNfbmFtZSkgPSBAXzsKLQkKLQkkY29tcHV0ZXJfc2FtYWNjb3VudG5hbWUgPSAkc2VsZi0+ZGF0YS0+Z2V0X2NvbXB1dGVyX3Nob3J0X25hbWUoKSB1bmxlc3MgJGNvbXB1dGVyX3NhbWFjY291bnRuYW1lOwotCQotCSMgTWFrZSBzdXJlIGNvbXB1dGVyIHNhbUFjY291bnROYW1lIGRvZXMgbm90IGNvbnRhaW4gYSB0cmFpbGluZyBkb2xsYXIgc2lnbgotCSMgQSBkb2xsYXIgc2lnbiB3aWxsIGJlIHByZXNlbnQgaWYgcmV0cmlldmVkIGRpcmVjdGx5IGZyb20gQUQKIAkkY29tcHV0ZXJfc2FtYWNjb3VudG5hbWUgPX4gcy9cJCokL1wkL2c7Ci0JCiAJbXkgJGFkX3NlYXJjaF9hcmd1bWVudHMgPSB7CiAJCSdsZGFwX2ZpbHRlcicgPT4gewogCQkJJ29iamVjdENsYXNzJyA9PiAnY29tcHV0ZXInLAogCQkJJ3NBTUFjY291bnROYW1lJyA9PiAkY29tcHV0ZXJfc2FtYWNjb3VudG5hbWUsCi0JCX0KKwkJfSwKKwkJJ2RvbWFpbl9kbnNfbmFtZScgPT4gJGRvbWFpbl9kbnNfbmFtZSwKKwkJJ2RvbWFpbl91c2VybmFtZScgPT4gJHVzZXJuYW1lLAorCQknZG9tYWluX3Bhc3N3b3JkJyA9PiAkZGVjcnlwdGVkX3Bhc3N3b3JkLAogCX07CiAJCi0JIyBJZiBhIHNwZWNpZmljIGRvbWFpbiB3YXMgc3BlY2lmaWVkLCByZXRyaWV2ZSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZvciB0aGF0IGRvbWFpbgotCWlmICgkZG9tYWluX2Ruc19uYW1lKSB7Ci0JCSRhZF9zZWFyY2hfYXJndW1lbnRzLT57ZG9tYWluX2Ruc19uYW1lfSA9ICRkb21haW5fZG5zX25hbWU7Ci0JfQorCSNub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImF0dGVtcHRpbmcgdG8gZGVsZXRlIEFjdGl2ZSBEaXJlY3RvcnkgY29tcHV0ZXIgb2JqZWN0LCBhcmd1bWVudHM6XG4iIC4gZm9ybWF0X2RhdGEoJGFkX3NlYXJjaF9hcmd1bWVudHMpKTsKIAkKLQlyZXR1cm4gJHNlbGYtPmFkX3NlYXJjaCgkYWRfc2VhcmNoX2FyZ3VtZW50cyk7CisJJHJldHVybiA9ICRzZWxmLT5hZF9zZWFyY2goJGFkX3NlYXJjaF9hcmd1bWVudHMpOworCWlmICgkcmV0dXJuID09IDEpIHsKKwkJcmV0dXJuIDE7CisJfQorCWVsc2lmICgkcmVjdXJzaW9uID09IDEpIHsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIkZhaWxlZCB0byBkZWxldGUgY29tcHV0ZXIgZnJvbSBBRCB1c2luZyBBRCBkb21haW4gaW5mbyBmcm9tIGltYWdlOyB0cnlpbmcgYWdhaW4gd2l0aCBpbmZvIGZyb20gY3VycmVudGltYWdlLnR4dCIpOworCQkkcmVjdXJzaW9uID0gMTsKKwkJJHJldHVybiA9ICRzZWxmLT5hZF9kZWxldGVfY29tcHV0ZXIoKTsKKwkJJHJlY3Vyc2lvbiA9IDA7CisJCXJldHVybiAkcmV0dXJuOworCX0KIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTQ3NzAsNiArMTQ4ODgsNTAgQEAKIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCis9aGVhZDIgYWRfY2hlY2tfZG9tYWluX2NvbnRyb2xsZXIKKworIFBhcmFtZXRlcnMgIDogbm9uZQorIFJldHVybnMgICAgIDogYm9vbGVhbgorIERlc2NyaXB0aW9uIDogQ2hlY2tzIGlmIGNvbXB1dGVyIGlzIGNvbmZpZ3VyZWQgYXMgYSBkb21haW4gY29udHJvbGxlcjsgcmV0dXJucworICAgICAgICAgICAgICAgMCBpZiBub3QgYSBkb21haW4gY29udHJvbGxlciwgMSBpZiBhIGRvbWFpbiBjb250cm9sbGVyLCBhbmQKKyAgICAgICAgICAgICAgIG5vIHZhbHVlIG9uIGVycm9yCisKKz1jdXQKKworc3ViIGFkX2NoZWNrX2RvbWFpbl9jb250cm9sbGVyIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmIChyZWYoJHNlbGYpICF+IC93aW5kb3dzL2kpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKKwkJcmV0dXJuOworCX0KKworCW15ICRzeXN0ZW0zMl9wYXRoID0gJHNlbGYtPmdldF9zeXN0ZW0zMl9wYXRoKCkgfHwgcmV0dXJuOworCW15ICRjaGVja19kY19jb21tYW5kID0gImVjaG8gfCBjbWQuZXhlIC9jIFwiJHN5c3RlbTMyX3BhdGgvV2JlbS93bWljLmV4ZSAvSU5URVJBQ1RJVkU6T0ZGIENPTVBVVEVSU1lTVEVNIEdFVCBEb21haW5Sb2xlXCIiOworCW15ICgkY2hlY2tfZGNfZXhpdF9zdGF0dXMsICRjaGVja19kY19vdXRwdXQpID0gJHNlbGYtPmV4ZWN1dGUoJGNoZWNrX2RjX2NvbW1hbmQpOworCWlmICghZGVmaW5lZCgkY2hlY2tfZGNfb3V0cHV0KSkgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImZhaWxlZCB0byBjaGVjayBmb3Igbm9kZSBiZWluZyBhIGRvbWFpbiBjb250cm9sbGVyIik7CisJCXJldHVybjsKKwl9CisJZWxzaWYgKGdyZXAoL0VSUk9SL2ksIEAkY2hlY2tfZGNfb3V0cHV0KSkgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImZhaWxlZCB0byBjaGVjayBmb3Igbm9kZSBiZWluZyBhIGRvbWFpbiBjb250cm9sbGVyLCBvdXRwdXQ6XG4iIC4gam9pbigiXG4iLCBAJGNoZWNrX2RjX291dHB1dCkpOworCQlyZXR1cm47CisJfQorCWVsc2lmIChAeyRjaGVja19kY19vdXRwdXR9WzFdID1+IC9eWzAtM10kLykgeworCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgIm5vZGUgaXMgYSBub3QgYSBkb21haW4gY29udHJvbGxlciIpOworCQlyZXR1cm4gMDsKKwl9CisJZWxzaWYgKEB7JGNoZWNrX2RjX291dHB1dH1bMV0gPX4gL15bNC01XSQvKSB7CisJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAibm9kZSBpcyBhIGRvbWFpbiBjb250cm9sbGVyIik7CisJCXJldHVybiAxOworCX0KKwllbHNlIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJ1bmV4cGVjdGVkIG91dHB1dCBjaGVja2luZyBmb3Igbm9kZSBiZWluZyBhIGRvbWFpbiBjb250cm9sbGVyLCBvdXRwdXQ6XG4iIC4gam9pbigiXG4iLCBAJGNoZWNrX2RjX291dHB1dCkpOworCQlyZXR1cm47CisJfQorfQorCisjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKID1oZWFkMiBncmFudF9hZG1pbmlzdHJhdGl2ZV9hY2Nlc3MKIAogIFBhcmFtZXRlcnMgIDogJHVzZXJuYW1lCkBAIC0xNDg0OSw2ICsxNTAxMSwyNzcgQEAKIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCis9aGVhZDIgcmVzZXJ2ZQorCisgUGFyYW1ldGVycyAgOiBub25lCisgUmV0dXJucyAgICAgOiBib29sZWFuCisgRGVzY3JpcHRpb24gOiBDYWxscyBwYXJlbnQgT1MucG06OnJlc2VydmUgdGhlbiBtb3VudHMgTkZTIHNoYXJlcy4KKworPWN1dAorCitzdWIgcmVzZXJ2ZSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlpZiAocmVmKCRzZWxmKSAhfiAvV2luZG93cy9pKSB7CisJCW5vdGlmeSgkRVJST1JTeydDUklUSUNBTCd9LCAwLCAic3Vicm91dGluZSB3YXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IG11c3QgYmUgY2FsbGVkIGFzIGEgY2xhc3MgbWV0aG9kIik7CisJCXJldHVybiAwOworCX0KKwkKKwkjIENhbGwgT1MucG0ncyByZXNlcnZlIHN1YnJvdXRpbmUKKwkkc2VsZi0+U1VQRVI6OnJlc2VydmUoKSB8fCByZXR1cm47CisJCisJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJiZWdpbm5pbmcgV2luZG93cyByZXNlcnZlIHRhc2tzIik7CisJCisJIyBBdHRlbXB0IHRvIG1vdW50IE5GUyBzaGFyZXMgY29uZmlndXJlZCBmb3IgdGhlIG1hbmFnZW1lbnQgbm9kZSAoU2l0ZSBDb25maWd1cmF0aW9uID4gTkZTIE1vdW50cykKKwkkc2VsZi0+bW91bnRfbmZzX3NoYXJlcygpOworCQorCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAiV2luZG93cyByZXNlcnZlIHRhc2tzIGNvbXBsZXRlIik7CisJcmV0dXJuIDE7Cit9CisKKyMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCis9aGVhZDIgbmZzX21vdW50X3NoYXJlCisKKyBQYXJhbWV0ZXJzICA6ICRyZW1vdGVfdGFyZ2V0CisgUmV0dXJucyAgICAgOiBib29sZWFuCisgRGVzY3JpcHRpb24gOiBQcmVwYXJlcyBhIFdpbmRvd3MgaW1hZ2UgdG8gYXV0b21hdGljYWxseSBtb3VudCBhIHVzZXIncyBORlMKKyAgICAgICAgICAgICAgIHNoYXJlcyB3aGVuIHRoZSB1c2VyIGxvZ3MgaW4uCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIFRoZSBXaW5kb3dzIGltYWdlIGlzIGNoZWNrZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXF1aXJlZCBXaW5kb3dzCisgICAgICAgICAgICAgICBmZWF0dXJlcyBhcmUgaW5zdGFsbGVkIGluIHRoZSBpbWFnZS4gSWYgbm90IGluc3RhbGxlZCwgYW4gYXR0ZW1wdAorICAgICAgICAgICAgICAgaXMgbWFkZSB0byBpbnN0YWxsIHRoZW0uIElmIGFueSBmZWF0dXJlcyBhcmUgaW5zdGFsbGVkLCBhIHJlYm9vdAorICAgICAgICAgICAgICAgaXMgcGVyZm9ybWVkLgorCis9Y3V0CisKK3N1YiBuZnNfbW91bnRfc2hhcmUgeworCW15ICRzZWxmID0gc2hpZnQ7CisJaWYgKHJlZigkc2VsZikgIX4gL1dpbmRvd3MvaSkgeworCQlub3RpZnkoJEVSUk9SU3snQ1JJVElDQUwnfSwgMCwgInN1YnJvdXRpbmUgd2FzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCBtdXN0IGJlIGNhbGxlZCBhcyBhIGNsYXNzIG1ldGhvZCIpOworCQlyZXR1cm47CisJfQorCQorCW15ICgkcmVtb3RlX3RhcmdldCkgPSBAXzsKKwlpZiAoISRyZW1vdGVfdGFyZ2V0KSB7CisJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJyZW1vdGUgTkZTIHRhcmdldCBhcmd1bWVudCB3YXMgbm90IHN1cHBsaWVkIik7CisJCXJldHVybjsKKwl9CisJCisJIyBUaGlzIHN1YnJvdXRpbmUgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBhbGxvdyBtdWx0aXBsZSBzaGFyZXMgdG8gYmUgbW91bnRlZAorCSMgSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIGFwcGVuZCB0byB0aGUgYmF0Y2ggZmlsZSBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgaXQKKwlteSAkcHJldmlvdXNseV9jYWxsZWQgPSAkc2VsZi0+e25mc19tb3VudF9zaGFyZV9jYWxsZWR9OworCWlmICgkcHJldmlvdXNseV9jYWxsZWQgJiYgISRzZWxmLT57bmZzX21vdW50X3NoYXJlX3ByZXBhcmF0aW9uX2NvbXBsZXRlfSkgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInNraXBwaW5nIHN1YnNlcXVlbnQgTkZTIG1vdW50IGF0dGVtcHQsIHRoaXMgc3Vicm91dGluZSB3YXMgcHJldmlvdXNseSBjYWxsZWQgYnV0IHRoZSBwcmVwYXJhdGlvbiB0YXNrcyBmYWlsZWQgdG8gY29tcGxldGUiKTsKKwkJcmV0dXJuOworCX0KKwkKKwkkc2VsZi0+e25mc19tb3VudF9zaGFyZV9jYWxsZWR9ID0gMTsKKwkKKwlteSAkdXNlcm5hbWUgPSAkc2VsZi0+ZGF0YS0+Z2V0X3VzZXJfbG9naW5faWQoKTsKKwlteSAkdWlkID0gJHNlbGYtPmRhdGEtPmdldF91c2VyX3VpZCgpOworCW15ICRyZXNlcnZhdGlvbl9pZCA9ICRzZWxmLT5kYXRhLT5nZXRfcmVzZXJ2YXRpb25faWQoKTsKKwlteSAkY29tcHV0ZXJfbmFtZSA9ICRzZWxmLT5kYXRhLT5nZXRfY29tcHV0ZXJfbm9kZV9uYW1lKCk7CisJbXkgJG1hbmFnZW1lbnRfbm9kZV9pZCA9ICRzZWxmLT5kYXRhLT5nZXRfbWFuYWdlbWVudF9ub2RlX2lkOworCQorCW15ICRuZnNfbW91bnRfYmF0Y2hfZmlsZV9wYXRoID0gJ0M6L21vdW50X25mcy5jbWQnOworCQorCSMgT25seSBwZXJmb3JtIHRoZSBwcmVwIHRhc2tzIHRoZSBmaXJzdCB0aW1lIHRoaXMgc3Vicm91dGluZSBpcyBjYWxsZWQKKwlpZiAoJHByZXZpb3VzbHlfY2FsbGVkKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiV2luZG93cyBORlMgcHJlcGFyYXRpb24gdGFza3Mgbm90IG5lY2Vzc2FyeSwgdGhpcyBzdWJyb3V0aW5lIHdhcyBwcmV2aW91c2x5IGV4ZWN1dGVkIik7CisJfQorCWVsc2UgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImJlZ2lubmluZyBXaW5kb3dzIE5GUyBwcmVwYXJhdGlvbiB0YXNrcyIpOworCQkKKwkJJHNlbGYtPmRlbGV0ZV9maWxlKCRuZnNfbW91bnRfYmF0Y2hfZmlsZV9wYXRoKTsKKwkJCisJCW15ICR3aW5kb3dzX3Byb2R1Y3RfbmFtZSA9ICRzZWxmLT5nZXRfcHJvZHVjdF9uYW1lKCk7CisJCWlmICgkd2luZG93c19wcm9kdWN0X25hbWUgPX4gLyhXaW5kb3dzLipQcm9mZXNzaW9uYWwpLykgeworCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIldpbmRvd3MgTkZTIHNoYXJlIG5vdCBtb3VudGVkLCBDbGllbnQgZm9yIE5GUyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZWRpdGlvbjogJHdpbmRvd3NfcHJvZHVjdF9uYW1lIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkKKwkJIyBDaGVjayBpZiByZXF1aXJlZCBXaW5kb3dzIGZlYXR1cmVzIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGltYWdlCisJCSMgQXR0ZW1wdCB0byBpbnN0YWxsIHRoZW0gaWYgbWlzc2luZworCQkjIEEgcmVib290IGlzIHJlcXVpcmVkIGlmIGFueSBmZWF0dXJlcyBhcmUgaW5zdGFsbGVkCisJCW15IEByZXF1aXJlZF93aW5kb3dzX2ZlYXR1cmVfbmFtZXMgPSAoCisJCQknU2VydmljZXNGb3JORlMtQ2xpZW50T25seScsCisJCQknQ2xpZW50Rm9yTkZTLUluZnJhc3RydWN0dXJlJywKKwkJKTsKKwkJCisJCW15ICRpbnN0YWxsZWRfZmVhdHVyZV9jb3VudCA9IDA7CisJCWZvciBteSAkcmVxdWlyZWRfd2luZG93c19mZWF0dXJlX25hbWUgKEByZXF1aXJlZF93aW5kb3dzX2ZlYXR1cmVfbmFtZXMpIHsKKwkJCSNub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInNsZWVwaW5nIDEwIHNlY29uZHMgYmVmb3JlIGluc3RhbGxpbmcgbmV4dCBXaW5kb3dzIGZlYXR1cmUiKTsKKwkJCSNzbGVlcF91bmludGVycnVwdGVkKDEwKSBpZiAkaW5zdGFsbGVkX2ZlYXR1cmVfY291bnQgPiAwOworCQkJCisJCQlpZiAoISRzZWxmLT5pc193aW5kb3dzX2ZlYXR1cmVfZW5hYmxlZCgkcmVxdWlyZWRfd2luZG93c19mZWF0dXJlX25hbWUpKSB7CisJCQkJaWYgKCRzZWxmLT5lbmFibGVfd2luZG93c19mZWF0dXJlKCRyZXF1aXJlZF93aW5kb3dzX2ZlYXR1cmVfbmFtZSkpIHsKKwkJCQkJJHNlbGYtPnt3aW5kb3dzX25mc19yZWJvb3RfcmVxdWlyZWR9ID0gMTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gcHJlcGFyZSBXaW5kb3dzIE5GUywgJyRyZXF1aXJlZF93aW5kb3dzX2ZlYXR1cmVfbmFtZScgV2luZG93cyBmZWF0dXJlIGNvdWxkIG5vdCBiZSBlbmFibGVkIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCQkkaW5zdGFsbGVkX2ZlYXR1cmVfY291bnQrKzsKKwkJfQorCQkKKwkJIyBTdG9wIGFuZCBkaXNhYmxlIHRoZSAiVENQL0lQIE5ldEJJT1MgSGVscGVyIiBzZXJ2aWNlIC0gaXQgY2F1c2VzIGRlbGF5cyB1c2luZyBORlMgc2hhcmVzCisJCSRzZWxmLT5zdG9wX3NlcnZpY2UoJ2xtaG9zdHMnKTsKKwkJJHNlbGYtPnNldF9zZXJ2aWNlX3N0YXJ0dXBfbW9kZSgnbG1ob3N0cycsICdkaXNhYmxlZCcpOworCQkKKwkJIyBTZXQgdGhlIGFub255bW91cyBVSUQKKwkJJHNlbGYtPnNldF93aW5kb3dzX25mc19jbGllbnRfdWlkKCR1aWQpIHx8IHJldHVybjsKKwkJCisJCSNpZiAoJHNlbGYtPnt3aW5kb3dzX25mc19yZWJvb3RfcmVxdWlyZWR9KSB7CisJCSMJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJhdHRlbXB0aW5nIHRvIHJlYm9vdCAkY29tcHV0ZXJfbmFtZSB0byBjb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgTkZTIENsaWVudCIpOworCQkjCWlmICghJHNlbGYtPnJlYm9vdCgpKSB7CisJCSMJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gcHJlcGFyZSBXaW5kb3dzIE5GUywgZmFpbGVkIHRvIHJlYm9vdCAkY29tcHV0ZXJfbmFtZSBhZnRlciBjb25maWd1cmluZyBORlMgY2xpZW50Iik7CisJCSMJCXJldHVybjsKKwkJIwl9CisJCSN9CisJCQorCQkjIEF0dGVtcHQgdG8gc3RhcnQgdGhlIE5GUyBjbGllbnQgb3IgbWFrZSBzdXJlIGl0J3MgYWxyZWFkeSBzdGFydGVkCisJCSRzZWxmLT5zdGFydF9zZXJ2aWNlKCdOZnNDbG50JykgfHwgcmV0dXJuOworCQkKKwkJI2lmICghJHNlbGYtPnN0YXJ0X3NlcnZpY2UoJ05mc0NsbnQnKSkgeworCQkjCWlmICgkc2VsZi0+e3dpbmRvd3NfbmZzX3JlYm9vdF9yZXF1aXJlZH0pIHsKKwkJIwkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBwcmVwYXJlIFdpbmRvd3MgTkZTLCBmYWlsZWQgdG8gc3RhcnQgdGhlIE5GUyBjbGllbnQsICRjb21wdXRlcl9uYW1lIHdhcyBhbHJlYWR5IHJlYm9vdGVkIik7CisJCSMJCXJldHVybjsKKwkJIwl9CisJCSMJZWxzZSB7CisJCSMJCWlmICghJHNlbGYtPnJlYm9vdCgpKSB7CisJCSMJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHByZXBhcmUgV2luZG93cyBORlMsIGZhaWxlZCB0byByZWJvb3QgJGNvbXB1dGVyX25hbWUgYWZ0ZXIgYXR0ZW1wdGluZyB0byBzdGFydCB0aGUgTkZTIGNsaWVudCIpOworCQkjCQkJcmV0dXJuOworCQkjCQl9CisJCSMJCQorCQkjCQlpZiAoISRzZWxmLT5zdGFydF9zZXJ2aWNlKCdOZnNDbG50JykpIHsKKwkJIwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gcHJlcGFyZSBXaW5kb3dzIE5GUywgZmFpbGVkIHRvIHN0YXJ0IHRoZSBORlMgY2xpZW50IG9uICRjb21wdXRlcl9uYW1lIGFmdGVyIGl0IHdhcyByZWJvb3RlZCIpOworCQkjCQkJcmV0dXJuOworCQkjCQl9CisJCSMJfQorCQkjfQorCQkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJXaW5kb3dzIE5GUyBwcmVwYXJhdGlvbiB0YXNrcyBjb21wbGV0ZSIpOworCQkKKwkJJHNlbGYtPntuZnNfbW91bnRfc2hhcmVfcHJlcGFyYXRpb25fY29tcGxldGV9ID0gMTsKKwl9CisJCisJbXkgJG1vdW50X3NjcmlwdF9jb250ZW50czsKKwlpZiAoISRwcmV2aW91c2x5X2NhbGxlZCkgeworCQkkbW91bnRfc2NyaXB0X2NvbnRlbnRzID0gIm5mc2FkbWluLmV4ZSBjbGllbnQgc3RhcnRcclxuIjsKKwl9CisJJG1vdW50X3NjcmlwdF9jb250ZW50cyAuPSAiQzpcXFdpbmRvd3NcXHN5c3RlbTMyXFxtb3VudC5leGUgLW8gbXR5cGU9aGFyZCAkcmVtb3RlX3RhcmdldCAqIjsKKwkKKwlpZiAoJHByZXZpb3VzbHlfY2FsbGVkKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiYXBwZW5kaW5nIGxpbmUgdG8gJG5mc19tb3VudF9iYXRjaF9maWxlX3BhdGg6ICRtb3VudF9zY3JpcHRfY29udGVudHMiKTsKKwkJaWYgKCEkc2VsZi0+YXBwZW5kX3RleHRfZmlsZSgkbmZzX21vdW50X2JhdGNoX2ZpbGVfcGF0aCwgJG1vdW50X3NjcmlwdF9jb250ZW50cykpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gYXBwZW5kIGJhdGNoIGZpbGUgdG8gbW91bnQgTkZTIHNoYXJlczogJG5mc19tb3VudF9iYXRjaF9maWxlX3BhdGgiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJjcmVhdGluZyBXaW5kb3dzIE5GUyBtb3VudCBiYXRjaCBmaWxlOiAkbmZzX21vdW50X2JhdGNoX2ZpbGVfcGF0aCwgY29udGVudHM6XG4kbW91bnRfc2NyaXB0X2NvbnRlbnRzIik7CisJCWlmICghJHNlbGYtPmNyZWF0ZV90ZXh0X2ZpbGUoJG5mc19tb3VudF9iYXRjaF9maWxlX3BhdGgsICRtb3VudF9zY3JpcHRfY29udGVudHMpKSB7CisJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIGNyZWF0ZSBXaW5kb3dzIE5GUyBtb3VudCBiYXRjaCBmaWxlOiAkbmZzX21vdW50X2JhdGNoX2ZpbGVfcGF0aCIpOworCQkJcmV0dXJuOworCQl9CisJCSRzZWxmLT5hZGRfaGtsbV9ydW5fcmVnaXN0cnlfa2V5KCdWQ0wgTW91bnQgTkZTJywgJG5mc19tb3VudF9iYXRjaF9maWxlX3BhdGgpIHx8IHJldHVybjsKKwkJJHNlbGYtPmV4ZWN1dGUoImNobW9kIDc3NyAkbmZzX21vdW50X2JhdGNoX2ZpbGVfcGF0aCIpOworCX0KKwkKKwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImZpbmlzaGVkIFdpbmRvd3MgTkZTIG1vdW50IHRhc2tzIik7CisJcmV0dXJuIDE7Cit9CisKKyMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCis9aGVhZDIgbmZzX3VubW91bnRfc2hhcmUKKworIFBhcmFtZXRlcnMgIDogbm9uZQorIFJldHVybnMgICAgIDogYm9vbGVhbgorIERlc2NyaXB0aW9uIDogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IHVubW91bnQgYW55IHNoYXJlcyBidXQgZGVsZXRlcyB0aGUgcmVnaXN0cnkKKyAgICAgICAgICAgICAgIGtleSBhbmQgYmF0Y2ggZmlsZSBjcmVhdGVkIHRvIG1vdW50IE5GUyBzaGFyZXMgd2hlbiBhIHVzZXIgbG9ncworICAgICAgICAgICAgICAgaW4uCisKKz1jdXQKKworc3ViIG5mc191bm1vdW50X3NoYXJlIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmIChyZWYoJHNlbGYpICF+IC9XaW5kb3dzL2kpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKKwkJcmV0dXJuOworCX0KKwkKKwkkc2VsZi0+ZGVsZXRlX2ZpbGUoJ0M6L21vdW50X25mcy5jbWQnKTsKKwkkc2VsZi0+ZGVsZXRlX2hrbG1fcnVuX3JlZ2lzdHJ5X2tleSgnVkNMIE1vdW50IE5GUycpOworCXJldHVybiAxOworfQorCisjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworPWhlYWQyIHNldF93aW5kb3dzX25mc19jbGllbnRfdWlkCisKKyBQYXJhbWV0ZXJzICA6ICR1aWRfbnVtYmVyCisgUmV0dXJucyAgICAgOiBib29sZWFuCisgRGVzY3JpcHRpb24gOiBTZXRzIHJlZ2lzdHJ5IHZhbHVlcyB1c2VkIGJ5IHRoZSBXaW5kb3dzIE5GUyBDbGllbnQgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICB3aGljaCB1c2VyIFVJRCBudW1iZXIgdG8gdXNlIHdoZW4gYWNjZXNzaW5nIE5GUyBzaGFyZXMuCisKKz1jdXQKKworc3ViIHNldF93aW5kb3dzX25mc19jbGllbnRfdWlkIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmIChyZWYoJHNlbGYpICF+IC9XaW5kb3dzL2kpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJzdWJyb3V0aW5lIHdhcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2QiKTsKKwkJcmV0dXJuOworCX0KKwkKKwlteSAkdWlkID0gc2hpZnQgfHwgJHNlbGYtPmRhdGEtPmdldF91c2VyX3VpZCgpOworCW15ICRjb21wdXRlcl9uYW1lID0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9ub2RlX25hbWUoKTsKKwkKKwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImF0dGVtcHRpbmcgdG8gY29uZmlndXJlIHRoZSBXaW5kb3dzIE5GUyBDbGllbnQgdG8gdXNlIGFub255bW91cyBVSUQgJHVpZCIpOworCQorCW15ICRuZnNfY2xpZW50X3NlcnZpY2VfbmFtZSA9ICdOZnNDbG50JzsKKwlteSAkYmFzZV9rZXkgPSAnSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxDbGllbnRGb3JORlNcQ3VycmVudFZlcnNpb25cRGVmYXVsdCc7CisJbXkgJHVpZF9rZXkgPSAnQW5vbnltb3VzVWlkJzsKKwkKKwkjIENoZWNrIGlmIFVJRCBhbHJlYWR5IHNldCBjb3JyZWN0bHkKKwlteSAkZXhpc3RpbmdfdWlkID0gJHNlbGYtPnJlZ19xdWVyeSgkYmFzZV9rZXksICR1aWRfa2V5LCAxKSB8fCAnJzsKKwlpZiAoJGV4aXN0aW5nX3VpZCBlcSAkdWlkKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiYW5vbnltb3VzIFVJRCAoJGV4aXN0aW5nX3VpZCkgdmFsdWUgYXJlIGFscmVhZHkgc2V0IGNvcnJlY3RseSBpbiB0aGUgcmVnaXN0cnkgb24gJGNvbXB1dGVyX25hbWUiKTsKKwl9CisJZWxzZSB7CisJCSMgU2V0IHRoZSByZWdpc3RyeSBrZXlzCisJCWlmICghJHNlbGYtPnJlZ19hZGQoJGJhc2Vfa2V5LCAkdWlkX2tleSwgJ1JFR19EV09SRCcsICR1aWQpKSB7CisJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHNldCBXaW5kb3dzIE5GUyBDbGllbnQgYW5vbnltb3VzIFVJRCBpbiB0aGUgcmVnaXN0cnkiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkKKwkjIFN0b3AgdGhlIE5GUyBzZXJ2aWNlLCB0aGlzIG1heSBmYWlsIGlmIHNvbWV0aGluZyBpcyBhbHJlYWR5IG1vdW50ZWQKKwlpZiAoISRzZWxmLT57d2luZG93c19uZnNfcmVib290X3JlcXVpcmVkfSkgeworCQlpZiAoJHNlbGYtPnN0b3Bfc2VydmljZSgkbmZzX2NsaWVudF9zZXJ2aWNlX25hbWUpKSB7CisJCQkjIyBTZXJ2aWNlIHdvbid0IHJlc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIgc3RvcHBpbmcgaXQKKwkJCSNzbGVlcF91bmludGVycnVwdGVkKDEwKTsKKwkJCQorCQkJaWYgKCRzZWxmLT5zdGFydF9zZXJ2aWNlKCRuZnNfY2xpZW50X3NlcnZpY2VfbmFtZSkpIHsKKwkJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInNldCBXaW5kb3dzIE5GUyBDbGllbnQgYW5vbnltb3VzIFVJRCB2YWx1ZSBpbiByZWdpc3RyeSBhbmQgcmVzdGFydGVkICRuZnNfY2xpZW50X3NlcnZpY2VfbmFtZSBzZXJ2aWNlIik7CisJCQl9CisJCQllbHNlIHsKKwkJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHJlc3RhcnQgV2luZG93cyBORlMgQ2xpZW50IHNlcnZpY2UsIGl0IG1heSBiZSBpbiB1c2UsICRjb21wdXRlcl9uYW1lIHdpbGwgYmUgcmVib290ZWQiKTsKKwkJCQkkc2VsZi0+e3dpbmRvd3NfbmZzX3JlYm9vdF9yZXF1aXJlZH0gPSAxOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBzdG9wIFdpbmRvd3MgTkZTIENsaWVudCBzZXJ2aWNlLCBpdCBtYXkgYmUgaW4gdXNlLCAkY29tcHV0ZXJfbmFtZSB3aWxsIGJlIHJlYm9vdGVkIik7CisJCQkkc2VsZi0+e3dpbmRvd3NfbmZzX3JlYm9vdF9yZXF1aXJlZH0gPSAxOworCQl9CisJfQorCQorCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAic2V0IFdpbmRvd3MgTkZTIENsaWVudCBhbm9ueW1vdXMgVUlEIHZhbHVlcyBpbiByZWdpc3RyeSIpOworCXJldHVybiAxOworfQorCisjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKIDE7CiBfX0VORF9fCiAKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl8xMC8xMC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl8xMC8xMC5wbQppbmRleCA5NmIwYWRiLi43NTU4YzRhIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fMTAvMTAucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzEwLzEwLnBtCkBAIC00MCw3ICs0MCw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OldpbmRvd3M6OlZlcnNpb25fNjo6OCk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl8xMC8yMDE2LnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzEwLzIwMTYucG0KaW5kZXggMmNjNDA0MS4uZmUzNGZlYSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzEwLzIwMTYucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzEwLzIwMTYucG0KQEAgLTQwLDcgKzQwLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6V2luZG93czo6VmVyc2lvbl82Ojo4KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNS5wbQppbmRleCA4NmYxNjU5Li44NjA0MTY4IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNS5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNS5wbQpAQCAtNDAsNyArNDAsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpXaW5kb3dzKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUvMjAwMy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl81LzIwMDMucG0KaW5kZXggOTljODVmYy4uOTgzMjEzYyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUvMjAwMy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNS8yMDAzLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OldpbmRvd3M6OlZlcnNpb25fNSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl81L1hQLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUvWFAucG0KaW5kZXggZTM0Mjk2Ni4uYTg1YzRhMSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUvWFAucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUvWFAucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6V2luZG93czo6VmVyc2lvbl81KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi5wbQppbmRleCA5MGI5OTkxLi44YzEwODllIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi5wbQpAQCAtNDUsNyArNDUsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpXaW5kb3dzKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvMjAwOC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82LzIwMDgucG0KaW5kZXggNjI0ODQ4Yy4uNjk1ODU3NSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvMjAwOC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi8yMDA4LnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OldpbmRvd3M6OlZlcnNpb25fNik7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82LzIwMTIucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi8yMDEyLnBtCmluZGV4IDQzZmY1YjIuLjFhMDA2NTEgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82LzIwMTIucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvMjAxMi5wbQpAQCAtNDMsNyArNDMsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6Ok9TOjpXaW5kb3dzOjpWZXJzaW9uXzYpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi83LnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvNy5wbQppbmRleCBjZDIzOGQwLi42ZDM5MDNiIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi83LnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82LzcucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6V2luZG93czo6VmVyc2lvbl82KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvOC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82LzgucG0KaW5kZXggMWJjODhlOS4uYWE5YmFlOCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvOC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzL1ZlcnNpb25fNi84LnBtCkBAIC0zOSw3ICszOSw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6T1M6OldpbmRvd3M6OlZlcnNpb25fNik7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl82L1Zpc3RhLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvVmlzdGEucG0KaW5kZXggZDkyYjBlNC4uNjUzNzZkZiAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvVmlzdGEucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzYvVmlzdGEucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpPUzo6V2luZG93czo6VmVyc2lvbl82KTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJlZGljdGl2ZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUucG0KaW5kZXggZDljMmQzMy4uODE1NTc1NyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJlZGljdGl2ZS5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9QcmVkaWN0aXZlLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMC5wbQppbmRleCA5YTlkOWIxLi41NTk2ZjAzIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9QcmVkaWN0aXZlL0xldmVsXzAucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJlZGljdGl2ZS9MZXZlbF8wLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJlZGljdGl2ZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMS5wbQppbmRleCBjNjBkZjc4Li43ODA3M2UyIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9QcmVkaWN0aXZlL0xldmVsXzEucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJlZGljdGl2ZS9MZXZlbF8xLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJlZGljdGl2ZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMi5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1ByZWRpY3RpdmUvTGV2ZWxfMi5wbQppbmRleCAxNmRiZGFhLi41YzM5ODNjIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9QcmVkaWN0aXZlL0xldmVsXzIucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJlZGljdGl2ZS9MZXZlbF8yLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJlZGljdGl2ZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy5wbQppbmRleCA3NDE1N2M0Li41NjE2YmYzIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9MYWIucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvTGFiLnBtCmluZGV4IGQ3OTJhNWMuLmMxNDM5OGQgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9MYWIucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL0xhYi5wbQpAQCAtNDMsNyArNDMsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlByb3Zpc2lvbmluZyk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVklNX1NTSC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVklNX1NTSC5wbQppbmRleCA2OTMxMzE4Li5iZjBmM2QwIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL1ZJTV9TU0gucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS9WSU1fU1NILnBtCkBAIC00Nyw3ICs0Nyw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJvdmlzaW9uaW5nOjpWTXdhcmU6OlZNd2FyZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAKID1oZWFkMiB2bV91bnJlZ2lzdGVyCiAKLSBQYXJhbWV0ZXJzICA6ICR2bV9pZGVudGlmaWVyIAorIFBhcmFtZXRlcnMgIDogJHZtX2lkZW50aWZpZXIKICBSZXR1cm5zICAgICA6IGJvb2xlYW4KICBEZXNjcmlwdGlvbiA6IFVucmVnaXN0ZXJzIHRoZSBWTSBpbmRpY2F0ZWQgYnkgdGhlIGFyZ3VtZW50IHdoaWNoIG1heSBlaXRoZXIgYmUKICAgICAgICAgICAgICAgIHRoZSAudm14IGZpbGUgcGF0aCBvciBWTSBJRC4KQEAgLTE1ODYsOSArMTU4Niw5IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQkKLQkJIyBQb3dlciBvZiB0aGUgVk0gaWYgaXQgaXMgcG93ZXJlZCBvbiBvciB0aGUgdW5yZWdpc3RlciBjb21tYW5kIHdpbGwgZmFpbAorCQkjIFBvd2VyIG9mZiB0aGUgVk0gaWYgaXQgaXMgcG93ZXJlZCBvbiBvciB0aGUgdW5yZWdpc3RlciBjb21tYW5kIHdpbGwgZmFpbAogCQlteSAkdm1fcG93ZXJfc3RhdGUgPSAkc2VsZi0+Z2V0X3ZtX3Bvd2VyX3N0YXRlKCR2bXhfZmlsZV9wYXRoKTsKLQkJaWYgKCR2bV9wb3dlcl9zdGF0ZSAmJiAkdm1fcG93ZXJfc3RhdGUgPX4gL29uL2kpIHsKKwkJaWYgKCR2bV9wb3dlcl9zdGF0ZSAmJiAkdm1fcG93ZXJfc3RhdGUgIX4gL29mZi9pKSB7CiAJCQlpZiAoISRzZWxmLT52bV9wb3dlcl9vZmYoJHZteF9maWxlX3BhdGgpKSB7CiAJCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byB1bnJlZ2lzdGVyIFZNIGJlY2F1c2UgaXQgY291bGQgbm90IGJlIHBvd2VyZWQgb2ZmOiAkdm14X2ZpbGVfcGF0aCIpOwogCQkJCXJldHVybjsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVk13YXJlLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS9WTXdhcmUucG0KaW5kZXggYWE0NjVmZi4uYzE5ODA3YyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS9WTXdhcmUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS9WTXdhcmUucG0KQEAgLTQ5LDcgKzQ5LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpQcm92aXNpb25pbmcpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CkBAIC0xOTQ1LDcgKzE5NDUsNyBAQAogCX0KIAkKIAkjIFRoZSB2bXggZmlsZSBzaG91bGQgYmUgc2V0IHRvIGV4ZWN1dGFibGUKLQljaG1vZCgiMDc1NSIsICIvdG1wLyR2bXhfZmlsZV9uYW1lIik7CisJY2htb2QoMDc1NSwgIi90bXAvJHZteF9maWxlX25hbWUiKTsKIAkKIAkjIENvcHkgdGhlIHRlbXBvcmFyeSB2bXggZmlsZSB0aGUgdGhlIFZNIGhvc3QKIAkkc2VsZi0+dm1ob3N0X29zLT5jb3B5X2ZpbGVfdG8oJHRlbXBfdm14X2ZpbGVfcGF0aCwgJHZteF9maWxlX3BhdGgpIHx8IHJldHVybjsKQEAgLTU4MzksNiArNTgzOSwxMyBAQAogCQkjIFRoZSBWTSBuZWVkcyB0byBiZSByZWdpc3RlcmVkIGZvciBnZXRfdm1fdmlydHVhbF9kaXNrX2ZpbGVfcGF0aHMgdG8gd29yawogCQlAdmlydHVhbF9kaXNrcyA9ICRzZWxmLT5hcGktPmdldF92bV92aXJ0dWFsX2Rpc2tfZmlsZV9wYXRocygkdm14X2ZpbGVfcGF0aCk7CiAJCQorCQkjIE1ha2Ugc3VyZSBWTSBpcyBwb3dlcmVkIG9mZiBiZWZvcmUgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgaXQKKwkJaWYgKCEkc2VsZi0+YXBpLT52bV9wb3dlcl9vZmYoJHZteF9maWxlX3BhdGgpKSB7CisJCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHBvd2VyIG9mZiBWTTogJHZteF9maWxlX3BhdGgsIFZNIG5vdCBkZWxldGVkIik7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCSMgVW5yZWdpc3RlciB0aGUgVk0KIAkJaWYgKCEkc2VsZi0+YXBpLT52bV91bnJlZ2lzdGVyKCR2bXhfZmlsZV9wYXRoKSkgewogCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byB1bnJlZ2lzdGVyIFZNOiAkdm14X2ZpbGVfcGF0aCwgVk0gbm90IGRlbGV0ZWQiKTsKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvdlNwaGVyZV9TREsucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL3ZTcGhlcmVfU0RLLnBtCmluZGV4IDM2NTcxOTIuLmZjNjdhMzEgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvdlNwaGVyZV9TREsucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS92U3BoZXJlX1NESy5wbQpAQCAtNDcsNyArNDcsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlByb3Zpc2lvbmluZzo6Vk13YXJlOjpWTXdhcmUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CkBAIC0zNjMsNiArMzYzLDE0IEBACiAJCiAJbXkgJHZteF9wYXRoID0gJHZtX3ZpZXctPntzdW1tYXJ5fXtjb25maWd9e3ZtUGF0aE5hbWV9OwogCQorCW15ICR2bV9wb3dlcl9zdGF0ZSA9ICRzZWxmLT5nZXRfdm1fcG93ZXJfc3RhdGUoJHZteF9wYXRoKTsKKwlpZiAoJHZtX3Bvd2VyX3N0YXRlICYmICR2bV9wb3dlcl9zdGF0ZSAhfiAvb2ZmL2kpIHsKKwkJaWYgKCEkc2VsZi0+dm1fcG93ZXJfb2ZmKCR2bXhfcGF0aCkpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gdW5yZWdpc3RlciBWTSBiZWNhdXNlIGl0IGNvdWxkIG5vdCBiZSBwb3dlcmVkIG9mZjogJHZteF9wYXRoIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJCiAJIyBPdmVycmlkZSB0aGUgZGllIGhhbmRsZXIKIAlsb2NhbCAkU0lHe19fRElFX199ID0gc3Vie307CiAJCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL3Ztd2FyZV9jbWQucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL3Ztd2FyZV9jbWQucG0KaW5kZXggMjRlNDU1OS4uMDkwODZjOSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS92bXdhcmVfY21kLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvdm13YXJlX2NtZC5wbQpAQCAtNDYsNyArNDYsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlByb3Zpc2lvbmluZzo6Vk13YXJlOjpWTXdhcmUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvZG9ja2VyLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL2RvY2tlci5wbQppbmRleCBlMjAyZTNiLi5iOGUzODBiIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvZG9ja2VyLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9kb2NrZXIucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpQcm92aXNpb25pbmcpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvbGlidmlydC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCmluZGV4IDQ0NjkxYmMuLjZmMmRlYTggMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCkBAIC00Niw3ICs0Niw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJvdmlzaW9uaW5nKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpAQCAtNzc5LDYgKzc3OSw0NCBAQAogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIickZG9tYWluX25hbWUnIGRvbWFpbiBpcyBub3QgcnVubmluZyBvbiAkbm9kZV9uYW1lIik7CiAJCXJldHVybiAxOwogCX0KKwllbHNpZiAoZ3JlcCgvU0lHS0lMTDogRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kvaSwgQCRvdXRwdXQpKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiRmFpbGVkIHRvIHN0b3AgJyRkb21haW5fbmFtZScgZG9tYWluOyBcIlNJR0tJTEw6IERldmljZSBvciByZXNvdXJjZSBidXN5XCIgZW5jb3VudGVyZWQsIHdhaXRpbmcgMzAgc2Vjb25kcyBhbmQgdHJ5aW5nIGFnYWluIik7CisJCSMgbGlidmlydCBjb3VsZCBub3Qga2lsbCBWTSwgd2FpdCBhbmQgdHJ5IGFnYWluCisJCXNsZWVwIDMwOworCQlteSAkY29tbWFuZDIgPSAidmlyc2ggLXEgbGlzdCAtLWFsbCI7CisJCSgkZXhpdF9zdGF0dXMsICRvdXRwdXQpID0gJHNlbGYtPnZtaG9zdF9vcy0+ZXhlY3V0ZSgkY29tbWFuZDIpOworCQlteSAoJGlkLCAkbmFtZSwgJHN0YXRlKTsKKwkJZm9yIG15ICRsaW5lIChAJG91dHB1dCkgeworCQkJKCRpZCwgJG5hbWUsICRzdGF0ZSkgPSAkbGluZSA9fiAvXlxzKihbXGRcLV0rKVxzKyguKz8pXHMrKFx3K3xzaHV0IG9mZnxpbiBzaHV0ZG93bikkL2c7CisJCQluZXh0IGlmICghZGVmaW5lZCgkaWQpKTsKKwkJCWxhc3QgaWYgKCRuYW1lIGVxICRkb21haW5fbmFtZSk7CisJCX0KKwkJaWYgKCRuYW1lIG5lICRkb21haW5fbmFtZSkgeworCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIjJuZCB0cnk6ICRkb21haW5fbmFtZSBub3QgZm91bmQgd2hlbiBydW5uaW5nICd2aXJzaCBsaXN0JyBvbiAkbm9kZV9uYW1lIik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCRpZCBlcSAnLScpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiJyRkb21haW5fbmFtZScgZG9tYWluIG5vdyBzdG9wcGVkIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQkoJGV4aXRfc3RhdHVzLCAkb3V0cHV0KSA9ICRzZWxmLT52bWhvc3Rfb3MtPmV4ZWN1dGUoJGNvbW1hbmQpOworCQlpZiAoIWRlZmluZWQoJG91dHB1dCkpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICIybmQgdHJ5OiBmYWlsZWQgdG8gZXhlY3V0ZSB2aXJzaCBjb21tYW5kIHRvIGRlc3Ryb3kgJyRkb21haW5fbmFtZScgZG9tYWluIG9uICRub2RlX25hbWUiKTsKKwkJCXJldHVybjsKKwkJfQorCQllbHNpZiAoJGV4aXRfc3RhdHVzIGVxICcwJykgeworCQkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICIybmQgdHJ5OiBkZXN0cm95ZWQgJyRkb21haW5fbmFtZScgZG9tYWluIG9uICRub2RlX25hbWUiKTsKKwkJCXJldHVybiAxOworCQl9CisJCWVsc2lmIChncmVwKC9kb21haW4gaXMgbm90IHJ1bm5pbmcvaSwgQCRvdXRwdXQpKSB7CisJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIjJuZCB0cnk6ICckZG9tYWluX25hbWUnIGRvbWFpbiBpcyBub3QgcnVubmluZyBvbiAkbm9kZV9uYW1lIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICIybmQgdHJ5OiBmYWlsZWQgdG8gZGVzdHJveSAnJGRvbWFpbl9uYW1lJyBkb21haW4gb24gJG5vZGVfbmFtZVxuY29tbWFuZDogJGNvbW1hbmRcbmV4aXQgc3RhdHVzOiAkZXhpdF9zdGF0dXNcbm91dHB1dDpcbiIgLiBqb2luKCJcbiIsIEAkb3V0cHV0KSk7CisJCQlyZXR1cm47CisJCX0KKwl9CiAJZWxzZSB7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gZGVzdHJveSAnJGRvbWFpbl9uYW1lJyBkb21haW4gb24gJG5vZGVfbmFtZVxuY29tbWFuZDogJGNvbW1hbmRcbmV4aXQgc3RhdHVzOiAkZXhpdF9zdGF0dXNcbm91dHB1dDpcbiIgLiBqb2luKCJcbiIsIEAkb3V0cHV0KSk7CiAJCXJldHVybjsKQEAgLTE3MzYsNiArMTc3NCwxMyBAQAogCQogCW15ICRjb3B5X29uX3dyaXRlX2ZpbGVfcGF0aCA9ICRzZWxmLT5nZXRfY29weV9vbl93cml0ZV9maWxlX3BhdGgoKTsKIAlteSAkaW1hZ2VfdHlwZSA9ICRzZWxmLT5kYXRhLT5nZXRfdm1ob3N0X2RhdGFzdG9yZV9pbWFnZXR5cGVfbmFtZSgpOworCW15ICR2bWhvc3Rfdm1wYXRoID0gJHNlbGYtPmRhdGEtPmdldF92bWhvc3RfcHJvZmlsZV92bXBhdGgoKTsKKwlteSAkYWRkX2Rpc2tfY2FjaGUgPSAwOworCWlmICghICRzZWxmLT52bWhvc3Rfb3MtPmlzX2ZpbGVfb25fbG9jYWxfZGlzaygkdm1ob3N0X3ZtcGF0aCkpIHsKKwkJIyBzZXQgZGlzayBjYWNoZSB0byBub25lIGlmIHZtcGF0aCBvbiBORlMgc28gbGl2ZSBtaWdyYXRpb24gd2lsbCB3b3JrCisJCSRhZGRfZGlza19jYWNoZSA9IDE7CisJfQorCiAJbXkgJGRpc2tfZHJpdmVyX25hbWUgPSAkc2VsZi0+ZHJpdmVyLT5nZXRfZGlza19kcml2ZXJfbmFtZSgpOwogCW15ICRkaXNrX2J1c190eXBlID0gJHNlbGYtPmdldF9tYXN0ZXJfeG1sX2Rpc2tfYnVzX3R5cGUoKTsKIAkKQEAgLTE3OTksNiArMTg0NCwxMyBAQAogCSMgICAgV2luZG93cywgaG93ZXZlciwgZXhwZWN0cyBpdCB0byBiZSBpbiBzbyBjYWxsZWQgJ2xvY2FsdGltZScuIgogCW15ICRjbG9ja19vZmZzZXQgPSAoJGltYWdlX29zX3R5cGUgPX4gL3dpbmRvd3MvKSA/ICdsb2NhbHRpbWUnIDogJ3V0Yyc7CiAJCisJbXkgJGNwdXNvY2tldHMgPSAkY3B1X2NvdW50OworCW15ICRjcHVjb3JlcyA9IDE7CisJaWYoJGNwdV9jb3VudCA+IDIpIHsKKwkJJGNwdXNvY2tldHMgPSAyOworCQkkY3B1Y29yZXMgPSAoJGNwdV9jb3VudCAtICgkY3B1X2NvdW50ICUgMikpIC8gMjsKKwl9CisKIAlteSAkeG1sX2hhc2hyZWYgPSB7CiAJCSd0eXBlJyA9PiAkZG9tYWluX3R5cGUsCiAJCSdkZXNjcmlwdGlvbicgPT4gWyRkZXNjcmlwdGlvbl0sCkBAIC0xODI4LDE0ICsxODgwLDExIEBACiAJCQkJbW9kZWwgPT4gewogCQkJCQknZmFsbGJhY2snID0+ICdhbGxvdycsCiAJCQkJfSwKLQkJCQkjJ3RvcG9sb2d5JyA9PiBbCi0JCQkJIwl7Ci0JCQkJIwkJJ3NvY2tldHMnID0+ICRjcHVfY291bnQsCi0JCQkJIwkJJ2NvcmVzJyA9PiAnMicsCi0JCQkJIwkJJ3RocmVhZHMnID0+ICcyJywKLQkJCQkjCX0KLQkJCQkjXSwKLQkJCQkKKwkJCQl0b3BvbG9neSA9PiB7CisJCQkJCSdzb2NrZXRzJyA9PiAkY3B1c29ja2V0cywKKwkJCQkJJ2NvcmVzJyA9PiAkY3B1Y29yZXMsCisJCQkJCSd0aHJlYWRzJyA9PiAxLAorCQkJCX0sCiAJCQl9CiAJCV0sCiAJCSdjbG9jaycgPT4gWwpAQCAtMTkwOCw2ICsxOTU3LDExIEBACiAJCQl9CiAJCV0KIAl9OworCisJaWYgKCRhZGRfZGlza19jYWNoZSkgeworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInZtcGF0aCAoJHZtaG9zdF92bXBhdGgpIGlzIG9uIE5GUzsgc2V0dGluZyBkaXNrIGNhY2hlIHRvIG5vbmUiKTsKKwkJJHhtbF9oYXNocmVmLT57J2RldmljZXMnfVswXXsnZGlzayd9WzBdeydkcml2ZXInfXsnY2FjaGUnfSA9ICdub25lJzsKKwl9CiAJCiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJnZW5lcmF0ZWQgZG9tYWluIFhNTDpcbiIgLiBmb3JtYXRfZGF0YSgkeG1sX2hhc2hyZWYpKTsKIAlyZXR1cm4gaGFzaF90b194bWxfc3RyaW5nKCR4bWxfaGFzaHJlZiwgJ2RvbWFpbicpOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL2xpYnZpcnQvS1ZNLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL2xpYnZpcnQvS1ZNLnBtCmluZGV4IDQzNzQxZWIuLmRlY2ZiNGQgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0L0tWTS5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvbGlidmlydC9LVk0ucG0KQEAgLTQyLDcgKzQyLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpQcm92aXNpb25pbmc6OmxpYnZpcnQpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CkBAIC01OTksNiArNTk5LDE0IEBACiAJCSRzb3VyY2VfZmlsZV9wYXRoc19zdHJpbmcgPSAnIicgLiBqb2luKCciICInLCBAc291cmNlX2ZpbGVfcGF0aHMpIC4gJyInOwogCSN9CiAJCisJbXkgJHBhcmVudF9maWxlID0gJHNvdXJjZV9maWxlX25hbWU7CisJJHBhcmVudF9maWxlID1+IHMvLXNbMC05XXszfS8vOworCSRwYXJlbnRfZmlsZSA9ICRwYXJlbnRfZmlsZSAuICIudm1kayI7CisJaWYgKCRzZWxmLT52bWhvc3Rfb3MtPmZpbGVfZXhpc3RzKCIkc291cmNlX2RpcmVjdG9yeV9wYXRoJHBhcmVudF9maWxlIikpIHsKKwkJJHNvdXJjZV9maWxlX3BhdGhzX3N0cmluZyA9ICIkc291cmNlX2RpcmVjdG9yeV9wYXRoJHBhcmVudF9maWxlIjsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJjaGFuZ2luZyBzb3VyY2VfZmlsZV9wYXRoc19zdHJpbmcgZnJvbSBtdWx0aXBsZSBmaWxlcyB0byAkc291cmNlX2RpcmVjdG9yeV9wYXRoJHBhcmVudF9maWxlIik7CisJfQorCQogCW15ICRvcHRpb25zID0gJyc7CiAJIyBWQ0wtOTExOiBJZiBjb3B5aW5nIHRvIHRoZSByZXBvc2l0b3J5LCBzYXZlIHRoZSBpbWFnZSBxY293MiB2ZXJzaW9uIDAuMTAsIHRoZSB0cmFkaXRpb25hbCBpbWFnZSBmb3JtYXQgdGhhdCBjYW4gYmUgcmVhZCBieSBhbnkgUUVNVSBzaW5jZSAwLjEwCiAJbXkgJHJlcG9zaXRvcnlfaW1hZ2VfZmlsZV9wYXRoID0gJHNlbGYtPmdldF9yZXBvc2l0b3J5X2ltYWdlX2ZpbGVfcGF0aCgpOwpAQCAtNjIxLDcgKzYyOSw5IEBACiAJCiAJbXkgJHN0YXJ0X3RpbWUgPSB0aW1lOwogCW15ICgkZXhpdF9zdGF0dXMsICRvdXRwdXQpID0gJHNlbGYtPnZtaG9zdF9vcy0+ZXhlY3V0ZSgkY29tbWFuZCwgMCwgNzIwMCk7Ci0JaWYgKGRlZmluZWQoJG91dHB1dCAmJiBncmVwKC9Vbmtub3duIG9wdGlvbi4qY29tcGF0LywgQCRvdXRwdXQpKSkgeworCWlmIChkZWZpbmVkKCRvdXRwdXQpICYmCisJICAgKGdyZXAoL1Vua25vd24gb3B0aW9uLipjb21wYXQvLCBAJG91dHB1dCkgfHwKKwkgICBncmVwKC9JbnZhbGlkIHBhcmFtZXRlci4qY29tcGF0LywgQCRvdXRwdXQpKSkgewogCQkjIENoZWNrIGZvciBvbGRlciB2ZXJzaW9ucyB3aGljaCBkb24ndCBzdXBwb3J0ICctbyBjb21wYXQ9JzoKIAkJIyAgICBVbmtub3duIG9wdGlvbiAnY29tcGF0JwogCQkjICAgIHFlbXUtaW1nOiBJbnZhbGlkIG9wdGlvbnMgZm9yIGZpbGUgZm9ybWF0ICdxY293MicuCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvb25lLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL29uZS5wbQppbmRleCAxMGRmOTM1Li5kNTkyMWQ3IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvb25lLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9vbmUucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpQcm92aXNpb25pbmcpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvb3BlbnN0YWNrLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL29wZW5zdGFjay5wbQppbmRleCBmMTE2YTQyLi5iMmQyZmZjIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvb3BlbnN0YWNrLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9vcGVuc3RhY2sucG0KQEAgLTQ2LDcgKzQ2LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpQcm92aXNpb25pbmcpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvdmJveC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy92Ym94LnBtCmluZGV4IGYxMDI1ODguLmU3Y2UyMjkgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy92Ym94LnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy92Ym94LnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6UHJvdmlzaW9uaW5nKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL3hDQVQucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcveENBVC5wbQppbmRleCA3MGViNzIxLi4xYjA2MDI5IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcveENBVC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcveENBVC5wbQpAQCAtNTAsNyArNTAsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlByb3Zpc2lvbmluZyk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1NlbWFwaG9yZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1NlbWFwaG9yZS5wbQppbmRleCBlNmQyMGJmLi42MWQ0MjBjIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9TZW1hcGhvcmUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU2VtYXBob3JlLnBtCkBAIC01MCw3ICs1MCw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1N0YXRlLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KaW5kZXggOTFjNjYwNC4uMjRkZDUzOSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KQEAgLTQ0LDcgKzQ0LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9ibG9ja3JlcXVlc3QucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQppbmRleCA3Y2U5Y2RlLi42ODQ5ZjlhIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQpAQCAtNDMsNyArNDMsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlN0YXRlKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9oZWFsdGhjaGVjay5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvaGVhbHRoY2hlY2sucG0KaW5kZXggNDgwYzY4OC4uMzE1OGMxYiAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9oZWFsdGhjaGVjay5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2hlYWx0aGNoZWNrLnBtCkBAIC00Myw3ICs0Myw3IEBACiB1c2UgYmFzZSBxdygpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2ltYWdlLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9pbWFnZS5wbQppbmRleCAxMjhkZTJiLi45MDkxZDFlIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2ltYWdlLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvaW1hZ2UucG0KQEAgLTU3LDcgKzU3LDcgQEAKIHVzZSBiYXNlIHF3KFZDTDo6TW9kdWxlOjpTdGF0ZSk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvaW51c2UucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2ludXNlLnBtCmluZGV4IGJkNDk0YjQuLjNjOGRiY2UgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvaW51c2UucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9pbnVzZS5wbQpAQCAtNzEsNyArNzEsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlN0YXRlKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9tYWtlcHJvZHVjdGlvbi5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvbWFrZXByb2R1Y3Rpb24ucG0KaW5kZXggYjUzZDljZC4uMjc5YTc4ZSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9tYWtlcHJvZHVjdGlvbi5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML21ha2Vwcm9kdWN0aW9uLnBtCkBAIC01Nyw3ICs1Nyw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6U3RhdGUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML25ldy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvbmV3LnBtCmluZGV4IDk4ZjAyZDEuLjI1NzNkNWEgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvbmV3LnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvbmV3LnBtCkBAIC01Nyw3ICs1Nyw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6U3RhdGUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3JlY2xhaW0ucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3JlY2xhaW0ucG0KaW5kZXggMzRkNTZkZC4uNDMyMWVkYyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9yZWNsYWltLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvcmVjbGFpbS5wbQpAQCAtNTcsNyArNTcsNyBAQAogdXNlIGJhc2UgcXcoVkNMOjpNb2R1bGU6OlN0YXRlKTsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlCi1vdXIgJFZFUlNJT04gPSAnMi41JzsKK291ciAkVkVSU0lPTiA9ICcyLjUuMSc7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBQZXJsIHRvIHVzZQogdXNlIDUuMDA4MDAwOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9yZXNlcnZlZC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvcmVzZXJ2ZWQucG0KaW5kZXggMzYzMzMxYS4uNmU1MWQwNCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9yZXNlcnZlZC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3Jlc2VydmVkLnBtCkBAIC02MSw3ICs2MSw3IEBACiB1c2UgYmFzZSBxdyhWQ0w6Ok1vZHVsZTo6U3RhdGUpOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUKLW91ciAkVkVSU0lPTiA9ICcyLjUnOworb3VyICRWRVJTSU9OID0gJzIuNS4xJzsKIAogIyBTcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIFBlcmwgdG8gdXNlCiB1c2UgNS4wMDgwMDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3V0aWxzLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC91dGlscy5wbQppbmRleCAwZTlhNGVhLi41ZjdiNmFlIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3V0aWxzLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvdXRpbHMucG0KQEAgLTQzLDcgKzQzLDcgQEAKIHVzZSBiYXNlIHF3KCk7CiAKICMgU3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZQotb3VyICRWRVJTSU9OID0gJzIuNSc7CitvdXIgJFZFUlNJT04gPSAnMi41LjEnOwogCiAjIFNwZWNpZnkgdGhlIHZlcnNpb24gb2YgUGVybCB0byB1c2UKIHVzZSA1LjAwODAwMDsKQEAgLTU4LDcgKzU4LDcgQEAKIHVzZSBEQkk7CiB1c2UgREJJOjpDb25zdDo6R2V0SW5mb1R5cGU7CiB1c2UgZGlhZ25vc3RpY3M7Ci11c2UgTmV0OjpQaW5nOwordXNlIE5ldDo6UGluZzo6RXh0ZXJuYWwgcXcocGluZyk7CiB1c2UgRmNudGwgcXcoOkRFRkFVTFQgOmZsb2NrKTsKIHVzZSBGaW5kQmluOwogdXNlIEdldG9wdDo6TG9uZzsKQEAgLTEyNzAsNyArMTI3MCw3IEBACiAJbXkgKCRwYWNrYWdlLCAkZmlsZW5hbWUsICRsaW5lLCAgICAgICAkc3ViKSAgPSBjYWxsZXIoMCk7CiAKIAkjIE1haWw6Ok1haWxlciByZWxpZXMgb24gc2VuZG1haWwgYXMgd3JpdHRlbiwgdGhpcyBjYXVzZXMgYSAiZGllIiBvbiBXaW5kb3dzCi0JIyBUT0RPOiBSZXFvcmsgdGhpcyBzdWJyb3V0aW5lIHRvIG5vdCByZWx5IG9uIHNlbmRtYWlsCisJIyBUT0RPOiBSZXdvcmsgdGhpcyBzdWJyb3V0aW5lIHRvIG5vdCByZWx5IG9uIHNlbmRtYWlsCiAJbXkgJG9zbmFtZSA9IGxjKCReTyk7CiAJaWYgKCRvc25hbWUgPX4gL3dpbi9pKSB7CiAJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAic2VuZGluZyBtYWlsIGZyb20gV2luZG93cyBub3QgeWV0IHN1cHBvcnRlZFxuLS0tLS1cblRvOiAkdG9cblN1YmplY3Q6ICRzdWJqZWN0XG5Gcm9tOiAkZnJvbVxuJG1haWxzdHJpbmdcbi0tLS0tIik7CkBAIC0xMzA2LDI4ICsxMzA2LDIyIEBACiAJCSRzaGFyZWRfbWFpbF9ib3ggPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntTSEFSRURfRU1BSUxfQk9YfSBpZiAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntTSEFSRURfRU1BSUxfQk9YfTsKIAl9CiAKKwlteSAkbWFpbF9hcmdzID0ge0Zyb20gPT4gJGZyb20sIFRvID0+ICR0bywgU3ViamVjdCA9PiAkc3ViamVjdH07CiAJaWYgKCRzaGFyZWRfbWFpbF9ib3gpIHsKLQkJbXkgJGJjYyA9ICRzaGFyZWRfbWFpbF9ib3g7Ci0JCWlmICgkbWFpbGVyLT5vcGVuKHtGcm9tID0+ICRmcm9tLCBUbyA9PiAkdG8sIEJjYyA9PiAkYmNjLCBTdWJqZWN0ID0+ICRzdWJqZWN0fSkpIHsKLQkJCXByaW50ICRtYWlsZXIgJG1haWxzdHJpbmc7Ci0JCQkkbWFpbGVyLT5jbG9zZSgpOwotCQkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJTVUNDRVNTIC0tIFNlbmRpbmcgbWFpbCBUbzogJHRvLCAkc3ViamVjdCIpOwotCQl9Ci0JCWVsc2UgewotCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIk5PVElDRSAtLSAgUHJvYmxlbSBzZW5kaW5nIG1haWwgdG86ICR0byBGcm9tIik7Ci0JCX0KLQl9ICMjIGVuZCBpZiAoJHNoYXJlZF9tYWlsX2JveCkKKwkJJG1haWxfYXJncy0+e0JjY30gPSAkc2hhcmVkX21haWxfYm94OworCX0KKwlpZigkbWFpbHN0cmluZyA9fiAvPGh0bWw+LyB8fCAkbWFpbHN0cmluZyA9fiAvPGh0bWwgLio+LykgeworCQkkbWFpbF9hcmdzLT57J0NvbnRlbnQtVHlwZSd9ID0gInRleHQvaHRtbCI7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiRW5jb3VudGVyZWQgbWVzc2FnZSBjb250YWluaW5nIDxodG1sPiB0YWcsIGFkZGluZyBDb250ZW50LVR5cGUgaGVhZGVyIik7CisJfQorCWlmICgkbWFpbGVyLT5vcGVuKCRtYWlsX2FyZ3MpKSB7CisJCXByaW50ICRtYWlsZXIgJG1haWxzdHJpbmc7CisJCSRtYWlsZXItPmNsb3NlKCk7CisJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAiU1VDQ0VTUyAtLSBTZW5kaW5nIG1haWwgVG86ICR0bywgJHN1YmplY3QiKTsKKwl9CiAJZWxzZSB7Ci0JCWlmICgkbWFpbGVyLT5vcGVuKHtGcm9tID0+ICRmcm9tLCBUbyA9PiAkdG8sIFN1YmplY3QgPT4gJHN1YmplY3QsfSkpCi0JCXsKLQkJCXByaW50ICRtYWlsZXIgJG1haWxzdHJpbmc7Ci0JCQkkbWFpbGVyLT5jbG9zZSgpOwotCQkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJTVUNDRVNTIC0tIFNlbmRpbmcgbWFpbCBUbzogJHRvLCAkc3ViamVjdCIpOwotCQl9Ci0JCWVsc2UgewotCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIk5PVElDRSAtLSAgUHJvYmxlbSBzZW5kaW5nIG1haWwgdG86ICR0byBGcm9tIik7Ci0JCX0KLQl9ICMjIGVuZCBlbHNlIFsgaWYgKCRzaGFyZWRfbWFpbF9ib3gpCisJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJOT1RJQ0UgLS0gIFByb2JsZW0gc2VuZGluZyBtYWlsIHRvOiAkdG8iKTsKKwl9CiB9ICMjIGVuZCBzdWIgbWFpbAogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yMTMxLDggKzIxMjUsOCBAQAogCiAgUGFyYW1ldGVycyAgOiAkbm9kZQogIFJldHVybnMgICAgIDogYm9vbGVhbgotIERlc2NyaXB0aW9uIDogVXNlcyBOZXQ6OlBpbmcgdG8gY2hlY2sgaWYgYSBub2RlIGlzIHJlc3BvbmRpbmcgdG8gSUNNUCBlY2hvCi0gICAgICAgICAgICAgICBwaW5nLgorIERlc2NyaXB0aW9uIDogVXNlcyBOZXQ6OlBpbmc6OkV4dGVybmFsIHRvIGNoZWNrIGlmIGEgbm9kZSBpcyByZXNwb25kaW5nIHRvIElDTVAKKyAgICAgICAgICAgICAgIGVjaG8gcGluZy4KIAogPWN1dAogCkBAIC0yMTU2LDkgKzIxNTAsNyBAQAogCQl9CiAJfQogCQotCW15ICRwID0gTmV0OjpQaW5nLT5uZXcoImljbXAiKTsKLQlteSAkcmVzdWx0ID0gJHAtPnBpbmcoJHJlbW90ZV9jb25uZWN0aW9uX3RhcmdldCwgMSk7Ci0JJHAtPmNsb3NlKCk7CisJbXkgJHJlc3VsdCA9IHBpbmcoaG9zdCA9PiAkcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0LCB0aW1lb3V0ID0+IDEpOwogCiAJaWYgKCRyZXN1bHQpIHsKIAkJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiJG5vZGVfc3RyaW5nIGlzIHJlc3BvbmRpbmcgdG8gcGluZyIpOwpAQCAtNDYyMyw2ICs0NjE1LDcgQEAKIAlteSAkc2VsZWN0X3N0YXRlbWVudCA9ICIKIFNFTEVDVAogbWFuYWdlbWVudG5vZGUuKiwKK1VOSVhfVElNRVNUQU1QKG1hbmFnZW1lbnRub2RlLmxhc3RjaGVja2luKSBhcyBsYXN0Y2hlY2tpbl9lcG9jaCwKIHJlc291cmNlLmlkIEFTIHJlc291cmNlX2lkLAogc3RhdGUubmFtZSBBUyBzdGF0ZW5hbWUKIEZST00KQEAgLTQ5NjIsMjIgKzQ5NTUsNDYgQEAKIAl9CiAKIAkjIEdldCBjdXJyZW50IHRpbWVzdGFtcAotCW15ICR0aW1lc3RhbXAgPSBtYWtlZGF0ZXN0cmluZygpOworCW15ICR0aW1lc3RhbXA7CiAKIAkjIENvbnN0cnVjdCB0aGUgdXBkYXRlIHN0YXRlbWVudAogCW15ICR1cGRhdGVfc3RhdGVtZW50ID0gIgogICAgICAgVVBEQVRFCiAJCW1hbmFnZW1lbnRub2RlCiAJCVNFVAotCQlsYXN0Y2hlY2tpbiA9IFwnJHRpbWVzdGFtcFwnCisJCWxhc3RjaGVja2luID0gTk9XKCkKIAkJV0hFUkUKIAkJaWQgPSAkbWFuYWdlbWVudF9ub2RlX2lkCiAgICAiOwogCisJbXkgJGdldF91bml4X3RpbWVzdGFtcCA9ICIKKwkgIFNFTEVDVAorCSAgICBVTklYX1RJTUVTVEFNUCgpIGFzIEVQT0NfVElNRVNUQU1QCisgICAgIjsKKwogCSMgQ2FsbCB0aGUgZGF0YWJhc2UgZXhlY3V0ZSBzdWJyb3V0aW5lCiAJaWYgKGRhdGFiYXNlX2V4ZWN1dGUoJHVwZGF0ZV9zdGF0ZW1lbnQpKSB7CiAJCSMgVXBkYXRlIHN1Y2Nlc3NmdWwsIHJldHVybiB0aW1lc3RhbXAKLQkJcmV0dXJuICR0aW1lc3RhbXA7CisJCW15IEBzZWxlY3RlZF9yb3dzID0gZGF0YWJhc2Vfc2VsZWN0KCRnZXRfdW5peF90aW1lc3RhbXApOworCisJCSMgQ2hlY2sgdG8gbWFrZSBzdXJlIDEgcm93IHdhcyByZXR1cm5lZAorCQlpZiAoc2NhbGFyIEBzZWxlY3RlZF9yb3dzID09IDApIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJ6ZXJvIHJvd3Mgd2VyZSByZXR1cm5lZCBmcm9tIGRhdGFiYXNlIHNlbGVjdCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZWxzaWYgKHNjYWxhciBAc2VsZWN0ZWRfcm93cyA+IDEpIHsKKwkJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICIiIC4gc2NhbGFyIEBzZWxlY3RlZF9yb3dzIC4gIiByb3dzIHdlcmUgcmV0dXJuZWQgZnJvbSBkYXRhYmFzZSBzZWxlY3QiKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJIyBNYWtlIHN1cmUgd2UgcmV0dXJuIHVuZGVmIGlmIHRoZSBjb2x1bW4gd2Fzbid0IGZvdW5kCisJCWlmIChkZWZpbmVkICRzZWxlY3RlZF9yb3dzWzBde0VQT0NfVElNRVNUQU1QfSkgeworCQkJJHRpbWVzdGFtcCA9ICRzZWxlY3RlZF9yb3dzWzBde0VQT0NfVElNRVNUQU1QfTsKKwkJCXJldHVybiAkdGltZXN0YW1wOworCQl9IGVsc2UgeworCQkJbm90aWZ5KCRFUlJPUlN7J0NSSVRJQ0FMJ30sIDAsICJ1bmFibGUgdG8gZ2V0IEVQT0NfVElNRVNUQU1QIGZyb20gZGF0YWJhc2UiKTsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCWVsc2UgewogCQlub3RpZnkoJEVSUk9SU3snQ1JJVElDQUwnfSwgMCwgInVuYWJsZSB0byB1cGRhdGUgZGF0YWJhc2UsIG1hbmFnZW1lbnQgbm9kZSBpZCAkbWFuYWdlbWVudF9ub2RlX2lkIik7CkBAIC0xNTA4NSw4ICsxNTEwMiw4IEBACiAKID1oZWFkMiBnZXRfbWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFscwogCi0gUGFyYW1ldGVycyAgOiAkbWFuYWdlbWVudF9ub2RlX2lkLCAkZG9tYWluX2Ruc19uYW1lLCAkbm9fY2FjaGUgKG9wdGlvbmFsKQotIFJldHVybnMgICAgIDogKCR1c2VybmFtZSwgJHNlY3JldF9pZCwgJGVuY3J5cHRlZF9wYXNzd29yZCkKKyBQYXJhbWV0ZXJzICA6ICRtYW5hZ2VtZW50X25vZGVfaWQsICRkb21haW5faWQsICRub19jYWNoZSAob3B0aW9uYWwpCisgUmV0dXJucyAgICAgOiAoJGRvbWFpbl9kbnNfbmFtZSwgJHVzZXJuYW1lLCAkc2VjcmV0X2lkLCAkZW5jcnlwdGVkX3Bhc3N3b3JkKQogIERlc2NyaXB0aW9uIDogQXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlIHVzZXJuYW1lLCBlbmNyeXB0ZWQgcGFzc3dvcmQsIGFuZCBzZWNyZXQKICAgICAgICAgICAgICAgIElEIGZvciB0aGUgZG9tYWluIGZyb20gdGhlIGFkZG9tYWluIHRhYmxlLiBUaGlzIGlzIHVzZWQgaWYgYQogICAgICAgICAgICAgICAgY29tcHV0ZXIgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIGEgZG9tYWluIGJ1dCB0aGUgcmVzZXJ2YXRpb24KQEAgLTE1MDk2LDYzICsxNTExMyw1OCBAQAogPWN1dAogCiBzdWIgZ2V0X21hbmFnZW1lbnRfbm9kZV9hZF9kb21haW5fY3JlZGVudGlhbHMgewotCW15ICgkbWFuYWdlbWVudF9ub2RlX2lkLCAkZG9tYWluX2lkZW50aWZpZXIsICRub19jYWNoZSkgPSBAXzsKKwlteSAoJG1hbmFnZW1lbnRfbm9kZV9pZCwgJGRvbWFpbl9pZCwgJG5vX2NhY2hlKSA9IEBfOwogCWlmICghZGVmaW5lZCgkbWFuYWdlbWVudF9ub2RlX2lkKSkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAibWFuYWdlbWVudCBub2RlIElEIGFyZ3VtZW50IHdhcyBub3Qgc3VwcGxpZWQiKTsKIAkJcmV0dXJuOwogCX0KLQllbHNpZiAoISRkb21haW5faWRlbnRpZmllcikgeworCWVsc2lmICghJGRvbWFpbl9pZCkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZG9tYWluIGlkZW50aWZpZXIgbmFtZSBhcmd1bWVudCB3YXMgbm90IHNwZWNpZmllZCIpOwogCQlyZXR1cm47CiAJfQogCQotCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkZW50aWZpZXJ9KSkgewotCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHVybmluZyBjYWNoZWQgQWN0aXZlIERpcmVjdG9yeSBjcmVkZW50aWFscyBmb3IgZG9tYWluOiAkZG9tYWluX2lkZW50aWZpZXIiKTsKLQkJcmV0dXJuIEB7JEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkZW50aWZpZXJ9fTsKKwlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7bWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFsc317JGRvbWFpbl9pZH0pKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0dXJuaW5nIGNhY2hlZCBBY3RpdmUgRGlyZWN0b3J5IGNyZWRlbnRpYWxzIGZvciBkb21haW46ICRkb21haW5faWQiKTsKKwkJcmV0dXJuIEB7JEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkfX07CiAJfQogCQogCSMgQ29uc3RydWN0IHRoZSBzZWxlY3Qgc3RhdGVtZW50CiAJbXkgJHNlbGVjdF9zdGF0ZW1lbnQgPSA8PEVPRjsKIFNFTEVDVCBESVNUSU5DVAorZG9tYWluRE5TTmFtZSwKIHVzZXJuYW1lLAogcGFzc3dvcmQsCiBzZWNyZXRpZAogRlJPTQogYWRkb21haW4KIFdIRVJFCithZGRvbWFpbi5pZCA9ICRkb21haW5faWQKIEVPRgogCQotCWlmICgkZG9tYWluX2lkZW50aWZpZXIgPX4gL15cZCskLykgewotCQkkc2VsZWN0X3N0YXRlbWVudCAuPSAiYWRkb21haW4uaWQgPSAkZG9tYWluX2lkZW50aWZpZXIiOwotCX0KLQllbHNlIHsKLQkJJHNlbGVjdF9zdGF0ZW1lbnQgLj0gImFkZG9tYWluLmRvbWFpbkROU05hbWUgTElLRSAnJGRvbWFpbl9pZGVudGlmaWVyJSciOwotCX0KLQkKIAkjIENhbGwgdGhlIGRhdGFiYXNlIHNlbGVjdCBzdWJyb3V0aW5lCiAJbXkgQHNlbGVjdGVkX3Jvd3MgPSBkYXRhYmFzZV9zZWxlY3QoJHNlbGVjdF9zdGF0ZW1lbnQpOwogCiAJIyBDaGVjayB0byBtYWtlIHN1cmUgMSByb3cgd2FzIHJldHVybmVkCiAJaWYgKHNjYWxhciBAc2VsZWN0ZWRfcm93cyA9PSAwKSB7Ci0JCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiQWN0aXZlIERpcmVjdG9yeSBkb21haW4gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlOiAkZG9tYWluX2lkZW50aWZpZXIiKTsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2U6ICRkb21haW5faWQiKTsKIAkJcmV0dXJuICgpOwogCX0KIAogCSMgR2V0IHRoZSBzaW5nbGUgcm93IHJldHVybmVkIGZyb20gdGhlIHNlbGVjdCBzdGF0ZW1lbnQKIAlteSAkcm93ID0gJHNlbGVjdGVkX3Jvd3NbMF07CisJbXkgJGRvbWFpbl9kbnNfbmFtZSA9ICRyb3ctPntkb21haW5ETlNOYW1lfTsKIAlteSAkdXNlcm5hbWUgPSAkcm93LT57dXNlcm5hbWV9OwogCW15ICRzZWNyZXRfaWQgPSAkcm93LT57c2VjcmV0aWR9OwogCW15ICRlbmNyeXB0ZWRfcGFzc3dvcmQgPSAkcm93LT57cGFzc3dvcmR9OwogCQotCQotCQotCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGNyZWRlbnRpYWxzIGZvciBkb21haW46ICRkb21haW5faWRlbnRpZmllclxuIiAuCisJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgY3JlZGVudGlhbHMgZm9yIGRvbWFpbjogJGRvbWFpbl9pZFxuIiAuCisJCSJkb21haW4gRE5TIG5hbWUgICAgOiAnJGRvbWFpbl9kbnNfbmFtZSdcbiIgLgogCQkidXNlcm5hbWUgICAgICAgICAgIDogJyR1c2VybmFtZSdcbiIgLgogCQkic2VjcmV0IElEICAgICAgICAgIDogJyRzZWNyZXRfaWQnXG4iIC4KIAkJImVuY3J5cHRlZCBwYXNzd29yZCA6ICckZW5jcnlwdGVkX3Bhc3N3b3JkJyIKIAkpOwotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFsc317JGRvbWFpbl9pZGVudGlmaWVyfSA9IFskdXNlcm5hbWUsICRzZWNyZXRfaWQsICRlbmNyeXB0ZWRfcGFzc3dvcmRdOwotCXJldHVybiBAeyRFTlZ7bWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFsc317JGRvbWFpbl9pZGVudGlmaWVyfX07CisJJEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkfSA9IFskZG9tYWluX2Ruc19uYW1lLCAkdXNlcm5hbWUsICRzZWNyZXRfaWQsICRlbmNyeXB0ZWRfcGFzc3dvcmRdOworCXJldHVybiBAeyRFTlZ7bWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFsc317JGRvbWFpbl9pZH19OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0VTWGkvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvRVNYaS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvRVNYaS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL0VTWGkvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0VTWGkvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvRVNYaS9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvRVNYaS9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL0VTWGkvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9FU1hpL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9MaW51eC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9MaW51eC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9MaW51eC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9MaW51eC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTGludXgvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL0xpbnV4L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wb3N0X2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wb3N0X2NhcHR1cmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvTWFuYWdlbWVudE5vZGUvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL01hbmFnZW1lbnROb2RlL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9NYW5hZ2VtZW50Tm9kZS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvT1NYL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvT1NYL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvT1NYL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvT1NYL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9PU1gvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL09TWC9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvVWJ1bnR1L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvVWJ1bnR1L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvVWJ1bnR1L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvVWJ1bnR1L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9VYnVudHUvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1VidW50dS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9Ecml2ZXJzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL0RyaXZlcnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9Ecml2ZXJzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvTG9ncy8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9Mb2dzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvTG9ncy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvVXBkYXRlcy94ODYvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzL1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvVXRpbGl0aWVzL1dTTmFtZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93cy9VdGlsaXRpZXMvV1NOYW1lLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3MvVXRpbGl0aWVzL1dTTmFtZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvRHJpdmVycy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9VcGRhdGVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1VwZGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c18xMC9VcGRhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfMTAvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1V0aWxpdGllcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzEwL1V0aWxpdGllcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvRHJpdmVycy8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L0RyaXZlcnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvVXBkYXRlcy94ODYvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c183L1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzcvVXRpbGl0aWVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfNy9VdGlsaXRpZXMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9Ecml2ZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9Ecml2ZXJzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c184L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9VcGRhdGVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvVXBkYXRlcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvVXBkYXRlcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzXzgvVXRpbGl0aWVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfOC9VdGlsaXRpZXMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9Ecml2ZXJzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL0RyaXZlcnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9Ecml2ZXJzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvVXBkYXRlcy94ODYvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvVXBkYXRlcy94ODYvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9VcGRhdGVzL3g4Ni8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDMvVXBkYXRlcy94ODZfNjQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9VdGlsaXRpZXMvU3lzcHJlcC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwMy9VdGlsaXRpZXMvU3lzcHJlcC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDAzL1V0aWxpdGllcy9TeXNwcmVwLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvRHJpdmVycy8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9Ecml2ZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvRHJpdmVycy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvU2NyaXB0cy9wb3N0X3Jlc2VydmF0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvU2NyaXB0cy9wcmVfcmVsb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvVXBkYXRlcy94ODYvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAwOC9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMDgvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1V0aWxpdGllcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDA4L1V0aWxpdGllcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvRHJpdmVycy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9VcGRhdGVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1VwZGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxMi9VcGRhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTIvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1V0aWxpdGllcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDEyL1V0aWxpdGllcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvRHJpdmVycy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9VcGRhdGVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1VwZGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19TZXJ2ZXJfMjAxNi9VcGRhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfU2VydmVyXzIwMTYvVXRpbGl0aWVzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1V0aWxpdGllcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1NlcnZlcl8yMDE2L1V0aWxpdGllcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9Ecml2ZXJzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9Ecml2ZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzUvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzUvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzUvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzUvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzUvVXBkYXRlcy94ODYvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl81L1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNS9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9Ecml2ZXJzLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9Ecml2ZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzYvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzYvU2NyaXB0cy9wb3N0X2luaXRpYWxfY29ubmVjdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcG9zdF9sb2FkLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzYvU2NyaXB0cy9wb3N0X3Jlc2VydmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcHJlX2NhcHR1cmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzYvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WZXJzaW9uXzYvVXBkYXRlcy94ODYvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmVyc2lvbl82L1VwZGF0ZXMveDg2XzY0Ly5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1ZlcnNpb25fNi9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvRHJpdmVycy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9VcGRhdGVzL3g4Ni8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9VcGRhdGVzL3g4Ni8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1Zpc3RhL1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvVXBkYXRlcy94ODZfNjQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfVmlzdGEvVXBkYXRlcy94ODZfNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19WaXN0YS9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL0RyaXZlcnMvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvRHJpdmVycy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL0RyaXZlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1NjcmlwdHMvcG9zdF9pbml0aWFsX2Nvbm5lY3Rpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfaW5pdGlhbF9jb25uZWN0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvU2NyaXB0cy9wb3N0X2xvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfbG9hZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1NjcmlwdHMvcG9zdF9yZXNlcnZhdGlvbi8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfcmVzZXJ2YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3Bvc3RfcmVzZXJ2ZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1NjcmlwdHMvcG9zdF9yZXNlcnZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3ByZV9jYXB0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvU2NyaXB0cy9wcmVfY2FwdHVyZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1NjcmlwdHMvcHJlX3JlbG9hZC8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9TY3JpcHRzL3ByZV9yZWxvYWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9VcGRhdGVzL3g4Ni8uZ2l0aWdub3JlIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9VcGRhdGVzL3g4Ni8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1VwZGF0ZXMveDg2Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMSBAQAorIworIyBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8ga2VlcCB0aGlzIGRpcmVjdG9yeSBmcm9tIGJlaW5nIGVtcHR5IHNvIHRoZQorIyBkaXJlY3Rvcnkgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBkaXJlY3RvcnkgaXMgdXNlZCBieQorIyB0aGUgYmFja2VuZCBjb2RlIGZvciBzb21lIHNjcmlwdHMgdXNlZCBkdXJpbmcgcHJvdmlzaW9uaW5nLCBhbmQgc28gbmVlZHMgdG8KKyMgYmUgcmV0YWluZWQuCisjCisKKyMgSWdub3JlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkKKyoKKyMgRXhjZXB0IHRoaXMgZmlsZQorIS5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvVXBkYXRlcy94ODZfNjQvLmdpdGlnbm9yZSBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvVXBkYXRlcy94ODZfNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuYWdlbWVudG5vZGUvdG9vbHMvV2luZG93c19YUC9VcGRhdGVzL3g4Nl82NC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGtlZXAgdGhpcyBkaXJlY3RvcnkgZnJvbSBiZWluZyBlbXB0eSBzbyB0aGUKKyMgZGlyZWN0b3J5IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiBUaGUgZGlyZWN0b3J5IGlzIHVzZWQgYnkKKyMgdGhlIGJhY2tlbmQgY29kZSBmb3Igc29tZSBzY3JpcHRzIHVzZWQgZHVyaW5nIHByb3Zpc2lvbmluZywgYW5kIHNvIG5lZWRzIHRvCisjIGJlIHJldGFpbmVkLgorIworCisjIElnbm9yZSBldmVyeXRoaW5nIGluIHRoaXMgZGlyZWN0b3J5CisqCisjIEV4Y2VwdCB0aGlzIGZpbGUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1V0aWxpdGllcy9TeXNwcmVwLy5naXRpZ25vcmUgYi9tYW5hZ2VtZW50bm9kZS90b29scy9XaW5kb3dzX1hQL1V0aWxpdGllcy9TeXNwcmVwLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNjc5NAotLS0gL2Rldi9udWxsCisrKyBiL21hbmFnZW1lbnRub2RlL3Rvb2xzL1dpbmRvd3NfWFAvVXRpbGl0aWVzL1N5c3ByZXAvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDExIEBACisjCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBrZWVwIHRoaXMgZGlyZWN0b3J5IGZyb20gYmVpbmcgZW1wdHkgc28gdGhlCisjIGRpcmVjdG9yeSB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGRpcmVjdG9yeSBpcyB1c2VkIGJ5CisjIHRoZSBiYWNrZW5kIGNvZGUgZm9yIHNvbWUgc2NyaXB0cyB1c2VkIGR1cmluZyBwcm92aXNpb25pbmcsIGFuZCBzbyBuZWVkcyB0bworIyBiZSByZXRhaW5lZC4KKyMKKworIyBJZ25vcmUgZXZlcnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeQorKgorIyBFeGNlcHQgdGhpcyBmaWxlCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvbXlzcWwvdXBkYXRlLXZjbC5zcWwgYi9teXNxbC91cGRhdGUtdmNsLnNxbAppbmRleCBjZTMzNTQ4Li5kYTc3YTUyIDEwMDY0NAotLS0gYS9teXNxbC91cGRhdGUtdmNsLnNxbAorKysgYi9teXNxbC91cGRhdGUtdmNsLnNxbApAQCAtODcyLDE3ICs4NzIsMjUgQEAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBhZGRvbWFpbmAgKAogICBgaWRgIHRpbnlpbnQoMykgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBvd25lcmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwsCi0gIGBuYW1lYCB2YXJjaGFyKDMwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAorICBgbmFtZWAgdmFyY2hhcig1MTIpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBkb21haW5ETlNOYW1lYCB2YXJjaGFyKDcwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogICBgZG5zU2VydmVyc2AgdmFyY2hhcig1MTIpIGRlZmF1bHQgTlVMTCwKLSAgYHVzZXJuYW1lYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAorICBgdXNlcm5hbWVgIHZhcmNoYXIoODApIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBwYXNzd29yZGAgdmFyY2hhcigyNTYpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBzZWNyZXRpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwsCisgIGB1c2VkYmhvc3RuYW1lc2AgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICAgUFJJTUFSWSBLRVkgKGBpZGApLAotICBVTklRVUUgS0VZIGBkb21haW5ETlNOYW1lYCAoYGRvbWFpbkROU05hbWVgKSwKKyAgS0VZIGBkb21haW5ETlNOYW1lYCAoYGRvbWFpbkROU05hbWVgKSwKICAgS0VZIGBzZWNyZXRpZGAgKGBzZWNyZXRpZGApCiApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAorQ0FMTCBEcm9wRXhpc3RpbmdJbmRpY2VzKCdhZGRvbWFpbicsICdkb21haW5ETlNOYW1lJyk7CitDQUxMIEFkZEluZGV4SWZOb3RFeGlzdHMoJ2FkZG9tYWluJywgJ2RvbWFpbkROU05hbWUnKTsKK0NBTEwgQWRkQ29sdW1uSWZOb3RFeGlzdHMoJ2FkZG9tYWluJywgJ3VzZWRiaG9zdG5hbWVzJywgInRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCciKTsKKworQUxURVIgVEFCTEUgYGFkZG9tYWluYCBDSEFOR0UgYG5hbWVgIGBuYW1lYCB2YXJjaGFyKDUxMikgTk9UIE5VTEwgZGVmYXVsdCAnJzsKK0FMVEVSIFRBQkxFIGBhZGRvbWFpbmAgQ0hBTkdFIGB1c2VybmFtZWAgYHVzZXJuYW1lYCB2YXJjaGFyKDgwKSBOT1QgTlVMTCBkZWZhdWx0ICcnOworCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAtLQpAQCAtMTAyMCw2ICsxMDI4LDcgQEAKIAogQUxURVIgVEFCTEUgYGltYWdlYCBDSEFOR0UgYGJhc2Vkb2ZmcmV2aXNpb25pZGAgYGJhc2Vkb2ZmcmV2aXNpb25pZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTDsKIENBTEwgQWRkSW5kZXhJZk5vdEV4aXN0cygnaW1hZ2UnLCAnYmFzZWRvZmZyZXZpc2lvbmlkJyk7CitBTFRFUiBUQUJMRSBgaW1hZ2VgIENIQU5HRSBgbWF4aW5pdGlhbHRpbWVgIGBtYXhpbml0aWFsdGltZWAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTExLDYgKzExMjAsNyBAQAogLS0gVGFibGUgc3RydWN0dXJlIGNoYW5nZSBmb3IgdGFibGUgYG1hbmFnZW1lbnRub2RlYAogLS0gCiAKK0FMVEVSIFRBQkxFIGBtYW5hZ2VtZW50bm9kZWAgQ0hBTkdFIGBsYXN0Y2hlY2tpbmAgYGxhc3RjaGVja2luYCB0aW1lc3RhbXAgZGVmYXVsdCAwOwogQ0FMTCBBZGRDb2x1bW5JZk5vdEV4aXN0cygnbWFuYWdlbWVudG5vZGUnLCAncHVibGljSVBjb25maWd1cmF0aW9uJywgImVudW0oJ2R5bmFtaWNESENQJywnbWFudWFsREhDUCcsJ3N0YXRpYycpIE5PVCBOVUxMIGRlZmF1bHQgJ2R5bmFtaWNESENQJyIpOwogQ0FMTCBBZGRDb2x1bW5JZk5vdEV4aXN0cygnbWFuYWdlbWVudG5vZGUnLCAncHVibGljU3VibmV0TWFzaycsICJ2YXJjaGFyKDU2KSBkZWZhdWx0IE5VTEwiKTsKIENBTEwgQWRkQ29sdW1uSWZOb3RFeGlzdHMoJ21hbmFnZW1lbnRub2RlJywgJ3B1YmxpY0RlZmF1bHRHYXRld2F5JywgInZhcmNoYXIoNTYpIGRlZmF1bHQgTlVMTCIpOwpAQCAtMTEyNCw2ICsxMTM0LDE4IEBACiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy0tIAorLS0gVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgbWVzc2FnZXJlc2V0YAorLS0gCisKK0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBtZXNzYWdlcmVzZXRgICgKKyAgYG5hbWVgIHZhcmNoYXIoMTI4KSBOT1QgTlVMTCwKKyAgYHZhbHVlYCBsb25ndGV4dCBOT1QgTlVMTCwKKyAgUFJJTUFSWSBLRVkgKGBuYW1lYCkKKykgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogLS0KIC0tIFRhYmxlIHN0cnVjdHVyZSBjaGFuZ2UgZm9yIHRhYmxlIGBtb2R1bGVgCiAtLQpAQCAtMTMwNiw2ICsxMzI4LDE0IEBACiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAtLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgcmVzb3VyY2Vncm91cGAKKy0tCisKK0FMVEVSIFRBQkxFIGByZXNvdXJjZWdyb3VwYCBDSEFOR0UgYG5hbWVgIGBuYW1lYCB2YXJjaGFyKDYwKSBOT1QgTlVMTCBkZWZhdWx0ICcnOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLQogLS0gVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgcmVzb3VyY2Vwcml2YAogLS0KIENBTEwgQWRkTWFuYWdlTWFwcGluZygpOwpAQCAtMTU0NCwxMiArMTU3NCwxNCBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYHZjbGRzZW1hcGhvcmVgICgKICAgYGlkZW50aWZpZXJgIHZhcmNoYXIoMjU2KSBOT1QgTlVMTCwKICAgYHJlc2VydmF0aW9uaWRgIG1lZGl1bWludCg5KSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgYHBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwsCisgIGBwaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYGV4cGlyZXNgIGRhdGV0aW1lIE5PVCBOVUxMLAogICBQUklNQVJZIEtFWSAoYGlkZW50aWZpZXJgKSwKICAgS0VZIGByZXNlcnZhdGlvbmlkYCAoYHJlc2VydmF0aW9uaWRgKQogKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKK0FMVEVSIFRBQkxFIGB2Y2xkc2VtYXBob3JlYCBDSEFOR0UgYHBpZGAgYHBpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMOworCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAtLSAKQEAgLTE3NDUsNiArMTc3NywzMCBAQAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLS0gCistLSBJbnNlcnRzIGZvciB0YWJsZSBgbWVzc2FnZXJlc2V0YAorLS0gCisKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCdhZG1pbm1lc3NhZ2V8aW1hZ2VfY3JlYXRpb25fZmFpbGVkJywgJy0tLVxubWVzc2FnZTogfFxuICBWQ0wgSW1hZ2UgQ3JlYXRpb24gRmFpbGVkXG4gIFxuICBNYW5hZ2VtZW50IG5vZGU6IFttYW5hZ2VtZW50X25vZGVfc2hvcnRfbmFtZV1cbiAgXG4gIFJlcXVlc3QgSUQ6IFtyZXF1ZXN0X2lkXVxuICBSZXNlcnZhdGlvbiBJRDogW3Jlc2VydmF0aW9uX2lkXVxuICBQSUQ6IFtwcm9jZXNzX3BpZF1cbiAgXG4gIEltYWdlIElEOiBbaW1hZ2VfaWRdXG4gIEltYWdlIHJldmlzaW9uIElEOiBbaW1hZ2VyZXZpc2lvbl9pZF1cbiAgSW1hZ2UgbmFtZTogW2ltYWdlX25hbWVdXG4gIEltYWdlIGRpc3BsYXkgbmFtZTogW2ltYWdlX3ByZXR0eW5hbWVdXG4gIEltYWdlIE9TIHBhY2thZ2U6IFtpbWFnZV9vc19tb2R1bGVfcGVybF9wYWNrYWdlXVxuICBcbiAgVXNlciBJRDogW3VzZXJfaWRdXG4gIFVzZXIgbG9naW4gbmFtZTogW3VzZXJfbG9naW5faWRdXG4gIFVzZXIgbmFtZTogW3VzZXJfZmlyc3RuYW1lXSBbdXNlcl9sYXN0bmFtZV1cbiAgVXNlciBhZmZpbGlhdGlvbjogW3VzZXJfYWZmaWxpYXRpb25fbmFtZV1cbiAgXG4gIFByb3Zpc2lvbmluZyBtb2R1bGU6IFtjb21wdXRlcl9wcm92aXNpb25pbmdfcHJldHR5X25hbWVdIChbY29tcHV0ZXJfcHJvdmlzaW9uaW5nX25hbWVdKVxuICBQcm92aXNpb25pbmcgcGFja2FnZTogW2NvbXB1dGVyX3Byb3Zpc2lvbmluZ19tb2R1bGVfcGVybF9wYWNrYWdlXVxuICBcbiAgQ29tcHV0ZXIgSUQ6IFtjb21wdXRlcl9pZF1cbiAgQ29tcHV0ZXIgbmFtZTogW2NvbXB1dGVyX3Nob3J0X25hbWVdXG4gIFxuICBWTSBob3N0IElEOiBbdm1ob3N0X2lkXVxuICBWTSBob3N0IGNvbXB1dGVyIElEOiBbdm1ob3N0X2NvbXB1dGVyX2lkXVxuICBWTSBob3N0IGNvbXB1dGVyIG5hbWU6IFt2bWhvc3Rfc2hvcnRfbmFtZV1cbiAgXG4gIFZNIGhvc3QgcHJvZmlsZSBJRDogW3ZtaG9zdF9wcm9maWxlX2lkXVxuICBWTSBob3N0IHByb2ZpbGUgbmFtZTogW3ZtaG9zdF9wcm9maWxlX25hbWVdXG5zdWJqZWN0OiAnJ1ZDTCAtLSBOT1RJQ0UgRkFJTEVEIEltYWdlIFtpbWFnZV9jYXB0dXJlX3R5cGVdIFtpbWFnZV9wcmV0dHluYW1lXScnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCdhZG1pbm1lc3NhZ2V8aW1hZ2VfY3JlYXRpb25fY29tcGxldGUnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFZDTCBJbWFnZSBbaW1hZ2VfY2FwdHVyZV90eXBlXSBDb21wbGV0ZWRcbiAgXG4gIFJlcXVlc3QgSUQ6IFtyZXF1ZXN0X2lkXVxuICBSZXNlcnZhdGlvbiBJRDogW3Jlc2VydmF0aW9uX2lkXVxuICBQSUQ6IFtwcm9jZXNzX3BpZF1cbiAgXG4gIEltYWdlIElEOiBbaW1hZ2VfaWRdXG4gIEltYWdlIG5hbWU6IFtpbWFnZV9uYW1lXVxuICBJbWFnZSBzaXplOiBbaW1hZ2Vfc2l6ZV1cbiAgXG4gIFJldmlzaW9uIElEOiBbaW1hZ2VyZXZpc2lvbl9pZF1cbiAgXG4gIE1hbmFnZW1lbnQgbm9kZTogW21hbmFnZW1lbnRfbm9kZV9zaG9ydF9uYW1lXVxuICBcbiAgVXNlcm5hbWU6IFt1c2VyX2xvZ2luX2lkXVxuICBVc2VyIElEOiBbdXNlcl9pZF1cbiAgXG4gIENvbXB1dGVyIElEOiBbY29tcHV0ZXJfaWRdXG4gIENvbXB1dGVyIG5hbWU6IFtjb21wdXRlcl9zaG9ydF9uYW1lXVxuICBcbiAgVXNlIFN5c3ByZXA6IFtpbWFnZW1ldGFfc3lzcHJlcF1cbnN1YmplY3Q6ICcnVkNMIElNQUdFIFtpbWFnZV9jYXB0dXJlX3R5cGVdIENvbXBsZXRlZDogW2ltYWdlX25hbWVdJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ2FkbWlubWVzc2FnZXxpbWFnZV9jcmVhdGlvbl9zdGFydGVkJywgJy0tLVxubWVzc2FnZTogfFxuICBWQ0wgSW1hZ2UgQ3JlYXRpb24gU3RhcnRlZFxuICBcbiAgUmVxdWVzdCBJRDogW3JlcXVlc3RfaWRdXG4gIFJlc2VydmF0aW9uIElEOiBbcmVzZXJ2YXRpb25faWRdXG4gIFBJRDogW3Byb2Nlc3NfcGlkXVxuICBcbiAgSW1hZ2UgSUQ6IFtpbWFnZV9pZF1cbiAgSW1hZ2UgbmFtZTogW2ltYWdlX25hbWVdXG4gIEJhc2UgaW1hZ2Ugc2l6ZTogW2ltYWdlX3NpemVdXG4gIEJhc2UgcmV2aXNpb24gSUQ6IFtpbWFnZXJldmlzaW9uX2lkXVxuICBcbiAgTWFuYWdlbWVudCBub2RlOiBbbWFuYWdlbWVudF9ub2RlX3Nob3J0X25hbWVdXG4gIFxuICBVc2VybmFtZTogW3VzZXJfbG9naW5faWRdXG4gIFVzZXIgSUQ6IFt1c2VyX2lkXVxuICBcbiAgQ29tcHV0ZXIgSUQ6IFtjb21wdXRlcl9pZF1cbiAgQ29tcHV0ZXIgbmFtZTogW2NvbXB1dGVyX3Nob3J0X25hbWVdXG4gIFxuICBVc2UgU3lzcHJlcDogW2ltYWdlbWV0YV9zeXNwcmVwXVxuc3ViamVjdDogJydWQ0wgSU1BR0UgQ3JlYXRpb24gU3RhcnRlZDogW2ltYWdlX25hbWVdJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfGVuZHRpbWVfcmVhY2hlZHxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgcmVzZXJ2YXRpb24gb2YgW2ltYWdlX3ByZXR0eW5hbWVdIGhhcyBlbmRlZC4gVGhhbmsgeW91IGZvciB1c2luZyBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc10uXG4gIFxuICBSZWdhcmRzLFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2UgcGxlYXNlIHJlc3BvbmQgXG4gIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgXG4gIGdlbmVyYXRlZC5cbiAgXG4gIFRvIGRpc2FibGUgZW1haWwgbm90aWNlc1xuICAtVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIC1TZWxlY3QgVXNlciBQcmVmZXJlbmNlc1xuICAtU2VsZWN0IEdlbmVyYWwgUHJlZmVyZW5jZXNcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gRW5kIG9mIHJlc2VydmF0aW9uJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfHJlc2VydmVkfEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgVGhlIHJlc291cmNlcyBmb3IgeW91ciBWQ0wgcmVzZXJ2YXRpb24gaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSByZXNlcnZlZC5cbiAgQ29ubmVjdGlvbiB3aWxsIG5vdCBiZSBhbGxvd2VkIHVudGlsIHlvdSBjbGljayB0aGUgJydDb25uZWN0JycgYnV0dG9uIG9uIHRoZSAnJ0N1cnJlbnQgUmVzZXJ2YXRpb25zJycgcGFnZS5cbiAgWW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIHJlc2VydmF0aW9uIHdpdGhpbiB0aGUgbmV4dCAxNSBtaW51dGVzIG9yIHRoZSByZXNvdXJjZXMgd2lsbCBiZSByZWNsYWltZWQgZm9yIG90aGVyIFZDTCB1c2Vycy5cbiAgXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCAiQ3VycmVudCBSZXNlcnZhdGlvbnMiXG4gIC1DbGljayB0aGUgIkNvbm5lY3QiIGJ1dHRvblxuICBVcG9uIGFja25vd2xlZGdlbWVudCwgYWxsIG9mIHRoZSByZW1haW5pbmcgY29ubmVjdGlvbiBkZXRhaWxzIHdpbGwgYmUgZGlzcGxheWVkLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSBbaW1hZ2VfcHJldHR5bmFtZV0gcmVzZXJ2YXRpb24nJ1xuJyk7CitJTlNFUlQgSUdOT1JFIElOVE8gYG1lc3NhZ2VyZXNldGAgKGBuYW1lYCwgYHZhbHVlYCkgVkFMVUVTICgndXNlcm1lc3NhZ2V8dGltZW91dF9ub19pbml0aWFsX2Nvbm5lY3Rpb258R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIHJlc2VydmF0aW9uIGhhcyB0aW1lZCBvdXQgZm9yIGltYWdlIFtpbWFnZV9wcmV0dHluYW1lXSBiZWNhdXNlIG5vIGluaXRpYWwgY29ubmVjdGlvbiB3YXMgbWFkZS5cbiAgXG4gIFRvIG1ha2UgYW5vdGhlciByZXNlcnZhdGlvbiwgcGxlYXNlIHJldmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2VcbiAgcGxlYXNlIHJlc3BvbmQgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWVcbiAgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gUmVzZXJ2YXRpb24gVGltZW91dCcnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCd1c2VybWVzc2FnZXxlbmR0aW1lX2ltbWluZW50fEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgWW91IGhhdmUgW25vdGljZV9pbnRlcnZhbF0gdW50aWwgdGhlIGVuZCBvZiB5b3VyIHJlc2VydmF0aW9uIGZvciBpbWFnZSBbaW1hZ2VfcHJldHR5bmFtZV0sIHBsZWFzZSBzYXZlIGFsbCB3b3JrIGFuZCBwcmVwYXJlIHRvIGV4aXQuXG4gIFxuICBSZXNlcnZhdGlvbiBleHRlbnNpb25zIGFyZSBhdmFpbGFibGUgaWYgdGhlIG1hY2hpbmUgeW91IGFyZSBvbiBkb2VzIG5vdCBoYXZlIGEgcmVzZXJ2YXRpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nLlxuICBcbiAgVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdIGFuZCBzZWxlY3QgQ3VycmVudCBSZXNlcnZhdGlvbnMgdG8gZWRpdCB0aGlzIHJlc2VydmF0aW9uLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2UgcGxlYXNlIHJlc3BvbmQgXG4gIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgXG4gIGdlbmVyYXRlZC5cbiAgXG4gIFRvIGRpc2FibGUgZW1haWwgbm90aWNlc1xuICAtVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIC1TZWxlY3QgVXNlciBQcmVmZXJlbmNlc1xuICAtU2VsZWN0IEdlbmVyYWwgUHJlZmVyZW5jZXNcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogJydZb3UgaGF2ZSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCB0aGUgZW5kIG9mIHlvdXIgcmVzZXJ2YXRpb24uIFBsZWFzZSBzYXZlIGFsbCB3b3JrIGFuZCBwcmVwYXJlIHRvIGxvZyBvZmYuJydcbnN1YmplY3Q6ICcnVkNMIC0tIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIGVuZCBvZiByZXNlcnZhdGlvbicnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCd1c2VybWVzc2FnZXxwcm9kdWN0aW9uX2ltYWdlcmV2aXNpb258R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBSZXZpc2lvbiBbaW1hZ2VyZXZpc2lvbl9yZXZpc2lvbl0gb2YgeW91ciBWQ0wgJydbaW1hZ2VfcHJldHR5bmFtZV0nJyBpbWFnZSBoYXMgYmVlbiBtYWRlIHByb2R1Y3Rpb24uICBBbnkgbmV3IHJlc2VydmF0aW9ucyBmb3IgdGhlIGltYWdlIHdpbGwgcmVjZWl2ZSB0aGlzIHJldmlzaW9uIGJ5IGRlZmF1bHQuXG4gIFxuICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBwbGVhc2UgY29udGFjdCBbdXNlcl9hZmZpbGlhdGlvbl9oZWxwYWRkcmVzc10uXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSBJbWFnZSBbaW1hZ2VfcHJldHR5bmFtZV0gbWFkZSBwcm9kdWN0aW9uJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfHRpbWVvdXRfaW5hY3Rpdml0eXxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgcmVzZXJ2YXRpb24gaGFzIHRpbWVkIG91dCBkdWUgdG8gaW5hY3Rpdml0eSBmb3IgaW1hZ2UgW2ltYWdlX3ByZXR0eW5hbWVdLlxuICBcbiAgVG8gbWFrZSBhbm90aGVyIHJlc2VydmF0aW9uLCBwbGVhc2UgcmV2aXNpdDpcbiAgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSByZXNlcnZhdGlvbiB0aW1lb3V0JydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfGltYWdlX2NyZWF0aW9uX2RlbGF5ZWR8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBXZSBhcG9sb2dpemUgZm9yIHRoZSBpbmNvbnZlbmllbmNlLlxuICBZb3VyIGltYWdlIGNyZWF0aW9uIG9mIFtpbWFnZV9wcmV0dHluYW1lXSBoYXMgYmVlbiBkZWxheWVkXG4gIGR1ZSB0byBhIHN5c3RlbSBpc3N1ZSB0aGF0IHByZXZlbnRlZCB0aGUgYXV0b21hdGljIGNvbXBsZXRpb24uXG4gIFxuICBUaGUgaW1hZ2UgY3JlYXRpb24gcmVxdWVzdCBhbmQgdGhlIGNvbXB1dGluZyByZXNvdXJjZSBoYXZlXG4gIGJlZW4gcGxhY2VkIGluIGEgc2FmZSBtb2RlLiBUaGUgVkNMIHN5c3RlbSBhZG1pbmlzdHJhdG9yc1xuICBoYXZlIGJlZW4gbm90aWZpZWQgZm9yIG1hbnVhbCBpbnRlcnZlbnRpb24uXG4gIFxuICBPbmNlIHRoZSBpc3N1ZXMgaGF2ZSBiZWVuIHJlc29sdmVkLCB5b3Ugd2lsbCBiZSBub3RpZmllZFxuICBieSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGVtYWlsIG9yIGNvbnRhY3RlZCBkaXJlY3RseVxuICBieSB0aGUgVkNMIHN5c3RlbSBhZG1pbmlzdHJhdG9ycy5cbiAgXG4gIElmIHlvdSBkbyBub3QgcmVjZWl2ZSBhIHJlc3BvbnNlIHdpdGhpbiBvbmUgYnVzaW5lc3MgZGF5LCBwbGVhc2VcbiAgcmVwbHkgdG8gdGhpcyBlbWFpbC5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIE5PVElDRSBERUxBWSBJbWFnZSBDcmVhdGlvbiBbaW1hZ2VfcHJldHR5bmFtZV0nJ1xuJyk7CitJTlNFUlQgSUdOT1JFIElOVE8gYG1lc3NhZ2VyZXNldGAgKGBuYW1lYCwgYHZhbHVlYCkgVkFMVUVTICgndXNlcm1lc3NhZ2V8cmVpbnN0YWxsZWR8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIHJlc2VydmF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcmVpbnN0YWxsZWQgYW5kIHlvdSBjYW4gcHJvY2VlZCB0byByZWNvbm5lY3QuIFxuICBQbGVhc2UgcmV2aXNpdCB0aGUgJydDdXJyZW50IFJlc2VydmF0aW9ucycnIHBhZ2UgZm9yIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqJydcbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIFtpbWFnZV9wcmV0dHluYW1lXSByZXNlcnZhdGlvbiByZWluc3RhbGxlZCcnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCd1c2VybWVzc2FnZXxlbmR0aW1lX3JlYWNoZWRfaW1hZ2luZ3xHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgaW1hZ2luZyByZXNlcnZhdGlvbiBvZiBbaW1hZ2VfcHJldHR5bmFtZV0gaGFzIHJlYWNoZWQgaXQnJ3Mgc2NoZWR1bGVkIGVuZCB0aW1lLlxuICBcbiAgVG8gYXZvaWQgbG9zaW5nIHlvdXIgd29yayB3ZSBoYXZlIHN0YXJ0ZWQgYW4gYXV0b21hdGljIGNhcHR1cmUgb2YgdGhpcyBpbWFnZS4gVXBvbiBjb21wbGV0aW9uIG9mIHRoZSBcbiAgaW1hZ2UgY2FwdHVyZS4gWW91IHdpbGwgYmUgbm90aWZpZWQgYWJvdXQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGltYWdlIGNhcHR1cmUuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCBJbWFnZSBSZXNlcnZhdGlvbiAtIEF1dG8gY2FwdHVyZSBzdGFydGVkJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfGltYWdlX2NyZWF0aW9uX3N1Y2Nlc3N8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIFZDTCBpbWFnZSBjcmVhdGlvbiByZXF1ZXN0IGZvciBbaW1hZ2VfcHJldHR5bmFtZV0gaGFzIHN1Y2NlZWRlZC5cbiAgXG4gIFBsZWFzZSB2aXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc10gYW5kIHlvdSBzaG91bGQgc2VlIGFuIGltYWdlIGNhbGxlZCBbaW1hZ2VfcHJldHR5bmFtZV0uXG4gIFxuICBQbGVhc2UgdGVzdCB0aGlzIGltYWdlIHRvIGNvbmZpcm0gaXQgd29ya3MgY29ycmVjdGx5LlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gW2ltYWdlX3ByZXR0eW5hbWVdIEltYWdlIENyZWF0aW9uIFN1Y2NlZWRlZCcnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCd1c2VybWVzc2FnZXxpbWFnZV9jaGVja3BvaW50X3N1Y2Nlc3N8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIFZDTCBpbWFnZSBjaGVja3BvaW50IGNyZWF0aW9uIHJlcXVlc3QgZm9yIFtpbWFnZV9wcmV0dHluYW1lXSBoYXMgc3VjY2VlZGVkLlxuICBcbiAgWW91IHdpbGwgbmVlZCB0byB2aXNpdCB0aGUgIkN1cnJlbnQgUmVzZXJ2YXRpb25zIiBwYWdlIGFuZCBjbGljayAiQ29ubmVjdCIgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZWNvbm5lY3QgdG8gdGhlIGNvbXB1dGVyLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gW2ltYWdlX3ByZXR0eW5hbWVdIEltYWdlIENoZWNrcG9pbnQgU3VjY2VlZGVkJydcbicpOworSU5TRVJUIElHTk9SRSBJTlRPIGBtZXNzYWdlcmVzZXRgIChgbmFtZWAsIGB2YWx1ZWApIFZBTFVFUyAoJ3VzZXJtZXNzYWdlfHRpbWVvdXRfbm9fYWNrbm93bGVkZ2VtZW50fEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgWW91ciByZXNlcnZhdGlvbiBoYXMgdGltZWQgb3V0IGZvciBpbWFnZSBbaW1hZ2VfcHJldHR5bmFtZV0gYmVjYXVzZSBubyBpbml0aWFsIGNvbm5lY3Rpb24gd2FzIG1hZGUuXG4gIFxuICBUbyBtYWtlIGFub3RoZXIgcmVzZXJ2YXRpb24sIHBsZWFzZSByZXZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXS5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbiAgXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlXG4gIHBsZWFzZSByZXNwb25kIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlXG4gIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIFJlc2VydmF0aW9uIFRpbWVvdXQnJ1xuJyk7CitJTlNFUlQgSUdOT1JFIElOVE8gYG1lc3NhZ2VyZXNldGAgKGBuYW1lYCwgYHZhbHVlYCkgVkFMVUVTICgndXNlcm1lc3NhZ2V8ZnV0dXJlX2VuZHRpbWV8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3UgaGF2ZSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCB0aGUgc2NoZWR1bGVkIGVuZCB0aW1lIG9mIHlvdXIgcmVzZXJ2YXRpb24gZm9yIGltYWdlIFtpbWFnZV9wcmV0dHluYW1lXS5cbiAgXG4gIFJlc2VydmF0aW9uIGV4dGVuc2lvbnMgYXJlIGF2YWlsYWJsZSBpZiB0aGUgbWFjaGluZSB5b3UgYXJlIG9uIGRvZXMgbm90IGhhdmUgYSByZXNlcnZhdGlvbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcuXG4gIFxuICBUbyBlZGl0IHRoaXMgcmVzZXJ2YXRpb246XG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBDdXJyZW50IFJlc2VydmF0aW9uc1xuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2UgcGxlYXNlIHJlc3BvbmQgXG4gIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgXG4gIGdlbmVyYXRlZC5cbiAgXG4gIFRvIGRpc2FibGUgZW1haWwgbm90aWNlc1xuICAtVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIC1TZWxlY3QgVXNlciBQcmVmZXJlbmNlc1xuICAtU2VsZWN0IEdlbmVyYWwgUHJlZmVyZW5jZXNcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogIllvdSBoYXZlIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIHRoZSBzY2hlZHVsZWQgZW5kIHRpbWUgb2YgeW91ciByZXNlcnZhdGlvbi4gVkNMIFRlYW1cXG4iXG5zdWJqZWN0OiAnJ1ZDTCAtLSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCBlbmQgb2YgcmVzZXJ2YXRpb24gZm9yIFtpbWFnZV9wcmV0dHluYW1lXScnXG4nKTsKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMgKCd1c2VybWVzc2FnZXxlbmR0aW1lX2ltbWluZW50X2ltYWdpbmd8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3UgaGF2ZSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCB0aGUgZW5kIG9mIHlvdXIgcmVzZXJ2YXRpb24gZm9yIGltYWdlIFtpbWFnZV9wcmV0dHluYW1lXS4gXG4gIFxuICBBdCB0aGUgc2NoZWR1bGVkIGVuZCB0aW1lIHlvdXIgaW1hZ2luZyByZXNlcnZhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FwdHVyZWQuIFxuICBcbiAgVG8gcHJldmVudCB0aGlzIGF1dG8gY2FwdHVyZSwgdmlzaXQgdGhlIFZDTCBzaXRlIFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXSBtYW51YWxseSBzdGFydCB0aGUgaW1hZ2UgY3JlYXRpb24gcHJvY2Vzcy5cbiAgXG4gIFBsZWFzZSBub3RlIHRoaXMgYXV0byBjYXB0dXJlIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gcHJldmVudCBkZXN0b3J5aW5nIGFueSB3b3JrIHlvdSBoYXZlIGRvbmUgdG8gdGhlIGltYWdlLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2UgcGxlYXNlIHJlc3BvbmQgXG4gIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgXG4gIGdlbmVyYXRlZC5cbiAgXG4gIFRvIGRpc2FibGUgZW1haWwgbm90aWNlc1xuICAtVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIC1TZWxlY3QgVXNlciBQcmVmZXJlbmNlc1xuICAtU2VsZWN0IEdlbmVyYWwgUHJlZmVyZW5jZXNcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogJydZb3UgaGF2ZSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCB0aGUgYXV0byBjYXB0dXJlIHByb2Nlc3MgaXMgc3RhcnRlZC4nJ1xuc3ViamVjdDogJydWQ0wgSW1hZ2luZyBSZXNlcnZhdGlvbiAtLSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCBzdGFydGluZyBhdXRvIGNhcHR1cmUnJ1xuJyk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIAogLS0gSW5zZXJ0cyBmb3IgdGFibGUgYG1vZHVsZWAKIC0tIAogCmRpZmYgLS1naXQgYS9teXNxbC92Y2wuc3FsIGIvbXlzcWwvdmNsLnNxbAppbmRleCA5NWQ2OGNhLi4xOTc5MzlmIDEwMDY0NAotLS0gYS9teXNxbC92Y2wuc3FsCisrKyBiL215c3FsL3ZjbC5zcWwKQEAgLTMyLDE0ICszMiwxNSBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYGFkZG9tYWluYCAoCiAgIGBpZGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICAgYG93bmVyaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgYG5hbWVgIHZhcmNoYXIoMzApIE5PVCBOVUxMIGRlZmF1bHQgJycsCisgIGBuYW1lYCB2YXJjaGFyKDUxMikgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgYGRvbWFpbkROU05hbWVgIHZhcmNoYXIoNzApIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBkbnNTZXJ2ZXJzYCB2YXJjaGFyKDUxMikgZGVmYXVsdCBOVUxMLAotICBgdXNlcm5hbWVgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsCisgIGB1c2VybmFtZWAgdmFyY2hhcig4MCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgYHBhc3N3b3JkYCB2YXJjaGFyKDI1NikgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgYHNlY3JldGlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKKyAgYHVzZWRiaG9zdG5hbWVzYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBQUklNQVJZIEtFWSAoYGlkYCksCi0gIFVOSVFVRSBLRVkgYGRvbWFpbkROU05hbWVgIChgZG9tYWluRE5TTmFtZWApLAorICBLRVkgYGRvbWFpbkROU05hbWVgIChgZG9tYWluRE5TTmFtZWApLAogICBLRVkgYHNlY3JldGlkYCAoYHNlY3JldGlkYCkKICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCkBAIC01Miw5ICs1Myw5IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgYWRtaW5sZXZlbGAgKAogICBgaWRgIHRpbnlpbnQoMykgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBuYW1lYCB2YXJjaGFyKDEwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzEsNyArNzIsNyBAQAogICBgaGVscGFkZHJlc3NgIHZhcmNoYXIoMzIpIGRlZmF1bHQgTlVMTCwKICAgYHNoaWJvbmx5YCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgdGhlbWVgIHZhcmNoYXIoNTApIGRlZmF1bHQgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQogKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKQEAgLTg2LDcgKzg3LDcgQEAKICAgYGNvbXB1dGVyaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgaW1hZ2VpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGByZWxvYWRyZXF1ZXN0aWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKLSAgUFJJTUFSWSBLRVkgIChgYmxvY2tUaW1laWRgLGBjb21wdXRlcmlkYCksCisgIFBSSU1BUlkgS0VZIChgYmxvY2tUaW1laWRgLGBjb21wdXRlcmlkYCksCiAgIEtFWSBgY29tcHV0ZXJpZGAgKGBjb21wdXRlcmlkYCksCiAgIEtFWSBgaW1hZ2VpZGAgKGBpbWFnZWlkYCkKICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwpAQCAtMTA4LDEzICsxMDksMTMgQEAKICAgYG1hbmFnZW1lbnRub2RlaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKICAgYGV4cGlyZVRpbWVgIGRhdGV0aW1lIE5PVCBOVUxMLAogICBgcHJvY2Vzc2luZ2AgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgYHN0YXR1c2AgZW51bSgncmVxdWVzdGVkJywnYWNjZXB0ZWQnLCdjb21wbGV0ZWQnLCdyZWplY3RlZCcsJ2RlbGV0ZWQnKSBOT1QgTlVMTCBERUZBVUxUICdhY2NlcHRlZCcsCisgIGBzdGF0dXNgIGVudW0oJ3JlcXVlc3RlZCcsJ2FjY2VwdGVkJywnY29tcGxldGVkJywncmVqZWN0ZWQnLCdkZWxldGVkJykgTk9UIE5VTEwgZGVmYXVsdCAnYWNjZXB0ZWQnLAogICBgY29tbWVudHNgIHRleHQsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBpbWFnZWlkYCAoYGltYWdlaWRgKSwKICAgS0VZIGBncm91cGlkYCAoYGdyb3VwaWRgKSwKICAgS0VZIGBvd25lcmlkYCAoYG93bmVyaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyOSwxMSArMTMwLDExIEBACiAgIGBlbmRgIGRhdGV0aW1lIE5PVCBOVUxMLAogICBgcHJvY2Vzc2VkYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgc2tpcGAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBLRVkgYHN0YXJ0YCAoYHN0YXJ0YCksCiAgIEtFWSBgZW5kYCAoYGVuZGApLAogICBLRVkgYGJsb2NrUmVxdWVzdGlkYCAoYGJsb2NrUmVxdWVzdGlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNzcsNyArMTc4LDcgQEAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBjaGFuZ2Vsb2dgICgKICAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbG9naWRgIGludCgxMCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCi0gIGB1c2VyaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBERUZBVUxUIE5VTEwsCisgIGB1c2VyaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCiAgIGByZXNlcnZhdGlvbmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogICBgc3RhcnRgIGRhdGV0aW1lIGRlZmF1bHQgTlVMTCwKICAgYGVuZGAgZGF0ZXRpbWUgZGVmYXVsdCBOVUxMLApAQCAtMTg2LDEzICsxODcsMTMgQEAKICAgYHdhc2F2YWlsYWJsZWAgdGlueWludCgxKSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCiAgIGB0aW1lc3RhbXBgIGRhdGV0aW1lIE5PVCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAogICBgb3RoZXJgIHZhcmNoYXIoMjU1KSBkZWZhdWx0IE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBsb2dpZGAgKGBsb2dpZGApLAogICBLRVkgYHVzZXJpZGAgKGB1c2VyaWRgKSwKICAgS0VZIGByZXNlcnZhdGlvbmlkYCAoYHJlc2VydmF0aW9uaWRgKSwKICAgS0VZIGBjb21wdXRlcmlkYCAoYGNvbXB1dGVyaWRgKSwKLSAgVU5JUVVFIEtFWSByZXNlcnZhdGlvbl91c2VyX3JlbW90ZUlQICh1c2VyaWQscmVzZXJ2YXRpb25pZCxyZW1vdGVJUCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKyAgVU5JUVVFIEtFWSBgcmVzZXJ2YXRpb25fdXNlcl9yZW1vdGVJUGAgKGB1c2VyaWRgLGByZXNlcnZhdGlvbmlkYCxgcmVtb3RlSVBgKQorKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI0MCw3ICsyNDEsNyBAQAogICBgcHJvdmlzaW9uaW5naWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgZHJpdmV0eXBlYCB2YXJjaGFyKDQpIE5PVCBOVUxMIGRlZmF1bHQgJ2hkYScsCiAgIGBkZWxldGVkYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAotICBgZGF0ZWRlbGV0ZWRgIERBVEVUSU1FIE5PVCBOVUxMIERFRkFVTFQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAorICBgZGF0ZWRlbGV0ZWRgIGRhdGV0aW1lIE5PVCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAogICBgbm90ZXNgIHRleHQsCiAgIGBsYXN0Y2hlY2tgIGRhdGV0aW1lIGRlZmF1bHQgTlVMTCwKICAgYGxvY2F0aW9uYCB2YXJjaGFyKDI1NSkgZGVmYXVsdCBOVUxMLApAQCAtMjUyLDEwICsyNTMsMTAgQEAKICAgYGhvc3RwdWJgIG1lZGl1bXRleHQsCiAgIGB2bXR5cGVpZGAgdGlueWludCgzKSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCiAgIGBwcmVkaWN0aXZlbW9kdWxlaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzknLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAotICBVTklRVUUgS0VZIGBob3N0bmFtZWAgKGBob3N0bmFtZWAsIGBkYXRlZGVsZXRlZGApLAotICBVTklRVUUgS0VZIGBldGgxbWFjYWRkcmVzc2AgKGBldGgxbWFjYWRkcmVzc2AsIGBkYXRlZGVsZXRlZGApLAotICBVTklRVUUgS0VZIGBldGgwbWFjYWRkcmVzc2AgKGBldGgwbWFjYWRkcmVzc2AsIGBkYXRlZGVsZXRlZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCisgIFVOSVFVRSBLRVkgYGhvc3RuYW1lYCAoYGhvc3RuYW1lYCxgZGF0ZWRlbGV0ZWRgKSwKKyAgVU5JUVVFIEtFWSBgZXRoMW1hY2FkZHJlc3NgIChgZXRoMW1hY2FkZHJlc3NgLGBkYXRlZGVsZXRlZGApLAorICBVTklRVUUgS0VZIGBldGgwbWFjYWRkcmVzc2AgKGBldGgwbWFjYWRkcmVzc2AsYGRhdGVkZWxldGVkYCksCiAgIEtFWSBgb3duZXJpZGAgKGBvd25lcmlkYCksCiAgIEtFWSBgc3RhdGVpZGAgKGBzdGF0ZWlkYCksCiAgIEtFWSBgcGxhdGZvcm1pZGAgKGBwbGF0Zm9ybWlkYCksCkBAIC0yNjksNyArMjcwLDcgQEAKICAgS0VZIGBuZXh0aW1hZ2VpZGAgKGBuZXh0aW1hZ2VpZGApLAogICBLRVkgYHByb3Zpc2lvbmluZ2lkYCAoYHByb3Zpc2lvbmluZ2lkYCksCiAgIEtFWSBgaW1hZ2VyZXZpc2lvbmlkYCAoYGltYWdlcmV2aXNpb25pZGApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjkzLDE3ICsyOTQsMTcgQEAKIC0tIAogCiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgY29tcHV0ZXJsb2FkbG9nYCAoCi0gIGBpZGAgaW50KDEyKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKKyAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgcmVzZXJ2YXRpb25pZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgY29tcHV0ZXJpZGAgc21hbGxpbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwsCiAgIGBsb2Fkc3RhdGVpZGAgc21hbGxpbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwsCiAgIGB0aW1lc3RhbXBgIGRhdGV0aW1lIGRlZmF1bHQgTlVMTCwKICAgYGFkZGl0aW9uYWxpbmZvYCB0ZXh0LAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIEtFWSBgcmVzZXJ2YXRpb25pZGAgKGByZXNlcnZhdGlvbmlkYCksCiAgIEtFWSBgbG9hZHN0YXRlaWRgIChgbG9hZHN0YXRlaWRgKSwKICAgS0VZIGBjb21wdXRlcmlkYCAoYGNvbXB1dGVyaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTMxNiw5ICszMTcsOSBAQAogICBgbG9hZHN0YXRlbmFtZWAgdmFyY2hhcigyNCkgTk9UIE5VTEwsCiAgIGBwcmV0dHluYW1lYCB2YXJjaGFyKDUwKSBkZWZhdWx0IE5VTEwsCiAgIGBlc3RgIHRpbnlpbnQoMikgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYGxvYWRzdGF0ZW5hbWVgIChgbG9hZHN0YXRlbmFtZWApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzI2LDIwICszMjcsMjAgQEAKIC0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdGFibGUgJ2Nvbm5lY3Rsb2cnCiAtLQogCi1DUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjb25uZWN0bG9nICgKLSAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAorQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYGNvbm5lY3Rsb2dgICgKKyAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbG9naWRgIGludCgxMCkgdW5zaWduZWQgTk9UIE5VTEwsCiAgIGByZXNlcnZhdGlvbmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwsCi0gIGB1c2VyaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBERUZBVUxUIE5VTEwsCisgIGB1c2VyaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCiAgIGByZW1vdGVJUGAgdmFyY2hhcigzOSkgTk9UIE5VTEwsCiAgIGB2ZXJpZmllZGAgdGlueWludCgxKSBOT1QgTlVMTCwKLSAgYHRpbWVzdGFtcGAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVMVCAnMDAwMC0wMC0wMCAwMDowMDowMCcsCi0gIFBSSU1BUlkgS0VZIChpZCksCi0gIFVOSVFVRSBLRVkgcmVzZXJ2YXRpb25pZF8xIChyZXNlcnZhdGlvbmlkLHVzZXJpZCxyZW1vdGVJUCksCi0gIEtFWSByZXNlcnZhdGlvbmlkIChyZXNlcnZhdGlvbmlkKSwKLSAgS0VZIHVzZXJpZCAodXNlcmlkKSwKLSAgS0VZIGxvZ2lkIChsb2dpZCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKyAgYHRpbWVzdGFtcGAgZGF0ZXRpbWUgTk9UIE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDowMCcsCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKKyAgVU5JUVVFIEtFWSBgcmVzZXJ2YXRpb25pZF8xYCAoYHJlc2VydmF0aW9uaWRgLGB1c2VyaWRgLGByZW1vdGVJUGApLAorICBLRVkgYHJlc2VydmF0aW9uaWRgIChgcmVzZXJ2YXRpb25pZGApLAorICBLRVkgYHVzZXJpZGAgKGB1c2VyaWRgKSwKKyAgS0VZIGBsb2dpZGAgKGBsb2dpZGApCispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzUzLDEwICszNTQsMTAgQEAKICAgYGRlc2NyaXB0aW9uYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCiAgIGBjb25uZWN0dGV4dGAgdGV4dCBOT1QgTlVMTCwKICAgYHNlcnZpY2VuYW1lYCB2YXJjaGFyKDMyKSBOT1QgTlVMTCwKLSAgYHN0YXJ0dXBzY3JpcHRgIHZhcmNoYXIoMjU2KSBERUZBVUxUIE5VTEwsCisgIGBzdGFydHVwc2NyaXB0YCB2YXJjaGFyKDI1NikgZGVmYXVsdCBOVUxMLAogICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWAsYGRlc2NyaXB0aW9uYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0zODgsMTAgKzM4OSwxMCBAQAogICBgY29ubmVjdG1ldGhvZGlkYCB0aW55aW50KDMpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgcG9ydGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgcHJvdG9jb2xgIGVudW0oJ1RDUCcsJ1VEUCcpIE5PVCBOVUxMIGRlZmF1bHQgJ1RDUCcsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgY29ubmVjdG1ldGhvZGlkX3BvcnRfcHJvdG9jb2xgIChgY29ubmVjdG1ldGhvZGlkYCxgcG9ydGAsYHByb3RvY29sYCksCiAgIEtFWSBgY29ubmVjdG1ldGhvZGlkYCAoYGNvbm5lY3RtZXRob2RpZGApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDA5LDcgKzQxMCw3IEBACiAgIGBtdWx0aWNhbGxgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMScsCiAgIGBwYXJlbnRpZGAgdmFyY2hhcigyNTUpIGRlZmF1bHQgTlVMTCwKICAgYGRlbGV0ZWZyb21pZGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBwYXJlbnRpZGAgKGBwYXJlbnRpZGApLAogICBLRVkgYHVzZXJpZGAgKGB1c2VyaWRgKSwKICAgS0VZIGBleHBpcmV0aW1lYCAoYGV4cGlyZXRpbWVgKSwKQEAgLTQyMyw5ICs0MjQsOSBAQAogLS0gCiAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBjcnlwdGtleWAgKAotICBgaWRgIHNtYWxsaW50KDYpIHVuc2lnbmVkIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAorICBgaWRgIHNtYWxsaW50KDYpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgaG9zdGlkYCBzbWFsbGludCg2KSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgYGhvc3R0eXBlYCBlbnVtKCdtYW5hZ2VtZW50bm9kZScsJ3dlYicpIE5PVCBOVUxMIERFRkFVTFQgJ21hbmFnZW1lbnRub2RlJywKKyAgYGhvc3R0eXBlYCBlbnVtKCdtYW5hZ2VtZW50bm9kZScsJ3dlYicpIE5PVCBOVUxMIGRlZmF1bHQgJ21hbmFnZW1lbnRub2RlJywKICAgYHB1YmtleWAgdmFyY2hhcigxMDAwKSBOT1QgTlVMTCwKICAgYGFsZ29yaXRobWAgdmFyY2hhcig4MCkgTk9UIE5VTEwsCiAgIGBhbGdvcml0aG1vcHRpb25gIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwKQEAgLTQ0MSw3ICs0NDIsNyBAQAogLS0gCiAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBjcnlwdHNlY3JldGAgKAotICBgaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKKyAgYGlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBjcnlwdGtleWlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYHNlY3JldGlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYGNyeXB0c2VjcmV0YCB2YXJjaGFyKDEwMDApIE5PVCBOVUxMLApAQCAtNDkxLDE0ICs0OTIsMTQgQEAKICAgYHRlc3RgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBsYXN0dXBkYXRlYCBkYXRldGltZSBkZWZhdWx0IE5VTEwsCiAgIGBmb3JjaGVja291dGAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxJywKLSAgYG1heGluaXRpYWx0aW1lYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKKyAgYG1heGluaXRpYWx0aW1lYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBwcm9qZWN0YCBlbnVtKCd2Y2wnLCdocGMnLCd2Y2xocGMnKSBOT1QgTlVMTCBkZWZhdWx0ICd2Y2wnLAogICBgc2l6ZWAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBhcmNoaXRlY3R1cmVgIGVudW0oJ3g4NicsJ3g4Nl82NCcpIE5PVCBOVUxMIGRlZmF1bHQgJ3g4NicsCiAgIGBkZXNjcmlwdGlvbmAgdGV4dCwKICAgYHVzYWdlYCB0ZXh0LAogICBgYmFzZWRvZmZyZXZpc2lvbmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApLAogICBVTklRVUUgS0VZIGBwcmV0dHluYW1lYCAoYHByZXR0eW5hbWVgKSwKICAgS0VZIGBvd25lcmlkYCAoYG93bmVyaWRgKSwKQEAgLTUwNyw3ICs1MDgsNyBAQAogICBLRVkgYGltYWdlbWV0YWlkYCAoYGltYWdlbWV0YWlkYCksCiAgIEtFWSBgaW1hZ2V0eXBlaWRgIChgaW1hZ2V0eXBlaWRgKSwKICAgS0VZIGBiYXNlZG9mZnJldmlzaW9uaWRgIChgYmFzZWRvZmZyZXZpc2lvbmlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01MzcsOCArNTM4LDggQEAKICAgYGFyY2hpdGVjdHVyZWAgdmFyY2hhcigxMCkgZGVmYXVsdCBOVUxMLAogICBgcm9vdGFjY2Vzc2AgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxJywKICAgYHNldGhvc3RuYW1lYCB0aW55aW50KDEpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworICBQUklNQVJZIEtFWSAoYGlkYCkKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01NTcsMTIgKzU1OCwxMiBAQAogICBgcHJvZHVjdGlvbmAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYGNvbW1lbnRzYCB0ZXh0LAogICBgaW1hZ2VuYW1lYCB2YXJjaGFyKDc1KSBOT1QgTlVMTCwKLSAgYGF1dG9jYXB0dXJlZGAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUICcwJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgYGF1dG9jYXB0dXJlZGAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBwcm9kdWN0aW9uYCAoYHByb2R1Y3Rpb25gLGBpbWFnZW5hbWVgKSwKICAgVU5JUVVFIEtFWSBgaW1hZ2VpZGAgKGBpbWFnZWlkYCxgcmV2aXNpb25gKSwKICAgS0VZIGB1c2VyaWRgIChgdXNlcmlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01NzIsNyArNTczLDcgQEAKIAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYGltYWdlcmV2aXNpb25pbmZvYCAoCiAgIGBpbWFnZXJldmlzaW9uaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgYHVzZXJuYW1lc2AgdmFyY2hhcig1MTIpIERFRkFVTFQgTlVMTCwKKyAgYHVzZXJuYW1lc2AgdmFyY2hhcig1MTIpIGRlZmF1bHQgTlVMTCwKICAgYGZpcmV3YWxsZW5hYmxlZGAgdmFyY2hhcigyMCkgTk9UIE5VTEwsCiAgIGB0aW1lc3RhbXBgIGRhdGV0aW1lIE5PVCBOVUxMLAogICBVTklRVUUgS0VZIGBpbWFnZXJldmlzaW9uaWRgIChgaW1hZ2VyZXZpc2lvbmlkYCkKQEAgLTU4Nyw5ICs1ODgsOSBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYGltYWdldHlwZWAgKAogICBgaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbmFtZWAgdmFyY2hhcigxNikgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MDAsOSArNjAxLDkgQEAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBJTXR5cGVgICgKICAgYGlkYCB0aW55aW50KDMpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbmFtZWAgdmFyY2hhcigyMCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYxNiw3ICs2MTcsNyBAQAogICBgc2FsdGAgdmFyY2hhcig4KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogICBgbGFzdHVwZGF0ZWRgIGRhdGV0aW1lIE5PVCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAogICBgbG9ja2Vkb3V0YCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAotICBQUklNQVJZIEtFWSAgKGB1c2VyaWRgKQorICBQUklNQVJZIEtFWSAoYHVzZXJpZGApCiApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY0MCwxNCArNjQxLDE0IEBACiAgIGByZW1vdGVJUGAgdmFyY2hhcigxNSkgZGVmYXVsdCBOVUxMLAogICBgaW1hZ2VpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBzaXplYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxNDUwJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBLRVkgYHVzZXJpZGAgKGB1c2VyaWRgKSwKICAgS0VZIGBjb21wdXRlcmlkYCAoYGNvbXB1dGVyaWRgKSwKICAgS0VZIGBpbWFnZWlkYCAoYGltYWdlaWRgKSwKICAgS0VZIGBmaW5hbGVuZGAgKGBmaW5hbGVuZGApLAogICBLRVkgYHN0YXJ0YCAoYHN0YXJ0YCksCiAgIEtFWSBgd2FzYXZhaWxhYmxlYCAoYHdhc2F2YWlsYWJsZWApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjYyLDcgKzY2Myw3IEBACiAgIGB0aW1lc3RhbXBgIHRpbWVzdGFtcCBOT1QgTlVMTCBkZWZhdWx0IENVUlJFTlRfVElNRVNUQU1QLAogICBgcGFzc2ZhaWxgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGByZW1vdGVJUGAgdmFyY2hhcigxNSkgTk9UIE5VTEwsCi0gIGBjb2RlYCBlbnVtKCdub25lJywnaW52YWxpZCBjcmVkZW50aWFscycpIE5PVCBOVUxMIERFRkFVTFQgJ25vbmUnLAorICBgY29kZWAgZW51bSgnbm9uZScsJ2ludmFsaWQgY3JlZGVudGlhbHMnKSBOT1QgTlVMTCBkZWZhdWx0ICdub25lJywKICAgS0VZIGB1c2VyYCAoYHVzZXJgKSwKICAgS0VZIGBhZmZpbGlhdGlvbmlkYCAoYGFmZmlsaWF0aW9uaWRgKSwKICAgS0VZIGB0aW1lc3RhbXBgIChgdGltZXN0YW1wYCksCkBAIC02ODIsNyArNjgzLDcgQEAKICAgYGhvc3RuYW1lYCB2YXJjaGFyKDUwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogICBgb3duZXJpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzEnLAogICBgc3RhdGVpZGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKLSAgYGxhc3RjaGVja2luYCBkYXRldGltZSBkZWZhdWx0IE5VTEwsCisgIGBsYXN0Y2hlY2tpbmAgdGltZXN0YW1wIGRlZmF1bHQgMCwKICAgYGNoZWNraW5pbnRlcnZhbGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxMicsCiAgIGBpbnN0YWxscGF0aGAgdmFyY2hhcigxMDApIE5PVCBOVUxMIGRlZmF1bHQgJy9pbnN0YWxsJywKICAgYGltYWdlbGliZW5hYmxlYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLApAQCAtNjk5LDEzICs3MDAsMjUgQEAKICAgYHNoYXJlZE1haWxCb3hgIHZhcmNoYXIoMTI4KSBkZWZhdWx0IE5VTEwsCiAgIGBOT1RfU1RBTkRBTE9ORWAgdmFyY2hhcigxMjgpIGRlZmF1bHQgTlVMTCwKICAgYGF2YWlsYWJsZW5ldHdvcmtzYCB0ZXh0IE5PVCBOVUxMLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYGhvc3RuYW1lYCAoYGhvc3RuYW1lYCksCiAgIEtFWSBgc3RhdGVpZGAgKGBzdGF0ZWlkYCksCiAgIEtFWSBgb3duZXJpZGAgKGBvd25lcmlkYCksCiAgIEtFWSBgaW1hZ2VsaWJncm91cGlkYCAoYGltYWdlbGliZ3JvdXBpZGApLAogICBLRVkgYElQYWRkcmVzc2AgKGBJUGFkZHJlc3NgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIAorLS0gVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgbWVzc2FnZXJlc2V0YAorLS0gCisKK0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBtZXNzYWdlcmVzZXRgICgKKyAgYG5hbWVgIHZhcmNoYXIoMTI4KSBOT1QgTlVMTCwKKyAgYHZhbHVlYCBsb25ndGV4dCBOT1QgTlVMTCwKKyAgUFJJTUFSWSBLRVkgKGBuYW1lYCkKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MTksOSArNzMyLDkgQEAKICAgYHByZXR0eW5hbWVgIHZhcmNoYXIoNzApIE5PVCBOVUxMLAogICBgZGVzY3JpcHRpb25gIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwKICAgYHBlcmxwYWNrYWdlYCB2YXJjaGFyKDE1MCkgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MzMsMTAgKzc0NiwxMCBAQAogICBgaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgcmVzb3VyY2VpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgcHVibGljSVBhZGRyZXNzYCB2YXJjaGFyKDE1KSBOT1QgTlVMTCwKLSAgYGludGVybmFsSVBhZGRyZXNzYCB2YXJjaGFyKDE1KSBERUZBVUxUIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIGBpbnRlcm5hbElQYWRkcmVzc2AgdmFyY2hhcigxNSkgZGVmYXVsdCBOVUxMLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYHJlc291cmNlaWRgIChgcmVzb3VyY2VpZGApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzQ5LDkgKzc2Miw5IEBACiAgIGBuYXRob3N0cmVzb3VyY2VpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgcHVibGljSVBhZGRyZXNzYCB2YXJjaGFyKDE1KSBOT1QgTlVMTCwKICAgYHB1YmxpY3BvcnRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMLAotICBgaW50ZXJuYWxJUGFkZHJlc3NgIHZhcmNoYXIoMTUpIERFRkFVTFQgTlVMTCwKKyAgYGludGVybmFsSVBhZGRyZXNzYCB2YXJjaGFyKDE1KSBkZWZhdWx0IE5VTEwsCiAgIGBpbnRlcm5hbHBvcnRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMLAotICBgcHJvdG9jb2xgIGVudW0oJ1RDUCcsJ1VEUCcpIE5PVCBOVUxMIERFRkFVTFQgJ1RDUCcsCisgIGBwcm90b2NvbGAgZW51bSgnVENQJywnVURQJykgTk9UIE5VTEwgZGVmYXVsdCAnVENQJywKICAgYHRpbWVzdGFtcGAgZGF0ZXRpbWUgTk9UIE5VTEwsCiAgIFVOSVFVRSBLRVkgYHN1YmxvZ2lkYCAoYHN1YmxvZ2lkYCxgbmF0aG9zdHJlc291cmNlaWRgLGBwdWJsaWNJUGFkZHJlc3NgLGBwdWJsaWNwb3J0YCxgaW50ZXJuYWxJUGFkZHJlc3NgLGBpbnRlcm5hbHBvcnRgLGBwcm90b2NvbGApLAogICBLRVkgYGxvZ2lkYCAoYHN1YmxvZ2lkYCksCkBAIC03OTYsMTMgKzgwOSwxMyBAQAogLS0KIAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYG9uZWNsaWNrYCAoCi0gIGBpZGAgaW50KDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKKyAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgdXNlcmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwsCiAgIGBpbWFnZWlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYG5hbWVgIHZhcmNoYXIoNzApIE5PVCBOVUxMLAogICBgZHVyYXRpb25gIGludCgxMSkgTk9UIE5VTEwsCi0gIGBhdXRvbG9naW5gIHRpbnlpbnQoMSkgTk9UIE5VTEwgREVGQVVMVCAnMCcsCi0gIGBzdGF0dXNgIHRpbnlpbnQoNCkgTk9UIE5VTEwgREVGQVVMVCAnMScsCisgIGBhdXRvbG9naW5gIHRpbnlpbnQoMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCisgIGBzdGF0dXNgIHRpbnlpbnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAnMScsCiAgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGB1c2VyaWRgIChgdXNlcmlkYCksCiAgIEtFWSBgaW1hZ2VpZGAgKGBpbWFnZWlkYCkKQEAgLTgxNiw3ICs4MjksNyBAQAogCiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgb3BlbnN0YWNrY29tcHV0ZXJtYXBgICgKICAgYGluc3RhbmNlaWRgIHZhcmNoYXIoNTApIE5PVCBOVUxMLAotICBgY29tcHV0ZXJpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgREVGQVVMVCBOVUxMLAorICBgY29tcHV0ZXJpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogICBQUklNQVJZIEtFWSAoYGluc3RhbmNlaWRgKSwKICAgVU5JUVVFIEtFWSBgY29tcHV0ZXJpZGAgKGBjb21wdXRlcmlkYCkKICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwpAQCAtODQ2LDE2ICs4NTksMTYgQEAKICAgYHByZXR0eW5hbWVgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGB0eXBlYCB2YXJjaGFyKDMwKSBOT1QgTlVMTCwKICAgYGluc3RhbGx0eXBlYCB2YXJjaGFyKDMwKSBOT1QgTlVMTCBkZWZhdWx0ICdpbWFnZScsCi0gIGBtaW5yYW1gIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUICc1MTInLAorICBgbWlucmFtYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnNTEyJywKICAgYHNvdXJjZXBhdGhgIHZhcmNoYXIoMzApIGRlZmF1bHQgTlVMTCwKICAgYG1vZHVsZWlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCksCiAgIFVOSVFVRSBLRVkgYHByZXR0eW5hbWVgIChgcHJldHR5bmFtZWApLAogICBLRVkgYHR5cGVgIChgdHlwZWApLAogICBLRVkgYGluc3RhbGx0eXBlYCAoYGluc3RhbGx0eXBlYCksCiAgIEtFWSBgbW9kdWxlaWRgIChgbW9kdWxlaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTg2Niw5ICs4NzksOSBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYE9TaW5zdGFsbHR5cGVgICgKICAgYGlkYCB0aW55aW50KDMpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbmFtZWAgdmFyY2hhcigzMCkgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC04NzksOSArODkyLDkgQEAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBPU3R5cGVgICgKICAgYGlkYCB0aW55aW50KDMpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbmFtZWAgdmFyY2hhcigzMCkgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC04OTIsOSArOTA1LDkgQEAKIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBwbGF0Zm9ybWAgKAogICBgaWRgIHRpbnlpbnQoMykgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBuYW1lYCB2YXJjaGFyKDIwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtOTA2LDkgKzkxOSw5IEBACiAgIGBpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgcGFyZW50YCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBuYW1lYCB2YXJjaGFyKDUwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYHBhcmVudGAgKGBwYXJlbnRgLGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMSBDT01NRU5UPSdub2RlcyBmb3IgcHJpdmlsZWdlIHRyZWUnOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjEgQ09NTUVOVD0nbm9kZXMgZm9yIHByaXZpbGVnZSB0cmVlJzsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtOTIxLDEwICs5MzQsMTAgQEAKICAgYG5hbWVgIHZhcmNoYXIoMzApIE5PVCBOVUxMLAogICBgcHJldHR5bmFtZWAgdmFyY2hhcig3MCkgTk9UIE5VTEwsCiAgIGBtb2R1bGVpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBtb2R1bGVpZGAgKGBtb2R1bGVpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTkzNSw5ICs5NDgsOSBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYHByb3Zpc2lvbmluZ09TaW5zdGFsbHR5cGVgICgKICAgYHByb3Zpc2lvbmluZ2lkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYE9TaW5zdGFsbHR5cGVpZGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgcHJvdmlzaW9uaW5naWRgLGBPU2luc3RhbGx0eXBlaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBwcm92aXNpb25pbmdpZGAsYE9TaW5zdGFsbHR5cGVpZGApLAogICBLRVkgYE9TaW5zdGFsbHR5cGVpZGAgKGBPU2luc3RhbGx0eXBlaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTk3MywxNCArOTg2LDE0IEBACiAgIGBkYXRlcmVxdWVzdGVkYCBkYXRldGltZSBOT1QgTlVMTCBkZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKICAgYGRhdGVtb2RpZmllZGAgZGF0ZXRpbWUgZGVmYXVsdCBOVUxMLAogICBgY2hlY2t1c2VyYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzEnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIEtFWSBgdXNlcmlkYCAoYHVzZXJpZGApLAogICBLRVkgYHN0YXRlaWRgIChgc3RhdGVpZGApLAogICBLRVkgYGxhc3RzdGF0ZWlkYCAoYGxhc3RzdGF0ZWlkYCksCiAgIEtFWSBgbG9naWRgIChgbG9naWRgKSwKICAgS0VZIGBzdGFydGAgKGBzdGFydGApLAogICBLRVkgYGVuZGAgKGBlbmRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwMDAsMTMgKzEwMTMsMTMgQEAKICAgYHB3YCB2YXJjaGFyKDQwKSBkZWZhdWx0IE5VTEwsCiAgIGBjb25uZWN0SVBgIHZhcmNoYXIoMTUpIGRlZmF1bHQgTlVMTCwKICAgYGNvbm5lY3Rwb3J0YCBzbWFsbGludCg1KSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBtYW5hZ2VtZW50bm9kZWlkYCAoYG1hbmFnZW1lbnRub2RlaWRgKSwKICAgS0VZIGBpbWFnZWlkYCAoYGltYWdlaWRgKSwKICAgS0VZIGByZXF1ZXN0aWRgIChgcmVxdWVzdGlkYCksCiAgIEtFWSBgY29tcHV0ZXJpZGAgKGBjb21wdXRlcmlkYCksCiAgIEtFWSBgaW1hZ2VyZXZpc2lvbmlkYCAoYGltYWdlcmV2aXNpb25pZGApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzMiw5ICsxMDQ1LDkgQEAKICAgYGlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGByZXNvdXJjZXR5cGVpZGAgdGlueWludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICAgYHN1YmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgcmVzb3VyY2V0eXBlaWRgIChgcmVzb3VyY2V0eXBlaWRgLGBzdWJpZGApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTA0NCwxMyArMTA1NywxMyBAQAogCiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgcmVzb3VyY2Vncm91cGAgKAogICBgaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAotICBgbmFtZWAgdmFyY2hhcig1MCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKKyAgYG5hbWVgIHZhcmNoYXIoNjApIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBvd25lcnVzZXJncm91cGlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICczOScsCiAgIGByZXNvdXJjZXR5cGVpZGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGByZXNvdXJjZXR5cGVpZGAgKGByZXNvdXJjZXR5cGVpZGAsYG5hbWVgKSwKICAgS0VZIGBvd25lcnVzZXJncm91cGlkYCAoYG93bmVydXNlcmdyb3VwaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwNjEsNyArMTA3NCw3IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgcmVzb3VyY2Vncm91cG1lbWJlcnNgICgKICAgYHJlc291cmNlaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICAgYHJlc291cmNlZ3JvdXBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCi0gIFBSSU1BUlkgS0VZICAoYHJlc291cmNlaWRgLGByZXNvdXJjZWdyb3VwaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGByZXNvdXJjZWlkYCxgcmVzb3VyY2Vncm91cGlkYCksCiAgIEtFWSBgcmVzb3VyY2Vncm91cGlkYCAoYHJlc291cmNlZ3JvdXBpZGApCiApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIApAQCAtMTA3Niw3ICsxMDg5LDcgQEAKICAgYHJlc291cmNldHlwZWlkMWAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxMycsCiAgIGByZXNvdXJjZWdyb3VwaWQyYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICAgYHJlc291cmNldHlwZWlkMmAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxMicsCi0gIFBSSU1BUlkgS0VZICAoYHJlc291cmNlZ3JvdXBpZDFgLGByZXNvdXJjZWdyb3VwaWQyYCksCisgIFBSSU1BUlkgS0VZIChgcmVzb3VyY2Vncm91cGlkMWAsYHJlc291cmNlZ3JvdXBpZDJgKSwKICAgS0VZIGByZXNvdXJjZXR5cGVpZDFgIChgcmVzb3VyY2V0eXBlaWQxYCksCiAgIEtFWSBgcmVzb3VyY2V0eXBlaWQyYCAoYHJlc291cmNldHlwZWlkMmApLAogICBLRVkgYHJlc291cmNlZ3JvdXBpZDJgIChgcmVzb3VyY2Vncm91cGlkMmApCkBAIC0xMDkzLDEwICsxMTA2LDEwIEBACiAgIGByZXNvdXJjZWdyb3VwaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgcHJpdm5vZGVpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgdHlwZWAgZW51bSgnYmxvY2snLCdjYXNjYWRlJywnYXZhaWxhYmxlJywnYWRtaW5pc3RlcicsJ21hbmFnZUdyb3VwJywnbWFuYWdlTWFwcGluZycpIE5PVCBOVUxMIGRlZmF1bHQgJ2Jsb2NrJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGByZXNvdXJjZWdyb3VwaWRgIChgcmVzb3VyY2Vncm91cGlkYCxgcHJpdm5vZGVpZGAsYHR5cGVgKSwKICAgS0VZIGBwcml2bm9kZWlkYCAoYHByaXZub2RlaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExMDcsOSArMTEyMCw5IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgcmVzb3VyY2V0eXBlYCAoCiAgIGBpZGAgdGlueWludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICAgYG5hbWVgIHZhcmNoYXIoNTApIE5PVCBOVUxMIGRlZmF1bHQgJycsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTIxLDEwICsxMTM0LDEwIEBACiAgIGBpZGAgdGlueWludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICAgYG5hbWVgIHZhcmNoYXIoMjUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgIGBvd25lcmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMScsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCksCiAgIEtFWSBgb3duZXJpZGAgKGBvd25lcmlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTUwLDcgKzExNjMsNyBAQAogICBgaW1hZ2VpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgIGBpbWFnZXJldmlzaW9uaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYG1hbmFnZW1lbnRub2RlaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMLAotICBgZXhwaXJlc2AgdGltZXN0YW1wIE5PVCBOVUxMIGRlZmF1bHQgQ1VSUkVOVF9USU1FU1RBTVAgb24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QLAorICBgZXhwaXJlc2AgdGltZXN0YW1wIE5PVCBOVUxMIGRlZmF1bHQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogICBgcHJvY2lkYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCiAgIEtFWSBgY29tcHV0ZXJpZGAgKGBjb21wdXRlcmlkYCksCiAgIEtFWSBgaW1hZ2VpZGAgKGBpbWFnZWlkYCksCkBAIC0xMTc4LDEzICsxMTkxLDEzIEBACiAgIGBhZG1pbmdyb3VwaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKICAgYGxvZ2luZ3JvdXBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogICBgbW9uaXRvcmVkYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIEtFWSBgb3duZXJpZGAgKGBvd25lcmlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApLAogICBLRVkgYGFkbWluZ3JvdXBpZGAgKGBhZG1pbmdyb3VwaWRgKSwKICAgS0VZIGBsb2dpbmdyb3VwaWRgIChgbG9naW5ncm91cGlkYCksCiAgIEtFWSBgaW1hZ2VpZGAgKGBpbWFnZWlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjAyLDEyICsxMjE1LDEyIEBACiAgIGBhZG1pbmdyb3VwaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKICAgYGxvZ2luZ3JvdXBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogICBgbW9uaXRvcmVkYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYHJlcXVlc3RpZGAgKGByZXF1ZXN0aWRgKSwKICAgS0VZIGBhZG1pbmdyb3VwaWRgIChgYWRtaW5ncm91cGlkYCksCiAgIEtFWSBgbG9naW5ncm91cGlkYCAoYGxvZ2luZ3JvdXBpZGApLAogICBLRVkgYHNlcnZlcnByb2ZpbGVpZGAgKGBzZXJ2ZXJwcm9maWxlaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyMjEsOCArMTIzNCw4IEBACiAgIGB0c2AgZGF0ZXRpbWUgTk9UIE5VTEwsCiAgIGBzZXNzaWRgIHZhcmNoYXIoODApIE5PVCBOVUxMLAogICBgZGF0YWAgdGV4dCBOT1QgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworICBQUklNQVJZIEtFWSAoYGlkYCkKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjQwLDExICsxMjUzLDExIEBACiAgIGB1c2VybWVzc2FnZWAgdGV4dCBOT1QgTlVMTCwKICAgYGluZm9ybWhvdXJzYWhlYWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgYWxsb3dyZXNlcnZhdGlvbnNgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgS0VZIGBzdGFydGAgKGBzdGFydGApLAogICBLRVkgYGVuZGAgKGBlbmRgKSwKICAgS0VZIGBvd25lcmlkYCAoYG93bmVyaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNTUsOSArMTI2OCw5IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgc3RhdGVgICgKICAgYGlkYCB0aW55aW50KDMpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogICBgbmFtZWAgdmFyY2hhcigyMCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyOTcsNyArMTMxMCw3IEBACiAtLSAKIAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYHN1YmxvZ2AgKAotICBgaWRgIGludCgxMCkgdW5zaWduZWQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCisgIGBpZGAgaW50KDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICAgYGxvZ2lkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogICBgaW1hZ2VpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBpbWFnZXJldmlzaW9uaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCwKQEAgLTEzNTIsMTIgKzEzNjUsMTIgQEAKICAgYHZhbGlkYXRlZGAgdGlueWludCgxKSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcxJywKICAgYHVzZXB1YmxpY2tleXNgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBzc2hwdWJsaWNrZXlzYCB0ZXh0LAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYHVuaXR5aWRgIChgdW5pdHlpZGAsYGFmZmlsaWF0aW9uaWRgKSwKICAgVU5JUVVFIEtFWSBgdWlkYCAoYHVpZGApLAogICBLRVkgYElNdHlwZWlkYCAoYElNdHlwZWlkYCksCiAgIEtFWSBgYWZmaWxpYXRpb25pZGAgKGBhZmZpbGlhdGlvbmlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzc3LDEyICsxMzkwLDEyIEBACiAgIGB0b3RhbG1heHRpbWVgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICczNjAnLAogICBgbWF4ZXh0ZW5kdGltZWAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzYwJywKICAgYG92ZXJsYXBSZXNDb3VudGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIFBSSU1BUlkgS0VZIChgaWRgKSwKICAgVU5JUVVFIEtFWSBgbmFtZWAgKGBuYW1lYCxgYWZmaWxpYXRpb25pZGApLAogICBLRVkgYG93bmVyaWRgIChgb3duZXJpZGApLAogICBLRVkgYGVkaXR1c2VyZ3JvdXBpZGAgKGBlZGl0dXNlcmdyb3VwaWRgKSwKICAgS0VZIGBhZmZpbGlhdGlvbmlkYCAoYGFmZmlsaWF0aW9uaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEzOTMsNyArMTQwNiw3IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgdXNlcmdyb3VwbWVtYmVyc2AgKAogICBgdXNlcmlkYCBtZWRpdW1pbnQoOCkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGB1c2VyZ3JvdXBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCi0gIFBSSU1BUlkgS0VZICAoYHVzZXJpZGAsYHVzZXJncm91cGlkYCksCisgIFBSSU1BUlkgS0VZIChgdXNlcmlkYCxgdXNlcmdyb3VwaWRgKSwKICAgS0VZIGB1c2VyZ3JvdXBpZGAgKGB1c2VyZ3JvdXBpZGApCiApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIApAQCAtMTQzNSwxMiArMTQ0OCwxMiBAQAogICBgdXNlcmdyb3VwaWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKICAgYHByaXZub2RlaWRgIG1lZGl1bWludCg4KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICAgYHVzZXJwcml2dHlwZWlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcwJywKLSAgUFJJTUFSWSBLRVkgIChgaWRgLGBwcml2bm9kZWlkYCxgdXNlcnByaXZ0eXBlaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGAsYHByaXZub2RlaWRgLGB1c2VycHJpdnR5cGVpZGApLAogICBVTklRVUUgS0VZIGB1c2VyaWRgIChgdXNlcmlkYCxgcHJpdm5vZGVpZGAsYHVzZXJwcml2dHlwZWlkYCksCiAgIFVOSVFVRSBLRVkgYHVzZXJncm91cGlkYCAoYHVzZXJncm91cGlkYCxgcHJpdm5vZGVpZGAsYHVzZXJwcml2dHlwZWlkYCksCiAgIEtFWSBgcHJpdm5vZGVpZGAgKGBwcml2bm9kZWlkYCksCiAgIEtFWSBgdXNlcnByaXZ0eXBlaWRgIChgdXNlcnByaXZ0eXBlaWRgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE0NTEsOSArMTQ2NCw5IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgdXNlcnByaXZ0eXBlYCAoCiAgIGBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBuYW1lYCB2YXJjaGFyKDUwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAotICBQUklNQVJZIEtFWSAgKGBpZGApLAorICBQUklNQVJZIEtFWSAoYGlkYCksCiAgIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApCi0pIEVOR0lORT1Jbm5vREIgIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CispIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKIAogLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQ2OCw3ICsxNDgxLDcgQEAKICAgYHZhbHVlYCBsb25ndGV4dCBOT1QgTlVMTCwKICAgYHNldGJ5YCB2YXJjaGFyKDEyOCkgZGVmYXVsdCBOVUxMLAogICBgdGltZXN0YW1wYCBkYXRldGltZSBOT1QgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQogKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKQEAgLTE0ODEsNyArMTQ5NCw3IEBACiBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgdmNsZHNlbWFwaG9yZWAgKAogICBgaWRlbnRpZmllcmAgdmFyY2hhcigyNTYpIE5PVCBOVUxMLAogICBgcmVzZXJ2YXRpb25pZGAgbWVkaXVtaW50KDkpIHVuc2lnbmVkIE5PVCBOVUxMLAotICBgcGlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKKyAgYHBpZGAgbWVkaXVtaW50KDgpIHVuc2lnbmVkIE5PVCBOVUxMLAogICBgZXhwaXJlc2AgZGF0ZXRpbWUgTk9UIE5VTEwsCiAgIFBSSU1BUlkgS0VZIChgaWRlbnRpZmllcmApLAogICBLRVkgYHJlc2VydmF0aW9uaWRgIChgcmVzZXJ2YXRpb25pZGApCkBAIC0xNDk3LDEwICsxNTEwLDEwIEBACiAgIGBpZGAgc21hbGxpbnQoNSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBjb21wdXRlcmlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKICAgYHZtcHJvZmlsZWlkYCBzbWFsbGludCg1KSB1bnNpZ25lZCBOT1QgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBjb21wdXRlcmlkX3ZtcHJvZmlsZWlkYCAoYGNvbXB1dGVyaWRgLGB2bXByb2ZpbGVpZGApLAogICBLRVkgYHZtcHJvZmlsZWlkYCAoYHZtcHJvZmlsZWlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNTIxLDI0ICsxNTM0LDI0IEBACiAgIGB2bXBhdGhgIHZhcmNoYXIoMTI4KSBkZWZhdWx0IE5VTEwsCiAgIGB2aXJ0dWFsc3dpdGNoMGAgdmFyY2hhcig4MCkgTk9UIE5VTEwgZGVmYXVsdCAnVk1uZXQwJywKICAgYHZpcnR1YWxzd2l0Y2gxYCB2YXJjaGFyKDgwKSBOT1QgTlVMTCBkZWZhdWx0ICdWTW5ldDInLAotICBgdmlydHVhbHN3aXRjaDJgIHZhcmNoYXIoODApIE5VTEwgZGVmYXVsdCBOVUxMLAotICBgdmlydHVhbHN3aXRjaDNgIHZhcmNoYXIoODApIE5VTEwgZGVmYXVsdCBOVUxMLAorICBgdmlydHVhbHN3aXRjaDJgIHZhcmNoYXIoODApIGRlZmF1bHQgTlVMTCwKKyAgYHZpcnR1YWxzd2l0Y2gzYCB2YXJjaGFyKDgwKSBkZWZhdWx0IE5VTEwsCiAgIGB2bWRpc2tgIGVudW0oJ2RlZGljYXRlZCcsJ3NoYXJlZCcpIE5PVCBOVUxMIGRlZmF1bHQgJ2RlZGljYXRlZCcsCi0gIGB1c2VybmFtZWAgdmFyY2hhcig4MCkgTlVMTCBkZWZhdWx0IE5VTEwsCi0gIGBwYXNzd29yZGAgdmFyY2hhcigyNTYpIE5VTEwgZGVmYXVsdCBOVUxMLAotICBgc2VjcmV0aWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIE5VTEwgZGVmYXVsdCBOVUxMLAorICBgdXNlcm5hbWVgIHZhcmNoYXIoODApIGRlZmF1bHQgTlVMTCwKKyAgYHBhc3N3b3JkYCB2YXJjaGFyKDI1NikgZGVmYXVsdCBOVUxMLAorICBgc2VjcmV0aWRgIHNtYWxsaW50KDUpIHVuc2lnbmVkIGRlZmF1bHQgTlVMTCwKICAgYGV0aDBnZW5lcmF0ZWRgIHRpbnlpbnQoMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgIGBldGgxZ2VuZXJhdGVkYCB0aW55aW50KDEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAotICBgcnNhcHViYCB0ZXh0IE5VTEwgZGVmYXVsdCBOVUxMLAotICBgcnNha2V5YCB2YXJjaGFyKDI1NikgTlVMTCBkZWZhdWx0IE5VTEwsCi0gIGBlbmNyeXB0ZWRwYXNzd2RgIHRleHQgTlVMTCBkZWZhdWx0IE5VTEwsCi0gIFBSSU1BUlkgS0VZICAoYGlkYCksCisgIGByc2FwdWJgIHRleHQgZGVmYXVsdCBOVUxMLAorICBgcnNha2V5YCB2YXJjaGFyKDI1NikgZGVmYXVsdCBOVUxMLAorICBgZW5jcnlwdGVkcGFzc3dkYCB0ZXh0IGRlZmF1bHQgTlVMTCwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBwcm9maWxlbmFtZWAgKGBwcm9maWxlbmFtZWApLAogICBLRVkgYGltYWdlaWRgIChgaW1hZ2VpZGApLAogICBLRVkgYHJlcG9zaXRvcnlpbWFnZXR5cGVpZGAgKGByZXBvc2l0b3J5aW1hZ2V0eXBlaWRgKSwKICAgS0VZIGBkYXRhc3RvcmVpbWFnZXR5cGVpZGAgKGBkYXRhc3RvcmVpbWFnZXR5cGVpZGApLAogICBLRVkgYHNlY3JldGlkYCAoYHNlY3JldGlkYCkKLSkgRU5HSU5FPUlubm9EQiAgREVGQVVMVCBDSEFSU0VUPWxhdGluMTsKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwogCiAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNTQ5LDkgKzE1NjIsOSBAQAogQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYHZtdHlwZWAgKAogICBgaWRgIHRpbnlpbnQoMykgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgIGBuYW1lYCB2YXJjaGFyKDMwKSBOT1QgTlVMTCwKLSAgUFJJTUFSWSBLRVkgIChgaWRgKSwKKyAgUFJJTUFSWSBLRVkgKGBpZGApLAogICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKQotKSBFTkdJTkU9SW5ub0RCICBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CiAKIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE3ODcsNiArMTgwMCwyOSBAQAogKDEsICdub25lJyk7CiAKIC0tIAorLS0gRHVtcGluZyBkYXRhIGZvciB0YWJsZSBgbWVzc2FnZXJlc2V0YAorLS0gCisKK0lOU0VSVCBJR05PUkUgSU5UTyBgbWVzc2FnZXJlc2V0YCAoYG5hbWVgLCBgdmFsdWVgKSBWQUxVRVMKKygnYWRtaW5tZXNzYWdlfGltYWdlX2NyZWF0aW9uX2ZhaWxlZCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgVkNMIEltYWdlIENyZWF0aW9uIEZhaWxlZFxuICBcbiAgTWFuYWdlbWVudCBub2RlOiBbbWFuYWdlbWVudF9ub2RlX3Nob3J0X25hbWVdXG4gIFxuICBSZXF1ZXN0IElEOiBbcmVxdWVzdF9pZF1cbiAgUmVzZXJ2YXRpb24gSUQ6IFtyZXNlcnZhdGlvbl9pZF1cbiAgUElEOiBbcHJvY2Vzc19waWRdXG4gIFxuICBJbWFnZSBJRDogW2ltYWdlX2lkXVxuICBJbWFnZSByZXZpc2lvbiBJRDogW2ltYWdlcmV2aXNpb25faWRdXG4gIEltYWdlIG5hbWU6IFtpbWFnZV9uYW1lXVxuICBJbWFnZSBkaXNwbGF5IG5hbWU6IFtpbWFnZV9wcmV0dHluYW1lXVxuICBJbWFnZSBPUyBwYWNrYWdlOiBbaW1hZ2Vfb3NfbW9kdWxlX3BlcmxfcGFja2FnZV1cbiAgXG4gIFVzZXIgSUQ6IFt1c2VyX2lkXVxuICBVc2VyIGxvZ2luIG5hbWU6IFt1c2VyX2xvZ2luX2lkXVxuICBVc2VyIG5hbWU6IFt1c2VyX2ZpcnN0bmFtZV0gW3VzZXJfbGFzdG5hbWVdXG4gIFVzZXIgYWZmaWxpYXRpb246IFt1c2VyX2FmZmlsaWF0aW9uX25hbWVdXG4gIFxuICBQcm92aXNpb25pbmcgbW9kdWxlOiBbY29tcHV0ZXJfcHJvdmlzaW9uaW5nX3ByZXR0eV9uYW1lXSAoW2NvbXB1dGVyX3Byb3Zpc2lvbmluZ19uYW1lXSlcbiAgUHJvdmlzaW9uaW5nIHBhY2thZ2U6IFtjb21wdXRlcl9wcm92aXNpb25pbmdfbW9kdWxlX3BlcmxfcGFja2FnZV1cbiAgXG4gIENvbXB1dGVyIElEOiBbY29tcHV0ZXJfaWRdXG4gIENvbXB1dGVyIG5hbWU6IFtjb21wdXRlcl9zaG9ydF9uYW1lXVxuICBcbiAgVk0gaG9zdCBJRDogW3ZtaG9zdF9pZF1cbiAgVk0gaG9zdCBjb21wdXRlciBJRDogW3ZtaG9zdF9jb21wdXRlcl9pZF1cbiAgVk0gaG9zdCBjb21wdXRlciBuYW1lOiBbdm1ob3N0X3Nob3J0X25hbWVdXG4gIFxuICBWTSBob3N0IHByb2ZpbGUgSUQ6IFt2bWhvc3RfcHJvZmlsZV9pZF1cbiAgVk0gaG9zdCBwcm9maWxlIG5hbWU6IFt2bWhvc3RfcHJvZmlsZV9uYW1lXVxuc3ViamVjdDogJydWQ0wgLS0gTk9USUNFIEZBSUxFRCBJbWFnZSBbaW1hZ2VfY2FwdHVyZV90eXBlXSBbaW1hZ2VfcHJldHR5bmFtZV0nJ1xuJyksCisoJ2FkbWlubWVzc2FnZXxpbWFnZV9jcmVhdGlvbl9jb21wbGV0ZScsICctLS1cbm1lc3NhZ2U6IHxcbiAgVkNMIEltYWdlIFtpbWFnZV9jYXB0dXJlX3R5cGVdIENvbXBsZXRlZFxuICBcbiAgUmVxdWVzdCBJRDogW3JlcXVlc3RfaWRdXG4gIFJlc2VydmF0aW9uIElEOiBbcmVzZXJ2YXRpb25faWRdXG4gIFBJRDogW3Byb2Nlc3NfcGlkXVxuICBcbiAgSW1hZ2UgSUQ6IFtpbWFnZV9pZF1cbiAgSW1hZ2UgbmFtZTogW2ltYWdlX25hbWVdXG4gIEltYWdlIHNpemU6IFtpbWFnZV9zaXplXVxuICBcbiAgUmV2aXNpb24gSUQ6IFtpbWFnZXJldmlzaW9uX2lkXVxuICBcbiAgTWFuYWdlbWVudCBub2RlOiBbbWFuYWdlbWVudF9ub2RlX3Nob3J0X25hbWVdXG4gIFxuICBVc2VybmFtZTogW3VzZXJfbG9naW5faWRdXG4gIFVzZXIgSUQ6IFt1c2VyX2lkXVxuICBcbiAgQ29tcHV0ZXIgSUQ6IFtjb21wdXRlcl9pZF1cbiAgQ29tcHV0ZXIgbmFtZTogW2NvbXB1dGVyX3Nob3J0X25hbWVdXG4gIFxuICBVc2UgU3lzcHJlcDogW2ltYWdlbWV0YV9zeXNwcmVwXVxuc3ViamVjdDogJydWQ0wgSU1BR0UgW2ltYWdlX2NhcHR1cmVfdHlwZV0gQ29tcGxldGVkOiBbaW1hZ2VfbmFtZV0nJ1xuJyksCisoJ2FkbWlubWVzc2FnZXxpbWFnZV9jcmVhdGlvbl9zdGFydGVkJywgJy0tLVxubWVzc2FnZTogfFxuICBWQ0wgSW1hZ2UgQ3JlYXRpb24gU3RhcnRlZFxuICBcbiAgUmVxdWVzdCBJRDogW3JlcXVlc3RfaWRdXG4gIFJlc2VydmF0aW9uIElEOiBbcmVzZXJ2YXRpb25faWRdXG4gIFBJRDogW3Byb2Nlc3NfcGlkXVxuICBcbiAgSW1hZ2UgSUQ6IFtpbWFnZV9pZF1cbiAgSW1hZ2UgbmFtZTogW2ltYWdlX25hbWVdXG4gIEJhc2UgaW1hZ2Ugc2l6ZTogW2ltYWdlX3NpemVdXG4gIEJhc2UgcmV2aXNpb24gSUQ6IFtpbWFnZXJldmlzaW9uX2lkXVxuICBcbiAgTWFuYWdlbWVudCBub2RlOiBbbWFuYWdlbWVudF9ub2RlX3Nob3J0X25hbWVdXG4gIFxuICBVc2VybmFtZTogW3VzZXJfbG9naW5faWRdXG4gIFVzZXIgSUQ6IFt1c2VyX2lkXVxuICBcbiAgQ29tcHV0ZXIgSUQ6IFtjb21wdXRlcl9pZF1cbiAgQ29tcHV0ZXIgbmFtZTogW2NvbXB1dGVyX3Nob3J0X25hbWVdXG4gIFxuICBVc2UgU3lzcHJlcDogW2ltYWdlbWV0YV9zeXNwcmVwXVxuc3ViamVjdDogJydWQ0wgSU1BR0UgQ3JlYXRpb24gU3RhcnRlZDogW2ltYWdlX25hbWVdJydcbicpLAorKCd1c2VybWVzc2FnZXxlbmR0aW1lX3JlYWNoZWR8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIHJlc2VydmF0aW9uIG9mIFtpbWFnZV9wcmV0dHluYW1lXSBoYXMgZW5kZWQuIFRoYW5rIHlvdSBmb3IgdXNpbmcgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdLlxuICBcbiAgUmVnYXJkcyxcbiAgVkNMIFRlYW1cbiAgXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlIHBsZWFzZSByZXNwb25kIFxuICB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBpc3N1ZSBhbmQgYSBoZWxwIHRpY2tldCB3aWxsIGJlIFxuICBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIEVuZCBvZiByZXNlcnZhdGlvbicnXG4nKSwKKygndXNlcm1lc3NhZ2V8cmVzZXJ2ZWR8R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBUaGUgcmVzb3VyY2VzIGZvciB5b3VyIFZDTCByZXNlcnZhdGlvbiBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlc2VydmVkLlxuICBDb25uZWN0aW9uIHdpbGwgbm90IGJlIGFsbG93ZWQgdW50aWwgeW91IGNsaWNrIHRoZSAnJ0Nvbm5lY3QnJyBidXR0b24gb24gdGhlICcnQ3VycmVudCBSZXNlcnZhdGlvbnMnJyBwYWdlLlxuICBZb3UgbXVzdCBhY2tub3dsZWRnZSB0aGUgcmVzZXJ2YXRpb24gd2l0aGluIHRoZSBuZXh0IDE1IG1pbnV0ZXMgb3IgdGhlIHJlc291cmNlcyB3aWxsIGJlIHJlY2xhaW1lZCBmb3Igb3RoZXIgVkNMIHVzZXJzLlxuICBcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0ICJDdXJyZW50IFJlc2VydmF0aW9ucyJcbiAgLUNsaWNrIHRoZSAiQ29ubmVjdCIgYnV0dG9uXG4gIFVwb24gYWNrbm93bGVkZ2VtZW50LCBhbGwgb2YgdGhlIHJlbWFpbmluZyBjb25uZWN0aW9uIGRldGFpbHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlIHBsZWFzZSByZXNwb25kIFxuICB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBpc3N1ZSBhbmQgYSBoZWxwIHRpY2tldCB3aWxsIGJlIFxuICBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIFtpbWFnZV9wcmV0dHluYW1lXSByZXNlcnZhdGlvbicnXG4nKSwKKygndXNlcm1lc3NhZ2V8dGltZW91dF9ub19pbml0aWFsX2Nvbm5lY3Rpb258R2xvYmFsJywgJy0tLVxubWVzc2FnZTogfFxuICBZb3VyIHJlc2VydmF0aW9uIGhhcyB0aW1lZCBvdXQgZm9yIGltYWdlIFtpbWFnZV9wcmV0dHluYW1lXSBiZWNhdXNlIG5vIGluaXRpYWwgY29ubmVjdGlvbiB3YXMgbWFkZS5cbiAgXG4gIFRvIG1ha2UgYW5vdGhlciByZXNlcnZhdGlvbiwgcGxlYXNlIHJldmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdLlxuICBcbiAgVGhhbmsgWW91LFxuICBWQ0wgVGVhbVxuICBcbiAgXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICBUaGlzIGlzIGFuIGF1dG9tYXRlZCBub3RpY2UuIElmIHlvdSBuZWVkIGFzc2lzdGFuY2VcbiAgcGxlYXNlIHJlc3BvbmQgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWVcbiAgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gUmVzZXJ2YXRpb24gVGltZW91dCcnXG4nKSwKKygndXNlcm1lc3NhZ2V8ZW5kdGltZV9pbW1pbmVudHxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdSBoYXZlIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIHRoZSBlbmQgb2YgeW91ciByZXNlcnZhdGlvbiBmb3IgaW1hZ2UgW2ltYWdlX3ByZXR0eW5hbWVdLCBwbGVhc2Ugc2F2ZSBhbGwgd29yayBhbmQgcHJlcGFyZSB0byBleGl0LlxuICBcbiAgUmVzZXJ2YXRpb24gZXh0ZW5zaW9ucyBhcmUgYXZhaWxhYmxlIGlmIHRoZSBtYWNoaW5lIHlvdSBhcmUgb24gZG9lcyBub3QgaGF2ZSBhIHJlc2VydmF0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZy5cbiAgXG4gIFZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXSBhbmQgc2VsZWN0IEN1cnJlbnQgUmVzZXJ2YXRpb25zIHRvIGVkaXQgdGhpcyByZXNlcnZhdGlvbi5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbiAgXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlIHBsZWFzZSByZXNwb25kIFxuICB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBpc3N1ZSBhbmQgYSBoZWxwIHRpY2tldCB3aWxsIGJlIFxuICBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6ICcnWW91IGhhdmUgW25vdGljZV9pbnRlcnZhbF0gdW50aWwgdGhlIGVuZCBvZiB5b3VyIHJlc2VydmF0aW9uLiBQbGVhc2Ugc2F2ZSBhbGwgd29yayBhbmQgcHJlcGFyZSB0byBsb2cgb2ZmLicnXG5zdWJqZWN0OiAnJ1ZDTCAtLSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCBlbmQgb2YgcmVzZXJ2YXRpb24nJ1xuJyksCisoJ3VzZXJtZXNzYWdlfHByb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbnxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFJldmlzaW9uIFtpbWFnZXJldmlzaW9uX3JldmlzaW9uXSBvZiB5b3VyIFZDTCAnJ1tpbWFnZV9wcmV0dHluYW1lXScnIGltYWdlIGhhcyBiZWVuIG1hZGUgcHJvZHVjdGlvbi4gIEFueSBuZXcgcmVzZXJ2YXRpb25zIGZvciB0aGUgaW1hZ2Ugd2lsbCByZWNlaXZlIHRoaXMgcmV2aXNpb24gYnkgZGVmYXVsdC5cbiAgXG4gIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHBsZWFzZSBjb250YWN0IFt1c2VyX2FmZmlsaWF0aW9uX2hlbHBhZGRyZXNzXS5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIEltYWdlIFtpbWFnZV9wcmV0dHluYW1lXSBtYWRlIHByb2R1Y3Rpb24nJ1xuJyksCisoJ3VzZXJtZXNzYWdlfHRpbWVvdXRfaW5hY3Rpdml0eXxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgcmVzZXJ2YXRpb24gaGFzIHRpbWVkIG91dCBkdWUgdG8gaW5hY3Rpdml0eSBmb3IgaW1hZ2UgW2ltYWdlX3ByZXR0eW5hbWVdLlxuICBcbiAgVG8gbWFrZSBhbm90aGVyIHJlc2VydmF0aW9uLCBwbGVhc2UgcmV2aXNpdDpcbiAgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSByZXNlcnZhdGlvbiB0aW1lb3V0JydcbicpLAorKCd1c2VybWVzc2FnZXxpbWFnZV9jcmVhdGlvbl9kZWxheWVkfEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS5cbiAgWW91ciBpbWFnZSBjcmVhdGlvbiBvZiBbaW1hZ2VfcHJldHR5bmFtZV0gaGFzIGJlZW4gZGVsYXllZFxuICBkdWUgdG8gYSBzeXN0ZW0gaXNzdWUgdGhhdCBwcmV2ZW50ZWQgdGhlIGF1dG9tYXRpYyBjb21wbGV0aW9uLlxuICBcbiAgVGhlIGltYWdlIGNyZWF0aW9uIHJlcXVlc3QgYW5kIHRoZSBjb21wdXRpbmcgcmVzb3VyY2UgaGF2ZVxuICBiZWVuIHBsYWNlZCBpbiBhIHNhZmUgbW9kZS4gVGhlIFZDTCBzeXN0ZW0gYWRtaW5pc3RyYXRvcnNcbiAgaGF2ZSBiZWVuIG5vdGlmaWVkIGZvciBtYW51YWwgaW50ZXJ2ZW50aW9uLlxuICBcbiAgT25jZSB0aGUgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZCwgeW91IHdpbGwgYmUgbm90aWZpZWRcbiAgYnkgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBlbWFpbCBvciBjb250YWN0ZWQgZGlyZWN0bHlcbiAgYnkgdGhlIFZDTCBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMuXG4gIFxuICBJZiB5b3UgZG8gbm90IHJlY2VpdmUgYSByZXNwb25zZSB3aXRoaW4gb25lIGJ1c2luZXNzIGRheSwgcGxlYXNlXG4gIHJlcGx5IHRvIHRoaXMgZW1haWwuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSBOT1RJQ0UgREVMQVkgSW1hZ2UgQ3JlYXRpb24gW2ltYWdlX3ByZXR0eW5hbWVdJydcbicpLAorKCd1c2VybWVzc2FnZXxyZWluc3RhbGxlZHxHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgcmVzZXJ2YXRpb24gd2FzIHN1Y2Nlc3NmdWxseSByZWluc3RhbGxlZCBhbmQgeW91IGNhbiBwcm9jZWVkIHRvIHJlY29ubmVjdC4gXG4gIFBsZWFzZSByZXZpc2l0IHRoZSAnJ0N1cnJlbnQgUmVzZXJ2YXRpb25zJycgcGFnZSBmb3IgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlIHBsZWFzZSByZXNwb25kIFxuICB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBpc3N1ZSBhbmQgYSBoZWxwIHRpY2tldCB3aWxsIGJlIFxuICBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKionJ1xuc2hvcnRfbWVzc2FnZTogflxuc3ViamVjdDogJydWQ0wgLS0gW2ltYWdlX3ByZXR0eW5hbWVdIHJlc2VydmF0aW9uIHJlaW5zdGFsbGVkJydcbicpLAorKCd1c2VybWVzc2FnZXxlbmR0aW1lX3JlYWNoZWRfaW1hZ2luZ3xHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgaW1hZ2luZyByZXNlcnZhdGlvbiBvZiBbaW1hZ2VfcHJldHR5bmFtZV0gaGFzIHJlYWNoZWQgaXQnJ3Mgc2NoZWR1bGVkIGVuZCB0aW1lLlxuICBcbiAgVG8gYXZvaWQgbG9zaW5nIHlvdXIgd29yayB3ZSBoYXZlIHN0YXJ0ZWQgYW4gYXV0b21hdGljIGNhcHR1cmUgb2YgdGhpcyBpbWFnZS4gVXBvbiBjb21wbGV0aW9uIG9mIHRoZSBcbiAgaW1hZ2UgY2FwdHVyZS4gWW91IHdpbGwgYmUgbm90aWZpZWQgYWJvdXQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGltYWdlIGNhcHR1cmUuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCBJbWFnZSBSZXNlcnZhdGlvbiAtIEF1dG8gY2FwdHVyZSBzdGFydGVkJydcbicpLAorKCd1c2VybWVzc2FnZXxpbWFnZV9jcmVhdGlvbl9zdWNjZXNzfEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgWW91ciBWQ0wgaW1hZ2UgY3JlYXRpb24gcmVxdWVzdCBmb3IgW2ltYWdlX3ByZXR0eW5hbWVdIGhhcyBzdWNjZWVkZWQuXG4gIFxuICBQbGVhc2UgdmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBpbWFnZSBjYWxsZWQgW2ltYWdlX3ByZXR0eW5hbWVdLlxuICBcbiAgUGxlYXNlIHRlc3QgdGhpcyBpbWFnZSB0byBjb25maXJtIGl0IHdvcmtzIGNvcnJlY3RseS5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIFtpbWFnZV9wcmV0dHluYW1lXSBJbWFnZSBDcmVhdGlvbiBTdWNjZWVkZWQnJ1xuJyksCisoJ3VzZXJtZXNzYWdlfGltYWdlX2NoZWNrcG9pbnRfc3VjY2Vzc3xHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdXIgVkNMIGltYWdlIGNoZWNrcG9pbnQgY3JlYXRpb24gcmVxdWVzdCBmb3IgW2ltYWdlX3ByZXR0eW5hbWVdIGhhcyBzdWNjZWVkZWQuXG4gIFxuICBZb3Ugd2lsbCBuZWVkIHRvIHZpc2l0IHRoZSAiQ3VycmVudCBSZXNlcnZhdGlvbnMiIHBhZ2UgYW5kIGNsaWNrICJDb25uZWN0IiBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlY29ubmVjdCB0byB0aGUgY29tcHV0ZXIuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG5zaG9ydF9tZXNzYWdlOiB+XG5zdWJqZWN0OiAnJ1ZDTCAtLSBbaW1hZ2VfcHJldHR5bmFtZV0gSW1hZ2UgQ2hlY2twb2ludCBTdWNjZWVkZWQnJ1xuJyksCisoJ3VzZXJtZXNzYWdlfHRpbWVvdXRfbm9fYWNrbm93bGVkZ2VtZW50fEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgWW91ciByZXNlcnZhdGlvbiBoYXMgdGltZWQgb3V0IGZvciBpbWFnZSBbaW1hZ2VfcHJldHR5bmFtZV0gYmVjYXVzZSBubyBpbml0aWFsIGNvbm5lY3Rpb24gd2FzIG1hZGUuXG4gIFxuICBUbyBtYWtlIGFub3RoZXIgcmVzZXJ2YXRpb24sIHBsZWFzZSByZXZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXS5cbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbiAgXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlXG4gIHBsZWFzZSByZXNwb25kIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGlzc3VlXG4gIGFuZCBhIGhlbHAgdGlja2V0IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6IH5cbnN1YmplY3Q6ICcnVkNMIC0tIFJlc2VydmF0aW9uIFRpbWVvdXQnJ1xuJyksCisoJ3VzZXJtZXNzYWdlfGZ1dHVyZV9lbmR0aW1lfEdsb2JhbCcsICctLS1cbm1lc3NhZ2U6IHxcbiAgWW91IGhhdmUgW25vdGljZV9pbnRlcnZhbF0gdW50aWwgdGhlIHNjaGVkdWxlZCBlbmQgdGltZSBvZiB5b3VyIHJlc2VydmF0aW9uIGZvciBpbWFnZSBbaW1hZ2VfcHJldHR5bmFtZV0uXG4gIFxuICBSZXNlcnZhdGlvbiBleHRlbnNpb25zIGFyZSBhdmFpbGFibGUgaWYgdGhlIG1hY2hpbmUgeW91IGFyZSBvbiBkb2VzIG5vdCBoYXZlIGEgcmVzZXJ2YXRpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nLlxuICBcbiAgVG8gZWRpdCB0aGlzIHJlc2VydmF0aW9uOlxuICAtVmlzaXQgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdXG4gIC1TZWxlY3QgQ3VycmVudCBSZXNlcnZhdGlvbnNcbiAgXG4gIFRoYW5rIFlvdSxcbiAgVkNMIFRlYW1cbiAgXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgVGhpcyBpcyBhbiBhdXRvbWF0ZWQgbm90aWNlLiBJZiB5b3UgbmVlZCBhc3Npc3RhbmNlIHBsZWFzZSByZXNwb25kIFxuICB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBpc3N1ZSBhbmQgYSBoZWxwIHRpY2tldCB3aWxsIGJlIFxuICBnZW5lcmF0ZWQuXG4gIFxuICBUbyBkaXNhYmxlIGVtYWlsIG5vdGljZXNcbiAgLVZpc2l0IFt1c2VyX2FmZmlsaWF0aW9uX3NpdGV3d3dhZGRyZXNzXVxuICAtU2VsZWN0IFVzZXIgUHJlZmVyZW5jZXNcbiAgLVNlbGVjdCBHZW5lcmFsIFByZWZlcmVuY2VzXG4gIFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbnNob3J0X21lc3NhZ2U6ICJZb3UgaGF2ZSBbbm90aWNlX2ludGVydmFsXSB1bnRpbCB0aGUgc2NoZWR1bGVkIGVuZCB0aW1lIG9mIHlvdXIgcmVzZXJ2YXRpb24uIFZDTCBUZWFtXFxuIlxuc3ViamVjdDogJydWQ0wgLS0gW25vdGljZV9pbnRlcnZhbF0gdW50aWwgZW5kIG9mIHJlc2VydmF0aW9uIGZvciBbaW1hZ2VfcHJldHR5bmFtZV0nJ1xuJyksCisoJ3VzZXJtZXNzYWdlfGVuZHRpbWVfaW1taW5lbnRfaW1hZ2luZ3xHbG9iYWwnLCAnLS0tXG5tZXNzYWdlOiB8XG4gIFlvdSBoYXZlIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIHRoZSBlbmQgb2YgeW91ciByZXNlcnZhdGlvbiBmb3IgaW1hZ2UgW2ltYWdlX3ByZXR0eW5hbWVdLiBcbiAgXG4gIEF0IHRoZSBzY2hlZHVsZWQgZW5kIHRpbWUgeW91ciBpbWFnaW5nIHJlc2VydmF0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYXB0dXJlZC4gXG4gIFxuICBUbyBwcmV2ZW50IHRoaXMgYXV0byBjYXB0dXJlLCB2aXNpdCB0aGUgVkNMIHNpdGUgW3VzZXJfYWZmaWxpYXRpb25fc2l0ZXd3d2FkZHJlc3NdIG1hbnVhbGx5IHN0YXJ0IHRoZSBpbWFnZSBjcmVhdGlvbiBwcm9jZXNzLlxuICBcbiAgUGxlYXNlIG5vdGUgdGhpcyBhdXRvIGNhcHR1cmUgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGRlc3RvcnlpbmcgYW55IHdvcmsgeW91IGhhdmUgZG9uZSB0byB0aGUgaW1hZ2UuXG4gIFxuICBUaGFuayBZb3UsXG4gIFZDTCBUZWFtXG4gIFxuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIFRoaXMgaXMgYW4gYXV0b21hdGVkIG5vdGljZS4gSWYgeW91IG5lZWQgYXNzaXN0YW5jZSBwbGVhc2UgcmVzcG9uZCBcbiAgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgaXNzdWUgYW5kIGEgaGVscCB0aWNrZXQgd2lsbCBiZSBcbiAgZ2VuZXJhdGVkLlxuICBcbiAgVG8gZGlzYWJsZSBlbWFpbCBub3RpY2VzXG4gIC1WaXNpdCBbdXNlcl9hZmZpbGlhdGlvbl9zaXRld3d3YWRkcmVzc11cbiAgLVNlbGVjdCBVc2VyIFByZWZlcmVuY2VzXG4gIC1TZWxlY3QgR2VuZXJhbCBQcmVmZXJlbmNlc1xuICBcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5zaG9ydF9tZXNzYWdlOiAnJ1lvdSBoYXZlIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIHRoZSBhdXRvIGNhcHR1cmUgcHJvY2VzcyBpcyBzdGFydGVkLicnXG5zdWJqZWN0OiAnJ1ZDTCBJbWFnaW5nIFJlc2VydmF0aW9uIC0tIFtub3RpY2VfaW50ZXJ2YWxdIHVudGlsIHN0YXJ0aW5nIGF1dG8gY2FwdHVyZScnXG4nKTsKKworLS0gCiAtLSBEdW1waW5nIGRhdGEgZm9yIHRhYmxlIGBtb2R1bGVgCiAtLSAKIApAQCAtMjEwMyw3ICsyMTM5LDcgQEAKIC0tIAogCiBJTlNFUlQgSUdOT1JFIElOVE8gYHVzZXJgIChgaWRgLCBgdWlkYCwgYHVuaXR5aWRgLCBgYWZmaWxpYXRpb25pZGAsIGBmaXJzdG5hbWVgLCBgbGFzdG5hbWVgLCBgcHJlZmVycmVkbmFtZWAsIGBlbWFpbGAsIGBlbWFpbG5vdGljZXNgLCBgSU10eXBlaWRgLCBgSU1pZGAsIGBhZG1pbmxldmVsaWRgLCBgd2lkdGhgLCBgaGVpZ2h0YCwgYGJwcGAsIGBhdWRpb21vZGVgLCBgbWFwZHJpdmVzYCwgYG1hcHByaW50ZXJzYCwgYG1hcHNlcmlhbGAsIGBzaG93YWxsZ3JvdXBzYCwgYGxhc3R1cGRhdGVkYCkgVkFMVUVTIAotKDEsIDEwMSwgJ2FkbWluJywgMSwgJ3ZjbCcsICdhZG1pbicsICcnLCAncm9vdEBsb2NhbGhvc3QnLCAwLCBOVUxMLCBOVUxMLCAzLCAxMDI0LCA3NjgsIDE2LCAnbG9jYWwnLCAxLCAxLCAxLCAxLCAnMjAwNy0wNS0xNyAwOTo1ODozOScpLAorKDEsIE5VTEwsICdhZG1pbicsIDEsICd2Y2wnLCAnYWRtaW4nLCAnJywgJ3Jvb3RAbG9jYWxob3N0JywgMCwgTlVMTCwgTlVMTCwgMywgMTAyNCwgNzY4LCAxNiwgJ2xvY2FsJywgMSwgMSwgMSwgMSwgJzIwMDctMDUtMTcgMDk6NTg6MzknKSwKICgyLCBOVUxMLCAndmNscmVsb2FkJywgMSwgJ3ZjbCcsICdyZWxvYWQnLCBOVUxMLCAnJywgMCwgTlVMTCwgTlVMTCwgMSwgMTAyNCwgNzY4LCAxNiwgJ2xvY2FsJywgMSwgMSwgMCwgMCwgJzAwMDAtMDAtMDAgMDA6MDA6MDAnKSwKICgzLCBOVUxMLCAndmNsc3lzdGVtJywgMSwgJ3ZjbCcsICdzeXN0ZW0nLCBOVUxMLCAnJywgMCwgTlVMTCwgTlVMTCwgMSwgMTAyNCwgNzY4LCAxNiwgJ2xvY2FsJywgMSwgMSwgMCwgMCwgJzAwMDAtMDAtMDAgMDA6MDA6MDAnKTsKIApkaWZmIC0tZ2l0IGEvdmNsLWluc3RhbGwuc2ggYi92Y2wtaW5zdGFsbC5zaAppbmRleCBkNGVlZDZjLi5kYjU5OTc4IDEwMDc1NQotLS0gYS92Y2wtaW5zdGFsbC5zaAorKysgYi92Y2wtaW5zdGFsbC5zaApAQCAtNjksNyArNjksNyBAQAogZXZhbCBzZXQgLS0gIiRhcmdzIgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVZDTF9WRVJTSU9OPTIuNQorVkNMX1ZFUlNJT049Mi41LjEKIERCX1VTRVJOQU1FPXZjbHVzZXIKIEFETUlOX1BBU1NXT1JEPQogCkBAIC00NTAsMTIgKzQ1MCwxMiBAQAogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBnZW5lcmljX2Vycm9yICJmYWlsZWQgdG8gZG93bmxvYWQgJEFSQ0hJVkUgZnJvbSAkQVJDSElWRVVSTFBBVEgiOyBleGl0IDE7IGZpCiB9CiAKLWZ1bmN0aW9uIHZhbGlkYXRlX2FyY2hpdmVfc2hhMSgpIHsKLQllY2hvICJEb3dubG9hZGluZyBzaGExIGZpbGUgZm9yICRWQ0xfVkVSU0lPTi4uLiIKLQkvYmluL3JtIC1mICRBUkNISVZFLnNoYTEKLQl3Z2V0IC1xICRTSUdQQVRIJEFSQ0hJVkUuc2hhMQorZnVuY3Rpb24gdmFsaWRhdGVfYXJjaGl2ZV9zaGE1MTIoKSB7CisJZWNobyAiRG93bmxvYWRpbmcgc2hhNTEyIGZpbGUgZm9yICRWQ0xfVkVSU0lPTi4uLiIKKwkvYmluL3JtIC1mICRBUkNISVZFLnNoYTUxMgorCXdnZXQgLXEgJFNJR1BBVEgkQVJDSElWRS5zaGE1MTIKIAllY2hvICJ2YWxpZGF0aW5nICRBUkNISVZFIgotCXNoYTFzdW0gLWMgJEFSQ0hJVkUuc2hhMQorCXNoYTUxMnN1bSAtYyAkQVJDSElWRS5zaGE1MTIKIAlyZXR1cm4gJD8KIH0KIApAQCAtNDg3LDE5ICs0ODcsMTkgQEAKIGlmIFtbICEgLWYgJEFSQ0hJVkUgXV07IHRoZW4KIAllY2hvICJEb3dubG9hZGluZyBWQ0wgJFZDTF9WRVJTSU9OLi4uIgogCWRvd25sb2FkX2FyY2hpdmUKLQl2YWxpZGF0ZV9hcmNoaXZlX3NoYTEKKwl2YWxpZGF0ZV9hcmNoaXZlX3NoYTUxMgogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBnZW5lcmljX2Vycm9yICJmYWlsZWQgdG8gdmFsaWRhdGUgJEFSQ0hJVkUiOyBleGl0IDE7IGZpOwogCXZhbGlkYXRlX2FyY2hpdmVfZ3BnCiAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuIGdlbmVyaWNfZXJyb3IgImZhaWxlZCB0byB2YWxpZGF0ZSAkQVJDSElWRSI7IGV4aXQgMTsgZmk7CiBlbHNlCiAJZGlyPWBwd2RgCiAJZWNobyAiYXJjaGl2ZSBmb3IgJFZDTF9WRVJTSU9OIGZvdW5kIGF0ICRkaXIvJEFSQ0hJVkUiCi0JdmFsaWRhdGVfYXJjaGl2ZV9zaGExCisJdmFsaWRhdGVfYXJjaGl2ZV9zaGE1MTIKIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4KIAkJZWNobyAiZmFpbGVkIHRvIHZhbGlkYXRlICRBUkNISVZFOyBkb3dubG9hZGluZyBhZ2Fpbi4uLiIKIAkJL2Jpbi9tdiAtZiAkQVJDSElWRSAkQVJDSElWRS5vbGQKIAkJZG93bmxvYWRfYXJjaGl2ZQotCQl2YWxpZGF0ZV9hcmNoaXZlX3NoYTEKKwkJdmFsaWRhdGVfYXJjaGl2ZV9zaGE1MTIKIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuIGdlbmVyaWNfZXJyb3IgImZhaWxlZCB0byB2YWxpZGF0ZSAkQVJDSElWRSI7IGV4aXQgMTsgZmk7CiAJCXZhbGlkYXRlX2FyY2hpdmVfZ3BnCiAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBnZW5lcmljX2Vycm9yICJmYWlsZWQgdG8gdmFsaWRhdGUgJEFSQ0hJVkUiOyBleGl0IDE7IGZpOwpkaWZmIC0tZ2l0IGEvdmNsLXVwZ3JhZGUuc2ggYi92Y2wtdXBncmFkZS5zaAppbmRleCA0OTk4ZmJmLi5hMjg3MzIzIDEwMDc1NQotLS0gYS92Y2wtdXBncmFkZS5zaAorKysgYi92Y2wtdXBncmFkZS5zaApAQCAtNjIsNyArNjIsNyBAQAogZXZhbCBzZXQgLS0gIiRhcmdzIgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVZDTF9WRVJTSU9OPTIuNQorVkNMX1ZFUlNJT049Mi41LjEKIE9MRF9WRVJTSU9OPSIiCiBEQl9OQU1FPXZjbAogV0VCX1BBVEg9L3Zhci93d3cvaHRtbC92Y2wKQEAgLTMwMCwxMiArMzAwLDEyIEBACiAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuIGdlbmVyaWNfZXJyb3IgImZhaWxlZCB0byBkb3dubG9hZCAkQVJDSElWRSBmcm9tICRBUkNISVZFVVJMUEFUSCI7IGV4aXQgMTsgZmkKIH0KIAotZnVuY3Rpb24gdmFsaWRhdGVfYXJjaGl2ZV9zaGExKCkgewotCWVjaG8gIkRvd25sb2FkaW5nIHNoYTEgZmlsZSBmb3IgJFZDTF9WRVJTSU9OLi4uIgotCS9iaW4vcm0gLWYgJEFSQ0hJVkUuc2hhMQotCXdnZXQgLXEgJFNJR1BBVEgkQVJDSElWRS5zaGExCitmdW5jdGlvbiB2YWxpZGF0ZV9hcmNoaXZlX3NoYTUxMigpIHsKKwllY2hvICJEb3dubG9hZGluZyBzaGE1MTIgZmlsZSBmb3IgJFZDTF9WRVJTSU9OLi4uIgorCS9iaW4vcm0gLWYgJEFSQ0hJVkUuc2hhNTEyCisJd2dldCAtcSAkU0lHUEFUSCRBUkNISVZFLnNoYTUxMgogCWVjaG8gInZhbGlkYXRpbmcgJEFSQ0hJVkUiCi0Jc2hhMXN1bSAtYyAkQVJDSElWRS5zaGExCisJc2hhNTEyc3VtIC1jICRBUkNISVZFLnNoYTUxMgogCXJldHVybiAkPwogfQogCkBAIC01ODYsMTkgKzU4NiwxOSBAQAogaWYgW1sgISAtZiAkQVJDSElWRSBdXTsgdGhlbgogCWVjaG8gIkRvd25sb2FkaW5nIFZDTCAkVkNMX1ZFUlNJT04uLi4iCiAJZG93bmxvYWRfYXJjaGl2ZQotCXZhbGlkYXRlX2FyY2hpdmVfc2hhMQorCXZhbGlkYXRlX2FyY2hpdmVfc2hhNTEyCiAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuIGdlbmVyaWNfZXJyb3IgImZhaWxlZCB0byB2YWxpZGF0ZSAkQVJDSElWRSI7IGV4aXQgMTsgZmk7CiAJdmFsaWRhdGVfYXJjaGl2ZV9ncGcKIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4gZ2VuZXJpY19lcnJvciAiZmFpbGVkIHRvIHZhbGlkYXRlICRBUkNISVZFIjsgZXhpdCAxOyBmaTsKIGVsc2UKIAlkaXI9YHB3ZGAKIAllY2hvICJhcmNoaXZlIGZvciAkVkNMX1ZFUlNJT04gZm91bmQgYXQgJGRpci8kQVJDSElWRSIKLQl2YWxpZGF0ZV9hcmNoaXZlX3NoYTEKKwl2YWxpZGF0ZV9hcmNoaXZlX3NoYTUxMgogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgogCQllY2hvICJmYWlsZWQgdG8gdmFsaWRhdGUgJEFSQ0hJVkU7IGRvd25sb2FkaW5nIGFnYWluLi4uIgogCQkvYmluL212IC1mICRBUkNISVZFICRBUkNISVZFLm9sZAogCQlkb3dubG9hZF9hcmNoaXZlCi0JCXZhbGlkYXRlX2FyY2hpdmVfc2hhMQorCQl2YWxpZGF0ZV9hcmNoaXZlX3NoYTUxMgogCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4gZ2VuZXJpY19lcnJvciAiZmFpbGVkIHRvIHZhbGlkYXRlICRBUkNISVZFIjsgZXhpdCAxOyBmaTsKIAkJdmFsaWRhdGVfYXJjaGl2ZV9ncGcKIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuIGdlbmVyaWNfZXJyb3IgImZhaWxlZCB0byB2YWxpZGF0ZSAkQVJDSElWRSI7IGV4aXQgMTsgZmk7CmRpZmYgLS1naXQgYS93ZWIvLmdpdGlnbm9yZSBiL3dlYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWE0NGMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDEzIEBACisuaHQtaW5jL2NvbmYucGhwCisuaHQtaW5jL2NyeXB0a2V5L2NyeXB0a2V5aWQKKy5odC1pbmMvY3J5cHRrZXkvcHJpdmF0ZS5wZW0KKy5odC1pbmMva2V5cy5wZW0KKy5odC1pbmMvcHVia2V5LnBlbQorLmh0LWluYy9zZWNyZXRzLnBocAorLmh0LWluYy9zcHljLTAuNS4xLworZG9qby8KK3RoZW1lcy8qKi9jc3MvZG9qbworIyBuZXRiZWFucyBwcm9qZWN0IGZpbGVzCisuc2V0dGluZ3MvCisuYnVpbGRwYXRoCisucHJvamVjdApkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvYWRkb21haW4ucGhwIGIvd2ViLy5odC1pbmMvYWRkb21haW4ucGhwCmluZGV4IGU3NTYzOWQuLmY4NmViZjcgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL2FkZG9tYWluLnBocAorKysgYi93ZWIvLmh0LWluYy9hZGRvbWFpbi5waHAKQEAgLTExOSw2ICsxMTksOCBAQAogCQkJCXJldHVybiAnRG9tYWluIEROUyBOYW1lJzsKIAkJCWNhc2UgJ2Ruc3NlcnZlcnMnOgogCQkJCXJldHVybiAnRE5TIFNlcnZlcihzKSc7CisJCQljYXNlICd1c2VkYmhvc3RuYW1lcyc6CisJCQkJcmV0dXJuICdVc2UgRGF0YWJhc2UgSG9zdG5hbWVzJzsKIAkJfQogCQlyZXR1cm4gdWNmaXJzdCgkZmllbGQpOwogCX0KQEAgLTIwNCw3ICsyMDYsNyBAQAogCQkJCSAgICAgICAuICJXSEVSRSBjcnlwdGtleWlkID0gJGNyeXB0a2V5aWQgQU5EICIKIAkJCQkgICAgICAgLiAgICAgICAic2VjcmV0aWQgPSAkb2xkc2VjcmV0aWQiOwogCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCQlpZighICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKKwkJCQlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKSB7CiAJCQkJCSMgZ2VuZXJhdGUgYSBuZXcgc2VjcmV0CiAJCQkJCSRuZXdzZWNyZXRpZCA9IGdldFNlY3JldEtleUlEKCdhZGRvbWFpbicsICdzZWNyZXRpZCcsIDApOwogCQkJCQkkZGVsaWRzID0gYXJyYXkoJG9sZHNlY3JldGlkKTsKQEAgLTIyMSw3ICsyMjMsNyBAQAogCQkJCQkgICAgICAgLiAiV0hFUkUgY3Muc2VjcmV0aWQgPSAkb2xkc2VjcmV0aWQgQU5EICIKIAkJCQkJICAgICAgIC4gICAgICAgImNrLmhvc3R0eXBlID0gJ21hbmFnZW1lbnRub2RlJyI7CiAJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCQkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkJCSRzZWNyZXRpZHNldFskcm93WydtbmlkJ11dWyRuZXdzZWNyZXRpZF0gPSAxOwogCQkJCQkkdmFsdWVzID0gZ2V0TU5jcnlwdGtleVVwZGF0ZXMoJHNlY3JldGlkc2V0LCAkY3J5cHRrZXlpZCk7CiAJCQkJCWFkZENyeXB0U2VjcmV0S2V5VXBkYXRlcygkdmFsdWVzKTsKQEAgLTI0Miw2ICsyNDQsOSBAQAogCQkJIyBkbnNzZXJ2ZXJzCiAJCQlpZigkZGF0YVsnZG5zc2VydmVycyddICE9ICRvbGRkYXRhWydkbnNzZXJ2ZXJzJ10pCiAJCQkJJHVwZGF0ZXNbXSA9ICJkbnNTZXJ2ZXJzID0gJ3skZGF0YVsnZG5zc2VydmVycyddfSciOworCQkJIyB1c2VkYmhvc3RuYW1lcworCQkJaWYoJGRhdGFbJ3VzZWRiaG9zdG5hbWVzJ10gIT0gJG9sZGRhdGFbJ3VzZWRiaG9zdG5hbWVzJ10pCisJCQkgICAgJHVwZGF0ZXNbXSA9ICJ1c2VkYmhvc3RuYW1lcyA9IHskZGF0YVsndXNlZGJob3N0bmFtZXMnXX0iOwogCQkJaWYoY291bnQoJHVwZGF0ZXMpKSB7CiAJCQkJJHF1ZXJ5ID0gIlVQREFURSBhZGRvbWFpbiBTRVQgIgogCQkJCSAgICAgICAuIGltcGxvZGUoJywgJywgJHVwZGF0ZXMpCkBAIC0zNDYsMTQgKzM1MSwxNiBAQAogCQkJCS4JInVzZXJuYW1lLCAiCiAJCQkJLgkicGFzc3dvcmQsICIKIAkJCQkuCSJzZWNyZXRpZCwgIgotCQkJCS4JImRuc1NlcnZlcnMpICIKKwkJCQkuCSJkbnNTZXJ2ZXJzLCAiCisJCQkJLgkidXNlZGJob3N0bmFtZXMpICIKIAkJCQkuCSJWQUxVRVMgKCd7JGRhdGFbJ25hbWUnXX0nLCAiCiAJCQkJLgkiJG93bmVyaWQsICIKIAkJCQkuCSIneyRkYXRhWydkb21haW5kbnNuYW1lJ119JywgIgogCQkJCS4JIid7JGRhdGFbJ3VzZXJuYW1lJ119JywgIgogCQkJCS4JIickZW5jcGFzcycsICIKIAkJCQkuCSIkc2VjcmV0aWQsICIKLQkJCQkuCSIneyRkYXRhWydkbnNzZXJ2ZXJzJ119JykiOworCQkJCS4JIid7JGRhdGFbJ2Ruc3NlcnZlcnMnXX0nLCAiCisJCQkJLgkiJ3skZGF0YVsndXNlZGJob3N0bmFtZXMnXX0nKSI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKIAogCQkkcnNjaWQgPSBkYkxhc3RJbnNlcnRJRCgpOwpAQCAtNDIzLDE0ICs0MzAsMTYgQEAKIAkJJGVycm1zZyA9IGkoIlBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNCBjaGFyYWN0ZXJzIGxvbmciKTsKIAkJJGggLj0gbGFiZWxlZEZvcm1JdGVtKCdwYXNzd29yZCcsIGkoJ1Bhc3N3b3JkJyksICdwYXNzd29yZCcsICdeLns0LDI1Nn0kJywgMSwgJycsICRlcnJtc2csICcnLCAnJywgJzIwMHB4Jyk7IAogCQkjIGNvbmZpcm0gcGFzc3dvcmQKLQkJJGggLj0gbGFiZWxlZEZvcm1JdGVtKCdwYXNzd29yZDInLCBpKCdDb25maXJtIFBhc3N3b3JkJyksICdwYXNzd29yZCcsICcnLCAxLCAnJywgJycsICcnLCAnJywgJzIwMHB4Jyk7IAorCQkkaCAuPSBsYWJlbGVkRm9ybUl0ZW0oJ3Bhc3N3b3JkMicsIGkoJ0NvbmZpcm0gUGFzc3dvcmQnKSwgJ3Bhc3N3b3JkJywgJycsIDEsICcnLCAnJywgJycsICcnLCAnMjAwcHgnKTsKKwkJIyB1c2UgZGF0YWJhc2UgaG9zdG5hbWUgY2hlY2tib3gKKwkJJGggLj0gbGFiZWxlZEZvcm1JdGVtKCd1c2VkYmhvc3RuYW1lcycsIGkoJ1VzZSBEYXRhYmFzZSBIb3N0bmFtZXMnKSwgJ2NoZWNrJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsIGhlbHBJY29uKCd1c2VkYmhvc3RuYW1lc2hlbHAnKSk7CiAJCSRoIC49ICI8YnI+XG4iOwogCQkjIGRucyBzZXJ2ZXIgbGlzdAogCQkkaXByZWcgPSAnKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPyknOwogCQkkcmVnID0gIl4oJGlwcmVnLCkqKCRpcHJlZykkIjsKIAkJJGVycm1zZyA9IGkoIkludmFsaWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQgLSBtdXN0IGJlIGEgdmFsaWQgSVBWNCBhZGRyZXNzIik7CiAJCSRoIC49IGxhYmVsZWRGb3JtSXRlbSgnZG5zc2VydmVycycsIGkoJ0ROUyBTZXJ2ZXIocyknKSwgJ3RleHQnLCAkcmVnLCAwLCAnJywgJGVycm1zZywKLQkJICAgICAgICAgICAgICAgICAgICAgICcnLCAnJywgJzMwMHB4JywgaGVscEljb24oJ2Ruc3NlcnZlcnNoZWxwJykpOyAKKwkJICAgICAgICAgICAgICAgICAgICAgICcnLCAnJywgJzMwMHB4JywgaGVscEljb24oJ2Ruc3NlcnZlcnNoZWxwJykpOwogCiAJCSRoIC49ICI8L2Rpdj5cbiI7ICMgY2VudGVyCiAJCSRoIC49ICI8L2Rpdj5cbiI7ICMgYWRkb21haW5kbGdjb250ZW50CkBAIC00NzMsNiArNDgyLDcgQEAKIAkJJGggLj0gaGVscFRvb2x0aXAoJ2RvbWFpbmRuc25hbWVoZWxwJywgaSgiZG9tYWluIG5hbWUgcmVnaXN0ZXJlZCBpbiBETlMgZm9yIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluIChleDogYWQuZXhhbXBsZS5jb20pIikpOwogCQkkaCAuPSBoZWxwVG9vbHRpcCgndXNlcm5hbWVoZWxwJywgaSgiVGhlc2UgY3JlZGVudGlhbHMgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHJlc2VydmVkIGNvbXB1dGVycyB3aXRoIEFELiIpKTsKIAkJJGggLj0gaGVscFRvb2x0aXAoJ2Ruc3NlcnZlcnNoZWxwJywgaSgiY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIGZvciBETlMgc2VydmVycyB0aGF0IGhhbmRsZSBEb21haW4gRE5TIikpOworCQkkaCAuPSBoZWxwVG9vbHRpcCgndXNlZGJob3N0bmFtZXNoZWxwJywgaSgiQ2hlY2sgdGhpcyBvcHRpb24gaWYgeW91IGxpa2UgdG8gaGF2ZSB0aGUgY29tcHV0ZXIgb2JqZWN0IG5hbWVzIHdpdGhpbiBBRCB0byBtYXRjaCBWTSBob3N0bmFtZSBzdG9yZWQgd2l0aGluIHRoZSBWQ0wgZGF0YWJhc2UiKSk7CiAJCSRoIC49ICI8L2Rpdj5cbiI7ICMgdG9vbHRpcHMKIAogCQlyZXR1cm4gJGg7CkBAIC01MTAsNiArNTIwLDcgQEAKIAkJJHJldHVyblsicGFzc3dvcmQiXSA9ICRfUE9TVFsncGFzc3dvcmQnXTsKIAkJJHJldHVyblsicGFzc3dvcmQyIl0gPSAkX1BPU1RbJ3Bhc3N3b3JkMiddOwogCQkkcmV0dXJuWyJkbnNzZXJ2ZXJzIl0gPSBwcm9jZXNzSW5wdXRWYXIoImRuc3NlcnZlcnMiLCBBUkdfU1RSSU5HKTsKKwkJJHJldHVyblsidXNlZGJob3N0bmFtZXMiXSA9IHByb2Nlc3NJbnB1dFZhcigndXNlZGJob3N0bmFtZXMnLCBBUkdfTlVNRVJJQywgMCk7CiAKIAkJaWYoISBwcmVnX21hdGNoKCIvXihbQS1aYS16MC05LSFAIyQlXiZcKlwoXClfPVwrXFtcXXt9XFxcfDo7LFwuXC9cP35gIF0pezIsMzB9JC8iLCAkcmV0dXJuWyduYW1lJ10pKSB7CiAJCQkkcmV0dXJuWydlcnJvciddID0gMTsKQEAgLTUxOSwxMCArNTMwLDYgQEAKIAkJCSRyZXR1cm5bJ2Vycm9yJ10gPSAxOwogCQkJJGVycm9ybXNnW10gPSBpKCJBbiBBRCBkb21haW4gYWxyZWFkeSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuIik7CiAJCX0KLQkJZWxzZWlmKCR0aGlzLT5jaGVja0V4aXN0aW5nRmllbGQoJ2RvbWFpbkROU05hbWUnLCAkcmV0dXJuWydkb21haW5kbnNuYW1lJ10sICRyZXR1cm5bJ3JzY2lkJ10pKSB7Ci0JCQkkcmV0dXJuWydlcnJvciddID0gMTsKLQkJCSRlcnJvcm1zZ1tdID0gaSgiQW4gQUQgZG9tYWluIGFscmVhZHkgZXhpc3RzIHdpdGggdGhpcyBEb21haW4gRE5TIE5hbWUuIik7Ci0JCX0KIAkJaWYoISB2YWxpZGF0ZVVzZXJpZCgkcmV0dXJuWydvd25lciddKSkgewogCQkJJHJldHVyblsnZXJyb3InXSA9IDE7CiAJCQkkZXJyb3Jtc2dbXSA9IGkoIlN1Ym1pdHRlZCBvd25lciBpcyBub3QgdmFsaWQiKTsKQEAgLTU1OCw2ICs1NjUsOSBAQAogCQkJfQogCQl9CiAKKwkJaWYoJHJldHVyblsndXNlZGJob3N0bmFtZXMnXSAhPSAwICYmICRyZXR1cm5bJ3VzZWRiaG9zdG5hbWVzJ10gIT0gMSkKKwkJCSRyZXR1cm5bJ3VzZWRiaG9zdG5hbWVzJ10gPSAwOworCiAJCWlmKCRyZXR1cm5bJ2Vycm9yJ10pCiAJCQkkcmV0dXJuWydlcnJvcm1zZyddID0gaW1wbG9kZSgnPGJyPicsICRlcnJvcm1zZyk7CiAKQEAgLTU4Niw3ICs1OTYsNyBAQAogCQkgICAgICAgLiAgICAgICAiaWEuaW1hZ2VpZCA9IGkuaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRpbWFnZXMgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJGltYWdlc1tdID0gJHJvd1sncHJldHR5bmFtZSddOwogCQlpZihjb3VudCgkaW1hZ2VzKSkKIAkJCSRtc2cgPSAiVGhpcyBBRCBEb21haW4gY2Fubm90IGJlIGRlbGV0ZWQgYmVjYXVzZSB0aGUgZm9sbG93aW5nIDxzdHJvbmc+aW1hZ2VzPC9zdHJvbmc+IGFyZSB1c2luZyBpdDo8YnI+PGJyPlxuIiAuIGltcGxvZGUoIjxicj5cbiIsICRpbWFnZXMpOwpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvYXV0aGVudGljYXRpb24ucGhwIGIvd2ViLy5odC1pbmMvYXV0aGVudGljYXRpb24ucGhwCmluZGV4IDVjOTMzYWEuLmNiNzI1MzQgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL2F1dGhlbnRpY2F0aW9uLnBocAorKysgYi93ZWIvLmh0LWluYy9hdXRoZW50aWNhdGlvbi5waHAKQEAgLTE5LDEzICsxOSwyMSBAQAogLyoqCiAgKiBcZmlsZQogICovCisKKyRhdXRoRnVuY3NbJ2xvY2FsJ10gPSBhcnJheSgndGVzdCcgPT4gZnVuY3Rpb24oKSB7cmV0dXJuIDA7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aCcgPT4gZnVuY3Rpb24oKSB7cmV0dXJuIE5VTEw7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5hdXRoJyA9PiAndW5hdXRoTG9jYWwnKTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLwotLy8vIFxmbiBnZXRBdXRoQ29va2llRGF0YSgkbG9naW5pZCwgJHZhbGlkKQorLy8vIFxmbiBnZXRBdXRoQ29va2llRGF0YSgkbG9naW5pZCwgJGF1dGh0eXBlLCAkdmFsaWQsICRzaGliYXV0aGlkKQogLy8vCiAvLy8gXHBhcmFtICRsb2dpbmlkIC0gbG9naW4gaWQgZm9yIHVzZXIKKy8vLyBccGFyYW0gJGF1dGh0eXBlIC0gdHlwZSBvZiBhdXRoZW50aWNhdGlvbiB1c2VkOyBzaG91bGQgYmUgYW4gaW5kZXggZnJvbSB0aGUKKy8vLyBnbG9iYWwgJGF1dGhGdW5jcyBhcnJheQogLy8vIFxwYXJhbSAkdmFsaWQgLSAob3B0aW9uYWwsIGRlZmF1bHQ9NjAwKSAtIHRpbWUgaW4gbWludXRlcyB0aGUgY29va2llCiAvLy8gc2hvdWxkIGJlIHZhbGlkCisvLy8gXHBhcmFtICRzaGliYXV0aGlkIC0gKG9wdGlvbmFsKSBpZCBvZiBzaGliYm9sZXRoIHNlc3Npb24KIC8vLwogLy8vIFxyZXR1cm4gb24gZmFpbHVyZSwgYW4gZXJyb3IgbWVzc2FnZTsgb24gc3VjY2VzcywgYW4gYXJyYXkgd2l0aCAyIGVsZW1lbnRzOlxuCiAvLy8gZGF0YSAtIGVuY3J5cHRlZCBwYXlsb2FkIGZvciBhdXRoIGNvb2tpZVxuCkBAIC0zNSwxNiArNDMsMTYgQEAKIC8vLyBhIHRpbWVzdGFtcAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotZnVuY3Rpb24gZ2V0QXV0aENvb2tpZURhdGEoJGxvZ2luaWQsICR2YWxpZD02MDAsICRzaGliYXV0aGlkPTApIHsKK2Z1bmN0aW9uIGdldEF1dGhDb29raWVEYXRhKCRsb2dpbmlkLCAkYXV0aHR5cGUsICR2YWxpZD02MDAsICRzaGliYXV0aGlkPTApIHsKIAlnbG9iYWwgJGtleXM7CiAJJHRzID0gdGltZSgpICsgKCR2YWxpZCAqIDYwKTsKIAkkcmVtb3RlSVAgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsKIAlpZihlbXB0eSgkcmVtb3RlSVApKQogCQlyZXR1cm4gIkZhaWxlZCB0byBvYnRhaW4gcmVtb3RlIElQIGFkZHJlc3MgZm9yIGZpeGVkIGNvb2tpZSB0eXBlIjsKIAlpZigkc2hpYmF1dGhpZCkKLQkJJGNkYXRhID0gIiRsb2dpbmlkfCRyZW1vdGVJUHwkdHN8JHNoaWJhdXRoaWQiOworCQkkY2RhdGEgPSAiJGxvZ2luaWR8JHJlbW90ZUlQfCR0c3wkYXV0aHR5cGV8JHNoaWJhdXRoaWQiOwogCWVsc2UKLQkJJGNkYXRhID0gIiRsb2dpbmlkfCRyZW1vdGVJUHwkdHMiOworCQkkY2RhdGEgPSAiJGxvZ2luaWR8JHJlbW90ZUlQfCR0c3wkYXV0aHR5cGUiOwogCiAJIyAyNDUgY2hhcmFjdGVycyBjYW4gYmUgZW5jcnlwdGVkOyBhbnl0aGluZyBvdmVyIHRoYXQsIGFuZAogCSMgICBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCB3aWxsIGZhaWwKQEAgLTc1LDIzICs4MywzNiBAQAogCWVsc2UKIAkJJGNvb2tpZSA9ICRfQ09PS0lFWyJWQ0xBVVRIIl07CiAJJGNvb2tpZSA9IGJhc2U2NF9kZWNvZGUoJGNvb2tpZSk7Ci0gICBpZighIG9wZW5zc2xfcHVibGljX2RlY3J5cHQoJGNvb2tpZSwgJHRtcCwgJGtleXNbJ3B1YmxpYyddKSkgewotICAgICAgJEFVVEhFUlJPUlsiY29kZSJdID0gMzsKLSAgICAgICRBVVRIRVJST1JbIm1lc3NhZ2UiXSA9ICJGYWlsZWQgdG8gZGVjcnlwdCBhdXRoIGNvb2tpZSI7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgIH0KKwlpZighIG9wZW5zc2xfcHVibGljX2RlY3J5cHQoJGNvb2tpZSwgJHRtcCwgJGtleXNbJ3B1YmxpYyddKSkgeworCQkjIGNvb2tpZSBpcyBpbnZhbGlkOyBjbGVhciBpdCBhbmQgcmV0dXJuIE5VTEwgc28gd2lsbCBnZXQgcmVkaXJlY3RlZCB0byBsb2cgaW4gYWdhaW4KKwkJc2V0Y29va2llKCJWQ0xBVVRIIiwgIiIsIHRpbWUoKSAtIDEwLCAiLyIsIENPT0tJRURPTUFJTik7CisJCSRBVVRIRVJST1JbImNvZGUiXSA9IDM7CisJCSRBVVRIRVJST1JbIm1lc3NhZ2UiXSA9ICJGYWlsZWQgdG8gZGVjcnlwdCBhdXRoIGNvb2tpZSI7CisJCXJldHVybiBOVUxMOworCX0KIAotICAgJHRtcGFyciA9IGV4cGxvZGUoJ3wnLCAkdG1wKTsKKwkjICRsb2dpbmlkfCRyZW1vdGVJUHwkdHN8JGF1dGh0eXBlfCRzaGliYXV0aGlkIChzaGliYXV0aGQgb3B0aW9uYWwpCisJJHRtcGFyciA9IGV4cGxvZGUoJ3wnLCAkdG1wKTsKIAkkbG9naW5pZCA9ICR0bXBhcnJbMF07CiAJJHJlbW90ZUlQID0gJHRtcGFyclsxXTsKIAkkdHMgPSAkdG1wYXJyWzJdOwotCWlmKGNvdW50KCR0bXBhcnIpID4gMykgewotCQkkc2hpYmF1dGhlZCA9ICR0bXBhcnJbM107Ci0JCisKKwkjIGNoZWNrIGZvciBvbGQgc3R5bGUgYXV0aCBjb29raWUgYmVmb3JlICRhdXRodHlwZSB3YXMgaW5jbHVkZWQKKwlpZihjb3VudCgkdG1wYXJyKSA8IDQgfHwgaXNfbnVtZXJpYygkdG1wYXJyWzNdKSkgeworCQkjIGxvZyB1c2VyIG91dCB0byBnZXQgbmV3IHN0eWxlIGF1dGggY29va2llCisJCXNldGNvb2tpZSgiVkNMQVVUSCIsICIiLCB0aW1lKCkgLSAxMCwgIi8iLCBDT09LSUVET01BSU4pOworCQlzdG9wU2Vzc2lvbigpOworCQlkYkRpc2Nvbm5lY3QoKTsKKwkJaGVhZGVyKCJMb2NhdGlvbjogIiAuIEJBU0VVUkwpOworCQlleGl0OworCX0KKwlpZihjb3VudCgkdG1wYXJyKSA+IDQpIHsKKwkJJHNoaWJhdXRoZWQgPSAkdG1wYXJyWzVdOworCiAJCSMgY2hlY2sgdG8gc2VlIGlmIHNoaWJhdXRoIGVudHJ5IHN0aWxsIGV4aXN0cyBmb3IgJHNoaWJhdXRoZWQKIAkJJHF1ZXJ5ID0gIlNFTEVDVCB0cyBGUk9NIHNoaWJhdXRoIFdIRVJFIGlkID0gJHNoaWJhdXRoZWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkc2hpYnN0YXJ0ID0gJHJvd1sndHMnXTsKIAkJCSMgVE9ETyBpZiAkc2hpYnN0YXJ0IGlzIHRvbyBvbGQsIGV4cGlyZSB0aGUgbG9naW4gc2Vzc2lvbgogCQl9CkBAIC0xMDUsMTkgKzEyNiw2MSBAQAogCQl9CiAJfQogCi0gICBpZigkdHMgPCB0aW1lKCkpIHsKLSAgICAgICRBVVRIRVJST1JbImNvZGUiXSA9IDQ7Ci0gICAgICAkQVVUSEVSUk9SWyJtZXNzYWdlIl0gPSAiQXV0aCBjb29raWUgaGFzIGV4cGlyZWQiOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICB9Ci0gICBpZigkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSAhPSAkcmVtb3RlSVApIHsKLSAgICAgIC8vc2V0Y29va2llKCJJVEVDU0FVVEgiLCAiIiwgdGltZSgpIC0gMTAsICIvIiwgQ09PS0lFRE9NQUlOKTsKLSAgICAgICRBVVRIRVJST1JbImNvZGUiXSA9IDQ7Ci0gICAgICAkQVVUSEVSUk9SWyJtZXNzYWdlIl0gPSAicmVtb3RlIElQIGluIGF1dGggY29va2llIGRvZXNuJ3QgbWF0Y2ggdXNlcidzIHJlbW90ZSBJUCI7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgIH0KKwlpZigkdHMgPCB0aW1lKCkpIHsKKwkJIyBjb29raWUgaXMgZXhwaXJlZDsgY2xlYXIgaXQgYW5kIHJldHVybiBOVUxMIHNvIHdpbGwgZ2V0IHJlZGlyZWN0ZWQgdG8gbG9nIGluIGFnYWluCisJCXNldGNvb2tpZSgiVkNMQVVUSCIsICIiLCB0aW1lKCkgLSAxMCwgIi8iLCBDT09LSUVET01BSU4pOworCQkkQVVUSEVSUk9SWyJjb2RlIl0gPSA0OworCQkkQVVUSEVSUk9SWyJtZXNzYWdlIl0gPSAiQXV0aCBjb29raWUgaGFzIGV4cGlyZWQiOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0gIT0gJHJlbW90ZUlQKSB7CisJCSMgY29va2llIGhhcyB3cm9uZyBJUDsgY2xlYXIgaXQgYW5kIHJldHVybiBOVUxMIHNvIHdpbGwgZ2V0IHJlZGlyZWN0ZWQgdG8gbG9nIGluIGFnYWluCisJCXNldGNvb2tpZSgiVkNMQVVUSCIsICIiLCB0aW1lKCkgLSAxMCwgIi8iLCBDT09LSUVET01BSU4pOworCQkkQVVUSEVSUk9SWyJjb2RlIl0gPSA0OworCQkkQVVUSEVSUk9SWyJtZXNzYWdlIl0gPSAicmVtb3RlIElQIGluIGF1dGggY29va2llIGRvZXNuJ3QgbWF0Y2ggdXNlcidzIHJlbW90ZSBJUCI7CisJCXJldHVybiBOVUxMOworCX0KIAotICAgcmV0dXJuICRsb2dpbmlkOworCXJldHVybiAkbG9naW5pZDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLworLy8vIFxmbiBnZXRBdXRoVHlwZUZyb21BdXRoQ29va2llKCkKKy8vLworLy8vIFxyZXR1cm4gb24gc3VjY2VzcywgdHlwZSBvZiBhdXRoZW50aWNhdGlvbiB1c2VkOyBOVUxMIG9uIGZhaWx1cmUKKy8vLworLy8vIFxicmllZiBwYXJzZXMgdGhlIFZDTEFVVEggY29va2llIHRvIGdldCB0aGUgYXV0aHR5cGUgc2F2ZWQgaW4gaXQKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdldEF1dGhUeXBlRnJvbUF1dGhDb29raWUoKSB7CisJZ2xvYmFsICRrZXlzLCAkQVVUSEVSUk9SOworCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygnVkNMQVVUSCcsICRfQ09PS0lFKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKKwkJJGNvb2tpZSA9IHN0cmlwc2xhc2hlcygkX0NPT0tJRVsiVkNMQVVUSCJdKTsKKwllbHNlCisJCSRjb29raWUgPSAkX0NPT0tJRVsiVkNMQVVUSCJdOworCSRjb29raWUgPSBiYXNlNjRfZGVjb2RlKCRjb29raWUpOworCWlmKCEgb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCgkY29va2llLCAkdG1wLCAka2V5c1sncHVibGljJ10pKSB7CisJCSRBVVRIRVJST1JbImNvZGUiXSA9IDM7CisJCSRBVVRIRVJST1JbIm1lc3NhZ2UiXSA9ICJGYWlsZWQgdG8gZGVjcnlwdCBhdXRoIGNvb2tpZSI7CisJCXJldHVybiBOVUxMOworCX0KKworCSMgJGxvZ2luaWR8JHJlbW90ZUlQfCR0c3wkYXV0aHR5cGV8JHNoaWJhdXRoaWQgKHNoaWJhdXRoZCBvcHRpb25hbCkKKwkkdG1wYXJyID0gZXhwbG9kZSgnfCcsICR0bXApOworCSRyZW1vdGVJUCA9ICR0bXBhcnJbMV07CisJJGF1dGh0eXBlID0gJHRtcGFyclszXTsKKworCWlmKCRfU0VSVkVSWyJSRU1PVEVfQUREUiJdICE9ICRyZW1vdGVJUCkgeworCQkvL3NldGNvb2tpZSgiSVRFQ1NBVVRIIiwgIiIsIHRpbWUoKSAtIDEwLCAiLyIsIENPT0tJRURPTUFJTik7CisJCSRBVVRIRVJST1JbImNvZGUiXSA9IDQ7CisJCSRBVVRIRVJST1JbIm1lc3NhZ2UiXSA9ICJyZW1vdGUgSVAgaW4gYXV0aCBjb29raWUgZG9lc24ndCBtYXRjaCB1c2VyJ3MgcmVtb3RlIElQIjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuICRhdXRodHlwZTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM1MSwxMjAgKzQxNCw2IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8KLS8vLyBcZm4gbGRhcExvZ2luKCRhdXRodHlwZSwgJHVzZXJpZCwgJHBhc3N3ZCkKLS8vLwotLy8vIFxwYXJhbSAkYXV0aHR5cGUgLSBpbmRleCBmcm9tICRhdXRoTWVjaHMgYXJyYXkKLS8vLyBccGFyYW0gJHVzZXJpZCAtIHVzZXJpZCB3aXRob3V0IGFmZmlsaWF0aW9uCi0vLy8gXHBhcmFtICRwYXNzd2QgLSBzdWJtaXR0ZWQgcGFzc3dvcmQKLS8vLwotLy8vIFxicmllZiB0cmllcyB0byBhdXRoZW50aWNhdGUgdXNlciB2aWEgbGRhcDsgY2FsbHMgcHJpbnRMb2dpblBhZ2VXaXRoU2tpbiBpZgotLy8vIGF1dGhlbnRpY2F0aW9uIGZhaWxzCi0vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1mdW5jdGlvbiBsZGFwTG9naW4oJGF1dGh0eXBlLCAkdXNlcmlkLCAkcGFzc3dkKSB7Ci0JZ2xvYmFsICRIVE1MaGVhZGVyLCAkcHJpbnRlZEhUTUxoZWFkZXIsICRhdXRoTWVjaHMsICRwaHBWZXI7Ci0JJGVzY191c2VyaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJpZCk7Ci0JaWYoISAkZmggPSBmc29ja29wZW4oJGF1dGhNZWNoc1skYXV0aHR5cGVdWydzZXJ2ZXInXSwgNjM2LCAkZXJybm8sICRlcnJzdHIsIDUpKSB7Ci0JCXByaW50TG9naW5QYWdlV2l0aFNraW4oJGF1dGh0eXBlLCAxKTsKLQkJcmV0dXJuOwotCX0KLQlmY2xvc2UoJGZoKTsKLQkkZHMgPSBsZGFwX2Nvbm5lY3QoImxkYXBzOi8veyRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnc2VydmVyJ119LyIpOwotCWlmKCEgJGRzKSB7Ci0JCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10sIDApOwotCQlwcmludCAkSFRNTGhlYWRlcjsKLQkJJHByaW50ZWRIVE1MaGVhZGVyID0gMTsKLQkJc2VsZWN0QXV0aCgpOwotCQlyZXR1cm47Ci0JfQotCWxkYXBfc2V0X29wdGlvbigkZHMsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sIDMpOwotCWxkYXBfc2V0X29wdGlvbigkZHMsIExEQVBfT1BUX1JFRkVSUkFMUywgMCk7Ci0JaWYoYXJyYXlfa2V5X2V4aXN0cygnbG9va3VwdXNlcmJlZm9yZWF1dGgnLCAkYXV0aE1lY2hzWyRhdXRodHlwZV0pICYmCi0JICAgJGF1dGhNZWNoc1skYXV0aHR5cGVdWydsb29rdXB1c2VyYmVmb3JlYXV0aCddICYmCi0JICAgYXJyYXlfa2V5X2V4aXN0cygnbG9va3VwdXNlcmZpZWxkJywgJGF1dGhNZWNoc1skYXV0aHR5cGVdKSkgewotCQkjIGluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0byBsb29rIHVwIHdoYXQgcGFydCBvZiB0aGUgdHJlZSB0aGUgdXNlciBpcyBpbgotCQkjICAgYmVmb3JlIHdlIGNhbiBhY3R1YWxseSBsb29rIHVwIHRoZSB1c2VyCi0JCSRhdXRoID0gJGF1dGhNZWNoc1skYXV0aHR5cGVdOwotCQlpZihhcnJheV9rZXlfZXhpc3RzKCdtYXN0ZXJsb2dpbicsICRhdXRoKSAmJiBzdHJsZW4oJGF1dGhbJ21hc3RlcmxvZ2luJ10pKQotCQkJJHJlcyA9IGxkYXBfYmluZCgkZHMsICRhdXRoWydtYXN0ZXJsb2dpbiddLCAkYXV0aFsnbWFzdGVycHdkJ10pOwotCQllbHNlCi0JCQkkcmVzID0gbGRhcF9iaW5kKCRkcyk7Ci0JCWlmKCEgJHJlcykgewotCQkJYWRkTG9naW5Mb2coJHVzZXJpZCwgJGF1dGh0eXBlLCAkYXV0aFsnYWZmaWxpYXRpb25pZCddLCAwKTsKLQkJCXByaW50TG9naW5QYWdlV2l0aFNraW4oJGF1dGh0eXBlKTsKLQkJCXJldHVybjsKLQkJfQotCQkkc2VhcmNoID0gbGRhcF9zZWFyY2goJGRzLAotCQkgICAgICAgICAgICAgICAgICAgICAgJGF1dGhbJ2JpbmRkbiddLCAKLQkJICAgICAgICAgICAgICAgICAgICAgICJ7JGF1dGhbJ2xvb2t1cHVzZXJmaWVsZCddfT0kdXNlcmlkIiwKLQkJICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdkbicpLCAwLCAzLCAxNSk7Ci0JCWlmKCRzZWFyY2gpIHsKLQkJCSR0bXBkYXRhID0gbGRhcF9nZXRfZW50cmllcygkZHMsICRzZWFyY2gpOwotCQkJaWYoISAkdG1wZGF0YVsnY291bnQnXSB8fCAhIGFycmF5X2tleV9leGlzdHMoJ2RuJywgJHRtcGRhdGFbMF0pKSB7Ci0JCQkJYWRkTG9naW5Mb2coJHVzZXJpZCwgJGF1dGh0eXBlLCAkYXV0aFsnYWZmaWxpYXRpb25pZCddLCAwKTsKLQkJCQlwcmludExvZ2luUGFnZVdpdGhTa2luKCRhdXRodHlwZSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJJGxkYXB1c2VyID0gJHRtcGRhdGFbMF1bJ2RuJ107Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhZGRMb2dpbkxvZygkdXNlcmlkLCAkYXV0aHR5cGUsICRhdXRoWydhZmZpbGlhdGlvbmlkJ10sIDApOwotCQkJcHJpbnRMb2dpblBhZ2VXaXRoU2tpbigkYXV0aHR5cGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWVsc2UKLQkJJGxkYXB1c2VyID0gc3ByaW50ZigkYXV0aE1lY2hzWyRhdXRodHlwZV1bJ3VzZXJpZCddLCAkdXNlcmlkKTsKLQkkcmVzID0gbGRhcF9iaW5kKCRkcywgJGxkYXB1c2VyLCAkcGFzc3dkKTsKLQlpZighICRyZXMpIHsKLQkJLy8gbG9naW4gZmFpbGVkCi0JCSRlcnIgPSBsZGFwX2Vycm9yKCRkcyk7Ci0JCWlmKCRlcnIgPT0gJ0ludmFsaWQgY3JlZGVudGlhbHMnKQotCQkJYWRkTG9naW5Mb2coJHVzZXJpZCwgJGF1dGh0eXBlLCAkYXV0aE1lY2hzWyRhdXRodHlwZV1bJ2FmZmlsaWF0aW9uaWQnXSwgMCwgJGVycik7Ci0JCWVsc2UKLQkJCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10sIDApOwotCQlwcmludExvZ2luUGFnZVdpdGhTa2luKCRhdXRodHlwZSk7Ci0JCXJldHVybjsKLQl9Ci0JZWxzZSB7Ci0JCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10sIDEpOwotCQkjIHVzZWQgdG8gcmVseSBvbiBsYXRlciBjb2RlIHRvIHVwZGF0ZSB1c2VyIGluZm8gaWYgdXBkYXRlIHRpbWVzdGFtcCB3YXMgZXhwaXJlZAotCQkvLyBzZWUgaWYgdXNlciBpbiBvdXIgZGIKLQkJLyokcXVlcnkgPSAiU0VMRUNUIGlkICIKLQkJICAgICAgIC4gIkZST00gdXNlciAiCi0JCSAgICAgICAuICJXSEVSRSB1bml0eWlkID0gJyRlc2NfdXNlcmlkJyBBTkQgIgotCQkgICAgICAgLiAgICAgICAiYWZmaWxpYXRpb25pZCA9IHskYXV0aE1lY2hzWyRhdXRodHlwZV1bJ2FmZmlsaWF0aW9uaWQnXX0iOwotCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoISBteXNxbF9udW1fcm93cygkcWgpKSB7Ci0JCQkvLyBpZiBub3QsIGFkZCB1c2VyCi0JCQkkbmV3aWQgPSB1cGRhdGVMREFQVXNlcigkYXV0aHR5cGUsICR1c2VyaWQpOwotCQkJaWYoaXNfbnVsbCgkbmV3aWQpKQotCQkJCWFib3J0KDgpOwotCQl9Ki8KLQkJIyBub3csIHdlIGFsd2F5cyB1cGRhdGUgdGhlIHVzZXIgaW5mbwotCQkkbmV3aWQgPSB1cGRhdGVMREFQVXNlcigkYXV0aHR5cGUsICR1c2VyaWQpOwotCQlpZihpc19udWxsKCRuZXdpZCkpCi0JCQlhYm9ydCg4KTsKLQkJLy8gZ2V0IGNvb2tpZSBkYXRhCi0JCSRjb29raWUgPSBnZXRBdXRoQ29va2llRGF0YSgiJHVzZXJpZEAiIC4gZ2V0QWZmaWxpYXRpb25OYW1lKCRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddKSk7Ci0JCS8vIHNldCBjb29raWUKLQkJaWYodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAiNS4yIiwgIj49IikgPT0gdHJ1ZSkKLQkJCXNldGNvb2tpZSgiVkNMQVVUSCIsICJ7JGNvb2tpZVsnZGF0YSddfSIsIDAsICIvIiwgQ09PS0lFRE9NQUlOLCAwLCAxKTsKLQkJZWxzZQotCQkJc2V0Y29va2llKCJWQ0xBVVRIIiwgInskY29va2llWydkYXRhJ119IiwgMCwgIi8iLCBDT09LSUVET01BSU4sIDApOwotCQkjIHNldCBza2luIGNvb2tpZSBiYXNlZCBvbiBhZmZpbGlhdGlvbgotCQkkc2tpbiA9IGdldEFmZmlsaWF0aW9uVGhlbWUoJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10pOwotCQkkdWNza2luID0gc3RydG91cHBlcigkc2tpbik7Ci0JCXNldGNvb2tpZSgiVkNMU0tJTiIsICIkdWNza2luIiwgKHRpbWUoKSArIChTRUNJTkRBWSAqIDMxKSksICIvIiwgQ09PS0lFRE9NQUlOKTsKLQkJLy8gcmVkaXJlY3QgdG8gbWFpbiBwYWdlCi0JCWhlYWRlcigiTG9jYXRpb246ICIgLiBCQVNFVVJMIC4gU0NSSVBUKTsKLQkJZGJEaXNjb25uZWN0KCk7Ci0JCWV4aXQ7Ci0JfQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vCiAvLy8gXGZuIGxvY2FsTG9naW4oJHVzZXJpZCwgJHBhc3N3ZCwgJGF1dGh0eXBlKQogLy8vCiAvLy8gXHBhcmFtICR1c2VyaWQgLSB1c2VyaWQgd2l0aG91dCBhZmZpbGlhdGlvbgpAQCAtNDgwLDcgKzQyOSw3IEBACiAJaWYodmFsaWRhdGVMb2NhbEFjY291bnQoJHVzZXJpZCwgJHBhc3N3ZCkpIHsKIAkJYWRkTG9naW5Mb2coJHVzZXJpZCwgJGF1dGh0eXBlLCAkYXV0aE1lY2hzWyRhdXRodHlwZV1bJ2FmZmlsaWF0aW9uaWQnXSwgMSk7CiAJCS8vc2V0IGNvb2tpZQotCQkkY29va2llID0gZ2V0QXV0aENvb2tpZURhdGEoIiR1c2VyaWRAbG9jYWwiKTsKKwkJJGNvb2tpZSA9IGdldEF1dGhDb29raWVEYXRhKCIkdXNlcmlkQGxvY2FsIiwgJ2xvY2FsJyk7CiAJCWlmKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgIjUuMiIsICI+PSIpID09IHRydWUpCiAJCQlzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAwLCAiLyIsIENPT0tJRURPTUFJTiwgMCwgMSk7CiAJCWVsc2UKQEAgLTUwMyw2ICs0NTIsMjQgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLworLy8vIFxmbiB1bmF1dGhMb2NhbAorLy8vCisvLy8gXHBhcmFtICRtb2RlIC0gaGVhZGVycyBvciBjb250ZW50CisvLy8KKy8vLyBcYnJpZWYgZm9yIGhlYWRlcnMsIHNpbXBseSByZXR1cm5zOyBmb3IgY29udGVudCwgcHJpbnRzIGluZm9ybWF0aW9uIHRoYXQKKy8vLyB1c2VyIGhhcyBiZWVuIGxvZ2dlZCBvdXQ7IFZDTEFVVEggY29va2llIGlzIGNsZWFyZWQgZWxzZXdoZXJlCisvLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiB1bmF1dGhMb2NhbCgkbW9kZSkgeworCWlmKCRtb2RlID09ICdoZWFkZXJzJykKKwkJcmV0dXJuOworCXByaW50ICI8aDI+TG9nb3V0PC9oMj5cbiI7CisJcHJpbnQgIllvdSBhcmUgbm93IGxvZ2dlZCBvdXQgb2YgVkNMLjxicj48YnI+XG4iOworCXByaW50ICI8YSBocmVmPVwiIiAuIEJBU0VVUkwgLiBTQ1JJUFQgLiAiP21vZGU9c2VsZWN0YXV0aFwiPlJldHVybiB0byBMb2dpbjwvYT48YnI+PGJyPjxicj5cbiI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KIC8vLyBcZm4gdmFsaWRhdGVMb2NhbEFjY291bnQoJHVzZXIsICRwYXNzKQogLy8vCiAvLy8gXHBhcmFtICR1c2VyIC0gdW5pdHlpZCBmcm9tIHVzZXIgdGFibGUKQEAgLTUxNCw3ICs0ODEsNyBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gdmFsaWRhdGVMb2NhbEFjY291bnQoJHVzZXIsICRwYXNzKSB7Ci0JJHVzZXIgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXIpOworCSR1c2VyID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXIpOwogCSRxdWVyeSA9ICJTRUxFQ1QgbC5zYWx0ICIKIAkgICAgICAgLiAiRlJPTSBsb2NhbGF1dGggbCwgIgogCSAgICAgICAuICAgICAgInVzZXIgdSwgIgpAQCAtNTI0LDggKzQ5MSw4IEBACiAJICAgICAgIC4gICAgICAgImEubmFtZSA9ICdMb2NhbCcgQU5EICIKIAkgICAgICAgLiAgICAgICAibC51c2VyaWQgPSB1LmlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpICE9IDEgfHwKLQkgICAoISAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKSkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSAhPSAxIHx8CisJICAgKCEgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkpKQogCQlyZXR1cm4gMDsKIAogCSRwYXNzaGFzaCA9IHNoYTEoIiRwYXNzeyRyb3dbJ3NhbHQnXX0iKTsKQEAgLTUzOSw3ICs1MDYsNyBAQAogCSAgICAgICAuICAgICAgICJ1LmFmZmlsaWF0aW9uaWQgPSBhLmlkIEFORCAiCiAJICAgICAgIC4gICAgICAgImEubmFtZSA9ICdMb2NhbCciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKG15c3FsX251bV9yb3dzKCRxaCkgPT0gMSkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSA9PSAxKQogCQlyZXR1cm4gMTsKIAllbHNlCiAJCXJldHVybiAwOwpAQCAtNTU5LDggKzUyNiw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBhZGRMb2dpbkxvZygkbG9naW4sICRtZWNoLCAkYWZmaWxpYXRpb25pZCwgJHBhc3NmYWlsLCAkY29kZT0nbm9uZScpIHsKLQkkbG9naW4gPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGxvZ2luKTsKLQkkbWVjaCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkbWVjaCk7CisJJGxvZ2luID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGxvZ2luKTsKKwkkbWVjaCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRtZWNoKTsKIAkkcXVlcnkgPSAiSU5TRVJUIElOVE8gbG9naW5sb2cgIgogCSAgICAgICAuICAgICAgICAiKHVzZXIsICIKIAkgICAgICAgLiAgICAgICAgImF1dGhtZWNoLCAiCkBAIC02MTMsOCArNTgwLDggQEAKIAkgICAgICAgLiAiTElNSVQgMyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJGV4cGlyZSA9IHRpbWUoKSAtIChTRUNJTkRBWSAqIDMpOwotCSRyb3dzID0gbXlzcWxfbnVtX3Jvd3MoJHFoKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCSRyb3dzID0gbXlzcWxpX251bV9yb3dzKCRxaCk7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCRyb3dzID49IDMgfHwgZGF0ZXRpbWVUb1VuaXgoJHJvd1snc3RhcnQnXSkgPCAkZXhwaXJlKSB7CiAJCQlpZihpbl9hcnJheSgkbW9kZSwgJG5vSFRNTHdyYXBwZXJzKSkKIAkJCQkjIGRvIGEgcmVkaXJlY3QgYW5kIGhhbmRsZSByZW1vdmFsIG9uIG5leHQgcGFnZSBsb2FkIHNvIHVzZXIgY2FuCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9hdXRobWV0aG9kcy9pdGVjc2F1dGgucGhwIGIvd2ViLy5odC1pbmMvYXV0aG1ldGhvZHMvaXRlY3NhdXRoLnBocAppbmRleCBjY2RiOWE0Li5hMjcxNDUwIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9hdXRobWV0aG9kcy9pdGVjc2F1dGgucGhwCisrKyBiL3dlYi8uaHQtaW5jL2F1dGhtZXRob2RzL2l0ZWNzYXV0aC5waHAKQEAgLTIyLDYgKzIyLDc5IEBACiAgKiBcZmlsZQogICovCiAKKyRhdXRoRnVuY3NbJ2l0ZWNzJ10gPSBhcnJheSgndGVzdCcgPT4gJ3Rlc3RJVEVDU0F1dGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdXRoJyA9PiAncHJvY2Vzc0lURUNTQXV0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuYXV0aCcgPT4gJ3VuYXV0aElURUNTJyk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gdGVzdElURUNTQXV0aCgpCisvLy8KKy8vLyBccmV0dXJuIDEgaWYgSVRFQ1NBVVRIIGNvb2tpZSBmb3VuZCwgMCBpZiBub3QKKy8vLworLy8vIFxicmllZiB0ZXN0cyBmb3IgZXhpc3RhbmNlIG9mIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIGZvciBJVEVDUyBhdXRoCisvLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiB0ZXN0SVRFQ1NBdXRoKCkgeworCWlmKGFycmF5X2tleV9leGlzdHMoJ0lURUNTQVVUSCcsICRfQ09PS0lFKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gcHJvY2Vzc0lURUNTQXV0aCgpCisvLy8KKy8vLyBccmV0dXJuIHVzZXJpZCBpbiBmb3JtIG9mIGVtYWlsYWRkcmVzc0BJVEVDUyBvciBOVUxMCisvLy8KKy8vLyBcYnJpZWYgcHJvY2Vzc2VzIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uOyByZXR1cm5zIHVzZXJpZCBvciBOVUxMIGlmCisvLy8gdW5zdWNjZXNzZnVsCisvLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBwcm9jZXNzSVRFQ1NBdXRoKCkgeworCSRhdXRoZGF0YSA9IGF1dGhVc2VyKCk7CisJaWYoISAoJGVycm9yID0gZ2V0QXV0aEVycm9yKCkpKSB7CisJCSR1c2VyaWQgPSAieyRhdXRoZGF0YVsiZW1haWwiXX1ASVRFQ1MiOworCQkkYWZmaWxpZCA9IGdldEFmZmlsaWF0aW9uSUQoJ0lURUNTJyk7CisJCWFkZExvZ2luTG9nKCR1c2VyaWQsICdJVEVDUycsICRhZmZpbGlkLCAxKTsKKworCQkjIGdldCBjb29raWUgZGF0YQorCQkkY29va2llID0gZ2V0QXV0aENvb2tpZURhdGEoJHVzZXJpZCwgJ2l0ZWNzJywgNjAwKTsKKwkJIyBzZXQgY29va2llCisJCWlmKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgIjUuMiIsICI+PSIpID09IHRydWUpCisJCQlzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAwLCAiLyIsIENPT0tJRURPTUFJTiwgMCwgMSk7CisJCWVsc2UKKwkJCXNldGNvb2tpZSgiVkNMQVVUSCIsICJ7JGNvb2tpZVsnZGF0YSddfSIsIDAsICIvIiwgQ09PS0lFRE9NQUlOKTsKKworCQlyZXR1cm4gJHVzZXJpZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gdW5hdXRoSVRFQ1MoJG1vZGUpCisvLy8KKy8vLyBccGFyYW0gJG1vZGUgLSBoZWFkZXJzIG9yIGNvbnRlbnQKKy8vLworLy8vIFxicmllZiBmb3IgaGVhZGVycyBtb2RlLCBkZXN0cm95cyBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbjsgZm9yIGNvbnRlbnQKKy8vLyBtb2RlLCBwcmludHMgaW5mb3JtYXRpb24gYWJvdXQgaGF2aW5nIGJlZW4gbG9nZ2VkIG91dAorLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworZnVuY3Rpb24gdW5hdXRoSVRFQ1MoJG1vZGUpIHsKKwlpZigkbW9kZSA9PSAnaGVhZGVycycpIHsKKwkJJHRpbWUgPSB0aW1lKCkgLSAxMDsKKwkJc2V0Y29va2llKCJJVEVDU0FVVEhfUkVUVVJOIiwgIiIsICR0aW1lLCAiLyIsIENPT0tJRURPTUFJTik7CisJCXNldGNvb2tpZSgiSVRFQ1NBVVRIX0NTUyIsICIiLCAkdGltZSwgIi8iLCBDT09LSUVET01BSU4pOworCQlzZXRjb29raWUoIklURUNTQVVUSCIsICIiLCAkdGltZSwgIi8iLCBDT09LSUVET01BSU4pOworCX0KKwllbHNlaWYoJG1vZGUgPT0gJ2NvbnRlbnQnKSB7CisJCXByaW50ICI8aDI+TG9nb3V0PC9oMj5cbiI7CisJCXByaW50ICJZb3UgYXJlIG5vdyBsb2dnZWQgb3V0IG9mIFZDTC48YnI+PGJyPlxuIjsKKwkJcHJpbnQgIjxhIGhyZWY9XCIiIC4gQkFTRVVSTCAuIFNDUklQVCAuICI/bW9kZT1zZWxlY3RhdXRoXCI+UmV0dXJuIHRvIExvZ2luPC9hPjxicj48YnI+PGJyPlxuIjsKKwl9Cit9CisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8KIC8vLyBcZm4gYWRkSVRFQ1NVc2VyKCRsb2dpbmlkKQpAQCAtMzUsMTAgKzEwOCwxMCBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gYWRkSVRFQ1NVc2VyKCRsb2dpbmlkKSB7Ci0JZ2xvYmFsICRteXNxbF9saW5rX3ZjbCwgJEVOQUJMRV9JVEVDU0FVVEg7CisJZ2xvYmFsICRteXNxbGlfbGlua192Y2wsICRFTkFCTEVfSVRFQ1NBVVRIOwogCWlmKCEgJEVOQUJMRV9JVEVDU0FVVEgpCiAJCXJldHVybiBOVUxMOwotCSRlc2NfbG9naW5pZCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkbG9naW5pZCk7CisJJGVzY19sb2dpbmlkID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGxvZ2luaWQpOwogCSRxdWVyeSA9ICJTRUxFQ1QgaWQgQVMgdWlkLCAiCiAJICAgICAgIC4gICAgICAgICJmaXJzdCwgIiAKIAkgICAgICAgLiAgICAgICAgImxhc3QsICIKQEAgLTQ5LDEzICsxMjIsMTMgQEAKIAkgICAgICAgLiAiRlJPTSB1c2VyICIKIAkgICAgICAgLiAiV0hFUkUgZW1haWwgPSAnJGVzY19sb2dpbmlkJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSwgImFjY291bnRzIik7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJLy8gRklYTUUgdGVzdCByZXBsYWNpbmcgJydzCiAJCS8vIEZJWE1FIGRvIHdlIGNhcmUgaWYgdGhlIGFjY291bnQgaXMgYWN0aXZlPwotCQkkZmlyc3QgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHJvd1snZmlyc3QnXSk7Ci0JCSRsYXN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRyb3dbJ2xhc3QnXSk7Ci0JCSRsb3dlcnVzZXIgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoc3RydG9sb3dlcigkcm93WydlbWFpbCddKSk7Ci0JCSRlbWFpbCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkcm93WydlbWFpbCddKTsKKwkJJGZpcnN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHJvd1snZmlyc3QnXSk7CisJCSRsYXN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHJvd1snbGFzdCddKTsKKwkJJGxvd2VydXNlciA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKHN0cnRvbG93ZXIoJHJvd1snZW1haWwnXSkpOworCQkkZW1haWwgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkcm93WydlbWFpbCddKTsKIAkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIHVzZXIgKCIKIAkJICAgICAgIC4gICAgICAgICJ1aWQsICIKIAkJICAgICAgIC4gICAgICAgICJ1bml0eWlkLCAiCkBAIC03OSw5ICsxNTIsOSBAQAogCQkvLyBGSVhNRSBtaWdodCB3YW50IHRoaXMgbG9nZ2VkCiAJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEsICd2Y2wnLCAxKTsKIAl9Ci0JaWYobXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpKSB7CisJaWYobXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCkpIHsKIAkJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSB1c2VyIiwgMTAxKTsKLQkJaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCQlhYm9ydCgxMDEpOwogCQl9CiAJCXJldHVybiAkcm93WzBdOwpAQCAtMTA0LDE0ICsxNzcsMTQgQEAKIAlnbG9iYWwgJEVOQUJMRV9JVEVDU0FVVEg7CiAJaWYoISAkRU5BQkxFX0lURUNTQVVUSCkKIAkJcmV0dXJuIDA7Ci0JJGxvZ2luaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGxvZ2luaWQpOworCSRsb2dpbmlkID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGxvZ2luaWQpOwogCSRxdWVyeSA9ICJTRUxFQ1QgZW1haWwgIgogCSAgICAgICAuICJGUk9NIHVzZXIgIgogCSAgICAgICAuICJXSEVSRSBlbWFpbCA9ICckbG9naW5pZCcgQU5EICIKIAkgICAgICAgLiAgICAgICAiKGFjdGl2ZSA9IDEgT1IgIgogCSAgICAgICAuICAgICAgICJhY3RpdmF0ZWQgPSAwKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSwgImFjY291bnRzIik7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjAsNyArMjMzLDcgQEAKIAkgICAgICAgLiAiRlJPTSB1c2VyICIKIAkgICAgICAgLiAiV0hFUkUgZW1haWwgPSAnJHVzZXJpZCciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEsICJhY2NvdW50cyIpOwotCWlmKCEgKCR1c2VyRGF0YSA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKQorCWlmKCEgKCR1c2VyRGF0YSA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkkbm93ID0gdW5peFRvRGF0ZXRpbWUodGltZSgpKTsKQEAgLTE5MSwxMSArMjY0LDExIEBACiAJLy8gaWYgZ2V0IGEgcm93CiAJLy8gICAgdXBkYXRlIGRiCiAJLy8gICAgdXBkYXRlIHJlc3VsdHMgZnJvbSBzZWxlY3QKLQkkZXNjX3VzZXJpZCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdXNlcmlkKTsKLQkkZmlyc3QgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJEYXRhWydmaXJzdCddKTsKLQkkbGFzdCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdXNlckRhdGFbJ2xhc3QnXSk7Ci0JJGVtYWlsID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1c2VyRGF0YVsnZW1haWwnXSk7Ci0JaWYoJHVzZXIgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJJGVzY191c2VyaWQgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdXNlcmlkKTsKKwkkZmlyc3QgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdXNlckRhdGFbJ2ZpcnN0J10pOworCSRsYXN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXJEYXRhWydsYXN0J10pOworCSRlbWFpbCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR1c2VyRGF0YVsnZW1haWwnXSk7CisJaWYoJHVzZXIgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkdXNlclsidW5pdHlpZCJdID0gJHVzZXJpZDsKIAkJJHVzZXJbImZpcnN0bmFtZSJdID0gJHVzZXJEYXRhWydmaXJzdCddOwogCQkkdXNlclsibGFzdG5hbWUiXSA9ICR1c2VyRGF0YVsibGFzdCJdOwpAQCAtMjQwLDcgKzMxMyw3IEBACiAJCSAgICAgICAuICJXSEVSRSB1LmFmZmlsaWF0aW9uaWQgPSBhZi5pZCBBTkQgIgogCQkgICAgICAgLiAgICAgICAidS5pZCA9ICRpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkkdXNlciA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJCSR1c2VyID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCk7CiAKIAkJIyBhZGQgYWNjb3VudCB0byBkZW1vIGdyb3VwCiAJCSMkZGVtb2lkID0gZ2V0VXNlckdyb3VwSUQoJ2RlbW8nLCBnZXRBZmZpbGlhdGlvbklEKCdJVEVDUycpKTsKZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2F1dGhtZXRob2RzL2xkYXBhdXRoLnBocCBiL3dlYi8uaHQtaW5jL2F1dGhtZXRob2RzL2xkYXBhdXRoLnBocAppbmRleCBjZjQxNWMzLi4zODQ4ZWJlIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9hdXRobWV0aG9kcy9sZGFwYXV0aC5waHAKKysrIGIvd2ViLy5odC1pbmMvYXV0aG1ldGhvZHMvbGRhcGF1dGgucGhwCkBAIC0yMCw2ICsyMCwxNDMgQEAKICAqIFxmaWxlCiAgKi8KIAorJGF1dGhGdW5jc1snbGRhcCddID0gYXJyYXkoJ3Rlc3QnID0+IGZ1bmN0aW9uKCkge3JldHVybiAwO30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aCcgPT4gZnVuY3Rpb24oKSB7cmV0dXJuIE5VTEw7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmF1dGgnID0+ICd1bmF1dGhMREFQJyk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gdW5hdXRoTERBUCgkbW9kZSkKKy8vLworLy8vIFxwYXJhbSAkbW9kZSAtIGhlYWRlcnMgb3IgY29udGVudAorLy8vCisvLy8gXGJyaWVmIGZvciBoZWFkZXJzLCBzaW1wbHkgcmV0dXJuczsgZm9yIGNvbnRlbnQsIHByaW50cyBpbmZvcm1hdGlvbiB0aGF0CisvLy8gdXNlciBoYXMgYmVlbiBsb2dnZWQgb3V0OyBWQ0xBVVRIIGNvb2tpZSBpcyBjbGVhcmVkIGVsc2V3aGVyZQorLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworZnVuY3Rpb24gdW5hdXRoTERBUCgkbW9kZSkgeworCWlmKCRtb2RlID09ICdoZWFkZXJzJykKKwkJcmV0dXJuOworCXByaW50ICI8aDI+IiAuIF8oJ0xvZ291dCcpIC4gIjwvaDI+XG4iOworCXByaW50IF8oIllvdSBhcmUgbm93IGxvZ2dlZCBvdXQgb2YgVkNMLiIpIC4gIjxicj48YnI+XG4iOworCXByaW50ICI8YSBocmVmPVwiIiAuIEJBU0VVUkwgLiBTQ1JJUFQgLiAiP21vZGU9c2VsZWN0YXV0aFwiPiIgLiBfKCJSZXR1cm4gdG8gTG9naW4iKTsKKwlwcmludCAiPC9hPjxicj48YnI+PGJyPlxuIjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLworLy8vIFxmbiBsZGFwTG9naW4oJGF1dGh0eXBlLCAkdXNlcmlkLCAkcGFzc3dkKQorLy8vCisvLy8gXHBhcmFtICRhdXRodHlwZSAtIGluZGV4IGZyb20gJGF1dGhNZWNocyBhcnJheQorLy8vIFxwYXJhbSAkdXNlcmlkIC0gdXNlcmlkIHdpdGhvdXQgYWZmaWxpYXRpb24KKy8vLyBccGFyYW0gJHBhc3N3ZCAtIHN1Ym1pdHRlZCBwYXNzd29yZAorLy8vCisvLy8gXGJyaWVmIHRyaWVzIHRvIGF1dGhlbnRpY2F0ZSB1c2VyIHZpYSBsZGFwOyBjYWxscyBwcmludExvZ2luUGFnZVdpdGhTa2luIGlmCisvLy8gYXV0aGVudGljYXRpb24gZmFpbHMKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGxkYXBMb2dpbigkYXV0aHR5cGUsICR1c2VyaWQsICRwYXNzd2QpIHsKKwlnbG9iYWwgJEhUTUxoZWFkZXIsICRwcmludGVkSFRNTGhlYWRlciwgJGF1dGhNZWNocywgJHBocFZlcjsKKwkkZXNjX3VzZXJpZCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR1c2VyaWQpOworCWlmKCEgJGZoID0gZnNvY2tvcGVuKCRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnc2VydmVyJ10sIDYzNiwgJGVycm5vLCAkZXJyc3RyLCA1KSkgeworCQlwcmludExvZ2luUGFnZVdpdGhTa2luKCRhdXRodHlwZSwgMSk7CisJCXJldHVybjsKKwl9CisJZmNsb3NlKCRmaCk7CisJJGRzID0gbGRhcF9jb25uZWN0KCJsZGFwczovL3skYXV0aE1lY2hzWyRhdXRodHlwZV1bJ3NlcnZlciddfS8iKTsKKwlpZighICRkcykgeworCQlhZGRMb2dpbkxvZygkdXNlcmlkLCAkYXV0aHR5cGUsICRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddLCAwKTsKKwkJcHJpbnQgJEhUTUxoZWFkZXI7CisJCSRwcmludGVkSFRNTGhlYWRlciA9IDE7CisJCXNlbGVjdEF1dGgoKTsKKwkJcmV0dXJuOworCX0KKwlsZGFwX3NldF9vcHRpb24oJGRzLCBMREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OLCAzKTsKKwlsZGFwX3NldF9vcHRpb24oJGRzLCBMREFQX09QVF9SRUZFUlJBTFMsIDApOworCWlmKGFycmF5X2tleV9leGlzdHMoJ2xvb2t1cHVzZXJiZWZvcmVhdXRoJywgJGF1dGhNZWNoc1skYXV0aHR5cGVdKSAmJgorCSAgICRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnbG9va3VwdXNlcmJlZm9yZWF1dGgnXSAmJgorCSAgIGFycmF5X2tleV9leGlzdHMoJ2xvb2t1cHVzZXJmaWVsZCcsICRhdXRoTWVjaHNbJGF1dGh0eXBlXSkpIHsKKwkJIyBpbiB0aGlzIGNhc2UsIHdlIGhhdmUgdG8gbG9vayB1cCB3aGF0IHBhcnQgb2YgdGhlIHRyZWUgdGhlIHVzZXIgaXMgaW4KKwkJIyAgIGJlZm9yZSB3ZSBjYW4gYWN0dWFsbHkgbG9vayB1cCB0aGUgdXNlcgorCQkkYXV0aCA9ICRhdXRoTWVjaHNbJGF1dGh0eXBlXTsKKwkJaWYoYXJyYXlfa2V5X2V4aXN0cygnbWFzdGVybG9naW4nLCAkYXV0aCkgJiYgc3RybGVuKCRhdXRoWydtYXN0ZXJsb2dpbiddKSkKKwkJCSRyZXMgPSBsZGFwX2JpbmQoJGRzLCAkYXV0aFsnbWFzdGVybG9naW4nXSwgJGF1dGhbJ21hc3RlcnB3ZCddKTsKKwkJZWxzZQorCQkJJHJlcyA9IGxkYXBfYmluZCgkZHMpOworCQlpZighICRyZXMpIHsKKwkJCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhbJ2FmZmlsaWF0aW9uaWQnXSwgMCk7CisJCQlwcmludExvZ2luUGFnZVdpdGhTa2luKCRhdXRodHlwZSk7CisJCQlyZXR1cm47CisJCX0KKwkJJHNlYXJjaCA9IGxkYXBfc2VhcmNoKCRkcywKKwkJICAgICAgICAgICAgICAgICAgICAgICRhdXRoWydiaW5kZG4nXSwgCisJCSAgICAgICAgICAgICAgICAgICAgICAieyRhdXRoWydsb29rdXB1c2VyZmllbGQnXX09JHVzZXJpZCIsCisJCSAgICAgICAgICAgICAgICAgICAgICBhcnJheSgnZG4nKSwgMCwgMywgMTUpOworCQlpZigkc2VhcmNoKSB7CisJCQkkdG1wZGF0YSA9IGxkYXBfZ2V0X2VudHJpZXMoJGRzLCAkc2VhcmNoKTsKKwkJCWlmKCEgJHRtcGRhdGFbJ2NvdW50J10gfHwgISBhcnJheV9rZXlfZXhpc3RzKCdkbicsICR0bXBkYXRhWzBdKSkgeworCQkJCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhbJ2FmZmlsaWF0aW9uaWQnXSwgMCk7CisJCQkJcHJpbnRMb2dpblBhZ2VXaXRoU2tpbigkYXV0aHR5cGUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCSRsZGFwdXNlciA9ICR0bXBkYXRhWzBdWydkbiddOworCQl9CisJCWVsc2UgeworCQkJYWRkTG9naW5Mb2coJHVzZXJpZCwgJGF1dGh0eXBlLCAkYXV0aFsnYWZmaWxpYXRpb25pZCddLCAwKTsKKwkJCXByaW50TG9naW5QYWdlV2l0aFNraW4oJGF1dGh0eXBlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlCisJCSRsZGFwdXNlciA9IHNwcmludGYoJGF1dGhNZWNoc1skYXV0aHR5cGVdWyd1c2VyaWQnXSwgJHVzZXJpZCk7CisJJHJlcyA9IGxkYXBfYmluZCgkZHMsICRsZGFwdXNlciwgJHBhc3N3ZCk7CisJaWYoISAkcmVzKSB7CisJCS8vIGxvZ2luIGZhaWxlZAorCQkkZXJyID0gbGRhcF9lcnJvcigkZHMpOworCQlpZigkZXJyID09ICdJbnZhbGlkIGNyZWRlbnRpYWxzJykKKwkJCWFkZExvZ2luTG9nKCR1c2VyaWQsICRhdXRodHlwZSwgJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10sIDAsICRlcnIpOworCQllbHNlCisJCQlhZGRMb2dpbkxvZygkdXNlcmlkLCAkYXV0aHR5cGUsICRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddLCAwKTsKKwkJcHJpbnRMb2dpblBhZ2VXaXRoU2tpbigkYXV0aHR5cGUpOworCQlyZXR1cm47CisJfQorCWVsc2UgeworCQlhZGRMb2dpbkxvZygkdXNlcmlkLCAkYXV0aHR5cGUsICRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddLCAxKTsKKwkJIyB1c2VkIHRvIHJlbHkgb24gbGF0ZXIgY29kZSB0byB1cGRhdGUgdXNlciBpbmZvIGlmIHVwZGF0ZSB0aW1lc3RhbXAgd2FzIGV4cGlyZWQKKwkJLy8gc2VlIGlmIHVzZXIgaW4gb3VyIGRiCisJCS8qJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCisJCSAgICAgICAuICJGUk9NIHVzZXIgIgorCQkgICAgICAgLiAiV0hFUkUgdW5pdHlpZCA9ICckZXNjX3VzZXJpZCcgQU5EICIKKwkJICAgICAgIC4gICAgICAgImFmZmlsaWF0aW9uaWQgPSB7JGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ119IjsKKwkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJCWlmKCEgbXlzcWxpX251bV9yb3dzKCRxaCkpIHsKKwkJCS8vIGlmIG5vdCwgYWRkIHVzZXIKKwkJCSRuZXdpZCA9IHVwZGF0ZUxEQVBVc2VyKCRhdXRodHlwZSwgJHVzZXJpZCk7CisJCQlpZihpc19udWxsKCRuZXdpZCkpCisJCQkJYWJvcnQoOCk7CisJCX0qLworCQkjIG5vdywgd2UgYWx3YXlzIHVwZGF0ZSB0aGUgdXNlciBpbmZvCisJCSRuZXdpZCA9IHVwZGF0ZUxEQVBVc2VyKCRhdXRodHlwZSwgJHVzZXJpZCk7CisJCWlmKGlzX251bGwoJG5ld2lkKSkKKwkJCWFib3J0KDgpOworCQkvLyBnZXQgY29va2llIGRhdGEKKwkJJGNvb2tpZSA9IGdldEF1dGhDb29raWVEYXRhKCIkdXNlcmlkQCIgLiBnZXRBZmZpbGlhdGlvbk5hbWUoJGF1dGhNZWNoc1skYXV0aHR5cGVdWydhZmZpbGlhdGlvbmlkJ10pLCAnbGRhcCcpOworCQkvLyBzZXQgY29va2llCisJCWlmKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgIjUuMiIsICI+PSIpID09IHRydWUpCisJCQlzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAwLCAiLyIsIENPT0tJRURPTUFJTiwgMCwgMSk7CisJCWVsc2UKKwkJCXNldGNvb2tpZSgiVkNMQVVUSCIsICJ7JGNvb2tpZVsnZGF0YSddfSIsIDAsICIvIiwgQ09PS0lFRE9NQUlOLCAwKTsKKwkJIyBzZXQgc2tpbiBjb29raWUgYmFzZWQgb24gYWZmaWxpYXRpb24KKwkJJHNraW4gPSBnZXRBZmZpbGlhdGlvblRoZW1lKCRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddKTsKKwkJJHVjc2tpbiA9IHN0cnRvdXBwZXIoJHNraW4pOworCQlzZXRjb29raWUoIlZDTFNLSU4iLCAiJHVjc2tpbiIsICh0aW1lKCkgKyAoU0VDSU5EQVkgKiAzMSkpLCAiLyIsIENPT0tJRURPTUFJTik7CisJCS8vIHJlZGlyZWN0IHRvIG1haW4gcGFnZQorCQloZWFkZXIoIkxvY2F0aW9uOiAiIC4gQkFTRVVSTCAuIFNDUklQVCk7CisJCWRiRGlzY29ubmVjdCgpOworCQlleGl0OworCX0KK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLwogLy8vIFxmbiBhZGRMREFQVXNlcigkYXV0aHR5cGUsICR1c2VyaWQpCkBAIC0zNCwxMyArMTcxLDEzIEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBhZGRMREFQVXNlcigkYXV0aHR5cGUsICR1c2VyaWQpIHsKLQlnbG9iYWwgJGF1dGhNZWNocywgJG15c3FsX2xpbmtfdmNsOworCWdsb2JhbCAkYXV0aE1lY2hzLCAkbXlzcWxpX2xpbmtfdmNsOwogCSRkYXRhID0gZ2V0TERBUFVzZXJEYXRhKCRhdXRodHlwZSwgJHVzZXJpZCk7CiAJaWYoaXNfbnVsbCgkZGF0YSkpCiAJCXJldHVybiBOVUxMOwogCiAJJGxvd2VydXNlcmlkID0gc3RydG9sb3dlcigkdXNlcmlkKTsKLQkkbG93ZXJ1c2VyaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGxvd2VydXNlcmlkKTsKKwkkbG93ZXJ1c2VyaWQgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbG93ZXJ1c2VyaWQpOwogCiAJIyBjaGVjayBmb3IgZXhpc3RhbmNlIG9mIGFuIGV4cGlyZWQgdXNlciBpZiBhIG51bWVyaWNpZCBleGlzdHMKIAlpZihhcnJheV9rZXlfZXhpc3RzKCdudW1lcmljaWQnLCAkZGF0YSkpIHsKQEAgLTUzLDcgKzE5MCw3IEBACiAJCSAgICAgICAuICAgICAgICJ1bml0eWlkICE9ICckbG93ZXJ1c2VyaWQnIjsKIAkJICAgICAgICMuICAgICAgICJhZmZpbGlhdGlvbmlkID0geyRhdXRoTWVjaHNbJGF1dGh0eXBlXVsnYWZmaWxpYXRpb25pZCddfSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSMgZmluZCB0aGUgYXV0aHR5cGUgZm9yIHRoaXMgdXNlcgogCQkJZm9yZWFjaCgkYXV0aE1lY2hzIGFzICRpbmRleCA9PiAkYXV0aCkgewogCQkJCWlmKCRhdXRoWydhZmZpbGlhdGlvbmlkJ10gPT0gJHJvd1snYWZmaWxpYXRpb25pZCddICYmCkBAIC05NSw5ICsyMzIsOSBAQAogCSAgICAgICAuICAgICAgICAiJ3skZGF0YVsnZW1haWxub3RpY2VzJ119JywgIgogCSAgICAgICAuICAgICAgICAiTk9XKCkpIjsKIAlkb1F1ZXJ5KCRxdWVyeSwgMTAxLCAndmNsJywgMSk7Ci0JaWYobXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpKSB7CisJaWYobXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCkpIHsKIAkJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSB1c2VyIiwgMTAxKTsKLQkJaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCQlhYm9ydCgxMDEpOwogCQl9CiAJCXJldHVybiAkcm93WzBdOwpAQCAtMTIwLDcgKzI1Nyw3IEBACiBmdW5jdGlvbiB2YWxpZGF0ZUxEQVBVc2VyKCR0eXBlLCAkbG9naW5pZCkgewogCWdsb2JhbCAkYXV0aE1lY2hzOwogCSRhdXRoID0gJGF1dGhNZWNoc1skdHlwZV07Ci0JJHNhdmVoZGxyID0gc2V0X2Vycm9yX2hhbmRsZXIoY3JlYXRlX2Z1bmN0aW9uKCcnLCAnJykpOworCSRzYXZlaGRsciA9IHNldF9lcnJvcl9oYW5kbGVyKGZ1bmN0aW9uKCkge30pOwogCWlmKCEgKCRmaCA9IGZzb2Nrb3BlbigkYXV0aFsnc2VydmVyJ10sIDYzNiwgJGVycm5vLCAkZXJyc3RyLCA1KSkpCiAJCXJldHVybiAtMTsKIAlzZXRfZXJyb3JfaGFuZGxlcigkc2F2ZWhkbHIpOwpAQCAtMTcxLDcgKzMwOCw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gdXBkYXRlTERBUFVzZXIoJGF1dGh0eXBlLCAkdXNlcmlkKSB7CiAJZ2xvYmFsICRhdXRoTWVjaHM7Ci0JJGVzY191c2VyaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJpZCk7CisJJGVzY191c2VyaWQgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdXNlcmlkKTsKIAkkdXNlckRhdGEgPSBnZXRMREFQVXNlckRhdGEoJGF1dGh0eXBlLCAkdXNlcmlkKTsKIAlpZihpc19udWxsKCR1c2VyRGF0YSkpCiAJCXJldHVybiBOVUxMOwpAQCAtMjEzLDcgKzM1MCw3IEBACiAJIyBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaGluZyBlbnRyeSB3aGVyZSB1aWQgaXMgTlVMTCBidXQgdW5pdHlpZCBhbmQgYWZmaWxpYXRpb25pZCBtYXRjaAogCWlmKGFycmF5X2tleV9leGlzdHMoJ251bWVyaWNpZCcsICR1c2VyRGF0YSkgJiYKIAkgICBpc19udW1lcmljKCR1c2VyRGF0YVsnbnVtZXJpY2lkJ10pICYmCi0JICAgISBteXNxbF9udW1fcm93cygkcWgpKSB7CisJICAgISBteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkkdXBkYXRldWlkID0gMTsKIAkJJHF1ZXJ5ID0gJHFiYXNlIC4gInUudW5pdHlpZCA9ICckZXNjX3VzZXJpZCcgQU5EICIKIAkJICAgICAgIC4gICAgICAgICAgInUuYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIjsKQEAgLTIyMiw3ICszNTksNyBAQAogCS8vIGlmIGdldCBhIHJvdwogCS8vICAgIHVwZGF0ZSBkYgogCS8vICAgIHVwZGF0ZSByZXN1bHRzIGZyb20gc2VsZWN0Ci0JaWYoJHVzZXIgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoJHVzZXIgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkdXNlclsidW5pdHlpZCJdID0gJHVzZXJpZDsKIAkJJHVzZXJbImZpcnN0bmFtZSJdID0gJHVzZXJEYXRhWydmaXJzdCddOwogCQkkdXNlclsibGFzdG5hbWUiXSA9ICR1c2VyRGF0YVsibGFzdCJdOwpAQCAtMjc3LDcgKzQxNCw3IEBACiAJCSAgICAgICAuICJXSEVSRSB1LmFmZmlsaWF0aW9uaWQgPSBhZi5pZCBBTkQgIgogCQkgICAgICAgLiAgICAgICAidS5pZCA9ICRpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZighICR1c2VyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoISAkdXNlciA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJcmV0dXJuIE5VTEw7CiAJCSR1c2VyWydzc2hwdWJsaWNrZXlzJ10gPSBodG1sc3BlY2lhbGNoYXJzKCR1c2VyWydzc2hwdWJsaWNrZXlzJ10pOwogCX0KQEAgLTMwNSw5ICs0NDIsOSBAQAogLy8vIFxwYXJhbSAkdXNlcmlkIC0gYSB1c2VyaWQgd2l0aG91dCB0aGUgYWZmaWxpYXRpb24gcGFydAogLy8vCiAvLy8gXHJldHVybiBhbiBhcnJheSBvZiB1c2VyIGluZm9ybWF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOlxuCi0vLy8gXGIgZmlyc3QgLSBmaXJzdCBuYW1lIG9mIHVzZXIgKGVzY2FwZWQgd2l0aCBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcpXG4KLS8vLyBcYiBsYXN0IC0gbGFzdCBuYW1lIG9mIHVzZXIgKGVzY2FwZWQgd2l0aCBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcpXG4KLS8vLyBcYiBlbWFpbCAtIGVtYWlsIGFkZHJlc3Mgb2YgdXNlciAoZXNjYXBlZCB3aXRoIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZylcbgorLy8vIFxiIGZpcnN0IC0gZmlyc3QgbmFtZSBvZiB1c2VyIChlc2NhcGVkIHdpdGggdmNsX215c3FsX2VzY2FwZV9zdHJpbmcpXG4KKy8vLyBcYiBsYXN0IC0gbGFzdCBuYW1lIG9mIHVzZXIgKGVzY2FwZWQgd2l0aCB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZylcbgorLy8vIFxiIGVtYWlsIC0gZW1haWwgYWRkcmVzcyBvZiB1c2VyIChlc2NhcGVkIHdpdGggdmNsX215c3FsX2VzY2FwZV9zdHJpbmcpXG4KIC8vLyBcYiBlbWFpbG5vdGljZXMgLSAwIG9yIDEsIHdoZXRoZXIgb3Igbm90IGVtYWlscyBzaG91bGQgYmUgc2VudCB0byB1c2VyXG4KIC8vLyBcYiBudW1lcmljaWQgLSBudW1lcmljIGlkIG9mIHVzZXIgaWYgJGF1dGh0eXBlIGlzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBpdAogLy8vCkBAIC0zMTUsNyArNDUyLDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdldExEQVBVc2VyRGF0YSgkYXV0aHR5cGUsICR1c2VyaWQpIHsKLQlnbG9iYWwgJGF1dGhNZWNocywgJG15c3FsX2xpbmtfdmNsOworCWdsb2JhbCAkYXV0aE1lY2hzLCAkbXlzcWxpX2xpbmtfdmNsOwogCSRhdXRoID0gJGF1dGhNZWNoc1skYXV0aHR5cGVdOwogCSRkb251bWVyaWNpZCA9IDA7CiAJaWYoYXJyYXlfa2V5X2V4aXN0cygnbnVtZXJpY2lkJywgJGF1dGgpKQpAQCAtMzkyLDE2ICs1MjksMTYgQEAKIAkJfQogCiAJCWlmKGFycmF5X2tleV9leGlzdHMoc3RydG9sb3dlcigkYXV0aFsnZmlyc3RuYW1lJ10pLCAkZGF0YSkpCi0JCQkkcmV0dXJuWydmaXJzdCddID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRkYXRhW3N0cnRvbG93ZXIoJGF1dGhbJ2ZpcnN0bmFtZSddKV0pOworCQkJJHJldHVyblsnZmlyc3QnXSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhW3N0cnRvbG93ZXIoJGF1dGhbJ2ZpcnN0bmFtZSddKV0pOwogCQllbHNlCiAJCQkkcmV0dXJuWydmaXJzdCddID0gJyc7CiAJCWlmKGFycmF5X2tleV9leGlzdHMoc3RydG9sb3dlcigkYXV0aFsnbGFzdG5hbWUnXSksICRkYXRhKSkKLQkJCSRyZXR1cm5bJ2xhc3QnXSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVtzdHJ0b2xvd2VyKCRhdXRoWydsYXN0bmFtZSddKV0pOworCQkJJHJldHVyblsnbGFzdCddID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbc3RydG9sb3dlcigkYXV0aFsnbGFzdG5hbWUnXSldKTsKIAkJZWxzZQogCQkJJHJldHVyblsnbGFzdCddID0gJyc7CiAJCWlmKCRkb251bWVyaWNpZCAmJiBpc19udW1lcmljKCRkYXRhW3N0cnRvbG93ZXIoJGF1dGhbJ251bWVyaWNpZCddKV0pKQogCQkJJHJldHVyblsnbnVtZXJpY2lkJ10gPSAkZGF0YVtzdHJ0b2xvd2VyKCRhdXRoWydudW1lcmljaWQnXSldOwotCQkkcmV0dXJuWydlbWFpbCddID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRkYXRhW3N0cnRvbG93ZXIoJGF1dGhbJ2VtYWlsJ10pXSk7CisJCSRyZXR1cm5bJ2VtYWlsJ10gPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVtzdHJ0b2xvd2VyKCRhdXRoWydlbWFpbCddKV0pOwogCiAJCXJldHVybiAkcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2F1dGhtZXRob2RzL3NoaWJhdXRoLnBocCBiL3dlYi8uaHQtaW5jL2F1dGhtZXRob2RzL3NoaWJhdXRoLnBocAppbmRleCBjODE0OTI1Li45NDcwMzVlIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9hdXRobWV0aG9kcy9zaGliYXV0aC5waHAKKysrIGIvd2ViLy5odC1pbmMvYXV0aG1ldGhvZHMvc2hpYmF1dGgucGhwCkBAIC0yMCw2ICsyMCwyODYgQEAKICAqIFxmaWxlCiAgKi8KIAorJGF1dGhGdW5jc1snc2hpYmJvbGV0aCddID0gYXJyYXkoJ3Rlc3QnID0+ICd0ZXN0U2hpYkF1dGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGgnID0+ICdwcm9jZXNzU2hpYkF1dGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuYXV0aCcgPT4gJ3VuYXV0aFNoaWInKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLworLy8vIFxmbiB0ZXN0U2hpYkF1dGgoKQorLy8vCisvLy8gXHJldHVybnMgMSBpZiBTSElCX0VQUE4gZm91bmQgaW4gJF9TRVJWRVI7IDAgb3RoZXJ3aXNlCisvLy8KKy8vLyBcYnJpZWYgY2hlY2tzIGZvciBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIFNoaWJib2xldGgKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIHRlc3RTaGliQXV0aCgpIHsKKwkvLyBUT0RPIGNoZWNrIGZvciBvdGhlciBzaGliIHZhcmlhYmxlcywgaWYgZm91bmQgYnV0IEVQUE4gbm90IGZvdW5kLCBhbGVydCB1c2VyIHRoYXQgRVBQTiBpcyBub3QgYmVpbmcgcmVsZWFzZWQKKwlpZihhcnJheV9rZXlfZXhpc3RzKCdTSElCX0VQUE4nLCAkX1NFUlZFUikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vCisvLy8gXGZuIHByb2Nlc3NTaGliQXV0aCgpCisvLy8KKy8vLyBccmV0dXJucyB1c2VyaWQgaW4gdXNlcmlkQEFGRklMSUFUSU9OIGZvcm0KKy8vLworLy8vIFxicmllZiBwcm9jZXNzZXMgU2hpYmJvbGV0aCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbgorLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworZnVuY3Rpb24gcHJvY2Vzc1NoaWJBdXRoKCkgeworCSMgZ2V0IFZDTCBhZmZpbGlhdGlvbiBmcm9tIHNoaWIgYWZmaWxpYXRpb24KKwkkdG1wID0gZXhwbG9kZSgnOycsICRfU0VSVkVSWydTSElCX0VQUE4nXSk7CisJJHRtcCA9IGV4cGxvZGUoJ0AnLCAkdG1wWzBdKTsKKwkkdXNlcm5hbWUgPSBzdHJ0b2xvd2VyKCR0bXBbMF0pOworCSRzaGliYWZmaWwgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZyhzdHJ0b2xvd2VyKCR0bXBbMV0pKTsKKwkkcXVlcnkgPSAiU0VMRUNUIG5hbWUsIHNoaWJvbmx5IEZST00gYWZmaWxpYXRpb24gV0hFUkUgc2hpYm5hbWUgPSAnJHNoaWJhZmZpbCciOworCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOworCSMgaWYgc2hpYiBhZmZpbGlhdGlvbiBub3QgYWxyZWFkeSBpbiBWQ0wsIGNyZWF0ZSBhZmZpbGlhdGlvbgorCWlmKCEgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKKwkJJGFmZmlsID0gc3RydG9sb3dlcigkdG1wWzFdKTsKKwkJJHRtcCA9IGV4cGxvZGUoJy4nLCAkYWZmaWwpOworCQlhcnJheV9wb3AoJHRtcCk7CisJCSRhZmZpbG5hbWUgPSBzdHJ0b3VwcGVyKGltcGxvZGUoJycsICR0bXApKTsKKwkJJGFmZmlsbmFtZSA9IHByZWdfcmVwbGFjZSgnL1teQS1aMC05XS8nLCAnJywgJGFmZmlsbmFtZSk7CisJCSRxdWVyeSA9ICJTRUxFQ1QgbmFtZSwgIgorCQkJCSAuICAgICAgICAic2hpYm5hbWUgIgorCQkJCSAuICJGUk9NIGFmZmlsaWF0aW9uICIKKwkJCQkgLiAiV0hFUkUgbmFtZSBMSUtFICckYWZmaWxuYW1lJScgIgorCQkJCSAuICJPUkRFUiBCWSBuYW1lIERFU0MgIgorCQkJCSAuICJMSU1JVCAxIjsKKwkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJaWYocHJlZ19tYXRjaCgiLyRhZmZpbG5hbWUoWzAtOV0rKS8iLCAkcm93WyduYW1lJ10sICRtYXRjaGVzKSkgeworCQkJCSRjbnQgPSAkbWF0Y2hlc1sxXTsKKwkJCQkkY250Kys7CisJCQkJJG5ld2FmZmlsbmFtZSA9ICRhZmZpbG5hbWUgLiAkY250OworCQkJfQorCQkJZWxzZWlmKCRhZmZpbG5hbWUgIT0gc3RydG91cHBlcigkcm93WyduYW1lJ10pICYmICRhZmZpbCAhPSAkcm93WydzaGlibmFtZSddKSB7CisJCQkJJG5ld2FmZmlsbmFtZSA9ICRhZmZpbG5hbWU7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkbXNnID0gIlNvbWVvbmUgdHJpZWQgdG8gbG9nIGluIHRvIFZDTCB1c2luZyBTaGliYm9sZXRoIGZyb20gYW4gSWRQICIKKwkJCQkJICAuICJhZmZpbGlhdGlvbiB0aGF0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkLlxuXG4iCisJCQkJCSAgLiAiZXBwbjogeyRfU0VSVkVSWydTSElCX0VQUE4nXX1cbiIKKwkJCQkJICAuICJnaXZlbk5hbWU6IHskX1NFUlZFUlsnU0hJQl9HSVZFTk5BTUUnXX1cbiIKKwkJCQkJICAuICJzbjogeyRfU0VSVkVSWydTSElCX1NOJ119XG4iOworCQkJCWlmKGFycmF5X2tleV9leGlzdHMoJ1NISUJfTUFJTCcsICRfU0VSVkVSKSkKKwkJCQkJJG1zZyAuPSAibWFpbDogeyRfU0VSVkVSWydTSElCX01BSUwnXX1cblxuIjsKKwkJCQkkbXNnIC49InRyaWVkIHRvIGFkZCBWQ0wgYWZmaWxpYXRpb24gbmFtZSBcIiRhZmZpbG5hbWVcIiB3aXRoICIKKwkJCQkJICAuICJzaGlibmFtZSBcIiRhZmZpbFwiIjsKKwkJCQkkbWFpbFBhcmFtcyA9ICItZiIgLiBFTlZFTE9QRVNFTkRFUjsKKwkJCQltYWlsKEVSUk9SRU1BSUwsICJFcnJvciB3aXRoIFZDTCBwYWdlcyAocHJvYmxlbSBhZGRpbmcgc2hpYiBhZmZpbCkiLCAkbXNnLCAnJywgJG1haWxQYXJhbXMpOworCQkJCXByaW50ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+XG4iOworCQkJCXByaW50ICI8aDI+RXJyb3IgZW5jb3VudGVyZWQ8L2gyPlxuIjsKKwkJCQlwcmludCAiWW91IGhhdmUgYXR0ZW1wdGVkIHRvIGxvZyBpbiB0byBWQ0wgdXNpbmcgYSBTaGliYm9sZXRoPGJyPlxuIjsKKwkJCQlwcmludCAiSWRlbnRpdHkgUHJvdmlkZXIgdGhhdCBWQ0wgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgdG88YnI+XG4iOworCQkJCXByaW50ICJ3b3JrIHdpdGguIFZDTCBhZG1pbmlzdHJhdG9ycyBoYXZlIGJlZW4gbm90aWZpZWQgb2YgdGhlPGJyPlxuIjsKKwkJCQlwcmludCAicHJvYmxlbS48YnI+XG4iOworCQkJCXByaW50ICI8L2JvZHk+PC9odG1sPlxuIjsKKwkJCQlkYkRpc2Nvbm5lY3QoKTsKKwkJCQlleGl0OworCQkJfQorCQl9CisJCWVsc2UKKwkJCSRuZXdhZmZpbG5hbWUgPSAkYWZmaWxuYW1lOworCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gYWZmaWxpYXRpb24gIgorCQkJCSAuICAgICAgICAiKG5hbWUsICIKKwkJCQkgLiAgICAgICAgInNoaWJuYW1lLCAiCisJCQkJIC4gICAgICAgICJzaGlib25seSkgIgorCQkJCSAuICJWQUxVRVMgIgorCQkJCSAuICAgICAgICAiKCckbmV3YWZmaWxuYW1lJywgIgorCQkJCSAuICAgICAgICAiJyIgLiB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkYWZmaWwpIC4gIicsICIKKwkJCQkgLiAgICAgICAgIjEpIjsKKwkJZG9RdWVyeSgkcXVlcnksIDEwMSwgJ3ZjbCcsIDEpOworCQl1bnNldCgkcm93KTsKKwkJJHJvdyA9IGFycmF5KCduYW1lJyA9PiAkbmV3YWZmaWxuYW1lLCAnc2hpYm9ubHknID0+IDEpOworCX0KKwkkYWZmaWwgPSAkcm93WyduYW1lJ107CisJJGFmZmlsaWQgPSBnZXRBZmZpbGlhdGlvbklEKCRhZmZpbCk7CisKKwkjIGNyZWF0ZSBWQ0wgdXNlcmlkCisJJHVzZXJpZCA9ICIkdXNlcm5hbWVAJGFmZmlsIjsKKworCWlmKCRyb3dbJ3NoaWJvbmx5J10pIHsKKwkJJHVzZXJkYXRhID0gdXBkYXRlU2hpYlVzZXIoJHVzZXJpZCk7CisJCWlmKGFycmF5X2tleV9leGlzdHMoJ1NISUJfQUZGSUxJQVRJT04nLCAkX1NFUlZFUikpCisJCQkkZ3JvdXBzID0gJF9TRVJWRVJbJ1NISUJfQUZGSUxJQVRJT04nXTsKKwkJZWxzZQorCQkJJGdyb3VwcyA9IGFycmF5KCdzaGliYWZmaWwnID0+ICRzaGliYWZmaWwpOworCQl1cGRhdGVTaGliR3JvdXBzKCR1c2VyZGF0YVsnaWQnXSwgJGdyb3Vwcyk7CisJCSR1c2VybmlkID0gJHVzZXJkYXRhWydpZCddOworCX0KKwllbHNlIHsKKwkJJHVzZXJuaWQgPSBnZXRVc2VybGlzdElEKCR1c2VyaWQsIDEpOworCQkjIE5DU1Ugc3BlY2lmaWMKKwkJaWYoaXNfbnVsbCgkdXNlcmlkKSAmJiAkYWZmaWwgPT0gJ05DU1UnKSB7CisJCQkkdG1wID0gdXBkYXRlTERBUFVzZXIoJ05DU1UgTERBUCcsICR1c2VybmFtZSk7CisJCQkkdXNlcm5pZCA9ICR0bXBbJ2lkJ107CisJCX0KKwkJLyppZigkYWZmaWwgPT0gJ05DU1UnKSB7CisJCQlpZihhcnJheV9rZXlfZXhpc3RzKCdTSElCX0FGRklMSUFUSU9OJywgJF9TRVJWRVIpKQorCQkJCSRncm91cHMgPSAkX1NFUlZFUlsnU0hJQl9BRkZJTElBVElPTiddOworCQkJZWxzZQorCQkJCSRncm91cHMgPSBhcnJheSgnc2hpYmFmZmlsJyA9PiAkc2hpYmFmZmlsKTsKKwkJCXVwZGF0ZVNoaWJHcm91cHMoJHVzZXJuaWQsICRncm91cHMpOworCQl9Ki8KKwkJIyBlbmQgTkNTVSBzcGVjaWZpYworCQlpZihpc19udWxsKCR1c2VybmlkKSkgeworCQkJJHRtcCA9IHVwZGF0ZVNoaWJVc2VyKCR1c2VyaWQpOworCQkJJHVzZXJuaWQgPSAkdG1wWydpZCddOworCQkJIyBjYWxsIHRoaXMgc28gdGhhdCB1c2VyIGdyb3VwcyBnZXQgY29ycmVjdGx5IHBvcHVsYXRlZAorCQkJdXBkYXRlVXNlckRhdGEoJHVzZXJuaWQsICJudW1lcmljIiwgJGFmZmlsaWQpOworCQl9CisJfQorCisJYWRkTG9naW5Mb2coJHVzZXJpZCwgJ3NoaWJib2xldGgnLCAkYWZmaWxpZCwgMSk7CisKKwlpZigkYWZmaWwgPT0gJ1VOQ0cnKSB7CisJCSRnaWQgPSBnZXRVc2VyR3JvdXBJRCgnQWxsIFVOQ0cgVXNlcnMnLCAkYWZmaWxpZCk7CisJCSRxdWVyeSA9ICJJTlNFUlQgSUdOT1JFIElOVE8gdXNlcmdyb3VwbWVtYmVycyAiCisJCQkJIC4gIih1c2VyaWQsIHVzZXJncm91cGlkKSAiCisJCQkJIC4gIlZBTFVFUyAoJHVzZXJuaWQsICRnaWQpIjsKKwkJZG9RdWVyeSgkcXVlcnksIDMwNyk7CisJfQorCisJaWYoYXJyYXlfa2V5X2V4aXN0cygnU0hJQl9MT0dPVVRVUkwnLCAkX1NFUlZFUikpCisJCSRsb2dvdXR1cmwgPSAkX1NFUlZFUlsnU0hJQl9MT0dPVVRVUkwnXTsKKwllbHNlCisJCSRsb2dvdXR1cmwgPSAnJzsKKworCSMgc2F2ZSBkYXRhIHRvIHNoaWJhdXRoIHRhYmxlCisJJHNoaWJkYXRhID0gYXJyYXkoJ1NoaWItQXBwbGljYXRpb24tSUQnID0+ICRfU0VSVkVSWydTaGliLUFwcGxpY2F0aW9uLUlEJ10sCisJCQkJCQkJJ1NoaWItSWRlbnRpdHktUHJvdmlkZXInID0+ICRfU0VSVkVSWydTaGliLUlkZW50aXR5LVByb3ZpZGVyJ10sCisJCQkJCQkJIydTaGliLUF1dGhuQ29udGV4dC1EZWMnID0+ICRfU0VSVkVSWydTaGliLUF1dGhuQ29udGV4dC1EZWNsJ10sCisJCQkJCQkJJ1NISUJfTE9HT1VUVVJMJyA9PiAkbG9nb3V0dXJsLAorCQkJCQkJCSdTSElCX0VQUE4nID0+ICRfU0VSVkVSWydTSElCX0VQUE4nXSwKKwkJCQkJCQkjJ1NISUJfVU5BRkZJTElBVElPTicgPT4gJF9TRVJWRVJbJ1NISUJfVU5BRkZJTElBVElPTiddLAorCQkJCQkJCSdTSElCX0FGRklMSUFUSU9OJyA9PiAkX1NFUlZFUlsnU0hJQl9BRkZJTElBVElPTiddLAorCSk7CisJJHNlcmRhdGEgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZyhzZXJpYWxpemUoJHNoaWJkYXRhKSk7CisJJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCisJCQkgLiAiRlJPTSBzaGliYXV0aCAiCisJCQkgLiAiV0hFUkUgc2Vzc2lkID0gJ3skX1NFUlZFUlsnU2hpYi1TZXNzaW9uLUlEJ119JyI7CisJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CisJCSRzaGliYXV0aGlkID0gJHJvd1snaWQnXTsKKwl9CisJZWxzZSB7CisJCSR0cyA9IHN0cnRvdGltZSgkX1NFUlZFUlsnU2hpYi1BdXRoZW50aWNhdGlvbi1JbnN0YW50J10pOworCQkkdHMgPSB1bml4VG9EYXRldGltZSgkdHMpOworCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gc2hpYmF1dGggIgorCQkJCSAuICAgICAgICAiKHVzZXJpZCwgIiAKKwkJCQkgLiAgICAgICAgInRzLCAiCisJCQkJIC4gICAgICAgICJzZXNzaWQsICIKKwkJCQkgLiAgICAgICAgImRhdGEpICIKKwkJCQkgLiAiVkFMVUVTICIKKwkJCQkgLiAgICAgICAgIigkdXNlcm5pZCwgIgorCQkJCSAuICAgICAgICAiJyR0cycsICIKKwkJCQkgLiAgICAgICAgIid7JF9TRVJWRVJbJ1NoaWItU2Vzc2lvbi1JRCddfScsICIKKwkJCQkgLiAgICAgICAgIickc2VyZGF0YScpIjsKKwkJZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBMQVNUX0lOU0VSVF9JRCgpIiwgMTAxKTsKKwkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CisJCQkjIHRvZG8KKwkJfQorCQkkc2hpYmF1dGhpZCA9ICRyb3dbMF07CisJfQorCisJIyBnZXQgY29va2llIGRhdGEKKwkkY29va2llID0gZ2V0QXV0aENvb2tpZURhdGEoJHVzZXJpZCwgJ3NoaWJib2xldGgnLCA2MDAsICRzaGliYXV0aGlkKTsKKwkjIHNldCBjb29raWUKKwlpZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICI1LjIiLCAiPj0iKSA9PSB0cnVlKQorCQkjc2V0Y29va2llKCJWQ0xBVVRIIiwgInskY29va2llWydkYXRhJ119IiwgJGNvb2tpZVsndHMnXSwgIi8iLCBDT09LSUVET01BSU4sIDEsIDEpOworCQlzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAwLCAiLyIsIENPT0tJRURPTUFJTiwgMCwgMSk7CisJZWxzZQorCQkjc2V0Y29va2llKCJWQ0xBVVRIIiwgInskY29va2llWydkYXRhJ119IiwgJGNvb2tpZVsndHMnXSwgIi8iLCBDT09LSUVET01BSU4sIDEpOworCQlzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAwLCAiLyIsIENPT0tJRURPTUFJTik7CisKKwkjIFRPRE8gZG8gc29tZXRoaW5nIHRvIHNldCBWQ0xTS0lOIGNvb2tpZSBiYXNlZCBvbiBhZmZpbGlhdGlvbgorCisJcmV0dXJuICR1c2VyaWQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gdW5hdXRoU2hpYigkbW9kZSkKKy8vLworLy8vIFxwYXJhbSAkbW9kZSAtIGhlYWRlcnMgb3IgY29udGVudAorLy8KKy8vLyBcYnJpZWYgZm9yIGhlYWRlcnMsIHNpbXBseSByZXR1cm5zOyBmb3IgY29udGVudCwgcHJpbnRzIGluZm9ybWF0aW9uIHRoYXQKKy8vLyB1c2VyIGhhcyBiZWVuIGxvZ2dlZCBvdXQgYW5kIGFuIGlmcmFtZSB0byBsb2cgdXNlciBvdXQgb2YgU2hpYmJvbGV0aCBpZgorLy8vIFNISUJfTE9HT1VUVVJMIHdhcyBwcm92aWRlZDsgVkNMQVVUSCBjb29raWUgaXMgY2xlYXJlZCBlbHNld2hlcmUKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIHVuYXV0aFNoaWIoJG1vZGUpIHsKKwlnbG9iYWwgJHVzZXI7CisJaWYoJG1vZGUgPT0gJ2hlYWRlcnMnKQorCQlyZXR1cm47CisKKwlwcmludCAiPGgyPkxvZ291dDwvaDI+XG4iOworCXByaW50ICJZb3UgYXJlIG5vdyBsb2dnZWQgb3V0IG9mIFZDTCBhbmQgb3RoZXIgU2hpYmJvbGV0aCBhdXRoZW50aWNhdGVkIHdlYiBzaXRlcy48YnI+PGJyPlxuIjsKKwlwcmludCAiPGEgaHJlZj1cIiIgLiBCQVNFVVJMIC4gU0NSSVBUIC4gIj9tb2RlPXNlbGVjdGF1dGhcIj5SZXR1cm4gdG8gTG9naW48L2E+PGJyPjxicj48YnI+XG4iOworCXByaW50ICI8aWZyYW1lIHNyYz1cImh0dHBzOi8veyRfU0VSVkVSWydTRVJWRVJfTkFNRSddfS9TaGliYm9sZXRoLnNzby9Mb2dvdXRcIiBjbGFzcz1oaWRkZW4+XG4iOworCXByaW50ICI8L2lmcmFtZT5cbiI7CisJaWYoYXJyYXlfa2V5X2V4aXN0cygnU0hJQl9MT0dPVVRVUkwnLCAkX1NFUlZFUikpIHsKKwkgIAlwcmludCAiPGlmcmFtZSBzcmM9XCJ7JF9TRVJWRVJbJ1NISUJfTE9HT1VUVVJMJ119XCIgY2xhc3M9aGlkZGVuPlxuIjsKKwkJcHJpbnQgIjwvaWZyYW1lPlxuIjsKKwl9CisJJHNoaWJkYXRhID0gZ2V0U2hpYmF1dGhEYXRhQnlVc2VyKCR1c2VyWydpZCddKTsKKwlpZihhcnJheV9rZXlfZXhpc3RzKCdTaGliLUlkZW50aXR5LVByb3ZpZGVyJywgJHNoaWJkYXRhKSAmJgorCQkhIGVtcHR5KCRzaGliZGF0YVsnU2hpYi1JZGVudGl0eS1Qcm92aWRlciddKSkgeworCQkkdG1wID0gZXhwbG9kZSgnLycsICRzaGliZGF0YVsnU2hpYi1JZGVudGl0eS1Qcm92aWRlciddKTsKKwkJJGlkcCA9ICJ7JHRtcFswXX0vL3skdG1wWzJdfSI7CisJCXByaW50ICI8aWZyYW1lIHNyYz1cIiRpZHAvaWRwL2xvZ291dC5qc3BcIiBjbGFzcz1oaWRkZW4+XG4iOworCQlwcmludCAiPC9pZnJhbWU+XG4iOworCX0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLworLy8vIFxmbiBnZXRTaGliYXV0aERhdGFCeVVzZXIoJHVzZXJpZCkKKy8vLworLy8vIFxwYXJhbSAkdXNlcmlkIC0gbnVtZXJpYyBpZCBvZiBhIHVzZXIKKy8vLworLy8vIFxyZXR1cm4gTlVMTCBpZiBpZCBub3QgZm91bmQgaW4gdGFibGUgb3IgYXJyYXkgb2YgZGF0YSB3aXRoIHRoZXNlIGtleXM6XG4KKy8vLyBcYiB1c2VyaWQgLSBpZCBvZiB1c2VyIHRoYXQgZGF0YSBiZWxvbmdzIHRvXG4KKy8vLyBcYiB0cyAtIGRhdGV0aW1lIG9mIHdoZW4gYXV0aGRhdGEgd2FzIGNyZWF0ZWRcbgorLy8vIFxiIHNlc3NpZCAtIHNoaWJib2xldGggc2Vzc2lvbiBpZFxuCisvLy8gXGIgU2hpYi1BcHBsaWNhdGlvbi1JRCAtID8/XG4KKy8vLyBcYiBTaGliLUlkZW50aXR5LVByb3ZpZGVyIC0gPz9cbgorLy8vIFxiIFNoaWItQXV0aG5Db250ZXh0LURlYyAtID8/XG4KKy8vLyBcYiBTaGliLWxvZ291dHVybCAtIGlkcCdzIGxvZ291dCB1cmxcbgorLy8vIFxiIGVwcG4gLSBlZHUgcGVyc29uIHByaW5jaXBhbCBuYW1lIGZvciB1c2VyXG4KKy8vLyBcYiB1bnNjb3BlZC1hZmZpbGlhdGlvbiAtIHNoaWJib2xldGggdW5zY29wZWQgYWZmaWxpYXRpb25cbgorLy8vIFxiIGFmZmlsaWF0aW9uIC0gc2hpYmJvbGV0aCBzY29wZWQgYWZmaWxpYXRpb24KKy8vLworLy8vIFxicmllZiBnZXRzIGVudHJ5IGZyb20gc2hpYmF1dGggdGFibGUKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdldFNoaWJhdXRoRGF0YUJ5VXNlcigkdXNlcmlkKSB7CisJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgIgorCSAgICAgICAuICAgICAgICAidXNlcmlkLCAiCisJICAgICAgIC4gICAgICAgICJ0cywgIgorCSAgICAgICAuICAgICAgICAic2Vzc2lkLCAiCisJICAgICAgIC4gICAgICAgICJkYXRhICIKKwkgICAgICAgLiAiRlJPTSBzaGliYXV0aCAiCisJICAgICAgIC4gIldIRVJFIHVzZXJpZCA9ICR1c2VyaWQgQU5EICIKKwkgICAgICAgLiAgICAgICAidHMgPiBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMTIgSE9VUikgIgorCSAgICAgICAuICJPUkRFUiBCWSB0cyBERVNDICIKKwkgICAgICAgLiAiTElNSVQgMSI7CisJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CisJCSRkYXRhID0gdW5zZXJpYWxpemUoJHJvd1snZGF0YSddKTsKKwkJdW5zZXQoJHJvd1snZGF0YSddKTsKKwkJJGRhdGEyID0gYXJyYXlfbWVyZ2UoJHJvdywgJGRhdGEpOworCQlyZXR1cm4gJGRhdGEyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLwogLy8vIFxmbiB1cGRhdGVTaGliVXNlcigkdXNlcmlkKQpAQCAtMzksNDEgKzMxOSw0NiBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gdXBkYXRlU2hpYlVzZXIoJHVzZXJpZCkgewotCWdsb2JhbCAkbXlzcWxfbGlua192Y2w7CisJZ2xvYmFsICRteXNxbGlfbGlua192Y2w7CiAJJHJjID0gZ2V0QWZmaWxpZEFuZExvZ2luKCR1c2VyaWQsICRhZmZpbGlkKTsKIAlpZigkcmMgPT0gLTEpCiAJCXJldHVybiBOVUxMOwogCiAJJGRpc3BsYXN0ID0gJyc7Ci0JaWYoYXJyYXlfa2V5X2V4aXN0cygnZGlzcGxheU5hbWUnLCAkX1NFUlZFUikgJiYKLQkgICAhIGVtcHR5KCRfU0VSVkVSWydkaXNwbGF5TmFtZSddKSkgewotCQkjIHNwbGl0IGRpc3BsYXlOYW1lIGludG8gZmlyc3QgYW5kIGxhc3QgbmFtZXMKLQkJaWYocHJlZ19tYXRjaCgnLywvJywgJF9TRVJWRVJbJ2Rpc3BsYXlOYW1lJ10pKSB7Ci0JCQkkbmFtZXMgPSBleHBsb2RlKCcsJywgJF9TRVJWRVJbJ2Rpc3BsYXlOYW1lJ10pOworCisJJGRpc3BsYXluYW1lID0gZ2V0U2hpYlZhcignZGlzcGxheU5hbWUnKTsKKwkkZ2l2ZW5uYW1lID0gZ2V0U2hpYlZhcignZ2l2ZW5OYW1lJyk7CisJJHNuID0gZ2V0U2hpYlZhcignc24nKTsKKwkkbWFpbCA9IGdldFNoaWJWYXIoJ21haWwnKTsKKworCWlmKCRkaXNwbGF5bmFtZSAhPSAnJykgeworCQkjIHNwbGl0IGRpc3BsYXluYW1lIGludG8gZmlyc3QgYW5kIGxhc3QgbmFtZXMKKwkJaWYocHJlZ19tYXRjaCgnLywvJywgJGRpc3BsYXluYW1lKSkgeworCQkJJG5hbWVzID0gZXhwbG9kZSgnLCcsICRkaXNwbGF5bmFtZSk7CiAJCQkkdXNlclsnZmlyc3RuYW1lJ10gPSBwcmVnX3JlcGxhY2UoJy9eXHMrLycsICcnLCAkbmFtZXNbMV0pOwogCQkJJHVzZXJbJ2ZpcnN0bmFtZSddID0gcHJlZ19yZXBsYWNlKCcvXHMrJC8nLCAnJywgJHVzZXJbJ2ZpcnN0bmFtZSddKTsKIAkJCSRkaXNwbGFzdCA9IHByZWdfcmVwbGFjZSgnL15ccysvJywgJycsICRuYW1lc1swXSk7CiAJCQkkZGlzcGxhc3QgPSBwcmVnX3JlcGxhY2UoJy9ccyskLycsICcnLCAkZGlzcGxhc3QpOwogCQl9CiAJCWVsc2UgewotCQkJJG5hbWVzID0gZXhwbG9kZSgnICcsICRfU0VSVkVSWydkaXNwbGF5TmFtZSddKTsKKwkJCSRuYW1lcyA9IGV4cGxvZGUoJyAnLCAkZGlzcGxheW5hbWUpOwogCQkJJGRpc3BsYXN0ID0gYXJyYXlfcG9wKCRuYW1lcyk7CiAJCQkkdXNlclsnZmlyc3RuYW1lJ10gPSBhcnJheV9zaGlmdCgkbmFtZXMpOwogCQl9CiAJfQotCWVsc2VpZihhcnJheV9rZXlfZXhpc3RzKCdnaXZlbk5hbWUnLCAkX1NFUlZFUikgJiYKLQkgICAhIGVtcHR5KCRfU0VSVkVSWydnaXZlbk5hbWUnXSkpCi0JCSR1c2VyWydmaXJzdG5hbWUnXSA9ICRfU0VSVkVSWydnaXZlbk5hbWUnXTsKKwllbHNlaWYoJGdpdmVubmFtZSAhPSAnJykKKwkJJHVzZXJbJ2ZpcnN0bmFtZSddID0gJGdpdmVubmFtZTsKIAllbHNlCiAJCSR1c2VyWydmaXJzdG5hbWUnXSA9ICcnOwogCi0JaWYoYXJyYXlfa2V5X2V4aXN0cygnc24nLCAkX1NFUlZFUikgJiYKLQkgICAhIGVtcHR5KCRfU0VSVkVSWydzbiddKSkKLQkJJHVzZXJbImxhc3RuYW1lIl0gPSAkX1NFUlZFUlsnc24nXTsKKwlpZigkc24gIT0gJycpCisJCSR1c2VyWyJsYXN0bmFtZSJdID0gJHNuOwogCWVsc2UKIAkJJHVzZXJbJ2xhc3RuYW1lJ10gPSAkZGlzcGxhc3Q7Ci0JaWYoYXJyYXlfa2V5X2V4aXN0cygnbWFpbCcsICRfU0VSVkVSKSkKLQkJJHVzZXJbImVtYWlsIl0gPSAkX1NFUlZFUlsnbWFpbCddOworCisJaWYoJG1haWwgIT0gJycpCisJCSR1c2VyWyJlbWFpbCJdID0gJG1haWw7CisKIAkkdXNlclsndW5pdHlpZCddID0gJHVzZXJpZDsKIAkkdXNlclsnYWZmaWxpZCddID0gJGFmZmlsaWQ7CiAKQEAgLTgzLDcgKzM2OCw3IEBACiAJICAgICAgIC4gIldIRVJFIHVuaXR5aWQgPSAnJHVzZXJpZCcgQU5EICIKIAkgICAgICAgLiAgICAgICAiYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJIyBhZGQgdXNlciB0byBvdXIgZGIKIAkJJHVzZXJbJ2lkJ10gPSBhZGRTaGliVXNlcigkdXNlcik7CiAJCXJldHVybiAkdXNlcjsKQEAgLTkxLDEzICszNzYsMTMgQEAKIAogCSMgdXBkYXRlIHVzZXIncyBkYXRhIGluIGRiCiAJJHVzZXJbJ2lkJ10gPSAkcm93WydpZCddOwotCSRmaXJzdCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdXNlclsnZmlyc3RuYW1lJ10pOwotCSRsYXN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1c2VyWydsYXN0bmFtZSddKTsKKwkkZmlyc3QgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdXNlclsnZmlyc3RuYW1lJ10pOworCSRsYXN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXJbJ2xhc3RuYW1lJ10pOwogCSRxdWVyeSA9ICJVUERBVEUgdXNlciAiCiAJICAgICAgIC4gIlNFVCBmaXJzdG5hbWUgPSAnJGZpcnN0JywgIgogCSAgICAgICAuICAgICAibGFzdG5hbWUgPSAnJGxhc3QnLCAiOwogCWlmKGFycmF5X2tleV9leGlzdHMoJ2VtYWlsJywgJHVzZXIpKSB7Ci0JCSRlbWFpbCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdXNlclsnZW1haWwnXSk7CisJCSRlbWFpbCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR1c2VyWydlbWFpbCddKTsKIAkJJHF1ZXJ5IC49ICJlbWFpbCA9ICckZW1haWwnLCAiOwogCX0KICAgICAkcXVlcnkgLj0gICAgImxhc3R1cGRhdGVkID0gTk9XKCksICIKQEAgLTEyNCwxMCArNDA5LDEwIEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBhZGRTaGliVXNlcigkdXNlcikgewotCWdsb2JhbCAkbXlzcWxfbGlua192Y2w7Ci0JJHVuaXR5aWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJbJ3VuaXR5aWQnXSk7Ci0JJGZpcnN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1c2VyWydmaXJzdG5hbWUnXSk7Ci0JJGxhc3QgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJbJ2xhc3RuYW1lJ10pOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsOworCSR1bml0eWlkID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXJbJ3VuaXR5aWQnXSk7CisJJGZpcnN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXJbJ2ZpcnN0bmFtZSddKTsKKwkkbGFzdCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR1c2VyWydsYXN0bmFtZSddKTsKIAkkcXVlcnkgPSAiSU5TRVJUIElOVE8gdXNlciAiCiAJICAgICAgIC4gICAgICAgICIodW5pdHlpZCwgIgogCSAgICAgICAuICAgICAgICAiYWZmaWxpYXRpb25pZCwgIgpAQCAtMTQzLDE0ICs0MjgsMTQgQEAKIAkgICAgICAgLiAgICAgICAgIickZmlyc3QnLCAiCiAJICAgICAgIC4gICAgICAgICInJGxhc3QnLCAiOwogCWlmKGFycmF5X2tleV9leGlzdHMoJ2VtYWlsJywgJHVzZXIpKSB7Ci0JCSRlbWFpbCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdXNlclsnZW1haWwnXSk7CisJCSRlbWFpbCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR1c2VyWydlbWFpbCddKTsKIAkJJHF1ZXJ5IC49ICAgICInJGVtYWlsJywgIjsKIAl9CiAJJHF1ZXJ5IC49ICAgICAgICIwLCAiCiAJICAgICAgIC4gICAgICAgICJOT1coKSkiOwogCWRvUXVlcnkoJHF1ZXJ5LCAxMDEsICd2Y2wnLCAxKTsKLQlpZihteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCkpIHsKLQkJJHVzZXJbJ2lkJ10gPSBteXNxbF9pbnNlcnRfaWQoJG15c3FsX2xpbmtfdmNsKTsKKwlpZihteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKSkgeworCQkkdXNlclsnaWQnXSA9IG15c3FsaV9pbnNlcnRfaWQoJG15c3FsaV9saW5rX3ZjbCk7CiAJCXJldHVybiAkdXNlclsnaWQnXTsKIAl9CiAJZWxzZQpAQCAtMTg4LDE4ICs0NzMsMjMgQEAKIAkJIyBnZXQgaWQgZm9yIHRoZSBncm91cCdzIGFmZmlsaWF0aW9uCiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQgRlJPTSBhZmZpbGlhdGlvbiBXSEVSRSBzaGlibmFtZSA9ICckc2hpYmFmZmlsJyI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkgeworCQkJJHF1ZXJ5ID0gIlNFTEVDVCBpZCBGUk9NIGFmZmlsaWF0aW9uIFdIRVJFIHNoaWJuYW1lIExJS0UgJyUuJHNoaWJhZmZpbCciOworCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CisJCQlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKQorCQkJCWNvbnRpbnVlOworCQl9CiAJCSRhZmZpbGlkID0gJHJvd1snaWQnXTsKIAkJIyBwcmVwZW5kIHNoaWItIGFuZCBlc2NhcGUgaXQgZm9yIG15c3FsCi0JCSRncnAgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoInNoaWItIiAuICRuYW1lKTsKKwkJJGdycCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCJzaGliLSIgLiAkbmFtZSk7CiAJCWFycmF5X3B1c2goJG5ld3VzZXJncm91cHMsIGdldFVzZXJHcm91cElEKCRncnAsICRhZmZpbGlkKSk7CiAJfQogCiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIGFmZmlsaWF0aW9uIFdIRVJFIHNoaWJuYW1lID0gJyRzaGliYWZmaWwnIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCk7CiAJJGFmZmlsaWQgPSAkcm93WydpZCddOwotCSRncnAgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoIkFsbCB7JHJvd1snbmFtZSddfSBVc2VycyIpOworCSRncnAgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygiQWxsIHskcm93WyduYW1lJ119IFVzZXJzIik7CiAJYXJyYXlfcHVzaCgkbmV3dXNlcmdyb3VwcywgZ2V0VXNlckdyb3VwSUQoJGdycCwgJGFmZmlsaWQpKTsKIAogCSRuZXd1c2VyZ3JvdXBzID0gYXJyYXlfdW5pcXVlKCRuZXd1c2VyZ3JvdXBzKTsKQEAgLTIyNCw3ICs1MTQsNyBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gYWRkU2hpYlVzZXJTdHViKCRhZmZpbGlkLCAkdXNlcmlkKSB7Ci0JZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKKwlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkkcXVlcnkgPSAiSU5TRVJUIElOVE8gdXNlciAiCiAJICAgICAgIC4gICAgICAgICIodW5pdHlpZCwgIgogCSAgICAgICAuICAgICAgICAiYWZmaWxpYXRpb25pZCwgIgpAQCAtMjM4LDEwICs1MjgsMzAgQEAKIAkgICAgICAgLiAgICAgICAgIjAsICIKIAkgICAgICAgLiAgICAgICAgIjApIjsKIAlkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYobXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpKQorCWlmKG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpKQogCQlyZXR1cm4gZGJMYXN0SW5zZXJ0SUQoKTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwogfQogCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vCisvLy8gXGZuIGdldFNoaWJWYXIoJGtleSkKKy8vLworLy8vIFxwYXJhbSAka2V5IC0gc2hpYiB2YXJpYWJsZSB0byBjaGVjayBmb3IKKy8vLworLy8vIFxyZXR1cm4gdmFsdWUgb2Ygc2hpYiB2YXJpYWJsZSBvciBlbXB0eSBzdHJpbmcgaWYgbm90IGZvdW5kCisvLy8KKy8vLyBcYnJpZWYgY2hlY2tzIGZvciB2YXJpb3VzIGZvcm1zIG9mICRrZXkgaW4gJF9TRVJWRVIKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdldFNoaWJWYXIoJGtleSkgeworCSRrZXkyID0gIlNISUJfIiAuIHN0cnRvdXBwZXIoJGtleSk7CisJJHZhbCA9ICcnOworCWlmKGlzc2V0KCRfU0VSVkVSWyRrZXldKSAmJiAhIGVtcHR5KCRfU0VSVkVSWyRrZXldKSkKKwkJcmV0dXJuICRfU0VSVkVSWyRrZXldOworCWVsc2VpZihpc3NldCgkX1NFUlZFUlska2V5Ml0pICYmICEgZW1wdHkoJF9TRVJWRVJbJGtleTJdKSkKKwkJcmV0dXJuICRfU0VSVkVSWyRrZXkyXTsKK30KKwogPz4KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2Jsb2NrYWxsb2NhdGlvbnMucGhwIGIvd2ViLy5odC1pbmMvYmxvY2thbGxvY2F0aW9ucy5waHAKaW5kZXggNjZlZTE2Zi4uZWQwZmZmYSAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvYmxvY2thbGxvY2F0aW9ucy5waHAKKysrIGIvd2ViLy5odC1pbmMvYmxvY2thbGxvY2F0aW9ucy5waHAKQEAgLTc1LDcgKzc1LDcgQEAKIAkgICAgICAgLiAiV0hFUkUgaWQgaW4gKCRpbmlkcykgQU5EICIKIAkgICAgICAgLiAgICAgICAic3RhdHVzID0gJ2FjY2VwdGVkJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkYmxvY2tzWyRyb3dbJ2lkJ11dID0gJHJvd1snbmFtZSddOwogCXByaW50ICI8aHI+XG4iOwogCXByaW50ICI8aDI+IiAuIGkoIllvdXIgQWN0aXZlIEJsb2NrIEFsbG9jYXRpb25zIikgLiAiPC9oMj5cbiI7CkBAIC02MDYsNyArNjA2LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQkkbW5pZCA9IGFycmF5X3JhbmQoJG1hbmFnZW1lbnRub2Rlcyk7Ci0JCSRlc2NuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRkYXRhWyduYW1lJ10pOworCQkkZXNjbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWyduYW1lJ10pOwogCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gYmxvY2tSZXF1ZXN0ICIKIAkJICAgICAgIC4gICAgICAgICIobmFtZSwgIgogCQkgICAgICAgLiAgICAgICAgImltYWdlaWQsICIKQEAgLTY0NCw3ICs2NDQsNyBAQAogCQkgICAgICAgLiAgICAgICAiZW5kID4gTk9XKCkgQU5EICIKIAkJICAgICAgIC4gICAgICAgImJsb2NrUmVxdWVzdGlkID0gJGJsb2NrcmVxaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkY2hlY2tDdXJCbG9ja1RpbWUgPSAxOwogCQkJJGN1ckJsb2NrVGltZSA9ICRyb3c7CiAJCX0KQEAgLTY2MCw3ICs2NjAsNyBAQAogCQkkcXVlcnkgPSAiREVMRVRFIEZST00gYmxvY2tXZWJUaW1lIFdIRVJFIGJsb2NrUmVxdWVzdGlkID0gJGJsb2NrcmVxaWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAotCQkkZXNjbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnbmFtZSddKTsKKwkJJGVzY25hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnbmFtZSddKTsKIAkJJHF1ZXJ5ID0gIlVQREFURSBibG9ja1JlcXVlc3QgIgogCQkgICAgICAgLiAiU0VUIG5hbWUgPSAnJGVzY25hbWUnLCAiIAogCQkgICAgICAgLiAgICAgImltYWdlaWQgPSB7JGRhdGFbJ2ltYWdlaWQnXX0sICIKQEAgLTY3Myw3ICs2NzMsNyBAQAogCQlkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAl9CiAJZWxzZWlmKCRtZXRob2QgPT0gJ3JlcXVlc3QnKSB7Ci0JCSRlc2Njb21tZW50cyA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY29tbWVudHMnXSk7CisJCSRlc2Njb21tZW50cyA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydjb21tZW50cyddKTsKIAkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGJsb2NrUmVxdWVzdCAiCiAJCSAgICAgICAuICAgICAgICAiKG5hbWUsICIKIAkJICAgICAgIC4gICAgICAgICJpbWFnZWlkLCAiCkBAIC04MTEsNyArODExLDcgQEAKIAkJICAgICAgIC4gICAgICAgImJsb2NrUmVxdWVzdGlkID0gJGJsb2NrcmVxaWQgQU5EICIKIAkJICAgICAgIC4gICAgICAgImlkICE9IHskY3VyQmxvY2tUaW1lWydpZCddfSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCWlmKCRjdXJCbG9ja1RpbWVbJ2VuZCddICE9ICRyb3dbJ2VuZCddKSB7CiAJCQkJIyB1cGRhdGUgb2xkIGVuZCB0aW1lCiAJCQkJJHF1ZXJ5ID0gIlVQREFURSBibG9ja1RpbWVzICIKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAJICAgICAgIC4gICAgICAgInUuZW1haWwgIT0gJyciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkYWRkcnMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGFkZHJzW10gPSAkcm93WydlbWFpbCddOwogCXJldHVybiBpbXBsb2RlKCcsJywgJGFkZHJzKTsKIH0KQEAgLTExMTksNyArMTExOSw3IEBACiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJHNraXBzID0gYXJyYXkoKTsKIAkkbm9za2lwcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGtleSA9ICJ7JHJvd1snc3RhcnQnXX06eyRyb3dbJ2VuZCddfSI7CiAJCWlmKCRyb3dbJ3NraXAnXSkKIAkJCSRza2lwc1ska2V5XSA9ICRyb3dbJ2lkJ107CkBAIC0xMTgxLDExICsxMTgxLDExIEBACiAJICAgICAgIC4gIk9SREVSIEJZIGIubmFtZSI7CiAJJGFsbGJsb2NraWRzID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93Wydncm91cCddID09ICcnKSB7CiAJCQkkcXVlcnkzID0gIlNFTEVDVCBuYW1lIEZST00gdXNlcmdyb3VwIFdIRVJFIGlkID0geyRyb3dbJ3VzZXJncm91cGlkJ119IjsKIAkJCSRxaDMgPSBkb1F1ZXJ5KCRxdWVyeTMsIDEwMSk7Ci0JCQlpZigkcm93MyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaDMpKQorCQkJaWYoJHJvdzMgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoMykpCiAJCQkJJHJvd1snZ3JvdXAnXSA9ICRyb3czWyduYW1lJ107CiAJCX0KIAkJJGFsbGJsb2NraWRzW10gPSAkcm93WydpZCddOwpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAkJICAgICAgICAuICJPUkRFUiBCWSBzdGFydCAiCiAJCSAgICAgICAgLiAiTElNSVQgMSI7CiAJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7Ci0JCWlmKCRyb3cyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoMikpIHsKKwkJaWYoJHJvdzIgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoMikpIHsKIAkJCWlmKGFycmF5X2tleV9leGlzdHMoJ3R6b2Zmc2V0JywgJF9TRVNTSU9OWydwZXJzaXN0ZGF0YSddKSkgewogCQkJCSR0bXAgPSBkYXRlKCduL2oveStnOmk9QT1UJywgJHJvdzJbJ3VuaXhzdGFydCddKTsKIAkJCQkkYmxvY2tzWyRyb3dbJ2lkJ11dWyduZXh0c3RhcnQnXSA9IHN0cl9yZXBsYWNlKGFycmF5KCcrJywgJz0nKSwgYXJyYXkoJzxicj4nLCAnJm5ic3A7JyksICR0bXApOwpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKIAkJCSAgICAgICAuICJGUk9NIGJsb2NrV2ViRGF0ZSAiCiAJCQkgICAgICAgLiAiV0hFUkUgYmxvY2tSZXF1ZXN0aWQgPSAkaWQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkJYWJvcnQoMTAxKTsKIAkJCSRibG9ja3NbJGlkXSA9IGFycmF5X21lcmdlKCRyZXF1ZXN0LCAkcm93KTsKIAkJCSR3ZGF5cyA9IGFycmF5KCk7CkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0geyRyZXF1ZXN0WydpZCddfSAiCiAJCQkgICAgICAgLiAiT1JERVIgQlkgc3RhcnRtZXJpZGlhbiwgc3RhcnRob3VyLCBzdGFydG1pbnV0ZSI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQkkYmxvY2tzWyRpZF1bJ3N3aG91ciddWyRyb3dbJ29yZGVyJ11dID0gJHJvd1snc3RhcnRob3VyJ107CiAJCQkJJGJsb2Nrc1skaWRdWydzd21pbnV0ZSddWyRyb3dbJ29yZGVyJ11dID0gJHJvd1snc3RhcnRtaW51dGUnXTsKIAkJCQkkYmxvY2tzWyRpZF1bJ3N3bWVyaWRpYW4nXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0bWVyaWRpYW4nXTsKQEAgLTEyNjcsNyArMTI2Nyw3IEBACiAJCQkgICAgICAgLiAiRlJPTSBibG9ja1dlYkRhdGUgIgogCQkJICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0gJGlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJCWFib3J0KDEwMSk7CiAJCQkkYmxvY2tzWyRpZF0gPSBhcnJheV9tZXJnZSgkcmVxdWVzdCwgJHJvdyk7CiAJCQkkcXVlcnkgPSAiU0VMRUNUIHN0YXJ0aG91ciwgIgpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAkJCSAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9IHskcmVxdWVzdFsnaWQnXX0gIgogCQkJICAgICAgIC4gIk9SREVSIEJZIHN0YXJ0bWVyaWRpYW4sIHN0YXJ0aG91ciwgc3RhcnRtaW51dGUiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJGJsb2Nrc1skaWRdWydzbWhvdXInXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0aG91ciddOwogCQkJCSRibG9ja3NbJGlkXVsnc21taW51dGUnXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0bWludXRlJ107CiAJCQkJJGJsb2Nrc1skaWRdWydzbW1lcmlkaWFuJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydG1lcmlkaWFuJ107CkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0gJGlkICIKIAkJCSAgICAgICAuICJPUkRFUiBCWSBzdGFydCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQlpZigkcm93WydkYXRlJ10gPT0gJzAwLzAwLzAwJykKIAkJCQkJJGJsb2Nrc1skaWRdWydkYXRlJ11bJHJvd1snb3JkZXInXV0gPSAnJzsKIAkJCQllbHNlCkBAIC0xMzEzLDcgKzEzMTMsNyBAQAogCQkJICAgICAgIC4gIkZST00gYmxvY2tXZWJUaW1lICIKIAkJCSAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9IHskcmVxdWVzdFsnaWQnXX0iOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJGJsb2Nrc1skaWRdWydzbGhvdXInXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0aG91ciddOwogCQkJCSRibG9ja3NbJGlkXVsnc2xtaW51dGUnXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0bWludXRlJ107CiAJCQkJJGJsb2Nrc1skaWRdWydzbG1lcmlkaWFuJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydG1lcmlkaWFuJ107CkBAIC0xNDQ4LDE1ICsxNDQ4LDE1IEBACiAJJHJ0IC49ICJ0aXRsZT1cIiIgLiBpKCJCbG9jayBBbGxvY2F0aW9uIFRpbWVzIikgLiAiXCI+XG4iOwogCSRydCAuPSAiPGgyPiIgLiBpKCJCbG9jayBBbGxvY2F0aW9uIFRpbWVzIikgLiAiPC9oMj5cbiI7CiAJJHJ0IC49ICI8dGFibGUgZG9qb1R5cGU9XCJkb2pveC5ncmlkLkRhdGFHcmlkXCIganNJZD1cImJsb2NrVGltZXNHcmlkXCIgc29ydEluZm89MSAiOwotCSRydCAuPSAic3R5bGU9XCJ3aWR0aDogMjc4cHg7IGhlaWdodDogMjAwcHg7XCI+XG4iOworCSRydCAuPSAic3R5bGU9XCJ3aWR0aDogMzI4cHg7IGhlaWdodDogMjAwcHg7XCI+XG4iOwogCSRydCAuPSAiPHNjcmlwdCB0eXBlPVwiZG9qby9tZXRob2RcIiBldmVudD1cIm9uU3R5bGVSb3dcIiBhcmdzPVwicm93XCI+XG4iOwogCSRydCAuPSAiYmxvY2tUaW1lUm93U3R5bGUocm93KTtcbiI7CiAJJHJ0IC49ICI8L3NjcmlwdD5cbiI7CiAJJHJ0IC49ICI8dGhlYWQ+XG4iOwogCSRydCAuPSAiPHRyPlxuIjsKLQkkcnQgLj0gIjx0aCBmaWVsZD1cInN0YXJ0XCIgd2lkdGg9XCI2NXB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWREYXRlXCI+IiAuIGkoIkRhdGUiKSAuICI8L3RoPlxuIjsKLQkkcnQgLj0gIjx0aCBmaWVsZD1cInN0YXJ0XCIgd2lkdGg9XCI1NHB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWRTdGFydFwiPiIgLiBpKCJTdGFydCIpIC4gIjwvdGg+XG4iOwotCSRydCAuPSAiPHRoIGZpZWxkPVwiZW5kXCIgd2lkdGg9XCI1NHB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWRFbmRcIj4iIC4gaSgiRW5kIikgLiAiPC90aD5cbiI7CisJJHJ0IC49ICI8dGggZmllbGQ9XCJzdGFydFwiIHdpZHRoPVwiNzBweFwiIGZvcm1hdHRlcj1cImJsb2NrVGltZXNHcmlkRGF0ZVwiPiIgLiBpKCJEYXRlIikgLiAiPC90aD5cbiI7CisJJHJ0IC49ICI8dGggZmllbGQ9XCJzdGFydFwiIHdpZHRoPVwiODVweFwiIGZvcm1hdHRlcj1cImJsb2NrVGltZXNHcmlkU3RhcnRcIj4iIC4gaSgiU3RhcnQiKSAuICI8L3RoPlxuIjsKKwkkcnQgLj0gIjx0aCBmaWVsZD1cImVuZFwiIHdpZHRoPVwiODVweFwiIGZvcm1hdHRlcj1cImJsb2NrVGltZXNHcmlkRW5kXCI+IiAuIGkoIkVuZCIpIC4gIjwvdGg+XG4iOwogCSRydCAuPSAiPHRoIGZpZWxkPVwiZGVsYnRuXCIgd2lkdGg9XCI2MHB4XCI+IiAuIGkoIlNraXAiKSAuICI8L3RoPlxuIjsKIAkkcnQgLj0gIjwvdHI+XG4iOwogCSRydCAuPSAiPC90aGVhZD5cbiI7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSBiLm5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRibG9ja3MgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGJsb2Nrc1skcm93WydpZCddXSA9ICRyb3c7CiAJaWYoZW1wdHkoJGJsb2NrcykpCiAJCXJldHVybjsKQEAgLTE1NDMsNyArMTU0Myw3IEBACiAJCQkgICAgICAgLiAiRlJPTSBibG9ja1dlYkRhdGUgIgogCQkJICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0gJGlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJCWFib3J0KDEwMSk7CiAJCQkkYmxvY2tzWyRpZF0gPSBhcnJheV9tZXJnZSgkcmVxdWVzdCwgJHJvdyk7CiAJCQkkd2RheXMgPSBhcnJheSgpOwpAQCAtMTU2NCw3ICsxNTY0LDcgQEAKIAkJCSAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9IHskcmVxdWVzdFsnaWQnXX0gIgogCQkJICAgICAgIC4gIk9SREVSIEJZIHN0YXJ0bWVyaWRpYW4sIHN0YXJ0aG91ciwgc3RhcnRtaW51dGUiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJGJsb2Nrc1skaWRdWydzd2hvdXInXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0aG91ciddOwogCQkJCSRibG9ja3NbJGlkXVsnc3dtaW51dGUnXVskcm93WydvcmRlciddXSA9ICRyb3dbJ3N0YXJ0bWludXRlJ107CiAJCQkJJGJsb2Nrc1skaWRdWydzd21lcmlkaWFuJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydG1lcmlkaWFuJ107CkBAIC0xNTgxLDcgKzE1ODEsNyBAQAogCQkJICAgICAgIC4gIkZST00gYmxvY2tXZWJEYXRlICIKIAkJCSAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9ICRpZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCQlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQlhYm9ydCgxMDEpOwogCQkJJGJsb2Nrc1skaWRdID0gYXJyYXlfbWVyZ2UoJHJlcXVlc3QsICRyb3cpOwogCQkJJHF1ZXJ5ID0gIlNFTEVDVCBzdGFydGhvdXIsICIKQEAgLTE1OTUsNyArMTU5NSw3IEBACiAJCQkgICAgICAgLiAiV0hFUkUgYmxvY2tSZXF1ZXN0aWQgPSB7JHJlcXVlc3RbJ2lkJ119ICIKIAkJCSAgICAgICAuICJPUkRFUiBCWSBzdGFydG1lcmlkaWFuLCBzdGFydGhvdXIsIHN0YXJ0bWludXRlIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCSRibG9ja3NbJGlkXVsnc21ob3VyJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydGhvdXInXTsKIAkJCQkkYmxvY2tzWyRpZF1bJ3NtbWludXRlJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydG1pbnV0ZSddOwogCQkJCSRibG9ja3NbJGlkXVsnc21tZXJpZGlhbiddWyRyb3dbJ29yZGVyJ11dID0gJHJvd1snc3RhcnRtZXJpZGlhbiddOwpAQCAtMTYxMSw3ICsxNjExLDcgQEAKIAkJCSAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9ICRpZCAiCiAJCQkgICAgICAgLiAiT1JERVIgQlkgc3RhcnQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJaWYoJHJvd1snZGF0ZSddID09ICcwMC8wMC8wMCcpCiAJCQkJCSRibG9ja3NbJGlkXVsnZGF0ZSddWyRyb3dbJ29yZGVyJ11dID0gJyc7CiAJCQkJZWxzZQpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIAkJCSAgICAgICAuICJGUk9NIGJsb2NrV2ViVGltZSAiCiAJCQkgICAgICAgLiAiV0hFUkUgYmxvY2tSZXF1ZXN0aWQgPSB7JHJlcXVlc3RbJ2lkJ119IjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCSRibG9ja3NbJGlkXVsnc2xob3VyJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydGhvdXInXTsKIAkJCQkkYmxvY2tzWyRpZF1bJ3NsbWludXRlJ11bJHJvd1snb3JkZXInXV0gPSAkcm93WydzdGFydG1pbnV0ZSddOwogCQkJCSRibG9ja3NbJGlkXVsnc2xtZXJpZGlhbiddWyRyb3dbJ29yZGVyJ11dID0gJHJvd1snc3RhcnRtZXJpZGlhbiddOwpAQCAtMTc0MSwxNyArMTc0MSwxNyBAQAogCSRydCAuPSBpKCJCbG9jayBBbGxvY2F0aW9uIFRpbWVzIikgLiAiXCI+XG4iOwogCSRydCAuPSAiPGgyPiIgLiBpKCJCbG9jayBBbGxvY2F0aW9uIFRpbWVzIikgLiAiPC9oMj5cbiI7CiAJJHJ0IC49ICI8dGFibGUgZG9qb1R5cGU9XCJkb2pveC5ncmlkLkRhdGFHcmlkXCIganNJZD1cImJsb2NrVGltZXNHcmlkXCIgc29ydEluZm89MSAiOwotCSRydCAuPSAic3R5bGU9XCJ3aWR0aDogMjc4cHg7IGhlaWdodDogMjAwcHg7XCI+XG4iOworCSRydCAuPSAic3R5bGU9XCJ3aWR0aDogMzI4cHg7IGhlaWdodDogMjAwcHg7XCI+XG4iOwogCSRydCAuPSAiPHNjcmlwdCB0eXBlPVwiZG9qby9tZXRob2RcIiBldmVudD1cIm9uU3R5bGVSb3dcIiBhcmdzPVwicm93XCI+XG4iOwogCSRydCAuPSAiYmxvY2tUaW1lUm93U3R5bGUocm93KTtcbiI7CiAJJHJ0IC49ICI8L3NjcmlwdD5cbiI7CiAJJHJ0IC49ICI8dGhlYWQ+XG4iOwogCSRydCAuPSAiPHRyPlxuIjsKLQkkcnQgLj0gIjx0aCBmaWVsZD1cInN0YXJ0XCIgd2lkdGg9XCI2MHB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWREYXRlXCI+IjsKKwkkcnQgLj0gIjx0aCBmaWVsZD1cInN0YXJ0XCIgd2lkdGg9XCI3MHB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWREYXRlXCI+IjsKIAkkcnQgLj0gaSgiRGF0ZSIpIC4gIjwvdGg+XG4iOwotCSRydCAuPSAiPHRoIGZpZWxkPVwic3RhcnRcIiB3aWR0aD1cIjU0cHhcIiBmb3JtYXR0ZXI9XCJibG9ja1RpbWVzR3JpZFN0YXJ0XCI+IjsKKwkkcnQgLj0gIjx0aCBmaWVsZD1cInN0YXJ0XCIgd2lkdGg9XCI4NXB4XCIgZm9ybWF0dGVyPVwiYmxvY2tUaW1lc0dyaWRTdGFydFwiPiI7CiAJJHJ0IC49IGkoIlN0YXJ0IikgLiAiPC90aD5cbiI7Ci0JJHJ0IC49ICI8dGggZmllbGQ9XCJlbmRcIiB3aWR0aD1cIjU0cHhcIiBmb3JtYXR0ZXI9XCJibG9ja1RpbWVzR3JpZEVuZFwiPiI7CisJJHJ0IC49ICI8dGggZmllbGQ9XCJlbmRcIiB3aWR0aD1cIjg1cHhcIiBmb3JtYXR0ZXI9XCJibG9ja1RpbWVzR3JpZEVuZFwiPiI7CiAJJHJ0IC49IGkoIkVuZCIpIC4gIjwvdGg+XG4iOwogCSRydCAuPSAiPHRoIGZpZWxkPVwiZGVsYnRuXCIgd2lkdGg9XCI2MHB4XCI+IiAuIGkoIlNraXAiKSAuICI8L3RoPlxuIjsKIAkkcnQgLj0gIjwvdHI+XG4iOwpAQCAtMTgyMyw3ICsxODIzLDcgQEAKIAkkaCAuPSAiICA8L3RyPlxuIjsKIAkkZCA9ICcnOwogCSRncm91cHMgPSBnZXRVc2VyR3JvdXBzKDAsICR1c2VyWydhZmZpbGlhdGlvbmlkJ10pOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCRyb3dbJ3JlcGVhdGluZyddID09ICd3ZWVrbHknKSB7CiAJCQkkcXVlcnkyID0gIlNFTEVDVCBEQVRFX0ZPUk1BVChzdGFydCwgJyVtLyVkLyV5JykgQVMgc3dkYXRlLCAiCiAJCQkgICAgICAgIC4gICAgICAgICJEQVRFX0ZPUk1BVChlbmQsICclbS8lZC8leScpQVMgZXdkYXRlLCAiIApAQCAtMTgzMyw3ICsxODMzLDcgQEAKIAkJCSAgICAgICAgLiAiRlJPTSBibG9ja1dlYkRhdGUgIgogCQkJICAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9IHskcm93WydpZCddfSI7CiAJCQkkcWgyID0gZG9RdWVyeSgkcXVlcnkyLCAxMDEpOwotCQkJaWYoISAkcm93MiA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaDIpKQorCQkJaWYoISAkcm93MiA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgyKSkKIAkJCQlhYm9ydCgxMDEpOwogCQkJJHJvdyA9IGFycmF5X21lcmdlKCRyb3csICRyb3cyKTsKIAkJCSR3ZGF5cyA9IGFycmF5KCk7CkBAIC0xODU0LDcgKzE4NTQsNyBAQAogCQkJICAgICAgICAuICJPUkRFUiBCWSBzdGFydG1lcmlkaWFuLCBzdGFydGhvdXIsIHN0YXJ0bWludXRlIjsKIAkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7CiAJCQkkcm93Wyd0aW1lcyddID0gYXJyYXkoKTsKLQkJCXdoaWxlKCRyb3cyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoMikpIHsKKwkJCXdoaWxlKCRyb3cyID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaDIpKSB7CiAJCQkJJHJvd1snc3dob3VyJ11bJHJvdzJbJ29yZGVyJ11dID0gJHJvdzJbJ3N0YXJ0aG91ciddOwogCQkJCSRyb3dbJ3N3bWludXRlJ11bJHJvdzJbJ29yZGVyJ11dID0gJHJvdzJbJ3N0YXJ0bWludXRlJ107CiAJCQkJJHJvd1snc3dtZXJpZGlhbiddWyRyb3cyWydvcmRlciddXSA9ICRyb3cyWydzdGFydG1lcmlkaWFuJ107CkBAIC0xODc4LDcgKzE4NzgsNyBAQAogCQkJICAgICAgICAuICJGUk9NIGJsb2NrV2ViRGF0ZSAiCiAJCQkgICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0geyRyb3dbJ2lkJ119IjsKIAkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7Ci0JCQlpZighICRyb3cyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoMikpCisJCQlpZighICRyb3cyID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaDIpKQogCQkJCWFib3J0KDEwMSk7CiAJCQkkcm93ID0gYXJyYXlfbWVyZ2UoJHJvdywgJHJvdzIpOwogCQkJJHF1ZXJ5MiA9ICJTRUxFQ1Qgc3RhcnRob3VyLCAiCkBAIC0xODkzLDcgKzE4OTMsNyBAQAogCQkJICAgICAgICAuICJPUkRFUiBCWSBzdGFydG1lcmlkaWFuLCBzdGFydGhvdXIsIHN0YXJ0bWludXRlIjsKIAkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7CiAJCQkkcm93Wyd0aW1lcyddID0gYXJyYXkoKTsKLQkJCXdoaWxlKCRyb3cyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoMikpIHsKKwkJCXdoaWxlKCRyb3cyID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaDIpKSB7CiAJCQkJJHJvd1snc21ob3VyJ11bJHJvdzJbJ29yZGVyJ11dID0gJHJvdzJbJ3N0YXJ0aG91ciddOwogCQkJCSRyb3dbJ3NtbWludXRlJ11bJHJvdzJbJ29yZGVyJ11dID0gJHJvdzJbJ3N0YXJ0bWludXRlJ107CiAJCQkJJHJvd1snc21tZXJpZGlhbiddWyRyb3cyWydvcmRlciddXSA9ICRyb3cyWydzdGFydG1lcmlkaWFuJ107CkBAIC0xOTE2LDcgKzE5MTYsNyBAQAogCQkJICAgICAgICAuICJXSEVSRSBibG9ja1JlcXVlc3RpZCA9IHskcm93WydpZCddfSAiCiAJCQkgICAgICAgIC4gIk9SREVSIEJZIHN0YXJ0IjsKIAkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7Ci0JCQl3aGlsZSgkcm93MiA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaDIpKSB7CisJCQl3aGlsZSgkcm93MiA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgyKSkgewogCQkJCWlmKCRyb3cyWydkYXRlJ10gPT0gJzAwLzAwLzAwJykKIAkJCQkJJHJvd1snZGF0ZSddWyRyb3cyWydvcmRlciddXSA9ICcnOwogCQkJCWVsc2UKQEAgLTE5MzQsNyArMTkzNCw3IEBACiAJCQkgICAgICAgIC4gIldIRVJFIGJsb2NrUmVxdWVzdGlkID0geyRyb3dbJ2lkJ119IjsKIAkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7CiAJCQkkcm93WydzbG90cyddID0gYXJyYXkoKTsgIyB5eXl5LW1tLWRkfGhoOm1tfGhoOm1tCi0JCQl3aGlsZSgkcm93MiA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaDIpKSB7CisJCQl3aGlsZSgkcm93MiA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgyKSkgewogCQkJCSRyb3dbJ3NsaG91ciddWyRyb3cyWydvcmRlciddXSA9ICRyb3cyWydzdGFydGhvdXInXTsKIAkJCQkkcm93WydzbG1pbnV0ZSddWyRyb3cyWydvcmRlciddXSA9ICRyb3cyWydzdGFydG1pbnV0ZSddOwogCQkJCSRyb3dbJ3NsbWVyaWRpYW4nXVskcm93Mlsnb3JkZXInXV0gPSAkcm93Mlsnc3RhcnRtZXJpZGlhbiddOwpAQCAtMjQ2Nyw3ICsyNDY3LDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIEFKYWNjZXB0QmxvY2tBbGxvY2F0aW9uU3VibWl0KCkgewotCWdsb2JhbCAkbXlzcWxfbGlua192Y2wsICR1c2VyOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsLCAkdXNlcjsKIAkkYmxvY2tpZCA9IGdldENvbnRpbnVhdGlvblZhcignYmxvY2tpZCcpOwogCSRjb21tZW50cyA9IGdldENvbnRpbnVhdGlvblZhcignY29tbWVudHMnKTsKIAkkdmFsaWRlbWFpbCA9IGdldENvbnRpbnVhdGlvblZhcigndmFsaWRlbWFpbCcpOwpAQCAtMjUyMyw5ICsyNTIzLDkgQEAKIAlpZighICRlcnIpIHsKIAkJIyB1cGRhdGUgdmFsdWVzIGZvciBibG9jayBhbGxvY2F0aW9uCiAJCWlmKCR2YWxpZGVtYWlsKQotCQkJJGVzY2NvbW1lbnRzID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCJDT01NRU5UUzogJGNvbW1lbnRzfEVNQUlMOiAkZW1haWx0ZXh0Iik7CisJCQkkZXNjY29tbWVudHMgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygiQ09NTUVOVFM6ICRjb21tZW50c3xFTUFJTDogJGVtYWlsdGV4dCIpOwogCQllbHNlCi0JCQkkZXNjY29tbWVudHMgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoIkNPTU1FTlRTOiAkY29tbWVudHN8VVNFUiBOT1QgRU1BSUxFRCIpOworCQkJJGVzY2NvbW1lbnRzID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoIkNPTU1FTlRTOiAkY29tbWVudHN8VVNFUiBOT1QgRU1BSUxFRCIpOwogCQkkcXVlcnkgPSAiVVBEQVRFIGJsb2NrUmVxdWVzdCAiCiAJCQkJIC4gIlNFVCBuYW1lID0gJyRuYW1lJywgIjsKIAkJaWYoJHNldHVzZXJncm91cCkKQEAgLTI1MzUsNyArMjUzNSw3IEBACiAJCQkgICAgLiAgICAgIm1hbmFnZW1lbnRub2RlaWQgPSAnJG1uaWQnICIKIAkJICAgICAgIC4gIldIRVJFIGlkID0gJGJsb2NraWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoISBteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCkpIHsKKwkJaWYoISBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKSkgewogCQkJJGVycm1zZyA9IGkoIkVycm9yIGVuY291bnRlcmVkIHdoaWxlIHVwZGF0aW5nIHN0YXR1cyBvZiBibG9jayBhbGxvY2F0aW9uLiIpOwogCQkJJGVyciA9IDE7CiAJCX0KQEAgLTI2OTQsNyArMjY5NCw3IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBBSnJlamVjdEJsb2NrQWxsb2NhdGlvblN1Ym1pdCgpIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsOwogCSRibG9ja2lkID0gZ2V0Q29udGludWF0aW9uVmFyKCdibG9ja2lkJyk7CiAJJGNvbW1lbnRzID0gZ2V0Q29udGludWF0aW9uVmFyKCdjb21tZW50cycpOwogCSR2YWxpZGVtYWlsID0gZ2V0Q29udGludWF0aW9uVmFyKCd2YWxpZGVtYWlsJyk7CkBAIC0yNzI3LDE2ICsyNzI3LDE2IEBACiAJaWYoISAkZXJyKSB7CiAJCSMgdXBkYXRlIHZhbHVlcyBmb3IgYmxvY2sgYWxsb2NhdGlvbgogCQlpZigkdmFsaWRlbWFpbCkKLQkJCSRlc2Njb21tZW50cyA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygiQ09NTUVOVFM6ICRjb21tZW50c3xFTUFJTDogJGVtYWlsdGV4dCIpOworCQkJJGVzY2NvbW1lbnRzID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoIkNPTU1FTlRTOiAkY29tbWVudHN8RU1BSUw6ICRlbWFpbHRleHQiKTsKIAkJZWxzZQotCQkJJGVzY2NvbW1lbnRzID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCJDT01NRU5UUzogJGNvbW1lbnRzfFJFSkVDVFJFQVNPTjogJGVtYWlsdGV4dCIpOworCQkJJGVzY2NvbW1lbnRzID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoIkNPTU1FTlRTOiAkY29tbWVudHN8UkVKRUNUUkVBU09OOiAkZW1haWx0ZXh0Iik7CiAJCSRxdWVyeSA9ICJVUERBVEUgYmxvY2tSZXF1ZXN0ICIKIAkJCQkgLiAiU0VUIG5hbWUgPSAncmVqZWN0ZWQnLCAiCiAJCQkJIC4gICAgICJzdGF0dXMgPSAncmVqZWN0ZWQnLCAiCiAJCQkJIC4gICAgICJjb21tZW50cyA9ICckZXNjY29tbWVudHMnICIKIAkJCQkgLiAiV0hFUkUgaWQgPSAkYmxvY2tpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZighIG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKSkgeworCQlpZighIG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpKSB7CiAJCQkkZXJybXNnID0gaSgiRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgdXBkYXRpbmcgc3RhdHVzIG9mIGJsb2NrIGFsbG9jYXRpb24uIik7CiAJCQkkZXJyID0gMTsKIAkJfQpAQCAtMjc4NSw3ICsyNzg1LDcgQEAKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkZGF0YSA9IGFycmF5KCk7CiAJJGl0ZW1zID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRpdGVtc1tdID0gJHJvdzsKIAkkY29udCA9IGFkZENvbnRpbnVhdGlvbnNFbnRyeSgnQUp0b2dnbGVCbG9ja1RpbWUnLCBhcnJheSgnYmxvY2tpZCcgPT4gJGJsb2NraWQpKTsKIAkkZGF0YVsnY29udCddID0gJGNvbnQ7CkBAIC0yODA5LDcgKzI4MDksNyBAQAogCSAgICAgICAuICJGUk9NIGJsb2NrVGltZXMgIgogCSAgICAgICAuICJXSEVSRSBpZCA9ICR0aW1laWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB8fCAkcm93WydibG9ja1JlcXVlc3RpZCddICE9ICRibG9ja2lkKSB7CisJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB8fCAkcm93WydibG9ja1JlcXVlc3RpZCddICE9ICRibG9ja2lkKSB7CiAJCSRkYXRhWydlcnJvciddID0gaSgiSW52YWxpZCBibG9jayB0aW1lIHN1Ym1pdHRlZCIpOwogCQlzZW5kSlNPTigkZGF0YSk7CiAJCXJldHVybjsKQEAgLTMxMzMsMzUgKzMxMzMsNDEgQEAKIAlpZighICRlcnIpIHsKIAkJaWYoJHR5cGUgPT0gJ2xpc3QnKSB7CiAJCQkkc2xvdHMgPSBwcm9jZXNzSW5wdXRWYXIoJ3Nsb3RzJywgQVJHX1NUUklORyk7Ci0JCQkkcmV0dXJuWydzbG90cyddID0gZXhwbG9kZSgnLCcsICRzbG90cyk7CisJCQlpZighIHByZWdfbWF0Y2goJy9eKFxkezh9XHxcZHsyfTpcZHsyfVx8XGR7Mn06XGR7Mn0pKCwoXGR7OH1cfFxkezJ9OlxkezJ9XHxcZHsyfTpcZHsyfSkpKiQvJywgJHNsb3RzKSkgeworCQkJCSRlcnJtc2cgPSBpKCJJbnZhbGlkIHRpbWUgc2xvdCBzdWJtaXR0ZWQuIik7CisJCQkJJGVyciA9IDE7CisJCQl9CiAJCQkkcmV0dXJuWyd0aW1lcyddID0gYXJyYXkoKTsKLQkJCSRsYXN0ZGF0ZSA9IGFycmF5KCdkYXknID0+ICcnLCAndHMnID0+IDApOwotCQkJZm9yZWFjaCgkcmV0dXJuWydzbG90cyddIGFzICRzbG90KSB7Ci0JCQkJJHRtcCA9IGV4cGxvZGUoJ3wnLCAkc2xvdCk7Ci0JCQkJaWYoY291bnQoJHRtcCkgIT0gMykgewotCQkJCQkkZXJybXNnID0gaSgiSW52YWxpZCBkYXRlL3RpbWUgc3VibWl0dGVkLiIpOwotCQkJCQkkZXJyID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCSRkYXRlID0gJHRtcFswXTsKLQkJCQlpZighICRlcnIpIHsKLQkJCQkJJGRhdGV0cyA9IHN0cnRvdGltZSgkZGF0ZSk7Ci0JCQkJCWlmKCRtZXRob2QgIT0gJ2VkaXQnICYmICRkYXRldHMgPCAodGltZSgpIC0gU0VDSU5EQVkpKSB7Ci0JCQkJCQkkZXJybXNnID0gaSgiVGhlIGRhdGUgbXVzdCBiZSB0b2RheSBvciBsYXRlci4iKTsKKwkJCWlmKCEgJGVycikgeworCQkJCSRyZXR1cm5bJ3Nsb3RzJ10gPSBleHBsb2RlKCcsJywgJHNsb3RzKTsKKwkJCQkkbGFzdGRhdGUgPSBhcnJheSgnZGF5JyA9PiAnJywgJ3RzJyA9PiAwKTsKKwkJCQlmb3JlYWNoKCRyZXR1cm5bJ3Nsb3RzJ10gYXMgJHNsb3QpIHsKKwkJCQkJJHRtcCA9IGV4cGxvZGUoJ3wnLCAkc2xvdCk7CisJCQkJCWlmKGNvdW50KCR0bXApICE9IDMpIHsKKwkJCQkJCSRlcnJtc2cgPSBpKCJJbnZhbGlkIGRhdGUvdGltZSBzdWJtaXR0ZWQuIik7CiAJCQkJCQkkZXJyID0gMTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CisJCQkJCSRkYXRlID0gJHRtcFswXTsKKwkJCQkJaWYoISAkZXJyKSB7CisJCQkJCQkkZGF0ZXRzID0gc3RydG90aW1lKCRkYXRlKTsKKwkJCQkJCWlmKCRtZXRob2QgIT0gJ2VkaXQnICYmICRkYXRldHMgPCAodGltZSgpIC0gU0VDSU5EQVkpKSB7CisJCQkJCQkJJGVycm1zZyA9IGkoIlRoZSBkYXRlIG11c3QgYmUgdG9kYXkgb3IgbGF0ZXIuIik7CisJCQkJCQkJJGVyciA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJJHJldHVyblsndGltZXMnXVtdID0gInskdG1wWzFdfXx7JHRtcFsyXX0iOworCQkJCQlpZigkZGF0ZXRzID4gJGxhc3RkYXRlWyd0cyddKSB7CisJCQkJCQkkbGFzdGRhdGVbJ3RzJ10gPSAkZGF0ZXRzOworCQkJCQkJJGxhc3RkYXRlWydkYXknXSA9ICRkYXRlOworCQkJCQl9CiAJCQkJfQotCQkJCSRyZXR1cm5bJ3RpbWVzJ11bXSA9ICJ7JHRtcFsxXX18eyR0bXBbMl19IjsKLQkJCQlpZigkZGF0ZXRzID4gJGxhc3RkYXRlWyd0cyddKSB7Ci0JCQkJCSRsYXN0ZGF0ZVsndHMnXSA9ICRkYXRldHM7Ci0JCQkJCSRsYXN0ZGF0ZVsnZGF5J10gPSAkZGF0ZTsKKwkJCQlpZighICRlcnIpIHsKKwkJCQkJJGV4cGlyZXRzID0gc3RydG90aW1lKCJ7JGxhc3RkYXRlWydkYXknXX0gMjM6NTk6NTkiKTsKKwkJCQkJJHJldHVyblsnZXhwaXJldGltZSddID0gdW5peFRvRGF0ZXRpbWUoJGV4cGlyZXRzKTsKIAkJCQl9CiAJCQl9Ci0JCQlpZighICRlcnIpIHsKLQkJCQkkZXhwaXJldHMgPSBzdHJ0b3RpbWUoInskbGFzdGRhdGVbJ2RheSddfSAyMzo1OTo1OSIpOwotCQkJCSRyZXR1cm5bJ2V4cGlyZXRpbWUnXSA9IHVuaXhUb0RhdGV0aW1lKCRleHBpcmV0cyk7Ci0JCQl9CiAJCX0KIAkJaWYoJHR5cGUgPT0gJ3dlZWtseScgfHwgJHR5cGUgPT0gJ21vbnRobHknKSB7CiAJCQkkcmV0dXJuWydzdGFydGRhdGUnXSA9IHByb2Nlc3NJbnB1dFZhcignc3RhcnRkYXRlJywgQVJHX05VTUVSSUMpOwpAQCAtMzM0Nyw3ICszMzUzLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgdC5zdGFydCAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRkYXRhID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCRkYXRhID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoISBpc19udW1lcmljKCRkYXRhWydzdWJpbWFnZXMnXSkpCiAJCQkkZGF0YVsnc3ViaW1hZ2VzJ10gPSAwOwogCQkkcXVlcnkgPSAiU0VMRUNUIGMuaWQsICIKQEAgLTMzNzAsNyArMzM3Niw3IEBACiAJCSAgICAgICAuICAgICAgICJjLnN0YXRlaWQgPSBzLmlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJCSRkYXRhWydjb21wcyddID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRkYXRhWydjb21wcyddWyRyb3dbJ2lkJ11dID0gJHJvdzsKIAkJcmV0dXJuICRkYXRhOwogCX0KQEAgLTM0NTQsNyArMzQ2MCw3IEBACiAJICAgICAgIC4gIldIRVJFIGIuaWQgPSBkLmJsb2NrUmVxdWVzdGlkIEFORCAiCiAJICAgICAgIC4gICAgICAgImIuaWQgPSAkYmxvY2tpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCWlmKGVtcHR5KCRyb3cpKQogCQlyZXR1cm4gJHJ0OwogCSRyb3dbJ3dkYXlzY2hlY2tlZCddID0gJHJ0Wyd3ZGF5c2NoZWNrZWQnXTsKQEAgLTM1MDUsNyArMzUxMSw3IEBACiAJJGJsb2NraWQgPSBnZXRDb250aW51YXRpb25WYXIoJ2Jsb2NraWQnKTsKIAkkcXVlcnkgPSAiU0VMRUNUIHJlcGVhdGluZyBGUk9NIGJsb2NrUmVxdWVzdCBXSEVSRSBpZCA9ICRibG9ja2lkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKKwlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKSB7CiAJCXNlbmRKU09OKGFycmF5KCdlcnJvcicgPT4gaSgiRXJyb3I6IEZhaWxlZCB0byBmZXRjaCBzdGFydC9lbmQgdGltZXMgZm9yIGJsb2NrIGFsbG9jYXRpb24uIikpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM1MjQsNyArMzUzMCw3IEBACiAJCSRzdGFydG1zID0gYXJyYXkoKTsKIAkJJGVuZGhzID0gYXJyYXkoKTsKIAkJJGVuZG1zID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkc3RhcnRoID0gaG91cjEydG8yNCgkcm93WydzdGFydGhvdXInXSwgJHJvd1snc3RhcnRtZXJpZGlhbiddKTsKIAkJCSRlbmRoID0gaG91cjEydG8yNCgkcm93WydlbmRob3VyJ10sICRyb3dbJ2VuZG1lcmlkaWFuJ10pOwogCQkJJHN0YXJ0aHNbXSA9ICRzdGFydGg7CkBAIC0zNTUwLDcgKzM1NTYsNyBAQAogCQkgICAgICAgLiAiV0hFUkUgYmxvY2tSZXF1ZXN0aWQgPSAkYmxvY2tpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCQkkZGF0YSA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkZGF0YVskcm93WydvcmRlciddXSA9ICRyb3c7CiAJCSRxdWVyeSA9ICJTRUxFQ1QgTU9OVEgoc3RhcnQpIEFTIG1vbnRoLCAiCiAJCSAgICAgICAuICAgICAgICAiREFZKHN0YXJ0KSBBUyBkYXksICIKQEAgLTM1NjYsNyArMzU3Miw3IEBACiAJCSRzdGFydG1zID0gYXJyYXkoKTsKIAkJJGVuZGhzID0gYXJyYXkoKTsKIAkJJGVuZG1zID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkaWQgPSAkcm93WydkYXlzJ107CiAJCQkkbW9udGhzW10gPSAkcm93Wydtb250aCddOwogCQkJJGRheXNbXSA9ICRyb3dbJ2RheSddOwpAQCAtMzY5Niw3ICszNzAyLDcgQEAKIAkJICAgICAgIC4gIldIRVJFIHN0YXRlaWQgSU4gKDIsIDMsIDYsIDgsIDExKSBBTkQgIgogCQkgICAgICAgLiAgICAgICAidHlwZSA9ICdibGFkZSciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQogCQkJJGRhdGFbJ3RvdGFsJ10gPSAkcm93WzBdOwogCX0KIAllbHNlCkBAIC0zNzQzLDcgKzM3NDksNyBAQAogCQkgICAgICAgLiAgICAgICAidS5hZmZpbGlhdGlvbmlkID0geyR1c2VyWydhZmZpbGlhdGlvbmlkJ119IjsKIAl9CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJZm9yKCRiaW5zdGFydCA9ICRzdGFydCwgJGJpbmVuZCA9ICRzdGFydCArIDkwMCwgJGJpbmluZGV4ID0gMDsgCiAJCSAgICRiaW5lbmQgPD0gJGVuZDsKIAkJICAgJGJpbnN0YXJ0ICs9IDkwMCwgJGJpbmVuZCArPSA5MDAsICRiaW5pbmRleCsrKSB7CkBAIC0zNzcwLDcgKzM3NzYsNyBAQAogCQkgICAgICAgLiAiV0hFUkUgc3RhdGVpZCBJTiAoMiwgMywgNiwgOCwgMTEpIEFORCAiCiAJCSAgICAgICAuICAgICAgICJ0eXBlID0gJ3ZpcnR1YWxtYWNoaW5lJyI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCiAJCQkkZGF0YVsndG90YWwnXSA9ICRyb3dbMF07CiAJfQogCWVsc2UKQEAgLTM4MTcsNyArMzgyMyw3IEBACiAJCSAgICAgICAuICAgICAgICJ1LmFmZmlsaWF0aW9uaWQgPSB7JHVzZXJbJ2FmZmlsaWF0aW9uaWQnXX0iOwogCX0KIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlmb3IoJGJpbnN0YXJ0ID0gJHN0YXJ0LCAkYmluZW5kID0gJHN0YXJ0ICsgOTAwLCAkYmluaW5kZXggPSAwOyAKIAkJICAgJGJpbmVuZCA8PSAkZW5kOwogCQkgICAkYmluc3RhcnQgKz0gOTAwLCAkYmluZW5kICs9IDkwMCwgJGJpbmluZGV4KyspIHsKQEAgLTM4NjksMTUgKzM4NzUsMTQgQEAKIAkkZmlyc3QgPSAxOwogCSRmaXJzdHN0YXJ0ID0gJyc7CiAJJGxhc3RzdGFydCA9ICcnOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7Ci0JCWlmKCRmaXJzdCAmJiAhIGlzX251bGwoJHJvd1snYmxvY2tTdGFydCddKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZihpc19udWxsKCRyb3dbJ2Jsb2NrU3RhcnQnXSkpCisJCQljb250aW51ZTsKKwkJaWYoJGZpcnN0KSB7CiAJCQkkZmlyc3RzdGFydCA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbJ2Jsb2NrU3RhcnQnXSk7CiAJCQkkZmlyc3QgPSAwOwogCQl9Ci0JCWVsc2VpZighIGlzX251bGwoJHJvd1snYmxvY2tTdGFydCddKSkKLQkJCSRsYXN0c3RhcnQgPSBkYXRldGltZVRvVW5peCgkcm93WydibG9ja1N0YXJ0J10pOwotCQlpZihpc19udWxsKCRyb3dbJ2Jsb2NrU3RhcnQnXSkpCi0JCQljb250aW51ZTsKKwkJJGxhc3RzdGFydCA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbJ2Jsb2NrU3RhcnQnXSk7CiAJCSRwZXJjZW50ID0gKGludCkoJHJvd1sndXNlZCddIC8gJHJvd1snYWxsb2NhdGVkJ10gKiAxMDApOwogCQkkc3RhcnR0cyA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbJ2Jsb2NrU3RhcnQnXSk7CiAJCSR1c2FnZVskc3RhcnR0c10gPSBhcnJheSgncGVyY2VudCcgPT4gJHBlcmNlbnQsCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9jb21wdXRlci5waHAgYi93ZWIvLmh0LWluYy9jb21wdXRlci5waHAKaW5kZXggNmM2NjY4ZC4uZDFmNmNhNiAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvY29tcHV0ZXIucGhwCisrKyBiL3dlYi8uaHQtaW5jL2NvbXB1dGVyLnBocApAQCAtODIxLDcgKzgyMSw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBycS5zdGFydCAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRjZGF0YSA9ICR0aGlzLT5iYXNlY2RhdGE7CiAJCQkkY2RhdGFbJ2NvbXBpZCddID0gJHJzY2lkOwogCQkJJGNvbnQgPSBhZGRDb250aW51YXRpb25zRW50cnkoJ0FKY2FuY2VsdG92bWhvc3RpbnVzZScsICRjZGF0YSwgMzAwLCAxLCAwKTsKQEAgLTk3Myw3ICs5NzMsNyBAQAogCQkJCSAgICAgICAuICAgICAgICJ2bS5zdGF0ZWlkID0gMTAiOwogCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJCQkkdm1pZHMgPSBhcnJheSgpOwotCQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkJJHZtaWRzW10gPSAkcm93WydpZCddOwogCQkJCSRhbGxpZHMgPSBpbXBsb2RlKCcsJywgJHZtaWRzKTsKIAkJCQlpZigkZGF0YVsncHJvdmlzaW9uaW5nJ10gIT0gJ25vbmUnKSAgewpAQCAtMTIzNSw3ICsxMjM1LDcgQEAKIAkJCQkJICAgICAgIC4gICAgICAgInZtLnZtaG9zdGlkID0gdi5pZCI7CiAJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJCQkJJGZhaWwgPSAwOwotCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQkJCWlmKCEgc2ltcGxlQWRkUmVxdWVzdCgkcm93WydpZCddLCAkaW1hZ2VpZCwgJHJldmlkLCAkc3RhcnRkdCwKIAkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAkZW5kZHQsIDE4LCAkdmNscmVsb2FkaWQpKSB7CiAJCQkJCQkJJGZhaWwgPSAxOwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAKIAkJCQkJICAgICAgIC4gICAgICAgInZtLnZtaG9zdGlkID0gdi5pZCI7CiAJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJCQkJJGZhaWxzID0gYXJyYXkoKTsKLQkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJCQlpZighIHNpbXBsZUFkZFJlcXVlc3QoJHJvd1snaWQnXSwgJGltYWdlaWQsICRyZXZpZCwgJHN0YXJ0ZHQsCiAJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJGVuZGR0LCAxOCwgJHZjbHJlbG9hZGlkKSkgewogCQkJCQkJCSRmYWlsc1tdID0gJHJvd1snaWQnXTsKQEAgLTE0NTEsNyArMTQ1MSw3IEBACiAJCQkJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCQkJCQkJCSRmYWlscyA9IGFycmF5KCk7CiAJCQkJCQkJJGNudCA9IDA7Ci0JCQkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQkJCQkJJGNudCsrOwogCQkJCQkJCQlpZighIHNpbXBsZUFkZFJlcXVlc3QoJHJvd1snaWQnXSwgJGltYWdlaWQsICRyZXZpZCwgJHN0YXJ0ZHQsCiAJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAkZW5kZHQsIDE4LCAkdmNscmVsb2FkaWQpKSB7CkBAIC0xNzU3LDYgKzE3NTcsMTEgQEAKIAkJfQogCQkjIGFkZCBtdWx0aXBsZQogCQlpZigkcmV0dXJuWydtb2RlJ10gPT0gJ2FkZCcgJiYgJGFkZG1vZGUgPT0gJ211bHRpcGxlJykgeworCQkJIyBlbnN1cmUgJSBpbiBob3N0bmFtZQorCQkJaWYoISBwcmVnX21hdGNoKCcvJS8nLCAkcmV0dXJuWyduYW1lJ10pKSB7CisJCQkJJHJldHVyblsnZXJyb3InXSA9IDE7CisJCQkJJGVycm9ybXNnW10gPSAiTmFtZSBtdXN0IGNvbnRhaW4gJSB3aGVuIGFkZGluZyBtdWx0aXBsZSBjb21wdXRlcnMiOworCQkJfQogCQkJIyBzdGFydG51bS9lbmRudW0KIAkJCWlmKCRyZXR1cm5bJ3N0YXJ0bnVtJ10gPCAwIHx8ICRyZXR1cm5bJ3N0YXJ0bnVtJ10gPiAyNTUpIHsKIAkJCQkkcmV0dXJuWydlcnJvciddID0gMTsKQEAgLTE3ODEsNyArMTc4Niw3IEBACiAJCQkgICAgICAgLiAgICAgICAiZGVsZXRlZCA9IDAiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCQkJJGV4aXN0cyA9IGFycmF5KCk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkkZXhpc3RzW10gPSAkcm93Wydob3N0bmFtZSddOwogCQkJaWYoY291bnQoJGV4aXN0cykpIHsKIAkJCQkkaG9zdHMgPSBpbXBsb2RlKCcsICcsICRleGlzdHMpOwpAQCAtMjA0OSw3ICsyMDU0LDcgQEAKIAkJCQkgICAgICAgLiAgICAgICAicnEubGFzdHN0YXRlaWQgTk9UIElOICgxLDUsMTEsMTIpIEFORCAiCiAJCQkJICAgICAgIC4gICAgICAgInJxLnVzZXJpZCAhPSAkdmNscmVsb2FkaWQiOwogCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCQlpZihteXNxbF9udW1fcm93cygkcWgpKSB7CisJCQkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCQkJJHJldHVyblsnZXJyb3InXSA9IDE7CiAJCQkJCSRlcnJvcm1zZ1tdID0gIlRoaXMgY29tcHV0ZXIgaGFzIGFuIGFjdGl2ZSByZXNlcnZhdGlvbi4gTkFUIHNldHRpbmdzIGNhbm5vdCBiZSBjaGFuZ2VkIGZvciBjb21wdXRlcnMgaGF2aW5nPGJyPmFjdGl2ZSByZXNlcnZhdGlvbnMuIjsKIAkJCQl9CkBAIC0yMDk5LDcgKzIxMDQsNyBAQAogCQkJCSAgICAgICAuICAgICAgICJycS5sYXN0c3RhdGVpZCBOT1QgSU4gKDEsNSwxMSwxMikgQU5EICIKIAkJCQkgICAgICAgLiAgICAgICAicnEudXNlcmlkICE9ICR2Y2xyZWxvYWRpZCI7CiAJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJCQkkcmV0dXJuWydlcnJvciddID0gMTsKIAkJCQkJJGVycm9ybXNnW10gPSAiVGhpcyBjb21wdXRlciBpcyB0aGUgTkFUIGhvc3QgZm9yIG90aGVyIGNvbXB1dGVycyB0aGF0IGhhdmUgYWN0aXZlIHJlc2VydmF0aW9ucy4gTkFUIGhvc3Q8YnI+c2V0dGluZ3MgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgcHJvdmlkaW5nIE5BVCBmb3IgYWN0aXZlIHJlc2VydmF0aW9ucy4iOwogCQkJCX0KQEAgLTIxNDAsNyArMjE0NSw3IEBACiAJCWlmKCEgZW1wdHkoJGNvbXBpZCkpCiAJCQkkcXVlcnkgLj0gIiBBTkQgaWQgIT0gJGNvbXBpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjE3MCw3ICsyMTc1LDcgQEAKIAkJaWYoISBlbXB0eSgkY29tcGlkKSkKIAkJCSRxdWVyeSAuPSAiIEFORCBpZCAhPSAkY29tcGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZihteXNxbF9udW1fcm93cygkcWgpKQorCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMTk5LDcgKzIyMDQsNyBAQAogCQlpZighIGVtcHR5KCRjb21waWQpKQogCQkJJHF1ZXJ5IC49ICIgQU5EIGlkICE9ICRjb21waWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKG15c3FsX251bV9yb3dzKCRxaCkpCisJCWlmKG15c3FsaV9udW1fcm93cygkcWgpKQogCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwogCX0KQEAgLTIzNzcsNyArMjM4Miw3IEBACiAJLy8vCiAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAlmdW5jdGlvbiBBSmNhbmNlbHRvdm1ob3N0aW51c2UoKSB7Ci0JCWdsb2JhbCAkbXlzcWxfbGlua192Y2w7CisJCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsOwogCQkkY29tcGlkID0gZ2V0Q29udGludWF0aW9uVmFyKCdjb21waWQnKTsKIAkJJHR5cGUgPSAnbm9uZSc7CiAJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSByZXF1ZXN0ICIKQEAgLTIzODcsNyArMjM5Miw3IEBACiAJCSAgICAgICAuICAgICAgICAgICAgICAiRlJPTSByZXNlcnZhdGlvbiAiCiAJCSAgICAgICAuICAgICAgICAgICAgICAiV0hFUkUgY29tcHV0ZXJpZCA9ICRjb21waWQpIjsKIAkJZG9RdWVyeSgkcXVlcnkpOwotCQlpZihteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCkpCisJCWlmKG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpKQogCQkJJHR5cGUgPSAnZnV0dXJlJzsKIAkJJHF1ZXJ5ID0gIlVQREFURSByZXF1ZXN0IHJxLCAiCiAJCSAgICAgICAuICAgICAgICAgInJlc2VydmF0aW9uIHJzLCAiCkBAIC0yMzk5LDcgKzI0MDQsNyBAQAogCQkgICAgICAgLiAgICAgICAicnEubGFzdHN0YXRlaWQgPSBscy5pZCBBTkQgIgogCQkgICAgICAgLiAgICAgICAibHMubmFtZSA9ICd0b3ZtaG9zdGludXNlJyI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYobXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpKQorCQlpZihteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKSkKIAkJCSR0eXBlID0gJ2N1cnJlbnQnOwogCQkkcXVlcnkgPSAiU0VMRUNUIHJxLnN0YXJ0ICIKIAkJICAgICAgIC4gIkZST00gcmVxdWVzdCBycSwgIgpAQCAtMjQxNSw3ICsyNDIwLDcgQEAKIAkJICAgICAgIC4gICAgICAgInJxLmVuZCA+IE5PVygpICIKIAkJICAgICAgIC4gIk9SREVSIEJZIHJxLnN0YXJ0IjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZihteXNxbF9udW1fcm93cygkcWgpKQorCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJCSRhcnIgPSBhcnJheSgnc3RhdHVzJyA9PiAnZmFpbGVkJyk7CiAJCWVsc2UgewogCQkJaWYoJHR5cGUgPT0gJ25vdycpCkBAIC0yNDc3LDcgKzI0ODIsNyBAQAogCQkgICAgICAgLiAiT1JERVIgQlkgcnEuc3RhcnQgIgogCQkgICAgICAgLiAiTElNSVQgMSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZighIHJldHJ5R2V0U2VtYXBob3JlKCRpbWFnZWlkLCAkcmV2aWQsICRtbmlkLCAkY29tcGlkLCAkc3RhcnRkdCwgJGVuZGR0LCAkcm93WydpZCddKSkKIAkJCQlyZXR1cm4gMDsKIAkJCSMgdXBkYXRlIGV4aXN0aW5nIHJlc2VydmF0aW9uCkBAIC0yNzIwLDcgKzI3MjUsNyBAQAogCQkJICAgICAgIC4gICAgICAgInZtLnZtaG9zdGlkID0gdi5pZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCQkkZmFpbCA9IDA7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJaWYoISBzaW1wbGVBZGRSZXF1ZXN0KCRyb3dbJ2lkJ10sICRpbWFnZWlkLCAkcmV2aWQsICRzdGFydGR0LAogCQkJCSAgICAgICAgICAgICAgICAgICAgICAkZW5kZHQsIDE4LCAkdmNscmVsb2FkaWQpKSB7CiAJCQkJCSRmYWlsID0gMTsKQEAgLTI4MTEsNyArMjgxNiw3IEBACiAJCQkgICAgICAgLiAiV0hFUkUgdi5jb21wdXRlcmlkID0gJGNvbXBpZCBBTkQgIgogCQkJICAgICAgIC4gICAgICAgInZtLnZtaG9zdGlkID0gdi5pZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJGNoZWNrc3RhcnQgPSBnZXRFeGlzdGluZ0NoYW5nZVN0YXRlU3RhcnRUaW1lKCRyb3dbJ2lkJ10sIDE4KTsKIAkJCQlpZigkY2hlY2tzdGFydCkgewogCQkJCQlpZigkY2hlY2tzdGFydCA+ICRzdGFydCkKQEAgLTMwNjksNyArMzA3NCw3IEBACiAJCQkJCQkJIC4gICAgICAgInJxLmVuZCA+ICckc3RhcnRzdGFtcCcgQU5EICIKIAkJCQkJCQkgLiAgICAgICAicy5uYW1lIE5PVCBJTiAoJ2NvbXBsZXRlJywgJ2RlbGV0ZWQnLCAnZmFpbGVkJywgJ3RpbWVvdXQnKSI7CiAJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCQkJaWYoISBteXNxbF9udW1fcm93cygkcWgpKQorCQkJCQlpZighIG15c3FsaV9udW1fcm93cygkcWgpKQogCQkJCQkJJHJlbG9hZG5vd1tdID0gJGNvbXBpZDsKIAkJCQkJZWxzZQogCQkJCQkJJHJlbG9hZGFzYXBbXSA9ICRjb21waWQ7CkBAIC0zMTYwLDcgKzMxNjUsNyBAQAogCQkgICAgICAgLiAgICAgICAicy5uYW1lIE5PVCBJTiAoJ2RlbGV0ZWQnLCAnZmFpbGVkJywgJ2NvbXBsZXRlJykgQU5EICIKIAkJICAgICAgIC4gICAgICAgInJxLmVuZCA+IE5PVygpIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHNraXBjb21waWRzW10gPSAkcm93Wydjb21wdXRlcmlkJ107CiAJCSRxdWVyeSA9ICJTRUxFQ1QgRElTVElOQ1QgYmMuY29tcHV0ZXJpZCAiCiAJCSAgICAgICAuICJGUk9NIGJsb2NrVGltZXMgYnQsICIKQEAgLTMxNzMsNyArMzE3OCw3IEBACiAJCSAgICAgICAuICAgICAgICJidC5za2lwID0gMCBBTkQgIgogCQkgICAgICAgLiAgICAgICAiYnIuc3RhdHVzID0gJ2FjY2VwdGVkJyI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRza2lwY29tcGlkc1tdID0gJHJvd1snY29tcHV0ZXJpZCddOwogCQkkZGVsaWRzID0gYXJyYXlfZGlmZigkY29tcGlkcywgJHNraXBjb21waWRzKTsKIAkJJG1zZyA9ICcnOwpAQCAtMzI1NCw3ICszMjU5LDcgQEAKIAkJICAgICAgIC4gICAgICAgInMubmFtZSBOT1QgSU4gKCdkZWxldGVkJywgJ2ZhaWxlZCcsICdjb21wbGV0ZScpIEFORCAiCiAJCSAgICAgICAuICAgICAgICJycS5lbmQgPiBOT1coKSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRmYWlsc1tdID0gJHJvd1snY29tcHV0ZXJpZCddOwogCQkkZGVsaWRzID0gYXJyYXlfZGlmZigkY29tcGlkcywgJGZhaWxzKTsKIApAQCAtMzQyOSw3ICszNDM0LDcgQEAKIAkJCSAgICAgICAuICAgICAgICJycS5zdGF0ZWlkIE5PVCBJTiAoMSwgNSwgMTEsIDEyKSBBTkQgIiAjIFRPRE8gbWlnaHQgbm90IHdhbnQgMTEgKHRpbWVvdXQpCiAJCQkgICAgICAgLiAgICAgICAicnMuY29tcHV0ZXJpZCBJTiAoJGFsbGlkcykiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkJJGludXNlY29tcGlkc1skcm93Wydjb21wdXRlcmlkJ11dID0gMTsKIAogCQkJIyBjaGVjayBpbml0aWFsIGNvbmRpdGlvbnMKQEAgLTM0OTEsNyArMzQ5Niw3IEBACiAJCQkJICAgICAgIC4gIldIRVJFIGguaWQgSU4gKCRpZHMpICIKIAkJCQkgICAgICAgLiAiR1JPVVAgQlkgdmguY29tcHV0ZXJpZCI7CiAJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJCWlmKCRyb3dbJ2NvdW50J10pCiAJCQkJCQkkZmFpbHNbJ2hhc3ZtcyddW10gPSAkcm93WydpZCddOwogCQkJCQllbHNlCkBAIC0zNTA3LDcgKzM1MTIsNyBAQAogCQkJCSAgICAgICAuICJMRUZUIEpPSU4gY29tcHV0ZXIgaCBPTiAodmguY29tcHV0ZXJpZCA9IGguaWQpICIKIAkJCQkgICAgICAgLiAiV0hFUkUgdm0uaWQgSU4gKCRpZHMpIjsKIAkJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQkJaWYoJHJvd1snc3RhdGVpZCddICE9IDIwKQogCQkJCQkJJGZhaWxzWydob3N0ZmFpbCddW10gPSAkcm93WydpZCddOwogCQkJCQllbHNlCkBAIC0zNTc4LDcgKzM1ODMsNyBAQAogCQkJCSRub3RlcyA9IHByb2Nlc3NJbnB1dFZhcignbm90ZXMnLCBBUkdfU1RSSU5HKTsKIAkJCQlpZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQogCQkJCQkkbm90ZXMgPSBzdHJpcHNsYXNoZXMoJG5vdGVzKTsKLQkJCQkkbm90ZXMgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5vdGVzKTsKKwkJCQkkbm90ZXMgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbm90ZXMpOwogCQkJCSRub3RlcyA9ICR1c2VyWyJ1bml0eWlkIl0gLiAiICIgLiB1bml4VG9EYXRldGltZSh0aW1lKCkpIC4gIkAiCiAJCQkJICAgICAgIC4gJG5vdGVzOwogCQkJfQpAQCAtMzYzNCw3ICszNjM5LDcgQEAKIAkJCQkJCSAgICAgICAuICAgICAgICJ2bS52bWhvc3RpZCA9IHYuaWQiOwogCQkJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCQkJCQkJJHNldG5vdGVpZHMgPSBhcnJheSgpOwotCQkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCQkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCQkJCSRjaGVja3N0YXJ0ID0gZ2V0RXhpc3RpbmdDaGFuZ2VTdGF0ZVN0YXJ0VGltZSgkcm93WydpZCddLCAxOCk7CiAJCQkJCQkJaWYoJGNoZWNrc3RhcnQpIHsKIAkJCQkJCQkJaWYoJGNoZWNrc3RhcnQgPiAkcmVsb2Fkc3RhcnQpCkBAIC0zODY1LDcgKzM4NzAsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIHYuY29tcHV0ZXJpZCBJTiAoJGFsbGlkcykgQU5EICIKIAkJCSAgICAgICAuICAgICAgICJ2bS52bWhvc3RpZCA9IHYuaWQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93Wydjb21waWQnXSwgJG1haW50dm1pZHMpKQogCQkJCQkkbWFpbnR2bWlkc1skcm93Wydjb21waWQnXV0gPSBhcnJheSgpOwogCQkJCWlmKCRyb3dbJ3Ztc3RhdGVpZCddID09IDEwICYmCkBAIC00MDAwLDggKzQwMDUsOCBAQAogCQkJCQkJCQkgICAgICAgLiAiR1JPVVAgQlkgcnMuY29tcHV0ZXJpZCAiCiAJCQkJCQkJCSAgICAgICAuICJPUkRFUiBCWSBzdGFydCI7CiAJCQkJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCQkJCQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSA9PSBjb3VudCgkYWxsdm1pZHMpKSB7Ci0JCQkJCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJCQkJCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSA9PSBjb3VudCgkYWxsdm1pZHMpKSB7CisJCQkJCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQkJCQkJCQkkdGltZXNbJHJvd1snc3RhcnQnXV0gPSAxOwogCQkJCQkJCQkJCSRyZXFpZHNbXSA9ICRyb3dbJ2lkJ107CiAJCQkJCQkJCQl9CkBAIC00MDIyLDcgKzQwMjcsNyBAQAogCQkJCQkJCQkJCSAgICAgICAuICAgICAgICJycy5pbWFnZWlkID0gJ3skcHJvZmlsZXNbJHByb2ZpbGVpZF1bJ2ltYWdlaWQnXX0nIEFORCAiCiAJCQkJCQkJCQkJICAgICAgIC4gICAgICAgInJxLnN0YXRlaWQgPSAyMSI7CiAJCQkJCQkJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJCQkJCQkJCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQkJCQkJCQkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJCQkJCQkJCSMgbm9kZSB3YXMgcHJldmlvdXNseSBzY2hlZHVsZWQgdG8gYmUgcmVsb2FkZWQgZm9yIHZtaG9zdGludXNlCiAJCQkJCQkJCQkJCWlmKCR0aW1lc1swXSA+ICRzdGFydCkgewogCQkJCQkJCQkJCQkJIyB1cGRhdGUgZXhpc3RpbmcgcmVzZXJ2YXRpb25zCkBAIC00MjgwLDI3ICs0Mjg1LDMzIEBACiAKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBycy5jb21wdXRlcmlkICIKIAkJICAgICAgIC4gIkZST00gcmVxdWVzdCBycSwgIgotCQkgICAgICAgLiAgICAgICJyZXNlcnZhdGlvbiBycyAiCisJCSAgICAgICAuICAgICAgInJlc2VydmF0aW9uIHJzLCAiCisJCSAgICAgICAuICAgICAgInN0YXRlIHMgIgogCQkgICAgICAgLiAiV0hFUkUgcnMucmVxdWVzdGlkID0gcnEuaWQgQU5EICIKKwkJICAgICAgIC4gICAgICAgInJxLnN0YXRlaWQgPSBzLmlkIEFORCAiCiAJCSAgICAgICAuICAgICAgICJycy5jb21wdXRlcmlkIElOICgkYWxsaWRzKSBBTkQgIgogCQkgICAgICAgLiAgICAgICAicnEuc3RhcnQgPD0gJyRzdGFydGNoZWNrZHQnIEFORCAiCi0JCSAgICAgICAuICAgICAgICJycS5lbmQgPiBOT1coKSI7CisJCSAgICAgICAuICAgICAgICJycS5lbmQgPiBOT1coKSBBTkQgIgorCQkgICAgICAgLiAgICAgICAicy5uYW1lICE9ICdjb21wbGV0ZSciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkZmFpbHNbXSA9ICRyb3dbJ2NvbXB1dGVyaWQnXTsKIAogCQkkbm93aWRzID0gYXJyYXlfZGlmZigkY29tcGlkcywgJGZhaWxzKTsKLQkJJGFsbGlkcyA9IGltcGxvZGUoJywnLCAkbm93aWRzKTsKLQkJJHF1ZXJ5ID0gIlVQREFURSBjb21wdXRlciAiCi0JCSAgICAgICAuICJTRVQgcHJvdmlzaW9uaW5naWQgPSAkcHJvdmlzaW9uaW5naWQgIgotCQkgICAgICAgLiAiV0hFUkUgaWQgaW4gKCRhbGxpZHMpIjsKLQkJZG9RdWVyeSgkcXVlcnkpOworCQlpZighIGVtcHR5KCRub3dpZHMpKSB7CisJCQkkYWxsaWRzID0gaW1wbG9kZSgnLCcsICRub3dpZHMpOworCQkJJHF1ZXJ5ID0gIlVQREFURSBjb21wdXRlciAiCisJCQkgICAgICAgLiAiU0VUIHByb3Zpc2lvbmluZ2lkID0gJHByb3Zpc2lvbmluZ2lkICIKKwkJCSAgICAgICAuICJXSEVSRSBpZCBpbiAoJGFsbGlkcykiOworCQkJZG9RdWVyeSgkcXVlcnkpOworCQl9CiAKIAkJJHJlc291cmNlcyA9IGdldFVzZXJSZXNvdXJjZXMoYXJyYXkoJHRoaXMtPnJlc3R5cGUgLiAiQWRtaW4iKSwgYXJyYXkoImFkbWluaXN0ZXIiKSk7CiAJCSRjb21wZGF0YSA9ICRyZXNvdXJjZXNbJHRoaXMtPnJlc3R5cGVdOwogCisJCSRtc2cgPSAnJzsKIAkJaWYoY291bnQoJG5vd2lkcykpIHsKLQkJCSRtc2cgID0gIlRoZSBmb2xsb3dpbmcgY29tcHV0ZXJzIGhhZCB0aGVpciBQcm92aXNpb25pbmcgRW5naW5lIHNldCB0byAkcHJvdm5hbWU6PGJyPjxicj5cbiI7CisJCQkkbXNnICAuPSAiVGhlIGZvbGxvd2luZyBjb21wdXRlcnMgaGFkIHRoZWlyIFByb3Zpc2lvbmluZyBFbmdpbmUgc2V0IHRvICRwcm92bmFtZTo8YnI+PGJyPlxuIjsKIAkJCWZvcmVhY2goJG5vd2lkcyBhcyAkY29tcGlkKQogCQkJCSRtc2cgLj0gInskY29tcGRhdGFbJGNvbXBpZF19PGJyPlxuIjsKIAkJCSRtc2cgLj0gIjxicj4iOwpAQCAtNDQ1NCw3ICs0NDY1LDcgQEAKIAkJICAgICAgIC4gICAgICAgInJxLmxhc3RzdGF0ZWlkIE5PVCBJTiAoMSw1LDExLDEyKSBBTkQgIgogCQkgICAgICAgLiAgICAgICAicnEudXNlcmlkICE9ICR2Y2xyZWxvYWRpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRpbnVzZWNvbXBpZHNbXSA9ICRyb3dbJ2NvbXB1dGVyaWQnXTsKIAogCQkkdG1wID0gZ2V0VXNlclJlc291cmNlcyhhcnJheSgkdGhpcy0+cmVzdHlwZSAuICJBZG1pbiIpLCBhcnJheSgiYWRtaW5pc3RlciIpLCAwLCAxKTsKQEAgLTQ3OTksNyArNDgxMCw3IEBACiAJCSAgICAgICAuICAgICAgICJzLm5hbWUgTk9UIElOICgndGltZWRvdXQnLCdkZWxldGVkJywnY29tcGxldGUnKSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJGRhdGEgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRtc2cgPSAiPHN0cm9uZz57JHJvd1snaG9zdG5hbWUnXX08L3N0cm9uZz48YnI+IjsKIAkJCWlmKCRyb3dbJ3N0YXJ0J10gPT0gJycpIHsKIAkJCQkkbXNnIC49ICIoTm8gcmVzZXJ2YXRpb25zKTxicj48aHI+IjsKQEAgLTQ4NzIsOSArNDg4MywxMSBAQAogCQkgICAgICAgLiAgICAgICAgImkucHJldHR5bmFtZSBBUyBpbWFnZSwgIgogCQkgICAgICAgLiAgICAgICAgImlyLnJldmlzaW9uLCAiCiAJCSAgICAgICAuICAgICAgICAiYy5ob3N0bmFtZSBBUyBob3N0bmFtZSwgIgorCQkgICAgICAgLiAgICAgICAgInMuSVBhZGRyZXNzLCAiCiAJCSAgICAgICAuICAgICAgICAibW4uaG9zdG5hbWUgQVMgbWFuYWdlbWVudG5vZGUsICIKIAkJICAgICAgIC4gICAgICAgICJsLmVuZGluZywgIgotCQkgICAgICAgLiAgICAgICAgIkNPTkNBVCh1LnVuaXR5aWQsICdAJywgYS5uYW1lKSBBUyB1c2VybmFtZSAiCisJCSAgICAgICAuICAgICAgICAiQ09OQ0FUKHUudW5pdHlpZCwgJ0AnLCBhLm5hbWUpIEFTIHVzZXJuYW1lLCAiCisJCSAgICAgICAuICAgICAgICAibC5yZXF1ZXN0aWQgIgogCQkgICAgICAgLiAiRlJPTSBjb21wdXRlciBjICIKIAkJICAgICAgIC4gIkxFRlQgSk9JTiBzdWJsb2cgcyBPTiAoYy5pZCA9IHMuY29tcHV0ZXJpZCkgIgogCQkgICAgICAgLiAiTEVGVCBKT0lOIGltYWdlIGkgT04gKHMuaW1hZ2VpZCA9IGkuaWQpICIKQEAgLTQ4ODgsNyArNDkwMSw3IEBACiAJCSAgICAgICAuICAgICAgICAgICJsLnN0YXJ0IERFU0MiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRkYXRhID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZighIGlzX251bWVyaWMoJHJvd1snZW5kJ10pKQogCQkJCWNvbnRpbnVlOwogCQkJJG1zZyA9ICI8c3Ryb25nPnskcm93Wydob3N0bmFtZSddfTwvc3Ryb25nPjxicj4iOwpAQCAtNDkwNyw2ICs0OTIwLDggQEAKIAkJCQkkbXNnIC49ICJFbmQ6ICIgLiBwcmV0dHlEYXRldGltZSgkcm93WydlbmQnXSwgMSkgLiAiPGJyPiI7CiAJCQkkbXNnIC49ICJNYW5hZ2VtZW50IE5vZGU6IHskcm93WydtYW5hZ2VtZW50bm9kZSddfTxicj4iOwogCQkJJG1zZyAuPSAiRW5kaW5nOiB7JHJvd1snZW5kaW5nJ119PGJyPiI7CisJCQkkbXNnIC49ICJSZXF1ZXN0IElEOiB7JHJvd1sncmVxdWVzdGlkJ119PGJyPiI7CisJCQkkbXNnIC49ICJJUCBBZGRyZXNzOiB7JHJvd1snSVBhZGRyZXNzJ119PGJyPiI7CiAJCQkkbXNnIC49ICI8aHI+IjsKIAkJCSRkYXRhW10gPSBhcnJheSgnbmFtZScgPT4gJHJvd1snaG9zdG5hbWUnXSwgJ21zZycgPT4gJG1zZyk7CiAJCX0KQEAgLTUwNzYsNyArNTA5MSw3IEBACiAJCSAgICAgICAuICAgICAgICJldGgxbWFjYWRkcmVzcyBJTiAoJyRpbmV0aDFzJykiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRlcnJtc2cgPSAnJzsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJJGVycm1zZyAuPSAiVGhlIHNwZWNpZmllZCBzdGFydGluZyBNQUMgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBudW1iZXIgIjsKIAkJCSRlcnJtc2cgLj0gIm9mIGNvbXB1dGVycyBlbnRlcmVkIHdpbGwgcmVzdWx0IGluIGEgTUFDIGFkZHJlc3MgYWxyZWFkeSAiOwogCQkJJGVycm1zZyAuPSAiYXNzaWduZWQgdG8gYW5vdGhlciBjb21wdXRlci4iOwpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvY29uZi1kZWZhdWx0LnBocCBiL3dlYi8uaHQtaW5jL2NvbmYtZGVmYXVsdC5waHAKaW5kZXggMjU1OTkxYi4uY2ZmMTVhMyAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvY29uZi1kZWZhdWx0LnBocAorKysgYi93ZWIvLmh0LWluYy9jb25mLWRlZmF1bHQucGhwCkBAIC01NiwxMSArNTYsMTggQEAKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIGVuZCByZXF1aXJlZCBtb2RpZmljYXRpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJGhvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107CitpZiAoc3RycG9zKCRob3N0LCAnOicpKSB7CisJJGhvc3QgPSBzdWJzdHIoJGhvc3QsIDAsIHN0cnBvcygkaG9zdCwgJzonKSk7Cit9CiAKK2RlZmluZSgiU1NMT0ZGTE9BRCIsIDApOyAvLyBzZXQgdGhpcyB0byAxIHRvIHVzZSBleHRlcm5hbCBsb2FkIGJhbGFuY2VyIHRvIG1hbmFnZSBTU0wgdGVybWluYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIEJBU0VVUkwgYW5kIEhPTUVVUkwgcGF0aHMgdG8gYWxzbyBiZSBwbGFpbiBIVFRQCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFZDTCBhcHBsaWNhdGlvbiB3aWxsIG5vdCBmb3JjZSBIVFRQUyB1cmxzIGFzIEhUVFBTIGlzIGVuZm9yY2VkIGF0IHRoZSBsb2FkIGJhbGFuY2VyCiBkZWZpbmUoIkJBU0VVUkwiLCAiaHR0cHM6Ly97JF9TRVJWRVJbJ0hUVFBfSE9TVCddfS92Y2wiKTsgICAvLyBubyB0cmFpbGluZyBzbGFzaCAtIGFsbCBvZiB0aGUgVVJMIGV4Y2VwdCAvaW5kZXgucGhwCiBkZWZpbmUoIlNDUklQVCIsICIvaW5kZXgucGhwIik7ICAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGJlICIvaW5kZXgucGhwIiB1bmxlc3MgeW91IHJlbmFtZSBpbmRleC5waHAgdG8gc29tZXRoaW5nIGVsc2UKIGRlZmluZSgiSE9NRVVSTCIsICJodHRwczovL3skX1NFUlZFUlsnSFRUUF9IT1NUJ119L3ZjbC8iKTsgLy8gdXJsIHRvIGdvIHRvIHdoZW4gc29tZW9uZSBjbGlja3MgSE9NRSBvciBMb2dvdXQKLWRlZmluZSgiQ09PS0lFRE9NQUlOIiwgInskX1NFUlZFUlsnSFRUUF9IT1NUJ119Iik7ICAgICAgIC8vIGRvbWFpbiBpbiB3aGljaCBjb29raWVzIGFyZSBzZXQKK2RlZmluZSgiQ09PS0lFRE9NQUlOIiwgIiRob3N0Iik7ICAgICAgIC8vIGRvbWFpbiBpbiB3aGljaCBjb29raWVzIGFyZSBzZXQKIAogZGVmaW5lKCJERUZBVUxUR1JPVVAiLCAiYWRtaW5Vc2VycyIpOyAvLyBpZiBhIHVzZXIgaXMgaW4gbm8gZ3JvdXBzLCB1c2UgcmVzZXJ2YXRpb24KIAkJCQkJCQkJCQkgIC8vICAgbGVuZ3RoIGF0dHJpdWJ0ZXMgZnJvbSB0aGlzIGdyb3VwCkBAIC0xMzEsNyArMTM4LDcgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFmZmlsaWF0aW9uaWQiID0+IDEsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWxwIiA9PiAiT25seSB1c2UgTG9jYWwgQWNjb3VudCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgb3B0aW9ucyIpLAogCS8qIlNoaWJib2xldGggKFVOQyBGZWRlcmF0aW9uKSIgPT4gYXJyYXkoInR5cGUiID0+ICJyZWRpcmVjdCIsCi0JICAgICAgICAgICAgICAgICAgICAgIlVSTCIgPT4gImh0dHBzOi8vZmVkZXJhdGlvbi5ub3J0aGNhcm9saW5hLmVkdS93YXlmL3dheWZfZnJhbWVkLnBocD9mZWQ9RkVEX1NISUJfVU5DX0RFViZ2ZXJzaW9uPWRyb3Bkb3duJmVudGl0eUlEPWh0dHBzJTNBJTJGJTJGdmNsLm5jc3UuZWR1JTJGc3AlMkZzaGliYm9sZXRoJnJldHVybj1odHRwJTNBJTJGJTJGdmNsLm5jc3UuZWR1JTJGU2hpYmJvbGV0aC5zc28lMkZEUyUzRlNBTUxEUyUzRDElMjZ0YXJnZXQlM0RodHRwJTNBJTJGJTJGdmNsLm5jc3UuZWR1JTJGc2NoZWR1bGluZyUyRnNoaWJhdXRoJTJGIiwKKwkgICAgICAgICAgICAgICAgICAgICAiVVJMIiA9PiAiaHR0cHM6Ly9mZWRlcmF0aW9uLm5vcnRoY2Fyb2xpbmEuZWR1L3dheWYvd2F5Zl9mcmFtZWQucGhwP2ZlZD1GRURfU0hJQl9VTkNfREVWJnZlcnNpb249ZHJvcGRvd24mZW50aXR5SUQ9aHR0cHMlM0ElMkYlMkZ2Y2wubmNzdS5lZHUlMkZzcCUyRnNoaWJib2xldGgmcmV0dXJuPWh0dHAlM0ElMkYlMkZ2Y2wubmNzdS5lZHUlMkZTaGliYm9sZXRoLnNzbyUyRkRTJTNGU0FNTERTJTNEMSUyNnRhcmdldCUzRGh0dHAlM0ElMkYlMkZ2Y2wubmNzdS5lZHUlMkZzY2hlZHVsaW5nJTJGLyIsCiAJICAgICAgICAgICAgICAgICAgICAgImFmZmlsaWF0aW9uaWQiID0+IDAsIC8vIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSAwIGZvciBTaGliYm9sZXRoIGF1dGhlbnRpY2F0aW9uCiAJICAgICAgICAgICAgICAgICAgICAgImhlbHAiID0+ICJVc2UgU2hpYmJvbGV0aCAoVU5DIEZlZGVyYXRpb24pIGlmIHlvdSBhcmUgZnJvbSBhIFVuaXZlcnNpdHkgaW4gdGhlIFVOQyBzeXN0ZW0gYW5kIGRvIG5vdCBzZWUgYW5vdGhlciBtZXRob2Qgc3BlY2lmaWNhbGx5IGZvciB5b3VyIHVuaXZlcnNpdHkiKSwqLwogCS8qIkVYQU1QTEUxIExEQVAiID0+IGFycmF5KCJ0eXBlIiA9PiAibGRhcCIsCkBAIC0xNzYsOSArMTgzLDkgQEAKIAkJJHVwZGF0ZVVzZXJGdW5jQXJnc1skaXRlbVsnYWZmaWxpYXRpb25pZCddXSA9ICRrZXk7CiAJfQogCWVsc2VpZigkaXRlbVsndHlwZSddID09ICdsb2NhbCcpIHsKLQkJJGFmZmlsVmFsRnVuY1skaXRlbVsnYWZmaWxpYXRpb25pZCddXSA9IGNyZWF0ZV9mdW5jdGlvbignJywgJ3JldHVybiAwOycpOwotCQkkYWRkVXNlckZ1bmNbJGl0ZW1bJ2FmZmlsaWF0aW9uaWQnXV0gPSBjcmVhdGVfZnVuY3Rpb24oJycsICdyZXR1cm4gTlVMTDsnKTsKLQkJJHVwZGF0ZVVzZXJGdW5jWyRpdGVtWydhZmZpbGlhdGlvbmlkJ11dID0gY3JlYXRlX2Z1bmN0aW9uKCcnLCAncmV0dXJuIE5VTEw7Jyk7CisJCSRhZmZpbFZhbEZ1bmNbJGl0ZW1bJ2FmZmlsaWF0aW9uaWQnXV0gPSBmdW5jdGlvbigpIHtyZXR1cm4gMDt9OworCQkkYWRkVXNlckZ1bmNbJGl0ZW1bJ2FmZmlsaWF0aW9uaWQnXV0gPSBmdW5jdGlvbigpIHtyZXR1cm4gTlVMTDt9OworCQkkdXBkYXRlVXNlckZ1bmNbJGl0ZW1bJ2FmZmlsaWF0aW9uaWQnXV0gPSBmdW5jdGlvbigpIHtyZXR1cm4gTlVMTDt9OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvY29uZmlnLnBocCBiL3dlYi8uaHQtaW5jL2NvbmZpZy5waHAKaW5kZXggM2VkMmNiMi4uNTMxNDI0ZCAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvY29uZmlnLnBocAorKysgYi93ZWIvLmh0LWluYy9jb25maWcucGhwCkBAIC02NSw3ICs2NSw3IEBACiAJCSRxdWVyeSAuPSAiT1JERVIgQlkgY3YuY29uZmlnaWQsIGN2Lm5hbWUiOwogCQkkdmFyaWFibGVzID0gYXJyYXkoKTsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHZhcmlhYmxlc1skcm93Wydjb25maWdpZCddXVskcm93WydpZCddXSA9ICRyb3c7CiAKIAkJIyBjb25maWcgc3ViaW1hZ2VzCkBAIC04NSw3ICs4NSw3IEBACiAJCQkkcXVlcnkgLj0gIkFORCBjb25maWdpZCA9ICRpZCAiOwogCQkkcXVlcnkgLj0gIk9SREVSIEJZIHMuY29uZmlnaWQsIGkucHJldHR5bmFtZSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSR2YXJpYWJsZXNbJHJvd1snY29uZmlnaWQnXV1bJHJvd1snaWQnXV0gPSAkcm93OwogCiAJCSMgY29uZmlncwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCQkkcXVlcnkgLj0gIiBBTkQgYy5kZWxldGVkID0gMCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJGNvbmZpZ3MgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCWlmKGFycmF5X2tleV9leGlzdHMoJHJvd1snaWQnXSwgJHZhcmlhYmxlcykpCiAJCQkJJHJvd1sndmFyaWFibGVzJ10gPSAkdmFyaWFibGVzWyRyb3dbJ2lkJ11dOwogCQkJZWxzZQpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCSAgICAgICAuICAgICAgICJjLmNvbmZpZ3R5cGVpZCA9IGN0LmlkIEFORCAiCiAJCSAgICAgICAuICAgICAgICJjLmRlbGV0ZWQgPSAwIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJcmV0dXJuICRyb3c7CiAJCWVsc2UKIAkJCXJldHVybiBOVUxMOwpAQCAtMjQ1LDExICsyNDUsMTEgQEAKIAkJfQogCQkkc2V0cyA9IGFycmF5KCk7CiAJCWlmKCRjdXJkYXRhWyduYW1lJ10gIT0gJHZhcnNbJ25hbWUnXSkgewotCQkJJG5hbWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhcnNbJ25hbWUnXSk7CisJCQkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR2YXJzWyduYW1lJ10pOwogCQkJJHNldHNbXSA9ICJuYW1lID0gJyRuYW1lJyI7CiAJCX0KIAkJaWYoJGN1cmRhdGFbJ2RhdGEnXSAhPSAkdmFyc1snZGF0YSddKSB7Ci0JCQkkZGF0YSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFyc1snZGF0YSddKTsKKwkJCSRkYXRhID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHZhcnNbJ2RhdGEnXSk7CiAJCQkkc2V0c1tdID0gImRhdGEgPSAnJGRhdGEnIjsKIAkJfQogCQlpZigkY3VyZGF0YVsnb3duZXJpZCddICE9ICR2YXJzWydvd25lcmlkJ10pCkBAIC0zMTksMTEgKzMxOSwxMSBAQAogCQkJCX0KIAkJCQkkc2V0cyA9IGFycmF5KCk7CiAJCQkJaWYoJHZhcmRhdGFbJ25hbWUnXSAhPSAkbmV3dmFyc1skaWRdWyduYW1lJ10pIHsKLQkJCQkJJG5hbWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhcnNbJGlkXVsnbmFtZSddKTsKKwkJCQkJJG5hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3dmFyc1skaWRdWyduYW1lJ10pOwogCQkJCQkkc2V0c1tdID0gIm5hbWUgPSAnJG5hbWUnIjsKIAkJCQl9CiAJCQkJaWYoJHZhcmRhdGFbJ2lkZW50aWZpZXInXSAhPSAkbmV3dmFyc1skaWRdWydpZGVudGlmaWVyJ10pIHsKLQkJCQkJJGlkZW50aWZpZXIgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhcnNbJGlkXVsnaWRlbnRpZmllciddKTsKKwkJCQkJJGlkZW50aWZpZXIgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3dmFyc1skaWRdWydpZGVudGlmaWVyJ10pOwogCQkJCQkkc2V0c1tdID0gImlkZW50aWZpZXIgPSAnJGlkZW50aWZpZXInIjsKIAkJCQl9CiAJCQkJaWYoJHZhcmRhdGFbJ2RhdGF0eXBlaWQnXSAhPSAkbmV3dmFyc1skaWRdWydkYXRhdHlwZWlkJ10pIHsKQEAgLTMzMiw3ICszMzIsNyBAQAogCQkJCQkkc2V0c1tdID0gImRhdGF0eXBlaWQgPSAneyRuZXd2YXJzWyRpZF1bJ2RhdGF0eXBlaWQnXX0nIjsKIAkJCQl9CiAJCQkJaWYoJHZhcmRhdGFbJ2RlZmF1bHR2YWx1ZSddICE9ICRuZXd2YXJzWyRpZF1bJ2RlZmF1bHR2YWx1ZSddKSB7Ci0JCQkJCSRkZWZhdWx0dmFsdWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhcnNbJGlkXVsnZGVmYXVsdHZhbHVlJ10pOworCQkJCQkkZGVmYXVsdHZhbHVlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhcnNbJGlkXVsnZGVmYXVsdHZhbHVlJ10pOwogCQkJCQkkc2V0c1tdID0gImRlZmF1bHR2YWx1ZSA9ICckZGVmYXVsdHZhbHVlJyI7CiAJCQkJfQogCQkJCWlmKCR2YXJkYXRhWydyZXF1aXJlZCddICE9ICRuZXd2YXJzWyRpZF1bJ3JlcXVpcmVkJ10pIHsKQEAgLTM3Nyw5ICszNzcsOSBAQAogCQkkaW5zZXJ0cyA9IGFycmF5KCk7CiAJCSRkYXRhdHlwZXMgPSBnZXRDb25maWdEYXRhVHlwZXMoKTsKIAkJZm9yZWFjaCgkbmV3dmFycyBhcyAkdmFyKSB7Ci0JCQkkbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFyWyduYW1lJ10pOwotCQkJJGlkZW50aWZpZXIgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhclsnaWRlbnRpZmllciddKTsKLQkJCSRkZWZhdWx0dmFsdWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhclsnZGVmYXVsdHZhbHVlJ10pOworCQkJJG5hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdmFyWyduYW1lJ10pOworCQkJJGlkZW50aWZpZXIgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdmFyWydpZGVudGlmaWVyJ10pOworCQkJJGRlZmF1bHR2YWx1ZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR2YXJbJ2RlZmF1bHR2YWx1ZSddKTsKIAkJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkdmFyWydkYXRhdHlwZWlkJ10sICRkYXRhdHlwZXMpKQogCQkJCSR2YXJbJ2RhdGF0eXBlaWQnXSA9ICR0aGlzLT5maW5kRGF0YVR5cGVJRCgkdmFyWydkZWZhdWx0dmFsdWUnXSwgJGRhdGF0eXBlcyk7CiAJCQkkaW5zZXJ0c1tdID0gIignJG5hbWUnLCAiCkBAIC00MDcsNyArNDA3LDcgQEAKIAkvLy8KIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCWZ1bmN0aW9uIGFkZFJlc291cmNlKCR2YXJzKSB7Ci0JCSRuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2YXJzWyduYW1lJ10pOworCQkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR2YXJzWyduYW1lJ10pOwogCQlpZigkdmFyc1sndHlwZSddID09ICdDbHVzdGVyJykgewogCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGNvbmZpZyAiCiAJCQkgICAgICAgLiAgICAgICAgIihuYW1lLCAiCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJCWRvUXVlcnkoJHF1ZXJ5KTsKIAkJfQogCQllbHNlIHsKLQkJCSRkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2YXJzWydkYXRhJ10pOworCQkJJGRhdGEgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdmFyc1snZGF0YSddKTsKIAkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBjb25maWcgIgogCQkJICAgICAgIC4gICAgICAgICIobmFtZSwgIgogCQkJICAgICAgIC4gICAgICAgICJjb25maWd0eXBlaWQsICIKQEAgLTUwMSwxMCArNTAxLDEwIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQkjIGNoZWNrIGZvciBleGlzdGFuY2Ugb2YgbmFtZQotCQkkbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkcmV0dXJuWyduYW1lJ10pOworCQkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRyZXR1cm5bJ25hbWUnXSk7CiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQgRlJPTSBjb25maWcgV0hFUkUgbmFtZSA9ICckbmFtZScgQU5EIGlkICE9ICRjb25maWdpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJJHRoaXMtPmVycm1zZyA9ICJBbm90aGVyIGNvbmZpZyB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTExNTIsNyArMTE1Miw3IEBACiAJCSAgICAgICAuICAgICAgICJjLmRlbGV0ZWQgPSAwIjsKIAkJJGNvbmZpZ21hcHMgPSBhcnJheSgpOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJc3dpdGNoKCRyb3dbJ2NvbmZpZ21hcHR5cGUnXSkgewogCQkJCWNhc2UgIkltYWdlIjoKIAkJCQkJJHJvd1snbWFwdG8nXSA9ICRyb3dbJ2ltYWdlJ107CkBAIC0xNDc4LDcgKzE0NzgsNyBAQAogCQkgICAgICAgLiAgICAgICAiY29uZmlnc3RhZ2VpZCA9IHskcmV0dXJuWydzdGFnZWlkJ119IEFORCAiCiAJCSAgICAgICAuICAgICAgICJpZCAhPSAkY29uZmlnbWFwaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCSR0aGlzLT5lcnJtc2cgPSAiVGhlIHNwZWNpZmllZCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzLiI7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTUyNiw3ICsxNTI2LDcgQEAKIAkJICAgICAgIC4gICAgICAgImMuaWQgaW4gKCRpbmxpc3QpIjsKIAkJJGNvbmZpZ3MgPSBhcnJheSgpOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkY29uZmlnc1skcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsKIAkJcmV0dXJuICRjb25maWdzOwogCX0KQEAgLTE1NDIsNyArMTU0Miw3IEBACiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBjb25maWdzdGFnZSBPUkRFUiBCWSBuYW1lIjsKIAkJJHN0YWdlcyA9IGFycmF5KCk7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRzdGFnZXNbJHJvd1snaWQnXV0gPSAkcm93WyduYW1lJ107CiAJCXJldHVybiAkc3RhZ2VzOwogCX0KQEAgLTE1OTcsNyArMTU5Nyw3IEBACiAJCQkgICAgICAgLiAgICAgICAiY3QucHJldHR5bmFtZSA9ICdDb25maWcnIEFORCAiCiAJCQkgICAgICAgLiAgICAgICAiY20uY29uZmlnaWQgPSBjLmlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQlpZigkcm93WydzdWJpZCddID09ICRjb25maWdpZCkKIAkJCQkJcmV0dXJuICRyb3dbJ2NvbmZpZyddOwogCQkJCWlmKCRyZWNjbnQgPCAyMCkgewpAQCAtMTYyNCw3ICsxNjI0LDcgQEAKIAkJCSAgICAgICAuICAgICAgICJjdC5wcmV0dHluYW1lID0gJ1N1YmltYWdlJyBBTkQgIgogCQkJICAgICAgIC4gICAgICAgImNtLmNvbmZpZ2lkID0gYy5pZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJaWYoJHJvd1snY29uZmlnaWQnXSA9PSAkY29uZmlnaWQpCiAJCQkJCXJldHVybiAkcm93Wydjb25maWcnXTsKIAkJCQlpZigkcmVjY250IDwgMjApIHsKZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2Rhc2hib2FyZC5waHAgYi93ZWIvLmh0LWluYy9kYXNoYm9hcmQucGhwCmluZGV4IDc4ZTQ2OWMuLjkwMThjMjAgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL2Rhc2hib2FyZC5waHAKKysrIGIvd2ViLy5odC1pbmMvZGFzaGJvYXJkLnBocApAQCAtNDIsNyArNDIsNyBAQAogCiAJIyAtLS0tLS0tLSBsZWZ0IGNvbHVtbiAtLS0tLS0tLS0KIAlwcmludCAiPGRpdiBpZD1cImRhc2hsZWZ0XCI+XG4iOwotCXByaW50IGFkZFdpZGdldCgnc3RhdHVzJywgJ0N1cnJlbnQgU3RhdHVzJyk7CisJcHJpbnQgYWRkV2lkZ2V0KCdzdGF0dXMnLCAnQ3VycmVudCBTdGF0dXMnLCAnKEhvdmVyIGZvciBkZXNjcmlwdGlvbiknKTsKIAlwcmludCBhZGRXaWRnZXQoJ3RvcGltYWdlcycsICdUb3AgNSBJbWFnZXMgaW4gVXNlJywgJyhSZXNlcnZhdGlvbnMgJmx0OyAyNCBob3VycyBsb25nKScpOwogCXByaW50IGFkZFdpZGdldCgndG9wbG9uZ2ltYWdlcycsICdUb3AgNSBMb25nIFRlcm0gSW1hZ2VzIGluIFVzZScsICcoUmVzZXJ2YXRpb25zICZndDsgMjQgaG91cnMgbG9uZyknKTsKIAlwcmludCBhZGRXaWRnZXQoJ3RvcHBhc3RpbWFnZXMnLCAnVG9wIDUgSW1hZ2VzIEZyb20gUGFzdCBEYXknLCAnKFJlc2VydmF0aW9ucyB3aXRoIGEgc3RhcnQ8YnI+dGltZSB3aXRoaW4gcGFzdCAyNCBob3VycyknKTsKQEAgLTE2OCwxMCArMTY4LDExIEBACiBmdW5jdGlvbiBnZXRTdGF0dXNEYXRhKCkgewogCSRhZmZpbGlkID0gZ2V0RGFzaGJvYXJkQWZmaWxJRCgpOwogCSRkYXRhID0gYXJyYXkoKTsKLQkkZGF0YVtdID0gYXJyYXkoJ2tleScgPT4gJ0FjdGl2ZSBSZXNlcnZhdGlvbnMnLCAndmFsJyA9PiAwKTsKLQkkZGF0YVtdID0gYXJyYXkoJ2tleScgPT4gJ09ubGluZSBDb21wdXRlcnMnLCAndmFsJyA9PiAwLCAndG9vbHRpcCcgPT4gJ0NvbXB1dGVycyBpbiBzdGF0ZXMgYXZhaWxhYmxlLCByZXNlcnZlZCw8YnI+cmVsb2FkaW5nLCBpbnVzZSwgb3IgdGltZW91dCcpOwotCSRkYXRhW10gPSBhcnJheSgna2V5JyA9PiAnSW4gVXNlIENvbXB1dGVycycsICd2YWwnID0+IDAsICd0b29sdGlwJyA9PiAnQ29tcHV0ZXJzIGluIGludXNlIHN0YXRlJyk7Ci0JJGRhdGFbXSA9IGFycmF5KCdrZXknID0+ICdGYWlsZWQgQ29tcHV0ZXJzJywgJ3ZhbCcgPT4gMCk7CisJJGRhdGFbMF0gPSBhcnJheSgna2V5JyA9PiAnQWN0aXZlIFJlc2VydmF0aW9ucycsICd2YWwnID0+IDAsICd0b29sdGlwJyA9PiAnUmVzZXJ2YXRpb25zIGN1cnJlbnRseSBydW5uaW5nJyk7CisJJGRhdGFbMV0gPSBhcnJheSgna2V5JyA9PiAnQWN0aXZlIFNob3J0IFJlc2VydmF0aW9ucycsICd2YWwnID0+IDAsICd0b29sdGlwJyA9PiAnUmVzZXJ2YXRpb25zIHdpdGggYSBkdXJhdGlvbiA8IDI0IGhvdXJzJyk7CisJJGRhdGFbMl0gPSBhcnJheSgna2V5JyA9PiAnT25saW5lIENvbXB1dGVycycsICd2YWwnID0+IDAsICd0b29sdGlwJyA9PiAnQ29tcHV0ZXJzIGluIHN0YXRlcyBhdmFpbGFibGUsIHJlc2VydmVkLDxicj5yZWxvYWRpbmcsIGludXNlLCBvciB0aW1lb3V0Jyk7CisJJGRhdGFbM10gPSBhcnJheSgna2V5JyA9PiAnSW4gVXNlIENvbXB1dGVycycsICd2YWwnID0+IDAsICd0b29sdGlwJyA9PiAnQ29tcHV0ZXJzIGluIGludXNlIHN0YXRlJyk7CisJJGRhdGFbNF0gPSBhcnJheSgna2V5JyA9PiAnRmFpbGVkIENvbXB1dGVycycsICd2YWwnID0+IDApOwogCSRyZWxvYWRpZCA9IGdldFVzZXJsaXN0SUQoJ3ZjbHJlbG9hZEBMb2NhbCcpOwogCWlmKCRhZmZpbGlkID09IDApIHsKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChpZCkgIgpAQCAtMTkzLDIzICsxOTQsNDggQEAKIAkJCQkgLiAgICAgICAicnEuZW5kID4gTk9XKCkiOwogCX0KIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJJGRhdGFbMF1bJ3ZhbCddID0gJHJvd1swXTsKIAorCWlmKCRhZmZpbGlkID09IDApIHsKKwkJJHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChpZCkgIgorCQkgICAgICAgLiAiRlJPTSByZXF1ZXN0ICIKKwkJICAgICAgIC4gIldIRVJFIHVzZXJpZCAhPSAkcmVsb2FkaWQgQU5EICIKKwkJICAgICAgIC4gICAgICAgInN0YXRlaWQgTk9UIElOICgxLCA1LCAxMCwgMTIpIEFORCAiCisJCSAgICAgICAuICAgICAgICJzdGFydCA8IE5PVygpIEFORCAiCisJCQkJIC4gICAgICAgImVuZCA+IE5PVygpIEFORCAiCisJCSAgICAgICAuICAgICAgICIoVU5JWF9USU1FU1RBTVAoZW5kKSAtIFVOSVhfVElNRVNUQU1QKHN0YXJ0KSkgPCA4NjQwMCI7CisJfQorCWVsc2UgeworCQkkcXVlcnkgPSAiU0VMRUNUIENPVU5UKHJxLmlkKSAiCisJCSAgICAgICAuICJGUk9NIHJlcXVlc3QgcnEsICIKKwkJICAgICAgIC4gICAgICAidXNlciB1ICIKKwkJICAgICAgIC4gIldIRVJFIHJxLnVzZXJpZCAhPSAkcmVsb2FkaWQgQU5EICIKKwkJICAgICAgIC4gICAgICAgInJxLnVzZXJpZCA9IHUuaWQgQU5EICIKKwkJICAgICAgIC4gICAgICAgInUuYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIEFORCAiCisJCSAgICAgICAuICAgICAgICJycS5zdGF0ZWlkIE5PVCBJTiAoMSwgNSwgMTAsIDEyKSBBTkQgIgorCQkgICAgICAgLiAgICAgICAicnEuc3RhcnQgPCBOT1coKSBBTkQgIgorCQkJCSAuICAgICAgICJycS5lbmQgPiBOT1coKSBBTkQgIgorCQkgICAgICAgLiAgICAgICAiKFVOSVhfVElNRVNUQU1QKGVuZCkgLSBVTklYX1RJTUVTVEFNUChzdGFydCkpIDwgODY0MDAiOworCX0KKwkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQorCQkkZGF0YVsxXVsndmFsJ10gPSAkcm93WzBdOworCiAJJHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBjb21wdXRlciBXSEVSRSBzdGF0ZWlkIElOICgyLCAzLCA2LCA4LCAxMSkiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKLQkJJGRhdGFbMV1bJ3ZhbCddID0gJHJvd1swXTsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQorCQkkZGF0YVsyXVsndmFsJ10gPSAkcm93WzBdOwogCiAJJHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBjb21wdXRlciBXSEVSRSBzdGF0ZWlkID0gOCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQotCQkkZGF0YVsyXVsndmFsJ10gPSAkcm93WzBdOworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCisJCSRkYXRhWzNdWyd2YWwnXSA9ICRyb3dbMF07CiAKIAkkcXVlcnkgPSAiU0VMRUNUIENPVU5UKGlkKSBGUk9NIGNvbXB1dGVyIFdIRVJFIHN0YXRlaWQgPSA1IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCi0JCSRkYXRhWzNdWyd2YWwnXSA9ICRyb3dbMF07CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKKwkJJGRhdGFbNF1bJ3ZhbCddID0gJHJvd1swXTsKIAlyZXR1cm4gJGRhdGE7CiB9CiAKQEAgLTI1OSw3ICsyODUsNyBAQAogCX0KIAkkZGF0YSA9IGFycmF5KCk7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkZGF0YVtdID0gJHJvdzsKIAlyZXR1cm4gJGRhdGE7CiB9CkBAIC0zMTAsNyArMzM2LDcgQEAKIAl9CiAJJGRhdGEgPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGRhdGFbXSA9ICRyb3c7CiAJcmV0dXJuICRkYXRhOwogfQpAQCAtMzYwLDcgKzM4Niw3IEBACiAJfQogCSRkYXRhID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRkYXRhW10gPSAkcm93OwogCXJldHVybiAkZGF0YTsKIH0KQEAgLTQwNyw3ICs0MzMsNyBAQAogCX0KIAkkZGF0YSA9IGFycmF5KCk7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkZGF0YVtdID0gJHJvdzsKIAlyZXR1cm4gJGRhdGE7CiB9CkBAIC00NTgsNyArNDg0LDcgQEAKIAl9CiAJJGRhdGEgPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGRhdGFbXSA9ICRyb3c7CiAJcmV0dXJuICRkYXRhOwogfQpAQCAtNTIyLDcgKzU0OCw3IEBACiAJCSAgICAgICAuICAgICAgICJsLnVzZXJpZCAhPSAkcmVsb2FkaWQiOwogCX0KIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93WydzdGF0ZWlkJ10gPT0gMTQpCiAJCQkkcm93WydzdGF0ZWlkJ10gPSAkcm93WydsYXN0c3RhdGVpZCddOwogCQlpZigkcm93WydlbmQnXSA+IHRpbWUoKSAmJgpAQCAtNTgzLDcgKzYwOSw3IEBACiAJCQkJIC4gICAgICAgImJ0LmVuZCA+IE5PVygpIjsKIAl9CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpOworCSRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCk7CiAJJGJsb2NrY291bnQgPSAkcm93WzBdOwogCSMgY29tcHV0ZXJzIGluIGJsb2NrQ29tcHV0ZXJzIGZvciBhY3RpdmUgYWxsb2NhdGlvbnMKIAlpZigkYWZmaWxpZCA9PSAwKSB7CkBAIC02MTIsNyArNjM4LDcgQEAKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkdG90YWwgPSAwOwogCSR1c2VkID0gMDsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkdG90YWwrKzsKIAkJaWYoJHJvd1snc3RhdGVpZCddID09IDMgfHwgJHJvd1snc3RhdGVpZCddID09IDgpCiAJCQkkdXNlZCsrOwpAQCAtNjQyLDcgKzY2OCw3IEBACiAJfQogCSRhbGxvYyA9IDA7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkYWxsb2MgKz0gJHJvd1snbnVtTWFjaGluZXMnXTsKIAlpZigkYWxsb2MpCiAJCSRmYWlsZWQgPSBzcHJpbnRmKCclZCAvICVkICglMC4yZiAlJSknLCAoJGFsbG9jIC0gJHRvdGFsKSwgJGFsbG9jLCAoKCRhbGxvYyAtICR0b3RhbCkgLyAkYWxsb2MgKiAxMDApKTsKQEAgLTY3NCw2ICs3MDAsNyBAQAogZnVuY3Rpb24gZ2V0TmV3UmVzZXJ2YXRpb25EYXRhKCkgewogCSRhZmZpbGlkID0gZ2V0RGFzaGJvYXJkQWZmaWxJRCgpOwogCSRxdWVyeSA9ICJTRUxFQ1QgYy5ob3N0bmFtZSBBUyBjb21wdXRlciwgIgorCSAgICAgICAuICAgICAgICAiaC5ob3N0bmFtZSBBUyB2bWhvc3QsICIKIAkgICAgICAgLiAgICAgICAgImkucHJldHR5bmFtZSBBUyBpbWFnZSwgIgogCSAgICAgICAuICAgICAgICAicnEuaWQsICIKIAkgICAgICAgLiAgICAgICAgIlVOSVhfVElNRVNUQU1QKHJxLnN0YXJ0KSBBUyBzdGFydCwgIgpAQCAtNjg0LDYgKzcxMSw4IEBACiAJICAgICAgIC4gIkZST00gcmVxdWVzdCBycSAiCiAJICAgICAgIC4gIkxFRlQgSk9JTiByZXNlcnZhdGlvbiBycyBPTiAocnMucmVxdWVzdGlkID0gcnEuaWQpICIKIAkgICAgICAgLiAiTEVGVCBKT0lOIGNvbXB1dGVyIGMgT04gKGMuaWQgPSBycy5jb21wdXRlcmlkKSAiCisJICAgICAgIC4gIkxFRlQgSk9JTiB2bWhvc3QgdmggT04gKGMudm1ob3N0aWQgPSB2aC5pZCkgIgorCSAgICAgICAuICJMRUZUIEpPSU4gY29tcHV0ZXIgaCBPTiAoaC5pZCA9IHZoLmNvbXB1dGVyaWQpICIKIAkgICAgICAgLiAiTEVGVCBKT0lOIGltYWdlIGkgT04gKGkuaWQgPSBycy5pbWFnZWlkKSAiCiAJICAgICAgIC4gIkxFRlQgSk9JTiBPUyBvIE9OIChvLmlkID0gaS5PU2lkKSAiCiAJICAgICAgIC4gIkxFRlQgSk9JTiBzdGF0ZSBzMSBPTiAoczEuaWQgPSBycS5zdGF0ZWlkKSAiCkBAIC03MDAsOSArNzI5LDExIEBACiAJJHF1ZXJ5IC49ICJPUkRFUiBCWSBycS5zdGFydCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJGRhdGEgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSR0bXAgPSBleHBsb2RlKCcuJywgJHJvd1snY29tcHV0ZXInXSk7CiAJCSRyb3dbJ2NvbXB1dGVyJ10gPSAkdG1wWzBdOworCQkkdG1wID0gZXhwbG9kZSgnLicsICRyb3dbJ3ZtaG9zdCddKTsKKwkJJHJvd1sndm1ob3N0J10gPSAkdG1wWzBdOwogCQkkcm93WydzdGFydCddID0gZGF0ZSgnRCBoOmknLCAkcm93WydzdGFydCddKTsKIAkJJHRtcCA9IGV4cGxvZGUoJy4nLCAkcm93WydtYW5hZ2VtZW50bm9kZSddKTsKIAkJJHJvd1snbWFuYWdlbWVudG5vZGUnXSA9ICR0bXBbMF07CkBAIC03NTgsNyArNzg5LDcgQEAKIAkkcXVlcnkgLj0gIk9SREVSIEJZIHJxLnN0YXJ0IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkZGF0YSA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoaXNfbnVsbCgkcm93WydyZXZpc2lvbmNvbW1lbnRzJ10pKQogCQkJJHJvd1sncmV2aXNpb25jb21tZW50cyddID0gJyhub25lKSc7CiAJCSR0bXAgPSBleHBsb2RlKCcuJywgJHJvd1snY29tcHV0ZXInXSk7CkBAIC04MTYsNyArODQ3LDcgQEAKIAkkY3VycmVudCA9IGFycmF5KCk7CiAJJG9sZCA9IGFycmF5KCk7CiAJJG5ldmVyID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkdG1wID0gZXhwbG9kZSgnLicsICRyb3dbJ2hvc3RuYW1lJ10pOwogCQkkcm93Wydob3N0bmFtZSddID0gJHRtcFswXTsKIAkJaWYoJHJvd1snY2hlY2tpbiddIDwgMCkKZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2RveHlmaWxlLnhtbHJwYyBiL3dlYi8uaHQtaW5jL2RveHlmaWxlLnhtbHJwYwppbmRleCA0ODgwODQ3Li5mODUxOWU1IDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9kb3h5ZmlsZS54bWxycGMKKysrIGIvd2ViLy5odC1pbmMvZG94eWZpbGUueG1scnBjCkBAIC0xLDUgKzEsMyBAQAotIyBEb3h5ZmlsZSAxLjQuNwotCiAjICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICMgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogIyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgpAQCAtMTQsMTAgKzEyLDYgQEAKICMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUFJPSkVDVF9OQU1FICAgICAgICAgICA9ICJWQ0wgWE1MIFJQQyIKIFBST0pFQ1RfTlVNQkVSICAgICAgICAgPSAKIE9VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSB4bWxycGNkb2NzLwpAQCAtNTMsOSArNDcsNiBAQAogQlVJTFRJTl9TVExfU1VQUE9SVCAgICA9IE5PCiBESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KIFNVQkdST1VQSU5HICAgICAgICAgICAgPSBOTwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBCdWlsZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRVhUUkFDVF9BTEwgICAgICAgICAgICA9IE5PCiBFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KIEVYVFJBQ1RfU1RBVElDICAgICAgICAgPSBOTwpAQCAtODEsOSArNzIsNiBAQAogTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCiBTSE9XX1VTRURfRklMRVMgICAgICAgID0gTk8KIEZJTEVfVkVSU0lPTl9GSUxURVIgICAgPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2FybmluZyBhbmQgcHJvZ3Jlc3MgbWVzc2FnZXMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFFVSUVUICAgICAgICAgICAgICAgICAgPSBOTwogV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUwogV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUwpAQCAtOTEsOSArNzksNiBAQAogV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCiBXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKIFdBUk5fTE9HRklMRSAgICAgICAgICAgPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJTlBVVCAgICAgICAgICAgICAgICAgID0gLgogRklMRV9QQVRURVJOUyAgICAgICAgICA9IHhtbHJwY1dyYXBwZXJzLnBocAogUkVDVVJTSVZFICAgICAgICAgICAgICA9IE5PCkBAIC0xMDcsOSArOTIsNiBAQAogSU5QVVRfRklMVEVSICAgICAgICAgICA9IAogRklMVEVSX1BBVFRFUk5TICAgICAgICA9IAogRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IE5PCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU09VUkNFX0JST1dTRVIgICAgICAgICA9IE5PCiBJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KIFNUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMKQEAgLTExOCwxNSArMTAwLDkgQEAKIFJFRkVSRU5DRVNfTElOS19TT1VSQ0UgPSBZRVMKIFVTRV9IVEFHUyAgICAgICAgICAgICAgPSBOTwogVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IE5PCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBOTwogQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKIElHTk9SRV9QUkVGSVggICAgICAgICAgPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTCiBIVE1MX09VVFBVVCAgICAgICAgICAgID0gLgogSFRNTF9GSUxFX0VYVEVOU0lPTiAgICA9IC5odG1sCkBAIC0xNDMsOSArMTE5LDYgQEAKIEVOVU1fVkFMVUVTX1BFUl9MSU5FICAgPSA0CiBHRU5FUkFURV9UUkVFVklFVyAgICAgID0gTk8KIFRSRUVWSUVXX1dJRFRIICAgICAgICAgPSAyNTAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIExhVGVYIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCiBMQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgKIExBVEVYX0NNRF9OQU1FICAgICAgICAgPSBsYXRleApAQCAtMTU4LDQ0ICsxMzEsMjYgQEAKIFVTRV9QREZMQVRFWCAgICAgICAgICAgPSBOTwogTEFURVhfQkFUQ0hNT0RFICAgICAgICA9IE5PCiBMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEdFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTwogUlRGX09VVFBVVCAgICAgICAgICAgICA9IHJ0ZgogQ09NUEFDVF9SVEYgICAgICAgICAgICA9IE5PCiBSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KIFJURl9TVFlMRVNIRUVUX0ZJTEUgICAgPSAKIFJURl9FWFRFTlNJT05TX0ZJTEUgICAgPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hbiBwYWdlIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR0VORVJBVEVfTUFOICAgICAgICAgICA9IE5PCiBNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCiBNQU5fRVhURU5TSU9OICAgICAgICAgID0gLjMKIE1BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR0VORVJBVEVfWE1MICAgICAgICAgICA9IE5PCiBYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCiBYTUxfU0NIRU1BICAgICAgICAgICAgID0gCiBYTUxfRFREICAgICAgICAgICAgICAgID0gCiBYTUxfUFJPR1JBTUxJU1RJTkcgICAgID0gWUVTCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEF1dG9HZW4gRGVmaW5pdGlvbnMgb3V0cHV0Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCiBQRVJMTU9EX0xBVEVYICAgICAgICAgID0gTk8KIFBFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVggPSAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvciAgIAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRU5BQkxFX1BSRVBST0NFU1NJTkcgICA9IFlFUwogTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IE5PCiBFWFBBTkRfT05MWV9QUkVERUYgICAgID0gTk8KQEAgLTIwNSwxNyArMTYwLDExIEBACiBQUkVERUZJTkVEICAgICAgICAgICAgID0gCiBFWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCiBTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMgICAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRBR0ZJTEVTICAgICAgICAgICAgICAgPSAKIEdFTkVSQVRFX1RBR0ZJTEUgICAgICAgPSAKIEFMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTwogRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUwogUEVSTF9QQVRIICAgICAgICAgICAgICA9IC91c3IvYmluL3BlcmwKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sICAgCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDTEFTU19ESUFHUkFNUyAgICAgICAgID0gWUVTCiBISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCiBIQVZFX0RPVCAgICAgICAgICAgICAgID0gTk8KQEAgLTIzOCw3ICsxODcsNCBAQAogRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IE5PCiBHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCiBET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBzZWFyY2ggZW5naW5lICAgCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gTk8KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2dyb3Vwcy5waHAgYi93ZWIvLmh0LWluYy9ncm91cHMucGhwCmluZGV4IDI5YWUwZjQuLjMwNjM5NWUgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL2dyb3Vwcy5waHAKKysrIGIvd2ViLy5odC1pbmMvZ3JvdXBzLnBocApAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGNoZWNrRm9yR3JvdXBOYW1lKCRuYW1lLCAkdHlwZSwgJGlkLCAkZXh0cmFpZCkgewotCSRuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKKwkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKIAlpZigkdHlwZSA9PSAidXNlciIpCiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQgRlJPTSB1c2VyZ3JvdXAgIgogCQkgICAgICAgLiAiV0hFUkUgbmFtZSA9ICckbmFtZScgQU5EICIKQEAgLTExMTQsNyArMTExNCw3IEBACiAJaWYoISBlbXB0eSgkaWQpKQogCQkkcXVlcnkgLj0gIiBBTkQgaWQgIT0gJGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpKQorCWlmKG15c3FsaV9udW1fcm93cygkcWgpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNjIsNyArMTE2Miw3IEBACiAJCSAgICAgICAuICJXSEVSRSBpZCA9IHskZGF0YVsnZ3JvdXBpZCddfSI7CiAJfQogCWRvUXVlcnkoJHF1ZXJ5LCAzMDApOwotCXJldHVybiBteXNxbF9hZmZlY3RlZF9yb3dzKCRHTE9CQUxTWydteXNxbF9saW5rX3ZjbCddKTsKKwlyZXR1cm4gbXlzcWxpX2FmZmVjdGVkX3Jvd3MoJEdMT0JBTFNbJ215c3FsaV9saW5rX3ZjbCddKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEyMjEsNyArMTIyMSw3IEBACiAJfQogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAzMDUpOwogCWNsZWFyUHJpdkNhY2hlKCk7Ci0JcmV0dXJuIG15c3FsX2FmZmVjdGVkX3Jvd3MoJEdMT0JBTFNbJ215c3FsX2xpbmtfdmNsJ10pOworCXJldHVybiBteXNxbGlfYWZmZWN0ZWRfcm93cygkR0xPQkFMU1snbXlzcWxpX2xpbmtfdmNsJ10pOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTI1NCw3ICsxMjU0LDcgQEAKIAkJICAgICAgIC4gICAgICAgInJnLnJlc291cmNldHlwZWlkID0gcnQuaWQiOwogCQkkdXNlZGJ5ID0gYXJyYXkoKTsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDMxMCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdXNlZGJ5W10gPSAkcm93WyduYW1lJ107CiAJCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCQkkbXNnc1tdID0gIjxoMz5Pd25pbmcgVXNlciBHcm91cCBmb3IgUmVzb3VyY2UgR3JvdXBzPC9oMz5cbiIKQEAgLTEyNjksNyArMTI2OSw3IEBACiAJCQkJIC4gICAgICAgInVnLmFmZmlsaWF0aW9uaWQgPSBhLmlkIjsKIAkJJHVzZWRieSA9IGFycmF5KCk7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAzMTMpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHVzZWRieVtdID0gJHJvd1snbmFtZSddOwogCQlpZihjb3VudCgkdXNlZGJ5KSkgewogCQkJJG1zZ3NbXSA9ICI8aDM+J0VkaXRhYmxlIGJ5JyBHcm91cCBmb3IgVXNlciBHcm91cHM8L2gzPlxuIgpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAkJICAgICAgIC4gIldIRVJFIHVzZXJncm91cGlkID0gJGdyb3VwaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSR1c2VkYnkgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHVzZWRieVtdID0gZ2V0Tm9kZVBhdGgoJHJvd1sncHJpdm5vZGVpZCddKTsKIAkJaWYoY291bnQoJHVzZWRieSkpIHsKIAkJCSRtc2dzW10gPSAiPGgzPkFzc2lnbmVkIGF0IFByaXZpbGVnZSBOb2RlczwvaDM+XG4iCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCQkgICAgICAgLiAgICJBTkQgc3RhdHVzIElOICgncmVxdWVzdGVkJywgJ2FjY2VwdGVkJykiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzExKTsKIAkJJHVzZWRieSA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdXNlZGJ5W10gPSAkcm93WyduYW1lJ107CiAJCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCQkkbXNnc1tdID0gIjxoMz5Bc3NpZ25lZCBmb3IgQmxvY2sgQWxsb2NhdGlvbnM8L2gzPlxuIgpAQCAtMTMwNCw3ICsxMzA0LDcgQEAKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lIEZST00gc2VydmVycHJvZmlsZSBXSEVSRSBhZG1pbmdyb3VwaWQgPSAkZ3JvdXBpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJHVzZWRieSA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdXNlZGJ5W10gPSAkcm93WyduYW1lJ107CiAJCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCQkkbXNnc1tdID0gIjxoMz5BZG1pbiBVc2VyIEdyb3VwIGZvciBTZXJ2ZXIgUHJvZmlsZXM8L2gzPlxuIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lIEZST00gc2VydmVycHJvZmlsZSBXSEVSRSBsb2dpbmdyb3VwaWQgPSAkZ3JvdXBpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJHVzZWRieSA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdXNlZGJ5W10gPSAkcm93WyduYW1lJ107CiAJCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCQkkbXNnc1tdID0gIjxoMz5BY2Nlc3MgVXNlciBHcm91cCBmb3IgU2VydmVyIFByb2ZpbGVzPC9oMz5cbiIKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAJCSAgICAgICAuICAgICAgICJzLnJlcXVlc3RpZCA9IHJxLmlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCQkkdXNlZGJ5ID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSR1c2VkYnlbXSA9ICRyb3dbJ25hbWUnXTsKIAkJaWYoY291bnQoJHVzZWRieSkpIHsKIAkJCSRtc2dzW10gPSAiPGgzPkFkbWluIFVzZXIgR3JvdXAgZm9yIFNlcnZlciBSZXF1ZXN0czwvaDM+XG4iCkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCQkgICAgICAgLiAgICAgICAicy5yZXF1ZXN0aWQgPSBycS5pZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJHVzZWRieSA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdXNlZGJ5W10gPSAkcm93WyduYW1lJ107CiAJCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCQkkbXNnc1tdID0gIjxoMz5BY2Nlc3MgVXNlciBHcm91cCBmb3IgU2VydmVyIFJlcXVlc3RzPC9oMz5cbiIKQEAgLTEzNjYsNyArMTM2Niw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBob3N0bmFtZSBGUk9NIG1hbmFnZW1lbnRub2RlIFdIRVJFIGltYWdlbGliZ3JvdXBpZCA9ICRncm91cGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJHVzZWRieSA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkdXNlZGJ5W10gPSAkcm93Wydob3N0bmFtZSddOwogCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCSRtc2dzW10gPSAiPGgzPk1hbmFnZW1lbnQgTm9kZSBJbWFnZSBMaWJyYXJ5IEdyb3VwPC9oMz5cbiIKQEAgLTEzNzYsNyArMTM3Niw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBESVNUSU5DVCBwcml2bm9kZWlkIEZST00gcmVzb3VyY2Vwcml2IFdIRVJFIHJlc291cmNlZ3JvdXBpZCA9ICRncm91cGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJHVzZWRieSA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkdXNlZGJ5W10gPSBnZXROb2RlUGF0aCgkcm93Wydwcml2bm9kZWlkJ10pOwogCWlmKGNvdW50KCR1c2VkYnkpKSB7CiAJCSRtc2dzW10gPSAiPGgzPkFzc2lnbmVkIGF0IFByaXZpbGVnZSBOb2RlczwvaDM+XG4iCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9oZWxwLnBocCBiL3dlYi8uaHQtaW5jL2hlbHAucGhwCmluZGV4IGRkNzNhZGIuLmIwMzhkOTcgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL2hlbHAucGhwCisrKyBiL3dlYi8uaHQtaW5jL2hlbHAucGhwCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJJHRlc3RuYW1lID0gc3RyaXBzbGFzaGVzKCRuYW1lKTsKIAlpZighIHByZWdfbWF0Y2goJy9eKFstQS1aYS16IFwnXXsxLH0gWy1BLVphLXogXCddezIsfSkqJC8nLCAkdGVzdG5hbWUpKSB7CiAJCSRzdWJtaXRFcnIgfD0gTkFNRUVSUjsKLQkJJHN1Ym1pdEVyck1zZ1tOQU1FRVJSXSA9ICJOYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgc3BhY2VzLCBhcG9zdHJvcGhlcyAoJyksIGFuZCBkYXNoZXMgKC0pIjsKKwkJJHN1Ym1pdEVyck1zZ1tOQU1FRVJSXSA9ICJOYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgc3BhY2VzLCBhcG9zdHJvcGhlcyAoJyksIGFuZCBkYXNoZXMgKC0pLiBCb3RoIGZpcnN0IGFuZCBsYXN0IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIjsKIAl9CiAJaWYoISBwcmVnX21hdGNoKCcvXltfYS16MC05LV0rKFwuW19hLXowLTktXSspKkBbYS16MC05LV0rKFwuW2EtejAtOS1dKykqKFwuW2Etel17MiwzfSkkL2knLAogCSAgICRlbWFpbCkpIHsKQEAgLTE2OCw3ICsxNjgsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSBsLmZpbmFsZW5kIERFU0MgIgogCSAgICAgICAuICJMSU1JVCA1IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMjkwKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkjIG9ubHkgaW5jbHVkZSAxIGNvbXB1dGVyIGZyb20gY2x1c3RlciByZXNlcnZhdGlvbnMKIAkJaWYoYXJyYXlfa2V5X2V4aXN0cygkcm93WydpZCddLCAkcmVxdWVzdHMpKQogCQkJY29udGludWU7CkBAIC0xODYsOSArMTg2LDkgQEAKIAkkcmVjZW50cmVxdWVzdHMgPSAiIjsKIAlmb3JlYWNoKCRyZXF1ZXN0cyBhcyAkcmVxdWVzdCkgewogCQkkdGhpc3N0YXJ0ID0gc3RyX3JlcGxhY2UoJyZuYnNwOycsICcgJywgCi0JCQkJcHJldHR5RGF0ZXRpbWUoJHJlcXVlc3RbInN0YXJ0Il0pKTsKKwkJCQlwcmV0dHlEYXRldGltZSgkcmVxdWVzdFsic3RhcnQiXSwgMCwgMSkpOwogCQkkdGhpc2VuZCA9IHN0cl9yZXBsYWNlKCcmbmJzcDsnLCAnICcsIAotCQkJCXByZXR0eURhdGV0aW1lKCRyZXF1ZXN0WyJlbmQiXSkpOworCQkJCXByZXR0eURhdGV0aW1lKCRyZXF1ZXN0WyJlbmQiXSwgMCwgMSkpOwogCQkkcmVjZW50cmVxdWVzdHMgLj0gIkltYWdlOiB7JHJlcXVlc3RbInByZXR0eWltYWdlIl19XG4iCiAJCSAgICAgICAgICAgICAgICAuICAiQ29tcHV0ZXI6IHskY29tcHV0ZXJzWyRyZXF1ZXN0WyJjb21wdXRlcmlkIl1dWyJob3N0bmFtZSJdfVxuIgogCQkgICAgICAgICAgICAgICAgLiAgIlN0YXJ0OiAkdGhpc3N0YXJ0XG4iCkBAIC0yMDIsMTYgKzIwMiw3OSBAQAogCQkkbWVzc2FnZSAuPSAiVXNlciBoYXMgbm8gcmVjZW50IHJlc2VydmF0aW9uc1xuIjsKIAl9CiAKKwkjIGxvZ2luIGhpc3RvcnkKKwkkcXVlcnkgPSAiU0VMRUNUIGF1dGhtZWNoLCAiCisJICAgICAgIC4gICAgICAgICJ0aW1lc3RhbXAsICIKKwkgICAgICAgLiAgICAgICAgInBhc3NmYWlsLCAiCisJICAgICAgIC4gICAgICAgICJyZW1vdGVJUCwgIgorCSAgICAgICAuICAgICAgICAiY29kZSAiCisJICAgICAgIC4gIkZST00gbG9naW5sb2cgIgorCSAgICAgICAuICJXSEVSRSAodXNlciA9ICd7JHVzZXJbJ3VuaXR5aWQnXX0nIE9SICIKKwkgICAgICAgLiAgICAgICAidXNlciA9ICd7JHVzZXJbJ3VuaXR5aWQnXX1AeyR1c2VyWydhZmZpbGlhdGlvbiddfScpIEFORCAiCisJICAgICAgIC4gICAgICAgImFmZmlsaWF0aW9uaWQgPSB7JHVzZXJbJ2FmZmlsaWF0aW9uaWQnXX0gIgorCSAgICAgICAuICJPUkRFUiBCWSB0aW1lc3RhbXAgREVTQyAiCisJICAgICAgIC4gIkxJTUlUIDUiOworCSRtZXRob2RsZW4gPSBzdHJsZW4oaSgnQXV0aGVudGljYXRpb24gTWV0aG9kJykpOworCSR0aW1lbGVuID0gc3RybGVuKGkoJ1RpbWVzdGFtcCcpKTsKKwkkcmVzdWx0bGVuID0gc3RybGVuKGkoJ1Jlc3VsdCcpKTsKKwkkcmVtb3RlaXBsZW4gPSBzdHJsZW4oaSgnUmVtb3RlIElQJykpOworCSRleHRyYWxlbiA9IHN0cmxlbihpKCdFeHRyYSBJbmZvJykpOworCWlmKHN0cmxlbihpKCdQYXNzJykpID4gJHJlc3VsdGxlbikKKwkJJHJlc3VsdGxlbiA9IHN0cmxlbihpKCdQYXNzJykpOworCWlmKHN0cmxlbihpKCdGYWlsJykpID4gJHJlc3VsdGxlbikKKwkJJHJlc3VsdGxlbiA9IHN0cmxlbihpKCdGYWlsJykpOworCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKKwkkbG9naW5zID0gYXJyYXkoKTsKKwl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkkdG1wID0gcHJldHR5RGF0ZXRpbWUoJHJvd1sndGltZXN0YW1wJ10sIDEsIDEpOworCQkkcm93Wyd0aW1lc3RhbXAnXSA9IHN0cl9yZXBsYWNlKCcmbmJzcDsnLCAnICcsICR0bXApOworCQlpZigkcm93WydwYXNzZmFpbCddKQorCQkJJHJvd1sncGFzc2ZhaWwnXSA9ICdQYXNzJzsKKwkJZWxzZQorCQkJJHJvd1sncGFzc2ZhaWwnXSA9ICdGYWlsJzsKKwkJaWYoc3RybGVuKCRyb3dbJ2F1dGhtZWNoJ10pID4gJG1ldGhvZGxlbikKKwkJCSRtZXRob2RsZW4gPSBzdHJsZW4oJHJvd1snYXV0aG1lY2gnXSk7CisJCWlmKHN0cmxlbigkcm93Wyd0aW1lc3RhbXAnXSkgPiAkdGltZWxlbikKKwkJCSR0aW1lbGVuID0gc3RybGVuKCRyb3dbJ3RpbWVzdGFtcCddKTsKKwkJaWYoc3RybGVuKCRyb3dbJ3JlbW90ZUlQJ10pID4gJHJlbW90ZWlwbGVuKQorCQkJJHJlbW90ZWlwbGVuID0gc3RybGVuKCRyb3dbJ3JlbW90ZUlQJ10pOworCQlpZihzdHJsZW4oJHJvd1snY29kZSddKSA+ICRleHRyYWxlbikKKwkJCSRleHRyYWxlbiA9IHN0cmxlbigkcm93Wydjb2RlJ10pOworCQkkbG9naW5zW10gPSAkcm93OworCX0KKwlpZihjb3VudCgkbG9naW5zKSkgeworCQkkbG9naW5zID0gYXJyYXlfcmV2ZXJzZSgkbG9naW5zKTsKKwkJJG1lc3NhZ2UgLj0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworCQkkbWVzc2FnZSAuPSAiVXNlcidzIExvZ2luIEhpc3RvcnkgKHVwIHRvIGxhc3QgNSBhdHRlbXB0cyk6XG5cbiI7CisJCSRtZXNzYWdlIC49IHNwcmludGYoIiUteyRtZXRob2RsZW59cyB8ICIsIGkoJ0F1dGhlbnRpY2F0aW9uIE1ldGhvZCcpKTsKKwkJJG1lc3NhZ2UgLj0gc3ByaW50ZigiJS17JHRpbWVsZW59cyB8ICIsIGkoJ1RpbWVzdGFtcCcpKTsKKwkJJG1lc3NhZ2UgLj0gc3ByaW50ZigiJS17JHJlc3VsdGxlbn1zIHwgIiwgaSgnUmVzdWx0JykpOworCQkkbWVzc2FnZSAuPSBzcHJpbnRmKCIlLXskcmVtb3RlaXBsZW59cyB8ICIsIGkoJ1JlbW90ZSBJUCcpKTsKKwkJJG1lc3NhZ2UgLj0gc3ByaW50ZigiJS17JGV4dHJhbGVufXNcbiIsIGkoJ0V4dHJhIEluZm8nKSk7CisJCWZvcmVhY2goJGxvZ2lucyBhcyAkbG9naW4pIHsKKwkJCSRtZXNzYWdlIC49IHNwcmludGYoIiUteyRtZXRob2RsZW59cyB8ICIsICRsb2dpblsnYXV0aG1lY2gnXSk7CisJCQkkbWVzc2FnZSAuPSBzcHJpbnRmKCIlLXskdGltZWxlbn1zIHwgIiwgJGxvZ2luWyd0aW1lc3RhbXAnXSk7CisJCQkkbWVzc2FnZSAuPSBzcHJpbnRmKCIlLXskcmVzdWx0bGVufXMgfCAiLCAkbG9naW5bJ3Bhc3NmYWlsJ10pOworCQkJJG1lc3NhZ2UgLj0gc3ByaW50ZigiJS17JHJlbW90ZWlwbGVufXMgfCAiLCAkbG9naW5bJ3JlbW90ZUlQJ10pOworCQkJJG1lc3NhZ2UgLj0gc3ByaW50ZigiJS17JGV4dHJhbGVufXNcbiIsICRsb2dpblsnY29kZSddKTsKKwkJfQorCX0KKwlpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CisJCSRtZXNzYWdlIC49ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKwkJJG1lc3NhZ2UgLj0gIlVzZXIgYWdlbnQ6IHskX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ119XG4iOworCX0KKwogCSRpbmRydXBhbCA9IGdldENvbnRpbnVhdGlvblZhcignaW5kcnVwYWwnLCAwKTsKIAlpZighICRpbmRydXBhbCkKIAkJcHJpbnQgIjxIMj5WQ0wgSGVscDwvSDI+XG4iOwogCSRtYWlsUGFyYW1zID0gIi1mIiAuIEVOVkVMT1BFU0VOREVSOwogCWlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCiAJCSRzdW1tYXJ5ID0gc3RyaXBzbGFzaGVzKCRzdW1tYXJ5KTsKLQlpZighIG1haWwoSEVMUEVNQUlMLCAiJHN1bW1hcnkiLCAkbWVzc2FnZSwKKwkkaGVscGVtYWlsID0gZ2V0SGVscEVtYWlsKCR1c2VyWydhZmZpbGlhdGlvbmlkJ10pOworCWlmKCEgbWFpbCgkaGVscGVtYWlsLCAiJHN1bW1hcnkiLCAkbWVzc2FnZSwKIAkgICAiRnJvbTogJGZyb21cclxuUmVwbHktVG86ICRlbWFpbFxyXG4iLCAkbWFpbFBhcmFtcykpewogCQlwcmludCAiVGhlIFNlcnZlciB3YXMgdW5hYmxlIHRvIHNlbmQgbWFpbCBhdCB0aGlzIHRpbWUuIFBsZWFzZSBlLW1haWwgIjsKLQkJcHJpbnQgIjxhIGhyZWY9XCJtYWlsdG86IiAuIEhFTFBFTUFJTCAuICJcIj4iIC4gSEVMUEVNQUlMIC4gIjwvYT4gZm9yICI7CisJCXByaW50ICI8YSBocmVmPVwibWFpbHRvOiRoZWxwZW1haWxcIj4kaGVscGVtYWlsPC9hPiBmb3IgIjsKIAkJcHJpbnQgImhlbHAgd2l0aCB5b3VyIHByb2JsZW0uIjsKIAl9CiAJZWxzZSB7CkBAIC0yMjAsNCArMjgzLDI4IEBACiAJfQogfQogCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vCisvLy8gXGZuIGdldEhlbHBFbWFpbCgkYWZmaWwpCisvLy8KKy8vLyBccGFyYW0gJGFmZmlsIC0gaWQgb3IgbmFtZSBvZiBhbiBhZmZpbGlhdGlvbgorLy8vCisvLy8gXHJldHVybiBlbWFpbCBhZGRyZXNzIGZvciAkYWZmaWwgb3IgSEVMUEVNQUlMIGZyb20gY29uZi5waHAgaWYgJGFmZmlsIGRvZXMKKy8vLyBub3QgaGF2ZSBhIHNwZWNpZmljIGVtYWlsIGFkZHJlc3Mgc2V0CisvLy8KKy8vLyBcYnJpZWYgZ2V0cyB0aGUgZW1haWwgYWRkcmVzcyBmb3Igc3VwcG9ydCBmb3IgYSAkYWZmaWwKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdldEhlbHBFbWFpbCgkYWZmaWwpIHsKKwlpZihpc19udW1lcmljKCRhZmZpbCkpCisJCSRmaWVsZCA9ICdpZCc7CisJZWxzZQorCQkkZmllbGQgPSAnbmFtZSc7CisJJHF1ZXJ5ID0gIlNFTEVDVCBoZWxwYWRkcmVzcyBGUk9NIGFmZmlsaWF0aW9uIFdIRVJFICRmaWVsZCA9ICckYWZmaWwnIjsKKwkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CisJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCWlmKCRyb3dbJ2hlbHBhZGRyZXNzJ10gIT0gJycpCisJCQlyZXR1cm4gJHJvd1snaGVscGFkZHJlc3MnXTsKKwlyZXR1cm4gSEVMUEVNQUlMOworfQogPz4KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL2ltYWdlLnBocCBiL3dlYi8uaHQtaW5jL2ltYWdlLnBocAppbmRleCA5NDQ3YWVhLi4zMjljZWM4IDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9pbWFnZS5waHAKKysrIGIvd2ViLy5odC1pbmMvaW1hZ2UucGhwCkBAIC05Niw2ICs5Niw3IEBACiAJCQkJJHcgPSAxMjsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2FkYXV0aGVuYWJsZWQnOgorCQkJY2FzZSAnbWF4aW5pdGlhbHRpbWUnOgogCQkJCSR3ID0gOTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0xNDYsNyArMTQ3LDcgQEAKIAkJCWNhc2UgJ2ZvcmNoZWNrb3V0JzoKIAkJCQlyZXR1cm4gaSgiQXZhaWxhYmxlIGZvciBDaGVja291dCIpOwogCQkJY2FzZSAnbWF4aW5pdGlhbHRpbWUnOgotCQkJCXJldHVybiBpKCJNYXggSW5pdGlhbCBUaW1lIik7CisJCQkJcmV0dXJuIGkoIk1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiIpOwogCQkJY2FzZSAnY2hlY2t1c2VyJzoKIAkJCQlyZXR1cm4gaSgiQ2hlY2sgTG9nZ2VkIGluIFVzZXIiKTsKIAkJCWNhc2UgJ3Jvb3RhY2Nlc3MnOgpAQCAtMTg3LDcgKzE4OCw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBycS5lbmQgREVTQyAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG1zZ3NbXSA9IHNwcmludGYoaSgiVGhlcmUgaXMgYXQgbGVhc3Qgb25lIDxzdHJvbmc+cmVzZXJ2YXRpb248L3N0cm9uZz4gZm9yIHRoaXMgaW1hZ2UuIFRoZSBsYXRlc3QgZW5kIHRpbWUgaXMgJXMuIiksIHByZXR0eURhdGV0aW1lKCRyb3dbJ2VuZCddLCAxKSk7OwogCiAJCSMgY2hlY2sgYmxvY2tDb21wdXRlcnMKQEAgLTIwNSw3ICsyMDYsNyBAQAogCQkgICAgICAgLiAiT1JERVIgQlkgYnQuZW5kIERFU0MgIgogCQkgICAgICAgLiAiTElNSVQgMSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRtc2dzW10gPSBzcHJpbnRmKGkoIlRoZXJlIGlzIGF0IGxlYXN0IG9uZSA8c3Ryb25nPkJsb2NrIEFsbG9jYXRpb248L3N0cm9uZz4gd2l0aCBjb21wdXRlcnMgY3VycmVudGx5IGFsbG9jYXRlZCB3aXRoIHRoaXMgaW1hZ2UuIEJsb2NrIEFsbG9jYXRpb24gJXMgaGFzIHRoZSBsYXRlc3QgZW5kIHRpbWUgd2hpY2ggaXMgJXMuIiksICRyb3dbJ25hbWUnXSwgcHJldHR5RGF0ZXRpbWUoJHJvd1snZW5kJ10sIDEpKTsKIAogCQkjIGNoZWNrIGJsb2NrUmVxdWVzdApAQCAtMjIxLDcgKzIyMiw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBidC5lbmQgREVTQyAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG1zZ3NbXSA9IHNwcmludGYoaSgiVGhlcmUgaXMgYXQgbGVhc3Qgb25lIDxzdHJvbmc+QmxvY2sgQWxsb2NhdGlvbjwvc3Ryb25nPiBjb25maWd1cmVkIHRvIHVzZSB0aGlzIGltYWdlLiBCbG9jayBBbGxvY2F0aW9uICVzIGhhcyB0aGUgbGF0ZXN0IGVuZCB0aW1lIHdoaWNoIGlzICVzLiIpLCAkcm93WyduYW1lJ10sIHByZXR0eURhdGV0aW1lKCRyb3dbJ2VuZCddLCAxKSk7CiAKIAkJIyBjaGVjayBzZXJ2ZXJwcm9maWxlCkBAIC0yMzAsNyArMjMxLDcgQEAKIAkJICAgICAgIC4gIldIRVJFIGltYWdlaWQgPSAkcnNjaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRwcm9maWxlcyA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkcHJvZmlsZXNbXSA9ICRyb3dbJ25hbWUnXTsKIAkJaWYoY291bnQoJHByb2ZpbGVzKSkKIAkJCSRtc2dzW10gPSBpKCJUaGUgZm9sbG93aW5nIDxzdHJvbmc+U2VydmVyIFByb2ZpbGVzPC9zdHJvbmc+IGFyZSBjb25maWd1cmVkIHRvIHVzZSB0aGlzIGltYWdlOiIpIC4gIjxicj48YnI+XG4iIC4gaW1wbG9kZSgiPGJyPlxuIiwgJHByb2ZpbGVzKTsKQEAgLTI0NSw3ICsyNDYsNyBAQAogCQkgICAgICAgLiAgICAgICAicy5pbWFnZW1ldGFpZCA9IGltLmlkIEFORCAiCiAJCSAgICAgICAuICAgICAgICJzLmltYWdlaWQgPSAkcnNjaWQiOwogCQkkaW1hZ2VzID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRpbWFnZXNbXSA9ICRyb3dbJ3ByZXR0eW5hbWUnXTsKIAkJaWYoY291bnQoJGltYWdlcykpCiAJCQkkbXNnc1tdID0gaSgiVGhlIGZvbGxvd2luZyA8c3Ryb25nPmltYWdlczwvc3Ryb25nPiBoYXZlIHRoZSBzZWxlY3RlZCBpbWFnZSBhc3NpZ25lZCBhcyBhIDxzdHJvbmc+c3ViaW1hZ2U8L3N0cm9uZz46IikgLiAiPGJyPjxicj5cbiIgLiBpbXBsb2RlKCI8YnI+XG4iLCAkaW1hZ2VzKTsKQEAgLTI1NSw3ICsyNTYsNyBAQAogCQkgICAgICAgLiAiRlJPTSB2bXByb2ZpbGUgIgogCQkgICAgICAgLiAiV0hFUkUgaW1hZ2VpZCA9ICRyc2NpZCI7CiAJCSRwcm9maWxlcyA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkcHJvZmlsZXNbXSA9ICRyb3dbJ3Byb2ZpbGVuYW1lJ107CiAJCWlmKGNvdW50KCRwcm9maWxlcykpCiAJCQkkbXNnc1tdID0gaSgiVGhlIGZvbGxvd2luZyA8c3Ryb25nPlZNIEhvc3QgUHJvZmlsZXM8L3N0cm9uZz4gaGF2ZSB0aGUgdGhpcyBpbWFnZSBzZWxlY3RlZDoiKSAuICI8YnI+PGJyPlxuIiAuIGltcGxvZGUoIjxicj5cbiIsICRwcm9maWxlcyk7CkBAIC0zNjUsMzQgKzM2NiwzNCBAQAogCQkkaCAuPSAiPGxlZ2VuZD4iIC4gaSgiSW1hZ2UgRGVzY3JpcHRpb24iKSAuICI8L2xlZ2VuZD5cbiI7CiAJCSRoIC49IGkoIkRlc2NyaXB0aW9uIG9mIGltYWdlIChyZXF1aXJlZCAtIHVzZXJzIHdpbGwgc2VlIHRoaXMgb24gdGhlIDxzdHJvbmc+TmV3IFJlc2VydmF0aW9uczwvc3Ryb25nPiBwYWdlKToiKTsKIAkJJGggLj0gIjxicj5cbiI7Ci0JCSRoIC49ICI8dGV4dGFyZWEgZG9qb1R5cGU9XCJkaWppdC5mb3JtLlRleHRhcmVhXCIgaWQ9XCJkZXNjcmlwdGlvblwiICI7Ci0JCSRoIC49ICJzdHlsZT1cIndpZHRoOiA0MDBweDsgdGV4dC1hbGlnbjogbGVmdDtcIj48L3RleHRhcmVhPlxuIjsKKwkJJGggLj0gIjx0ZXh0YXJlYSBkb2pvVHlwZT1cImRpaml0LmZvcm0uVGV4dGFyZWFcIiBpZD1cImRlc2NyaXB0aW9uXCI+IjsKKwkJJGggLj0gIjwvdGV4dGFyZWE+XG4iOwogCQkkaCAuPSAiPC9maWVsZHNldD5cbiI7CiAJCSMgdXNhZ2Ugbm90ZXMKIAkJJGggLj0gIjxmaWVsZHNldD5cbiI7CiAJCSRoIC49ICI8bGVnZW5kPiIgLiBpKCJVc2FnZSBOb3RlcyIpIC4gIjwvbGVnZW5kPlxuIjsKIAkJJG1zZyA9IGkoIk9wdGlvbmFsIG5vdGVzIHRvIHRoZSB1c2VyIGV4cGxhaW5pbmcgaG93IHRvIHVzZSB0aGUgaW1hZ2UgKHVzZXJzIHdpbGwgc2VlIHRoaXMgb24gdGhlIDxzdHJvbmc+Q29ubmVjdCE8L3N0cm9uZz4gcGFnZSk6Iik7CiAJCSRoIC49IHByZWdfcmVwbGFjZSgiLyguezEsMTAwfShbIFxuXXwkKSkvIiwgJ1wxPGJyPicsICRtc2cpOwotCQkkaCAuPSAiPHRleHRhcmVhIGRvam9UeXBlPVwiZGlqaXQuZm9ybS5UZXh0YXJlYVwiIGlkPVwidXNhZ2VcIiAiOwotCQkkaCAuPSAic3R5bGU9XCJ3aWR0aDogNDAwcHg7IHRleHQtYWxpZ246IGxlZnQ7XCI+PC90ZXh0YXJlYT5cbiI7CisJCSRoIC49ICI8dGV4dGFyZWEgZG9qb1R5cGU9XCJkaWppdC5mb3JtLlRleHRhcmVhXCIgaWQ9XCJ1c2FnZVwiPiI7CisJCSRoIC49ICI8L3RleHRhcmVhPlxuIjsKIAkJJGggLj0gIjwvZmllbGRzZXQ+XG4iOwogCQlpZigkYWRkKSB7CiAJCQkkaCAuPSAiPGZpZWxkc2V0PlxuIjsKIAkJCSRoIC49ICI8bGVnZW5kPiIgLiBpKCJSZXZpc2lvbiBDb21tZW50cyIpIC4gIjwvbGVnZW5kPlxuIjsKIAkJCSRtc2cgPSBpKCJOb3RlcyBmb3IgeW91cnNlbGYgYW5kIG90aGVyIGFkbWlucyBhYm91dCBob3cgdGhlIGltYWdlIHdhcyBzZXR1cC9pbnN0YWxsZWQuIFRoZXNlIGFyZSBvcHRpb25hbCBhbmQgYXJlIG5vdCB2aXNpYmxlIHRvIGVuZCB1c2Vycy4iKTsKIAkJCSRoIC49IHByZWdfcmVwbGFjZSgiLyguezEsODB9KFsgXG5dfCQpKS8iLCAnXDE8YnI+JywgJG1zZyk7Ci0JCQkkaCAuPSAiPHRleHRhcmVhIGRvam9UeXBlPVwiZGlqaXQuZm9ybS5UZXh0YXJlYVwiIGlkPVwiaW1nY29tbWVudHNcIiAiOwotCQkJJGggLj0gInN0eWxlPVwid2lkdGg6IDQwMHB4OyB0ZXh0LWFsaWduOiBsZWZ0O1wiPjwvdGV4dGFyZWE+IjsKKwkJCSRoIC49ICI8dGV4dGFyZWEgZG9qb1R5cGU9XCJkaWppdC5mb3JtLlRleHRhcmVhXCIgaWQ9XCJpbWdjb21tZW50c1wiPiI7CisJCQkkaCAuPSAiPC90ZXh0YXJlYT4iOwogCQkJJGggLj0gIjwvZmllbGRzZXQ+XG4iOwogCQl9CiAJCSMgYWR2YW5jZWQgb3B0aW9ucwogCQkkaCAuPSAiPGRpdiBkb2pvVHlwZT1cImRpaml0LlRpdGxlUGFuZVwiIHRpdGxlPVwiIjsKIAkJJGggLj0gaSgiQWR2YW5jZWQgT3B0aW9ucyAtIGxlYXZlIGRlZmF1bHQgdmFsdWVzIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIChjbGljayB0byBleHBhbmQpIik7Ci0JCSRoIC49ICJcIiBvcGVuPVwiZmFsc2VcIiBzdHlsZT1cIndpZHRoOiA0NjBweFwiIGlkPVwiYWR2YW5jZWRvcHRpb25zXCIgIjsKKwkJJGggLj0gIlwiIG9wZW49XCJmYWxzZVwiIGlkPVwiYWR2YW5jZWRvcHRpb25zXCIgIjsKIAkJJGggLj0gIm9uU2hvdz1cImRlbGF5ZWRFZGl0UmVzaXplKCk7XCIgb25IaWRlPVwiZGVsYXllZEVkaXRSZXNpemUoKTtcIj5cbiI7CiAJCSMgUkFNCiAJCSRleHRyYSA9IGFycmF5KCdzbWFsbERlbHRhJyA9PiAyNTYsICdsYXJnZURlbHRhJyA9PiAxMDI0KTsKLQkJJGggLj0gbGFiZWxlZEZvcm1JdGVtKCdyYW0nLCBpKCdSZXF1aXJlZCBSQU0nKSwgJ3NwaW5uZXInLCAne21pbjo1MTIsIG1heDo4Mzg4NjA3fScsCisJCSRoIC49IGxhYmVsZWRGb3JtSXRlbSgncmFtJywgaSgnUmVxdWlyZWQgUkFNJykgLiAnIChNQiknLCAnc3Bpbm5lcicsICd7bWluOjUxMiwgbWF4OjgzODg2MDd9JywKIAkJICAgICAgICAgICAgICAgICAgICAgIDEsIDEwMjQsICcnLCAnJywgJGV4dHJhKTsKIAkJIyBjb3JlcwogCQkkZXh0cmEgPSBhcnJheSgnc21hbGxEZWx0YScgPT4gMSwgJ2xhcmdlRGVsdGEnID0+IDIpOwpAQCAtNDMxLDYgKzQzMiwxMCBAQAogCQkkaCAuPSAiPGRpdiBpZD1cInNldGhvc3RuYW1lZGl2XCI+XG4iOwogCQkkaCAuPSBsYWJlbGVkRm9ybUl0ZW0oJ3NldGhvc3RuYW1lJywgaSgnU2V0IENvbXB1dGVyIEhvc3RuYW1lJyksICdzZWxlY3QnLCAkeWVzbm8pOwogCQkkaCAuPSAiPC9kaXY+XG4iOworCQkjIE1heCByZXNlcnZhdGlvbiB0aW1lCisJCSR0bXAgPSBhcnJheSgnMCcgPT4gJ0RlZmF1bHQgZm9yIFVzZXInKTsKKwkJJGxlbmd0aHMgPSAkdG1wICsgZ2V0UmVzZXJ2YXRpb25MZW5ndGhzKDIwMTYwMCk7CisJCSRoIC49IGxhYmVsZWRGb3JtSXRlbSgnbWF4aW5pdGlhbHRpbWUnLCBpKCdNYXggUmVzZXJ2YXRpb24gRHVyYXRpb24nKSwgJ3NlbGVjdCcsICRsZW5ndGhzKTsKIAkJIyBzeXNwcmVwCiAJCWlmKCRhZGQpIHsKIAkJCSRoIC49ICI8ZGl2IGlkPVwic3lzcHJlcGRpdlwiPlxuIjsKQEAgLTc5OSwxNCArODA0LDE3IEBACiAJCSMgZm9yY2hlY2tvdXQKIAkJaWYoJGRhdGFbJ2NoZWNrb3V0J10gIT0gJG9sZGRhdGFbJ2ZvcmNoZWNrb3V0J10pCiAJCQkkdXBkYXRlc1tdID0gImZvcmNoZWNrb3V0ID0geyRkYXRhWydjaGVja291dCddfSI7CisJCSMgbWF4aW5pdGlhbHRpbWUKKwkJaWYoJGRhdGFbJ21heGluaXRpYWx0aW1lJ10gIT0gJG9sZGRhdGFbJ21heGluaXRpYWx0aW1lJ10pCisJCQkkdXBkYXRlc1tdID0gIm1heGluaXRpYWx0aW1lID0geyRkYXRhWydtYXhpbml0aWFsdGltZSddfSI7CiAJCSMgZGVzY3JpcHRpb24KIAkJaWYoJGRhdGFbJ2Rlc2MnXSAhPSAkb2xkZGF0YVsnZGVzY3JpcHRpb24nXSkgewotCQkJJGVzY2Rlc2MgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2Rlc2MnXSk7CisJCQkkZXNjZGVzYyA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydkZXNjJ10pOwogCQkJJHVwZGF0ZXNbXSA9ICJkZXNjcmlwdGlvbiA9ICckZXNjZGVzYyciOwogCQl9CiAJCSMgdXNhZ2UKIAkJaWYoJGRhdGFbJ3VzYWdlJ10gIT0gJG9sZGRhdGFbJ3VzYWdlJ10pIHsKLQkJCSRlc2N1c2FnZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsndXNhZ2UnXSk7CisJCQkkZXNjdXNhZ2UgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsndXNhZ2UnXSk7CiAJCQkkdXBkYXRlc1tdID0gImB1c2FnZWAgPSAnJGVzY3VzYWdlJyI7CiAJCX0KIApAQCAtODIxLDcgKzgyOSw3IEBACiAJCWlmKCRvbGRkYXRhWydvc3R5cGUnXSA9PSAnd2luZG93cycpIHsKIAkJCWlmKCRkYXRhWydhZGF1dGhlbmFibGVkJ10gIT0gJG9sZGRhdGFbJ2FkYXV0aGVuYWJsZWQnXSkgewogCQkJCWlmKCRkYXRhWydhZGF1dGhlbmFibGVkJ10pIHsKLQkJCQkJJGVzY19iYXNlb3UgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2Jhc2VvdSddKTsKKwkJCQkJJGVzY19iYXNlb3UgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnYmFzZW91J10pOwogCQkJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gaW1hZ2VhZGRvbWFpbiAiCiAJCQkJCSAgICAgICAuICAgICAgICAiKGltYWdlaWQsICIKIAkJCQkJICAgICAgIC4gICAgICAgICJhZGRvbWFpbmlkLCAiCkBAIC04NDEsNyArODQ5LDcgQEAKIAkJCWVsc2VpZigkZGF0YVsnYWRhdXRoZW5hYmxlZCddICYmCiAJCQkgICAgICAgKCRkYXRhWydhZGRvbWFpbmlkJ10gIT0gJG9sZGRhdGFbJ2FkZG9tYWluaWQnXSB8fAogCQkJICAgICAgICRkYXRhWydiYXNlb3UnXSAhPSAkb2xkZGF0YVsnYmFzZU9VJ10pKSB7Ci0JCQkJJGVzY19iYXNlb3UgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2Jhc2VvdSddKTsKKwkJCQkkZXNjX2Jhc2VvdSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydiYXNlb3UnXSk7CiAJCQkJJHF1ZXJ5ID0gIlVQREFURSBpbWFnZWFkZG9tYWluICIKIAkJCQkgICAgICAgLiAiU0VUIGFkZG9tYWluaWQgPSB7JGRhdGFbJ2FkZG9tYWluaWQnXX0sICIKIAkJCQkgICAgICAgLiAgICAgImJhc2VPVSA9ICckZXNjX2Jhc2VvdScgIgpAQCAtODY4LDcgKzg3Niw3IEBACiAJCQkJCSAuICAgICAgICAieyRkYXRhWydzZXRob3N0bmFtZSddfSkiOwogCQkJZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJCQkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgTEFTVF9JTlNFUlRfSUQoKSBGUk9NIGltYWdlbWV0YSIsIDEwMSk7Ci0JCQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKKwkJCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJCQlhYm9ydCgxMDEpOwogCQkJJGltYWdlbWV0YWlkID0gJHJvd1swXTsKIAkJCSRxdWVyeSA9ICJVUERBVEUgaW1hZ2UgIgpAQCAtOTc5LDcgKzk4Nyw3IEBACiAJCSAgICAgICAuICAgICAgICJycS5pZCA9IHJzLnJlcXVlc3RpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCi0JCSRhZ3JlZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyhnZXRDb250aW51YXRpb25WYXIoJ2FncmVlJykpOworCQkkYWdyZWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZyhnZXRDb250aW51YXRpb25WYXIoJ2FncmVlJykpOwogCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gY2xpY2tUaHJvdWdocyAiCiAJCSAgICAgICAuICAgICAgICAiKHVzZXJpZCwgIgogCQkgICAgICAgLiAgICAgICAgImltYWdlaWQsICIKQEAgLTEwOTUsMTAgKzExMDMsMTAgQEAKIAkJICAgICAgIC4gIk9SREVSIEJZIHJldmlzaW9uIERFU0MgIgogCQkgICAgICAgLiAiTElNSVQgMSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQkkbmV3cmV2aXNpb24gPSAkcm93WydyZXZpc2lvbiddICsgMTsKIAkJJG5ld25hbWUgPSBwcmVnX3JlcGxhY2UoIi97JHJvd1sncmV2aXNpb24nXX0kLyIsICRuZXdyZXZpc2lvbiwgJHJvd1snaW1hZ2VuYW1lJ10pOwotCQkkY29tbWVudHMgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGNvbW1lbnRzKTsKKwkJJGNvbW1lbnRzID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGNvbW1lbnRzKTsKIAkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGltYWdlcmV2aXNpb24gIgogCQkgICAgICAgLiAgICAgICAgIihpbWFnZWlkLCAiCiAJCSAgICAgICAuICAgICAgICAicmV2aXNpb24sICIKQEAgLTExNTUsNyArMTE2Myw3IEBACiAJCWlmKCRhdXRvY2FwdHVyZWQpCiAJCQlyZXR1cm4gMTsKIAkKLQkJJGFncmVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKGdldENvbnRpbnVhdGlvblZhcignYWdyZWUnKSk7CisJCSRhZ3JlZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKGdldENvbnRpbnVhdGlvblZhcignYWdyZWUnKSk7CiAJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBjbGlja1Rocm91Z2hzICIKIAkJICAgICAgIC4gICAgICAgICIodXNlcmlkLCAiCiAJCSAgICAgICAuICAgICAgICAiaW1hZ2VpZCwgIgpAQCAtMTE4OCw5ICsxMTk2LDkgQEAKIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCWZ1bmN0aW9uIGFkZFJlc291cmNlKCRkYXRhKSB7CiAJCWdsb2JhbCAkdXNlcjsKLQkJJGRhdGFbJ2Rlc2MnXSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZGVzYyddKTsKLQkJJGRhdGFbJ3VzYWdlJ10gPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3VzYWdlJ10pOwotCQkkZGF0YVsnY29tbWVudHMnXSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY29tbWVudHMnXSk7CisJCSRkYXRhWydkZXNjJ10gPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZGVzYyddKTsKKwkJJGRhdGFbJ3VzYWdlJ10gPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsndXNhZ2UnXSk7CisJCSRkYXRhWydjb21tZW50cyddID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2NvbW1lbnRzJ10pOwogCQogCQkjIGdldCBhcmNoaXRlY3R1cmUgb2YgYmFzZSBpbWFnZQogCQkkcXVlcnkgPSAiU0VMRUNUIGkuYXJjaGl0ZWN0dXJlICIKQEAgLTExOTksNyArMTIwNyw3IEBACiAJCSAgICAgICAuICJXSEVSRSBpci5pbWFnZWlkID0gaS5pZCBBTkQgIgogCQkgICAgICAgLiAgICAgICAiaXIuaWQgPSB7JGRhdGFbJ2Jhc2Vkb2ZmcmV2aXNpb25pZCddfSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJCSRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAkJJGFyY2ggPSAkcm93WydhcmNoaXRlY3R1cmUnXTsKIAkKIAkJJG93bmVyZGF0YSA9IGdldFVzZXJJbmZvKCRkYXRhWydvd25lciddLCAxKTsKQEAgLTEyNDQsNyArMTI1Miw3IEBACiAKIAkJIyBhZCBhdXRoZW50aWNhdGlvbgogCQlpZigkZGF0YVsnYWRhdXRoZW5hYmxlZCddKSB7Ci0JCQkkZXNjX2Jhc2VvdSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnYmFzZW91J10pOworCQkJJGVzY19iYXNlb3UgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnYmFzZW91J10pOwogCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGltYWdlYWRkb21haW4gIgogCQkJICAgICAgIC4gICAgICAgICIoaW1hZ2VpZCwgIgogCQkJICAgICAgIC4gICAgICAgICJhZGRvbWFpbmlkLCAiCkBAIC0xNTU0LDcgKzE1NjIsNyBAQAogCQkJCSAuICJGUk9NIHN1YmltYWdlcyAiCiAJCQkJIC4gIldIRVJFIGltYWdlbWV0YWlkID0gJGltYWdlbWV0YWlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCSRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKTsKKwkJJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKTsKIAkJaWYoJHJvd1swXSA9PSAwKSB7CiAJCQkkcmMgPSBjaGVja0NsZWFySW1hZ2VNZXRhKCRpbWFnZW1ldGFpZCwgJGltYWdlaWQsICdzdWJpbWFnZXMnKTsKIAkJCWlmKCRyYykKQEAgLTE1NzAsNyArMTU3OCw3IEBACiAJCQkkcXVlcnkgPSAiU0VMRUNUIGltYWdlaWQgRlJPTSBzdWJpbWFnZXMgV0hFUkUgaW1hZ2VtZXRhaWQgPSAkaW1hZ2VtZXRhaWQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJCQkkc3ViaW1hZ2VzID0gYXJyYXkoKTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJCSRzdWJpbWFnZXNbXSA9ICRyb3dbJ2ltYWdlaWQnXTsKIAkJfQogCQpAQCAtMTYwNCw2ICsxNjEyLDcgQEAKIAkvLy8gXGIgY2hlY2t1c2VyIC0gcmVzZXJ2YXRpb25zIHNob3VsZCBiZSBjaGVja2VkIGZvciBhIGxvZ2dlZCBpbiB1c2VyXG4KIAkvLy8gXGIgcm9vdGFjY2Vzc1xuCiAJLy8vIFxiIHN5c3ByZXAgLSB1c2Ugc3lzcHJlcCB3aGVuIGNhcHR1cmluZyByZXZpc2lvbnMgb2YgdGhpcyBpbWFnZVxuCisJLy8vIFxiIG1heGluaXRpYWx0aW1lIC0gbWF4IHRpbWUgaW4gbWludXRlcyByZXNlcnZhdGlvbiBjYW4gYmUgdXNlZFxuCiAJLy8vIFxiIGNvbm5lY3RtZXRob2RpZHMgLSBpZHMgb2YgYXNzaWduZWQgY29ubmVjdCBtZXRob2RzXG4KIAkvLy8gXGIgcmVxdWVzdGlkIC0gcmVxdWVzdGlkIGFzc29jaWF0ZWQgd2l0aCBpbWFnZSBjYXB0dXJlXG4KIAkvLy8gXGIgaW1hZ2VpZCAtIGlkIG9mIGJhc2UgaW1hZ2VcbgpAQCAtMTYzNSw2ICsxNjQ0LDcgQEAKIAkJJHJldHVyblsiY2hlY2t1c2VyIl0gPSBwcm9jZXNzSW5wdXRWYXIoImNoZWNrdXNlciIsIEFSR19OVU1FUklDKTsKIAkJJHJldHVyblsicm9vdGFjY2VzcyJdID0gcHJvY2Vzc0lucHV0VmFyKCJyb290YWNjZXNzIiwgQVJHX05VTUVSSUMpOwogCQkkcmV0dXJuWyJzZXRob3N0bmFtZSJdID0gcHJvY2Vzc0lucHV0VmFyKCJzZXRob3N0bmFtZSIsIEFSR19OVU1FUklDKTsKKwkJJHJldHVyblsibWF4aW5pdGlhbHRpbWUiXSA9IHByb2Nlc3NJbnB1dFZhcigibWF4aW5pdGlhbHRpbWUiLCBBUkdfTlVNRVJJQywgMCk7CiAJCSRyZXR1cm5bInN5c3ByZXAiXSA9IHByb2Nlc3NJbnB1dFZhcigic3lzcHJlcCIsIEFSR19OVU1FUklDKTsgIyBvbmx5IGluIGFkZAogCQkkcmV0dXJuWyJjb25uZWN0bWV0aG9kaWRzIl0gPSBwcm9jZXNzSW5wdXRWYXIoImNvbm5lY3RtZXRob2RpZHMiLCBBUkdfU1RSSU5HKTsgIyBvbmx5IGluIGFkZAogCQkkcmV0dXJuWyJhZGF1dGhlbmFibGVkIl0gPSBwcm9jZXNzSW5wdXRWYXIoImFkYXV0aGVuYWJsZWQiLCBBUkdfTlVNRVJJQyk7CkBAIC0xNzQxLDYgKzE3NTEsMTAgQEAKIAkJCSRyZXR1cm5bJ2Vycm9yJ10gPSAxOwogCQkJJGVycm9ybXNnW10gPSBpKCJTZXQgQ29tcHV0ZXIgSG9zdG5hbWUgbXVzdCBiZSBZZXMgb3IgTm8iKTsKIAkJfQorCQlpZigkcmV0dXJuWydtYXhpbml0aWFsdGltZSddIDwgMCB8fCAkcmV0dXJuWydtYXhpbml0aWFsdGltZSddID4gMjAxNjAwKSB7CisJCQkkcmV0dXJuWydlcnJvciddID0gMTsKKwkJCSRlcnJvcm1zZ1tdID0gaSgiSW52YWxpZCBNYXggUmVzZXJ2YXRpb24gRHVyYXRpb24gc2VsZWN0ZWQiKTsKKwkJfQogCQlpZigkcmV0dXJuWydtb2RlJ10gPT0gJ2FkZCcgJiYgJHJldHVyblsnc3lzcHJlcCddICE9IDAgJiYKIAkJICAgJHJldHVyblsnc3lzcHJlcCddICE9IDEpIHsKIAkJCSRyZXR1cm5bJ2Vycm9yJ10gPSAxOwpAQCAtMTc1Myw3ICsxNzY3LDcgQEAKIAkJCSRleHRyYWFkZG9tYWluaWQgPSBnZXRDb250aW51YXRpb25WYXIoJ2V4dHJhYWRkb21haW5pZCcsIDApOwogCQkJJGV4dHJhYWRkb21haW5vdSA9IGdldENvbnRpbnVhdGlvblZhcignZXh0cmFhZGRvbWFpbm91JywgJycpOwogCQkJaWYoISBhcnJheV9rZXlfZXhpc3RzKCRyZXR1cm5bJ2FkZG9tYWluaWQnXSwgJHZhbHMpICYmCi0JCQkgICAkcmV0dXJuWydhZGRvbWFpbmlkJ10gIT0gJGV4dHJhYWRkb21haW5pZCkgeworCQkJICAgJHJldHVyblsnYWRkb21haW5pZCddICE9PSAkZXh0cmFhZGRvbWFpbmlkKSB7CiAJCQkJJHJldHVyblsnZXJyb3InXSA9IDE7CiAJCQkJJGVycm9ybXNnW10gPSBpKCJJbnZhbGlkIEFEIERvbWFpbiBzdWJtaXR0ZWQiKTsKIAkJCX0KQEAgLTE4MjcsNyArMTg0MSw3IEBACiAJCWlmKCEgZW1wdHkoJGlkKSkKIAkJCSRxdWVyeSAuPSAiIEFORCBpZCAhPSAkaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTg1Nyw3ICsxODcxLDcgQEAKIAkJICAgICAgICAuICJXSEVSRSBuYW1lID0gJyRub2RlbmFtZScgQU5EICIKIAkJICAgICAgICAuICAgICAgICJwYXJlbnQgPSAzIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRxdWVyeTIgPSAiSU5TRVJUIElOVE8gcHJpdm5vZGUgIgogCQkJICAgICAgICAuICAgICAgICAiKHBhcmVudCwgIgogCQkJICAgICAgICAuICAgICAgICAibmFtZSkgIgpAQCAtMTg2Niw3ICsxODgwLDcgQEAKIAkJCSAgICAgICAgLiAgICAgICAgIickbm9kZW5hbWUnKSI7CiAJCQlkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpOworCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQl9CiAJCSRwYXJlbnQgPSAkcm93WydpZCddOwogCQkkcXVlcnkgPSAiU0VMRUNUIGlkICIKQEAgLTE4NzQsNyArMTg4OCw3IEBACiAJCSAgICAgICAgLiAiV0hFUkUgbmFtZSA9ICd7JG93bmVyZGF0YVsnbG9naW4nXX0tJG93bmVyaWQnIEFORCAiCiAJCSAgICAgICAgLiAgICAgICAicGFyZW50ID0gJHBhcmVudCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG5ld25vZGUgPSAkcm93WydpZCddOwogCQllbHNlIHsKIAkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBwcml2bm9kZSAiCkBAIC0xODgyLDcgKzE4OTYsNyBAQAogCQkJICAgICAgIC4gIlZBTFVFUyAoJHBhcmVudCwgJ3skb3duZXJkYXRhWydsb2dpbiddfS0kb3duZXJpZCcpIjsKIAkJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCQkJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSBwcml2bm9kZSIsIDEwMSk7Ci0JCQkkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCk7CisJCQkkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpOwogCQkJJG5ld25vZGUgPSAkcm93WzBdOwogCQl9CiAJCkBAIC0xODk1LDcgKzE5MDksNyBAQAogCQkgICAgICAgIC4gIkZST00gdXNlcmdyb3VwICIKIAkJICAgICAgICAuICJXSEVSRSBuYW1lID0gJ21hbmFnZU5ld0ltYWdlcyciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJCSRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAkJJG93bmVyZ3JvdXBpZCA9ICRyb3dbJ2lkJ107CiAJCWlmKCR2aXJ0dWFsKQogCQkJJHByZWZpeCA9ICduZXd2bWltYWdlcyc7CkBAIC0xOTA3LDcgKzE5MjEsNyBAQAogCQkgICAgICAgLiAgICAgICAib3duZXJ1c2VyZ3JvdXBpZCA9ICRvd25lcmdyb3VwaWQgQU5EICIKIAkJICAgICAgIC4gICAgICAgInJlc291cmNldHlwZWlkID0gMTMiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRyZXNvdXJjZWdyb3VwaWQgPSAkcm93WydpZCddOwogCQllbHNlIHsKIAkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyByZXNvdXJjZWdyb3VwICIKQEAgLTE5MTksNyArMTkzMyw3IEBACiAJCQkgICAgICAgLiAgICAgICAgICIxMykiOwogCQkJZG9RdWVyeSgkcXVlcnksIDMwNSk7CiAJCQkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgTEFTVF9JTlNFUlRfSUQoKSBGUk9NIHJlc291cmNlZ3JvdXAiLCAxMDEpOwotCQkJJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpOworCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKTsKIAkJCSRyZXNvdXJjZWdyb3VwaWQgPSAkcm93WzBdOwogCQogCQkJLy8gbWFwIGdyb3VwIHRvIG5ld2ltYWdlcy9uZXd2bWltYWdlcyBjb21wIGdyb3VwCkBAIC0xOTMyLDcgKzE5NDYsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIG5hbWUgPSAnJHJncm91cG5hbWUnIEFORCAiCiAJCQkgICAgICAgLiAgICAgICAicmVzb3VyY2V0eXBlaWQgPSAxMiI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpOworCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQkJJGNvbXBSZXNHcnBpZCA9ICRyb3dbJ2lkJ107CiAJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gcmVzb3VyY2VtYXAgIgogCQkJICAgICAgIC4gICAgICAgICIocmVzb3VyY2Vncm91cGlkMSwgIgpAQCAtMTk4MCw3ICsxOTk0LDcgQEAKIAkJICAgICAgIC4gIldIRVJFIHJlc291cmNldHlwZWlkID0gMTMgQU5EICIKIAkJICAgICAgIC4gICAgICAgInN1YmlkID0gJGltYWdlaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkKKwkJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkKIAkJCXJldHVybjsKIAkJJHJlc2lkID0gJHJvd1snaWQnXTsKIAkJJG9sZHVzZXJkYXRhID0gZ2V0VXNlckluZm8oJG9sZG93bmVyaWQsIDEsIDEpOwpAQCAtMTk5NCw3ICsyMDA4LDcgQEAKIAkJICAgICAgIC4gICAgICAgInJnbS5yZXNvdXJjZWdyb3VwaWQgPSByZy5pZCBBTkQgIgogCQkgICAgICAgLiAgICAgICAicmcubmFtZSBJTiAoJG9sZGdyb3VwcykiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkKKwkJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkKIAkJCXJldHVybjsKIAkJJG9sZGdyb3VwID0gJHJvd1snbmFtZSddOwogCQkkb2xkZ3JvdXBpZCA9ICRyb3dbJ2lkJ107CkBAIC0yMTA4LDcgKzIxMjIsNyBAQAogCQkJICAgICAgIC4gICAgICAgIihjbS5PU3R5cGVpZCA9IG90LmlkIE9SICIKIAkJCSAgICAgICAuICAgICAgICAiY20uT1NpZCA9IG8uaWQpIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYoISAobXlzcWxfbnVtX3Jvd3MoJHFoKSkpIHsKKwkJCWlmKCEgKG15c3FsaV9udW1fcm93cygkcWgpKSkgewogCQkJCSMgbm90IGVuYWJsZWQsIGFkZCBlbnRyeSBmb3IgbWV0aG9kIGFuZCBpbWFnZSByZXZpc2lvbgogCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBjb25uZWN0bWV0aG9kbWFwICIKIAkJCQkgICAgICAgLiAgICAgICAgIihjb25uZWN0bWV0aG9kaWQsICIKQEAgLTIxNTcsNyArMjE3MSw3IEBACiAJCSRtZXRob2RzID0gZ2V0Q29udGludWF0aW9uVmFyKCdtZXRob2RzJyk7CiAJCSRyZXZpZHMgPSBnZXRDb250aW51YXRpb25WYXIoJ3JldmlkcycpOwogCQkkY3VybWV0aG9kcyA9IGdldEltYWdlQ29ubmVjdE1ldGhvZHMoJGltYWdlaWQpOwotCQkkcmVtaWRsaXN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKHByb2Nlc3NJbnB1dFZhcignaWRzJywgQVJHX1NUUklORykpOworCQkkcmVtaWRsaXN0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcocHJvY2Vzc0lucHV0VmFyKCdpZHMnLCBBUkdfU1RSSU5HKSk7CiAJCSRyZW1pZHMgPSBleHBsb2RlKCcsJywgJHJlbWlkbGlzdCk7CiAJCSRyZXZpZCA9IHByb2Nlc3NJbnB1dFZhcigncmV2aWQnLCBBUkdfTlVNRVJJQyk7CiAJCSRuZXdpbWFnZSA9IGdldENvbnRpbnVhdGlvblZhcignbmV3aW1hZ2UnKTsKQEAgLTIxOTksNyArMjIxMyw3IEBACiAJCQkJICAgICAgIC4gICAgICAgIihjbS5PU3R5cGVpZCA9IG90LmlkIE9SICIKIAkJCQkgICAgICAgLiAgICAgICAgImNtLk9TaWQgPSBvLmlkKSI7CiAJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwkJCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJCQkJIyBpZiBzbywgYWRkIGRpc2FibGVkIGVudHJ5IGZvciBpbWFnZSByZXZpc2lvbiBhbmQgbWV0aG9kCiAJCQkJCSRpbnN2YWxzW10gPSAiKCRpZCwgJHJldmlkLCAxKSI7CiAJCQl9CkBAIC0yMjQ2LDcgKzIyNjAsNyBAQAogCQkkY29tbWVudHMgPSBodG1sc3BlY2lhbGNoYXJzKCRjb21tZW50cyk7CiAJCWlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCiAJCQkkY29tbWVudHMgPSBzdHJpcHNsYXNoZXMoJGNvbW1lbnRzKTsKLQkJJGNvbW1lbnRzID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb21tZW50cyk7CisJCSRjb21tZW50cyA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRjb21tZW50cyk7CiAJCSRxdWVyeSA9ICJVUERBVEUgaW1hZ2VyZXZpc2lvbiAiCiAJCSAgICAgICAuICJTRVQgY29tbWVudHMgPSAnJGNvbW1lbnRzJyAiCiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICRyZXZpc2lvbmlkIjsKQEAgLTIzMDYsOSArMjMyMCw5IEBACiAJCSAgICAgICAuICAgICAgICJycy5pbWFnZXJldmlzaW9uaWQgSU4gKCRjaGVja2VkaWRzKSBBTkQgIgogCQkgICAgICAgLiAgICAgICAicnEuc3RhdGVpZCBOT1QgSU4gKDEsIDUsIDExLCAxMikiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCSRpbnVzZWlkcyA9IGFycmF5KCk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkkaW51c2VpZHNbXSA9ICRyb3dbJ3JldmlzaW9uJ107CiAJCQkkaW51c2VpZHMgPSBpbXBsb2RlKCcsJywgJGludXNlaWRzKTsKIAkJCSRyYyA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9tYW5hZ2VtZW50bm9kZS5waHAgYi93ZWIvLmh0LWluYy9tYW5hZ2VtZW50bm9kZS5waHAKaW5kZXggMmI1YjA4ZS4uZGQ0OWUyYyAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvbWFuYWdlbWVudG5vZGUucGhwCisrKyBiL3dlYi8uaHQtaW5jL21hbmFnZW1lbnRub2RlLnBocApAQCAtMjAzLDcgKzIwMyw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBycS5lbmQgREVTQyAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG1zZ3NbXSA9ICJUaGVyZSBpcyBhdCBsZWFzdCBvbmUgPHN0cm9uZz5yZXNlcnZhdGlvbjwvc3Ryb25nPiBiZWluZyBwcm9jZXNzZWQgYnkgdGhpcyBtYW5hZ2VtZW50IG5vZGUuIFRoZSBsYXRlc3QgZW5kIHRpbWUgaXMgIiAuIHByZXR0eURhdGV0aW1lKCRyb3dbJ2VuZCddLCAxKSAuICcuJzsKIAogCQkjIGNoZWNrIGJsb2NrUmVxdWVzdApAQCAtMjE5LDcgKzIxOSw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBidC5lbmQgREVTQyAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG1zZ3NbXSA9ICJUaGVyZSBpcyBhdCBsZWFzdCBvbmUgPHN0cm9uZz5CbG9jayBBbGxvY2F0aW9uPC9zdHJvbmc+IGJlaW5nIGhhbmRsZWQgYnkgdGhpcyBtYW5hZ2VtZW50IG5vZGUuIEJsb2NrIEFsbG9jYXRpb24gXCJ7JHJvd1snbmFtZSddfVwiIGhhcyB0aGUgbGF0ZXN0IGVuZCB0aW1lIHdoaWNoIGlzICIgLiBwcmV0dHlEYXRldGltZSgkcm93WydlbmQnXSwgMSkgLiAnLic7CiAKIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAJZnVuY3Rpb24gdG9nZ2xlRGVsZXRlUmVzb3VyY2UoJHJzY2lkKSB7CiAJCSRxdWVyeSA9ICJTRUxFQ1Qgc3RhdGVpZCBGUk9NIG1hbmFnZW1lbnRub2RlIFdIRVJFIGlkID0gJHJzY2lkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCWlmKCRyb3dbJ3N0YXRlaWQnXSA9PSAxKQogCQkJCSRxdWVyeSA9ICJVUERBVEUgbWFuYWdlbWVudG5vZGUgU0VUIHN0YXRlaWQgPSAxMCBXSEVSRSBpZCA9ICRyc2NpZCI7CiAJCQllbHNlCkBAIC01MTQsOCArNTE0LDggQEAKIAkJCX0KIAkJfQogCQllbHNlIHsKLQkJCSRlc2MgPSBhcnJheSgnc3lzYWRtaW5lbWFpbCcgPT4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydzeXNhZG1pbmVtYWlsJ10pLAotCQkJICAgICAgICAgICAgICdzaGFyZWRtYWlsYm94JyA9PiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3NoYXJlZG1haWxib3gnXSkpOworCQkJJGVzYyA9IGFycmF5KCdzeXNhZG1pbmVtYWlsJyA9PiB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnc3lzYWRtaW5lbWFpbCddKSwKKwkJCSAgICAgICAgICAgICAnc2hhcmVkbWFpbGJveCcgPT4gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3NoYXJlZG1haWxib3gnXSkpOwogCiAJCQkkb2xkZGF0YSA9IGdldENvbnRpbnVhdGlvblZhcignb2xkZGF0YScpOwogCQkJJHVwZGF0ZXMgPSBhcnJheSgpOwpAQCAtOTkyLDcgKzk5Miw3IEBACiAJCQkJICAgICAgIC4gICAgICAgInJxLmxhc3RzdGF0ZWlkIE5PVCBJTiAoMSw1LDExLDEyKSBBTkQgIgogCQkJCSAgICAgICAuICAgICAgICJycS51c2VyaWQgIT0gJHZjbHJlbG9hZGlkIjsKIAkJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQkJCWlmKG15c3FsaV9udW1fcm93cygkcWgpKSB7CiAJCQkJCSRyZXR1cm5bJ2Vycm9yJ10gPSAxOwogCQkJCQkkZXJyb3Jtc2dbXSA9ICJUaGlzIG1hbmFnZW1lbnQgbm9kZSBpcyB0aGUgTkFUIGhvc3QgZm9yIGNvbXB1dGVycyB0aGF0IGhhdmUgYWN0aXZlIHJlc2VydmF0aW9ucy4gTkFUIGhvc3Q8YnI+c2V0dGluZ3MgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgcHJvdmlkaW5nIE5BVCBmb3IgYWN0aXZlIHJlc2VydmF0aW9ucy4iOwogCQkJCX0KQEAgLTEwMjAsOCArMTAyMCw4IEBACiAJZnVuY3Rpb24gYWRkUmVzb3VyY2UoJGRhdGEpIHsKIAkJZ2xvYmFsICR1c2VyOwogCQkkb3duZXJpZCA9IGdldFVzZXJsaXN0SUQoJGRhdGFbJ293bmVyJ10pOwotCQkkZXNjID0gYXJyYXkoJ3N5c2FkbWluZW1haWwnID0+IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnc3lzYWRtaW5lbWFpbCddKSwKLQkJICAgICAgICAgICAgICdzaGFyZWRtYWlsYm94JyA9PiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3NoYXJlZG1haWxib3gnXSkpOworCQkkZXNjID0gYXJyYXkoJ3N5c2FkbWluZW1haWwnID0+IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydzeXNhZG1pbmVtYWlsJ10pLAorCQkgICAgICAgICAgICAgJ3NoYXJlZG1haWxib3gnID0+IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydzaGFyZWRtYWlsYm94J10pKTsKIAkJJGtleXMgPSBhcnJheSgnSVBhZGRyZXNzJywgICAgICAgICAgICAnaG9zdG5hbWUnLAogCQkgICAgICAgICAgICAgICdvd25lcmlkJywgICAgICAgICAgICAgICdzdGF0ZWlkJywKIAkJICAgICAgICAgICAgICAnY2hlY2tpbmludGVydmFsJywgICAgICAnaW5zdGFsbHBhdGgnLApAQCAtMTExNiw3ICsxMTE2LDcgQEAKIAkJaWYoJGlkICE9IDApCiAJCQkkcXVlcnkgLj0gIiBBTkQgaWQgIT0gJGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlyZXR1cm4gbXlzcWxfbnVtX3Jvd3MoJHFoKTsKKwkJcmV0dXJuIG15c3FsaV9udW1fcm93cygkcWgpOwogCX0KIH0KID8+CmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9vbmVjbGljay5waHAgYi93ZWIvLmh0LWluYy9vbmVjbGljay5waHAKaW5kZXggZTQ3OGZjZC4uZDhiNjJjOSAxMDA3NTUKLS0tIGEvd2ViLy5odC1pbmMvb25lY2xpY2sucGhwCisrKyBiL3dlYi8uaHQtaW5jL29uZWNsaWNrLnBocApAQCAtNTcsNyArNTcsNyBAQAogCSAgICAgICAuICAgICAgICJvLnVzZXJpZCA9IHskdXNlclsnaWQnXX0iOwogCSRvbmVjbGlja3MgPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJG9uZWNsaWNrc1skcm93WydpZCddXSA9ICRyb3c7CiAKIAlwcmludCAiPEgyPiIgLiBpKCJWQ0wgZ28gQ29uZmlndXJhdG9yIikgLiAiPC9IMj5cbiI7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAlwcmludCAiPGZvcm0gYWN0aW9uPVwiIiAuIEJBU0VVUkwgLiBTQ1JJUFQgLiAiXCIgbWV0aG9kPVwicG9zdFwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiIG9uc3VibWl0PVwicmV0dXJuIHZhbGlkYXRlRm9ybSh0aGlzKTtcIj5cbiI7CiAKLQlpZighICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKKwlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKSB7CiAJCXByaW50IGkoIlZDTCBnbyBub3QgZm91bmQiKSAuICJcbiI7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL3ByaXZpbGVnZXMucGhwIGIvd2ViLy5odC1pbmMvcHJpdmlsZWdlcy5waHAKaW5kZXggOTJmNmVlMy4uNzE0YjkxMCAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvcHJpdmlsZWdlcy5waHAKKysrIGIvd2ViLy5odC1pbmMvcHJpdmlsZWdlcy5waHAKQEAgLTM2LDggKzM2LDExIEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gdmlld05vZGVzKCkgewogCWdsb2JhbCAkdXNlcjsKLQlpZighIGVtcHR5KCRfQ09PS0lFWyJWQ0xBQ1RJVkVOT0RFIl0pICYmCi0JCW5vZGVFeGlzdHMoJF9DT09LSUVbJ1ZDTEFDVElWRU5PREUnXSkpCisJaWYoaXNzZXQoJF9DT09LSUVbIlZDTEFDVElWRU5PREUiXSkgJiYKKwkgICBpc19udW1lcmljKCRfQ09PS0lFWydWQ0xBQ1RJVkVOT0RFJ10pICYmCisJICAgJF9DT09LSUVbJ1ZDTEFDVElWRU5PREUnXSA+IDAgJiYKKwkgICAkX0NPT0tJRVsnVkNMQUNUSVZFTk9ERSddIDwgMTY3NzcyMTYgJiYKKwkgICBub2RlRXhpc3RzKCRfQ09PS0lFWydWQ0xBQ1RJVkVOT0RFJ10pKQogCQkkYWN0aXZlTm9kZSA9ICRfQ09PS0lFWyJWQ0xBQ1RJVkVOT0RFIl07CiAJZWxzZSB7CiAJCSR0b3BOb2RlcyA9IGdldENoaWxkTm9kZXMoKTsKQEAgLTI1Niw3ICsyNTksNyBAQAogCQkgICAgICAgLiAiT1JERVIgQlkgbmFtZSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJG9yZGVyZWRncm91cHMgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJG9yZGVyZWRncm91cHNbXSA9ICRyb3dbJ2lkJ107CiAJCWZvcmVhY2goJG9yZGVyZWRncm91cHMgYXMgJGlkKSB7CiAJCQlwcmludFVzZXJQcml2Um93KCRpZCwgJGksICRwcml2c1sidXNlcmdyb3VwcyJdLCAkdXNlcnR5cGVzWyJ1c2VycyJdLApAQCAtOTY1LDcgKzk2OCw3IEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBuYW1lIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCQkkb3JkZXJlZGdyb3VwcyA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkb3JkZXJlZGdyb3Vwc1tdID0gJHJvd1snaWQnXTsKIAkJZm9yZWFjaCgkb3JkZXJlZGdyb3VwcyBhcyAkaWQpIHsKIAkJCSR0bXBBcnIgPSBnZXRVc2VyUHJpdlJvd0hUTUwoJGlkLCAkaSwgJHByaXZzWyJ1c2VyZ3JvdXBzIl0sCkBAIC0xMTI1LDcgKzExMjgsNyBAQAogCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIHBhcmVudCBGUk9NIHByaXZub2RlIFdIRVJFIGlkID4gIiAuIERFRkFVTFRfUFJJVk5PREU7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSRkYXRhID0gJ25vZGVkcm9wZGF0YSA9IHsnOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJaWYoY2hlY2tVc2VySGFzUHJpdignbm9kZUFkbWluJywgJHVzZXJbJ2lkJ10sICRyb3dbJ2lkJ10pICYmCiAJCSAgICgkcm93WydwYXJlbnQnXSA9PSBERUZBVUxUX1BSSVZOT0RFIHx8IGNoZWNrVXNlckhhc1ByaXYoJ25vZGVBZG1pbicsICR1c2VyWydpZCddLCAkcm93WydwYXJlbnQnXSkpKQogCQkJJGRhdGEgLj0gInskcm93WydpZCddfTogJzEnLCI7CkBAIC0xMTgzLDcgKzExODYsNyBAQAogCSAgICAgICAuICJXSEVSRSBuYW1lID0gJyRuZXdub2RlJyBBTkQgIgogCSAgICAgICAuICAgICAgICJwYXJlbnQgPSAkcGFyZW50IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzM1KTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpKSB7CisJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJJHRleHQgPSAiQSBub2RlIG9mIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyAiCiAJCSAgICAgIC4gInVuZGVyICIgLiAkbm9kZUluZm9bIm5hbWUiXTsKIAkJcHJpbnQgImRvam8uYnlJZCgnYWRkQ2hpbGROb2RlU3RhdHVzJykuaW5uZXJIVE1MID0gJyR0ZXh0JzsiOwpAQCAtMTE5OCw3ICsxMjAxLDcgQEAKIAlkb1F1ZXJ5KCRxdWVyeSwgMzM2KTsKIAogCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBMQVNUX0lOU0VSVF9JRCgpIEZST00gcHJpdm5vZGUiLCAxMDEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJYWJvcnQoMTAxKTsKIAkkbm9kZWlkID0gJHJvd1swXTsKIApAQCAtMTIyOCw3ICsxMjMxLDcgQEAKIGZ1bmN0aW9uIG5vZGVFeGlzdHMoJG5vZGUpIHsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gcHJpdm5vZGUgV0hFUkUgaWQgPSAkbm9kZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTEzMTMsMTMgKzEzMTYsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAkjIGNoZWNrIGlmIG5vZGUgbWF0Y2hpbmcgbmV3IG5hbWUgYWxyZWFkeSBleGlzdHMgYXQgcGFyZW50Ci0JJF9uZXduYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuZXduYW1lKTsKKwkkX25ld25hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3bmFtZSk7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCiAJICAgICAgIC4gIkZST00gcHJpdm5vZGUgIgogCSAgICAgICAuICJXSEVSRSBwYXJlbnQgPSAoU0VMRUNUIHBhcmVudCBGUk9NIHByaXZub2RlIFdIRVJFIGlkID0gJGFjdGl2ZU5vZGUpIEFORCAiCiAJICAgICAgIC4gICAgICAgIm5hbWUgPSAnJF9uZXduYW1lJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCWlmKG15c3FsaV9udW1fcm93cygkcWgpKSB7CiAJCSRtc2cgPSBpKCJBIHNpYmxpbmcgbm9kZSBvZiB0aGF0IG5hbWUgY3VycmVudGx5IGV4aXN0cyIpOwogCQkkYXJyID0gYXJyYXkoJ2Vycm9yJyA9PiAyLCAnbWVzc2FnZScgPT4gJG1zZyk7CiAJCXNlbmRKU09OKCRhcnIpOwpAQCAtMTM3Miw3ICsxMzc1LDcgQEAKIAkgICAgICAgLiAgICAgICAicDIucGFyZW50ID0gJG5ld3BhcmVudGlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInAyLm5hbWUgPSBwMS5uYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYoJHJvdyA9IG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJJGFyciA9IGFycmF5KCdzdGF0dXMnID0+ICdjb2xsaXNpb24nLAogCQkgICAgICAgICAgICAgJ21vdmVpZCcgPT4gJG1vdmVpZCwKIAkJICAgICAgICAgICAgICdvbGRwYXJlbnRpZCcgPT4gJG9sZHBhcmVudGlkLApAQCAtMTQ5NCw3ICsxNDk3LDcgQEAKIAlwcmludCAiPElOUFVUIHR5cGU9aGlkZGVuIG5hbWU9Y29udGludWF0aW9uIHZhbHVlPVwiJGNvbnRcIj5cbiI7CiAJcHJpbnQgIjwvRk9STT48YnI+XG4iOwogCWlmKCEgZW1wdHkoJHVzZXJpZCkpIHsKLQkJJGVzY191c2VyaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHVzZXJpZCk7CisJCSRlc2NfdXNlcmlkID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHVzZXJpZCk7CiAJCWlmKHByZWdfbWF0Y2goJy8sLycsICR1c2VyaWQpKSB7CiAJCQkkbW9kZSA9ICduYW1lJzsKIAkJCSRmb3JjZSA9IDA7CkBAIC0xNTE3LDggKzE1MjAsOCBAQAogCQl9CiAJCWVsc2UgewogCQkJJHRtcCA9IGV4cGxvZGUoJywnLCAkdXNlcmlkKTsKLQkJCSRsYXN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKHRyaW0oJHRtcFswXSkpOwotCQkJJGZpcnN0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKHRyaW0oJHRtcFsxXSkpOworCQkJJGxhc3QgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZyh0cmltKCR0bXBbMF0pKTsKKwkJCSRmaXJzdCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKHRyaW0oJHRtcFsxXSkpOwogCQkJJHF1ZXJ5ID0gIlNFTEVDVCBDT05DQVQodS51bml0eWlkLCAnQCcsIGEubmFtZSkgQVMgdW5pdHlpZCAiCiAJCQkgICAgICAgLiAiRlJPTSB1c2VyIHUsICIKIAkJCSAgICAgICAuICAgICAgImFmZmlsaWF0aW9uIGEgIgpAQCAtMTUyOCw3ICsxNTMxLDcgQEAKIAkJCSAgICAgICAuICAgICAgICJhLmlkID0gJGFmZmlsaWQiOwogCQl9CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZighIG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJaWYoISBteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJaWYoJG1vZGUgPT0gJ25hbWUnKSB7CiAJCQkJcHJpbnQgIjxmb250IGNvbG9yPXJlZD5Vc2VyIG5vdCBmb3VuZDwvZm9udD48YnI+XG4iOwogCQkJCXJldHVybjsKQEAgLTE1MzgsMTMgKzE1NDEsMTMgQEAKIAkJfQogCQllbHNlaWYoJGZvcmNlKSB7CiAJCQkkX1NFU1NJT05bJ3VzZXJyZXNvdXJjZXMnXSA9IGFycmF5KCk7Ci0JCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkJCSRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAkJCSRuZXd0aW1lID0gdW5peFRvRGF0ZXRpbWUodGltZSgpIC0gU0VDSU5EQVkgLSA1KTsKIAkJCSRxdWVyeSA9ICJVUERBVEUgdXNlciBTRVQgbGFzdHVwZGF0ZWQgPSAnJG5ld3RpbWUnIFdIRVJFIGlkID0geyRyb3dbJ2lkJ119IjsKIAkJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCQl9CiAJCWVsc2VpZigkbW9kZSA9PSAnbmFtZScpIHsKLQkJCSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpOworCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQkJJHVzZXJpZCA9ICRyb3dbJ3VuaXR5aWQnXTsKIAkJCSRlc2NfdXNlcmlkID0gJHJvd1sndW5pdHlpZCddOwogCQl9CkBAIC0xNjI5LDYgKzE2MzIsMTIgQEAKIAkJcHJpbnQgIiAgICAgIFRvdGFsOiB7JHRpbWVzWyd0b3RhbCddfTxicj5cbiI7CiAJCXByaW50ICIgIDwvVFI+XG4iOwogCisJCSRtYXhjb25jdXJyZW50ID0gZ2V0TWF4T3ZlcmxhcCgkdXNlcmRhdGFbJ2lkJ10pOworCQlwcmludCAiICA8VFI+XG4iOworCQlwcmludCAiICAgIDxUSCBhbGlnbj1yaWdodD5NYXggT3ZlcmxhcHBpbmcgUmVzZXJ2YXRpb25zOjwvVEg+XG4iOworCQlwcmludCAiICAgIDxURD4kbWF4Y29uY3VycmVudDwvVEQ+XG4iOworCQlwcmludCAiICA8L1RSPlxuIjsKKwogCQlwcmludCAiICA8VFI+XG4iOwogCQlwcmludCAiICAgIDxUSCBhbGlnbj1yaWdodCBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiB0b3BcIj5Qcml2aWxlZ2VzIChmb3VuZCBzb21ld2hlcmUgaW4gdGhlIHRyZWUpOjwvVEg+XG4iOwogCQlwcmludCAiICAgIDxURD5cbiI7CkBAIC0xNjU5LDExICsxNjY4LDExIEBACiAJCSAgICAgICAuICJPUkRFUiBCWSBwLm5hbWUsICIKIAkJICAgICAgIC4gICAgICAgICAgInVwdC5uYW1lIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCXByaW50ICJOb2RlcyB3aGVyZSB1c2VyIGlzIGdyYW50ZWQgcHJpdmlsZWdlczo8YnI+XG4iOwogCQkJcHJpbnQgIjxUQUJMRT5cbiI7CiAJCQkkcHJpdm5vZGVpZCA9IDA7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJaWYoJHByaXZub2RlaWQgIT0gJHJvd1sncHJpdm5vZGVpZCddKSB7CiAJCQkJCWlmKCRwcml2bm9kZWlkKSB7CiAJCQkJCQlwcmludCAiICAgIDwvVEQ+XG4iOwpAQCAtMTY5OSwxMSArMTcwOCwxMSBAQAogCQkJICAgICAgIC4gIk9SREVSIEJZIHAubmFtZSwgIgogCQkJICAgICAgIC4gICAgICAgICAgInVwdC5uYW1lIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCQlwcmludCAiTm9kZXMgd2hlcmUgdXNlcidzIGdyb3VwcyBhcmUgZ3JhbnRlZCBwcml2aWxlZ2VzOjxicj5cbiI7CiAJCQkJcHJpbnQgIjxUQUJMRT5cbiI7CiAJCQkJJHByaXZub2RlaWQgPSAwOwotCQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJCWlmKCRwcml2bm9kZWlkICE9ICRyb3dbJ3ByaXZub2RlaWQnXSkgewogCQkJCQkJaWYoJHByaXZub2RlaWQpIHsKIAkJCQkJCQlwcmludCAiICAgIDwvVEQ+XG4iOwpAQCAtMTcyNCw2ICsxNzMzLDMwIEBACiAJCX0KIAkJcHJpbnQgIjwvZGl2PlxuIjsKIAorCQkjIG93bmVkIGltYWdlcworCQkkb3duZWRpbWFnZXMgPSBhcnJheSgpOworCQkkcXVlcnkgPSAiU0VMRUNUIHByZXR0eW5hbWUgIgorCQkgICAgICAgLiAiRlJPTSBpbWFnZSAiCisJCSAgICAgICAuICJXSEVSRSBvd25lcmlkID0geyR1c2VyZGF0YVsnaWQnXX0gQU5EICIKKwkJICAgICAgIC4gICAgICAgImRlbGV0ZWQgPSAwICIKKwkJICAgICAgIC4gIk9SREVSIEJZIHByZXR0eW5hbWUiOworCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCisJCQkkb3duZWRpbWFnZXNbXSA9ICRyb3dbMF07CisJCXByaW50ICI8dGFibGU+XG4iOworCQlwcmludCAiICA8dHI+XG4iOworCQlwcmludCAiICAgIDx0aCBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiB0b3A7XCI+SW1hZ2VzIE93bmVkIGJ5IFVzZXI6PHRoPlxuIjsKKwkJcHJpbnQgIiAgICA8dGQ+XG4iOworCQlpZihjb3VudCgkb3duZWRpbWFnZXMpKSB7CisJCQlmb3JlYWNoKCRvd25lZGltYWdlcyBhcyAkaW1hZ2UpCisJCQkJcHJpbnQgIiAgICAgICRpbWFnZTxicj5cbiI7CisJCX0KKwkJZWxzZQorCQkJcHJpbnQgIiAgICAgIE5vbmVcbiI7CisJCXByaW50ICIgICAgPC90ZD5cbiI7CisJCXByaW50ICIgIDwvdHI+XG4iOworCQlwcmludCAiPC90YWJsZT5cbiI7CisKIAkJIyBpbWFnZSBhY2Nlc3MKIAkJcHJpbnQgIjx0YWJsZT5cbiI7CiAJCXByaW50ICIgIDx0cj5cbiI7CkBAIC0xNzQ5LDcgKzE3ODIsNyBAQAogCQkgICAgICAgLiAiTElNSVQgOCI7CiAJCSRsb2dpbnMgPSBhcnJheSgpOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkbG9naW5zW10gPSAkcm93OwogCQlpZihjb3VudCgkbG9naW5zKSkgewogCQkJJGxvZ2lucyA9IGFycmF5X3JldmVyc2UoJGxvZ2lucyk7CkBAIC0xODE0LDcgKzE4NDcsNyBAQAogCQkgICAgICAgLiAiT1JERVIgQlkgbC5zdGFydCBERVNDICIKIAkJICAgICAgIC4gIkxJTUlUIDUiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMjkwKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCWFycmF5X3B1c2goJHJlcXVlc3RzLCAkcm93KTsKIAkJJHJlcXVlc3RzID0gYXJyYXlfcmV2ZXJzZSgkcmVxdWVzdHMpOwogCQlpZighIGVtcHR5KCRyZXF1ZXN0cykpIHsKQEAgLTE5MjQsNyArMTk1Nyw3IEBACiAJCSAgICAgICAuICJHUk9VUCBCWSBycS5pZCAiCiAJCSAgICAgICAuICJPUkRFUiBCWSBycS5zdGFydCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAyOTApOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJYXJyYXlfcHVzaCgkcmVxdWVzdHMsICRyb3cpOwogCQkkcmVxdWVzdHMgPSBhcnJheV9yZXZlcnNlKCRyZXF1ZXN0cyk7CiAJCWlmKCEgZW1wdHkoJHJlcXVlc3RzKSkgewpAQCAtMjA1NCw3ICsyMDg3LDcgQEAKIAkJCSAgICAgICAuICJHUk9VUCBCWSBycS5pZCAiCiAJCQkgICAgICAgLiAiT1JERVIgQlkgcnEuc3RhcnQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDI5MCk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQlhcnJheV9wdXNoKCRyZXF1ZXN0cywgJHJvdyk7CiAJCQkkcmVxdWVzdHMgPSBhcnJheV9yZXZlcnNlKCRyZXF1ZXN0cyk7CiAJCQlpZighIGVtcHR5KCRyZXF1ZXN0cykpIHsKQEAgLTIxNTYsNyArMjE4OSw3IEBACiBmdW5jdGlvbiByZWN1cnNlR2V0Q2hpbGRyZW4oJG5vZGUpIHsKIAkkY2hpbGRyZW4gPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBpZCBGUk9NIHByaXZub2RlIFdIRVJFIHBhcmVudCA9ICRub2RlIiwgMzQwKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFycmF5X3B1c2goJGNoaWxkcmVuLCAkcm93WzBdKTsKIAkJJGNoaWxkcmVuID0gYXJyYXlfbWVyZ2UoJGNoaWxkcmVuLCByZWN1cnNlR2V0Q2hpbGRyZW4oJHJvd1swXSkpOwogCX0KQEAgLTI0NDQsNyArMjQ3Nyw3IEBACiAJICAgICAgIC4gIkxFRlQgSk9JTiB1c2VyZ3JvdXAgZzIgT04gKGcuZWRpdHVzZXJncm91cGlkID0gZzIuaWQpICIKIAkgICAgICAgLiAiV0hFUkUgZy5pZCA9ICR1c2VyZ3JwaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgKCRncnBkYXRhID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKKwlpZighICgkZ3JwZGF0YSA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkgewogCQkjIHByb2JsZW0gZ2V0dGluZyBncm91cCBtZW1iZXJzCiAJCSRtc2cgPSAnZmFpbGVkIHRvIGZldGNoIGdyb3VwIG1lbWJlcnMnOwogCQkkYXJyID0gYXJyYXkoJ21lbWJlcnMnID0+ICRtc2csICdkb21pZCcgPT4gJGRvbWlkKTsKQEAgLTI2MjAsNyArMjY1Myw3IEBACiAJICAgICAgIC4gIldIRVJFIHJnLmlkID0gJHJlc2dycGlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInJnLnJlc291cmNldHlwZWlkID0gcnQuaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSR0eXBlID0gJHJvd1snbmFtZSddOwogCQlpZigkdHlwZSA9PSAnY29tcHV0ZXInIHx8ICR0eXBlID09ICdtYW5hZ2VtZW50bm9kZScpCiAJCQkkZmllbGQgPSAnaG9zdG5hbWUnOwpAQCAtMjYzOSw3ICsyNjcyLDcgQEAKIAkJCSRxdWVyeSAuPSAiIEFORCB0LmRlbGV0ZWQgPSAwIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJCSRtZW1iZXJzID0gJyc7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkbWVtYmVycyAuPSAieyRyb3dbJ2l0ZW0nXX08YnI+IjsKIAkJaWYoJG1lbWJlcnMgPT0gJycpCiAJCQkkbWVtYmVycyA9ICcoZW1wdHkgZ3JvdXApJzsKQEAgLTI3MTksNyArMjc1Miw3IEBACiAJCSAgICAgICAuICAgICAgICJnLnJlc291cmNldHlwZWlkID0gdC5pZCAiCiAJCSAgICAgICAuICJPUkRFUiBCWSBwLnByaXZub2RlaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzUwKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkcmVzb3VyY2VkYXRhWyRyb3dbJ3ByaXZub2RlaWQnXV1bXSA9ICRyb3c7CiAJCX0KIAl9CkBAIC0yNzQ2LDcgKzI3NzksNyBAQAogCQkgICAgICAgLiAgICAgICAidS5hZmZpbGlhdGlvbmlkID0gYS5pZCAiCiAJCSAgICAgICAuICJPUkRFUiBCWSB1LnVuaXR5aWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzUxKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRwcml2c1sndXNlcnMnXVskcm93Wyd1bml0eWlkJ11dWyRyb3dbJ25hbWUnXV0gPSAxOwogCX0KIAlpZigkdHlwZSA9PSAidXNlcmdyb3VwcyIgfHwgJHR5cGUgPT0gImFsbCIpIHsKQEAgLTI3NjYsNyArMjc5OSw3IEBACiAJCSAgICAgICAuICAgICAgICJ1cC51c2VyZ3JvdXBpZCBJUyBOT1QgTlVMTCAiCiAJCSAgICAgICAuICJPUkRFUiBCWSBnLm5hbWUiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzUyKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZihpc3NldCgkcHJpdnNbInVzZXJncm91cHMiXVskcm93WyJpZCJdXSkpCiAJCQkJJHByaXZzWyJ1c2VyZ3JvdXBzIl1bJHJvd1siaWQiXV1bJ3ByaXZzJ11bJHJvd1sncHJpdiddXSA9IDE7CiAJCQllbHNlCkBAIC0yODQ5LDcgKzI4ODIsNyBAQAogCQkgICAgICAgLiAgICAgICAiZy5yZXNvdXJjZXR5cGVpZCA9IHQuaWQgQU5EICIKIAkJICAgICAgIC4gICAgICAgInAudHlwZSA9ICdibG9jayciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJaWYoISBpc3NldCgkYWxsYmxvY2tkYXRhWyRyb3dbJ3ByaXZub2RlaWQnXV0pKQogCQkJCSRhbGxibG9ja2RhdGFbJHJvd1sncHJpdm5vZGVpZCddXSA9IGFycmF5KCk7CiAJCQkjIFRPRE8gYWRkaW5nIHRoZSBpZCBhdCB0aGUgZW5kIHdpbGwgZml4IHRoZSBidWcgd2hlcmUgYmxvY2tpbmcgY2FzY2FkZWQgcmVzb3VyY2UKQEAgLTI4ODgsNyArMjkyMSw3IEBACiAJCSAgICAgICAuICAgICAgICJwLnByaXZub2RlaWQgPSBwMi5wcml2bm9kZWlkIEFORCAiCiAJCSAgICAgICAuICAgICAgICJwMi50eXBlID0gJ2Nhc2NhZGUnIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCWlmKCEgaXNzZXQoJGFsbGNhc2NhZGVkYXRhWyRyb3dbJ3ByaXZub2RlaWQnXV0pKQogCQkJCSRhbGxjYXNjYWRlZGF0YVskcm93Wydwcml2bm9kZWlkJ11dID0gYXJyYXkoKTsKIAkJCSRhbGxjYXNjYWRlZGF0YVskcm93Wydwcml2bm9kZWlkJ11dW10gPQpAQCAtMjkzOSw3ICsyOTcyLDcgQEAKIAkJCSAgICAgICAuICAgICAgICJ0Lm5hbWUgPSAnYmxvY2snIEFORCAiCiAJCQkgICAgICAgLiAgICAgICAidS5hZmZpbGlhdGlvbmlkID0gYS5pZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzU1KTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCiAJCQkJJG5vZGV1c2VyYmxvY2tbJHJvd1swXV1bJHJvd1sxXV0gPSAxOwogCQl9CiAJCXN0YXRpYyAkbm9kZXVzZXJjYXNhZGU7CkBAIC0yOTY3LDcgKzMwMDAsNyBAQAogCQkJICAgICAgIC4gCQkidXAudXNlcmlkID0gQ3VwLnVzZXJpZCAiCiAJCQkgICAgICAgLiAiT1JERVIgQlkgdXAucHJpdm5vZGVpZCwgdS51bml0eWlkLCB0Lm5hbWUiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDM1Nik7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQogCQkJCSRub2RldXNlcmNhc2NhZGVbJHJvd1swXV1bJHJvd1sxXV1bJHJvd1syXV0gPSAxOwogCQl9CiAJCSRteW5vZGVsaXN0ID0gJG5vZGVsaXN0OwpAQCAtMzAwNSw3ICszMDM4LDcgQEAKIAkJCSAgICAgICAuICAgICAgICJ1cC51c2VyZ3JvdXBpZCBJUyBOT1QgTlVMTCBBTkQgIgogCQkJICAgICAgIC4gICAgICAgInQubmFtZSA9ICdibG9jayciOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDM1Nyk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQogCQkJCSRub2RlZ3JvdXBibG9ja1skcm93WzBdXVskcm93WzFdXSA9IDE7CiAJCX0KIAkJc3RhdGljICRub2RlZ3JvdXBjYXNjYWRlOwpAQCAtMzAzNSw3ICszMDY4LDcgQEAKIAkJCSAgICAgICAuIAkJInVwLnVzZXJncm91cGlkID0gQ3VwLnVzZXJncm91cGlkICIKIAkJCSAgICAgICAuICJPUkRFUiBCWSB1cC5wcml2bm9kZWlkLCBnLmlkLCB0Lm5hbWUiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDM1Nik7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJCQlpZighIGlzc2V0KCRub2RlZ3JvdXBjYXNjYWRlWyRyb3dbMF1dWyRyb3dbMV1dKSkgewogCQkJCQkkbm9kZWdyb3VwY2FzY2FkZVskcm93WzBdXVskcm93WzFdXSA9IGFycmF5KCdpZCcgPT4gJHJvd1sxXSwKIAkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRyb3dbMl0sCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9yZXF1ZXN0cy5waHAgYi93ZWIvLmh0LWluYy9yZXF1ZXN0cy5waHAKaW5kZXggOWQ4ZDhjZS4uYzgzNjY2OCAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvcmVxdWVzdHMucGhwCisrKyBiL3dlYi8uaHQtaW5jL3JlcXVlc3RzLnBocApAQCAtMjc2LDEyICsyNzYsMTQgQEAKIAkJCQkJJHRleHQgLj0gZ2V0Vmlld1JlcXVlc3RIVE1MaXRlbSgnb3Blbm1vcmVvcHRpb25zJyk7CiAJCQkJCSR0ZXh0IC49IGdldFZpZXdSZXF1ZXN0SFRNTGl0ZW0oJ2VkaXRvcHRpb24nLCAkZWRpdGNvbnQpOwogCQkJCQlpZihhcnJheV9rZXlfZXhpc3RzKCRpbWFnZWlkLCAkcmVzb3VyY2VzWydpbWFnZSddKSAmJiAhICRjbHVzdGVyICYmICAgICAgICAgICAgIyBpbWFnZUFkbWluIGFjY2Vzcywgbm90IGEgY2x1c3RlciwKKwkJCQkJICAgJHJlcXVlc3RzWyRpXVsnT1NpbnN0YWxsdHlwZSddICE9ICdub25lJyAmJgogCQkJCQkgICAoJHJlcXVlc3RzWyRpXVsnY3VycnN0YXRlaWQnXSA9PSA4IHx8ICRyZXF1ZXN0c1skaV1bJ2xhc3RzdGF0ZWlkJ10gPT0gOCkpIHsgIyByZXNlcnZhdGlvbiBoYXMgYmVlbiBpbiBpbnVzZSBzdGF0ZQogCQkJCQkJJHRleHQgLj0gZ2V0Vmlld1JlcXVlc3RIVE1MaXRlbSgnZW5kY3JlYXRlb3B0aW9uJywgJGltZ2NvbnQpOwogCQkJCQl9CiAJCQkJCS8qZWxzZQogCQkJCQkJJHRleHQgLj0gZ2V0Vmlld1JlcXVlc3RIVE1MaXRlbSgnZW5kY3JlYXRlb3B0aW9uZGlzYWJsZScpOyovCiAJCQkJCWlmKGFycmF5X2tleV9leGlzdHMoJGltYWdlaWQsICRyZXNvdXJjZXNbJ2ltYWdlJ10pICYmICEgJGNsdXN0ZXIgJiYKKwkJCQkJICAgJHJlcXVlc3RzWyRpXVsnT1NpbnN0YWxsdHlwZSddICE9ICdub25lJyAmJgogCQkJCQkgICAkcmVxdWVzdHNbJGldWydzZXJ2ZXInXSAmJiAoJHJlcXVlc3RzWyRpXVsnY3VycnN0YXRlaWQnXSA9PSA4IHx8CiAJCQkJCQkoJHJlcXVlc3RzWyRpXVsnY3VycnN0YXRlaWQnXSA9PSAxNCAmJiAkcmVxdWVzdHNbJGldWydsYXN0c3RhdGVpZCddID09IDgpKSkgewogCQkJCQkJJGNoa2NkYXRhID0gJGNkYXRhOwpAQCAtMjkxLDcgKzI5Myw4IEBACiAJCQkJCX0KIAkJCQkJZWxzZWlmKCRyZXF1ZXN0c1skaV1bJ3NlcnZlciddICYmICRyZXF1ZXN0c1skaV1bJ2N1cnJzdGF0ZWlkJ10gPT0gMjQpCiAJCQkJCQkkdGV4dCAuPSBnZXRWaWV3UmVxdWVzdEhUTUxpdGVtKCdjaGVja3BvaW50b3B0aW9uZGlzYWJsZScpOwotCQkJCQlpZigkcmVxdWVzdHNbJGldWydjdXJyc3RhdGVpZCddID09IDggfHwKKwkJCQkJaWYoKCEgJGNsdXN0ZXIgJiYgJHJlcXVlc3RzWyRpXVsnT1NpbnN0YWxsdHlwZSddICE9ICdub25lJyAmJgorCQkJCQkgICAkcmVxdWVzdHNbJGldWydjdXJyc3RhdGVpZCddID09IDgpIHx8CiAJCQkJCSAgICghICRjbHVzdGVyICYmCiAJCQkJCSAgICRyZXF1ZXN0c1skaV1bJ09TaW5zdGFsbHR5cGUnXSAhPSAnbm9uZScgJiYKIAkJCQkJICAgJHJlcXVlc3RzWyRpXVsnY3VycnN0YXRlaWQnXSAhPSAzICYmCkBAIC0zODAsMTIgKzM4MywxMiBAQAogCQkJaWYoY2hlY2tVc2VySGFzUGVybSgnVmlldyBEZWJ1ZyBJbmZvcm1hdGlvbicpKSB7CiAJCQkJaWYoISBpc19udWxsKCRyZXF1ZXN0c1skaV1bJ3ZtaG9zdGlkJ10pKSB7CiAJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgYy5ob3N0bmFtZSAiCi0JCQkJCSAgICAgICAuICJGUk9NIGNvbXB1dGVyIGMsICIgCisJCQkJCSAgICAgICAuICJGUk9NIGNvbXB1dGVyIGMsICIKIAkJCQkJICAgICAgIC4gICAgICAidm1ob3N0IHYgIgogCQkJCQkgICAgICAgLiAiV0hFUkUgdi5pZCA9IHskcmVxdWVzdHNbJGldWyd2bWhvc3RpZCddfSBBTkQgIgogCQkJCQkgICAgICAgLiAgICAgICAidi5jb21wdXRlcmlkID0gYy5pZCI7CiAJCQkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkJCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQkJCQkkdm1ob3N0ID0gJHJvd1snaG9zdG5hbWUnXTsKIAkJCQl9CiAJCQkJJHRleHQgLj0gIiAgICA8VEQgYWxpZ249Y2VudGVyPjxhIGlkPVwicmVxeyRyZXF1ZXN0c1skaV1bJ2lkJ119XCIgIjsKQEAgLTEzMjksNyArMTMzMiw3IEBACiAJCQkJCQkkc3Vib3duZXIgPSAxOwogCQkJCX0KIAkJCX0KLQkJCWlmKCRzdWJvd25lciB8fCAKKwkJCWlmKCRzdWJvd25lciB8fAogCQkJICAgKGFycmF5X2tleV9leGlzdHMoJGlkLCAkaW1hZ2VkYXRhKSAmJgogCQkJICAgY291bnQoJGltYWdlZGF0YVskaWRdWydpbWFnZXJldmlzaW9uJ10pID4gMSAmJgogCQkJICAgKCRpbWFnZWRhdGFbJGlkXVsnb3duZXJpZCddID09ICR1c2VyWydpZCddIHx8CkBAIC0xMzM5LDcgKzEzNDIsNyBAQAogCQkJfQogCQl9CiAJfQotCWlmKGluX2FycmF5KCdzZXJ2ZXJDaGVja091dCcsICR1c2VyWydwcml2aWxlZ2VzJ10pICYmIAorCWlmKGluX2FycmF5KCdzZXJ2ZXJDaGVja091dCcsICR1c2VyWydwcml2aWxlZ2VzJ10pICYmCiAJICAgY291bnQoJGNoZWNrb3V0WydpbWFnZSddKSkgewogCQkkc2VydmVyYWNjZXNzID0gMTsKIAkJLyokZXh0cmFpbWFnZXMgPSBnZXRTZXJ2ZXJQcm9maWxlSW1hZ2VzKCR1c2VyWydpZCddKTsKQEAgLTEzNjksNyArMTM3Miw3IEBACiAJCQkJCQkJJHN1Ym93bmVyID0gMTsKIAkJCQkJfQogCQkJCX0KLQkJCQlpZigkc3Vib3duZXIgfHwgCisJCQkJaWYoJHN1Ym93bmVyIHx8CiAJCQkJICAgKGFycmF5X2tleV9leGlzdHMoJGlkLCAkaW1hZ2VkYXRhKSAmJgogCQkJCSAgIGNvdW50KCRpbWFnZWRhdGFbJGlkXVsnaW1hZ2VyZXZpc2lvbiddKSA+IDEgJiYKIAkJCQkgICAoJGltYWdlZGF0YVskaWRdWydvd25lcmlkJ10gPT0gJHVzZXJbJ2lkJ10gfHwKQEAgLTE4ODQsNyArMTg4Nyw3IEBACiAJCQkkc3RhcnQgPSB1bml4Rmxvb3IxNSgkbm93KTsKIAkJaWYoJHR5cGUgPT0gJ2Jhc2ljJyB8fCAkdHlwZSA9PSAnaW1hZ2luZycpIHsKIAkJCSMgY29tcHV0ZSBtYXhzdGFydCBiYXNlZCBvbiAxMTo0NSBwbSBvbiBzdGFydCBkYXkKLQkJCSR0bXAgPSAkbm93ICsgREFZU0FIRUFEICogU0VDSU5EQVk7IAorCQkJJHRtcCA9ICRub3cgKyBEQVlTQUhFQUQgKiBTRUNJTkRBWTsKIAkJCSRtYXhzdGFydCA9IG1rdGltZSgyMywgNDUsIDAsIGRhdGUoJ24nLCAkdG1wKSwgZGF0ZSgnaicsICR0bXApLCBkYXRlKCdZJywgJHRtcCkpOwogCQkJaWYoJHN0YXJ0ID4gJG1heHN0YXJ0KQogCQkJCXJldHVybjsKQEAgLTE5ODYsNyArMTk4OSw3IEBACiAJJHJjID0gaXNBdmFpbGFibGUoJGltYWdlcywgJGltYWdlaWQsICRpbWFnZXJldmlzaW9uaWQsICRzdGFydCwgJGVuZCwgMCwgMCwgMCwgMCwgJGltYWdpbmcsICRmaXhlZElQKTsKIAlpZigkcmMgPCAxKSB7CiAJCSRjZGF0YSA9IGFycmF5KCdub3cnID0+IDAsCi0JCSAgICAgICAgICAgICAgICdzdGFydCcgPT4gJHN0YXJ0LCAKKwkJICAgICAgICAgICAgICAgJ3N0YXJ0JyA9PiAkc3RhcnQsCiAJCSAgICAgICAgICAgICAgICdlbmQnID0+ICRlbmQsCiAJCSAgICAgICAgICAgICAgICdzZXJ2ZXInID0+IDAsCiAJCSAgICAgICAgICAgICAgICdpbWFnZWlkJyA9PiAkaW1hZ2VpZCk7CkBAIC0yMDkzLDYgKzIwOTYsNDUgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLworLy8vIFxmbiBBSmZldGNoUm91dGVyRE5TKCkKKy8vLworLy8vIFxicmllZiBnZXQgcm91dGVyIGFuZCBkbnMgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gSVAgYWRkcmVzcworLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworZnVuY3Rpb24gQUpmZXRjaFJvdXRlckROUygpIHsKKwkkZGF0YSA9IGFycmF5KCdzdGF0dXMnID0+ICdub25lJyk7CisJJHBhZ2UgPSBwcm9jZXNzSW5wdXRWYXIoJ3BhZ2UnLCBBUkdfU1RSSU5HKTsKKwlpZigkcGFnZSAhPSAnZGVwbG95JykgeworCQlzZW5kSlNPTigkZGF0YSk7CisJCXJldHVybjsKKwl9CisJJGlwYWRkciA9IHByb2Nlc3NJbnB1dFZhcignaXBhZGRyJywgQVJHX1NUUklORyk7CisJIyB2YWxpZGF0ZSBmaXhlZCBJUCBhZGRyZXNzCisJaWYoISB2YWxpZGF0ZUlQdjRhZGRyKCRpcGFkZHIpKSB7CisJCXNlbmRKU09OKCRkYXRhKTsKKwkJcmV0dXJuOworCX0KKwkjIHZhbGlkYXRlIG5ldG1hc2sKKwkkbmV0bWFzayA9IHByb2Nlc3NJbnB1dFZhcignbmV0bWFzaycsIEFSR19TVFJJTkcpOworCSRibmV0bWFzayA9IGlwMmxvbmcoJG5ldG1hc2spOworCWlmKCEgcHJlZ19tYXRjaCgnL15bMV0rMFteMV0rJC8nLCBzcHJpbnRmKCclMDMyYicsICRibmV0bWFzaykpKSB7CisJCXNlbmRKU09OKCRkYXRhKTsKKwkJcmV0dXJuOworCX0KKwkkbmV0d29yayA9IGlwMmxvbmcoJGlwYWRkcikgJiAkYm5ldG1hc2s7CisJJGF2YWlsbmV0cyA9IGdldFZhcmlhYmxlKCdmaXhlZElQYXZhaWxuZXR3b3JrcycsIGFycmF5KCkpOworCSRrZXkgPSBsb25nMmlwKCRuZXR3b3JrKSAuICIvJG5ldG1hc2siOworCWlmKGFycmF5X2tleV9leGlzdHMoJGtleSwgJGF2YWlsbmV0cykpIHsKKwkJJGRhdGEgPSBhcnJheSgnc3RhdHVzJyA9PiAnc3VjY2VzcycsCisJCSAgICAgICAgICAgICAgJ3BhZ2UnID0+ICRwYWdlLAorCQkgICAgICAgICAgICAgICdyb3V0ZXInID0+ICRhdmFpbG5ldHNbJGtleV1bJ3JvdXRlciddLAorCQkgICAgICAgICAgICAgICdkbnMnID0+IGltcGxvZGUoJywnLCAkYXZhaWxuZXRzWyRrZXldWydkbnMnXSkpOworCX0KKwlzZW5kSlNPTigkZGF0YSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KIC8vLyBcZm4gQUpzaG93UmVxdWVzdFN1Z2dlc3RlZFRpbWVzKCkKIC8vLwogLy8vIFxicmllZiBidWlsZHMgaHRtbCB0byBkaXNwbGF5IGxpc3Qgb2YgYXZhaWxhYmxlIHRpbWVzIHRoZSBzZWxlY3RlZCBpbWFnZQpAQCAtMjM1OSw3ICsyNDAxLDggQEAKIAkJcmV0dXJuOwogCX0KIAllbHNlaWYoJGF2YWlsYWJsZXJjID09IC0zKSB7Ci0JCSRtc2cgPSBpKCJUaGUgSVAgb3IgTUFDIGFkZHJlc3MgeW91IHNwZWNpZmllZCBvdmVybGFwcyB3aXRoIGFub3RoZXIgcmVzZXJ2YXRpb24gdXNpbmcgdGhlIHNhbWUgSVAgb3IgTUFDIGFkZHJlc3MgeW91IHNwZWNpZmllZC4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBJUCBvciBNQUMgb3Igc2VsZWN0IGEgZGlmZmVyZW50IHRpbWUgdG8gZGVwbG95IHRoZSBzZXJ2ZXIuIik7CisJCSMkbXNnID0gaSgiVGhlIElQIG9yIE1BQyBhZGRyZXNzIHlvdSBzcGVjaWZpZWQgb3ZlcmxhcHMgd2l0aCBhbm90aGVyIHJlc2VydmF0aW9uIHVzaW5nIHRoZSBzYW1lIElQIG9yIE1BQyBhZGRyZXNzIHlvdSBzcGVjaWZpZWQuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgSVAgb3IgTUFDIG9yIHNlbGVjdCBhIGRpZmZlcmVudCB0aW1lIHRvIGRlcGxveSB0aGUgc2VydmVyLiIpOworCQkkbXNnID0gaSgiVGhlIElQIGFkZHJlc3MgeW91IHNwZWNpZmllZCBvdmVybGFwcyB3aXRoIGFub3RoZXIgcmVzZXJ2YXRpb24gdXNpbmcgdGhlIHNhbWUgSVAgYWRkcmVzcy4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBJUCBhZGRyZXNzIG9yIHNlbGVjdCBhIGRpZmZlcmVudCB0aW1lIHRvIGRlcGxveSB0aGUgc2VydmVyLiIpOwogCQkkZGF0YSA9IGFycmF5KCdlcnInID0+IDEsCiAJCSAgICAgICAgICAgICAgJ2Vycm1zZycgPT4gJG1zZyk7CiAJCXNlbmRKU09OKCRkYXRhKTsKQEAgLTI0MTAsNyArMjQ1Myw3IEBACiAJCX0KIAkJZWxzZSB7CiAJCQkkZmllbGRzW10gPSAnbmFtZSc7Ci0JCQkkbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnbmFtZSddKTsKKwkJCSRuYW1lID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ25hbWUnXSk7CiAJCQkkdmFsdWVzW10gPSAiJyRuYW1lJyI7CiAJCX0KIAkJaWYoJGRhdGFbJ2lwYWRkciddICE9ICcnKSB7CkBAIC0yNDcyLDcgKzI1MTUsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSBpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSRyZXNpZHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93WydpbWFnZWlkJ10sICRyZXNpZHMpKQogCQkJJHJlc2lkc1skcm93WydpbWFnZWlkJ11dID0gYXJyYXkoKTsKIAkJJHJlc2lkc1skcm93WydpbWFnZWlkJ11dW10gPSAkcm93WydpZCddOwpAQCAtMjQ4OCw3ICsyNTMxLDcgQEAKIAkJfQogCX0KIAkkcWJhc2UgPSAiSU5TRVJUIElOVE8gY29uZmlnaW5zdGFuY2UgIgotCSAgICAgICAuICAgICAgICAiKHJlc2VydmF0aW9uaWQsICIgCisJICAgICAgIC4gICAgICAgICIocmVzZXJ2YXRpb25pZCwgIgogCSAgICAgICAuICAgICAgICAiY29uZmlnaWQsICIKIAkgICAgICAgLiAgICAgICAgImNvbmZpZ21hcGlkLCAiCiAJICAgICAgIC4gICAgICAgICJjb25maWdpbnN0YW5jZXN0YXR1c2lkKSAiCkBAIC0yNTI4LDcgKzI1NzEsNyBAQAogCQkJaWYoYXJyYXlfa2V5X2V4aXN0cygiJGNmZ3N1YmltZ2lkLyRtYXBpZCIsICR2YXJzKSkgewogCQkJCSRzZXRzID0gYXJyYXkoKTsKIAkJCQlmb3JlYWNoKCR2YXJzWyIkY2Znc3ViaW1naWQvJG1hcGlkIl0gYXMgJHZhcmlkID0+ICR2YXJ2YWwpIHsKLQkJCQkJJF92YWwgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhcnZhbFsndmFsdWUnXSk7CisJCQkJCSRfdmFsID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHZhcnZhbFsndmFsdWUnXSk7CiAJCQkJCSRzZXRzW10gPSAiKCRpbnN0aWQsICR2YXJpZCwgJyRfdmFsJykiOwogCQkJCX0KIAkJCQkkcXVlcnkgPSAkcWJhc2UyIC4gaW1wbG9kZSgnLCcsICRzZXRzKTsKQEAgLTI3MDYsOCArMjc0OSw4IEBACiAKIAlpZigkcmVxdWVzdFsnY3VycnN0YXRlaWQnXSA9PSAxMSB8fAogCSAgICgkcmVxdWVzdFsnY3VycnN0YXRlaWQnXSA9PSAxMiAmJiAkcmVxdWVzdFsnbGFzdHN0YXRlaWQnXSA9PSAxMSkpCi0JCXJldHVybiAiPGJyPjxzcGFuIGNsYXNzPVwicmVkZXJyb3Jtc2dcIj4iIC4gCi0JCSAgICAgICBpKCJUaGUgc2VsZWN0ZWQgcmVzZXJ2YXRpb24gaGFzIHRpbWVkIG91dCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4iKSAuIAorCQlyZXR1cm4gIjxicj48c3BhbiBjbGFzcz1cInJlZGVycm9ybXNnXCI+IiAuCisJCSAgICAgICBpKCJUaGUgc2VsZWN0ZWQgcmVzZXJ2YXRpb24gaGFzIHRpbWVkIG91dCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4iKSAuCiAJCSAgICAgICAiPC9zcGFuPiI7CiAKIAlpZigkcmVxdWVzdFsnaW1hZ2VpZCddID09ICRyZXF1ZXN0Wydjb21waW1hZ2VpZCddKQpAQCAtMjc4MSw3ICsyODI0LDcgQEAKIAkJCSAgICAgICAuICAgICAgICJyZXNlcnZhdGlvbmlkID0geyRyZXF1ZXN0WydyZXNpZCddfSBBTkQgIgogCQkJICAgICAgIC4gICAgICAgInRpbWVzdGFtcCA9ICciIC4gdW5peFRvRGF0ZXRpbWUoJGRhdGFbJ3RzJ10pIC4gIiciOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJHJlYXNvbiA9ICRyb3dbJ2FkZGl0aW9uYWxpbmZvJ107CiAJCQkJJHRleHQgLj0gIjxicj4iIC4gaSgicmV0cnlpbmcgYXQgc3RhdGUiKSAuICIgXCIkcmVhc29uXCIiOwogCQkJfQpAQCAtMjg2NSw3ICsyOTA4LDcgQEAKIAkJCQkgICAgICAgLiAiT1JERVIgQlkgaWQgIgogCQkJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCQkkcmVhc29uID0gJHJvd1snYWRkaXRpb25hbEluZm8nXTsKIAkJCQkJaWYoISBlbXB0eSgkZGF0YSkpCiAJCQkJCQkkY3VycnRpbWUgPSAkcm93Wyd0cyddIC0gJGRhdGFbJ3RzJ107CkBAIC0yOTU0LDcgKzI5OTcsNyBAQAogCXByaW50ICIgIDwvVFI+XG4iOwogCXByaW50ICIgIDxUUj5cbiI7CiAJcHJpbnQgIiAgICA8VEggYWxpZ249cmlnaHQ+U3RhcnQmbmJzcDtUaW1lOjwvVEg+XG4iOwotCWlmKGRhdGV0aW1lVG9Vbml4KCRyZXF1ZXN0WyJzdGFydCJdKSA8IAorCWlmKGRhdGV0aW1lVG9Vbml4KCRyZXF1ZXN0WyJzdGFydCJdKSA8CiAJICAgZGF0ZXRpbWVUb1VuaXgoJHJlcXVlc3RbImRhdGVyZXF1ZXN0ZWQiXSkpIHsKIAkJcHJpbnQgIiAgICA8VEQ+IiAuIHByZXR0eURhdGV0aW1lKCRyZXF1ZXN0WyJkYXRlcmVxdWVzdGVkIl0pIC4gIjwvVEQ+XG4iOwogCX0KQEAgLTMwOTIsNyArMzEzNSw3IEBACiAJJHJlcXVlc3QgPSBnZXRSZXF1ZXN0SW5mbygkcmVxdWVzdGlkLCAxKTsKIAkjIGNoZWNrIHRvIHNlZSBpZiByZXNlcnZhdGlvbiBleGlzdHMKIAlpZihpc19udWxsKCRyZXF1ZXN0KSB8fCAkcmVxdWVzdFsnc3RhdGVpZCddID09IDExIHx8ICRyZXF1ZXN0WydzdGF0ZWlkJ10gPT0gMTIgfHwKLQkgICAoJHJlcXVlc3RbJ3N0YXRlaWQnXSA9PSAxNCAmJiAKKwkgICAoJHJlcXVlc3RbJ3N0YXRlaWQnXSA9PSAxNCAmJgogCSAgICgkcmVxdWVzdFsnbGFzdHN0YXRlaWQnXSA9PSAxMSB8fCAkcmVxdWVzdFsnbGFzdHN0YXRlaWQnXSA9PSAxMikpKSB7CiAJCXNlbmRKU09OKGFycmF5KCdzdGF0dXMnID0+ICdyZXNnb25lJykpOwogCQlyZXR1cm47CkBAIC0zMjA4LDE0ICszMjUxLDE0IEBACiAJaWYoJHVuaXhzdGFydCA+ICRub3cpIHsKIAkJJHR6dW5peHN0YXJ0ID0gJHVuaXhzdGFydCArICgkX1NFU1NJT05bJ3BlcnNpc3RkYXRhJ11bJ3R6b2Zmc2V0J10gKiA2MCk7CiAJCSRjZGF0YVsnbW9kaWZ5c3RhcnQnXSA9IDE7Ci0JCSR0eHQgID0gaSgiTW9kaWZ5IHJlc2VydmF0aW9uIGZvciIpIC4gIiA8Yj57JHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddWzBdWydwcmV0dHlpbWFnZSddfTwvYj4gIjsgCisJCSR0eHQgID0gaSgiTW9kaWZ5IHJlc2VydmF0aW9uIGZvciIpIC4gIiA8Yj57JHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddWzBdWydwcmV0dHlpbWFnZSddfTwvYj4gIjsKIAkJJHR4dCAuPSBpKCJzdGFydGluZyIpIC4gIiAiIC4gcHJldHR5RGF0ZXRpbWUoJHJlcXVlc3RbInN0YXJ0Il0pIC4gIjogPGJyPiI7CiAJCSRoIC49IHByZWdfcmVwbGFjZSgiLyguezEsNjB9KFsgXG5dfCQpKS8iLCAnXDE8YnI+JywgJHR4dCk7CiAJCSRkYXlzID0gYXJyYXkoKTsKIAkJJHN0YXJ0ZGF5ID0gZGF0ZSgnbCcsICR0enVuaXhzdGFydCk7CiAJCSRjdXIgPSB0aW1lKCkgKyAoJF9TRVNTSU9OWydwZXJzaXN0ZGF0YSddWyd0em9mZnNldCddICogNjApOwotCQlmb3IoJGVuZCA9ICRjdXIgKyBEQVlTQUhFQUQgKiBTRUNJTkRBWTsgCi0JCSAgICAkY3VyIDwgJGVuZDsgCisJCWZvcigkZW5kID0gJGN1ciArIERBWVNBSEVBRCAqIFNFQ0lOREFZOworCQkgICAgJGN1ciA8ICRlbmQ7CiAJCSAgICAkY3VyICs9IFNFQ0lOREFZKSB7CiAJCQkkaW5kZXggPSBkYXRlKCdZbWQnLCAkY3VyKTsKIAkJCSRkYXlzWyRpbmRleF0gPSBkYXRlKCdsJywgJGN1cik7CkBAIC0zMzUzLDggKzMzOTYsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAkjIGNoZWNrIGZvciBtYXggdGltZSBiZWluZyByZWFjaGVkCisJJGltZ2RhdGEgPSBnZXRJbWFnZXMoMSwgJHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddWzBdWydpbWFnZWlkJ10pOworCSRtYXhpbWdsZW4gPSAkaW1nZGF0YVskcmVxdWVzdFsncmVzZXJ2YXRpb25zJ11bMF1bJ2ltYWdlaWQnXV1bJ21heGluaXRpYWx0aW1lJ107CiAJaWYoJHJlcXVlc3RbJ2ZvcmltYWdpbmcnXSAmJiAkbWF4dGltZXNbJ3RvdGFsJ10gPCA3MjApCiAJCSRtYXhjaGVjayA9IDcyMDsKKwllbHNlaWYoISAkcmVxdWVzdFsnZm9yaW1hZ2luZyddICYmICRtYXhpbWdsZW4pCisJCSRtYXhjaGVjayA9ICRtYXhpbWdsZW47CiAJZWxzZQogCQkkbWF4Y2hlY2sgPSAkbWF4dGltZXNbJ3RvdGFsJ107CiAJaWYoISAkb3BlbmVuZCAmJiAoJHJlc2xlbiA+PSAkbWF4Y2hlY2spKSB7CkBAIC0zMzY3LDEzICszNDE0LDEzIEBACiAJLy8gaWYgc3RhcnRlZCwgb25seSBhbGxvdyBlbmQgdG8gYmUgbW9kaWZpZWQKIAkjIGNoZWNrIGZvciBmb2xsb3dpbmcgcmVzZXJ2YXRpb25zCiAJJHRpbWVUb05leHQgPSB0aW1lVG9OZXh0UmVzZXJ2YXRpb24oJHJlcXVlc3QpOwotCSMgY2hlY2sgZm9yIDMwIG1pbnV0ZXMgYmVjYXVzZSBuZWVkIDE1IG1pbnV0ZSBidWZmZXIgYW5kIG1pbiBjYW4gCisJIyBjaGVjayBmb3IgMzAgbWludXRlcyBiZWNhdXNlIG5lZWQgMTUgbWludXRlIGJ1ZmZlciBhbmQgbWluIGNhbgogCSMgZXh0ZW5kIGJ5IGlzIDE1IG1pbgogCWlmKCR0aW1lVG9OZXh0IDwgMzApIHsKIAkJJG1vdmVkYWxsID0gMTsKIAkJJGxvY2tlZGFsbCA9IDE7CiAJCWlmKGNvdW50KCRyZXF1ZXN0WydyZXNlcnZhdGlvbnMnXSkgPiAxKSB7Ci0JCQkjIGdldCBzZW1hcGhvcmUgb24gZWFjaCBleGlzdGluZyBub2RlIGluIGNsdXN0ZXIgc28gdGhhdCBub3RoaW5nIAorCQkJIyBnZXQgc2VtYXBob3JlIG9uIGVhY2ggZXhpc3Rpbmcgbm9kZSBpbiBjbHVzdGVyIHNvIHRoYXQgbm90aGluZwogCQkJIyBjYW4gZ2V0IG1vdmVkIHRvIHRoZSBub2RlcyBkdXJpbmcgdGhpcyBwcm9jZXNzCiAKIAkJCSRzZW1pbWFnZWlkID0gZ2V0SW1hZ2VJZCgnbm9pbWFnZScpOwpAQCAtMzQxMCw2ICszNDU3LDExIEBACiAJJGxlbmd0aHMgPSBhcnJheSgpOwogCWlmKCRyZXF1ZXN0Wydmb3JpbWFnaW5nJ10gJiYgJG1heHRpbWVzWyd0b3RhbCddIDwgNzIwKSAjIG1ha2Ugc3VyZSBhdCBsZWFzdCAxMiBob3VycyBhdmFpbGFibGUgZm9yIGltYWdpbmcgcmVzZXJ2YXRpb25zCiAJCSRtYXh0aW1lc1sndG90YWwnXSA9IDcyMDsKKwllbHNlaWYoISAkcmVxdWVzdFsnZm9yaW1hZ2luZyddICYmICRtYXhpbWdsZW4pIHsKKwkJJG1heHRpbWVzWyd0b3RhbCddID0gJG1heGltZ2xlbjsKKwkJJGN1cnJkdXJhdGlvbiA9IChkYXRldGltZVRvVW5peCgkcmVxdWVzdFsnZW5kJ10pIC0gZGF0ZXRpbWVUb1VuaXgoJHJlcXVlc3RbJ3N0YXJ0J10pKSAvIDYwOworCQkkbWF4dGltZXNbJ2V4dGVuZCddID0gJG1heGltZ2xlbiAtICRjdXJyZHVyYXRpb247CisJfQogCWlmKCR0aW1lVG9OZXh0ID09IC0xKSB7CiAJCWlmKCRub3VzZXJjaGVjaykKIAkJCSRsZW5ndGhzWyIwIl0gPSAiTm8gY2hhbmdlIjsKQEAgLTM3MzIsNyArMzc4NCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJaWYoJHNlcnZlcm5hbWUgIT0gJHJlcXVlc3RbJ3NlcnZlcm5hbWUnXSkgewotCQkJJHNlcnZlcm5hbWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHNlcnZlcm5hbWUpOworCQkJJHNlcnZlcm5hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkc2VydmVybmFtZSk7CiAJCQkkdXBkYXRlc2VydmVybmFtZSA9IDE7CiAJCX0KIAl9CkBAIC0zODI2LDkgKzM4NzgsOSBAQAogCSRyYyA9IGlzQXZhaWxhYmxlKCRpbWFnZXMsICRpbWFnZWlkLCAkcmV2aXNpb25zLCAkc3RhcnR0cywKIAkgICAgICAgICAgICAgICAgICAkZW5kdHMsIDEsICRyZXF1ZXN0aWQsIDAsIDAsIDAsICRpcCwgJG1hYyk7CiAJJGRhdGEgPSBhcnJheSgpOwotCWlmKCRyYyA8IDEpIHsgCisJaWYoJHJjIDwgMSkgewogCQkkY2RhdGEgPSBhcnJheSgnbm93JyA9PiAwLAotCQkgICAgICAgICAgICAgICAnc3RhcnQnID0+ICRzdGFydHRzLCAKKwkJICAgICAgICAgICAgICAgJ3N0YXJ0JyA9PiAkc3RhcnR0cywKIAkJICAgICAgICAgICAgICAgJ2VuZCcgPT4gJGVuZHRzLAogCQkgICAgICAgICAgICAgICAnc2VydmVyJyA9PiAkYWxsb3dpbmRlZmluaXRlZW5kLAogCQkgICAgICAgICAgICAgICAnaW1hZ2VpZCcgPT4gJGltYWdlaWQsCkBAIC0zODUwLDcgKzM5MDIsOCBAQAogCQkJJG1zZ2lwID0gIiAoJGlwKSI7CiAJCWlmKCEgZW1wdHkoJG1hYykpCiAJCQkkbXNnbWFjID0gIiAoJG1hYykiOwotCQkkaCAuPSBzcHJpbnRmKGkoIlRoZSByZXNlcnZlZCBJUCAoJXMpIG9yIE1BQyBhZGRyZXNzICglcykgY29uZmxpY3RzIHdpdGggYW5vdGhlciByZXNlcnZhdGlvbiB1c2luZyB0aGUgc2FtZSBJUCBvciBNQUMgYWRkcmVzcy4gUGxlYXNlIHNlbGVjdCBhIGRpZmZlcmVudCB0aW1lIHRvIHVzZSB0aGUgaW1hZ2UuIiksICRtc2dpcCwgJG1zZ21hYyk7CisJCSMkaCAuPSBzcHJpbnRmKGkoIlRoZSByZXNlcnZlZCBJUCAoJXMpIG9yIE1BQyBhZGRyZXNzICglcykgY29uZmxpY3RzIHdpdGggYW5vdGhlciByZXNlcnZhdGlvbiB1c2luZyB0aGUgc2FtZSBJUCBvciBNQUMgYWRkcmVzcy4gUGxlYXNlIHNlbGVjdCBhIGRpZmZlcmVudCB0aW1lIHRvIHVzZSB0aGUgaW1hZ2UuIiksICRtc2dpcCwgJG1zZ21hYyk7CisJCSRoIC49IHNwcmludGYoaSgiVGhlIHJlc2VydmVkIElQIGFkZHJlc3MgKCVzKSBjb25mbGljdHMgd2l0aCBhbm90aGVyIHJlc2VydmF0aW9uIHVzaW5nIHRoZSBzYW1lIElQIGFkZHJlc3MuIFBsZWFzZSBzZWxlY3QgYSBkaWZmZXJlbnQgdGltZSB0byB1c2UgdGhlIGltYWdlLiIpLCAkbXNnaXApOwogCQkkaCA9IHByZWdfcmVwbGFjZSgiLyguezEsNjB9KFsgXG5dfCQpKS8iLCAnXDE8YnI+JywgJGgpOwogCQkkY2RhdGEgPSBnZXRDb250aW51YXRpb25WYXIoKTsKIAkJJGNvbnQgPSBhZGRDb250aW51YXRpb25zRW50cnkoJ0FKc3VibWl0RWRpdFJlcXVlc3QnLCAkY2RhdGEsIFNFQ0lOREFZLCAxLCAwKTsKQEAgLTM5MzYsNyArMzk4OSw3IEBACiAJCXJldHVybjsKIAl9CiAJaWYoJHJlcXVlc3RbJ3N0YXRlaWQnXSA9PSAxMSB8fCAkcmVxdWVzdFsnc3RhdGVpZCddID09IDEyIHx8Ci0JICAgKCRyZXF1ZXN0WydzdGF0ZWlkJ10gPT0gMTQgJiYgCisJICAgKCRyZXF1ZXN0WydzdGF0ZWlkJ10gPT0gMTQgJiYKIAkgICAoJHJlcXVlc3RbJ2xhc3RzdGF0ZWlkJ10gPT0gMTEgfHwgJHJlcXVlc3RbJ2xhc3RzdGF0ZWlkJ10gPT0gMTIpKSkgewogCQkkZGF0YSA9IGFycmF5KCdlcnJvcicgPT4gMSwKIAkJICAgICAgICAgICAgICAncmVmcmVzaCcgPT4gMSwKQEAgLTQxMzIsNyArNDE4NSw3IEBACiAJaWYoJHJlcXVlc3RbJ3NlcnZlcnJlcXVlc3QnXSkgewogCQkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gc2VydmVycmVxdWVzdCBXSEVSRSByZXF1ZXN0aWQgPSAkcmVxdWVzdGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSBzZXJ2ZXJyZXF1ZXN0IFdIRVJFIHJlcXVlc3RpZCA9ICRyZXF1ZXN0aWQiOwogCQkJZG9RdWVyeSgkcXVlcnksIDE1Mik7CiAJCQlkZWxldGVWYXJpYWJsZSgiZml4ZWRJUHNyeyRyb3dbJ2lkJ119Iik7CkBAIC00MTYwLDcgKzQyMTMsNyBAQAogCSRyZXF1ZXN0aWQgPSBnZXRDb250aW51YXRpb25WYXIoJ3JlcXVlc3RpZCcpOwogCSRyZXFkYXRhID0gZ2V0UmVxdWVzdEluZm8oJHJlcXVlc3RpZCwgMSk7CiAJaWYoaXNfbnVsbCgkcmVxZGF0YSkgfHwgJHJlcWRhdGFbJ3N0YXRlaWQnXSA9PSAxMSB8fCAkcmVxZGF0YVsnc3RhdGVpZCddID09IDEyIHx8Ci0JICAgKCRyZXFkYXRhWydzdGF0ZWlkJ10gPT0gMTQgJiYgCisJICAgKCRyZXFkYXRhWydzdGF0ZWlkJ10gPT0gMTQgJiYKIAkgICAoJHJlcWRhdGFbJ2xhc3RzdGF0ZWlkJ10gPT0gMTEgfHwgJHJlcWRhdGFbJ2xhc3RzdGF0ZWlkJ10gPT0gMTIpKSkgewogCQlwcmludCAicmVzR29uZSgncmVib290Jyk7ICI7CiAJCXByaW50ICJkaWppdC5ieUlkKCdlZGl0UmVzRGxnJykuc2hvdygpOyI7CkBAIC00MTkyLDcgKzQyNDUsNyBAQAogCSRyZXF1ZXN0aWQgPSBnZXRDb250aW51YXRpb25WYXIoJ3JlcXVlc3RpZCcpOwogCSRyZXFkYXRhID0gZ2V0UmVxdWVzdEluZm8oJHJlcXVlc3RpZCwgMSk7CiAJaWYoaXNfbnVsbCgkcmVxZGF0YSkgfHwgJHJlcWRhdGFbJ3N0YXRlaWQnXSA9PSAxMSB8fCAkcmVxZGF0YVsnc3RhdGVpZCddID09IDEyIHx8Ci0JICAgKCRyZXFkYXRhWydzdGF0ZWlkJ10gPT0gMTQgJiYgCisJICAgKCRyZXFkYXRhWydzdGF0ZWlkJ10gPT0gMTQgJiYKIAkgICAoJHJlcWRhdGFbJ2xhc3RzdGF0ZWlkJ10gPT0gMTEgfHwgJHJlcWRhdGFbJ2xhc3RzdGF0ZWlkJ10gPT0gMTIpKSkgewogCQlzZW5kSlNPTihhcnJheSgnc3RhdHVzJyA9PiAncmVzZ29uZScpKTsKIAkJcmV0dXJuOwpAQCAtNDMwMSw3ICs0MzU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAlpZigkcmVxdWVzdERhdGFbJ3N0YXRlaWQnXSA9PSAxMSB8fCAkcmVxdWVzdERhdGFbJ3N0YXRlaWQnXSA9PSAxMiB8fAotCSAgICgkcmVxdWVzdERhdGFbJ3N0YXRlaWQnXSA9PSAxNCAmJiAKKwkgICAoJHJlcXVlc3REYXRhWydzdGF0ZWlkJ10gPT0gMTQgJiYKIAkgICAoJHJlcXVlc3REYXRhWydsYXN0c3RhdGVpZCddID09IDExIHx8ICRyZXF1ZXN0RGF0YVsnbGFzdHN0YXRlaWQnXSA9PSAxMikpKSB7CiAJCSRoID0gaSgiVGhpcyByZXNlcnZhdGlvbiBoYXMgdGltZWQgb3V0IGR1ZSB0byBsYWNrIG9mIHVzZXIgYWN0aXZpdHkgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuIik7CiAJCXNlbmRKU09OKGFycmF5KCdodG1sJyA9PiAkaCwgJ3JlZnJlc2gnID0+IDEpKTsKQEAgLTQzNzQsNiArNDQyNyw4IEBACiAJCQkJJGNvbnVzZXIgPSAkdXNlclsndW5pdHlpZCddOwogCQkJaWYoJHJlcXVlc3REYXRhWydyZXNlcnZhdGlvbnMnXVswXVsnZG9tYWluRE5TTmFtZSddICE9ICcnICYmICEgc3RybGVuKCRwYXNzd2QpKQogCQkJCSRjb251c2VyIC49ICJAIiAuICRyZXF1ZXN0RGF0YVsncmVzZXJ2YXRpb25zJ11bMF1bJ2RvbWFpbkROU05hbWUnXTsKKwkJCWVsc2VpZigkcmVxdWVzdERhdGFbJ3Jlc2VydmF0aW9ucyddWzBdWydPU3R5cGUnXSA9PSAnd2luZG93cycpCisJCQkJJGNvbnVzZXIgPSAiLlxcJGNvbnVzZXIiOwogCQkJaWYoISBzdHJsZW4oJHBhc3N3ZCkpCiAJCQkJJHBhc3N3ZCA9IGkoJyh1c2UgeW91ciBjYW1wdXMgcGFzc3dvcmQpJyk7CiAJCQlpZigkY2x1c3RlcikKQEAgLTQ0MDAsMTcgKzQ0NTUsMTcgQEAKIAkJCSR0b3MgPSBhcnJheSgkY29udXNlciwKIAkJCSAgICAgICAgICAgICAkcGFzc3dkLAogCQkJICAgICAgICAgICAgICRyZXNbJ2Nvbm5lY3RJUCddKTsKLQkJCSRtc2cgPSBwcmVnX3JlcGxhY2UoJGZyb21zLCAkdG9zLCAkbWV0aG9kWydjb25uZWN0dGV4dCddKTsgCisJCQkkbXNnID0gcHJlZ19yZXBsYWNlKCRmcm9tcywgJHRvcywgJG1ldGhvZFsnY29ubmVjdHRleHQnXSk7CiAJCQlmb3JlYWNoKCRtZXRob2RbJ3BvcnRzJ10gYXMgJHBvcnQpIHsKIAkJCQlpZigkdXNlbmF0ICYmIGFycmF5X2tleV9leGlzdHMoJHBvcnRbJ2tleSddLCAkbmF0cG9ydHNbJGNtaWRdKSkKLQkJCQkJJG1zZyA9IHByZWdfcmVwbGFjZSgiL3skcG9ydFsna2V5J119LyIsICRuYXRwb3J0c1skY21pZF1bJHBvcnRbJ2tleSddXVsncHVibGljcG9ydCddLCAkbXNnKTsgCisJCQkJCSRtc2cgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkbmF0cG9ydHNbJGNtaWRdWyRwb3J0WydrZXknXV1bJ3B1YmxpY3BvcnQnXSwgJG1zZyk7CiAJCQkJZWxzZSB7CiAJCQkJCWlmKChwcmVnX21hdGNoKCcvcmVtb3RlIGRlc2t0b3AvaScsICRtZXRob2RbJ2Rlc2NyaXB0aW9uJ10pIHx8Ci0JCQkJCSAgIHByZWdfbWF0Y2goJy9SRFAvaScsICRtZXRob2RbJ2Rlc2NyaXB0aW9uJ10pKSAmJiAKKwkJCQkJICAgcHJlZ19tYXRjaCgnL1JEUC9pJywgJG1ldGhvZFsnZGVzY3JpcHRpb24nXSkpICYmCiAJCQkJCSAgICRwb3J0WydrZXknXSA9PSAnI1BvcnQtVENQLTMzODkjJykKLQkJCQkJCSRtc2cgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkdXNlclsncmRwcG9ydCddLCAkbXNnKTsgCisJCQkJCQkkbXNnID0gcHJlZ19yZXBsYWNlKCIveyRwb3J0WydrZXknXX0vIiwgJHVzZXJbJ3JkcHBvcnQnXSwgJG1zZyk7CiAJCQkJCWVsc2UKLQkJCQkJCSRtc2cgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkcG9ydFsncG9ydCddLCAkbXNnKTsgCisJCQkJCQkkbXNnID0gcHJlZ19yZXBsYWNlKCIveyRwb3J0WydrZXknXX0vIiwgJHBvcnRbJ3BvcnQnXSwgJG1zZyk7CiAJCQkJfQogCQkJfQogCQkJIyRoIC49IHByZWdfcmVwbGFjZSgiLyguezEsMTIwfShbIF18JCkpLyIsICdcMTxicj4nLCAkbXNnKTsKQEAgLTQ0MjEsNyArNDQ3Niw4IEBACiAJCQkJIyRoIC49ICI8ZGl2IGlkPVwiY29ubmVjdGRpdlwiPlxuIjsKIAkJCQkkaCAuPSAiPEZPUk0gYWN0aW9uPVwiIiAuIEJBU0VVUkwgLiBTQ1JJUFQgLiAiXCIgbWV0aG9kPXBvc3Q+XG4iOwogCQkJCSRjZGF0YSA9IGFycmF5KCdyZXF1ZXN0aWQnID0+ICRyZXF1ZXN0aWQsCi0JCQkJICAgICAgICAgICAgICAgJ3Jlc2lkJyA9PiAkcmVzWydyZXNlcnZhdGlvbmlkJ10pOworCQkJCSAgICAgICAgICAgICAgICdyZXNpZCcgPT4gJHJlc1sncmVzZXJ2YXRpb25pZCddLAorCQkJCSAgICAgICAgICAgICAgICdjbWlkJyA9PiAkY21pZCk7CiAJCQkJJGV4cGlyZSA9IGRhdGV0aW1lVG9Vbml4KCRyZXF1ZXN0RGF0YVsnZW5kJ10pIC0gJG5vdyArIDE4MDA7ICMgcmVtYWluaW5nIHJlc2VydmF0aW9uIHRpbWUgcGx1cyAzMCBtaW4KIAkJCQkkY29udCA9IGFkZENvbnRpbnVhdGlvbnNFbnRyeSgnc2VuZFJEUGZpbGUnLCAkY2RhdGEsICRleHBpcmUpOwogCQkJCSRoIC49ICI8SU5QVVQgdHlwZT1oaWRkZW4gbmFtZT1jb250aW51YXRpb24gdmFsdWU9XCIkY29udFwiPlxuIjsKQEAgLTQ2MTksNyArNDY3NSw3IEBACiAJJGltYWdlcyA9IHJlbW92ZU5vQ2hlY2tvdXQoJHJlc291cmNlc1siaW1hZ2UiXSk7CiAJIyRleHRyYWltYWdlcyA9IGdldFNlcnZlclByb2ZpbGVJbWFnZXMoJHVzZXJbJ2lkJ10pOwogCWlmKCghIGFycmF5X2tleV9leGlzdHMoJHJldHVyblsnaW1hZ2VpZCddLCAkaW1hZ2VzKSAmJgotCSAgIC8qKCRyZXR1cm5bJ3R5cGUnXSAhPSAnc2VydmVyJyB8fCAKKwkgICAvKigkcmV0dXJuWyd0eXBlJ10gIT0gJ3NlcnZlcicgfHwKIAkJISBhcnJheV9rZXlfZXhpc3RzKCRyZXR1cm5bJ2ltYWdlaWQnXSwgJGV4dHJhaW1hZ2VzKSkgJiYqLwogCSAgICgkcmV0dXJuWyd0eXBlJ10gIT0gJ2ltYWdpbmcnIHx8CiAJICAgISBhcnJheV9rZXlfZXhpc3RzKCRyZXR1cm5bJ2ltYWdlaWQnXSwgJHdpdGhub2NoZWNrb3V0KSkpIHx8CkBAIC00NjYwLDcgKzQ3MTYsNyBAQAogCQkkcmV0dXJuWydyZXZpc2lvbmlkcyddWyRyZXR1cm5bJ2ltYWdlaWQnXV1bXSA9ICRyZXZpZHNbMF07CiAJZWxzZQogCQkkcmV0dXJuWydyZXZpc2lvbmlkcyddWyRyZXR1cm5bJ2ltYWdlaWQnXV1bXSA9IGdldFByb2R1Y3Rpb25SZXZpc2lvbmlkKCRyZXR1cm5bJ2ltYWdlaWQnXSk7Ci0JCisKIAkjIGR1cmF0aW9uCiAJaWYoJHJldHVyblsnZW5kaW5nJ10gPT0gJ2R1cmF0aW9uJykgewogCQkkcmV0dXJuWydkdXJhdGlvbiddID0gcHJvY2Vzc0lucHV0VmFyKCdkdXJhdGlvbicsIEFSR19OVU1FUklDLCAwKTsKQEAgLTQ3NTcsNyArNDgxMyw3IEBACiAJCQkJJHJldHVyblsnZG5zQXJyJ11bXSA9ICRkbnNhZGRyOwogCQkJCSRjbnQrKzsKIAkJCX0KLQkKKwogCQkJIyBjaGVjayB0aGF0IGEgbWFuYWdlbWVudCBub2RlIGNhbiBoYW5kbGUgdGhlIG5ldHdvcmsKIAkJCSRtYXBwZWRtbnMgPSBnZXRNbnNGcm9tSW1hZ2UoJHJldHVyblsnaW1hZ2VpZCddKTsKIAkJCSRtbm5ldHMgPSBjaGVja0F2YWlsYWJsZU5ldHdvcmtzKCRyZXR1cm5bJ2lwYWRkciddKTsKQEAgLTQ5NTIsNyArNTAwOCw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIGNsbC50aW1lc3RhbXAgREVTQyAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZighIGlzX251bWVyaWMoJHJvd1sndGltZXN0YW1wJ10pKQogCQkJcmV0dXJuIE5VTEw7CiAJCWlmKCRyb3dbJ2xvYWRzdGF0ZW5hbWUnXSA9PSAnYWNrbm93bGVkZ2V0aW1lb3V0JykKQEAgLTUwMDgsOCArNTA2NCw4IEBACiAJJGN1ciA9IHRpbWUoKTsKIAlpZihhcnJheV9rZXlfZXhpc3RzKCd0em9mZnNldCcsICRfU0VTU0lPTlsncGVyc2lzdGRhdGEnXSkpCiAJCSRjdXIgKz0gJF9TRVNTSU9OWydwZXJzaXN0ZGF0YSddWyd0em9mZnNldCddICogNjA7Ci0JZm9yKCRlbmQgPSAkY3VyICsgREFZU0FIRUFEICogU0VDSU5EQVk7IAotCSAgICAkY3VyIDwgJGVuZDsgCisJZm9yKCRlbmQgPSAkY3VyICsgREFZU0FIRUFEICogU0VDSU5EQVk7CisJICAgICRjdXIgPCAkZW5kOwogCSAgICAkY3VyICs9IFNFQ0lOREFZKSB7CiAJCSR0bXAgPSBnZXRkYXRlKCRjdXIpOwogCQkkaW5kZXggPSAkY3VyOwpAQCAtNTAyOCwxMCArNTA4NCwxNCBAQAogZnVuY3Rpb24gQUpzZXRJbWFnZVByb2R1Y3Rpb24oKSB7CiAJJHJlcXVlc3RpZCA9IGdldENvbnRpbnVhdGlvblZhcigncmVxdWVzdGlkJyk7CiAJJGRhdGEgPSBnZXRSZXF1ZXN0SW5mbygkcmVxdWVzdGlkKTsKLQlmb3JlYWNoKCRkYXRhWyJyZXNlcnZhdGlvbnMiXSBhcyAkcmVzKSB7Ci0JCWlmKCRyZXNbImZvcmNoZWNrb3V0Il0pIHsKLQkJCSRwcmV0dHlpbWFnZSA9ICRyZXNbInByZXR0eWltYWdlIl07Ci0JCQlicmVhazsKKwlpZigkZGF0YVsnZm9yaW1hZ2luZyddKQorCQkkcHJldHR5aW1hZ2UgPSAkZGF0YVsncmVzZXJ2YXRpb25zJ11bMF1bJ3ByZXR0eWltYWdlJ107CisJZWxzZSB7CisJCWZvcmVhY2goJGRhdGFbInJlc2VydmF0aW9ucyJdIGFzICRyZXMpIHsKKwkJCWlmKCRyZXNbImZvcmNoZWNrb3V0Il0pIHsKKwkJCQkkcHJldHR5aW1hZ2UgPSAkcmVzWyJwcmV0dHlpbWFnZSJdOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCSR0aXRsZSA9ICI8YmlnPjxzdHJvbmc+IiAuIGkoIkNoYW5nZSBUZXN0IEltYWdlIHRvIFByb2R1Y3Rpb24iKSAuICI8L3N0cm9uZz48L2JpZz48YnI+PGJyPlxuIjsKQEAgLTUwNTYsMTAgKzUxMTYsMTQgQEAKIGZ1bmN0aW9uIEFKc3VibWl0U2V0SW1hZ2VQcm9kdWN0aW9uKCkgewogCSRyZXF1ZXN0aWQgPSBnZXRDb250aW51YXRpb25WYXIoJ3JlcXVlc3RpZCcpOwogCSRkYXRhID0gZ2V0UmVxdWVzdEluZm8oJHJlcXVlc3RpZCk7Ci0JZm9yZWFjaCgkZGF0YVsicmVzZXJ2YXRpb25zIl0gYXMgJHJlcykgewotCQlpZigkcmVzWyJmb3JjaGVja291dCJdKSB7Ci0JCQkkcHJldHR5aW1hZ2UgPSAkcmVzWyJwcmV0dHlpbWFnZSJdOwotCQkJYnJlYWs7CisJaWYoJGRhdGFbJ2ZvcmltYWdpbmcnXSkKKwkJJHByZXR0eWltYWdlID0gJGRhdGFbJ3Jlc2VydmF0aW9ucyddWzBdWydwcmV0dHlpbWFnZSddOworCWVsc2UgeworCQlmb3JlYWNoKCRkYXRhWyJyZXNlcnZhdGlvbnMiXSBhcyAkcmVzKSB7CisJCQlpZigkcmVzWyJmb3JjaGVja291dCJdKSB7CisJCQkJJHByZXR0eWltYWdlID0gJHJlc1sicHJldHR5aW1hZ2UiXTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIAkkcXVlcnkgPSAiVVBEQVRFIHJlcXVlc3QgU0VUIHN0YXRlaWQgPSAxNyBXSEVSRSBpZCA9ICRyZXF1ZXN0aWQiOwpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvcmVzb3VyY2UucGhwIGIvd2ViLy5odC1pbmMvcmVzb3VyY2UucGhwCmluZGV4IGNlY2QyYmIuLjA0YTVlMTAgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL3Jlc291cmNlLnBocAorKysgYi93ZWIvLmh0LWluYy9yZXNvdXJjZS5waHAKQEAgLTU3NCw3ICs1NzQsNyBAQAogCQkJICAgICAgIC4gIkZST00gYHskdGhpcy0+cmVzdHlwZX1gICIKIAkJCSAgICAgICAuICJXSEVSRSBpZCA9ICRyc2NpZCI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJG5ld3ZhbCA9IChpbnQpKCEgKGludCkkcm93WydkZWxldGVkJ10pOwogCQkJCSRxdWVyeSA9ICJVUERBVEUgeyR0aGlzLT5yZXN0eXBlfSAiCiAJCQkJICAgICAgIC4gIlNFVCBkZWxldGVkID0gJG5ld3ZhbCAiCkBAIC0xNjI4LDcgKzE2MjgsNyBAQAogCQlpZigkaWQpCiAJCQkkcXVlcnkgLj0gIiBBTkQgaWQgIT0gJGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQlpZihteXNxbF9udW1fcm93cygkcWgpKQorCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzMxLDYgKzE3MzEsMTEgQEAKIAkgICAgICAgICAgICAgICAnYmFzZXJldmlzaW9uaWQnID0+ICRyZXZpZCwKIAkgICAgICAgICAgICAgICAnY2hlY2twb2ludCcgPT4gJGNoZWNrcG9pbnQsCiAJICAgICAgICAgICAgICAgJ2FkZCcgPT4gMSk7CisJJGNkYXRhWydhZGRvbWFpbnZhbHMnXSA9IGFycmF5KCk7CisJaWYoaW5fYXJyYXkoImFkZG9tYWluQWRtaW4iLCAkdXNlclsicHJpdmlsZWdlcyJdKSkgeworCQkkdmFscyA9IGdldFVzZXJSZXNvdXJjZXMoYXJyYXkoJ2FkZG9tYWluQWRtaW4nKSwgYXJyYXkoIm1hbmFnZUdyb3VwIikpOworCQkkY2RhdGFbJ2FkZG9tYWludmFscyddID0gJHZhbHNbJ2FkZG9tYWluJ107CisJfQogCSRjb250ID0gYWRkQ29udGludWF0aW9uc0VudHJ5KCdBSnNhdmVSZXNvdXJjZScsICRjZGF0YSwgU0VDSU5EQVksIDApOwogCSRhcnIgPSBhcnJheSgnbmV3Y29udCcgPT4gJGNvbnQsCiAJICAgICAgICAgICAgICdlbmFibGV1cGRhdGUnID0+IDAsCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9zY2hlZHVsZS5waHAgYi93ZWIvLmh0LWluYy9zY2hlZHVsZS5waHAKaW5kZXggNTdkYTUyMC4uZDA3NjBlOCAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvc2NoZWR1bGUucGhwCisrKyBiL3dlYi8uaHQtaW5jL3NjaGVkdWxlLnBocApAQCAtMTg4LDcgKzE4OCw3IEBACiAJCSAgICAgICAuICAgICAgICJkZWxldGVkID0gMCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkJJGNvbXBzID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRjb21wc1tdID0gJHJvd1snaG9zdG5hbWUnXTsKIAkJaWYoY291bnQoJGNvbXBzKSkKIAkJCSRtc2cgPSAiVGhpcyBzY2hlZHVsZSBjYW5ub3QgYmUgZGVsZXRlZCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgPHN0cm9uZz5jb21wdXRlcnM8L3N0cm9uZz4gaGF2ZSBpdCBzZWxlY3RlZCBhcyB0aGVpciBzY2hlZHVsZTo8YnI+PGJyPlxuIiAuIGltcGxvZGUoIjxicj5cbiIsICRjb21wcyk7CkBAIC00NDUsNyArNDQ1LDcgQEAKIAkJaWYoISBlbXB0eSgkaWQpKQogCQkJJHF1ZXJ5IC49ICIgQU5EIGlkICE9ICRpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZihteXNxbF9udW1fcm93cygkcWgpKQorCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9zZWNyZXRzLWRlZmF1bHQucGhwIGIvd2ViLy5odC1pbmMvc2VjcmV0cy1kZWZhdWx0LnBocAppbmRleCBhYmFhMTcxLi5kNmUzYjBiIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9zZWNyZXRzLWRlZmF1bHQucGhwCisrKyBiL3dlYi8uaHQtaW5jL3NlY3JldHMtZGVmYXVsdC5waHAKQEAgLTIxLDcgKzIxLDcgQEAKICR2Y2x1c2VybmFtZSA9ICd2Y2x1c2VyJzsgICAgICAjIHVzZXJuYW1lIHRvIGFjY2VzcyBkYXRhYmFzZQogJHZjbHBhc3N3b3JkID0gJyc7ICAgICAgIyBwYXNzd29yZCB0byBhY2Nlc3MgZGF0YWJhc2UKIAotJGNyeXB0a2V5ICA9ICcnOyAjIGdlbmVyYXRlIHdpdGggIm9wZW5zc2wgcmFuZCAzMiB8IGJhc2U2NCIKKyRjcnlwdGtleSA9ICcnOyAjIGdlbmVyYXRlIHdpdGggIm9wZW5zc2wgcmFuZCAzMiB8IGJhc2U2NCIKIAogJHBlbWtleSA9ICcnOyAjIHJhbmRvbSBwYXNzcGhyYXNlIC0gd29uJ3QgZXZlciBoYXZlIHRvIHR5cGUgaXQgc28gbWFrZSBpdCBsb25nCiA/PgpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvc2VydmVycHJvZmlsZXMucGhwIGIvd2ViLy5odC1pbmMvc2VydmVycHJvZmlsZXMucGhwCmluZGV4IDk1MTc4OWUuLjlkOWFkMzcgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL3NlcnZlcnByb2ZpbGVzLnBocAorKysgYi93ZWIvLmh0LWluYy9zZXJ2ZXJwcm9maWxlcy5waHAKQEAgLTUyMywxMCArNTIzLDEwIEBACiAJCXNlbmRKU09OKCRkYXRhKTsKIAkJcmV0dXJuOwogCX0KLQkkbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnbmFtZSddKTsKLQkkZGVzYyA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZGVzYyddKTsKLQkkZml4ZWRJUCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZml4ZWRJUCddKTsKLQkkZml4ZWRNQUMgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2ZpeGVkTUFDJ10pOworCSRuYW1lID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ25hbWUnXSk7CisJJGRlc2MgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZGVzYyddKTsKKwkkZml4ZWRJUCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydmaXhlZElQJ10pOworCSRmaXhlZE1BQyA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydmaXhlZE1BQyddKTsKIAkkcmV0ID0gYXJyYXkoKTsKIAlpZigkZGF0YVsncHJvZmlsZWlkJ10gPT0gNzAwMDApIHsKIAkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIHNlcnZlcnByb2ZpbGUgIgpAQCAtNjI2LDcgKzYyNiw3IEBACiAJfQogCSRxdWVyeSA9ICJERUxFVEUgRlJPTSBzZXJ2ZXJwcm9maWxlIFdIRVJFIGlkID0gJHByb2ZpbGVpZCI7CiAJZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JJHJvd3MgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCk7CisJJHJvd3MgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygpOwogCWlmKCRyb3dzID09IDApIHsKIAkJJGRhdGEgPSBhcnJheSgnZXJyb3InID0+IDEsCiAJCSAgICAgICAgICAgICAgJ21zZycgPT4gJ0ZhaWxlZCB0byBkZWxldGUgc2VsZWN0ZWQgc2VydmVyIHByb2ZpbGUnKTsKQEAgLTg2NCw3ICs4NjQsNyBAQAogCX0KIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkZ3JvdXBzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRncm91cHNbJHJvd1snaWQnXV0gPSAkcm93WyduYW1lJ107CiAJJF9TRVNTSU9OWyd1c2Vyc2Vzc2lvbmRhdGEnXVska2V5XSA9ICRncm91cHM7CiAJcmV0dXJuICRncm91cHM7CkBAIC0xMTM4LDQzICsxMTM4LDQgQEAKIAlzZW5kSlNPTigkYXJyKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLwotLy8vIFxmbiBBSmZldGNoUm91dGVyRE5TKCkKLS8vLwotLy8vIFxicmllZiBnZXQgcm91dGVyIGFuZCBkbnMgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gSVAgYWRkcmVzcwotLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotZnVuY3Rpb24gQUpmZXRjaFJvdXRlckROUygpIHsKLQkkZGF0YSA9IGFycmF5KCdzdGF0dXMnID0+ICdub25lJyk7Ci0JJHBhZ2UgPSBwcm9jZXNzSW5wdXRWYXIoJ3BhZ2UnLCBBUkdfU1RSSU5HKTsKLQlpZigkcGFnZSAhPSAnZGVwbG95JyAmJiAkcGFnZSAhPSAncHJvZmlsZScpIHsKLQkJc2VuZEpTT04oJGRhdGEpOwotCQlyZXR1cm47Ci0JfQotCSRpcGFkZHIgPSBwcm9jZXNzSW5wdXRWYXIoJ2lwYWRkcicsIEFSR19TVFJJTkcpOwotCSMgdmFsaWRhdGUgZml4ZWQgSVAgYWRkcmVzcwotCWlmKCEgdmFsaWRhdGVJUHY0YWRkcigkaXBhZGRyKSkgewotCQlzZW5kSlNPTigkZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0JIyB2YWxpZGF0ZSBuZXRtYXNrCi0JJG5ldG1hc2sgPSBwcm9jZXNzSW5wdXRWYXIoJ25ldG1hc2snLCBBUkdfU1RSSU5HKTsKLQkkYm5ldG1hc2sgPSBpcDJsb25nKCRuZXRtYXNrKTsKLQlpZighIHByZWdfbWF0Y2goJy9eWzFdKzBbXjFdKyQvJywgc3ByaW50ZignJTAzMmInLCAkYm5ldG1hc2spKSkgewotCQlzZW5kSlNPTigkZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0JJG5ldHdvcmsgPSBpcDJsb25nKCRpcGFkZHIpICYgJGJuZXRtYXNrOwotCSRhdmFpbG5ldHMgPSBnZXRWYXJpYWJsZSgnZml4ZWRJUGF2YWlsbmV0d29ya3MnLCBhcnJheSgpKTsKLQkka2V5ID0gbG9uZzJpcCgkbmV0d29yaykgLiAiLyRuZXRtYXNrIjsKLQlpZihhcnJheV9rZXlfZXhpc3RzKCRrZXksICRhdmFpbG5ldHMpKSB7Ci0JCSRkYXRhID0gYXJyYXkoJ3N0YXR1cycgPT4gJ3N1Y2Nlc3MnLAotCQkgICAgICAgICAgICAgICdwYWdlJyA9PiAkcGFnZSwKLQkJICAgICAgICAgICAgICAncm91dGVyJyA9PiAkYXZhaWxuZXRzWyRrZXldWydyb3V0ZXInXSwKLQkJICAgICAgICAgICAgICAnZG5zJyA9PiBpbXBsb2RlKCcsJywgJGF2YWlsbmV0c1ska2V5XVsnZG5zJ10pKTsKLQl9Ci0Jc2VuZEpTT04oJGRhdGEpOwotfQotCiA/PgpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvc2l0ZWNvbmZpZy5waHAgYi93ZWIvLmh0LWluYy9zaXRlY29uZmlnLnBocAppbmRleCA5NmFlZGRhLi5iZGE2NWYyIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9zaXRlY29uZmlnLnBocAorKysgYi93ZWIvLmh0LWluYy9zaXRlY29uZmlnLnBocApAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAkJJHRoaXMtPnZhbHVlcyA9IGFycmF5KCk7CiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIGhlbHBhZGRyZXNzIEZST00gYWZmaWxpYXRpb24gT1JERVIgQlkgbmFtZSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSR0aGlzLT52YWx1ZXNbJHJvd1snaWQnXV0gPSAkcm93WydoZWxwYWRkcmVzcyddOwogCX0KIApAQCAtMTMxMCwxOCArMTMxMCwxOCBAQAogCS8vLwogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJZnVuY3Rpb24gc2V0VmFsdWUoJGFmZmlsaWQsICR2YWx1ZSkgewotCQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkJaWYoJHZhbHVlID09PSBOVUxMKQogCQkJJG5ld3ZhbCA9ICdOVUxMJzsKIAkJZWxzZSB7Ci0JCQkkZXNjX3ZhbHVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2YWx1ZSk7CisJCQkkZXNjX3ZhbHVlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHZhbHVlKTsKIAkJCSRuZXd2YWwgPSAiJyRlc2NfdmFsdWUnIjsKIAkJfQogCQkkcXVlcnkgPSAiVVBEQVRFIGFmZmlsaWF0aW9uICIKIAkJICAgICAgIC4gIlNFVCBoZWxwYWRkcmVzcyA9ICRuZXd2YWwgIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKLQkJJHJjID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCQkkcmMgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJaWYoJHJjID09IDEpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CkBAIC0xMzM5LDEyICsxMzM5LDEyIEBACiAJLy8vCiAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAlmdW5jdGlvbiBkZWxldGVWYWx1ZSgkYWZmaWxpZCkgewotCQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkJJHF1ZXJ5ID0gIlVQREFURSBhZmZpbGlhdGlvbiAiCiAJCSAgICAgICAuICJTRVQgaGVscGFkZHJlc3MgPSBOVUxMICIKIAkJICAgICAgIC4gIldIRVJFIGlkID0gJGFmZmlsaWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSk7Ci0JCSRyYyA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJJHJjID0gbXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCk7CiAJCWlmKCRyYyA9PSAxKQogCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwpAQCAtMTM5MSw3ICsxMzkxLDcgQEAKIAkJJHRoaXMtPnZhbHVlcyA9IGFycmF5KCk7CiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIHNpdGV3d3dhZGRyZXNzIEZST00gYWZmaWxpYXRpb24gT1JERVIgQlkgbmFtZSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSR0aGlzLT52YWx1ZXNbJHJvd1snaWQnXV0gPSAkcm93WydzaXRld3d3YWRkcmVzcyddOwogCX0KIApAQCAtMTQwOSwxOCArMTQwOSwxOCBAQAogCS8vLwogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJZnVuY3Rpb24gc2V0VmFsdWUoJGFmZmlsaWQsICR2YWx1ZSkgewotCQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkJaWYoJHZhbHVlID09PSBOVUxMKQogCQkJJG5ld3ZhbCA9ICdOVUxMJzsKIAkJZWxzZSB7Ci0JCQkkZXNjX3ZhbHVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2YWx1ZSk7CisJCQkkZXNjX3ZhbHVlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHZhbHVlKTsKIAkJCSRuZXd2YWwgPSAiJyRlc2NfdmFsdWUnIjsKIAkJfQogCQkkcXVlcnkgPSAiVVBEQVRFIGFmZmlsaWF0aW9uICIKIAkJICAgICAgIC4gIlNFVCBzaXRld3d3YWRkcmVzcyA9ICRuZXd2YWwgIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKLQkJJHJjID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCQkkcmMgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJaWYoJHJjID09IDEpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CkBAIC0xNDM4LDEyICsxNDM4LDEyIEBACiAJLy8vCiAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAlmdW5jdGlvbiBkZWxldGVWYWx1ZSgkYWZmaWxpZCkgewotCQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkJJHF1ZXJ5ID0gIlVQREFURSBhZmZpbGlhdGlvbiAiCiAJCSAgICAgICAuICJTRVQgc2l0ZXd3d2FkZHJlc3MgPSBOVUxMICIKIAkJICAgICAgIC4gIldIRVJFIGlkID0gJGFmZmlsaWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSk7Ci0JCSRyYyA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJJHJjID0gbXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCk7CiAJCWlmKCRyYyA9PSAxKQogCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJICAgICAgIC4gIkxFRlQgSk9JTiB3aW5LTVMgayBPTiAoay5hZmZpbGlhdGlvbmlkID0gYS5pZCkgIgogCQkgICAgICAgLiAiT1JERVIgQlkgYS5pZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZihpc19udWxsKCRyb3dbJ2FkZHJlc3MnXSkgJiYgaXNfbnVsbCgkcm93Wydwb3J0J10pKSB7CiAJCQkJJHRoaXMtPnZhbHVlc1skcm93WydpZCddXSA9IE5VTEw7CiAJCQkJY29udGludWU7CkBAIC0xNTI5LDcgKzE1MjksNyBAQAogCS8vLwogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJZnVuY3Rpb24gc2V0VmFsdWUoJGFmZmlsaWQsICR2YWx1ZSkgewotCQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKIAkJJHRoaXMtPmdldFZhbHVlcygpOwogCQkkdmFsdWVzID0gZXhwbG9kZSgnLCcsICR2YWx1ZSk7CiAJCSMgY3JlYXRlIGRhdGFzdHJ1Y3R1cmUgb2YgbmV3bHkgc3VibWl0dGVkIGhvc3RzCkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogCQkjIGluc2VydCBuZXcgaG9zdHMKIAkJJHZhbHVlcyA9IGFycmF5KCk7CiAJCWZvcmVhY2goJGFkZHMgYXMgJGhvc3QgPT4gJHBvcnQpIHsKLQkJCSRlc2NfaG9zdCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkaG9zdCk7CisJCQkkZXNjX2hvc3QgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkaG9zdCk7CiAJCQkkdmFsdWVzW10gPSAiKCRhZmZpbGlkLCAnJGVzY19ob3N0JywgJHBvcnQpIjsKIAkJfQogCQkkcmMxID0gMTsKQEAgLTE1OTcsMjUgKzE1OTcsMjUgQEAKIAkJCSAgICAgICAuICIoYWZmaWxpYXRpb25pZCwgYWRkcmVzcywgcG9ydCkgIgogCQkJICAgICAgIC4gIlZBTFVFUyAiIC4gaW1wbG9kZSgnLCcsICR2YWx1ZXMpOwogCQkJZG9RdWVyeSgkcXVlcnkpOwotCQkJJHJjMSA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJCSRyYzEgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJfQogCQkjIG1ha2UgY2hhbmdlcwogCQkkcmMyID0gMTsKIAkJZm9yZWFjaCgkY2hhbmdlcyBhcyAkaG9zdCA9PiAkcG9ydCkgewotCQkJJGVzY19ob3N0ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRob3N0KTsKKwkJCSRlc2NfaG9zdCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRob3N0KTsKIAkJCSRxdWVyeSA9ICJVUERBVEUgd2luS01TICIKIAkJCSAgICAgICAuICJTRVQgcG9ydCA9ICRwb3J0ICIKIAkJCSAgICAgICAuICJXSEVSRSBhZGRyZXNzID0gJyRlc2NfaG9zdCcgQU5EICIKIAkJCSAgICAgICAuICAgICAgICJhZmZpbGlhdGlvbmlkID0gJGFmZmlsaWQiOwogCQkJZG9RdWVyeSgkcXVlcnkpOwotCQkJJHRtcCA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJCSR0bXAgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJCWlmKCRyYzIpCiAJCQkJJHJjMiA9ICR0bXA7CiAJCX0KIAkJIyBkZWxldGUgb2xkIGhvc3RzCiAJCSR2YWx1ZXMgPSBhcnJheSgpOwogCQlmb3JlYWNoKCRyZW1zIGFzICRob3N0ID0+ICRwb3J0KSB7Ci0JCQkkZXNjX2hvc3QgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGhvc3QpOworCQkJJGVzY19ob3N0ID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGhvc3QpOwogCQkJJHZhbHVlc1tdID0gIihhZmZpbGlhdGlvbmlkID0gJGFmZmlsaWQgQU5EICIKIAkJCSAgICAgICAgICAuICJhZGRyZXNzID0gJyRlc2NfaG9zdCcgQU5EICIKIAkJCSAgICAgICAgICAuICJwb3J0ID0gJHBvcnQpIjsKQEAgLTE2MjUsNyArMTYyNSw3IEBACiAJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gd2luS01TICIKIAkJCSAgICAgICAuICJXSEVSRSAiIC4gaW1wbG9kZSgnIE9SICcsICR2YWx1ZXMpOwogCQkJZG9RdWVyeSgkcXVlcnkpOwotCQkJJHJjMyA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJCSRyYzMgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJfQogCQlpZigkcmMxID09IDAgfHwgJHJjMiA9PSAwIHx8ICRyYzMgPT0gMCkKIAkJCXJldHVybiAwOwpAQCAtMTY0NCwxMSArMTY0NCwxMSBAQAogCS8vLwogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJZnVuY3Rpb24gZGVsZXRlVmFsdWUoJGFmZmlsaWQpIHsKLQkJZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKKwkJZ2xvYmFsICRteXNxbGlfbGlua192Y2w7CiAJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSB3aW5LTVMgIgogCQkgICAgICAgLiAiV0hFUkUgYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIjsKIAkJZG9RdWVyeSgkcXVlcnkpOwotCQkkcmMgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCk7CisJCSRyYyA9IG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpOwogCQlpZigkcmMgPT0gMSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKQEAgLTE3MTUsNyArMTcxNSw3IEBACiAJCSR0aGlzLT52YWx1ZXMgPSBhcnJheSgpOwogCQkkcXVlcnkgPSAiU0VMRUNUIGlkLCB0aGVtZSBGUk9NIGFmZmlsaWF0aW9uIE9SREVSIEJZIG5hbWUiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdGhpcy0+dmFsdWVzWyRyb3dbJ2lkJ11dID0gJHJvd1sndGhlbWUnXTsKIAl9CiAKQEAgLTE3MzMsMTMgKzE3MzMsMTMgQEAKIAkvLy8KIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCWZ1bmN0aW9uIHNldFZhbHVlKCRhZmZpbGlkLCAkdmFsdWUpIHsKLQkJZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKLQkJJGVzY192YWx1ZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFsdWUpOworCQlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKKwkJJGVzY192YWx1ZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR2YWx1ZSk7CiAJCSRxdWVyeSA9ICJVUERBVEUgYWZmaWxpYXRpb24gIgogCQkgICAgICAgLiAiU0VUIHRoZW1lID0gJyRlc2NfdmFsdWUnICIKIAkJICAgICAgIC4gIldIRVJFIGlkID0gJGFmZmlsaWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSk7Ci0JCSRyYyA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwkJJHJjID0gbXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCk7CiAJCWlmKCRyYyA9PSAxKQogCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwpAQCAtMTc1NywxMiArMTc1NywxMiBAQAogCS8vLwogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJZnVuY3Rpb24gZGVsZXRlVmFsdWUoJGFmZmlsaWQpIHsKLQkJZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKKwkJZ2xvYmFsICRteXNxbGlfbGlua192Y2w7CiAJCSRxdWVyeSA9ICJVUERBVEUgYWZmaWxpYXRpb24gIgogCQkgICAgICAgLiAiU0VUIHRoZW1lID0gTlVMTCAiCiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICRhZmZpbGlkIjsKIAkJZG9RdWVyeSgkcXVlcnkpOwotCQkkcmMgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCk7CisJCSRyYyA9IG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpOwogCQlpZigkcmMgPT0gMSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKQEAgLTE4MzQsNyArMTgzNCw3IEBACiAJCSAgICAgICAuICJXSEVSRSBuYW1lIE5PVCBJTiAoJ0dsb2JhbCcsICdMb2NhbCcpICIKIAkJICAgICAgIC4gIk9SREVSIEJZIG5hbWUiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkdGhpcy0+dmFsdWVzWyRyb3dbJ2lkJ11dID0gKGludCkoISAkcm93WydzaGlib25seSddKTsKIAl9CiAKQEAgLTE4NTIsMTMgKzE4NTIsMTMgQEAKIAkvLy8KIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCWZ1bmN0aW9uIHNldFZhbHVlKCRhZmZpbGlkLCAkdmFsdWUpIHsKLQkJZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKKwkJZ2xvYmFsICRteXNxbGlfbGlua192Y2w7CiAJCSR2YWx1ZSA9IChpbnQpKCEgJHZhbHVlKTsKIAkJJHF1ZXJ5ID0gIlVQREFURSBhZmZpbGlhdGlvbiAiCiAJCSAgICAgICAuICJTRVQgc2hpYm9ubHkgPSAkdmFsdWUgIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKLQkJJHJjID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCQkkcmMgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJaWYoJHJjID09IDEpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CkBAIC0xOTQ0LDcgKzE5NDQsNyBAQAogCQkgICAgICAgLiAiV0hFUkUgbmFtZSBOT1QgSU4gKCdHbG9iYWwnLCAnTG9jYWwnKSAiCiAJCSAgICAgICAuICJPUkRFUiBCWSBuYW1lIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHRoaXMtPnZhbHVlc1skcm93WydpZCddXSA9ICRyb3dbJ3NoaWJuYW1lJ107CiAJfQogCkBAIC0xOTYyLDE4ICsxOTYyLDE4IEBACiAJLy8vCiAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAlmdW5jdGlvbiBzZXRWYWx1ZSgkYWZmaWxpZCwgJHZhbHVlKSB7Ci0JCWdsb2JhbCAkbXlzcWxfbGlua192Y2w7CisJCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsOwogCQlpZigkdmFsdWUgPT09IE5VTEwpCiAJCQkkbmV3dmFsID0gJ05VTEwnOwogCQllbHNlIHsKLQkJCSRlc2NfdmFsdWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhbHVlKTsKKwkJCSRlc2NfdmFsdWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdmFsdWUpOwogCQkJJG5ld3ZhbCA9ICInJGVzY192YWx1ZSciOwogCQl9CiAJCSRxdWVyeSA9ICJVUERBVEUgYWZmaWxpYXRpb24gIgogCQkgICAgICAgLiAiU0VUIHNoaWJuYW1lID0gJG5ld3ZhbCAiCiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICRhZmZpbGlkIjsKIAkJZG9RdWVyeSgkcXVlcnkpOwotCQkkcmMgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCk7CisJCSRyYyA9IG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpOwogCQlpZigkcmMgPT0gMSkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKQEAgLTE5OTEsMTIgKzE5OTEsMTIgQEAKIAkvLy8KIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCWZ1bmN0aW9uIGRlbGV0ZVZhbHVlKCRhZmZpbGlkKSB7Ci0JCWdsb2JhbCAkbXlzcWxfbGlua192Y2w7CisJCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsOwogCQkkcXVlcnkgPSAiVVBEQVRFIGFmZmlsaWF0aW9uICIKIAkJICAgICAgIC4gIlNFVCBzaGlibmFtZSA9IE5VTEwgIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKLQkJJHJjID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCQkkcmMgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJaWYoJHJjID09IDEpCiAJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CkBAIC0yOTczLDcgKzI5NzMsNyBAQAogCQkJc2VuZEpTT04oJGFycik7CiAJCQlyZXR1cm47CiAJCX0KLQkJJF9uZXd2YWwgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhbCk7CisJCSRfbmV3dmFsID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJG5ld3ZhbCk7CiAJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBhZmZpbGlhdGlvbiAobmFtZSkgVkFMVUVTICgnJF9uZXd2YWwnKSI7CiAJCWRvUXVlcnkoJHF1ZXJ5KTsKIAkJJGFyciA9IGFycmF5KCdzdGF0dXMnID0+ICdzdWNjZXNzJywKQEAgLTI5OTgsNyArMjk5OCw3IEBACiAJCWZvcmVhY2goJHRhYmxlcyBhcyAkdGFibGUpIHsKIAkJCSRxdWVyeSA9ICJTRUxFQ1QgYWZmaWxpYXRpb25pZCBGUk9NICR0YWJsZSBXSEVSRSBhZmZpbGlhdGlvbmlkID0gJGtleSBMSU1JVCAxIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKKwkJCWlmKG15c3FsaV9udW1fcm93cygkcWgpKSB7CiAJCQkJJHVzZWQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzA1Miw3ICszMDUyLDcgQEAKIAlmdW5jdGlvbiB1cGRhdGVWYWx1ZSgka2V5LCAkdmFsKSB7CiAJCSR0bXAgPSBleHBsb2RlKCd8JywgJGtleSk7CiAJCSRrZXkgPSAkdG1wWzFdOwotCQkkX3ZhbCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFsKTsKKwkJJF92YWwgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdmFsKTsKIAkJJHF1ZXJ5ID0gIlVQREFURSBhZmZpbGlhdGlvbiBTRVQgbmFtZSA9ICckX3ZhbCcgV0hFUkUgaWQgPSAka2V5IjsKIAkJZG9RdWVyeSgkcXVlcnkpOwogCX0KQEAgLTMxMTUsNyArMzExNSw3IEBACiAJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGdsb2JhbG9wdHMpIHsKIAkJJHRoaXMtPmJhc2VjZGF0YVsnb2JqJ10gPSAkdGhpczsKIAkJJHRoaXMtPm5hbWUgPSBfKCdNZXNzYWdlcycpOwotCQkkdGhpcy0+ZGVzYyA9IHNwcmludGYoXygiVGhpcyBzZWN0aW9uIGFsbG93cyBmb3IgY29uZmlndXJhdGlvbiBvZiBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXJzIGFuZCBhZG1pbmlzdHJhdG9ycyBhYm91dCB0aGluZ3Mgc3VjaCBhcyByZXNlcnZhdGlvbnMgYW5kIGltYWdlIG1hbmFnZW1lbnQuIEV2ZXJ5IG1lc3NhZ2UgaGFzIGEgZGVmYXVsdC4gQWRkaXRpb25hbGx5LCBzZXBhcmF0ZSBtZXNzYWdlcyBjYW4gYmUgY29uZmlndXJlZCBmb3IgZWFjaCBhZmZpbGlhdGlvbi4gTW9zdCBvZiB0aGUgbWVzc2FnZXMgd2lsbCBoYXZlIHBhcnRzIHRoYXQgYXJlIGluIHNxdWFyZSBicmFja2V0cy4gVGhlc2UgcGFydHMgd2lsbCBoYXZlIGRhdGEgc3Vic3RpdHV0ZWQgZm9yIHRoZW0gYmVmb3JlIHRoZSBtZXNzYWdlIGlzIHNlbnQuIEEgbGlzdCBvZiB3aGF0IGNhbiBiZSB1c2VkIGluIHNxdWVhcmUgYnJhY2tldHMgY2FuIGJlIGZvdW5kIGF0IHRoZSA8YSBocmVmPVwiJXNcIj5BcGFjaGUgVkNMIHdlYiBzaXRlPC9hPi4gU29tZSBtZXNzYWdlcyBhbHNvIGhhdmUgYSBzaG9ydCBmb3JtIHRoYXQgbWF5IGJlIHNlbnQgc3VjaCBhcyBpbiB0aGUgZm9ybSBvZiBhIHBvcHVwIHdpdGhpbiBhIHJlc2VydmF0aW9uIHdoZW4gdGhlIHJlc2VydmF0aW9uIGlzIGFib3V0IHRvIGVuZC4iKSwgImh0dHA6Ly92Y2wuYXBhY2hlLm9yZy9kb2NzL21lc3NhZ2Vfc3Vic3RpdHV0aW9ucy5odG1sIik7CisJCSR0aGlzLT5kZXNjID0gc3ByaW50ZihfKCJUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciBjb25maWd1cmF0aW9uIG9mIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgdG8gdXNlcnMgYW5kIGFkbWluaXN0cmF0b3JzIGFib3V0IHRoaW5ncyBzdWNoIGFzIHJlc2VydmF0aW9ucyBhbmQgaW1hZ2UgbWFuYWdlbWVudC4gRXZlcnkgbWVzc2FnZSBoYXMgYSBkZWZhdWx0LiBBZGRpdGlvbmFsbHksIHNlcGFyYXRlIG1lc3NhZ2VzIGNhbiBiZSBjb25maWd1cmVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiBNb3N0IG9mIHRoZSBtZXNzYWdlcyB3aWxsIGhhdmUgcGFydHMgdGhhdCBhcmUgaW4gc3F1YXJlIGJyYWNrZXRzLiBUaGVzZSBwYXJ0cyB3aWxsIGhhdmUgZGF0YSBzdWJzdGl0dXRlZCBmb3IgdGhlbSBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgc2VudC4gQSBsaXN0IG9mIHdoYXQgY2FuIGJlIHVzZWQgaW4gc3F1YXJlIGJyYWNrZXRzIGNhbiBiZSBmb3VuZCBhdCB0aGUgPGEgaHJlZj1cIiVzXCI+QXBhY2hlIFZDTCB3ZWIgc2l0ZTwvYT4uIFNvbWUgbWVzc2FnZXMgYWxzbyBoYXZlIGEgc2hvcnQgZm9ybSB0aGF0IG1heSBiZSBzZW50IHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBwb3B1cCB3aXRoaW4gYSByZXNlcnZhdGlvbiB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBhYm91dCB0byBlbmQuIiksICJodHRwOi8vdmNsLmFwYWNoZS5vcmcvZG9jcy9tZXNzYWdlX3N1YnN0aXR1dGlvbnMuaHRtbCIpOwogCQkkdGhpcy0+YWZmaWxzID0gZ2V0QWZmaWxpYXRpb25zKCk7CiAJCSR0aGlzLT51bml0cyA9IGFycmF5KCk7CiAJCSR0aGlzLT5iYXNla2V5cyA9IGFycmF5KCk7CkBAIC0zMTM0LDYgKzMxMzQsMTUgQEAKIAogCQkJaWYoJGtleXBhcnRzWzBdID09ICdhZG1pbm1lc3NhZ2UnKQogCQkJCSRrZXlwYXJ0c1syXSA9ICdHbG9iYWwnOworCQkJZm9yZWFjaChhcnJheSgnbWVzc2FnZScsICdzdWJqZWN0JywgJ3Nob3J0X21lc3NhZ2UnKSBhcyAkdHlwZSkgeworCQkJCWlmKCEgaXNzZXQoJGl0ZW1bJHR5cGVdKSkKKwkJCQkJY29udGludWU7CisJCQkJJHRlc3QgPSBzdHJpcF90YWdzKCRpdGVtWyR0eXBlXSk7CisJCQkJaWYoJHRlc3QgIT0gJGl0ZW1bJHR5cGVdKSB7CisJCQkJCSRpdGVtWydEQm1hbmFnZWRIVE1MJ10gPSAxOworCQkJCQkkaXRlbVskdHlwZV0gPSAnJzsKKwkJCQl9CisJCQl9CiAJCQkkdGhpcy0+dW5pdHNbJGtdWyRrZXlwYXJ0c1syXV0gPSAkaXRlbTsKIAkJfQogCQl1YXNvcnQoJHRoaXMtPmJhc2VrZXlzLCAic29ydEtlZXBJbmRleCIpOwpAQCAtMzM5NSw3ICszNDA0LDcgQEAKIAkJICAgICAgIC4gICAgICAgInZhbHVlIExJS0UgJyVpbnZhbGlkZmllbGRzJSciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRpbnZhbGlkcyA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJJGRhdGEgPSBTcHljOjpZQU1MTG9hZCgkcm93Wyd2YWx1ZSddKTsKIAkJCWlmKGFycmF5X2tleV9leGlzdHMoJ2ludmFsaWRmaWVsZHMnLCAkZGF0YSkpIHsKIAkJCQkkaW52YWxpZHNbJHJvd1snbmFtZSddXSA9ICRkYXRhWydpbnZhbGlkZmllbGRzJ107CmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9zaXRlbWFpbnRlbmFuY2UucGhwIGIvd2ViLy5odC1pbmMvc2l0ZW1haW50ZW5hbmNlLnBocAppbmRleCA2ZGFkNzczLi5mZTgzM2RjIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy9zaXRlbWFpbnRlbmFuY2UucGhwCisrKyBiL3dlYi8uaHQtaW5jL3NpdGVtYWludGVuYW5jZS5waHAKQEAgLTI3OSw4ICsyNzksOCBAQAogCQlyZXR1cm47CiAJfQogCi0JJHJlYXNvbiA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsncmVhc29uJ10pOwotCSR1c2VybWVzc2FnZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsndXNlcm1lc3NhZ2UnXSk7CisJJHJlYXNvbiA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydyZWFzb24nXSk7CisJJHVzZXJtZXNzYWdlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3VzZXJtZXNzYWdlJ10pOwogCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBzaXRlbWFpbnRlbmFuY2UgIgogCSAgICAgICAuICAgICAgICAiKHN0YXJ0LCAiCiAJICAgICAgIC4gICAgICAgICJlbmQsICIKQEAgLTQxMyw4ICs0MTMsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JJHJlYXNvbiA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsncmVhc29uJ10pOwotCSR1c2VybWVzc2FnZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsndXNlcm1lc3NhZ2UnXSk7CisJJHJlYXNvbiA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhWydyZWFzb24nXSk7CisJJHVzZXJtZXNzYWdlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ3VzZXJtZXNzYWdlJ10pOwogCSRxdWVyeSA9ICJVUERBVEUgc2l0ZW1haW50ZW5hbmNlICIKIAkgICAgICAgLiAiU0VUIHN0YXJ0ID0gJ3skZGF0YVsnc3RhcnRkdCddfScsICIKIAkgICAgICAgLiAgICAgImVuZCA9ICd7JGRhdGFbJ2VuZGR0J119JywgIgpkaWZmIC0tZ2l0IGEvd2ViLy5odC1pbmMvc3RhdGVzLnBocCBiL3dlYi8uaHQtaW5jL3N0YXRlcy5waHAKaW5kZXggYWU0MjI3Yy4uMmU3Y2IwNiAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvc3RhdGVzLnBocAorKysgYi93ZWIvLmh0LWluYy9zdGF0ZXMucGhwCkBAIC0xNTAsOCArMTUwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICdBSnJlbUdyb3VwRnJvbVByb2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ0FKYWRkUHJvZmlsZVRvR3JvdXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ0FKcmVtUHJvZmlsZUZyb21Hcm91cCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnQUpzZXJ2ZXJQcm9maWxlU3RvcmVEYXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdBSmZldGNoUm91dGVyRE5TJywqLworICAgICAgICAgICAgICAgICAgICAgICAgJ0FKc2VydmVyUHJvZmlsZVN0b3JlRGF0YScsKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICdBSmZldGNoUm91dGVyRE5TJywKICAgICAgICAgICAgICAgICAgICAgICAgICdBSmNvbmZpcm1EZWxldGVSZXF1ZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICdBSnN1Ym1pdERlbGV0ZVJlcXVlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ0FKY29uZmlybVJlbW92ZVJlcXVlc3QnLApAQCAtMjU3LDYgKzI1Nyw3IEBACiAkYWN0aW9uc1snbW9kZSddWydzZW5kUkRQZmlsZSddID0gInNlbmRSRFBmaWxlIjsKICRhY3Rpb25zWydtb2RlJ11bJ0FKY2hlY2tDb25uZWN0VGltZW91dCddID0gIkFKY2hlY2tDb25uZWN0VGltZW91dCI7CiAkYWN0aW9uc1snbW9kZSddWydBSnByZXZpZXdDbGlja1Rocm91Z2gnXSA9ICJBSnByZXZpZXdDbGlja1Rocm91Z2giOworJGFjdGlvbnNbJ21vZGUnXVsnQUpmZXRjaFJvdXRlckROUyddID0gIkFKZmV0Y2hSb3V0ZXJETlMiOwogIyRhY3Rpb25zWydtb2RlJ11bJ2Nvbm5lY3RNaW5kdGVybSddID0gImNvbm5lY3RNaW5kdGVybSI7CiAjJGFjdGlvbnNbJ21vZGUnXVsnY29ubmVjdFJEUGFwcGxldCddID0gImNvbm5lY3RSRFBhcHBsZXQiOwogJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKbmV3UmVxdWVzdCddID0gInJlc2VydmF0aW9ucyI7CkBAIC0yODEsNiArMjgyLDcgQEAKICRhY3Rpb25zWydwYWdlcyddWydzZW5kUkRQZmlsZSddID0gInJlc2VydmF0aW9ucyI7CiAkYWN0aW9uc1sncGFnZXMnXVsnQUpjaGVja0Nvbm5lY3RUaW1lb3V0J10gPSAicmVzZXJ2YXRpb25zIjsKICRhY3Rpb25zWydwYWdlcyddWydBSnByZXZpZXdDbGlja1Rocm91Z2gnXSA9ICJyZXNlcnZhdGlvbnMiOworJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKZmV0Y2hSb3V0ZXJETlMnXSA9ICJyZXNlcnZhdGlvbnMiOwogIyRhY3Rpb25zWydwYWdlcyddWydjb25uZWN0TWluZHRlcm0nXSA9ICJjdXJyZW50UmVzZXJ2YXRpb25zIjsKICMkYWN0aW9uc1sncGFnZXMnXVsnY29ubmVjdFJEUGFwcGxldCddID0gImN1cnJlbnRSZXNlcnZhdGlvbnMiOwogCkBAIC0zODYsNyArMzg4LDYgQEAKICRhY3Rpb25zWydtb2RlJ11bJ0FKYWRkUHJvZmlsZVRvR3JvdXAnXSA9ICJBSmFkZFByb2ZpbGVUb0dyb3VwIjsKICRhY3Rpb25zWydtb2RlJ11bJ0FKcmVtUHJvZmlsZUZyb21Hcm91cCddID0gIkFKcmVtUHJvZmlsZUZyb21Hcm91cCI7CiAkYWN0aW9uc1snbW9kZSddWydBSnNlcnZlclByb2ZpbGVTdG9yZURhdGEnXSA9ICJBSnNlcnZlclByb2ZpbGVTdG9yZURhdGEiOwotJGFjdGlvbnNbJ21vZGUnXVsnQUpmZXRjaFJvdXRlckROUyddID0gIkFKZmV0Y2hSb3V0ZXJETlMiOwogJGFjdGlvbnNbJ3BhZ2VzJ11bJ3NlcnZlclByb2ZpbGVzJ10gPSAic2VydmVyUHJvZmlsZXMiOwogJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKc2F2ZVNlcnZlclByb2ZpbGUnXSA9ICJzZXJ2ZXJQcm9maWxlcyI7CiAkYWN0aW9uc1sncGFnZXMnXVsnQUpzZXJ2ZXJQcm9maWxlRGF0YSddID0gInNlcnZlclByb2ZpbGVzIjsKQEAgLTM5Nyw4ICszOTgsNyBAQAogJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKcmVtR3JvdXBGcm9tUHJvZmlsZSddID0gInNlcnZlclByb2ZpbGVzIjsKICRhY3Rpb25zWydwYWdlcyddWydBSmFkZFByb2ZpbGVUb0dyb3VwJ10gPSAic2VydmVyUHJvZmlsZXMiOwogJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKcmVtUHJvZmlsZUZyb21Hcm91cCddID0gInNlcnZlclByb2ZpbGVzIjsKLSRhY3Rpb25zWydwYWdlcyddWydBSnNlcnZlclByb2ZpbGVTdG9yZURhdGEnXSA9ICJzZXJ2ZXJQcm9maWxlcyI7Ci0kYWN0aW9uc1sncGFnZXMnXVsnQUpmZXRjaFJvdXRlckROUyddID0gInNlcnZlclByb2ZpbGVzIjsqLworJGFjdGlvbnNbJ3BhZ2VzJ11bJ0FKc2VydmVyUHJvZmlsZVN0b3JlRGF0YSddID0gInNlcnZlclByb2ZpbGVzIjsqLwogCiAjIHRpbWUgdGFibGUKICMgVE9ETyBhIGZldyBvZiB0aGVzZSBiZWxvbmcgdG8gbmV3IHJlc2VydmF0aW9uCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy9zdGF0aXN0aWNzLnBocCBiL3dlYi8uaHQtaW5jL3N0YXRpc3RpY3MucGhwCmluZGV4IGNhODFiOGIuLjlkNzQ5ZmUgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL3N0YXRpc3RpY3MucGhwCisrKyBiL3dlYi8uaHQtaW5jL3N0YXRpc3RpY3MucGhwCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJICAgICAgIC4gIk9SREVSIEJZIHByZXR0eW5hbWUiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRwcm92cyA9IGFycmF5KCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkcHJvdnNbJHJvd1snaWQnXV0gPSAkcm93WydwcmV0dHluYW1lJ107CiAJCSRjZGF0YSA9IGFycmF5KCdtb2RlJyA9PiAncHJvdmlzaW9uaW5nJywKIAkJICAgICAgICAgICAgICAgJ3Byb3ZzJyA9PiAkcHJvdnMpOwpAQCAtMjEzLDcgKzIxMyw4IEBACiAJCSAgICAgICAuICAgICAgICAibC53YXNhdmFpbGFibGUsICIKIAkJICAgICAgIC4gICAgICAgICJsLmVuZGluZywgIgogCQkgICAgICAgLiAgICAgICAgImkucHJldHR5bmFtZSwgIgotCQkgICAgICAgLiAgICAgICAgIm8ucHJldHR5bmFtZSBBUyBPUyAiCisJCSAgICAgICAuICAgICAgICAiby5wcmV0dHluYW1lIEFTIE9TLCAiCisJCSAgICAgICAuICAgICAgICAiby50eXBlIEFTIE9TdHlwZSAiCiAJCSAgICAgICAuICJGUk9NIGxvZyBsLCAiCiAJCSAgICAgICAuICAgICAgImltYWdlIGksICIKIAkJICAgICAgIC4gICAgICAidXNlciB1LCAiCkBAIC0yMzQsNyArMjM1LDggQEAKIAkJICAgICAgIC4gICAgICAgICJsLndhc2F2YWlsYWJsZSwgIgogCQkgICAgICAgLiAgICAgICAgImwuZW5kaW5nLCAiCiAJCSAgICAgICAuICAgICAgICAiaS5wcmV0dHluYW1lLCAiCi0JCSAgICAgICAuICAgICAgICAiby5wcmV0dHluYW1lIEFTIE9TICIKKwkJICAgICAgIC4gICAgICAgICJvLnByZXR0eW5hbWUgQVMgT1MsICIKKwkJICAgICAgIC4gICAgICAgICJvLnR5cGUgQVMgT1N0eXBlICIKIAkJICAgICAgIC4gIkZST00gaW1hZ2UgaSwgIgogCQkgICAgICAgLiAgICAgICJ1c2VyIHUsICIKIAkJICAgICAgIC4gICAgICAiT1MgbywgIgpAQCAtMjgyLDYgKzI4NCw3IEBACiAJJGltYWdlbG9hZDZ0bzggPSBhcnJheSgpOwogCSRpbWFnZWxvYWQ4bW9yZSA9IGFycmF5KCk7CiAJJGltYWdlZmFpbHMgPSBhcnJheSgpOworCSRpbWFnZW9zdHlwZSA9IGFycmF5KCk7CiAJJGxlbmd0aHMgPSBhcnJheSgiMzBtaW4iID0+IDAsCiAJICAgICAgICAgICAgICAgICAiMWhvdXIiID0+IDAsCiAJICAgICAgICAgICAgICAgICAiMmhvdXJzIiA9PiAwLApAQCAtMjkyLDcgKzI5NSw3IEBACiAJICAgICAgICAgICAgICAgICAiMTBocnNwbHVzIiA9PiAwKTsKIAkkdG90YWxob3VycyA9IDA7CiAJJG9zdXNlcnMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93WyJwcmV0dHluYW1lIl0sICRpbWFnZWxvYWQybGVzcykpCiAJCQkkaW1hZ2Vsb2FkMmxlc3NbJHJvd1sicHJldHR5bmFtZSJdXSA9IDA7CiAJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93WyJwcmV0dHluYW1lIl0sICRpbWFnZWxvYWQydG82KSkKQEAgLTMwMSw2ICszMDQsOCBAQAogCQkJJGltYWdlbG9hZDZ0bzhbJHJvd1sicHJldHR5bmFtZSJdXSA9IDA7CiAJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93WyJwcmV0dHluYW1lIl0sICRpbWFnZWxvYWQ4bW9yZSkpCiAJCQkkaW1hZ2Vsb2FkOG1vcmVbJHJvd1sicHJldHR5bmFtZSJdXSA9IDA7CisJCWlmKCEgaXNzZXQoJGltYWdlb3N0eXBlWyRyb3dbInByZXR0eW5hbWUiXV0pKQorCQkJJGltYWdlb3N0eXBlWyRyb3dbInByZXR0eW5hbWUiXV0gPSB1Y2ZpcnN0KCRyb3dbJ09TdHlwZSddKTsKIAogCQkjIG5vdGF2YWlsYWJsZQogCQlpZigkcm93WyJ3YXNhdmFpbGFibGUiXSA9PSAwKSB7CkBAIC00NTIsNiArNDU3LDcgQEAKIAlwcmludCAiICAgIDxUSD4iIC4gaSgiNi04IG1pbiB3YWl0IikgLiAiPC9USD5cbiI7CiAJcHJpbnQgIiAgICA8VEg+IiAuIGkoIiZndDs9IDggbWluIHdhaXQiKSAuICI8L1RIPlxuIjsKIAlwcmludCAiICAgIDxUSD4iIC4gaSgiRmFpbHVyZXMiKSAuICI8L1RIPlxuIjsKKwlwcmludCAiICAgIDxUSD4iIC4gaSgiT1MgVHlwZSIpIC4gIjwvVEg+XG4iOwogCXByaW50ICIgIDwvVFI+XG4iOwogCWZvcmVhY2goJGltYWdlY291bnQgYXMgJGtleSA9PiAkdmFsdWUpIHsKIAkJcHJpbnQgIiAgPFRSPlxuIjsKQEAgLTQ3Nyw2ICs0ODMsNyBAQAogCQl9CiAJCWVsc2UKIAkJCXByaW50ICIgICAgPFREIGFsaWduPWNlbnRlcj57JGltYWdlZmFpbHNbJGtleV19PC9URD5cbiI7CisJCXByaW50ICIgICAgPFREIGFsaWduPWNlbnRlcj57JGltYWdlb3N0eXBlWyRrZXldfTwvVEQ+XG4iOwogCQlwcmludCAiICA8L1RSPlxuIjsKIAl9CiAJcHJpbnQgIjwvVEFCTEU+XG4iOwpAQCAtNjY1LDYgKzY3Miw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZXRTdGF0R3JhcGhEYXlEYXRhKCRzdGFydCwgJGVuZCwgJGFmZmlsaWQsICRtb2RlLCAkcHJvdmlkKSB7CisJJHR6ID0gZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpOworCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ1VUQycpOwogCSRzdGFydHVuaXggPSBkYXRldGltZVRvVW5peCgkc3RhcnQgLiAiIDAwOjAwOjAwIik7CiAJJGVuZHVuaXggPSBkYXRldGltZVRvVW5peCgkZW5kIC4gIiAyMzo1OTo1OSIpOwogCkBAIC02NzYsNiArNjg1LDkgQEAKIAkkYWRkY2FjaGUgPSBhcnJheSgpOwogCSRyZWxvYWRpZCA9IGdldFVzZXJsaXN0SUQoJ3ZjbHJlbG9hZEBMb2NhbCcpOwogCSRjbnQgPSAwOworCSRwcm92ID0gInByb3Zpc2lvbmluZ2lkID0gJHByb3ZpZCI7CisJaWYoJHByb3ZpZCA9PSAwKQorCQkkcHJvdiA9ICIocHJvdmlzaW9uaW5naWQgSVMgTlVMTCBPUiBwcm92aXNpb25pbmdpZCA9IDApIjsKIAkkcXVlcnkgPSAiU0VMRUNUIHN0YXRkYXRlLCAiCiAJICAgICAgIC4gICAgICAgICJ2YWx1ZSAiCiAJICAgICAgIC4gIkZST00gc3RhdGdyYXBoY2FjaGUgIgpAQCAtNjgzLDkgKzY5NSw5IEBACiAJCQkgLiAgICAgICAiYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInN0YXRkYXRlID49ICckc3RhcnQnIEFORCAiCiAJICAgICAgIC4gICAgICAgInN0YXRkYXRlIDw9ICckZW5kJyBBTkQgIgotCSAgICAgICAuICAgICAgICJwcm92aXNpb25pbmdpZCA9ICRwcm92aWQiOworCSAgICAgICAuICAgICAgICIkcHJvdiI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkY2FjaGVwdHNbJHJvd1snc3RhdGRhdGUnXV0gPSAkcm93Wyd2YWx1ZSddOwogCWZvcigkaSA9ICRzdGFydHVuaXg7ICRpIDwgJGVuZHVuaXg7ICRpICs9IFNFQ0lOREFZKSB7CiAJCSRjbnQrKzsKQEAgLTczNSw3ICs3NDcsNyBAQAogCQkJCX0KIAkJCX0KIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAyOTUpOwotCQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCQkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJCQkkdmFsdWUgPSAkcm93WzBdOwogCQkJZWxzZQogCQkJCSR2YWx1ZSA9IDA7CkBAIC03NDksNiArNzYxLDcgQEAKIAl9CiAJaWYoY291bnQoJGFkZGNhY2hlKSkKIAkJYWRkVG9TdGF0R3JhcGhDYWNoZSgndG90YWxyZXMnLCAkYWRkY2FjaGUsICRhZmZpbGlkLCAkcHJvdmlkKTsKKwlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCR0eik7CiAJcmV0dXJuKCRkYXRhKTsKIH0KIApAQCAtODQzLDcgKzg1Niw3IEBACiAJCX0KIAl9CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDI5Nik7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHN0YXJ0bWluID0gKCRyb3dbJ3Nob3VyJ10gKiA2MCkgKyAkcm93WydzbWluJ107CiAJCSRlbmRtaW4gPSAoJHJvd1snZWhvdXInXSAqIDYwKSArICRyb3dbJ2VtaW4nXTsKIApAQCAtOTIwLDYgKzkzMyw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZXRTdGF0R3JhcGhEYXlDb25Vc2Vyc0RhdGEoJHN0YXJ0LCAkZW5kLCAkYWZmaWxpZCwgJG1vZGUsICRwcm92aWQpIHsKKwkkdHogPSBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCk7CisJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnVVRDJyk7CiAJJHN0YXJ0ZHQgPSAkc3RhcnQgLiAiIDAwOjAwOjAwIjsKIAkkZW5kZHQgPSAkZW5kIC4gIiAyMzo1OTo1OSI7CiAJJHN0YXJ0dW5peCA9IGRhdGV0aW1lVG9Vbml4KCRzdGFydGR0KTsKQEAgLTk0Miw2ICs5NTcsOSBAQAogCiAJJHJlbG9hZGlkID0gZ2V0VXNlcmxpc3RJRCgndmNscmVsb2FkQExvY2FsJyk7CiAJJGNudCA9IDA7CisJJHByb3YgPSAicHJvdmlzaW9uaW5naWQgPSAkcHJvdmlkIjsKKwlpZigkcHJvdmlkID09IDApCisJCSRwcm92ID0gIihwcm92aXNpb25pbmdpZCBJUyBOVUxMIE9SIHByb3Zpc2lvbmluZ2lkID0gMCkiOwogCSRxdWVyeSA9ICJTRUxFQ1Qgc3RhdGRhdGUsICIKIAkgICAgICAgLiAgICAgICAgInZhbHVlICIKIAkgICAgICAgLiAiRlJPTSBzdGF0Z3JhcGhjYWNoZSAiCkBAIC05NDksMTIgKzk2NywxMyBAQAogCQkJIC4gICAgICAgImFmZmlsaWF0aW9uaWQgPSAkYWZmaWxpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJzdGF0ZGF0ZSA+PSAnJHN0YXJ0JyBBTkQgIgogCSAgICAgICAuICAgICAgICJzdGF0ZGF0ZSA8PSAnJGVuZCcgQU5EICIKLQkgICAgICAgLiAgICAgICAicHJvdmlzaW9uaW5naWQgPSAkcHJvdmlkIjsKKwkgICAgICAgLiAgICAgICAiJHByb3YiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGNhY2hlcHRzWyRyb3dbJ3N0YXRkYXRlJ11dID0gJHJvd1sndmFsdWUnXTsKIAlpZigoY291bnQoJGNhY2hlcHRzKSArIDMxKSA8ICRkYXljbnQpIHsKIAkJJGRhdGEgPSBhcnJheSgnbm9kYXRhJyA9PiBpKCcodG9vIG11Y2ggY29tcHV0YXRpb25hbCB0aW1lIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgZ3JhcGgpJykpOworCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCR0eik7CiAJCXJldHVybiAkZGF0YTsKIAl9CiAJZm9yKCRkYXlzdGFydCA9ICRzdGFydHVuaXg7ICRkYXlzdGFydCA8ICRlbmR1bml4OyAkZGF5c3RhcnQgKz0gU0VDSU5EQVkpIHsKQEAgLTEwMDgsNyArMTAyNyw3IEBACiAJCQkJfQogCQkJfQogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJHVuaXhzdGFydCA9ICRyb3dbInN0YXJ0Il07CiAJCQkJJHVuaXhlbmQgPSAkcm93WyJlbmQiXTsKIAkJCQlmb3IoJGJpbnN0YXJ0ID0gJGRheXN0YXJ0LCAkYmluZW5kID0gJGRheXN0YXJ0ICsgMzYwMCwgJGJpbmluZGV4ID0gMDsKQEAgLTEwMzgsNiArMTA1Nyw3IEBACiAJfQogCWlmKGNvdW50KCRhZGRjYWNoZSkpCiAJCWFkZFRvU3RhdEdyYXBoQ2FjaGUoJ2NvbmN1cnJlcycsICRhZGRjYWNoZSwgJGFmZmlsaWQsICRwcm92aWQpOworCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJHR6KTsKIAlyZXR1cm4oJGRhdGEpOwogfQogCkBAIC0xMDY0LDYgKzEwODQsOCBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gZ2V0U3RhdEdyYXBoQ29uQmxhZGVVc2VyRGF0YSgkc3RhcnQsICRlbmQsICRhZmZpbGlkLCAkbW9kZSwgJHByb3ZpZCkgeworCSR0eiA9IGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQoKTsKKwlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdVVEMnKTsKIAkkc3RhcnRkdCA9ICRzdGFydCAuICIgMDA6MDA6MDAiOwogCSRlbmRkdCA9ICRlbmQgLiAiIDIzOjU5OjU5IjsKIAkkc3RhcnR1bml4ID0gZGF0ZXRpbWVUb1VuaXgoJHN0YXJ0ZHQpOwpAQCAtMTA4Niw2ICsxMTA4LDkgQEAKIAogCSRyZWxvYWRpZCA9IGdldFVzZXJsaXN0SUQoJ3ZjbHJlbG9hZEBMb2NhbCcpOwogCSRjbnQgPSAwOworCSRwcm92ID0gInByb3Zpc2lvbmluZ2lkID0gJHByb3ZpZCI7CisJaWYoJHByb3ZpZCA9PSAwKQorCQkkcHJvdiA9ICIocHJvdmlzaW9uaW5naWQgSVMgTlVMTCBPUiBwcm92aXNpb25pbmdpZCA9IDApIjsKIAkkcXVlcnkgPSAiU0VMRUNUIHN0YXRkYXRlLCAiCiAJICAgICAgIC4gICAgICAgICJ2YWx1ZSAiCiAJICAgICAgIC4gIkZST00gc3RhdGdyYXBoY2FjaGUgIgpAQCAtMTA5MywxMiArMTExOCwxMyBAQAogCQkJIC4gICAgICAgImFmZmlsaWF0aW9uaWQgPSAkYWZmaWxpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJzdGF0ZGF0ZSA+PSAnJHN0YXJ0JyBBTkQgIgogCSAgICAgICAuICAgICAgICJzdGF0ZGF0ZSA8PSAnJGVuZCcgQU5EICIKLQkgICAgICAgLiAgICAgICAicHJvdmlzaW9uaW5naWQgPSAkcHJvdmlkIjsKKwkgICAgICAgLiAgICAgICAiJHByb3YiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGNhY2hlcHRzWyRyb3dbJ3N0YXRkYXRlJ11dID0gJHJvd1sndmFsdWUnXTsKIAlpZigoY291bnQoJGNhY2hlcHRzKSArIDMxKSA8ICRkYXljbnQpIHsKIAkJJGRhdGEgPSBhcnJheSgnbm9kYXRhJyA9PiBpKCcodG9vIG11Y2ggY29tcHV0YXRpb25hbCB0aW1lIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgZ3JhcGgpJykpOworCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCR0eik7CiAJCXJldHVybiAkZGF0YTsKIAl9CiAJZm9yKCRkYXlzdGFydCA9ICRzdGFydHVuaXg7ICRkYXlzdGFydCA8ICRlbmR1bml4OyAkZGF5c3RhcnQgKz0gU0VDSU5EQVkpIHsKQEAgLTExODAsNyArMTIwNiw3IEBACiAJCQl9CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkJCSRjb21wcyA9IGFycmF5KCk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJHVuaXhzdGFydCA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbInN0YXJ0Il0pOwogCQkJCSR1bml4ZW5kID0gZGF0ZXRpbWVUb1VuaXgoJHJvd1siZW5kIl0pOwogCQkJCWZvcigkYmluc3RhcnQgPSAkZGF5c3RhcnQsICRiaW5lbmQgPSAkZGF5c3RhcnQgKyAzNjAwLCAkYmluaW5kZXggPSAwOwpAQCAtMTIxNiw2ICsxMjQyLDcgQEAKIAl9CiAJaWYoY291bnQoJGFkZGNhY2hlKSkKIAkJYWRkVG9TdGF0R3JhcGhDYWNoZSgnY29uY3VyYmxhZGUnLCAkYWRkY2FjaGUsICRhZmZpbGlkLCAkcHJvdmlkKTsKKwlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCR0eik7CiAJcmV0dXJuKCRkYXRhKTsKIH0KIApAQCAtMTI0Miw2ICsxMjY5LDggQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdldFN0YXRHcmFwaENvblZNVXNlckRhdGEoJHN0YXJ0LCAkZW5kLCAkYWZmaWxpZCwgJG1vZGUsICRwcm92aWQpIHsKKwkkdHogPSBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCk7CisJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnVVRDJyk7CiAJJHN0YXJ0ZHQgPSAkc3RhcnQgLiAiIDAwOjAwOjAwIjsKIAkkZW5kZHQgPSAkZW5kIC4gIiAyMzo1OTo1OSI7CiAJJHN0YXJ0dW5peCA9IGRhdGV0aW1lVG9Vbml4KCRzdGFydGR0KTsKQEAgLTEyNjQsNiArMTI5Myw5IEBACiAKIAkkcmVsb2FkaWQgPSBnZXRVc2VybGlzdElEKCd2Y2xyZWxvYWRATG9jYWwnKTsKIAkkY250ID0gMDsKKwkkcHJvdiA9ICJwcm92aXNpb25pbmdpZCA9ICRwcm92aWQiOworCWlmKCRwcm92aWQgPT0gMCkKKwkJJHByb3YgPSAiKHByb3Zpc2lvbmluZ2lkIElTIE5VTEwgT1IgcHJvdmlzaW9uaW5naWQgPSAwKSI7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBzdGF0ZGF0ZSwgIgogCSAgICAgICAuICAgICAgICAidmFsdWUgIgogCSAgICAgICAuICJGUk9NIHN0YXRncmFwaGNhY2hlICIKQEAgLTEyNzEsMTIgKzEzMDMsMTMgQEAKIAkJCSAuICAgICAgICJhZmZpbGlhdGlvbmlkID0gJGFmZmlsaWQgQU5EICIKIAkgICAgICAgLiAgICAgICAic3RhdGRhdGUgPj0gJyRzdGFydCcgQU5EICIKIAkgICAgICAgLiAgICAgICAic3RhdGRhdGUgPD0gJyRlbmQnIEFORCAiCi0JICAgICAgIC4gICAgICAgInByb3Zpc2lvbmluZ2lkID0gJHByb3ZpZCI7CisJICAgICAgIC4gICAgICAgIiRwcm92IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRjYWNoZXB0c1skcm93WydzdGF0ZGF0ZSddXSA9ICRyb3dbJ3ZhbHVlJ107CiAJaWYoKGNvdW50KCRjYWNoZXB0cykgKyAzMSkgPCAkZGF5Y250KSB7CiAJCSRkYXRhID0gYXJyYXkoJ25vZGF0YScgPT4gaSgnKHRvbyBtdWNoIGNvbXB1dGF0aW9uYWwgdGltZSByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIGdyYXBoKScpKTsKKwkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgkdHopOwogCQlyZXR1cm4gJGRhdGE7CiAJfQogCWZvcigkZGF5c3RhcnQgPSAkc3RhcnR1bml4OyAkZGF5c3RhcnQgPCAkZW5kdW5peDsgJGRheXN0YXJ0ICs9IFNFQ0lOREFZKSB7CkBAIC0xMzQ4LDcgKzEzODEsNyBAQAogCQkJCX0KIAkJCX0KIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCSR1bml4c3RhcnQgPSBkYXRldGltZVRvVW5peCgkcm93WyJzdGFydCJdKTsKIAkJCQkkdW5peGVuZCA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbImVuZCJdKTsKIAkJCQlmb3IoJGJpbnN0YXJ0ID0gJGRheXN0YXJ0LCAkYmluZW5kID0gJGRheXN0YXJ0ICsgMzYwMCwgJGJpbmluZGV4ID0gMDsKQEAgLTEzNzgsNiArMTQxMSw3IEBACiAJfQogCWlmKGNvdW50KCRhZGRjYWNoZSkpCiAJCWFkZFRvU3RhdEdyYXBoQ2FjaGUoJ2NvbmN1cnZtJywgJGFkZGNhY2hlLCAkYWZmaWxpZCwgJHByb3ZpZCk7CisJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgkdHopOwogCXJldHVybigkZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL3VzZXJwcmVmZXJlbmNlcy5waHAgYi93ZWIvLmh0LWluYy91c2VycHJlZmVyZW5jZXMucGhwCmluZGV4IDM4MzhjOTkuLmZjZGM2ZjcgMTAwNjQ0Ci0tLSBhL3dlYi8uaHQtaW5jL3VzZXJwcmVmZXJlbmNlcy5waHAKKysrIGIvd2ViLy5odC1pbmMvdXNlcnByZWZlcmVuY2VzLnBocApAQCAtNDkwLDcgKzQ5MCw3IEBACiAJCSAgICAgICAuICJXSEVSRSB1LmlkID0gJ3skdXNlclsnaWQnXX0nIEFORCAiCiAJCSAgICAgICAuICAgICAgICJsLnVzZXJpZCA9IHUuaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoISAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKQorCQlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKQogCQkJYWJvcnQoKTsKIAkJJHBhc3NoYXNoID0gc2hhMSgieyRkYXRhWyduZXdwYXNzd29yZCddfXskcm93WydzYWx0J119Iik7CiAJCSRxdWVyeSA9ICJVUERBVEUgbG9jYWxhdXRoICIKQEAgLTU2NCw3ICs1NjQsNyBAQAogCWlmKCRwdWJrZXlhdXRoID09IDIgJiYgcHJlZ19tYXRjaCgnfF5bLWEtekEtWjAtOVwrLyBAPVwuXG5ccl0qJHwnLCAkcHVia2V5cykpIHsKIAkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKIAkJCSRwdWJrZXlzID0gc3RyaXBzbGFzaGVzKCRwdWJrZXlzKTsKLQkJJF9wdWJrZXlzID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRwdWJrZXlzKTsKKwkJJF9wdWJrZXlzID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHB1YmtleXMpOwogCQkkcXVlcnkgPSAiVVBEQVRFIHVzZXIgU0VUIHNzaHB1YmxpY2tleXMgPSAnJF9wdWJrZXlzJyBXSEVSRSBpZCA9IHskdXNlclsnaWQnXX0iOwogCQlkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRfU0VTU0lPTlsndXNlciddWydzc2hwdWJsaWNrZXlzJ10gPSBodG1sc3BlY2lhbGNoYXJzKCRwdWJrZXlzKTsKZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL3V0aWxzLnBocCBiL3dlYi8uaHQtaW5jL3V0aWxzLnBocAppbmRleCBmZWFhYmVmLi5hYWYzY2JkIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy91dGlscy5waHAKKysrIGIvd2ViLy5odC1pbmMvdXRpbHMucGhwCkBAIC01Niw4ICs1Niw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBpbml0R2xvYmFscygpIHsKLQlnbG9iYWwgJG1vZGUsICR1c2VyLCAkcmVtb3RlSVAsICRhdXRoZWQsICRvbGRtb2RlLCAkc2VtaWQ7Ci0JZ2xvYmFsICRkYXlzLCAkcGhwVmVyLCAka2V5cywgJHBlbWtleSwgJEFVVEhFUlJPUjsKKwlnbG9iYWwgJG1vZGUsICR1c2VyLCAkcmVtb3RlSVAsICRhdXRoZWQsICRvbGRtb2RlOworCWdsb2JhbCAkZGF5cywgJHBocFZlciwgJGtleXMsICRwZW1rZXksICRzdWJtaXRFcnIsICRzdWJtaXRFcnJNc2c7CiAJZ2xvYmFsICRwYXNzd2RBcnJheSwgJHNraW4sICRjb250ZGF0YSwgJGxhc3Rtb2RlLCAkaW5Db250aW51YXRpb247CiAJZ2xvYmFsICRFUlJPUlMsICRhY3Rpb25zOwogCWdsb2JhbCAkYWZmaWxWYWxGdW5jLCAkYWRkVXNlckZ1bmMsICR1cGRhdGVVc2VyRnVuYywgJGFkZFVzZXJGdW5jQXJnczsKQEAgLTg3LDcgKzg3LDcgQEAKIAogCWlmKGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9lbmNyeXB0JykpIHsKIAkJZGVmaW5lKCdVU0VfUEhQU0VDTElCJywgMCk7Ci0JCSRjcnl0cGtleSA9IGJhc2U2NF9kZWNvZGUoJGNyeXB0a2V5KTsKKwkJJGNyeXB0a2V5ID0gYmFzZTY0X2RlY29kZSgkY3J5cHRrZXkpOwogCX0KIAllbHNlIHsKIAkJZGVmaW5lKCdVU0VfUEhQU0VDTElCJywgMSk7CkBAIC0xMjUsNyArMTI1LDEyIEBACiAJJGRheXMgPSBhcnJheShpKCdTdW5kYXknKSwgaSgnTW9uZGF5JyksIGkoJ1R1ZXNkYXknKSwgaSgnV2VkbmVzZGF5JyksIGkoJ1RodXJzZGF5JyksIGkoJ0ZyaWRheScpLCBpKCdTYXR1cmRheScpKTsKIAkkcGhwVmVyQXJyID0gZXhwbG9kZSgnLicsIHBocHZlcnNpb24oKSk7CiAJJHBocFZlciA9ICRwaHBWZXJBcnJbMF07Ci0JJHVuaXFpZCA9IHVuaXFpZCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiLSIgLiBnZXRteXBpZCgpIC4gIi0iKTsKKwkKKwkkaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKKwlpZihzdHJwb3MoJGhvc3QsICc6JykpIHsKKwkJJGhvc3QgPSBzdWJzdHIoJGhvc3QsIDAsIHN0cnBvcygkaG9zdCwgJzonKSk7CisJfQorCSR1bmlxaWQgPSB1bmlxaWQoJGhvc3QgLiAiLSIgLiBnZXRteXBpZCgpIC4gIi0iKTsKIAogCSRwYXNzd2RBcnJheSA9IGFycmF5KCdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLAogCSAgICAgICAgICAgICAgICAgICAgICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLApAQCAtMTM0LDcgKzEzOSwxMCBAQAogCSAgICAgICAgICAgICAgICAgICAgICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAnMScsICcyJywgJzMnLAogCSAgICAgICAgICAgICAgICAgICAgICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICcwJyk7CiAKLQlpZihhcnJheV9rZXlfZXhpc3RzKCdWQ0xBVVRIJywgJF9DT09LSUUpIHx8ICRtb2RlID09ICdzdWJtaXRMb2dpbicpIHsKKwlpZihpc3NldCgkX0NPT0tJRVsnVkNMQVVUSCddKSB8fAorCSAgICRtb2RlID09ICdzdWJtaXRMb2dpbicgfHwKKwkgICAkbW9kZSA9PSAnc2VsZWN0YXV0aCcgfHwKKwkgICAkbW9kZSA9PSAnbWFpbicpIHsKIAkJLy8gb3BlbiBrZXlzCiAJCSRmcCA9IGZvcGVuKCIuaHQtaW5jL2tleXMucGVtIiwgInIiKTsKIAkJJGtleSA9IGZyZWFkKCRmcCwgODE5Mik7CkBAIC0xNjUsMTEgKzE3MywxNyBAQAogCQlpZighIGlzX251bGwoJHVzZXJpZCkpCiAJCQkkYXV0aGVkID0gMTsKIAl9Ci0JZWxzZWlmKHByZWdfbWF0Y2goJy9fc2hpYnNlc3Npb24vJywgam9pbignLCcsIGFycmF5X2tleXMoJF9DT09LSUUpKSkpIHsKLQkJIyByZWRpcmVjdCB0byBzaGliYXV0aCBkaXJlY3RvcnkKLQkJaGVhZGVyKCdMb2NhdGlvbjogJyAuIEJBU0VVUkwgLiAiL3NoaWJhdXRoLyIpOwotCQlkYkRpc2Nvbm5lY3QoKTsKLQkJZXhpdDsKKwllbHNlIHsKKwkJZ2xvYmFsICRhdXRoRnVuY3M7CisJCWZvcmVhY2goJGF1dGhGdW5jcyBhcyAkdHlwZSkgeworCQkJaWYoJHR5cGVbJ3Rlc3QnXSgpKSB7CisJCQkJJHVzZXJpZCA9ICR0eXBlWydhdXRoJ10oKTsKKwkJCQlpZighIGlzX251bGwoJHVzZXJpZCkpIHsKKwkJCQkJJGF1dGhlZCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAkjIGVuZCBhdXRoIGNoZWNrCiAKQEAgLTI2NCwxMyArMjc4LDEzIEBACiAJIyBzZXQgdXAgJGFmZmlsVmFsRnVuYywgJGFkZFVzZXJGdW5jLCAkdXBkYXRlVXNlckZ1bmMgZm9yIGFueSBzaGlib25seSBhZmZpbGlhdGlvbnMKIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gYWZmaWxpYXRpb24gV0hFUkUgc2hpYm9ubHkgPSAxIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGlkID0gJHJvd1snaWQnXTsKIAkJaWYoISBhcnJheV9rZXlfZXhpc3RzKCRpZCwgJGFmZmlsVmFsRnVuYykpIHsKIAkJCWlmKEFMTE9XQUREU0hJQlVTRVJTKQotCQkJCSRhZmZpbFZhbEZ1bmNbJGlkXSA9IGNyZWF0ZV9mdW5jdGlvbignJywgJ3JldHVybiAxOycpOworCQkJCSRhZmZpbFZhbEZ1bmNbJGlkXSA9IGZ1bmN0aW9uKCkge3JldHVybiAxO307CiAJCQllbHNlCi0JCQkJJGFmZmlsVmFsRnVuY1skaWRdID0gY3JlYXRlX2Z1bmN0aW9uKCcnLCAncmV0dXJuIDA7Jyk7CisJCQkJJGFmZmlsVmFsRnVuY1skaWRdID0gZnVuY3Rpb24oKSB7cmV0dXJuIDA7fTsKIAkJfQogCQlpZighIGFycmF5X2tleV9leGlzdHMoJGlkLCAkYWRkVXNlckZ1bmMpKSB7CiAJCQlpZihBTExPV0FERFNISUJVU0VSUykgewpAQCAtMjc4LDEwICsyOTIsMTAgQEAKIAkJCQkkYWRkVXNlckZ1bmNBcmdzWyRpZF0gPSAkaWQ7CiAJCQl9CiAJCQllbHNlCi0JCQkJJGFkZFVzZXJGdW5jWyRpZF0gPSBjcmVhdGVfZnVuY3Rpb24oJycsICdyZXR1cm4gMDsnKTsKKwkJCQkkYWRkVXNlckZ1bmNbJGlkXSA9IGZ1bmN0aW9uKCkge3JldHVybiAwO307CiAJCX0KIAkJaWYoISBhcnJheV9rZXlfZXhpc3RzKCRpZCwgJHVwZGF0ZVVzZXJGdW5jKSkKLQkJCSR1cGRhdGVVc2VyRnVuY1skaWRdID0gY3JlYXRlX2Z1bmN0aW9uKCcnLCAncmV0dXJuIE5VTEw7Jyk7CisJCQkkdXBkYXRlVXNlckZ1bmNbJGlkXSA9IGZ1bmN0aW9uKCkge3JldHVybiBOVUxMO307CiAJfQogCiAJIyBpbmNsdWRlIGFwcHJvcHJpYXRlIGZpbGVzCkBAIC0zNzEsOCArMzg1LDggQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBjaGVja0FjY2VzcygpIHsKIAlnbG9iYWwgJG1vZGUsICR1c2VyLCAkYWN0aW9uRnVuY3Rpb24sICRhdXRoTWVjaHM7Ci0JZ2xvYmFsICRpdGVjc2F1dGhrZXksICRFTkFCTEVfSVRFQ1NBVVRILCAkYWN0aW9ucywgJG5vSFRNTHdyYXBwZXJzOwotCWdsb2JhbCAkaW5Db250aW51YXRpb24sICRkb2NyZWFkZXJzLCAkYXBpVmFsaWRhdGVGdW5jOworCWdsb2JhbCAkaXRlY3NhdXRoa2V5LCAkRU5BQkxFX0lURUNTQVVUSCwgJGFjdGlvbnM7CisJZ2xvYmFsICRpbkNvbnRpbnVhdGlvbiwgJGFwaVZhbGlkYXRlRnVuYzsKIAlpZigkbW9kZSA9PSAneG1scnBjY2FsbCcpIHsKIAkJLy8gZG91YmxlIGNoZWNrIGZvciBTU0wKIAkJaWYoISBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gIT0gIm9uIikgewpAQCAtMzgwLDYgKzM5NCwxMSBAQAogCQkJZGJEaXNjb25uZWN0KCk7CiAJCQlleGl0OwogCQl9CisJCWlmKCEgaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9VU0VSJ10pKSB7CisJCQlwcmludFhNTFJQQ2Vycm9yKDMpOyAgICMgYWNjZXNzIGRlbmllZAorCQkJZGJEaXNjb25uZWN0KCk7CisJCQlleGl0OworCQl9CiAJCSR4bWx1c2VyID0gcHJvY2Vzc0lucHV0RGF0YSgkX1NFUlZFUlsnSFRUUF9YX1VTRVInXSwgQVJHX1NUUklORywgMSk7CiAJCWlmKCEgJHVzZXIgPSBnZXRVc2VySW5mbygkeG1sdXNlcikpIHsKIAkJCS8vIGlmIGZpcnN0IGNhbGwgdG8gZ2V0VXNlckluZm8gZmFpbHMsIHRyeSBjYWxsaW5nIHdpdGggJG5vdXBkYXRlIHNldApAQCAtNDQ4LDcgKzQ2Nyw3IEBACiAJCQkJCQlleGl0OwogCQkJCQl9CiAJCQkJCSRzZWFyY2ggPSBsZGFwX3NlYXJjaCgkZHMsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAkYXV0aFsnYmluZGRuJ10sIAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJGF1dGhbJ2JpbmRkbiddLAogCQkJCQkgICAgICAgICAgICAgICAgICAgICAgInskYXV0aFsnbG9va3VwdXNlcmZpZWxkJ119PXskdXNlclsndW5pdHlpZCddfSIsCiAJCQkJCSAgICAgICAgICAgICAgICAgICAgICBhcnJheSgnZG4nKSwgMCwgMywgMTUpOwogCQkJCQlpZigkc2VhcmNoKSB7CkBAIC00OTgsNyArNTE3LDcgQEAKIAkJCWVsc2VpZigkYXV0aE1lY2hzWyRhdXRodHlwZV1bJ3R5cGUnXSA9PSAncmVkaXJlY3QnKSB7CiAJCQkJJGFmZmlsaWQgPSAkYXV0aE1lY2hzWyRhdXRodHlwZV1bJ2FmZmlsaWF0aW9uaWQnXTsKIAkJCQlpZighKGlzc2V0KCRhcGlWYWxpZGF0ZUZ1bmMpICYmIGlzX2FycmF5KCRhcGlWYWxpZGF0ZUZ1bmMpICYmCi0JCQkJICAgYXJyYXlfa2V5X2V4aXN0cygkYWZmaWxpZCwgJGFwaVZhbGlkYXRlRnVuYykgJiYgCisJCQkJICAgYXJyYXlfa2V5X2V4aXN0cygkYWZmaWxpZCwgJGFwaVZhbGlkYXRlRnVuYykgJiYKIAkJCQkgICAkYXBpVmFsaWRhdGVGdW5jWyRhZmZpbGlkXSgkeG1sdXNlciwgJHhtbHBhc3MpKSkgewogCQkJCQlwcmludFhNTFJQQ2Vycm9yKDMpOyAgICAjIGFjY2VzcyBkZW5pZWQKIAkJCQkJZGJEaXNjb25uZWN0KCk7CkBAIC02MzUsMTMgKzY1NCwxMyBAQAogCQkkZmggPSBmb3BlbigkaWRmaWxlLCAncicpOwogCQkkaWQgPSBmcmVhZCgkZmgsIDUwKTsKIAkJZmNsb3NlKCRmaCk7Ci0JCSRfaWQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGlkKTsKLQkKKwkJJF9pZCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRpZCk7CisKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCiAJCSAgICAgICAuICJGUk9NIGNyeXB0a2V5ICAiCiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICckX2lkJyI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCXJldHVybjsKIAl9CiAKQEAgLTczMiw3ICs3NTEsNyBAQAogCQkgICAgICAgLiAgICAgICAiZW5kID4gTk9XKCkiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRpZHMgPSBhcnJheSgpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJGlkc1tdID0gJHJvd1snaWQnXTsKIAkJaWYoZW1wdHkoJGlkcykpIHsKIAkJCWRiRGlzY29ubmVjdCgpOwpAQCAtNzQ1LDcgKzc2NCw3IEBACiAJCWRvUXVlcnkoJHF1ZXJ5LCAxMDEsICd2Y2wnLCAxKTsKIAkJZGJEaXNjb25uZWN0KCk7CiAJCXJldHVybjsKLQl9ICAKKwl9CiAJJGlubWFpbnRlbmFuY2UgPSAwOwogCSRza2luID0gJyc7CiAJZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpIHsKQEAgLTc1OCw3ICs3NzcsOCBAQAogCQkJIyBjaGVjayB0byBzZWUgaWYgZW5kIHRpbWUgaGFzIGJlZW4gcmVhY2hlZAogCQkJJGZoID0gZm9wZW4oJGZpbGUsICdyJyk7CiAJCQkkbXNnID0gJyc7Ci0JCQl3aGlsZSgkbGluZSA9IGZnZXRzcygkZmgpKSB7CisJCQl3aGlsZSgkbGluZSA9IGZnZXRzKCRmaCkpIHsKKwkJCSAgICAkbGluZSA9IHN0cmlwX3RhZ3MoJGxpbmUpOwogCQkJCWlmKHByZWdfbWF0Y2goIi9eRU5EPShbMC05XXs0fSkoWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pJC8iLCAkbGluZSwgJG1hdGNoZXMpKSB7CiAJCQkJCSR0bXAgPSAieyRtYXRjaGVzWzFdfS17JG1hdGNoZXNbMl19LXskbWF0Y2hlc1szXX0geyRtYXRjaGVzWzRdfTp7JG1hdGNoZXNbNV19OjAwIjsKIAkJCQkJJGVuZCA9IGRhdGV0aW1lVG9Vbml4KCR0bXApOwpAQCAtOTU4LDcgKzk3OCw3IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBtYWluKCkgewotCWdsb2JhbCAkdXNlciwgJGF1dGhlZCwgJG1vZGU7CisJZ2xvYmFsICR1c2VyLCAkYXV0aGVkOwogCXByaW50ICI8SDI+IiAuIGkoIldlbGNvbWUgdG8gdGhlIFZpcnR1YWwgQ29tcHV0aW5nIExhYiIpIC4gIjwvSDI+XG4iOwogCWlmKCRhdXRoZWQpIHsKIAkJaWYoISBlbXB0eSgkdXNlclsnbGFzdG5hbWUnXSkgJiYgISBlbXB0eSgkdXNlclsncHJlZmVycmVkbmFtZSddKSkKQEAgLTEwMDIsNyArMTAyMiw3IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBhYm9ydCgkZXJyY29kZSwgJHF1ZXJ5PSIiKSB7Ci0JZ2xvYmFsICRteXNxbF9saW5rX3ZjbCwgJG15c3FsX2xpbmtfYWNjdCwgJEVSUk9SUywgJHVzZXIsICRtb2RlOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsLCAkbXlzcWxpX2xpbmtfYWNjdCwgJEVSUk9SUywgJHVzZXIsICRtb2RlOwogCWdsb2JhbCAkRU5BQkxFX0lURUNTQVVUSCwgJHJlcXVlc3RJbmZvLCAkYWJvcnRpbmc7CiAJaWYoISBpc3NldCgkYWJvcnRpbmcpKQogCQkkYWJvcnRpbmcgPSAxOwpAQCAtMTAxMiwxMSArMTAzMiwxMSBAQAogCQl4bWxSUENhYm9ydCgkZXJyY29kZSwgJHF1ZXJ5KTsKIAlpZihPTkxJTkVERUJVRyAmJiBjaGVja1VzZXJIYXNQZXJtKCdWaWV3IERlYnVnIEluZm9ybWF0aW9uJykpIHsKIAkJaWYoJGVycmNvZGUgPj0gMTAwICYmICRlcnJjb2RlIDwgNDAwKSB7Ci0JCQlwcmludCAiPGZvbnQgY29sb3I9cmVkPiIgLiBteXNxbF9lcnJvcigkbXlzcWxfbGlua192Y2wpIC4gIjwvZm9udD48YnI+XG4iOwotCQkJZXJyb3JfbG9nKG15c3FsX2Vycm9yKCRteXNxbF9saW5rX3ZjbCkpOworCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwicmVkZXJyb3Jtc2dcIj4iIC4gbXlzcWxpX2Vycm9yKCRteXNxbGlfbGlua192Y2wpIC4gIjwvc3Bhbj48YnI+XG4iOworCQkJZXJyb3JfbG9nKG15c3FsaV9lcnJvcigkbXlzcWxpX2xpbmtfdmNsKSk7CiAJCQlpZigkRU5BQkxFX0lURUNTQVVUSCkgewotCQkJCXByaW50ICI8Zm9udCBjb2xvcj1yZWQ+IiAuIG15c3FsX2Vycm9yKCRteXNxbF9saW5rX2FjY3QpIC4gIjwvZm9udD48YnI+XG4iOwotCQkJCWVycm9yX2xvZyhteXNxbF9lcnJvcigkbXlzcWxfbGlua19hY2N0KSk7CisJCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwicmVkZXJyb3Jtc2dcIj4iIC4gbXlzcWxpX2Vycm9yKCRteXNxbGlfbGlua19hY2N0KSAuICI8L3NwYW4+PGJyPlxuIjsKKwkJCQllcnJvcl9sb2cobXlzcWxpX2Vycm9yKCRteXNxbGlfbGlua19hY2N0KSk7CiAJCQl9CiAJCQlwcmludCAiJHF1ZXJ5PGJyPlxuIjsKIAkJCWVycm9yX2xvZygkcXVlcnkpOwpAQCAtMTAzMyw5ICsxMDUzLDkgQEAKIAllbHNlIHsKIAkJJG1lc3NhZ2UgPSAiIjsKIAkJaWYoJGVycmNvZGUgPj0gMTAwICYmICRlcnJjb2RlIDwgNDAwKSB7Ci0JCQkkbWVzc2FnZSAuPSBteXNxbF9lcnJvcigkbXlzcWxfbGlua192Y2wpIC4gIlxuIjsKKwkJCSRtZXNzYWdlIC49IG15c3FsaV9lcnJvcigkbXlzcWxpX2xpbmtfdmNsKSAuICJcbiI7CiAJCQlpZigkRU5BQkxFX0lURUNTQVVUSCkKLQkJCQkkbWVzc2FnZSAuPSBteXNxbF9lcnJvcigkbXlzcWxfbGlua19hY2N0KSAuICJcbiI7CisJCQkJJG1lc3NhZ2UgLj0gbXlzcWxpX2Vycm9yKCRteXNxbGlfbGlua19hY2N0KSAuICJcbiI7CiAJCQkkbWVzc2FnZSAuPSAkcXVlcnkgLiAiXG4iOwogCQl9CiAJCSRtZXNzYWdlIC49ICJFUlJPUigkZXJyY29kZSk6ICIgLiAkRVJST1JTWyIkZXJyY29kZSJdIC4gIlxuIjsKQEAgLTExMDQsNyArMTEyNCw3IEBACiAJZ2xvYmFsICRhZmZpbFZhbEZ1bmNBcmdzLCAkYWZmaWxWYWxGdW5jOwogCWlmKGVtcHR5KCRsb2dpbmlkKSkKIAkJcmV0dXJuIDA7Ci0JCisKIAkkcmMgPSBnZXRBZmZpbGlkQW5kTG9naW4oJGxvZ2luaWQsICRhZmZpbGlkKTsKIAlpZigkcmMgPT0gLTEpCiAJCXJldHVybiAwOwpAQCAtMTExMiwyNSArMTEzMiwyNSBAQAogCWlmKGVtcHR5KCRhZmZpbGlkKSkKIAkJcmV0dXJuIDA7CiAKLQkkZXNjbG9naW5pZCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkbG9naW5pZCk7CisJJGVzY2xvZ2luaWQgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbG9naW5pZCk7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCiAJICAgICAgIC4gIkZST00gdXNlciAiCiAJICAgICAgIC4gIldIRVJFIHVuaXR5aWQgPSAnJGVzY2xvZ2luaWQnIEFORCAiCiAJICAgICAgIC4gICAgICAgImFmZmlsaWF0aW9uaWQgPSAkYWZmaWxpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkKIAkJcmV0dXJuIDE7CiAKIAlpZigkcmMgPT0gMCAmJgotCSAgIEFMTE9XQUREU0hJQlVTRVJTID09IDEgJiYgCisJICAgQUxMT1dBRERTSElCVVNFUlMgPT0gMSAmJgogCSAgIHN0cnBvcygkbG9naW5pZCwgJ0AnKSkgewogCQkkcXVlcnkgPSAiU0VMRUNUIHNoaWJvbmx5ICIKIAkJICAgICAgIC4gIkZST00gYWZmaWxpYXRpb24gIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAiIC4gREVGQVVMVF9BRkZJTElEOwotCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7IAotCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOworCQkkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCk7CiAJCWlmKCRyb3dbJ3NoaWJvbmx5J10gPT0gMSkKLQkJCXJldHVybiAwOyAgICAgICAgICAgCisJCQlyZXR1cm4gMDsKIAl9CiAKIAkkdmFsZnVuYyA9ICRhZmZpbFZhbEZ1bmNbJGFmZmlsaWRdOwpAQCAtMTE4NCwxMSArMTIwNCwxMiBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8vCi0vLy8gXGZuIG15c3FsX2Nvbm5lY3RfcGx1cygkaG9zdCwgJHVzZXIsICRwd2QpCisvLy8gXGZuIG15c3FsX2Nvbm5lY3RfcGx1cygkaG9zdCwgJHVzZXIsICRwd2QsICRkYikKIC8vLwogLy8vIFxwYXJhbSAkaG9zdCAtIG15c3FsIGhvc3QKIC8vLyBccGFyYW0gJHVzZXIgLSB1c2VyaWQgdG8gdXNlIGZvciBjb25uZWN0aW9uCiAvLy8gXHBhcmFtICRwd2QgLSBwYXNzd29yZCB0byB1c2UgZm9yIGNvbm5lY3Rpb24KKy8vLyBccGFyYW0gJGRiIC0gZGF0YWJhc2UgdG8gdXNlIGFmdGVyIGNvbm5lY3RpbmcKIC8vLwogLy8vIFxyZXR1cm4gbXlzcWwgcmVzb3VyY2UgaWRlbnRpZmllciwgMCBpZiBmYWlsdXJlIHRvIGNvbm5lY3QKIC8vLwpAQCAtMTE5NywxMiArMTIxOCwxMiBAQAogLy8vIGFuZCByZXR1cm5zIHRoZSBpZGVudGlmaWVyCiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1mdW5jdGlvbiBteXNxbF9jb25uZWN0X3BsdXMoJGhvc3QsICR1c2VyLCAkcHdkKSB7CitmdW5jdGlvbiBteXNxbF9jb25uZWN0X3BsdXMoJGhvc3QsICR1c2VyLCAkcHdkLCAkZGIpIHsKIAkkdGltZW91dCA9IDU7ICAgICAgICAgICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLwogCiAJaWYoJGZwID0gQGZzb2Nrb3BlbigkaG9zdCwgMzMwNiwgJGVycm5vLCAkZXJyc3RyLCAkdGltZW91dCkpIHsKIAkJZmNsb3NlKCRmcCk7Ci0JCXJldHVybiAkbGluayA9IG15c3FsX2Nvbm5lY3QoJGhvc3QsICR1c2VyLCAkcHdkKTsKKwkJcmV0dXJuICRsaW5rID0gbXlzcWxpX2Nvbm5lY3QoJGhvc3QsICR1c2VyLCAkcHdkLCAkZGIpOwogCX0gZWxzZSB7CiAJCSNwcmludCAiRVJST1I6IHNvY2tldCB0aW1lb3V0PEJSPlxuIjsKIAkJcmV0dXJuIDA7CkBAIC0xMjE0LDI5ICsxMjM1LDI1IEBACiAvLy8gXGZuIGRiQ29ubmVjdCgpCiAvLy8KIC8vLyBcYnJpZWYgb3BlbnMgY29ubmVjdGlvbnMgdG8gZGF0YWJhc2UsIHRoZSByZXNvdXJjZSBpZGVudGlmaWVycyBhcmVcbgotLy8vIFxiICRteXNxbF9saW5rX3ZjbCAtIGZvciB2Y2wgZGF0YWJhc2VcbgotLy8vIFxiICRteXNxbF9saW5rX2FjY3QgLSBmb3IgYWNjb3VudHMgZGF0YWJhc2VcbgorLy8vIFxiICRteXNxbGlfbGlua192Y2wgLSBmb3IgdmNsIGRhdGFiYXNlXG4KKy8vLyBcYiAkbXlzcWxpX2xpbmtfYWNjdCAtIGZvciBhY2NvdW50cyBkYXRhYmFzZVxuCiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBkYkNvbm5lY3QoKSB7Ci0JZ2xvYmFsICR2Y2xob3N0LCAkdmNsZGIsICR2Y2x1c2VybmFtZSwgJHZjbHBhc3N3b3JkLCAkbXlzcWxfbGlua192Y2w7Ci0JZ2xvYmFsICRhY2N0aG9zdCwgJGFjY3R1c2VybmFtZSwgJGFjY3RwYXNzd29yZCwgJG15c3FsX2xpbmtfYWNjdDsKKwlnbG9iYWwgJHZjbGhvc3QsICR2Y2xkYiwgJHZjbHVzZXJuYW1lLCAkdmNscGFzc3dvcmQsICRteXNxbGlfbGlua192Y2w7CisJZ2xvYmFsICRhY2N0aG9zdCwgJGFjY3R1c2VybmFtZSwgJGFjY3RwYXNzd29yZCwgJG15c3FsaV9saW5rX2FjY3Q7CiAJZ2xvYmFsICRFTkFCTEVfSVRFQ1NBVVRIOwogCiAJaWYoJEVOQUJMRV9JVEVDU0FVVEgpIHsKIAkJLy8gb3BlbiBhIGNvbm5lY3Rpb24gdG8gbXlzcWwgc2VydmVyIGZvciBhY2NvdW50cwotCQlpZigkbXlzcWxfbGlua19hY2N0ID0gbXlzcWxfY29ubmVjdF9wbHVzKCRhY2N0aG9zdCwgJGFjY3R1c2VybmFtZSwgJGFjY3RwYXNzd29yZCkpCi0JCQlteXNxbF9zZWxlY3RfZGIoImFjY291bnRzIiwgJG15c3FsX2xpbmtfYWNjdCk7Ci0JCWVsc2UKKwkJaWYoISAoJG15c3FsaV9saW5rX2FjY3QgPSBteXNxbF9jb25uZWN0X3BsdXMoJGFjY3Rob3N0LCAkYWNjdHVzZXJuYW1lLCAkYWNjdHBhc3N3b3JkLCAnYWNjb3VudHMnKSkpCiAJCQkkRU5BQkxFX0lURUNTQVVUSCA9IDA7CiAJfQogCiAJLy8gb3BlbiBhIGNvbm5lY3Rpb24gdG8gbXlzcWwgc2VydmVyIGZvciB2Y2wKLQlpZighICRteXNxbF9saW5rX3ZjbCA9IG15c3FsX2Nvbm5lY3RfcGx1cygkdmNsaG9zdCwgJHZjbHVzZXJuYW1lLCAkdmNscGFzc3dvcmQpKSB7CisJaWYoISAkbXlzcWxpX2xpbmtfdmNsID0gbXlzcWxfY29ubmVjdF9wbHVzKCR2Y2xob3N0LCAkdmNsdXNlcm5hbWUsICR2Y2xwYXNzd29yZCwgJHZjbGRiKSkgewogCQlkaWUoIkVycm9yIGNvbm5lY3RpbmcgdG8gJHZjbGhvc3QuPGJyPlxuIik7CiAJfQotCS8vIHNlbGVjdCB0aGUgdmNsIGRhdGFiYXNlCi0JbXlzcWxfc2VsZWN0X2RiKCR2Y2xkYiwgJG15c3FsX2xpbmtfdmNsKSBvciBhYm9ydCgxMDQpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTI0NywxMCArMTI2NCwxMCBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gZGJEaXNjb25uZWN0KCkgewotCWdsb2JhbCAkbXlzcWxfbGlua192Y2wsICRteXNxbF9saW5rX2FjY3QsICRFTkFCTEVfSVRFQ1NBVVRIOwotCW15c3FsX2Nsb3NlKCRteXNxbF9saW5rX3ZjbCk7CisJZ2xvYmFsICRteXNxbGlfbGlua192Y2wsICRteXNxbGlfbGlua19hY2N0LCAkRU5BQkxFX0lURUNTQVVUSDsKKwlteXNxbGlfY2xvc2UoJG15c3FsaV9saW5rX3ZjbCk7CiAJaWYoJEVOQUJMRV9JVEVDU0FVVEgpCi0JCW15c3FsX2Nsb3NlKCRteXNxbF9saW5rX2FjY3QpOworCQlteXNxbGlfY2xvc2UoJG15c3FsaV9saW5rX2FjY3QpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTI2OCw5ICsxMjg1LDkgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGRvUXVlcnkoJHF1ZXJ5LCAkZXJyY29kZT0xMDEsICRkYj0idmNsIiwgJG5vbG9nPTApIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsLCAkbXlzcWxfbGlua19hY2N0LCAkdXNlciwgJG1vZGUsICRFTkFCTEVfSVRFQ1NBVVRIOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsLCAkbXlzcWxpX2xpbmtfYWNjdCwgJHVzZXIsICRtb2RlLCAkRU5BQkxFX0lURUNTQVVUSDsKIAlpZigkZGIgPT0gInZjbCIpIHsKLQkJaWYoUVVFUllMT0dHSU5HICE9IDAgJiYgKCEgJG5vbG9nKSAmJiAKKwkJaWYoUVVFUllMT0dHSU5HICE9IDAgJiYgKCEgJG5vbG9nKSAmJgogCQkgICBwcmVnX21hdGNoKCcvXihVUERBVEV8SU5TRVJUfERFTEVURSkvJywgJHF1ZXJ5KSAmJgogCQkgICBzdHJwb3MoJHF1ZXJ5LCAnVVBEQVRFIGNvbnRpbnVhdGlvbnMgU0VUIGV4cGlyZXRpbWUgPSAnKSA9PT0gRkFMU0UpIHsKIAkJCSRsb2dxdWVyeSA9IHN0cl9yZXBsYWNlKCInIiwgIlwnIiwgJHF1ZXJ5KTsKQEAgLTEyODksMTAgKzEzMDYsMTAgQEAKIAkJCSAgIC4gICAgICAgICJOT1coKSwgIgogCQkJICAgLiAgICAgICAgIickbW9kZScsICIKIAkJCSAgIC4gICAgICAgICInJGxvZ3F1ZXJ5JykiOwotCQkJbXlzcWxfcXVlcnkoJHEsICRteXNxbF9saW5rX3ZjbCk7CisJCQlteXNxbGlfcXVlcnkoJG15c3FsaV9saW5rX3ZjbCwgJHEpOwogCQl9Ci0JCWZvcigkaSA9IDA7ICEgKCRxaCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJG15c3FsX2xpbmtfdmNsKSkgJiYgJGkgPCAzOyAkaSsrKSB7Ci0JCQlpZihteXNxbF9lcnJubygpID09ICcxMjEzJykgIyBERUFETE9DSywgc2xlZXAgYW5kIHJldHJ5CisJCWZvcigkaSA9IDA7ICEgKCRxaCA9IG15c3FsaV9xdWVyeSgkbXlzcWxpX2xpbmtfdmNsLCAkcXVlcnkpKSAmJiAkaSA8IDM7ICRpKyspIHsKKwkJCWlmKG15c3FsaV9lcnJubygkbXlzcWxpX2xpbmtfdmNsKSA9PSAnMTIxMycpICMgREVBRExPQ0ssIHNsZWVwIGFuZCByZXRyeQogCQkJCXVzbGVlcCg1MCk7CiAJCQllbHNlCiAJCQkJYWJvcnQoJGVycmNvZGUsICRxdWVyeSk7CkBAIC0xMzAwLDcgKzEzMTcsNyBAQAogCX0KIAllbHNlaWYoJGRiID09ICJhY2NvdW50cyIpIHsKIAkJaWYoJEVOQUJMRV9JVEVDU0FVVEgpCi0JCQkkcWggPSBteXNxbF9xdWVyeSgkcXVlcnksICRteXNxbF9saW5rX2FjY3QpIG9yIGFib3J0KCRlcnJjb2RlLCAkcXVlcnkpOworCQkJJHFoID0gbXlzcWxpX3F1ZXJ5KCRteXNxbGlfbGlua19hY2N0LCAkcXVlcnkpIG9yIGFib3J0KCRlcnJjb2RlLCAkcXVlcnkpOwogCQllbHNlCiAJCQkkcWggPSBOVUxMOwogCX0KQEAgLTEzMTEsMTQgKzEzMjgsMzEgQEAKIC8vLwogLy8vIFxmbiBkYkxhc3RJbnNlcnRJRCgpCiAvLy8KLS8vLyBccmV0dXJuIGxhc3QgaW5zZXJ0IGlkIGZvciAkbXlzcWxfbGlua192Y2wKKy8vLyBccmV0dXJuIGxhc3QgaW5zZXJ0IGlkIGZvciAkbXlzcWxpX2xpbmtfdmNsCiAvLy8KLS8vLyBcYnJpZWYgY2FsbHMgbXlzcWxfaW5zZXJ0X2lkIGZvciAkbXlzcWxfbGlua192Y2wKKy8vLyBcYnJpZWYgY2FsbHMgbXlzcWxpX2luc2VydF9pZCBmb3IgJG15c3FsaV9saW5rX3ZjbAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gZGJMYXN0SW5zZXJ0SUQoKSB7Ci0JZ2xvYmFsICRteXNxbF9saW5rX3ZjbDsKLQlyZXR1cm4gbXlzcWxfaW5zZXJ0X2lkKCRteXNxbF9saW5rX3ZjbCk7CisJZ2xvYmFsICRteXNxbGlfbGlua192Y2w7CisJcmV0dXJuIG15c3FsaV9pbnNlcnRfaWQoJG15c3FsaV9saW5rX3ZjbCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8KKy8vLyBcZm4gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHN0cmluZykgeworLy8vCisvLy8gXHBhcmFtICRzdHJpbmcgLSBzdHJpbmcgdG8gYmUgZXNjYXBlZAorLy8vCisvLy8gXHJldHVybiBlc2NhcGVkIHN0cmluZworLy8vCisvLy8gXGJyaWVmIHdyYXBwZXIgZm9yIG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcgc28gdGhhdCAkbXlzcWxpX2xpbmtfdmNsIGdsb2JhbAorLy8vIHZhcmlhYmxlIGRvZXNuJ3QgaGF2ZSB0byBiZSBpbmNsdWRlZCBpbiBldmVyeSBmdW5jdGlvbiBuZWVkaW5nIHRvIGNhbGwgaXQKKy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRzdHJpbmcpIHsKKwlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKKwlyZXR1cm4gbXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZygkbXlzcWxpX2xpbmtfdmNsLCAkc3RyaW5nKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEzMzQsNyArMTM2OCw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSwgcHJldHR5bmFtZSwgdHlwZSwgaW5zdGFsbHR5cGUgRlJPTSBPUyBPUkRFUiBCWSBwcmV0dHluYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgIjExNSIpOwogCSRvc2xpc3QgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJG9zbGlzdFskcm93WydpZCddXSA9ICRyb3c7CiAJcmV0dXJuICRvc2xpc3Q7CiB9CkBAIC0xMzczLDcgKzE0MDcsNyBAQAogLy8vICAgICAgICAgICAgICAgICAgY2hlY2tlZCBvdXRcbgogLy8vIFxiIG1heGluaXRpYWx0aW1lIC0gbWF4aW11bSB0aW1lIChpbiBtaW51dGVzKSB0byBiZSBzaG93biB3aGVuIHJlcXVlc3RpbmcKIC8vLyAgICAgICAgICAgICAgICAgICAgIGEgcmVzZXJ2YXRpb24gdGhhdCB0aGUgaW1hZ2UgY2FuIHJlc2VydmVkIGZvclxuCi0vLy8gXGIgaW1hZ2VtZXRhaWQgLSBOVUxMIG9yIGNvcnJlc3BvbmRpbmcgaWQgZnJvbSBpbWFnZW1ldGEgdGFibGUgYW5kIHRoZSAKKy8vLyBcYiBpbWFnZW1ldGFpZCAtIE5VTEwgb3IgY29ycmVzcG9uZGluZyBpZCBmcm9tIGltYWdlbWV0YSB0YWJsZSBhbmQgdGhlCiAvLy8gZm9sbG93aW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb246XG4KIC8vLyBcYiBjaGVja3VzZXIgLSB3aGV0aGVyIG9yIG5vdCB2Y2xkIHNob3VsZCBjaGVjayBmb3IgYSBsb2dnZWQgaW4gdXNlclxuCiAvLy8gXGIgc3lzcHJlcCAtIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBzeXNwcmVwIG9uIGNyZWF0aW9uIG9mIHRoZSBpbWFnZVxuCkBAIC0xNDA2LDcgKzE0NDAsNyBAQAogCSAgICAgICAuICAgICAgICAiaWQgIgogCSAgICAgICAuICJGUk9NIGltYWdlbWV0YSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGFsbG1ldGFkYXRhWyRyb3dbJ2lkJ11dID0gJHJvdzsKIAogCSMgZ2V0IGFsbCBpbWFnZSByZXZpc2lvbiBkYXRhCkBAIC0xNDI4LDkgKzE0NjIsMTAgQEAKIAkgICAgICAgLiAiV0hFUkUgaS51c2VyaWQgPSB1LmlkIEFORCAiOwogCWlmKCEgJGluY2x1ZGVkZWxldGVkKQogCQkkcXVlcnkgLj0gICAiaS5kZWxldGVkID0gMCBBTkQgIjsKLQkkcXVlcnkgLj0gICAgICAidS5hZmZpbGlhdGlvbmlkID0gYS5pZCI7CisJJHF1ZXJ5IC49ICAgICAgInUuYWZmaWxpYXRpb25pZCA9IGEuaWQgIgorCSAgICAgICAuICJPUkRFUiBCWSBpLmltYWdlaWQsIGkucmV2aXNpb24iOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRpZCA9ICRyb3dbJ2ltYWdlaWQnXTsKIAkJdW5zZXQoJHJvd1snaW1hZ2VpZCddKTsKIAkJJGFsbHJldmlzaW9uZGF0YVskaWRdWyRyb3dbJ2lkJ11dID0gJHJvdzsKQEAgLTE0ODUsNyArMTUyMCw3IEBACiAJCSRxdWVyeSAuPSAiQU5EIGkuZGVsZXRlZCA9IDAgIjsKICAgICRxdWVyeSAuPSAiT1JERVIgQlkgaS5wcmV0dHluYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTIwKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZihpc19udWxsKCRyb3dbJ21heGNvbmN1cnJlbnQnXSkpCiAJCQkkcm93WydtYXhjb25jdXJyZW50J10gPSAwOwogCQkkaW1hZ2VsaXN0WyRpbmNsdWRlZGVsZXRlZF1bJHJvd1siaWQiXV0gPSAkcm93OwpAQCAtMTUxMiw3ICsxNTQ3LDcgQEAKIAkJCQkgICAgICAgIC4gIkZST00gc3ViaW1hZ2VzICIKIAkJCQkgICAgICAgIC4gIldIRVJFIGltYWdlbWV0YWlkID0gJG1ldGFpZCI7CiAJCQkJCSRxaDIgPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7Ci0JCQkJCXdoaWxlKCRyb3cyID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoMikpCisJCQkJCXdoaWxlKCRyb3cyID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaDIpKQogCQkJCQkJJGltYWdlbGlzdFskaW5jbHVkZWRlbGV0ZWRdWyRyb3dbImlkIl1dWyJzdWJpbWFnZXMiXVtdID0gICRyb3cyWyJpbWFnZWlkIl07CiAJCQkJfQogCQkJfQpAQCAtMTU2Miw3ICsxNTk3LDcgQEAKIAkkZml4ZWRkYXRhID0gYXJyYXkoKTsKIAkkcXVlcnkgPSAiU0VMRUNUIG5hbWUsIHZhbHVlIEZST00gdmFyaWFibGUgV0hFUkUgbmFtZSBMSUtFICdmaXhlZElQc3AlJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRzcGlkID0gc3RyX3JlcGxhY2UoJ2ZpeGVkSVBzcCcsICcnLCAkcm93WyduYW1lJ10pOwogCQkkZml4ZWRkYXRhWyRzcGlkXSA9IFNweWM6OllBTUxMb2FkKCRyb3dbJ3ZhbHVlJ10pOwogCX0KQEAgLTE1OTgsNyArMTYzMyw3IEBACiAJCSRxdWVyeSAuPSAiT1JERVIgQlkgbmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJHByb2ZpbGVzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkcHJvZmlsZXNbJHJvd1snaWQnXV0gPSAkcm93OwogCQlpZihpc3NldCgkZml4ZWRkYXRhWyRyb3dbJ2lkJ11dKSkgewogCQkJJHByb2ZpbGVzWyRyb3dbJ2lkJ11dWyduZXRtYXNrJ10gPSAkZml4ZWRkYXRhWyRyb3dbJ2lkJ11dWyduZXRtYXNrJ107CkBAIC0xNjQ3LDcgKzE2ODIsNyBAQAogCSAgICAgICAuICAgICAgICJzLmlkIElOICgkaW5pZHMpIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkcHJvZmlsZXMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHByb2ZpbGVzWyRyb3dbJ2lkJ11dID0gJHJvd1snaW1hZ2UnXTsKIAkkX1NFU1NJT05bJ3VzZXJzZXNzaW9uZGF0YSddWyRrZXldID0gJHByb2ZpbGVzOwogCXJldHVybiAkcHJvZmlsZXM7CkBAIC0xNjk2LDcgKzE3MzEsNyBAQAogCSRxdWVyeSAuPSAiIE9SREVSIEJZIHJldmlzaW9uIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkcmV0dXJuID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRyZXR1cm5bJHJvd1snaWQnXV0gPSAkcm93OwogCXJldHVybiAkcmV0dXJuOwogfQpAQCAtMTcyMyw3ICsxNzU4LDcgQEAKIAkgICAgICAgLiAiRlJPTSBpbWFnZSAiCiAJICAgICAgIC4gIldIRVJFIGlkID0gJGltYWdlaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuICRyb3c7CiAJZWxzZQogCQlyZXR1cm4gYXJyYXkoJ2Rlc2NyaXB0aW9uJyA9PiAnJywgJ3VzYWdlJyA9PiAnJyk7CkBAIC0xODA3LDcgKzE4NDIsNyBAQAogCQkgICAgICAgLiAgICAgICAgICAiZGlzYWJsZWQiOwogCiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZigkcm93WydkaXNhYmxlZCddICYmCiAJCQkgICBpc3NldCgkYWxsbWV0aG9kc1skcm93WydpbWFnZWlkJ11dWyRyb3dbJ2ltYWdlcmV2aXNpb25pZCddXVskcm93Wydjb25uZWN0bWV0aG9kaWQnXV0pKQogCQkJCXVuc2V0KCRhbGxtZXRob2RzWyRyb3dbJ2ltYWdlaWQnXV1bJHJvd1snaW1hZ2VyZXZpc2lvbmlkJ11dWyRyb3dbJ2Nvbm5lY3RtZXRob2RpZCddXSk7CkBAIC0xODQ0LDcgKzE4NzksNyBAQAogCWlmKCEgcHJlZ19tYXRjaCgnL15lbi8nLCAkbG9jYWxlKSkgewogCQkkcXVlcnkgPSAiREVTQyBjb25uZWN0bWV0aG9kIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJaWYoJHJvd1snRmllbGQnXSA9PSAiZGVzY3JpcHRpb25fJGxvY2FsZSIpCiAJCQkJJGRlc2NmaWVsZCA9ICJkZXNjcmlwdGlvbl8kbG9jYWxlIjsKIAkJCWlmKCRyb3dbJ0ZpZWxkJ10gPT0gImNvbm5lY3R0ZXh0XyRsb2NhbGUiKQpAQCAtMTg1OCw3ICsxODkzLDcgQEAKIAkgICAgICAgLiAgICAgICAgInByb3RvY29sICIKIAkgICAgICAgLiAiRlJPTSBjb25uZWN0bWV0aG9kcG9ydCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyb3dbJ2tleSddID0gIiNQb3J0LXskcm93Wydwcm90b2NvbCddfS17JHJvd1sncG9ydCddfSMiOwogCQkkY21wb3J0c1skcm93Wydjb25uZWN0bWV0aG9kaWQnXV1bXSA9ICRyb3c7CiAJfQpAQCAtMTg4Myw3ICsxOTE4LDcgQEAKIAkgICAgICAgLiAgICAgICAgICAiYy5gJGRlc2NmaWVsZGAiOwogCSRtZXRob2RzID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93WydkaXNhYmxlZCddKSB7CiAJCSAgaWYoaXNzZXQoJG1ldGhvZHNbJHJvd1snaWQnXV0pKQogCQkJdW5zZXQoJG1ldGhvZHNbJHJvd1snaWQnXV0pOwpAQCAtMTkxMCw3ICsxOTQ1LDcgQEAKIAkkcXVlcnkgPSAiU0VMRUNUIGlkLCBuYW1lIEZST00gaW1hZ2V0eXBlIE9SREVSIEJZIG5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkZGF0YSA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkZGF0YVskcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsKIAlyZXR1cm4gJGRhdGE7CiB9CkBAIC0xOTM1LDE0ICsxOTcwLDE0IEBACiAJJHF1ZXJ5ID0gIkRFU0MgaW1hZ2VtZXRhIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkZGVmYXVsdHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGRlZmF1bHRzWyRyb3dbJ0ZpZWxkJ11dID0gJHJvd1snRGVmYXVsdCddOwogCSMgZ2V0IGltYWdlbWV0YSBkYXRhCiAJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gaW1hZ2VtZXRhIFdIRVJFIGlkID0gJGltYWdlbWV0YWlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKTsKKwkkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCk7CiAJJGFsbGRlZmF1bHRzID0gMTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpID09IDApCisJaWYobXlzcWxpX251bV9yb3dzKCRxaCkgPT0gMCkKIAkJIyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpbWFnZW1ldGEgcmVjb3JkIGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkIGJlZm9yZQogCQkjICAgdGhpcyB3YXMgc3VibWl0dGVkCiAJCXJldHVybiAxOwpAQCAtMTk5MCwxMCArMjAyNSwxMCBAQAogCQkJcmV0dXJuICcnOwogCSRxdWVyeSA9ICJTRUxFQ1QgaWQsICIKIAkgICAgICAgLiAgICAgICAgImltYWdlaWQgIgotCSAgICAgICAuICJGUk9NIGltYWdlcmV2aXNpb24gICIgCisJICAgICAgIC4gIkZST00gaW1hZ2VyZXZpc2lvbiAgIgogCSAgICAgICAuICJXSEVSRSBwcm9kdWN0aW9uID0gMSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkYWxsZGF0YVskcm93WydpbWFnZWlkJ11dID0gJHJvd1snaWQnXTsKIAlyZXR1cm4gJGFsbGRhdGFbJGltYWdlaWRdOwogfQpAQCAtMjA3NCw3ICsyMTA5LDYgQEAKIAkJJGJ5Z3JvdXAgPSAxOwogCWlmKCEgJHVzZXJpZCkKIAkJJHVzZXJpZCA9ICR1c2VyWyJpZCJdOwotCSRyZXR1cm4gPSBhcnJheSgpOwogCiAJJG5vZGVwcml2cyA9IGFycmF5KCk7CiAJJHN0YXJ0bm9kZXMgPSBhcnJheSgpOwpAQCAtMjA5NCw3ICsyMTI4LDcgQEAKIAllbHNlCiAJCSRxdWVyeSAuPSAgICJ1LnVzZXJncm91cGlkID0gJGdyb3VwaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWFycmF5X3B1c2goJHN0YXJ0bm9kZXMsICRyb3dbInByaXZub2RlaWQiXSk7CiAJfQogCSMgYnVpbGQgZGF0YSBhcnJheSBmcm9tIHVzZXJwcml2dHlwZSBhbmQgdXNlcnByaXYgdGFibGVzIHRvIHJlZHVjZSBxdWVyaWVzCkBAIC0yMTA5LDcgKzIxNDMsNyBAQAogCSAgICAgICAuICAgICAgICJ1LnVzZXJpZCA9ICR1c2VyaWQgQU5EICIKIAkgICAgICAgLiAgICAgICAidC5uYW1lIElOICgnYmxvY2snLCdjYXNjYWRlJywkaW5saXN0KSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHByaXZkYXRhc2V0Wyd1c2VyJ11bJHJvd1sncHJpdm5vZGVpZCddXVtdID0gJHJvd1snbmFtZSddOwogCSRxdWVyeSA9ICJTRUxFQ1QgdC5uYW1lLCAiCiAJICAgICAgIC4gICAgICAgICJ1LnVzZXJncm91cGlkLCAiCkBAIC0yMTI4LDcgKzIxNjIsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSB1LnByaXZub2RlaWQsICIKIAkgICAgICAgLiAgICAgICAgICAidS51c2VyZ3JvdXBpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkcHJpdmRhdGFzZXRbJ3VzZXJncm91cCddWyRyb3dbJ3ByaXZub2RlaWQnXV1bXSA9IGFycmF5KCduYW1lJyA9PiAkcm93WyduYW1lJ10sICdncm91cGlkJyA9PiAkcm93Wyd1c2VyZ3JvdXBpZCddKTsKIAogCSMgdHJhdmVsIHVwIHRyZWUgbG9va2luZyBhdCBwcml2aWxlZ2VzIGdyYW50ZWQgYXQgcGFyZW50IG5vZGVzCkBAIC0yMTkwLDcgKzIyMjQsNyBAQAogCiAJJHJlc291cmNlcyA9IGFycmF5KCk7CiAJZm9yZWFjaChhcnJheV9rZXlzKCRyZXNvdXJjZWdyb3VwcykgYXMgJHR5cGUpIHsKLQkJJHJlc291cmNlc1skdHlwZV0gPSAKKwkJJHJlc291cmNlc1skdHlwZV0gPQogCQkgICBnZXRSZXNvdXJjZXNGcm9tR3JvdXBzKCRyZXNvdXJjZWdyb3Vwc1skdHlwZV0sICR0eXBlLCAkaW5jbHVkZWRlbGV0ZWQpOwogCX0KIAlpZighICRieWdyb3VwKQpAQCAtMjIyMCw3ICsyMjU0LDcgQEAKIC8vLyBcYnJpZWYgYWRkcyByZXNvdXJjZSBwcml2aWxlZ2VzIHRvICRub2RlcHJpdnMgZm9yIHRoZSBwYXJlbnRzIG9mICRub2RlaWQKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLWZ1bmN0aW9uIGdldFVzZXJSZXNvdXJjZXNVcCgmJG5vZGVwcml2cywgJG5vZGVpZCwgJHVzZXJpZCwgCitmdW5jdGlvbiBnZXRVc2VyUmVzb3VyY2VzVXAoJiRub2RlcHJpdnMsICRub2RlaWQsICR1c2VyaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc291cmNlcHJpdnMsICRwcml2ZGF0YXNldCkgewogCSMgYnVpbGQgbGlzdCBvZiBwYXJlbnQgbm9kZXMKIAkjIHN0YXJ0aW5nIGF0IHRvcCwgZ2V0IGltYWdlcyBhdmFpbGFibGUgYXQgdGhhdCBub2RlIGFuZCB1c2VyIHByaXZzIHRoZXJlIGFuZApAQCAtMjI1Nyw3ICsyMjkxLDcgQEAKIC8vLyBvZiAkbm9kZWlkCiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1mdW5jdGlvbiBnZXRVc2VyUmVzb3VyY2VzRG93bigmJG5vZGVwcml2cywgJG5vZGVpZCwgJHVzZXJpZCwgCitmdW5jdGlvbiBnZXRVc2VyUmVzb3VyY2VzRG93bigmJG5vZGVwcml2cywgJG5vZGVpZCwgJHVzZXJpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXNvdXJjZXByaXZzLCAkcHJpdmRhdGFzZXQpIHsKIAkjIEZJWE1FIGNhbiB3ZSBjaGVjayBmb3IgY2FzY2FkaW5nIGFuZCBpZiBub3QgdGhlcmUsIGRvbid0IGRlc2NlbmQ/CiAJJGNoaWxkcmVuID0gZ2V0Q2hpbGROb2Rlcygkbm9kZWlkKTsKQEAgLTIyODMsMTEgKzIzMTcsMTEgQEAKIC8vLwogLy8vIFxyZXR1cm4gbW9kaWZpZXMgJG5vZGVwcml2cywgYnV0IGRvZXNuJ3QgcmV0dXJuIGFueXRoaW5nCiAvLy8KLS8vLyBcYnJpZWYgZm9yICRpZCwgZ2V0cyBwcml2aWxlZ2VzIGFuZCBjYXNjYWRlZCBwcml2aWxlZ2VzIHRoZSB1c2VyIGFuZCBhbnkgCisvLy8gXGJyaWVmIGZvciAkaWQsIGdldHMgcHJpdmlsZWdlcyBhbmQgY2FzY2FkZWQgcHJpdmlsZWdlcyB0aGUgdXNlciBhbmQgYW55CiAvLy8gZ3JvdXBzIHRoZSB1c2VyIGlzIGFuZCBhZGRzIHRoZW0gdG8gJG5vZGVwcml2cwogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotZnVuY3Rpb24gYWRkTm9kZVVzZXJSZXNvdXJjZVByaXZzKCYkbm9kZXByaXZzLCAkaWQsICRsYXN0aWQsICR1c2VyaWQsIAorZnVuY3Rpb24gYWRkTm9kZVVzZXJSZXNvdXJjZVByaXZzKCYkbm9kZXByaXZzLCAkaWQsICRsYXN0aWQsICR1c2VyaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc291cmNlcHJpdnMsICRwcml2ZGF0YXNldCkgewogCSRub2RlcHJpdnNbJGlkXVsidXNlciJdID0gYXJyYXkoImNhc2NhZGUiID0+IDApOwogCWZvcmVhY2goJHJlc291cmNlcHJpdnMgYXMgJHByaXYpIHsKQEAgLTIzNTgsOSArMjM5Miw5IEBACiAJCQlpZigkbm9wcml2cykKIAkJCQkkbm9kZXByaXZzWyRpZF1bJGdyb3VwaWRdWyJjYXNjYWRlIl0gPSAwOwogCQl9Ci0JCS8vIGlmIGdyb3VwIG5vdCBibG9ja2luZyBhdCB0aGlzIG5vZGUsIGFuZCBncm91cCBoYWQgY2FzY2FkZSBhdCBwcmV2aW91cyAKKwkJLy8gaWYgZ3JvdXAgbm90IGJsb2NraW5nIGF0IHRoaXMgbm9kZSwgYW5kIGdyb3VwIGhhZCBjYXNjYWRlIGF0IHByZXZpb3VzCiAJCSMgbm9kZQotCQlpZigkbGFzdGlkICYmICEgJG5vZGVwcml2c1skaWRdWyRncm91cGlkXVsiYmxvY2siXSAmJiAKKwkJaWYoJGxhc3RpZCAmJiAhICRub2RlcHJpdnNbJGlkXVskZ3JvdXBpZF1bImJsb2NrIl0gJiYKIAkJICAgaXNzZXQoJG5vZGVwcml2c1skbGFzdGlkXVskZ3JvdXBpZF0pICYmCiAJCSAgICRub2RlcHJpdnNbJGxhc3RpZF1bJGdyb3VwaWRdWyJjYXNjYWRlIl0pIHsKIAkJCSMgc2V0IGNhc2NhZGUgPSAxCkBAIC0yNDY4LDcgKzI1MDIsNyBAQAogCQlpZighICRpbmNsdWRlZGVsZXRlZCAmJiAkdHlwZSA9PSAnbWFuYWdlbWVudG5vZGUnKQogCQkJJHF1ZXJ5IC49ICIgQU5EIHN0YXRlaWQgIT0gKFNFTEVDVCBpZCBGUk9NIHN0YXRlIFdIRVJFIG5hbWUgPSAnZGVsZXRlZCcpICI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCWlmKCEgaXNzZXQoJHJlc291cmNlc1skdHlwZV1bJHJvd1siaWQiXV0pKQogCQkJCSRyZXNvdXJjZXNbJHR5cGVdWyRyb3dbImlkIl1dID0gJHJvd1skZmllbGRdOwogCQl9CkBAIC0yNTAyLDcgKzI1MzYsNyBAQAogCSAgICAgICAuICJXSEVSRSBnLnJlc291cmNldHlwZWlkID0gdC5pZCBBTkQgIgogCSAgICAgICAuICAgICAgICJnLm93bmVydXNlcmdyb3VwaWQgSU4gKCRncm91cGlkcykiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCEgaXNzZXQoJHJlc291cmNlZ3JvdXBzWyRyb3dbInR5cGUiXV1bJHJvd1siaWQiXV0pKQogCQkJJHJlc291cmNlZ3JvdXBzWyRyb3dbInR5cGUiXV1bJHJvd1siaWQiXV0gPSAkcm93WyJuYW1lIl07CiAJfQpAQCAtMjU2Myw3ICsyNTk3LDcgQEAKIAkJJHF1ZXJ5IC49ICJBTkQgdGVzdCA9IDAgIjsqLwogCSRxdWVyeSAuPSAiT1JERVIgQlkgdC4kZmllbGQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyZXR1cm5bJHJvd1siaWQiXV0gPSAkcm93WyJuYW1lIl07CiAJfQogCXJldHVybiAkcmV0dXJuOwpAQCAtMjY0NCw3ICsyNjc4LDcgQEAKIAllbHNlCiAJCSRncm91cGlkID0gZ2V0UmVzb3VyY2VHcm91cElEKCRncm91cCk7CiAJZm9yZWFjaCgkYWRkcyBhcyAkdHlwZSkgewotCQkkdHlwZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdHlwZSk7CisJCSR0eXBlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHR5cGUpOwogCQkkcXVlcnkgPSAiSU5TRVJUIElHTk9SRSBJTlRPIHJlc291cmNlcHJpdiAoIgogCQkgICAgICAgLiAgICAgICAgInJlc291cmNlZ3JvdXBpZCwgIgogCQkgICAgICAgLiAgICAgICAgInByaXZub2RlaWQsICIKQEAgLTI2NTYsNyArMjY5MCw3IEBACiAJCWRvUXVlcnkoJHF1ZXJ5LCAzNzcpOwogCX0KIAlmb3JlYWNoKCRyZW1vdmVzIGFzICR0eXBlKSB7Ci0JCSR0eXBlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR0eXBlKTsKKwkJJHR5cGUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdHlwZSk7CiAJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSByZXNvdXJjZXByaXYgIgogCQkgICAgICAgLiAiV0hFUkUgcmVzb3VyY2Vncm91cGlkID0gJGdyb3VwaWQgQU5EICIKIAkJICAgICAgIC4gICAgICAgInByaXZub2RlaWQgPSAkbm9kZSBBTkQgIgpAQCAtMjcyNSw3ICsyNzU5LDcgQEAKIAkkY3J5cHRkYXRhID0gJGl2IC4gJGNyeXB0ZGF0YTsKIAlyZXR1cm4gdHJpbShiYXNlNjRfZW5jb2RlKCRjcnlwdGRhdGEpKTsKIH0KLSAKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLwogLy8vIFxmbiBkZWNyeXB0RGF0YSgkZGF0YSwgJGNyeXB0a2V5LCAkYWxnbywgJG9wdGlvbiwgJGtleWxlbmd0aCkKQEAgLTI3OTksNyArMjgzMyw3IEBACiAJICAgICAgIC4gIldIRVJFIGNyeXB0a2V5aWQgPSAkY3J5cHRrZXlpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJzZWNyZXRpZCA9ICRzZWNyZXRpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkKKwlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKQogCQlyZXR1cm4gTlVMTDsKIAkkc2VjcmV0ID0gZGVjcnlwdFNlY3JldEtleSgkcm93WydjcnlwdHNlY3JldCddKTsKIAlpZigkc2VjcmV0ID09PSBOVUxMKQpAQCAtMjgyOCw3ICsyODYyLDcgQEAKIAkJICAgICAgIC4gIkZST00gY3J5cHRrZXkgIgogCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkY3J5cHRrZXkiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkKKwkJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkKIAkJCXJldHVybiBOVUxMOwogCQkkY3J5cHRrZXkgPSAkcm93WydwdWJrZXknXTsKIAkJaWYoJHJvd1snYWxnb3JpdGhtb3B0aW9uJ10gPT0gJ09BRVAnIHx8IDEpICMgT0FFUCBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgb3B0aW9uCkBAIC0yODM2LDcgKzI4NzAsNyBAQAogCX0KIAllbHNlCiAJCSRwYWRkaW5nID0gY29uc3RhbnQoJ09QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HJyk7Ci0JJHNhdmVoZGxyID0gc2V0X2Vycm9yX2hhbmRsZXIoY3JlYXRlX2Z1bmN0aW9uKCcnLCAnJykpOworCSRzYXZlaGRsciA9IHNldF9lcnJvcl9oYW5kbGVyKGZ1bmN0aW9uKCkge30pOwogCWlmKEBvcGVuc3NsX3B1YmxpY19lbmNyeXB0KCRzZWNyZXQsICRlbmNkYXRhLCAkY3J5cHRrZXksICRwYWRkaW5nKSkgewogCQlzZXRfZXJyb3JfaGFuZGxlcigkc2F2ZWhkbHIpOwogCQkkYjY0ZGF0YSA9IGJhc2U2NF9lbmNvZGUoJGVuY2RhdGEpOwpAQCAtMjg2Niw3ICsyOTAwLDcgQEAKIAkkZmlsZSAuPSAiLy5odC1pbmMvY3J5cHRrZXkvcHJpdmF0ZS5wZW0iOwogCSRwcmlrZXkgPSBvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUoImZpbGU6Ly8kZmlsZSIsICRwZW1rZXkpOwogCSMgZGVjcnlwdCBzZWNyZXQgdXNpbmcgcHJpdmF0ZSBrZXkKLQkkc2F2ZWhkbHIgPSBzZXRfZXJyb3JfaGFuZGxlcihjcmVhdGVfZnVuY3Rpb24oJycsICcnKSk7CisJJHNhdmVoZGxyID0gc2V0X2Vycm9yX2hhbmRsZXIoZnVuY3Rpb24oKSB7fSk7CiAJaWYoQVNZTU9QVCA9PSAnT0FFUCcpCiAJCSRwYWRkaW5nID0gY29uc3RhbnQoJ09QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HJyk7CiAJIyBPQUVQIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBwYWRkaW5nIG9wdGlvbgpAQCAtMjg5Niw3ICsyOTMwLDcgQEAKIGZ1bmN0aW9uIGdldFNlY3JldEtleUlEKCR0YWJsZSwgJGZpZWxkLCAkcmVjb3JkaWQpIHsKIAkkcXVlcnkgPSAiU0VMRUNUICRmaWVsZCBGUk9NICR0YWJsZSBXSEVSRSBpZCA9ICRyZWNvcmRpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpICYmICRyb3dbMF0gIT0gMCkKKwlpZigoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgJiYgJHJvd1swXSAhPSAwKQogCQlyZXR1cm4gJHJvd1swXTsKIAogCSMgZ2VuZXJhdGUgc2VjcmV0IGtleQpAQCAtMjkzNSw3ICsyOTY5LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBzZWNyZXRpZCBGUk9NIGNyeXB0c2VjcmV0IFdIRVJFIGlkID0gJGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYoISAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKQorCWlmKCEgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkpCiAJCXJldHVybiBOVUxMOwogCSMgZW5jcnlwdCB3aXRoIGFsbCBvdGhlciBwdWJsaWMga2V5cyBhbmQgd3JpdGUgdG8gY3J5cHRzZWNyZXQKIAllbmNyeXB0V2ViU2VjcmV0S2V5cygka2V5LCAkcm93WydzZWNyZXRpZCddLCAkY3J5cHRrZXlpZCk7CkBAIC0yOTcwLDYgKzMwMDQsNyBAQAogZnVuY3Rpb24gZ2V0Q3J5cHRLZXlJRCgpIHsKIAkkcmVnID0gInwiIC4gU0NSSVBUIC4gIiR8IjsKIAkkZmlsZWJhc2UgPSBwcmVnX3JlcGxhY2UoJHJlZywgJycsICRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7CisJJGZpbGViYXNlID0gcHJlZ19yZXBsYWNlKCd8L3NoaWJhdXRofCcsICcnLCAkZmlsZWJhc2UpOwogCSRmaWxlYmFzZSAuPSAiLy5odC1pbmMvY3J5cHRrZXkiOwogCSRpZGZpbGUgPSAiJGZpbGViYXNlL2NyeXB0a2V5aWQiOwogCkBAIC0yOTg4LDEzICszMDIzLDEzIEBACiAJJGZoID0gZm9wZW4oJGlkZmlsZSwgJ3InKTsKIAkkaWQgPSBmcmVhZCgkZmgsIDUwKTsKIAlmY2xvc2UoJGZoKTsKLQkkX2lkID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRpZCk7CisJJF9pZCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRpZCk7CiAKIAkkcXVlcnkgPSAiU0VMRUNUIGlkICIKIAkgICAgICAgLiAiRlJPTSBjcnlwdGtleSAgIgogCSAgICAgICAuICJXSEVSRSBpZCA9ICckX2lkJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuICRyb3dbJ2lkJ107CiAKIAlpZigkY3JlYXRlKSB7CkBAIC0zMDI2LDcgKzMwNjEsNyBAQAogCSAgICAgICAuICAgICAgICJob3N0dHlwZSA9ICd3ZWInIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJHZhbHVlcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGNyeXB0c2VjcmV0ID0gZW5jcnlwdFNlY3JldEtleSgkc2VjcmV0LCAkcm93WydwdWJrZXknXSk7CiAJCWlmKCRjcnlwdHNlY3JldCA9PT0gTlVMTCkKIAkJCWNvbnRpbnVlOwpAQCAtMzA3Myw3ICszMTA4LDcgQEAKIAkgICAgICAgLiAgICAgICAiY3Muc2VjcmV0aWQgSVMgTlVMTCBBTkQgIgogCSAgICAgICAuICAgICAgICJjay5pZCAhPSAkbXljcnlwdGtleWlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHNlY3JldCA9IGRlY3J5cHRTZWNyZXRLZXkoJHJvd1snbXljcnlwdHNlY3JldCddKTsKIAkJJGVuY3NlY3JldCA9IGVuY3J5cHRTZWNyZXRLZXkoJHNlY3JldCwgJHJvd1snY3J5cHRrZXknXSk7CiAJCSR2YWx1ZXNbXSA9ICIoeyRyb3dbJ2NyeXB0a2V5aWQnXX0sIHskcm93WydzZWNyZXRpZCddfSwgJyRlbmNzZWNyZXQnLCAnIgpAQCAtMzExNiw3ICszMTUxLDcgQEAKIAkgICAgICAgLiAiV0hFUkUgcnMucmVxdWVzdGlkID0gJHJlcXVlc3RpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJhZC5zZWNyZXRpZCBJUyBOT1QgTlVMTCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHNlY3JldGlkc1skcm93WydtYW5hZ2VtZW50bm9kZWlkJ11dWyRyb3dbJ3NlY3JldGlkJ11dID0gMTsKIAkjIGRldGVybWluZSBhbnkgc2VjcmV0aWRzIG5lZWRlZCBmcm9tIHZtcHJvZmlsZQogCSRxdWVyeSA9ICJTRUxFQ1QgdnAuc2VjcmV0aWQsICIKQEAgLTMxMjgsNyArMzE2Myw3IEBACiAJICAgICAgIC4gIldIRVJFIHJzLnJlcXVlc3RpZCA9ICRyZXF1ZXN0aWQgQU5EICIKIAkgICAgICAgLiAgICAgICAidnAuc2VjcmV0aWQgSVMgTk9UIE5VTEwiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRzZWNyZXRpZHNbJHJvd1snbWFuYWdlbWVudG5vZGVpZCddXVskcm93WydzZWNyZXRpZCddXSA9IDE7CiAKIAkkbXljcnlwdGtleWlkID0gZ2V0Q3J5cHRLZXlJRCgpOwpAQCAtMzE4NSw3ICszMjIwLDcgQEAKIAkJICAgICAgIC4gICAgICAgInMuaWQgaW4gKCRhbGxzZWNyZXRpZHMpIEFORCAiCiAJCSAgICAgICAuICAgICAgICJjcy5zZWNyZXRpZCBJUyBOVUxMIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRzZWNyZXQgPSBkZWNyeXB0U2VjcmV0S2V5KCRyb3dbJ215Y3J5cHRzZWNyZXQnXSk7CiAJCQkkZW5jc2VjcmV0ID0gZW5jcnlwdFNlY3JldEtleSgkc2VjcmV0LCAkcm93WydjcnlwdGtleSddKTsKIAkJCSR2YWx1ZXNbXSA9ICIoeyRyb3dbJ2NyeXB0a2V5aWQnXX0sIHskcm93WydzZWNyZXRpZCddfSwgJyRlbmNzZWNyZXQnLCAnIgpAQCAtMzM0OSw3ICszMzg0LDcgQEAKIAkJJHF1ZXJ5IC49ICJBTkQgdWcuYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlhdGlvbmlkICI7CiAJJHF1ZXJ5IC49ICJPUkRFUiBCWSBuYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMjgwKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZighIGVtcHR5KCRyb3dbIm93bmVyIl0pICYmICEgZW1wdHkoJHJvd1snYWZmaWxpYXRpb24nXSkpCiAJCQkkcm93Wydvd25lciddID0gInskcm93Wydvd25lciddfUB7JHJvd1snYWZmaWxpYXRpb24nXX0iOwogCQlpZigkdXNlclsnc2hvd2FsbGdyb3VwcyddIHx8ICRhZmZpbGlhdGlvbmlkID09IDApCkBAIC0zMzkyLDEzICszNDI3LDEzIEBACiAJCSAgICAgICAuICJGUk9NIGB1c2VyZ3JvdXBgIHUsICIKIAkJICAgICAgIC4gICAgICAiYHVzZXJncm91cG1lbWJlcnNgIG0gIgogCQkgICAgICAgLiAiV0hFUkUgdS5lZGl0dXNlcmdyb3VwaWQgPSBtLnVzZXJncm91cGlkIEFORCAiCi0JCSAgICAgICAuICAgICAgICIodS5vd25lcmlkID0gJGlkIE9SIG0udXNlcmlkID0gJGlkKSBBTkQgIiAKKwkJICAgICAgIC4gICAgICAgIih1Lm93bmVyaWQgPSAkaWQgT1IgbS51c2VyaWQgPSAkaWQpIEFORCAiCiAJCSAgICAgICAuICAgICAgICJ1LmFmZmlsaWF0aW9uaWQgPSB7JHVzZXJbJ2FmZmlsaWF0aW9uaWQnXX0gIgogCQkgICAgICAgLiAiT1JERVIgQlkgbmFtZSI7CiAJfQogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRncm91cHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRncm91cHNbJHJvd1snaWQnXV0gPSAkcm93WyduYW1lJ107CiAJfQogCXJldHVybiAkZ3JvdXBzOwpAQCAtMzQzOCw3ICszNDczLDcgQEAKIAkkcXVlcnkgLj0gIk9SREVSIEJZIHVnLm5hbWUsICIKIAkgICAgICAgLiAgICAgICAgICAgInVncHQubmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkZGF0YVtdID0gJHJvdzsKIAlyZXR1cm4gJGRhdGE7CiB9CkBAIC0zNDYwLDcgKzM0OTUsNyBAQAogCSRkYXRhID0gYXJyYXkoKTsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkLCBuYW1lLCBoZWxwIEZST00gdXNlcmdyb3VwcHJpdnR5cGUgT1JERVIgQlkgbmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkZGF0YVskcm93WydpZCddXSA9ICRyb3c7CiAJcmV0dXJuICRkYXRhOwogfQpAQCAtMzUwNSw3ICszNTQwLDcgQEAKIAogCSRxdWVyeSAuPSAiT1JERVIgQlkgdC5uYW1lLCBnLm5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAyODEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKGVtcHR5KCR0eXBlKSkKIAkJCSRyZXR1cm5bJHJvd1siaWQiXV1bIm5hbWUiXSA9ICRyb3dbInR5cGUiXSAuICIvIiAuICRyb3dbIm5hbWUiXTsKIAkJZWxzZQpAQCAtMzU0OSw3ICszNTg0LDcgQEAKIAkJICAgICAgIC4gICAgICAgImdtLnJlc291cmNlaWQgPSByLmlkIEFORCAiCiAJCSAgICAgICAuICAgICAgICJyLnJlc291cmNldHlwZWlkID0gdC5pZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAyODIpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHJldHVyblskdHlwZV1bJHJvd1siaWQiXV1bXSA9ICRyb3dbImdyb3VwaWQiXTsKIAl9CiAJcmV0dXJuICRyZXR1cm47CkBAIC0zNjUzLDcgKzM2ODgsNyBAQAogCSAgICAgICAuICAgICAgICAgICJyZ20ucmVzb3VyY2Vncm91cGlkLCAiCiAJICAgICAgIC4gICAgICAgICAgJG9yZGVyczsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMjgyKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZihpc3NldCgkcm93WydkZWxldGVkJ10pICYmICRyb3dbJ2RlbGV0ZWQnXSA9PSAxKQogCQkJY29udGludWU7CiAJCWlmKGlzc2V0KCRyb3dbJ2RlbGV0ZWQyJ10pICYmICRyb3dbJ2RlbGV0ZWQyJ10gPT0gMSkKQEAgLTM2OTAsNyArMzcyNSw3IEBACiAJICAgICAgIC4gICAgICAgInUuYWZmaWxpYXRpb25pZCA9IGEuaWQgIgogCSAgICAgICAuICJPUkRFUiBCWSB1LnVuaXR5aWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyZXR1cm5bJHJvd1siaWQiXV0gPSAkcm93Wyd1c2VyJ107CiAJfQogCXJldHVybiAkcmV0dXJuOwpAQCAtMzcxNCw3ICszNzQ5LDcgQEAKIAkJcmV0dXJuOwogCiAJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIHVzZXJncm91cG1lbWJlcnMgIgotCSAgICAgICAuICAgICAgICAiKHVzZXJpZCwgIiAKKwkgICAgICAgLiAgICAgICAgIih1c2VyaWQsICIKIAkgICAgICAgLiAgICAgICAgInVzZXJncm91cGlkKSAiCiAJICAgICAgIC4gIlZBTFVFUyAiCiAJICAgICAgIC4gICAgICAgICIoJHVzZXJpZCwgIgpAQCAtMzc2Nyw4ICszODAyLDggQEAKIAkgICAgICAgLiAiV0hFUkUgdW5pdHlpZCA9ICckbG9naW5pZCcgQU5EICIKIAkgICAgICAgLiAgICAgICAiYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTQwKTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpKSB7Ci0JCSRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKTsKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgeworCQkkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpOwogCQlyZXR1cm4gJHJvd1swXTsKIAl9CiAJaWYoJG5vYWRkKQpAQCAtMzc5NSw3ICszODMwLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgaWQgREVTQyAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuICRyb3dbJ2ltYWdlaWQnXTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTM4MTQsNyArMzg0OSw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIGFmZmlsaWF0aW9uIE9SREVSIEJZIG5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRyZXR1cm4gPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHJldHVyblskcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsKIAlyZXR1cm4gJHJldHVybjsKIH0KQEAgLTM4MzgsOCArMzg3Myw4IEBACiAJCXJldHVybiAkY2FjaGVbJ3VuaXR5aWRzJ11bJHVzZXJpZF07CiAJJHF1ZXJ5ID0gIlNFTEVDVCB1bml0eWlkIEZST00gdXNlciBXSEVSRSBpZCA9ICR1c2VyaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKG15c3FsX251bV9yb3dzKCRxaCkpIHsKLQkJJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpOworCWlmKG15c3FsaV9udW1fcm93cygkcWgpKSB7CisJCSRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCk7CiAJCSRjYWNoZVsndW5pdHlpZHMnXVskdXNlcmlkXSA9ICRyb3dbMF07CiAJCXJldHVybiAkcm93WzBdOwogCX0KQEAgLTM4NTgsMTEgKzM4OTMsMTEgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdldEFmZmlsaWF0aW9uSUQoJGFmZmlsKSB7Ci0JJGFmZmlsID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRhZmZpbCk7CisJJGFmZmlsID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGFmZmlsKTsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gYWZmaWxpYXRpb24gV0hFUkUgbmFtZSA9ICckYWZmaWwnIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZihteXNxbF9udW1fcm93cygkcWgpKSB7Ci0JCSRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKTsKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgeworCQkkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpOwogCQlyZXR1cm4gJHJvd1swXTsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0zODgyLDggKzM5MTcsOCBAQAogZnVuY3Rpb24gZ2V0QWZmaWxpYXRpb25OYW1lKCRhZmZpbGlkKSB7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lIEZST00gYWZmaWxpYXRpb24gV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgewotCQkkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCk7CisJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKKwkJJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKTsKIAkJcmV0dXJuICRyb3dbMF07CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzkwNyw3ICszOTQyLDcgQEAKIAlpZigkYWZmaWxpZCkKIAkJJHF1ZXJ5IC49ICIgV0hFUkUgaWQgPSAkYWZmaWxpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkcmV0dXJuWyRyb3dbJ2lkJ11dID0gJHJvd1snZGF0YVVwZGF0ZVRleHQnXTsKIAlyZXR1cm4gJHJldHVybjsKIH0KQEAgLTM5MzUsNyArMzk3MCw3IEBACiAJICAJICAgICAgIC4gICAgICAgImEyLm5hbWUgPSAnR2xvYmFsJyI7CiAJfQogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQlpZigoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpICYmICEgZW1wdHkoJHJvd1sndGhlbWUnXSkpCisJaWYoKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgJiYgISBlbXB0eSgkcm93Wyd0aGVtZSddKSkKIAkJcmV0dXJuICRyb3dbJ3RoZW1lJ107CiAJZWxzZQogCQlyZXR1cm4gREVGQVVMVFRIRU1FOwpAQCAtMzk2Niw3ICs0MDAxLDcgQEAKIAkgICBzdHJuY21wKCJ7JF9QT1NUWyR2YXJ0YWddfSIsICIwIiwgMSkgPT0gMCAmJgogCSAgICR0eXBlID09IEFSR19OVU1FUklDICYmCiAJCXN0cm5jbXAoInskX1BPU1RbJHZhcnRhZ119IiwgIjB4MCIsIDMpICE9IDApIHx8Ci0JICAgKGFycmF5X2tleV9leGlzdHMoJHZhcnRhZywgJF9HRVQpICYmIAorCSAgIChhcnJheV9rZXlfZXhpc3RzKCR2YXJ0YWcsICRfR0VUKSAmJgogCSAgICEgaXNfYXJyYXkoJF9HRVRbJHZhcnRhZ10pICYmCiAJICAgc3RybmNtcCgieyRfR0VUWyR2YXJ0YWddfSIsICIwIiwgMSkgPT0gMCAmJgogCSAgICR0eXBlID09IEFSR19OVU1FUklDICYmCkBAIC00MTY1LDcgKzQyMDAsNyBAQAogCQkJaWYoISBpc19zdHJpbmcoJHZhbHVlKSkKIAkJCQkkcmV0dXJuWyRpbmRleF0gPSAkZGVmYXVsdHZhbHVlOwogCQkJZWxzZWlmKCRhZGRzbGFzaGVzKQotCQkJCSRyZXR1cm5bJGluZGV4XSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFsdWUpOworCQkJCSRyZXR1cm5bJGluZGV4XSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR2YWx1ZSk7CiAJCX0KIAkJcmV0dXJuICRyZXR1cm47CiAJfQpAQCAtNDE3NCw3ICs0MjA5LDcgQEAKIAkJaWYoc3RybGVuKCRyZXR1cm4pID09IDApCiAJCQkkcmV0dXJuID0gJGRlZmF1bHR2YWx1ZTsKIAkJZWxzZWlmKCRhZGRzbGFzaGVzKQotCQkJJHJldHVybiA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkcmV0dXJuKTsKKwkJCSRyZXR1cm4gPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkcmV0dXJuKTsKIAl9CiAKIAlyZXR1cm4gJHJldHVybjsKQEAgLTQyMzIsNyArNDI2Nyw2IEBACiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkkdXNlciA9IGFycmF5KCk7CiAJJHF1ZXJ5ID0gIlNFTEVDVCB1LnVuaXR5aWQgQVMgdW5pdHlpZCwgIgogCSAgICAgICAuICAgICAgICAidS5hZmZpbGlhdGlvbmlkLCAiCiAJICAgICAgIC4gICAgICAgICJhZi5uYW1lIEFTIGFmZmlsaWF0aW9uLCAiCkBAIC00MjY3LDcgKzQzMDEsNyBAQAogCQkkcXVlcnkgLj0gInUudW5pdHlpZCA9ICckaWQnIEFORCBhZi5pZCA9ICRhZmZpbGlkIjsKIAogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAiMTA1Iik7Ci0JaWYoJHVzZXIgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoJHVzZXIgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkdXNlclsnc3NocHVibGlja2V5cyddID0gaHRtbHNwZWNpYWxjaGFycygkdXNlclsnc3NocHVibGlja2V5cyddKTsKIAkJaWYoKGRhdGV0aW1lVG9Vbml4KCR1c2VyWyJsYXN0dXBkYXRlZCJdKSA+IHRpbWUoKSAtIFNFQ0lOREFZKSB8fAogCQkgICAkdXNlclsndW5pdHlpZCddID09ICd2Y2xyZWxvYWQnIHx8CkBAIC00MzQzLDcgKzQzNzcsNyBAQAogCX0KIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgIjEwMSIpOwogCSRncm91cHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRncm91cHNbJHJvd1sidXNlcmdyb3VwaWQiXV0gPSAkcm93WyJuYW1lIl07CiAJfQogCWlmKCRpbmNsdWRlb3duZWQpIHsKQEAgLTQzNjIsNyArNDM5Niw3IEBACiAJCQkgICAgICAgLiAiV0hFUkUgb3duZXJpZCA9ICR1c2VyaWQiOwogCQl9CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAiMTAxIik7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJJGdyb3Vwc1skcm93WyJ1c2VyZ3JvdXBpZCJdXSA9ICRyb3dbIm5hbWUiXTsKIAkJfQogCX0KQEAgLTQzOTgsNyArNDQzMiw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIHQubmFtZSI7CiAJJHBlcm1zID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRwZXJtc1skcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsKIAlyZXR1cm4gJHBlcm1zOwogfQpAQCAtNDQ2OCw5ICs0NTAyLDggQEAKIAkJICAgICAgIC4gIkZST00gdXNlciAiCiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICRpZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRpZCA9ICRyb3dbJ3VuaXR5aWQnXTsKLQkJCSR0eXBlID0gJ2xvZ2luaWQnOwogCQkJJGFmZmlsaWQgPSAkcm93WydhZmZpbGlhdGlvbmlkJ107CiAJCX0KIAkJZWxzZQpAQCAtNDUzMCw5ICs0NTYzLDkgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiB1cGRhdGVVc2VyUHJlZnMoJHVzZXJpZCwgJHByZWZlcnJlZG5hbWUsICR3aWR0aCwgJGhlaWdodCwgJGJwcCwgJGF1ZGlvLAogICAgICAgICAgICAgICAgICAgICAgICAgICRtYXBkcml2ZXMsICRtYXBwcmludGVycywgJG1hcHNlcmlhbCwgJHJkcHBvcnQpIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsOwotCSRwcmVmZXJyZWRuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRwcmVmZXJyZWRuYW1lKTsKLQkkYXVkaW8gPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGF1ZGlvKTsKKwlnbG9iYWwgJG15c3FsaV9saW5rX3ZjbDsKKwkkcHJlZmVycmVkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRwcmVmZXJyZWRuYW1lKTsKKwkkYXVkaW8gPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkYXVkaW8pOwogCWlmKCRyZHBwb3J0ID09IDMzODkpCiAJCSRyZHBwb3J0ID0gJ05VTEwnOwogCSRxdWVyeSA9ICJVUERBVEUgdXNlciBTRVQgIgpAQCAtNDU0Nyw3ICs0NTgwLDcgQEAKIAkgICAgICAgLiAgICAgICAgInJkcHBvcnQgPSAkcmRwcG9ydCAiCiAJICAgICAgIC4gIldIRVJFIGlkID0gJHVzZXJpZCI7CiAJZG9RdWVyeSgkcXVlcnksIDI3MCk7Ci0JcmV0dXJuIG15c3FsX2FmZmVjdGVkX3Jvd3MoJG15c3FsX2xpbmtfdmNsKTsKKwlyZXR1cm4gbXlzcWxpX2FmZmVjdGVkX3Jvd3MoJG15c3FsaV9saW5rX3ZjbCk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC00NTU2LDcgKzQ1ODksNyBAQAogLy8vCiAvLy8gXHBhcmFtICR1c2VyaWQgLSBhbiBpZCBmcm9tIHRoZSB1c2VyIHRhYmxlCiAvLy8KLS8vLyBccmV0dXJuIGFuIGFycmF5IG9mIHByaXZpbGVnZXMgdHlwZXMgdGhhdCB0aGUgdXNlciBoYXMgc29tZXdoZXJlIGluIHRoZSAKKy8vLyBccmV0dXJuIGFuIGFycmF5IG9mIHByaXZpbGVnZXMgdHlwZXMgdGhhdCB0aGUgdXNlciBoYXMgc29tZXdoZXJlIGluIHRoZQogLy8vIHByaXZpbGVnZSB0cmVlCiAvLy8KIC8vLyBcYnJpZWYgZ2V0IHRoZSBwcml2aWxlZ2UgdHlwZXMgdGhhdCB0aGUgdXNlciBoYXMgc29tZXdoZXJlIGluIHRoZQpAQCAtNDU3OCw3ICs0NjExLDcgQEAKIAkgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAiV0hFUkUgb3duZXJpZCA9ICR1c2VyaWQpKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwNyk7CiAJJHByaXZpbGVnZXMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQogCQkkcHJpdmlsZWdlc1tdID0gJHJvd1swXTsKIAlpZihpbl9hcnJheSgibWdtdE5vZGVBZG1pbiIsICRwcml2aWxlZ2VzKSkKIAkJJHByaXZpbGVnZXNbXSA9ICdtYW5hZ2VtZW50bm9kZUFkbWluJzsKQEAgLTQ2MTMsNyArNDY0Niw3IEBACiAJICAgICAgIC4gICAgICAgInIuZ3JvdXBpZCBJTiAoJGluaWRzKSI7CiAJJGlkcyA9IGFycmF5KCk7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkaWRzW10gPSAkcm93WydpZCddOwogCXJldHVybiAkaWRzOwogfQpAQCAtNDczNCw3ICs0NzY3LDcgQEAKIAkJCSRxdWVyeSAuPSAgICJBTkQgcnEuaWQgIT0gJHJlcXVlc3RpZCAiOwogCQkkcXVlcnkgLj0gIkxJTUlUIDEiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJcmV0dXJuIGRlYnVnSXNBdmFpbGFibGUoLTMsIDIsICRzdGFydCwgJGVuZCwgJGltYWdlcmV2aXNpb25pZCk7CiAJCX0KIApAQCAtNDc0NCw3ICs0Nzc3LDcgQEAKIAkJICAgICAgIC4gIldIRVJFIElQYWRkcmVzcyA9ICckaXAnIEFORCAiCiAJCSAgICAgICAuICAgICAgICJzdGF0ZWlkICE9IDEiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJcmV0dXJuIGRlYnVnSXNBdmFpbGFibGUoLTQsIDE2LCAkc3RhcnQsICRlbmQsICRpbWFnZXJldmlzaW9uaWQpOwogCQl9CiAJfQpAQCAtNDc2MSw3ICs0Nzk0LDcgQEAKIAogCWZvcmVhY2goJHJlcXVlc3RJbmZvWyJpbWFnZXMiXSBhcyAka2V5ID0+ICRpbWFnZWlkKSB7CiAJCSMgY2hlY2sgZm9yIG1heCBjb25jdXJyZW50IHVzYWdlIG9mIGltYWdlCi0JCWlmKCEgJHNraXBjb25jdXJyZW50Y2hlY2sgJiYgCisJCWlmKCEgJHNraXBjb25jdXJyZW50Y2hlY2sgJiYKIAkJICAgJGltYWdlc1skaW1hZ2VpZF1bJ21heGNvbmN1cnJlbnQnXSAhPSBOVUxMKSB7CiAJCQlpZigkdXNlcmlkID09IDApCiAJCQkJJHVzZXJzZ3JvdXBzID0gJHVzZXJbJ2dyb3VwcyddOwpAQCAtNDc4NSw3ICs0ODE4LDcgQEAKIAkJCSAgICAgICAuICAgICAgICJycS5zdGF0ZWlkIE5PVCBJTiAoMSw1LDExLDEyLDE2LDE3KSBBTkQgIgogCQkJICAgICAgIC4gICAgICAgInJxLnVzZXJpZCAhPSAkcmVsb2FkaWQiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkJJGNvbXBpZHNbXSA9ICRyb3dbJ2NvbXB1dGVyaWQnXTsKIAkJCQlpZigkcm93WydyZXFpZCddID09ICRyZXF1ZXN0aWQpCiAJCQkJCSRkZWNmb3JlZGl0ID0gMTsKQEAgLTQ4MDcsNyArNDg0MCw3IEBACiAJCQkgICAgICAgLiAgICAgICAiYnQuc2tpcCAhPSAxIEFORCAiCiAJCQkgICAgICAgLiAgICAgICAiYnIuc3RhdHVzICE9ICdkZWxldGVkJyI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJCWNsZWFuU2VtYXBob3JlKCk7CiAJCQkJcmV0dXJuIGRlYnVnSXNBdmFpbGFibGUoMCwgMywgJHN0YXJ0LCAkZW5kLCAkaW1hZ2VyZXZpc2lvbmlkKTsKIAkJCX0KQEAgLTQ4NzcsNyArNDkxMCw3IEBACiAJCQkgICAgICAgLiAiRlJPTSBjb21wdXRlciAiCiAJCQkgICAgICAgLiAiV0hFUkUgaWQgPSAkY29tcGlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMjgpOwotCQkJJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpOworCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKTsKIAkJCWlmKCEgaW5fYXJyYXkoJHJvd1swXSwgJHNjaGVkdWxlaWRzKSkgewogCQkJCWNsZWFuU2VtYXBob3JlKCk7CiAJCQkJcmV0dXJuIGRlYnVnSXNBdmFpbGFibGUoMCwgNywgJHN0YXJ0LCAkZW5kLCAkaW1hZ2VyZXZpc2lvbmlkLCAkY29tcHV0ZXJpZHMsICRjdXJyZW50aWRzLCAkYmxvY2tpZHMpOwpAQCAtNDg5Myw3ICs0OTI2LDcgQEAKIAkJCSAgICAgICAuICJMRUZUIEpPSU4gT1MgT04gKGkuT1NpZCA9IE9TLmlkKSAiCiAJCQkgICAgICAgLiAiV0hFUkUgaS5pZCA9ICRpbWFnZWlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYoISAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKSB7CisJCQlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKSB7CiAJCQkJY2xlYW5TZW1hcGhvcmUoKTsKIAkJCQlyZXR1cm4gZGVidWdJc0F2YWlsYWJsZSgwLCA4LCAkc3RhcnQsICRlbmQsICRpbWFnZXJldmlzaW9uaWQsICRjb21wdXRlcmlkcywgJGN1cnJlbnRpZHMsICRibG9ja2lkcyk7CiAJCQl9CkBAIC00OTUyLDcgKzQ5ODUsNyBAQAogCQkJICAgICAgIC4gICAgICAgICAgIm5ldHdvcmsiOwogCiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTI5KTsKLQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCQlhcnJheV9wdXNoKCRjb21wdXRlcmlkcywgJHJvd1snaWQnXSk7CiAJCQkJaWYoJHJvd1snY3VycmVudGltYWdlaWQnXSA9PSAkaW1hZ2VpZCAmJgogCQkJCSAgICRyb3dbJ2ltYWdlcmV2aXNpb25pZCddID09ICRyZXF1ZXN0SW5mb1snaW1hZ2VyZXZpc2lvbnMnXVska2V5XSkgewpAQCAtNDk4MSw3ICs1MDE0LDcgQEAKIAkJICAgICAgIC4gICAgICAgInJxLnN0YXRlaWQgTk9UIElOICg1LCAxMiwgMTkpIEFORCAiICMgZmFpbGVkLCBjb21wbGV0ZSwgcmVsb2FkCiAJCSAgICAgICAuICAgICAgICIocnEuc3RhdGVpZCAhPSAxNCBPUiBycS5sYXN0c3RhdGVpZCAhPSAxOSkiOyAjIHBlbmRpbmcvcmVsb2FkCiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMzApOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQkJYXJyYXlfcHVzaCgkdXNlZENvbXB1dGVyaWRzLCAkcm93WzBdKTsKIAkJfQogCkBAIC01MDU2LDkgKzUwODksMTEgQEAKIAkJCSAgICAgICAuICAgICAgICAgICJjLm5ldHdvcmsiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJCQkkbmV3Y29tcGlkcyA9IGFycmF5KCk7Ci0JCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkkbmV3Y29tcGlkc1tdID0gJHJvd1snaWQnXTsKIAkJCSRjb21wdXRlcmlkcyA9ICRuZXdjb21waWRzOworCQkJaWYoZW1wdHkoJGNvbXB1dGVyaWRzKSAmJiBlbXB0eSgkYmxvY2tpZHMpKQorCQkJCXJldHVybiBkZWJ1Z0lzQXZhaWxhYmxlKDAsIDIzLCAkc3RhcnQsICRlbmQsICRpbWFnZXJldmlzaW9uaWQsICRjb21wdXRlcmlkcywgJGN1cnJlbnRpZHMsICRibG9ja2lkcywgYXJyYXkoKSwgJHZpcnR1YWwpOwogCQl9CiAKIAkJIyBjaGVjayBmb3IgdXNlIG9mIHNwZWNpZmllZCBJUCBhZGRyZXNzLCBoYXZlIHRvIHdhaXQgdW50aWwgaGVyZQpAQCAtNTA3OCw5ICs1MTEzLDkgQEAKIAkJCSAgICAgICAuICAgICAgICIodHlwZSAhPSAndmlydHVhbG1hY2hpbmUnIE9SICIKIAkJCSAgICAgICAuICAgICAgICJ2bWhvc3RpZCBJUyBOT1QgTlVMTCkiOwogCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCQkJaWYobXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJCQlpZigkbm93KQotCQkJCQlyZXR1cm4gZGVidWdJc0F2YWlsYWJsZSgtNCwgMTgsICRzdGFydCwgJGVuZCwgJGltYWdlcmV2aXNpb25pZCwgJGNvbXB1dGVyaWRzLCAkY3VycmVudGlkcywgJGJsb2NraWRzLCBhcnJheSgpLCAkdmlydHVhbCk7CisJCQkJCXJldHVybiBkZWJ1Z0lzQXZhaWxhYmxlKC00LCAyNCwgJHN0YXJ0LCAkZW5kLCAkaW1hZ2VyZXZpc2lvbmlkLCAkY29tcHV0ZXJpZHMsICRjdXJyZW50aWRzLCAkYmxvY2tpZHMsIGFycmF5KCksICR2aXJ0dWFsKTsKIAkJCQkkcmVxdWVzdEluZm9bJ2lwd2FybmluZyddID0gMTsKIAkJCX0KIAkJCSRxdWVyeSA9ICJTRUxFQ1QgaWQgIgpAQCAtNTA5MCwxNCArNTEyNSwxNCBAQAogCQkJaWYoJHJlcXVlc3RpZCkKIAkJCQkkcXVlcnkgLj0gIiBBTkQgaWQgIT0gJGNvbXBpZCI7ICMgVE9ETyB0ZXN0IHRoaXMKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCSRjbnQgPSBteXNxbF9udW1fcm93cygkcWgpOworCQkJJGNudCA9IG15c3FsaV9udW1fcm93cygkcWgpOwogCQkJaWYoJGNudCA+IDEpIHsKIAkJCQlpZigkbm93KQogCQkJCQlyZXR1cm4gZGVidWdJc0F2YWlsYWJsZSgtNCwgMjIsICRzdGFydCwgJGVuZCwgJGltYWdlcmV2aXNpb25pZCwgJGNvbXB1dGVyaWRzLCAkY3VycmVudGlkcywgJGJsb2NraWRzLCBhcnJheSgpLCAkdmlydHVhbCk7CiAJCQkJJHJlcXVlc3RJbmZvWydpcHdhcm5pbmcnXSA9IDE7CiAJCQl9CiAJCQllbHNlaWYoJGNudCA9PSAxKSB7Ci0JCQkJJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJCQkJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCQkJCSRjb21wdXRlcmlkcyA9IGFycmF5KCRyb3dbJ2lkJ10pOwogCQkJCSRibG9ja2lkcyA9IGFycmF5KCk7CiAJCQl9CkBAIC01MTgyLDcgKzUyMTcsNyBAQAogZnVuY3Rpb24gZGVidWdJc0F2YWlsYWJsZSgkcmMsICRsb2MsICRzdGFydCwgJGVuZCwgJGltYWdlcmV2aXNpb25pZCwKIAkgICAgICAgICAgICAgICAgICAgICAgICRjb21waWRzPWFycmF5KCksICRjdXJyZW50aWRzPWFycmF5KCksCiAJICAgICAgICAgICAgICAgICAgICAgICAkYmxvY2tpZHM9YXJyYXkoKSwgJGZhaWxlZGlkcz1hcnJheSgpLCAkdmlydHVhbD0nJykgewotCWdsb2JhbCAkdXNlciwgJG1vZGUsICRyZXF1ZXN0SW5mbzsKKwlnbG9iYWwgJG1vZGUsICRyZXF1ZXN0SW5mbzsKIAkkZGVidWcgPSBnZXRDb250aW51YXRpb25WYXIoJ2RlYnVnJywgMCk7CiAJaWYoISAkZGVidWcgfHwKIAkgICAkbW9kZSAhPSAnQUp1cGRhdGVXYWl0VGltZScgfHwKQEAgLTUyNDAsOSArNTI3NSw2IEBACiAJCWNhc2UgIjEzIjoKIAkJCSRtc2cgPSAibm8gY29tcHV0ZXJzIGF2YWlsYWJsZSAoYWZ0ZXIgdmlydHVhbCBob3N0IHJlc291cmNlIGNoZWNrcy9iZWZvcmUgcGVyZm9ybWluZyBvdmVybGFwcGluZyBJUCBhZGRyZXNzIGNoZWNrKSI7CiAJCQlicmVhazsKLQkJY2FzZSAiMTgiOgotCQkJJG1zZyA9ICJyZXF1ZXN0ZWQgSVAgYWRkcmVzcyBpbiB1c2UgYnkgYW5vdGhlciBjb21wdXRlciI7Ci0JCQlicmVhazsKIAkJY2FzZSAiMjIiOgogCQkJJG1zZyA9ICJhdCBsZWFzdCAyIGNvbXB1dGVycyBoYXZlIHRoZSByZXF1ZXN0ZWQgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGVtIjsKIAkJCWJyZWFrOwpAQCAtNTI1Miw2ICs1Mjg0LDEyIEBACiAJCWNhc2UgIjEyIjoKIAkJCSRtc2cgPSAic3VjY2Vzc2Z1bGx5IGZvdW5kIGEgY29tcHV0ZXIgKGlkOiB7JHJlcXVlc3RJbmZvWydjb21wdXRlcnMnXVswXX0pIjsKIAkJCWJyZWFrOworCQljYXNlICIyMyI6CisJCQkkbXNnID0gIm5vIGNvbXB1dGVycyBhdmFpbGFibGUgYWZ0ZXIgcGVyZm9ybWluZyBWTSBob3N0IGNoZWNrIjsKKwkJCWJyZWFrOworCQljYXNlICIyNCI6CisJCQkkbXNnID0gInJlcXVlc3RlZCBJUCBhZGRyZXNzIGluIHVzZSBieSBhbm90aGVyIGNvbXB1dGVyIjsKKwkJCWJyZWFrOwogCX0KIAlwcmludCAiY29uc29sZS5sb2coJyRtc2cnKTsiOwogCXJldHVybiAkcmM7CkBAIC01MzAyLDcgKzUzNDAsNyBAQAogCiAJJHNjaGVkdWxlaWRzID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTI3KTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFycmF5X3B1c2goJHNjaGVkdWxlaWRzLCAkcm93WzBdKTsKIAl9CiAJcmV0dXJuICRzY2hlZHVsZWlkczsKQEAgLTUzMjIsNyArNTM2MCw3IEBACiBmdW5jdGlvbiBnZXRJbWFnZVBsYXRmb3JtKCRpbWFnZWlkKSB7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBwbGF0Zm9ybWlkIEZST00gaW1hZ2UgV0hFUkUgaWQgPSAkaW1hZ2VpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEyNSk7Ci0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuICRyb3dbJ3BsYXRmb3JtaWQnXTsKIH0KQEAgLTUzNTAsNyArNTM4OCw3IEBACiAJICAgICAgIC4gICAgICAgIigoJyRzdGFydGR0JyA+IChzdGFydCAtIElOVEVSVkFMIDMwIE1JTlVURSkpIEFORCAoJyRzdGFydGR0JyA8IGVuZCkpKSBBTkQgIgogCSAgICAgICAuICAgICAgICJlbmQgPiBOT1coKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTUzODYsNyArNTQyNCw2IEBACiBmdW5jdGlvbiBhbGxvY0NvbXB1dGVyKCRibG9ja2lkcywgJGN1cnJlbnRpZHMsICRjb21wdXRlcmlkcywgJHN0YXJ0LCAkZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAkbm93ZnV0dXJlLCAkaW1hZ2VpZCwgJGltYWdlcmV2aXNpb25pZCwgJGhvbGRjb21wcywKICAgICAgICAgICAgICAgICAgICAgICAgJHJlcXVlc3RpZCkgewotCWdsb2JhbCAkcmVxdWVzdEluZm87CiAJJHJldCA9IGFycmF5KCk7CiAJaWYoU0NIRURVTEVSX0FMTE9DQVRFX1JBTkRPTV9DT01QVVRFUikgewogCQlzaHVmZmxlKCRibG9ja2lkcyk7CkBAIC01NDUzLDcgKzU0OTAsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdldFNlbWFwaG9yZSgkaW1hZ2VpZCwgJGltYWdlcmV2aXNpb25pZCwgJG1nbXRub2RlaWQsICRjb21waWQsICRzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAkZW5kLCAkcmVxdWVzdGlkPTApIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsLCAkdW5pcWlkOworCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsLCAkdW5pcWlkOwogCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBzZW1hcGhvcmUgIgogCSAgICAgICAuICJTRUxFQ1QgYy5pZCwgIgogCSAgICAgICAuICAgICAgICAiJGltYWdlaWQsICIKQEAgLTU0NjcsNyArNTUwNCw3IEBACiAJICAgICAgIC4gICAgICAgIihzLmV4cGlyZXMgSVMgTlVMTCBPUiBzLmV4cGlyZXMgPCBOT1coKSkgIgogCSAgICAgICAuICJMSU1JVCAxIjsKIAlkb1F1ZXJ5KCRxdWVyeSk7Ci0JJHJjID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCSRyYyA9IG15c3FsaV9hZmZlY3RlZF9yb3dzKCRteXNxbGlfbGlua192Y2wpOwogCiAJIyBjaGVjayB0byBzZWUgaWYgYW5vdGhlciBwcm9jZXNzIGFsbG9jYXRlZCB0aGlzIG9uZQogCWlmKCRyYykgewpAQCAtNTQ4Myw3ICs1NTIwLDcgQEAKIAkJaWYoJHJlcXVlc3RpZCkKIAkJCSRxdWVyeSAuPSAiIEFORCBycS5pZCAhPSAkcmVxdWVzdGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkkcmMyID0gbXlzcWxfbnVtX3Jvd3MoJHFoKTsKKwkJJHJjMiA9IG15c3FsaV9udW1fcm93cygkcWgpOwogCQlpZigkcmMyKSB7CiAJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gc2VtYXBob3JlICIKIAkJCSAgICAgICAuICJXSEVSRSBjb21wdXRlcmlkID0gJGNvbXBpZCBBTkQgIgpAQCAtNTU2MSw3ICs1NTk4LDcgQEAKIAkgICAgICAgLiAgICAgICAibC53YXNhdmFpbGFibGUgPSAxIEFORCAiCiAJICAgICAgIC4gICAgICAgImwuZW5kaW5nICE9ICdmYWlsZWQnIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRjb21wc1tdID0gJHJvd1snY29tcHV0ZXJpZCddOwogCXJldHVybiAkY29tcHM7CiB9CkBAIC01NTc2LDcgKzU2MTMsNyBAQAogLy8vCiAvLy8gXHJldHVybiBhbiBhcnJheSBvZiByZXNvdXJjZSBpZHMgb2YgdHlwZSAkcmVzb3VyY2V0eXBlMgogLy8vCi0vLy8gXGJyaWVmIGdldHMgYSBsaXN0IG9mIHJlc291cmNlcyBvZiB0eXBlICRyZXNvdXJjZXR5cGUyIHRoYXQgJHJlc291cmNlc3ViaWQgCisvLy8gXGJyaWVmIGdldHMgYSBsaXN0IG9mIHJlc291cmNlcyBvZiB0eXBlICRyZXNvdXJjZXR5cGUyIHRoYXQgJHJlc291cmNlc3ViaWQKIC8vLyBvZiB0eXBlICRyZXNvdXJjZXR5cGUxIG1hcHMgdG8gYmFzZWQgb24gdGhlIHJlc291cmNlbWFwIHRhYmxlCiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC01NTkyLDcgKzU2MjksNyBAQAogCSAgICAgICAuICJXSEVSRSBzdWJpZCA9ICRyZXNvdXJjZXN1YmlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInJlc291cmNldHlwZWlkID0gJHJlc291cmNldHlwZTEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCSRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKTsKKwkkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpOwogCSRyZXNvdXJjZWlkID0gJHJvd1swXTsKIAogCSMgZ2V0IGdyb3VwcyAkcmVzb3VyY2VpZCBpcyBpbgpAQCAtNTYwMSw3ICs1NjM4LDcgQEAKIAkgICAgICAgLiAiRlJPTSByZXNvdXJjZWdyb3VwbWVtYmVycyAiCiAJICAgICAgIC4gIldIRVJFIHJlc291cmNlaWQgPSAkcmVzb3VyY2VpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQlhcnJheV9wdXNoKCRyZXNvdXJjZWdyb3VwaWRzLCAkcm93WzBdKTsKIAl9CiAKQEAgLTU2MTksNyArNTY1Niw3IEBACiAJICAgICAgIC4gICAgICAgInJlc291cmNldHlwZWlkMSA9ICRyZXNvdXJjZXR5cGUxIEFORCAiCiAJICAgICAgIC4gICAgICAgInJlc291cmNldHlwZWlkMiA9ICRyZXNvdXJjZXR5cGUyIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFycmF5X3B1c2goJHR5cGUyZ3JvdXBpZHMsICRyb3dbMF0pOwogCX0KIApAQCAtNTYzMSw3ICs1NjY4LDcgQEAKIAkgICAgICAgLiAgICAgICAicmVzb3VyY2V0eXBlaWQyID0gJHJlc291cmNldHlwZTEgQU5EICIKIAkgICAgICAgLiAgICAgICAicmVzb3VyY2V0eXBlaWQxID0gJHJlc291cmNldHlwZTIiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJYXJyYXlfcHVzaCgkdHlwZTJncm91cGlkcywgJHJvd1swXSk7CiAJfQogCkBAIC01NjQ2LDcgKzU2ODMsNyBAQAogCSAgICAgICAuICJXSEVSRSBtLnJlc291cmNlZ3JvdXBpZCBJTiAoJGlubGlzdCkgQU5EICIKIAkgICAgICAgLiAgICAgICAibS5yZXNvdXJjZWlkID0gci5pZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQlhcnJheV9wdXNoKCRtYXBwZWRyZXNvdXJjZXMsICRyb3dbMF0pOwogCX0KIAlyZXR1cm4gJG1hcHBlZHJlc291cmNlczsKQEAgLTU2NzAsNyArNTcwNyw2IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBjaGVja092ZXJsYXAoJHN0YXJ0LCAkZW5kLCAkbWF4LCAkcmVxdWVzdGlkPTApIHsKLQlnbG9iYWwgJHVzZXI7CiAJJHJlcXVlc3RzID0gZ2V0VXNlclJlcXVlc3RzKCJhbGwiKTsKIAkkY291bnQgPSAwOwogCWlmKCRtYXggPiAwKQpAQCAtNTczMyw3ICs1NzY5LDcgQEAKIAkgICAgICAgLiAgICAgICAici5pbWFnZWlkICE9ICRpbWFnZWlkKSBBTkQgIgogCSAgICAgICAuICAgICAgICJyLnN0YXR1cyA9ICdhY2NlcHRlZCciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXJldHVybihteXNxbF9udW1fcm93cygkcWgpKTsKKwlyZXR1cm4obXlzcWxpX251bV9yb3dzKCRxaCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNTc4NCw3ICs1ODIwLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgdS5vdmVybGFwUmVzQ291bnQgREVTQyAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuICRyb3dbJ292ZXJsYXBSZXNDb3VudCddOwogCWVsc2UKIAkJcmV0dXJuIDE7CkBAIC01ODA2LDcgKzU4NDIsNyBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gYWRkUmVxdWVzdCgkZm9yaW1hZ2luZz0wLCAkcmV2aXNpb25pZD1hcnJheSgpLCAkY2hlY2t1c2VyPTEpIHsKLQlnbG9iYWwgJHJlcXVlc3RJbmZvLCAkdXNlciwgJHVuaXFpZCwgJG15c3FsX2xpbmtfdmNsOworCWdsb2JhbCAkcmVxdWVzdEluZm8sICR1c2VyLCAkdW5pcWlkLCAkbXlzcWxpX2xpbmtfdmNsOwogCSRzdGFydHN0YW1wID0gdW5peFRvRGF0ZXRpbWUoJHJlcXVlc3RJbmZvWyJzdGFydCJdKTsKIAkkZW5kc3RhbXAgPSB1bml4VG9EYXRldGltZSgkcmVxdWVzdEluZm9bImVuZCJdKTsKIAkkbm93ID0gdGltZSgpOwpAQCAtNTgyMyw3ICs1ODU5LDcgQEAKIAlhZGRMb2dFbnRyeSgkbm93ZnV0dXJlLCAkc3RhcnQsICRlbmRzdGFtcCwgMSwgJHJlcXVlc3RJbmZvWyJpbWFnZWlkIl0pOwogCiAJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSBsb2ciLCAxMzEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFib3J0KDEzMik7CiAJfQogCSRsb2dpZCA9ICRyb3dbMF07CkBAIC01ODQ5LDEwICs1ODg1LDEwIEBACiAJICAgICAgIC4gICAgICAgIickZW5kc3RhbXAnLCAiCiAJICAgICAgIC4gICAgICAgIk5PVygpLCAiCiAJICAgICAgIC4gICAgICAgIiRjaGVja3VzZXIpIjsKLQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTM2KTsKKwlkb1F1ZXJ5KCRxdWVyeSwgMTM2KTsKIAogCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBMQVNUX0lOU0VSVF9JRCgpIEZST00gcmVxdWVzdCIsIDEzNCk7Ci0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJYWJvcnQoMTM1KTsKIAl9CiAJJHJlcXVlc3RpZCA9ICRyb3dbMF07CkBAIC01ODk0LDEyICs1OTMwLDEyIEBACiAJICAgICAgIC4gICAgICAgICJjb21wdXRlcmlkLCAiCiAJICAgICAgIC4gICAgICAgICJpbWFnZWlkLCAiCiAJICAgICAgIC4gICAgICAgICJpbWFnZXJldmlzaW9uaWQsICIKLQkgICAgICAgLiAgICAgICAgIm1hbmFnZW1lbnRub2RlaWQgIiAKKwkgICAgICAgLiAgICAgICAgIm1hbmFnZW1lbnRub2RlaWQgIgogCSAgICAgICAuICJGUk9NIHNlbWFwaG9yZSAiCiAJICAgICAgIC4gIldIRVJFIGV4cGlyZXMgPiBOT1coKSBBTkQgIgogCSAgICAgICAuICAgICAgICJwcm9jaWQgPSAnJHVuaXFpZCciOwogCWRvUXVlcnkoJHF1ZXJ5KTsKLQkkY250ID0gbXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpOworCSRjbnQgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAlpZigkY250ID09IDApIHsKIAkJIyByZWFjaGVkIHRoaXMgcG9pbnQgU0VNVElNRU9VVCBzZWNvbmRzIGFmdGVyIGdldHRpbmcgc2VtYXBob3JlLCBjbGVhbiB1cCBhbmQgYWJvcnQKIAkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NIHJlcXVlc3QgV0hFUkUgaWQgPSAkcmVxdWVzdGlkIjsKQEAgLTYwMTEsNyArNjA0Nyw2IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBmaW5kTWFuYWdlbWVudE5vZGUoJGNvbXBpZCwgJHN0YXJ0LCAkbm93ZnV0dXJlKSB7Ci0JZ2xvYmFsICRIVE1MaGVhZGVyOwogCSRhbGxtZ210bm9kZXMgPSBhcnJheV9rZXlzKGdldE1hbmFnZW1lbnROb2Rlcygkbm93ZnV0dXJlKSk7CiAJJG1hcHBlZCA9IGdldE1hcHBlZFJlc291cmNlcygkY29tcGlkLCAiY29tcHV0ZXIiLCAibWFuYWdlbWVudG5vZGUiKTsKIAkkdXNhYmxlbWdtdG5vZGVzID0gYXJyYXlfaW50ZXJzZWN0KCRhbGxtZ210bm9kZXMsICRtYXBwZWQpOwpAQCAtNjAzNiw3ICs2MDcxLDcgQEAKIAkgICAgICAgLiAiR1JPVVAgQlkgcnMubWFuYWdlbWVudG5vZGVpZCAiCiAJICAgICAgIC4gIk9SREVSIEJZIGNvdW50IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkbWdtdG5vZGVjbnRbJHJvd1sibW5pZCJdXSA9ICRyb3dbImNvdW50Il07CiAJfQogCXVhc29ydCgkbWdtdG5vZGVjbnQsICJzb3J0S2VlcEluZGV4Iik7CkBAIC02MTEzLDExICs2MTQ4LDExIEBACiAJICAgICAgIC4gIkZST00gcmVxdWVzdCAiCiAJICAgICAgIC4gIldIRVJFIGlkID0gJGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTY1KTsKLQlpZighICgkZGF0YSA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKSB7CisJaWYoISAoJGRhdGEgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKIAkJaWYoJHJldHVybk5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIAkJIyBGSVhNRSBoYW5kbGUgWE1MUlBDIGNhc2VzCi0JCWlmKCEgJHByaW50ZWRIVE1MaGVhZGVyKSAKKwkJaWYoISAkcHJpbnRlZEhUTUxoZWFkZXIpCiAJCQlwcmludCAkSFRNTGhlYWRlcjsKIAkJcHJpbnQgIjxoMT4iIC4gaSgiT09QUyEgLSBSZXNlcnZhdGlvbiBIYXMgRXhwaXJlZCIpIC4gIjwvaDE+XG4iOwogCQkkaCA9IGkoIlRoZSBzZWxlY3RlZCByZXNlcnZhdGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlLiBHbyB0byA8YT5SZXNlcnZhdGlvbnM8L2E+IHRvIHJlcXVlc3QgYSBuZXcgcmVzZXJ2YXRpb24gb3Igc2VsZWN0IGFub3RoZXIgb25lIHRoYXQgaXMgYXZhaWxhYmxlLiIpOwpAQCAtNjE2Myw3ICs2MTk4LDcgQEAKIAkkZGF0YVsicmVzZXJ2YXRpb25zIl0gPSBhcnJheSgpOwogCSRkYXRhWydwYXNzd2RzJ10gPSBhcnJheSgpOwogCSRyZXNpZHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWFycmF5X3B1c2goJGRhdGFbInJlc2VydmF0aW9ucyJdLCAkcm93KTsKIAkJJHJlc2lkc1tdID0gJHJvd1sncmVzZXJ2YXRpb25pZCddOwogCQkkZGF0YVsncGFzc3dkcyddWyRyb3dbJ3Jlc2VydmF0aW9uaWQnXV1bJGRhdGFbJ3VzZXJpZCddXSA9ICRyb3dbJ3Bhc3N3b3JkJ107CkBAIC02MTc3LDcgKzYyMTIsNyBAQAogCSAgICAgICAuICJGUk9NIHNlcnZlcnJlcXVlc3QgIgogCSAgICAgICAuICJXSEVSRSByZXF1ZXN0aWQgPSAkaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRkYXRhWydzZXJ2ZXJyZXF1ZXN0J10gPSAxOwogCQkkZGF0YVsnc2VydmVybmFtZSddID0gJHJvd1snbmFtZSddOwogCQkkZGF0YVsnYWRtaW5ncm91cGlkJ10gPSAkcm93WydhZG1pbmdyb3VwaWQnXTsKQEAgLTYxOTEsNyArNjIyNiw3IEBACiAJCSAgICAgICAuICJGUk9NIHJlc2VydmF0aW9uYWNjb3VudHMgIgogCQkgICAgICAgLiAiV0hFUkUgcmVzZXJ2YXRpb25pZCBJTiAoJGluaWRzKSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRkYXRhWydwYXNzd2RzJ11bJHJvd1sncmVzZXJ2YXRpb25pZCddXVskcm93Wyd1c2VyaWQnXV0gPSAkcm93WydwYXNzd29yZCddOwogCX0KIAllbHNlCkBAIC02MjA0LDcgKzYyMzksNyBAQAogLy8vIFxmbiB1cGRhdGVSZXF1ZXN0KCRyZXF1ZXN0aWQsICRub3dmdXR1cmUpCiAvLy8KIC8vLyBccGFyYW0gJHJlcXVlc3RpZCAtIHRoZSBpZCBvZiB0aGUgcmVxdWVzdCB0byBiZSB1cGRhdGVkCi0vLy8gXHBhcmFtICRub3dmdXR1cmUgKG9wdGlvbmFsKSAtICJub3ciIG9yICJmdXR1cmUiOyB3aGV0aGVyIHRoZSAKKy8vLyBccGFyYW0gJG5vd2Z1dHVyZSAob3B0aW9uYWwpIC0gIm5vdyIgb3IgImZ1dHVyZSI7IHdoZXRoZXIgdGhlCiAvLy8KIC8vLyBcYnJpZWYgdXBkYXRlcyBhbiBlbnRyeSB0byB0aGUgcmVxdWVzdCBhbmQgcmVzZXJ2YXRpb24gdGFibGVzCiAvLy8KQEAgLTYyMTYsNyArNjI1MSw3IEBACiAKIAkkcXVlcnkgPSAiU0VMRUNUIGxvZ2lkIEZST00gcmVxdWVzdCBXSEVSRSBpZCA9ICRyZXF1ZXN0aWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxNDYpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFib3J0KDE0OCk7CiAJfQogCSRsb2dpZCA9ICRyb3dbMF07CkBAIC02MjU2LDcgKzYyOTEsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgICMgY291bGQgYmUgdXBkYXRlZCwgd2hpY2ggd291bGQgZW5kIHVwIHNldHRpbmcgYm90aAogCQkgICAgICAgICAgICAgICAgICAgICMgcm93cyB0byB0aGUgc2FtZSBjb21wdXRlcgogCQlkb1F1ZXJ5KCRxdWVyeSwgMTQ3KTsKLQkJYWRkQ2hhbmdlTG9nRW50cnkoJGxvZ2lkLCBOVUxMLCAkZW5kc3RhbXAsICRzdGFydHN0YW1wLCAkY29tcHV0ZXJpZCwgTlVMTCwgCisJCWFkZENoYW5nZUxvZ0VudHJ5KCRsb2dpZCwgTlVMTCwgJGVuZHN0YW1wLCAkc3RhcnRzdGFtcCwgJGNvbXB1dGVyaWQsIE5VTEwsCiAJCSAgICAgICAgICAgICAgICAgIDEpOwogCQkkcXVlcnkgPSAiVVBEQVRFIHN1YmxvZyAiCiAJCSAgICAgICAuICJTRVQgY29tcHV0ZXJpZCA9ICRjb21wdXRlcmlkICIKQEAgLTYzMzMsNyArNjM2OCw3IEBACiAJCQkJICAgICAgIC4gIldIRVJFIGlkID0geyRyZXF1ZXN0WydpZCddfSI7CiAJCQl9CiAJCX0KLQkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDE1MCk7CisJCWRvUXVlcnkoJHF1ZXJ5LCAxNTApOwogCiAJCWFkZENoYW5nZUxvZ0VudHJ5KCRyZXF1ZXN0WyJsb2dpZCJdLCBOVUxMLCB1bml4VG9EYXRldGltZSgkbm93KSwgTlVMTCwKIAkJICAgICAgICAgICAgICAgICAgTlVMTCwgInJlbGVhc2VkIik7CkBAIC02MzQzLDcgKzYzNzgsNyBAQAogCWlmKCRyZXF1ZXN0WydzZXJ2ZXJyZXF1ZXN0J10pIHsKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBpZCBGUk9NIHNlcnZlcnJlcXVlc3QgV0hFUkUgcmVxdWVzdGlkID0geyRyZXF1ZXN0WydpZCddfSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gc2VydmVycmVxdWVzdCBXSEVSRSByZXF1ZXN0aWQgPSB7JHJlcXVlc3RbJ2lkJ119IjsKIAkJCWRvUXVlcnkoJHF1ZXJ5LCAxNTIpOwogCQkJZGVsZXRlVmFyaWFibGUoImZpeGVkSVBzcnskcm93WydpZCddfSIpOwpAQCAtNjM3Niw3ICs2NDExLDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIG1vdmVSZXNlcnZhdGlvbnNPZmZDb21wdXRlcigkY29tcGlkPTAsICRjb3VudD0wKSB7Ci0JZ2xvYmFsICRyZXF1ZXN0SW5mbywgJHVzZXI7CisJZ2xvYmFsICRyZXF1ZXN0SW5mbzsKIAkkcmVzSW5mbyA9IGFycmF5KCk7CiAJJGNoZWNrc3RhcnQgPSB1bml4VG9EYXRldGltZSh0aW1lKCkgKyAxODApOwogCWlmKCRjb21waWQgPT0gMCkgewpAQCAtNjM5NCw3ICs2NDI5LDcgQEAKIAkJICAgICAgIC4gIk9SREVSIEJZIHJlc2VydmF0aW9ucyAiCiAJCSAgICAgICAuICJMSU1JVCAxIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCQkkY29tcGlkID0gJHJvd1siY29tcHV0ZXJpZCJdOwogCQllbHNlCiAJCQlyZXR1cm4gLTE7CkBAIC02NDE4LDcgKzY0NTMsNyBAQAogCWlmKCRjb3VudCkKIAkJJHF1ZXJ5IC49ICIgTElNSVQgJGNvdW50IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkcmVzSW5mb1skcm93WyJpZCJdXSA9ICRyb3c7CiAJfQogCWlmKCEgY291bnQoJHJlc0luZm8pKQpAQCAtNjQzMCw3ICs2NDY1LDcgQEAKIAkjIGEgcmVzZXJ2YXRpb24gaXMgcmVhc3NpZ25lZCB0byBtZWV0cyB0aGUgc2FtZSByZXN0cmljdGlvbnMKIAlmb3JlYWNoKCRyZXNJbmZvIGFzICRyZXMpIHsKIAkJLy8gcGFzcyBmb3JpbWFnaW5nID0gMSBzbyB0aGF0IGlzQXZhaWxhYmxlIG9ubHkgbG9va3MgYXQgb25lIGNvbXB1dGVyCi0JCSRyYyA9IGlzQXZhaWxhYmxlKCRpbWFnZXMsICRyZXNbImltYWdlaWQiXSwgJHJlc1snaW1hZ2VyZXZpc2lvbmlkJ10sIAorCQkkcmMgPSBpc0F2YWlsYWJsZSgkaW1hZ2VzLCAkcmVzWyJpbWFnZWlkIl0sICRyZXNbJ2ltYWdlcmV2aXNpb25pZCddLAogCQkgICAgICBkYXRldGltZVRvVW5peCgkcmVzWyJzdGFydCJdKSwgZGF0ZXRpbWVUb1VuaXgoJHJlc1siZW5kIl0pLCAwLAogCQkgICAgICAwLCAkcmVzWyJ1c2VyaWQiXSwgMCwgMSk7CiAJCWlmKCRyYyA8IDEpIHsKQEAgLTY0NDIsNyArNjQ3Nyw3IEBACiAJCXJldHVybiAwOwogCWZvcmVhY2goJHJlc0luZm8gYXMgJHJlcykgewogCQkkcmMgPSBpc0F2YWlsYWJsZSgkaW1hZ2VzLCAkcmVzWyJpbWFnZWlkIl0sICRyZXNbJ2ltYWdlcmV2aXNpb25pZCddLAotCQkgICAgICBkYXRldGltZVRvVW5peCgkcmVzWyJzdGFydCJdKSwgZGF0ZXRpbWVUb1VuaXgoJHJlc1siZW5kIl0pLCAxLCAKKwkJICAgICAgZGF0ZXRpbWVUb1VuaXgoJHJlc1sic3RhcnQiXSksIGRhdGV0aW1lVG9Vbml4KCRyZXNbImVuZCJdKSwgMSwKIAkJICAgICAgMCwgJHJlc1sidXNlcmlkIl0sIDAsIDEpOwogCQlpZigkcmMgPiAwKSB7CiAJCQkkbmV3Y29tcGlkID0gYXJyYXlfc2hpZnQoJHJlcXVlc3RJbmZvWyJjb21wdXRlcnMiXSk7CkBAIC02NTAwLDcgKzY1MzUsNyBAQAogCSAgICAgICAuICJXSEVSRSB2LmNvbXB1dGVyaWQgPSAkY29tcGlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInZtLnZtaG9zdGlkID0gdi5pZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyYyA9IG1vdmVSZXNlcnZhdGlvbnNPZmZDb21wdXRlcigkcm93WydpZCddKTsKIAkJaWYoJHJjICE9IDApCiAJCQkjIGxvY2sgY29tcHV0ZXIgc28gdGhhdCByZXNlcnZhdGlvbnMgb24gb3RoZXIgVk1zIG9uIHRoaXMgaG9zdCBkbyBub3QgZ2V0IG1vdmVkIHRvIGl0CkBAIC02NTM1LDcgKzY1NzAsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSBycS5lbmQgREVTQyAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGVuZCA9ICRyb3dbJ2VuZCddOwogCSRxdWVyeSA9ICJTRUxFQ1QgVU5JWF9USU1FU1RBTVAodC5lbmQpIGFzIGVuZCAiCiAJICAgICAgIC4gIkZST00gYmxvY2tDb21wdXRlcnMgYywgIgpAQCAtNjU0Niw3ICs2NTgxLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgdC5lbmQgREVTQyAiCiAJICAgICAgIC4gIkxJTUlUIDEiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJaWYoJHJvd1snZW5kJ10gPiAkZW5kKQogCQkJJGVuZCA9ICRyb3dbJ2VuZCddOwogCXJldHVybiAkZW5kOwpAQCAtNjU3Miw3ICs2NjA3LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZXRDb21wRmluYWxWTVJlc2VydmF0aW9uVGltZSgkaG9zdGlkLCAkYWRkc2VtYXBob3Jlcz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vdG9tYWludGVuYW5jZT0wKSB7Ci0JZ2xvYmFsICR1bmlxaWQsICRteXNxbF9saW5rX3ZjbDsKKwlnbG9iYWwgJHVuaXFpZCwgJG15c3FsaV9saW5rX3ZjbDsKIAlpZigkYWRkc2VtYXBob3JlcykgewogCQkkcXVlcnkgPSAiU0VMRUNUIHZtLmlkICIKIAkJICAgICAgIC4gIkZST00gY29tcHV0ZXIgdm0sICIKQEAgLTY1ODEsNyArNjYxNiw3IEBACiAJCSAgICAgICAuICAgICAgICJ2bS52bWhvc3RpZCA9IHYuaWQiOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJCSRjb21waWRzID0gYXJyYXkoKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCSRjb21waWRzW10gPSAkcm93WydpZCddOwogCQlpZihlbXB0eSgkY29tcGlkcykpCiAJCQlyZXR1cm4gMDsKQEAgLTY2MDQsNyArNjYzOSw3IEBACiAJCSAgICAgICAuICAgICAgICIocy5leHBpcmVzIElTIE5VTEwgT1Igcy5leHBpcmVzIDwgTk9XKCkpICIKIAkJICAgICAgIC4gIkdST1VQIEJZIGMuaWQiOwogCQlkb1F1ZXJ5KCRxdWVyeSk7Ci0JCSRjbnQgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCRteXNxbF9saW5rX3ZjbCk7CisJCSRjbnQgPSBteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKTsKIAkJaWYoJGNudCAhPSBjb3VudCgkY29tcGlkcykpCiAJCQlyZXR1cm4gLTE7CiAJfQpAQCAtNjYyNiw3ICs2NjYxLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgcnEuZW5kIERFU0MgIgogCSAgICAgICAuICJMSU1JVCAxIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRlbmQgPSAkcm93WydlbmQnXTsKIAkkcXVlcnkgPSAiU0VMRUNUIFVOSVhfVElNRVNUQU1QKHQuZW5kKSBhcyBlbmQgIgogCSAgICAgICAuICJGUk9NIGJsb2NrQ29tcHV0ZXJzIGMsICIKQEAgLTY2NDEsNyArNjY3Niw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIHQuZW5kIERFU0MgIgogCSAgICAgICAuICJMSU1JVCAxIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCWlmKCRyb3dbJ2VuZCddID4gJGVuZCkKIAkJCSRlbmQgPSAkcm93WydlbmQnXTsKIAlyZXR1cm4gJGVuZDsKQEAgLTY2NzEsNyArNjcwNiw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIHJxLnN0YXJ0ICIKIAkgICAgICAgLiAiTElNSVQgMSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuIGRhdGV0aW1lVG9Vbml4KCRyb3dbJ3N0YXJ0J10pOwogCXJldHVybiAwOwogfQpAQCAtNjg1Niw3ICs2ODkxLDcgQEAKIAkkZGF0YSA9IGFycmF5KCk7CiAJJGZvdW5kaWRzID0gYXJyYXkoKTsKIAkkbGFzdHJlcWlkID0gMDsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93WydpZCddICE9ICRsYXN0cmVxaWQpIHsKIAkJCSRsYXN0cmVxaWQgPSAkcm93WydpZCddOwogCQkJJGNvdW50Kys7CkBAIC02ODk0LDcgKzY5MjksNyBAQAogCQkJfQogCQkJZWxzZSB7CiAJCQkJJGRhdGFbJGNvdW50XVsnc2VydmVyb3duZXInXSA9IDA7Ci0JCQkJaWYoISBlbXB0eSgkcm93WydzZXJ2ZXJhZG1pbmdyb3VwaWQnXSkgJiYgCisJCQkJaWYoISBlbXB0eSgkcm93WydzZXJ2ZXJhZG1pbmdyb3VwaWQnXSkgJiYKIAkJCQkgICBhcnJheV9rZXlfZXhpc3RzKCRyb3dbJ3NlcnZlcmFkbWluZ3JvdXBpZCddLCAkdXNlclsnZ3JvdXBzJ10pKQogCQkJCQkkZGF0YVskY291bnRdWydzZXJ2ZXJhZG1pbiddID0gMTsKIAkJCQllbHNlCkBAIC02OTgzLDcgKzcwMTgsNyBAQAogCSR0bXAgPSBleHBsb2RlKCcgJywgJGRhdGV0aW1lKTsKIAlsaXN0KCR5ZWFyLCAkbW9udGgsICRkYXkpID0gZXhwbG9kZSgnLScsICR0bXBbMF0pOwogCWxpc3QoJGhvdXIsICRtaW4sICRzZWMpID0gZXhwbG9kZSgnOicsICR0bXBbMV0pOwotCXJldHVybiBta3RpbWUoJGhvdXIsICRtaW4sICRzZWMsICRtb250aCwgJGRheSwgJHllYXIsIC0xKTsKKwlyZXR1cm4gbWt0aW1lKCRob3VyLCAkbWluLCAkc2VjLCAkbW9udGgsICRkYXksICR5ZWFyKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTcxNTcsMzIgKzcxOTIsOSBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8vCi0vLy8gXGZuIGdldERlcGFydG1lbnROYW1lKCRpZCkKLS8vLwotLy8vIFxwYXJhbSAkaWQgLSBpZCBmb3IgYSBkZXBhcnRtZW50IGluIHRoZSBkZXBhcnRtZW50IHRhYmxlCi0vLy8KLS8vLyBccmV0dXJuIGlmIGZvdW5kLCBkZXBhcnRtZW50IG5hbWU7IGlmIG5vdCwgMAotLy8vCi0vLy8gXGJyaWVmIGxvb2tzIHVwIHRoZSBuYW1lIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gJGlkIGluIHRoZSBkZXBhcnRtZW50IHRhYmxlCi0vLy8gYW5kIHJldHVybnMgaXQKLS8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLWZ1bmN0aW9uIGdldERlcGFydG1lbnROYW1lKCRpZCkgewotCSRxdWVyeSA9ICJTRUxFQ1QgbmFtZSBGUk9NIGRlcGFydG1lbnQgV0hFUkUgaWQgPSAnJGlkJyI7Ci0JJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7Ci0JCXJldHVybiAkcm93WzBdOwotCX0KLQllbHNlIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vCiAvLy8gXGZuIGdldEltYWdlSWQoJGltYWdlKQogLy8vCi0vLy8gXHBhcmFtICRpbWFnZSAtIG5hbWUgb2YgYW4gaW1hZ2UgKG11c3QgbWF0Y2ggbmFtZSAobm90IHByZXR0eW5hbWUpIGluIHRoZSAKKy8vLyBccGFyYW0gJGltYWdlIC0gbmFtZSBvZiBhbiBpbWFnZSAobXVzdCBtYXRjaCBuYW1lIChub3QgcHJldHR5bmFtZSkgaW4gdGhlCiAvLy8gaW1hZ2UgdGFibGUpCiAvLy8KIC8vLyBccmV0dXJuIHRoZSBpZCBvZiBtYXRjaGluZyAkaW1hZ2UgaW4gdGhlIGltYWdlIHRhYmxlIG9yIDAgaWYgbG9va3VwIGZhaWxzCkBAIC03MTkyLDcgKzcyMDQsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdldEltYWdlSWQoJGltYWdlKSB7CiAJJHFoID0gZG9RdWVyeSgiU0VMRUNUIGlkIEZST00gaW1hZ2UgV0hFUkUgbmFtZSA9ICckaW1hZ2UnIiwgMTcwKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCXJldHVybiAkcm93WzBdOwogCX0KIAlyZXR1cm4gMDsKQEAgLTcyMTEsNyArNzIyMyw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gZ2V0T1NJZCgkb3MpIHsKIAkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgaWQgRlJPTSBPUyBXSEVSRSBuYW1lID0gJyRvcyciLCAxNzUpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkgeworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJcmV0dXJuICRyb3dbMF07CiAJfQogCXJldHVybiAwOwpAQCAtNzIyOSw3ICs3MjQxLDcgQEAKIGZ1bmN0aW9uIGdldFN0YXRlcygpIHsKIAkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzdGF0ZSIsIDE3Nik7CiAJJHN0YXRlcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQkkc3RhdGVzWyRyb3dbMF1dID0gJHJvd1sxXTsKIAl9CiAJcmV0dXJuICRzdGF0ZXM7CkBAIC03MjQ3LDcgKzcyNTksNyBAQAogZnVuY3Rpb24gZ2V0UGxhdGZvcm1zKCkgewogCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHBsYXRmb3JtIiwgMTc4KTsKIAkkcGxhdGZvcm1zID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCSRwbGF0Zm9ybXNbJHJvd1swXV0gPSAkcm93WzFdOwogCX0KIAlyZXR1cm4gJHBsYXRmb3JtczsKQEAgLTcyNzUsNyArNzI4Nyw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIHAucHJldHR5bmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJHByb3Zpc2lvbmluZyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkcHJvdmlzaW9uaW5nWyRyb3dbJ2lkJ11dID0gJHJvdzsKIAlyZXR1cm4gJHByb3Zpc2lvbmluZzsKIH0KQEAgLTcyOTksNyArNzMxMSw3IEBACiBmdW5jdGlvbiBnZXRQcm92aXNpb25pbmdUeXBlcygpIHsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkLCBwcmV0dHluYW1lIEZST00gcHJvdmlzaW9uaW5nIFdIRVJFIG5hbWUgPSAnbm9uZSciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkkbm9uZSA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJJG5vbmUgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAkkcXVlcnkgPSAiU0VMRUNUIHAuaWQsICIKIAkgICAgICAgLiAgICAgICAgInAucHJldHR5bmFtZSwgIgogCSAgICAgICAuICAgICAgICAiby5uYW1lIEFTIGB0eXBlYCAiCkBAIC03MzEzLDcgKzczMjUsNyBAQAogCSR0eXBlcyA9IGFycmF5KCdibGFkZScgPT4gYXJyYXkoJG5vbmVbJ2lkJ10gPT4gJG5vbmVbJ3ByZXR0eW5hbWUnXSksCiAJICAgICAgICAgICAgICAgJ2xhYicgPT4gYXJyYXkoKSwKIAkgICAgICAgICAgICAgICAndmlydHVhbG1hY2hpbmUnID0+IGFycmF5KCkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCRyb3dbJ3R5cGUnXSA9PSAna2lja3N0YXJ0JyB8fCAkcm93Wyd0eXBlJ10gPT0gJ3BhcnRpbWFnZScpCiAJCQkkdHlwZXNbJ2JsYWRlJ11bJHJvd1snaWQnXV0gPSAkcm93WydwcmV0dHluYW1lJ107CiAJCWVsc2VpZigkcm93Wyd0eXBlJ10gPT0gJ25vbmUnKQpAQCAtNzM1OCw3ICs3MzcwLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgcy5uYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTc5KTsKIAkkc2NoZWR1bGVzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkc2NoZWR1bGVzWyRyb3dbImlkIl1dID0gJHJvdzsKIAkJJHNjaGVkdWxlc1skcm93WyJpZCJdXVsidGltZXMiXSA9IGFycmF5KCk7CiAJfQpAQCAtNzM2OSw3ICs3MzgxLDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgc2NoZWR1bGVpZCwgIgogCSAgICAgICAuICAgICAgICAgICJzdGFydCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJYXJyYXlfcHVzaCgkc2NoZWR1bGVzWyRyb3dbInNjaGVkdWxlaWQiXV1bInRpbWVzIl0sCiAJCSAgICAgICAgICAgYXJyYXkoInN0YXJ0IiA9PiAkcm93WyJzdGFydCJdLCAiZW5kIiA9PiAkcm93WyJlbmQiXSkpOwogCX0KQEAgLTc0OTMsNyArNzUwNSw3IEBACiAJfQogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRyZXR1cm4gPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKGlzX251bGwoJHJvd1snbmF0cHVibGljSVBhZGRyZXNzJ10pKSB7CiAJCQkkcm93WyduYXRob3N0ZW5hYmxlZCddID0gMDsKIAkJCSRyb3dbJ25hdHB1YmxpY0lQYWRkcmVzcyddID0gJyc7CkBAIC03NTE5LDcgKzc1MzEsNyBAQAogCQkJJHJldHVyblskbW5faWRdWyd0aW1lc2VydmVycyddID0gJHRpbWVzZXJ2ZXJzOwogCQl9CiAJfQotCQorCiAJcmV0dXJuICRyZXR1cm47CiB9CiAKQEAgLTc1NTEsMTQgKzc1NjMsMTIgQEAKIAkgICAgICAgLiAgICAgICAiYy5pZCBpbiAoJGlubGlzdCkiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkY29tcGdyb3VwcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkY29tcGdyb3Vwc1tdID0gJHJvd1sncmVzb3VyY2Vncm91cGlkJ107CiAJJG1uZ3JwcyA9IGFycmF5KCk7Ci0JZm9yZWFjaCgkY29tcGdyb3VwcyBhcyAkZ3JwaWQpIHsKLQkJJG1uZ3Jwc2V0ID0gZ2V0UmVzb3VyY2VNYXBwaW5nKCdtYW5hZ2VtZW50bm9kZScsICdjb21wdXRlcicsICcnLCBpbXBsb2RlKCcsJywgJGNvbXBncm91cHMpKTsKLQkJZm9yZWFjaCgkbW5ncnBzZXQgYXMgJG1uZ3JwaWQgPT4gJGNvbXBncnBzZXQpCi0JCQkkbW5ncnBzWyRtbmdycGlkXSA9IDE7Ci0JfQorCSRtbmdycHNldCA9IGdldFJlc291cmNlTWFwcGluZygnbWFuYWdlbWVudG5vZGUnLCAnY29tcHV0ZXInLCAnJywgaW1wbG9kZSgnLCcsICRjb21wZ3JvdXBzKSk7CisJZm9yZWFjaCgkbW5ncnBzZXQgYXMgJG1uZ3JwaWQgPT4gJGNvbXBncnBzZXQpCisJCSRtbmdycHNbJG1uZ3JwaWRdID0gMTsKIAkkbW5ncnBuYW1lcyA9IGFycmF5KCk7CiAJZm9yZWFjaChhcnJheV9rZXlzKCRtbmdycHMpIGFzICRtbmlkKSB7CiAJCSRtbmdycG5hbWVzW10gPSBnZXRSZXNvdXJjZUdyb3VwTmFtZSgkbW5pZCk7CkBAIC03NjQ0LDcgKzc2NTQsNyBAQAogCSAgICAgICAuICJXSEVSRSBwZXJscGFja2FnZSBMSUtFICdWQ0w6Ok1vZHVsZTo6UHJlZGljdGl2ZTo6JSciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRtb2R1bGVzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRtb2R1bGVzWyRyb3dbJ2lkJ11dID0gJHJvdzsKIAlyZXR1cm4gJG1vZHVsZXM7CiB9CkBAIC03NjYwLDcgKzc2NzAsNyBAQAogLy8vIFxyZXR1cm4gYXJyYXkgb2YgZnJlZS91c2VkIHRpbWVzbG90ZXMKIC8vLwogLy8vIFxicmllZiBnZW5lcmF0ZXMgYW4gYXJyYXkgb2YgYXZhaWxhYmlsaXR5IGZvciBjb21wdXRlcnMgd2hlcmUgaW5kZXggaXMgYQotLy8vIGNvbXB1dGVyaWQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgYW4gYXJyYXkgd2hvc2UgaW5kZXhlcyBhcmUgdW5peCB0aW1lc3RhbXBzIAorLy8vIGNvbXB1dGVyaWQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgYW4gYXJyYXkgd2hvc2UgaW5kZXhlcyBhcmUgdW5peCB0aW1lc3RhbXBzCiAvLy8gdGhhdCBpbmNyZW1lbnQgYnkgMTUgbWludXRlcyB3aXRoIGEgdmFsdWUgdGhhdCBpcyBhbiBhcnJheSB3aXRoIDIgaW5kZXhlczoKIC8vLyAnc2NoZWR1bGVjbG9zZWQnIGFuZCAnYXZhaWxhYmxlJyB0aGF0IHRlbGwgaWYgdGhlIGNvbXB1dGVyJ3Mgc2NoZWR1bGUgaXMKIC8vLyBjbG9zZWQgYXQgdGhhdCBtb21lbnQgYW5kIGlmIHRoZSBjb21wdXRlciBpcyBhdmFpbGFibGUgYXQgdGhhdCBtb21lbnRcbgpAQCAtNzcxNiw3ICs3NzI2LDcgQEAKIAkJICAgICAgIC4gICJBTkQgcGxhdGZvcm1pZCBJTiAoJHBsYXRpbmxpc3QpIjsKIAl9CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDE1NSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQlhcnJheV9wdXNoKCRjb21wdXRlcmlkcywgJHJvd1swXSk7CiAJCSR0aW1lc1skcm93WzBdXSA9IGFycmF5KCk7CiAJCSRzY2hlZHVsZWlkc1skcm93WzBdXSA9ICRyb3dbMV07CkBAIC03NzY0LDcgKzc3NzQsNyBAQAogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxNTYpOwogCiAJJGlkID0gIiI7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkgewogCQlpZigkcm93WzNdID09ICRyZXF1ZXN0aWQpIHsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03ODU1LDcgKzc4NjUsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJLy9pZiBiZXR3ZWVuIGEgc3RhcnQgYW5kIGVuZCB0aW1lCi0JCQlpZigkY3VycmVudCA+PSAkdGltZXNbJGlkXVskY291bnRdWyJzdGFydCJdICYmIAorCQkJaWYoJGN1cnJlbnQgPj0gJHRpbWVzWyRpZF1bJGNvdW50XVsic3RhcnQiXSAmJgogCQkJICAgJGN1cnJlbnQgPCAgJHRpbWVzWyRpZF1bJGNvdW50XVsiZW5kIl0pIHsKIAkJCQlpZigkZmlyc3QpIHsKIAkJCQkJIyBzZXQgdGhlIHByZXZpb3VzIDE1IG1pbnV0ZSBibG9jayB0byBzaG93IGFzIGJ1c3kgdG8gYWxsb3cgZm9yIGxvYWQgdGltZQpAQCAtNzg3NCw3ICs3ODg0LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8vaWYgYWZ0ZXIgcHJldmlvdXMgZW5kIGJ1dCBiZWZvcmUgdGhpcyBzdGFydAotCQkJaWYoJGN1cnJlbnQgPj0gJHRpbWVzWyRpZF1bJGNvdW50IC0gMV1bImVuZCJdICYmIAorCQkJaWYoJGN1cnJlbnQgPj0gJHRpbWVzWyRpZF1bJGNvdW50IC0gMV1bImVuZCJdICYmCiAJCQkgICAkY3VycmVudCA8ICAkdGltZXNbJGlkXVskY291bnRdWyJzdGFydCJdKSB7CiAJCQkJJHJlc2VydmVJbmZvWyRpZF1bJGN1cnJlbnRdWyJhdmFpbGFibGUiXSA9IDE7CiAJCQkJY29udGludWU7CkBAIC03OTI4LDggKzc5MzgsNyBAQAogCSAgICAgICAgICAgICAgMCwKIAkgICAgICAgICAgICAgICR0aW1ldmFsWyJtb24iXSwKIAkgICAgICAgICAgICAgICR0aW1ldmFsWyJtZGF5Il0sCi0JICAgICAgICAgICAgICAkdGltZXZhbFsieWVhciJdLAotCSAgICAgICAgICAgICAgLTEpOworCSAgICAgICAgICAgICAgJHRpbWV2YWxbInllYXIiXSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC04MDEwLDExICs4MDE5LDExIEBACiAJCSR1c2VyY29tcHV0ZXJpZHMgPSBhcnJheV9rZXlzKCRyZXNvdXJjZXNbImNvbXB1dGVyIl0pOwogCQkjIGdldCBsaXN0IG9mIGNvbXB1dGVycycgcGxhdGZvcm1pZHMKIAkJJHFoID0gZG9RdWVyeSgiU0VMRUNUIHBsYXRmb3JtaWQgRlJPTSBpbWFnZSBXSEVSRSBpZCA9ICRpbWFnZWlkIiwgMTEwKTsKLQkJJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpOworCQkkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpOwogCQkkcGxhdGZvcm1pZCA9ICRyb3dbMF07CiAJCSRjb21wdXRlcl9wbGF0Zm9ybWlkcyA9IGFycmF5KCk7CiAJCSRxaCA9IGRvUXVlcnkoIlNFTEVDVCBpZCwgcGxhdGZvcm1pZCBGUk9NIGNvbXB1dGVyIiwgMTExKTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJCSRjb21wdXRlcl9wbGF0Zm9ybWlkc1skcm93WzBdXSA9ICRyb3dbMV07CiAJCX0KIAkJJG1hcHBlZGNvbXB1dGVycyA9IGdldE1hcHBlZFJlc291cmNlcygkaW1hZ2VpZCwgImltYWdlIiwgImNvbXB1dGVyIik7CkBAIC04MzA0LDcgKzgzMTMsNyBAQAogLy8vIFxwYXJhbSAkaXAgLSAob3B0aW9uYWwsIGRlZmF1bHQ9JycpIGRlc2lyZWQgSVAgYWRkcmVzcwogLy8vIFxwYXJhbSAkbWFjIC0gKG9wdGlvbmFsLCBkZWZhdWx0PScnKSBkZXNpcmVkIE1BQyBhZGRyZXNzCiAvLy8KLS8vLyBccmV0dXJuIGFuIGFycmF5IHdoZXJlIGVhY2gga2V5IGlzIGEgdW5peCB0aW1lc3RhbXAgZm9yIHRoZSBzdGFydCB0aW1lIG9mIAorLy8vIFxyZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWFjaCBrZXkgaXMgYSB1bml4IHRpbWVzdGFtcCBmb3IgdGhlIHN0YXJ0IHRpbWUgb2YKIC8vLyB0aGUgYXZhaWxhYmxlIHNsb3QgYW5kIGVhY2ggZWxlbWVudCBpcyBhbiBhcnJheSB3aXRoIHRoZXNlIGl0ZW1zOlxuCiAvLy8gXGIgc3RhcnQgLSBzdGFydCBvZiBzbG90IGluIGRhdGV0aW1lIGZvcm1hdFxuCiAvLy8gXGIgc3RhcnR0cyAtIHN0YXJ0IG9mIHNsb3QgaW4gdW5peCB0aW1lc3RhbXAgZm9ybWF0XG4KQEAgLTgzOTksNyArODQwOCw3IEBACiAJICAgICAgIC4gICAgICAgICAgIihjLnByb2NzcGVlZCAqIGMucHJvY251bWJlciksICIKIAkgICAgICAgLiAgICAgICAgICAibmV0d29yayI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHJvd1snZHVyYXRpb24nXSA9ICRyZXFkdXJhdGlvbjsKIAkJJHJvd1snc3RhcnR0cyddID0gJHN0YXJ0OwogCQkkcm93WydzdGFydCddID0gJHN0YXJ0ZHQ7CkBAIC04NDUzLDcgKzg0NjIsNyBAQAogCQkgICAgICAgLiAiR1JPVVAgQlkgcnExLmlkICI7CiAJCSRxdWVyeSAuPSAiT1JERVIgQlkgcnMxLmNvbXB1dGVyaWQsIHJxMS5zdGFydCwgcnExLmVuZCI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRyb3dbJ3N0YXJ0dHMnXSA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbJ3N0YXJ0J10pOwogCQkJaWYoJHJvd1snc3RhcnR0cyddICUgOTAwKSB7CiAJCQkJJHJvd1snc3RhcnR0cyddID0gJHJvd1snc3RhcnR0cyddIC0gKCRyb3dbJ3N0YXJ0dHMnXSAlIDkwMCkgKyA5MDA7CkBAIC04NTEyLDcgKzg1MjEsNyBAQAogCSRxdWVyeSAuPSAgICAgICIoYy50eXBlICE9ICd2aXJ0dWFsbWFjaGluZScgT1IgYy52bWhvc3RpZCBJUyBOT1QgTlVMTCkgIgogCSAgICAgICAuICJHUk9VUCBCWSBycy5jb21wdXRlcmlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93WydlbmR0cyddICUgOTAwKSB7CiAJCQkkcm93WydlbmR0cyddID0gJHJvd1snZW5kdHMnXSAtICgkcm93WydlbmR0cyddICUgOTAwKTsKIAkJCSRyb3dbJ2R1cmF0aW9uJ10gLT0gOTAwOwpAQCAtODUzNyw2ICs4NTQ2LDcgQEAKIAkgICAgICAgLiAgICAgICJyZXNlcnZhdGlvbiBycywgIgogCSAgICAgICAuICAgICAgImltYWdlIGksICIKIAkgICAgICAgLiAgICAgICJzdGF0ZSBzLCAiCisJICAgICAgIC4gICAgICAic3RhdGUgcnFzLCAiCiAJICAgICAgIC4gICAgICAiY29tcHV0ZXIgYywgIgogCSAgICAgICAuICAgICAgInByb3Zpc2lvbmluZ09TaW5zdGFsbHR5cGUgcG9pLCAiCiAJICAgICAgIC4gICAgICAiT1NpbnN0YWxsdHlwZSBvaSwgIgpAQCAtODU0NCw2ICs4NTU0LDggQEAKIAkgICAgICAgLiAiV0hFUkUgcnMucmVxdWVzdGlkID0gcnEuaWQgQU5EICIKIAkgICAgICAgLiAgICAgICAiKHJxLnN0YXJ0ID4gJyRzdGFydGR0JyBPUiAiCiAJICAgICAgIC4gICAgICAgICIoREFURV9BREQocnEuZW5kLCBJTlRFUlZBTCAxNSBNSU5VVEUpID4gJyRzdGFydGR0JyBBTkQgcnEuc3RhcnQgPD0gJyRzdGFydGR0JykpIEFORCAiCisJICAgICAgIC4gICAgICAgInJxLnN0YXRlaWQgPSBycXMuaWQgQU5EICIKKwkgICAgICAgLiAgICAgICAicnFzLm5hbWUgTk9UIElOICgnZmFpbGVkJywgJ2NvbXBsZXRlJywgJ3JlbG9hZCcpIEFORCAiCiAJICAgICAgIC4gICAgICAgInJzLmNvbXB1dGVyaWQgSU4gKCRpbmNvbXBpZHMpIEFORCAiCiAJICAgICAgIC4gICAgICAgImkuaWQgPSAkaW1hZ2VpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJjLmlkID0gcnMuY29tcHV0ZXJpZCBBTkQgIgpAQCAtODU2OCw3ICs4NTgwLDcgQEAKIAlpZigkZXh0ZW5kb25seSkKIAkJJHF1ZXJ5IC49ICIgSEFWSU5HIHN0YXJ0ID0gJyRzdGFydGR0JyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoJHVzZWRheXNhaGVhZCAmJiAkcm93WydzdGFydHRzJ10gPiAkZGF5c2FoZWFkKQogCQkJY29udGludWU7CiAJCWlmKCRyb3dbJ3N0YXJ0dHMnXSAlIDkwMCkgewpAQCAtODYwNSw3ICs4NjE3LDcgQEAKIAkJICAgICAgIC4gICAgImJyLmltYWdlaWQgIT0gJGltYWdlaWQpIEFORCAiOwogCSRxdWVyeSAuPSAgICAgICJiYy5jb21wdXRlcmlkIElOICgkbmV3aW5jb21waWRzKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKGlzc2V0KCRzbG90c1skcm93Wydjb21waWQnXV0pKQogCQkJZkFUcmVtb3ZlT3ZlcmxhcHMoJHNsb3RzLCAkcm93Wydjb21waWQnXSwgJHJvd1snc3RhcnQnXSwgJHJvd1snZW5kJ10sIDApOwogCX0KQEAgLTg2MzQsNyArODY0Niw3IEBACiAJCWVsc2VpZighIGVtcHR5KCRtYWMpKQogCQkJJHF1ZXJ5IC49ICAgInMuZml4ZWRJUCA9ICckbWFjJyI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCQlpZihpc3NldCgkc2xvdHNbJHJvd1snY29tcGlkJ11dKSkKIAkJCQlmQVRyZW1vdmVPdmVybGFwcygkc2xvdHMsICRyb3dbJ2NvbXBpZCddLCAkcm93WydzdGFydCddLCAkcm93WydlbmQnXSwgMCk7CiAJCX0KQEAgLTg2NDgsNyArODY2MCw3IEBACiAJICAgICAgIC4gIldIRVJFIHN0YXJ0IDwgJyRtYXhlbmRkdCcgQU5EICIKIAkgICAgICAgLiAgICAgICAiZW5kID4gJyRtaW5zdGFydGR0JyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWZvcmVhY2goYXJyYXlfa2V5cygkc2xvdHMpIEFTICRjb21waWQpCiAJCQlmQVRyZW1vdmVPdmVybGFwcygkc2xvdHMsICRjb21waWQsICRyb3dbJ3N0YXJ0J10sICRyb3dbJ2VuZCddLAogCQkJICAgICAgICAgICAgICAgICAgJHJvd1snYWxsb3dyZXNlcnZhdGlvbnMnXSk7CkBAIC04ODA0LDcgKzg4MTYsNyBAQAogCWlmKCRleHRlbmRvbmx5KQogCQkkcXVlcnkgLj0gIiBBTkQgcnEuaWQgIT0gJHJlcWlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSA+PSAkbWF4b3ZlcmxhcCkKKwlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSA+PSAkbWF4b3ZlcmxhcCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC04OTU3LDcgKzg5NjksNyBAQAogCQkkcXVlcnkgLj0gIkFORCBjLmlkID0gJGNvbXBpZCAiOwogCSRxdWVyeSAuPSAiT1JERVIgQlkgYy5ob3N0bmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDE4MCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoaXNfbnVsbCgkcm93WyduYXRob3N0aWQnXSkpIHsKIAkJCSRyb3dbJ25hdGVuYWJsZWQnXSA9IDA7CiAJCQkkcm93WyduYXRob3N0J10gPSAnJzsKQEAgLTg5OTMsNyArOTAwNSw3IEBACiAJaWYoaXNzZXQoJF9TRVNTSU9OWyd1c2Vyc2Vzc2lvbmRhdGEnXVska2V5XSkpCiAJCXJldHVybiAkX1NFU1NJT05bJ3VzZXJzZXNzaW9uZGF0YSddWyRrZXldOwogCSRjb21wdXRlcnMgPSBnZXRDb21wdXRlcnMoKTsKLQkkcmVzb3VyY2VzID0gZ2V0VXNlclJlc291cmNlcyhhcnJheSgiY29tcHV0ZXJBZG1pbiIpLCAKKwkkcmVzb3VyY2VzID0gZ2V0VXNlclJlc291cmNlcyhhcnJheSgiY29tcHV0ZXJBZG1pbiIpLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCJhZG1pbmlzdGVyIiwgIm1hbmFnZUdyb3VwIiksIDAsIDEpOwogCSRyZXR1cm4gPSBhcnJheSgicGxhdGZvcm1zIiA9PiBhcnJheSgpLAogCSAgICAgICAgICAgICAgICAic2NoZWR1bGVzIiA9PiBhcnJheSgpKTsKQEAgLTkwMjYsNyArOTAzOCw3IEBACiAvLy8gdGhleSBvY2N1clxuCiAvLy8gXGIgbmV4dHN0YXRlcyAtIGFycmF5IHdoZXJlIGVhY2gga2V5IGlzIGEgY29tcHV0ZXJsb2Fkc3RhdGUgaWQgYW5kIGl0cyB2YWx1ZQogLy8vIGlzIHRoYXQgc3RhdGUncyBmb2xsb3dpbmcgc3RhdGU7IHRoZSBsYXN0IHN0YXRlIGhhcyBhIE5VTEwgdmFsdWVcbgotLy8vIFxiIHRvdGFsdGltZSAtIGVzdGltYXRlZCB0aW1lIChpbiBzZWNvbmRzKSBpdCB0YWtlcyBmb3IgYWxsIHN0YXRlcyB0byAKKy8vLyBcYiB0b3RhbHRpbWUgLSBlc3RpbWF0ZWQgdGltZSAoaW4gc2Vjb25kcykgaXQgdGFrZXMgZm9yIGFsbCBzdGF0ZXMgdG8KIC8vLyBjb21wbGV0ZVxuCiAvLy8gXGIgZGF0YSAtIGFycmF5IHdoZXJlIGVhY2gga2V5IGlzIGlzIGEgY29tcHV0ZXJsb2Fkc3RhdGUgaWQgYW5kIGVhY2ggdmFsdWUKIC8vLyBpcyBhbiBhcnJheSB3aXRoIHRoZXNlIGVsZW1lbnRzOlxuCkBAIC05MDQ4LDEzICs5MDYwLDEzIEBACiAJIyAgIG5lZWQgdGhpcyBpbmZvcm1hdGlvbgogCSRxdWVyeSA9ICJTRUxFQ1QgaWQgRlJPTSBjb21wdXRlcmxvYWRzdGF0ZSBXSEVSRSBsb2Fkc3RhdGVuYW1lID0gJ3JlcGVhdCciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCXJldHVybiBhcnJheSgpOwogCSRsb2Fkc3RhdGVzWydyZXBlYXRpZCddID0gJHJvd1snaWQnXTsKIAogCSRxdWVyeSA9ICJTRUxFQ1QgYHR5cGVgIEZST00gY29tcHV0ZXIgV0hFUkUgaWQgPSAkY29tcGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQlyZXR1cm4gYXJyYXkoKTsKIAogCSR0eXBlID0gJHJvd1sndHlwZSddOwpAQCAtOTA3Myw3ICs5MDg1LDcgQEAKIAkgICAgICAgIC4gIihTRUxFQ1QgbmV4dHN0YXRlaWQgRlJPTSBjb21wdXRlcmxvYWRmbG93IFdIRVJFIGB0eXBlYCA9ICckdHlwZScgIgogCSAgICAgICAgLiAiQU5EIG5leHRzdGF0ZWlkIElTIE5PVCBOVUxMKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkyLCAxMDEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCXJldHVybiBhcnJheSgpOwogCSRsb2Fkc3RhdGVzWydkYXRhJ11bJHJvd1snc3RhdGVpZCddXSA9ICRyb3c7CiAJJGxvYWRzdGF0ZXNbJ3N0YXRlaWRzJ10gPSBhcnJheSgkcm93WydzdGF0ZWlkJ10pOwpAQCAtOTA4Myw3ICs5MDk1LDcgQEAKIAkJJHF1ZXJ5MiA9ICRxdWVyeSAuICJBTkQgY2YuY29tcHV0ZXJsb2Fkc3RhdGVpZCA9IHskcm93WyduZXh0c3RhdGVpZCddfSAiCiAJCSAgICAgICAgLiAiQU5EIGB0eXBlYCA9ICckdHlwZSciOwogCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeTIsIDEwMSk7Ci0JCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRfU0VTU0lPTlsnY29tcHN0YXRlZmxvdyddWyRrZXldID0gJGxvYWRzdGF0ZXM7CiAJCQlyZXR1cm4gJGxvYWRzdGF0ZXM7CiAJCX0KQEAgLTkxMjgsNyArOTE0MCw3IEBACiAJICAgICAgIC4gICAgICAgInJzLnJlcXVlc3RpZCA9IHJxLmlkICIKIAkgICAgICAgLiAiTElNSVQgMSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJYWJvcnQoMTEzKTsKIAlpZigkcm93WydzdGFydCddIDwgJHJvd1sncmVxdGltZSddKSB7CiAJCSMgbm93CkBAIC05MTUxLDcgKzkxNjMsNyBAQAogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRsYXN0ID0gYXJyYXkoKTsKIAkkZGF0YSA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGRhdGFbJHJvd1snaWQnXV0gPSAkcm93OwogCQlpZihlbXB0eSgkbGFzdCkpIHsKIAkJCWlmKCRmdXR1cmUpCkBAIC05MTkxLDcgKzkyMDMsNyBAQAogCSAgICAgICAuICAgICAgICAic3RhcnQgPiAoTk9XKCkgLSBJTlRFUlZBTCAxMiBNT05USCkgQU5EICIKIAkgICAgICAgLiAgICAgICAgIlVOSVhfVElNRVNUQU1QKGxvYWRlZCkgLSBVTklYX1RJTUVTVEFNUChzdGFydCkgPCAxODAwIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZighIGVtcHR5KCRyb3dbJ2F2Z2xvYWR0aW1lJ10pKQogCQkJcmV0dXJuIChpbnQpJHJvd1snYXZnbG9hZHRpbWUnXTsKIAkJZWxzZQpAQCAtOTIxNyw3ICs5MjI5LDcgQEAKIAkJICAgICAgIC4gIkZST00gc3VibG9nICIKIAkJICAgICAgIC4gIldIRVJFIGNvbXB1dGVyaWQgPSAkY29tcGlkIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKKwkJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJCSRjb21wdXRlcnNbJGNvbXBpZF1bImNvdW50cyJdID0gJHJvd1swXTsKIAkJZWxzZQogCQkJJGNvbXB1dGVyc1skY29tcGlkXVsiY291bnRzIl0gPSAwOwpAQCAtOTM0NCw3ICs5MzU2LDcgQEAKIAkgICAgICAgLiAgICAgICAiYzIuaWQgTk9UIElOICgkYWxsb2Njb21waWRzKSAiCiAJICAgICAgIC4gIk9SREVSIEJZIHMubmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGRhdGFbJ2NvbXBpZHMnXVtdID0gJHJvd1snY29tcHV0ZXJpZCddOwogCQkkZGF0YVskcm93Wydjb21wdXRlcmlkJ11dID0gJHJvdzsKIAl9CkBAIC05Mzc1LDcgKzkzODcsNyBAQAogCSAgICAgICAuICAgICAgICJ0LnN0YXJ0IDwgJyRlbmRkdCcgQU5EICIKIAkgICAgICAgLiAgICAgICAiYy5ibG9ja1RpbWVpZCA9IHQuaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWFycmF5X3B1c2goJGNvbXBpZHMsICRyb3dbJ2NvbXB1dGVyaWQnXSk7CiAJfQogCXJldHVybiAkY29tcGlkczsKQEAgLTk0MTEsNyArOTQyMyw3IEBACiAJaWYoJGlkKQogCQkkcXVlcnkgLj0gIiBXSEVSRSBuLmlkID0gJGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkbmF0aG9zdHNbJHJvd1snaWQnXV0gPSAkcm93OwogCWlmKCRzb3J0KQogCQl1YXNvcnQoJG5hdGhvc3RzLCAic29ydEtlZXBJbmRleCIpOwpAQCAtOTQyMCw3ICs5NDMyLDcgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLwotLy8vIFxmbiBnZXRSZXNlcnZhdGlvbk5BVHBvcnRzKCRyZXNpZCkKKy8vLyBcZm4gZ2V0TkFUcG9ydHMoJHJlc2lkKQogLy8vCiAvLy8gXHBhcmFtICRyZXNpZCAtIGlkIG9mIGEgcmVzZXJ2YXRpb24KIC8vLwpAQCAtOTQ0MCw4ICs5NDUyLDggQEAKIGZ1bmN0aW9uIGdldE5BVHBvcnRzKCRyZXNpZCkgewogCSRwb3J0cyA9IGFycmF5KCk7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBuLnB1YmxpY3BvcnQsICIKLQkgICAgICAgLiAgICAgICAgIm4uY29ubmVjdG1ldGhvZHBvcnRpZCwgIiAKLQkgICAgICAgLiAgICAgICAgImMucG9ydCBBUyBwcml2YXRlcG9ydCwgIiAKKwkgICAgICAgLiAgICAgICAgIm4uY29ubmVjdG1ldGhvZHBvcnRpZCwgIgorCSAgICAgICAuICAgICAgICAiYy5wb3J0IEFTIHByaXZhdGVwb3J0LCAiCiAJICAgICAgIC4gICAgICAgICJjLnByb3RvY29sLCAiCiAJICAgICAgIC4gICAgICAgICJjLmNvbm5lY3RtZXRob2RpZCAiCiAJICAgICAgIC4gIkZST00gbmF0cG9ydCBuLCAiCkBAIC05NDQ5LDcgKzk0NjEsNyBAQAogCSAgICAgICAuICJXSEVSRSBuLmNvbm5lY3RtZXRob2Rwb3J0aWQgPSBjLmlkIEFORCAiCiAJICAgICAgIC4gICAgICAgIm4ucmVzZXJ2YXRpb25pZCA9ICRyZXNpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHBvcnRzWyRyb3dbJ2Nvbm5lY3RtZXRob2RpZCddXVsiI1BvcnQteyRyb3dbJ3Byb3RvY29sJ119LXskcm93Wydwcml2YXRlcG9ydCddfSMiXSA9ICRyb3c7CiAJcmV0dXJuICRwb3J0czsKIH0KQEAgLTk0NjksNyArOTQ4MSw4IEBACiAvLy8gXGIgZG9tYWluZG5zbmFtZVxuCiAvLy8gXGIgdXNlcm5hbWVcbgogLy8vIFxiIGRuc3NlcnZlcnNcbgotLy8vIFxiIHNlY3JldGlkCisvLy8gXGIgc2VjcmV0aWRcbgorLy8vIFxiIHVzZWRiaG9zdG5hbWVzCiAvLy8KIC8vLyBcYnJpZWYgYnVpbGRzIGFuIGFycmF5IG9mIEFEIGRvbWFpbnMKIC8vLwpAQCAtOTQ4Myw3ICs5NDk2LDggQEAKIAkgICAgICAgLiAgICAgICAgImFkLmRvbWFpbkROU05hbWUgQVMgZG9tYWluZG5zbmFtZSwgIgogCSAgICAgICAuICAgICAgICAiYWQudXNlcm5hbWUsICIKIAkgICAgICAgLiAgICAgICAgImFkLmRuc1NlcnZlcnMgQVMgZG5zc2VydmVycywgIgotCSAgICAgICAuICAgICAgICAiYWQuc2VjcmV0aWQgIgorCSAgICAgICAuICAgICAgICAiYWQuc2VjcmV0aWQsICIKKwkgICAgICAgLiAgICAgICAgImFkLnVzZWRiaG9zdG5hbWVzICIKIAkgICAgICAgLiAiRlJPTSBhZGRvbWFpbiBhZCwgIgogCSAgICAgICAuICAgICAgImFmZmlsaWF0aW9uIGEsICIKIAkgICAgICAgLiAgICAgICJ1c2VyIHUsICIKQEAgLTk0OTksNyArOTUxMyw3IEBACiAKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJGFkZG9tYWlubGlzdCA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkYWRkb21haW5saXN0WyRyb3dbJ2lkJ11dID0gJHJvdzsKIAlyZXR1cm4gJGFkZG9tYWlubGlzdDsKIH0KQEAgLTk1NjIsNyArOTU3Niw3IEBACiAJCSRxdWVyeSAuPSAiIEFORCB0LmVuZCA+ICciIC4gdW5peFRvRGF0ZXRpbWUoJHN0YXJ0KSAuICInIjsKIAkkcXVlcnkgLj0gIiBPUkRFUiBCWSB0LnN0YXJ0LCB0LmVuZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHJldHVyblskcm93Wyd0aW1laWQnXV0gPSAkcm93OwogCQkkcmV0dXJuWyRyb3dbJ3RpbWVpZCddXVsndW5peHN0YXJ0J10gPSBkYXRldGltZVRvVW5peCgkcm93WydzdGFydCddKTsKIAkJJHJldHVyblskcm93Wyd0aW1laWQnXV1bJ3VuaXhlbmQnXSA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbJ2VuZCddKTsKQEAgLTk1NzEsNyArOTU4NSw3IEBACiAJCSAgICAgICAgLiAiRlJPTSBibG9ja0NvbXB1dGVycyAiCiAJCSAgICAgICAgLiAiV0hFUkUgYmxvY2tUaW1laWQgPSB7JHJvd1sndGltZWlkJ119IjsKIAkJJHFoMiA9IGRvUXVlcnkoJHF1ZXJ5MiwgMTAxKTsKLQkJd2hpbGUoJHJvdzIgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgyKSkKKwkJd2hpbGUoJHJvdzIgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoMikpCiAJCQlhcnJheV9wdXNoKCRyZXR1cm5bJHJvd1sndGltZWlkJ11dWydjb21wdXRlcmlkcyddLCAkcm93MlsnY29tcHV0ZXJpZCddKTsKIAl9CiAJcmV0dXJuICRyZXR1cm47CkBAIC05NjI1LDcgKzk2MzksNyBAQAogCSAgICAgICAuICAgICAgICJidC5lbmQgPiAnJG5vd2R0JyBBTkQgIgogCSAgICAgICAuICAgICAgICJici5pbWFnZWlkID0gJGltYWdlaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC05NjQ4LDcgKzk2NjIsNyBAQAogLy8vIFxwYXJhbSAkZXh0cmEgLSAob3B0aW9uYWwpIGFueSBleHRyYSBhdHRyaWJ1dGVzIHRoYXQgbmVlZCB0byBiZSBzZXQKIC8vLwogLy8vIFxicmllZiBwcmludHMgb3V0IGEgc2VsZWN0IGlucHV0IHBhcnQgb2YgYSBmb3JtXG4KLS8vLyBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgJHNlbGVjdGVkaWQgaXMgbGVmdCBvZmYsIHdlIGFzc3VtZSAkZGF0YUFyciBoYXMgbm8gCisvLy8gaXQgaXMgYXNzdW1lZCB0aGF0IGlmICRzZWxlY3RlZGlkIGlzIGxlZnQgb2ZmLCB3ZSBhc3N1bWUgJGRhdGFBcnIgaGFzIG5vCiAvLy8gaW5kZXggJy0xJ1xuCiAvLy8gZWFjaCBPUFRJT04ncyB2YWx1ZSBpcyB0aGUgaW5kZXggb2YgdGhhdCBlbGVtZW50IG9mIHRoZSBhcnJheQogLy8vCkBAIC05NzA3LDcgKzk3MjEsNyBAQAogLy8vIG11bHRpcGxlIHRhZyBzZXQKIC8vLwogLy8vIFxicmllZiBnZW5lcmF0ZXMgSFRNTCBmb3Igc2VsZWN0IGlucHV0Ci0vLy8gaXQgaXMgYXNzdW1lZCB0aGF0IGlmICRzZWxlY3RlZGlkIGlzIGxlZnQgb2ZmLCB3ZSBhc3N1bWUgJGRhdGFBcnIgaGFzIG5vIAorLy8vIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiAkc2VsZWN0ZWRpZCBpcyBsZWZ0IG9mZiwgd2UgYXNzdW1lICRkYXRhQXJyIGhhcyBubwogLy8vIGluZGV4ICctMSdcbgogLy8vIGVhY2ggT1BUSU9OJ3MgdmFsdWUgaXMgdGhlIGluZGV4IG9mIHRoYXQgZWxlbWVudCBvZiB0aGUgYXJyYXkKIC8vLwpAQCAtOTk0MSwxMiArOTk1NSwxMiBAQAogLy8vCiAvLy8gXGZuIHJlcXVlc3RJc1JlYWR5KCRyZXF1ZXN0KQogLy8vCi0vLy8gXHBhcmFtICRyZXF1ZXN0IC0gYSByZXF1ZXN0IGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgcmV0dXJuZWQgYnkgCisvLy8gXHBhcmFtICRyZXF1ZXN0IC0gYSByZXF1ZXN0IGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgcmV0dXJuZWQgYnkKIC8vLyBnZXRVc2VyUmVxdWVzdHMKIC8vLwogLy8vIFxyZXR1cm4gMSBpZiByZXF1ZXN0IGlzIHJlYWR5IGZvciBhIHVzZXIgdG8gY29ubmVjdCwgMCBpZiBub3QKIC8vLwotLy8vIFxicmllZiBjaGVja3MgdG8gc2VlIGlmIGEgcmVxdWVzdCBpcyAKKy8vLyBcYnJpZWYgY2hlY2tzIHRvIHNlZSBpZiBhIHJlcXVlc3QgaXMKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHJlcXVlc3RJc1JlYWR5KCRyZXF1ZXN0KSB7CkBAIC05OTU0LDcgKzk5NjgsNyBAQAogCQlpZigkcmVzWyJjb21wdXRlcnN0YXRlaWQiXSAhPSAzICYmICRyZXNbImNvbXB1dGVyc3RhdGVpZCJdICE9IDgpCiAJCQlyZXR1cm4gMDsKIAl9Ci0JaWYoKCRyZXF1ZXN0WyJjdXJyc3RhdGVpZCJdID09IDE0ICYmICAgICAgLy8gcmVxdWVzdCBjdXJyZW50IHN0YXRlIHBlbmRpbmcgCisJaWYoKCRyZXF1ZXN0WyJjdXJyc3RhdGVpZCJdID09IDE0ICYmICAgICAgLy8gcmVxdWVzdCBjdXJyZW50IHN0YXRlIHBlbmRpbmcKIAkgICAkcmVxdWVzdFsibGFzdHN0YXRlaWQiXSA9PSAzICYmICAgICAgICAvLyAgIGFuZCBsYXN0IHN0YXRlIHJlc2VydmVkIGFuZAogCSAgICRyZXF1ZXN0WyJjb21wdXRlcnN0YXRlaWQiXSA9PSAzKSB8fCAgIC8vICAgY29tcHV0ZXIgcmVzZXJ2ZWQKIAkgICAoJHJlcXVlc3RbImN1cnJzdGF0ZWlkIl0gPT0gOCAmJiAgICAgICAvLyByZXF1ZXN0IGN1cnJlbnQgc3RhdGUgaW51c2UKQEAgLTEwMTcxLDcgKzEwMTg1LDcgQEAKIC8vLwogLy8vIFxyZXR1cm4gMSBpZiBzY2hlZHVsZSBpcyBjbG9zZWQgYXQgJHRpbWVzdGFtcCwgMCBpZiBpdCBpcyBvcGVuCiAvLy8KLS8vLyBcYnJpZWYgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY29tcHV0ZXIncyBzY2hlZHVsZSBpcyBvcGVuIG9yIGNsb3NlZCBhdCAKKy8vLyBcYnJpZWYgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY29tcHV0ZXIncyBzY2hlZHVsZSBpcyBvcGVuIG9yIGNsb3NlZCBhdAogLy8vICR0aW1lc3RhbXAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEwMjI4LDcgKzEwMjQyLDcgQEAKIAkgICAgICAgLiAgICAgICAidS5jb3Vyc2Vyb2xsID0gMCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDMwNSk7CiAJJG9sZHVzZXJncm91cHMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpIHsKIAkJYXJyYXlfcHVzaCgkb2xkdXNlcmdyb3VwcywgJHJvd1swXSk7CiAJfQogCWlmKGNvdW50KGFycmF5X2RpZmYoJG9sZHVzZXJncm91cHMsICRuZXd1c2VyZ3JvdXBzKSkgfHwKQEAgLTEwMjc2LDcgKzEwMjkwLDcgQEAKIAkgICAgICAgLiAiV0hFUkUgbmFtZSA9ICckbmFtZScgQU5EICIKIAkgICAgICAgLiAgICAgICAiYWZmaWxpYXRpb25pZCA9ICRhZmZpbGlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzAwKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJcmV0dXJuICRyb3dbMF07CiAJZWxzZWlmKCRub2FkZCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDI5Miw3ICsxMDMwNiw3IEBACiAJICAgICAgIC4gICAgICAgICIwKSI7CiAJZG9RdWVyeSgkcXVlcnksIDMwMSk7CiAJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSB1c2VyZ3JvdXAiLCAzMDIpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCWFib3J0KDMwMyk7CiAJfQogCXJldHVybiAkcm93WzBdOwpAQCAtMTAzMDMsNyArMTAzMTcsNyBAQAogLy8vIFxmbiBnZXRVc2VyR3JvdXBOYW1lKCRpZCwgJGluY0FmZmlsKQogLy8vCiAvLy8gXHBhcmFtICRpZCAtIGlkIG9mIGEgdXNlciBncm91cAotLy8vIFxwYXJhbSAkaW5jQWZmaWwgLSAwIG9yIDEgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAwKTsgaW5jbHVkZSBAIGFuZCAKKy8vLyBccGFyYW0gJGluY0FmZmlsIC0gMCBvciAxIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gMCk7IGluY2x1ZGUgQCBhbmQKIC8vLyBhZmZpbGlhdGlvbiBhdCB0aGUgZW5kCiAvLy8KIC8vLyBccmV0dXJuIG5hbWUgZm9yICRpZCBmcm9tIHVzZXJncm91cCB0YWJsZSBvciAwIGlmIG5hbWUgbm90IGZvdW5kCkBAIC0xMDMyNSw3ICsxMDMzOSw3IEBACiAJCSAgICAgICAuICJXSEVSRSBpZCA9ICRpZCI7CiAJfQogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKQogCQlyZXR1cm4gJHJvd1swXTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNDAyLDcgKzEwNDE2LDcgQEAKIAkkcXVlcnkgLj0gIk9SREVSIEJZIG0uc3RhcnQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRkYXRhID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRkYXRhWyRyb3dbJ2lkJ11dID0gJHJvdzsKIAkkX1NFU1NJT05bJ3VzZXJzZXNzaW9uZGF0YSddWyRrZXldID0gJGRhdGE7CiAJcmV0dXJuICRkYXRhOwpAQCAtMTA0MzcsNyArMTA0NTEsNyBAQAogCSAgICAgICAuICJPUkRFUiBCWSBzdGFydCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7CiAJJGRhdGEgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJGRhdGFbXSA9ICRyb3c7CiAJJF9TRVNTSU9OWyd1c2Vyc2Vzc2lvbmRhdGEnXVska2V5XSA9ICRkYXRhOwogCXJldHVybiAkZGF0YTsKQEAgLTEwNDU0LDcgKzEwNDY4LDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHVuc2V0X2J5X3ZhbCgkbmVlZGxlLCAmJGhheXN0YWNrKSB7Ci0Jd2hpbGUoKCRnb3RjaGEgPSBhcnJheV9zZWFyY2goJG5lZWRsZSwkaGF5c3RhY2spKSA+IC0xKSB7IAorCXdoaWxlKCgkZ290Y2hhID0gYXJyYXlfc2VhcmNoKCRuZWVkbGUsJGhheXN0YWNrKSkgPiAtMSkgewogCQl1bnNldCgkaGF5c3RhY2tbJGdvdGNoYV0pOwogCX0KIH0KQEAgLTEwNDY4LDEzICsxMDQ4MiwxNiBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHNlbmRSRFBmaWxlKCkgewogCWdsb2JhbCAkdXNlcjsKLQkjIGZvciBtb3JlIGluZm8gb24gdGhpcyBmaWxlLCBzZWUgCisJIyBmb3IgbW9yZSBpbmZvIG9uIHRoaXMgZmlsZSwgc2VlCiAJIyBodHRwOi8vZGV2LnJlbW90ZW5ldHdvcmt0ZWNobm9sb2d5LmNvbS90cy9yZHBmaWxlLmh0bQogCSRyZXF1ZXN0aWQgPSBnZXRDb250aW51YXRpb25WYXIoInJlcXVlc3RpZCIpOwogCSRyZXNpZCA9IGdldENvbnRpbnVhdGlvblZhcigicmVzaWQiKTsKKworCSRjbWlkID0gZ2V0Q29udGludWF0aW9uVmFyKCdjbWlkJyk7CisKIAkkcmVxdWVzdCA9IGdldFJlcXVlc3RJbmZvKCIkcmVxdWVzdGlkIik7CiAJaWYoJHJlcXVlc3RbJ3N0YXRlaWQnXSA9PSAxMSB8fCAkcmVxdWVzdFsnc3RhdGVpZCddID09IDEyIHx8Ci0JICAgKCRyZXF1ZXN0WydzdGF0ZWlkJ10gPT0gMTQgJiYgCisJICAgKCRyZXF1ZXN0WydzdGF0ZWlkJ10gPT0gMTQgJiYKIAkgICAoJHJlcXVlc3RbJ2xhc3RzdGF0ZWlkJ10gPT0gMTEgfHwgJHJlcXVlc3RbJ2xhc3RzdGF0ZWlkJ10gPT0gMTIpKSkgewogCQkkY29udCA9IGFkZENvbnRpbnVhdGlvbnNFbnRyeSgndmlld1JlcXVlc3RzJyk7CiAJCWhlYWRlcigiTG9jYXRpb246ICIgLiBCQVNFVVJMIC4gU0NSSVBUIC4gIj9jb250aW51YXRpb249JGNvbnQiKTsKQEAgLTEwNDk0LDIwICsxMDUxMSwxOSBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXNbJ2ltYWdlcmV2aXNpb25pZCddKTsKIAkkbmF0cG9ydHMgPSBnZXROQVRwb3J0cygkcmVzaWQpOwogCSRwb3J0ID0gJyc7Ci0JZm9yZWFjaCgkY29ubmVjdERhdGEgYXMgJGNtaWQgPT4gJG1ldGhvZCkgewotCQlpZihwcmVnX21hdGNoKCcvcmVtb3RlIGRlc2t0b3AvaScsICRtZXRob2RbJ2Rlc2NyaXB0aW9uJ10pIHx8Ci0JCSAgIHByZWdfbWF0Y2goJy9SRFAvaScsICRtZXRob2RbJ2Rlc2NyaXB0aW9uJ10pKSB7Ci0JCQkjIGFzc3VtZSBpbmRleCAwIG9mIHBvcnRzIGZvciBuYXQKLQkJCWlmKCEgZW1wdHkoJG5hdHBvcnRzKSAmJiBhcnJheV9rZXlfZXhpc3RzKCRtZXRob2RbJ3BvcnRzJ11bMF1bJ2tleSddLCAkbmF0cG9ydHNbJGNtaWRdKSkKLQkJCQkkcG9ydCA9ICc6JyAuICRuYXRwb3J0c1skY21pZF1bJG1ldGhvZFsncG9ydHMnXVswXVsna2V5J11dWydwdWJsaWNwb3J0J107Ci0JCQllbHNlIHsKLQkJCQlpZigkbWV0aG9kWydwb3J0cyddWzBdWydrZXknXSA9PSAnI1BvcnQtVENQLTMzODkjJyAmJgotCQkJCSAgICR1c2VyWydyZHBwb3J0J10gIT0gMzM4OSkKLQkJCQkJJHBvcnQgPSAnOicgLiAkdXNlclsncmRwcG9ydCddOwotCQkJCWVsc2UKLQkJCQkJJHBvcnQgPSAnOicgLiAkbWV0aG9kWydwb3J0cyddWzBdWydwb3J0J107Ci0JCQl9Ci0JCQlicmVhazsKKworCSRtZXRob2QgPSAkY29ubmVjdERhdGFbJGNtaWRdOworCWlmKHByZWdfbWF0Y2goJy9yZW1vdGUgZGVza3RvcC9pJywgJG1ldGhvZFsnZGVzY3JpcHRpb24nXSkgfHwKKwkgICBwcmVnX21hdGNoKCcvUkRQL2knLCAkbWV0aG9kWydkZXNjcmlwdGlvbiddKSkgeworCQkjIGFzc3VtZSBpbmRleCAwIG9mIHBvcnRzIGZvciBuYXQKKwkJaWYoISBlbXB0eSgkbmF0cG9ydHMpICYmIGFycmF5X2tleV9leGlzdHMoJG1ldGhvZFsncG9ydHMnXVswXVsna2V5J10sICRuYXRwb3J0c1skY21pZF0pKQorCQkJJHBvcnQgPSAnOicgLiAkbmF0cG9ydHNbJGNtaWRdWyRtZXRob2RbJ3BvcnRzJ11bMF1bJ2tleSddXVsncHVibGljcG9ydCddOworCQllbHNlIHsKKwkJCWlmKCRtZXRob2RbJ3BvcnRzJ11bMF1bJ2tleSddID09ICcjUG9ydC1UQ1AtMzM4OSMnICYmCisJCQkgICAkdXNlclsncmRwcG9ydCddICE9IDMzODkpCisJCQkJJHBvcnQgPSAnOicgLiAkdXNlclsncmRwcG9ydCddOworCQkJZWxzZQorCQkJCSRwb3J0ID0gJzonIC4gJG1ldGhvZFsncG9ydHMnXVswXVsncG9ydCddOwogCQl9CiAJfQogCkBAIC0xMDU0MiwxNSArMTA1NTgsMTUgQEAKIAlwcmludCAiZGVza3RvcHdpZHRoOmk6JHdpZHRoXHJcbiI7CiAJcHJpbnQgImRlc2t0b3BoZWlnaHQ6aTokaGVpZ2h0XHJcbiI7CiAJcHJpbnQgInNlc3Npb24gYnBwOmk6JGJwcFxyXG4iOwotCQorCiAJcHJpbnQgIndpbnBvc3N0cjpzOjAsMSwwLDAsNTAwMCw0MDAwXHJcbiI7Ci0JIyAwOiAKKwkjIDA6CiAJIyAxOiAgICB1c2UgY29vcmRpbmF0ZXMgZm9yIHRoZSB3aW5kb3cgcG9zaXRpb24sIGFzIG9wcG9zZWQgdG8gMyAtIG1heGltaXplZAogCSMgMDogICAgbGVmdCBwb3NpdGlvbiBpbiBjbGllbnQgY29vcmRpbmF0ZXMKIAkjIDA6ICAgIHRvcCBwb3NpdGlvbiBpbiBjbGllbnQgY29vcmRpbmF0ZXMKIAkjIDUwMDA6IHdpZHRoIGluIHBpeGVscyAtIHNldCBsYXJnZSB0byBhdm9pZCBzY3JvbGxiYXJzCiAJIyA0MDAwOiBoZWlnaHQgaW4gcGl4ZWxzIC0gc2V0IGxhcmdlIHRvIGF2b2lkIHNjcm9sbGJhcnMKLQkKKwogCXByaW50ICJmdWxsIGFkZHJlc3M6czokaXBhZGRyZXNzJHBvcnRcclxuIjsKIAlwcmludCAiY29tcHJlc3Npb246aToxXHJcbiI7CiAJcHJpbnQgImtleWJvYXJkaG9vazppOjJcclxuIjsKQEAgLTEwNTY3LDYgKzEwNTgzLDggQEAKIAkJJHVzZXJpZCA9ICR1c2VyWyJ1bml0eWlkIl07CiAJaWYoJHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddWzBdWydkb21haW5ETlNOYW1lJ10gIT0gJycgJiYgISBzdHJsZW4oJHBhc3N3ZCkpCiAJCSR1c2VyaWQgLj0gIkAiIC4gJHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddWzBdWydkb21haW5ETlNOYW1lJ107CisJZWxzZWlmKCRyZXF1ZXN0WydyZXNlcnZhdGlvbnMnXVswXVsnT1N0eXBlJ10gPT0gJ3dpbmRvd3MnKQorCQkkdXNlcmlkID0gIi5cXCR1c2VyaWQiOwogCXByaW50ICJ1c2VybmFtZTpzOiR1c2VyaWRcclxuIjsKIAlwcmludCAiY2xlYXIgcGFzc3dvcmQ6czokcGFzc3dkXHJcbiI7CiAJcHJpbnQgImRvbWFpbjpzOlxyXG4iOwpAQCAtMTA2MzQsMTYgKzEwNjUyLDE2IEBACiAvLy8gYXZhaWxhYmxlOyBcYiBOT1RFOiBwYXNzIC0xIGluc3RlYWQgb2YgTlVMTCBpZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGZpZWxkCiAvLy8gdG8gYmUgdXBkYXRlZAogLy8vCi0vLy8gXGJyaWVmIGFkZHMgYW4gZW50cnkgdG8gdGhlIGNoYW5nZWxvZyB0YWJsZSBhbmQgdXBkYXRlcyBpbmZvcm1hdGlvbiBpbiAKKy8vLyBcYnJpZWYgYWRkcyBhbiBlbnRyeSB0byB0aGUgY2hhbmdlbG9nIHRhYmxlIGFuZCB1cGRhdGVzIGluZm9ybWF0aW9uIGluCiAvLy8gdGhlIGxvZyB0YWJsZQogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotZnVuY3Rpb24gYWRkQ2hhbmdlTG9nRW50cnkoJGxvZ2lkLCAkcmVtb3RlSVAsICRlbmQ9TlVMTCwgJHN0YXJ0PU5VTEwsIAorZnVuY3Rpb24gYWRkQ2hhbmdlTG9nRW50cnkoJGxvZ2lkLCAkcmVtb3RlSVAsICRlbmQ9TlVMTCwgJHN0YXJ0PU5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcHV0ZXJpZD1OVUxMLCAkZW5kaW5nPU5VTEwsICR3YXNhdmFpbGFibGU9LTEpIHsKIAlpZigkbG9naWQgPT0gMCkgewogCQlyZXR1cm47CiAJfQotCSRxdWVyeSA9ICJTRUxFQ1QgY29tcHV0ZXJpZCwgIiAKKwkkcXVlcnkgPSAiU0VMRUNUIGNvbXB1dGVyaWQsICIKIAkgICAgICAgLiAgICAgICAgInN0YXJ0LCAiCiAJICAgICAgIC4gICAgICAgICJpbml0aWFsZW5kLCAiCiAJICAgICAgIC4gICAgICAgICJyZW1vdGVJUCwgIgpAQCAtMTA2NTIsMTMgKzEwNjcwLDEzIEBACiAJICAgICAgIC4gIkZST00gbG9nICIKIAkgICAgICAgLiAiV0hFUkUgaWQgPSAkbG9naWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAyNjUpOwotCWlmKCEgJGxvZyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZighICRsb2cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlhYm9ydCgzMCk7CiAJfQogCSRsb2dbImNvbXB1dGVyaWQiXSA9IGFycmF5KCk7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBjb21wdXRlcmlkIEZST00gc3VibG9nIFdIRVJFIGxvZ2lkID0gJGxvZ2lkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlhcnJheV9wdXNoKCRsb2dbImNvbXB1dGVyaWQiXSwgJHJvd1siY29tcHV0ZXJpZCJdKTsKIAl9CiAJJGNoYW5nZWQgPSAwOwpAQCAtMTA3NjAsNyArMTA3NzgsNyBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gYWRkQ2hhbmdlTG9nRW50cnlPdGhlcigkbG9naWQsICRkYXRhKSB7Ci0JJGRhdGEgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGEpOworCSRkYXRhID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGRhdGEpOwogCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBjaGFuZ2Vsb2cgIgogCSAgICAgICAuICAgICAgICAiKGxvZ2lkLCAiCiAJICAgICAgIC4gICAgICAgICJ0aW1lc3RhbXAsICIKQEAgLTEwNzk2LDcgKzEwODE0LDcgQEAKIAkgICAgICAgLiAiRlJPTSBjb21wdXRlciAiCiAJICAgICAgIC4gIldIRVJFIGlkID0gJGNvbXB1dGVyaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpOworCSRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAkkcHJlZGljdGl2ZWlkID0gJHJvd1sncHJlZGljdGl2ZW1vZHVsZWlkJ107CiAJJHF1ZXJ5ID0gIlNFTEVDVCBjLnR5cGUsICIKIAkgICAgICAgLiAgICAgICAgInYuY29tcHV0ZXJpZCBBUyBob3N0aWQgIgpAQCAtMTA4MDQsNyArMTA4MjIsNyBAQAogCSAgICAgICAuICJMRUZUIEpPSU4gdm1ob3N0IHYgT04gKGMudm1ob3N0aWQgPSB2LmlkKSAiCiAJICAgICAgIC4gIldIRVJFIGMuaWQgPSAkY29tcHV0ZXJpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCk7CisJJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpOwogCWlmKCRyb3dbJ3R5cGUnXSA9PSAndmlydHVhbG1hY2hpbmUnKQogCQkkaG9zdGNvbXB1dGVyaWQgPSAkcm93Wydob3N0aWQnXTsKIAllbHNlCkBAIC0xMDg1Niw3ICsxMDg3NCw3IEBACiAJaWYoJHN1YnR5cGUgPT0gInVzZXJzIiB8fCAkc3VidHlwZSA9PSAiYm90aCIpIHsKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHVzZXJwcml2dHlwZSBXSEVSRSBuYW1lIE5PVCBJTiAoJ2NvbmZpZ0FkbWluJywgJ3NlcnZlclByb2ZpbGVBZG1pbicpIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDM2NSk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJaWYoJHJvd1sibmFtZSJdID09ICJibG9jayIgfHwgJHJvd1sibmFtZSJdID09ICJjYXNjYWRlIikKIAkJCQljb250aW51ZTsKIAkJCSR0eXBlc1sidXNlcnMiXVskcm93WyJpZCJdXSA9ICRyb3dbIm5hbWUiXTsKQEAgLTEwODY1LDcgKzEwODgzLDcgQEAKIAlpZigkc3VidHlwZSA9PSAicmVzb3VyY2VzIiB8fCAkc3VidHlwZSA9PSAiYm90aCIpIHsKIAkJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHJlc291cmNldHlwZSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAzNjYpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJJHR5cGVzWyJyZXNvdXJjZXMiXVskcm93WyJpZCJdXSA9ICRyb3dbIm5hbWUiXTsKIAl9CiAJcmV0dXJuICR0eXBlczsKQEAgLTEwODg1LDcgKzEwOTAzLDcgQEAKIGZ1bmN0aW9uIGdldFVzZXJQcml2VHlwZUlEKCR0eXBlKSB7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCBGUk9NIHVzZXJwcml2dHlwZSBXSEVSRSBuYW1lID0gJyR0eXBlJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDM3MCk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCiAJCXJldHVybiAkcm93WzBdOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDkzNCw4ICsxMDk1Miw4IEBACiAvLy8KIC8vLyBccGFyYW0gJG1heCAtIG1heCBhbGxvd2VkIGxlbmd0aCBpbiBtaW51dGVzCiAvLy8KLS8vLyBccmV0dXJuIGFycmF5IG9mIGxlbmd0aHMgdXAgdG8gJG1heCBzdGFydGluZyB3aXRoIDMwIG1pbnV0ZXMsIDEgaG91ciwgCi0vLy8gMiBob3VycywgdGhlbiBpbmNyZWFzaW5nIGJ5IDIgaG91cnMgdXAgdG8gNDcgaG91cnMsIHRoZW4gMiBkYXlzLCB0aGVuIAorLy8vIFxyZXR1cm4gYXJyYXkgb2YgbGVuZ3RocyB1cCB0byAkbWF4IHN0YXJ0aW5nIHdpdGggMzAgbWludXRlcywgMSBob3VyLAorLy8vIDIgaG91cnMsIHRoZW4gaW5jcmVhc2luZyBieSAyIGhvdXJzIHVwIHRvIDQ3IGhvdXJzLCB0aGVuIDIgZGF5cywgdGhlbgogLy8vIGluY3JlYXNpbmcgYnkgMSBkYXk7IGluZGV4ZXMgYXJlIHRoZSBkdXJhdGlvbiBpbiBtaW51dGVzCiAvLy8KIC8vLyBcYnJpZWYgZ2VuZXJhdGVzIGFuIGFycmF5IG9mIHJlc2VydmF0aW9uIGxlbmd0aHMKQEAgLTExMDU3LDggKzExMDc1LDggQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZXRSZXNvdXJjZUdyb3VwSUQoJGdyb3VwbmFtZSkgewogCWxpc3QoJHR5cGUsICRuYW1lKSA9IGV4cGxvZGUoJy8nLCAkZ3JvdXBuYW1lKTsKLQkkdHlwZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdHlwZSk7Ci0JJG5hbWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5hbWUpOworCSR0eXBlID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHR5cGUpOworCSRuYW1lID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJG5hbWUpOwogCSRxdWVyeSA9ICJTRUxFQ1QgZy5pZCAiCiAJICAgICAgIC4gIkZST00gcmVzb3VyY2Vncm91cCBnLCAiCiAJICAgICAgIC4gICAgICAicmVzb3VyY2V0eXBlIHQgIgpAQCAtMTEwNjYsNyArMTEwODQsNyBAQAogCSAgICAgICAuICAgICAgICJ0Lm5hbWUgPSAnJHR5cGUnIEFORCAiCiAJICAgICAgIC4gICAgICAgImcucmVzb3VyY2V0eXBlaWQgPSB0LmlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMzcxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRxaCkpCisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHFoKSkKIAkJcmV0dXJuICRyb3dbMF07CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKQEAgLTExMDg5LDcgKzExMTA3LDcgQEAKIAkgICAgICAgLiAiRlJPTSByZXNvdXJjZWdyb3VwICIKIAkgICAgICAgLiAiV0hFUkUgaWQgPSAkZ3JvdXBpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJcmV0dXJuICRyb3dbJ25hbWUnXTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwpAQCAtMTExMDcsMTIgKzExMTI1LDEyIEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZXRSZXNvdXJjZVR5cGVJRCgkbmFtZSkgewotCSRuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKKwkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkICIKIAkgICAgICAgLiAiRlJPTSByZXNvdXJjZXR5cGUgIgogCSAgICAgICAuICJXSEVSRSBuYW1lID0gJyRuYW1lJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcWgpKQorCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRxaCkpCiAJCXJldHVybiAkcm93WzBdOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMTEzMSw3ICsxMTE0OSw3IEBACiBmdW5jdGlvbiBnZXRSZXNvdXJjZVByaXZzKCkgewogCSRxdWVyeSA9ICJzaG93IGNvbHVtbnMgZnJvbSByZXNvdXJjZXByaXYgd2hlcmUgZmllbGQgPSAndHlwZSciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpOworCSRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKTsKIAlwcmVnX21hdGNoKCIvXmVudW1cKChbYS16QS1aMC05LCddKylcKSQvIiwgJHJvd1snVHlwZSddLCAkbWF0Y2hlcyk7CiAJJHRtcCA9IHN0cl9yZXBsYWNlKCInIiwgJycsICRtYXRjaGVzWzFdKTsKIAlyZXR1cm4gZXhwbG9kZSgnLCcsICR0bXApOwpAQCAtMTExNTEsNyArMTExNjksNyBAQAogCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIHByZXR0eW5hbWUgRlJPTSBjb25maWd0eXBlIE9SREVSIEJZIG5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkdHlwZXMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHR5cGVzWyRyb3dbJ2lkJ11dID0gJHJvd1sncHJldHR5bmFtZSddOwogCXJldHVybiAkdHlwZXM7CiB9CkBAIC0xMTE3MCw3ICsxMTE4OCw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIGRhdGF0eXBlIE9SREVSIEJZIG5hbWUiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkdHlwZXMgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHR5cGVzWyRyb3dbJ2lkJ11dID0gJHJvd1snbmFtZSddOwogCXJldHVybiAkdHlwZXM7CiB9CkBAIC0xMTE5NSw3ICsxMTIxMyw3IEBACiAJJHF1ZXJ5IC49ICJPUkRFUiBCWSBwcmV0dHluYW1lIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJHR5cGVzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSR0eXBlc1skcm93WydpZCddXSA9ICRyb3dbJ3ByZXR0eW5hbWUnXTsKIAlyZXR1cm4gJHR5cGVzOwogfQpAQCAtMTEyNDAsNyArMTEyNTgsNyBAQAogCSAgICAgICAuICAgICAgInVzZXIgdSwgIgogCSAgICAgICAuICAgICAgImFmZmlsaWF0aW9uIHVhLCAiCiAJICAgICAgIC4gICAgICAiY29uZmlndHlwZSBjdCwgIgotCSAgICAgICAuICAgICAgImNvbmZpZ21hcHR5cGUgY210LCAiIAorCSAgICAgICAuICAgICAgImNvbmZpZ21hcHR5cGUgY210LCAiCiAJICAgICAgIC4gICAgICAiYWZmaWxpYXRpb24gYSwgIgogCSAgICAgICAuICAgICAgImNvbmZpZ3N0YWdlIGNzICIKIAkgICAgICAgLiAiV0hFUkUgY20uY29uZmlnaWQgPSBjLmlkIEFORCAiCkBAIC0xMTI2MSw3ICsxMTI3OSw3IEBACiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSRjb25maWdzID0gYXJyYXkoKTsKIAkkY29uZmlnaWRzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkcm93Wydjb25maWdtYXBpZCddID0gJHJvd1snaWQnXTsKIAkJaWYoaXNfbnVsbCgkcm93WydzdWJpbWFnZWlkJ10pKQogCQkJJGNvbmZpZ2lkc1tdID0gJHJvd1snY29uZmlnaWQnXTsKQEAgLTExMzQ1LDcgKzExMzYzLDcgQEAKIAkgICAgICAgLiAgICAgICJ1c2VyIHUsICIKIAkgICAgICAgLiAgICAgICJhZmZpbGlhdGlvbiB1YSwgIgogCSAgICAgICAuICAgICAgImNvbmZpZ3R5cGUgY3QsICIKLQkgICAgICAgLiAgICAgICJjb25maWdtYXB0eXBlIGNtdCwgIiAKKwkgICAgICAgLiAgICAgICJjb25maWdtYXB0eXBlIGNtdCwgIgogCSAgICAgICAuICAgICAgImFmZmlsaWF0aW9uIGEsICIKIAkgICAgICAgLiAgICAgICJjb25maWdzdGFnZSBjcyAiCiAJICAgICAgIC4gIldIRVJFIGNtLmNvbmZpZ2lkID0gYy5pZCBBTkQgIgpAQCAtMTEzNzIsNyArMTEzOTAsNyBAQAogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkkY29uZmlncyA9IGFycmF5KCk7CiAJJGNvbmZpZ2lkcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHJvd1snY29uZmlnbWFwaWQnXSA9ICRyb3dbJ2lkJ107CiAJCWlmKGlzX251bGwoJHJvd1snc3ViaW1hZ2VpZCddKSkKIAkJCSRjb25maWdpZHNbXSA9ICRyb3dbJ2NvbmZpZ2lkJ107CkBAIC0xMTQ0Miw3ICsxMTQ2MCw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIGN2LmNvbmZpZ2lkIjsKIAkkZGF0YSA9IGFycmF5KCk7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyb3dbJ3JlcXVpcmVkJ10gPSAoaW50KSRyb3dbJ3JlcXVpcmVkJ107CiAJCSRyb3dbJ2FzayddID0gKGludCkkcm93Wydhc2snXTsKIAkJIyRyb3dbJ2RlZmF1bHR2YWx1ZSddID0gaHRtbHNwZWNpYWxjaGFycygkcm93WydkZWZhdWx0dmFsdWUnXSk7CkBAIC0xMTUxNSw3ICsxMTUzMyw3IEBACiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSRjbHVzdGVycyA9IGFycmF5KCk7CiAJJHN1YmltYWdlaWRzID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkY2hpbGRyZW4gPSBnZXRDb25maWdDbHVzdGVyc1JlYygkcm93Wydjb25maWdzdWJpbWFnZWlkJ10sICRmbGF0KTsKIAkJaWYoISBlbXB0eSgkY2hpbGRyZW4pKSB7CiAJCQlpZigkZmxhdCkKQEAgLTExNTc4LDcgKzExNTk2LDcgQEAKIAkgICAgICAgLiAgICAgICAgImEubmFtZSA9ICdHbG9iYWwnKSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSRjbHVzdGVycyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoJHJlYyA8IDIwKQogCQkJJGNoaWxkcmVuID0gZ2V0Q29uZmlnQ2x1c3RlcnNSZWMoJHJvd1snY29uZmlnc3ViaW1hZ2VpZCddLCAkZmxhdCwgKyskcmVjKTsKIAkJaWYoJHJlYyA8IDIwICYmICEgZW1wdHkoJGNoaWxkcmVuKSkgewpAQCAtMTE2MDYsNyArMTE2MjQsNyBAQAogCSRxdWVyeSA9ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBPU3R5cGUgT1JERVIgQlkgbmFtZSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwogCSR0eXBlcyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkdHlwZXNbJHJvd1snaWQnXV0gPSAkcm93WyduYW1lJ107CiAJcmV0dXJuICR0eXBlczsKIH0KQEAgLTExNjM5LDcgKzExNjU3LDcgQEAKIAkgICAgICAgLiAgICAgICAiYy5pZCBJTiAoJGlubGlzdCkiOwogCSRjb25maWdzID0gYXJyYXkoKTsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkY29uZmlnc1skcm93WydpZCddXSA9ICRyb3dbJ25hbWUnXTsKIAlyZXR1cm4gJGNvbmZpZ3M7CiB9CkBAIC0xMTY2Miw3ICsxMTY4MCw3IEBACiAJaWYoaXNzZXQoJGNhY2hlWydub2RlcyddWyRub2RlaWRdKSkKIAkJcmV0dXJuICRjYWNoZVsnbm9kZXMnXVskbm9kZWlkXTsKIAkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgaWQsIHBhcmVudCwgbmFtZSBGUk9NIHByaXZub2RlIiwgMzMwKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpCiAJCSRjYWNoZVsnbm9kZXMnXVskcm93WydpZCddXSA9ICRyb3c7CiAJaWYoaXNzZXQoJGNhY2hlWydub2RlcyddWyRub2RlaWRdKSkKIAkJcmV0dXJuICRjYWNoZVsnbm9kZXMnXVskbm9kZWlkXTsKQEAgLTExNzQ5LDcgKzExNzY3LDcgQEAKIC8vLwogLy8vIFxyZXR1cm4gLTEsIDAsIDEgaWYgbnVtZXJpY2FsIHBhcnRzIG9mICRhIDwsID0sIG9yID4gJGIKIC8vLwotLy8vIFxicmllZiBjb21wYXJlcyAkYSBhbmQgJGIgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZSBzaG91bGQgYmUgb3JkZXJlZCBmaXJzdDsgCisvLy8gXGJyaWVmIGNvbXBhcmVzICRhIGFuZCAkYiB0byBkZXRlcm1pbmUgd2hpY2ggb25lIHNob3VsZCBiZSBvcmRlcmVkIGZpcnN0OwogLy8vIGhhcyBzb21lIHVuZGVyc3RhbmQgb2YgbnVtZXJpY2FsIG9yZGVyIGluIHN0cmluZ3MKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTExODA5LDggKzExODI3LDggQEAKIC8vLyBccGFyYW0gJHJlc291cmNlMmlubGlzdCAtIChvcHRpb25hbCkgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgcmVzb3VyY2UgZ3JvdXBzCiAvLy8gdG8gbGltaXQgcXVlcnkgdG8KIC8vLwotLy8vIFxyZXR1cm4gYW4gYXJyYXkgb2YgJHJlc291cmNldHlwZTEgZ3JvdXAgdG8gJHJlc291cmNldHlwZTIgZ3JvdXAgbWFwcGluZ3MgCi0vLy8gd2hlcmUgZWFjaCBpbmRleCBpcyBhIGdyb3VwIGlkIGZyb20gJHJlc291cmNldHlwZTEgYW5kIGVhY2ggdmFsdWUgaXMgYW4gCisvLy8gXHJldHVybiBhbiBhcnJheSBvZiAkcmVzb3VyY2V0eXBlMSBncm91cCB0byAkcmVzb3VyY2V0eXBlMiBncm91cCBtYXBwaW5ncworLy8vIHdoZXJlIGVhY2ggaW5kZXggaXMgYSBncm91cCBpZCBmcm9tICRyZXNvdXJjZXR5cGUxIGFuZCBlYWNoIHZhbHVlIGlzIGFuCiAvLy8gYXJyYXkgb2YgJHJlc291cmNldHlwZTIgZ3JvdXAgaWRzCiAvLy8KIC8vLyBcYnJpZWYgYnVpbGRzIGFuIGFycmF5IG9mICRyZXNvdXJjZXR5cGUyIGdyb3VwIGlkcyBmb3IgZWFjaCAkcmVzb3VyY2V0eXBlMQpAQCAtMTE4MzksNyArMTE4NTcsNyBAQAogCWlmKCEgZW1wdHkoJHJlc291cmNlMmlubGlzdCkpCiAJCSRxdWVyeSAuPSAiQU5EIHJlc291cmNlZ3JvdXBpZDIgSU4gKCRyZXNvdXJjZTJpbmxpc3QpICI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoJHJlc291cmNldHlwZTEgPT0gJHJvd1sncmVzb3VyY2V0eXBlaWQxJ10pIHsKIAkJCWlmKGFycmF5X2tleV9leGlzdHMoJHJvd1sicmVzb3VyY2Vncm91cGlkMSJdLCAkcmV0dXJuKSkKIAkJCQlhcnJheV9wdXNoKCRyZXR1cm5bJHJvd1sicmVzb3VyY2Vncm91cGlkMSJdXSwgJHJvd1sicmVzb3VyY2Vncm91cGlkMiJdKTsKQEAgLTExODkxLDcgKzExOTA5LDcgQEAKIAkgICAgICAgLiAiT1JERVIgQlkgYy5kZXNjcmlwdGlvbiI7CiAJJG1ldGhvZHMgPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJG1ldGhvZHNbJHJvd1snaWQnXV0gPSAkcm93OwogCSRfU0VTU0lPTlsndXNlcnNlc3Npb25kYXRhJ11bJGtleV0gPSAkbWV0aG9kczsKIAlyZXR1cm4gJG1ldGhvZHM7CkBAIC0xMTkyOSw3ICsxMTk0Nyw3IEBACiAJICAgICAgIC4gIk9SREVSIEJZIHN0YXJ0ICIKIAkgICAgICAgLiAiTElNSVQgMSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGVuZCA9IGRhdGV0aW1lVG9Vbml4KCRyZXF1ZXN0WyJlbmQiXSk7CiAJCSRzdGFydCA9IGRhdGV0aW1lVG9Vbml4KCRyb3dbInN0YXJ0Il0pOwogCQlyZXR1cm4gKCRzdGFydCAtICRlbmQpIC8gNjA7CkBAIC0xMTk3NCw4ICsxMTk5Miw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBjbGVhblNlbWFwaG9yZSgpIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsLCAkdW5pcWlkOwotCWlmKCEgaXNfcmVzb3VyY2UoJG15c3FsX2xpbmtfdmNsKSB8fCAhIGdldF9yZXNvdXJjZV90eXBlKCRteXNxbF9saW5rX3ZjbCkgPT0gJ215c3FsIGxpbmsnKQorCWdsb2JhbCAkbXlzcWxpX2xpbmtfdmNsLCAkdW5pcWlkOworCWlmKCEgaXNfcmVzb3VyY2UoJG15c3FsaV9saW5rX3ZjbCkgfHwgISBnZXRfcmVzb3VyY2VfdHlwZSgkbXlzcWxpX2xpbmtfdmNsKSA9PSAnbXlzcWwgbGluaycpCiAJCXJldHVybjsKIAkkcXVlcnkgPSAiREVMRVRFIEZST00gc2VtYXBob3JlICIKIAkgICAgICAgLiAiV0hFUkUgcHJvY2lkID0gJyR1bmlxaWQnIjsKQEAgLTEyMDI0LDcgKzEyMDQyLDcgQEAKIC8vLyBccGFyYW0gJGlkIChvcHRpb25hbCkgLSBhIHByb2ZpbGUgaWQ7IGlmIHNwZWNpZmllZCwgb25seSBkYXRhIGFib3V0IHRoaXMKIC8vLyBwcm9maWxlIHdpbGwgYmUgcmV0dXJuZWQKIC8vLwotLy8vIFxyZXR1cm4gYW4gYXJyYXkgb2YgcHJvZmlsZXMgd2hlcmUgZWFjaCBrZXkgaXMgdGhlIHByb2ZpbGUgaWQgYW5kIGVhY2ggCisvLy8gXHJldHVybiBhbiBhcnJheSBvZiBwcm9maWxlcyB3aGVyZSBlYWNoIGtleSBpcyB0aGUgcHJvZmlsZSBpZCBhbmQgZWFjaAogLy8vIGVsZW1lbnQgaXMgYW4gYXJyYXkgd2l0aCB0aGVzZSBrZXlzOlxuCiAvLy8gXGIgcHJvZmlsZW5hbWUgLSBuYW1lIG9mIHByb2ZpbGVcbgogLy8vIFxiIG5hbWUgLSBuYW1lIG9mIHByb2ZpbGUgKHNvIGFycmF5IGNhbiBiZSBwYXNzZWQgdG8gcHJpbnRTZWxlY3RJbnB1dClcbgpAQCAtMTIwODMsNyArMTIxMDEsNyBAQAogCQkkcXVlcnkgLj0gIiBBTkQgdnAuaWQgPSAkaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRyZXQgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHJldFskcm93WydpZCddXSA9ICRyb3c7CiAJcmV0dXJuICRyZXQ7CiB9CkBAIC0xMjEwMyw3ICsxMjEyMSw3IEBACiBmdW5jdGlvbiBnZXRFTlVNdmFsdWVzKCR0YWJsZSwgJGZpZWxkKSB7CiAJJHF1ZXJ5ID0gIkRFU0MgJHRhYmxlIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoJHJvd1snRmllbGQnXSA9PSAiJGZpZWxkIikgewogCQkJJGRhdGEgPSBwcmVnX3JlcGxhY2UoYXJyYXkoJy9eZW51bVwoLycsICIvJy8iLCAnL1wpJC8nKSwgYXJyYXkoJycsICcnLCAnJyksICRyb3dbJ1R5cGUnXSk7CiAJCQkkdHlwZXMgPSBleHBsb2RlKCcsJywgJGRhdGEpOwpAQCAtMTIxMTcsNyArMTIxMzUsNyBAQAogLy8vIFxmbiBhZGRDb250aW51YXRpb25zRW50cnkoJG5leHRtb2RlLCAkZGF0YSwgJGR1cmF0aW9uLCAkZGVsZXRlRnJvbVNlbGYsCiAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAkbXVsdGljYWxsLCAkcmVwZWF0UHJvdGVjdCkKIC8vLwotLy8vIFxwYXJhbSAkbmV4dG1vZGUgLSBuZXh0IG1vZGUgdG8gZ28gaW4gdG8gCisvLy8gXHBhcmFtICRuZXh0bW9kZSAtIG5leHQgbW9kZSB0byBnbyBpbiB0bwogLy8vIFxwYXJhbSAkZGF0YSAob3B0aW9uYWwsIGRlZmF1bHQ9YXJyYXkoKSktIGFycmF5IG9mIGRhdGEgdG8gbWFrZSBhdmFpbGFibGUKIC8vLyBpbiAkbmV4dG1vZGUKIC8vLyBccGFyYW0gJGR1cmF0aW9uIChvcHRpb25hbCwgZGVmYXVsdD1TRUNJTldFRUspLSBob3cgbG9uZyB0aGlzIGNvbnRpbnVhdGlvbgpAQCAtMTIxNTIsNyArMTIxNzAsNyBAQAogCQkkY29udGlkID0gbWQ1KCRtb2RlIC4gJG5leHRtb2RlIC4gJHNlcmRhdGEgLiAkdXNlclsnaWQnXSAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKTsKIAllbHNlCiAJCSRjb250aWQgPSBtZDUoJG1vZGUgLiAkbmV4dG1vZGUgLiAkc2VyZGF0YSAuICR1c2VyWydpZCddIC4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOwotCSRzZXJkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRzZXJkYXRhKTsKKwkkc2VyZGF0YSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRzZXJkYXRhKTsKIAkkZXhwaXJldGltZSA9IHVuaXhUb0RhdGV0aW1lKHRpbWUoKSArICRkdXJhdGlvbik7CiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgIgogCSAgICAgICAuICAgICAgICAicGFyZW50aWQgIgpAQCAtMTIxNjAsNyArMTIxNzgsNyBAQAogCSAgICAgICAuICJXSEVSRSBpZCA9ICckY29udGlkJyBBTkQgIgogCSAgICAgICAuICAgICAgICJ1c2VyaWQgPSB7JHVzZXJbJ2lkJ119IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkjIHVwZGF0ZSBleHBpcmV0aW1lCiAJCSRxdWVyeSA9ICJVUERBVEUgY29udGludWF0aW9ucyAiCiAJCSAgICAgICAuICJTRVQgZXhwaXJldGltZSA9ICckZXhwaXJldGltZScgIgpAQCAtMTIxODMsNyArMTIyMDEsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIGlkID0gJyRjb250aW51YXRpb25pZCcgQU5EICIKIAkJCSAgICAgICAuICAgICAgICJ1c2VyaWQgPSB7JHVzZXJbJ2lkJ119IjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQkJaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkKKwkJCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkJCWFib3J0KDEwOCk7CiAJCQkkZGVsZXRlZnJvbWlkID0gJHJvd1snZGVsZXRlZnJvbWlkJ107CiAJCX0KQEAgLTEyMjY3LDcgKzEyMjg1LDcgQEAKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAogCSMgcmV0dXJuIGVycm9yIGlmIGl0IGlzIG5vdCB0aGVyZQotCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkKKwlpZighICgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpKQogCQlyZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnY29udGludWF0aW9uIGRvZXMgbm90IGV4aXN0Jyk7CiAKIAkjIHJldHVybiBlcnJvciBpZiBpdCBpcyBleHBpcmVkCkBAIC0xMjM3Myw3ICsxMjM5MSw3IEBACiAJICAgICAgIC4gIkZST00gc2hpYmF1dGggIgogCSAgICAgICAuICJXSEVSRSBpZCA9ICRpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJGRhdGEgPSB1bnNlcmlhbGl6ZSgkcm93WydkYXRhJ10pOwogCQl1bnNldCgkcm93WydkYXRhJ10pOwogCQkkZGF0YTIgPSBhcnJheV9tZXJnZSgkcm93LCAkZGF0YSk7CkBAIC0xMjQxMiw3ICsxMjQzMCw3IEBACiAJJHF1ZXJ5IC49ICJGUk9NIHZhcmlhYmxlICIKIAkgICAgICAgLiAgIldIRVJFIG5hbWUgPSAnJGtleSciOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkaW5jcGFyYW1zKSB7CiAJCQlzd2l0Y2goJHJvd1snc2VyaWFsaXphdGlvbiddKSB7CiAJCQkJY2FzZSAneWFtbCc6CkBAIC0xMjQ1MSw3ICsxMjQ2OSw3IEBACiAvLy8KIC8vLyBccmV0dXJuIGFycmF5IG9mIHZhbHVlcyBmcm9tIHZhcmlhYmxlIHRhYmxlCiAvLy8KLS8vLyBcYnJpZWYgZ2V0cyBkYXRhIGZyb20gdGhlIHZhcmlhYmxlIHRhYmxlIGZvciAkcGF0dGVybiBtYXRjaGVzICduYW1lJyBmcm9tIAorLy8vIFxicmllZiBnZXRzIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgdGFibGUgZm9yICRwYXR0ZXJuIG1hdGNoZXMgJ25hbWUnIGZyb20KIC8vLyB0YWJsZQogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTI0NjMsNyArMTI0ODEsNyBAQAogCSAgICAgICAuICJXSEVSRSBuYW1lIFJFR0VYUCAnJHBhdHRlcm4nIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7CiAJJHJldCA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJc3dpdGNoKCRyb3dbJ3NlcmlhbGl6YXRpb24nXSkgewogCQkJY2FzZSAnbm9uZSc6CiAJCQkJJHJldFskcm93WyduYW1lJ11dID0gJHJvd1sndmFsdWUnXTsKQEAgLTEyNDk5LDcgKzEyNTE3LDcgQEAKIAkkdXBkYXRlID0gMDsKIAkkcXVlcnkgPSAiU0VMRUNUIHNlcmlhbGl6YXRpb24gRlJPTSB2YXJpYWJsZSBXSEVSRSBuYW1lID0gJyRrZXknIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJaWYoJHNlcmlhbGl6YXRpb24gPT0gJycpCiAJCQkkc2VyaWFsaXphdGlvbiA9ICRyb3dbJ3NlcmlhbGl6YXRpb24nXTsKIAkJJHVwZGF0ZSA9IDE7CkBAIC0xMjUwOSwxOSArMTI1MjcsMTkgQEAKIAkkX1NFU1NJT05bJ3ZhcmlhYmxlcyddWyRrZXldID0gJGRhdGE7CiAJc3dpdGNoKCRzZXJpYWxpemF0aW9uKSB7CiAJCWNhc2UgJ25vbmUnOgotCQkJJHFkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRkYXRhKTsKKwkJCSRxZGF0YSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRkYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlICd5YW1sJzoKIAkJCSR5YW1sID0gU3B5Yzo6WUFNTER1bXAoJGRhdGEpOwotCQkJJHFkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR5YW1sKTsKKwkJCSRxZGF0YSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCR5YW1sKTsKIAkJCWJyZWFrOwogCQljYXNlICdwaHBzZXJpYWxpemUnOgotCQkJJHFkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKHNlcmlhbGl6ZSgkZGF0YSkpOworCQkJJHFkYXRhID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoc2VyaWFsaXplKCRkYXRhKSk7CiAJCQlicmVhazsKIAl9CiAJaWYoJHVwZGF0ZSkKIAkJJHF1ZXJ5ID0gIlVQREFURSB2YXJpYWJsZSAiCi0JCSAgICAgICAuICJTRVQgdmFsdWUgPSAnJHFkYXRhJywgIiAKKwkJICAgICAgIC4gIlNFVCB2YWx1ZSA9ICckcWRhdGEnLCAiCiAJCSAgICAgICAuICAgICAic2VyaWFsaXphdGlvbiA9ICckc2VyaWFsaXphdGlvbicsICIKIAkJICAgICAgIC4gICAgICJzZXRieSA9ICd3ZWJjb2RlJywgIgogCQkgICAgICAgLiAgICAgInRpbWVzdGFtcCA9IE5PVygpICIKQEAgLTEyNjIyLDcgKzEyNjQwLDcgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHhtbHJwY2NhbGwoKSB7Ci0JZ2xvYmFsICR4bWxycGNfaGFuZGxlLCAkSFRUUF9SQVdfUE9TVF9EQVRBLCAkdXNlcjsKKwlnbG9iYWwgJHhtbHJwY19oYW5kbGUsICR1c2VyOwogCSMgY3JlYXRlIHhtbHJwYyBoYW5kbGUKIAkkeG1scnBjX2hhbmRsZSA9IHhtbHJwY19zZXJ2ZXJfY3JlYXRlKCk7CiAJIyByZWdpc3RlciBmdW5jdGlvbnMgYXZhaWxhYmxlIHZpYSBycGMgY2FsbHMKQEAgLTEyNjc2LDcgKzEyNjk0LDggQEAKIAl4bWxycGNfc2VydmVyX3JlZ2lzdGVyX21ldGhvZCgkeG1scnBjX2hhbmRsZSwgIlhNTFJQQ2ZpbmlzaEJhc2VJbWFnZUNhcHR1cmUiLCAieG1sUlBDaGFuZGxlciIpOwogCXhtbHJwY19zZXJ2ZXJfcmVnaXN0ZXJfbWV0aG9kKCR4bWxycGNfaGFuZGxlLCAiWE1MUlBDY2hlY2tDcnlwdFNlY3JldHMiLCAieG1sUlBDaGFuZGxlciIpOwogCi0JcHJpbnQgeG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZCgkeG1scnBjX2hhbmRsZSwgJEhUVFBfUkFXX1BPU1RfREFUQSwgJycpOworCSRyYXdfcG9zdF9kYXRhID0gZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CisJcHJpbnQgeG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZCgkeG1scnBjX2hhbmRsZSwgJHJhd19wb3N0X2RhdGEsICcnKTsKIAl4bWxycGNfc2VydmVyX2Rlc3Ryb3koJHhtbHJwY19oYW5kbGUpOwogCWNsZWFuU2VtYXBob3JlKCk7CiAJZGJEaXNjb25uZWN0KCk7CkBAIC0xMjY5MSwxMyArMTI3MTAsMTQgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHhtbHJwY2dldGFmZmlsaWF0aW9ucygpIHsKLQlnbG9iYWwgJHhtbHJwY19oYW5kbGUsICRIVFRQX1JBV19QT1NUX0RBVEE7CisJZ2xvYmFsICR4bWxycGNfaGFuZGxlOwogCSMgY3JlYXRlIHhtbHJwYyBoYW5kbGUKIAkkeG1scnBjX2hhbmRsZSA9IHhtbHJwY19zZXJ2ZXJfY3JlYXRlKCk7CiAJIyByZWdpc3RlciBmdW5jdGlvbnMgYXZhaWxhYmxlIHZpYSBycGMgY2FsbHMKIAl4bWxycGNfc2VydmVyX3JlZ2lzdGVyX21ldGhvZCgkeG1scnBjX2hhbmRsZSwgIlhNTFJQQ2FmZmlsaWF0aW9ucyIsICJ4bWxSUENoYW5kbGVyIik7CiAKLQlwcmludCB4bWxycGNfc2VydmVyX2NhbGxfbWV0aG9kKCR4bWxycGNfaGFuZGxlLCAkSFRUUF9SQVdfUE9TVF9EQVRBLCAnJyk7CisJJHJhd19wb3N0X2RhdGEgPSBmaWxlX2dldF9jb250ZW50cygicGhwOi8vaW5wdXQiKTsKKwlwcmludCB4bWxycGNfc2VydmVyX2NhbGxfbWV0aG9kKCR4bWxycGNfaGFuZGxlLCAkcmF3X3Bvc3RfZGF0YSwgJycpOwogCXhtbHJwY19zZXJ2ZXJfZGVzdHJveSgkeG1scnBjX2hhbmRsZSk7CiAJZGJEaXNjb25uZWN0KCk7CiAJZXhpdDsKQEAgLTEyNzI3LDE1ICsxMjc0NywxNSBAQAogCQkka2V5aWQgPSAkdXNlclsnaWQnXTsKIAlpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmN0aW9uKSkgewogCQlpZighIGRlZmluZWQoJ1hNTFJQQ0xPR0dJTkcnKSB8fCBYTUxSUENMT0dHSU5HICE9IDApIHsKLQkJCSRzYXZlYXJncyA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyhzZXJpYWxpemUoJGFyZ3MpKTsKKwkJCSRzYXZlYXJncyA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKHNlcmlhbGl6ZSgkYXJncykpOwogCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIHhtbHJwY0xvZyAiCi0JCQkgICAgICAgLiAgICAgICAgIih4bWxycGNLZXlpZCwgIiAKKwkJCSAgICAgICAuICAgICAgICAiKHhtbHJwY0tleWlkLCAiCiAJCQkgICAgICAgLiAgICAgICAgInRpbWVzdGFtcCwgIgogCQkJICAgICAgIC4gICAgICAgICJJUGFkZHJlc3MsICIKIAkJCSAgICAgICAuICAgICAgICAibWV0aG9kLCAiCiAJCQkgICAgICAgLiAgICAgICAgImFwaXZlcnNpb24sICIKIAkJCSAgICAgICAuICAgICAgICAiY29tbWVudHMpICIKLQkJCSAgICAgICAuICJWQUxVRVMgIiAKKwkJCSAgICAgICAuICJWQUxVRVMgIgogCQkJICAgICAgIC4gICAgICAgICIoJGtleWlkLCAiCiAJCQkgICAgICAgLiAgICAgICAgIk5PVygpLCAiCiAJCQkgICAgICAgLiAgICAgICAgIickcmVtb3RlSVAnLCAiCkBAIC0xMjc2OCwxMyArMTI3ODgsMTMgQEAKIC8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIHhtbFJQQ2Fib3J0KCRlcnJjb2RlLCAkcXVlcnk9JycpIHsKLQlnbG9iYWwgJG15c3FsX2xpbmtfdmNsLCAkbXlzcWxfbGlua19hY2N0LCAkRVJST1JTLCAkdXNlciwgJG1vZGU7CisJZ2xvYmFsICRteXNxbGlfbGlua192Y2wsICRteXNxbGlfbGlua19hY2N0LCAkRVJST1JTLCAkdXNlciwgJG1vZGU7CiAJZ2xvYmFsICRYTUxSUENFUlJPUlM7CiAJaWYoT05MSU5FREVCVUcgJiYgY2hlY2tVc2VySGFzUGVybSgnVmlldyBEZWJ1ZyBJbmZvcm1hdGlvbicpKSB7CiAJCSRtc2cgPSAnJzsKIAkJaWYoJGVycmNvZGUgPj0gMTAwICYmICRlcnJjb2RlIDwgNDAwKSB7Ci0JCQkkbXNnIC49ICJFUlJPUiAoIiAuIG15c3FsX2Vycm5vKCRteXNxbF9saW5rX3ZjbCkgLiAiKSAtICI7Ci0JCQkkbXNnIC49IG15c3FsX2Vycm9yKCRteXNxbF9saW5rX3ZjbCkgLiAiICRxdWVyeSAiOworCQkJJG1zZyAuPSAiRVJST1IgKCIgLiBteXNxbGlfZXJybm8oJG15c3FsaV9saW5rX3ZjbCkgLiAiKSAtICI7CisJCQkkbXNnIC49IG15c3FsaV9lcnJvcigkbXlzcWxpX2xpbmtfdmNsKSAuICIgJHF1ZXJ5ICI7CiAJCX0KIAkJJG1zZyAuPSAkRVJST1JTWyIkZXJyY29kZSJdOwogCQkkWE1MUlBDRVJST1JTWzEwMF0gPSAkbXNnOwpAQCAtMTI3ODMsOCArMTI4MDMsOCBAQAogCWVsc2UgewogCQkkbWVzc2FnZSA9ICIiOwogCQlpZigkZXJyY29kZSA+PSAxMDAgJiYgJGVycmNvZGUgPCA0MDApIHsKLQkJCSRtZXNzYWdlIC49IG15c3FsX2Vycm9yKCRteXNxbF9saW5rX3ZjbCkgLiAiXG4iOwotCQkJJG1lc3NhZ2UgLj0gbXlzcWxfZXJyb3IoJG15c3FsX2xpbmtfYWNjdCkgLiAiXG4iOworCQkJJG1lc3NhZ2UgLj0gbXlzcWxpX2Vycm9yKCRteXNxbGlfbGlua192Y2wpIC4gIlxuIjsKKwkJCSRtZXNzYWdlIC49IG15c3FsaV9lcnJvcigkbXlzcWxpX2xpbmtfYWNjdCkgLiAiXG4iOwogCQkJJG1lc3NhZ2UgLj0gJHF1ZXJ5IC4gIlxuIjsKIAkJfQogCQkkbWVzc2FnZSAuPSAiRVJST1IoJGVycmNvZGUpOiAiIC4gJEVSUk9SU1siJGVycmNvZGUiXSAuICJcbiI7CkBAIC0xMjkzNCw3ICsxMjk1NCw3IEBACiAJCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAnZXhpc3RpbmcgdXNlciBncm91cCB3aXRoIHN1Ym1pdHRlZCBuYW1lIGFuZCBhZmZpbGlhdGlvbicpOwogCQl9CiAJCWVsc2VpZigkZXhpc3RzICYmICRkb2VzZXhpc3QpIHsKLQkJCSRlc2NfbmFtZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkaXRlbXNbJ25hbWUnXSk7CisJCQkkZXNjX25hbWUgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkaXRlbXNbJ25hbWUnXSk7CiAJCQkkaXRlbXNbJ2lkJ10gPSBnZXRVc2VyR3JvdXBJRCgkZXNjX25hbWUsICRhZmZpbGlkKTsKIAkJfQogCX0KQEAgLTEzMDIyLDcgKzEzMDQyLDcgQEAKIAkJCSAvLyBBbHdheXMgdXNlICIuIiBmb3IgZmxvYXRzLgogCQkJIHJldHVybiBmbG9hdHZhbChzdHJfcmVwbGFjZSgiLCIsICIuIiwgc3RydmFsKCRhKSkpOwogCQl9Ci0gCisKIAkJaWYgKGlzX3N0cmluZygkYSkpIHsKIAkJCSBzdGF0aWMgJGpzb25SZXBsYWNlcyA9IGFycmF5KGFycmF5KCJcXCIsICIvIiwgIlxuIiwgIlx0IiwgIlxyIiwgIlxiIiwgIlxmIiwgJyInKSwgYXJyYXkoJ1xcXFwnLCAnXFwvJywgJ1xcbicsICdcXHQnLCAnXFxyJywgJ1xcYicsICdcXGYnLCAnXCInKSk7CiAJCQlyZXR1cm4gJyInIC4gc3RyX3JlcGxhY2UoJGpzb25SZXBsYWNlc1swXSwgJGpzb25SZXBsYWNlc1sxXSwgJGEpIC4gJyInOwpAQCAtMTMwODIsOCArMTMxMDIsOCBAQAogLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gc2VuZEhlYWRlcnMoKSB7Ci0JZ2xvYmFsICRtb2RlLCAkdXNlciwgJGF1dGhlZCwgJG9sZG1vZGUsICRhY3Rpb25GdW5jdGlvbjsKLQlnbG9iYWwgJHNoaWJhdXRoZWQ7CisJZ2xvYmFsICRtb2RlLCAkdXNlciwgJGF1dGhlZCwgJGFjdGlvbkZ1bmN0aW9uOworCWdsb2JhbCAkc2hpYmF1dGhlZCwgJGF1dGhGdW5jczsKIAlpZighICRhdXRoZWQgJiYgJG1vZGUgPT0gImF1dGgiKSB7CiAJCWhlYWRlcigiTG9jYXRpb246ICIgLiBCQVNFVVJMIC4gU0NSSVBUIC4gIj9tb2RlPXNlbGVjdGF1dGgiKTsKIAkJZGJEaXNjb25uZWN0KCk7CkBAIC0xMzA5MSw3OCArMTMxMTEsMjIgQEAKIAl9CiAJc3dpdGNoKCRtb2RlKSB7CiAJCWNhc2UgJ2xvZ291dCc6Ci0JCQlpZigkc2hpYmF1dGhlZCkgewotCQkJCSRzaGliZGF0YSA9IGdldFNoaWJhdXRoRGF0YSgkc2hpYmF1dGhlZCk7Ci0JCQkJLy8gVE9ETyBtYWtlIHNoaWItbG9nb3V0dXJsIGNvbXBhcmlzb24gY2FzZWxlc3MKLQkJCQlpZihhcnJheV9rZXlfZXhpc3RzKCdTaGliLWxvZ291dHVybCcsICRzaGliZGF0YSkgJiYKLQkJCQkgICAhIGVtcHR5KCRzaGliZGF0YVsnU2hpYi1sb2dvdXR1cmwnXSkpIHsKLQkJCQkJZGJEaXNjb25uZWN0KCk7Ci0JCQkJCWhlYWRlcigiTG9jYXRpb246IHskc2hpYmRhdGFbJ1NoaWItbG9nb3V0dXJsJ119Iik7Ci0JCQkJCWV4aXQ7Ci0JCQkJfQotCQkJfQotCQljYXNlICdzaGlibG9nb3V0JzoKLQkJCXNldGNvb2tpZSgiSVRFQ1NBVVRIIiwgIiIsIHRpbWUoKSAtIDEwLCAiLyIsIENPT0tJRURPTUFJTik7Ci0JCQlzZXRjb29raWUoIlZDTEFVVEgiLCAiIiwgdGltZSgpIC0gMTAsICIvIiwgQ09PS0lFRE9NQUlOKTsKLQkJCWlmKCRzaGliYXV0aGVkKSB7Ci0JCQkJJG1zZyA9ICcnOwotCQkJCSRzaGliZGF0YSA9IGdldFNoaWJhdXRoRGF0YSgkc2hpYmF1dGhlZCk7Ci0JCQkJIyBmaW5kIGFuZCBjbGVhciBzaGliIGNvb2tpZXMKLQkJCQkvKmZvcmVhY2goYXJyYXlfa2V5cygkX0NPT0tJRSkgYXMgJGtleSkgewotCQkJCQlpZihwcmVnX21hdGNoKCcvXl9zaGlic2Vzc2lvbltfMC05YS1mQS1GXSskLycsICRrZXkpKQotCQkJCQkJc2V0Y29va2llKCRrZXksICIiLCB0aW1lKCkgLSAxMCwgIi8iLCAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7Ci0JCQkJCWVsc2VpZihwcmVnX21hdGNoKCcvXl9zaGlic3RhdGVfLycsICRrZXkpKQotCQkJCQkJc2V0Y29va2llKCRrZXksICIiLCB0aW1lKCkgLSAxMCwgIi8iLCAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7Ci0JCQkJfSovCi0JCQkJZG9RdWVyeSgiREVMRVRFIEZST00gc2hpYmF1dGggV0hFUkUgaWQgPSAkc2hpYmF1dGhlZCIsIDEwMSk7CisJCQkkYXV0aHR5cGUgPSBnZXRBdXRoVHlwZUZyb21BdXRoQ29va2llKCk7CisJCQlpZihpc19udWxsKCRhdXRodHlwZSkpIHsKIAkJCQlzdG9wU2Vzc2lvbigpOwogCQkJCWRiRGlzY29ubmVjdCgpOwotCQkJCWlmKGFycmF5X2tleV9leGlzdHMoJ1NoaWItbG9nb3V0dXJsJywgJHNoaWJkYXRhKSAmJgotCQkJCSAgICEgZW1wdHkoJHNoaWJkYXRhWydTaGliLWxvZ291dHVybCddKSkgewotCQkJCQlwcmludCAiPGh0bWw+XG4iOwotCQkJCQlwcmludCAiICAgPGhlYWQ+XG4iOwotCQkJCQlwcmludCAiICAgICAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuIjsKLQkJCQkJcHJpbnQgIiAgICAgICAgIC5yZWQge1xuIjsKLQkJCQkJcHJpbnQgIiAgICAgICAgICAgIGNvbG9yOiByZWQ7XG4iOwotCQkJCQlwcmludCAiICAgICAgICAgfVxuIjsKLQkJCQkJcHJpbnQgIiAgICAgICAgIGJvZHl7XG4iOwotCQkJCQlwcmludCAiICAgICAgICAgICAgbWFyZ2luOjBweDsgY29sb3I6IHJlZDtcbiI7Ci0JCQkJCXByaW50ICIgICAgICAgICB9XG4iOwotCQkJCQlwcmludCAiICAgICAgPC9zdHlsZT5cbiI7Ci0JCQkJCXByaW50ICIgICA8L2hlYWQ+XG4iOwotCQkJCQlwcmludCAiICAgPGJvZHk+XG4iOwotCQkJCQlwcmludCAiICAgICAgPHNwYW4gY2xhc3M9cmVkPkRvbmUuPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOzxhIHRhcmdldD1cIl90b3BcIiBocmVmPVwiIiAuIEJBU0VVUkwgLiAiL1wiPlJldHVybiB0byBWQ0w8L2E+XG4iOwotCQkJCQlwcmludCAiICAgPC9ib2R5PlxuIjsKLQkJCQkJcHJpbnQgIjwvaHRtbD5cbiI7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlwcmludCAiPGh0bWw+XG4iOwotCQkJCQlwcmludCAiPGhlYWQ+XG4iOwotCQkJCQlwcmludCAiPE1FVEEgSFRUUC1FUVVJVj1SRUZSRVNIIENPTlRFTlQ9XCI1O3VybD0iIC4gQkFTRVVSTCAuICJcIj5cbiI7Ci0JCQkJCXByaW50ICI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4iOwotCQkJCQlwcmludCAiICAuaGlkZGVuIHtcbiI7Ci0JCQkJCXByaW50ICIgICAgZGlzcGxheTogbm9uZTtcbiI7Ci0JCQkJCXByaW50ICIgIH1cbiI7Ci0JCQkJCXByaW50ICI8L3N0eWxlPlxuIjsKLQkJCQkJcHJpbnQgIjwvaGVhZD5cbiI7Ci0JCQkJCXByaW50ICI8Ym9keT5cbiI7Ci0JCQkJCXByaW50ICJMb2dnaW5nIG91dCBvZiBWQ0wuLi4iOwotCQkJCQlwcmludCAiPGlmcmFtZSBzcmM9XCJodHRwczovL3skX1NFUlZFUlsnU0VSVkVSX05BTUUnXX0vU2hpYmJvbGV0aC5zc28vTG9nb3V0XCIgY2xhc3M9aGlkZGVuPlxuIjsKLQkJCQkJcHJpbnQgIjwvaWZyYW1lPlxuIjsKLQkJCQkJaWYoYXJyYXlfa2V5X2V4aXN0cygnU2hpYi1JZGVudGl0eS1Qcm92aWRlcicsICRzaGliZGF0YSkgJiYKLQkJCQkJICAgISBlbXB0eSgkc2hpYmRhdGFbJ1NoaWItSWRlbnRpdHktUHJvdmlkZXInXSkpIHsKLQkJCQkJCSR0bXAgPSBleHBsb2RlKCcvJywgJHNoaWJkYXRhWydTaGliLUlkZW50aXR5LVByb3ZpZGVyJ10pOwotCQkJCQkJJGlkcCA9ICJ7JHRtcFswXX0vL3skdG1wWzJdfSI7Ci0JCQkJCQlwcmludCAiPGlmcmFtZSBzcmM9XCIkaWRwL2lkcC9sb2dvdXQuanNwXCIgY2xhc3M9aGlkZGVuPlxuIjsKLQkJCQkJCXByaW50ICI8L2lmcmFtZT5cbiI7Ci0JCQkJCX0KLQkJCQkJcHJpbnQgIjwvYm9keT5cbiI7Ci0JCQkJCXByaW50ICI8L2h0bWw+XG4iOwotCQkJCX0KKwkJCQloZWFkZXIoIkxvY2F0aW9uOiAiIC4gQkFTRVVSTCAuIFNDUklQVCk7CiAJCQkJZXhpdDsKIAkJCX0KLQkJCWhlYWRlcigiTG9jYXRpb246ICIgLiBIT01FVVJMKTsKKwkJCSRhdXRoRnVuY3NbJGF1dGh0eXBlXVsndW5hdXRoJ10oJ2hlYWRlcnMnKTsKKwkJCXNldGNvb2tpZSgiVkNMQVVUSCIsICIiLCB0aW1lKCkgLSAxMCwgIi8iLCBDT09LSUVET01BSU4pOworCQkJJGF1dGhlZCA9IDA7CisJCQlvYl9zdGFydCgpOworCQkJcHJpbnRIVE1MSGVhZGVyKCk7CisJCQkkYXV0aEZ1bmNzWyRhdXRodHlwZV1bJ3VuYXV0aCddKCdjb250ZW50Jyk7CisJCQlwcmludEhUTUxGb290ZXIoKTsKIAkJCXN0b3BTZXNzaW9uKCk7CisJCQlvYl9lbmRfZmx1c2goKTsKIAkJCWRiRGlzY29ubmVjdCgpOwogCQkJZXhpdDsKIAl9CkBAIC0xMzIzMyw4ICsxMzE5Nyw4IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBwcmludEhUTUxIZWFkZXIoKSB7Ci0JZ2xvYmFsICRtb2RlLCAkdXNlciwgJGF1dGhlZCwgJG9sZG1vZGUsICRIVE1MaGVhZGVyLCAkY29udGRhdGE7Ci0JZ2xvYmFsICRwcmludGVkSFRNTGhlYWRlciwgJGRvY3JlYWRlcnMsICRub0hUTUx3cmFwcGVycywgJGFjdGlvbnM7CisJZ2xvYmFsICRtb2RlLCAkdXNlciwgJGF1dGhlZCwgJEhUTUxoZWFkZXIsICRjb250ZGF0YTsKKwlnbG9iYWwgJHByaW50ZWRIVE1MaGVhZGVyLCAkbm9IVE1Md3JhcHBlcnM7CiAJaWYoJHByaW50ZWRIVE1MaGVhZGVyKQogCQlyZXR1cm47CiAJJHJlZnJlc2ggPSAwOwpAQCAtMTM4MTAsMjMgKzEzNzc0LDYgQEAKIAkJCSAgICAgICAgICAgICAgICAgICAgICAnZGlqaXQuZm9ybS5WYWxpZGF0aW9uVGV4dEJveCcsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmxheW91dC5UYWJDb250YWluZXInKTsKIAkJCWJyZWFrOwotCQkjIFRPRE8gY2xlYW4gdXAKLQkJLypjYXNlICdzZXJ2ZXJQcm9maWxlcyc6Ci0JCQkkZmlsZW5hbWUgPSAndmNsU2VydmVyUHJvZmlsZXMuanMnOwotCQkJJGRvam9SZXF1aXJlcyA9IGFycmF5KCdkb2pvLnBhcnNlcicsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LkRpYWxvZycsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmZvcm0uQnV0dG9uJywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAnZGlqaXQuZm9ybS5GaWx0ZXJpbmdTZWxlY3QnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICdkaWppdC5mb3JtLlNlbGVjdCcsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmZvcm0uVGV4dEJveCcsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmZvcm0uVmFsaWRhdGlvblRleHRCb3gnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICdkaWppdC5mb3JtLkNoZWNrQm94JywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAnZGlqaXQuZm9ybS5UZXh0YXJlYScsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmxheW91dC5Db250ZW50UGFuZScsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rpaml0LmxheW91dC5UYWJDb250YWluZXInLAotCQkJICAgICAgICAgICAgICAgICAgICAgICdkb2pveC5zdHJpbmcuc3ByaW50ZicsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJ2Rvam8uZGF0YS5JdGVtRmlsZVdyaXRlU3RvcmUnKTsKLQkJCWJyZWFrOyovCiAJCS8qY2FzZSAndGVzdERvam9SRVNUJzoKIAkJCSRmaWxlbmFtZSA9ICcnOwogCQkJJGRvam9SZXF1aXJlcyA9IGFycmF5KCdkb2pvLnBhcnNlcicsCkBAIC0xMzg3OCw4ICsxMzgyNSw2IEBACiAJCQkkcnQgLj0gIiAgICAgIHRlc3RKUygpO1xuIjsKIAkJCSRydCAuPSAiICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSB1cGRhdGVNb3VzZVhZO1xuIjsKIAkJCSRydCAuPSAiICAgICAgc2hvd1NjcmlwdE9ubHkoKTtcbiI7Ci0JCQkvKiRjb250ID0gYWRkQ29udGludWF0aW9uc0VudHJ5KCdBSnNlcnZlclByb2ZpbGVTdG9yZURhdGEnLCBhcnJheSgpLCAxMjAsIDEsIDApOwotCQkJJHJ0IC49ICIgICBwb3B1bGF0ZVByb2ZpbGVTdG9yZSgnJGNvbnQnKTtcbiI7Ki8KIAkJCSRydCAuPSAiICAgfSk7XG4iOwogCQkJaWYoJHJlZnJlc2gpCiAJCQkJJHJ0IC49ICIgICByZWZyZXNoX3RpbWVyID0gc2V0VGltZW91dChyZXNSZWZyZXNoLCAxMjAwMCk7XG4iOwpAQCAtMTQzNjMsNyArMTQzMDgsNyBAQAogCQlzZXRjb29raWUoIlZDTExPQ0FMRSIsICRfQ09PS0lFWydWQ0xMT0NBTEUnXSwgKHRpbWUoKSArICg4NjQwMCAqIDMxKSksICIvIiwgQ09PS0lFRE9NQUlOKTsKIAkJJGxvY2FsZSA9ICRfQ09PS0lFWydWQ0xMT0NBTEUnXTsKIAl9Ci0JCisKIAkjcHV0ZW52KCdMQ19BTEw9JyAuICRsb2NhbGUpOwogCSMgdXNlIFVURjggZW5jb2RpbmcgZm9yIGFueSBsb2NhbGVzIG90aGVyIHRoYW4gRW5nbGlzaCAod2UgbWF5IGp1c3QgYmUgYWJsZQogCSMgICB0byBhbHdheXMgdXNlIFVURjgpCmRpZmYgLS1naXQgYS93ZWIvLmh0LWluYy92bS5waHAgYi93ZWIvLmh0LWluYy92bS5waHAKaW5kZXggNTM3NWNkZi4uZGYxMGI0MyAxMDA2NDQKLS0tIGEvd2ViLy5odC1pbmMvdm0ucGhwCisrKyBiL3dlYi8uaHQtaW5jL3ZtLnBocApAQCAtNDcsNyArNDcsNyBAQAogCXByaW50ICI8L2Rpdj5cbiI7CiAKIAkkbmV3bXNnID0gIlRvIGNyZWF0ZSBhIG5ldyBWaXJ0dWFsIEhvc3QsIGNoYW5nZSB0aGUgc3RhdGUgb2YgYSBjb21wdXRlciB0bzxicj5cbiIKLQkgICAgICAgIC4gIid2bWhvc3RpbnVzZScgdW5kZXIgTWFuYWdlIENvbXB1dGVycy0mZ3Q7Q29tcHV0ZXIgVXRpbGl0aWVzLjxicj48YnI+XG4iOworCSAgICAgICAgLiAiJ3ZtaG9zdGludXNlJyB1bmRlciBNYW5hZ2UgQ29tcHV0ZXJzLSZndDtFZGl0IENvbXB1dGVyIFByb2ZpbGVzLjxicj48YnI+XG4iOwogCSR2bWhvc3RzID0gZ2V0Vk1Ib3N0RGF0YSgpOwogCSRyZXNvdXJjZXMgPSBnZXRVc2VyUmVzb3VyY2VzKGFycmF5KCJjb21wdXRlckFkbWluIiksIGFycmF5KCJhZG1pbmlzdGVyIikpOwogCWZvcmVhY2goJHZtaG9zdHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKQEAgLTM4MCw3ICszODAsNyBAQAogCSRjdXJydm1zID0gYXJyYXkoKTsKIAkkbm9hY2Nlc3MgPSBhcnJheSgpOwogCSRmcmVldm1zID0gYXJyYXkoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93Wyd2bWhvc3RpZCddID09ICR2bWhvc3RpZCkgewogCQkJJGlkc1skcm93WydpZCddXSA9ICRyb3dbJ2hvc3RuYW1lJ107CiAJCQlpZihhcnJheV9rZXlfZXhpc3RzKCRyb3dbJ2lkJ10sICRjb21wdXRlcnMpKQpAQCAtNDIzLDcgKzQyMyw3IEBACiAJCSAgICAgICAuICAgICAgICJycS5sYXN0c3RhdGVpZCA9IDE4KSBBTkQgIgogCQkgICAgICAgLiAgICAgICAicnEuc3RhcnQgPiBOT1coKSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRtb3Zldm1zW10gPSBhcnJheSgnaWQnID0+ICRyb3dbJ2lkJ10sCiAJCQkgICAgICAgICAgICAgICAgICd0aW1lJyA9PiBzdHJ0b2xvd2VyKCRyb3dbJ3N0YXJ0J10pIC4gJyAnIC4gZGF0ZSgnVCcpLAogCQkJICAgICAgICAgICAgICAgICAnaG9zdG5hbWUnID0+ICRjdXJydm1zWyRyb3dbJ2NvbXB1dGVyaWQnXV1bJ25hbWUnXSk7CkBAIC00MzcsOSArNDM3LDcgQEAKIAkkY3VycnZtcyA9IGFycmF5X21lcmdlKCRjdXJydm1zKTsKIAkkbm9hY2Nlc3MgPSBhcnJheV9tZXJnZSgkbm9hY2Nlc3MpOwogCSRmcmVldm1zID0gYXJyYXlfbWVyZ2UoJGZyZWV2bXMpOwotCSRjb250ID0gYWRkQ29udGludWF0aW9uc0VudHJ5KCdBSmNoYW5nZVZNcHJvZmlsZScsIGFycmF5KCksIDM2MDAsIDEsIDApOwogCSRhcnIgPSBhcnJheSgncHJvZmlsZScgPT4gJGRhdGFbJHZtaG9zdGlkXVsndm1wcm9maWxlZGF0YSddLAotCSAgICAgICAgICAgICAnY29udGludWF0aW9uJyA9PiAkY29udCwKIAkgICAgICAgICAgICAgJ2FsbHZtcycgPT4gJGFsbHZtcywKIAkgICAgICAgICAgICAgJ2N1cnJ2bXMnID0+ICRjdXJydm1zLAogCSAgICAgICAgICAgICAnbm9hY2Nlc3MnID0+ICRub2FjY2VzcywKQEAgLTQ4MCw3ICs0NzgsNyBAQAogCQkkcXVlcnkgLj0gIiBBTkQgdmguaWQgPSAkaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSRyZXQgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCSRyZXRbJHJvd1snaWQnXV0gPSAkcm93OwogCQlmb3JlYWNoKCRwcm9maWxlc1skcm93Wyd2bXByb2ZpbGVpZCddXSBBUyAka2V5ID0+ICR2YWx1ZSkgewogCQkJaWYoaXNfbnVsbCgkdmFsdWUpKQpAQCAtNTE2LDYgKzUxNCwxMCBAQAogCSRmYWlscyA9IGFycmF5KCk7CiAKIAkkdm1saXN0aWRzID0gcHJvY2Vzc0lucHV0VmFyKCdsaXN0aWRzJywgQVJHX1NUUklORyk7CisJaWYoISBwcmVnX21hdGNoKCcvXihcZCspKCxcZCspKiQvJywgJHZtbGlzdGlkcykpIHsKKwkJc2VuZEpTT04oYXJyYXkoJ2ZhaWxlZCcgPT4gJ2ludmFsaWRkYXRhJykpOworCQlyZXR1cm47CisJfQogCSR2bWlkcyA9IGV4cGxvZGUoJywnLCAkdm1saXN0aWRzKTsKIAogCSMgZ2V0IGRhdGEgYWJvdXQgc3VibWl0dGVkIHZtcyB0byBhZGQKQEAgLTUyNCw3ICs1MjYsNyBAQAogCSAgICAgICAuICJXSEVSRSBpZCBpbiAoJHZtbGlzdGlkcykiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCSR2bWRhdGEgPSBhcnJheSgpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCWlmKCEgYXJyYXlfa2V5X2V4aXN0cygkcm93WydpZCddLCAkcmVzb3VyY2VzWydjb21wdXRlciddKSkgewogCQkJJGZhaWxzW10gPSBhcnJheSgnaWQnID0+ICRyb3dbJ2lkJ10sICduYW1lJyA9PiAkcm93Wydob3N0bmFtZSddLCAncmVhc29uJyA9PiAnbm9hY2Nlc3MnKTsKIAkJCXVuc2V0X2J5X3ZhbCgkcm93WydpZCddLCAkdm1pZHMpOwpAQCAtNTM3LDcgKzUzOSw3IEBACiAJJHF1ZXJ5ID0gIlNFTEVDVCBpZCBGUk9NIHZtaG9zdCI7CiAJJHZtaG9zdHMgPSBhcnJheSgpOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJJHZtaG9zdHNbJHJvd1snaWQnXV0gPSAxOwogCiAJIyBjaGVjayB0byBzZWUgaWYgdGhlcmUgYW55IHN1Ym1pdHRlZCB2bXMgaGF2ZSBhIGhvc3RpZCBvZiBhbiBleGlzdGluZyB2bSBob3N0CkBAIC01ODMsNiArNTg1LDEwIEBACiAKIAkkZmFpbHMgPSBhcnJheSgpOwogCSR2bWxpc3RpZHMgPSBwcm9jZXNzSW5wdXRWYXIoJ2xpc3RpZHMnLCBBUkdfU1RSSU5HKTsKKwlpZighIHByZWdfbWF0Y2goJy9eKFxkKykoLFxkKykqJC8nLCAkdm1saXN0aWRzKSkgeworCQlzZW5kSlNPTihhcnJheSgnZmFpbGVkJyA9PiAnaW52YWxpZGRhdGEnKSk7CisJCXJldHVybjsKKwl9CiAJJHZtaWRzID0gZXhwbG9kZSgnLCcsICR2bWxpc3RpZHMpOwogCSRyZW1zID0gYXJyYXkoKTsKIAkkY2hlY2tzID0gYXJyYXkoKTsKQEAgLTYxNiw3ICs2MjIsNyBAQAogCQkgICAgICAgLiAiT1JERVIgQlkgZW5kIERFU0MgIgogCQkgICAgICAgLiAiTElNSVQgMSI7CiAJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCQlpZigkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCQlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJCSRjaGVja3NbXSA9IGFycmF5KCdpZCcgPT4gJGNvbXBpZCwKIAkJCSAgICAgICAgICAgICAgICAgICdob3N0bmFtZScgPT4gJGNvbXBkYXRhWyRjb21waWRdWydob3N0bmFtZSddLAogCQkJICAgICAgICAgICAgICAgICAgJ2VuZCcgPT4gc3RydG9sb3dlcigkcm93WydlbmQnXSkgLiAnICcgLiBkYXRlKCdUJyksCkBAIC03MTgsNiArNzI0LDEwIEBACiAKIAkkZmFpbHMgPSBhcnJheSgpOwogCSRyZXF1ZXN0aWRzID0gcHJvY2Vzc0lucHV0VmFyKCdsaXN0aWRzJywgQVJHX1NUUklORyk7CisJaWYoISBwcmVnX21hdGNoKCcvXihcZCspKCxcZCspKiQvJywgJHJlcXVlc3RpZHMpKSB7CisJCXNlbmRKU09OKGFycmF5KCdmYWlsZWQnID0+ICdpbnZhbGlkZGF0YScpKTsKKwkJcmV0dXJuOworCX0KIAkkbm93ID0gdGltZSgpOwogCSRtc2cgPSAnRkFJTCc7CiAJZm9yZWFjaChleHBsb2RlKCcsJywgJHJlcXVlc3RpZHMpIEFTICRyZXFpZCkgewpAQCAtODQwLDExICs4NTAsMTEgQEAKIAllbHNlIHsKIAkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKIAkJCSRuZXd2YWx1ZSA9IHN0cmlwc2xhc2hlcygkbmV3dmFsdWUpOwotCQkkbmV3dmFsdWUyID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuZXd2YWx1ZSk7CisJCSRuZXd2YWx1ZTIgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3dmFsdWUpOwogCQkkbmV3dmFsdWUyID0gIickbmV3dmFsdWUyJyI7CiAJfQogCi0JJGl0ZW0gPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGl0ZW0pOworCSRpdGVtID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJGl0ZW0pOwogCSRwcm9maWxlID0gZ2V0Vk1Qcm9maWxlcygkcHJvZmlsZWlkKTsKIAlpZigkaXRlbSA9PSAncGFzc3dvcmQnKSB7CiAJCSRwd2RsZW4gPSBzdHJsZW4oJG5ld3ZhbHVlKTsKQEAgLTg3OCw3ICs4ODgsNyBAQAogCQkJICAgICAgIC4gIldIRVJFIGNyeXB0a2V5aWQgPSAkY3J5cHRrZXlpZCBBTkQgIgogCQkJICAgICAgIC4gICAgICAgInNlY3JldGlkID0gJHNlY3JldGlkIjsKIAkJCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQkJCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkgeworCQkJaWYoISAoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSkgewogCQkJCSMgZ2VuZXJhdGUgYSBuZXcgc2VjcmV0CiAJCQkJJG5ld3NlY3JldGlkID0gZ2V0U2VjcmV0S2V5SUQoJ3ZtcHJvZmlsZScsICdzZWNyZXRpZCcsIDApOwogCQkJCSRkZWxpZHMgPSBhcnJheSgkc2VjcmV0aWQpOwpAQCAtODk1LDcgKzkwNSw3IEBACiAJCQkJICAgICAgIC4gIldIRVJFIGNzLnNlY3JldGlkID0gJHNlY3JldGlkIEFORCAiCiAJCQkJICAgICAgIC4gICAgICAgImNrLmhvc3R0eXBlID0gJ21hbmFnZW1lbnRub2RlJyI7CiAJCQkJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCQkJCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKQorCQkJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkKIAkJCQkJJHNlY3JldGlkc2V0WyRyb3dbJ21uaWQnXV1bJG5ld3NlY3JldGlkXSA9IDE7CiAJCQkJJHZhbHVlcyA9IGdldE1OY3J5cHRrZXlVcGRhdGVzKCRzZWNyZXRpZHNldCwgJGNyeXB0a2V5aWQpOwogCQkJCWFkZENyeXB0U2VjcmV0S2V5VXBkYXRlcygkdmFsdWVzKTsKQEAgLTk0NCwxMyArOTU0LDEyIEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gQUpuZXdQcm9maWxlKCkgewogCSRuZXdwcm9maWxlID0gcHJvY2Vzc0lucHV0VmFyKCduZXduYW1lJywgQVJHX1NUUklORyk7Ci0JaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgeworCWlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCiAJCSRuZXdwcm9maWxlID0gc3RyaXBzbGFzaGVzKCRuZXdwcm9maWxlKTsKLQkJJG5ld3Byb2ZpbGUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld3Byb2ZpbGUpOwotCX0KKwkkbmV3cHJvZmlsZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuZXdwcm9maWxlKTsKIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gdm1wcm9maWxlIFdIRVJFIHByb2ZpbGVuYW1lID0gJyRuZXdwcm9maWxlJyI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZigkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJc2VuZEpTT04oYXJyYXkoJ2ZhaWxlZCcgPT4gJ2V4aXN0cycpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTk5NCw3ICsxMDAzLDcgQEAKIAkgICAgICAgLiAgICAgICAicy5uYW1lIElOICgndm1ob3N0aW51c2UnLCAndG92bWhvc3RpbnVzZScpIEFORCAiIAogCSAgICAgICAuICAgICAgICJ2aC52bXByb2ZpbGVpZCA9ICRwcm9maWxlaWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCXNlbmRKU09OKGFycmF5KCdmYWlsZWQnID0+ICdpbnVzZScpKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL3dlYi8uaHQtaW5jL3htbHJwY1dyYXBwZXJzLnBocCBiL3dlYi8uaHQtaW5jL3htbHJwY1dyYXBwZXJzLnBocAppbmRleCAwZWM1Yzc0Li43NTAwMDBlIDEwMDY0NAotLS0gYS93ZWIvLmh0LWluYy94bWxycGNXcmFwcGVycy5waHAKKysrIGIvd2ViLy5odC1pbmMveG1scnBjV3JhcHBlcnMucGhwCkBAIC0xOSw5ICsxOSw5IEBACiAvKioKICAqIFxmaWxlCiAgKiBUaGUgZnVuY3Rpb25zIGxpc3RlZCBoZXJlIGFyZSBmb3IgbWFraW5nIFZDTCByZXF1ZXN0cyBmcm9tIG90aGVyIGFwcGxpY2F0aW9ucy4KLSAqIFRoZXkgYXJlIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgWE1MIFJQQyBzcGVjIGRlZmluZWQgYXQgCisgKiBUaGV5IGFyZSBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIFhNTCBSUEMgc3BlYyBkZWZpbmVkIGF0CiAgKiBodHRwOi8vd3d3LnhtbHJwYy5jb20vIFxuCi0gKiBUaGVyZSBpcyBvbmUgZnVuY3Rpb24gY2FsbGVkIFxiIFhNTFJQQ3Rlc3QoKSB0aGF0IGNhbiBiZSB1c2VkIGR1cmluZyAKKyAqIFRoZXJlIGlzIG9uZSBmdW5jdGlvbiBjYWxsZWQgXGIgWE1MUlBDdGVzdCgpIHRoYXQgY2FuIGJlIHVzZWQgZHVyaW5nCiAgKiBpbml0aWFsIGRldmVsb3BtZW50IHRvIGdldCBzdGFydGVkIHdpdGhvdXQgYWN0dWFsbHkgbWFraW5nIGEgcmVxdWVzdC5cbgogICogXG4KICAqIFRoZSBVUkwgeW91IHdpbGwgdXNlIHRvIHN1Ym1pdCBSUEMgY2FsbHMgaXMgdGhlIFVSTCBmb3IgeW91ciBWQ0wgc2l0ZQpAQCAtMTcxLDcgKzE3MSw3IEBACiAJJGxlbmd0aCA9IHByb2Nlc3NJbnB1dERhdGEoJGxlbmd0aCwgQVJHX05VTUVSSUMpOwogCSMkZm9ydXNlciA9IHByb2Nlc3NJbnB1dERhdGEoJGZvcnVzZXIsIEFSR19TVFJJTkcsIDEpOwogCi0JLy8gbWFrZSBzdXJlIHVzZXIgZGlkbid0IHN1Ym1pdCBhIHJlcXVlc3QgZm9yIGFuIGltYWdlIGhlIAorCS8vIG1ha2Ugc3VyZSB1c2VyIGRpZG4ndCBzdWJtaXQgYSByZXF1ZXN0IGZvciBhbiBpbWFnZSBoZQogCS8vIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8KIAkkcmVzb3VyY2VzID0gZ2V0VXNlclJlc291cmNlcyhhcnJheSgiaW1hZ2VBZG1pbiIsICJpbWFnZUNoZWNrT3V0IikpOwogCSR2YWxpZEltYWdlaWRzID0gYXJyYXlfa2V5cygkcmVzb3VyY2VzWydpbWFnZSddKTsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCSRyZXZpc2lvbmlkID0gZ2V0UHJvZHVjdGlvblJldmlzaW9uaWQoJGltYWdlaWQpOwogCSRyYyA9IGlzQXZhaWxhYmxlKCRpbWFnZXMsICRpbWFnZWlkLCAkcmV2aXNpb25pZCwgJHN0YXJ0LCAkZW5kLCAxKTsKIAlpZigkcmMgPCAxKSB7Ci0JCWFkZExvZ0VudHJ5KCRub3dmdXR1cmUsIHVuaXhUb0RhdGV0aW1lKCRzdGFydCksIAorCQlhZGRMb2dFbnRyeSgkbm93ZnV0dXJlLCB1bml4VG9EYXRldGltZSgkc3RhcnQpLAogCQkgICAgICAgICAgICB1bml4VG9EYXRldGltZSgkZW5kKSwgMCwgJGltYWdlaWQpOwogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ25vdGF2YWlsYWJsZScpOwogCX0KQEAgLTM1NCw3ICszNTQsNyBAQAogCSRyZXZpc2lvbmlkID0gZ2V0UHJvZHVjdGlvblJldmlzaW9uaWQoJGltYWdlaWQpOwogCSRyYyA9IGlzQXZhaWxhYmxlKCRpbWFnZXMsICRpbWFnZWlkLCAkcmV2aXNpb25pZCwgJHN0YXJ0LCAkZW5kLCAxKTsKIAlpZigkcmMgPCAxKSB7Ci0JCWFkZExvZ0VudHJ5KCRub3dmdXR1cmUsIHVuaXhUb0RhdGV0aW1lKCRzdGFydCksIAorCQlhZGRMb2dFbnRyeSgkbm93ZnV0dXJlLCB1bml4VG9EYXRldGltZSgkc3RhcnQpLAogCQkgICAgICAgICAgICB1bml4VG9EYXRldGltZSgkZW5kKSwgMCwgJGltYWdlaWQpOwogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ25vdGF2YWlsYWJsZScpOwogCX0KQEAgLTM4Nyw3ICszODcsNyBAQAogLy8vIFxwYXJhbSAkZm9ydXNlciAtIChvcHRpb25hbCkgbG9naW4gdG8gYmUgdXNlZCB3aGVuIHNldHRpbmcgdXAgdGhlIGFjY291bnQKIC8vLyBvbiB0aGUgcmVzZXJ2ZWQgbWFjaGluZSAtIENVUlJFTlRMWSwgVEhJUyBJUyBVTlNVUFBPUlRFRAogLy8vIFxwYXJhbSAkbmFtZSAtIChvcHRpb25hbCkgbmFtZSBmb3IgcmVzZXJ2YXRpb24KLS8vLyBccGFyYW0gJHVzZXJkYXRhIC0gKG9wdGlvbmFsKSB0ZXh0IHRoYXQgd2lsbCBiZSBwbGFjZWQgaW4gCisvLy8gXHBhcmFtICR1c2VyZGF0YSAtIChvcHRpb25hbCkgdGV4dCB0aGF0IHdpbGwgYmUgcGxhY2VkIGluCiAvLy8gL3Jvb3QvLnZjbGNvbnRyb2wvcG9zdF9yZXNlcnZlX3VzZXJkYXRhIG9uIHRoZSByZXNlcnZlZCBub2RlCiAvLy8KIC8vLyBccmV0dXJuIGFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGluZGV4IG5hbWVkICdcYiBzdGF0dXMnIHdoaWNoIHdpbGwgaGF2ZQpAQCAtNDMwLDcgKzQzMCw3IEBACiAJCQkkYWRtaW5ncm91cCA9IHN0cmlwc2xhc2hlcygkYWRtaW5ncm91cCk7CiAJCWlmKHByZWdfbWF0Y2goJy9ALycsICRhZG1pbmdyb3VwKSkgewogCQkJJHRtcCA9IGV4cGxvZGUoJ0AnLCAkYWRtaW5ncm91cCk7Ci0JCQkkZXNjYWRtaW5ncm91cCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdG1wWzBdKTsKKwkJCSRlc2NhZG1pbmdyb3VwID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHRtcFswXSk7CiAJCQkkYWZmaWxpZCA9IGdldEFmZmlsaWF0aW9uSUQoJHRtcFsxXSk7CiAJCQlpZihpc19udWxsKCRhZmZpbGlkKSkgewogCQkJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLApAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQl9CiAJCX0KIAkJZWxzZSB7Ci0JCQkkZXNjYWRtaW5ncm91cCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkYWRtaW5ncm91cCk7CisJCQkkZXNjYWRtaW5ncm91cCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRhZG1pbmdyb3VwKTsKIAkJCSRhZmZpbGlkID0gREVGQVVMVF9BRkZJTElEOwogCQl9CiAJCSRhZG1pbmdyb3VwaWQgPSBnZXRVc2VyR3JvdXBJRCgkZXNjYWRtaW5ncm91cCwgJGFmZmlsaWQsIDEpOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQkkbG9naW5ncm91cCA9IHN0cmlwc2xhc2hlcygkbG9naW5ncm91cCk7CiAJCWlmKHByZWdfbWF0Y2goJy9ALycsICRsb2dpbmdyb3VwKSkgewogCQkJJHRtcCA9IGV4cGxvZGUoJ0AnLCAkbG9naW5ncm91cCk7Ci0JCQkkZXNjbG9naW5ncm91cCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdG1wWzBdKTsKKwkJCSRlc2Nsb2dpbmdyb3VwID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJHRtcFswXSk7CiAJCQkkYWZmaWxpZCA9IGdldEFmZmlsaWF0aW9uSUQoJHRtcFsxXSk7CiAJCQlpZihpc19udWxsKCRhZmZpbGlkKSkgewogCQkJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLApAQCAtNDY2LDcgKzQ2Niw3IEBACiAJCQl9CiAJCX0KIAkJZWxzZSB7Ci0JCQkkZXNjbG9naW5ncm91cCA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkbG9naW5ncm91cCk7CisJCQkkZXNjbG9naW5ncm91cCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRsb2dpbmdyb3VwKTsKIAkJCSRhZmZpbGlkID0gREVGQVVMVF9BRkZJTElEOwogCQl9CiAJCSRsb2dpbmdyb3VwaWQgPSBnZXRVc2VyR3JvdXBJRCgkZXNjbG9naW5ncm91cCwgJGFmZmlsaWQsIDEpOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAuICJzcGFjZXMsIGRhc2hlcygtKSwgdW5kZXJzY29yZXMoXyksIGFuZCBwZXJpb2RzKC4pICIKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIC4gImFuZCBiZSB1cCB0byAyNTUgY2hhcmFjdGVycyBsb25nIik7CiAJfQotCSRuYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKKwkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKIAogCSMgdmFsaWRhdGUgJHN0YXJ0CiAJaWYoJHN0YXJ0ICE9ICdub3cnICYmICEgaXNfbnVtZXJpYygkc3RhcnQpKSB7CkBAIC01NjIsNyArNTYyLDcgQEAKIAkkcmMgPSBpc0F2YWlsYWJsZSgkaW1hZ2VzLCAkaW1hZ2VpZCwgJHJldmlzaW9uaWQsICRzdGFydCwgJGVuZCwKIAkgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLCAkaXBhZGRyLCAkbWFjYWRkcik7CiAJaWYoJHJjIDwgMSkgewotCQlhZGRMb2dFbnRyeSgkbm93ZnV0dXJlLCB1bml4VG9EYXRldGltZSgkc3RhcnQpLCAKKwkJYWRkTG9nRW50cnkoJG5vd2Z1dHVyZSwgdW5peFRvRGF0ZXRpbWUoJHN0YXJ0KSwKIAkJICAgICAgICAgICAgdW5peFRvRGF0ZXRpbWUoJGVuZCksIDAsICRpbWFnZWlkKTsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdub3RhdmFpbGFibGUnKTsKIAl9CkBAIC01NzQsNyArNTc0LDcgQEAKIAlpZigkdXNlcmRhdGEgIT0gJycpIHsKIAkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKIAkJCSR1c2VyZGF0YSA9IHN0cmlwc2xhc2hlcygkdXNlcmRhdGEpOwotCQkkZXNjX3VzZXJkYXRhID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1c2VyZGF0YSk7CisJCSRlc2NfdXNlcmRhdGEgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkdXNlcmRhdGEpOwogCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gdmFyaWFibGUgIgogCQkgICAgICAgLiAgICAgICAgIihuYW1lLCAiCiAJCSAgICAgICAuICAgICAgICAic2VyaWFsaXphdGlvbiwgIgpAQCAtODUxLDIzICs4NTEsMjMgQEAKIAkJJHBvcnRkYXRhID0gYXJyYXkoKTsKIAkJZm9yZWFjaCgkY29ubmVjdE1ldGhvZHMgYXMgJGtleSA9PiAkY20pIHsKIAkJCSRjb25uZWN0dGV4dCA9ICRjbVsiY29ubmVjdHRleHQiXTsKLQkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiLyN1c2VyaWQjLyIsICR0aGlzdXNlciwgJGNvbm5lY3R0ZXh0KTsgCi0JCQkkY29ubmVjdHRleHQgPSBwcmVnX3JlcGxhY2UoIi8jcGFzc3dvcmQjLyIsICRwYXNzd2QsICRjb25uZWN0dGV4dCk7IAotCQkJJGNvbm5lY3R0ZXh0ID0gcHJlZ19yZXBsYWNlKCIvI2Nvbm5lY3RJUCMvIiwgJHNlcnZlcklQLCAkY29ubmVjdHRleHQpOyAKKwkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiLyN1c2VyaWQjLyIsICR0aGlzdXNlciwgJGNvbm5lY3R0ZXh0KTsKKwkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiLyNwYXNzd29yZCMvIiwgJHBhc3N3ZCwgJGNvbm5lY3R0ZXh0KTsKKwkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiLyNjb25uZWN0SVAjLyIsICRzZXJ2ZXJJUCwgJGNvbm5lY3R0ZXh0KTsKIAkJCWZvcmVhY2goJGNtWydwb3J0cyddIGFzICRwb3J0KSB7CiAJCQkJaWYoISBlbXB0eSgkbmF0cG9ydHMpICYmIGFycmF5X2tleV9leGlzdHMoJHBvcnRbJ2tleSddLCAkbmF0cG9ydHNbJGtleV0pKSB7Ci0JCQkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiL3skcG9ydFsna2V5J119LyIsICRuYXRwb3J0c1ska2V5XVskcG9ydFsna2V5J11dWydwdWJsaWNwb3J0J10sICRjb25uZWN0dGV4dCk7IAorCQkJCQkkY29ubmVjdHRleHQgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkbmF0cG9ydHNbJGtleV1bJHBvcnRbJ2tleSddXVsncHVibGljcG9ydCddLCAkY29ubmVjdHRleHQpOwogCQkJCQkkY29ubmVjdE1ldGhvZHNbJGtleV1bJ2Nvbm5lY3Rwb3J0cyddW10gPSAieyRwb3J0Wydwcm90b2NvbCddfTp7JHBvcnRbJ3BvcnQnXX06eyRuYXRwb3J0c1ska2V5XVskcG9ydFsna2V5J11dWydwdWJsaWNwb3J0J119IjsKIAkJCQl9CiAJCQkJZWxzZSB7CiAJCQkJCWlmKChwcmVnX21hdGNoKCcvcmVtb3RlIGRlc2t0b3AvaScsICRjbVsnZGVzY3JpcHRpb24nXSkgfHwKLQkJCQkJICAgcHJlZ19tYXRjaCgnL1JEUC9pJywgJGNtWydkZXNjcmlwdGlvbiddKSkgJiYgCisJCQkJCSAgIHByZWdfbWF0Y2goJy9SRFAvaScsICRjbVsnZGVzY3JpcHRpb24nXSkpICYmCiAJCQkJCSAgICRwb3J0WydrZXknXSA9PSAnI1BvcnQtVENQLTMzODkjJykgewotCQkJCQkJJGNvbm5lY3R0ZXh0ID0gcHJlZ19yZXBsYWNlKCIveyRwb3J0WydrZXknXX0vIiwgJHVzZXJbJ3JkcHBvcnQnXSwgJGNvbm5lY3R0ZXh0KTsgCisJCQkJCQkkY29ubmVjdHRleHQgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkdXNlclsncmRwcG9ydCddLCAkY29ubmVjdHRleHQpOwogCQkJCQkJJGNvbm5lY3RNZXRob2RzWyRrZXldWydjb25uZWN0cG9ydHMnXVtdID0gInskcG9ydFsncHJvdG9jb2wnXX06eyRwb3J0Wydwb3J0J119OnskdXNlclsncmRwcG9ydCddfSI7CiAJCQkJCX0KIAkJCQkJZWxzZSB7Ci0JCQkJCQkkY29ubmVjdHRleHQgPSBwcmVnX3JlcGxhY2UoIi97JHBvcnRbJ2tleSddfS8iLCAkcG9ydFsncG9ydCddLCAkY29ubmVjdHRleHQpOyAKKwkJCQkJCSRjb25uZWN0dGV4dCA9IHByZWdfcmVwbGFjZSgiL3skcG9ydFsna2V5J119LyIsICRwb3J0Wydwb3J0J10sICRjb25uZWN0dGV4dCk7CiAJCQkJCQkkY29ubmVjdE1ldGhvZHNbJGtleV1bJ2Nvbm5lY3Rwb3J0cyddW10gPSAieyRwb3J0Wydwcm90b2NvbCddfTp7JHBvcnRbJ3BvcnQnXX06eyRwb3J0Wydwb3J0J119IjsKIAkJCQkJfQogCQkJCX0KQEAgLTg4MCw3ICs4ODAsNyBAQAogCQkkY21pZCA9ICR0bXBbMF07CiAJCWlmKGVtcHR5KCRuYXRwb3J0cykpCiAJCQlpZigocHJlZ19tYXRjaCgnL3JlbW90ZSBkZXNrdG9wL2knLCAkY29ubmVjdE1ldGhvZHNbJGNtaWRdWydkZXNjcmlwdGlvbiddKSB8fAotCQkJICAgcHJlZ19tYXRjaCgnL1JEUC9pJywgJGNvbm5lY3RNZXRob2RzWyRjbWlkXVsnZGVzY3JpcHRpb24nXSkpICYmIAorCQkJICAgcHJlZ19tYXRjaCgnL1JEUC9pJywgJGNvbm5lY3RNZXRob2RzWyRjbWlkXVsnZGVzY3JpcHRpb24nXSkpICYmCiAJCQkJJHBvcnRkYXRhWyRjbWlkXVswXVsncG9ydCddID09IDMzODkpCiAJCQkJJGNvbm5lY3Rwb3J0ID0gJHVzZXJbJ3JkcHBvcnQnXTsKIAkJCWVsc2UKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJaWYoJHRpbWVUb05leHQgPiAtMSkgewogCQkkbG9ja2VkYWxsID0gMTsKIAkJaWYoY291bnQoJHJlcXVlc3RbJ3Jlc2VydmF0aW9ucyddKSA+IDEpIHsKLQkJCSMgZ2V0IHNlbWFwaG9yZSBvbiBlYWNoIGV4aXN0aW5nIG5vZGUgaW4gY2x1c3RlciBzbyB0aGF0IG5vdGhpbmcgCisJCQkjIGdldCBzZW1hcGhvcmUgb24gZWFjaCBleGlzdGluZyBub2RlIGluIGNsdXN0ZXIgc28gdGhhdCBub3RoaW5nCiAJCQkjIGNhbiBnZXQgbW92ZWQgdG8gdGhlIG5vZGVzIGR1cmluZyB0aGlzIHByb2Nlc3MKIAkJCSRjaGVja2VuZCA9IHVuaXhUb0RhdGV0aW1lKCRlbmR0cyArIDkwMCk7CiAJCQlmb3JlYWNoKCRyZXF1ZXN0WyJyZXNlcnZhdGlvbnMiXSBhcyAkcmVzKSB7CkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogCX0KIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gcmVxdWVzdCBXSEVSRSBpZCA9ICRyZXF1ZXN0aWQiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgbXlzcWxfbnVtX3Jvd3MoJHFoKSkgeworCWlmKCEgbXlzcWxpX251bV9yb3dzKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiA1MiwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3NwZWNpZmllZCByZXF1ZXN0IGRvZXMgbm90IGV4aXN0Jyk7CkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogCQkJJG5vZGVbJ2lkJ10gPSAkaWQ7CiAJCQlhcnJheV9wdXNoKCRub2RlcywgJG5vZGUpOwogCQkJYXJyYXlfcHVzaCgkc3RhY2ssICRub2RlKTsKLQkJfSAKKwkJfQogCQl3aGlsZShjb3VudCgkc3RhY2spKSB7CiAJCQkkaXRlbSA9IGFycmF5X3NoaWZ0KCRzdGFjayk7CiAJCQkkY2hpbGRyZW4gPSBnZXRDaGlsZE5vZGVzKCRpdGVtWydpZCddKTsKQEAgLTE3NzIsMTMgKzE3NzIsMTMgQEAKIAkJaW5fYXJyYXkoIm5vZGVBZG1pbiIsICR1c2VyWyJwcml2aWxlZ2VzIl0pKSB7CiAJCWlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCiAJCQkkbm9kZU5hbWUgPSBzdHJpcHNsYXNoZXMoJG5vZGVOYW1lKTsKLQkJJG5vZGVOYW1lID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRub2RlTmFtZSk7CisJCSRub2RlTmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRub2RlTmFtZSk7CiAJCS8vIGRvZXMgYSBub2RlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3Q/CiAJCSRxdWVyeSA9ICJTRUxFQ1QgaWQgIgogCQkgICAgICAgLiAiRlJPTSBwcml2bm9kZSAiCiAJCSAgICAgICAuICJXSEVSRSBuYW1lID0gJyRub2RlTmFtZScgQU5EIHBhcmVudCA9ICRwYXJlbnROb2RlIjsKIAkJJHFoID0gZG9RdWVyeSgkcXVlcnksIDMzNSk7Ci0JCWlmKG15c3FsX251bV9yb3dzKCRxaCkpCisJCWlmKG15c3FsaV9udW1fcm93cygkcWgpKQogCQkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdzdWNjZXNzJywgJ2V4aXN0cycgPT4gVFJVRSk7CiAJCWVsc2UKIAkJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnc3VjY2VzcycsICdleGlzdHMnID0+IEZBTFNFKTsKQEAgLTE4MzYsNyArMTgzNiw3IEBACiAJCQkgICAgICAgLiAiRlJPTSBwcml2bm9kZSAiCiAJCQkgICAgICAgLiAiV0hFUkUgbmFtZSA9ICckbm9kZU5hbWUnIEFORCBwYXJlbnQgPSAkcGFyZW50Tm9kZSI7CiAJCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JCQlpZihteXNxbF9udW1fcm93cygkcWgpKSB7CisJCQlpZihteXNxbGlfbnVtX3Jvd3MoJHFoKSkgewogCQkJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiA4MiwKIAkJCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAnQSBub2RlIG9mIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyB1bmRlciAnIC4gJG5vZGVJbmZvWyduYW1lJ10pOwpAQCAtMTg0Nyw3ICsxODQ3LDcgQEAKIAkJCSAgICAgICAuICAgICAgICAiKCRwYXJlbnROb2RlLCAnJG5vZGVOYW1lJykiOwogCQkJZG9RdWVyeSgkcXVlcnkpOwogCQkJJHFoID0gZG9RdWVyeSgiU0VMRUNUIExBU1RfSU5TRVJUX0lEKCkgRlJPTSBwcml2bm9kZSIsIDEwMSk7Ci0JCQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkgeworCQkJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcWgpKSB7CiAJCQkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCQkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDg1LAogCQkJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICdDb3VsZCBub3QgYWRkIG5vZGUgdG8gZGF0YWJhc2UnKTsKQEAgLTE5NjIsNyArMTk2Miw3IEBACiAKIAkkcHJpdmlsZWdlcyA9IGFycmF5KCk7CiAJJG5vZGVQcml2aWxlZ2VzID0gZ2V0Tm9kZVByaXZpbGVnZXMoJG5vZGVpZCwgJ3VzZXJncm91cHMnKTsKLQkkY2FzY2FkZWROb2RlUHJpdmlsZWdlcyA9IGdldE5vZGVDYXNjYWRlUHJpdmlsZWdlcygkbm9kZWlkLCAndXNlcmdyb3VwcycpOyAKKwkkY2FzY2FkZWROb2RlUHJpdmlsZWdlcyA9IGdldE5vZGVDYXNjYWRlUHJpdmlsZWdlcygkbm9kZWlkLCAndXNlcmdyb3VwcycpOwogCSRjbmdwID0gJGNhc2NhZGVkTm9kZVByaXZpbGVnZXNbJ3VzZXJncm91cHMnXTsKIAkkbmdwID0gJG5vZGVQcml2aWxlZ2VzWyd1c2VyZ3JvdXBzJ107CiAJaWYoYXJyYXlfa2V5X2V4aXN0cygkZ3JvdXBpZCwgJGNuZ3ApKSB7CkBAIC0yMTgwLDcgKzIxODAsNyBAQAogCQkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3Jlc291cmNlIGdyb3VwIGRvZXMgbm90IGV4aXN0Jyk7CiAJCX0KIAkJJG5wID0gZ2V0Tm9kZVByaXZpbGVnZXMoJG5vZGVpZCwgJ3Jlc291cmNlcycpOwotCQkkY25wID0gZ2V0Tm9kZUNhc2NhZGVQcml2aWxlZ2VzKCRub2RlaWQsICdyZXNvdXJjZXMnKTsgCisJCSRjbnAgPSBnZXROb2RlQ2FzY2FkZVByaXZpbGVnZXMoJG5vZGVpZCwgJ3Jlc291cmNlcycpOwogCQkka2V5ID0gIiR0eXBlLyRuYW1lLyRncm91cGlkIjsKIAkJaWYoaXNzZXQoJG5wWydyZXNvdXJjZXMnXVska2V5XVsnYmxvY2snXSkgfHwgISBpc3NldCgkY25wWydyZXNvdXJjZXMnXVska2V5XSkpCiAJCQkkcHJpdnMgPSBhcnJheV9rZXlzKCRucFsncmVzb3VyY2VzJ11bJGtleV0pOwpAQCAtMjM5OSw5ICsyMzk5LDkgQEAKIAkvLyBGaWx0ZXIgb3V0IGFueSBncm91cHMgdG8gd2hpY2ggdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MuCiAJJHVzZXJncm91cHMgPSBhcnJheSgpOwogCWZvcmVhY2goJGdyb3VwcyBhcyAkaWQgPT4gJGdyb3VwKSB7Ci0JCWlmKCRncm91cFsnb3duZXJpZCddID09ICR1c2VyWydpZCddIHx8IAorCQlpZigkZ3JvdXBbJ293bmVyaWQnXSA9PSAkdXNlclsnaWQnXSB8fAogCQkgICAoYXJyYXlfa2V5X2V4aXN0cygiZWRpdGdyb3VwaWQiLCAkZ3JvdXApICYmCi0JCSAgIGFycmF5X2tleV9leGlzdHMoJGdyb3VwWydlZGl0Z3JvdXBpZCddLCAkdXNlclsiZ3JvdXBzIl0pKSB8fCAKKwkJICAgYXJyYXlfa2V5X2V4aXN0cygkZ3JvdXBbJ2VkaXRncm91cGlkJ10sICR1c2VyWyJncm91cHMiXSkpIHx8CiAJCSAgIChhcnJheV9rZXlfZXhpc3RzKCRpZCwgJHVzZXJbImdyb3VwcyJdKSkpIHsKIAkJCWFycmF5X3B1c2goJHVzZXJncm91cHMsICRncm91cCk7CiAJCX0KQEAgLTI0NzAsMTMgKzI0NzAsMTMgQEAKIAkgICAgICAgLiAiTEVGVCBKT0lOIGFmZmlsaWF0aW9uIGV1Z2EgT04gKGV1Zy5hZmZpbGlhdGlvbmlkID0gZXVnYS5pZCkgIgogCSAgICAgICAuICJXSEVSRSB1Zy5pZCA9IHskcmNbJ2lkJ119IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxOCwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3VzZXIgZ3JvdXAgd2l0aCBzdWJtaXR0ZWQgbmFtZSBhbmQgYWZmaWxpYXRpb24gZG9lcyBub3QgZXhpc3QnKTsKIAl9CiAJLy8gaWYgbm90IG93bmVyIGFuZCBub3QgbWVtYmVyIG9mIG1hbmFnaW5nIGdyb3VwLCBubyBhY2Nlc3MKLQlpZigkdXNlclsnaWQnXSAhPSAkcm93Wydvd25lcmlkJ10gJiYgCisJaWYoJHVzZXJbJ2lkJ10gIT0gJHJvd1snb3duZXJpZCddICYmCiAJICAgISBhcnJheV9rZXlfZXhpc3RzKCRyb3dbJ2VkaXRncm91cGlkJ10sICR1c2VyWydncm91cHMnXSkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiA2OSwKQEAgLTI2MDcsNyArMjYwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdPd25lcj0nJywgJG5ld01hbmFnaW5nR3JvdXA9JycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdJbml0aWFsTWF4VGltZT0nJywgJG5ld1RvdGFsTWF4VGltZT0nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld01heEV4dGVuZFRpbWU9JycpIHsKLQlnbG9iYWwgJHVzZXIsICRteXNxbF9saW5rX3ZjbDsKKwlnbG9iYWwgJHVzZXIsICRteXNxbGlfbGlua192Y2w7CiAJaWYoISBpbl9hcnJheSgnZ3JvdXBBZG1pbicsICR1c2VyWydwcml2aWxlZ2VzJ10pKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gMTYsCkBAIC0yNjUwLDcgKzI2NTAsNyBAQAogCSAgICAgICAuICJGUk9NIHVzZXJncm91cCAiCiAJICAgICAgIC4gIldIRVJFIGlkID0geyRyY1snaWQnXX0iOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ2Vycm9yJywKIAkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDE4LAogCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAndXNlciBncm91cCB3aXRoIHN1Ym1pdHRlZCBuYW1lIGFuZCBhZmZpbGlhdGlvbiBkb2VzIG5vdCBleGlzdCcpOwpAQCAtMjY3NSw3ICsyNjc1LDcgQEAKIAkJCWlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCiAJCQkJJG5ld05hbWUgPSBzdHJpcHNsYXNoZXMoJG5ld05hbWUpOwogCQkJJHZhbGlkYXRlWyduYW1lJ10gPSAkbmV3TmFtZTsKLQkJCSR0bXAgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5ld05hbWUpOworCQkJJHRtcCA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuZXdOYW1lKTsKIAkJCSR1cGRhdGVzW10gPSAibmFtZSA9ICckdG1wJyI7CiAJCX0KIAkJaWYoISBlbXB0eSgkbmV3QWZmaWxpYXRpb24pKQpAQCAtMjY5NCw3ICsyNjk0LDcgQEAKIAogCWlmKCRyb3dbJ2N1c3RvbSddKSB7CiAJCWlmKCEgZW1wdHkoJG5ld093bmVyKSkgewotCQkJJG5ld293bmVyaWQgPSBnZXRVc2VybGlzdElEKG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkbmV3T3duZXIpKTsKKwkJCSRuZXdvd25lcmlkID0gZ2V0VXNlcmxpc3RJRCh2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3T3duZXIpKTsKIAkJCSR1cGRhdGVzW10gPSAib3duZXJpZCA9ICRuZXdvd25lcmlkIjsKIAkJfQogCQlpZighIGVtcHR5KCRuZXdNYW5hZ2luZ0dyb3VwKSkKQEAgLTI3MzIsNyArMjczMiw3IEBACiAvLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBYTUxSUENyZW1vdmVVc2VyR3JvdXAoJG5hbWUsICRhZmZpbGlhdGlvbikgewotCWdsb2JhbCAkdXNlciwgJG15c3FsX2xpbmtfdmNsOworCWdsb2JhbCAkdXNlciwgJG15c3FsaV9saW5rX3ZjbDsKIAlpZighIGluX2FycmF5KCdncm91cEFkbWluJywgJHVzZXJbJ3ByaXZpbGVnZXMnXSkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxNiwKQEAgLTI3NTAsNyArMjc1MCw3IEBACiAJICAgICAgIC4gIkZST00gdXNlcmdyb3VwICIKIAkgICAgICAgLiAiV0hFUkUgaWQgPSB7JHJjWydpZCddfSI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gMTgsCiAJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICd1c2VyIGdyb3VwIHdpdGggc3VibWl0dGVkIG5hbWUgYW5kIGFmZmlsaWF0aW9uIGRvZXMgbm90IGV4aXN0Jyk7CkBAIC0yNzc1LDcgKzI3NzUsNyBAQAogCSAgICAgICAuICJXSEVSRSBpZCA9IHskcmNbJ2lkJ119IjsKIAlkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkjIHZhbGlkYXRlIHNvbWV0aGluZyBkZWxldGVkCi0JaWYobXlzcWxfYWZmZWN0ZWRfcm93cygkbXlzcWxfbGlua192Y2wpID09IDApIHsKKwlpZihteXNxbGlfYWZmZWN0ZWRfcm93cygkbXlzcWxpX2xpbmtfdmNsKSA9PSAwKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gMzAsCiAJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICdmYWlsdXJlIHdoaWxlIGRlbGV0aW5nIGdyb3VwIGZyb20gZGF0YWJhc2UnKTsKQEAgLTI4NDksMTIgKzI4NDksMTIgQEAKIAkgICAgICAgLiAiRlJPTSB1c2VyZ3JvdXAgIgogCSAgICAgICAuICJXSEVSRSBpZCA9IHskcmNbJ2lkJ119IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxOCwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3VzZXIgZ3JvdXAgd2l0aCBzdWJtaXR0ZWQgbmFtZSBhbmQgYWZmaWxpYXRpb24gZG9lcyBub3QgZXhpc3QnKTsKIAl9Ci0JLy8gaWYgY3VzdG9tIGFuZCBub3Qgb3duZXIgYW5kIG5vdCBtZW1iZXIgb2YgbWFuYWdpbmcgZ3JvdXAgb3IgCisJLy8gaWYgY3VzdG9tIGFuZCBub3Qgb3duZXIgYW5kIG5vdCBtZW1iZXIgb2YgbWFuYWdpbmcgZ3JvdXAgb3IKIAkvLyAgICBjdXN0b20vY291cnNlcm9sbCBhbmQgbm8gZmVkZXJhdGVkIHVzZXIgZ3JvdXAgYWNjZXNzLCBubyBhY2Nlc3MgdG8gZGVsZXRlIGdyb3VwCiAJaWYoKCRyb3dbJ2N1c3RvbSddID09IDEgJiYgJHVzZXJbJ2lkJ10gIT0gJHJvd1snb3duZXJpZCddICYmCiAJICAgISBhcnJheV9rZXlfZXhpc3RzKCRyb3dbJ2VkaXRncm91cGlkJ10sICR1c2VyWydncm91cHMnXSkpIHx8CkBAIC0yODc1LDcgKzI4NzUsNyBAQAogCSAgICAgICAuICAgICAgICJ1LmFmZmlsaWF0aW9uaWQgPSBhLmlkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkkbWVtYmVycyA9IGFycmF5KCk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpCisJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKQogCQkkbWVtYmVyc1tdID0gJHJvd1snbWVtYmVyJ107CiAJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdzdWNjZXNzJywKIAkgICAgICAgICAgICAgJ21lbWJlcnMnID0+ICRtZW1iZXJzKTsKQEAgLTI5MjQsMTMgKzI5MjQsMTMgQEAKIAkgICAgICAgLiAiRlJPTSB1c2VyZ3JvdXAgIgogCSAgICAgICAuICJXSEVSRSBpZCA9IHskcmNbJ2lkJ119IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxOCwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3VzZXIgZ3JvdXAgd2l0aCBzdWJtaXR0ZWQgbmFtZSBhbmQgYWZmaWxpYXRpb24gZG9lcyBub3QgZXhpc3QnKTsKIAl9CiAJLy8gaWYgbm90IG93bmVyIGFuZCBub3QgbWVtYmVyIG9mIG1hbmFnaW5nIGdyb3VwLCBubyBhY2Nlc3MKLQlpZigkdXNlclsnaWQnXSAhPSAkcm93Wydvd25lcmlkJ10gJiYgCisJaWYoJHVzZXJbJ2lkJ10gIT0gJHJvd1snb3duZXJpZCddICYmCiAJICAgISBhcnJheV9rZXlfZXhpc3RzKCRyb3dbJ2VkaXRncm91cGlkJ10sICR1c2VyWydncm91cHMnXSkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAyOCwKQEAgLTI5NDIsNyArMjk0Miw3IEBACiAJCQljb250aW51ZTsKIAkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKIAkJCSRfdXNlciA9IHN0cmlwc2xhc2hlcygkX3VzZXIpOwotCQkkZXNjX3VzZXIgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJF91c2VyKTsKKwkJJGVzY191c2VyID0gdmNsX215c3FsX2VzY2FwZV9zdHJpbmcoJF91c2VyKTsKIAkJaWYodmFsaWRhdGVVc2VyaWQoJF91c2VyKSA9PSAxKQogCQkJYWRkVXNlckdyb3VwTWVtYmVyKCRlc2NfdXNlciwgJHJjWydpZCddKTsKIAkJZWxzZQpAQCAtMzAwNiwxMyArMzAwNiwxMyBAQAogCSAgICAgICAuICJGUk9NIHVzZXJncm91cCAiCiAJICAgICAgIC4gIldIRVJFIGlkID0geyRyY1snaWQnXX0iOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwotCWlmKCEgJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwlpZighICRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ2Vycm9yJywKIAkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDE4LAogCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAndXNlciBncm91cCB3aXRoIHN1Ym1pdHRlZCBuYW1lIGFuZCBhZmZpbGlhdGlvbiBkb2VzIG5vdCBleGlzdCcpOwogCX0KIAkvLyBpZiBub3Qgb3duZXIgYW5kIG5vdCBtZW1iZXIgb2YgbWFuYWdpbmcgZ3JvdXAsIG5vIGFjY2VzcwotCWlmKCR1c2VyWydpZCddICE9ICRyb3dbJ293bmVyaWQnXSAmJiAKKwlpZigkdXNlclsnaWQnXSAhPSAkcm93Wydvd25lcmlkJ10gJiYKIAkgICAhIGFycmF5X2tleV9leGlzdHMoJHJvd1snZWRpdGdyb3VwaWQnXSwgJHVzZXJbJ2dyb3VwcyddKSkgewogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ2Vycm9yJywKIAkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDI4LApAQCAtMzAyNCw3ICszMDI0LDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQogCQkJJF91c2VyID0gc3RyaXBzbGFzaGVzKCRfdXNlcik7Ci0JCSRlc2NfdXNlciA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkX3VzZXIpOworCQkkZXNjX3VzZXIgPSB2Y2xfbXlzcWxfZXNjYXBlX3N0cmluZygkX3VzZXIpOwogCQkjIGNoZWNrIHRoYXQgYWZmaWxpYXRpb24gb2YgdXNlciBjYW4gYmUgZGV0ZXJtaW5lZCBiZWNhdXNlIGdldFVzZXJsaXN0SUQKIAkJIyAgIHdpbGwgYWJvcnQgaWYgaXQgY2Fubm90IGZpbmQgaXQKIAkJJGFmZmlsb2sgPSAwOwpAQCAtMzEzNSw3ICszMTM1LDcgQEAKIAkJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiA4NywKIAkJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICdOYW1lIG11c3QgYmUgYmV0d2VlbiAzIGFuZCAzMCBjaGFyYWN0ZXJzIGFuZCBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgYW5kIHRoZXNlIGNoYXJhY3RlcnM6IC0gLiBfJyk7CiAJCX0KLQkJJG5hbWUgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJG5hbWUpOworCQkkbmFtZSA9IHZjbF9teXNxbF9lc2NhcGVfc3RyaW5nKCRuYW1lKTsKIAkJJGRhdGEgPSBhcnJheSgndHlwZScgPT4gJ3Jlc291cmNlJywKIAkJICAgICAgICAgICAgICAnb3duZXJncm91cCcgPT4gJHJjWydtYW5hZ2luZ0dyb3VwSUQnXSwKIAkJICAgICAgICAgICAgICAncmVzb3VyY2V0eXBlaWQnID0+ICR0eXBlaWQsCkBAIC0zNDc2LDcgKzM0NzYsNyBAQAogCSAgICAgICAuICJXSEVSRSBidC5ibG9ja1JlcXVlc3RpZCA9IGJyLmlkIEFORCAiCiAJICAgICAgIC4gICAgICAgImJ0LmlkID0gJGJsb2NrVGltZXNpZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoISAkcnFkYXRhID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCEgJHJxZGF0YSA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gOCwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ3Vua25vd24gYmxvY2tUaW1lc2lkJyk7CkBAIC0zNTI2LDggKzM1MjYsOCBAQAogCQkkYmxvY2tDb21wVmFscyA9IGFycmF5KCk7CiAJCSRjaGVja3N0YXJ0YmFzZSA9ICR1bml4c3RhcnQgLSAkaW1nTG9hZFRpbWUgLSAzMDA7CiAJCSRyZWxvYWRzdGFydGJhc2UgPSB1bml4VG9EYXRldGltZSgkY2hlY2tzdGFydGJhc2UpOwotCQkkcm93cyA9IG15c3FsX251bV9yb3dzKCRxaCk7Ci0JCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJCSRyb3dzID0gbXlzcWxpX251bV9yb3dzKCRxaCk7CisJCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkJaWYoYXJyYXlfa2V5X2V4aXN0cygkcm93WydyZXFpZCddLCAkZG9uZXJlcWlkcykpCiAJCQkJY29udGludWU7CiAJCQkkZG9uZXJlcWlkc1skcm93WydyZXFpZCddXSA9IDE7CkBAIC0zNTk0LDcgKzM1OTQsNyBAQAogCSAgICAgICAuICJGUk9NIGJsb2NrQ29tcHV0ZXJzICIKIAkgICAgICAgLiAiV0hFUkUgYmxvY2tUaW1laWQgPSAkYmxvY2tUaW1lc2lkIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxNSwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gJ2ZhaWx1cmUgdG8gY29tbXVuaWNhdGUgd2l0aCBkYXRhYmFzZScpOwpAQCAtMzY1NSw3ICszNjU1LDcgQEAKIAkkc3RhZ0NudCA9IDA7CiAJJHN0YWdUaW1lID0gNjA7ICAgICAgICAjIHN0YWdnZXIgcmVsb2FkIHJlc2VydmF0aW9ucyBieSAxIG1pbgogCWlmKCRpbWdMb2FkVGltZSA+IDg0MCkgLy8gaWYgZXN0aW1hdGVkIGxvYWQgdGltZSBpcyA+IDE0IG1pbgotCQkkc3RhZ1RpbWUgPSAxMjA7ICAgICMgICAgc3RhZ2dlciByZWxvYWQgcmVzZXJ2YXRpb25zIGJ5IDIgbWluIAorCQkkc3RhZ1RpbWUgPSAxMjA7ICAgICMgICAgc3RhZ2dlciByZWxvYWQgcmVzZXJ2YXRpb25zIGJ5IDIgbWluCiAJZm9yKCRpID0gMDsgJGkgPCAkcmVxVG9BbGxvYzsgJGkrKykgewogCQkkc3RhZ3VuaXhzdGFydCA9ICR1bml4c3RhcnQgLSAkbG9hZHRpbWUgLSAoJHN0YWdDbnQgKiAkc3RhZ1RpbWUpOwogCQkkc3RhZ3N0YXJ0ID0gdW5peFRvRGF0ZXRpbWUoJHN0YWd1bml4c3RhcnQpOwpAQCAtMzc3Miw3ICszNzcyLDcgQEAKIAkgICAgICAgLiAgICAgICAici5zdWJpZCA9IGkuaWQgQU5EICIKIAkgICAgICAgLiAgICAgICAici5yZXNvdXJjZXR5cGVpZCA9IDEzIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0JaWYobXlzcWxfbnVtX3Jvd3MoJHFoKSAhPSAxKSB7CisJaWYobXlzcWxpX251bV9yb3dzKCRxaCkgIT0gMSkgewogCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gJ2Vycm9yJywKIAkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDkxLAogCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAnSW52YWxpZCByZXNvdXJjZWlkIHN1Ym1pdHRlZCcpOwpAQCAtMzgyMyw3ICszODIzLDcgQEAKIAkjIGNoZWNrIGZvciBleGlzdGFuY2Ugb2YgJHJlc2VydmF0aW9uaWQKIAkkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gcmVzZXJ2YXRpb24gV0hFUkUgaWQgPSAkcmVzZXJ2YXRpb25pZCI7CiAJJHFoID0gZG9RdWVyeSgkcXVlcnkpOwotCWlmKCEgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSkgeworCWlmKCEgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiAxMDEsCiAJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICdTcGVjaWZpZWQgcmVzZXJ2YXRpb24gZG9lcyBub3QgZXhpc3QnKTsKQEAgLTM4MzksNyArMzgzOSw3IEBACiAJICAgICAgIC4gIldIRVJFIHJzLmlkID0gJHJlc2VydmF0aW9uaWQgQU5EICIKIAkgICAgICAgLiAgICAgICAiYWQuc2VjcmV0aWQgSVMgTk9UIE5VTEwiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkkc2VjcmV0aWRzW10gPSAkcm93WydzZWNyZXRpZCddOwogCQkkbW5pZCA9ICRyb3dbJ21hbmFnZW1lbnRub2RlaWQnXTsKIAl9CkBAIC0zODUzLDcgKzM4NTMsNyBAQAogCSAgICAgICAuICJXSEVSRSBycy5pZCA9ICRyZXNlcnZhdGlvbmlkIEFORCAiCiAJICAgICAgIC4gICAgICAgInZwLnNlY3JldGlkIElTIE5PVCBOVUxMIjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSk7Ci0Jd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKKwl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJJHNlY3JldGlkc1tdID0gJHJvd1snc2VjcmV0aWQnXTsKIAkJJG1uaWQgPSAkcm93WydtYW5hZ2VtZW50bm9kZWlkJ107CiAJfQpAQCAtMzg4NCw3ICszODg0LDcgQEAKIAkgICAgICAgLiAgICAgICAiY2suaG9zdHR5cGUgPSAnbWFuYWdlbWVudG5vZGUnIEFORCAiCiAJICAgICAgIC4gICAgICAgImNzLmlkIElTIE5VTEwiOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQlpZigkcm93WydteWNyeXB0c2VjcmV0J10gPT0gTlVMTCkgewogCQkJJGZhaWxzW10gPSAkcm93WydzZWNyZXRpZCddOwogCQkJY29udGludWU7CkBAIC0zOTUyLDcgKzM5NTIsNyBAQAogCSAgICAgICAuICAgICAgICJvLnVzZXJpZCA9IHskdXNlclsnaWQnXX0iOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5KTsKIAkvL2lmIG5vdGhpbmcgcmV0dXJuZWQsIG9uZWNsaWNrIGRvZXMgbm90IGV4aXN0Ci0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gOTUsCiAJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICJUaGUgT25lQ2xpY2sgd2l0aCBJRCAkb25lY2xpY2tpZCBkb2VzIG5vdCBleGlzdC4iKTsKQEAgLTQwMDMsOCArNDAwMyw4IEBACiAJICAgICAgICAuICJMRUZUIEpPSU4gT1Mgb3MgT04gKGkuT1NpZCA9IG9zLmlkKSAiCiAJICAgICAgICAuICJMRUZUIEpPSU4gKCIKIAkgICAgICAgIC4gICAgICAiU0VMRUNUIHJzLmltYWdlaWQsICIKLQkgICAgICAgIC4gICAgICAgICAgICAgIk1BWChycS5pZCkgQVMgcmVxdWVzdGlkLCAiIAotCSAgICAgICAgLiAgICAgICAgICAgICAiQ09VTlQocnEuaWQpIEFTIHJlcWNvdW50ICIgCisJICAgICAgICAuICAgICAgICAgICAgICJNQVgocnEuaWQpIEFTIHJlcXVlc3RpZCwgIgorCSAgICAgICAgLiAgICAgICAgICAgICAiQ09VTlQocnEuaWQpIEFTIHJlcWNvdW50ICIKIAkgICAgICAgIC4gICAgICAiRlJPTSByZXNlcnZhdGlvbiBycywgIgogCSAgICAgICAgLiAgICAgICAgICAgInJlcXVlc3QgcnEgIgogCSAgICAgICAgLiAgICAgICJXSEVSRSBycy5yZXF1ZXN0aWQgPSBycS5pZCBBTkQgIgpAQCAtNDAyNyw3ICs0MDI3LDcgQEAKIAkkcmVzdWx0WydzdGF0dXMnXSA9ICdzdWNjZXNzJzsKIAkkcmVzdWx0WydvbmVjbGlja3MnXSA9IGFycmF5KCk7CiAJIyRhbGxzdGF0ZXMgPSBnZXRTdGF0ZXMoKTsKLQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCXdoaWxlKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHFoKSkgewogCQkvKmlmKCRyb3dbJ2N1cnJzdGF0ZWlkJ10gPT0gMTQpCiAJCQkkc3RhdGUgPSAkYWxsc3RhdGVzWyRyb3dbJ2xhc3RzdGF0ZWlkJ11dOwogCQllbHNlaWYoISBpc19udWxsKCRyb3dbJ2N1cnJzdGF0ZWlkJ10pKQpAQCAtNDIwMCw3ICs0MjAwLDcgQEAKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gIlNwZWNpZmllZCBkdXJhdGlvbiBpcyB0b28gbG9uZyIsCiAJCSAgICAgICAgICAgICAnbWF4ZHVyYXRpb24nID0+ICRhbGxvd2VkKTsKIAl9Ci0JCisKIAkkcXVlcnkgPSAiU0VMRUNUIGlkICIKIAkgICAgICAgLiAiRlJPTSBvbmVjbGljayAiCiAJICAgICAgIC4gIldIRVJFIGlkID0gJG9uZWNsaWNraWQgQU5EICIKQEAgLTQyMDgsNyArNDIwOCw3IEBACiAJICAgICAgIC4gICAgICAgInVzZXJpZCA9IHskdXNlclsnaWQnXX0iOwogCSRxaCA9IGRvUXVlcnkoJHF1ZXJ5LCAxMDEpOwogCS8vaWYgbm90aGluZyByZXR1cm5lZCwgb25lY2xpY2sgZG9lcyBub3QgZXhpc3Qgb3IgYmVsb25ncyB0byBhbm90aGVyIHVzZXIKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7CisJaWYoISAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxaCkpIHsKIAkJcmV0dXJuIGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsCiAJCSAgICAgICAgICAgICAnZXJyb3Jjb2RlJyA9PiA5NSwKIAkJICAgICAgICAgICAgICdlcnJvcm1zZycgPT4gIlRoZSBPbmVDbGljayB3aXRoIElEICRvbmVjbGlja2lkIGRvZXMgbm90IGV4aXN0LiIpOwpAQCAtNDIxOCw3ICs0MjE4LDcgQEAKIAkJICAgICAgICAgICAgICdlcnJvcmNvZGUnID0+IDkwLAogCQkgICAgICAgICAgICAgJ2Vycm9ybXNnJyA9PiAiVGhlIE9uZUNsaWNrIHdpdGggSUQgJG9uZWNsaWNraWQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSB1c2VyIHRoYXQgcmVxdWVzdGVkIGl0LiIpOwogCX0qLwotCQorCiAJJHF1ZXJ5ID0gIlVQREFURSBvbmVjbGljayAiCiAJICAgICAgIC4gIlNFVCBpbWFnZWlkID0gJGltYWdlaWQsICIKIAkgICAgICAgLiAgICAgIm5hbWUgPSAnJG5hbWUnLCAiCkBAIC00MjU1LDE0ICs0MjU1LDE0IEBACiBmdW5jdGlvbiBYTUxSUENkZWxldGVPbmVDbGljaygkb25lY2xpY2tpZCkgewogCWdsb2JhbCAkdXNlcjsKIAkkb25lY2xpY2tpZCA9IHByb2Nlc3NJbnB1dERhdGEoJG9uZWNsaWNraWQsIEFSR19OVU1FUklDKTsKLQkKKwogCSRxdWVyeSA9ICJTRUxFQ1QgaWQgIgogCSAgICAgICAuICJGUk9NIG9uZWNsaWNrICIKIAkgICAgICAgLiAiV0hFUkUgaWQgPSAkb25lY2xpY2tpZCBBTkQgIgogCSAgICAgICAuICAgICAgICJ1c2VyaWQgPSB7JHVzZXJbJ2lkJ119IjsKIAkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKIAkvL2lmIG5vdGhpbmcgcmV0dXJuZWQsIG9uZWNsaWNrIGRvZXMgbm90IGV4aXN0IG9yIGJlbG9uZ3MgdG8gYW5vdGhlciB1c2VyCi0JaWYoISAkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHFoKSkgeworCWlmKCEgJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcWgpKSB7CiAJCXJldHVybiBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLAogCQkgICAgICAgICAgICAgJ2Vycm9yY29kZScgPT4gOTUsCiAJCSAgICAgICAgICAgICAnZXJyb3Jtc2cnID0+ICJUaGUgT25lQ2xpY2sgd2l0aCBJRCAkb25lY2xpY2tpZCBkb2VzIG5vdCBleGlzdC4iKTsKZGlmZiAtLWdpdCBhL3dlYi9pbmRleC5waHAgYi93ZWIvaW5kZXgucGhwCmluZGV4IGJiZGNhMGEuLmU4YTQ4YjggMTAwNjQ0Ci0tLSBhL3dlYi9pbmRleC5waHAKKysrIGIvd2ViL2luZGV4LnBocApAQCAtMTYsMTggKzE2LDE5IEBACiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KIAotIyBBU0YgVkNMIHYyLjUKLSRWQ0x2ZXJzaW9uID0gJzIuNSc7CisjIEFTRiBWQ0wgdjIuNS4xCiskVkNMdmVyc2lvbiA9ICcyLjUuMSc7CiAKIHJlcXVpcmVfb25jZSgiLmh0LWluYy9jb25mLnBocCIpOwotaWYoISBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gIT0gIm9uIikgewotCWhlYWRlcigiTG9jYXRpb246ICIgLiBCQVNFVVJMIC4gIi8iKTsKLQlleGl0OworCitpZihTU0xPRkZMT0FEID09IDApIHsKKwlpZighIGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSB8fCAkX1NFUlZFUlsnSFRUUFMnXSAhPSAib24iKSB7CisJCWhlYWRlcigiTG9jYXRpb246ICIgLiBCQVNFVVJMIC4gIi8iKTsKKwkJZXhpdDsKKwl9CiB9CiAKLSR1c2VyID0gJyc7Ci0kbXlzcWxfbGlua192Y2wgPSAnJzsKLSRteXNxbF9saW5rX2FjY3QgPSAnJzsKKyR1c2VyID0gYXJyYXkoKTsKICRtb2RlID0gJyc7CiAkb2xkbW9kZSA9ICcnOwogJHN1Ym1pdEVyciA9ICcnOwpkaWZmIC0tZ2l0IGEvd2ViL2pzL2NvZGUuanMgYi93ZWIvanMvY29kZS5qcwppbmRleCAwYjJjMDI0Li4zMzkxNTAwIDEwMDY0NAotLS0gYS93ZWIvanMvY29kZS5qcworKysgYi93ZWIvanMvY29kZS5qcwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJaWYoZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXMpICAvLyBTdGFuZGFyZHMgQ29tcGxpYW50CiAJCWNzc29iaiA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdLmNzc1J1bGVzOwogCWVsc2UKLQkJY3Nzb2JqID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0ucnVsZXM7ICAvLyBJRSAKKwkJY3Nzb2JqID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0ucnVsZXM7ICAvLyBJRQogCXZhciBzdG9wID0gMDsKIAlmb3IodmFyIGkgPSAwOyBpIDwgY3Nzb2JqLmxlbmd0aDsgaSsrKSB7CiAJCWlmKGNzc29ialtpXS5zZWxlY3RvclRleHQpIHsKZGlmZiAtLWdpdCBhL3dlYi9qcy9kYXNoYm9hcmQuanMgYi93ZWIvanMvZGFzaGJvYXJkLmpzCmluZGV4IDU5OTIyZjIuLjA1OTFjNWMgMTAwNjQ0Ci0tLSBhL3dlYi9qcy9kYXNoYm9hcmQuanMKKysrIGIvd2ViL2pzL2Rhc2hib2FyZC5qcwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJICAgICsgICc8dGg+UmVxSUQ8L3RoPicKIAkgICAgKyAgJzx0aD5Vc2VyPC90aD4nCiAJICAgICsgICc8dGg+Q29tcHV0ZXI8L3RoPicKKwkgICAgKyAgJzx0aD5WTSBIb3N0PC90aD4nCiAJICAgICsgICc8dGg+U3RhdGVzPC90aD4nCiAJICAgICsgICc8dGg+SW1hZ2U8L3RoPicKIAkgICAgKyAgJzx0aD5JbnN0YWxsIFR5cGU8L3RoPicKQEAgLTIyMiw2ICsyMjMsOCBAQAogCQkgICAgKyAnPC90ZD48dGQgc3R5bGU9XCJwYWRkaW5nOiAxcHg7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkO1wiPicKIAkJICAgICsgZGF0YVtpXS5jb21wdXRlcgogCQkgICAgKyAnPC90ZD48dGQgc3R5bGU9XCJwYWRkaW5nOiAxcHg7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkO1wiPicKKwkJICAgICsgZGF0YVtpXS52bWhvc3QKKwkJICAgICsgJzwvdGQ+PHRkIHN0eWxlPVwicGFkZGluZzogMXB4OyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZDtcIj4nCiAJCSAgICArIGRhdGFbaV0uc3RhdGUKIAkJICAgICsgJzwvdGQ+PHRkIHN0eWxlPVwicGFkZGluZzogMXB4OyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZDtcIj4nCiAJCSAgICArIGRhdGFbaV0uaW1hZ2UKZGlmZiAtLWdpdCBhL3dlYi9qcy9ubHMvZXNfQ1IvbWVzc2FnZXMuanMgYi93ZWIvanMvbmxzL2VzX0NSL21lc3NhZ2VzLmpzCmluZGV4IDFlYTJkMjYuLjFmZGM3ODcgMTAwNjQ0Ci0tLSBhL3dlYi9qcy9ubHMvZXNfQ1IvbWVzc2FnZXMuanMKKysrIGIvd2ViL2pzL25scy9lc19DUi9tZXNzYWdlcy5qcwpAQCAtMTQ2LDUgKzE0NiwxMCBAQAogJ0ludmFsaWQgaXRlbSBzdWJtaXR0ZWQgdG8gc2F2ZSc6J0VsZW1lbnRvIGludsOhbGlkbyBwYXJhIGd1YXJkYXInLAogJ01lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHNhdmVkJzonTWVuc2FqZSBndWFyZGFkbyBzYXRpc2ZhY3RvcmlhbWVudGUnLAogJ05vIGNoYW5nZXMgdG8gc3VibWl0dGVkIG1lc3NhZ2UuIE5vdGhpbmcgc2F2ZWQuJzonU2luIGNhbWJpb3MgZW4gZWwgbWVuc2FqZS4gTmFkYSBndWFyZGFkby4nLAotJ3Vuc2V0Jzonc2luIGVzcGVjaWZpY2FyJworJ3Vuc2V0Jzonc2luIGVzcGVjaWZpY2FyJywKKycxIGhvdXInOicnLAorJ0RlZmF1bHQgZm9yIFVzZXInOicnLAorJ0ludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkJzonJywKKydtaW51dGVzJzonJywKKydQYXNzd29yZHMgZG8gbm90IG1hdGNoJzonJwogfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL25scy9lc19NWC9tZXNzYWdlcy5qcyBiL3dlYi9qcy9ubHMvZXNfTVgvbWVzc2FnZXMuanMKaW5kZXggOTkwYzgxYS4uYmZlNDUwMCAxMDA2NDQKLS0tIGEvd2ViL2pzL25scy9lc19NWC9tZXNzYWdlcy5qcworKysgYi93ZWIvanMvbmxzL2VzX01YL21lc3NhZ2VzLmpzCkBAIC0xNDYsNSArMTQ2LDEwIEBACiAnSW52YWxpZCBpdGVtIHN1Ym1pdHRlZCB0byBzYXZlJzonJywKICdNZXNzYWdlIHN1Y2Nlc3NmdWxseSBzYXZlZCc6JycsCiAnTm8gY2hhbmdlcyB0byBzdWJtaXR0ZWQgbWVzc2FnZS4gTm90aGluZyBzYXZlZC4nOicnLAotJ3Vuc2V0JzonJworJ3Vuc2V0JzonJywKKycxIGhvdXInOicnLAorJ0RlZmF1bHQgZm9yIFVzZXInOicnLAorJ0ludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkJzonJywKKydtaW51dGVzJzonJywKKydQYXNzd29yZHMgZG8gbm90IG1hdGNoJzonJwogfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL25scy9mcl9DQS9tZXNzYWdlcy5qcyBiL3dlYi9qcy9ubHMvZnJfQ0EvbWVzc2FnZXMuanMKaW5kZXggZmI4MmQ4Yi4uMGUyMzBhYyAxMDA2NDQKLS0tIGEvd2ViL2pzL25scy9mcl9DQS9tZXNzYWdlcy5qcworKysgYi93ZWIvanMvbmxzL2ZyX0NBL21lc3NhZ2VzLmpzCkBAIC0xNDYsNSArMTQ2LDEwIEBACiAnSW52YWxpZCBpdGVtIHN1Ym1pdHRlZCB0byBzYXZlJzonJywKICdNZXNzYWdlIHN1Y2Nlc3NmdWxseSBzYXZlZCc6JycsCiAnTm8gY2hhbmdlcyB0byBzdWJtaXR0ZWQgbWVzc2FnZS4gTm90aGluZyBzYXZlZC4nOicnLAotJ3Vuc2V0JzonJworJ3Vuc2V0JzonJywKKycxIGhvdXInOicnLAorJ0RlZmF1bHQgZm9yIFVzZXInOicnLAorJ0ludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkJzonJywKKydtaW51dGVzJzonJywKKydQYXNzd29yZHMgZG8gbm90IG1hdGNoJzonJwogfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL25scy9tZXNzYWdlcy5qcy50ZW1wbGF0ZSBiL3dlYi9qcy9ubHMvbWVzc2FnZXMuanMudGVtcGxhdGUKaW5kZXggMmY2YWJiYS4uNjBjZWUzNyAxMDA2NDQKLS0tIGEvd2ViL2pzL25scy9tZXNzYWdlcy5qcy50ZW1wbGF0ZQorKysgYi93ZWIvanMvbmxzL21lc3NhZ2VzLmpzLnRlbXBsYXRlCkBAIC0xNDYsNSArMTQ2LDEwIEBACiAnSW52YWxpZCBpdGVtIHN1Ym1pdHRlZCB0byBzYXZlJzonJywKICdNZXNzYWdlIHN1Y2Nlc3NmdWxseSBzYXZlZCc6JycsCiAnTm8gY2hhbmdlcyB0byBzdWJtaXR0ZWQgbWVzc2FnZS4gTm90aGluZyBzYXZlZC4nOicnLAotJ3Vuc2V0JzonJworJ3Vuc2V0JzonJywKKycxIGhvdXInOicnLAorJ0RlZmF1bHQgZm9yIFVzZXInOicnLAorJ0ludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkJzonJywKKydtaW51dGVzJzonJywKKydQYXNzd29yZHMgZG8gbm90IG1hdGNoJzonJwogfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL25scy9wdF9QVC9tZXNzYWdlcy5qcyBiL3dlYi9qcy9ubHMvcHRfUFQvbWVzc2FnZXMuanMKaW5kZXggNmU5YmVhYS4uNjJjM2M4OCAxMDA2NDQKLS0tIGEvd2ViL2pzL25scy9wdF9QVC9tZXNzYWdlcy5qcworKysgYi93ZWIvanMvbmxzL3B0X1BUL21lc3NhZ2VzLmpzCkBAIC0xNDYsNSArMTQ2LDEwIEBACiAnSW52YWxpZCBpdGVtIHN1Ym1pdHRlZCB0byBzYXZlJzonJywKICdNZXNzYWdlIHN1Y2Nlc3NmdWxseSBzYXZlZCc6JycsCiAnTm8gY2hhbmdlcyB0byBzdWJtaXR0ZWQgbWVzc2FnZS4gTm90aGluZyBzYXZlZC4nOicnLAotJ3Vuc2V0JzonJworJ3Vuc2V0JzonJywKKycxIGhvdXInOicnLAorJ0RlZmF1bHQgZm9yIFVzZXInOicnLAorJ0ludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkJzonJywKKydtaW51dGVzJzonJywKKydQYXNzd29yZHMgZG8gbm90IG1hdGNoJzonJwogfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL3JlcXVlc3RzLmpzIGIvd2ViL2pzL3JlcXVlc3RzLmpzCmluZGV4IDhjZmU5NWYuLmI4MjcyZjkgMTAwNjQ0Ci0tLSBhL3dlYi9qcy9yZXF1ZXN0cy5qcworKysgYi93ZWIvanMvcmVxdWVzdHMuanMKQEAgLTQzNSw4ICs0MzUsNyBAQAogCQllbHNlIHsKIAkJCXZhciB0bXAgPSBkb2pvLmJ5SWQoJ2RlcGxveXN0YXJ0ZGF5JykudmFsdWU7CiAJCQl0bXAgPSBuZXcgRGF0ZSh0bXAgKiAxMDAwKTsKLQkJCXZhciBvZmZzZXQgPSB0bXAuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOwotCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSh0bXAuZ2V0VGltZSgpICsgb2Zmc2V0KTsKKwkJCXZhciBkYXRlID0gbmV3IERhdGUodG1wLmdldFRpbWUoKSk7CiAJCQl2YXIgaG91ciA9IHBhcnNlSW50KGRvam8uYnlJZCgnZGVwbG95aG91cicpLnZhbHVlKTsKIAkJCXZhciBtID0gZG9qby5ieUlkKCdkZXBsb3ltZXJpZGlhbicpLnZhbHVlOwogCQkJaWYobSA9PSAncG0nICYmIGhvdXIgPCAxMikKQEAgLTg3Niw3ICs4NzUsNyBAQAogCW9sZHN0b3JlID0gZGlqaXQuYnlJZCgnY29uZmlndmFyaWFibGVzJykuc3RvcmU7CiAJZGlqaXQuYnlJZCgnY29uZmlndmFyaWFibGVzJykuc2V0U3RvcmUobmV3c3RvcmUyLCAnJywge3F1ZXJ5OiB7aWQ6ICcnfX0pOwogCWRlbGV0ZSBvbGRzdG9yZTsKLQkKKwogCS8vIGZpbmlzaGNvbmZpZ3MKIAkvKmlmKGRhdGEuaXRlbXMuY29uZmlncy5sZW5ndGggPT0gMCkKIAkJZGlqaXQuYnlJZCgnbmV3UmVzRGxnU2hvd0NvbmZpZ0J0bicpLnNldCgnZGlzYWJsZWQnLCB0cnVlKTsKQEAgLTEzODksNyArMTM4OCw3IEBACiAJCWRpaml0LmJ5SWQoJ3NlcnZlcmRlbGV0ZWRsZycpLnNob3coKTsKIAkJcmV0dXJuOwogCX0KLQlpZihkaWppdC5ieUlkKCdzZXJ2ZXJkZWxldGVkbGcnKSAmJiAKKwlpZihkaWppdC5ieUlkKCdzZXJ2ZXJkZWxldGVkbGcnKSAmJgogCSAgIGRpaml0LmJ5SWQoJ3NlcnZlcmRlbGV0ZWRsZycpLm9wZW4pIHsKIAkJZGlqaXQuYnlJZCgnc2VydmVyZGVsZXRlZGxnJykuaGlkZSgpOwogCQlkaWppdC5ieUlkKCdzZXJ2ZXJEZWxldGVEbGdCdG4nKS5zZXQoJ2Rpc2FibGVkJywgZmFsc2UpOwpAQCAtMTU1Myw3ICsxNTUyLDcgQEAKIAkJZGF0YS5kYXkgPSBkaWppdC5ieUlkKCdkYXknKS52YWx1ZTsKIAlpZihkaWppdC5ieUlkKCdlZGl0c3RhcnR0aW1lJykpIHsKIAkJdmFyIHQgPSBkaWppdC5ieUlkKCdlZGl0c3RhcnR0aW1lJykudmFsdWU7Ci0JCWRhdGEuc3RhcnR0aW1lID0gZG9qb3guc3RyaW5nLnNwcmludGYoJyUwMmQlMDJkJywgCisJCWRhdGEuc3RhcnR0aW1lID0gZG9qb3guc3RyaW5nLnNwcmludGYoJyUwMmQlMDJkJywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldEhvdXJzKCksCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5nZXRNaW51dGVzKCkpOwogCQl2YXIgdG1wID0gZGlqaXQuYnlJZCgnZGF5JykudmFsdWUubWF0Y2goLyhbMC05XXs0fSkoWzAtOV17Mn0pKFswLTldezJ9KS8pOwpAQCAtMTU4NCw3ICsxNTgzLDcgQEAKIAkJZGF0YS5lbmRtb2RlID0gJ2xlbmd0aCc7CiAJfQogCWVsc2UgaWYoKGRvam8uYnlJZCgnZGF0ZXJhZGlvJykgJiYgZG9qby5ieUlkKCdkYXRlcmFkaW8nKS5jaGVja2VkKSB8fAotCSAgICAgICAgKGRpaml0LmJ5SWQoJ29wZW5lbmRkYXRlJykgJiYgISBkb2pvLmJ5SWQoJ2luZGVmaW5pdGVyYWRpbycpKSB8fCAKKwkgICAgICAgIChkaWppdC5ieUlkKCdvcGVuZW5kZGF0ZScpICYmICEgZG9qby5ieUlkKCdpbmRlZmluaXRlcmFkaW8nKSkgfHwKIAkgICAgICAgIChkaWppdC5ieUlkKCdvcGVuZW5kZGF0ZScpICYmIGRvam8uYnlJZCgnaW5kZWZpbml0ZXJhZGlvJykgJiYgISBkb2pvLmJ5SWQoJ2luZGVmaW5pdGVyYWRpbycpLmNoZWNrZWQpKSB7CiAJCXZhciBkID0gZGlqaXQuYnlJZCgnb3BlbmVuZGRhdGUnKS52YWx1ZTsKIAkJdmFyIHQgPSBkaWppdC5ieUlkKCdvcGVuZW5kdGltZScpLnZhbHVlOwpkaWZmIC0tZ2l0IGEvd2ViL2pzL3Jlc291cmNlcy9hZGRvbWFpbi5qcyBiL3dlYi9qcy9yZXNvdXJjZXMvYWRkb21haW4uanMKaW5kZXggNDU3OWEyNC4uY2ZmYmY5NCAxMDA2NDQKLS0tIGEvd2ViL2pzL3Jlc291cmNlcy9hZGRvbWFpbi5qcworKysgYi93ZWIvanMvcmVzb3VyY2VzL2FkZG9tYWluLmpzCkBAIC0yMSw2ICsyMSwxNiBAQAogfQogQURkb21haW4ucHJvdG90eXBlID0gbmV3IFJlc291cmNlKCk7CiAKK0FEZG9tYWluLnByb3RvdHlwZS5jb2xmb3JtYXR0ZXIgPSBmdW5jdGlvbih2YWx1ZSwgcm93SW5kZXgsIG9iaikgeworCWlmKG9iai5maWVsZCA9PSAndXNlZGJob3N0bmFtZXMnKSB7CisJCWlmKHZhbHVlID09ICIwIikKKwkJCXJldHVybiAnPHNwYW4gY2xhc3M9InJlZGVycm9ybXNnIj4nICsgXygnZmFsc2UnKSArICc8L3NwYW4+JzsKKwkJaWYodmFsdWUgPT0gIjEiKQorCQkJcmV0dXJuICc8c3BhbiBjbGFzcz0icmVhZHkiPicgKyBfKCd0cnVlJykgKyAnPC9zcGFuPic7CisJfQorCXJldHVybiB2YWx1ZTsKK30KKwogdmFyIHJlc291cmNlID0gbmV3IEFEZG9tYWluKCk7CiAKIGZ1bmN0aW9uIGFkZE5ld1Jlc291cmNlKHRpdGxlKSB7CkBAIC00MSwxMSArNTEsMTAgQEAKIAkJZG9qby5ieUlkKCdlZGl0cmVzaWQnKS52YWx1ZSA9IGRhdGEuaXRlbXMucnNjaWQ7CiAJCWRpaml0LmJ5SWQoJ25hbWUnKS5zZXQoJ3ZhbHVlJywgZGF0YS5pdGVtcy5kYXRhLm5hbWUpOwogCQlkaWppdC5ieUlkKCdvd25lcicpLnNldCgndmFsdWUnLCBkYXRhLml0ZW1zLmRhdGEub3duZXIpOwotCiAJCWRpaml0LmJ5SWQoJ2RvbWFpbmRuc25hbWUnKS5zZXQoJ3ZhbHVlJywgZGF0YS5pdGVtcy5kYXRhLmRvbWFpbmRuc25hbWUpOwogCQlkaWppdC5ieUlkKCd1c2VybmFtZScpLnNldCgndmFsdWUnLCBkYXRhLml0ZW1zLmRhdGEudXNlcm5hbWUpOwogCQlkaWppdC5ieUlkKCdkbnNzZXJ2ZXJzJykuc2V0KCd2YWx1ZScsIGRhdGEuaXRlbXMuZGF0YS5kbnNzZXJ2ZXJzKTsKLQorCQlkaWppdC5ieUlkKCd1c2VkYmhvc3RuYW1lcycpLnNldCgnY2hlY2tlZCcsIHBhcnNlSW50KGRhdGEuaXRlbXMuZGF0YS51c2VkYmhvc3RuYW1lcykpCiAJCWRpaml0LmJ5SWQoJ3Bhc3N3b3JkJykuc2V0KCd2YWx1ZScsICcqKioqKioqKicpOwogCQlkaWppdC5ieUlkKCdwYXNzd29yZDInKS5zZXQoJ3ZhbHVlJywgJ3h4eHh4eHh4Jyk7CiAKQEAgLTU4LDcgKzY3LDcgQEAKIH0KIAogZnVuY3Rpb24gcmVzZXRFZGl0UmVzb3VyY2UoKSB7Ci0JdmFyIGZpZWxkcyA9IFsnbmFtZScsICdvd25lcicsICdkb21haW5kbnNuYW1lJywgJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJywgJ3Bhc3N3b3JkMicsICdkbnNzZXJ2ZXJzJ107CisJdmFyIGZpZWxkcyA9IFsnbmFtZScsICdvd25lcicsICdkb21haW5kbnNuYW1lJywgJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJywgJ3Bhc3N3b3JkMicsICd1c2VkYmhvc3RuYW1lcycsICdkbnNzZXJ2ZXJzJ107CiAJZm9yKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgewogCQlkaWppdC5ieUlkKGZpZWxkc1tpXSkucmVzZXQoKTsKIAl9CkBAIC04OSw3ICs5OCwxMyBAQAogCQlkb2pvLmJ5SWQoJ2FkZGVkaXRkbGdlcnJtc2cnKS5pbm5lckhUTUwgPSBfKCdQYXNzd29yZHMgZG8gbm90IG1hdGNoJyk7CiAJCXJldHVybjsKIAl9Ci0KKwkvLyB1cGRhdGUgdXNlZGJob3N0bmFtZXMKKwlpZihkaWppdC5ieUlkKCd1c2VkYmhvc3RuYW1lcycpLmdldCgnY2hlY2tlZCcpKSB7CisJCWRhdGFbJ3VzZWRiaG9zdG5hbWVzJ10gPSAxOworCX0KKwllbHNlIHsKKwkJZGF0YVsndXNlZGJob3N0bmFtZXMnXSA9IDA7CisJfQogCWRpaml0LmJ5SWQoJ2FkZGVkaXRidG4nKS5zZXQoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAJUlBDd3JhcHBlcihkYXRhLCBzYXZlUmVzb3VyY2VDQiwgMSk7CiB9CkBAIC0xMjUsNyArMTQwLDcgQEAKIAkJCXJlc291cmNlZ3JpZC5zdG9yZS5mZXRjaCh7CiAJCQkJcXVlcnk6IHtpZDogZGF0YS5pdGVtcy5kYXRhLmlkfSwKIAkJCQlvbkl0ZW06IGZ1bmN0aW9uKGl0ZW0pIHsKLQkJCQkJdmFyIGZpZWxkcyA9IFsnbmFtZScsICdvd25lcicsICdkb21haW5kbnNuYW1lJywgJ3VzZXJuYW1lJywnZG5zc2VydmVycyddOworCQkJCQl2YXIgZmllbGRzID0gWyduYW1lJywgJ293bmVyJywgJ2RvbWFpbmRuc25hbWUnLCAndXNlcm5hbWUnLCAndXNlZGJob3N0bmFtZXMnLCAnZG5zc2VydmVycyddOwogCQkJCQlmb3IodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7CiAJCQkJCQlkaWppdC5ieUlkKGZpZWxkc1tpXSkucmVzZXQoKTsKIAkJCQkJCXJlc291cmNlZ3JpZC5zdG9yZS5zZXRWYWx1ZShpdGVtLCBmaWVsZHNbaV0sIGRhdGEuaXRlbXMuZGF0YVtmaWVsZHNbaV1dKTsKZGlmZiAtLWdpdCBhL3dlYi9qcy9yZXNvdXJjZXMvY29tcHV0ZXIuanMgYi93ZWIvanMvcmVzb3VyY2VzL2NvbXB1dGVyLmpzCmluZGV4IDZlNTExZWEuLmRkMDhlMzcgMTAwNjQ0Ci0tLSBhL3dlYi9qcy9yZXNvdXJjZXMvY29tcHV0ZXIuanMKKysrIGIvd2ViL2pzL3Jlc291cmNlcy9jb21wdXRlci5qcwpAQCAtMjEwLDYgKzIxMCwzMiBAQAogCXJldHVybiAwOwogfQogCitDb21wdXRlci5wcm90b3R5cGUuaXBzb3J0ID0gZnVuY3Rpb24oYSwgYikgeworCXZhciBhcGFydHMgPSBhLnNwbGl0KCcuJyk7CisJdmFyIGJwYXJ0cyA9IGIuc3BsaXQoJy4nKTsKKwlmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWFwYXJ0c1tpXSA9IHBhcnNlSW50KGFwYXJ0c1tpXSk7CisJCWJwYXJ0c1tpXSA9IHBhcnNlSW50KGJwYXJ0c1tpXSk7CisJfQorCWlmKGFwYXJ0c1swXSA8IGJwYXJ0c1swXSkKKwkJcmV0dXJuIC0xOworCWlmKGFwYXJ0c1swXSA+IGJwYXJ0c1swXSkKKwkJcmV0dXJuIDE7CisJaWYoYXBhcnRzWzFdIDwgYnBhcnRzWzFdKQorCQlyZXR1cm4gLTE7CisJaWYoYXBhcnRzWzFdID4gYnBhcnRzWzFdKQorCQlyZXR1cm4gMTsKKwlpZihhcGFydHNbMl0gPCBicGFydHNbMl0pCisJCXJldHVybiAtMTsKKwlpZihhcGFydHNbMl0gPiBicGFydHNbMl0pCisJCXJldHVybiAxOworCWlmKGFwYXJ0c1szXSA8IGJwYXJ0c1szXSkKKwkJcmV0dXJuIC0xOworCWlmKGFwYXJ0c1szXSA+IGJwYXJ0c1szXSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIENvbXB1dGVyLnByb3RvdHlwZS5jb21wYXJlaG9zdG5hbWVzID0gZnVuY3Rpb24oYSwgYikgewogCS8vIGdldCBob3N0bmFtZQogCXZhciB0bXAgPSBhLnNwbGl0KCcuJyk7CkBAIC0yOTEsNiArMzE3LDggQEAKIAkJcmVzb3VyY2VzdG9yZS5jb21wYXJhdG9yTWFwWydwcm9jbnVtYmVyJ10gPSByZXNvdXJjZS5ub2Nhc2Vzb3J0OwogCQlyZXNvdXJjZXN0b3JlLmNvbXBhcmF0b3JNYXBbJ3Byb2NzcGVlZCddID0gcmVzb3VyY2Uubm9jYXNlc29ydDsKIAkJcmVzb3VyY2VzdG9yZS5jb21wYXJhdG9yTWFwWyduZXR3b3JrJ10gPSByZXNvdXJjZS5ub2Nhc2Vzb3J0OworCQlyZXNvdXJjZXN0b3JlLmNvbXBhcmF0b3JNYXBbJ0lQYWRkcmVzcyddID0gcmVzb3VyY2UuaXBzb3J0OworCQlyZXNvdXJjZXN0b3JlLmNvbXBhcmF0b3JNYXBbJ3ByaXZhdGVJUGFkZHJlc3MnXSA9IHJlc291cmNlLmlwc29ydDsKIAogCQlkb2pvLmNvbm5lY3QocmVzb3VyY2VncmlkLCAnX29uRmV0Y2hDb21wbGV0ZScsIGZ1bmN0aW9uKCkge2Rvam8uYnlJZCgnY29tcHV0ZXJjb3VudCcpLmlubmVySFRNTCA9ICdDb21wdXRlcnMgaW4gdGFibGU6ICcgKyByZXNvdXJjZWdyaWQucm93Q291bnQ7fSk7CiAJfQpAQCAtMTIxNiw3ICsxMjQ0LDkgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY251bWJlcjogcmVzb3VyY2Uubm9jYXNlc29ydCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY3NwZWVkOiByZXNvdXJjZS5ub2Nhc2Vzb3J0LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrOiByZXNvdXJjZS5ub2Nhc2Vzb3J0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW06IHJlc291cmNlLm5vY2FzZXNvcnR9OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW06IHJlc291cmNlLm5vY2FzZXNvcnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYWRkcmVzczogcmVzb3VyY2UuaXBzb3J0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlSVBhZGRyZXNzOiByZXNvdXJjZS5pcHNvcnR9OwogCXJlc291cmNlc3RvcmUuZmV0Y2goKTsKIAlzYXZlc2Nyb2xsID0gcmVzb3VyY2VncmlkLnNjcm9sbFRvcDsKIAlyZXNvdXJjZWdyaWQuc2V0U3RvcmUocmVzb3VyY2VzdG9yZSwgcmVzb3VyY2VncmlkLnF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3dlYi9qcy9yZXNvdXJjZXMvaW1hZ2UuanMgYi93ZWIvanMvcmVzb3VyY2VzL2ltYWdlLmpzCmluZGV4IGRhZDNmNDcuLjRhZDU2NWQgMTAwNjQ0Ci0tLSBhL3dlYi9qcy9yZXNvdXJjZXMvaW1hZ2UuanMKKysrIGIvd2ViL2pzL3Jlc291cmNlcy9pbWFnZS5qcwpAQCAtMzYsMTAgKzM2LDI5IEBACiAJCWlmKHZhbHVlID09ICIxIikKIAkJCXJldHVybiAnPHNwYW4gY2xhc3M9InJlYWR5Ij4nICsgXygndHJ1ZScpICsgJzwvc3Bhbj4nOwogCX0KLQlpZigob2JqLmZpZWxkID09ICdtYXhpbml0aWFsdGltZScgJiYgdmFsdWUgPT0gMCkgfHwKLQkgICAob2JqLmZpZWxkID09ICdhZGRvbWFpbicgJiYgdmFsdWUgPT0gbnVsbCkgfHwKKwlpZigob2JqLmZpZWxkID09ICdhZGRvbWFpbicgJiYgdmFsdWUgPT0gbnVsbCkgfHwKIAkgICAob2JqLmZpZWxkID09ICdiYXNlT1UnICYmIHZhbHVlID09IG51bGwpKQogCQlyZXR1cm4gJygnICsgXygndW5zZXQnKSArICcpJzsKKwlpZihvYmouZmllbGQgPT0gJ21heGluaXRpYWx0aW1lJykgeworCQlpZih2YWx1ZSA9PSAwKSB7CisJCQlyZXR1cm4gXygnRGVmYXVsdCBmb3IgVXNlcicpOworCQl9CisJCWVsc2UgaWYodmFsdWUgPCA2MCkgeworCQkJcmV0dXJuIHZhbHVlICsgJyAnICsgXygnbWludXRlcycpOworCQl9CisJCWVsc2UgaWYodmFsdWUgPT0gNjApIHsKKwkJCXJldHVybiBfKCcxIGhvdXInKTsKKwkJfQorCQllbHNlIGlmKHZhbHVlIDwgMjg4MCkgeworCQkJcmV0dXJuIHBhcnNlSW50KHZhbHVlIC8gNjApICsgJyAnICsgXygnaG91cnMnKTsKKwkJfQorCQllbHNlIGlmKHZhbHVlIDw9IDY0ODAwKSB7CisJCQlyZXR1cm4gcGFyc2VJbnQodmFsdWUgLyAxNDQwKSArICcgJyArIF8oJ2RheXMnKTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBwYXJzZUludCh2YWx1ZSAvIDEwMDgwKSArICcgJyArIF8oJ3dlZWtzJyk7CisJCX0KKwl9CiAJcmV0dXJuIHZhbHVlOwogfQogCkBAIC02Nyw2ICs4Niw3IEBACiAJCWRpaml0LmJ5SWQoJ2NoZWNrdXNlcicpLnNldCgndmFsdWUnLCBkYXRhLml0ZW1zLmRhdGEuY2hlY2t1c2VyKTsKIAkJZGlqaXQuYnlJZCgncm9vdGFjY2VzcycpLnNldCgndmFsdWUnLCBkYXRhLml0ZW1zLmRhdGEucm9vdGFjY2Vzcyk7CiAJCWRpaml0LmJ5SWQoJ3NldGhvc3RuYW1lJykuc2V0KCd2YWx1ZScsIGRhdGEuaXRlbXMuZGF0YS5zZXRob3N0bmFtZSk7CisJCWRpaml0LmJ5SWQoJ21heGluaXRpYWx0aW1lJykuc2V0KCd2YWx1ZScsIGRhdGEuaXRlbXMuZGF0YS5tYXhpbml0aWFsdGltZSk7CiAJCWlmKGRhdGEuaXRlbXMuZGF0YS5vc3R5cGUgPT0gJ3dpbmRvd3MnIHx8IGRhdGEuaXRlbXMuZGF0YS5vc3R5cGUgPT0gJ2xpbnV4JykKIAkJCWRvam8ucmVtb3ZlQ2xhc3MoJ3NldGhvc3RuYW1lZGl2JywgJ2hpZGRlbicpOwogCQllbHNlCkBAIC0xMTcsNiArMTM3LDEyIEBACiAJfQogfQogCitmdW5jdGlvbiBpbml0QWRkRGlhbG9nKCkgeworCWlmKGRpaml0LmJ5SWQoJ2FkZG9tYWluaWQnKS5vcHRpb25zLmxlbmd0aCA9PSAwKSB7CisJCWRpaml0LmJ5SWQoJ2FkYXV0aGVuYWJsZScpLnNldCgnZGlzYWJsZWQnLCB0cnVlKTsKKwl9Cit9CisKIGZ1bmN0aW9uIGRlbGF5ZWRFZGl0UmVzaXplKCkgewogCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7cmVzaXplUmVjZW50ZXJEaWppdERpYWxvZygnYWRkZWRpdGRsZycpO30sIDMwMCk7CiB9CkBAIC0yNTcsNiArMjgzLDExIEBACiAJCQlyZXR1cm47CiAJCX0KIAl9CisJZGF0YVsnbWF4aW5pdGlhbHRpbWUnXSA9IHBhcnNlSW50KGRpaml0LmJ5SWQoJ21heGluaXRpYWx0aW1lJykuZ2V0KCd2YWx1ZScpKTsKKwlpZihkYXRhWydtYXhpbml0aWFsdGltZSddIDwgMCB8fCBkYXRhWydtYXhpbml0aWFsdGltZSddID4gMjAxNjAwKSB7CisJCWVycm9iai5pbm5lckhUTUwgPSBfKCdJbnZhbGlkIE1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiBzZWxlY3RlZCcpOworCQlyZXR1cm47CisJfQogCWlmKGRpaml0LmJ5SWQoJ3N5c3ByZXAnKSkgewogCQlkYXRhWydzeXNwcmVwJ10gPSBwYXJzZUludChkaWppdC5ieUlkKCdzeXNwcmVwJykuZ2V0KCd2YWx1ZScpKTsKIAkJaWYoZGF0YVsnc3lzcHJlcCddICE9IDAgJiYgZGF0YVsnc3lzcHJlcCddICE9IDEpIHsKQEAgLTM0MSw2ICszNzIsNyBAQAogCQkJCQlyZXNvdXJjZWdyaWQuc3RvcmUuc2V0VmFsdWUoaXRlbSwgJ2NoZWNrdXNlcicsIGRhdGEuaXRlbXMuZGF0YS5jaGVja3VzZXIpOwogCQkJCQlyZXNvdXJjZWdyaWQuc3RvcmUuc2V0VmFsdWUoaXRlbSwgJ3Jvb3RhY2Nlc3MnLCBwYXJzZUludChkYXRhLml0ZW1zLmRhdGEucm9vdGFjY2VzcykpOwogCQkJCQlyZXNvdXJjZWdyaWQuc3RvcmUuc2V0VmFsdWUoaXRlbSwgJ3NldGhvc3RuYW1lJywgcGFyc2VJbnQoZGF0YS5pdGVtcy5kYXRhLnNldGhvc3RuYW1lKSk7CisJCQkJCXJlc291cmNlZ3JpZC5zdG9yZS5zZXRWYWx1ZShpdGVtLCAnbWF4aW5pdGlhbHRpbWUnLCBwYXJzZUludChkYXRhLml0ZW1zLmRhdGEubWF4aW5pdGlhbHRpbWUpKTsKIAkJCQkJcmVzb3VyY2VncmlkLnN0b3JlLnNldFZhbHVlKGl0ZW0sICdyZWxvYWR0aW1lJywgZGF0YS5pdGVtcy5kYXRhLnJlbG9hZHRpbWUpOwogCQkJCQlyZXNvdXJjZWdyaWQuc3RvcmUuc2V0VmFsdWUoaXRlbSwgJ2FkYXV0aGVuYWJsZWQnLCBkYXRhLml0ZW1zLmRhdGEuYWRhdXRoZW5hYmxlZCk7CiAJCQkJCXJlc291cmNlZ3JpZC5zdG9yZS5zZXRWYWx1ZShpdGVtLCAnYWRkb21haW5pZCcsIGRhdGEuaXRlbXMuZGF0YS5hZGRvbWFpbmlkKTsKQEAgLTc1NSw2ICs3ODcsNyBAQAogZnVuY3Rpb24gc3VibWl0Q3JlYXRlVXBkYXRlSW1hZ2UoKSB7CiAJaWYoZG9qby5ieUlkKCduZXdpbWFnZScpLmNoZWNrZWQpIHsKIAkJZGlqaXQuYnlJZCgnYWRkZWRpdGRsZycpLnNob3coKTsKKwkJaW5pdEFkZERpYWxvZygpOwogCQlkaWppdC5ieUlkKCdzdGFydGltYWdlZGxnJykuaGlkZSgpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvd2ViL2pzL3NpdGVjb25maWcuanMgYi93ZWIvanMvc2l0ZWNvbmZpZy5qcwppbmRleCAwNzJjMDFmLi4wYmUzMmI1IDEwMDY0NAotLS0gYS93ZWIvanMvc2l0ZWNvbmZpZy5qcworKysgYi93ZWIvanMvc2l0ZWNvbmZpZy5qcwpAQCAtNjg1LDcgKzY4NSwyMiBAQAogCX0KIAlkb2pvLmJ5SWQoJ21lc3NhZ2VzYWZmaWwnKS5pbm5lckhUTUwgPSBhZmZpbHR5cGU7CiAJZGlqaXQuYnlJZCgnbWVzc2FnZXNzdWJqZWN0Jykuc2V0KCd2YWx1ZScsIGl0ZW1bJ3N1YmplY3QnXSk7Ci0JZGlqaXQuYnlJZCgnbWVzc2FnZXNib2R5Jykuc2V0KCd2YWx1ZScsIGl0ZW1bJ21lc3NhZ2UnXSk7CisJaWYoKCdEQm1hbmFnZWRIVE1MJyBpbiBpdGVtKSAmJiBpdGVtWydEQm1hbmFnZWRIVE1MJ10gPT0gMSkgeworCQlkaWppdC5ieUlkKCdtZXNzYWdlc2JvZHknKS5zZXQoJ3ZhbHVlJywgJ1RoaXMgbWVzc2FnZSBib2R5IGNvbnRhaW5zIEhUTUwgdGhhdCBpcyBzZXQgZGlyZWN0bHkgaW4gdGhlIGRhdGFiYXNlJyk7CisJCWRpaml0LmJ5SWQoJ21lc3NhZ2VzYm9keScpLnNldCgnZGlzYWJsZWQnLCB0cnVlKTsKKwkJZGlqaXQuYnlJZCgnbWVzc2FnZXNzdWJqZWN0Jykuc2V0KCdkaXNhYmxlZCcsIHRydWUpOworCQlkaWppdC5ieUlkKCdtZXNzYWdlc3Nob3J0bXNnJykuc2V0KCdkaXNhYmxlZCcsIHRydWUpOworCQlkaWppdC5ieUlkKCdtZXNzYWdlc3NhdmVidG4nKS5zZXQoJ2Rpc2FibGVkJywgdHJ1ZSk7CisJCWRpaml0LmJ5SWQoJ21lc3NhZ2VzZGVsYnRuJykuc2V0KCdkaXNhYmxlZCcsIHRydWUpOworCX0KKwllbHNlIHsKKwkJZGlqaXQuYnlJZCgnbWVzc2FnZXNib2R5Jykuc2V0KCd2YWx1ZScsIGl0ZW1bJ21lc3NhZ2UnXSk7CisJCWRpaml0LmJ5SWQoJ21lc3NhZ2VzYm9keScpLnNldCgnZGlzYWJsZWQnLCBmYWxzZSk7CisJCWRpaml0LmJ5SWQoJ21lc3NhZ2Vzc3ViamVjdCcpLnNldCgnZGlzYWJsZWQnLCBmYWxzZSk7CisJCWRpaml0LmJ5SWQoJ21lc3NhZ2Vzc2hvcnRtc2cnKS5zZXQoJ2Rpc2FibGVkJywgZmFsc2UpOworCQlkaWppdC5ieUlkKCdtZXNzYWdlc3NhdmVidG4nKS5zZXQoJ2Rpc2FibGVkJywgZmFsc2UpOworCQlkaWppdC5ieUlkKCdtZXNzYWdlc2RlbGJ0bicpLnNldCgnZGlzYWJsZWQnLCBmYWxzZSk7CisJfQogCWlmKCdzaG9ydF9tZXNzYWdlJyBpbiBpdGVtKQogCQlkaWppdC5ieUlkKCdtZXNzYWdlc3Nob3J0bXNnJykuc2V0KCd2YWx1ZScsIGl0ZW1bJ3Nob3J0X21lc3NhZ2UnXSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvd2ViL2pzL3ZtLmpzIGIvd2ViL2pzL3ZtLmpzCmluZGV4IDA4NjRmOWEuLmI1NjMxM2IgMTAwNjQ0Ci0tLSBhL3dlYi9qcy92bS5qcworKysgYi93ZWIvanMvdm0uanMKQEAgLTE4Myw2ICsxODMsOCBAQAogCWlmKGRhdGEuaXRlbXMuZmFpbGVkKSB7CiAJCWlmKGRhdGEuaXRlbXMuZmFpbGVkID09ICdub2hvc3RhY2Nlc3MnKQogCQkJYWxlcnQoJ1lvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gbWFuYWdlIHRoaXMgVk0gaG9zdC4nKTsKKwkJaWYoZGF0YS5pdGVtcy5mYWlsZWQgPT0gJ2ludmFsaWRkYXRhJykKKwkJCWFsZXJ0KCdJbnZhbGlkIGxpc3Qgb2YgVk1zIHN1Ym1pdHRlZC4nKTsKIAkJZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7CiAJCXJldHVybjsKIAl9CkBAIC0zMDAsMTUgKzMwMiwxOCBAQAogCQloYW5kbGVBczogImpzb24iLAogCQllcnJvcjogZXJyb3JIYW5kbGVyLAogCQljb250ZW50OiB7Y29udGludWF0aW9uOiBjb250LAotCQkJCQkgbGlzdGlkczogbGlzdGlkcy5qb2luKCcsJyksCi0JCQkJCSBob3N0aWQ6IGhvc3RpZH0sCisJCSAgICAgICAgICBsaXN0aWRzOiBsaXN0aWRzLmpvaW4oJywnKSwKKwkJICAgICAgICAgIGhvc3RpZDogaG9zdGlkfSwKIAkJdGltZW91dDogMTUwMDAKIAl9KTsKIH0KIAogZnVuY3Rpb24gdm1Gcm9tSG9zdENCKGRhdGEsIGlvQXJncykgewogCWlmKGRhdGEuaXRlbXMuZmFpbGVkKSB7Ci0JCWFsZXJ0KCdZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1hbmFnZSB0aGlzIFZNIGhvc3QuJyk7CisJCWlmKGRhdGEuaXRlbXMuZmFpbGVkID09ICdub2hvc3RhY2Nlc3MnKQorCQkJYWxlcnQoJ1lvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gbWFuYWdlIHRoaXMgVk0gaG9zdC4nKTsKKwkJaWYoZGF0YS5pdGVtcy5mYWlsZWQgPT0gJ2ludmFsaWRkYXRhJykKKwkJCWFsZXJ0KCdJbnZhbGlkIGxpc3Qgb2YgVk1zIHN1Ym1pdHRlZC4nKTsKIAkJZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7CiAJCXJldHVybjsKIAl9CkBAIC00MTIsNyArNDE3LDEwIEBACiAKIGZ1bmN0aW9uIHJlbG9hZFZNaG9zdENCKGRhdGEsIGlvQXJncykgewogCWlmKGRhdGEuaXRlbXMuZmFpbGVkKSB7Ci0JCWFsZXJ0KCdZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1hbmFnZSB0aGlzIFZNIGhvc3QuJyk7CisJCWlmKGRhdGEuaXRlbXMuZmFpbGVkID09ICdub2hvc3RhY2Nlc3MnKQorCQkJYWxlcnQoJ1lvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gbWFuYWdlIHRoaXMgVk0gaG9zdC4nKTsKKwkJaWYoZGF0YS5pdGVtcy5mYWlsZWQgPT0gJ2ludmFsaWRkYXRhJykKKwkJCWFsZXJ0KCdJbnZhbGlkIGxpc3Qgb2YgVk1zIHN1Ym1pdHRlZC4nKTsKIAkJZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS93ZWIvbG9jYWxlL2VzX0NSL0xDX01FU1NBR0VTL3ZjbC5tbyBiL3dlYi9sb2NhbGUvZXNfQ1IvTENfTUVTU0FHRVMvdmNsLm1vCmluZGV4IDZlMDkzOWQuLmFkNzVjYWIgMTAwNjQ0Ci0tLSBhL3dlYi9sb2NhbGUvZXNfQ1IvTENfTUVTU0FHRVMvdmNsLm1vCisrKyBiL3dlYi9sb2NhbGUvZXNfQ1IvTENfTUVTU0FHRVMvdmNsLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvZXNfTVgvTENfTUVTU0FHRVMvdmNsLm1vIGIvd2ViL2xvY2FsZS9lc19NWC9MQ19NRVNTQUdFUy92Y2wubW8KaW5kZXggNjY3NTExNi4uZWI4MGQwYyAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9lc19NWC9MQ19NRVNTQUdFUy92Y2wubW8KKysrIGIvd2ViL2xvY2FsZS9lc19NWC9MQ19NRVNTQUdFUy92Y2wubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd2ViL2xvY2FsZS9mcl9DQS9MQ19NRVNTQUdFUy92Y2wubW8gYi93ZWIvbG9jYWxlL2ZyX0NBL0xDX01FU1NBR0VTL3ZjbC5tbwppbmRleCBhNjM1ZDFmLi5kNjdhNzdkIDEwMDY0NAotLS0gYS93ZWIvbG9jYWxlL2ZyX0NBL0xDX01FU1NBR0VTL3ZjbC5tbworKysgYi93ZWIvbG9jYWxlL2ZyX0NBL0xDX01FU1NBR0VTL3ZjbC5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93ZWIvbG9jYWxlL2phX0pQL0xDX01FU1NBR0VTL3ZjbC5tbyBiL3dlYi9sb2NhbGUvamFfSlAvTENfTUVTU0FHRVMvdmNsLm1vCmluZGV4IDJlMTgwZDQuLjA3NjY2ODIgMTAwNjQ0Ci0tLSBhL3dlYi9sb2NhbGUvamFfSlAvTENfTUVTU0FHRVMvdmNsLm1vCisrKyBiL3dlYi9sb2NhbGUvamFfSlAvTENfTUVTU0FHRVMvdmNsLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvZXNfQ1IvdmNsLnBvIGIvd2ViL2xvY2FsZS9wb19maWxlcy9lc19DUi92Y2wucG8KaW5kZXggZDUyNDQ4MC4uOGU3YWY4YyAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9wb19maWxlcy9lc19DUi92Y2wucG8KKysrIGIvd2ViL2xvY2FsZS9wb19maWxlcy9lc19DUi92Y2wucG8KQEAgLTE0LDEwICsxNCwxMCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IEFwYWNoZSBWQ0wgMi41XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41LjFcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogZGV2QHZjbC5hcGFjaGUub3JnXG4iCiAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDctMTQgMjI6MTktMDQwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDYtMDcgMTM6MzYtMDYwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMDYtMTMgMTU6MTgtMDQwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogTHVpcyBaw6FyYXRlIDxsdWlzLnphcmF0ZUBzb2x2b3NvZnQuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IFxuIgogIkxhbmd1YWdlOiBlc19DUlxuIgpAQCAtMjYsNiArMjYsOTMgQEAKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjYuMTBcbiIKIAorIzogYWRkb21haW4ucGhwOjE3MgorbXNnaWQgIiIKKyJFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIG5ldyBBRCBkb21haW4uIFBsZWFzZSBjb250YWN0IGFuICIKKyJhZG1pbiBmb3IgYXNzaXN0YW5jZS4iCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQyMCBhZGRvbWFpbi5waHA6NTM4Cittc2dpZCAiIgorIkRvbWFpbiBETlMgTmFtZSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCBkb21haW4udGxkIGFuZCBjYW4gb25seSBjb250YWluICIKKyJsZXR0ZXJzLCBudW1iZXJzLCBkYXNoZXMoLSksIHBlcmlvZHMoLiksIGFuZCB1bmRlcnNjb3JlcyhfKSAoZS5nLiAiCisibXl1bml2ZXJzaXR5LmVkdSkiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQyMQorbXNnaWQgIkRvbWFpbiBETlMgTmFtZSIKK21zZ3N0ciAiIgorCisjLiB1c2VybmFtZQorIzogYWRkb21haW4ucGhwOjQyNCBhZGRvbWFpbi5waHA6NTQzCittc2dpZCAiIgorIlVzZXJuYW1lIGNhbm5vdCBjb250YWluIHNpbmdsZSAoJykgb3IgZG91YmxlICgmcXVvdDspIHF1b3RlcywgbGVzcyB0aGFuICIKKyIoJmx0OyksIG9yIGdyZWF0ZXIgdGhhbiAoJmd0OykgYW5kIGNhbiBiZSBmcm9tIDIgdG8gNjQgY2hhcmFjdGVycyBsb25nIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MjUKK21zZ2lkICJVc2VybmFtZSIKK21zZ3N0ciAiIgorCisjLiBwYXNzd29yZAorIzogYWRkb21haW4ucGhwOjQyOCBhZGRvbWFpbi5waHA6NTUwCittc2dpZCAiUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA0IGNoYXJhY3RlcnMgbG9uZyIKK21zZ3N0ciAiIgorCisjLiBjb25maXJtIHBhc3N3b3JkCisjOiBhZGRvbWFpbi5waHA6NDMxCittc2dpZCAiQ29uZmlybSBQYXNzd29yZCIKK21zZ3N0ciAiIgorCisjLiB1c2UgZGF0YWJhc2UgaG9zdG5hbWUgY2hlY2tib3gKKyM6IGFkZG9tYWluLnBocDo0MzMKK21zZ2lkICJVc2UgRGF0YWJhc2UgSG9zdG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MzkKK21zZ2lkICJETlMgU2VydmVyKHMpIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0NTgKK21zZ2lkICIiCisiRWFjaCBBRCBEb21haW4gc2hvdWxkIGJlIGEgbWVtYmVyIG9mIGFuIEFEIERvbWFpbiByZXNvdXJjZSBncm91cC4gVGhlICIKKyJmb2xsb3dpbmcgZGlhbG9nIHdpbGwgYWxsb3cgeW91IHRvIGFkZCB0aGUgbmV3IEFEIERvbWFpbiB0byBhIGdyb3VwLiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgwCittc2dpZCAiIgorImRvbWFpbiBuYW1lIHJlZ2lzdGVyZWQgaW4gRE5TIGZvciBBY3RpdmUgRGlyZWN0b3J5IERvbWFpbiAoZXg6IGFkLmV4YW1wbGUuIgorImNvbSkiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ4MQorbXNnaWQgIlRoZXNlIGNyZWRlbnRpYWxzIHdpbGwgYmUgdXNlZCB0byByZWdpc3RlciByZXNlcnZlZCBjb21wdXRlcnMgd2l0aCBBRC4iCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ4MgorbXNnaWQgIiIKKyJjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBJUCBhZGRyZXNzZXMgZm9yIEROUyBzZXJ2ZXJzIHRoYXQgaGFuZGxlIERvbWFpbiBETlMiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ4MworbXNnaWQgIiIKKyJDaGVjayB0aGlzIG9wdGlvbiBpZiB5b3UgbGlrZSB0byBoYXZlIHRoZSBjb21wdXRlciBvYmplY3QgbmFtZXMgd2l0aGluIEFEIHRvICIKKyJtYXRjaCBWTSBob3N0bmFtZSBzdG9yZWQgd2l0aGluIHRoZSBWQ0wgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjUyOQorbXNnaWQgIkFuIEFEIGRvbWFpbiBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoaXMgbmFtZS4iCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjUzMworbXNnaWQgIlN1Ym1pdHRlZCBvd25lciBpcyBub3QgdmFsaWQiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjU2MQorbXNnaWQgIiIKKyJJbnZhbGlkIElQIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciBETlMgU2VydmVyIC0gbXVzdCBiZSBhIHZhbGlkIElQVjQgYWRkcmVzcyIKK21zZ3N0ciAiIgorCiAjOiBhdXRoZW50aWNhdGlvbi5waHA6MTU3IHV0aWxzLnBocDo4MjgKIG1zZ2lkICJXZWxjb21lIHRvIHRoZSBWaXJ0dWFsIENvbXB1dGluZyBMYWIiCiBtc2dzdHIgIkJpZW52ZW5pZG8gYWwgTGFib3JhdG9yaW8gVmlydHVhbCBkZSBDw7NtcHV0byIKQEAgLTEyNzMsNiArMTM2MCwxMCBAQAogbXNnaWQgIkxvY2F0aW9uIgogbXNnc3RyICJVYmljYWNpw7NuIgogCisjOiBncm91cHMucGhwOjI4NgorbXNnaWQgIkRlbGV0ZSBHcm91cCIKK21zZ3N0ciAiIgorCiAjOiBoZWxwLnBocDoyMTYgaGVscC5waHA6MjQ4CiBtc2dpZCAiQXV0aGVudGljYXRpb24gTWV0aG9kIgogbXNnc3RyICJNw6l0b2RvcyBkZSBhdXRlbnRpY2FjacOzbiIKQEAgLTE3NjksNiArMTg2MCwxOCBAQAogIkxhIHNpZ3VpZW50ZXMgcmV2aXNpb25lcyBlc3TDoW4gZW4gdXNvIHkgbm8gcHVlZGVuIHNlciBib3JyYWRhcyBlbiBlc3RlICIKICJtb21lbnRvIgogCisjOiBpbWFnZS5waHA6MTUwIGltYWdlLnBocDo0MzgKK21zZ2lkICJNYXggUmVzZXJ2YXRpb24gRHVyYXRpb24iCittc2dzdHIgIiIKKworIzogaW1hZ2UucGhwOjE3NTYKK21zZ2lkICJJbnZhbGlkIE1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiBzZWxlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBpbWFnZS5waHA6MTc3NworbXNnaWQgIkJhc2UgT1UgY2Fubm90IGJlIGNoYW5nZWQgZm9yIHRoZSBzZWxlY3RlZCBBRCBEb21haW4iCittc2dzdHIgIiIKKwogIzogbWFuYWdlbWVudG5vZGUucGhwOjI5NQogbXNnaWQgIiIKICJOYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgZGFzaGVzKC0pLCBwZXJpb2RzKC4pLCBhbmQgIgpAQCAtMzQxNyw2ICszNTIwLDE0IEBACiAiJXMgIGVzdMOhIGFob3JhIGVuIGVsIHByb2Nlc28gZGUgYWN0dWFsaXphY2nDs24gcGFyYSB1c2FyIG51ZXZhbWVudGUgIgogInJldmlzaW9uZXMgY3JlYWRhcy4iCiAKKyM6IHJlcXVlc3RzLnBocDoxMDY5Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgaW4gbWFpbnRlbmFuY2UgLSBDb250YWN0IGFkbWluIGZvciBoZWxwIgorbXNnc3RyICIiCisKKyM6IHJlcXVlc3RzLnBocDoxMDc1Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgYmVpbmcgY2FwdHVyZWQiCittc2dzdHIgIiIKKwogIzogcmVzb3VyY2UucGhwOjE3MgogbXNnaWQgIkVkaXQgR3JvdXBpbmcgJmFtcDsgTWFwcGluZyIKIG1zZ3N0ciAiRWRpdGFyIGFncnVwYWNpw7NuICZhbXA7IG1hcGVvIgpAQCAtMzg0NSw3ICszOTU2LDcgQEAKICJtZXNzYWdlIGhhcyBhIGRlZmF1bHQuIEFkZGl0aW9uYWxseSwgc2VwYXJhdGUgbWVzc2FnZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yICIKICJlYWNoIGFmZmlsaWF0aW9uLiBNb3N0IG9mIHRoZSBtZXNzYWdlcyB3aWxsIGhhdmUgcGFydHMgdGhhdCBhcmUgaW4gc3F1YXJlICIKICJicmFja2V0cy4gVGhlc2UgcGFydHMgd2lsbCBoYXZlIGRhdGEgc3Vic3RpdHV0ZWQgZm9yIHRoZW0gYmVmb3JlIHRoZSBtZXNzYWdlICIKLSJpcyBzZW50LiBBIGxpc3Qgb2Ygd2hhdCBjYW4gYmUgdXNlZCBpbiBzcXVlYXJlIGJyYWNrZXRzIGNhbiBiZSBmb3VuZCBhdCB0aGUgIgorImlzIHNlbnQuIEEgbGlzdCBvZiB3aGF0IGNhbiBiZSB1c2VkIGluIHNxdWFyZSBicmFja2V0cyBjYW4gYmUgZm91bmQgYXQgdGhlICIKICI8YSBocmVmPVwiJXNcIj5BcGFjaGUgVkNMIHdlYiBzaXRlPC9hPi4gU29tZSBtZXNzYWdlcyBhbHNvIGhhdmUgYSBzaG9ydCBmb3JtICIKICJ0aGF0IG1heSBiZSBzZW50IHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBwb3B1cCB3aXRoaW4gYSByZXNlcnZhdGlvbiB3aGVuICIKICJ0aGUgcmVzZXJ2YXRpb24gaXMgYWJvdXQgdG8gZW5kLiIKQEAgLTM5MTEsNiArNDAyMiwxOTIgQEAKIG1zZ2lkICJObyBjaGFuZ2VzIHRvIHN1Ym1pdHRlZCBtZXNzYWdlLiBOb3RoaW5nIHNhdmVkLiIKIG1zZ3N0ciAiTm8gaGF5IGNhbWJpb3MgZW4gZWwgbWVuc2FqZSBlbnZpYWRvLiBOYWRhIHNlIGd1YXJkw7MiCiAKKyM6IHNpdGVjb25maWcucGhwOjg3MworbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBmb3IgdGhlc2UgYWZmaWxpYXRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDo5NzkKK21zZ2lkICJEZWZhdWx0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwNjQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3VibWl0dGVkIHNldHRpbmcuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwOTAKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1pdGVkIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyMjgKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZGVsZXRlIGFkZHJlc3MgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzIKK21zZ2lkICJIZWxwIEVtYWlsIEFkZHJlc3MiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3MworbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIHVzZWQgYXMgdGhlIGZyb20gYWRkcmVzcyBmb3IgZW1haWxzIHNlbnQgYnkgdGhlICIKKyJWQ0wgc3lzdGVtIHRvIHVzZXJzLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc4CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiSGVscCBFbWFpbCBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc5IHNpdGVjb25maWcucGhwOjEzNzggc2l0ZWNvbmZpZy5waHA6MTQ3OAorIzogc2l0ZWNvbmZpZy5waHA6MTY4MSBzaXRlY29uZmlnLnBocDoxODEzIHNpdGVjb25maWcucGhwOjE5MjMKK21zZ2lkICJVcGRhdGUgc3VjY2Vzc2Z1bCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjgwCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiQWRkcmVzcyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcxCittc2dpZCAiU2l0ZSBXZWIgQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcyCittc2dpZCAiVGhpcyBpcyB0aGUgd2ViIGFkZHJlc3MgaW4gZW1haWxzIHNlbnQgYnkgdGhlIFZDTCBzeXN0ZW0gdG8gdXNlcnMuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzQKK21zZ2lkICJJbnZhbGlkIHdlYiBhZGRyZXNzKGVzKSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3NworIywgcGhwLWZvcm1hdAorbXNnaWQgIldlYiBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiV2ViIEFkZHJlc3MgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3MAorbXNnaWQgIktNUyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzEKK21zZ2lkICIiCisiVGhlc2UgYXJlIHRoZSBLTVMgc2VydmVycyBmb3IgYWN0aXZhdGluZyBXaW5kb3dzIGxpY2Vuc2luZy4gTXVsdGlwbGUgc2VydmVycyAiCisiYXJlIGFsbG93ZWQsIGRlbGltaXRlZCB3aXRoIGEgY29tbWEgKCwpLiBOb24gc3RhbmRhcmQgcG9ydHMgY2FuIGJlIHNwZWNpZmllZCAiCisiYWZ0ZXIgdGhlIHNlcnZlciBkZWxpbWl0ZWQgd2l0aCBhIGNvbG9uICg6KS4gKGV4OiBrbXMuZXhhbXBsZS5jb20sa21zMi4iCisiZXhhbXBsZS5jb206MjAwMCkiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3NAorbXNnaWQgIkludmFsaWQgSVAgb3IgaG9zdG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzcKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJLTVMgc2VydmVyIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiS01TIHNlcnZlciBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc1Cittc2dpZCAiU2l0ZSBUaGVtZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc2Cittc2dpZCAiVGhpcyBjb250cm9scyB0aGUgdGhlbWUgb2YgdGhlIHNpdGUgZGlzcGxheWVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc3Cittc2dpZCAiSW52YWxpZCB0aGVtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY4MAorIywgcGhwLWZvcm1hdAorbXNnaWQgIlRoZW1lIHNldHRpbmcgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2ODIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJUaGVtZSBzZXR0aW5nIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDcKK21zZ2lkICJMREFQIExvb2t1cCBmb3IgU2hpYmJvbGV0aCBBdXRoZW50aWNhdGVkIFVzZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDgKK21zZ2lkICIiCisiSWYgYW4gYWZmaWxpYXRpb24gZ2V0cyBjb25maWd1cmVkIGZvciBTaGliYm9sZXRoIGF1dGhlbnRpY2F0aW9uLCB0aGlzICIKKyJzcGVjaWZpZXMgdGhhdCBMREFQIGF1dGhlbnRpY2F0aW9uIGhhcyBhbHNvIGJlZW4gY29uZmlndXJlZCBmb3IgdGhhdCAiCisiYWZmaWxpYXRpb24gc28gdGhhdCBWQ0wgY2FuIHBlcmZvcm0gbG9va3VwcyBmb3IgbmV3IHVzZXJzIGJlZm9yZSB0aGV5IGxvZyBpbiAiCisidG8gVkNMLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODEyCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiTERBUCBsb29rdXAgc2V0dGluZyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxNAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkxEQVAgbG9va3VwIHNldHRpbmcgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxOSBzaXRlY29uZmlnLnBocDoxOTI4Cittc2dpZCAiTG9jYWwiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxNworbXNnaWQgIlNoaWJib2xldGggU2NvcGUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxOAorbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBTaGliYm9sZXRoIHNjb3BlIGZvciBhbiBhZmZpbGlhdGlvbiB3aGVuIFNoaWJib2xldGggIgorImF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MjIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJTaGliYm9sZXRoIHNjb3BlIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTI0CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiU2hpYmJvbGV0aCBzY29wZSBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUxCittc2dpZCAiQWZmaWxpYXRpb24gc3VjZXNzZnVsbHkgYWRkZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTIKK21zZ2lkICJBZmZpbGlhdGlvbiBzdWNlc3NmdWxseSBkZWxldGVkOyByZWxvYWRpbmcgcGFnZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUzCittc2dpZCAiVmFsdWVzIHVwZGF0ZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTUKK21zZ2lkICJJbnZhbGlkIHZhbHVlIC0gbXVzdCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDozMDc4Cittc2dpZCAiQWZmaWxpYXRpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MzA4NAorbXNnaWQgIkNvbmZsaWN0aW5nIEFmZmlsaWF0aW9uIHN1Ym1pdHRlZCIKK21zZ3N0ciAiIgorCiAjOiBzdGF0aXN0aWNzLnBocDo0NAogbXNnaWQgIlN0YXRpc3RpYyBJbmZvcm1hdGlvbiIKIG1zZ3N0ciAiSW5mb3JtYWNpw7NuIEVzdGFkw61zdGljYSIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvZXNfTVgvdmNsLnBvIGIvd2ViL2xvY2FsZS9wb19maWxlcy9lc19NWC92Y2wucG8KaW5kZXggNjQ3MDY4ZC4uNzY2NGQ2MSAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9wb19maWxlcy9lc19NWC92Y2wucG8KKysrIGIvd2ViL2xvY2FsZS9wb19maWxlcy9lc19NWC92Y2wucG8KQEAgLTE0LDExICsxNCwxMSBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IEFwYWNoZSBWQ0wgMi41XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41LjFcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogZGV2QHZjbC5hcGFjaGUub3JnXG4iCiAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDctMTQgMjI6MTktMDQwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDMtMDYgMTc6MTUtMDUwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogIDxqZnRob21wc0BhcGFjaGUub3JnPlxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMDYtMTMgMTU6MTgtMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9zaCBUaG9tcHNvbiA8amZ0aG9tcHNAYXBhY2hlLm9yZz5cbiIKICJMYW5ndWFnZS1UZWFtOiBcbiIKICJMYW5ndWFnZTogZXNfTVhcbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgpAQCAtMjYsNiArMjYsOTMgQEAKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjUuNVxuIgogCisjOiBhZGRvbWFpbi5waHA6MTcyCittc2dpZCAiIgorIkVycm9yIGVuY291bnRlcmVkIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgbmV3IEFEIGRvbWFpbi4gUGxlYXNlIGNvbnRhY3QgYW4gIgorImFkbWluIGZvciBhc3Npc3RhbmNlLiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDIwIGFkZG9tYWluLnBocDo1MzgKK21zZ2lkICIiCisiRG9tYWluIEROUyBOYW1lIHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0IGRvbWFpbi50bGQgYW5kIGNhbiBvbmx5IGNvbnRhaW4gIgorImxldHRlcnMsIG51bWJlcnMsIGRhc2hlcygtKSwgcGVyaW9kcyguKSwgYW5kIHVuZGVyc2NvcmVzKF8pIChlLmcuICIKKyJteXVuaXZlcnNpdHkuZWR1KSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDIxCittc2dpZCAiRG9tYWluIEROUyBOYW1lIgorbXNnc3RyICIiCisKKyMuIHVzZXJuYW1lCisjOiBhZGRvbWFpbi5waHA6NDI0IGFkZG9tYWluLnBocDo1NDMKK21zZ2lkICIiCisiVXNlcm5hbWUgY2Fubm90IGNvbnRhaW4gc2luZ2xlICgnKSBvciBkb3VibGUgKCZxdW90OykgcXVvdGVzLCBsZXNzIHRoYW4gIgorIigmbHQ7KSwgb3IgZ3JlYXRlciB0aGFuICgmZ3Q7KSBhbmQgY2FuIGJlIGZyb20gMiB0byA2NCBjaGFyYWN0ZXJzIGxvbmciCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQyNQorbXNnaWQgIlVzZXJuYW1lIgorbXNnc3RyICIiCisKKyMuIHBhc3N3b3JkCisjOiBhZGRvbWFpbi5waHA6NDI4IGFkZG9tYWluLnBocDo1NTAKK21zZ2lkICJQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycyBsb25nIgorbXNnc3RyICIiCisKKyMuIGNvbmZpcm0gcGFzc3dvcmQKKyM6IGFkZG9tYWluLnBocDo0MzEKK21zZ2lkICJDb25maXJtIFBhc3N3b3JkIgorbXNnc3RyICIiCisKKyMuIHVzZSBkYXRhYmFzZSBob3N0bmFtZSBjaGVja2JveAorIzogYWRkb21haW4ucGhwOjQzMworbXNnaWQgIlVzZSBEYXRhYmFzZSBIb3N0bmFtZXMiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQzOQorbXNnaWQgIkROUyBTZXJ2ZXIocykiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ1OAorbXNnaWQgIiIKKyJFYWNoIEFEIERvbWFpbiBzaG91bGQgYmUgYSBtZW1iZXIgb2YgYW4gQUQgRG9tYWluIHJlc291cmNlIGdyb3VwLiBUaGUgIgorImZvbGxvd2luZyBkaWFsb2cgd2lsbCBhbGxvdyB5b3UgdG8gYWRkIHRoZSBuZXcgQUQgRG9tYWluIHRvIGEgZ3JvdXAuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODAKK21zZ2lkICIiCisiZG9tYWluIG5hbWUgcmVnaXN0ZXJlZCBpbiBETlMgZm9yIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluIChleDogYWQuZXhhbXBsZS4iCisiY29tKSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgxCittc2dpZCAiVGhlc2UgY3JlZGVudGlhbHMgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHJlc2VydmVkIGNvbXB1dGVycyB3aXRoIEFELiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgyCittc2dpZCAiIgorImNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIElQIGFkZHJlc3NlcyBmb3IgRE5TIHNlcnZlcnMgdGhhdCBoYW5kbGUgRG9tYWluIEROUyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgzCittc2dpZCAiIgorIkNoZWNrIHRoaXMgb3B0aW9uIGlmIHlvdSBsaWtlIHRvIGhhdmUgdGhlIGNvbXB1dGVyIG9iamVjdCBuYW1lcyB3aXRoaW4gQUQgdG8gIgorIm1hdGNoIFZNIGhvc3RuYW1lIHN0b3JlZCB3aXRoaW4gdGhlIFZDTCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTI5Cittc2dpZCAiQW4gQUQgZG9tYWluIGFscmVhZHkgZXhpc3RzIHdpdGggdGhpcyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTMzCittc2dpZCAiU3VibWl0dGVkIG93bmVyIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTYxCittc2dpZCAiIgorIkludmFsaWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQgZm9yIEROUyBTZXJ2ZXIgLSBtdXN0IGJlIGEgdmFsaWQgSVBWNCBhZGRyZXNzIgorbXNnc3RyICIiCisKICM6IGF1dGhlbnRpY2F0aW9uLnBocDoxNTcgdXRpbHMucGhwOjgyOAogbXNnaWQgIldlbGNvbWUgdG8gdGhlIFZpcnR1YWwgQ29tcHV0aW5nIExhYiIKIG1zZ3N0ciAiQmllbnZlbmlkbyBhbCBMYWJvcmF0b3JpbyBWaXJ0dWFsIGRlIEPzbXB1dG8iCkBAIC0xMDEwLDYgKzEwOTcsMTAgQEAKIG1zZ2lkICJMb2NhdGlvbiIKIG1zZ3N0ciAiIgogCisjOiBncm91cHMucGhwOjI4NgorbXNnaWQgIkRlbGV0ZSBHcm91cCIKK21zZ3N0ciAiIgorCiAjOiBoZWxwLnBocDoyMTYgaGVscC5waHA6MjQ4CiBtc2dpZCAiQXV0aGVudGljYXRpb24gTWV0aG9kIgogbXNnc3RyICIiCkBAIC0xNDA5LDYgKzE1MDAsMTggQEAKIG1zZ2lkICJUaGUgZm9sbG93aW5nIHJldmlzaW9ucyBhcmUgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCBhdCB0aGlzIHRpbWU6IgogbXNnc3RyICIiCiAKKyM6IGltYWdlLnBocDoxNTAgaW1hZ2UucGhwOjQzOAorbXNnaWQgIk1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBpbWFnZS5waHA6MTc1NgorbXNnaWQgIkludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGltYWdlLnBocDoxNzc3Cittc2dpZCAiQmFzZSBPVSBjYW5ub3QgYmUgY2hhbmdlZCBmb3IgdGhlIHNlbGVjdGVkIEFEIERvbWFpbiIKK21zZ3N0ciAiIgorCiAjOiBtYW5hZ2VtZW50bm9kZS5waHA6Mjk1CiBtc2dpZCAiTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcygtKSwgcGVyaW9kcyguKSwgYW5kIHVuZGVyc2NvcmVzKF8pLiBJdCBjYW4gYmUgZnJvbSAxIHRvIDUwIGNoYXJhY3RlcnMgbG9uZy4iCiBtc2dzdHIgIiIKQEAgLTI2NzQsNiArMjc3NywxNCBAQAogbXNnaWQgIiVzIGlzIG5vdyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3bHkgY3JlYXRlZCByZXZpc2lvbi4iCiBtc2dzdHIgIiIKIAorIzogcmVxdWVzdHMucGhwOjEwNjkKK21zZ2lkICJSZXNlcnZhdGlvbiBpcyBpbiBtYWludGVuYW5jZSAtIENvbnRhY3QgYWRtaW4gZm9yIGhlbHAiCittc2dzdHIgIiIKKworIzogcmVxdWVzdHMucGhwOjEwNzUKK21zZ2lkICJSZXNlcnZhdGlvbiBpcyBiZWluZyBjYXB0dXJlZCIKK21zZ3N0ciAiIgorCiAjOiByZXNvdXJjZS5waHA6MTcyCiBtc2dpZCAiRWRpdCBHcm91cGluZyAmYW1wOyBNYXBwaW5nIgogbXNnc3RyICIiCkBAIC0yOTk4LDcgKzMxMDksNyBAQAogCiAjOiBzaXRlY29uZmlnLnBocDoxNTE3CiAjLCBwaHAtZm9ybWF0Ci1tc2dpZCAiVGhpcyBzZWN0aW9uIGFsbG93cyBmb3IgY29uZmlndXJhdGlvbiBvZiBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXJzIGFuZCBhZG1pbmlzdHJhdG9ycyBhYm91dCB0aGluZ3Mgc3VjaCBhcyByZXNlcnZhdGlvbnMgYW5kIGltYWdlIG1hbmFnZW1lbnQuIEV2ZXJ5IG1lc3NhZ2UgaGFzIGEgZGVmYXVsdC4gQWRkaXRpb25hbGx5LCBzZXBhcmF0ZSBtZXNzYWdlcyBjYW4gYmUgY29uZmlndXJlZCBmb3IgZWFjaCBhZmZpbGlhdGlvbi4gTW9zdCBvZiB0aGUgbWVzc2FnZXMgd2lsbCBoYXZlIHBhcnRzIHRoYXQgYXJlIGluIHNxdWFyZSBicmFja2V0cy4gVGhlc2UgcGFydHMgd2lsbCBoYXZlIGRhdGEgc3Vic3RpdHV0ZWQgZm9yIHRoZW0gYmVmb3JlIHRoZSBtZXNzYWdlIGlzIHNlbnQuIEEgbGlzdCBvZiB3aGF0IGNhbiBiZSB1c2VkIGluIHNxdWVhcmUgYnJhY2tldHMgY2FuIGJlIGZvdW5kIGF0IHRoZSA8YSBocmVmPVwiJXNcIj5BcGFjaGUgVkNMIHdlYiBzaXRlPC9hPi4gU29tZSBtZXNzYWdlcyBhbHNvIGhhdmUgYSBzaG9ydCBmb3JtIHRoYXQgbWF5IGJlIHNlbnQgc3VjaCBhcyBpbiB0aGUgZm9ybSBvZiBhIHBvcHVwIHdpdGhpbiBhIHJlc2VydmF0aW9uIHdoZW4gdGhlIHJlc2VydmF0aW9uIGlzIGFib3V0IHRvIGVuZC4iCittc2dpZCAiVGhpcyBzZWN0aW9uIGFsbG93cyBmb3IgY29uZmlndXJhdGlvbiBvZiBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXJzIGFuZCBhZG1pbmlzdHJhdG9ycyBhYm91dCB0aGluZ3Mgc3VjaCBhcyByZXNlcnZhdGlvbnMgYW5kIGltYWdlIG1hbmFnZW1lbnQuIEV2ZXJ5IG1lc3NhZ2UgaGFzIGEgZGVmYXVsdC4gQWRkaXRpb25hbGx5LCBzZXBhcmF0ZSBtZXNzYWdlcyBjYW4gYmUgY29uZmlndXJlZCBmb3IgZWFjaCBhZmZpbGlhdGlvbi4gTW9zdCBvZiB0aGUgbWVzc2FnZXMgd2lsbCBoYXZlIHBhcnRzIHRoYXQgYXJlIGluIHNxdWFyZSBicmFja2V0cy4gVGhlc2UgcGFydHMgd2lsbCBoYXZlIGRhdGEgc3Vic3RpdHV0ZWQgZm9yIHRoZW0gYmVmb3JlIHRoZSBtZXNzYWdlIGlzIHNlbnQuIEEgbGlzdCBvZiB3aGF0IGNhbiBiZSB1c2VkIGluIHNxdWFyZSBicmFja2V0cyBjYW4gYmUgZm91bmQgYXQgdGhlIDxhIGhyZWY9XCIlc1wiPkFwYWNoZSBWQ0wgd2ViIHNpdGU8L2E+LiBTb21lIG1lc3NhZ2VzIGFsc28gaGF2ZSBhIHNob3J0IGZvcm0gdGhhdCBtYXkgYmUgc2VudCBzdWNoIGFzIGluIHRoZSBmb3JtIG9mIGEgcG9wdXAgd2l0aGluIGEgcmVzZXJ2YXRpb24gd2hlbiB0aGUgcmVzZXJ2YXRpb24gaXMgYWJvdXQgdG8gZW5kLiIKIG1zZ3N0ciAiIgogCiAjOiBzaXRlY29uZmlnLnBocDoxNTgyCkBAIC0zMDQyLDYgKzMxNTMsMTkyIEBACiBtc2dpZCAiTm8gY2hhbmdlcyB0byBzdWJtaXR0ZWQgbWVzc2FnZS4gTm90aGluZyBzYXZlZC4iCiBtc2dzdHIgIiIKIAorIzogc2l0ZWNvbmZpZy5waHA6ODczCittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBkYXRhIGZvciB0aGVzZSBhZmZpbGlhdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjk3OQorbXNnaWQgIkRlZmF1bHQgdmFsdWUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTA2NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gbW9kaWZ5IHRoZSBzdWJtaXR0ZWQgc2V0dGluZy4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTA5MAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibWl0ZWQgdmFsdWUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTIyOAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBkZWxldGUgYWRkcmVzcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3MgorbXNnaWQgIkhlbHAgRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjczCittc2dpZCAiIgorIlRoaXMgaXMgdGhlIGVtYWlsIGFkZHJlc3MgdXNlZCBhcyB0aGUgZnJvbSBhZGRyZXNzIGZvciBlbWFpbHMgc2VudCBieSB0aGUgIgorIlZDTCBzeXN0ZW0gdG8gdXNlcnMuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzgKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJIZWxwIEVtYWlsIEFkZHJlc3MgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzkgc2l0ZWNvbmZpZy5waHA6MTM3OCBzaXRlY29uZmlnLnBocDoxNDc4CisjOiBzaXRlY29uZmlnLnBocDoxNjgxIHNpdGVjb25maWcucGhwOjE4MTMgc2l0ZWNvbmZpZy5waHA6MTkyMworbXNnaWQgIlVwZGF0ZSBzdWNjZXNzZnVsIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyODAKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJBZGRyZXNzIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzEKK21zZ2lkICJTaXRlIFdlYiBBZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzIKK21zZ2lkICJUaGlzIGlzIHRoZSB3ZWIgYWRkcmVzcyBpbiBlbWFpbHMgc2VudCBieSB0aGUgVkNMIHN5c3RlbSB0byB1c2Vycy4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3NAorbXNnaWQgIkludmFsaWQgd2ViIGFkZHJlc3MoZXMpIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzc3CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiV2ViIEFkZHJlc3MgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzkKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJXZWIgQWRkcmVzcyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDcwCittc2dpZCAiS01TIFNlcnZlcnMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3MQorbXNnaWQgIiIKKyJUaGVzZSBhcmUgdGhlIEtNUyBzZXJ2ZXJzIGZvciBhY3RpdmF0aW5nIFdpbmRvd3MgbGljZW5zaW5nLiBNdWx0aXBsZSBzZXJ2ZXJzICIKKyJhcmUgYWxsb3dlZCwgZGVsaW1pdGVkIHdpdGggYSBjb21tYSAoLCkuIE5vbiBzdGFuZGFyZCBwb3J0cyBjYW4gYmUgc3BlY2lmaWVkICIKKyJhZnRlciB0aGUgc2VydmVyIGRlbGltaXRlZCB3aXRoIGEgY29sb24gKDopLiAoZXg6IGttcy5leGFtcGxlLmNvbSxrbXMyLiIKKyJleGFtcGxlLmNvbToyMDAwKSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDc0Cittc2dpZCAiSW52YWxpZCBJUCBvciBob3N0bmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3NworIywgcGhwLWZvcm1hdAorbXNnaWQgIktNUyBzZXJ2ZXIgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzkKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJLTVMgc2VydmVyIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2NzUKK21zZ2lkICJTaXRlIFRoZW1lIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2NzYKK21zZ2lkICJUaGlzIGNvbnRyb2xzIHRoZSB0aGVtZSBvZiB0aGUgc2l0ZSBkaXNwbGF5ZWQgZm9yIGVhY2ggYWZmaWxpYXRpb24uIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2NzcKK21zZ2lkICJJbnZhbGlkIHRoZW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjgwCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiVGhlbWUgc2V0dGluZyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY4MgorIywgcGhwLWZvcm1hdAorbXNnaWQgIlRoZW1lIHNldHRpbmcgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgwNworbXNnaWQgIkxEQVAgTG9va3VwIGZvciBTaGliYm9sZXRoIEF1dGhlbnRpY2F0ZWQgVXNlcnMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgwOAorbXNnaWQgIiIKKyJJZiBhbiBhZmZpbGlhdGlvbiBnZXRzIGNvbmZpZ3VyZWQgZm9yIFNoaWJib2xldGggYXV0aGVudGljYXRpb24sIHRoaXMgIgorInNwZWNpZmllcyB0aGF0IExEQVAgYXV0aGVudGljYXRpb24gaGFzIGFsc28gYmVlbiBjb25maWd1cmVkIGZvciB0aGF0ICIKKyJhZmZpbGlhdGlvbiBzbyB0aGF0IFZDTCBjYW4gcGVyZm9ybSBsb29rdXBzIGZvciBuZXcgdXNlcnMgYmVmb3JlIHRoZXkgbG9nIGluICIKKyJ0byBWQ0wuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MTIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJMREFQIGxvb2t1cCBzZXR0aW5nIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODE0CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiTERBUCBsb29rdXAgc2V0dGluZyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODE5IHNpdGVjb25maWcucGhwOjE5MjgKK21zZ2lkICJMb2NhbCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTE3Cittc2dpZCAiU2hpYmJvbGV0aCBTY29wZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTE4Cittc2dpZCAiIgorIlRoaXMgaXMgdGhlIFNoaWJib2xldGggc2NvcGUgZm9yIGFuIGFmZmlsaWF0aW9uIHdoZW4gU2hpYmJvbGV0aCAiCisiYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkyMgorIywgcGhwLWZvcm1hdAorbXNnaWQgIlNoaWJib2xldGggc2NvcGUgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MjQKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJTaGliYm9sZXRoIHNjb3BlIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTEKK21zZ2lkICJBZmZpbGlhdGlvbiBzdWNlc3NmdWxseSBhZGRlZDsgcmVsb2FkaW5nIHBhZ2UiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6Mjg1MgorbXNnaWQgIkFmZmlsaWF0aW9uIHN1Y2Vzc2Z1bGx5IGRlbGV0ZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTMKK21zZ2lkICJWYWx1ZXMgdXBkYXRlZDsgcmVsb2FkaW5nIHBhZ2UiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6Mjg1NQorbXNnaWQgIkludmFsaWQgdmFsdWUgLSBtdXN0IgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjMwNzgKK21zZ2lkICJBZmZpbGlhdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDozMDg0Cittc2dpZCAiQ29uZmxpY3RpbmcgQWZmaWxpYXRpb24gc3VibWl0dGVkIgorbXNnc3RyICIiCisKICM6IHN0YXRpc3RpY3MucGhwOjQ0CiBtc2dpZCAiU3RhdGlzdGljIEluZm9ybWF0aW9uIgogbXNnc3RyICJJbmZvcm1hY2nzbiBFc3RhZO1zdGljYSIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvZnJfQ0EvdmNsLnBvIGIvd2ViL2xvY2FsZS9wb19maWxlcy9mcl9DQS92Y2wucG8KaW5kZXggMjA5NjdkMS4uYzBkN2UxMyAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9wb19maWxlcy9mcl9DQS92Y2wucG8KKysrIGIvd2ViL2xvY2FsZS9wb19maWxlcy9mcl9DQS92Y2wucG8KQEAgLTE0LDEwICsxNCwxMCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IEFwYWNoZSBWQ0wgMi41XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41LjFcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogZGV2QHZjbC5hcGFjaGUub3JnXG4iCiAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDctMTQgMjI6MTktMDQwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDQtMTYgMTU6MDcrMDAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMDYtMTMgMTU6MTgtMDQwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogQ2hhcmxlcyBSb2dlciBTSU1FVSA8Y3JzaW1ldUB5YWhvby5mcj5cbiIKICJMYW5ndWFnZS1UZWFtOiBcbiIKICJMYW5ndWFnZTogZnJfQ0FcbiIKQEAgLTI1LDYgKzI1LDkzIEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKKyM6IGFkZG9tYWluLnBocDoxNzIKK21zZ2lkICIiCisiRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBuZXcgQUQgZG9tYWluLiBQbGVhc2UgY29udGFjdCBhbiAiCisiYWRtaW4gZm9yIGFzc2lzdGFuY2UuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MjAgYWRkb21haW4ucGhwOjUzOAorbXNnaWQgIiIKKyJEb21haW4gRE5TIE5hbWUgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgZG9tYWluLnRsZCBhbmQgY2FuIG9ubHkgY29udGFpbiAiCisibGV0dGVycywgbnVtYmVycywgZGFzaGVzKC0pLCBwZXJpb2RzKC4pLCBhbmQgdW5kZXJzY29yZXMoXykgKGUuZy4gIgorIm15dW5pdmVyc2l0eS5lZHUpIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MjEKK21zZ2lkICJEb21haW4gRE5TIE5hbWUiCittc2dzdHIgIiIKKworIy4gdXNlcm5hbWUKKyM6IGFkZG9tYWluLnBocDo0MjQgYWRkb21haW4ucGhwOjU0MworbXNnaWQgIiIKKyJVc2VybmFtZSBjYW5ub3QgY29udGFpbiBzaW5nbGUgKCcpIG9yIGRvdWJsZSAoJnF1b3Q7KSBxdW90ZXMsIGxlc3MgdGhhbiAiCisiKCZsdDspLCBvciBncmVhdGVyIHRoYW4gKCZndDspIGFuZCBjYW4gYmUgZnJvbSAyIHRvIDY0IGNoYXJhY3RlcnMgbG9uZyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDI1Cittc2dpZCAiVXNlcm5hbWUiCittc2dzdHIgIiIKKworIy4gcGFzc3dvcmQKKyM6IGFkZG9tYWluLnBocDo0MjggYWRkb21haW4ucGhwOjU1MAorbXNnaWQgIlBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNCBjaGFyYWN0ZXJzIGxvbmciCittc2dzdHIgIiIKKworIy4gY29uZmlybSBwYXNzd29yZAorIzogYWRkb21haW4ucGhwOjQzMQorbXNnaWQgIkNvbmZpcm0gUGFzc3dvcmQiCittc2dzdHIgIiIKKworIy4gdXNlIGRhdGFiYXNlIGhvc3RuYW1lIGNoZWNrYm94CisjOiBhZGRvbWFpbi5waHA6NDMzCittc2dpZCAiVXNlIERhdGFiYXNlIEhvc3RuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDM5Cittc2dpZCAiRE5TIFNlcnZlcihzKSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDU4Cittc2dpZCAiIgorIkVhY2ggQUQgRG9tYWluIHNob3VsZCBiZSBhIG1lbWJlciBvZiBhbiBBRCBEb21haW4gcmVzb3VyY2UgZ3JvdXAuIFRoZSAiCisiZm9sbG93aW5nIGRpYWxvZyB3aWxsIGFsbG93IHlvdSB0byBhZGQgdGhlIG5ldyBBRCBEb21haW4gdG8gYSBncm91cC4iCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ4MAorbXNnaWQgIiIKKyJkb21haW4gbmFtZSByZWdpc3RlcmVkIGluIEROUyBmb3IgQWN0aXZlIERpcmVjdG9yeSBEb21haW4gKGV4OiBhZC5leGFtcGxlLiIKKyJjb20pIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODEKK21zZ2lkICJUaGVzZSBjcmVkZW50aWFscyB3aWxsIGJlIHVzZWQgdG8gcmVnaXN0ZXIgcmVzZXJ2ZWQgY29tcHV0ZXJzIHdpdGggQUQuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODIKK21zZ2lkICIiCisiY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIGZvciBETlMgc2VydmVycyB0aGF0IGhhbmRsZSBEb21haW4gRE5TIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODMKK21zZ2lkICIiCisiQ2hlY2sgdGhpcyBvcHRpb24gaWYgeW91IGxpa2UgdG8gaGF2ZSB0aGUgY29tcHV0ZXIgb2JqZWN0IG5hbWVzIHdpdGhpbiBBRCB0byAiCisibWF0Y2ggVk0gaG9zdG5hbWUgc3RvcmVkIHdpdGhpbiB0aGUgVkNMIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1MjkKK21zZ2lkICJBbiBBRCBkb21haW4gYWxyZWFkeSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1MzMKK21zZ2lkICJTdWJtaXR0ZWQgb3duZXIgaXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1NjEKK21zZ2lkICIiCisiSW52YWxpZCBJUCBhZGRyZXNzIHNwZWNpZmllZCBmb3IgRE5TIFNlcnZlciAtIG11c3QgYmUgYSB2YWxpZCBJUFY0IGFkZHJlc3MiCittc2dzdHIgIiIKKwogIzogYXV0aGVudGljYXRpb24ucGhwOjE1NyB1dGlscy5waHA6ODI4CiBtc2dpZCAiV2VsY29tZSB0byB0aGUgVmlydHVhbCBDb21wdXRpbmcgTGFiIgogbXNnc3RyICJCaWVudmVudWUgYXUgbGFib3JhdG9pcmUgSW5mb3JtYXRpcXVlIFZpcnR1ZWwgKFZDTCkiCkBAIC0xMDA5LDYgKzEwOTYsMTAgQEAKIG1zZ2lkICJMb2NhdGlvbiIKIG1zZ3N0ciAiIgogCisjOiBncm91cHMucGhwOjI4NgorbXNnaWQgIkRlbGV0ZSBHcm91cCIKK21zZ3N0ciAiIgorCiAjOiBoZWxwLnBocDoyMTYgaGVscC5waHA6MjQ4CiBtc2dpZCAiQXV0aGVudGljYXRpb24gTWV0aG9kIgogbXNnc3RyICIiCkBAIC0xNDA4LDYgKzE0OTksMTggQEAKIG1zZ2lkICJUaGUgZm9sbG93aW5nIHJldmlzaW9ucyBhcmUgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCBhdCB0aGlzIHRpbWU6IgogbXNnc3RyICJMZXMgcul2aXNpb25zIHN1aXZhbnRlcyBzb250IGVuIGNvdXJzIGQndXRpbGlzYXRpb24gZXQgbmUgcGV1dmVudCDqdHJlIHN1cHByaW3pZXMgcG91ciBsJ2luc3RhbnQiCiAKKyM6IGltYWdlLnBocDoxNTAgaW1hZ2UucGhwOjQzOAorbXNnaWQgIk1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBpbWFnZS5waHA6MTc1NgorbXNnaWQgIkludmFsaWQgTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGltYWdlLnBocDoxNzc3Cittc2dpZCAiQmFzZSBPVSBjYW5ub3QgYmUgY2hhbmdlZCBmb3IgdGhlIHNlbGVjdGVkIEFEIERvbWFpbiIKK21zZ3N0ciAiIgorCiAjOiBtYW5hZ2VtZW50bm9kZS5waHA6Mjk1CiBtc2dpZCAiTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcygtKSwgcGVyaW9kcyguKSwgYW5kIHVuZGVyc2NvcmVzKF8pLiBJdCBjYW4gYmUgZnJvbSAxIHRvIDUwIGNoYXJhY3RlcnMgbG9uZy4iCiBtc2dzdHIgIiIKQEAgLTI2NzMsNiArMjc3NiwxNCBAQAogbXNnaWQgIiVzIGlzIG5vdyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3bHkgY3JlYXRlZCByZXZpc2lvbi4iCiBtc2dzdHIgIiVzIGVzdCBtYWludGVuYW50IGRhbnMgbGUgcHJvY2Vzc3VzIGRlIG1pc2Ug4CBqb3VyIHBvdXIgdXRpbGlzZXIgbGEgbm91dmVsbGUgcul2aXNpb24gY3Lp6WUiCiAKKyM6IHJlcXVlc3RzLnBocDoxMDY5Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgaW4gbWFpbnRlbmFuY2UgLSBDb250YWN0IGFkbWluIGZvciBoZWxwIgorbXNnc3RyICIiCisKKyM6IHJlcXVlc3RzLnBocDoxMDc1Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgYmVpbmcgY2FwdHVyZWQiCittc2dzdHIgIiIKKwogIzogcmVzb3VyY2UucGhwOjE3MgogbXNnaWQgIkVkaXQgR3JvdXBpbmcgJmFtcDsgTWFwcGluZyIKIG1zZ3N0ciAiyWRpdGVyIGxlcyBncm91cGFnZXMgZXQgbGVzIG1hcHBhZ2VzIgpAQCAtMjk5Nyw3ICszMTA4LDcgQEAKIAogIzogc2l0ZWNvbmZpZy5waHA6MTUxNwogIywgcGhwLWZvcm1hdAotbXNnaWQgIlRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIGNvbmZpZ3VyYXRpb24gb2YgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCB0byB1c2VycyBhbmQgYWRtaW5pc3RyYXRvcnMgYWJvdXQgdGhpbmdzIHN1Y2ggYXMgcmVzZXJ2YXRpb25zIGFuZCBpbWFnZSBtYW5hZ2VtZW50LiBFdmVyeSBtZXNzYWdlIGhhcyBhIGRlZmF1bHQuIEFkZGl0aW9uYWxseSwgc2VwYXJhdGUgbWVzc2FnZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGVhY2ggYWZmaWxpYXRpb24uIE1vc3Qgb2YgdGhlIG1lc3NhZ2VzIHdpbGwgaGF2ZSBwYXJ0cyB0aGF0IGFyZSBpbiBzcXVhcmUgYnJhY2tldHMuIFRoZXNlIHBhcnRzIHdpbGwgaGF2ZSBkYXRhIHN1YnN0aXR1dGVkIGZvciB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBzZW50LiBBIGxpc3Qgb2Ygd2hhdCBjYW4gYmUgdXNlZCBpbiBzcXVlYXJlIGJyYWNrZXRzIGNhbiBiZSBmb3VuZCBhdCB0aGUgPGEgaHJlZj1cIiVzXCI+QXBhY2hlIFZDTCB3ZWIgc2l0ZTwvYT4uIFNvbWUgbWVzc2FnZXMgYWxzbyBoYXZlIGEgc2hvcnQgZm9ybSB0aGF0IG1heSBiZSBzZW50IHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBwb3B1cCB3aXRoaW4gYSByZXNlcnZhdGlvbiB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBhYm91dCB0byBlbmQuIgorbXNnaWQgIlRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIGNvbmZpZ3VyYXRpb24gb2YgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCB0byB1c2VycyBhbmQgYWRtaW5pc3RyYXRvcnMgYWJvdXQgdGhpbmdzIHN1Y2ggYXMgcmVzZXJ2YXRpb25zIGFuZCBpbWFnZSBtYW5hZ2VtZW50LiBFdmVyeSBtZXNzYWdlIGhhcyBhIGRlZmF1bHQuIEFkZGl0aW9uYWxseSwgc2VwYXJhdGUgbWVzc2FnZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGVhY2ggYWZmaWxpYXRpb24uIE1vc3Qgb2YgdGhlIG1lc3NhZ2VzIHdpbGwgaGF2ZSBwYXJ0cyB0aGF0IGFyZSBpbiBzcXVhcmUgYnJhY2tldHMuIFRoZXNlIHBhcnRzIHdpbGwgaGF2ZSBkYXRhIHN1YnN0aXR1dGVkIGZvciB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBzZW50LiBBIGxpc3Qgb2Ygd2hhdCBjYW4gYmUgdXNlZCBpbiBzcXVhcmUgYnJhY2tldHMgY2FuIGJlIGZvdW5kIGF0IHRoZSA8YSBocmVmPVwiJXNcIj5BcGFjaGUgVkNMIHdlYiBzaXRlPC9hPi4gU29tZSBtZXNzYWdlcyBhbHNvIGhhdmUgYSBzaG9ydCBmb3JtIHRoYXQgbWF5IGJlIHNlbnQgc3VjaCBhcyBpbiB0aGUgZm9ybSBvZiBhIHBvcHVwIHdpdGhpbiBhIHJlc2VydmF0aW9uIHdoZW4gdGhlIHJlc2VydmF0aW9uIGlzIGFib3V0IHRvIGVuZC4iCiBtc2dzdHIgIiIKIAogIzogc2l0ZWNvbmZpZy5waHA6MTU4MgpAQCAtMzA0MSw2ICszMTUyLDE5MiBAQAogbXNnaWQgIk5vIGNoYW5nZXMgdG8gc3VibWl0dGVkIG1lc3NhZ2UuIE5vdGhpbmcgc2F2ZWQuIgogbXNnc3RyICIiCiAKKyM6IHNpdGVjb25maWcucGhwOjg3MworbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBmb3IgdGhlc2UgYWZmaWxpYXRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDo5NzkKK21zZ2lkICJEZWZhdWx0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwNjQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3VibWl0dGVkIHNldHRpbmcuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwOTAKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1pdGVkIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyMjgKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZGVsZXRlIGFkZHJlc3MgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzIKK21zZ2lkICJIZWxwIEVtYWlsIEFkZHJlc3MiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3MworbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIHVzZWQgYXMgdGhlIGZyb20gYWRkcmVzcyBmb3IgZW1haWxzIHNlbnQgYnkgdGhlICIKKyJWQ0wgc3lzdGVtIHRvIHVzZXJzLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc4CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiSGVscCBFbWFpbCBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc5IHNpdGVjb25maWcucGhwOjEzNzggc2l0ZWNvbmZpZy5waHA6MTQ3OAorIzogc2l0ZWNvbmZpZy5waHA6MTY4MSBzaXRlY29uZmlnLnBocDoxODEzIHNpdGVjb25maWcucGhwOjE5MjMKK21zZ2lkICJVcGRhdGUgc3VjY2Vzc2Z1bCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjgwCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiQWRkcmVzcyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcxCittc2dpZCAiU2l0ZSBXZWIgQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcyCittc2dpZCAiVGhpcyBpcyB0aGUgd2ViIGFkZHJlc3MgaW4gZW1haWxzIHNlbnQgYnkgdGhlIFZDTCBzeXN0ZW0gdG8gdXNlcnMuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzQKK21zZ2lkICJJbnZhbGlkIHdlYiBhZGRyZXNzKGVzKSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3NworIywgcGhwLWZvcm1hdAorbXNnaWQgIldlYiBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiV2ViIEFkZHJlc3MgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3MAorbXNnaWQgIktNUyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzEKK21zZ2lkICIiCisiVGhlc2UgYXJlIHRoZSBLTVMgc2VydmVycyBmb3IgYWN0aXZhdGluZyBXaW5kb3dzIGxpY2Vuc2luZy4gTXVsdGlwbGUgc2VydmVycyAiCisiYXJlIGFsbG93ZWQsIGRlbGltaXRlZCB3aXRoIGEgY29tbWEgKCwpLiBOb24gc3RhbmRhcmQgcG9ydHMgY2FuIGJlIHNwZWNpZmllZCAiCisiYWZ0ZXIgdGhlIHNlcnZlciBkZWxpbWl0ZWQgd2l0aCBhIGNvbG9uICg6KS4gKGV4OiBrbXMuZXhhbXBsZS5jb20sa21zMi4iCisiZXhhbXBsZS5jb206MjAwMCkiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3NAorbXNnaWQgIkludmFsaWQgSVAgb3IgaG9zdG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzcKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJLTVMgc2VydmVyIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiS01TIHNlcnZlciBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc1Cittc2dpZCAiU2l0ZSBUaGVtZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc2Cittc2dpZCAiVGhpcyBjb250cm9scyB0aGUgdGhlbWUgb2YgdGhlIHNpdGUgZGlzcGxheWVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc3Cittc2dpZCAiSW52YWxpZCB0aGVtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY4MAorIywgcGhwLWZvcm1hdAorbXNnaWQgIlRoZW1lIHNldHRpbmcgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2ODIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJUaGVtZSBzZXR0aW5nIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDcKK21zZ2lkICJMREFQIExvb2t1cCBmb3IgU2hpYmJvbGV0aCBBdXRoZW50aWNhdGVkIFVzZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDgKK21zZ2lkICIiCisiSWYgYW4gYWZmaWxpYXRpb24gZ2V0cyBjb25maWd1cmVkIGZvciBTaGliYm9sZXRoIGF1dGhlbnRpY2F0aW9uLCB0aGlzICIKKyJzcGVjaWZpZXMgdGhhdCBMREFQIGF1dGhlbnRpY2F0aW9uIGhhcyBhbHNvIGJlZW4gY29uZmlndXJlZCBmb3IgdGhhdCAiCisiYWZmaWxpYXRpb24gc28gdGhhdCBWQ0wgY2FuIHBlcmZvcm0gbG9va3VwcyBmb3IgbmV3IHVzZXJzIGJlZm9yZSB0aGV5IGxvZyBpbiAiCisidG8gVkNMLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODEyCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiTERBUCBsb29rdXAgc2V0dGluZyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxNAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkxEQVAgbG9va3VwIHNldHRpbmcgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxOSBzaXRlY29uZmlnLnBocDoxOTI4Cittc2dpZCAiTG9jYWwiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxNworbXNnaWQgIlNoaWJib2xldGggU2NvcGUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxOAorbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBTaGliYm9sZXRoIHNjb3BlIGZvciBhbiBhZmZpbGlhdGlvbiB3aGVuIFNoaWJib2xldGggIgorImF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MjIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJTaGliYm9sZXRoIHNjb3BlIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTI0CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiU2hpYmJvbGV0aCBzY29wZSBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUxCittc2dpZCAiQWZmaWxpYXRpb24gc3VjZXNzZnVsbHkgYWRkZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTIKK21zZ2lkICJBZmZpbGlhdGlvbiBzdWNlc3NmdWxseSBkZWxldGVkOyByZWxvYWRpbmcgcGFnZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUzCittc2dpZCAiVmFsdWVzIHVwZGF0ZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTUKK21zZ2lkICJJbnZhbGlkIHZhbHVlIC0gbXVzdCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDozMDc4Cittc2dpZCAiQWZmaWxpYXRpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MzA4NAorbXNnaWQgIkNvbmZsaWN0aW5nIEFmZmlsaWF0aW9uIHN1Ym1pdHRlZCIKK21zZ3N0ciAiIgorCiAjOiBzdGF0aXN0aWNzLnBocDo0NAogbXNnaWQgIlN0YXRpc3RpYyBJbmZvcm1hdGlvbiIKIG1zZ3N0ciAiSW5mb3JtYXRpb25zIHN0YXRpc3RpcXVlcyIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvamFfSlAvdmNsLnBvIGIvd2ViL2xvY2FsZS9wb19maWxlcy9qYV9KUC92Y2wucG8KaW5kZXggNzFjZTFkZS4uNTQ3YjFjNSAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9wb19maWxlcy9qYV9KUC92Y2wucG8KKysrIGIvd2ViL2xvY2FsZS9wb19maWxlcy9qYV9KUC92Y2wucG8KQEAgLTE1LDcgKzE1LDcgQEAKIAogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogVkNMIDIuNVxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogVkNMIDIuNS4xXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGRldkB2Y2wuYXBhY2hlLm9yZ1xuIgogIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAyLTI0IDE1OjE2KzA5MDBcbiIKICJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTA0LTEzIDE1OjQwLTA1MDBcbiIKZGlmZiAtLWdpdCBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvcHRfUFQvdmNsLnBvIGIvd2ViL2xvY2FsZS9wb19maWxlcy9wdF9QVC92Y2wucG8KaW5kZXggYjEzNzViNC4uZTkwNGJkYiAxMDA2NDQKLS0tIGEvd2ViL2xvY2FsZS9wb19maWxlcy9wdF9QVC92Y2wucG8KKysrIGIvd2ViL2xvY2FsZS9wb19maWxlcy9wdF9QVC92Y2wucG8KQEAgLTE0LDEwICsxNCwxMCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IFZDTCAyLjVcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZDTCAyLjUuMVxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBkZXZAdmNsLmFwYWNoZS5vcmdcbiIKICJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0wNy0xNCAyMjoxOS0wNDAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wNC0yMiAxMzo0NCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOS0wNi0xMyAxNToxOC0wNDAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBBbnTDs25pbyBBcmFnw6NvIDxhYXJhZ2FvQGRpLnVtaW5oby5wdD5cbiIKICJMYW5ndWFnZS1UZWFtOiBQVFxuIgogIkxhbmd1YWdlOiBwdFxuIgpAQCAtMjYsNiArMjYsOTMgQEAKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjUuNFxuIgogCisjOiBhZGRvbWFpbi5waHA6MTcyCittc2dpZCAiIgorIkVycm9yIGVuY291bnRlcmVkIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgbmV3IEFEIGRvbWFpbi4gUGxlYXNlIGNvbnRhY3QgYW4gIgorImFkbWluIGZvciBhc3Npc3RhbmNlLiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDIwIGFkZG9tYWluLnBocDo1MzgKK21zZ2lkICIiCisiRG9tYWluIEROUyBOYW1lIHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0IGRvbWFpbi50bGQgYW5kIGNhbiBvbmx5IGNvbnRhaW4gIgorImxldHRlcnMsIG51bWJlcnMsIGRhc2hlcygtKSwgcGVyaW9kcyguKSwgYW5kIHVuZGVyc2NvcmVzKF8pIChlLmcuICIKKyJteXVuaXZlcnNpdHkuZWR1KSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDIxCittc2dpZCAiRG9tYWluIEROUyBOYW1lIgorbXNnc3RyICIiCisKKyMuIHVzZXJuYW1lCisjOiBhZGRvbWFpbi5waHA6NDI0IGFkZG9tYWluLnBocDo1NDMKK21zZ2lkICIiCisiVXNlcm5hbWUgY2Fubm90IGNvbnRhaW4gc2luZ2xlICgnKSBvciBkb3VibGUgKCZxdW90OykgcXVvdGVzLCBsZXNzIHRoYW4gIgorIigmbHQ7KSwgb3IgZ3JlYXRlciB0aGFuICgmZ3Q7KSBhbmQgY2FuIGJlIGZyb20gMiB0byA2NCBjaGFyYWN0ZXJzIGxvbmciCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQyNQorbXNnaWQgIlVzZXJuYW1lIgorbXNnc3RyICIiCisKKyMuIHBhc3N3b3JkCisjOiBhZGRvbWFpbi5waHA6NDI4IGFkZG9tYWluLnBocDo1NTAKK21zZ2lkICJQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycyBsb25nIgorbXNnc3RyICIiCisKKyMuIGNvbmZpcm0gcGFzc3dvcmQKKyM6IGFkZG9tYWluLnBocDo0MzEKK21zZ2lkICJDb25maXJtIFBhc3N3b3JkIgorbXNnc3RyICIiCisKKyMuIHVzZSBkYXRhYmFzZSBob3N0bmFtZSBjaGVja2JveAorIzogYWRkb21haW4ucGhwOjQzMworbXNnaWQgIlVzZSBEYXRhYmFzZSBIb3N0bmFtZXMiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQzOQorbXNnaWQgIkROUyBTZXJ2ZXIocykiCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ1OAorbXNnaWQgIiIKKyJFYWNoIEFEIERvbWFpbiBzaG91bGQgYmUgYSBtZW1iZXIgb2YgYW4gQUQgRG9tYWluIHJlc291cmNlIGdyb3VwLiBUaGUgIgorImZvbGxvd2luZyBkaWFsb2cgd2lsbCBhbGxvdyB5b3UgdG8gYWRkIHRoZSBuZXcgQUQgRG9tYWluIHRvIGEgZ3JvdXAuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODAKK21zZ2lkICIiCisiZG9tYWluIG5hbWUgcmVnaXN0ZXJlZCBpbiBETlMgZm9yIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluIChleDogYWQuZXhhbXBsZS4iCisiY29tKSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgxCittc2dpZCAiVGhlc2UgY3JlZGVudGlhbHMgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHJlc2VydmVkIGNvbXB1dGVycyB3aXRoIEFELiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgyCittc2dpZCAiIgorImNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIElQIGFkZHJlc3NlcyBmb3IgRE5TIHNlcnZlcnMgdGhhdCBoYW5kbGUgRG9tYWluIEROUyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDgzCittc2dpZCAiIgorIkNoZWNrIHRoaXMgb3B0aW9uIGlmIHlvdSBsaWtlIHRvIGhhdmUgdGhlIGNvbXB1dGVyIG9iamVjdCBuYW1lcyB3aXRoaW4gQUQgdG8gIgorIm1hdGNoIFZNIGhvc3RuYW1lIHN0b3JlZCB3aXRoaW4gdGhlIFZDTCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTI5Cittc2dpZCAiQW4gQUQgZG9tYWluIGFscmVhZHkgZXhpc3RzIHdpdGggdGhpcyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTMzCittc2dpZCAiU3VibWl0dGVkIG93bmVyIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NTYxCittc2dpZCAiIgorIkludmFsaWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQgZm9yIEROUyBTZXJ2ZXIgLSBtdXN0IGJlIGEgdmFsaWQgSVBWNCBhZGRyZXNzIgorbXNnc3RyICIiCisKICM6IGF1dGhlbnRpY2F0aW9uLnBocDoxNTcgdXRpbHMucGhwOjgyOAogbXNnaWQgIldlbGNvbWUgdG8gdGhlIFZpcnR1YWwgQ29tcHV0aW5nIExhYiIKIG1zZ3N0ciAiQmVtdmluZG8gYW8gTGFib3JhdMOzcmlvIGRlIENvbXB1dGHDp8OjbyBWaXJ0dWFsIgpAQCAtNjk1LDYgKzc4MiwxMCBAQAogbXNnaWQgIlRoZSBlbmQgdGltZSBmb3IgdGhlIHN1Ym1pdHRlZCBibG9jayBhbGxvY2F0aW9uIHRpbWUgaGFzIHBhc3NlZC4gVGhlcmVmb3JlLCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG1vZGlmaWVkLiIKIG1zZ3N0ciAiTyB0ZW1wbyBkZSBmaW5hbGl6YcOnw6NvIHN1Ym1ldGlkbyBwYXJhIGVzdGUgYmxvY28gZGUgYWxvY2HDp8OjbyBqw6EgcGFzc291LiBTZW5kbyBhc3NpbSBqw6EgbsOjbyBwb2RlIHNlciBtb2RpZmljYWRvLiIKIAorIzogYmxvY2thbGxvY2F0aW9ucy5waHA6Mjg2MAorbXNnaWQgIlRoZSBzZWxlY3RlZCBCbG9jayBBbGxvY2F0aW9uIG5vIGxvbmdlciBleGlzdHMuIgorbXNnc3RyICJPIEJsb2NvIGRlIEFsb2Nhw6fDo28gZXNjb2xoaWRvIGrDoSBuw6NvIGV4aXN0ZS4iCisKICM6IGJsb2NrYWxsb2NhdGlvbnMucGhwOjI4NzgKIG1zZ2lkICJSZXNvdXJjZXMiCiBtc2dzdHIgIlJlY3Vyc29zIgpAQCAtMTAwNiw2ICsxMDk3LDEwIEBACiBtc2dpZCAiTG9jYXRpb24iCiBtc2dzdHIgIiIKIAorIzogZ3JvdXBzLnBocDoyODYKK21zZ2lkICJEZWxldGUgR3JvdXAiCittc2dzdHIgIiIKKwogIzogaGVscC5waHA6MjE2IGhlbHAucGhwOjI0OAogbXNnaWQgIkF1dGhlbnRpY2F0aW9uIE1ldGhvZCIKIG1zZ3N0ciAiIgpAQCAtMTQwNSw2ICsxNTAwLDE4IEBACiBtc2dpZCAiVGhlIGZvbGxvd2luZyByZXZpc2lvbnMgYXJlIGluIHVzZSBhbmQgY2Fubm90IGJlIGRlbGV0ZWQgYXQgdGhpcyB0aW1lOiIKIG1zZ3N0ciAiQXMgc2VndWludGVzIHJldmlzw7VlcyBlc3TDo28gZW0gdXNvIGUgbsOjbyBwb2RlbSBzZXIgZXhjbHXDrWRhcyBuZXN0ZSBtb21lbnRvOiIKIAorIzogaW1hZ2UucGhwOjE1MCBpbWFnZS5waHA6NDM4Cittc2dpZCAiTWF4IFJlc2VydmF0aW9uIER1cmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGltYWdlLnBocDoxNzU2Cittc2dpZCAiSW52YWxpZCBNYXggUmVzZXJ2YXRpb24gRHVyYXRpb24gc2VsZWN0ZWQiCittc2dzdHIgIiIKKworIzogaW1hZ2UucGhwOjE3NzcKK21zZ2lkICJCYXNlIE9VIGNhbm5vdCBiZSBjaGFuZ2VkIGZvciB0aGUgc2VsZWN0ZWQgQUQgRG9tYWluIgorbXNnc3RyICIiCisKICM6IG1hbmFnZW1lbnRub2RlLnBocDoyOTUKIG1zZ2lkICJOYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgZGFzaGVzKC0pLCBwZXJpb2RzKC4pLCBhbmQgdW5kZXJzY29yZXMoXykuIEl0IGNhbiBiZSBmcm9tIDEgdG8gNTAgY2hhcmFjdGVycyBsb25nLiIKIG1zZ3N0ciAiIgpAQCAtMjA3NSw2ICsyMTgyLDEwIEBACiBtc2dpZCAiUGxlYXNlIHNlbGVjdCB0aGUgZW52aXJvbm1lbnQgeW91IHdhbnQgdG8gdXNlIGZyb20gdGhlIGxpc3Q6IgogbXNnc3RyICJQb3IgZmF2b3IgZXNjb2xoYSB1bSBhbWJpZW50ZSBwYXJhIHVzYXIgYXRyYXbDqXMgZGEgc2VndWludGUgbGlzdGE6IgogCisjOiByZXF1ZXN0cy5waHA6MTUzMAorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB2YWxpZCBlbnZpcm9ubWVudCIKK21zZ3N0ciAiUG9yIGZhdm9yIGVzY29saGEgdW0gYW1iaWVudGUgdsOhbGlkbyIKKwogIzogcmVxdWVzdHMucGhwOjE1NDYKIG1zZ2lkICJSZXNlcnZhdGlvbiBOYW1lOiIKIG1zZ3N0ciAiTm9tZSBkYSBSZXNlcnZhOiIKQEAgLTIyODgsNiArMjM5OSwxMCBAQAogbXNnaWQgIlZhbHVlOiIKIG1zZ3N0ciAiVmFsb3I6IgogCisjOiByZXF1ZXN0cy5waHA6MjYxMQorbXNnaWQgIlZhbHVlIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkYXNoZXMoLSksIHBhcmVudGhlc2lzLCA8YnI+c2xhc2hlcygvKSwgYW5kIHBlcmlvZHMoLikgYW5kIGNhbiBiZSBmcm9tIDMgdG8gMjU1IGNoYXJhY3RlcnMgbG9uZyIKK21zZ3N0ciAiIgorCiAjOiByZXF1ZXN0cy5waHA6MjYyMQogbXNnaWQgIlJlcXVpcmVkOiIKIG1zZ3N0ciAiUmVxdWVyaWRvOiIKQEAgLTI2NjIsNiArMjc3NywxNCBAQAogbXNnaWQgIiVzIGlzIG5vdyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3bHkgY3JlYXRlZCByZXZpc2lvbi4iCiBtc2dzdHIgIiVzIGVzdMOhIGFnb3JhIGVtIHZpYXMgZGUgc2VyIGF0dWFsaXphZG8gcGFyYSBzZXIgdXNhZG8gY29tbyBub3ZhIHJldmlzw6NvLiIKIAorIzogcmVxdWVzdHMucGhwOjEwNjkKK21zZ2lkICJSZXNlcnZhdGlvbiBpcyBpbiBtYWludGVuYW5jZSAtIENvbnRhY3QgYWRtaW4gZm9yIGhlbHAiCittc2dzdHIgIiIKKworIzogcmVxdWVzdHMucGhwOjEwNzUKK21zZ2lkICJSZXNlcnZhdGlvbiBpcyBiZWluZyBjYXB0dXJlZCIKK21zZ3N0ciAiIgorCiAjOiByZXNvdXJjZS5waHA6MTcyCiBtc2dpZCAiRWRpdCBHcm91cGluZyAmYW1wOyBNYXBwaW5nIgogbXNnc3RyICJBbHRlcmFuZG8gbyBBZ3J1cGFtZW50byAmYW1wOyBNYXBlYW5kbyIKQEAgLTI5ODYsNyArMzEwOSw3IEBACiAKICM6IHNpdGVjb25maWcucGhwOjE1MTcKICMsIHBocC1mb3JtYXQKLW1zZ2lkICJUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciBjb25maWd1cmF0aW9uIG9mIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgdG8gdXNlcnMgYW5kIGFkbWluaXN0cmF0b3JzIGFib3V0IHRoaW5ncyBzdWNoIGFzIHJlc2VydmF0aW9ucyBhbmQgaW1hZ2UgbWFuYWdlbWVudC4gRXZlcnkgbWVzc2FnZSBoYXMgYSBkZWZhdWx0LiBBZGRpdGlvbmFsbHksIHNlcGFyYXRlIG1lc3NhZ2VzIGNhbiBiZSBjb25maWd1cmVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiBNb3N0IG9mIHRoZSBtZXNzYWdlcyB3aWxsIGhhdmUgcGFydHMgdGhhdCBhcmUgaW4gc3F1YXJlIGJyYWNrZXRzLiBUaGVzZSBwYXJ0cyB3aWxsIGhhdmUgZGF0YSBzdWJzdGl0dXRlZCBmb3IgdGhlbSBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgc2VudC4gQSBsaXN0IG9mIHdoYXQgY2FuIGJlIHVzZWQgaW4gc3F1ZWFyZSBicmFja2V0cyBjYW4gYmUgZm91bmQgYXQgdGhlIDxhIGhyZWY9XCIlc1wiPkFwYWNoZSBWQ0wgd2ViIHNpdGU8L2E+LiBTb21lIG1lc3NhZ2VzIGFsc28gaGF2ZSBhIHNob3J0IGZvcm0gdGhhdCBtYXkgYmUgc2VudCBzdWNoIGFzIGluIHRoZSBmb3JtIG9mIGEgcG9wdXAgd2l0aGluIGEgcmVzZXJ2YXRpb24gd2hlbiB0aGUgcmVzZXJ2YXRpb24gaXMgYWJvdXQgdG8gZW5kLiIKK21zZ2lkICJUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciBjb25maWd1cmF0aW9uIG9mIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgdG8gdXNlcnMgYW5kIGFkbWluaXN0cmF0b3JzIGFib3V0IHRoaW5ncyBzdWNoIGFzIHJlc2VydmF0aW9ucyBhbmQgaW1hZ2UgbWFuYWdlbWVudC4gRXZlcnkgbWVzc2FnZSBoYXMgYSBkZWZhdWx0LiBBZGRpdGlvbmFsbHksIHNlcGFyYXRlIG1lc3NhZ2VzIGNhbiBiZSBjb25maWd1cmVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiBNb3N0IG9mIHRoZSBtZXNzYWdlcyB3aWxsIGhhdmUgcGFydHMgdGhhdCBhcmUgaW4gc3F1YXJlIGJyYWNrZXRzLiBUaGVzZSBwYXJ0cyB3aWxsIGhhdmUgZGF0YSBzdWJzdGl0dXRlZCBmb3IgdGhlbSBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgc2VudC4gQSBsaXN0IG9mIHdoYXQgY2FuIGJlIHVzZWQgaW4gc3F1YXJlIGJyYWNrZXRzIGNhbiBiZSBmb3VuZCBhdCB0aGUgPGEgaHJlZj1cIiVzXCI+QXBhY2hlIFZDTCB3ZWIgc2l0ZTwvYT4uIFNvbWUgbWVzc2FnZXMgYWxzbyBoYXZlIGEgc2hvcnQgZm9ybSB0aGF0IG1heSBiZSBzZW50IHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBwb3B1cCB3aXRoaW4gYSByZXNlcnZhdGlvbiB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBhYm91dCB0byBlbmQuIgogbXNnc3RyICIiCiAKICM6IHNpdGVjb25maWcucGhwOjE1ODIKQEAgLTMwMzAsNiArMzE1MywxOTIgQEAKIG1zZ2lkICJObyBjaGFuZ2VzIHRvIHN1Ym1pdHRlZCBtZXNzYWdlLiBOb3RoaW5nIHNhdmVkLiIKIG1zZ3N0ciAiIgogCisjOiBzaXRlY29uZmlnLnBocDo4NzMKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIGRhdGEgZm9yIHRoZXNlIGFmZmlsaWF0aW9uczoiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6OTc5Cittc2dpZCAiRGVmYXVsdCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMDY0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBtb2RpZnkgdGhlIHN1Ym1pdHRlZCBzZXR0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMDkwCittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtaXRlZCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjI4CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGRlbGV0ZSBhZGRyZXNzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjcyCittc2dpZCAiSGVscCBFbWFpbCBBZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzMKK21zZ2lkICIiCisiVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyB1c2VkIGFzIHRoZSBmcm9tIGFkZHJlc3MgZm9yIGVtYWlscyBzZW50IGJ5IHRoZSAiCisiVkNMIHN5c3RlbSB0byB1c2Vycy4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3OAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkhlbHAgRW1haWwgQWRkcmVzcyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3OSBzaXRlY29uZmlnLnBocDoxMzc4IHNpdGVjb25maWcucGhwOjE0NzgKKyM6IHNpdGVjb25maWcucGhwOjE2ODEgc2l0ZWNvbmZpZy5waHA6MTgxMyBzaXRlY29uZmlnLnBocDoxOTIzCittc2dpZCAiVXBkYXRlIHN1Y2Nlc3NmdWwiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI4MAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkFkZHJlc3MgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3MQorbXNnaWQgIlNpdGUgV2ViIEFkZHJlc3MiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3MgorbXNnaWQgIlRoaXMgaXMgdGhlIHdlYiBhZGRyZXNzIGluIGVtYWlscyBzZW50IGJ5IHRoZSBWQ0wgc3lzdGVtIHRvIHVzZXJzLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzc0Cittc2dpZCAiSW52YWxpZCB3ZWIgYWRkcmVzcyhlcykgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzcKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJXZWIgQWRkcmVzcyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3OQorIywgcGhwLWZvcm1hdAorbXNnaWQgIldlYiBBZGRyZXNzIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzAKK21zZ2lkICJLTVMgU2VydmVycyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDcxCittc2dpZCAiIgorIlRoZXNlIGFyZSB0aGUgS01TIHNlcnZlcnMgZm9yIGFjdGl2YXRpbmcgV2luZG93cyBsaWNlbnNpbmcuIE11bHRpcGxlIHNlcnZlcnMgIgorImFyZSBhbGxvd2VkLCBkZWxpbWl0ZWQgd2l0aCBhIGNvbW1hICgsKS4gTm9uIHN0YW5kYXJkIHBvcnRzIGNhbiBiZSBzcGVjaWZpZWQgIgorImFmdGVyIHRoZSBzZXJ2ZXIgZGVsaW1pdGVkIHdpdGggYSBjb2xvbiAoOikuIChleDoga21zLmV4YW1wbGUuY29tLGttczIuIgorImV4YW1wbGUuY29tOjIwMDApIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzQKK21zZ2lkICJJbnZhbGlkIElQIG9yIGhvc3RuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDc3CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiS01TIHNlcnZlciBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3OQorIywgcGhwLWZvcm1hdAorbXNnaWQgIktNUyBzZXJ2ZXIgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY3NQorbXNnaWQgIlNpdGUgVGhlbWUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY3NgorbXNnaWQgIlRoaXMgY29udHJvbHMgdGhlIHRoZW1lIG9mIHRoZSBzaXRlIGRpc3BsYXllZCBmb3IgZWFjaCBhZmZpbGlhdGlvbi4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY3NworbXNnaWQgIkludmFsaWQgdGhlbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2ODAKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJUaGVtZSBzZXR0aW5nIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjgyCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiVGhlbWUgc2V0dGluZyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODA3Cittc2dpZCAiTERBUCBMb29rdXAgZm9yIFNoaWJib2xldGggQXV0aGVudGljYXRlZCBVc2VycyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODA4Cittc2dpZCAiIgorIklmIGFuIGFmZmlsaWF0aW9uIGdldHMgY29uZmlndXJlZCBmb3IgU2hpYmJvbGV0aCBhdXRoZW50aWNhdGlvbiwgdGhpcyAiCisic3BlY2lmaWVzIHRoYXQgTERBUCBhdXRoZW50aWNhdGlvbiBoYXMgYWxzbyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoYXQgIgorImFmZmlsaWF0aW9uIHNvIHRoYXQgVkNMIGNhbiBwZXJmb3JtIGxvb2t1cHMgZm9yIG5ldyB1c2VycyBiZWZvcmUgdGhleSBsb2cgaW4gIgorInRvIFZDTC4iCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxMgorIywgcGhwLWZvcm1hdAorbXNnaWQgIkxEQVAgbG9va3VwIHNldHRpbmcgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MTQKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJMREFQIGxvb2t1cCBzZXR0aW5nIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MTkgc2l0ZWNvbmZpZy5waHA6MTkyOAorbXNnaWQgIkxvY2FsIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MTcKK21zZ2lkICJTaGliYm9sZXRoIFNjb3BlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MTgKK21zZ2lkICIiCisiVGhpcyBpcyB0aGUgU2hpYmJvbGV0aCBzY29wZSBmb3IgYW4gYWZmaWxpYXRpb24gd2hlbiBTaGliYm9sZXRoICIKKyJhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTIyCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiU2hpYmJvbGV0aCBzY29wZSBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkyNAorIywgcGhwLWZvcm1hdAorbXNnaWQgIlNoaWJib2xldGggc2NvcGUgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6Mjg1MQorbXNnaWQgIkFmZmlsaWF0aW9uIHN1Y2Vzc2Z1bGx5IGFkZGVkOyByZWxvYWRpbmcgcGFnZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUyCittc2dpZCAiQWZmaWxpYXRpb24gc3VjZXNzZnVsbHkgZGVsZXRlZDsgcmVsb2FkaW5nIHBhZ2UiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6Mjg1MworbXNnaWQgIlZhbHVlcyB1cGRhdGVkOyByZWxvYWRpbmcgcGFnZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODU1Cittc2dpZCAiSW52YWxpZCB2YWx1ZSAtIG11c3QiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MzA3OAorbXNnaWQgIkFmZmlsaWF0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjMwODQKK21zZ2lkICJDb25mbGljdGluZyBBZmZpbGlhdGlvbiBzdWJtaXR0ZWQiCittc2dzdHIgIiIKKwogIzogc3RhdGlzdGljcy5waHA6NDQKIG1zZ2lkICJTdGF0aXN0aWMgSW5mb3JtYXRpb24iCiBtc2dzdHIgIkluZm9ybWHDp8OjbyBFc3RhdMOtc3RpY2EiCkBAIC00MDU2LDkgKzQzNjUsNiBAQAogbXNnaWQgIm1vbnRobHkiCiBtc2dzdHIgIm1lbnNhbG1lbnRlIgogCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHZhbGlkIGVudmlyb25tZW50IgotbXNnc3RyICJQb3IgZmF2b3IgZXNjb2xoYSB1bSBhbWJpZW50ZSB2w6FsaWRvIgotCiBtc2dpZCAic3RhcnRpbmcgaW5zdGFsbCBwcm9jZXNzIgogbXNnc3RyICJjb21lw6dhbmRvIG8gcHJvY2Vzc28gZGUgaW5zdGFsYcOnw6NvIgogCkBAIC00MTA3LDkgKzQ0MTMsNiBAQAogbXNnaWQgInN0YXJ0aW5nIHZpcnR1YWwgbWFjaGluZSIKIG1zZ3N0ciAiIgogCi1tc2dpZCAiVGhlIHNlbGVjdGVkIEJsb2NrIEFsbG9jYXRpb24gbm8gbG9uZ2VyIGV4aXN0cy4iCi1tc2dzdHIgIk8gQmxvY28gZGUgQWxvY2HDp8OjbyBlc2NvbGhpZG8gasOhIG7Do28gZXhpc3RlLiIKLQogbXNnaWQgIkxvZyBpbiIKIG1zZ3N0ciAiIgogCmRpZmYgLS1naXQgYS93ZWIvbG9jYWxlL3BvX2ZpbGVzL3ZjbC5wby50ZW1wbGF0ZSBiL3dlYi9sb2NhbGUvcG9fZmlsZXMvdmNsLnBvLnRlbXBsYXRlCmluZGV4IGJlYjdjZjEuLjQ3MGJlY2YgMTAwNjQ0Ci0tLSBhL3dlYi9sb2NhbGUvcG9fZmlsZXMvdmNsLnBvLnRlbXBsYXRlCisrKyBiL3dlYi9sb2NhbGUvcG9fZmlsZXMvdmNsLnBvLnRlbXBsYXRlCkBAIC0xNiwxMCArMTYsMTAgQEAKICMsIGZ1enp5CiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41LjFcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogZGV2QHZjbC5hcGFjaGUub3JnXG4iCiAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDctMTQgMjI6MTktMDQwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMDYtMTMgMTU6MTgtMDQwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogSm9zaCBUaG9tcHNvbiA8amZ0aG9tcHNAYXBhY2hlLm9yZz5cbiIKICJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgogIkxhbmd1YWdlOiBcbiIKQEAgLTI3LDYgKzI3LDkyIEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKKyM6IGFkZG9tYWluLnBocDoxNzIKK21zZ2lkICIiCisiRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBuZXcgQUQgZG9tYWluLiBQbGVhc2UgY29udGFjdCBhbiAiCisiYWRtaW4gZm9yIGFzc2lzdGFuY2UuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MjAgYWRkb21haW4ucGhwOjUzOAorbXNnaWQgIiIKKyJEb21haW4gRE5TIE5hbWUgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgZG9tYWluLnRsZCBhbmQgY2FuIG9ubHkgY29udGFpbiAiCisibGV0dGVycywgbnVtYmVycywgZGFzaGVzKC0pLCBwZXJpb2RzKC4pLCBhbmQgdW5kZXJzY29yZXMoXykgKGUuZy4gIgorIm15dW5pdmVyc2l0eS5lZHUpIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0MjEKK21zZ2lkICJEb21haW4gRE5TIE5hbWUiCittc2dzdHIgIiIKKworIy4gdXNlcm5hbWUKKyM6IGFkZG9tYWluLnBocDo0MjQgYWRkb21haW4ucGhwOjU0MworbXNnaWQgIiIKKyJVc2VybmFtZSBjYW5ub3QgY29udGFpbiBzaW5nbGUgKCcpIG9yIGRvdWJsZSAoJnF1b3Q7KSBxdW90ZXMsIGxlc3MgdGhhbiAiCisiKCZsdDspLCBvciBncmVhdGVyIHRoYW4gKCZndDspIGFuZCBjYW4gYmUgZnJvbSAyIHRvIDY0IGNoYXJhY3RlcnMgbG9uZyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDI1Cittc2dpZCAiVXNlcm5hbWUiCittc2dzdHIgIiIKKworIy4gcGFzc3dvcmQKKyM6IGFkZG9tYWluLnBocDo0MjggYWRkb21haW4ucGhwOjU1MAorbXNnaWQgIlBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNCBjaGFyYWN0ZXJzIGxvbmciCittc2dzdHIgIiIKKworIy4gY29uZmlybSBwYXNzd29yZAorIzogYWRkb21haW4ucGhwOjQzMQorbXNnaWQgIkNvbmZpcm0gUGFzc3dvcmQiCittc2dzdHIgIiIKKworIy4gdXNlIGRhdGFiYXNlIGhvc3RuYW1lIGNoZWNrYm94CisjOiBhZGRvbWFpbi5waHA6NDMzCittc2dpZCAiVXNlIERhdGFiYXNlIEhvc3RuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDM5Cittc2dpZCAiRE5TIFNlcnZlcihzKSIKK21zZ3N0ciAiIgorCisjOiBhZGRvbWFpbi5waHA6NDU4Cittc2dpZCAiIgorIkVhY2ggQUQgRG9tYWluIHNob3VsZCBiZSBhIG1lbWJlciBvZiBhbiBBRCBEb21haW4gcmVzb3VyY2UgZ3JvdXAuIFRoZSAiCisiZm9sbG93aW5nIGRpYWxvZyB3aWxsIGFsbG93IHlvdSB0byBhZGQgdGhlIG5ldyBBRCBEb21haW4gdG8gYSBncm91cC4iCittc2dzdHIgIiIKKworIzogYWRkb21haW4ucGhwOjQ4MAorbXNnaWQgIiIKKyJkb21haW4gbmFtZSByZWdpc3RlcmVkIGluIEROUyBmb3IgQWN0aXZlIERpcmVjdG9yeSBEb21haW4gKGV4OiBhZC5leGFtcGxlLiIKKyJjb20pIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODEKK21zZ2lkICJUaGVzZSBjcmVkZW50aWFscyB3aWxsIGJlIHVzZWQgdG8gcmVnaXN0ZXIgcmVzZXJ2ZWQgY29tcHV0ZXJzIHdpdGggQUQuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODIKK21zZ2lkICIiCisiY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIGZvciBETlMgc2VydmVycyB0aGF0IGhhbmRsZSBEb21haW4gRE5TIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo0ODMKK21zZ2lkICIiCisiQ2hlY2sgdGhpcyBvcHRpb24gaWYgeW91IGxpa2UgdG8gaGF2ZSB0aGUgY29tcHV0ZXIgb2JqZWN0IG5hbWVzIHdpdGhpbiBBRCB0byAiCisibWF0Y2ggVk0gaG9zdG5hbWUgc3RvcmVkIHdpdGhpbiB0aGUgVkNMIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1MjkKK21zZ2lkICJBbiBBRCBkb21haW4gYWxyZWFkeSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1MzMKK21zZ2lkICJTdWJtaXR0ZWQgb3duZXIgaXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGFkZG9tYWluLnBocDo1NjEKK21zZ2lkICIiCisiSW52YWxpZCBJUCBhZGRyZXNzIHNwZWNpZmllZCBmb3IgRE5TIFNlcnZlciAtIG11c3QgYmUgYSB2YWxpZCBJUFY0IGFkZHJlc3MiCisKICM6IGF1dGhlbnRpY2F0aW9uLnBocDoxNTcgdXRpbHMucGhwOjgyOAogbXNnaWQgIldlbGNvbWUgdG8gdGhlIFZpcnR1YWwgQ29tcHV0aW5nIExhYiIKIG1zZ3N0ciAiIgpAQCAtMTAxMSw2ICsxMDk3LDEwIEBACiBtc2dpZCAiTG9jYXRpb24iCiBtc2dzdHIgIiIKIAorIzogZ3JvdXBzLnBocDoyODYKK21zZ2lkICJEZWxldGUgR3JvdXAiCittc2dzdHIgIiIKKwogIzogaGVscC5waHA6MjE2IGhlbHAucGhwOjI0OAogbXNnaWQgIkF1dGhlbnRpY2F0aW9uIE1ldGhvZCIKIG1zZ3N0ciAiIgpAQCAtMTQxMCw2ICsxNTAwLDE4IEBACiBtc2dpZCAiVGhlIGZvbGxvd2luZyByZXZpc2lvbnMgYXJlIGluIHVzZSBhbmQgY2Fubm90IGJlIGRlbGV0ZWQgYXQgdGhpcyB0aW1lOiIKIG1zZ3N0ciAiIgogCisjOiBpbWFnZS5waHA6MTUwIGltYWdlLnBocDo0MzgKK21zZ2lkICJNYXggUmVzZXJ2YXRpb24gRHVyYXRpb24iCittc2dzdHIgIiIKKworIzogaW1hZ2UucGhwOjE3NTYKK21zZ2lkICJJbnZhbGlkIE1heCBSZXNlcnZhdGlvbiBEdXJhdGlvbiBzZWxlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBpbWFnZS5waHA6MTc3NworbXNnaWQgIkJhc2UgT1UgY2Fubm90IGJlIGNoYW5nZWQgZm9yIHRoZSBzZWxlY3RlZCBBRCBEb21haW4iCittc2dzdHIgIiIKKwogIzogbWFuYWdlbWVudG5vZGUucGhwOjI5NQogbXNnaWQgIk5hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBkYXNoZXMoLSksIHBlcmlvZHMoLiksIGFuZCB1bmRlcnNjb3JlcyhfKS4gSXQgY2FuIGJlIGZyb20gMSB0byA1MCBjaGFyYWN0ZXJzIGxvbmcuIgogbXNnc3RyICIiCkBAIC0yNjc1LDYgKzI3NzcsMTQgQEAKIG1zZ2lkICIlcyBpcyBub3cgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ld2x5IGNyZWF0ZWQgcmV2aXNpb24uIgogbXNnc3RyICIiCiAKKyM6IHJlcXVlc3RzLnBocDoxMDY5Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgaW4gbWFpbnRlbmFuY2UgLSBDb250YWN0IGFkbWluIGZvciBoZWxwIgorbXNnc3RyICIiCisKKyM6IHJlcXVlc3RzLnBocDoxMDc1Cittc2dpZCAiUmVzZXJ2YXRpb24gaXMgYmVpbmcgY2FwdHVyZWQiCittc2dzdHIgIiIKKwogIzogcmVzb3VyY2UucGhwOjE3MgogbXNnaWQgIkVkaXQgR3JvdXBpbmcgJmFtcDsgTWFwcGluZyIKIG1zZ3N0ciAiIgpAQCAtMjk5OSw3ICszMTA5LDcgQEAKIAogIzogc2l0ZWNvbmZpZy5waHA6MTUxNwogIywgcGhwLWZvcm1hdAotbXNnaWQgIlRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIGNvbmZpZ3VyYXRpb24gb2YgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCB0byB1c2VycyBhbmQgYWRtaW5pc3RyYXRvcnMgYWJvdXQgdGhpbmdzIHN1Y2ggYXMgcmVzZXJ2YXRpb25zIGFuZCBpbWFnZSBtYW5hZ2VtZW50LiBFdmVyeSBtZXNzYWdlIGhhcyBhIGRlZmF1bHQuIEFkZGl0aW9uYWxseSwgc2VwYXJhdGUgbWVzc2FnZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGVhY2ggYWZmaWxpYXRpb24uIE1vc3Qgb2YgdGhlIG1lc3NhZ2VzIHdpbGwgaGF2ZSBwYXJ0cyB0aGF0IGFyZSBpbiBzcXVhcmUgYnJhY2tldHMuIFRoZXNlIHBhcnRzIHdpbGwgaGF2ZSBkYXRhIHN1YnN0aXR1dGVkIGZvciB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBzZW50LiBBIGxpc3Qgb2Ygd2hhdCBjYW4gYmUgdXNlZCBpbiBzcXVlYXJlIGJyYWNrZXRzIGNhbiBiZSBmb3VuZCBhdCB0aGUgPGEgaHJlZj1cIiVzXCI+QXBhY2hlIFZDTCB3ZWIgc2l0ZTwvYT4uIFNvbWUgbWVzc2FnZXMgYWxzbyBoYXZlIGEgc2hvcnQgZm9ybSB0aGF0IG1heSBiZSBzZW50IHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBwb3B1cCB3aXRoaW4gYSByZXNlcnZhdGlvbiB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBhYm91dCB0byBlbmQuIgorbXNnaWQgIlRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIGNvbmZpZ3VyYXRpb24gb2YgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCB0byB1c2VycyBhbmQgYWRtaW5pc3RyYXRvcnMgYWJvdXQgdGhpbmdzIHN1Y2ggYXMgcmVzZXJ2YXRpb25zIGFuZCBpbWFnZSBtYW5hZ2VtZW50LiBFdmVyeSBtZXNzYWdlIGhhcyBhIGRlZmF1bHQuIEFkZGl0aW9uYWxseSwgc2VwYXJhdGUgbWVzc2FnZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGVhY2ggYWZmaWxpYXRpb24uIE1vc3Qgb2YgdGhlIG1lc3NhZ2VzIHdpbGwgaGF2ZSBwYXJ0cyB0aGF0IGFyZSBpbiBzcXVhcmUgYnJhY2tldHMuIFRoZXNlIHBhcnRzIHdpbGwgaGF2ZSBkYXRhIHN1YnN0aXR1dGVkIGZvciB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBzZW50LiBBIGxpc3Qgb2Ygd2hhdCBjYW4gYmUgdXNlZCBpbiBzcXVhcmUgYnJhY2tldHMgY2FuIGJlIGZvdW5kIGF0IHRoZSA8YSBocmVmPVwiJXNcIj5BcGFjaGUgVkNMIHdlYiBzaXRlPC9hPi4gU29tZSBtZXNzYWdlcyBhbHNvIGhhdmUgYSBzaG9ydCBmb3JtIHRoYXQgbWF5IGJlIHNlbnQgc3VjaCBhcyBpbiB0aGUgZm9ybSBvZiBhIHBvcHVwIHdpdGhpbiBhIHJlc2VydmF0aW9uIHdoZW4gdGhlIHJlc2VydmF0aW9uIGlzIGFib3V0IHRvIGVuZC4iCiBtc2dzdHIgIiIKIAogIzogc2l0ZWNvbmZpZy5waHA6MTU4MgpAQCAtMzA0Myw2ICszMTUzLDE5MiBAQAogbXNnaWQgIk5vIGNoYW5nZXMgdG8gc3VibWl0dGVkIG1lc3NhZ2UuIE5vdGhpbmcgc2F2ZWQuIgogbXNnc3RyICIiCiAKKyM6IHNpdGVjb25maWcucGhwOjg3MworbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBmb3IgdGhlc2UgYWZmaWxpYXRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDo5NzkKK21zZ2lkICJEZWZhdWx0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwNjQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3VibWl0dGVkIHNldHRpbmcuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEwOTAKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1pdGVkIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyMjgKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZGVsZXRlIGFkZHJlc3MgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEyNzIKK21zZ2lkICJIZWxwIEVtYWlsIEFkZHJlc3MiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTI3MworbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIHVzZWQgYXMgdGhlIGZyb20gYWRkcmVzcyBmb3IgZW1haWxzIHNlbnQgYnkgdGhlICIKKyJWQ0wgc3lzdGVtIHRvIHVzZXJzLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc4CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiSGVscCBFbWFpbCBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjc5IHNpdGVjb25maWcucGhwOjEzNzggc2l0ZWNvbmZpZy5waHA6MTQ3OAorIzogc2l0ZWNvbmZpZy5waHA6MTY4MSBzaXRlY29uZmlnLnBocDoxODEzIHNpdGVjb25maWcucGhwOjE5MjMKK21zZ2lkICJVcGRhdGUgc3VjY2Vzc2Z1bCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMjgwCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiQWRkcmVzcyBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcxCittc2dpZCAiU2l0ZSBXZWIgQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzcyCittc2dpZCAiVGhpcyBpcyB0aGUgd2ViIGFkZHJlc3MgaW4gZW1haWxzIHNlbnQgYnkgdGhlIFZDTCBzeXN0ZW0gdG8gdXNlcnMuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjEzNzQKK21zZ2lkICJJbnZhbGlkIHdlYiBhZGRyZXNzKGVzKSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTM3NworIywgcGhwLWZvcm1hdAorbXNnaWQgIldlYiBBZGRyZXNzIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxMzc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiV2ViIEFkZHJlc3MgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3MAorbXNnaWQgIktNUyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzEKK21zZ2lkICIiCisiVGhlc2UgYXJlIHRoZSBLTVMgc2VydmVycyBmb3IgYWN0aXZhdGluZyBXaW5kb3dzIGxpY2Vuc2luZy4gTXVsdGlwbGUgc2VydmVycyAiCisiYXJlIGFsbG93ZWQsIGRlbGltaXRlZCB3aXRoIGEgY29tbWEgKCwpLiBOb24gc3RhbmRhcmQgcG9ydHMgY2FuIGJlIHNwZWNpZmllZCAiCisiYWZ0ZXIgdGhlIHNlcnZlciBkZWxpbWl0ZWQgd2l0aCBhIGNvbG9uICg6KS4gKGV4OiBrbXMuZXhhbXBsZS5jb20sa21zMi4iCisiZXhhbXBsZS5jb206MjAwMCkiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTQ3NAorbXNnaWQgIkludmFsaWQgSVAgb3IgaG9zdG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE0NzcKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJLTVMgc2VydmVyIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNDc5CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiS01TIHNlcnZlciBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc1Cittc2dpZCAiU2l0ZSBUaGVtZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc2Cittc2dpZCAiVGhpcyBjb250cm9scyB0aGUgdGhlbWUgb2YgdGhlIHNpdGUgZGlzcGxheWVkIGZvciBlYWNoIGFmZmlsaWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxNjc3Cittc2dpZCAiSW52YWxpZCB0aGVtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTY4MAorIywgcGhwLWZvcm1hdAorbXNnaWQgIlRoZW1lIHNldHRpbmcgYWRkZWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE2ODIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJUaGVtZSBzZXR0aW5nIGZvciAlcyBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDcKK21zZ2lkICJMREFQIExvb2t1cCBmb3IgU2hpYmJvbGV0aCBBdXRoZW50aWNhdGVkIFVzZXJzIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE4MDgKK21zZ2lkICIiCisiSWYgYW4gYWZmaWxpYXRpb24gZ2V0cyBjb25maWd1cmVkIGZvciBTaGliYm9sZXRoIGF1dGhlbnRpY2F0aW9uLCB0aGlzICIKKyJzcGVjaWZpZXMgdGhhdCBMREFQIGF1dGhlbnRpY2F0aW9uIGhhcyBhbHNvIGJlZW4gY29uZmlndXJlZCBmb3IgdGhhdCAiCisiYWZmaWxpYXRpb24gc28gdGhhdCBWQ0wgY2FuIHBlcmZvcm0gbG9va3VwcyBmb3IgbmV3IHVzZXJzIGJlZm9yZSB0aGV5IGxvZyBpbiAiCisidG8gVkNMLiIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxODEyCisjLCBwaHAtZm9ybWF0Cittc2dpZCAiTERBUCBsb29rdXAgc2V0dGluZyBhZGRlZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxNAorIywgcGhwLWZvcm1hdAorbXNnaWQgIkxEQVAgbG9va3VwIHNldHRpbmcgZm9yICVzIGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTgxOSBzaXRlY29uZmlnLnBocDoxOTI4Cittc2dpZCAiTG9jYWwiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxNworbXNnaWQgIlNoaWJib2xldGggU2NvcGUiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MTkxOAorbXNnaWQgIiIKKyJUaGlzIGlzIHRoZSBTaGliYm9sZXRoIHNjb3BlIGZvciBhbiBhZmZpbGlhdGlvbiB3aGVuIFNoaWJib2xldGggIgorImF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjE5MjIKKyMsIHBocC1mb3JtYXQKK21zZ2lkICJTaGliYm9sZXRoIHNjb3BlIGFkZGVkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoxOTI0CisjLCBwaHAtZm9ybWF0Cittc2dpZCAiU2hpYmJvbGV0aCBzY29wZSBmb3IgJXMgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUxCittc2dpZCAiQWZmaWxpYXRpb24gc3VjZXNzZnVsbHkgYWRkZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTIKK21zZ2lkICJBZmZpbGlhdGlvbiBzdWNlc3NmdWxseSBkZWxldGVkOyByZWxvYWRpbmcgcGFnZSIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDoyODUzCittc2dpZCAiVmFsdWVzIHVwZGF0ZWQ7IHJlbG9hZGluZyBwYWdlIgorbXNnc3RyICIiCisKKyM6IHNpdGVjb25maWcucGhwOjI4NTUKK21zZ2lkICJJbnZhbGlkIHZhbHVlIC0gbXVzdCIKK21zZ3N0ciAiIgorCisjOiBzaXRlY29uZmlnLnBocDozMDc4Cittc2dpZCAiQWZmaWxpYXRpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogc2l0ZWNvbmZpZy5waHA6MzA4NAorbXNnaWQgIkNvbmZsaWN0aW5nIEFmZmlsaWF0aW9uIHN1Ym1pdHRlZCIKK21zZ3N0ciAiIgorCiAjOiBzdGF0aXN0aWNzLnBocDo0NAogbXNnaWQgIlN0YXRpc3RpYyBJbmZvcm1hdGlvbiIKIG1zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvd2ViL2xvY2FsZS9wb19maWxlcy96aF9DTi92Y2wucG8gYi93ZWIvbG9jYWxlL3BvX2ZpbGVzL3poX0NOL3ZjbC5wbwppbmRleCA3MzRlYmIxLi5lZmM4NjkzIDEwMDY0NAotLS0gYS93ZWIvbG9jYWxlL3BvX2ZpbGVzL3poX0NOL3ZjbC5wbworKysgYi93ZWIvbG9jYWxlL3BvX2ZpbGVzL3poX0NOL3ZjbC5wbwpAQCAtMTUsNyArMTUsNyBAQAogCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWQ0wgMi41LjFcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogZGV2QHZjbC5hcGFjaGUub3JnXG4iCiAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDItMjQgMTU6MTYrMDkwMFxuIgogIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDQtMTMgMTU6NDAtMDUwMFxuIgpkaWZmIC0tZ2l0IGEvd2ViL2xvY2FsZS9wdF9QVC9MQ19NRVNTQUdFUy92Y2wubW8gYi93ZWIvbG9jYWxlL3B0X1BUL0xDX01FU1NBR0VTL3ZjbC5tbwppbmRleCBlMzg4NGVmLi5iYzM4ZjQxIDEwMDY0NAotLS0gYS93ZWIvbG9jYWxlL3B0X1BUL0xDX01FU1NBR0VTL3ZjbC5tbworKysgYi93ZWIvbG9jYWxlL3B0X1BUL0xDX01FU1NBR0VTL3ZjbC5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93ZWIvbG9jYWxlL3poX0NOL0xDX01FU1NBR0VTL3ZjbC5tbyBiL3dlYi9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvdmNsLm1vCmluZGV4IDA2MWE4NmYuLmM5MDJkYTQgMTAwNjQ0Ci0tLSBhL3dlYi9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvdmNsLm1vCisrKyBiL3dlYi9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvdmNsLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYi9zaGliYXV0aC9pbmRleC5waHAgYi93ZWIvc2hpYmF1dGgvaW5kZXgucGhwCmluZGV4IDBhYjU1M2QuLmM2YWQ0MmEgMTAwNjQ0Ci0tLSBhL3dlYi9zaGliYXV0aC9pbmRleC5waHAKKysrIGIvd2ViL3NoaWJhdXRoL2luZGV4LnBocApAQCAtMSwyNjMgKzEsNCBAQAogPD9waHAKLS8qCi0gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotY2hkaXIoIi4uIik7Ci1yZXF1aXJlX29uY2UoJy5odC1pbmMvY29uZi5waHAnKTsKLQotcmVxdWlyZV9vbmNlKCcuaHQtaW5jL3V0aWxzLnBocCcpOwotcmVxdWlyZV9vbmNlKCcuaHQtaW5jL2Vycm9ycy5waHAnKTsKLWZ1bmN0aW9uIGdldEZvb3RlcigpIHt9Ci0kbm9IVE1Md3JhcHBlcnMgPSBhcnJheSgpOwotCi1kYkNvbm5lY3QoKTsKLQotaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7Ci1oZWFkZXIoIkV4cGlyZXM6IFNhdCwgMSBKYW4gMjAwMCAwMDowMDowMCBHTVQiKTsKLQotLyoKLQkjIGNoZWNrIGZvciBlcHBuOyBpZiB0aGVyZSwgc2VlIGlmIGl0IGlzIGEgdXNlciB3ZSBhbHJlYWR5IGhhdmUKLQlpZihhcnJheV9rZXlfZXhpc3RzKCdlcHBuJywgJF9TRVJWRVIpKSB7Ci0JCSMkdG1wID0gZXhwbG9kZSgnQCcsICRfU0VSVkVSWydlcHBuJ10pOwotCQkkdG1wID0gZXhwbG9kZSgnOycsICRfU0VSVkVSWydlcHBuJ10pOwotCQkkdG1wID0gZXhwbG9kZSgnQCcsICR0bXBbMF0pOwotCQkkcXVlcnkgPSAiU0VMRUNUIHUuZmlyc3RuYW1lLCAiCi0JCQkJIC4gICAgICAgICJ1Lmxhc3RuYW1lICIKLQkJCQkgLiAiRlJPTSB1c2VyIHUsICIKLQkJCQkgLiAgICAgICJhZmZpbGlhdGlvbiBhICIKLQkJCQkgLiAiV0hFUkUgdS51bml0eWlkID0gJ3skdG1wWzBdfScgQU5EICIKLQkJCQkgLiAgICAgICAiYS5zaGlibmFtZSA9ICd7JHRtcFsxXX0nIEFORCAiCi0JCQkJIC4gICAgICAgInUuYWZmaWxpYXRpb25pZCA9IGEuaWQiOwotCQkkcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkJaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKLQkJCSRfU0VSVkVSWydzbiddID0gJHJvd1snbGFzdG5hbWUnXTsKLQkJCSRfU0VSVkVSWydnaXZlbk5hbWUnXSA9ICRyb3dbJ2ZpcnN0bmFtZSddOwotCQl9Ci0JCWVsc2UgewotKi8KLQotaWYoISBhcnJheV9rZXlfZXhpc3RzKCdlcHBuJywgJF9TRVJWRVIpKSB7Ci0JIyBjaGVjayB0byBzZWUgaWYgYW55IHNoaWIgc3R1ZmYgaW4gJF9TRVJWRVIsIGlmIG5vdCByZWRpcmVjdAotCSRrZXlzID0gYXJyYXlfa2V5cygkX1NFUlZFUik7Ci0JJGFsbGtleXMgPSAneycgLiBpbXBsb2RlKCd7JywgJGtleXMpOwotCWlmKCEgcHJlZ19tYXRjaCgnL1x7U2hpYi0vJywgJGFsbGtleXMpKSB7Ci0JCSMgbm8gc2hpYiBkYXRhLCBjbGVhciBfc2hpYnNlc3Npb24gY29va2llCi0JCSNwcmludCAiJGFsbGtleXM8YnI+XG4iOwotCQlmb3JlYWNoKGFycmF5X2tleXMoJF9DT09LSUUpIGFzICRrZXkpIHsKLQkJCWlmKHByZWdfbWF0Y2goJy9eX3NoaWJzZXNzaW9uW18wLTlhLWZBLUZdKyQvJywgJGtleSkpCi0JCQkJc2V0Y29va2llKCRrZXksICIiLCB0aW1lKCkgLSAxMCwgIi8iLCAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7Ci0JCX0KLQkJIyByZWRpcmVjdCB0byBtYWluIHNlbGVjdCBhdXRoIHBhZ2UKLQkJaGVhZGVyKCJMb2NhdGlvbjogIiAuIEJBU0VVUkwgLiBTQ1JJUFQgLiAiP21vZGU9c2VsZWN0YXV0aCIpOwotCQlkYkRpc2Nvbm5lY3QoKTsKLQkJZXhpdDsKLQl9Ci0JcHJpbnQgIjxoMj5FcnJvciB3aXRoIFNoaWJib2xldGggYXV0aGVudGljYXRpb248L2gyPlxuIjsKLQlwcmludCAiWW91IGhhdmUgYXR0ZW1wdGVkIHRvIGxvZyBpbiB1c2luZyBTaGliYm9sZXRoIGZyb20gYW48YnI+XG4iOwotCXByaW50ICJpbnN0aXR1dGlvbiB0aGF0IGRvZXMgbm90IGFsbG93IFZDTCB0byBzZWUgeW91cjxicj48YnI+XG4iOwotCXByaW50ICJlZHVQZXJzb25QcmluY2lwYWxOYW1lLjxicj48YnI+XG4iOwotCXByaW50ICJZb3UgbmVlZCB0byBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yIG9mIHlvdXIgaW5zdGl0dXRpb24nczxicj5cbiI7Ci0JcHJpbnQgIklkUCB0byBoYXZlIGVkdVBlcnNvblByaW5jaXBhbE5hbWUgbWFkZSBhdmFpbGFibGUgdG8gVkNMIGluPGJyPlxuIjsKLQlwcmludCAib3JkZXIgdG8gbG9nIGluIHVzaW5nIFNoaWJib2xldGguXG4iOwotCi0JJG1zZyA9ICJTb21lb25lIHRyaWVkIHRvIGxvZyBpbiB0byBWQ0wgdXNpbmcgU2hpYmJvbGV0aCBmcm9tIGFuIElkUCAiCi0JICAgICAuICJ0aGF0IGRvZXMgbm90IHJlbGVhc2UgZXBwbiB0byB1cy5cblxuIgotCSAgICAgLiAiVGhlIGZvbGxvd2luZyBkYXRhIHdhcyBpbiBcJF9TRVJWRVI6XG5cbiI7Ci0JZm9yZWFjaCgkX1NFUlZFUiBhcyAka2V5ID0+ICR2YWwpCi0JCSRtc2cgLj0gIiRrZXkgPT4gJHZhbFxuIjsKLQkkbWFpbFBhcmFtcyA9ICItZiIgLiBFTlZFTE9QRVNFTkRFUjsKLQltYWlsKEVSUk9SRU1BSUwsICJFcnJvciB3aXRoIFZDTCBwYWdlcyAoZXBwbiBub3QgcHJvdmlkZWQpIiwgJG1zZywgJycsICRtYWlsUGFyYW1zKTsKLQlkYkRpc2Nvbm5lY3QoKTsKLQlleGl0OwotfQotCi0vLyBvcGVuIGtleXMKLSRmcCA9IGZvcGVuKCIuaHQtaW5jL2tleXMucGVtIiwgInIiKTsKLSRrZXkgPSBmcmVhZCgkZnAsIDgxOTIpOwotZmNsb3NlKCRmcCk7Ci0ka2V5c1sicHJpdmF0ZSJdID0gb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKCRrZXksICRwZW1rZXkpOwotaWYoISAka2V5c1sncHJpdmF0ZSddKQotCWFib3J0KDYpOwotJGZwID0gZm9wZW4oIi5odC1pbmMvcHVia2V5LnBlbSIsICJyIik7Ci0ka2V5ID0gZnJlYWQoJGZwLCA4MTkyKTsKLWZjbG9zZSgkZnApOwotJGtleXNbInB1YmxpYyJdID0gb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoJGtleSk7Ci1pZighICRrZXlzWydwdWJsaWMnXSkKLQlhYm9ydCg3KTsKLQotIyBnZXQgVkNMIGFmZmlsaWF0aW9uIGZyb20gc2hpYiBhZmZpbGlhdGlvbgotJHRtcCA9IGV4cGxvZGUoJzsnLCAkX1NFUlZFUlsnZXBwbiddKTsKLSR0bXAgPSBleHBsb2RlKCdAJywgJHRtcFswXSk7Ci0kdXNlcm5hbWUgPSBzdHJ0b2xvd2VyKCR0bXBbMF0pOwotJHRtcDEgPSBteXNxbF9lc2NhcGVfc3RyaW5nKHN0cnRvbG93ZXIoJHRtcFsxXSkpOwotJHF1ZXJ5ID0gIlNFTEVDVCBuYW1lLCBzaGlib25seSBGUk9NIGFmZmlsaWF0aW9uIFdIRVJFIHNoaWJuYW1lID0gJyR0bXAxJyI7Ci0kcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLSMgaWYgc2hpYiBhZmZpbGlhdGlvbiBub3QgYWxyZWFkeSBpbiBWQ0wsIGNyZWF0ZSBhZmZpbGlhdGlvbgotaWYoISAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpKSB7Ci0JJGFmZmlsID0gc3RydG9sb3dlcigkdG1wWzFdKTsKLQkkdG1wID0gZXhwbG9kZSgnLicsICRhZmZpbCk7Ci0JYXJyYXlfcG9wKCR0bXApOwotCSRhZmZpbG5hbWUgPSBzdHJ0b3VwcGVyKGltcGxvZGUoJycsICR0bXApKTsKLQkkYWZmaWxuYW1lID0gcHJlZ19yZXBsYWNlKCcvW15BLVowLTldLycsICcnLCAkYWZmaWxuYW1lKTsKLQkkcXVlcnkgPSAiU0VMRUNUIG5hbWUsICIKLQkgICAgICAgLiAgICAgICAgInNoaWJuYW1lICIKLQkgICAgICAgLiAiRlJPTSBhZmZpbGlhdGlvbiAiCi0JICAgICAgIC4gIldIRVJFIG5hbWUgTElLRSAnJGFmZmlsbmFtZSUnICIKLQkgICAgICAgLiAiT1JERVIgQlkgbmFtZSBERVNDICIKLQkgICAgICAgLiAiTElNSVQgMSI7Ci0JJHFoID0gZG9RdWVyeSgkcXVlcnksIDEwMSk7Ci0JaWYoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxaCkpIHsKLQkJaWYocHJlZ19tYXRjaCgiLyRhZmZpbG5hbWUoWzAtOV0rKS8iLCAkcm93WyduYW1lJ10sICRtYXRjaGVzKSkgewotCQkJJGNudCA9ICRtYXRjaGVzWzFdOwotCQkJJGNudCsrOwotCQkJJG5ld2FmZmlsbmFtZSA9ICRhZmZpbG5hbWUgLiAkY250OwotCQl9Ci0JCWVsc2VpZigkYWZmaWxuYW1lICE9ICRyb3dbJ25hbWUnXSAmJiAkYWZmaWwgIT0gJHJvd1snc2hpYm5hbWUnXSkgewotCQkJJG5ld2FmZmlsbmFtZSA9ICRhZmZpbG5hbWU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkkbXNnID0gIlNvbWVvbmUgdHJpZWQgdG8gbG9nIGluIHRvIFZDTCB1c2luZyBTaGliYm9sZXRoIGZyb20gYW4gSWRQICIKLQkJCSAgICAgLiAiYWZmaWxpYXRpb24gdGhhdCBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBhZGRlZC5cblxuIgotCQkJICAgICAuICJlcHBuOiB7JF9TRVJWRVJbJ2VwcG4nXX1cbiIKLQkJCSAgICAgLiAiZ2l2ZW5OYW1lOiB7JF9TRVJWRVJbJ2dpdmVuTmFtZSddfVxuIgotCQkJICAgICAuICJzbjogeyRfU0VSVkVSWydzbiddfVxuIjsKLQkJCWlmKGFycmF5X2tleV9leGlzdHMoJ21haWwnLCAkX1NFUlZFUikpCi0JCQkJJG1zZyAuPSAibWFpbDogeyRfU0VSVkVSWydtYWlsJ119XG5cbiI7Ci0JCQkkbXNnIC49InRyaWVkIHRvIGFkZCBWQ0wgYWZmaWxpYXRpb24gbmFtZSBcIiRhZmZpbG5hbWVcIiB3aXRoICIKLQkJCSAgICAgLiAic2hpYm5hbWUgXCIkYWZmaWxcIiI7Ci0JCQkkbWFpbFBhcmFtcyA9ICItZiIgLiBFTlZFTE9QRVNFTkRFUjsKLQkJCW1haWwoRVJST1JFTUFJTCwgIkVycm9yIHdpdGggVkNMIHBhZ2VzIChwcm9ibGVtIGFkZGluZyBzaGliIGFmZmlsKSIsICRtc2csICcnLCAkbWFpbFBhcmFtcyk7Ci0JCQlwcmludCAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlxuIjsKLQkJCXByaW50ICI8aDI+RXJyb3IgZW5jb3VudGVyZWQ8L2gyPlxuIjsKLQkJCXByaW50ICJZb3UgaGF2ZSBhdHRlbXB0ZWQgdG8gbG9nIGluIHRvIFZDTCB1c2luZyBhIFNoaWJib2xldGg8YnI+XG4iOwotCQkJcHJpbnQgIklkZW50aXR5IFByb3ZpZGVyIHRoYXQgVkNMIGhhcyBub3QgYmVlbiBjb25maWd1cmVkIHRvPGJyPlxuIjsKLQkJCXByaW50ICJ3b3JrIHdpdGguICBWQ0wgYWRtaW5pc3RyYXRvcnMgaGF2ZSBiZWVuIG5vdGlmaWVkIG9mIHRoZTxicj5cbiI7Ci0JCQlwcmludCAicHJvYmxlbS48YnI+XG4iOwotCQkJcHJpbnQgIjwvYm9keT48L2h0bWw+XG4iOwotCQkJZGJEaXNjb25uZWN0KCk7Ci0JCQlleGl0OwotCQl9Ci0JfQotCWVsc2UKLQkJJG5ld2FmZmlsbmFtZSA9ICRhZmZpbG5hbWU7Ci0JJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGFmZmlsaWF0aW9uICIKLQkgICAgICAgLiAgICAgICAgIihuYW1lLCAiCi0JICAgICAgIC4gICAgICAgICJzaGlibmFtZSwgIgotCSAgICAgICAuICAgICAgICAic2hpYm9ubHkpICIKLQkgICAgICAgLiAiVkFMVUVTICIKLQkgICAgICAgLiAgICAgICAgIignJG5ld2FmZmlsbmFtZScsICIKLQkgICAgICAgLiAgICAgICAgIiciIC4gbXlzcWxfZXNjYXBlX3N0cmluZygkYWZmaWwpIC4gIicsICIKLQkgICAgICAgLiAgICAgICAgIjEpIjsKLQlkb1F1ZXJ5KCRxdWVyeSwgMTAxLCAndmNsJywgMSk7Ci0JdW5zZXQoJHJvdyk7Ci0JJHJvdyA9IGFycmF5KCduYW1lJyA9PiAkbmV3YWZmaWxuYW1lLCAnc2hpYm9ubHknID0+IDEpOwotfQotJGFmZmlsID0gJHJvd1snbmFtZSddOwotIyBjcmVhdGUgVkNMIHVzZXJpZAotJHVzZXJpZCA9ICIkdXNlcm5hbWVAJGFmZmlsIjsKLQotaWYoJHJvd1snc2hpYm9ubHknXSkgewotCSR1c2VyZGF0YSA9IHVwZGF0ZVNoaWJVc2VyKCR1c2VyaWQpOwotCXVwZGF0ZVNoaWJHcm91cHMoJHVzZXJkYXRhWydpZCddLCAkX1NFUlZFUlsnYWZmaWxpYXRpb24nXSk7Ci0JJHVzZXJuaWQgPSAkdXNlcmRhdGFbJ2lkJ107Ci19Ci1lbHNlIHsKLQkkdXNlcm5pZCA9IGdldFVzZXJsaXN0SUQoJHVzZXJpZCwgMSk7Ci0JaWYoaXNfbnVsbCgkdXNlcm5pZCkpIHsKLQkJJHRtcCA9IHVwZGF0ZVNoaWJVc2VyKCR1c2VyaWQpOwotCQkkdXNlcm5pZCA9ICR0bXBbJ2lkJ107Ci0JfQotfQotCi0kYWZmaWxpZCA9IGdldEFmZmlsaWF0aW9uSUQoJGFmZmlsKTsKLWFkZExvZ2luTG9nKCR1c2VyaWQsICdzaGliYm9sZXRoJywgJGFmZmlsaWQsIDEpOwotCi0jIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGFuZCBjaGFuZ2UgRVhBTVBMRTEgdG8gbWF0Y2ggeW91ciBuZWVkcyB0byBhZGQgYWxsCi0jIHVzZXJzIGZyb20gYSBzcGVjaWZpYyBhZmZpbGlhdGlvbiB0byBhIHBhcnRpY3VsYXIgdXNlciBncm91cAotLyppZigkYWZmaWwgPT0gJ0VYQU1QTEUxJykgewotCSRnaWQgPSBnZXRVc2VyR3JvdXBJRCgnQWxsIEVYQU1QTEUxIFVzZXJzJywgJGFmZmlsaWQpOwotCSRxdWVyeSA9ICJJTlNFUlQgSUdOT1JFIElOVE8gdXNlcmdyb3VwbWVtYmVycyAiCi0JICAgICAgIC4gIih1c2VyaWQsIHVzZXJncm91cGlkKSAiCi0JICAgICAgIC4gIlZBTFVFUyAoJHVzZXJuaWQsICRnaWQpIjsKLQlkb1F1ZXJ5KCRxdWVyeSwgMzA3KTsKLX0qLwotCi1pZihhcnJheV9rZXlfZXhpc3RzKCdTaGliLWxvZ291dHVybCcsICRfU0VSVkVSKSkKLQkkbG9nb3V0dXJsID0gJF9TRVJWRVJbJ1NoaWItbG9nb3V0dXJsJ107Ci1lbHNlCi0JJGxvZ291dHVybCA9ICcnOwotCi0jIHNhdmUgZGF0YSB0byBzaGliYXV0aCB0YWJsZQotJHNoaWJkYXRhID0gYXJyYXkoJ1NoaWItQXBwbGljYXRpb24tSUQnID0+ICRfU0VSVkVSWydTaGliLUFwcGxpY2F0aW9uLUlEJ10sCi0gICAgICAgICAgICAgICAgICAnU2hpYi1JZGVudGl0eS1Qcm92aWRlcicgPT4gJF9TRVJWRVJbJ1NoaWItSWRlbnRpdHktUHJvdmlkZXInXSwKLSAgICAgICAgICAgICAgICAgICMnU2hpYi1BdXRobkNvbnRleHQtRGVjJyA9PiAkX1NFUlZFUlsnU2hpYi1BdXRobkNvbnRleHQtRGVjbCddLAotICAgICAgICAgICAgICAgICAgJ1NoaWItbG9nb3V0dXJsJyA9PiAkbG9nb3V0dXJsLAotICAgICAgICAgICAgICAgICAgJ2VwcG4nID0+ICRfU0VSVkVSWydlcHBuJ10sCi0gICAgICAgICAgICAgICAgICAndW5zY29wZWQtYWZmaWxpYXRpb24nID0+ICRfU0VSVkVSWyd1bnNjb3BlZC1hZmZpbGlhdGlvbiddLAotICAgICAgICAgICAgICAgICAgJ2FmZmlsaWF0aW9uJyA9PiAkX1NFUlZFUlsnYWZmaWxpYXRpb24nXSwKLSk7Ci0kc2VyZGF0YSA9IG15c3FsX2VzY2FwZV9zdHJpbmcoc2VyaWFsaXplKCRzaGliZGF0YSkpOwotJHF1ZXJ5ID0gIlNFTEVDVCBpZCAiCi0gICAgICAgLiAiRlJPTSBzaGliYXV0aCAiCi0gICAgICAgLiAiV0hFUkUgc2Vzc2lkID0gJ3skX1NFUlZFUlsnU2hpYi1TZXNzaW9uLUlEJ119JyI7Ci0kcWggPSBkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLWlmKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcWgpKSB7Ci0JJHNoaWJhdXRoaWQgPSAkcm93WydpZCddOwotfQotZWxzZSB7Ci0JJHRzID0gc3RydG90aW1lKCRfU0VSVkVSWydTaGliLUF1dGhlbnRpY2F0aW9uLUluc3RhbnQnXSk7Ci0JJHRzID0gdW5peFRvRGF0ZXRpbWUoJHRzKTsKLQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gc2hpYmF1dGggIgotCSAgICAgICAuICAgICAgICAiKHVzZXJpZCwgIiAKLQkgICAgICAgLiAgICAgICAgInRzLCAiCi0JICAgICAgIC4gICAgICAgICJzZXNzaWQsICIKLQkgICAgICAgLiAgICAgICAgImRhdGEpICIKLQkgICAgICAgLiAiVkFMVUVTICIKLQkgICAgICAgLiAgICAgICAgIigkdXNlcm5pZCwgIgotCSAgICAgICAuICAgICAgICAiJyR0cycsICIKLQkgICAgICAgLiAgICAgICAgIid7JF9TRVJWRVJbJ1NoaWItU2Vzc2lvbi1JRCddfScsICIKLQkgICAgICAgLiAgICAgICAgIickc2VyZGF0YScpIjsKLQlkb1F1ZXJ5KCRxdWVyeSwgMTAxKTsKLQkkcWggPSBkb1F1ZXJ5KCJTRUxFQ1QgTEFTVF9JTlNFUlRfSUQoKSBGUk9NIHNoaWJhdXRoIiwgMTAxKTsKLQlpZighICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHFoKSkgewotCQkjIHRvZG8KLQl9Ci0JJHNoaWJhdXRoaWQgPSAkcm93WzBdOwotfQotCi0jIGdldCBjb29raWUgZGF0YQotJGNvb2tpZSA9IGdldEF1dGhDb29raWVEYXRhKCR1c2VyaWQsIDYwMCwgJHNoaWJhdXRoaWQpOwotIyBzZXQgY29va2llCi1pZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICI1LjIiLCAiPj0iKSA9PSB0cnVlKQotCSNzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAkY29va2llWyd0cyddLCAiLyIsIENPT0tJRURPTUFJTiwgMSwgMSk7Ci0Jc2V0Y29va2llKCJWQ0xBVVRIIiwgInskY29va2llWydkYXRhJ119IiwgMCwgIi8iLCBDT09LSUVET01BSU4sIDAsIDEpOwotZWxzZQotCSNzZXRjb29raWUoIlZDTEFVVEgiLCAieyRjb29raWVbJ2RhdGEnXX0iLCAkY29va2llWyd0cyddLCAiLyIsIENPT0tJRURPTUFJTiwgMSk7Ci0Jc2V0Y29va2llKCJWQ0xBVVRIIiwgInskY29va2llWydkYXRhJ119IiwgMCwgIi8iLCBDT09LSUVET01BSU4pOwotIyBzZXQgc2tpbiBjb29raWUgYmFzZWQgb24gYWZmaWxpYXRpb24KLXN3aXRjaCgkYWZmaWwpIHsKLQljYXNlICdFeGFtcGxlMSc6Ci0JY2FzZSAnRVhBTVBMRTInOgotCQkkc2tpbiA9IHN0cnRvdXBwZXIoJGFmZmlsKTsKLQkJc2V0Y29va2llKCJWQ0xTS0lOIiwgJHNraW4sICh0aW1lKCkgKyAyNjc4NDAwKSwgIi8iLCBDT09LSUVET01BSU4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzZXRjb29raWUoIlZDTFNLSU4iLCAiZGVmYXVsdCIsICh0aW1lKCkgKyAyNjc4NDAwKSwgIi8iLCBDT09LSUVET01BSU4pOwotfQotaGVhZGVyKCJMb2NhdGlvbjogIiAuIEJBU0VVUkwgLiAiLyIpOwotZGJEaXNjb25uZWN0KCk7CitAcmVxdWlyZV9vbmNlKCcuLi8uaHQtaW5jL2NvbmYucGhwJyk7CitoZWFkZXIoIkxvY2F0aW9uOiAiIC4gQkFTRVVSTCAuIFNDUklQVCk7CiA/PgpkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzZXR1cC5waHAgYi93ZWIvdGVzdHNldHVwLnBocAppbmRleCBiYTNlNWFlLi42MDlmMGFiIDEwMDY0NAotLS0gYS93ZWIvdGVzdHNldHVwLnBocAorKysgYi93ZWIvdGVzdHNldHVwLnBocApAQCAtNzksMTQgKzc5LDE4IEBACiAKICRpbmNsdWRlc2VjcmV0cyA9IDE7CiAkaW5jbHVkZWNvbmYgPSAxOworJGhvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107CitpZiAoc3RycG9zKCRob3N0LCAnOicpKSB7CisJJGhvc3QgPSBzdWJzdHIoJGhvc3QsIDAsIHN0cnBvcygkaG9zdCwgJzonKSk7Cit9CiAKLWlmKCEgaXAybG9uZyhnZXRIb3N0YnluYW1lKCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpKSB7CitpZighIGlwMmxvbmcoZ2V0SG9zdGJ5bmFtZSgkaG9zdCkpKSB7CiAJcHJpbnQgJGhlYWRlcjsKIAkjIHBocCB2ZXJzaW9uCiAJcHJpbnQgIlBIUCB2ZXJzaW9uOiAiIC4gcGhwdmVyc2lvbigpIC4gIjxicj48YnI+XG4iOwotCXRpdGxlKCJUcnlpbmcgdG8gcmVzb2x2ZSBteSBob3N0bmFtZSAoeyRfU0VSVkVSWydIVFRQX0hPU1QnXX0pIik7CisJdGl0bGUoIlRyeWluZyB0byByZXNvbHZlIG15IGhvc3RuYW1lICgkaG9zdCkiKTsKIAlwcmludCAiPHVsPlxuIjsKLQlmYWlsKCJ1bmFibGUgdG8gcmVzb2x2ZSBteSBob3N0bmFtZTsgZW5zdXJlIHskX1NFUlZFUlsnSFRUUF9IT1NUJ119IGlzIGluIEROUyBvciBjcmVhdGUgYW4gZW50cnkgZm9yIGl0IGluIC9ldGMvaG9zdHMiKTsKKwlmYWlsKCJ1bmFibGUgdG8gcmVzb2x2ZSBteSBob3N0bmFtZTsgZW5zdXJlICRob3N0IGlzIGluIEROUyBvciBjcmVhdGUgYW4gZW50cnkgZm9yIGl0IGluIC9ldGMvaG9zdHMiKTsKIAlwcmludCAiPC91bD5cbiI7CiAJJGluY2x1ZGVzZWNyZXRzID0gMDsKIAkkaW5jbHVkZWNvbmYgPSAwOwpAQCAtMTYwLDggKzE2NCw3IEBACiAKICMgY29uZi5waHAgdGVzdHMKICRjcmVhdGVjcnlwdGtleSA9IDA7Ci1pZigkaW5jbHVkZWNvbmYgJiYgaW5jbHVkZSgnLmh0LWluYy9jb25mLnBocCcpKSB7Ci0JJGhvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107CitpZigkaW5jbHVkZWNvbmYgJiYgaW5jbHVkZSgnLmh0LWluYy9jb25mLnBocCcpKSB7CQogCWlmKCEgZGVmaW5lZCgnQ09PS0lFRE9NQUlOJykpIHsKIAkJcHJpbnQgJGhlYWRlcjsKIAkJIyBwaHAgdmVyc2lvbgpAQCAtMjE5LDggKzIyMiwxMCBAQAogCWVsc2UgewogCQlpZihzdWJzdHJfY29tcGFyZShCQVNFVVJMLCAnaHR0cHM6JywgMCwgNiwgdHJ1ZSkgPT0gMCkKIAkJCXBhc3MoIkJBU0VVUkwgY29ycmVjdGx5IHNldCB0byB1c2UgaHR0cHMiKTsKKwkJZWxzZWlmKFNTTE9GRkxPQUQgPT0gMSAmJiBzdWJzdHJfY29tcGFyZShCQVNFVVJMLCAnaHR0cDonLCAwLCA1LCB0cnVlKSA9PSAwKQorCQkgICAgICAgIHBhc3MoIkJBU0VVUkwgc2V0IHRvIHVzZSBodHRwIGFzIFNTTCBpcyBvZmZsb2FkZWQgdG8gbG9hZCBiYWxhbmNlciIpOwogCQllbHNlCi0JCQlmYWlsKCJCQVNFVVJMIGlzIG5vdCBzZXQgdG8gdXNlIGh0dHBzLiBodHRwcyBpcyByZXF1aXJlZC4iKTsKKwkJCWZhaWwoIkJBU0VVUkwgaXMgbm90IHNldCB0byB1c2UgaHR0cHMgYW5kIFNTTCBvZmZsb2FkaW5nIGlzIG5vdCBlbmFibGVkLiBodHRwcyBpcyByZXF1aXJlZC4iKTsKIAl9CiAJcHJpbnQgIjwvdWw+XG4iOwogCmRpZmYgLS1naXQgYS93ZWIvdGhlbWVzL2NvcHlkb2pvY3NzLnNoIGIvd2ViL3RoZW1lcy9jb3B5ZG9qb2Nzcy5zaAppbmRleCBmNjRkNzhiLi42MzVjM2EwIDEwMDc1NQotLS0gYS93ZWIvdGhlbWVzL2NvcHlkb2pvY3NzLnNoCisrKyBiL3dlYi90aGVtZXMvY29weWRvam9jc3Muc2gKQEAgLTUxLDExICs1MSwxOCBAQAogZmkKIAogY2QgJHBhdGgvJHNraW4vY3NzL2Rvam8KLW12IHR1bmRyYS5jc3MgJHNraW4uY3NzCitpZiBbWyAtZiB0dW5kcmEuY3NzIF1dOyB0aGVuCisJbXYgdHVuZHJhLmNzcyAkc2tpbi5jc3MKK2ZpCisKIGlmIFtbIC1yIHR1bmRyYS5jc3MuY29tbWVudGVkLmNzcyBdXTsgdGhlbgogCW12IHR1bmRyYS5jc3MuY29tbWVudGVkLmNzcyAkc2tpbi5jc3MuY29tbWVudGVkLmNzcwogZmkKLW12IHR1bmRyYV9ydGwuY3NzICR7c2tpbn1fcnRsLmNzcworCitpZiBbWyAtZiB0dW5kcmFfcnRsLmNzcyBdXTsgdGhlbgorCW12IHR1bmRyYV9ydGwuY3NzICR7c2tpbn1fcnRsLmNzcworZmkKKwogaWYgW1sgLXIgdHVuZHJhX3J0bC5jc3MuY29tbWVudGVkLmNzcyBdXTsgdGhlbgogCW12IHR1bmRyYV9ydGwuY3NzLmNvbW1lbnRlZC5jc3MgJHtza2lufV9ydGwuY3NzLmNvbW1lbnRlZC5jc3MKIGZpCg==