From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id E6C4BBB81 for ; Tue, 21 Mar 2006 14:46:02 +0100 (CET) Received: from gw-eur4.philips.com (gw-eur4.philips.com [161.85.125.10]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id k2LDk2Zc011711 for ; Tue, 21 Mar 2006 14:46:02 +0100 Received: from smtpscan-eur5.philips.com (smtpscan-eur5.mail.philips.com [130.144.57.168]) by gw-eur4.philips.com (Postfix) with ESMTP id 06E2C49724; Tue, 21 Mar 2006 13:46:02 +0000 (UTC) Received: from smtpscan-eur5.philips.com (localhost [127.0.0.1]) by localhost.philips.com (Postfix) with ESMTP id B457241; Tue, 21 Mar 2006 13:46:01 +0000 (GMT) Received: from smtprelay-eur2.philips.com (smtprelay-eur2.philips.com [130.144.57.171]) by smtpscan-eur5.philips.com (Postfix) with ESMTP id 7CE613A; Tue, 21 Mar 2006 13:46:01 +0000 (GMT) Received: from ehvrmh02.diamond.philips.com (ehvrmh02-srv.diamond.philips.com [130.139.27.125]) by smtprelay-eur2.philips.com (Postfix) with ESMTP id 3202936; Tue, 21 Mar 2006 13:46:01 +0000 (GMT) To: caml-list@yquem.inria.fr Cc: markus.mottl@gmail.com Subject: Another great advantage for OCaml language due to Markus Mottl MIME-Version: 1.0 X-Mailer: Lotus Notes Release 6.0.3 September 26, 2003 From: Andries Hekstra Message-ID: Date: Tue, 21 Mar 2006 14:44:24 +0100 X-MIMETrack: Serialize by Router on ehvrmh02/H/SERVER/PHILIPS(Release 6.5.3FP1HF291 | September 19, 2005) at 21/03/2006 14:44:50 Content-Type: multipart/mixed; boundary="=_mixed 004B9546C1257138_=" X-Miltered: at concorde with ID 4420039A.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; ocaml:01 markus:01 mottl:01 ocaml:01 backtrace:01 ocamlopt:01 compiler:01 markus:01 mottl:01 byte:01 debugging:01 byte:01 unhandled:01 checker:01 runtime:01 X-Attachments: type="application/octet-stream" name="ocaml_native_bt.patch" name="ocaml_native_bt.patch" X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=HTML_30_40,HTML_MESSAGE autolearn=disabled version=3.0.3 --=_mixed 004B9546C1257138_= Content-Type: multipart/alternative; boundary="=_alternative 004B9546C1257138_=" --=_alternative 004B9546C1257138_= Content-Type: text/plain; charset="US-ASCII" Dear Member of the OCaml mailing list, The problem about which I reported on this reflector around two weeks ago (array index violation after around 4 days) has in the mean time been solved thanks to the great native function call backtrace for the ocamlopt compiler due to Markus Mottl. Given that my program crashed after 3.7 days, and my program ran around 30x slower in byte code, debugging using byte code was not an option (this slowdown had been similar if I had used _DEBUG mode of a C++ program instead of _RELEASE version). Also, as reported earlier, putting "try ... with " around all attempts to index an array is not feasbile in standard OCaml for array elements in the left hand sides of assignments. A static unhandled exception checker provided on a web page, ran into dead HTML links. Hence, the native function call, which comes at minimal runtime overhead cost, mainly the cost of -inline 0, is a great new feature that would give OCaml another advantage over C++ when added to the OCaml language in a next release. Below I give a toy example : --- nlv13512/TestProgram ---> ls attempt.ml* --- nlv13512/TestProgram ---> cat att* let a = Array.make 2 0;; let f i = i*i;; let g i = a.(i);; let b = f 2;; let c = g 2;; --- nlv13512/TestProgram ---> ocamlopt -inline 0 -gb attempt.ml --- nlv13512/TestProgram ---> a.out Fatal error: exception Invalid_argument("index out of bounds") Native function backtrace: camlAttempt__g_60 camlAttempt__f_58 --- nlv13512/TestProgram ---> =Andries PS The attached patch was provided to me by Markus Mottl for the 3.09.1. release. ------------------------------------------------------------------------ Dr. Ir. Andries P. Hekstra Philips Research High Tech Campus 27 (WL-1-4.15) 5656 AG Eindhoven Tel./Fax/Secr. +31 40 27 42048/42566/44051 * Good open source anti-RSI software : http://www.workrave.org --=_alternative 004B9546C1257138_= Content-Type: text/html; charset="US-ASCII"
Dear Member of the OCaml mailing list,

The problem about which I reported on this reflector around two weeks ago (array index violation after around 4 days) has in the mean time been solved thanks to the great native function call backtrace for the ocamlopt compiler due to Markus Mottl. Given that my program crashed after 3.7 days, and my program ran around 30x slower in byte code, debugging using byte code was not an option (this slowdown had been similar if I had used _DEBUG mode of a C++ program instead of _RELEASE version). Also, as reported earlier, putting "try ... with " around all attempts to index an array is not feasbile in standard OCaml for array elements in the left hand sides of assignments. A static unhandled exception checker provided on a web page, ran into dead HTML links.

Hence, the native function call, which comes at minimal runtime overhead cost, mainly the cost of -inline 0, is a great new feature that would give OCaml another advantage over C++ when added to the OCaml language in a next release. Below I give a toy example :

--- nlv13512/TestProgram ---> ls
attempt.ml*
--- nlv13512/TestProgram ---> cat att*
let a = Array.make 2 0;;
let f i = i*i;;
let g i = a.(i);;
let b = f 2;;
let c = g 2;;
--- nlv13512/TestProgram ---> ocamlopt -inline 0 -gb attempt.ml
--- nlv13512/TestProgram ---> a.out
Fatal error: exception Invalid_argument("index out of bounds")
Native function backtrace:

  camlAttempt__g_60
  camlAttempt__f_58
--- nlv13512/TestProgram --->

=Andries

PS The attached patch was provided to me by Markus Mottl for the 3.09.1. release.




------------------------------------------------------------------------
Dr. Ir. Andries P. Hekstra
Philips Research
High Tech Campus 27  (WL-1-4.15)
5656 AG Eindhoven
Tel./Fax/Secr. +31 40 27 42048/42566/44051
  *  Good open source anti-RSI software : http://www.workrave.org  
--=_alternative 004B9546C1257138_=-- --=_mixed 004B9546C1257138_= Content-Type: application/octet-stream; name="ocaml_native_bt.patch" Content-Disposition: attachment; filename="ocaml_native_bt.patch" Content-Transfer-Encoding: base64 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAgICAgICAgICAgUEFUQ0ggRk9SIE5BVElWRSBDT0RF IEZVTkNUSU9OIEJBQ0tUUkFDRVMgRk9SIE9DQU1MDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUNFTlNFDQoNCkNvcHlyaWdodCAo QykgMjAwNQ0KSmFuZSBTdHJlZXQgSG9sZGluZywgTExDDQpBZGRyZXNzOiAxMTEgQnJvYWR3YXks IDIxc3QgRmxvb3IsIDEwMDA2IE5ldyBZb3JrLCBVU0ENCkF1dGhvcjogTWFya3VzIE1vdHRsIDxt YXJrdXMubW90dGxAZ21haWwuY29tPg0KQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KVGhpcyBwYXRj aCBpcyBiYXNlZCBvbiBhIGNvbmNlcHR1YWwgcGF0Y2ggd3JpdHRlbiBpbiAyMDAzIGJ5IENocmlz DQpIZWNrZXIgPGNoZWNrZXJAZDYuY29tPi4gIEl0IGhhcyBiZWVuIGNvbXBsZXRlbHkgcmV3cml0 dGVuIHRvIG1ha2UgaXQNCnRocmVhZC1zYWZlLCBtb3JlIGVmZmljaWVudCwgYW5kIGJldHRlciBp bnRlZ3JhdGVkIHdpdGggdGhlIE9DYW1sLXJ1bnRpbWUuDQoNClJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z DQphcmUgbWV0Og0KDQogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KDQogICAgKiBOZWl0aGVyIHRo ZSBuYW1lIG9mIEphbmUgU3RyZWV0IEhvbGRpbmcsIExMQywgbm9yIHRoZSBuYW1lcyBvZiBpdHMN CiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZA0KICAgICAgZnJvbSB0aGlzIHBhdGNoIHdpdGhvdXQgc3BlY2lmaWMgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KDQpUSElTIFBBVENIIElTIFBST1ZJREVEIEJZIFRIRSBD T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCkFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUNCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFDQpBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTDQpCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksDQpPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRg0KU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQpJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkN CkFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFBBVENILCBFVkVOIElG IEFEVklTRUQgT0YgVEhFDQpQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCg0KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFBMWUlORyBUSEUg UEFUQ0gNCg0KVGhlIHBhdGNoIHdhcyBnZW5lcmF0ZWQgYWdhaW5zdCB0aGUgQ1ZTLXJlbGVhc2Ug b2YgT0NhbWwgYXMgb2YgMjAwNS0xMS0xOCwNCmJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIHdpdGgg dGhlIHNvdXJjZSByZWxlYXNlIG9mIE9DYW1sLTMuMDkuMC4gIEl0IG1heQ0KYWxzbyB3b3JrIHdp dGggb3RoZXIgcmVsZWFzZXMgPj0gT0NhbWwtMy4wOS4wLg0KDQpUbyBhcHBseSBpdCBqdXN0IGNo ZWNrIG91dCBPQ2FtbCBmcm9tIHRoZSBDVlMtc2VydmVyIGF0IElOUklBLCBvciBkb3dubG9hZA0K dGhlIHNvdXJjZSBkaXN0cmlidXRpb24sIGFuZCBjaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3Rv cnkuDQoNCiAgICAgICAgICAgICAgICAgISEhISEhISEgRE8gTk9UIEFQUExZIFRISVMgUEFUQ0gg WUVUICEhISEhISEhDQoNCkZpcnN0IHJ1biAiY29uZmlndXJlIiB3aXRoIHRoZSBhcmd1bWVudHMg eW91IHdhbnQuICBUaGVuIGVudGVyICJtYWtlDQp3b3JsZCIuICBXaGVuIHRoZSBidWlsZCBwcm9j ZXNzIGZpbmlzaGVzLCBpdCBpcyB0aW1lIHRvIGFwcGx5IHRoZSBwYXRjaA0KYXMgZm9sbG93cyAo aW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkpOg0KDQogIHBhdGNoIC1wMCA8IHtwYXRoIHRvIHRoaXMg cGF0Y2h9L29jYW1sX25hdGl2ZV9idC5wYXRjaA0KDQpOb3cgZW50ZXIgIm1ha2UgYWxsIi4gIFRo aXMgYnVpbGQgc2hvdWxkIGVuZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6DQoNCiAgRmlsZXMg bWFpbi5jbW8gYW5kIC4uL3N0ZGxpYi9zdGRsaWIuY21hKFByaW50ZXhjKQ0KICBtYWtlIGluY29u c2lzdGVudCBhc3N1bXB0aW9ucyBvdmVyIGludGVyZmFjZSBQcmludGV4Yw0KDQpKdXN0IGlnbm9y ZSB0aGlzIGVycm9yLiAgWW91IHNob3VsZCBlbnRlciAibWFrZSBib290c3RyYXAiIG5vdy4gIFRo aXMgbGFzdA0KdGFyZ2V0IHNob3VsZCBidWlsZCB3aXRob3V0IHByb2JsZW1zLg0KDQpZb3UgY2Fu IGVudGVyICJtYWtlIG9wdCIgYW5kICJtYWtlIG9wdC5vcHQiIG5vdyB0byBidWlsZCB0aGUgbmF0 aXZlDQpjb2RlIGNvbXBpbGVyLg0KDQpGaW5hbGx5LCBpbnN0YWxsIE9DYW1sIHdpdGggIm1ha2Ug aW5zdGFsbCIsIGFuZCB5b3UgYXJlIGRvbmUuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBR0UNCg0KU2VlIGZpbGUgInN0ZGxp Yi9wcmludGV4Yy5tbGkiLCBzZWN0aW9uICJOYXRpdmUgZnVuY3Rpb24gYmFja3RyYWNlcyINCm9u IGhvdyB0byBjb21waWxlIHlvdXIgcHJvZ3JhbXMgd2l0aCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3Ig bmF0aXZlDQpmdW5jdGlvbiBiYWNrdHJhY2VzLCBob3cgdG8gdHVybiBvbiBiYWNrdHJhY2VzLCBh bmQgaG93IHRvIHByaW50L2dldA0KdGhlbSBhdCBydW50aW1lLg0KDQpOZXcgWW9yaywgMjAwNS0x MS0xOA0KTWFya3VzIE1vdHRsDQpKYW5lIFN0cmVldCBIb2xkaW5nLCBMTEMNCg0KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQoNCkluZGV4OiBNYWtlZmlsZQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jYW1s L29jYW1sL01ha2VmaWxlLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTkNCmRpZmYgLXUgLXIx LjE5OSBNYWtlZmlsZQ0KLS0tIE1ha2VmaWxlCTI0IFNlcCAyMDA1IDE2OjIwOjM2IC0wMDAwCTEu MTk5DQorKysgTWFrZWZpbGUJNyBNYXIgMjAwNiAyMTozOTo0OCAtMDAwMA0KQEAgLTcxLDcgKzcx LDcgQEANCiBBU01DT01QPWFzbWNvbXAvYXJjaC5jbW8gYXNtY29tcC9jbW0uY21vIGFzbWNvbXAv cHJpbnRjbW0uY21vIFwNCiAgIGFzbWNvbXAvcmVnLmNtbyBhc21jb21wL21hY2guY21vIGFzbWNv bXAvcHJvYy5jbW8gXA0KICAgYXNtY29tcC9jbGFtYmRhLmNtbyBhc21jb21wL2NvbXBpbGVudi5j bW8gXA0KLSAgYXNtY29tcC9jbG9zdXJlLmNtbyBhc21jb21wL2NtbWdlbi5jbW8gXA0KKyAgYXNt Y29tcC9jbG9zdXJlLmNtbyBhc21jb21wL2NtbWdlbl9idC5jbW8gYXNtY29tcC9jbW1nZW4uY21v IFwNCiAgIGFzbWNvbXAvcHJpbnRtYWNoLmNtbyBhc21jb21wL3NlbGVjdGdlbi5jbW8gYXNtY29t cC9zZWxlY3Rpb24uY21vIFwNCiAgIGFzbWNvbXAvY29tYmFsbG9jLmNtbyBhc21jb21wL2xpdmVu ZXNzLmNtbyBcDQogICBhc21jb21wL3NwaWxsLmNtbyBhc21jb21wL3NwbGl0LmNtbyBcDQpJbmRl eDogTWFrZWZpbGUubnQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY2FtbC9vY2FtbC9NYWtlZmls ZS5udCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTgNCmRpZmYgLXUgLXIxLjk4IE1ha2VmaWxl Lm50DQotLS0gTWFrZWZpbGUubnQJMjQgU2VwIDIwMDUgMTY6MjA6MzYgLTAwMDAJMS45OA0KKysr IE1ha2VmaWxlLm50CTcgTWFyIDIwMDYgMjE6Mzk6NDggLTAwMDANCkBAIC02Nyw3ICs2Nyw3IEBA DQogQVNNQ09NUD1hc21jb21wL2FyY2guY21vIGFzbWNvbXAvY21tLmNtbyBhc21jb21wL3ByaW50 Y21tLmNtbyBcDQogICBhc21jb21wL3JlZy5jbW8gYXNtY29tcC9tYWNoLmNtbyBhc21jb21wL3By b2MuY21vIFwNCiAgIGFzbWNvbXAvY2xhbWJkYS5jbW8gYXNtY29tcC9jb21waWxlbnYuY21vIFwN Ci0gIGFzbWNvbXAvY2xvc3VyZS5jbW8gYXNtY29tcC9jbW1nZW4uY21vIFwNCisgIGFzbWNvbXAv Y2xvc3VyZS5jbW8gYXNtY29tcC9jbW1nZW5fYnQuY21vIGFzbWNvbXAvY21tZ2VuLmNtbyBcDQog ICBhc21jb21wL3ByaW50bWFjaC5jbW8gYXNtY29tcC9zZWxlY3RnZW4uY21vIGFzbWNvbXAvc2Vs ZWN0aW9uLmNtbyBcDQogICBhc21jb21wL2NvbWJhbGxvYy5jbW8gYXNtY29tcC9saXZlbmVzcy5j bW8gXA0KICAgYXNtY29tcC9zcGlsbC5jbW8gYXNtY29tcC9zcGxpdC5jbW8gXA0KSW5kZXg6IGFz bWNvbXAvY21tZ2VuLm1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2NhbWwvb2NhbWwvYXNtY29t cC9jbW1nZW4ubWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEwNQ0KZGlmZiAtdSAtcjEuMTA1 IGNtbWdlbi5tbA0KLS0tIGFzbWNvbXAvY21tZ2VuLm1sCTI3IEphbiAyMDA2IDE0OjMzOjQyIC0w MDAwCTEuMTA1DQorKysgYXNtY29tcC9jbW1nZW4ubWwJNyBNYXIgMjAwNiAyMTozOTo0OCAtMDAw MA0KQEAgLTE0OTcsOSArMTQ5NywxMyBAQA0KICgqIFRyYW5zbGF0ZSBhIGZ1bmN0aW9uIGRlZmlu aXRpb24gKikNCiANCiBsZXQgdHJhbnNsX2Z1bmN0aW9uIGxibCBwYXJhbXMgYm9keSA9DQorICBs ZXQgZnVuX2JvZHkgPQ0KKyAgICBpZiAhQ2xmbGFncy5kZWJ1Z19uYXRpdmVfYmFja3RyYWNlIHRo ZW4NCisgICAgICBDc2VxdWVuY2UgKENtbWdlbl9idC5nZW5lcmF0ZV9idCBsYmwsIHRyYW5zbCBi b2R5KQ0KKyAgICBlbHNlIHRyYW5zbCBib2R5IGluDQogICBDZnVuY3Rpb24ge2Z1bl9uYW1lID0g bGJsOw0KICAgICAgICAgICAgICBmdW5fYXJncyA9IExpc3QubWFwIChmdW4gaWQgLT4gKGlkLCB0 eXBfYWRkcikpIHBhcmFtczsNCi0gICAgICAgICAgICAgZnVuX2JvZHkgPSB0cmFuc2wgYm9keTsN CisgICAgICAgICAgICAgZnVuX2JvZHkgPSBmdW5fYm9keTsNCiAgICAgICAgICAgICAgZnVuX2Zh c3QgPSAhQ2xmbGFncy5vcHRpbWl6ZV9mb3Jfc3BlZWR9DQogDQogKCogVHJhbnNsYXRlIGFsbCBm dW5jdGlvbiBkZWZpbml0aW9ucyAqKQ0KQEAgLTE2ODksNyArMTY5Myw4IEBADQogICAgICAgICBj IDo9IENkYXRhKGVtaXRfY29uc3RhbnRfY2xvc3VyZSBzeW1iIGZ1bmRlY2xzIFtdKSA6OiAhYykN CiAgICAgIWNvbnN0YW50X2Nsb3N1cmVzOw0KICAgY29uc3RhbnRfY2xvc3VyZXMgOj0gW107DQot ICAhYw0KKyAgaWYgIUNsZmxhZ3MuZGVidWdfbmF0aXZlX2JhY2t0cmFjZSB0aGVuIENtbWdlbl9i dC5lbWl0X2luc3RydW1lbnRlZF9mdW5zIGMNCisgIGVsc2UgIWMNCiANCiAoKiBUcmFuc2xhdGUg YSBjb21waWxhdGlvbiB1bml0ICopDQogDQpAQCAtMTk0Nyw3ICsxOTUyLDcgQEANCiAgIENkYXRh KENnbG9iYWxfc3ltYm9sICJjYW1sX2dsb2JhbHMiIDo6DQogICAgICAgICBDZGVmaW5lX3N5bWJv bCAiY2FtbF9nbG9iYWxzIiA6Og0KICAgICAgICAgTGlzdC5tYXAgbWtzeW0gbmFtZWxpc3QgQA0K LSAgICAgICAgW2NpbnRfemVyb10pDQorICAgICAgICAoY2ludF96ZXJvIDo6IENtbWdlbl9idC5n ZW5lcmF0ZV9kZWZzICFDbGZsYWdzLmRlYnVnX25hdGl2ZV9iYWNrdHJhY2UpKQ0KIA0KIGxldCBn bG9iYWxzX21hcCBuYW1lbGlzdCA9DQogICBDZGF0YShDZ2xvYmFsX3N5bWJvbCAiY2FtbF9nbG9i YWxzX21hcCIgOjoNCkluZGV4OiBhc21jb21wL2NtbWdlbl9idC5tbA0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IGFzbWNvbXAvY21tZ2VuX2J0Lm1sDQpkaWZmIC1OIGFzbWNvbXAvY21tZ2VuX2J0Lm1s DQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBhc21jb21wL2Nt bWdlbl9idC5tbAk3IE1hciAyMDA2IDIxOjM5OjQ4IC0wMDAwDQpAQCAtMCwwICsxLDEzNyBAQA0K KygqIEZpbGU6IGNtbWdlbl9idC5tbA0KKw0KKyAgIENvbXBsZXRlbHkgcmV3cml0dGVuIGJ5Og0K Kw0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDA1DQorDQorICAgICAgIEphbmUgU3RyZWV0IEhvbGRp bmcsIExMQw0KKyAgICAgICBhdXRob3I6IE1hcmt1cyBNb3R0bA0KKyAgICAgICBlbWFpbDogbWFy a3VzLm1vdHRsQGdtYWlsLmNvbQ0KKyAgICAgICBXV1c6IGh0dHA6Ly93d3cub2NhbWwuaW5mbw0K Kw0KKyAgIEluaXRpYWwgY29uY2VwdCBhbmQgaW1wbGVtZW50YXRpb246DQorDQorICAgICBDb3B5 cmlnaHQgKEMpIDIwMDMNCisNCisgICAgICAgQ2hyaXMgSGVja2VyDQorICAgICAgIGVtYWlsOiBj aGVja2VyQGQ2LmNvbQ0KKyAgICAgICBXV1c6IGh0dHA6Ly93d3cuZDYuY29tL3VzZXJzL2NoZWNr ZXINCisqKQ0KKw0KKygqICRJZCQgKikNCisNCisoKiBDb2RlIGdlbmVyYXRvciBmb3IgbmF0aXZl IGZ1bmN0aW9uIGJhY2t0cmFjZXMgKikNCisNCitvcGVuIEFyY2gNCitvcGVuIENtbQ0KKw0KK2xl dCBudW1fZW50cmllcyA9IDMyICAoKiBtdXN0IGJlIHBvd2VyIG9mIDIgKikNCitsZXQgbnVtX2Vu dHJpZXNfbmFtZSA9ICJjYW1sX25hdGl2ZV9idF9udW1fZW50cmllcyINCitsZXQgbmF0aW50X251 bV9lbnRyaWVzID0gTmF0aXZlaW50Lm9mX2ludCBudW1fZW50cmllcw0KK2xldCBudW1fZW50cmll c19tYXNrID0gbnVtX2VudHJpZXMgLSAxDQorbGV0IG5hdGludF9udW1fZW50cmllc19tYXNrID0g TmF0aXZlaW50Lm9mX2ludCBudW1fZW50cmllc19tYXNrDQorbGV0IGNjb25zdF9udW1fZW50cmll c19tYXNrID0gQ2NvbnN0X25hdGludCBuYXRpbnRfbnVtX2VudHJpZXNfbWFzaw0KKw0KK2xldCBi dWZfbmFtZSA9ICJjYW1sX25hdGl2ZV9idF9idWYiDQorbGV0IGJ1Zl9zeW0gPSBDY29uc3Rfc3lt Ym9sIGJ1Zl9uYW1lDQorDQorbGV0IGJ1Zl9pZHhfbmFtZSA9ICJjYW1sX25hdGl2ZV9idF9idWZf aWR4Ig0KK2xldCBidWZfaWR4X3N5bSA9IENjb25zdF9zeW1ib2wgYnVmX2lkeF9uYW1lDQorDQor bGV0IGNjb25zdF9zaXplX2FkZHJfbHN0ID0gW0Njb25zdF9pbnQgc2l6ZV9hZGRyXQ0KK2xldCBj Y29uc3Rfb25lID0gQ2NvbnN0X2ludCAxDQorbGV0IGNjb25zdF91bml0ID0gY2NvbnN0X29uZQ0K Kw0KKygqIFhYWDogRHVwbGljYXRlZCBmcm9tIGNtbWdlbi5tbDsgc2hvdWxkIGJlIGZhY3RvcmVk IG91dCAqKQ0KK2xldCBlbWl0X3N0cmluZ19jb25zdGFudCBzIGNvbnQgPQ0KKyAgbGV0IG4gPSBz aXplX2ludCAtIDEgLSAoU3RyaW5nLmxlbmd0aCBzKSBtb2Qgc2l6ZV9pbnQgaW4NCisgIENzdHJp bmcgcyA6OiBDc2tpcCBuIDo6IENpbnQ4IG4gOjogY29udA0KKw0KK2xldCB0cmFjZWRfZnVucyA9 IHJlZiBbXQ0KK2xldCBtYWtlX2Z1bl9uYW1lIGxibCA9ICJjYW1sX25hdGl2ZV9idF9fIiBeIGxi bA0KKw0KKygqIEVtaXQgdGhlIG5hbWVzIG9mIGFsbCB0cmFjZWQgZnVuY3Rpb25zIGFzIEMtc3Ry aW5ncyAqKQ0KK2xldCBlbWl0X2luc3RydW1lbnRlZF9mdW5zIGMgPQ0KKyAgbGV0IGNkYXRhID0N CisgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBzeW1zIGxibCAtPg0KKyAgICAgICAgQ2RlZmluZV9z eW1ib2wgKG1ha2VfZnVuX25hbWUgbGJsKQ0KKyAgICAgICAgOjogZW1pdF9zdHJpbmdfY29uc3Rh bnQgKGxibCBeICJcMDAwIikgc3ltcykNCisgICAgICBbXQ0KKyAgICAgICF0cmFjZWRfZnVucyBp bg0KKyAgYyA6PSBDZGF0YSBjZGF0YSA6OiAhYzsNCisgIHRyYWNlZF9mdW5zIDo9IFtdOw0KKyAg IWMNCisNCitsZXQgZ2V0X2J1Zl9vZnMgaWR4ID0gQ29wIChDbXVsaSwgQ3ZhciBpZHggOjogY2Nv bnN0X3NpemVfYWRkcl9sc3QpDQorDQorbGV0IGluY3JfaWR4IGlkeCA9DQorICBDb3AgKENhbmQs IFtDb3AgKENhZGRpLCBbQ3ZhciBpZHg7IGNjb25zdF9vbmVdKTsgY2NvbnN0X251bV9lbnRyaWVz X21hc2tdKQ0KKw0KK2xldCBzdG9yZV9uZXcgYnVmIGlkeCBjdXJfZnVuIGxhc3RfZnVuX3B0ciA9 DQorICAoKiBJbmNyZW1lbnQgaW5kZXggb2YgcmluZyBidWZmZXIgKikNCisgIENsZXQgKA0KKyAg ICBpZHgsDQorICAgIGluY3JfaWR4IGlkeCwNCisgICAgKCogTG9hZCBwb2ludGVyIHRvIG5hbWUg b2YgbmV3ICJsYXN0IiBmdW5jdGlvbiAqKQ0KKyAgICBDbGV0ICgNCisgICAgICBsYXN0X2Z1bl9w dHIsDQorICAgICAgQ29wIChDYWRkYSwgW0N2YXIgYnVmOyBnZXRfYnVmX29mcyBpZHhdKSwNCisg ICAgICAgIENzZXF1ZW5jZSAoDQorICAgICAgICAgICgqIFN0b3JlIG5ldyBidWZmZXIgaW5kZXgg KikNCisgICAgICAgICAgQ29wIChDc3RvcmUgV29yZCwgW2J1Zl9pZHhfc3ltOyBDdmFyIGlkeF0p LA0KKyAgICAgICAgICAoKiBTdG9yZSBuZXcgZnVuY3Rpb24gbmFtZSAqKQ0KKyAgICAgICAgICBD b3AgKENzdG9yZSBXb3JkLCBbQ3ZhciBsYXN0X2Z1bl9wdHI7IEN2YXIgY3VyX2Z1bl0pKSkpDQor DQorKCogR2VuZXJhdGUgY29kZSBmb3IgdHJhY2luZyBuYXRpdmUgY29kZSBmdW5jdGlvbnMgKikN CitsZXQgZ2VuZXJhdGVfYnQgbGJsID0NCisgICgqIFJlbWVtYmVyIG5hbWUgb2YgdHJhY2VkIGZ1 bmN0aW9uICopDQorICB0cmFjZWRfZnVucyA6PSBsYmwgOjogIXRyYWNlZF9mdW5zOw0KKyAgKCog TG9hZCBuYW1lIG9mIGN1cnJlbnQgZnVuY3Rpb24gKikNCisgIGxldCBjdXJfZnVuID0gSWRlbnQu Y3JlYXRlICJjdXJfZnVuIiBpbg0KKyAgQ2xldCAoDQorICAgIGN1cl9mdW4sDQorICAgIENjb25z dF9zeW1ib2wgKG1ha2VfZnVuX25hbWUgbGJsKSwNCisgICAgKCogTG9hZCBidWZmZXIgKikNCisg ICAgbGV0IGJ1ZiA9IElkZW50LmNyZWF0ZSAiYnVmIiBpbg0KKyAgICBDbGV0ICgNCisgICAgICBi dWYsDQorICAgICAgYnVmX3N5bSwNCisgICAgICAoKiBMb2FkIGJ1ZmZlciBpbmRleCAqKQ0KKyAg ICAgIGxldCBpZHggPSBJZGVudC5jcmVhdGUgImlkeCIgaW4NCisgICAgICBDbGV0ICgNCisgICAg ICAgIGlkeCwNCisgICAgICAgIENvcCAoQ2xvYWQgV29yZCwgW2J1Zl9pZHhfc3ltXSksDQorICAg ICAgICAoKiBMb2FkIHBvaW50ZXIgdG8gbmFtZSBvZiBsYXN0IGZ1bmN0aW9uICopDQorICAgICAg ICBsZXQgbGFzdF9mdW5fcHRyID0gSWRlbnQuY3JlYXRlICJsYXN0X2Z1bl9wdHIiIGluDQorICAg ICAgICBDbGV0ICgNCisgICAgICAgICAgbGFzdF9mdW5fcHRyLA0KKyAgICAgICAgICBDb3AgKENh ZGRhLCBbQ3ZhciBidWY7IGdldF9idWZfb2ZzIGlkeF0pLA0KKyAgICAgICAgICAoKiBMb2FkIG5h bWUgb2YgbGFzdCBmdW5jdGlvbiAqKQ0KKyAgICAgICAgICBsZXQgbGFzdF9mdW4gPSBJZGVudC5j cmVhdGUgImxhc3RfZnVuIiBpbg0KKyAgICAgICAgICBDbGV0ICgNCisgICAgICAgICAgICBsYXN0 X2Z1biwNCisgICAgICAgICAgICBDb3AgKENsb2FkIFdvcmQsIFtDdmFyIGxhc3RfZnVuX3B0cl0p LA0KKyAgICAgICAgICAgIENpZnRoZW5lbHNlICgNCisgICAgICAgICAgICAgICgqIElmIG5vdCBz YW1lIGZ1bmN0aW9uLC4uLiAqKQ0KKyAgICAgICAgICAgICAgQ29wIChDY21wYSBDbmUsIFtDdmFy IGN1cl9mdW47IEN2YXIgbGFzdF9mdW5dKSwNCisgICAgICAgICAgICAgICgqIC4uLiwgdGhlbiBz dG9yZSBuZXcgZnVuY3Rpb24sICopDQorICAgICAgICAgICAgICBzdG9yZV9uZXcgYnVmIGlkeCBj dXJfZnVuIGxhc3RfZnVuX3B0ciwNCisgICAgICAgICAgICAgICgqIC4uLiwgb3RoZXJ3aXNlIGRv IG5vdGhpbmcuICopDQorICAgICAgICAgICAgICBDdHVwbGUgW10pKSkpKSkNCisNCitsZXQgY2lu dF96ZXJvID0gQ2ludCAwbg0KK2xldCBidWZfemVyb3MgPSBBcnJheS50b19saXN0IChBcnJheS5t YWtlIG51bV9lbnRyaWVzIGNpbnRfemVybykNCitsZXQgY2ludF9uYXRpbnRfbnVtX2VudHJpZXMg PSBDaW50IG5hdGludF9udW1fZW50cmllcyANCitsZXQgY2ludF96ZXJvX2xzdCA9IFtjaW50X3pl cm9dDQorDQorKCogQWxsb2NhdGUgYmFja3RyYWNlIHZhcmlhYmxlcyBhbmQgYnVmZmVyICopDQor bGV0IGdlbmVyYXRlX2RlZnMgd2l0aF9idCA9DQorICBDZ2xvYmFsX3N5bWJvbCBudW1fZW50cmll c19uYW1lDQorICAgIDo6IENkZWZpbmVfc3ltYm9sIG51bV9lbnRyaWVzX25hbWUNCisgICAgOjog KGlmIHdpdGhfYnQgdGhlbiBjaW50X25hdGludF9udW1fZW50cmllcyBlbHNlIGNpbnRfemVybykN CisgICAgOjogQ2dsb2JhbF9zeW1ib2wgYnVmX2lkeF9uYW1lDQorICAgIDo6IENkZWZpbmVfc3lt Ym9sIGJ1Zl9pZHhfbmFtZQ0KKyAgICA6OiBDaW50IG5hdGludF9udW1fZW50cmllc19tYXNrDQor ICAgIDo6IENnbG9iYWxfc3ltYm9sIGJ1Zl9uYW1lDQorICAgIDo6IENkZWZpbmVfc3ltYm9sIGJ1 Zl9uYW1lDQorICAgIDo6IGlmIHdpdGhfYnQgdGhlbiBidWZfemVyb3MgZWxzZSBjaW50X3plcm9f bHN0DQpJbmRleDogYXNtcnVuL3N0YXJ0dXAuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jYW1s L29jYW1sL2FzbXJ1bi9zdGFydHVwLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMyDQpkaWZm IC11IC1yMS4zMiBzdGFydHVwLmMNCi0tLSBhc21ydW4vc3RhcnR1cC5jCTIyIFNlcCAyMDA1IDE0 OjIxOjQ3IC0wMDAwCTEuMzINCisrKyBhc21ydW4vc3RhcnR1cC5jCTcgTWFyIDIwMDYgMjE6Mzk6 NDggLTAwMDANCkBAIC0xMTAsNiArMTEwLDcgQEANCiAgICAgICBjYXNlICdvJzogc2Nhbm11bHQg KG9wdCwgJnBlcmNlbnRfZnJlZV9pbml0KTsgYnJlYWs7DQogICAgICAgY2FzZSAnTyc6IHNjYW5t dWx0IChvcHQsICZtYXhfcGVyY2VudF9mcmVlX2luaXQpOyBicmVhazsNCiAgICAgICBjYXNlICd2 Jzogc2Nhbm11bHQgKG9wdCwgJmNhbWxfdmVyYl9nYyk7IGJyZWFrOw0KKyAgICAgIGNhc2UgJ2In OiBzY2FubXVsdCAob3B0LCAmY2FtbF9uYXRpdmVfYnRfYWN0aXYpOyBicmVhazsNCiAgICAgICBj YXNlICdwJzogY2FtbF9wYXJzZXJfdHJhY2UgPSAxOyBicmVhazsNCiAgICAgICB9DQogICAgIH0N CkluZGV4OiBieXRlcnVuL01ha2VmaWxlDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2NhbWwvb2Nh bWwvYnl0ZXJ1bi9NYWtlZmlsZSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTMNCmRpZmYgLXUg LXIxLjUzIE1ha2VmaWxlDQotLS0gYnl0ZXJ1bi9NYWtlZmlsZQk0IEphbiAyMDA2IDE2OjU1OjQ5 IC0wMDAwCTEuNTMNCisrKyBieXRlcnVuL01ha2VmaWxlCTcgTWFyIDIwMDYgMjE6Mzk6NDggLTAw MDANCkBAIC0zMSw4ICszMSw4IEBADQogDQogUFJJTVM9YWxsb2MuYyBhcnJheS5jIGNvbXBhcmUu YyBleHRlcm4uYyBmbG9hdHMuYyBnY19jdHJsLmMgaGFzaC5jIFwNCiAgIGludGVybi5jIGludGVy cC5jIGludHMuYyBpby5jIGxleGluZy5jIG1kNS5jIG1ldGEuYyBvYmouYyBwYXJzaW5nLmMgXA0K LSAgc2lnbmFscy5jIHN0ci5jIHN5cy5jIHRlcm1pbmZvLmMgY2FsbGJhY2suYyB3ZWFrLmMgZmlu YWxpc2UuYyBzdGFja3MuYyBcDQotICBkeW5saW5rLmMNCisgIHNpZ25hbHMuYyBwcmludGV4Yy5j IHN0ci5jIHN5cy5jIHRlcm1pbmZvLmMgY2FsbGJhY2suYyB3ZWFrLmMgZmluYWxpc2UuYyBcDQor ICBzdGFja3MuYyBkeW5saW5rLmMNCiANCiBQVUJMSUNfSU5DTFVERVM9YWxsb2MuaCBjYWxsYmFj ay5oIGNvbmZpZy5oIGN1c3RvbS5oIGZhaWwuaCBpbnRleHQuaCBcDQogICBtZW1vcnkuaCBtaXNj LmggbWx2YWx1ZXMuaCBwcmludGV4Yy5oIHNpZ25hbHMuaCBjb21wYXRpYmlsaXR5LmgNCkluZGV4 OiBieXRlcnVuL3ByaW50ZXhjLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY2FtbC9vY2FtbC9i eXRlcnVuL3ByaW50ZXhjLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE2DQpkaWZmIC11IC1y MS4xNiBwcmludGV4Yy5jDQotLS0gYnl0ZXJ1bi9wcmludGV4Yy5jCTggSmFuIDIwMDQgMjI6Mjg6 NDggLTAwMDAJMS4xNg0KKysrIGJ5dGVydW4vcHJpbnRleGMuYwk3IE1hciAyMDA2IDIxOjM5OjQ4 IC0wMDAwDQpAQCAtMjQsNiArMjQsOCBAQA0KICNpbmNsdWRlICJmYWlsLmgiDQogI2luY2x1ZGUg Im1pc2MuaCINCiAjaW5jbHVkZSAibWx2YWx1ZXMuaCINCisjaW5jbHVkZSAibWVtb3J5LmgiDQor I2luY2x1ZGUgImFsbG9jLmgiDQogI2luY2x1ZGUgInByaW50ZXhjLmgiDQogDQogc3RydWN0IHN0 cmluZ2J1ZiB7DQpAQCAtOTMsNiArOTUsNzkgQEANCiB9DQogDQogDQorLyogTmF0aXZlIGZ1bmN0 aW9uIGJhY2t0cmFjZXMgKi8NCisNCit1bnNpZ25lZCBsb25nIGNhbWxfbmF0aXZlX2J0X2FjdGl2 ID0gMDsNCisNCisjaWZkZWYgTkFUSVZFX0NPREUNCitleHRlcm4gdW5zaWduZWQgbG9uZyBjYW1s X25hdGl2ZV9idF9idWZfaWR4Ow0KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNhbWxfbmF0aXZlX2J0 X251bV9lbnRyaWVzOw0KK2V4dGVybiBjaGFyICpjYW1sX25hdGl2ZV9idF9idWZbXTsNCisjZW5k aWYNCisNCitDQU1McHJpbSB2YWx1ZSBjYW1sX3ByaW50X25hdGl2ZV9iYWNrdHJhY2UodmFsdWUg dW5pdCkNCit7DQorI2lmZGVmIE5BVElWRV9DT0RFDQorICBpbnQgaTsNCisgIGNoYXIgKmxhc3Rf ZnVuOw0KKw0KKyAgaWYgKCFjYW1sX25hdGl2ZV9idF9hY3RpdikgcmV0dXJuIFZhbF91bml0Ow0K Kw0KKyAgbGFzdF9mdW4gPQ0KKyAgICAoY2FtbF9uYXRpdmVfYnRfbnVtX2VudHJpZXMgPT0gMCkN CisgICAgICA/IE5VTEwgOiBjYW1sX25hdGl2ZV9idF9idWZbY2FtbF9uYXRpdmVfYnRfYnVmX2lk eF07DQorDQorICBpZiAobGFzdF9mdW4gPT0gTlVMTCkgew0KKyAgICBmcHJpbnRmKHN0ZGVyciwg Ik5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2UgZW1wdHkuXG4iKTsNCisgICAgcmV0dXJuIFZhbF91 bml0Ow0KKyAgfQ0KKw0KKyAgZnByaW50ZihzdGRlcnIsICJOYXRpdmUgZnVuY3Rpb24gYmFja3Ry YWNlOlxuXG4gICVzXG4iLCBsYXN0X2Z1bik7DQorDQorICBmb3IgKGkgPSBjYW1sX25hdGl2ZV9i dF9idWZfaWR4IC0gMTsgaSA+PSAwOyAtLWkpIHsNCisgICAgaWYgKCFjYW1sX25hdGl2ZV9idF9i dWZbaV0pIGdvdG8gZW5kOw0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIGNhbWxfbmF0 aXZlX2J0X2J1ZltpXSk7DQorICB9DQorICBmb3IgKGkgPSBjYW1sX25hdGl2ZV9idF9udW1fZW50 cmllcyAtIDE7IGkgPiBjYW1sX25hdGl2ZV9idF9idWZfaWR4OyAtLWkpIHsNCisgICAgaWYgKCFj YW1sX25hdGl2ZV9idF9idWZbaV0pIGdvdG8gZW5kOw0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAg JXNcbiIsIGNhbWxfbmF0aXZlX2J0X2J1ZltpXSk7DQorICB9DQorDQorZW5kOg0KKyAgZmZsdXNo KHN0ZGVycik7DQorI2VuZGlmDQorICByZXR1cm4gVmFsX3VuaXQ7DQorfQ0KKw0KK0NBTUxwcmlt IHZhbHVlIGNhbWxfZ2V0X25hdGl2ZV9iYWNrdHJhY2UodmFsdWUgdW5pdCkNCit7DQorI2lmZGVm IE5BVElWRV9DT0RFDQorICBpZiAoIShjYW1sX25hdGl2ZV9idF9hY3RpdiAmJiBjYW1sX25hdGl2 ZV9idF9idWZbMF0pKSByZXR1cm4gQXRvbSgwKTsNCisNCisgIENBTUxwYXJhbTAoKTsNCisgIENB TUxsb2NhbDEodl9yZXMpOw0KKw0KKyAgaW50IGksDQorICAgICAgbGl4ID0gY2FtbF9uYXRpdmVf YnRfbnVtX2VudHJpZXMgLSAxLA0KKyAgICAgIHJlc19wb3MgPSAwLA0KKyAgICAgIHJlc19sZW4g PQ0KKyAgICAgICAgY2FtbF9uYXRpdmVfYnRfYnVmW2xpeF0NCisgICAgICAgICAgPyBjYW1sX25h dGl2ZV9idF9udW1fZW50cmllcyA6IGNhbWxfbmF0aXZlX2J0X2J1Zl9pZHggKyAxOw0KKw0KKyAg dl9yZXMgPSBjYW1sX2FsbG9jKHJlc19sZW4sIDApOw0KKw0KKyAgZm9yIChpID0gY2FtbF9uYXRp dmVfYnRfYnVmX2lkeDsgaSA+PSAwICYmIHJlc19wb3MgPCByZXNfbGVuOyAtLWkpDQorICAgIFN0 b3JlX2ZpZWxkKHZfcmVzLCByZXNfcG9zKyssIGNhbWxfY29weV9zdHJpbmcoY2FtbF9uYXRpdmVf YnRfYnVmW2ldKSk7DQorICBmb3IgKGkgPSBsaXg7IGkgPiBjYW1sX25hdGl2ZV9idF9idWZfaWR4 ICYmIHJlc19wb3MgPCByZXNfbGVuOyAtLWkpDQorICAgIFN0b3JlX2ZpZWxkKHZfcmVzLCByZXNf cG9zKyssIGNhbWxfY29weV9zdHJpbmcoY2FtbF9uYXRpdmVfYnRfYnVmW2ldKSk7DQorDQorICBD QU1McmV0dXJuKHZfcmVzKTsNCisjZWxzZQ0KKyAgcmV0dXJuIEF0b20oMCk7DQorI2VuZGlmDQor fQ0KKw0KKw0KIHZvaWQgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24odmFsdWUgZXhuKQ0K IHsNCiAgIGNoYXIgKiBtc2c7DQpAQCAtMTE4LDggKzE5MywxMSBAQA0KICAgLyogRGlzcGxheSB0 aGUgdW5jYXVnaHQgZXhjZXB0aW9uICovDQogICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIGVycm9y OiBleGNlcHRpb24gJXNcbiIsIG1zZyk7DQogICBmcmVlKG1zZyk7DQorI2lmZGVmIE5BVElWRV9D T0RFDQorICAvKiBOYXRpdmUgZnVuY3Rpb24gYmFja3RyYWNlcyAqLw0KKyAgaWYgKGNhbWxfbmF0 aXZlX2J0X2FjdGl2KSBjYW1sX3ByaW50X25hdGl2ZV9iYWNrdHJhY2UoVmFsX3VuaXQpOw0KKyNl bHNlDQogICAvKiBEaXNwbGF5IHRoZSBiYWNrdHJhY2UgaWYgYXZhaWxhYmxlICovDQotI2lmbmRl ZiBOQVRJVkVfQ09ERQ0KICAgaWYgKGNhbWxfYmFja3RyYWNlX2FjdGl2ZSAmJiAhY2FtbF9kZWJ1 Z2dlcl9pbl91c2Upew0KICAgICBjYW1sX3ByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2UoKTsNCiAg IH0NCkluZGV4OiBieXRlcnVuL3ByaW50ZXhjLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY2Ft bC9vY2FtbC9ieXRlcnVuL3ByaW50ZXhjLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRp ZmYgLXUgLXIxLjUgcHJpbnRleGMuaA0KLS0tIGJ5dGVydW4vcHJpbnRleGMuaAkxIEphbiAyMDA0 IDE2OjQyOjM3IC0wMDAwCTEuNQ0KKysrIGJ5dGVydW4vcHJpbnRleGMuaAk3IE1hciAyMDA2IDIx OjM5OjQ4IC0wMDAwDQpAQCAtMjMsNSArMjMsOCBAQA0KIENBTUxleHRlcm4gY2hhciAqIGNhbWxf Zm9ybWF0X2V4Y2VwdGlvbiAodmFsdWUpOw0KIHZvaWQgY2FtbF9mYXRhbF91bmNhdWdodF9leGNl cHRpb24gKHZhbHVlKSBOb3JldHVybjsNCiANCisvKiBOYXRpdmUgZnVuY3Rpb24gYmFja3RyYWNl cyAqLw0KKw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNhbWxfbmF0aXZlX2J0X2FjdGl2Ow0KIA0K ICNlbmRpZiAvKiBDQU1MX1BSSU5URVhDX0ggKi8NCkluZGV4OiBkcml2ZXIvb3B0bWFpbi5tbA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jYW1sL29jYW1sL2RyaXZlci9vcHRtYWluLm1sLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMS44Nw0KZGlmZiAtdSAtcjEuODcgb3B0bWFpbi5tbA0KLS0tIGRy aXZlci9vcHRtYWluLm1sCTQgSmFuIDIwMDYgMTY6NTU6NDkgLTAwMDAJMS44Nw0KKysrIGRyaXZl ci9vcHRtYWluLm1sCTcgTWFyIDIwMDYgMjE6Mzk6NDggLTAwMDANCkBAIC0xMTQsNiArMTE0LDgg QEANCiAgICAgICAgIi1mb3ItcGFjayIsIEFyZy5TdHJpbmcgKGZ1biBzIC0+IGZvcl9wYWNrYWdl IDo9IFNvbWUgcyksDQogICAgICAgICAgICAgICI8aWRlbnQ+ICBHZW5lcmF0ZSBjb2RlIHRoYXQg Y2FuIGxhdGVyIGJlIGBwYWNrZWQnIHdpdGhcblwNCiAgICAgICAgICBcICAgICBvY2FtbG9wdCAt cGFjayAtbyA8aWRlbnQ+LmNteCI7DQorICAgICAgICItZ2IiLCBBcmcuU2V0IGRlYnVnX25hdGl2 ZV9iYWNrdHJhY2UsDQorICAgICAgICAgICAgICAiIGdlbmVyYXRlIGRlYnVnZ2luZyBpbmZvcm1h dGlvbiBmb3IgbmF0aXZlIGNvZGUgYmFja3RyYWNlcyI7DQogICAgICAgICItaSIsIEFyZy5Vbml0 IChmdW4gKCkgLT4gcHJpbnRfdHlwZXMgOj0gdHJ1ZTsgY29tcGlsZV9vbmx5IDo9IHRydWUpLA0K ICAgICAgICAgICAgICAiIFByaW50IGluZmVycmVkIGludGVyZmFjZSI7DQogICAgICAgICItSSIs IEFyZy5TdHJpbmcoZnVuIGRpciAtPiBpbmNsdWRlX2RpcnMgOj0gZGlyIDo6ICFpbmNsdWRlX2Rp cnMpLA0KSW5kZXg6IG90aGVybGlicy9zeXN0aHJlYWRzL3Bvc2l4LmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvY2FtbC9vY2FtbC9vdGhlcmxpYnMvc3lzdGhyZWFkcy9wb3NpeC5jLHYNCnJldHJp ZXZpbmcgcmV2aXNpb24gMS41Mw0KZGlmZiAtdSAtcjEuNTMgcG9zaXguYw0KLS0tIG90aGVybGli cy9zeXN0aHJlYWRzL3Bvc2l4LmMJMjIgU2VwIDIwMDUgMTQ6MjE6NTAgLTAwMDAJMS41Mw0KKysr IG90aGVybGlicy9zeXN0aHJlYWRzL3Bvc2l4LmMJNyBNYXIgMjAwNiAyMTozOTo0OCAtMDAwMA0K QEAgLTQ4LDYgKzQ4LDE1IEBADQogI2VuZGlmDQogI2luY2x1ZGUgInN5cy5oIg0KIA0KKyNpZmRl ZiBOQVRJVkVfQ09ERQ0KKy8qIE5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2VzICovDQorZXh0ZXJu IHVuc2lnbmVkIGxvbmcgY2FtbF9uYXRpdmVfYnRfYWN0aXY7DQorZXh0ZXJuIHVuc2lnbmVkIGxv bmcgY2FtbF9uYXRpdmVfYnRfYnVmX2lkeDsNCitleHRlcm4gdW5zaWduZWQgbG9uZyBjYW1sX25h dGl2ZV9idF9udW1fZW50cmllczsNCitleHRlcm4gY2hhciAqY2FtbF9uYXRpdmVfYnRfYnVmW107 DQorZXh0ZXJuIENBTUxwcmltIHZhbHVlIGNhbWxfcHJpbnRfbmF0aXZlX2JhY2t0cmFjZSh2YWx1 ZSB1bml0KTsNCisjZW5kaWYNCisNCiAvKiBJbml0aWFsIHNpemUgb2Ygc3RhY2sgd2hlbiBhIHRo cmVhZCBpcyBjcmVhdGVkICg0IEtvKSAqLw0KICNkZWZpbmUgVGhyZWFkX3N0YWNrX3NpemUgKFN0 YWNrX3NpemUgLyA0KQ0KIA0KQEAgLTgwLDYgKzg5LDkgQEANCiAgIGNoYXIgKiBleGNlcHRpb25f cG9pbnRlcjsgICAgIC8qIFNhdmVkIHZhbHVlIG9mIGNhbWxfZXhjZXB0aW9uX3BvaW50ZXIgKi8N CiAgIHN0cnVjdCBjYW1sX19yb290c19ibG9jayAqIGxvY2FsX3Jvb3RzOyAvKiBTYXZlZCB2YWx1 ZSBvZiBsb2NhbF9yb290cyAqLw0KICAgc3RydWN0IGxvbmdqbXBfYnVmZmVyICogZXhpdF9idWY7 IC8qIEZvciB0aHJlYWQgZXhpdCAqLw0KKyAgLyogTmF0aXZlIGZ1bmN0aW9uIGJhY2t0cmFjZXMg Ki8NCisgIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2J0X2lkeDsNCisgIGNoYXIgKigqbmF0aXZlX2J0 X2J1Zl9wdHIpW107DQogI2Vsc2UNCiAgIHZhbHVlICogc3RhY2tfbG93OyAgICAgICAgICAgIC8q IFRoZSBleGVjdXRpb24gc3RhY2sgZm9yIHRoaXMgdGhyZWFkICovDQogICB2YWx1ZSAqIHN0YWNr X2hpZ2g7DQpAQCAtOTYsNiArMTA4LDMwIEBADQogDQogdHlwZWRlZiBzdHJ1Y3QgY2FtbF90aHJl YWRfc3RydWN0ICogY2FtbF90aHJlYWRfdDsNCiANCisjaWZkZWYgTkFUSVZFX0NPREUNCisvKiBO YXRpdmUgZnVuY3Rpb24gYmFja3RyYWNlcyAqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWxsb2Nf bmF0aXZlX2J0X2J1ZihjYW1sX3RocmVhZF90IHRoKQ0KK3sNCisgIGlmIChjYW1sX25hdGl2ZV9i dF9hY3Rpdikgew0KKyAgICBjaGFyICooKm5hdGl2ZV9idF9idWZfcHRyKVtdID0NCisgICAgICBt YWxsb2MoY2FtbF9uYXRpdmVfYnRfbnVtX2VudHJpZXMgKiBzaXplb2YoY2hhcioqKSk7DQorICAg IGlmIChuYXRpdmVfYnRfYnVmX3B0ciA9PSBOVUxMKSBjYW1sX3JhaXNlX291dF9vZl9tZW1vcnko KTsNCisgICAgdGgtPm5hdGl2ZV9idF9idWZfcHRyID0gbmF0aXZlX2J0X2J1Zl9wdHI7DQorICB9 DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxsb2NfbmF0aXZlX2J0X2J1ZihjYW1sX3Ro cmVhZF90IHRoKQ0KK3sNCisgIGlmIChjYW1sX25hdGl2ZV9idF9hY3Rpdikgew0KKyAgICBjaGFy ICooKm5hdGl2ZV9idF9idWZfcHRyKVtdID0NCisgICAgICBjYWxsb2MoY2FtbF9uYXRpdmVfYnRf bnVtX2VudHJpZXMsIHNpemVvZihjaGFyKiopKTsNCisgICAgaWYgKG5hdGl2ZV9idF9idWZfcHRy ID09IE5VTEwpIGNhbWxfcmFpc2Vfb3V0X29mX21lbW9yeSgpOw0KKyAgICB0aC0+bmF0aXZlX2J0 X2J1Zl9wdHIgPSBuYXRpdmVfYnRfYnVmX3B0cjsNCisgICAgdGgtPm5hdGl2ZV9idF9pZHggPSAw Ow0KKyAgfQ0KK30NCisjZW5kaWYNCisNCiAvKiBUaGUgZGVzY3JpcHRvciBmb3IgdGhlIGN1cnJl bnRseSBleGVjdXRpbmcgdGhyZWFkICovDQogc3RhdGljIGNhbWxfdGhyZWFkX3QgY3Vycl90aHJl YWQgPSBOVUxMOw0KIA0KQEAgLTE3OCw2ICsyMTQsMTQgQEANCiAgIGN1cnJfdGhyZWFkLT5nY19y ZWdzID0gY2FtbF9nY19yZWdzOw0KICAgY3Vycl90aHJlYWQtPmV4Y2VwdGlvbl9wb2ludGVyID0g Y2FtbF9leGNlcHRpb25fcG9pbnRlcjsNCiAgIGN1cnJfdGhyZWFkLT5sb2NhbF9yb290cyA9IGxv Y2FsX3Jvb3RzOw0KKyAgLyogTmF0aXZlIGZ1bmN0aW9uIGJhY2t0cmFjZXMgKi8NCisgIGlmIChj YW1sX25hdGl2ZV9idF9hY3Rpdikgew0KKyAgICBpbnQgaTsNCisgICAgY3Vycl90aHJlYWQtPm5h dGl2ZV9idF9pZHggPSBjYW1sX25hdGl2ZV9idF9idWZfaWR4Ow0KKyAgICBjaGFyICoqbmF0aXZl X2J0X2J1ZiA9ICooY3Vycl90aHJlYWQtPm5hdGl2ZV9idF9idWZfcHRyKTsNCisgICAgZm9yIChp ID0gMDsgaSA8IGNhbWxfbmF0aXZlX2J0X251bV9lbnRyaWVzOyArK2kpDQorICAgICAgbmF0aXZl X2J0X2J1ZltpXSA9IGNhbWxfbmF0aXZlX2J0X2J1ZltpXTsNCisgIH0NCiAjZWxzZQ0KICAgY3Vy cl90aHJlYWQtPnN0YWNrX2xvdyA9IHN0YWNrX2xvdzsNCiAgIGN1cnJfdGhyZWFkLT5zdGFja19o aWdoID0gc3RhY2tfaGlnaDsNCkBAIC0yMTgsNiArMjYyLDE0IEBADQogICBjYW1sX2djX3JlZ3Mg PSBjdXJyX3RocmVhZC0+Z2NfcmVnczsNCiAgIGNhbWxfZXhjZXB0aW9uX3BvaW50ZXIgPSBjdXJy X3RocmVhZC0+ZXhjZXB0aW9uX3BvaW50ZXI7DQogICBsb2NhbF9yb290cyA9IGN1cnJfdGhyZWFk LT5sb2NhbF9yb290czsNCisgIC8qIE5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2VzICovDQorICBp ZiAoY2FtbF9uYXRpdmVfYnRfYWN0aXYpIHsNCisgICAgaW50IGk7DQorICAgIGNhbWxfbmF0aXZl X2J0X2J1Zl9pZHggPSBjdXJyX3RocmVhZC0+bmF0aXZlX2J0X2lkeDsNCisgICAgY2hhciAqKm5h dGl2ZV9idF9idWYgPSAqKGN1cnJfdGhyZWFkLT5uYXRpdmVfYnRfYnVmX3B0cik7DQorICAgIGZv ciAoaSA9IDA7IGkgPCBjYW1sX25hdGl2ZV9idF9udW1fZW50cmllczsgKytpKQ0KKyAgICAgIGNh bWxfbmF0aXZlX2J0X2J1ZltpXSA9IG5hdGl2ZV9idF9idWZbaV07DQorICB9DQogI2Vsc2UNCiAg IHN0YWNrX2xvdyA9IGN1cnJfdGhyZWFkLT5zdGFja19sb3c7DQogICBzdGFja19oaWdoID0gY3Vy cl90aHJlYWQtPnN0YWNrX2hpZ2g7DQpAQCAtMzYxLDYgKzQxMyw4IEBADQogICAgIGN1cnJfdGhy ZWFkLT5wcmV2ID0gY3Vycl90aHJlYWQ7DQogI2lmZGVmIE5BVElWRV9DT0RFDQogICAgIGN1cnJf dGhyZWFkLT5leGl0X2J1ZiA9ICZjYW1sX3Rlcm1pbmF0aW9uX2ptcGJ1ZjsNCisgICAgLyogTmF0 aXZlIGZ1bmN0aW9uIGJhY2t0cmFjZXMgKi8NCisgICAgbWFsbG9jX25hdGl2ZV9idF9idWYoY3Vy cl90aHJlYWQpOw0KICNlbmRpZg0KICAgICAvKiBUaGUgc3RhY2stcmVsYXRlZCBmaWVsZHMgd2ls bCBiZSBmaWxsZWQgaW4gYXQgdGhlIG5leHQNCiAgICAgICAgZW50ZXJfYmxvY2tpbmdfc2VjdGlv biAqLw0KQEAgLTQwNSw3ICs0NTksOSBAQA0KICAgY2FtbF9ydW50aW1lX2J1c3kgPSAwOw0KICAg cHRocmVhZF9tdXRleF91bmxvY2soJmNhbWxfcnVudGltZV9tdXRleCk7DQogICBwdGhyZWFkX2Nv bmRfc2lnbmFsKCZjYW1sX3J1bnRpbWVfaXNfZnJlZSk7DQotI2lmbmRlZiBOQVRJVkVfQ09ERQ0K KyNpZmRlZiBOQVRJVkVfQ09ERQ0KKyAgaWYgKGNhbWxfbmF0aXZlX2J0X2FjdGl2KSBmcmVlKHRo LT5uYXRpdmVfYnRfYnVmX3B0cik7DQorI2Vsc2UNCiAgIC8qIEZyZWUgdGhlIG1lbW9yeSByZXNv dXJjZXMgKi8NCiAgIHN0YXRfZnJlZSh0aC0+c3RhY2tfbG93KTsNCiAgIGlmICh0aC0+YmFja3Ry YWNlX2J1ZmZlciAhPSBOVUxMKSBmcmVlKHRoLT5iYWNrdHJhY2VfYnVmZmVyKTsNCkBAIC00Njks NiArNTI1LDggQEANCiAgICAgdGgtPmJvdHRvbV9vZl9zdGFjayA9IE5VTEw7DQogICAgIHRoLT5l eGNlcHRpb25fcG9pbnRlciA9IE5VTEw7DQogICAgIHRoLT5sb2NhbF9yb290cyA9IE5VTEw7DQor ICAgIC8qIE5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2VzICovDQorICAgIGNhbGxvY19uYXRpdmVf YnRfYnVmKHRoKTsNCiAjZWxzZQ0KICAgICAvKiBBbGxvY2F0ZSB0aGUgc3RhY2tzICovDQogICAg IHRoLT5zdGFja19sb3cgPSAodmFsdWUgKikgc3RhdF9hbGxvYyhUaHJlYWRfc3RhY2tfc2l6ZSk7 DQpAQCAtNDk1LDcgKzU1MywxMCBAQA0KICAgICAgIC8qIEZvcmsgZmFpbGVkLCByZW1vdmUgdGhy ZWFkIGluZm8gYmxvY2sgZnJvbSBsaXN0IG9mIHRocmVhZHMgKi8NCiAgICAgICB0aC0+bmV4dC0+ cHJldiA9IGN1cnJfdGhyZWFkOw0KICAgICAgIGN1cnJfdGhyZWFkLT5uZXh0ID0gdGgtPm5leHQ7 DQotI2lmbmRlZiBOQVRJVkVfQ09ERQ0KKyNpZmRlZiBOQVRJVkVfQ09ERQ0KKyAgICAgIC8qIE5h dGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2VzICovDQorICAgICAgaWYgKGNhbWxfbmF0aXZlX2J0X2Fj dGl2KSBmcmVlKHRoLT5uYXRpdmVfYnRfYnVmX3B0cik7DQorI2Vsc2UNCiAgICAgICBzdGF0X2Zy ZWUodGgtPnN0YWNrX2xvdyk7DQogI2VuZGlmDQogICAgICAgc3RhdF9mcmVlKHRoKTsNCkBAIC01 MjgsNyArNTg5LDEwIEBADQogICBmcHJpbnRmKHN0ZGVyciwgIlRocmVhZCAlZCBraWxsZWQgb24g dW5jYXVnaHQgZXhjZXB0aW9uICVzXG4iLA0KICAgICAgICAgICBJbnRfdmFsKElkZW50KGN1cnJf dGhyZWFkLT5kZXNjcikpLCBtc2cpOw0KICAgZnJlZShtc2cpOw0KLSNpZm5kZWYgTkFUSVZFX0NP REUNCisjaWZkZWYgTkFUSVZFX0NPREUNCisgIC8qIE5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2Vz ICovDQorICBpZiAoY2FtbF9uYXRpdmVfYnRfYWN0aXYpIGNhbWxfcHJpbnRfbmF0aXZlX2JhY2t0 cmFjZShWYWxfdW5pdCk7DQorI2Vsc2UNCiAgIGlmIChiYWNrdHJhY2VfYWN0aXZlKSBwcmludF9l eGNlcHRpb25fYmFja3RyYWNlKCk7DQogI2VuZGlmDQogICBmZmx1c2goc3RkZXJyKTsNCkluZGV4 OiBzdGRsaWIvcHJpbnRleGMubWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY2FtbC9vY2FtbC9z dGRsaWIvcHJpbnRleGMubWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE4DQpkaWZmIC11IC1y MS4xOCBwcmludGV4Yy5tbA0KLS0tIHN0ZGxpYi9wcmludGV4Yy5tbAkxNiBKYW4gMjAwNCAxNToy NDowMiAtMDAwMAkxLjE4DQorKysgc3RkbGliL3ByaW50ZXhjLm1sCTcgTWFyIDIwMDYgMjE6Mzk6 NDggLTAwMDANCkBAIC02OCwzICs2OCwxMiBAQA0KICAgICBmbHVzaCBzdGRvdXQ7DQogICAgIGVw cmludGYgIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcbiIgKHRvX3N0cmluZyB4KTsNCiAgICAgZXhp dCAyDQorDQorDQorKCogTmF0aXZlIGZ1bmN0aW9uIGJhY2t0cmFjZXMgKikNCisNCitleHRlcm5h bCBwcmludF9uYXRpdmVfYmFja3RyYWNlIDoNCisgIHVuaXQgLT4gdW5pdCA9ICJjYW1sX3ByaW50 X25hdGl2ZV9iYWNrdHJhY2UiICJub2FsbG9jIg0KKw0KK2V4dGVybmFsIGdldF9uYXRpdmVfYmFj a3RyYWNlIDoNCisgIHVuaXQgLT4gc3RyaW5nIGFycmF5ID0gImNhbWxfZ2V0X25hdGl2ZV9iYWNr dHJhY2UiDQpJbmRleDogc3RkbGliL3ByaW50ZXhjLm1saQ0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC9jYW1sL29jYW1sL3N0ZGxpYi9wcmludGV4Yy5tbGksdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjEyDQpkaWZmIC11IC1yMS4xMiBwcmludGV4Yy5tbGkNCi0tLSBzdGRsaWIvcHJpbnRleGMubWxp CTI1IE9jdCAyMDA1IDE4OjM0OjA3IC0wMDAwCTEuMTINCisrKyBzdGRsaWIvcHJpbnRleGMubWxp CTcgTWFyIDIwMDYgMjE6Mzk6NDggLTAwMDANCkBAIC0zNiwzICszNiwzNSBAQA0KICAgIG1ha2Vz IGl0IGhhcmRlciB0byB0cmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGV4Y2VwdGlvbg0KICAgIHVz aW5nIHRoZSBkZWJ1Z2dlciBvciB0aGUgc3RhY2sgYmFja3RyYWNlIGZhY2lsaXR5Lg0KICAgIFNv LCBkbyBub3QgdXNlIFtQcmludGV4Yy5jYXRjaF0gaW4gbmV3IGNvZGUuICAqKQ0KKw0KKw0KKygq KiB7NiBOYXRpdmUgZnVuY3Rpb24gYmFja3RyYWNlc30NCisNCisgICAgVG8gdHVybiBvbiBuYXRp dmUgZnVuY3Rpb24gYmFja3RyYWNlcywgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlDQorICAgIE9D QU1MUlVOUEFSQU0gbXVzdCBjb250YWluIGEgbm9uLXplcm8gc2V0dGluZyBmb3IgcGFyYW1ldGVy ICJiIi4NCisNCisgICAgT25seSBub24taW5saW5lZCBmdW5jdGlvbnMgaW4gbW9kdWxlcyBjb21w aWxlZCB0byBuYXRpdmUgY29kZSB3aXRoDQorICAgICItZ2IiIHdpbGwgYmUgdHJhY2VkLCBvdGhl ciBmdW5jdGlvbnMgZG8gbm90IGFwcGVhciBpbiBiYWNrdHJhY2VzLg0KKw0KKyAgICBJbiBtdWx0 aS10aHJlYWRlZCBwcm9ncmFtcyBlYWNoIHRocmVhZCBtYWludGFpbnMgaXRzIG93biBiYWNrdHJh Y2UuDQorDQorICAgIE9ubHkgdGhlIGxhc3QgMzIgY2FsbGVkIGZ1bmN0aW9ucyAoYXNzZW1ibGVy IHN5bWJvbHM7IGluY2x1ZGVzDQorICAgIGFub255bW91cyBmdW5jdGlvbnMpIHdpbGwgYmUgcHJp bnRlZC9yZXR1cm5lZCBpbiByZXZlcnNlIG9yZGVyIG9mDQorICAgIGV4ZWN1dGlvbiAoaS5lLiBs YXN0IGNhbGxlZCBmdW5jdGlvbiBmaXJzdCkuDQorDQorICAgIElmIGEgZnVuY3Rpb24gY2FsbHMg aXRzZWxmIHJlY3Vyc2l2ZWx5IGFuZCBkaXJlY3RseSwgaXQgd2lsbCBvbmx5DQorICAgIGFwcGVh ciBvbmNlIGluIGJhY2t0cmFjZXMgdG8gcHJldmVudCBpdCBmcm9tIHdpcGluZyBvdXQgaXRzIGhp c3RvcnkuDQorKikNCisNCitleHRlcm5hbCBwcmludF9uYXRpdmVfYmFja3RyYWNlIDoNCisgIHVu aXQgLT4gdW5pdCA9ICJjYW1sX3ByaW50X25hdGl2ZV9iYWNrdHJhY2UiICJub2FsbG9jIg0KKygq KiBbcHJpbnRfbmF0aXZlX2JhY2t0cmFjZSAoKV0gcHJpbnRzIGEgbmF0aXZlIGZ1bmN0aW9uIGJh Y2t0cmFjZSB0bw0KKyAgICBbc3RkZXJyXS4gIERvZXMgbm90aGluZyB3aGVuIGV4ZWN1dGVkIGZy b20gYnl0ZSBjb2RlLCBvciB3aGVuIG5hdGl2ZQ0KKyAgICBmdW5jdGlvbiBiYWNrdHJhY2VzIGhh dmUgbm90IGJlZW4gdHVybmVkIG9uLiAqKQ0KKw0KK2V4dGVybmFsIGdldF9uYXRpdmVfYmFja3Ry YWNlIDoNCisgIHVuaXQgLT4gc3RyaW5nIGFycmF5ID0gImNhbWxfZ2V0X25hdGl2ZV9iYWNrdHJh Y2UiDQorKCoqIFtnZXRfbmF0aXZlX2JhY2t0cmFjZSAoKV0gcmV0dXJucyBhIG5hdGl2ZSBmdW5j dGlvbiBiYWNrdHJhY2UgYXMNCisgICAgYXJyYXkgb2YgZnVuY3Rpb24gbmFtZXMuICBSZXR1cm5z IHRoZSBlbXB0eSBhcnJheSB3aGVuIGV4ZWN1dGVkIGZyb20NCisgICAgYnl0ZSBjb2RlLCBvciB3 aGVuIG5hdGl2ZSBmdW5jdGlvbiBiYWNrdHJhY2VzIGhhdmUgbm90IGJlZW4gdHVybmVkDQorICAg IG9uLCBvciB3aGVuIG5vIGZ1bmN0aW9uIGhhcyBiZWVuIHRyYWNlZCB5ZXQuICopDQpJbmRleDog dXRpbHMvY2xmbGFncy5tbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jYW1sL29jYW1sL3V0aWxz L2NsZmxhZ3MubWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5DQpkaWZmIC11IC1yMS40OSBj bGZsYWdzLm1sDQotLS0gdXRpbHMvY2xmbGFncy5tbAkxIEF1ZyAyMDA1IDE1OjUxOjA5IC0wMDAw CTEuNDkNCisrKyB1dGlscy9jbGZsYWdzLm1sCTcgTWFyIDIwMDYgMjE6Mzk6NDggLTAwMDANCkBA IC0yNSw2ICsyNSw3IEBADQogYW5kIHByaW50X3R5cGVzID0gcmVmIGZhbHNlICAgICAgICAgICAg ICgqIC1pICopDQogYW5kIG1ha2VfYXJjaGl2ZSA9IHJlZiBmYWxzZSAgICAgICAgICAgICgqIC1h ICopDQogYW5kIGRlYnVnID0gcmVmIGZhbHNlICAgICAgICAgICAgICAgICAgICgqIC1nICopDQor YW5kIGRlYnVnX25hdGl2ZV9iYWNrdHJhY2UgPSByZWYgZmFsc2UgICgqIC1nYiAqKQ0KIGFuZCBm YXN0ID0gcmVmIGZhbHNlICAgICAgICAgICAgICAgICAgICAoKiAtdW5zYWZlICopDQogYW5kIGxp bmtfZXZlcnl0aGluZyA9IHJlZiBmYWxzZSAgICAgICAgICgqIC1saW5rYWxsICopDQogYW5kIGN1 c3RvbV9ydW50aW1lID0gcmVmIGZhbHNlICAgICAgICAgICgqIC1jdXN0b20gKikNCkluZGV4OiB1 dGlscy9jbGZsYWdzLm1saQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jYW1sL29jYW1sL3V0aWxz L2NsZmxhZ3MubWxpLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1yMS4xIGNs ZmxhZ3MubWxpDQotLS0gdXRpbHMvY2xmbGFncy5tbGkJMjYgT2N0IDIwMDUgMTM6MjM6MjcgLTAw MDAJMS4xDQorKysgdXRpbHMvY2xmbGFncy5tbGkJNyBNYXIgMjAwNiAyMTozOTo0OCAtMDAwMA0K QEAgLTIyLDYgKzIyLDcgQEANCiB2YWwgcHJpbnRfdHlwZXMgOiBib29sIHJlZg0KIHZhbCBtYWtl X2FyY2hpdmUgOiBib29sIHJlZg0KIHZhbCBkZWJ1ZyA6IGJvb2wgcmVmDQordmFsIGRlYnVnX25h dGl2ZV9iYWNrdHJhY2UgOiBib29sIHJlZg0KIHZhbCBmYXN0IDogYm9vbCByZWYNCiB2YWwgbGlu a19ldmVyeXRoaW5nIDogYm9vbCByZWYNCiB2YWwgY3VzdG9tX3J1bnRpbWUgOiBib29sIHJlZg0K DQo= --=_mixed 004B9546C1257138_=--