From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0701.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe40::701]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id F3CF51A1DF6 for ; Tue, 23 Aug 2016 06:45:32 -0700 (PDT) Received: from CS1PR84MB0229.NAMPRD84.PROD.OUTLOOK.COM (10.162.190.151) by CS1PR84MB0231.NAMPRD84.PROD.OUTLOOK.COM (10.162.190.153) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.587.9; Tue, 23 Aug 2016 13:45:29 +0000 Received: from CS1PR84MB0229.NAMPRD84.PROD.OUTLOOK.COM ([10.162.190.151]) by CS1PR84MB0229.NAMPRD84.PROD.OUTLOOK.COM ([10.162.190.151]) with mapi id 15.01.0557.027; Tue, 23 Aug 2016 13:45:29 +0000 From: "Shah, Tapan" To: Ruiyu Ni , "edk2-devel@lists.01.org" CC: Jaben Carsey Thread-Topic: [edk2] [PATCH 3/3] Revert "ShellPkg: Move FindFirstCharacter/GetNextParameter to ShellCommandLib" Thread-Index: AQHR/On5MXxdULZvlkGm6bXZdNe2F6BWjytA Date: Tue, 23 Aug 2016 13:45:29 +0000 Message-ID: References: <20160823025609.468312-1-ruiyu.ni@intel.com> <20160823025609.468312-4-ruiyu.ni@intel.com> In-Reply-To: <20160823025609.468312-4-ruiyu.ni@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=tapandshah@hpe.com; x-originating-ip: [173.172.190.106] x-ms-office365-filtering-correlation-id: 948ab408-4d8a-48d9-a27c-08d3cb5bbf16 x-microsoft-exchange-diagnostics: 1; CS1PR84MB0231; 6:napqdj0LBX4QsfdjaWVXcdm2HzH4yAbe91gvHkg1EMiQY1WSFpZqYr6l1dJPocd+8IM3oEVvepKqEV9X1V9Lr2FhU/Lh1CEXZr+7XwIS/8cuX+Z2VgoC/IRe+fLXO8FaI5SfQ8gOxMk6gDZYsI4QwBKEXHlWrEGv/DMgQIJRtKCxKU2VE/5v4ivuALfHb5pmD55a+pDbaEJ8d/im5XdNzdOoEF/6CWfezwsuCLcs66Cqp0B1hBuXxjnBwtrtB4Ws1kkQMT2C050E+QPK5OUS8U8FO50N1WK1ci+rgq5KCvc4RXYETPdmNeLh0zehJycETnTRBDzY42+b9RbvJ1uteA==; 5:axTVBPSja6MmhwOW8Idqn4y/231VRhVAXTtLLPYNQPEmRycemB5t5MMM3E76wcqy58jPuNOUqq9e3hXNyg0G1YRYDdp57wvM2YDf+wSzQTetYaKCe4WxCbqHBMmDEXWPIPaEB+UBrNwmv0lwukQFuw==; 24:xFwjcJSk2sDcZhMIVvG73javbBHqwZr4wYV5qchzKQyy0El7kyHlE9K12lFwzMKjD6hZDuk5eXnqURsr/n/+o6vwE5T4d+x9KpYuF7iot3g=; 7:5p227RkI2oPs7gAloZZvCGDVutaa4T6tCTEOho05ULYnZr3Oc5iPvHRikPyyJhXQPf+rncdzwH5z+x/ERI0eVfUyv0owYwbQXAg4EfXJASEERSXgGEd0v9X3gOfgMaJN9i0AbcJ3OhxoIwhqZ8e15IAji0xoh9zlzFnCEeTy4EBWpuTGZKXOSswtoXRR5gGi1PDsMl/XUFwoAqAcy042zuVyat+A0ChMQXcbKlFGXyZqQD01h2NIk2RBck9D0zpb x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CS1PR84MB0231; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(227479698468861)(162533806227266)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026); SRVR:CS1PR84MB0231; BCL:0; PCL:0; RULEID:; SRVR:CS1PR84MB0231; x-forefront-prvs: 004395A01C x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(6009001)(7916002)(189002)(377454003)(13464003)(199003)(3280700002)(2950100001)(7736002)(77096005)(87936001)(106356001)(19580405001)(5660300001)(305945005)(7696003)(7846002)(2900100001)(74316002)(101416001)(9686002)(2906002)(54356999)(76176999)(19580395003)(4326007)(15975445007)(86362001)(575784001)(586003)(3846002)(6116002)(102836003)(33656002)(50986999)(92566002)(11100500001)(189998001)(97736004)(5001770100001)(66066001)(122556002)(106116001)(2501003)(10400500002)(3660700001)(81166006)(81156014)(8676002)(99286002)(8936002)(68736007)(105586002)(5002640100001)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:CS1PR84MB0231; H:CS1PR84MB0229.NAMPRD84.PROD.OUTLOOK.COM; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: hpe.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2016 13:45:29.5333 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR84MB0231 Subject: Re: [PATCH 3/3] Revert "ShellPkg: Move FindFirstCharacter/GetNextParameter to ShellCommandLib" X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Aug 2016 13:45:33 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U2VyaWVzIFJldmlld2VkIEJ5OiBUYXBhbiBTaGFoIDx0YXBhbmRzaGFoQGhwZS5jb20+DQoNCi0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1k ZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mIFJ1aXl1IE5pDQpTZW50OiBN b25kYXksIEF1Z3VzdCAyMiwgMjAxNiA5OjU2IFBNDQpUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmcNCkNjOiBKYWJlbiBDYXJzZXkgPGphYmVuLmNhcnNleUBpbnRlbC5jb20+DQpTdWJqZWN0OiBb ZWRrMl0gW1BBVENIIDMvM10gUmV2ZXJ0ICJTaGVsbFBrZzogTW92ZSBGaW5kRmlyc3RDaGFyYWN0 ZXIvR2V0TmV4dFBhcmFtZXRlciB0byBTaGVsbENvbW1hbmRMaWIiDQoNClRoaXMgcmV2ZXJ0cyBj b21taXQgYzBiY2QzNDMzZjMzODc2YzUxOWJmNTU2N2UwYWI2OTI2MWI1N2ZlOS4NClRoZSBhYm92 ZSBjb21taXQgY2F1c2VzIHNldmVyYWwgcmVncmVzc2lvbiBvZiAiZWNobyIgY29tbWFuZDoNCjEu IERvdWJsZSBxdW90ZXMgYXJlIG5vdCBiZWluZyBzdHJpcHBlZCBmcm9tIHRoZSBmaW5hbCB0ZXh0 LiBVRUZJIFNoZWxsIDIuMiBzZWN0aW9uIDMuNC41IGNob3BzIG91dCB0aGUgcXVvdGVzLg0KMi4g T3V0cHV0IHJlZGlyZWN0aW9uIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLiBUZXh0IGlzIGJl aW5nIHJlZGlyZWN0ZWQsIGJ1dCB0aGUg4oCYPiDigKbigJkgdGV4dCBzaG91bGQgbm90IGJlLg0K My4gSW5jb25zaXN0ZW50IHNwZWNpYWwgY2hhcmFjdGVyIGhhbmRsaW5nLiAgRm9yIGV4YW1wbGUs IGNvbW1lbnRzIHdpdGggIyBzZWVtIHRvIGJlIHBhcnNlZCBvdXQgY29ycmVjdGx5LCBidXQgaGFu ZGluZyBvZiBeIGlzIGluY29ycmVjdC4NCkluIHN1bW1hcnksIOKAmGVjaG8g4oCcWW91IGFyZSBe IzHigJ0gPiB0LnR4dOKAmSByZXN1bHRzIGluIHRoZSBiZWxvdyBjb250ZW50IGluIHQudHh0Og0K IOKAnFlvdSBhcmUgXiMx4oCdID4gdC50eHQNCg0KQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29y ZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMA0KU2lnbmVkLW9mZi1ieTogUnVpeXUgTmkgPHJ1 aXl1Lm5pQGludGVsLmNvbT4NCkNjOiBKYWJlbiBDYXJzZXkgPGphYmVuLmNhcnNleUBpbnRlbC5j b20+DQotLS0NCiBTaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5jICAgICAgICAgICAg ICAgICB8ICA4MSArKysrKy0tLS0NCiBTaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5o ICAgICAgICAgICAgICAgICB8ICAxOCArKw0KIC4uLi9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbFBh cmFtZXRlcnNQcm90b2NvbC5jICAgIHwgMTYwICsrKysrKysrKysrKysrKysrLQ0KIC4uLi9BcHBs aWNhdGlvbi9TaGVsbC9TaGVsbFBhcmFtZXRlcnNQcm90b2NvbC5oICAgIHwgIDI5ICsrKysNCiBT aGVsbFBrZy9JbmNsdWRlL0xpYnJhcnkvU2hlbGxDb21tYW5kTGliLmggICAgICAgICB8ICA0NSAt LS0tLQ0KIC4uLi9VZWZpU2hlbGxDb21tYW5kTGliL1VlZmlTaGVsbENvbW1hbmRMaWIuYyAgICAg IHwgMTg1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIDYgZmlsZXMgY2hhbmdlZCwgMjU4IGluc2Vy dGlvbnMoKyksIDI2MCBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0FwcGxp Y2F0aW9uL1NoZWxsL1NoZWxsLmMgYi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5j DQppbmRleCAzMDgwYTE2Li4wYjYzNjJlIDEwMDY0NA0KLS0tIGEvU2hlbGxQa2cvQXBwbGljYXRp b24vU2hlbGwvU2hlbGwuYw0KKysrIGIvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGwu Yw0KQEAgLTIxMyw3ICsyMTMsNyBAQCBDb250YWluc1NwbGl0KA0KIA0KICAgRmlyc3RRdW90ZSAg ICA9IEZpbmROZXh0SW5zdGFuY2UgKENtZExpbmUsIEwiXCIiLCBUUlVFKTsNCiAgIFNlY29uZFF1 b3RlICAgPSBOVUxMOw0KLSAgVGVtcFNwb3QgICAgICA9IFNoZWxsRmluZEZpcnN0Q2hhcmFjdGVy KENtZExpbmUsIEwifCIsIFRSVUUpOw0KKyAgVGVtcFNwb3QgICAgICA9IEZpbmRGaXJzdENoYXJh Y3RlcihDbWRMaW5lLCBMInwiLCBMJ14nKTsNCiANCiAgIGlmIChGaXJzdFF1b3RlID09IE5VTEwg ICAgfHwgDQogICAgICAgVGVtcFNwb3QgPT0gTlVMTCAgICAgIHx8IA0KQEAgLTIzNiw3ICsyMzYs NyBAQCBDb250YWluc1NwbGl0KA0KICAgICAgIGNvbnRpbnVlOw0KICAgICB9IGVsc2Ugew0KICAg ICAgIEZpcnN0UXVvdGUgPSBGaW5kTmV4dEluc3RhbmNlIChTZWNvbmRRdW90ZSArIDEsIEwiXCIi LCBUUlVFKTsNCi0gICAgICBUZW1wU3BvdCA9IFNoZWxsRmluZEZpcnN0Q2hhcmFjdGVyKFRlbXBT cG90ICsgMSwgTCJ8IiwgVFJVRSk7DQorICAgICAgVGVtcFNwb3QgPSBGaW5kRmlyc3RDaGFyYWN0 ZXIoVGVtcFNwb3QgKyAxLCBMInwiLCBMJ14nKTsNCiAgICAgICBjb250aW51ZTsNCiAgICAgfSAN CiAgIH0NCkBAIC03MTYsNyArNzE2LDYgQEAgRnJlZVJlc291cmNlczoNCiAgIH0NCiANCiAgIFNo ZWxsRnJlZUVudlZhckxpc3QgKCk7DQotICBTaGVsbFNldFJhd0NtZExpbmUgKE5VTEwpOw0KIA0K ICAgaWYgKFNoZWxsQ29tbWFuZEdldEV4aXQoKSkgew0KICAgICByZXR1cm4gKChFRklfU1RBVFVT KVNoZWxsQ29tbWFuZEdldEV4aXRDb2RlKCkpOw0KQEAgLTE5OTMsNyArMTk5Miw3IEBAIElzVmFs aWRTcGxpdCgNCiAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsNCiAgICAgfQ0K ICAgICBUZW1wV2Fsa2VyID0gKENIQVIxNiopVGVtcDsNCi0gICAgaWYgKCFFRklfRVJST1IgKFNo ZWxsR2V0TmV4dFBhcmFtZXRlciAoJlRlbXBXYWxrZXIsIEZpcnN0UGFyYW1ldGVyLCBTdHJTaXpl KENtZExpbmUpLCBUUlVFKSkpIHsNCisgICAgaWYgKCFFRklfRVJST1IoR2V0TmV4dFBhcmFtZXRl cigmVGVtcFdhbGtlciwgJkZpcnN0UGFyYW1ldGVyLCANCisgU3RyU2l6ZShDbWRMaW5lKSwgVFJV RSkpKSB7DQogICAgICAgaWYgKEdldE9wZXJhdGlvblR5cGUoRmlyc3RQYXJhbWV0ZXIpID09IFVu a25vd25fSW52YWxpZCkgew0KICAgICAgICAgU2hlbGxQcmludEhpaUV4KC0xLCAtMSwgTlVMTCwg U1RSSU5HX1RPS0VOIChTVFJfU0hFTExfTk9UX0ZPVU5EKSwgU2hlbGxJbmZvT2JqZWN0LkhpaUhh bmRsZSwgRmlyc3RQYXJhbWV0ZXIpOw0KICAgICAgICAgU2V0TGFzdEVycm9yKFNIRUxMX05PVF9G T1VORCk7DQpAQCAtMjA0Miw3ICsyMDQxLDcgQEAgVmVyaWZ5U3BsaXQoDQogICAvLw0KICAgLy8g cmVjdXJzZSB0byB2ZXJpZnkgdGhlIG5leHQgaXRlbQ0KICAgLy8NCi0gIFRlbXBTcG90ID0gU2hl bGxGaW5kRmlyc3RDaGFyYWN0ZXIoQ21kTGluZSwgTCJ8IiwgVFJVRSkgKyAxOw0KKyAgVGVtcFNw b3QgPSBGaW5kRmlyc3RDaGFyYWN0ZXIoQ21kTGluZSwgTCJ8IiwgTCdeJykgKyAxOw0KICAgaWYg KCpUZW1wU3BvdCA9PSBMJ2EnICYmIA0KICAgICAgICgqKFRlbXBTcG90ICsgMSkgPT0gTCcgJyB8 fCAqKFRlbXBTcG90ICsgMSkgPT0gQ0hBUl9OVUxMKQ0KICAgICAgKSB7DQpAQCAtMjE1OSw3ICsy MTU4LDcgQEAgRG9IZWxwVXBkYXRlKA0KIA0KICAgV2Fsa2VyID0gKkNtZExpbmU7DQogICB3aGls ZShXYWxrZXIgIT0gTlVMTCAmJiAqV2Fsa2VyICE9IENIQVJfTlVMTCkgew0KLSAgICBpZiAoIUVG SV9FUlJPUiAoU2hlbGxHZXROZXh0UGFyYW1ldGVyICgmV2Fsa2VyLCBDdXJyZW50UGFyYW1ldGVy LCBTdHJTaXplKCpDbWRMaW5lKSwgVFJVRSkpKSB7DQorICAgIGlmICghRUZJX0VSUk9SKEdldE5l eHRQYXJhbWV0ZXIoJldhbGtlciwgJkN1cnJlbnRQYXJhbWV0ZXIsIA0KKyBTdHJTaXplKCpDbWRM aW5lKSwgVFJVRSkpKSB7DQogICAgICAgaWYgKFN0clN0cihDdXJyZW50UGFyYW1ldGVyLCBMIi0/ IikgPT0gQ3VycmVudFBhcmFtZXRlcikgew0KICAgICAgICAgQ3VycmVudFBhcmFtZXRlclswXSA9 IEwnICc7DQogICAgICAgICBDdXJyZW50UGFyYW1ldGVyWzFdID0gTCcgJzsNCkBAIC0yNTkwLDcg KzI1ODksNiBAQCBSdW5TaGVsbENvbW1hbmQoDQogICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICpGaXJzdFBhcmFtZXRlcjsNCiAgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKlRlbXBXYWxr ZXI7DQogICBTSEVMTF9PUEVSQVRJT05fVFlQRVMgICAgIFR5cGU7DQotICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICpPbGRDbWRMaW5lOw0KIA0KICAgQVNTRVJUKENtZExpbmUgIT0gTlVMTCk7 DQogICBpZiAoU3RyTGVuKENtZExpbmUpID09IDApIHsNCkBAIC0yNTk4LDE0ICsyNTk2LDExIEBA IFJ1blNoZWxsQ29tbWFuZCgNCiAgIH0NCiANCiAgIFN0YXR1cyAgICAgICAgICAgICAgPSBFRklf U1VDQ0VTUzsNCi0gIEZpcnN0UGFyYW1ldGVyICAgICAgPSBOVUxMOw0KICAgQ2xlYW5PcmlnaW5h bCAgICAgICA9IE5VTEw7DQotICBPbGRDbWRMaW5lICAgICAgICAgID0gTlVMTDsNCiANCiAgIENs ZWFuT3JpZ2luYWwgPSBTdHJuQ2F0R3JvdygmQ2xlYW5PcmlnaW5hbCwgTlVMTCwgQ21kTGluZSwg MCk7DQogICBpZiAoQ2xlYW5PcmlnaW5hbCA9PSBOVUxMKSB7DQotICAgIFN0YXR1cyA9IEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KLSAgICBnb3RvIERvbmU7DQorICAgIHJldHVybiAoRUZJX09VVF9P Rl9SRVNPVVJDRVMpOw0KICAgfQ0KIA0KICAgVHJpbVNwYWNlcygmQ2xlYW5PcmlnaW5hbCk7DQpA QCAtMjYzMiwzNiArMjYyNywzNSBAQCBSdW5TaGVsbENvbW1hbmQoDQogICAvLyBIYW5kbGUgY2Fz ZSB0aGF0IHBhc3NlZCBpbiBjb21tYW5kIGxpbmUgaXMganVzdCAxIG9yIG1vcmUgIiAiIGNoYXJh Y3RlcnMuDQogICAvLw0KICAgaWYgKFN0ckxlbiAoQ2xlYW5PcmlnaW5hbCkgPT0gMCkgew0KLSAg ICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCi0gICAgZ290byBEb25lOw0KKyAgICBTSEVMTF9GUkVF X05PTl9OVUxMKENsZWFuT3JpZ2luYWwpOw0KKyAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsNCiAg IH0NCiANCiAgIFN0YXR1cyA9IFByb2Nlc3NDb21tYW5kTGluZVRvRmluYWwoJkNsZWFuT3JpZ2lu YWwpOw0KICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQotICAgIGdvdG8gRG9uZTsNCisgICAg U0hFTExfRlJFRV9OT05fTlVMTChDbGVhbk9yaWdpbmFsKTsNCisgICAgcmV0dXJuIChTdGF0dXMp Ow0KICAgfQ0KIA0KLSAgT2xkQ21kTGluZSA9IFNoZWxsR2V0UmF3Q21kTGluZSAoKTsNCi0gIFNo ZWxsU2V0UmF3Q21kTGluZSAoQ2xlYW5PcmlnaW5hbCk7DQotDQogICAvLw0KICAgLy8gV2UgZG9u J3QgZG8gbm9ybWFsIHByb2Nlc3Npbmcgd2l0aCBhIHNwbGl0IGNvbW1hbmQgbGluZSAob3V0cHV0 IGZyb20gb25lIGNvbW1hbmQgaW5wdXQgdG8gYW5vdGhlcikNCiAgIC8vDQogICBpZiAoQ29udGFp bnNTcGxpdChDbGVhbk9yaWdpbmFsKSkgew0KICAgICBTdGF0dXMgPSBQcm9jZXNzTmV3U3BsaXRD b21tYW5kTGluZShDbGVhbk9yaWdpbmFsKTsNCi0gICAgZ290byBEb25lOw0KLSAgfQ0KKyAgICBT SEVMTF9GUkVFX05PTl9OVUxMKENsZWFuT3JpZ2luYWwpOw0KKyAgICByZXR1cm4gKFN0YXR1cyk7 DQorICB9DQogDQogICAvLw0KICAgLy8gV2UgbmVlZCB0aGUgZmlyc3QgcGFyYW1ldGVyIGluZm9y bWF0aW9uIHNvIHdlIGNhbiBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbiB0eXBlDQogICAvLw0KICAg Rmlyc3RQYXJhbWV0ZXIgPSBBbGxvY2F0ZVplcm9Qb29sKFN0clNpemUoQ2xlYW5PcmlnaW5hbCkp Ow0KICAgaWYgKEZpcnN0UGFyYW1ldGVyID09IE5VTEwpIHsNCi0gICAgU3RhdHVzID0gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQotICAgIGdvdG8gRG9uZTsNCisgICAgU0hFTExfRlJFRV9OT05fTlVM TChDbGVhbk9yaWdpbmFsKTsNCisgICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7DQog ICB9DQogICBUZW1wV2Fsa2VyID0gQ2xlYW5PcmlnaW5hbDsNCi0gIGlmICghRUZJX0VSUk9SIChT aGVsbEdldE5leHRQYXJhbWV0ZXIgKCZUZW1wV2Fsa2VyLCBGaXJzdFBhcmFtZXRlciwgU3RyU2l6 ZShDbGVhbk9yaWdpbmFsKSwgVFJVRSkpKSB7DQorICBpZiAoIUVGSV9FUlJPUihHZXROZXh0UGFy YW1ldGVyKCZUZW1wV2Fsa2VyLCAmRmlyc3RQYXJhbWV0ZXIsIA0KKyBTdHJTaXplKENsZWFuT3Jp Z2luYWwpLCBUUlVFKSkpIHsNCiAgICAgLy8NCiAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBmaXJz dCBwYXJhbWV0ZXIgd2UgY2hhbmdlIHRoZSBiZWhhdmlvcg0KICAgICAvLw0KQEAgLTI2ODYsMTIg KzI2ODAsOSBAQCBSdW5TaGVsbENvbW1hbmQoDQogICAgIFNoZWxsUHJpbnRIaWlFeCgtMSwgLTEs IE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX1NIRUxMX05PVF9GT1VORCksIFNoZWxsSW5mb09iamVj dC5IaWlIYW5kbGUsIEZpcnN0UGFyYW1ldGVyKTsNCiAgICAgU2V0TGFzdEVycm9yKFNIRUxMX05P VF9GT1VORCk7DQogICB9DQotDQotRG9uZToNCi0gIFNoZWxsU2V0UmF3Q21kTGluZSAoT2xkQ21k TGluZSk7DQotICBTSEVMTF9GUkVFX05PTl9OVUxMIChPbGRDbWRMaW5lKTsNCi0gIFNIRUxMX0ZS RUVfTk9OX05VTEwgKENsZWFuT3JpZ2luYWwpOw0KLSAgU0hFTExfRlJFRV9OT05fTlVMTCAoRmly c3RQYXJhbWV0ZXIpOw0KKyANCisgIFNIRUxMX0ZSRUVfTk9OX05VTEwoQ2xlYW5PcmlnaW5hbCk7 DQorICBTSEVMTF9GUkVFX05PTl9OVUxMKEZpcnN0UGFyYW1ldGVyKTsNCiANCiAgIHJldHVybiAo U3RhdHVzKTsNCiB9DQpAQCAtMzEyOSwzICszMTIwLDM3IEBAIFJ1blNjcmlwdEZpbGUgKA0KICAg cmV0dXJuIChTdGF0dXMpOw0KIH0NCiANCisvKioNCisgIFJldHVybiB0aGUgcG9pbnRlciB0byB0 aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbnkgY2hhcmFjdGVyIGZyb20gYSBsaXN0IG9mIGNoYXJh Y3RlcnMuDQorDQorICBAcGFyYW1baW5dIFN0cmluZyAgICAgICAgICAgdGhlIHN0cmluZyB0byBw YXJzZQ0KKyAgQHBhcmFtW2luXSBDaGFyYWN0ZXJMaXN0ICAgIHRoZSBsaXN0IG9mIGNoYXJhY3Rl ciB0byBsb29rIGZvcg0KKyAgQHBhcmFtW2luXSBFc2NhcGVDaGFyYWN0ZXIgIEFuIGVzY2FwZSBj aGFyYWN0ZXIgdG8gc2tpcA0KKw0KKyAgQHJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0 IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nDQorICBAcmV0dmFsIENIQVJfTlVMTCBubyBpbnN0YW5j ZSBvZiBhbnkgY2hhcmFjdGVyIGluIENoYXJhY3Rlckxpc3Qgd2FzIA0KK2ZvdW5kIGluIFN0cmlu ZyAqKi8gQ09OU1QgQ0hBUjE2KiBFRklBUEkgRmluZEZpcnN0Q2hhcmFjdGVyKA0KKyAgSU4gQ09O U1QgQ0hBUjE2ICpTdHJpbmcsDQorICBJTiBDT05TVCBDSEFSMTYgKkNoYXJhY3Rlckxpc3QsDQor ICBJTiBDT05TVCBDSEFSMTYgRXNjYXBlQ2hhcmFjdGVyDQorICApDQorew0KKyAgVUlOVDMyIFdh bGtDaGFyOw0KKyAgVUlOVDMyIFdhbGtTdHI7DQorDQorICBmb3IgKFdhbGtTdHIgPSAwOyBXYWxr U3RyIDwgU3RyTGVuKFN0cmluZyk7IFdhbGtTdHIrKykgew0KKyAgICBpZiAoU3RyaW5nW1dhbGtT dHJdID09IEVzY2FwZUNoYXJhY3Rlcikgew0KKyAgICAgIFdhbGtTdHIrKzsNCisgICAgICBjb250 aW51ZTsNCisgICAgfQ0KKyAgICBmb3IgKFdhbGtDaGFyID0gMDsgV2Fsa0NoYXIgPCBTdHJMZW4o Q2hhcmFjdGVyTGlzdCk7IFdhbGtDaGFyKyspIHsNCisgICAgICBpZiAoU3RyaW5nW1dhbGtTdHJd ID09IENoYXJhY3Rlckxpc3RbV2Fsa0NoYXJdKSB7DQorICAgICAgICByZXR1cm4gKCZTdHJpbmdb V2Fsa1N0cl0pOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKyAgcmV0dXJuIChTdHJpbmcgKyBT dHJMZW4oU3RyaW5nKSk7DQorfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0FwcGxpY2F0aW9uL1No ZWxsL1NoZWxsLmggYi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5oDQppbmRleCBh MzRjOTFhLi4yOWIzNmIwIDEwMDY0NA0KLS0tIGEvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwv U2hlbGwuaA0KKysrIGIvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGwuaA0KQEAgLTM3 MSw2ICszNzEsMjQgQEAgUnVuU2NyaXB0RmlsZSAoDQogICApOw0KIA0KIC8qKg0KKyAgUmV0dXJu IHRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFueSBjaGFyYWN0ZXIgZnJv bSBhIGxpc3Qgb2YgY2hhcmFjdGVycy4NCisNCisgIEBwYXJhbVtpbl0gU3RyaW5nICAgICAgICAg ICB0aGUgc3RyaW5nIHRvIHBhcnNlDQorICBAcGFyYW1baW5dIENoYXJhY3Rlckxpc3QgICAgdGhl IGxpc3Qgb2YgY2hhcmFjdGVyIHRvIGxvb2sgZm9yDQorICBAcGFyYW1baW5dIEVzY2FwZUNoYXJh Y3RlciAgQW4gZXNjYXBlIGNoYXJhY3RlciB0byBza2lwDQorDQorICBAcmV0dXJuIHRoZSBsb2Nh dGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcNCisgIEByZXR2YWwgQ0hB Ul9OVUxMIG5vIGluc3RhbmNlIG9mIGFueSBjaGFyYWN0ZXIgaW4gQ2hhcmFjdGVyTGlzdCB3YXMg DQorZm91bmQgaW4gU3RyaW5nICoqLyBDT05TVCBDSEFSMTYqIEVGSUFQSSBGaW5kRmlyc3RDaGFy YWN0ZXIoDQorICBJTiBDT05TVCBDSEFSMTYgKlN0cmluZywNCisgIElOIENPTlNUIENIQVIxNiAq Q2hhcmFjdGVyTGlzdCwNCisgIElOIENPTlNUIENIQVIxNiBFc2NhcGVDaGFyYWN0ZXINCisgICk7 DQorDQorLyoqDQogICBDbGVhbnMgb2ZmIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhbmQg dGFicy4NCiANCiAgIEBwYXJhbVtpbl0gU3RyaW5nIHBvaW50ZXIgdG8gdGhlIHN0cmluZyB0byB0 cmltIHRoZW0gb2ZmLg0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0FwcGxpY2F0aW9uL1NoZWxsL1No ZWxsUGFyYW1ldGVyc1Byb3RvY29sLmMgYi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVs bFBhcmFtZXRlcnNQcm90b2NvbC5jDQppbmRleCAwNzg1OTAyLi4zNjg0ZjljIDEwMDY0NA0KLS0t IGEvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGxQYXJhbWV0ZXJzUHJvdG9jb2wuYw0K KysrIGIvU2hlbGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGxQYXJhbWV0ZXJzUHJvdG9jb2wu Yw0KQEAgLTIwLDYgKzIwLDE2MiBAQA0KIEJPT0xFQU4gQXNjaWlSZWRpcmVjdGlvbiA9IEZBTFNF Ow0KIA0KIC8qKg0KKyAgUmV0dXJuIHRoZSBuZXh0IHBhcmFtZXRlcidzIGVuZCBmcm9tIGEgY29t bWFuZCBsaW5lIHN0cmluZy4NCisNCisgIEBwYXJhbVtpbl0gU3RyaW5nICAgICAgICB0aGUgc3Ry aW5nIHRvIHBhcnNlDQorKiovDQorQ09OU1QgQ0hBUjE2Kg0KK0VGSUFQSQ0KK0ZpbmRFbmRPZlBh cmFtZXRlcigNCisgIElOIENPTlNUIENIQVIxNiAqU3RyaW5nDQorICApDQorew0KKyAgQ09OU1Qg Q0hBUjE2ICpGaXJzdDsNCisgIENPTlNUIENIQVIxNiAqQ2xvc2VRdW90ZTsNCisNCisgIEZpcnN0 ID0gRmluZEZpcnN0Q2hhcmFjdGVyKFN0cmluZywgTCIgXCIiLCBMJ14nKTsNCisNCisgIC8vDQor ICAvLyBub3RoaW5nLCBhbGwgb25lIHBhcmFtZXRlciByZW1haW5pbmcgIC8vICBpZiAoKkZpcnN0 ID09IENIQVJfTlVMTCkgDQorIHsNCisgICAgcmV0dXJuIChGaXJzdCk7DQorICB9DQorDQorICAv Lw0KKyAgLy8gSWYgc3BhY2UgYmVmb3JlIGEgcXVvdGUgKG9yIG5laXRoZXIgZm91bmQsIGkuZS4g Ym90aCBDSEFSX05VTEwpLCAgDQorIC8vIHRoZW4gdGhhdCdzIHRoZSBlbmQuDQorICAvLw0KKyAg aWYgKCpGaXJzdCA9PSBMJyAnKSB7DQorICAgIHJldHVybiAoRmlyc3QpOw0KKyAgfQ0KKw0KKyAg Q2xvc2VRdW90ZSA9IEZpbmRGaXJzdENoYXJhY3RlciAoRmlyc3QrMSwgTCJcIiIsIEwnXicpOw0K Kw0KKyAgLy8NCisgIC8vIFdlIGRpZCBub3QgZmluZCBhIHRlcm1pbmF0b3IuLi4NCisgIC8vDQor ICBpZiAoKkNsb3NlUXVvdGUgPT0gQ0hBUl9OVUxMKSB7DQorICAgIHJldHVybiAoTlVMTCk7DQor ICB9DQorDQorICByZXR1cm4gKEZpbmRFbmRPZlBhcmFtZXRlciAoQ2xvc2VRdW90ZSsxKSk7IH0N CisNCisvKioNCisgIFJldHVybiB0aGUgbmV4dCBwYXJhbWV0ZXIgZnJvbSBhIGNvbW1hbmQgbGlu ZSBzdHJpbmcuDQorDQorICBUaGlzIGZ1bmN0aW9uIG1vdmVzIHRoZSBuZXh0IHBhcmFtZXRlciBm cm9tIFdhbGtlciBpbnRvIFRlbXBQYXJhbWV0ZXIgDQorIGFuZCBtb3ZlcyAgV2Fsa2VyIHVwIHBh c3QgdGhhdCBwYXJhbWV0ZXIgZm9yIHJlY3Vyc2l2ZSBjYWxsaW5nLiAgV2hlbiANCisgdGhlIGZp bmFsIHBhcmFtZXRlciAgaXMgbW92ZWQgKldhbGtlciB3aWxsIGJlIHNldCB0byBOVUxMOw0KKw0K KyAgVGVtcCBQYXJhbWV0ZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcGFyYW1l dGVyIGJlZm9yZSANCisgY2FsbGluZyB0aGlzICBmdW5jdGlvbi4NCisNCisgIFRoaXMgd2lsbCBh bHNvIHJlbW92ZSBhbGwgcmVtYWluaW5nIF4gY2hhcmFjdGVycyBhZnRlciBwcm9jZXNzaW5nLg0K Kw0KKyAgQHBhcmFtW2luLCBvdXRdIFdhbGtlciAgICAgICAgICBwb2ludGVyIHRvIHN0cmluZyBv ZiBjb21tYW5kIGxpbmUuICBBZGp1c3RlZCB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZW1pbmFpbmcgY29tbWFuZCBsaW5lIG9uIHJldHVybg0KKyAgQHBhcmFtW2luLCBv dXRdIFRlbXBQYXJhbWV0ZXIgICBwb2ludGVyIHRvIHN0cmluZyBvZiBjb21tYW5kIGxpbmUgaXRl bSBleHRyYWN0ZWQuDQorICBAcGFyYW1baW5dICAgICAgTGVuZ3RoICAgICAgICAgIGJ1ZmZlciBz aXplIG9mIFRlbXBQYXJhbWV0ZXIuDQorICBAcGFyYW1baW5dICAgICAgU3RyaXBRdW90YXRpb24g IGlmIFRSVUUgdGhlbiBzdHJpcCB0aGUgcXVvdGF0aW9uIG1hcmtzIHN1cnJvdW5kaW5nDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJhbWV0ZXJzLg0KKw0KKyAgQHJl dHVybiAgIEVGSV9JTkFMSURfUEFSQU1FVEVSICBBIHJlcXVpcmVkIHBhcmFtZXRlciB3YXMgTlVM TCBvciBwb2ludGVkIHRvIGEgTlVMTCBvciBlbXB0eSBzdHJpbmcuDQorICBAcmV0dXJuICAgRUZJ X05PVF9GT1VORCAgICAgICAgIEEgY2xvc2luZyAiIGNvdWxkIG5vdCBiZSBmb3VuZCBvbiB0aGUg c3BlY2lmaWVkIHN0cmluZw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitHZXROZXh0UGFy YW1ldGVyKA0KKyAgSU4gT1VUIENIQVIxNiAgICoqV2Fsa2VyLA0KKyAgSU4gT1VUIENIQVIxNiAg ICoqVGVtcFBhcmFtZXRlciwNCisgIElOIENPTlNUIFVJTlROICBMZW5ndGgsDQorICBJTiBCT09M RUFOICAgICAgU3RyaXBRdW90YXRpb24NCisgICkNCit7DQorICBDT05TVCBDSEFSMTYgKk5leHRE ZWxpbTsNCisNCisgIGlmIChXYWxrZXIgICAgICAgICAgID09IE5VTEwNCisgICAgfHwqV2Fsa2Vy ICAgICAgICAgID09IE5VTEwNCisgICAgfHxUZW1wUGFyYW1ldGVyICAgID09IE5VTEwNCisgICAg fHwqVGVtcFBhcmFtZXRlciAgID09IE5VTEwNCisgICAgKXsNCisgICAgcmV0dXJuIChFRklfSU5W QUxJRF9QQVJBTUVURVIpOw0KKyAgfQ0KKw0KKw0KKyAgLy8NCisgIC8vIG1ha2Ugc3VyZSB3ZSBk b250IGhhdmUgYW55IGxlYWRpbmcgc3BhY2VzICAvLyAgd2hpbGUgKCgqV2Fsa2VyKVswXSANCisg PT0gTCcgJykgew0KKyAgICAgICgqV2Fsa2VyKSsrOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIG1h a2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHNvbWUgcGFyYW1zIG5vdy4uLg0KKyAgLy8NCisgIGlmIChT dHJMZW4oKldhbGtlcikgPT0gMCkgew0KK0RFQlVHX0NPREVfQkVHSU4oKTsNCisgICAgKldhbGtl ciAgICAgICAgPSBOVUxMOw0KK0RFQlVHX0NPREVfRU5EKCk7DQorICAgIHJldHVybiAoRUZJX0lO VkFMSURfUEFSQU1FVEVSKTsNCisgIH0NCisNCisgIE5leHREZWxpbSA9IEZpbmRFbmRPZlBhcmFt ZXRlcigqV2Fsa2VyKTsNCisNCisgIGlmIChOZXh0RGVsaW0gPT0gTlVMTCl7DQorREVCVUdfQ09E RV9CRUdJTigpOw0KKyAgICAqV2Fsa2VyICAgICAgICA9IE5VTEw7DQorREVCVUdfQ09ERV9FTkQo KTsNCisgICAgcmV0dXJuIChFRklfTk9UX0ZPVU5EKTsNCisgIH0NCisNCisgIFN0cm5DcHlTKCpU ZW1wUGFyYW1ldGVyLCBMZW5ndGggLyBzaXplb2YoQ0hBUjE2KSwgKCpXYWxrZXIpLCANCisgTmV4 dERlbGltIC0gKldhbGtlcik7DQorDQorICAvLw0KKyAgLy8gQWRkIGEgQ0hBUl9OVUxMIGlmIHdl IGRpZG50IGdldCBvbmUgdmlhIHRoZSBjb3B5ICAvLyAgaWYgDQorICgqTmV4dERlbGltICE9IENI QVJfTlVMTCkgew0KKyAgICAoKlRlbXBQYXJhbWV0ZXIpW05leHREZWxpbSAtICpXYWxrZXJdID0g Q0hBUl9OVUxMOyAgfQ0KKw0KKyAgLy8NCisgIC8vIFVwZGF0ZSBXYWxrZXIgZm9yIHRoZSBuZXh0 IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBmdW5jdGlvbiAgLy8gIA0KKyAqV2Fsa2VyID0gKENIQVIx NiopTmV4dERlbGltOw0KKw0KKyAgLy8NCisgIC8vIFJlbW92ZSBhbnkgbm9uLWVzY2FwZWQgcXVv dGVzIGluIHRoZSBzdHJpbmcgIC8vIFJlbW92ZSBhbnkgDQorIHJlbWFpbmluZyBlc2NhcGUgY2hh cmFjdGVycyBpbiB0aGUgc3RyaW5nICAvLyAgZm9yIChOZXh0RGVsaW0gPSANCisgRmluZEZpcnN0 Q2hhcmFjdGVyKCpUZW1wUGFyYW1ldGVyLCBMIlwiXiIsIENIQVJfTlVMTCkNCisgICAgOyAqTmV4 dERlbGltICE9IENIQVJfTlVMTCANCisgICAgOyBOZXh0RGVsaW0gPSBGaW5kRmlyc3RDaGFyYWN0 ZXIoTmV4dERlbGltLCBMIlwiXiIsIENIQVJfTlVMTCkNCisgICAgKSB7DQorICAgIGlmICgqTmV4 dERlbGltID09IEwnXicpIHsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIGVsaW1pbmF0ZSB0aGUg ZXNjYXBlIF4NCisgICAgICAvLw0KKyAgICAgIENvcHlNZW0gKChDSEFSMTYqKU5leHREZWxpbSwg TmV4dERlbGltICsgMSwgU3RyU2l6ZSAoTmV4dERlbGltICsgMSkpOw0KKyAgICAgIE5leHREZWxp bSsrOw0KKyAgICB9IGVsc2UgaWYgKCpOZXh0RGVsaW0gPT0gTCdcIicpIHsNCisNCisgICAgICAv Lw0KKyAgICAgIC8vIGVsaW1pbmF0ZSB0aGUgdW5lc2NhcGVkIHF1b3RlDQorICAgICAgLy8NCisg ICAgICBpZiAoU3RyaXBRdW90YXRpb24pIHsNCisgICAgICAgIENvcHlNZW0gKChDSEFSMTYqKU5l eHREZWxpbSwgTmV4dERlbGltICsgMSwgU3RyU2l6ZSAoTmV4dERlbGltICsgMSkpOw0KKwkgIH0g ZWxzZXsNCisgICAgICAgIE5leHREZWxpbSsrOw0KKwkgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCiAgIEZ1bmN0aW9uIHRvIHBvcHVsYXRl IEFyZ2MgYW5kIEFyZ3YuDQogDQogICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgQ29tbWFuZExp bmUgYW5kIGRpdmlkZXMgaXQgaW50byBzdGFuZGFyZCBDIHN0eWxlIEFyZ2MvQXJndiBAQCAtODIs NyArMjM4LDcgQEAgUGFyc2VDb21tYW5kTGluZVRvQXJncygNCiAgICAgICA7IFdhbGtlciAhPSBO VUxMICYmICpXYWxrZXIgIT0gQ0hBUl9OVUxMDQogICAgICAgOyBDb3VudCsrDQogICAgICAgKSB7 DQotICAgIGlmIChFRklfRVJST1IgKFNoZWxsR2V0TmV4dFBhcmFtZXRlciAoJldhbGtlciwgVGVt cFBhcmFtZXRlciwgU2l6ZSwgVFJVRSkpKSB7DQorICAgIGlmIChFRklfRVJST1IoR2V0TmV4dFBh cmFtZXRlcigmV2Fsa2VyLCAmVGVtcFBhcmFtZXRlciwgU2l6ZSwgDQorIFRSVUUpKSkgew0KICAg ICAgIGJyZWFrOw0KICAgICB9DQogICB9DQpAQCAtMTAwLDcgKzI1Niw3IEBAIFBhcnNlQ29tbWFu ZExpbmVUb0FyZ3MoDQogICBXYWxrZXIgPSAoQ0hBUjE2KilOZXdDb21tYW5kTGluZTsNCiAgIHdo aWxlKFdhbGtlciAhPSBOVUxMICYmICpXYWxrZXIgIT0gQ0hBUl9OVUxMKSB7DQogICAgIFNldE1l bTE2KFRlbXBQYXJhbWV0ZXIsIFNpemUsIENIQVJfTlVMTCk7DQotICAgIGlmIChFRklfRVJST1Ig KFNoZWxsR2V0TmV4dFBhcmFtZXRlciAoJldhbGtlciwgVGVtcFBhcmFtZXRlciwgU2l6ZSwgU3Ry aXBRdW90YXRpb24pKSkgew0KKyAgICBpZiAoRUZJX0VSUk9SKEdldE5leHRQYXJhbWV0ZXIoJldh bGtlciwgJlRlbXBQYXJhbWV0ZXIsIFNpemUsIA0KKyBTdHJpcFF1b3RhdGlvbikpKSB7DQogICAg ICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgICAgIGdvdG8gRG9uZTsNCiAg ICAgfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0FwcGxpY2F0aW9uL1NoZWxsL1NoZWxsUGFyYW1l dGVyc1Byb3RvY29sLmggYi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbFBhcmFtZXRl cnNQcm90b2NvbC5oDQppbmRleCAxMjA1ZDkyLi45MjZmMzYyIDEwMDY0NA0KLS0tIGEvU2hlbGxQ a2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGxQYXJhbWV0ZXJzUHJvdG9jb2wuaA0KKysrIGIvU2hl bGxQa2cvQXBwbGljYXRpb24vU2hlbGwvU2hlbGxQYXJhbWV0ZXJzUHJvdG9jb2wuaA0KQEAgLTE5 MCw1ICsxOTAsMzQgQEAgUGFyc2VDb21tYW5kTGluZVRvQXJncygNCiAgIElOIE9VVCBVSU5UTiAg ICAqQXJnYw0KICAgKTsNCiANCisvKioNCisgIHJldHVybiB0aGUgbmV4dCBwYXJhbWV0ZXIgZnJv bSBhIGNvbW1hbmQgbGluZSBzdHJpbmc7DQorDQorICBUaGlzIGZ1bmN0aW9uIG1vdmVzIHRoZSBu ZXh0IHBhcmFtZXRlciBmcm9tIFdhbGtlciBpbnRvIFRlbXBQYXJhbWV0ZXIgDQorIGFuZCBtb3Zl cyAgV2Fsa2VyIHVwIHBhc3QgdGhhdCBwYXJhbWV0ZXIgZm9yIHJlY3Vyc2l2ZSBjYWxsaW5nLiAg V2hlbiANCisgdGhlIGZpbmFsIHBhcmFtZXRlciAgaXMgbW92ZWQgKldhbGtlciB3aWxsIGJlIHNl dCB0byBOVUxMOw0KKw0KKyAgVGVtcCBQYXJhbWV0ZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8g aG9sZCB0aGUgcGFyYW1ldGVyIGJlZm9yZSANCisgY2FsbGluZyB0aGlzICBmdW5jdGlvbi4NCisN CisgIEBwYXJhbVtpbiwgb3V0XSBXYWxrZXIgICAgICAgICAgcG9pbnRlciB0byBzdHJpbmcgb2Yg Y29tbWFuZCBsaW5lLiAgQWRqdXN0ZWQgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVtaW5haW5nIGNvbW1hbmQgbGluZSBvbiByZXR1cm4NCisgIEBwYXJhbVtpbiwgb3V0 XSBUZW1wUGFyYW1ldGVyICAgcG9pbnRlciB0byBzdHJpbmcgb2YgY29tbWFuZCBsaW5lIGl0ZW0g ZXh0cmFjdGVkLg0KKyAgQHBhcmFtW2luXSAgICAgIExlbmd0aCAgICAgICAgICBMZW5ndGggb2Yg KCpUZW1wUGFyYW1ldGVyKSBpbiBieXRlcw0KKyAgQHBhcmFtW2luXSAgICAgIFN0cmlwUXVvdGF0 aW9uICBpZiBUUlVFIHRoZW4gc3RyaXAgdGhlIHF1b3RhdGlvbiBtYXJrcyBzdXJyb3VuZGluZw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFyYW1ldGVycy4NCisNCisg IEByZXR1cm4gICBFRklfSU5BTElEX1BBUkFNRVRFUiAgQSByZXF1aXJlZCBwYXJhbWV0ZXIgd2Fz IE5VTEwgb3IgcG9pbnRlZCB0byBhIE5VTEwgb3IgZW1wdHkgc3RyaW5nLg0KKyAgQHJldHVybiAg IEVGSV9OT1RfRk9VTkQgICAgICAgICBBIGNsb3NpbmcgIiBjb3VsZCBub3QgYmUgZm91bmQgb24g dGhlIHNwZWNpZmllZCBzdHJpbmcNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorR2V0TmV4 dFBhcmFtZXRlcigNCisgIElOIE9VVCBDSEFSMTYgICAqKldhbGtlciwNCisgIElOIE9VVCBDSEFS MTYgICAqKlRlbXBQYXJhbWV0ZXIsDQorICBJTiBDT05TVCBVSU5UTiAgTGVuZ3RoLA0KKyAgSU4g Qk9PTEVBTiAgICAgIFN0cmlwUXVvdGF0aW9uDQorICApOw0KKw0KICNlbmRpZiAvL19TSEVMTF9Q QVJBTUVURVJTX1BST1RPQ09MX1BST1ZJREVSX0hFQURFUl8NCiANCmRpZmYgLS1naXQgYS9TaGVs bFBrZy9JbmNsdWRlL0xpYnJhcnkvU2hlbGxDb21tYW5kTGliLmggYi9TaGVsbFBrZy9JbmNsdWRl L0xpYnJhcnkvU2hlbGxDb21tYW5kTGliLmgNCmluZGV4IDVjNWUyNDEuLjNlZTgyMDAgMTAwNjQ0 DQotLS0gYS9TaGVsbFBrZy9JbmNsdWRlL0xpYnJhcnkvU2hlbGxDb21tYW5kTGliLmgNCisrKyBi L1NoZWxsUGtnL0luY2x1ZGUvTGlicmFyeS9TaGVsbENvbW1hbmRMaWIuaA0KQEAgLTcxOSw0OSAr NzE5LDQgQEAgQ2F0U0R1bXBIZXggKA0KICAgSU4gVUlOVE4gICBEYXRhU2l6ZSwNCiAgIElOIFZP SUQgICAgKlVzZXJEYXRhDQogICApOw0KLQ0KLS8qKg0KLSAgUmV0dXJuIHRoZSBwb2ludGVyIHRv IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFueSBjaGFyYWN0ZXIgZnJvbSBhIGxpc3Qgb2YgY2hh cmFjdGVycy4NCi0NCi0gIEBwYXJhbVtpbl0gU3RyaW5nICAgICAgICAgICAgICAgICBUaGUgc3Ry aW5nIHRvIHBhcnNlDQotICBAcGFyYW1baW5dIENoYXJhY3Rlckxpc3QgICAgICAgICAgVGhlIGxp c3Qgb2YgY2hhcmFjdGVyIHRvIGxvb2sgZm9yDQotICBAcGFyYW1baW5dIElnbm9yZUVzY2FwZWRD aGFyYWN0ZXIgVFJVRSB0byBpZ25vcmUgZXNjYXBlZCBjaGFyYWN0ZXJzDQotDQotICBAcmV0dXJu IFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBTdHJpbmcuDQotICBA cmV0dXJuIFBvaW50ZXIgdG8gdGhlIGVuZGluZyBOVUxMIGNoYXJhY3RlciBvZiB0aGUgU3RyaW5n Lg0KLSoqLw0KLUNPTlNUIENIQVIxNioNCi1FRklBUEkNCi1TaGVsbEZpbmRGaXJzdENoYXJhY3Rl ciAoDQotICBJTiBDT05TVCBDSEFSMTYgICpTdHJpbmcsDQotICBJTiBDT05TVCBDSEFSMTYgICpD aGFyYWN0ZXJMaXN0LA0KLSAgSU4gQ09OU1QgQk9PTEVBTiBJZ25vcmVFc2NhcGVkQ2hhcmFjdGVy DQotICApOw0KLQ0KLS8qKg0KLSAgcmV0dXJuIHRoZSBuZXh0IHBhcmFtZXRlciBmcm9tIGEgY29t bWFuZCBsaW5lIHN0cmluZzsNCi0NCi0gIFRoaXMgZnVuY3Rpb24gbW92ZXMgdGhlIG5leHQgcGFy YW1ldGVyIGZyb20gV2Fsa2VyIGludG8gTmV4dFBhcmFtZXRlciBhbmQgbW92ZXMNCi0gIFdhbGtl ciB1cCBwYXN0IHRoYXQgcGFyYW1ldGVyIGZvciByZWN1cnNpdmUgY2FsbGluZy4gIFdoZW4gdGhl IGZpbmFsIHBhcmFtZXRlcg0KLSAgaXMgbW92ZWQgKldhbGtlciB3aWxsIGJlIHNldCB0byBOVUxM Ow0KLQ0KLSAgQHBhcmFtW2luLCBvdXRdIFdhbGtlciAgICAgICAgICBwb2ludGVyIHRvIHN0cmlu ZyBvZiBjb21tYW5kIGxpbmUuICBBZGp1c3RlZCB0bw0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZW1pbmFpbmcgY29tbWFuZCBsaW5lIG9uIHJldHVybg0KLSAgQHBhcmFtW2lu LCBvdXRdIE5leHRQYXJhbWV0ZXIgICBzdHJpbmcgb2YgY29tbWFuZCBsaW5lIGl0ZW0gZXh0cmFj dGVkLg0KLSAgQHBhcmFtW2luXSAgICAgIExlbmd0aCAgICAgICAgICBMZW5ndGggb2YgVGVtcFBh cmFtZXRlciBpbiBieXRlcw0KLSAgQHBhcmFtW2luXSAgICAgIFN0cmlwUXVvdGF0aW9uICBpZiBU UlVFIHRoZW4gc3RyaXAgdGhlIHF1b3RhdGlvbiBtYXJrcyBzdXJyb3VuZGluZw0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFyYW1ldGVycy4NCi0NCi0gIEByZXR1cm4g ICBFRklfSU5BTElEX1BBUkFNRVRFUiAgQSByZXF1aXJlZCBwYXJhbWV0ZXIgd2FzIE5VTEwgb3Ig cG9pbnRlZCB0byBhIE5VTEwgb3IgZW1wdHkgc3RyaW5nLg0KLSAgQHJldHVybiAgIEVGSV9OT1Rf Rk9VTkQgICAgICAgICBBIGNsb3NpbmcgIiBjb3VsZCBub3QgYmUgZm91bmQgb24gdGhlIHNwZWNp ZmllZCBzdHJpbmcNCi0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQotU2hlbGxHZXROZXh0UGFy YW1ldGVyKA0KLSAgSU4gT1VUIENIQVIxNiAgICoqV2Fsa2VyLA0KLSAgSU4gT1VUIENIQVIxNiAg ICpOZXh0UGFyYW1ldGVyLA0KLSAgSU4gQ09OU1QgVUlOVE4gIExlbmd0aCwNCi0gIElOIEJPT0xF QU4gICAgICBTdHJpcFF1b3RhdGlvbg0KLSAgKTsNCi0NCiAjZW5kaWYgLy9fU0hFTExfQ09NTUFO RF9MSUJfDQpkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxDb21tYW5kTGli L1VlZmlTaGVsbENvbW1hbmRMaWIuYyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFu ZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmMNCmluZGV4IGFjNzcxMTEuLmE5NzM2MWMgMTAwNjQ0 DQotLS0gYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbENvbW1hbmRMaWIvVWVmaVNoZWxsQ29t bWFuZExpYi5jDQorKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbENvbW1hbmRMaWIvVWVm aVNoZWxsQ29tbWFuZExpYi5jDQpAQCAtODMsMTkxICs4Myw2IEBAIENvbW1hbmRJbml0KA0KIH0N CiANCiAvKioNCi0gIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv ZiBhbnkgY2hhcmFjdGVyIGZyb20gYSBsaXN0IG9mIGNoYXJhY3RlcnMuDQotDQotICBAcGFyYW1b aW5dIFN0cmluZyAgICAgICAgICAgICAgICAgVGhlIHN0cmluZyB0byBwYXJzZQ0KLSAgQHBhcmFt W2luXSBDaGFyYWN0ZXJMaXN0ICAgICAgICAgIFRoZSBsaXN0IG9mIGNoYXJhY3RlciB0byBsb29r IGZvcg0KLSAgQHBhcmFtW2luXSBJZ25vcmVFc2NhcGVkQ2hhcmFjdGVyIFRSVUUgdG8gaWdub3Jl IGVzY2FwZWQgY2hhcmFjdGVycw0KLQ0KLSAgQHJldHVybiBUaGUgbG9jYXRpb24gb2YgdGhlIGZp cnN0IGNoYXJhY3RlciBpbiB0aGUgU3RyaW5nLg0KLSAgQHJldHVybiBQb2ludGVyIHRvIHRoZSBl bmRpbmcgTlVMTCBjaGFyYWN0ZXIgb2YgdGhlIFN0cmluZy4NCi0qKi8NCi1DT05TVCBDSEFSMTYq DQotRUZJQVBJDQotU2hlbGxGaW5kRmlyc3RDaGFyYWN0ZXIgKA0KLSAgSU4gQ09OU1QgQ0hBUjE2 ICAqU3RyaW5nLA0KLSAgSU4gQ09OU1QgQ0hBUjE2ICAqQ2hhcmFjdGVyTGlzdCwNCi0gIElOIENP TlNUIEJPT0xFQU4gSWdub3JlRXNjYXBlZENoYXJhY3Rlcg0KLSAgKQ0KLXsNCi0gIFVJTlROIFdh bGtDaGFyOw0KLSAgVUlOVE4gV2Fsa1N0cjsNCi0NCi0gIGZvciAoV2Fsa1N0ciA9IDA7IFdhbGtT dHIgPCBTdHJMZW4gKFN0cmluZyk7IFdhbGtTdHIrKykgew0KLSAgICBpZiAoSWdub3JlRXNjYXBl ZENoYXJhY3RlciAmJiAoU3RyaW5nW1dhbGtTdHJdID09IEwnXicpKSB7DQotICAgICAgV2Fsa1N0 cisrOw0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICB9DQotICAgIGZvciAoV2Fsa0NoYXIgPSAwOyBX YWxrQ2hhciA8IFN0ckxlbiAoQ2hhcmFjdGVyTGlzdCk7IFdhbGtDaGFyKyspIHsNCi0gICAgICBp ZiAoU3RyaW5nW1dhbGtTdHJdID09IENoYXJhY3Rlckxpc3RbV2Fsa0NoYXJdKSB7DQotICAgICAg ICByZXR1cm4gJlN0cmluZ1tXYWxrU3RyXTsNCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi0gIHJl dHVybiAmU3RyaW5nW1dhbGtTdHJdOw0KLX0NCi0NCi0vKioNCi0gIFJldHVybiB0aGUgbmV4dCBw YXJhbWV0ZXIncyBlbmQgZnJvbSBhIGNvbW1hbmQgbGluZSBzdHJpbmcuDQotDQotICBAcGFyYW1b aW5dIFN0cmluZyAgICAgICAgdGhlIHN0cmluZyB0byBwYXJzZQ0KLSoqLw0KLUNPTlNUIENIQVIx NioNCi1GaW5kRW5kT2ZQYXJhbWV0ZXIoDQotICBJTiBDT05TVCBDSEFSMTYgKlN0cmluZw0KLSAg KQ0KLXsNCi0gIENPTlNUIENIQVIxNiAqRmlyc3Q7DQotICBDT05TVCBDSEFSMTYgKkNsb3NlUXVv dGU7DQotDQotICBGaXJzdCA9IFNoZWxsRmluZEZpcnN0Q2hhcmFjdGVyIChTdHJpbmcsIEwiIFwi IiwgVFJVRSk7DQotDQotICAvLw0KLSAgLy8gbm90aGluZywgYWxsIG9uZSBwYXJhbWV0ZXIgcmVt YWluaW5nDQotICAvLw0KLSAgaWYgKCpGaXJzdCA9PSBDSEFSX05VTEwpIHsNCi0gICAgcmV0dXJu IChGaXJzdCk7DQotICB9DQotDQotICAvLw0KLSAgLy8gSWYgc3BhY2UgYmVmb3JlIGEgcXVvdGUg KG9yIG5laXRoZXIgZm91bmQsIGkuZS4gYm90aCBDSEFSX05VTEwpLA0KLSAgLy8gdGhlbiB0aGF0 J3MgdGhlIGVuZC4NCi0gIC8vDQotICBpZiAoKkZpcnN0ID09IEwnICcpIHsNCi0gICAgcmV0dXJu IChGaXJzdCk7DQotICB9DQotDQotICBDbG9zZVF1b3RlID0gU2hlbGxGaW5kRmlyc3RDaGFyYWN0 ZXIgKEZpcnN0KzEsIEwiXCIiLCBUUlVFKTsNCi0NCi0gIC8vDQotICAvLyBXZSBkaWQgbm90IGZp bmQgYSB0ZXJtaW5hdG9yLi4uDQotICAvLw0KLSAgaWYgKCpDbG9zZVF1b3RlID09IENIQVJfTlVM TCkgew0KLSAgICByZXR1cm4gKE5VTEwpOw0KLSAgfQ0KLQ0KLSAgcmV0dXJuIChGaW5kRW5kT2ZQ YXJhbWV0ZXIgKENsb3NlUXVvdGUrMSkpOyAtfQ0KLQ0KLS8qKg0KLSAgUmV0dXJuIHRoZSBuZXh0 IHBhcmFtZXRlciBmcm9tIGEgY29tbWFuZCBsaW5lIHN0cmluZy4NCi0NCi0gIFRoaXMgZnVuY3Rp b24gbW92ZXMgdGhlIG5leHQgcGFyYW1ldGVyIGZyb20gV2Fsa2VyIGludG8gTmV4dFBhcmFtZXRl ciBhbmQgbW92ZXMNCi0gIFdhbGtlciB1cCBwYXN0IHRoYXQgcGFyYW1ldGVyIGZvciByZWN1cnNp dmUgY2FsbGluZy4gIFdoZW4gdGhlIGZpbmFsIHBhcmFtZXRlcg0KLSAgaXMgbW92ZWQgKldhbGtl ciB3aWxsIGJlIHNldCB0byBOVUxMOw0KLQ0KLSAgVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFsbCBy ZW1haW5pbmcgXiBjaGFyYWN0ZXJzIGFmdGVyIHByb2Nlc3NpbmcuDQotDQotICBAcGFyYW1baW4s IG91dF0gV2Fsa2VyICAgICAgICAgIHBvaW50ZXIgdG8gc3RyaW5nIG9mIGNvbW1hbmQgbGluZS4g IEFkanVzdGVkIHRvDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWluYWlu ZyBjb21tYW5kIGxpbmUgb24gcmV0dXJuDQotICBAcGFyYW1baW4sIG91dF0gTmV4dFBhcmFtZXRl ciAgIHBvaW50ZXIgdG8gc3RyaW5nIG9mIGNvbW1hbmQgbGluZSBpdGVtIGV4dHJhY3RlZC4NCi0g IEBwYXJhbVtpbl0gICAgICBMZW5ndGggICAgICAgICAgYnVmZmVyIHNpemUgb2YgVGVtcFBhcmFt ZXRlci4NCi0gIEBwYXJhbVtpbl0gICAgICBTdHJpcFF1b3RhdGlvbiAgaWYgVFJVRSB0aGVuIHN0 cmlwIHRoZSBxdW90YXRpb24gbWFya3Mgc3Vycm91bmRpbmcNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIHBhcmFtZXRlcnMuDQotDQotICBAcmV0dXJuICAgRUZJX0lOQUxJ RF9QQVJBTUVURVIgIEEgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBOVUxMIG9yIHBvaW50ZWQgdG8g YSBOVUxMIG9yIGVtcHR5IHN0cmluZy4NCi0gIEByZXR1cm4gICBFRklfTk9UX0ZPVU5EICAgICAg ICAgQSBjbG9zaW5nICIgY291bGQgbm90IGJlIGZvdW5kIG9uIHRoZSBzcGVjaWZpZWQgc3RyaW5n DQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLVNoZWxsR2V0TmV4dFBhcmFtZXRlciAoDQot ICBJTiBPVVQgQ0hBUjE2ICAgKipXYWxrZXIsDQotICBJTiBPVVQgQ0hBUjE2ICAgKk5leHRQYXJh bWV0ZXIsDQotICBJTiBDT05TVCBVSU5UTiAgTGVuZ3RoLA0KLSAgSU4gQk9PTEVBTiAgICAgIFN0 cmlwUXVvdGF0aW9uDQotICApDQotew0KLSAgQ09OU1QgQ0hBUjE2ICpOZXh0RGVsaW07DQotDQot ICBpZiAoV2Fsa2VyICAgICAgICAgICA9PSBOVUxMDQotICAgIHx8KldhbGtlciAgICAgICAgICA9 PSBOVUxMDQotICAgIHx8TmV4dFBhcmFtZXRlciAgICA9PSBOVUxMDQotICAgICl7DQotICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQotICB9DQotDQotICAvLw0KLSAgLy8gbWFrZSBz dXJlIHdlIGRvbnQgaGF2ZSBhbnkgbGVhZGluZyBzcGFjZXMNCi0gIC8vDQotICB3aGlsZSAoKCpX YWxrZXIpWzBdID09IEwnICcpIHsNCi0gICAgKCpXYWxrZXIpKys7DQotICB9DQotDQotICAvLw0K LSAgLy8gbWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgc29tZSBwYXJhbXMgbm93Li4uDQotICAvLw0K LSAgaWYgKFN0ckxlbigqV2Fsa2VyKSA9PSAwKSB7DQotICAgIERFQlVHX0NPREUgKA0KLSAgICAg ICpXYWxrZXIgPSBOVUxMOw0KLSAgICApOw0KLSAgICByZXR1cm4gKEVGSV9JTlZBTElEX1BBUkFN RVRFUik7DQotICB9DQotDQotICBOZXh0RGVsaW0gPSBGaW5kRW5kT2ZQYXJhbWV0ZXIoKldhbGtl cik7DQotDQotICBpZiAoTmV4dERlbGltID09IE5VTEwpew0KLSAgICBERUJVR19DT0RFICgNCi0g ICAgICAqV2Fsa2VyID0gTlVMTDsNCi0gICAgKTsNCi0gICAgcmV0dXJuIChFRklfTk9UX0ZPVU5E KTsNCi0gIH0NCi0NCi0gIFN0cm5DcHlTKE5leHRQYXJhbWV0ZXIsIExlbmd0aCAvIHNpemVvZihD SEFSMTYpLCAoKldhbGtlciksIE5leHREZWxpbSAtICpXYWxrZXIpOw0KLQ0KLSAgLy8NCi0gIC8v IEFkZCBhIENIQVJfTlVMTCBpZiB3ZSBkaWRudCBnZXQgb25lIHZpYSB0aGUgY29weQ0KLSAgLy8N Ci0gIGlmICgqTmV4dERlbGltICE9IENIQVJfTlVMTCkgew0KLSAgICBOZXh0UGFyYW1ldGVyW05l eHREZWxpbSAtICpXYWxrZXJdID0gQ0hBUl9OVUxMOw0KLSAgfQ0KLQ0KLSAgLy8NCi0gIC8vIFVw ZGF0ZSBXYWxrZXIgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBmdW5jdGlvbg0K LSAgLy8NCi0gICpXYWxrZXIgPSAoQ0hBUjE2KilOZXh0RGVsaW07DQotDQotICAvLw0KLSAgLy8g UmVtb3ZlIGFueSBub24tZXNjYXBlZCBxdW90ZXMgaW4gdGhlIHN0cmluZw0KLSAgLy8gUmVtb3Zl IGFueSByZW1haW5pbmcgZXNjYXBlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZw0KLSAgLy8NCi0g IGZvciAoTmV4dERlbGltID0gU2hlbGxGaW5kRmlyc3RDaGFyYWN0ZXIoTmV4dFBhcmFtZXRlciwg TCJcIl4iLCBGQUxTRSkNCi0gICAgOyAqTmV4dERlbGltICE9IENIQVJfTlVMTA0KLSAgICA7IE5l eHREZWxpbSA9IFNoZWxsRmluZEZpcnN0Q2hhcmFjdGVyKE5leHREZWxpbSwgTCJcIl4iLCBGQUxT RSkNCi0gICAgKSB7DQotICAgIGlmICgqTmV4dERlbGltID09IEwnXicpIHsNCi0NCi0gICAgICAv Lw0KLSAgICAgIC8vIGVsaW1pbmF0ZSB0aGUgZXNjYXBlIF4NCi0gICAgICAvLw0KLSAgICAgIENv cHlNZW0gKChDSEFSMTYqKU5leHREZWxpbSwgTmV4dERlbGltICsgMSwgU3RyU2l6ZSAoTmV4dERl bGltICsgMSkpOw0KLSAgICAgIE5leHREZWxpbSsrOw0KLSAgICB9IGVsc2UgaWYgKCpOZXh0RGVs aW0gPT0gTCdcIicpIHsNCi0NCi0gICAgICAvLw0KLSAgICAgIC8vIGVsaW1pbmF0ZSB0aGUgdW5l c2NhcGVkIHF1b3RlDQotICAgICAgLy8NCi0gICAgICBpZiAoU3RyaXBRdW90YXRpb24pIHsNCi0g ICAgICAgIENvcHlNZW0gKChDSEFSMTYqKU5leHREZWxpbSwgTmV4dERlbGltICsgMSwgU3RyU2l6 ZSAoTmV4dERlbGltICsgMSkpOw0KLSAgICAgIH0gZWxzZSB7DQotICAgICAgICBOZXh0RGVsaW0r KzsNCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19 DQotDQotLyoqDQogICBDb25zdHJ1Y3RvciBmb3IgdGhlIFNoZWxsIENvbW1hbmQgbGlicmFyeS4N CiANCiAgIEluaXRpYWxpemUgdGhlIGxpYnJhcnkgYW5kIGRldGVybWluZSBpZiB0aGUgdW5kZXJs eWluZyBpcyBhIFVFRkkgU2hlbGwgMi4wIG9yIGFuIEVGSSBzaGVsbC4NCi0tDQoyLjkuMC53aW5k b3dzLjENCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N CmVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQplZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KaHR0cHM6 Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=