From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 69055 invoked by alias); 28 Oct 2017 13:04:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 65507 invoked by uid 89); 28 Oct 2017 13:04:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-13.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=dp, Further X-HELO: mail3-relais-sop.national.inria.fr Received: from mail3-relais-sop.national.inria.fr (HELO mail3-relais-sop.national.inria.fr) (192.134.164.104) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 28 Oct 2017 13:03:58 +0000 Received: from ip-195.net-89-2-234.rev.numericable.fr (HELO stedding) ([89.2.234.195]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 28 Oct 2017 15:03:54 +0200 Date: Sat, 28 Oct 2017 14:58:00 -0000 From: Marc Glisse To: gcc-patches@gcc.gnu.org Subject: [RFTesting] New POINTER_DIFF_EXPR Message-ID: User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-927559934-1509195834=:20582" X-SW-Source: 2017-10/txt/msg02130.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-927559934-1509195834=:20582 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 2585 Hello, first, if you are doing anything unusual with pointers (address spaces, pointer/sizetype with weird sizes, instrumentation, etc), it would be great if you could give this patch a try. It was bootstrapped and regtested on powerpc64le-unknown-linux-gnu (gcc112), and a slightly older version on x86_64-pc-linux-gnu (skylake laptop). I also built bare cross-compilers (no sysroot or anything) for avr, m32c, alpha64-vms, s390-linux, and visium to check that on trivial examples it behaves as expected (by the way, m32c seems broken for unrelated reasons at the moment), but I wouldn't count that as complete testing. This was previously discussed in the thread "Fix pointer diff (was: -fsanitize=pointer-overflow support (PR sanitizer/80998))" ( https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02128.html for the latest message). Front-ends other than C/C++ can be changed later (I took a quick look at fortran and ada, but they are way too unfamiliar to me), I did not remove any handling for the other representations. 2017-10-28 Marc Glisse gcc/c/ * c-fold.c (c_fully_fold_internal): Handle POINTER_DIFF_EXPR. * c-typeck.c (pointer_diff): Use POINTER_DIFF_EXPR. gcc/c-family/ * c-pretty-print.c (pp_c_additive_expression, c_pretty_printer::expression): Handle POINTER_DIFF_EXPR. gcc/cp/ * constexpr.c (cxx_eval_constant_expression, potential_constant_expression_1): Handle POINTER_DIFF_EXPR. * cp-gimplify.c (cp_fold): Likewise. * error.c (dump_expr): Likewise. * typeck.c (cp_build_binary_op): Likewise. (pointer_diff): Use POINTER_DIFF_EXPR. gcc/ * doc/generic.texi: Document POINTER_DIFF_EXPR, update POINTER_PLUS_EXPR. * cfgexpand.c (expand_debug_expr): Handle POINTER_DIFF_EXPR. * expr.c (expand_expr_real_2): Likewise. * fold-const.c (const_binop, const_binop, fold_addr_of_array_ref_difference, fold_binary_loc): Likewise. * match.pd (X-X, P+(Q-P), &D-P, (P+N)-P, P-(P+N), (P+M)-(P+N), P-Q==0): New transformations for POINTER_DIFF_EXPR, based on MINUS_EXPR transformations. * optabs-tree.c (optab_for_tree_code): Handle POINTER_DIFF_EXPR. * tree-cfg.c (verify_expr, verify_gimple_assign_binary): Likewise. * tree-inline.c (estimate_operator_cost): Likewise. * tree-pretty-print.c (dump_generic_node, op_code_prio, op_symbol_code): Likewise. * tree-vect-stmts.c (vectorizable_operation): Likewise. * tree-vrp.c (extract_range_from_binary_expr): Likewise. * varasm.c (initializer_constant_valid_p_1): Likewise. * tree.def: New tree code POINTER_DIFF_EXPR. -- Marc Glisse --8323329-927559934-1509195834=:20582 Content-Type: TEXT/x-diff; name=diff.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: inline; filename=diff.patch Content-length: 58987 SW5kZXg6IGdjYy9jL2MtZm9sZC5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL2MvYy1mb2xkLmMJKHJldmlzaW9uIDI1NDE4MykNCisrKyBn Y2MvYy9jLWZvbGQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTIzOCwyMCArMjM4 LDIxIEBAIGNfZnVsbHlfZm9sZF9pbnRlcm5hbCAodHJlZSBleHByLCBib29s IGkNCiAgICAgY2FzZSBDT01QT1VORF9FWFBSOg0KICAgICBjYXNlIE1PRElG WV9FWFBSOg0KICAgICBjYXNlIFBSRURFQ1JFTUVOVF9FWFBSOg0KICAgICBj YXNlIFBSRUlOQ1JFTUVOVF9FWFBSOg0KICAgICBjYXNlIFBPU1RERUNSRU1F TlRfRVhQUjoNCiAgICAgY2FzZSBQT1NUSU5DUkVNRU5UX0VYUFI6DQogICAg IGNhc2UgUExVU19FWFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAg IGNhc2UgTVVMVF9FWFBSOg0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBS Og0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAgICBjYXNlIFRS VU5DX0RJVl9FWFBSOg0KICAgICBjYXNlIENFSUxfRElWX0VYUFI6DQogICAg IGNhc2UgRkxPT1JfRElWX0VYUFI6DQogICAgIGNhc2UgVFJVTkNfTU9EX0VY UFI6DQogICAgIGNhc2UgUkRJVl9FWFBSOg0KICAgICBjYXNlIEVYQUNUX0RJ Vl9FWFBSOg0KICAgICBjYXNlIExTSElGVF9FWFBSOg0KICAgICBjYXNlIFJT SElGVF9FWFBSOg0KICAgICBjYXNlIEJJVF9JT1JfRVhQUjoNCiAgICAgY2Fz ZSBCSVRfWE9SX0VYUFI6DQpJbmRleDogZ2NjL2MvYy10eXBlY2suYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jL2MtdHlwZWNrLmMJKHJl dmlzaW9uIDI1NDE4MykNCisrKyBnY2MvYy9jLXR5cGVjay5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMzc3MiwyMSArMzc3MiwyMSBAQCBwYXJzZXJfYnVpbGRf YmluYXJ5X29wIChsb2NhdGlvbl90IGxvY2F0DQogICAgICAgJiYgVFJFRV9D T0RFICh0eXBlMikgPT0gRU5VTUVSQUxfVFlQRQ0KICAgICAgICYmIFRZUEVf TUFJTl9WQVJJQU5UICh0eXBlMSkgIT0gVFlQRV9NQUlOX1ZBUklBTlQgKHR5 cGUyKSkNCiAgICAgd2FybmluZ19hdCAobG9jYXRpb24sIE9QVF9XZW51bV9j b21wYXJlLA0KIAkJImNvbXBhcmlzb24gYmV0d2VlbiAlcVQgYW5kICVxVCIs DQogCQl0eXBlMSwgdHlwZTIpOw0KIA0KICAgcmV0dXJuIHJlc3VsdDsNCiB9 DQogDA0KIC8qIFJldHVybiBhIHRyZWUgZm9yIHRoZSBkaWZmZXJlbmNlIG9m IHBvaW50ZXJzIE9QMCBhbmQgT1AxLg0KLSAgIFRoZSByZXN1bHRpbmcgdHJl ZSBoYXMgdHlwZSBpbnQuICAqLw0KKyAgIFRoZSByZXN1bHRpbmcgdHJlZSBo YXMgdHlwZSBwdHJkaWZmX3QuICAqLw0KIA0KIHN0YXRpYyB0cmVlDQogcG9p bnRlcl9kaWZmIChsb2NhdGlvbl90IGxvYywgdHJlZSBvcDAsIHRyZWUgb3Ax KQ0KIHsNCiAgIHRyZWUgcmVzdHlwZSA9IHB0cmRpZmZfdHlwZV9ub2RlOw0K ICAgdHJlZSByZXN1bHQsIGludHR5cGU7DQogDQogICBhZGRyX3NwYWNlX3Qg YXMwID0gVFlQRV9BRERSX1NQQUNFIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAo b3AwKSkpOw0KICAgYWRkcl9zcGFjZV90IGFzMSA9IFRZUEVfQUREUl9TUEFD RSAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKG9wMSkpKTsNCiAgIHRyZWUgdGFy Z2V0X3R5cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQRSAob3AwKSk7DQpAQCAt MzgwNCw0MyArMzgwNCw1MCBAQCBwb2ludGVyX2RpZmYgKGxvY2F0aW9uX3Qg bG9jLCB0cmVlIG9wMCwNCiAJIHRvIGV4aXN0IGJlY2F1c2UgdGhlIGNhbGxl ciB2ZXJpZmllZCB0aGF0IGNvbXBfdGFyZ2V0X3R5cGVzDQogCSByZXR1cm5l ZCBub24temVyby4gICovDQogICAgICAgaWYgKCFhZGRyX3NwYWNlX3N1cGVy c2V0IChhczAsIGFzMSwgJmFzX2NvbW1vbikpDQogCWdjY191bnJlYWNoYWJs ZSAoKTsNCiANCiAgICAgICBjb21tb25fdHlwZSA9IGNvbW1vbl9wb2ludGVy X3R5cGUgKFRSRUVfVFlQRSAob3AwKSwgVFJFRV9UWVBFIChvcDEpKTsNCiAg ICAgICBvcDAgPSBjb252ZXJ0IChjb21tb25fdHlwZSwgb3AwKTsNCiAgICAg ICBvcDEgPSBjb252ZXJ0IChjb21tb25fdHlwZSwgb3AxKTsNCiAgICAgfQ0K IA0KLSAgLyogRGV0ZXJtaW5lIGludGVnZXIgdHlwZSB0byBwZXJmb3JtIGNv bXB1dGF0aW9ucyBpbi4gIFRoaXMgd2lsbCB1c3VhbGx5DQorICAvKiBEZXRl cm1pbmUgaW50ZWdlciB0eXBlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24u ICBUaGlzIHdpbGwgdXN1YWxseQ0KICAgICAgYmUgdGhlIHNhbWUgYXMgdGhl IHJlc3VsdCB0eXBlIChwdHJkaWZmX3QpLCBidXQgbWF5IG5lZWQgdG8gYmUg YSB3aWRlcg0KICAgICAgdHlwZSBpZiBwb2ludGVycyBmb3IgdGhlIGFkZHJl c3Mgc3BhY2UgYXJlIHdpZGVyIHRoYW4gcHRyZGlmZl90LiAgKi8NCiAgIGlm IChUWVBFX1BSRUNJU0lPTiAocmVzdHlwZSkgPCBUWVBFX1BSRUNJU0lPTiAo VFJFRV9UWVBFIChvcDApKSkNCiAgICAgaW50dHlwZSA9IGNfY29tbW9uX3R5 cGVfZm9yX3NpemUgKFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKG9wMCkp LCAwKTsNCiAgIGVsc2UNCiAgICAgaW50dHlwZSA9IHJlc3R5cGU7DQogDQog ICBpZiAoVFJFRV9DT0RFICh0YXJnZXRfdHlwZSkgPT0gVk9JRF9UWVBFKQ0K ICAgICBwZWR3YXJuIChsb2MsIE9QVF9XcG9pbnRlcl9hcml0aCwNCiAJICAg ICAicG9pbnRlciBvZiB0eXBlICU8dm9pZCAqJT4gdXNlZCBpbiBzdWJ0cmFj dGlvbiIpOw0KICAgaWYgKFRSRUVfQ09ERSAodGFyZ2V0X3R5cGUpID09IEZV TkNUSU9OX1RZUEUpDQogICAgIHBlZHdhcm4gKGxvYywgT1BUX1dwb2ludGVy X2FyaXRoLA0KIAkgICAgICJwb2ludGVyIHRvIGEgZnVuY3Rpb24gdXNlZCBp biBzdWJ0cmFjdGlvbiIpOw0KIA0KLSAgLyogRmlyc3QgZG8gdGhlIHN1YnRy YWN0aW9uIGFzIGludGVnZXJzOw0KLSAgICAgdGhlbiBkcm9wIHRocm91Z2gg dG8gYnVpbGQgdGhlIGRpdmlkZSBvcGVyYXRvci4NCi0gICAgIERvIG5vdCBk byBkZWZhdWx0IGNvbnZlcnNpb25zIG9uIHRoZSBtaW51cyBvcGVyYXRvcg0K LSAgICAgaW4gY2FzZSByZXN0eXBlIGlzIGEgc2hvcnQgdHlwZS4gICovDQot DQotICBvcDAgPSBidWlsZF9iaW5hcnlfb3AgKGxvYywNCi0JCQkgTUlOVVNf RVhQUiwgY29udmVydCAoaW50dHlwZSwgb3AwKSwNCi0JCQkgY29udmVydCAo aW50dHlwZSwgb3AxKSwgZmFsc2UpOw0KKyAgLyogRmlyc3QgZG8gdGhlIHN1 YnRyYWN0aW9uLCB0aGVuIGJ1aWxkIHRoZSBkaXZpZGUgb3BlcmF0b3INCisg ICAgIGFuZCBvbmx5IGNvbnZlcnQgYXQgdGhlIHZlcnkgZW5kLg0KKyAgICAg RG8gbm90IGRvIGRlZmF1bHQgY29udmVyc2lvbnMgaW4gY2FzZSByZXN0eXBl IGlzIGEgc2hvcnQgdHlwZS4gICovDQorDQorICAvKiBQT0lOVEVSX0RJRkZf RVhQUiByZXF1aXJlcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2YgdGhlIHNh bWUgc2l6ZSBhcw0KKyAgICAgcG9pbnRlcnMuICBJZiBzb21lIHBsYXRmb3Jt IGNhbm5vdCBwcm92aWRlIHRoYXQsIG9yIGhhcyBhIGxhcmdlcg0KKyAgICAg cHRyZGlmZl90eXBlIHRvIHN1cHBvcnQgZGlmZmVyZW5jZXMgbGFyZ2VyIHRo YW4gaGFsZiB0aGUgYWRkcmVzcw0KKyAgICAgc3BhY2UsIGNhc3QgdGhlIHBv aW50ZXJzIHRvIHNvbWUgbGFyZ2VyIGludGVnZXIgdHlwZSBhbmQgZG8gdGhl DQorICAgICBjb21wdXRhdGlvbnMgaW4gdGhhdCB0eXBlLiAgKi8NCisgIGlm IChUWVBFX1BSRUNJU0lPTiAoaW50dHlwZSkgPiBUWVBFX1BSRUNJU0lPTiAo VFJFRV9UWVBFIChvcDApKSkNCisgICAgICAgb3AwID0gYnVpbGRfYmluYXJ5 X29wIChsb2MsIE1JTlVTX0VYUFIsIGNvbnZlcnQgKGludHR5cGUsIG9wMCks DQorCQkJICAgICAgY29udmVydCAoaW50dHlwZSwgb3AxKSwgZmFsc2UpOw0K KyAgZWxzZQ0KKyAgICBvcDAgPSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJf RElGRl9FWFBSLCBpbnR0eXBlLCBvcDAsIG9wMSk7DQorDQogICAvKiBUaGlz IGdlbmVyYXRlcyBhbiBlcnJvciBpZiBvcDEgaXMgcG9pbnRlciB0byBpbmNv bXBsZXRlIHR5cGUuICAqLw0KICAgaWYgKCFDT01QTEVURV9PUl9WT0lEX1RZ UEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKG9yaWdfb3AxKSkpKQ0KICAg ICBlcnJvcl9hdCAobG9jLCAiYXJpdGhtZXRpYyBvbiBwb2ludGVyIHRvIGFu IGluY29tcGxldGUgdHlwZSIpOw0KIA0KICAgb3AxID0gY19zaXplX2luX2J5 dGVzICh0YXJnZXRfdHlwZSk7DQogDQogICBpZiAocG9pbnRlcl90b196ZXJv X3NpemVkX2FnZ3JfcCAoVFJFRV9UWVBFIChvcmlnX29wMSkpKQ0KICAgICBl cnJvcl9hdCAobG9jLCAiYXJpdGhtZXRpYyBvbiBwb2ludGVyIHRvIGFuIGVt cHR5IGFnZ3JlZ2F0ZSIpOw0KIA0KICAgLyogRGl2aWRlIGJ5IHRoZSBzaXpl LCBpbiBlYXNpZXN0IHBvc3NpYmxlIHdheS4gICovDQpJbmRleDogZ2NjL2Mt ZmFtaWx5L2MtcHJldHR5LXByaW50LmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MvYy1mYW1pbHkvYy1wcmV0dHktcHJpbnQuYwkocmV2aXNp b24gMjU0MTgzKQ0KKysrIGdjYy9jLWZhbWlseS9jLXByZXR0eS1wcmludC5j CSh3b3JraW5nIGNvcHkpDQpAQCAtMTg2OSwyMCArMTg2OSwyMSBAQCBjX3By ZXR0eV9wcmludGVyOjptdWx0aXBsaWNhdGl2ZV9leHByZXNzDQogICAgICAg YWRkaXRpdmUtZXhwcmVzc2lvbiAtIG11bHRpcGxpY2F0aXZlLWV4cHJlc3Np b24gICAqLw0KIA0KIHN0YXRpYyB2b2lkDQogcHBfY19hZGRpdGl2ZV9leHBy ZXNzaW9uIChjX3ByZXR0eV9wcmludGVyICpwcCwgdHJlZSBlKQ0KIHsNCiAg IGVudW0gdHJlZV9jb2RlIGNvZGUgPSBUUkVFX0NPREUgKGUpOw0KICAgc3dp dGNoIChjb2RlKQ0KICAgICB7DQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VY UFI6DQogICAgIGNhc2UgUExVU19FWFBSOg0KKyAgICBjYXNlIFBPSU5URVJf RElGRl9FWFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgcHBf Y19hZGRpdGl2ZV9leHByZXNzaW9uIChwcCwgVFJFRV9PUEVSQU5EIChlLCAw KSk7DQogICAgICAgcHBfY193aGl0ZXNwYWNlIChwcCk7DQogICAgICAgaWYg KGNvZGUgPT0gUExVU19FWFBSIHx8IGNvZGUgPT0gUE9JTlRFUl9QTFVTX0VY UFIpDQogCXBwX3BsdXMgKHBwKTsNCiAgICAgICBlbHNlDQogCXBwX21pbnVz IChwcCk7DQogICAgICAgcHBfY193aGl0ZXNwYWNlIChwcCk7DQogICAgICAg cHAtPm11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAo ZSwgMSkpOw0KICAgICAgIGJyZWFrOw0KQEAgLTIyODUsMjAgKzIyODYsMjEg QEAgY19wcmV0dHlfcHJpbnRlcjo6ZXhwcmVzc2lvbiAodHJlZSBlKQ0KICAg ICBjYXNlIE5FX0VYUFI6DQogICAgICAgcHBfY19lcXVhbGl0eV9leHByZXNz aW9uICh0aGlzLCBlKTsNCiAgICAgICBicmVhazsNCiANCiAgICAgY2FzZSBD T05EX0VYUFI6DQogICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAoZSk7 DQogICAgICAgYnJlYWs7DQogDQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VY UFI6DQogICAgIGNhc2UgUExVU19FWFBSOg0KKyAgICBjYXNlIFBPSU5URVJf RElGRl9FWFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgcHBf Y19hZGRpdGl2ZV9leHByZXNzaW9uICh0aGlzLCBlKTsNCiAgICAgICBicmVh azsNCiANCiAgICAgY2FzZSBNT0RJRllfRVhQUjoNCiAgICAgY2FzZSBJTklU X0VYUFI6DQogICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIChlKTsNCiAg ICAgICBicmVhazsNCiANCiAgICAgY2FzZSBDT01QT1VORF9FWFBSOg0KSW5k ZXg6IGdjYy9jZmdleHBhbmQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy9jZmdleHBhbmQuYwkocmV2aXNpb24gMjU0MTgzKQ0KKysrIGdj Yy9jZmdleHBhbmQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTQ2MjEsMjAgKzQ2 MjEsMjEgQEAgZXhwYW5kX2RlYnVnX2V4cHIgKHRyZWUgZXhwKQ0KIAkgICAg LyogV2UgYWx3YXlzIHNpZ24tZXh0ZW5kLCByZWdhcmRsZXNzIG9mIHRoZSBz aWduZWRuZXNzIG9mDQogCSAgICAgICB0aGUgb3BlcmFuZCwgYmVjYXVzZSB0 aGUgb3BlcmFuZCBpcyBhbHdheXMgdW5zaWduZWQNCiAJICAgICAgIGhlcmUg ZXZlbiBpZiB0aGUgb3JpZ2luYWwgQyBleHByZXNzaW9uIGlzIHNpZ25lZC4g ICovDQogCSAgICBvcDEgPSBzaW1wbGlmeV9nZW5fdW5hcnkgKFNJR05fRVhU RU5ELCBvcDBfbW9kZSwgb3AxLCBvcDFfbW9kZSk7DQogCX0NCiAgICAgICAv KiBGYWxsIHRocm91Z2guICAqLw0KICAgICBjYXNlIFBMVVNfRVhQUjoNCiAg ICAgICByZXR1cm4gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoUExVUywgbW9kZSwg b3AwLCBvcDEpOw0KIA0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQorICAgIGNh c2UgUE9JTlRFUl9ESUZGX0VYUFI6DQogICAgICAgcmV0dXJuIHNpbXBsaWZ5 X2dlbl9iaW5hcnkgKE1JTlVTLCBtb2RlLCBvcDAsIG9wMSk7DQogDQogICAg IGNhc2UgTVVMVF9FWFBSOg0KICAgICAgIHJldHVybiBzaW1wbGlmeV9nZW5f YmluYXJ5IChNVUxULCBtb2RlLCBvcDAsIG9wMSk7DQogDQogICAgIGNhc2Ug UkRJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX0RJVl9FWFBSOg0KICAgICBj YXNlIEVYQUNUX0RJVl9FWFBSOg0KICAgICAgIGlmICh1bnNpZ25lZHApDQog CXJldHVybiBzaW1wbGlmeV9nZW5fYmluYXJ5IChVRElWLCBtb2RlLCBvcDAs IG9wMSk7DQpJbmRleDogZ2NjL2NwL2NvbnN0ZXhwci5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjL2NwL2NvbnN0ZXhwci5jCShyZXZpc2lv biAyNTQxODMpDQorKysgZ2NjL2NwL2NvbnN0ZXhwci5jCSh3b3JraW5nIGNv cHkpDQpAQCAtNDI3NSwyMCArNDI3NSwyMSBAQCBjeHhfZXZhbF9jb25zdGFu dF9leHByZXNzaW9uIChjb25zdCBjb25zDQogCSAgICAgIHJldHVybiB0Ow0K IAkgICAgb3AxID0gVFJFRV9PUEVSQU5EICh0LCAxKTsNCiAJICAgIHIgPSBj eHhfZXZhbF9jb25zdGFudF9leHByZXNzaW9uIChjdHgsIG9wMSwNCiAJCQkJ CSAgICAgIGx2YWwsIG5vbl9jb25zdGFudF9wLCBvdmVyZmxvd19wLA0KIAkJ CQkJICAgICAganVtcF90YXJnZXQpOw0KIAkgIH0NCiAgICAgICB9DQogICAg ICAgYnJlYWs7DQogDQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQor ICAgIGNhc2UgUE9JTlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgUExVU19F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgIGNhc2UgTVVMVF9F WFBSOg0KICAgICBjYXNlIFRSVU5DX0RJVl9FWFBSOg0KICAgICBjYXNlIENF SUxfRElWX0VYUFI6DQogICAgIGNhc2UgRkxPT1JfRElWX0VYUFI6DQogICAg IGNhc2UgUk9VTkRfRElWX0VYUFI6DQogICAgIGNhc2UgVFJVTkNfTU9EX0VY UFI6DQogICAgIGNhc2UgQ0VJTF9NT0RfRVhQUjoNCiAgICAgY2FzZSBST1VO RF9NT0RfRVhQUjoNCkBAIC01NTA5LDIwICs1NTEwLDIxIEBAIHBvdGVudGlh bF9jb25zdGFudF9leHByZXNzaW9uXzEgKHRyZWUgdCwNCiAJICAgICYmIFRZ UEVfUE9MWU1PUlBISUNfUCAoVFJFRV9UWVBFIChlKSkpDQogICAgICAgICAg IHsNCiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiB0Zl9lcnJvcikNCiAgICAg ICAgICAgICAgIGVycm9yX2F0IChsb2MsICJ0eXBlaWQtZXhwcmVzc2lvbiBp cyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uICINCiAJCQkiYmVjYXVzZSAl cUUgaXMgb2YgcG9seW1vcnBoaWMgdHlwZSIsIGUpOw0KICAgICAgICAgICAg IHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJu IHRydWU7DQogICAgICAgfQ0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgd2FudF9ydmFs ID0gdHJ1ZTsNCiAgICAgICBnb3RvIGJpbmFyeTsNCiANCiAgICAgY2FzZSBM VF9FWFBSOg0KICAgICBjYXNlIExFX0VYUFI6DQogICAgIGNhc2UgR1RfRVhQ UjoNCiAgICAgY2FzZSBHRV9FWFBSOg0KICAgICBjYXNlIEVRX0VYUFI6DQog ICAgIGNhc2UgTkVfRVhQUjoNCkluZGV4OiBnY2MvY3AvY3AtZ2ltcGxpZnku Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jcC9jcC1naW1w bGlmeS5jCShyZXZpc2lvbiAyNTQxODMpDQorKysgZ2NjL2NwL2NwLWdpbXBs aWZ5LmMJKHdvcmtpbmcgY29weSkNCkBAIC0yMjA1LDIwICsyMjA1LDIxIEBA IGNwX2ZvbGQgKHRyZWUgeCkNCiAgICAgY2FzZSBQT1NUSU5DUkVNRU5UX0VY UFI6DQogICAgIGNhc2UgSU5JVF9FWFBSOg0KICAgICBjYXNlIFBSRURFQ1JF TUVOVF9FWFBSOg0KICAgICBjYXNlIFBSRUlOQ1JFTUVOVF9FWFBSOg0KICAg ICBjYXNlIENPTVBPVU5EX0VYUFI6DQogICAgIGNhc2UgTU9ESUZZX0VYUFI6 DQogICAgICAgcnZhbF9vcHMgPSBmYWxzZTsNCiAgICAgICAvKiBGQUxMVEhS VSAqLw0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBSOg0KICAgICBjYXNl IFBMVVNfRVhQUjoNCisgICAgY2FzZSBQT0lOVEVSX0RJRkZfRVhQUjoNCiAg ICAgY2FzZSBNSU5VU19FWFBSOg0KICAgICBjYXNlIE1VTFRfRVhQUjoNCiAg ICAgY2FzZSBUUlVOQ19ESVZfRVhQUjoNCiAgICAgY2FzZSBDRUlMX0RJVl9F WFBSOg0KICAgICBjYXNlIEZMT09SX0RJVl9FWFBSOg0KICAgICBjYXNlIFJP VU5EX0RJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX01PRF9FWFBSOg0KICAg ICBjYXNlIENFSUxfTU9EX0VYUFI6DQogICAgIGNhc2UgUk9VTkRfTU9EX0VY UFI6DQogICAgIGNhc2UgUkRJVl9FWFBSOg0KSW5kZXg6IGdjYy9jcC9lcnJv ci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2NwL2Vycm9y LmMJKHJldmlzaW9uIDI1NDE4MykNCisrKyBnY2MvY3AvZXJyb3IuYwkod29y a2luZyBjb3B5KQ0KQEAgLTIyMjEsMjAgKzIyMjEsMjQgQEAgZHVtcF9leHBy IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlDQogCSBkZWZhdWx0IGFy Z3VtZW50LiAgTm90ZSB3ZSBtYXkgaGF2ZSBjbGVhcmVkIG91dCB0aGUgZmly c3QNCiAJIG9wZXJhbmQgaW4gZXhwYW5kX2V4cHIsIHNvIGRvbid0IGdvIGtp bGxpbmcgb3Vyc2VsdmVzLiAgKi8NCiAgICAgICBpZiAoVFJFRV9PUEVSQU5E ICh0LCAxKSkNCiAJZHVtcF9leHByIChwcCwgVFJFRV9PUEVSQU5EICh0LCAx KSwgZmxhZ3MgfCBURkZfRVhQUl9JTl9QQVJFTlMpOw0KICAgICAgIGJyZWFr Ow0KIA0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBSOg0KICAgICAgIGR1 bXBfYmluYXJ5X29wIChwcCwgIisiLCB0LCBmbGFncyk7DQogICAgICAgYnJl YWs7DQogDQorICAgIGNhc2UgUE9JTlRFUl9ESUZGX0VYUFI6DQorICAgICAg ZHVtcF9iaW5hcnlfb3AgKHBwLCAiLSIsIHQsIGZsYWdzKTsNCisgICAgICBi cmVhazsNCisNCiAgICAgY2FzZSBJTklUX0VYUFI6DQogICAgIGNhc2UgTU9E SUZZX0VYUFI6DQogICAgICAgZHVtcF9iaW5hcnlfb3AgKHBwLCBhc3NpZ25t ZW50X29wZXJhdG9yX25hbWVfaW5mb1tOT1BfRVhQUl0ubmFtZSwNCiAJCSAg ICAgIHQsIGZsYWdzKTsNCiAgICAgICBicmVhazsNCiANCiAgICAgY2FzZSBQ TFVTX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCiAgICAgY2FzZSBN VUxUX0VYUFI6DQogICAgIGNhc2UgVFJVTkNfRElWX0VYUFI6DQpJbmRleDog Z2NjL2NwL3R5cGVjay5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL2NwL3R5cGVjay5jCShyZXZpc2lvbiAyNTQxODMpDQorKysgZ2NjL2Nw L3R5cGVjay5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNDMwNSwyMCArNDMwNSwy MSBAQCBjcF9idWlsZF9iaW5hcnlfb3AgKGxvY2F0aW9uX3QgbG9jYXRpb24s DQogICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSAxOw0KICAgICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICBkZWZhdWx0 Og0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgfQ0KICAgICB9DQog DQogICBzd2l0Y2ggKGNvZGUpDQogICAgIHsNCisgICAgY2FzZSBQT0lOVEVS X0RJRkZfRVhQUjoNCiAgICAgY2FzZSBNSU5VU19FWFBSOg0KICAgICAgIC8q IFN1YnRyYWN0aW9uIG9mIHR3byBzaW1pbGFyIHBvaW50ZXJzLg0KIAkgV2Ug bXVzdCBzdWJ0cmFjdCB0aGVtIGFzIGludGVnZXJzLCB0aGVuIGRpdmlkZSBi eSBvYmplY3Qgc2l6ZS4gICovDQogICAgICAgaWYgKGNvZGUwID09IFBPSU5U RVJfVFlQRSAmJiBjb2RlMSA9PSBQT0lOVEVSX1RZUEUNCiAJICAmJiBzYW1l X3R5cGVfaWdub3JpbmdfdG9wX2xldmVsX3F1YWxpZmllcnNfcCAoVFJFRV9U WVBFICh0eXBlMCksDQogCQkJCQkJCVRSRUVfVFlQRSAodHlwZTEpKSkNCiAJ cmV0dXJuIHBvaW50ZXJfZGlmZiAobG9jYXRpb24sIG9wMCwgb3AxLA0KIAkJ CSAgICAgY29tbW9uX3BvaW50ZXJfdHlwZSAodHlwZTAsIHR5cGUxKSwgY29t cGxhaW4pOw0KICAgICAgIC8qIEluIGFsbCBvdGhlciBjYXNlcyBleGNlcHQg cG9pbnRlciAtIGludCwgdGhlIHVzdWFsIGFyaXRobWV0aWMNCiAJIHJ1bGVz IGFwcGx5LiAgKi8NCkBAIC01MzYyLDIxICs1MzYzLDIxIEBAIGNwX3BvaW50 ZXJfaW50X3N1bSAobG9jYXRpb25fdCBsb2MsIGVudW0NCiAJCQkgIGludG9w LCBjb21wbGFpbiAmIHRmX3dhcm5pbmdfb3JfZXJyb3IpOw0KIH0NCiANCiAv KiBSZXR1cm4gYSB0cmVlIGZvciB0aGUgZGlmZmVyZW5jZSBvZiBwb2ludGVy cyBPUDAgYW5kIE9QMS4NCiAgICBUaGUgcmVzdWx0aW5nIHRyZWUgaGFzIHR5 cGUgaW50LiAgKi8NCiANCiBzdGF0aWMgdHJlZQ0KIHBvaW50ZXJfZGlmZiAo bG9jYXRpb25fdCBsb2MsIHRyZWUgb3AwLCB0cmVlIG9wMSwgdHJlZSBwdHJ0 eXBlLA0KIAkgICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbikNCiB7DQot ICB0cmVlIHJlc3VsdDsNCisgIHRyZWUgcmVzdWx0LCBpbnR0eXBlOw0KICAg dHJlZSByZXN0eXBlID0gcHRyZGlmZl90eXBlX25vZGU7DQogICB0cmVlIHRh cmdldF90eXBlID0gVFJFRV9UWVBFIChwdHJ0eXBlKTsNCiANCiAgIGlmICgh Y29tcGxldGVfdHlwZV9vcl9lbHNlICh0YXJnZXRfdHlwZSwgTlVMTF9UUkVF KSkNCiAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsNCiANCiAgIGlmIChW T0lEX1RZUEVfUCAodGFyZ2V0X3R5cGUpKQ0KICAgICB7DQogICAgICAgaWYg KGNvbXBsYWluICYgdGZfZXJyb3IpDQogCXBlcm1lcnJvciAobG9jLCAiSVNP IEMrKyBmb3JiaWRzIHVzaW5nIHBvaW50ZXIgb2YgIg0KQEAgLTUzOTQsMjgg KzUzOTUsNDUgQEAgcG9pbnRlcl9kaWZmIChsb2NhdGlvbl90IGxvYywgdHJl ZSBvcDAsDQogICAgIH0NCiAgIGlmIChUUkVFX0NPREUgKHRhcmdldF90eXBl KSA9PSBNRVRIT0RfVFlQRSkNCiAgICAgew0KICAgICAgIGlmIChjb21wbGFp biAmIHRmX2Vycm9yKQ0KIAlwZXJtZXJyb3IgKGxvYywgIklTTyBDKysgZm9y YmlkcyB1c2luZyBwb2ludGVyIHRvICINCiAJCSAgICJhIG1ldGhvZCBpbiBz dWJ0cmFjdGlvbiIpOw0KICAgICAgIGVsc2UNCiAJcmV0dXJuIGVycm9yX21h cmtfbm9kZTsNCiAgICAgfQ0KIA0KLSAgLyogRmlyc3QgZG8gdGhlIHN1YnRy YWN0aW9uIGFzIGludGVnZXJzOw0KLSAgICAgdGhlbiBkcm9wIHRocm91Z2gg dG8gYnVpbGQgdGhlIGRpdmlkZSBvcGVyYXRvci4gICovDQorICAvKiBEZXRl cm1pbmUgaW50ZWdlciB0eXBlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24u ICBUaGlzIHdpbGwgdXN1YWxseQ0KKyAgICAgYmUgdGhlIHNhbWUgYXMgdGhl IHJlc3VsdCB0eXBlIChwdHJkaWZmX3QpLCBidXQgbWF5IG5lZWQgdG8gYmUg YSB3aWRlcg0KKyAgICAgdHlwZSBpZiBwb2ludGVycyBmb3IgdGhlIGFkZHJl c3Mgc3BhY2UgYXJlIHdpZGVyIHRoYW4gcHRyZGlmZl90LiAgKi8NCisgIGlm IChUWVBFX1BSRUNJU0lPTiAocmVzdHlwZSkgPCBUWVBFX1BSRUNJU0lPTiAo VFJFRV9UWVBFIChvcDApKSkNCisgICAgaW50dHlwZSA9IGNfY29tbW9uX3R5 cGVfZm9yX3NpemUgKFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKG9wMCkp LCAwKTsNCisgIGVsc2UNCisgICAgaW50dHlwZSA9IHJlc3R5cGU7DQogDQot ICBvcDAgPSBjcF9idWlsZF9iaW5hcnlfb3AgKGxvYywNCi0JCQkgICAgTUlO VVNfRVhQUiwNCi0JCQkgICAgY3BfY29udmVydCAocmVzdHlwZSwgb3AwLCBj b21wbGFpbiksDQotCQkJICAgIGNwX2NvbnZlcnQgKHJlc3R5cGUsIG9wMSwg Y29tcGxhaW4pLA0KLQkJCSAgICBjb21wbGFpbik7DQorICAvKiBGaXJzdCBk byB0aGUgc3VidHJhY3Rpb24sIHRoZW4gYnVpbGQgdGhlIGRpdmlkZSBvcGVy YXRvcg0KKyAgICAgYW5kIG9ubHkgY29udmVydCBhdCB0aGUgdmVyeSBlbmQu DQorICAgICBEbyBub3QgZG8gZGVmYXVsdCBjb252ZXJzaW9ucyBpbiBjYXNl IHJlc3R5cGUgaXMgYSBzaG9ydCB0eXBlLiAgKi8NCisNCisgIC8qIFBPSU5U RVJfRElGRl9FWFBSIHJlcXVpcmVzIGEgc2lnbmVkIGludGVnZXIgdHlwZSBv ZiB0aGUgc2FtZSBzaXplIGFzDQorICAgICBwb2ludGVycy4gIElmIHNvbWUg cGxhdGZvcm0gY2Fubm90IHByb3ZpZGUgdGhhdCwgb3IgaGFzIGEgbGFyZ2Vy DQorICAgICBwdHJkaWZmX3R5cGUgdG8gc3VwcG9ydCBkaWZmZXJlbmNlcyBs YXJnZXIgdGhhbiBoYWxmIHRoZSBhZGRyZXNzDQorICAgICBzcGFjZSwgY2Fz dCB0aGUgcG9pbnRlcnMgdG8gc29tZSBsYXJnZXIgaW50ZWdlciB0eXBlIGFu ZCBkbyB0aGUNCisgICAgIGNvbXB1dGF0aW9ucyBpbiB0aGF0IHR5cGUuICAq Lw0KKyAgaWYgKFRZUEVfUFJFQ0lTSU9OIChpbnR0eXBlKSA+IFRZUEVfUFJF Q0lTSU9OIChUUkVFX1RZUEUgKG9wMCkpKQ0KKyAgICBvcDAgPSBjcF9idWls ZF9iaW5hcnlfb3AgKGxvYywNCisJCQkgICAgICBNSU5VU19FWFBSLA0KKwkJ CSAgICAgIGNwX2NvbnZlcnQgKGludHR5cGUsIG9wMCwgY29tcGxhaW4pLA0K KwkJCSAgICAgIGNwX2NvbnZlcnQgKGludHR5cGUsIG9wMSwgY29tcGxhaW4p LA0KKwkJCSAgICAgIGNvbXBsYWluKTsNCisgIGVsc2UNCisgICAgb3AwID0g YnVpbGQyX2xvYyAobG9jLCBQT0lOVEVSX0RJRkZfRVhQUiwgaW50dHlwZSwg b3AwLCBvcDEpOw0KIA0KICAgLyogVGhpcyBnZW5lcmF0ZXMgYW4gZXJyb3Ig aWYgb3AxIGlzIGEgcG9pbnRlciB0byBhbiBpbmNvbXBsZXRlIHR5cGUuICAq Lw0KICAgaWYgKCFDT01QTEVURV9UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9U WVBFIChvcDEpKSkpDQogICAgIHsNCiAgICAgICBpZiAoY29tcGxhaW4gJiB0 Zl9lcnJvcikNCiAJZXJyb3JfYXQgKGxvYywgImludmFsaWQgdXNlIG9mIGEg cG9pbnRlciB0byBhbiBpbmNvbXBsZXRlIHR5cGUgaW4gIg0KIAkJICAicG9p bnRlciBhcml0aG1ldGljIik7DQogICAgICAgZWxzZQ0KIAlyZXR1cm4gZXJy b3JfbWFya19ub2RlOw0KICAgICB9DQpAQCAtNTQyNywyMyArNTQ0NSwyMyBA QCBwb2ludGVyX2RpZmYgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIG9wMCwNCiAg ICAgICBlbHNlDQogCXJldHVybiBlcnJvcl9tYXJrX25vZGU7DQogICAgIH0N CiANCiAgIG9wMSA9IChUWVBFX1BUUk9CX1AgKHB0cnR5cGUpDQogCSA/IHNp emVfaW5fYnl0ZXNfbG9jIChsb2MsIHRhcmdldF90eXBlKQ0KIAkgOiBpbnRl Z2VyX29uZV9ub2RlKTsNCiANCiAgIC8qIERvIHRoZSBkaXZpc2lvbi4gICov DQogDQotICByZXN1bHQgPSBidWlsZDJfbG9jIChsb2MsIEVYQUNUX0RJVl9F WFBSLCByZXN0eXBlLCBvcDAsDQotCQkgICAgICAgY3BfY29udmVydCAocmVz dHlwZSwgb3AxLCBjb21wbGFpbikpOw0KLSAgcmV0dXJuIHJlc3VsdDsNCisg IHJlc3VsdCA9IGJ1aWxkMl9sb2MgKGxvYywgRVhBQ1RfRElWX0VYUFIsIGlu dHR5cGUsIG9wMCwNCisJCSAgICAgICBjcF9jb252ZXJ0IChpbnR0eXBlLCBv cDEsIGNvbXBsYWluKSk7DQorICByZXR1cm4gY3BfY29udmVydCAocmVzdHlw ZSwgcmVzdWx0LCBjb21wbGFpbik7DQogfQ0KIAwNCiAvKiBDb25zdHJ1Y3Qg YW5kIHBlcmhhcHMgb3B0aW1pemUgYSB0cmVlIHJlcHJlc2VudGF0aW9uDQog ICAgZm9yIGEgdW5hcnkgb3BlcmF0aW9uLiAgQ09ERSwgYSB0cmVlX2NvZGUs IHNwZWNpZmllcyB0aGUgb3BlcmF0aW9uDQogICAgYW5kIFhBUkcgaXMgdGhl IG9wZXJhbmQuICAqLw0KIA0KIHRyZWUNCiBidWlsZF94X3VuYXJ5X29wIChs b2NhdGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwgY3BfZXhwciB4 YXJnLA0KIAkJICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbikNCiB7DQpJbmRl eDogZ2NjL2RvYy9nZW5lcmljLnRleGkNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MvZG9jL2dlbmVyaWMudGV4aQkocmV2aXNpb24gMjU0MTgz KQ0KKysrIGdjYy9kb2MvZ2VuZXJpYy50ZXhpCSh3b3JraW5nIGNvcHkpDQpA QCAtMTIxNywyMCArMTIxNywyMSBAQCB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhl IGZpZWxkLCBidXQgc2hvdWxkDQogQHRpbmRleCBSU0hJRlRfRVhQUg0KIEB0 aW5kZXggQklUX0lPUl9FWFBSDQogQHRpbmRleCBCSVRfWE9SX0VYUFINCiBA dGluZGV4IEJJVF9BTkRfRVhQUg0KIEB0aW5kZXggVFJVVEhfQU5ESUZfRVhQ Ug0KIEB0aW5kZXggVFJVVEhfT1JJRl9FWFBSDQogQHRpbmRleCBUUlVUSF9B TkRfRVhQUg0KIEB0aW5kZXggVFJVVEhfT1JfRVhQUg0KIEB0aW5kZXggVFJV VEhfWE9SX0VYUFINCiBAdGluZGV4IFBPSU5URVJfUExVU19FWFBSDQorQHRp bmRleCBQT0lOVEVSX0RJRkZfRVhQUg0KIEB0aW5kZXggUExVU19FWFBSDQog QHRpbmRleCBNSU5VU19FWFBSDQogQHRpbmRleCBNVUxUX0VYUFINCiBAdGlu ZGV4IE1VTFRfSElHSFBBUlRfRVhQUg0KIEB0aW5kZXggUkRJVl9FWFBSDQog QHRpbmRleCBUUlVOQ19ESVZfRVhQUg0KIEB0aW5kZXggRkxPT1JfRElWX0VY UFINCiBAdGluZGV4IENFSUxfRElWX0VYUFINCiBAdGluZGV4IFJPVU5EX0RJ Vl9FWFBSDQogQHRpbmRleCBUUlVOQ19NT0RfRVhQUg0KQEAgLTE0MDYsMjIg KzE0MDcsMjYgQEAgYWx3YXlzIG9mIEBjb2Rle0JPT0xFQU5fVFlQRX0gb3Ig QGNvZGV7SQ0KIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBsb2dpY2FsIGFuZCwg bG9naWNhbCBvciwgYW5kIGxvZ2ljYWwgZXhjbHVzaXZlIG9yLg0KIFRoZXkg YXJlIHN0cmljdDsgYm90aCBhcmd1bWVudHMgYXJlIGFsd2F5cyBldmFsdWF0 ZWQuICBUaGVyZSBhcmUgbm8NCiBjb3JyZXNwb25kaW5nIG9wZXJhdG9ycyBp biBDIG9yIEMrKywgYnV0IHRoZSBmcm9udCBlbmQgd2lsbCBzb21ldGltZXMN CiBnZW5lcmF0ZSB0aGVzZSBleHByZXNzaW9ucyBhbnlob3csIGlmIGl0IGNh biB0ZWxsIHRoYXQgc3RyaWN0bmVzcyBkb2VzDQogbm90IG1hdHRlci4gIFRo ZSB0eXBlIG9mIHRoZSBvcGVyYW5kcyBhbmQgdGhhdCBvZiB0aGUgcmVzdWx0 IGFyZQ0KIGFsd2F5cyBvZiBAY29kZXtCT09MRUFOX1RZUEV9IG9yIEBjb2Rl e0lOVEVHRVJfVFlQRX0uDQogDQogQGl0ZW0gUE9JTlRFUl9QTFVTX0VYUFIN CiBUaGlzIG5vZGUgcmVwcmVzZW50cyBwb2ludGVyIGFyaXRobWV0aWMuICBU aGUgZmlyc3Qgb3BlcmFuZCBpcyBhbHdheXMNCiBhIHBvaW50ZXIvcmVmZXJl bmNlIHR5cGUuICBUaGUgc2Vjb25kIG9wZXJhbmQgaXMgYWx3YXlzIGFuIHVu c2lnbmVkDQotaW50ZWdlciB0eXBlIGNvbXBhdGlibGUgd2l0aCBzaXpldHlw ZS4gIFRoaXMgaXMgdGhlIG9ubHkgYmluYXJ5DQotYXJpdGhtZXRpYyBvcGVy YW5kIHRoYXQgY2FuIG9wZXJhdGUgb24gcG9pbnRlciB0eXBlcy4NCitpbnRl Z2VyIHR5cGUgY29tcGF0aWJsZSB3aXRoIHNpemV0eXBlLiAgVGhpcyBhbmQg UE9JTlRFUl9ESUZGX0VYUFIgYXJlDQordGhlIG9ubHkgYmluYXJ5IGFyaXRo bWV0aWMgb3BlcmF0b3JzIHRoYXQgY2FuIG9wZXJhdGUgb24gcG9pbnRlciB0 eXBlcy4NCisNCitAaXRlbSBQT0lOVEVSX0RJRkZfRVhQUg0KK1RoaXMgbm9k ZSByZXByZXNlbnRzIHBvaW50ZXIgc3VidHJhY3Rpb24uICBUaGUgdHdvIG9w ZXJhbmRzIGFsd2F5cw0KK2hhdmUgcG9pbnRlci9yZWZlcmVuY2UgdHlwZS4g IEl0IHJldHVybnMgYSBzaWduZWQgaW50ZWdlci4NCiANCiBAaXRlbSBQTFVT X0VYUFINCiBAaXRlbXggTUlOVVNfRVhQUg0KIEBpdGVteCBNVUxUX0VYUFIN CiBUaGVzZSBub2RlcyByZXByZXNlbnQgdmFyaW91cyBiaW5hcnkgYXJpdGht ZXRpYyBvcGVyYXRpb25zLg0KIFJlc3BlY3RpdmVseSwgdGhlc2Ugb3BlcmF0 aW9ucyBhcmUgYWRkaXRpb24sIHN1YnRyYWN0aW9uIChvZiB0aGUgc2Vjb25k DQogb3BlcmFuZCBmcm9tIHRoZSBmaXJzdCkgYW5kIG11bHRpcGxpY2F0aW9u LiAgVGhlaXIgb3BlcmFuZHMgbWF5IGhhdmUNCiBlaXRoZXIgaW50ZWdyYWwg b3IgZmxvYXRpbmcgdHlwZSwgYnV0IHRoZXJlIHdpbGwgbmV2ZXIgYmUgY2Fz ZSBpbiB3aGljaA0KIG9uZSBvcGVyYW5kIGlzIG9mIGZsb2F0aW5nIHR5cGUg YW5kIHRoZSBvdGhlciBpcyBvZiBpbnRlZ3JhbCB0eXBlLg0KIA0KSW5kZXg6 IGdjYy9leHByLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mv ZXhwci5jCShyZXZpc2lvbiAyNTQxODMpDQorKysgZ2NjL2V4cHIuYwkod29y a2luZyBjb3B5KQ0KQEAgLTg1NDIsMjAgKzg1NDIsMjEgQEAgZXhwYW5kX2V4 cHJfcmVhbF8yIChzZXBvcHMgb3BzLCBydHggdGFyZw0KIAkgIGlmIChvcDEg PT0gY29uc3QwX3J0eCkNCiAJICAgIHJldHVybiBvcDA7DQogCSAgZ290byBi aW5vcDI7DQogCX0NCiANCiAgICAgICBleHBhbmRfb3BlcmFuZHMgKHRyZWVv cDAsIHRyZWVvcDEsDQogCQkgICAgICAgc3VidGFyZ2V0LCAmb3AwLCAmb3Ax LCBtb2RpZmllcik7DQogICAgICAgcmV0dXJuIFJFRFVDRV9CSVRfRklFTEQg KHNpbXBsaWZ5X2dlbl9iaW5hcnkgKFBMVVMsIG1vZGUsIG9wMCwgb3AxKSk7 DQogDQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCisgICAgY2FzZSBQT0lOVEVS X0RJRkZfRVhQUjoNCiAgICAgZG9fbWludXM6DQogICAgICAgLyogRm9yIGlu aXRpYWxpemVycywgd2UgYXJlIGFsbG93ZWQgdG8gcmV0dXJuIGEgTUlOVVMg b2YgdHdvDQogCSBzeW1ib2xpYyBjb25zdGFudHMuICBIZXJlIHdlIGhhbmRs ZSBhbGwgY2FzZXMgd2hlbiBib3RoIG9wZXJhbmRzDQogCSBhcmUgY29uc3Rh bnQuICAqLw0KICAgICAgIC8qIEhhbmRsZSBkaWZmZXJlbmNlIG9mIHR3byBz eW1ib2xpYyBjb25zdGFudHMsDQogCSBmb3IgdGhlIHNha2Ugb2YgYW4gaW5p dGlhbGl6ZXIuICAqLw0KICAgICAgIGlmICgobW9kaWZpZXIgPT0gRVhQQU5E X1NVTSB8fCBtb2RpZmllciA9PSBFWFBBTkRfSU5JVElBTElaRVIpDQogCSAg JiYgcmVhbGx5X2NvbnN0YW50X3AgKHRyZWVvcDApDQogCSAgJiYgcmVhbGx5 X2NvbnN0YW50X3AgKHRyZWVvcDEpKQ0KIAl7DQpJbmRleDogZ2NjL2ZvbGQt Y29uc3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9mb2xk LWNvbnN0LmMJKHJldmlzaW9uIDI1NDE4MykNCisrKyBnY2MvZm9sZC1jb25z dC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTEzNCwyMCArMTEzNCwyOSBAQCBj b25zdF9iaW5vcCAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSBhDQogDQog ICBTVFJJUF9OT1BTIChhcmcxKTsNCiAgIFNUUklQX05PUFMgKGFyZzIpOw0K IA0KICAgaWYgKFRSRUVfQ09ERSAoYXJnMSkgPT0gSU5URUdFUl9DU1QgJiYg VFJFRV9DT0RFIChhcmcyKSA9PSBJTlRFR0VSX0NTVCkNCiAgICAgew0KICAg ICAgIGlmIChjb2RlID09IFBPSU5URVJfUExVU19FWFBSKQ0KIAlyZXR1cm4g aW50X2NvbnN0X2Jpbm9wIChQTFVTX0VYUFIsDQogCQkJCWFyZzEsIGZvbGRf Y29udmVydCAoVFJFRV9UWVBFIChhcmcxKSwgYXJnMikpOw0KIA0KKyAgICAg IC8qIEl0IGlzIGJldHRlciBpZiB0aGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBy ZXR1cm4gdHlwZS4gICovDQorICAgICAgaWYgKGNvZGUgPT0gUE9JTlRFUl9E SUZGX0VYUFIpDQorCXsNCisJICBvZmZzZXRfaW50IHJlcyA9IHdpOjpzdWIg KHdpOjp0b19vZmZzZXQgKGFyZzEpLA0KKwkJCQkgICAgd2k6OnRvX29mZnNl dCAoYXJnMikpOw0KKwkgIHJldHVybiBmb3JjZV9maXRfdHlwZSAoc2lnbmVk X3R5cGVfZm9yIChUUkVFX1RZUEUgKGFyZzEpKSwgcmVzLCAxLA0KKwkJCQkg VFJFRV9PVkVSRkxPVyAoYXJnMSkgfCBUUkVFX09WRVJGTE9XIChhcmcyKSk7 DQorCX0NCisNCiAgICAgICByZXR1cm4gaW50X2NvbnN0X2Jpbm9wIChjb2Rl LCBhcmcxLCBhcmcyKTsNCiAgICAgfQ0KIA0KICAgaWYgKFRSRUVfQ09ERSAo YXJnMSkgPT0gUkVBTF9DU1QgJiYgVFJFRV9DT0RFIChhcmcyKSA9PSBSRUFM X0NTVCkNCiAgICAgew0KICAgICAgIG1hY2hpbmVfbW9kZSBtb2RlOw0KICAg ICAgIFJFQUxfVkFMVUVfVFlQRSBkMTsNCiAgICAgICBSRUFMX1ZBTFVFX1RZ UEUgZDI7DQogICAgICAgUkVBTF9WQUxVRV9UWVBFIHZhbHVlOw0KICAgICAg IFJFQUxfVkFMVUVfVFlQRSByZXN1bHQ7DQpAQCAtMTQ3NiwyMCArMTQ4NSwz MSBAQCBjb25zdF9iaW5vcCAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0 DQogICBzd2l0Y2ggKGNvZGUpDQogICAgIHsNCiAgICAgY2FzZSBDT01QTEVY X0VYUFI6DQogICAgICAgaWYgKChUUkVFX0NPREUgKGFyZzEpID09IFJFQUxf Q1NUDQogCSAgICYmIFRSRUVfQ09ERSAoYXJnMikgPT0gUkVBTF9DU1QpDQog CSAgfHwgKFRSRUVfQ09ERSAoYXJnMSkgPT0gSU5URUdFUl9DU1QNCiAJICAg ICAgJiYgVFJFRV9DT0RFIChhcmcyKSA9PSBJTlRFR0VSX0NTVCkpDQogCXJl dHVybiBidWlsZF9jb21wbGV4ICh0eXBlLCBhcmcxLCBhcmcyKTsNCiAgICAg ICByZXR1cm4gTlVMTF9UUkVFOw0KIA0KKyAgICAgIC8qIFVzZSB0aGUgcmV0 dXJuIHR5cGUsIGluIGNhc2UgaXQgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gcHRy ZGlmZl90LiAgKi8NCisgICAgY2FzZSBQT0lOVEVSX0RJRkZfRVhQUjoNCisg ICAgICBpZiAoVFJFRV9DT0RFIChhcmcxKSA9PSBJTlRFR0VSX0NTVCAmJiBU UkVFX0NPREUgKGFyZzIpID09IElOVEVHRVJfQ1NUKQ0KKwl7DQorCSAgb2Zm c2V0X2ludCByZXMgPSB3aTo6c3ViICh3aTo6dG9fb2Zmc2V0IChhcmcxKSwN CisJCQkJICAgIHdpOjp0b19vZmZzZXQgKGFyZzIpKTsNCisJICByZXR1cm4g Zm9yY2VfZml0X3R5cGUgKHR5cGUsIHJlcywgMSwNCisJCQkJIFRSRUVfT1ZF UkZMT1cgKGFyZzEpIHwgVFJFRV9PVkVSRkxPVyAoYXJnMikpOw0KKwl9DQor ICAgICAgcmV0dXJuIE5VTExfVFJFRTsNCisNCiAgICAgY2FzZSBWRUNfUEFD S19UUlVOQ19FWFBSOg0KICAgICBjYXNlIFZFQ19QQUNLX0ZJWF9UUlVOQ19F WFBSOg0KICAgICAgIHsNCiAJdW5zaWduZWQgaW50IG91dF9uZWx0cywgaW5f bmVsdHMsIGk7DQogDQogCWlmIChUUkVFX0NPREUgKGFyZzEpICE9IFZFQ1RP Ul9DU1QNCiAJICAgIHx8IFRSRUVfQ09ERSAoYXJnMikgIT0gVkVDVE9SX0NT VCkNCiAJICByZXR1cm4gTlVMTF9UUkVFOw0KIA0KIAlpbl9uZWx0cyA9IFZF Q1RPUl9DU1RfTkVMVFMgKGFyZzEpOw0KQEAgLTg3OTQsNDAgKzg4MTQsNDcg QEAgZm9sZF92ZWNfcGVybSAodHJlZSB0eXBlLCB0cmVlIGFyZzAsIHRyZQ0K ICAgZWxzZQ0KICAgICByZXR1cm4gYnVpbGRfdmVjdG9yICh0eXBlLCBvdXRf ZWx0cyk7DQogfQ0KIA0KIC8qIFRyeSB0byBmb2xkIGEgcG9pbnRlciBkaWZm ZXJlbmNlIG9mIHR5cGUgVFlQRSB0d28gYWRkcmVzcyBleHByZXNzaW9ucyBv Zg0KICAgIGFycmF5IHJlZmVyZW5jZXMgQVJFRjAgYW5kIEFSRUYxIHVzaW5n IGxvY2F0aW9uIExPQy4gIFJldHVybiBhDQogICAgc2ltcGxpZmllZCBleHBy ZXNzaW9uIGZvciB0aGUgZGlmZmVyZW5jZSBvciBOVUxMX1RSRUUuICAqLw0K IA0KIHN0YXRpYyB0cmVlDQogZm9sZF9hZGRyX29mX2FycmF5X3JlZl9kaWZm ZXJlbmNlIChsb2NhdGlvbl90IGxvYywgdHJlZSB0eXBlLA0KLQkJCQkgICB0 cmVlIGFyZWYwLCB0cmVlIGFyZWYxKQ0KKwkJCQkgICB0cmVlIGFyZWYwLCB0 cmVlIGFyZWYxLA0KKwkJCQkgICBib29sIHVzZV9wb2ludGVyX2RpZmYpDQog ew0KICAgdHJlZSBiYXNlMCA9IFRSRUVfT1BFUkFORCAoYXJlZjAsIDApOw0K ICAgdHJlZSBiYXNlMSA9IFRSRUVfT1BFUkFORCAoYXJlZjEsIDApOw0KICAg dHJlZSBiYXNlX29mZnNldCA9IGJ1aWxkX2ludF9jc3QgKHR5cGUsIDApOw0K IA0KICAgLyogSWYgdGhlIGJhc2VzIGFyZSBhcnJheSByZWZlcmVuY2VzIGFz IHdlbGwsIHJlY3Vyc2UuICBJZiB0aGUgYmFzZXMNCiAgICAgIGFyZSBwb2lu dGVyIGluZGlyZWN0aW9ucyBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIG9mIHRo ZSBwb2ludGVycy4NCiAgICAgIElmIHRoZSBiYXNlcyBhcmUgZXF1YWwsIHdl IGFyZSBzZXQuICAqLw0KICAgaWYgKChUUkVFX0NPREUgKGJhc2UwKSA9PSBB UlJBWV9SRUYNCiAgICAgICAgJiYgVFJFRV9DT0RFIChiYXNlMSkgPT0gQVJS QVlfUkVGDQogICAgICAgICYmIChiYXNlX29mZnNldA0KLQkgICA9IGZvbGRf YWRkcl9vZl9hcnJheV9yZWZfZGlmZmVyZW5jZSAobG9jLCB0eXBlLCBiYXNl MCwgYmFzZTEpKSkNCisJICAgPSBmb2xkX2FkZHJfb2ZfYXJyYXlfcmVmX2Rp ZmZlcmVuY2UgKGxvYywgdHlwZSwgYmFzZTAsIGJhc2UxLA0KKwkJCQkJCXVz ZV9wb2ludGVyX2RpZmYpKSkNCiAgICAgICB8fCAoSU5ESVJFQ1RfUkVGX1Ag KGJhc2UwKQ0KIAkgICYmIElORElSRUNUX1JFRl9QIChiYXNlMSkNCiAJICAm JiAoYmFzZV9vZmZzZXQNCi0JICAgICAgICA9IGZvbGRfYmluYXJ5X2xvYyAo bG9jLCBNSU5VU19FWFBSLCB0eXBlLA0KLQkJCQkgICBmb2xkX2NvbnZlcnQg KHR5cGUsIFRSRUVfT1BFUkFORCAoYmFzZTAsIDApKSwNCi0JCQkJICAgZm9s ZF9jb252ZXJ0ICh0eXBlLA0KLQkJCQkJCSBUUkVFX09QRVJBTkQgKGJhc2Ux LCAwKSkpKSkNCisJICAgICAgICA9IHVzZV9wb2ludGVyX2RpZmYNCisJCSAg PyBmb2xkX2JpbmFyeV9sb2MgKGxvYywgUE9JTlRFUl9ESUZGX0VYUFIsIHR5 cGUsDQorCQkJCSAgICAgVFJFRV9PUEVSQU5EIChiYXNlMCwgMCksDQorCQkJ CSAgICAgVFJFRV9PUEVSQU5EIChiYXNlMSwgMCkpDQorCQkgIDogZm9sZF9i aW5hcnlfbG9jIChsb2MsIE1JTlVTX0VYUFIsIHR5cGUsDQorCQkJCSAgICAg Zm9sZF9jb252ZXJ0ICh0eXBlLA0KKwkJCQkJCSAgIFRSRUVfT1BFUkFORCAo YmFzZTAsIDApKSwNCisJCQkJICAgICBmb2xkX2NvbnZlcnQgKHR5cGUsDQor CQkJCQkJICAgVFJFRV9PUEVSQU5EIChiYXNlMSwgMCkpKSkpDQogICAgICAg fHwgb3BlcmFuZF9lcXVhbF9wIChiYXNlMCwgYmFzZTEsIE9FUF9BRERSRVNT X09GKSkNCiAgICAgew0KICAgICAgIHRyZWUgb3AwID0gZm9sZF9jb252ZXJ0 X2xvYyAobG9jLCB0eXBlLCBUUkVFX09QRVJBTkQgKGFyZWYwLCAxKSk7DQog ICAgICAgdHJlZSBvcDEgPSBmb2xkX2NvbnZlcnRfbG9jIChsb2MsIHR5cGUs IFRSRUVfT1BFUkFORCAoYXJlZjEsIDEpKTsNCiAgICAgICB0cmVlIGVzeiA9 IGZvbGRfY29udmVydF9sb2MgKGxvYywgdHlwZSwgYXJyYXlfcmVmX2VsZW1l bnRfc2l6ZSAoYXJlZjApKTsNCiAgICAgICB0cmVlIGRpZmYgPSBmb2xkX2J1 aWxkMl9sb2MgKGxvYywgTUlOVVNfRVhQUiwgdHlwZSwgb3AwLCBvcDEpOw0K ICAgICAgIHJldHVybiBmb2xkX2J1aWxkMl9sb2MgKGxvYywgUExVU19FWFBS LCB0eXBlLA0KIAkJCSAgICAgIGJhc2Vfb2Zmc2V0LA0KIAkJCSAgICAgIGZv bGRfYnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHR5cGUsDQogCQkJCQkg ICAgICAgZGlmZiwgZXN6KSk7DQpAQCAtOTY4NywyMSArOTcxNCw0MSBAQCBm b2xkX2JpbmFyeV9sb2MgKGxvY2F0aW9uX3QgbG9jLA0KIAkJfQ0KIA0KIAkg ICAgICByZXR1cm4NCiAJCWZvbGRfY29udmVydF9sb2MgKGxvYywgdHlwZSwg YXNzb2NpYXRlX3RyZWVzIChsb2MsIHZhcjAsIGNvbjAsDQogCQkJCQkJCSAg ICAgIGNvZGUsIGF0eXBlKSk7DQogCSAgICB9DQogCX0NCiANCiAgICAgICBy ZXR1cm4gTlVMTF9UUkVFOw0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQorICAgICAgLyogRm9sZCAm YVtpXSAtICZhW2pdIHRvIGktai4gICovDQorICAgICAgaWYgKFRSRUVfQ09E RSAoYXJnMCkgPT0gQUREUl9FWFBSDQorCSAgJiYgVFJFRV9DT0RFIChUUkVF X09QRVJBTkQgKGFyZzAsIDApKSA9PSBBUlJBWV9SRUYNCisJICAmJiBUUkVF X0NPREUgKGFyZzEpID09IEFERFJfRVhQUg0KKwkgICYmIFRSRUVfQ09ERSAo VFJFRV9PUEVSQU5EIChhcmcxLCAwKSkgPT0gQVJSQVlfUkVGKQ0KKyAgICAg ICAgew0KKwkgIHRyZWUgdGVtID0gZm9sZF9hZGRyX29mX2FycmF5X3JlZl9k aWZmZXJlbmNlIChsb2MsIHR5cGUsDQorCQkJCQkJCVRSRUVfT1BFUkFORCAo YXJnMCwgMCksDQorCQkJCQkJCVRSRUVfT1BFUkFORCAoYXJnMSwgMCksDQor CQkJCQkJCWNvZGUNCisJCQkJCQkJPT0gUE9JTlRFUl9ESUZGX0VYUFIpOw0K KwkgIGlmICh0ZW0pDQorCSAgICByZXR1cm4gdGVtOw0KKwl9DQorDQorICAg ICAgLyogRnVydGhlciB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5vdCBmb3IgcG9p bnRlcnMuICAqLw0KKyAgICAgIGlmIChjb2RlID09IFBPSU5URVJfRElGRl9F WFBSKQ0KKwlyZXR1cm4gTlVMTF9UUkVFOw0KKw0KICAgICAgIC8qICgtQSkg LSBCIC0+ICgtQikgLSBBICB3aGVyZSBCIGlzIGVhc2lseSBuZWdhdGVkIGFu ZCB3ZSBjYW4gc3dhcC4gICovDQogICAgICAgaWYgKFRSRUVfQ09ERSAoYXJn MCkgPT0gTkVHQVRFX0VYUFINCiAJICAmJiBuZWdhdGVfZXhwcl9wIChvcDEp KQ0KIAlyZXR1cm4gZm9sZF9idWlsZDJfbG9jIChsb2MsIE1JTlVTX0VYUFIs IHR5cGUsDQogCQkJCW5lZ2F0ZV9leHByIChvcDEpLA0KIAkJCQlmb2xkX2Nv bnZlcnRfbG9jIChsb2MsIHR5cGUsDQogCQkJCQkJICBUUkVFX09QRVJBTkQg KGFyZzAsIDApKSk7DQogDQogICAgICAgLyogRm9sZCBfX2NvbXBsZXhfXyAo IHgsIDAgKSAtIF9fY29tcGxleF9fICggMCwgeSApIHRvDQogCSBfX2NvbXBs ZXhfXyAoIHgsIC15ICkuICBUaGlzIGlzIG5vdCB0aGUgc2FtZSBmb3IgU05h TnMgb3IgaWYNCkBAIC05NzQ1LDMzICs5NzkyLDIwIEBAIGZvbGRfYmluYXJ5 X2xvYyAobG9jYXRpb25fdCBsb2MsDQogCSAgJiYgISBUWVBFX09WRVJGTE9X X1NBTklUSVpFRCAodHlwZSkNCiAJICAmJiAoKEZMT0FUX1RZUEVfUCAodHlw ZSkNCiAgICAgICAgICAgICAgICAvKiBBdm9pZCB0aGlzIHRyYW5zZm9ybWF0 aW9uIGlmIEIgaXMgYSBwb3NpdGl2ZSBSRUFMX0NTVC4gICovDQogCSAgICAg ICAmJiAoVFJFRV9DT0RFIChvcDEpICE9IFJFQUxfQ1NUDQogCQkgICB8fCBS RUFMX1ZBTFVFX05FR0FUSVZFIChUUkVFX1JFQUxfQ1NUIChvcDEpKSkpDQog CSAgICAgIHx8IElOVEVHUkFMX1RZUEVfUCAodHlwZSkpKQ0KIAlyZXR1cm4g Zm9sZF9idWlsZDJfbG9jIChsb2MsIFBMVVNfRVhQUiwgdHlwZSwNCiAJCQkJ Zm9sZF9jb252ZXJ0X2xvYyAobG9jLCB0eXBlLCBhcmcwKSwNCiAJCQkJbmVn YXRlX2V4cHIgKG9wMSkpOw0KIA0KLSAgICAgIC8qIEZvbGQgJmFbaV0gLSAm YVtqXSB0byBpLWouICAqLw0KLSAgICAgIGlmIChUUkVFX0NPREUgKGFyZzAp ID09IEFERFJfRVhQUg0KLQkgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5E IChhcmcwLCAwKSkgPT0gQVJSQVlfUkVGDQotCSAgJiYgVFJFRV9DT0RFIChh cmcxKSA9PSBBRERSX0VYUFINCi0JICAmJiBUUkVFX0NPREUgKFRSRUVfT1BF UkFORCAoYXJnMSwgMCkpID09IEFSUkFZX1JFRikNCi0gICAgICAgIHsNCi0J ICB0cmVlIHRlbSA9IGZvbGRfYWRkcl9vZl9hcnJheV9yZWZfZGlmZmVyZW5j ZSAobG9jLCB0eXBlLA0KLQkJCQkJCQlUUkVFX09QRVJBTkQgKGFyZzAsIDAp LA0KLQkJCQkJCQlUUkVFX09QRVJBTkQgKGFyZzEsIDApKTsNCi0JICBpZiAo dGVtKQ0KLQkgICAgcmV0dXJuIHRlbTsNCi0JfQ0KLQ0KICAgICAgIC8qIEhh bmRsZSAoQTEgKiBDMSkgLSAoQTIgKiBDMikgd2l0aCBBMSwgQTIgb3IgQzEs IEMyIGJlaW5nIHRoZSBzYW1lIG9yDQogCSBvbmUuICBNYWtlIHN1cmUgdGhl IHR5cGUgaXMgbm90IHNhdHVyYXRpbmcgYW5kIGhhcyB0aGUgc2lnbmVkbmVz cyBvZg0KIAkgdGhlIHN0cmlwcGVkIG9wZXJhbmRzLCBhcyBmb2xkX3BsdXNt aW51c19tdWx0X2V4cHIgd2lsbCByZS1hc3NvY2lhdGUuDQogCSA/Pz8gVGhl IGxhdHRlciBjb25kaXRpb24gc2hvdWxkIHVzZSBUWVBFX09WRVJGTE9XXyog ZmxhZ3MgaW5zdGVhZC4gICovDQogICAgICAgaWYgKChUUkVFX0NPREUgKGFy ZzApID09IE1VTFRfRVhQUg0KIAkgICB8fCBUUkVFX0NPREUgKGFyZzEpID09 IE1VTFRfRVhQUikNCiAJICAmJiAhVFlQRV9TQVRVUkFUSU5HICh0eXBlKQ0K IAkgICYmIFRZUEVfVU5TSUdORUQgKHR5cGUpID09IFRZUEVfVU5TSUdORUQg KFRSRUVfVFlQRSAoYXJnMCkpDQogCSAgJiYgVFlQRV9VTlNJR05FRCAodHlw ZSkgPT0gVFlQRV9VTlNJR05FRCAoVFJFRV9UWVBFIChhcmcxKSkNCiAJICAm JiAoIUZMT0FUX1RZUEVfUCAodHlwZSkgfHwgZmxhZ19hc3NvY2lhdGl2ZV9t YXRoKSkNCkluZGV4OiBnY2MvbWF0Y2gucGQNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBnY2MvbWF0Y2gucGQJKHJldmlzaW9uIDI1NDE4MykNCisr KyBnY2MvbWF0Y2gucGQJKHdvcmtpbmcgY29weSkNCkBAIC0xMTcsMjAgKzEx NywyMyBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9ST1VORF9GTiAoUklOVCkN CiANCiAvKiBTaW1wbGlmeSB4IC0geC4NCiAgICBUaGlzIGlzIHVuc2FmZSBm b3IgY2VydGFpbiBmbG9hdHMgZXZlbiBpbiBub24tSUVFRSBmb3JtYXRzLg0K ICAgIEluIElFRUUsIGl0IGlzIHVuc2FmZSBiZWNhdXNlIGl0IGRvZXMgd3Jv bmcgZm9yIE5hTnMuDQogICAgQWxzbyBub3RlIHRoYXQgb3BlcmFuZF9lcXVh bF9wIGlzIGFsd2F5cyBmYWxzZSBpZiBhbiBvcGVyYW5kDQogICAgaXMgdm9s YXRpbGUuICAqLw0KIChzaW1wbGlmeQ0KICAobWludXMgQDAgQDApDQogIChp ZiAoIUZMT0FUX1RZUEVfUCAodHlwZSkgfHwgIUhPTk9SX05BTlMgKHR5cGUp KQ0KICAgeyBidWlsZF96ZXJvX2NzdCAodHlwZSk7IH0pKQ0KKyhzaW1wbGlm eQ0KKyAocG9pbnRlcl9kaWZmIEBAMCBAMCkNCisgeyBidWlsZF96ZXJvX2Nz dCAodHlwZSk7IH0pDQogDQogKHNpbXBsaWZ5DQogIChtdWx0IEAwIGludGVn ZXJfemVyb3BAMSkNCiAgQDEpDQogDQogLyogTWF5YmUgZm9sZCB4ICogMCB0 byAwLiAgVGhlIGV4cHJlc3Npb25zIGFyZW4ndCB0aGUgc2FtZQ0KICAgIHdo ZW4geCBpcyBOYU4sIHNpbmNlIHggKiAwIGlzIGFsc28gTmFOLiAgTm9yIGFy ZSB0aGV5IHRoZQ0KICAgIHNhbWUgaW4gbW9kZXMgd2l0aCBzaWduZWQgemVy b3MsIHNpbmNlIG11bHRpcGx5aW5nIGENCiAgICBuZWdhdGl2ZSB2YWx1ZSBi eSAwIGdpdmVzIC0wLCBub3QgKzAuICAqLw0KIChzaW1wbGlmeQ0KQEAgLTE0 MjAsMjAgKzE0MjMsMjQgQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRf Rk4gKFJJTlQpDQogICAgICB0ZW01ID0gcHRyMSArIHRlbTQ7DQogICAgYW5k IHByb2R1Y2UNCiAgICAgIHRlbTUgPSBwdHIyOyAgKi8NCiAoc2ltcGxpZnkN CiAgIChwb2ludGVyX3BsdXMgQDAgKGNvbnZlcnQ/QDIgKG1pbnVzQDMgKGNv bnZlcnQgQDEpIChjb252ZXJ0IEAwKSkpKQ0KICAgLyogQ29uZGl0aW9uYWxs eSBsb29rIHRocm91Z2ggYSBzaWduLWNoYW5naW5nIGNvbnZlcnNpb24uICAq Lw0KICAgKGlmIChUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChAMikpID09 IFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKEAzKSkNCiAgICAgICAgJiYg KChHSU1QTEUgJiYgdXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAodHlwZSwg VFJFRV9UWVBFIChAMSkpKQ0KIAkgICAgfHwgKEdFTkVSSUMgJiYgdHlwZSA9 PSBUUkVFX1RZUEUgKEAxKSkpKQ0KICAgIEAxKSkNCisoc2ltcGxpZnkNCisg IChwb2ludGVyX3BsdXMgQDAgKGNvbnZlcnQ/QDIgKHBvaW50ZXJfZGlmZkAz IEAxIEBAMCkpKQ0KKyAgKGlmIChUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBF IChAMikpID49IFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKEAzKSkpDQor ICAgKGNvbnZlcnQgQDEpKSkNCiANCiAvKiBQYXR0ZXJuIG1hdGNoDQogICAg ICB0ZW0gPSAoc2l6ZXR5cGUpIHB0cjsNCiAgICAgIHRlbSA9IHRlbSAmIGFs Z247DQogICAgICB0ZW0gPSAtdGVtOw0KICAgICAgLi4uID0gcHRyIHArIHRl bTsNCiAgICBhbmQgcHJvZHVjZSB0aGUgc2ltcGxlciBhbmQgZWFzaWVyIHRv IGFuYWx5emUgd2l0aCByZXNwZWN0IHRvIGFsaWdubWVudA0KICAgICAgLi4u ID0gcHRyICYgfmFsZ247ICAqLw0KIChzaW1wbGlmeQ0KICAgKHBvaW50ZXJf cGx1cyBAMCAobmVnYXRlIChiaXRfYW5kIChjb252ZXJ0IEAwKSBJTlRFR0VS X0NTVEAxKSkpDQpAQCAtMTQ0NiwyMCArMTQ1MywzNCBAQCBERUZJTkVfSU5U X0FORF9GTE9BVF9ST1VORF9GTiAoUklOVCkNCiAgKGlmICh0cmVlX25vcF9j b252ZXJzaW9uX3AgKHR5cGUsIFRSRUVfVFlQRSAoQDApKSkNCiAgICh3aXRo IHsgSE9TVF9XSURFX0lOVCBkaWZmOyB9DQogICAgKGlmIChwdHJfZGlmZmVy ZW5jZV9jb25zdCAoQDAsIEAxLCAmZGlmZikpDQogICAgIHsgYnVpbGRfaW50 X2NzdF90eXBlICh0eXBlLCBkaWZmKTsgfSkpKSkNCiAoc2ltcGxpZnkNCiAg KG1pbnVzIChjb252ZXJ0IEAwKSAoY29udmVydCBBRERSX0VYUFJAMSkpDQog IChpZiAodHJlZV9ub3BfY29udmVyc2lvbl9wICh0eXBlLCBUUkVFX1RZUEUg KEAwKSkpDQogICAod2l0aCB7IEhPU1RfV0lERV9JTlQgZGlmZjsgfQ0KICAg IChpZiAocHRyX2RpZmZlcmVuY2VfY29uc3QgKEAwLCBAMSwgJmRpZmYpKQ0K ICAgICB7IGJ1aWxkX2ludF9jc3RfdHlwZSAodHlwZSwgZGlmZik7IH0pKSkp DQorKHNpbXBsaWZ5DQorIChwb2ludGVyX2RpZmYgKGNvbnZlcnQ/QDIgQURE Ul9FWFBSQDApIChjb252ZXJ0P0AzIEAxKSkNCisgKGlmICh0cmVlX25vcF9j b252ZXJzaW9uX3AgKFRSRUVfVFlQRShAMiksIFRSRUVfVFlQRSAoQDApKQ0K KyAgICAgICYmIHRyZWVfbm9wX2NvbnZlcnNpb25fcCAoVFJFRV9UWVBFKEAz KSwgVFJFRV9UWVBFIChAMSkpKQ0KKyAgKHdpdGggeyBIT1NUX1dJREVfSU5U IGRpZmY7IH0NCisgICAoaWYgKHB0cl9kaWZmZXJlbmNlX2NvbnN0IChAMCwg QDEsICZkaWZmKSkNCisgICAgeyBidWlsZF9pbnRfY3N0X3R5cGUgKHR5cGUs IGRpZmYpOyB9KSkpKQ0KKyhzaW1wbGlmeQ0KKyAocG9pbnRlcl9kaWZmIChj b252ZXJ0P0AyIEAwKSAoY29udmVydD9AMyBBRERSX0VYUFJAMSkpDQorIChp ZiAodHJlZV9ub3BfY29udmVyc2lvbl9wIChUUkVFX1RZUEUoQDIpLCBUUkVF X1RZUEUgKEAwKSkNCisgICAgICAmJiB0cmVlX25vcF9jb252ZXJzaW9uX3Ag KFRSRUVfVFlQRShAMyksIFRSRUVfVFlQRSAoQDEpKSkNCisgICh3aXRoIHsg SE9TVF9XSURFX0lOVCBkaWZmOyB9DQorICAgKGlmIChwdHJfZGlmZmVyZW5j ZV9jb25zdCAoQDAsIEAxLCAmZGlmZikpDQorICAgIHsgYnVpbGRfaW50X2Nz dF90eXBlICh0eXBlLCBkaWZmKTsgfSkpKSkNCiANCiAvKiBJZiBhcmcwIGlz IGRlcml2ZWQgZnJvbSB0aGUgYWRkcmVzcyBvZiBhbiBvYmplY3Qgb3IgZnVu Y3Rpb24sIHdlIG1heQ0KICAgIGJlIGFibGUgdG8gZm9sZCB0aGlzIGV4cHJl c3Npb24gdXNpbmcgdGhlIG9iamVjdCBvciBmdW5jdGlvbidzDQogICAgYWxp Z25tZW50LiAgKi8NCiAoc2ltcGxpZnkNCiAgKGJpdF9hbmQgKGNvbnZlcnQ/ IEAwKSBJTlRFR0VSX0NTVEAxKQ0KICAoaWYgKFBPSU5URVJfVFlQRV9QIChU UkVFX1RZUEUgKEAwKSkNCiAgICAgICAmJiB0cmVlX25vcF9jb252ZXJzaW9u X3AgKHR5cGUsIFRSRUVfVFlQRSAoQDApKSkNCiAgICh3aXRoDQogICAgew0K QEAgLTE2NDMsMjAgKzE2NjQsMjYgQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRf Uk9VTkRfRk4gKFJJTlQpDQogCSB8fCAoSU5URUdSQUxfVFlQRV9QIChUUkVF X1RZUEUgKEAwKSkNCiAJICAgICAmJiBUWVBFX09WRVJGTE9XX1VOREVGSU5F RCAoVFJFRV9UWVBFIChAMCkpKQ0KIAkgLyogRm9yIHBvaW50ZXIgdHlwZXMs IGlmIHRoZSBjb252ZXJzaW9uIG9mIEEgdG8gdGhlDQogCSAgICBmaW5hbCB0 eXBlIHJlcXVpcmVzIGEgc2lnbi0gb3IgemVyby1leHRlbnNpb24sDQogCSAg ICB0aGVuIHdlIGhhdmUgdG8gcHVudCAtIGl0IGlzIG5vdCBkZWZpbmVkIHdo aWNoDQogCSAgICBvbmUgaXMgY29ycmVjdC4gICovDQogCSB8fCAoUE9JTlRF Ul9UWVBFX1AgKFRSRUVfVFlQRSAoQDApKQ0KIAkgICAgICYmIFRSRUVfQ09E RSAoQDEpID09IElOVEVHRVJfQ1NUDQogCSAgICAgJiYgdHJlZV9pbnRfY3N0 X3NpZ25fYml0IChAMSkgPT0gMCkpDQogICAgICAoY29udmVydCBAMSkpKSkN CisgICAoc2ltcGxpZnkNCisgICAgKHBvaW50ZXJfZGlmZiAocG9pbnRlcl9w bHVzIEBAMCBAMSkgQDApDQorICAgIC8qIFRoZSBzZWNvbmQgYXJndW1lbnQg b2YgcG9pbnRlcl9wbHVzIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgc2lnbmVk LCBhbmQNCisgICAgICAgdGh1cyBzaWduLWV4dGVuZGVkIGlmIG5lY2Vzc2Fy eS4gICovDQorICAgICh3aXRoIHsgdHJlZSBzdHlwZSA9IHNpZ25lZF90eXBl X2ZvciAoVFJFRV9UWVBFIChAMSkpOyB9DQorICAgICAoY29udmVydCAoY29u dmVydDpzdHlwZSBAMSkpKSkNCiANCiAgIC8qIChUKVAgLSAoVCkoUCArIEEp IC0+IC0oVCkgQSAqLw0KICAgKGZvciBhZGQgKHBsdXMgcG9pbnRlcl9wbHVz KQ0KICAgIChzaW1wbGlmeQ0KICAgICAobWludXMgKGNvbnZlcnQgQDApDQog ICAgICAoY29udmVydCAoYWRkIEBAMCBAMSkpKQ0KICAgICAoaWYgKGVsZW1l bnRfcHJlY2lzaW9uICh0eXBlKSA8PSBlbGVtZW50X3ByZWNpc2lvbiAoVFJF RV9UWVBFIChAMSkpDQogCSAvKiBGb3IgaW50ZWdlciB0eXBlcywgaWYgQSBo YXMgYSBzbWFsbGVyIHR5cGUNCiAJICAgIHRoYW4gVCB0aGUgcmVzdWx0IGRl cGVuZHMgb24gdGhlIHBvc3NpYmxlDQogCSAgICBvdmVyZmxvdyBpbiBQICsg QS4NCkBAIC0xNjY3LDIwICsxNjk0LDI2IEBAIERFRklORV9JTlRfQU5EX0ZM T0FUX1JPVU5EX0ZOIChSSU5UKQ0KIAkgfHwgKElOVEVHUkFMX1RZUEVfUCAo VFJFRV9UWVBFIChAMCkpDQogCSAgICAgJiYgVFlQRV9PVkVSRkxPV19VTkRF RklORUQgKFRSRUVfVFlQRSAoQDApKSkNCiAJIC8qIEZvciBwb2ludGVyIHR5 cGVzLCBpZiB0aGUgY29udmVyc2lvbiBvZiBBIHRvIHRoZQ0KIAkgICAgZmlu YWwgdHlwZSByZXF1aXJlcyBhIHNpZ24tIG9yIHplcm8tZXh0ZW5zaW9uLA0K IAkgICAgdGhlbiB3ZSBoYXZlIHRvIHB1bnQgLSBpdCBpcyBub3QgZGVmaW5l ZCB3aGljaA0KIAkgICAgb25lIGlzIGNvcnJlY3QuICAqLw0KIAkgfHwgKFBP SU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKEAwKSkNCiAJICAgICAmJiBUUkVF X0NPREUgKEAxKSA9PSBJTlRFR0VSX0NTVA0KIAkgICAgICYmIHRyZWVfaW50 X2NzdF9zaWduX2JpdCAoQDEpID09IDApKQ0KICAgICAgKG5lZ2F0ZSAoY29u dmVydCBAMSkpKSkpDQorICAgKHNpbXBsaWZ5DQorICAgIChwb2ludGVyX2Rp ZmYgQDAgKHBvaW50ZXJfcGx1cyBAQDAgQDEpKQ0KKyAgICAvKiBUaGUgc2Vj b25kIGFyZ3VtZW50IG9mIHBvaW50ZXJfcGx1cyBtdXN0IGJlIGludGVycHJl dGVkIGFzIHNpZ25lZCwgYW5kDQorICAgICAgIHRodXMgc2lnbi1leHRlbmRl ZCBpZiBuZWNlc3NhcnkuICAqLw0KKyAgICAod2l0aCB7IHRyZWUgc3R5cGUg PSBzaWduZWRfdHlwZV9mb3IgKFRSRUVfVFlQRSAoQDEpKTsgfQ0KKyAgICAg KG5lZ2F0ZSAoY29udmVydCAoY29udmVydDpzdHlwZSBAMSkpKSkpDQogDQog ICAvKiAoVCkoUCArIEEpIC0gKFQpKFAgKyBCKSAtPiAoVClBIC0gKFQpQiAq Lw0KICAgKGZvciBhZGQgKHBsdXMgcG9pbnRlcl9wbHVzKQ0KICAgIChzaW1w bGlmeQ0KICAgICAobWludXMgKGNvbnZlcnQgKGFkZCBAQDAgQDEpKQ0KICAg ICAgKGNvbnZlcnQgKGFkZCBAMCBAMikpKQ0KICAgICAoaWYgKGVsZW1lbnRf cHJlY2lzaW9uICh0eXBlKSA8PSBlbGVtZW50X3ByZWNpc2lvbiAoVFJFRV9U WVBFIChAMSkpDQogCSAvKiBGb3IgaW50ZWdlciB0eXBlcywgaWYgQSBoYXMg YSBzbWFsbGVyIHR5cGUNCiAJICAgIHRoYW4gVCB0aGUgcmVzdWx0IGRlcGVu ZHMgb24gdGhlIHBvc3NpYmxlDQogCSAgICBvdmVyZmxvdyBpbiBQICsgQS4N CkBAIC0xNjkzLDIwICsxNzI2LDI2IEBAIERFRklORV9JTlRfQU5EX0ZMT0FU X1JPVU5EX0ZOIChSSU5UKQ0KIAkgLyogRm9yIHBvaW50ZXIgdHlwZXMsIGlm IHRoZSBjb252ZXJzaW9uIG9mIEEgdG8gdGhlDQogCSAgICBmaW5hbCB0eXBl IHJlcXVpcmVzIGEgc2lnbi0gb3IgemVyby1leHRlbnNpb24sDQogCSAgICB0 aGVuIHdlIGhhdmUgdG8gcHVudCAtIGl0IGlzIG5vdCBkZWZpbmVkIHdoaWNo DQogCSAgICBvbmUgaXMgY29ycmVjdC4gICovDQogCSB8fCAoUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAoQDApKQ0KIAkgICAgICYmIFRSRUVfQ09ERSAo QDEpID09IElOVEVHRVJfQ1NUDQogCSAgICAgJiYgdHJlZV9pbnRfY3N0X3Np Z25fYml0IChAMSkgPT0gMA0KIAkgICAgICYmIFRSRUVfQ09ERSAoQDIpID09 IElOVEVHRVJfQ1NUDQogCSAgICAgJiYgdHJlZV9pbnRfY3N0X3NpZ25fYml0 IChAMikgPT0gMCkpDQogICAgICAobWludXMgKGNvbnZlcnQgQDEpIChjb252 ZXJ0IEAyKSkpKSkpKQ0KKyAgIChzaW1wbGlmeQ0KKyAgICAocG9pbnRlcl9k aWZmIChwb2ludGVyX3BsdXMgQEAwIEAxKSAocG9pbnRlcl9wbHVzIEAwIEAy KSkNCisgICAgLyogVGhlIHNlY29uZCBhcmd1bWVudCBvZiBwb2ludGVyX3Bs dXMgbXVzdCBiZSBpbnRlcnByZXRlZCBhcyBzaWduZWQsIGFuZA0KKyAgICAg ICB0aHVzIHNpZ24tZXh0ZW5kZWQgaWYgbmVjZXNzYXJ5LiAgKi8NCisgICAg KHdpdGggeyB0cmVlIHN0eXBlID0gc2lnbmVkX3R5cGVfZm9yIChUUkVFX1RZ UEUgKEAxKSk7IH0NCisgICAgIChtaW51cyAoY29udmVydCAoY29udmVydDpz dHlwZSBAMSkpIChjb252ZXJ0IChjb252ZXJ0OnN0eXBlIEAyKSkpKSkNCiAN CiANCiAvKiBTaW1wbGlmaWNhdGlvbnMgb2YgTUlOX0VYUFIsIE1BWF9FWFBS LCBmbWluKCkgYW5kIGZtYXgoKS4gICovDQogDQogKGZvciBtaW5tYXggKG1p biBtYXggRk1JTiBGTUFYKQ0KICAoc2ltcGxpZnkNCiAgIChtaW5tYXggQDAg QDApDQogICBAMCkpDQogLyogbWluKG1heCh4LHkpLHkpIC0+IHkuICAqLw0K IChzaW1wbGlmeQ0KQEAgLTI2OTAsMjAgKzI3MjksMjUgQEAgREVGSU5FX0lO VF9BTkRfRkxPQVRfUk9VTkRfRk4gKFJJTlQpDQogLyogVHJhbnNmb3JtIGNv bXBhcmlzb25zIG9mIHRoZSBmb3JtIFggLSBZIENNUCAwIHRvIFggQ01QIFku DQogICAgPz8/IFRoZSB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBmb3IgdGhl IG90aGVyIG9wZXJhdG9ycyBpZiBvdmVyZmxvdw0KICAgIGlzIHVuZGVmaW5l ZCBmb3IgdGhlIHR5cGUsIGJ1dCBwZXJmb3JtaW5nIGl0IGhlcmUgYmFkbHkg aW50ZXJhY3RzDQogICAgd2l0aCB0aGUgdHJhbnNmb3JtYXRpb24gaW4gZm9s ZF9jb25kX2V4cHJfd2l0aF9jb21wYXJpc29uIHdoaWNoDQogICAgYXR0ZW1w dHMgdG8gc3ludGhldGl6ZSBBQlNfRVhQUi4gICovDQogKGZvciBjbXAgKGVx IG5lKQ0KICAoc2ltcGxpZnkNCiAgIChjbXAgKG1pbnVzQDIgQDAgQDEpIGlu dGVnZXJfemVyb3ApDQogICAoaWYgKHNpbmdsZV91c2UgKEAyKSkNCiAgICAo Y21wIEAwIEAxKSkpKQ0KKyhmb3IgY21wIChlcSBuZSkNCisgKHNpbXBsaWZ5 DQorICAoY21wIChwb2ludGVyX2RpZmZAMiBAMCBAMSkgaW50ZWdlcl96ZXJv cCkNCisgIChpZiAoc2luZ2xlX3VzZSAoQDIpKQ0KKyAgIChjbXAgQDAgQDEp KSkpDQogDQogLyogVHJhbnNmb3JtIGNvbXBhcmlzb25zIG9mIHRoZSBmb3Jt IFggKiBDMSBDTVAgMCB0byBYIENNUCAwIGluIHRoZQ0KICAgIHNpZ25lZCBh cml0aG1ldGljIGNhc2UuICBUaGF0IGZvcm0gaXMgY3JlYXRlZCBieSB0aGUg Y29tcGlsZXINCiAgICBvZnRlbiBlbm91Z2ggZm9yIGZvbGRpbmcgaXQgdG8g YmUgb2YgdmFsdWUuICBPbmUgZXhhbXBsZSBpcyBpbg0KICAgIGNvbXB1dGlu ZyBsb29wIHRyaXAgY291bnRzIGFmdGVyIE9wZXJhdG9yIFN0cmVuZ3RoIFJl ZHVjdGlvbi4gICovDQogKGZvciBjbXAgKHNpbXBsZV9jb21wYXJpc29uKQ0K ICAgICAgc2NtcCAoc3dhcHBlZF9zaW1wbGVfY29tcGFyaXNvbikNCiAgKHNp bXBsaWZ5DQogICAoY21wIChtdWx0QDMgQDAgSU5URUdFUl9DU1RAMSkgaW50 ZWdlcl96ZXJvcEAyKQ0KICAgLyogSGFuZGxlIHVuZm9sZGVkIG11bHRpcGxp Y2F0aW9uIGJ5IHplcm8uICAqLw0KSW5kZXg6IGdjYy9vcHRhYnMtdHJlZS5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL29wdGFicy10cmVl LmMJKHJldmlzaW9uIDI1NDE4MykNCisrKyBnY2Mvb3B0YWJzLXRyZWUuYwko d29ya2luZyBjb3B5KQ0KQEAgLTIxNiwyMCArMjE2LDIxIEBAIG9wdGFiX2Zv cl90cmVlX2NvZGUgKGVudW0gdHJlZV9jb2RlIGNvZGUNCiANCiAgIHRyYXB2 ID0gSU5URUdSQUxfVFlQRV9QICh0eXBlKSAmJiBUWVBFX09WRVJGTE9XX1RS QVBTICh0eXBlKTsNCiAgIHN3aXRjaCAoY29kZSkNCiAgICAgew0KICAgICBj YXNlIFBPSU5URVJfUExVU19FWFBSOg0KICAgICBjYXNlIFBMVVNfRVhQUjoN CiAgICAgICBpZiAoVFlQRV9TQVRVUkFUSU5HICh0eXBlKSkNCiAJcmV0dXJu IFRZUEVfVU5TSUdORUQgKHR5cGUpID8gdXNhZGRfb3B0YWIgOiBzc2FkZF9v cHRhYjsNCiAgICAgICByZXR1cm4gdHJhcHYgPyBhZGR2X29wdGFiIDogYWRk X29wdGFiOw0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAg ICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgaWYgKFRZUEVfU0FUVVJBVElO RyAodHlwZSkpDQogCXJldHVybiBUWVBFX1VOU0lHTkVEICh0eXBlKSA/IHVz c3ViX29wdGFiIDogc3NzdWJfb3B0YWI7DQogICAgICAgcmV0dXJuIHRyYXB2 ID8gc3Vidl9vcHRhYiA6IHN1Yl9vcHRhYjsNCiANCiAgICAgY2FzZSBNVUxU X0VYUFI6DQogICAgICAgaWYgKFRZUEVfU0FUVVJBVElORyAodHlwZSkpDQog CXJldHVybiBUWVBFX1VOU0lHTkVEICh0eXBlKSA/IHVzbXVsX29wdGFiIDog c3NtdWxfb3B0YWI7DQogICAgICAgcmV0dXJuIHRyYXB2ID8gc211bHZfb3B0 YWIgOiBzbXVsX29wdGFiOw0KIA0KSW5kZXg6IGdjYy90cmVlLWNmZy5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3RyZWUtY2ZnLmMJKHJl dmlzaW9uIDI1NDE4MykNCisrKyBnY2MvdHJlZS1jZmcuYwkod29ya2luZyBj b3B5KQ0KQEAgLTMxMzYsMjAgKzMxMzYsMzEgQEAgdmVyaWZ5X2V4cHIgKHRy ZWUgKnRwLCBpbnQgKndhbGtfc3VidHJlZQ0KIAkgUE9JTlRFUl9QTFVTX0VY UFIuICovDQogICAgICAgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUg KHQpKSkNCiAJew0KIAkgIGVycm9yICgiaW52YWxpZCBvcGVyYW5kIHRvIHBs dXMvbWludXMsIHR5cGUgaXMgYSBwb2ludGVyIik7DQogCSAgcmV0dXJuIHQ7 DQogCX0NCiAgICAgICBDSEVDS19PUCAoMCwgImludmFsaWQgb3BlcmFuZCB0 byBiaW5hcnkgb3BlcmF0b3IiKTsNCiAgICAgICBDSEVDS19PUCAoMSwgImlu dmFsaWQgb3BlcmFuZCB0byBiaW5hcnkgb3BlcmF0b3IiKTsNCiAgICAgICBi cmVhazsNCiANCisgICAgY2FzZSBQT0lOVEVSX0RJRkZfRVhQUjoNCisgICAg ICBpZiAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKFRSRUVfT1BFUkFO RCAodCwgMCkpKQ0KKwkgIHx8ICFQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBF IChUUkVFX09QRVJBTkQgKHQsIDEpKSkpDQorCXsNCisJICBlcnJvciAoImlu dmFsaWQgb3BlcmFuZCB0byBwb2ludGVyIGRpZmYsIG9wZXJhbmQgaXMgbm90 IGEgcG9pbnRlciIpOw0KKwkgIHJldHVybiB0Ow0KKwl9DQorICAgICAgQ0hF Q0tfT1AgKDAsICJpbnZhbGlkIG9wZXJhbmQgdG8gcG9pbnRlciBkaWZmIik7 DQorICAgICAgQ0hFQ0tfT1AgKDEsICJpbnZhbGlkIG9wZXJhbmQgdG8gcG9p bnRlciBkaWZmIik7DQorICAgICAgYnJlYWs7DQorDQogICAgIGNhc2UgUE9J TlRFUl9QTFVTX0VYUFI6DQogICAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJl IHRoZSBmaXJzdCBvcGVyYW5kIGlzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ug dHlwZS4gKi8NCiAgICAgICBpZiAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZ UEUgKFRSRUVfT1BFUkFORCAodCwgMCkpKSkNCiAJew0KIAkgIGVycm9yICgi aW52YWxpZCBvcGVyYW5kIHRvIHBvaW50ZXIgcGx1cywgZmlyc3Qgb3BlcmFu ZCBpcyBub3QgYSBwb2ludGVyIik7DQogCSAgcmV0dXJuIHQ7DQogCX0NCiAg ICAgICAvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHNlY29uZCBvcGVyYW5k IGlzIGEgcHRyb2ZmdHlwZS4gICovDQogICAgICAgaWYgKCFwdHJvZmZ0eXBl X3AgKFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EICh0LCAxKSkpKQ0KIAl7DQpA QCAtMzk3MSwyMCArMzk4MiwzOSBAQCB2ZXJpZnlfZ2ltcGxlX2Fzc2lnbl9i aW5hcnkgKGdhc3NpZ24gKnN0DQogCSAgICBlcnJvciAoInR5cGUgbWlzbWF0 Y2ggaW4gcG9pbnRlciBwbHVzIGV4cHJlc3Npb24iKTsNCiAJICAgIGRlYnVn X2dlbmVyaWNfc3RtdCAobGhzX3R5cGUpOw0KIAkgICAgZGVidWdfZ2VuZXJp Y19zdG10IChyaHMxX3R5cGUpOw0KIAkgICAgZGVidWdfZ2VuZXJpY19zdG10 IChyaHMyX3R5cGUpOw0KIAkgICAgcmV0dXJuIHRydWU7DQogCSAgfQ0KIA0K IAlyZXR1cm4gZmFsc2U7DQogICAgICAgfQ0KIA0KKyAgICBjYXNlIFBPSU5U RVJfRElGRl9FWFBSOg0KKyAgICAgIHsNCisJaWYgKCFQT0lOVEVSX1RZUEVf UCAocmhzMV90eXBlKQ0KKwkgICAgfHwgIVBPSU5URVJfVFlQRV9QIChyaHMy X3R5cGUpDQorCSAgICB8fCAhdHlwZXNfY29tcGF0aWJsZV9wIChyaHMxX3R5 cGUsIHJoczJfdHlwZSkNCisJICAgIHx8IFRSRUVfQ09ERSAobGhzX3R5cGUp ICE9IElOVEVHRVJfVFlQRQ0KKwkgICAgfHwgVFlQRV9VTlNJR05FRCAobGhz X3R5cGUpDQorCSAgICB8fCBUWVBFX1BSRUNJU0lPTiAobGhzX3R5cGUpICE9 IFRZUEVfUFJFQ0lTSU9OIChyaHMxX3R5cGUpKQ0KKwkgIHsNCisJICAgIGVy cm9yICgidHlwZSBtaXNtYXRjaCBpbiBwb2ludGVyIGRpZmYgZXhwcmVzc2lv biIpOw0KKwkgICAgZGVidWdfZ2VuZXJpY19zdG10IChsaHNfdHlwZSk7DQor CSAgICBkZWJ1Z19nZW5lcmljX3N0bXQgKHJoczFfdHlwZSk7DQorCSAgICBk ZWJ1Z19nZW5lcmljX3N0bXQgKHJoczJfdHlwZSk7DQorCSAgICByZXR1cm4g dHJ1ZTsNCisJICB9DQorDQorCXJldHVybiBmYWxzZTsNCisgICAgICB9DQor DQogICAgIGNhc2UgVFJVVEhfQU5ESUZfRVhQUjoNCiAgICAgY2FzZSBUUlVU SF9PUklGX0VYUFI6DQogICAgIGNhc2UgVFJVVEhfQU5EX0VYUFI6DQogICAg IGNhc2UgVFJVVEhfT1JfRVhQUjoNCiAgICAgY2FzZSBUUlVUSF9YT1JfRVhQ UjoNCiANCiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQogDQogICAgIGNh c2UgTFRfRVhQUjoNCiAgICAgY2FzZSBMRV9FWFBSOg0KSW5kZXg6IGdjYy90 cmVlLWlubGluZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2Nj L3RyZWUtaW5saW5lLmMJKHJldmlzaW9uIDI1NDE4MykNCisrKyBnY2MvdHJl ZS1pbmxpbmUuYwkod29ya2luZyBjb3B5KQ0KQEAgLTM4OTQsMjAgKzM4OTQs MjEgQEAgZXN0aW1hdGVfb3BlcmF0b3JfY29zdCAoZW51bSB0cmVlX2NvZGUg Yw0KICAgICAgIHJldHVybiAwOw0KIA0KICAgICAvKiBBc3NpZ24gY29zdCBv ZiAxIHRvIHVzdWFsIG9wZXJhdGlvbnMuDQogICAgICAgID8/PyBXZSBtYXkg Y29uc2lkZXIgbWFwcGluZyBSVEwgY29zdHMgdG8gdGhpcy4gICovDQogICAg IGNhc2UgQ09ORF9FWFBSOg0KICAgICBjYXNlIFZFQ19DT05EX0VYUFI6DQog ICAgIGNhc2UgVkVDX1BFUk1fRVhQUjoNCiANCiAgICAgY2FzZSBQTFVTX0VY UFI6DQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQorICAgIGNhc2Ug UE9JTlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCiAg ICAgY2FzZSBNVUxUX0VYUFI6DQogICAgIGNhc2UgTVVMVF9ISUdIUEFSVF9F WFBSOg0KICAgICBjYXNlIEZNQV9FWFBSOg0KIA0KICAgICBjYXNlIEFERFJf U1BBQ0VfQ09OVkVSVF9FWFBSOg0KICAgICBjYXNlIEZJWEVEX0NPTlZFUlRf RVhQUjoNCiAgICAgY2FzZSBGSVhfVFJVTkNfRVhQUjoNCiANCiAgICAgY2Fz ZSBORUdBVEVfRVhQUjoNCkluZGV4OiBnY2MvdHJlZS1wcmV0dHktcHJpbnQu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90cmVlLXByZXR0 eS1wcmludC5jCShyZXZpc2lvbiAyNTQxODMpDQorKysgZ2NjL3RyZWUtcHJl dHR5LXByaW50LmMJKHdvcmtpbmcgY29weSkNCkBAIC0yMzAxLDIwICsyMzAx LDIxIEBAIGR1bXBfZ2VuZXJpY19ub2RlIChwcmV0dHlfcHJpbnRlciAqcHAs IHQNCiAgICAgICBwcF9ncmVhdGVyIChwcCk7DQogICAgICAgYnJlYWs7DQog DQogICAgICAgLyogQmluYXJ5IGFyaXRobWV0aWMgYW5kIGxvZ2ljIGV4cHJl c3Npb25zLiAgKi8NCiAgICAgY2FzZSBXSURFTl9TVU1fRVhQUjoNCiAgICAg Y2FzZSBXSURFTl9NVUxUX0VYUFI6DQogICAgIGNhc2UgTVVMVF9FWFBSOg0K ICAgICBjYXNlIE1VTFRfSElHSFBBUlRfRVhQUjoNCiAgICAgY2FzZSBQTFVT X0VYUFI6DQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQorICAgIGNh c2UgUE9JTlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoN CiAgICAgY2FzZSBUUlVOQ19ESVZfRVhQUjoNCiAgICAgY2FzZSBDRUlMX0RJ Vl9FWFBSOg0KICAgICBjYXNlIEZMT09SX0RJVl9FWFBSOg0KICAgICBjYXNl IFJPVU5EX0RJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX01PRF9FWFBSOg0K ICAgICBjYXNlIENFSUxfTU9EX0VYUFI6DQogICAgIGNhc2UgRkxPT1JfTU9E X0VYUFI6DQogICAgIGNhc2UgUk9VTkRfTU9EX0VYUFI6DQogICAgIGNhc2Ug UkRJVl9FWFBSOg0KQEAgLTM1MzUsMjAgKzM1MzYsMjEgQEAgb3BfY29kZV9w cmlvIChlbnVtIHRyZWVfY29kZSBjb2RlKQ0KICAgICBjYXNlIExST1RBVEVf RVhQUjoNCiAgICAgY2FzZSBSUk9UQVRFX0VYUFI6DQogICAgIGNhc2UgVkVD X1dJREVOX0xTSElGVF9ISV9FWFBSOg0KICAgICBjYXNlIFZFQ19XSURFTl9M U0hJRlRfTE9fRVhQUjoNCiAgICAgY2FzZSBXSURFTl9MU0hJRlRfRVhQUjoN CiAgICAgICByZXR1cm4gMTE7DQogDQogICAgIGNhc2UgV0lERU5fU1VNX0VY UFI6DQogICAgIGNhc2UgUExVU19FWFBSOg0KICAgICBjYXNlIFBPSU5URVJf UExVU19FWFBSOg0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAg ICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgcmV0dXJuIDEyOw0KIA0KICAg ICBjYXNlIFZFQ19XSURFTl9NVUxUX0hJX0VYUFI6DQogICAgIGNhc2UgVkVD X1dJREVOX01VTFRfTE9fRVhQUjoNCiAgICAgY2FzZSBXSURFTl9NVUxUX0VY UFI6DQogICAgIGNhc2UgRE9UX1BST0RfRVhQUjoNCiAgICAgY2FzZSBXSURF Tl9NVUxUX1BMVVNfRVhQUjoNCiAgICAgY2FzZSBXSURFTl9NVUxUX01JTlVT X0VYUFI6DQogICAgIGNhc2UgTVVMVF9FWFBSOg0KQEAgLTM3MjEsMjAgKzM3 MjMsMjEgQEAgb3Bfc3ltYm9sX2NvZGUgKGVudW0gdHJlZV9jb2RlIGNvZGUp DQogICAgICAgcmV0dXJuICJ3KyI7DQogDQogICAgIGNhc2UgV0lERU5fTVVM VF9FWFBSOg0KICAgICAgIHJldHVybiAidyoiOw0KIA0KICAgICBjYXNlIE1V TFRfSElHSFBBUlRfRVhQUjoNCiAgICAgICByZXR1cm4gImgqIjsNCiANCiAg ICAgY2FzZSBORUdBVEVfRVhQUjoNCiAgICAgY2FzZSBNSU5VU19FWFBSOg0K KyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAgICAgIHJldHVybiAi LSI7DQogDQogICAgIGNhc2UgQklUX05PVF9FWFBSOg0KICAgICAgIHJldHVy biAifiI7DQogDQogICAgIGNhc2UgVFJVVEhfTk9UX0VYUFI6DQogICAgICAg cmV0dXJuICIhIjsNCiANCiAgICAgY2FzZSBNVUxUX0VYUFI6DQogICAgIGNh c2UgSU5ESVJFQ1RfUkVGOg0KSW5kZXg6IGdjYy90cmVlLXZlY3Qtc3RtdHMu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90cmVlLXZlY3Qt c3RtdHMuYwkocmV2aXNpb24gMjU0MTgzKQ0KKysrIGdjYy90cmVlLXZlY3Qt c3RtdHMuYwkod29ya2luZyBjb3B5KQ0KQEAgLTUyNTgsMjQgKzUyNTgsMjYg QEAgdmVjdG9yaXphYmxlX29wZXJhdGlvbiAoZ2ltcGxlICpzdG10LCBnaQ0K IA0KICAgLyogSXMgU1RNVCBhIHZlY3Rvcml6YWJsZSBiaW5hcnkvdW5hcnkg b3BlcmF0aW9uPyAgICovDQogICBpZiAoIWlzX2dpbXBsZV9hc3NpZ24gKHN0 bXQpKQ0KICAgICByZXR1cm4gZmFsc2U7DQogDQogICBpZiAoVFJFRV9DT0RF IChnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkpICE9IFNTQV9OQU1FKQ0KICAg ICByZXR1cm4gZmFsc2U7DQogDQogICBjb2RlID0gZ2ltcGxlX2Fzc2lnbl9y aHNfY29kZSAoc3RtdCk7DQogDQotICAvKiBGb3IgcG9pbnRlciBhZGRpdGlv biwgd2Ugc2hvdWxkIHVzZSB0aGUgbm9ybWFsIHBsdXMgZm9yDQotICAgICB0 aGUgdmVjdG9yIGFkZGl0aW9uLiAgKi8NCisgIC8qIEZvciBwb2ludGVyIGFk ZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgd2Ugc2hvdWxkIHVzZSB0aGUgbm9y bWFsDQorICAgICBwbHVzIGFuZCBtaW51cyBmb3IgdGhlIHZlY3RvciBvcGVy YXRpb24uICAqLw0KICAgaWYgKGNvZGUgPT0gUE9JTlRFUl9QTFVTX0VYUFIp DQogICAgIGNvZGUgPSBQTFVTX0VYUFI7DQorICBpZiAoY29kZSA9PSBQT0lO VEVSX0RJRkZfRVhQUikNCisgICAgY29kZSA9IE1JTlVTX0VYUFI7DQogDQog ICAvKiBTdXBwb3J0IG9ubHkgdW5hcnkgb3IgYmluYXJ5IG9wZXJhdGlvbnMu ICAqLw0KICAgb3BfdHlwZSA9IFRSRUVfQ09ERV9MRU5HVEggKGNvZGUpOw0K ICAgaWYgKG9wX3R5cGUgIT0gdW5hcnlfb3AgJiYgb3BfdHlwZSAhPSBiaW5h cnlfb3AgJiYgb3BfdHlwZSAhPSB0ZXJuYXJ5X29wKQ0KICAgICB7DQogICAg ICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KICAgICAgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlv biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm51bS4gYXJncyA9ICVk IChub3QgdW5hcnkvYmluYXJ5L3Rlcm5hcnkgb3ApLlxuIiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgb3BfdHlwZSk7DQogICAgICAgcmV0dXJuIGZh bHNlOw0KSW5kZXg6IGdjYy90cmVlLXZycC5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZ2NjL3RyZWUtdnJwLmMJKHJldmlzaW9uIDI1NDE4MykN CisrKyBnY2MvdHJlZS12cnAuYwkod29ya2luZyBjb3B5KQ0KQEAgLTMxMjQs MjkgKzMxMjQsMjkgQEAgZXh0cmFjdF9yYW5nZV9mcm9tX2JpbmFyeV9leHBy ICh2YWx1ZV9yYQ0KIAlzZXRfdmFsdWVfcmFuZ2UgKCZuX3ZyMCwgVlJfUkFO R0UsIG9wMCwgb3AwLCBOVUxMKTsNCiANCiAgICAgICBleHRyYWN0X3Jhbmdl X2Zyb21fYmluYXJ5X2V4cHJfMSAodnIsIGNvZGUsIGV4cHJfdHlwZSwgJm5f dnIwLCAmdnIxKTsNCiAgICAgfQ0KIA0KICAgLyogSWYgd2UgZGlkbid0IGRl cml2ZSBhIHJhbmdlIGZvciBNSU5VU19FWFBSLCBhbmQNCiAgICAgIG9wMSdz IHJhbmdlIGlzIH5bb3AwLG9wMF0gb3IgdmljZS12ZXJzYSwgdGhlbiB3ZQ0K ICAgICAgY2FuIGRlcml2ZSBhIG5vbi1udWxsIHJhbmdlLiAgVGhpcyBoYXBw ZW5zIG9mdGVuIGZvcg0KICAgICAgcG9pbnRlciBzdWJ0cmFjdGlvbi4gICov DQogICBpZiAodnItPnR5cGUgPT0gVlJfVkFSWUlORw0KLSAgICAgICYmIGNv ZGUgPT0gTUlOVVNfRVhQUg0KKyAgICAgICYmIChjb2RlID09IE1JTlVTX0VY UFIgfHwgY29kZSA9PSBQT0lOVEVSX0RJRkZfRVhQUikNCiAgICAgICAmJiBU UkVFX0NPREUgKG9wMCkgPT0gU1NBX05BTUUNCiAgICAgICAmJiAoKHZyMC50 eXBlID09IFZSX0FOVElfUkFOR0UNCiAJICAgJiYgdnIwLm1pbiA9PSBvcDEN CiAJICAgJiYgdnIwLm1pbiA9PSB2cjAubWF4KQ0KIAkgIHx8ICh2cjEudHlw ZSA9PSBWUl9BTlRJX1JBTkdFDQogCSAgICAgICYmIHZyMS5taW4gPT0gb3Aw DQogCSAgICAgICYmIHZyMS5taW4gPT0gdnIxLm1heCkpKQ0KLSAgICAgIHNl dF92YWx1ZV9yYW5nZV90b19ub25udWxsICh2ciwgVFJFRV9UWVBFIChvcDAp KTsNCisgICAgICBzZXRfdmFsdWVfcmFuZ2VfdG9fbm9ubnVsbCAodnIsIGV4 cHJfdHlwZSk7DQogfQ0KIA0KIC8qIEV4dHJhY3QgcmFuZ2UgaW5mb3JtYXRp b24gZnJvbSBhIHVuYXJ5IG9wZXJhdGlvbiBDT0RFIGJhc2VkIG9uDQogICAg dGhlIHJhbmdlIG9mIGl0cyBvcGVyYW5kICpWUjAgd2l0aCB0eXBlIE9QMF9U WVBFIHdpdGggcmVzdWx0aW5nIHR5cGUgVFlQRS4NCiAgICBUaGUgcmVzdWx0 aW5nIHJhbmdlIGlzIHN0b3JlZCBpbiAqVlIuICAqLw0KIA0KIHZvaWQNCiBl eHRyYWN0X3JhbmdlX2Zyb21fdW5hcnlfZXhwciAodmFsdWVfcmFuZ2UgKnZy LA0KIAkJCSAgICAgICBlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUs DQogCQkJICAgICAgIHZhbHVlX3JhbmdlICp2cjBfLCB0cmVlIG9wMF90eXBl KQ0KSW5kZXg6IGdjYy90cmVlLmRlZg0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy90cmVlLmRlZgkocmV2aXNpb24gMjU0MTgzKQ0KKysrIGdj Yy90cmVlLmRlZgkod29ya2luZyBjb3B5KQ0KQEAgLTY2OSwyMCArNjY5LDI3 IEBAIERFRlRSRUVDT0RFIChQTEFDRUhPTERFUl9FWFBSLCAicGxhY2Vob2wN CiANCiAvKiBTaW1wbGUgYXJpdGhtZXRpYy4gICovDQogREVGVFJFRUNPREUg KFBMVVNfRVhQUiwgInBsdXNfZXhwciIsIHRjY19iaW5hcnksIDIpDQogREVG VFJFRUNPREUgKE1JTlVTX0VYUFIsICJtaW51c19leHByIiwgdGNjX2JpbmFy eSwgMikNCiBERUZUUkVFQ09ERSAoTVVMVF9FWFBSLCAibXVsdF9leHByIiwg dGNjX2JpbmFyeSwgMikNCiANCiAvKiBQb2ludGVyIGFkZGl0aW9uLiAgVGhl IGZpcnN0IG9wZXJhbmQgaXMgYWx3YXlzIGEgcG9pbnRlciBhbmQgdGhlDQog ICAgc2Vjb25kIG9wZXJhbmQgaXMgYW4gaW50ZWdlciBvZiB0eXBlIHNpemV0 eXBlLiAgKi8NCiBERUZUUkVFQ09ERSAoUE9JTlRFUl9QTFVTX0VYUFIsICJw b2ludGVyX3BsdXNfZXhwciIsIHRjY19iaW5hcnksIDIpDQogDQorLyogUG9p bnRlciBzdWJ0cmFjdGlvbi4gIFRoZSB0d28gYXJndW1lbnRzIGFyZSBwb2lu dGVycywgYW5kIHRoZSByZXN1bHQNCisgICBpcyBhIHNpZ25lZCBpbnRlZ2Vy IG9mIHRoZSBzYW1lIHByZWNpc2lvbi4gIFBvaW50ZXJzIGFyZSBpbnRlcnBy ZXRlZA0KKyAgIGFzIHVuc2lnbmVkLCB0aGUgZGlmZmVyZW5jZSBpcyBjb21w dXRlZCBhcyBpZiBpbiBpbmZpbml0ZSBzaWduZWQNCisgICBwcmVjaXNpb24u ICBCZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIGRpZmZlcmVuY2UgZG9l cyBub3QgZml0IGluDQorICAgdGhlIHJlc3VsdCB0eXBlLiAgKi8NCitERUZU UkVFQ09ERSAoUE9JTlRFUl9ESUZGX0VYUFIsICJwb2ludGVyX2RpZmZfZXhw ciIsIHRjY19iaW5hcnksIDIpDQorDQogLyogSGlnaHBhcnQgbXVsdGlwbGlj YXRpb24uICBGb3IgYW4gaW50ZWdyYWwgdHlwZSB3aXRoIHByZWNpc2lvbiBC LA0KICAgIHJldHVybnMgYml0cyBbMkItMSwgQl0gb2YgdGhlIGZ1bGwgMipC IHByb2R1Y3QuICAqLw0KIERFRlRSRUVDT0RFIChNVUxUX0hJR0hQQVJUX0VY UFIsICJtdWx0X2hpZ2hwYXJ0X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQ0KIA0K IC8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3VsdCB0aGF0IHJvdW5kcyB0 aGUgcXVvdGllbnQgdG93YXJkIHplcm8uICAqLw0KIERFRlRSRUVDT0RFIChU UlVOQ19ESVZfRVhQUiwgInRydW5jX2Rpdl9leHByIiwgdGNjX2JpbmFyeSwg MikNCiANCiAvKiBEaXZpc2lvbiBmb3IgaW50ZWdlciByZXN1bHQgdGhhdCBy b3VuZHMgaXQgdG93YXJkIHBsdXMgaW5maW5pdHkuICAqLw0KIERFRlRSRUVD T0RFIChDRUlMX0RJVl9FWFBSLCAiY2VpbF9kaXZfZXhwciIsIHRjY19iaW5h cnksIDIpDQogDQpJbmRleDogZ2NjL3ZhcmFzbS5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL3ZhcmFzbS5jCShyZXZpc2lvbiAyNTQxODMp DQorKysgZ2NjL3ZhcmFzbS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNDYwMSwy MCArNDYwMSwyMSBAQCBpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wXzEg KHRyZWUgdmFsDQogICAgICAgZWxzZQ0KICAgICAgIC8qIFN1cHBvcnQgbmFy cm93aW5nIHBvaW50ZXIgZGlmZmVyZW5jZXMuICAqLw0KIAlyZXQgPSBuYXJy b3dpbmdfaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCAodmFsdWUsIGVu ZHR5cGUsIE5VTEwpOw0KICAgICAgIGlmIChjYWNoZSkNCiAJew0KIAkgIGNh Y2hlWzBdID0gdmFsdWU7DQogCSAgY2FjaGVbMV0gPSByZXQ7DQogCX0NCiAg ICAgICByZXR1cm4gcmV0Ow0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgaWYgKFRSRUVf Q09ERSAoZW5kdHlwZSkgPT0gUkVBTF9UWVBFKQ0KIAlyZXR1cm4gTlVMTF9U UkVFOw0KICAgICAgIGlmIChjYWNoZSAmJiBjYWNoZVswXSA9PSB2YWx1ZSkN CiAJcmV0dXJuIGNhY2hlWzFdOw0KICAgICAgIGlmICghIElOVEVHUkFMX1RZ UEVfUCAoZW5kdHlwZSkNCiAJICB8fCBUWVBFX1BSRUNJU0lPTiAoZW5kdHlw ZSkgPj0gVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAodmFsdWUpKSkNCiAJ ew0KIAkgIHRyZWUgbmNhY2hlWzRdID0geyBOVUxMX1RSRUUsIE5VTExfVFJF RSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUgfTsNCiAJICB0cmVlIHZhbGlkMA0K --8323329-927559934-1509195834=:20582--