From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92564 invoked by alias); 19 Nov 2017 23:54:33 -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 91353 invoked by uid 89); 19 Nov 2017 23:54:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-13.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,KB_WAM_FROM_NAME_SINGLEWORD,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=254896 X-HELO: mail2-relais-roc.national.inria.fr Received: from mail2-relais-roc.national.inria.fr (HELO mail2-relais-roc.national.inria.fr) (192.134.164.83) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 19 Nov 2017 23:54:26 +0000 Received: from ip-4.net-89-2-164.rev.numericable.fr (HELO stedding) ([89.2.164.4]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 20 Nov 2017 00:54:22 +0100 Date: Mon, 20 Nov 2017 00:12:00 -0000 From: Marc Glisse To: Jason Merrill cc: Richard Biener , "Joseph S. Myers" , GCC Patches Subject: Re: [RFTesting] New POINTER_DIFF_EXPR In-Reply-To: Message-ID: References: User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1685187974-1511135662=:12314" X-SW-Source: 2017-11/txt/msg01698.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-1685187974-1511135662=:12314 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 1672 Hello, new version, regtested on powerpc64le-unknown-linux-gnu. The front-end parts are up for review. 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 (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, 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, -(A-B), X-Z Content-Description: Content-Disposition: inline; filename=diff.patch Content-length: 62851 SW5kZXg6IGdjYy9jL2MtZm9sZC5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL2MvYy1mb2xkLmMJKHJldmlzaW9uIDI1NDg5NikNCisrKyBn Y2MvYy9jLWZvbGQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTIzOCwyMCArMjM4 LDIxIEBAIGNfZnVsbHlfZm9sZF9pbnRlcm5hbCAodHJlZSBleHByLCBib29s IGkNCiAgICAgY2FzZSBDT01QT1VORF9FWFBSOg0KICAgICBjYXNlIE1PRElG WV9FWFBSOg0KICAgICBjYXNlIFBSRURFQ1JFTUVOVF9FWFBSOg0KICAgICBj YXNlIFBSRUlOQ1JFTUVOVF9FWFBSOg0KICAgICBjYXNlIFBPU1RERUNSRU1F TlRfRVhQUjoNCiAgICAgY2FzZSBQT1NUSU5DUkVNRU5UX0VYUFI6DQogICAg IGNhc2UgUExVU19FWFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAg IGNhc2UgTVVMVF9FWFBSOg0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBS Og0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAgICBjYXNlIFRS VU5DX0RJVl9FWFBSOg0KICAgICBjYXNlIENFSUxfRElWX0VYUFI6DQogICAg IGNhc2UgRkxPT1JfRElWX0VYUFI6DQogICAgIGNhc2UgVFJVTkNfTU9EX0VY UFI6DQogICAgIGNhc2UgUkRJVl9FWFBSOg0KICAgICBjYXNlIEVYQUNUX0RJ Vl9FWFBSOg0KICAgICBjYXNlIExTSElGVF9FWFBSOg0KICAgICBjYXNlIFJT SElGVF9FWFBSOg0KICAgICBjYXNlIEJJVF9JT1JfRVhQUjoNCiAgICAgY2Fz ZSBCSVRfWE9SX0VYUFI6DQpJbmRleDogZ2NjL2MvYy10eXBlY2suYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jL2MtdHlwZWNrLmMJKHJl dmlzaW9uIDI1NDg5NikNCisrKyBnY2MvYy9jLXR5cGVjay5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMzc3MSwyMSArMzc3MSwyMSBAQCBwYXJzZXJfYnVpbGRf YmluYXJ5X29wIChsb2NhdGlvbl90IGxvY2F0DQogICAgICAgJiYgVFJFRV9D T0RFICh0eXBlMikgPT0gRU5VTUVSQUxfVFlQRQ0KICAgICAgICYmIFRZUEVf TUFJTl9WQVJJQU5UICh0eXBlMSkgIT0gVFlQRV9NQUlOX1ZBUklBTlQgKHR5 cGUyKSkNCiAgICAgd2FybmluZ19hdCAobG9jYXRpb24sIE9QVF9XZW51bV9j b21wYXJlLA0KIAkJImNvbXBhcmlzb24gYmV0d2VlbiAlcVQgYW5kICVxVCIs DQogCQl0eXBlMSwgdHlwZTIpOw0KIA0KICAgcmV0dXJuIHJlc3VsdDsNCiB9 DQogDA0KIC8qIFJldHVybiBhIHRyZWUgZm9yIHRoZSBkaWZmZXJlbmNlIG9m IHBvaW50ZXJzIE9QMCBhbmQgT1AxLg0KLSAgIFRoZSByZXN1bHRpbmcgdHJl ZSBoYXMgdHlwZSBpbnQuICAqLw0KKyAgIFRoZSByZXN1bHRpbmcgdHJlZSBo YXMgdHlwZSBwdHJkaWZmX3QuICAqLw0KIA0KIHN0YXRpYyB0cmVlDQogcG9p bnRlcl9kaWZmIChsb2NhdGlvbl90IGxvYywgdHJlZSBvcDAsIHRyZWUgb3Ax KQ0KIHsNCiAgIHRyZWUgcmVzdHlwZSA9IHB0cmRpZmZfdHlwZV9ub2RlOw0K ICAgdHJlZSByZXN1bHQsIGludHR5cGU7DQogDQogICBhZGRyX3NwYWNlX3Qg YXMwID0gVFlQRV9BRERSX1NQQUNFIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAo b3AwKSkpOw0KICAgYWRkcl9zcGFjZV90IGFzMSA9IFRZUEVfQUREUl9TUEFD RSAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKG9wMSkpKTsNCiAgIHRyZWUgdGFy Z2V0X3R5cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQRSAob3AwKSk7DQpAQCAt MzgwMyw0MyArMzgwMyw1MCBAQCBwb2ludGVyX2RpZmYgKGxvY2F0aW9uX3Qg 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 b24gMjU0ODk2KQ0KKysrIGdjYy9jLWZhbWlseS9jLXByZXR0eS1wcmludC5j 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 LS0tIGdjYy9jZmdleHBhbmQuYwkocmV2aXNpb24gMjU0ODk2KQ0KKysrIGdj Yy9jZmdleHBhbmQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTQ2MTYsMjAgKzQ2 MTYsMjEgQEAgZXhwYW5kX2RlYnVnX2V4cHIgKHRyZWUgZXhwKQ0KIAkgICAg LyogV2UgYWx3YXlzIHNpZ24tZXh0ZW5kLCByZWdhcmRsZXNzIG9mIHRoZSBz aWduZWRuZXNzIG9mDQogCSAgICAgICB0aGUgb3BlcmFuZCwgYmVjYXVzZSB0 aGUgb3BlcmFuZCBpcyBhbHdheXMgdW5zaWduZWQNCiAJICAgICAgIGhlcmUg ZXZlbiBpZiB0aGUgb3JpZ2luYWwgQyBleHByZXNzaW9uIGlzIHNpZ25lZC4g ICovDQogCSAgICBvcDEgPSBzaW1wbGlmeV9nZW5fdW5hcnkgKFNJR05fRVhU RU5ELCBvcDBfbW9kZSwgb3AxLCBvcDFfbW9kZSk7DQogCX0NCiAgICAgICAv KiBGYWxsIHRocm91Z2guICAqLw0KICAgICBjYXNlIFBMVVNfRVhQUjoNCiAg ICAgICByZXR1cm4gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoUExVUywgbW9kZSwg b3AwLCBvcDEpOw0KIA0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQorICAgIGNh c2UgUE9JTlRFUl9ESUZGX0VYUFI6DQogICAgICAgcmV0dXJuIHNpbXBsaWZ5 X2dlbl9iaW5hcnkgKE1JTlVTLCBtb2RlLCBvcDAsIG9wMSk7DQogDQogICAg IGNhc2UgTVVMVF9FWFBSOg0KICAgICAgIHJldHVybiBzaW1wbGlmeV9nZW5f YmluYXJ5IChNVUxULCBtb2RlLCBvcDAsIG9wMSk7DQogDQogICAgIGNhc2Ug UkRJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX0RJVl9FWFBSOg0KICAgICBj YXNlIEVYQUNUX0RJVl9FWFBSOg0KICAgICAgIGlmICh1bnNpZ25lZHApDQog CXJldHVybiBzaW1wbGlmeV9nZW5fYmluYXJ5IChVRElWLCBtb2RlLCBvcDAs IG9wMSk7DQpJbmRleDogZ2NjL2NwL2NvbnN0ZXhwci5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjL2NwL2NvbnN0ZXhwci5jCShyZXZpc2lv biAyNTQ4OTYpDQorKysgZ2NjL2NwL2NvbnN0ZXhwci5jCSh3b3JraW5nIGNv cHkpDQpAQCAtNDI5MCwyMCArNDI5MCwyMSBAQCBjeHhfZXZhbF9jb25zdGFu dF9leHByZXNzaW9uIChjb25zdCBjb25zDQogCSAgICAgIHJldHVybiB0Ow0K IAkgICAgb3AxID0gVFJFRV9PUEVSQU5EICh0LCAxKTsNCiAJICAgIHIgPSBj eHhfZXZhbF9jb25zdGFudF9leHByZXNzaW9uIChjdHgsIG9wMSwNCiAJCQkJ CSAgICAgIGx2YWwsIG5vbl9jb25zdGFudF9wLCBvdmVyZmxvd19wLA0KIAkJ CQkJICAgICAganVtcF90YXJnZXQpOw0KIAkgIH0NCiAgICAgICB9DQogICAg ICAgYnJlYWs7DQogDQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQor ICAgIGNhc2UgUE9JTlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgUExVU19F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgIGNhc2UgTVVMVF9F WFBSOg0KICAgICBjYXNlIFRSVU5DX0RJVl9FWFBSOg0KICAgICBjYXNlIENF SUxfRElWX0VYUFI6DQogICAgIGNhc2UgRkxPT1JfRElWX0VYUFI6DQogICAg IGNhc2UgUk9VTkRfRElWX0VYUFI6DQogICAgIGNhc2UgVFJVTkNfTU9EX0VY UFI6DQogICAgIGNhc2UgQ0VJTF9NT0RfRVhQUjoNCiAgICAgY2FzZSBST1VO RF9NT0RfRVhQUjoNCkBAIC01NTQyLDIwICs1NTQzLDIxIEBAIHBvdGVudGlh bF9jb25zdGFudF9leHByZXNzaW9uXzEgKHRyZWUgdCwNCiAJICAgICYmIFRZ UEVfUE9MWU1PUlBISUNfUCAoVFJFRV9UWVBFIChlKSkpDQogICAgICAgICAg IHsNCiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiB0Zl9lcnJvcikNCiAgICAg ICAgICAgICAgIGVycm9yX2F0IChsb2MsICJ0eXBlaWQtZXhwcmVzc2lvbiBp cyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uICINCiAJCQkiYmVjYXVzZSAl cUUgaXMgb2YgcG9seW1vcnBoaWMgdHlwZSIsIGUpOw0KICAgICAgICAgICAg IHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJu IHRydWU7DQogICAgICAgfQ0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9F WFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQogICAgICAgd2FudF9ydmFs ID0gdHJ1ZTsNCiAgICAgICBnb3RvIGJpbmFyeTsNCiANCiAgICAgY2FzZSBM VF9FWFBSOg0KICAgICBjYXNlIExFX0VYUFI6DQogICAgIGNhc2UgR1RfRVhQ UjoNCiAgICAgY2FzZSBHRV9FWFBSOg0KICAgICBjYXNlIEVRX0VYUFI6DQog ICAgIGNhc2UgTkVfRVhQUjoNCkluZGV4OiBnY2MvY3AvY3AtZ2ltcGxpZnku Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jcC9jcC1naW1w bGlmeS5jCShyZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL2NwL2NwLWdpbXBs aWZ5LmMJKHdvcmtpbmcgY29weSkNCkBAIC0yMjE0LDIwICsyMjE0LDIxIEBA IGNwX2ZvbGQgKHRyZWUgeCkNCiAgICAgY2FzZSBQT1NUSU5DUkVNRU5UX0VY UFI6DQogICAgIGNhc2UgSU5JVF9FWFBSOg0KICAgICBjYXNlIFBSRURFQ1JF TUVOVF9FWFBSOg0KICAgICBjYXNlIFBSRUlOQ1JFTUVOVF9FWFBSOg0KICAg ICBjYXNlIENPTVBPVU5EX0VYUFI6DQogICAgIGNhc2UgTU9ESUZZX0VYUFI6 DQogICAgICAgcnZhbF9vcHMgPSBmYWxzZTsNCiAgICAgICAvKiBGQUxMVEhS VSAqLw0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBSOg0KICAgICBjYXNl IFBMVVNfRVhQUjoNCisgICAgY2FzZSBQT0lOVEVSX0RJRkZfRVhQUjoNCiAg ICAgY2FzZSBNSU5VU19FWFBSOg0KICAgICBjYXNlIE1VTFRfRVhQUjoNCiAg ICAgY2FzZSBUUlVOQ19ESVZfRVhQUjoNCiAgICAgY2FzZSBDRUlMX0RJVl9F WFBSOg0KICAgICBjYXNlIEZMT09SX0RJVl9FWFBSOg0KICAgICBjYXNlIFJP VU5EX0RJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX01PRF9FWFBSOg0KICAg ICBjYXNlIENFSUxfTU9EX0VYUFI6DQogICAgIGNhc2UgUk9VTkRfTU9EX0VY UFI6DQogICAgIGNhc2UgUkRJVl9FWFBSOg0KSW5kZXg6IGdjYy9jcC9lcnJv ci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2NwL2Vycm9y LmMJKHJldmlzaW9uIDI1NDg5NikNCisrKyBnY2MvY3AvZXJyb3IuYwkod29y a2luZyBjb3B5KQ0KQEAgLTIyMjAsMjAgKzIyMjAsMjQgQEAgZHVtcF9leHBy IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlDQogCSBkZWZhdWx0IGFy Z3VtZW50LiAgTm90ZSB3ZSBtYXkgaGF2ZSBjbGVhcmVkIG91dCB0aGUgZmly c3QNCiAJIG9wZXJhbmQgaW4gZXhwYW5kX2V4cHIsIHNvIGRvbid0IGdvIGtp bGxpbmcgb3Vyc2VsdmVzLiAgKi8NCiAgICAgICBpZiAoVFJFRV9PUEVSQU5E ICh0LCAxKSkNCiAJZHVtcF9leHByIChwcCwgVFJFRV9PUEVSQU5EICh0LCAx KSwgZmxhZ3MgfCBURkZfRVhQUl9JTl9QQVJFTlMpOw0KICAgICAgIGJyZWFr Ow0KIA0KICAgICBjYXNlIFBPSU5URVJfUExVU19FWFBSOg0KICAgICAgIGR1 bXBfYmluYXJ5X29wIChwcCwgIisiLCB0LCBmbGFncyk7DQogICAgICAgYnJl YWs7DQogDQorICAgIGNhc2UgUE9JTlRFUl9ESUZGX0VYUFI6DQorICAgICAg ZHVtcF9iaW5hcnlfb3AgKHBwLCAiLSIsIHQsIGZsYWdzKTsNCisgICAgICBi cmVhazsNCisNCiAgICAgY2FzZSBJTklUX0VYUFI6DQogICAgIGNhc2UgTU9E SUZZX0VYUFI6DQogICAgICAgZHVtcF9iaW5hcnlfb3AgKHBwLCBPVkxfT1Bf SU5GTyAodHJ1ZSwgTk9QX0VYUFIpLT5uYW1lLCB0LCBmbGFncyk7DQogICAg ICAgYnJlYWs7DQogDQogICAgIGNhc2UgUExVU19FWFBSOg0KICAgICBjYXNl IE1JTlVTX0VYUFI6DQogICAgIGNhc2UgTVVMVF9FWFBSOg0KICAgICBjYXNl IFRSVU5DX0RJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX01PRF9FWFBSOg0K SW5kZXg6IGdjYy9jcC90eXBlY2suYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy9jcC90eXBlY2suYwkocmV2aXNpb24gMjU0ODk2KQ0KKysr IGdjYy9jcC90eXBlY2suYwkod29ya2luZyBjb3B5KQ0KQEAgLTUzODksMjEg KzUzODksMjEgQEAgY3BfcG9pbnRlcl9pbnRfc3VtIChsb2NhdGlvbl90IGxv YywgZW51bQ0KIAkJCSAgaW50b3AsIGNvbXBsYWluICYgdGZfd2FybmluZ19v cl9lcnJvcik7DQogfQ0KIA0KIC8qIFJldHVybiBhIHRyZWUgZm9yIHRoZSBk aWZmZXJlbmNlIG9mIHBvaW50ZXJzIE9QMCBhbmQgT1AxLg0KICAgIFRoZSBy ZXN1bHRpbmcgdHJlZSBoYXMgdHlwZSBpbnQuICAqLw0KIA0KIHN0YXRpYyB0 cmVlDQogcG9pbnRlcl9kaWZmIChsb2NhdGlvbl90IGxvYywgdHJlZSBvcDAs IHRyZWUgb3AxLCB0cmVlIHB0cnR5cGUsDQogCSAgICAgIHRzdWJzdF9mbGFn c190IGNvbXBsYWluKQ0KIHsNCi0gIHRyZWUgcmVzdWx0Ow0KKyAgdHJlZSBy ZXN1bHQsIGludHR5cGU7DQogICB0cmVlIHJlc3R5cGUgPSBwdHJkaWZmX3R5 cGVfbm9kZTsNCiAgIHRyZWUgdGFyZ2V0X3R5cGUgPSBUUkVFX1RZUEUgKHB0 cnR5cGUpOw0KIA0KICAgaWYgKCFjb21wbGV0ZV90eXBlX29yX2Vsc2UgKHRh cmdldF90eXBlLCBOVUxMX1RSRUUpKQ0KICAgICByZXR1cm4gZXJyb3JfbWFy a19ub2RlOw0KIA0KICAgaWYgKFZPSURfVFlQRV9QICh0YXJnZXRfdHlwZSkp DQogICAgIHsNCiAgICAgICBpZiAoY29tcGxhaW4gJiB0Zl9lcnJvcikNCiAJ cGVybWVycm9yIChsb2MsICJJU08gQysrIGZvcmJpZHMgdXNpbmcgcG9pbnRl ciBvZiAiDQpAQCAtNTQyMSwyOCArNTQyMSw0NSBAQCBwb2ludGVyX2RpZmYg KGxvY2F0aW9uX3QgbG9jLCB0cmVlIG9wMCwNCiAgICAgfQ0KICAgaWYgKFRS RUVfQ09ERSAodGFyZ2V0X3R5cGUpID09IE1FVEhPRF9UWVBFKQ0KICAgICB7 DQogICAgICAgaWYgKGNvbXBsYWluICYgdGZfZXJyb3IpDQogCXBlcm1lcnJv ciAobG9jLCAiSVNPIEMrKyBmb3JiaWRzIHVzaW5nIHBvaW50ZXIgdG8gIg0K IAkJICAgImEgbWV0aG9kIGluIHN1YnRyYWN0aW9uIik7DQogICAgICAgZWxz ZQ0KIAlyZXR1cm4gZXJyb3JfbWFya19ub2RlOw0KICAgICB9DQogDQotICAv KiBGaXJzdCBkbyB0aGUgc3VidHJhY3Rpb24gYXMgaW50ZWdlcnM7DQotICAg ICB0aGVuIGRyb3AgdGhyb3VnaCB0byBidWlsZCB0aGUgZGl2aWRlIG9wZXJh dG9yLiAgKi8NCi0NCi0gIG9wMCA9IGNwX2J1aWxkX2JpbmFyeV9vcCAobG9j LA0KLQkJCSAgICBNSU5VU19FWFBSLA0KLQkJCSAgICBjcF9jb252ZXJ0IChy ZXN0eXBlLCBvcDAsIGNvbXBsYWluKSwNCi0JCQkgICAgY3BfY29udmVydCAo cmVzdHlwZSwgb3AxLCBjb21wbGFpbiksDQotCQkJICAgIGNvbXBsYWluKTsN CisgIC8qIERldGVybWluZSBpbnRlZ2VyIHR5cGUgcmVzdWx0IG9mIHRoZSBz dWJ0cmFjdGlvbi4gIFRoaXMgd2lsbCB1c3VhbGx5DQorICAgICBiZSB0aGUg c2FtZSBhcyB0aGUgcmVzdWx0IHR5cGUgKHB0cmRpZmZfdCksIGJ1dCBtYXkg bmVlZCB0byBiZSBhIHdpZGVyDQorICAgICB0eXBlIGlmIHBvaW50ZXJzIGZv ciB0aGUgYWRkcmVzcyBzcGFjZSBhcmUgd2lkZXIgdGhhbiBwdHJkaWZmX3Qu ICAqLw0KKyAgaWYgKFRZUEVfUFJFQ0lTSU9OIChyZXN0eXBlKSA8IFRZUEVf UFJFQ0lTSU9OIChUUkVFX1RZUEUgKG9wMCkpKQ0KKyAgICBpbnR0eXBlID0g Y19jb21tb25fdHlwZV9mb3Jfc2l6ZSAoVFlQRV9QUkVDSVNJT04gKFRSRUVf VFlQRSAob3AwKSksIDApOw0KKyAgZWxzZQ0KKyAgICBpbnR0eXBlID0gcmVz dHlwZTsNCisNCisgIC8qIEZpcnN0IGRvIHRoZSBzdWJ0cmFjdGlvbiwgdGhl biBidWlsZCB0aGUgZGl2aWRlIG9wZXJhdG9yDQorICAgICBhbmQgb25seSBj b252ZXJ0IGF0IHRoZSB2ZXJ5IGVuZC4NCisgICAgIERvIG5vdCBkbyBkZWZh dWx0IGNvbnZlcnNpb25zIGluIGNhc2UgcmVzdHlwZSBpcyBhIHNob3J0IHR5 cGUuICAqLw0KKw0KKyAgLyogUE9JTlRFUl9ESUZGX0VYUFIgcmVxdWlyZXMg YSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHRoZSBzYW1lIHNpemUgYXMNCisg ICAgIHBvaW50ZXJzLiAgSWYgc29tZSBwbGF0Zm9ybSBjYW5ub3QgcHJvdmlk ZSB0aGF0LCBvciBoYXMgYSBsYXJnZXINCisgICAgIHB0cmRpZmZfdHlwZSB0 byBzdXBwb3J0IGRpZmZlcmVuY2VzIGxhcmdlciB0aGFuIGhhbGYgdGhlIGFk ZHJlc3MNCisgICAgIHNwYWNlLCBjYXN0IHRoZSBwb2ludGVycyB0byBzb21l IGxhcmdlciBpbnRlZ2VyIHR5cGUgYW5kIGRvIHRoZQ0KKyAgICAgY29tcHV0 YXRpb25zIGluIHRoYXQgdHlwZS4gICovDQorICBpZiAoVFlQRV9QUkVDSVNJ T04gKGludHR5cGUpID4gVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAob3Aw KSkpDQorICAgIG9wMCA9IGNwX2J1aWxkX2JpbmFyeV9vcCAobG9jLA0KKwkJ CSAgICAgIE1JTlVTX0VYUFIsDQorCQkJICAgICAgY3BfY29udmVydCAoaW50 dHlwZSwgb3AwLCBjb21wbGFpbiksDQorCQkJICAgICAgY3BfY29udmVydCAo aW50dHlwZSwgb3AxLCBjb21wbGFpbiksDQorCQkJICAgICAgY29tcGxhaW4p Ow0KKyAgZWxzZQ0KKyAgICBvcDAgPSBidWlsZDJfbG9jIChsb2MsIFBPSU5U RVJfRElGRl9FWFBSLCBpbnR0eXBlLCBvcDAsIG9wMSk7DQogDQogICAvKiBU aGlzIGdlbmVyYXRlcyBhbiBlcnJvciBpZiBvcDEgaXMgYSBwb2ludGVyIHRv IGFuIGluY29tcGxldGUgdHlwZS4gICovDQogICBpZiAoIUNPTVBMRVRFX1RZ UEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKG9wMSkpKSkNCiAgICAgew0K ICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQ0KIAllcnJvcl9hdCAo bG9jLCAiaW52YWxpZCB1c2Ugb2YgYSBwb2ludGVyIHRvIGFuIGluY29tcGxl dGUgdHlwZSBpbiAiDQogCQkgICJwb2ludGVyIGFyaXRobWV0aWMiKTsNCiAg ICAgICBlbHNlDQogCXJldHVybiBlcnJvcl9tYXJrX25vZGU7DQogICAgIH0N CkBAIC01NDU0LDIzICs1NDcxLDIzIEBAIHBvaW50ZXJfZGlmZiAobG9jYXRp b25fdCBsb2MsIHRyZWUgb3AwLA0KICAgICAgIGVsc2UNCiAJcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsNCiAgICAgfQ0KIA0KICAgb3AxID0gKFRZUEVfUFRS T0JfUCAocHRydHlwZSkNCiAJID8gc2l6ZV9pbl9ieXRlc19sb2MgKGxvYywg dGFyZ2V0X3R5cGUpDQogCSA6IGludGVnZXJfb25lX25vZGUpOw0KIA0KICAg LyogRG8gdGhlIGRpdmlzaW9uLiAgKi8NCiANCi0gIHJlc3VsdCA9IGJ1aWxk Ml9sb2MgKGxvYywgRVhBQ1RfRElWX0VYUFIsIHJlc3R5cGUsIG9wMCwNCi0J CSAgICAgICBjcF9jb252ZXJ0IChyZXN0eXBlLCBvcDEsIGNvbXBsYWluKSk7 DQotICByZXR1cm4gcmVzdWx0Ow0KKyAgcmVzdWx0ID0gYnVpbGQyX2xvYyAo bG9jLCBFWEFDVF9ESVZfRVhQUiwgaW50dHlwZSwgb3AwLA0KKwkJICAgICAg IGNwX2NvbnZlcnQgKGludHR5cGUsIG9wMSwgY29tcGxhaW4pKTsNCisgIHJl dHVybiBjcF9jb252ZXJ0IChyZXN0eXBlLCByZXN1bHQsIGNvbXBsYWluKTsN CiB9DQogDA0KIC8qIENvbnN0cnVjdCBhbmQgcGVyaGFwcyBvcHRpbWl6ZSBh IHRyZWUgcmVwcmVzZW50YXRpb24NCiAgICBmb3IgYSB1bmFyeSBvcGVyYXRp b24uICBDT0RFLCBhIHRyZWVfY29kZSwgc3BlY2lmaWVzIHRoZSBvcGVyYXRp b24NCiAgICBhbmQgWEFSRyBpcyB0aGUgb3BlcmFuZC4gICovDQogDQogdHJl ZQ0KIGJ1aWxkX3hfdW5hcnlfb3AgKGxvY2F0aW9uX3QgbG9jLCBlbnVtIHRy ZWVfY29kZSBjb2RlLCBjcF9leHByIHhhcmcsDQogCQkgIHRzdWJzdF9mbGFn c190IGNvbXBsYWluKQ0KIHsNCkluZGV4OiBnY2MvZG9jL2dlbmVyaWMudGV4 aQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9kb2MvZ2VuZXJp Yy50ZXhpCShyZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL2RvYy9nZW5lcmlj LnRleGkJKHdvcmtpbmcgY29weSkNCkBAIC0xMjE3LDIwICsxMjE3LDIxIEBA IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZmllbGQsIGJ1dCBzaG91bGQNCiBA dGluZGV4IFJTSElGVF9FWFBSDQogQHRpbmRleCBCSVRfSU9SX0VYUFINCiBA dGluZGV4IEJJVF9YT1JfRVhQUg0KIEB0aW5kZXggQklUX0FORF9FWFBSDQog QHRpbmRleCBUUlVUSF9BTkRJRl9FWFBSDQogQHRpbmRleCBUUlVUSF9PUklG X0VYUFINCiBAdGluZGV4IFRSVVRIX0FORF9FWFBSDQogQHRpbmRleCBUUlVU SF9PUl9FWFBSDQogQHRpbmRleCBUUlVUSF9YT1JfRVhQUg0KIEB0aW5kZXgg UE9JTlRFUl9QTFVTX0VYUFINCitAdGluZGV4IFBPSU5URVJfRElGRl9FWFBS DQogQHRpbmRleCBQTFVTX0VYUFINCiBAdGluZGV4IE1JTlVTX0VYUFINCiBA dGluZGV4IE1VTFRfRVhQUg0KIEB0aW5kZXggTVVMVF9ISUdIUEFSVF9FWFBS DQogQHRpbmRleCBSRElWX0VYUFINCiBAdGluZGV4IFRSVU5DX0RJVl9FWFBS DQogQHRpbmRleCBGTE9PUl9ESVZfRVhQUg0KIEB0aW5kZXggQ0VJTF9ESVZf RVhQUg0KIEB0aW5kZXggUk9VTkRfRElWX0VYUFINCiBAdGluZGV4IFRSVU5D X01PRF9FWFBSDQpAQCAtMTQwNiwyMiArMTQwNywzMCBAQCBhbHdheXMgb2Yg QGNvZGV7Qk9PTEVBTl9UWVBFfSBvciBAY29kZXtJDQogVGhlc2Ugbm9kZXMg cmVwcmVzZW50IGxvZ2ljYWwgYW5kLCBsb2dpY2FsIG9yLCBhbmQgbG9naWNh bCBleGNsdXNpdmUgb3IuDQogVGhleSBhcmUgc3RyaWN0OyBib3RoIGFyZ3Vt ZW50cyBhcmUgYWx3YXlzIGV2YWx1YXRlZC4gIFRoZXJlIGFyZSBubw0KIGNv cnJlc3BvbmRpbmcgb3BlcmF0b3JzIGluIEMgb3IgQysrLCBidXQgdGhlIGZy b250IGVuZCB3aWxsIHNvbWV0aW1lcw0KIGdlbmVyYXRlIHRoZXNlIGV4cHJl c3Npb25zIGFueWhvdywgaWYgaXQgY2FuIHRlbGwgdGhhdCBzdHJpY3RuZXNz IGRvZXMNCiBub3QgbWF0dGVyLiAgVGhlIHR5cGUgb2YgdGhlIG9wZXJhbmRz IGFuZCB0aGF0IG9mIHRoZSByZXN1bHQgYXJlDQogYWx3YXlzIG9mIEBjb2Rl e0JPT0xFQU5fVFlQRX0gb3IgQGNvZGV7SU5URUdFUl9UWVBFfS4NCiANCiBA aXRlbSBQT0lOVEVSX1BMVVNfRVhQUg0KIFRoaXMgbm9kZSByZXByZXNlbnRz IHBvaW50ZXIgYXJpdGhtZXRpYy4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGFs d2F5cw0KIGEgcG9pbnRlci9yZWZlcmVuY2UgdHlwZS4gIFRoZSBzZWNvbmQg b3BlcmFuZCBpcyBhbHdheXMgYW4gdW5zaWduZWQNCi1pbnRlZ2VyIHR5cGUg Y29tcGF0aWJsZSB3aXRoIHNpemV0eXBlLiAgVGhpcyBpcyB0aGUgb25seSBi aW5hcnkNCi1hcml0aG1ldGljIG9wZXJhbmQgdGhhdCBjYW4gb3BlcmF0ZSBv biBwb2ludGVyIHR5cGVzLg0KK2ludGVnZXIgdHlwZSBjb21wYXRpYmxlIHdp dGggc2l6ZXR5cGUuICBUaGlzIGFuZCBQT0lOVEVSX0RJRkZfRVhQUiBhcmUN Cit0aGUgb25seSBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRvcnMgdGhhdCBj YW4gb3BlcmF0ZSBvbiBwb2ludGVyIHR5cGVzLg0KKw0KK0BpdGVtIFBPSU5U RVJfRElGRl9FWFBSDQorVGhpcyBub2RlIHJlcHJlc2VudHMgcG9pbnRlciBz dWJ0cmFjdGlvbi4gIFRoZSB0d28gb3BlcmFuZHMgYWx3YXlzDQoraGF2ZSBw b2ludGVyL3JlZmVyZW5jZSB0eXBlLiAgSXQgcmV0dXJucyBhIHNpZ25lZCBp bnRlZ2VyIG9mIHRoZSBzYW1lDQorcHJlY2lzaW9uIGFzIHRoZSBwb2ludGVy cy4gIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIGRpZmZlcmVu Y2UNCitvZiB0aGUgdHdvIHBvaW50ZXJzLCBzZWVuIGFzIGluZmluaXRlIHBy ZWNpc2lvbiBub24tbmVnYXRpdmUgaW50ZWdlcnMsDQorZG9lcyBub3QgZml0 IGluIHRoZSByZXN1bHQgdHlwZS4gIFRoZSByZXN1bHQgZG9lcyBub3QgZGVw ZW5kIG9uIHRoZQ0KK3BvaW50ZXIgdHlwZSwgaXQgaXMgbm90IGRpdmlkZWQg YnkgdGhlIHNpemUgb2YgdGhlIHBvaW50ZWQtdG8gdHlwZS4NCiANCiBAaXRl bSBQTFVTX0VYUFINCiBAaXRlbXggTUlOVVNfRVhQUg0KIEBpdGVteCBNVUxU X0VYUFINCiBUaGVzZSBub2RlcyByZXByZXNlbnQgdmFyaW91cyBiaW5hcnkg YXJpdGhtZXRpYyBvcGVyYXRpb25zLg0KIFJlc3BlY3RpdmVseSwgdGhlc2Ug b3BlcmF0aW9ucyBhcmUgYWRkaXRpb24sIHN1YnRyYWN0aW9uIChvZiB0aGUg c2Vjb25kDQogb3BlcmFuZCBmcm9tIHRoZSBmaXJzdCkgYW5kIG11bHRpcGxp Y2F0aW9uLiAgVGhlaXIgb3BlcmFuZHMgbWF5IGhhdmUNCiBlaXRoZXIgaW50 ZWdyYWwgb3IgZmxvYXRpbmcgdHlwZSwgYnV0IHRoZXJlIHdpbGwgbmV2ZXIg YmUgY2FzZSBpbiB3aGljaA0KIG9uZSBvcGVyYW5kIGlzIG9mIGZsb2F0aW5n IHR5cGUgYW5kIHRoZSBvdGhlciBpcyBvZiBpbnRlZ3JhbCB0eXBlLg0KIA0K SW5kZXg6IGdjYy9leHByLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBnY2MvZXhwci5jCShyZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL2V4cHIu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTg1NDgsMjAgKzg1NDgsMjEgQEAgZXhw YW5kX2V4cHJfcmVhbF8yIChzZXBvcHMgb3BzLCBydHggdGFyZw0KIAkgIGlm IChvcDEgPT0gY29uc3QwX3J0eCkNCiAJICAgIHJldHVybiBvcDA7DQogCSAg Z290byBiaW5vcDI7DQogCX0NCiANCiAgICAgICBleHBhbmRfb3BlcmFuZHMg KHRyZWVvcDAsIHRyZWVvcDEsDQogCQkgICAgICAgc3VidGFyZ2V0LCAmb3Aw LCAmb3AxLCBtb2RpZmllcik7DQogICAgICAgcmV0dXJuIFJFRFVDRV9CSVRf RklFTEQgKHNpbXBsaWZ5X2dlbl9iaW5hcnkgKFBMVVMsIG1vZGUsIG9wMCwg b3AxKSk7DQogDQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCisgICAgY2FzZSBQ T0lOVEVSX0RJRkZfRVhQUjoNCiAgICAgZG9fbWludXM6DQogICAgICAgLyog Rm9yIGluaXRpYWxpemVycywgd2UgYXJlIGFsbG93ZWQgdG8gcmV0dXJuIGEg TUlOVVMgb2YgdHdvDQogCSBzeW1ib2xpYyBjb25zdGFudHMuICBIZXJlIHdl IGhhbmRsZSBhbGwgY2FzZXMgd2hlbiBib3RoIG9wZXJhbmRzDQogCSBhcmUg Y29uc3RhbnQuICAqLw0KICAgICAgIC8qIEhhbmRsZSBkaWZmZXJlbmNlIG9m IHR3byBzeW1ib2xpYyBjb25zdGFudHMsDQogCSBmb3IgdGhlIHNha2Ugb2Yg YW4gaW5pdGlhbGl6ZXIuICAqLw0KICAgICAgIGlmICgobW9kaWZpZXIgPT0g RVhQQU5EX1NVTSB8fCBtb2RpZmllciA9PSBFWFBBTkRfSU5JVElBTElaRVIp DQogCSAgJiYgcmVhbGx5X2NvbnN0YW50X3AgKHRyZWVvcDApDQogCSAgJiYg cmVhbGx5X2NvbnN0YW50X3AgKHRyZWVvcDEpKQ0KIAl7DQpJbmRleDogZ2Nj L2ZvbGQtY29uc3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy9mb2xkLWNvbnN0LmMJKHJldmlzaW9uIDI1NDg5NikNCisrKyBnY2MvZm9s ZC1jb25zdC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTQ3NiwyMCArMTQ3Niwz MCBAQCBjb25zdF9iaW5vcCAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0 DQogICBzd2l0Y2ggKGNvZGUpDQogICAgIHsNCiAgICAgY2FzZSBDT01QTEVY X0VYUFI6DQogICAgICAgaWYgKChUUkVFX0NPREUgKGFyZzEpID09IFJFQUxf Q1NUDQogCSAgICYmIFRSRUVfQ09ERSAoYXJnMikgPT0gUkVBTF9DU1QpDQog CSAgfHwgKFRSRUVfQ09ERSAoYXJnMSkgPT0gSU5URUdFUl9DU1QNCiAJICAg ICAgJiYgVFJFRV9DT0RFIChhcmcyKSA9PSBJTlRFR0VSX0NTVCkpDQogCXJl dHVybiBidWlsZF9jb21wbGV4ICh0eXBlLCBhcmcxLCBhcmcyKTsNCiAgICAg ICByZXR1cm4gTlVMTF9UUkVFOw0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElG Rl9FWFBSOg0KKyAgICAgIGlmIChUUkVFX0NPREUgKGFyZzEpID09IElOVEVH RVJfQ1NUICYmIFRSRUVfQ09ERSAoYXJnMikgPT0gSU5URUdFUl9DU1QpDQor CXsNCisJICBvZmZzZXRfaW50IHJlcyA9IHdpOjpzdWIgKHdpOjp0b19vZmZz ZXQgKGFyZzEpLA0KKwkJCQkgICAgd2k6OnRvX29mZnNldCAoYXJnMikpOw0K KwkgIHJldHVybiBmb3JjZV9maXRfdHlwZSAodHlwZSwgcmVzLCAxLA0KKwkJ CQkgVFJFRV9PVkVSRkxPVyAoYXJnMSkgfCBUUkVFX09WRVJGTE9XIChhcmcy KSk7DQorCX0NCisgICAgICByZXR1cm4gTlVMTF9UUkVFOw0KKw0KICAgICBj YXNlIFZFQ19QQUNLX1RSVU5DX0VYUFI6DQogICAgIGNhc2UgVkVDX1BBQ0tf RklYX1RSVU5DX0VYUFI6DQogICAgICAgew0KIAl1bnNpZ25lZCBpbnQgb3V0 X25lbHRzLCBpbl9uZWx0cywgaTsNCiANCiAJaWYgKFRSRUVfQ09ERSAoYXJn MSkgIT0gVkVDVE9SX0NTVA0KIAkgICAgfHwgVFJFRV9DT0RFIChhcmcyKSAh PSBWRUNUT1JfQ1NUKQ0KIAkgIHJldHVybiBOVUxMX1RSRUU7DQogDQogCWlu X25lbHRzID0gVkVDVE9SX0NTVF9ORUxUUyAoYXJnMSk7DQpAQCAtODc5NCw0 MCArODgwNCw0NyBAQCBmb2xkX3ZlY19wZXJtICh0cmVlIHR5cGUsIHRyZWUg YXJnMCwgdHJlDQogICBlbHNlDQogICAgIHJldHVybiBidWlsZF92ZWN0b3Ig KHR5cGUsIG91dF9lbHRzKTsNCiB9DQogDQogLyogVHJ5IHRvIGZvbGQgYSBw b2ludGVyIGRpZmZlcmVuY2Ugb2YgdHlwZSBUWVBFIHR3byBhZGRyZXNzIGV4 cHJlc3Npb25zIG9mDQogICAgYXJyYXkgcmVmZXJlbmNlcyBBUkVGMCBhbmQg QVJFRjEgdXNpbmcgbG9jYXRpb24gTE9DLiAgUmV0dXJuIGENCiAgICBzaW1w bGlmaWVkIGV4cHJlc3Npb24gZm9yIHRoZSBkaWZmZXJlbmNlIG9yIE5VTExf VFJFRS4gICovDQogDQogc3RhdGljIHRyZWUNCiBmb2xkX2FkZHJfb2ZfYXJy YXlfcmVmX2RpZmZlcmVuY2UgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHR5cGUs DQotCQkJCSAgIHRyZWUgYXJlZjAsIHRyZWUgYXJlZjEpDQorCQkJCSAgIHRy ZWUgYXJlZjAsIHRyZWUgYXJlZjEsDQorCQkJCSAgIGJvb2wgdXNlX3BvaW50 ZXJfZGlmZikNCiB7DQogICB0cmVlIGJhc2UwID0gVFJFRV9PUEVSQU5EIChh cmVmMCwgMCk7DQogICB0cmVlIGJhc2UxID0gVFJFRV9PUEVSQU5EIChhcmVm MSwgMCk7DQogICB0cmVlIGJhc2Vfb2Zmc2V0ID0gYnVpbGRfaW50X2NzdCAo dHlwZSwgMCk7DQogDQogICAvKiBJZiB0aGUgYmFzZXMgYXJlIGFycmF5IHJl ZmVyZW5jZXMgYXMgd2VsbCwgcmVjdXJzZS4gIElmIHRoZSBiYXNlcw0KICAg ICAgYXJlIHBvaW50ZXIgaW5kaXJlY3Rpb25zIGNvbXB1dGUgdGhlIGRpZmZl cmVuY2Ugb2YgdGhlIHBvaW50ZXJzLg0KICAgICAgSWYgdGhlIGJhc2VzIGFy ZSBlcXVhbCwgd2UgYXJlIHNldC4gICovDQogICBpZiAoKFRSRUVfQ09ERSAo YmFzZTApID09IEFSUkFZX1JFRg0KICAgICAgICAmJiBUUkVFX0NPREUgKGJh c2UxKSA9PSBBUlJBWV9SRUYNCiAgICAgICAgJiYgKGJhc2Vfb2Zmc2V0DQot CSAgID0gZm9sZF9hZGRyX29mX2FycmF5X3JlZl9kaWZmZXJlbmNlIChsb2Ms IHR5cGUsIGJhc2UwLCBiYXNlMSkpKQ0KKwkgICA9IGZvbGRfYWRkcl9vZl9h cnJheV9yZWZfZGlmZmVyZW5jZSAobG9jLCB0eXBlLCBiYXNlMCwgYmFzZTEs DQorCQkJCQkJdXNlX3BvaW50ZXJfZGlmZikpKQ0KICAgICAgIHx8IChJTkRJ UkVDVF9SRUZfUCAoYmFzZTApDQogCSAgJiYgSU5ESVJFQ1RfUkVGX1AgKGJh c2UxKQ0KIAkgICYmIChiYXNlX29mZnNldA0KLQkgICAgICAgID0gZm9sZF9i aW5hcnlfbG9jIChsb2MsIE1JTlVTX0VYUFIsIHR5cGUsDQotCQkJCSAgIGZv bGRfY29udmVydCAodHlwZSwgVFJFRV9PUEVSQU5EIChiYXNlMCwgMCkpLA0K LQkJCQkgICBmb2xkX2NvbnZlcnQgKHR5cGUsDQotCQkJCQkJIFRSRUVfT1BF UkFORCAoYmFzZTEsIDApKSkpKQ0KKwkgICAgICAgID0gdXNlX3BvaW50ZXJf ZGlmZg0KKwkJICA/IGZvbGRfYmluYXJ5X2xvYyAobG9jLCBQT0lOVEVSX0RJ RkZfRVhQUiwgdHlwZSwNCisJCQkJICAgICBUUkVFX09QRVJBTkQgKGJhc2Uw LCAwKSwNCisJCQkJICAgICBUUkVFX09QRVJBTkQgKGJhc2UxLCAwKSkNCisJ CSAgOiBmb2xkX2JpbmFyeV9sb2MgKGxvYywgTUlOVVNfRVhQUiwgdHlwZSwN CisJCQkJICAgICBmb2xkX2NvbnZlcnQgKHR5cGUsDQorCQkJCQkJICAgVFJF RV9PUEVSQU5EIChiYXNlMCwgMCkpLA0KKwkJCQkgICAgIGZvbGRfY29udmVy dCAodHlwZSwNCisJCQkJCQkgICBUUkVFX09QRVJBTkQgKGJhc2UxLCAwKSkp KSkNCiAgICAgICB8fCBvcGVyYW5kX2VxdWFsX3AgKGJhc2UwLCBiYXNlMSwg T0VQX0FERFJFU1NfT0YpKQ0KICAgICB7DQogICAgICAgdHJlZSBvcDAgPSBm b2xkX2NvbnZlcnRfbG9jIChsb2MsIHR5cGUsIFRSRUVfT1BFUkFORCAoYXJl ZjAsIDEpKTsNCiAgICAgICB0cmVlIG9wMSA9IGZvbGRfY29udmVydF9sb2Mg KGxvYywgdHlwZSwgVFJFRV9PUEVSQU5EIChhcmVmMSwgMSkpOw0KICAgICAg IHRyZWUgZXN6ID0gZm9sZF9jb252ZXJ0X2xvYyAobG9jLCB0eXBlLCBhcnJh eV9yZWZfZWxlbWVudF9zaXplIChhcmVmMCkpOw0KICAgICAgIHRyZWUgZGlm ZiA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBNSU5VU19FWFBSLCB0eXBlLCBv cDAsIG9wMSk7DQogICAgICAgcmV0dXJuIGZvbGRfYnVpbGQyX2xvYyAobG9j LCBQTFVTX0VYUFIsIHR5cGUsDQogCQkJICAgICAgYmFzZV9vZmZzZXQsDQog CQkJICAgICAgZm9sZF9idWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwgdHlw ZSwNCiAJCQkJCSAgICAgICBkaWZmLCBlc3opKTsNCkBAIC05Njg3LDIxICs5 NzA0LDQxIEBAIGZvbGRfYmluYXJ5X2xvYyAobG9jYXRpb25fdCBsb2MsDQog CQl9DQogDQogCSAgICAgIHJldHVybg0KIAkJZm9sZF9jb252ZXJ0X2xvYyAo bG9jLCB0eXBlLCBhc3NvY2lhdGVfdHJlZXMgKGxvYywgdmFyMCwgY29uMCwN CiAJCQkJCQkJICAgICAgY29kZSwgYXR5cGUpKTsNCiAJICAgIH0NCiAJfQ0K IA0KICAgICAgIHJldHVybiBOVUxMX1RSRUU7DQogDQorICAgIGNhc2UgUE9J TlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCisgICAg ICAvKiBGb2xkICZhW2ldIC0gJmFbal0gdG8gaS1qLiAgKi8NCisgICAgICBp ZiAoVFJFRV9DT0RFIChhcmcwKSA9PSBBRERSX0VYUFINCisJICAmJiBUUkVF X0NPREUgKFRSRUVfT1BFUkFORCAoYXJnMCwgMCkpID09IEFSUkFZX1JFRg0K KwkgICYmIFRSRUVfQ09ERSAoYXJnMSkgPT0gQUREUl9FWFBSDQorCSAgJiYg VFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGFyZzEsIDApKSA9PSBBUlJBWV9S RUYpDQorICAgICAgICB7DQorCSAgdHJlZSB0ZW0gPSBmb2xkX2FkZHJfb2Zf YXJyYXlfcmVmX2RpZmZlcmVuY2UgKGxvYywgdHlwZSwNCisJCQkJCQkJVFJF RV9PUEVSQU5EIChhcmcwLCAwKSwNCisJCQkJCQkJVFJFRV9PUEVSQU5EIChh cmcxLCAwKSwNCisJCQkJCQkJY29kZQ0KKwkJCQkJCQk9PSBQT0lOVEVSX0RJ RkZfRVhQUik7DQorCSAgaWYgKHRlbSkNCisJICAgIHJldHVybiB0ZW07DQor CX0NCisNCisgICAgICAvKiBGdXJ0aGVyIHRyYW5zZm9ybWF0aW9ucyBhcmUg bm90IGZvciBwb2ludGVycy4gICovDQorICAgICAgaWYgKGNvZGUgPT0gUE9J TlRFUl9ESUZGX0VYUFIpDQorCXJldHVybiBOVUxMX1RSRUU7DQorDQogICAg ICAgLyogKC1BKSAtIEIgLT4gKC1CKSAtIEEgIHdoZXJlIEIgaXMgZWFzaWx5 IG5lZ2F0ZWQgYW5kIHdlIGNhbiBzd2FwLiAgKi8NCiAgICAgICBpZiAoVFJF RV9DT0RFIChhcmcwKSA9PSBORUdBVEVfRVhQUg0KIAkgICYmIG5lZ2F0ZV9l eHByX3AgKG9wMSkpDQogCXJldHVybiBmb2xkX2J1aWxkMl9sb2MgKGxvYywg TUlOVVNfRVhQUiwgdHlwZSwNCiAJCQkJbmVnYXRlX2V4cHIgKG9wMSksDQog CQkJCWZvbGRfY29udmVydF9sb2MgKGxvYywgdHlwZSwNCiAJCQkJCQkgIFRS RUVfT1BFUkFORCAoYXJnMCwgMCkpKTsNCiANCiAgICAgICAvKiBGb2xkIF9f Y29tcGxleF9fICggeCwgMCApIC0gX19jb21wbGV4X18gKCAwLCB5ICkgdG8N CiAJIF9fY29tcGxleF9fICggeCwgLXkgKS4gIFRoaXMgaXMgbm90IHRoZSBz YW1lIGZvciBTTmFOcyBvciBpZg0KQEAgLTk3NDUsMzMgKzk3ODIsMjAgQEAg Zm9sZF9iaW5hcnlfbG9jIChsb2NhdGlvbl90IGxvYywNCiAJICAmJiAhIFRZ UEVfT1ZFUkZMT1dfU0FOSVRJWkVEICh0eXBlKQ0KIAkgICYmICgoRkxPQVRf VFlQRV9QICh0eXBlKQ0KICAgICAgICAgICAgICAgIC8qIEF2b2lkIHRoaXMg dHJhbnNmb3JtYXRpb24gaWYgQiBpcyBhIHBvc2l0aXZlIFJFQUxfQ1NULiAg Ki8NCiAJICAgICAgICYmIChUUkVFX0NPREUgKG9wMSkgIT0gUkVBTF9DU1QN CiAJCSAgIHx8IFJFQUxfVkFMVUVfTkVHQVRJVkUgKFRSRUVfUkVBTF9DU1Qg KG9wMSkpKSkNCiAJICAgICAgfHwgSU5URUdSQUxfVFlQRV9QICh0eXBlKSkp DQogCXJldHVybiBmb2xkX2J1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCB0 eXBlLA0KIAkJCQlmb2xkX2NvbnZlcnRfbG9jIChsb2MsIHR5cGUsIGFyZzAp LA0KIAkJCQluZWdhdGVfZXhwciAob3AxKSk7DQogDQotICAgICAgLyogRm9s ZCAmYVtpXSAtICZhW2pdIHRvIGktai4gICovDQotICAgICAgaWYgKFRSRUVf Q09ERSAoYXJnMCkgPT0gQUREUl9FWFBSDQotCSAgJiYgVFJFRV9DT0RFIChU UkVFX09QRVJBTkQgKGFyZzAsIDApKSA9PSBBUlJBWV9SRUYNCi0JICAmJiBU UkVFX0NPREUgKGFyZzEpID09IEFERFJfRVhQUg0KLQkgICYmIFRSRUVfQ09E RSAoVFJFRV9PUEVSQU5EIChhcmcxLCAwKSkgPT0gQVJSQVlfUkVGKQ0KLSAg ICAgICAgew0KLQkgIHRyZWUgdGVtID0gZm9sZF9hZGRyX29mX2FycmF5X3Jl Zl9kaWZmZXJlbmNlIChsb2MsIHR5cGUsDQotCQkJCQkJCVRSRUVfT1BFUkFO RCAoYXJnMCwgMCksDQotCQkJCQkJCVRSRUVfT1BFUkFORCAoYXJnMSwgMCkp Ow0KLQkgIGlmICh0ZW0pDQotCSAgICByZXR1cm4gdGVtOw0KLQl9DQotDQog ICAgICAgLyogSGFuZGxlIChBMSAqIEMxKSAtIChBMiAqIEMyKSB3aXRoIEEx LCBBMiBvciBDMSwgQzIgYmVpbmcgdGhlIHNhbWUgb3INCiAJIG9uZS4gIE1h a2Ugc3VyZSB0aGUgdHlwZSBpcyBub3Qgc2F0dXJhdGluZyBhbmQgaGFzIHRo ZSBzaWduZWRuZXNzIG9mDQogCSB0aGUgc3RyaXBwZWQgb3BlcmFuZHMsIGFz IGZvbGRfcGx1c21pbnVzX211bHRfZXhwciB3aWxsIHJlLWFzc29jaWF0ZS4N CiAJID8/PyBUaGUgbGF0dGVyIGNvbmRpdGlvbiBzaG91bGQgdXNlIFRZUEVf T1ZFUkZMT1dfKiBmbGFncyBpbnN0ZWFkLiAgKi8NCiAgICAgICBpZiAoKFRS RUVfQ09ERSAoYXJnMCkgPT0gTVVMVF9FWFBSDQogCSAgIHx8IFRSRUVfQ09E RSAoYXJnMSkgPT0gTVVMVF9FWFBSKQ0KIAkgICYmICFUWVBFX1NBVFVSQVRJ TkcgKHR5cGUpDQogCSAgJiYgVFlQRV9VTlNJR05FRCAodHlwZSkgPT0gVFlQ RV9VTlNJR05FRCAoVFJFRV9UWVBFIChhcmcwKSkNCiAJICAmJiBUWVBFX1VO U0lHTkVEICh0eXBlKSA9PSBUWVBFX1VOU0lHTkVEIChUUkVFX1RZUEUgKGFy ZzEpKQ0KIAkgICYmICghRkxPQVRfVFlQRV9QICh0eXBlKSB8fCBmbGFnX2Fz c29jaWF0aXZlX21hdGgpKQ0KSW5kZXg6IGdjYy9tYXRjaC5wZA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9tYXRjaC5wZAkocmV2aXNpb24g MjU0ODk2KQ0KKysrIGdjYy9tYXRjaC5wZAkod29ya2luZyBjb3B5KQ0KQEAg LTExNywyMCArMTE3LDIzIEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5E X0ZOIChSSU5UKQ0KIA0KIC8qIFNpbXBsaWZ5IHggLSB4Lg0KICAgIFRoaXMg aXMgdW5zYWZlIGZvciBjZXJ0YWluIGZsb2F0cyBldmVuIGluIG5vbi1JRUVF IGZvcm1hdHMuDQogICAgSW4gSUVFRSwgaXQgaXMgdW5zYWZlIGJlY2F1c2Ug aXQgZG9lcyB3cm9uZyBmb3IgTmFOcy4NCiAgICBBbHNvIG5vdGUgdGhhdCBv cGVyYW5kX2VxdWFsX3AgaXMgYWx3YXlzIGZhbHNlIGlmIGFuIG9wZXJhbmQN CiAgICBpcyB2b2xhdGlsZS4gICovDQogKHNpbXBsaWZ5DQogIChtaW51cyBA MCBAMCkNCiAgKGlmICghRkxPQVRfVFlQRV9QICh0eXBlKSB8fCAhSE9OT1Jf TkFOUyAodHlwZSkpDQogICB7IGJ1aWxkX3plcm9fY3N0ICh0eXBlKTsgfSkp DQorKHNpbXBsaWZ5DQorIChwb2ludGVyX2RpZmYgQEAwIEAwKQ0KKyB7IGJ1 aWxkX3plcm9fY3N0ICh0eXBlKTsgfSkNCiANCiAoc2ltcGxpZnkNCiAgKG11 bHQgQDAgaW50ZWdlcl96ZXJvcEAxKQ0KICBAMSkNCiANCiAvKiBNYXliZSBm b2xkIHggKiAwIHRvIDAuICBUaGUgZXhwcmVzc2lvbnMgYXJlbid0IHRoZSBz YW1lDQogICAgd2hlbiB4IGlzIE5hTiwgc2luY2UgeCAqIDAgaXMgYWxzbyBO YU4uICBOb3IgYXJlIHRoZXkgdGhlDQogICAgc2FtZSBpbiBtb2RlcyB3aXRo IHNpZ25lZCB6ZXJvcywgc2luY2UgbXVsdGlwbHlpbmcgYQ0KICAgIG5lZ2F0 aXZlIHZhbHVlIGJ5IDAgZ2l2ZXMgLTAsIG5vdCArMC4gICovDQogKHNpbXBs aWZ5DQpAQCAtMTAzMywyMCArMTAzNiwyNCBAQCBERUZJTkVfSU5UX0FORF9G TE9BVF9ST1VORF9GTiAoUklOVCkNCiAgIChtaW51cyAobmVnYXRlIEAxKSBA MCkpKQ0KIA0KIC8qIC0oQSAtIEIpIC0+IEIgLSBBLiAgKi8NCiAoc2ltcGxp ZnkNCiAgKG5lZ2F0ZSAobWludXMgQDAgQDEpKQ0KICAoaWYgKChBTllfSU5U RUdSQUxfVFlQRV9QICh0eXBlKSAmJiAhVFlQRV9PVkVSRkxPV19TQU5JVEla RUQgKHR5cGUpKQ0KICAgICAgIHx8IChGTE9BVF9UWVBFX1AgKHR5cGUpDQog CSAgJiYgIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HICh0eXBlKQ0K IAkgICYmICFIT05PUl9TSUdORURfWkVST1MgKHR5cGUpKSkNCiAgIChtaW51 cyBAMSBAMCkpKQ0KKyhzaW1wbGlmeQ0KKyAobmVnYXRlIChwb2ludGVyX2Rp ZmYgQDAgQDEpKQ0KKyAoaWYgKFRZUEVfT1ZFUkZMT1dfVU5ERUZJTkVEICh0 eXBlKSkNCisgIChwb2ludGVyX2RpZmYgQDEgQDApKSkNCiANCiAvKiBBIC0g QiAtPiBBICsgKC1CKSBpZiBCIGlzIGVhc2lseSBuZWdhdGFibGUuICAqLw0K IChzaW1wbGlmeQ0KICAobWludXMgQDAgbmVnYXRlX2V4cHJfcEAxKQ0KICAo aWYgKCFGSVhFRF9QT0lOVF9UWVBFX1AgKHR5cGUpKQ0KICAocGx1cyBAMCAo bmVnYXRlIEAxKSkpKQ0KIA0KIC8qIFRyeSB0byBmb2xkICh0eXBlKSBYIG9w IENTVCAtPiAodHlwZSkgKFggb3AgKCh0eXBlLXgpIENTVCkpDQogICAgd2hl biBwcm9maXRhYmxlLg0KICAgIEZvciBiaXR3aXNlIGJpbmFyeSBvcGVyYXRp b25zIGFwcGx5IG9wZXJhbmQgY29udmVyc2lvbnMgdG8gdGhlDQpAQCAtMTMz NSwzNiArMTM0Miw1OCBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9ST1VORF9G TiAoUklOVCkNCiAgICAgICAgJiYgVFlQRV9PVkVSRkxPV19VTkRFRklORUQg KFRSRUVfVFlQRSAoQDApKSkNCiAgICAob3AgQDAgQDEpKSkpDQogLyogRm9y IGVxdWFsaXR5IGFuZCBzdWJ0cmFjdGlvbiwgdGhpcyBpcyBhbHNvIHRydWUg d2l0aCB3cmFwcGluZyBvdmVyZmxvdy4gICovDQogKGZvciBvcCAoZXEgbmUg bWludXMpDQogIChzaW1wbGlmeQ0KICAgKG9wIChtaW51cyBAMCBAMikgKG1p bnVzIEAxIEAyKSkNCiAgIChpZiAoQU5ZX0lOVEVHUkFMX1RZUEVfUCAoVFJF RV9UWVBFIChAMCkpDQogICAgICAgICYmIChUWVBFX09WRVJGTE9XX1VOREVG SU5FRCAoVFJFRV9UWVBFIChAMCkpDQogCSAgIHx8IFRZUEVfT1ZFUkZMT1df V1JBUFMgKFRSRUVfVFlQRSAoQDApKSkpDQogICAgKG9wIEAwIEAxKSkpKQ0K Ky8qIEFuZCBmb3IgcG9pbnRlcnMuLi4gICovDQorKGZvciBvcCAoc2ltcGxl X2NvbXBhcmlzb24pDQorIChzaW1wbGlmeQ0KKyAgKG9wIChwb2ludGVyX2Rp ZmZAMyBAMCBAMikgKHBvaW50ZXJfZGlmZiBAMSBAMikpDQorICAoaWYgKCFU WVBFX09WRVJGTE9XX1NBTklUSVpFRCAoVFJFRV9UWVBFIChAMikpKQ0KKyAg IChvcCBAMCBAMSkpKSkNCisoc2ltcGxpZnkNCisgKG1pbnVzIChwb2ludGVy X2RpZmZAMyBAMCBAMikgKHBvaW50ZXJfZGlmZiBAMSBAMikpDQorIChpZiAo VFlQRV9PVkVSRkxPV19VTkRFRklORUQgKFRSRUVfVFlQRSAoQDMpKQ0KKyAg ICAgICYmICFUWVBFX09WRVJGTE9XX1NBTklUSVpFRCAoVFJFRV9UWVBFIChA MikpKQ0KKyAgKHBvaW50ZXJfZGlmZiBAMCBAMSkpKQ0KIA0KIC8qIFogLSBY IDwgWiAtIFkgaXMgdGhlIHNhbWUgYXMgWSA8IFggd2hlbiB0aGVyZSBpcyBu byBvdmVyZmxvdy4gICovDQogKGZvciBvcCAobHQgbGUgZ2UgZ3QpDQogIChz aW1wbGlmeQ0KICAgKG9wIChtaW51cyBAMiBAMCkgKG1pbnVzIEAyIEAxKSkN CiAgIChpZiAoQU5ZX0lOVEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFIChAMCkp DQogICAgICAgICYmIFRZUEVfT1ZFUkZMT1dfVU5ERUZJTkVEIChUUkVFX1RZ UEUgKEAwKSkpDQogICAgKG9wIEAxIEAwKSkpKQ0KIC8qIEZvciBlcXVhbGl0 eSBhbmQgc3VidHJhY3Rpb24sIHRoaXMgaXMgYWxzbyB0cnVlIHdpdGggd3Jh cHBpbmcgb3ZlcmZsb3cuICAqLw0KIChmb3Igb3AgKGVxIG5lIG1pbnVzKQ0K ICAoc2ltcGxpZnkNCiAgIChvcCAobWludXMgQDIgQDApIChtaW51cyBAMiBA MSkpDQogICAoaWYgKEFOWV9JTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAo QDApKQ0KICAgICAgICAmJiAoVFlQRV9PVkVSRkxPV19VTkRFRklORUQgKFRS RUVfVFlQRSAoQDApKQ0KIAkgICB8fCBUWVBFX09WRVJGTE9XX1dSQVBTIChU UkVFX1RZUEUgKEAwKSkpKQ0KICAgIChvcCBAMSBAMCkpKSkNCisvKiBBbmQg Zm9yIHBvaW50ZXJzLi4uICAqLw0KKyhmb3Igb3AgKHNpbXBsZV9jb21wYXJp c29uKQ0KKyAoc2ltcGxpZnkNCisgIChvcCAocG9pbnRlcl9kaWZmQDMgQDIg QDApIChwb2ludGVyX2RpZmYgQDIgQDEpKQ0KKyAgKGlmICghVFlQRV9PVkVS RkxPV19TQU5JVElaRUQgKFRSRUVfVFlQRSAoQDIpKSkNCisgICAob3AgQDEg QDApKSkpDQorKHNpbXBsaWZ5DQorIChtaW51cyAocG9pbnRlcl9kaWZmQDMg QDIgQDApIChwb2ludGVyX2RpZmYgQDIgQDEpKQ0KKyAoaWYgKFRZUEVfT1ZF UkZMT1dfVU5ERUZJTkVEIChUUkVFX1RZUEUgKEAzKSkNCisgICAgICAmJiAh VFlQRV9PVkVSRkxPV19TQU5JVElaRUQgKFRSRUVfVFlQRSAoQDIpKSkNCisg IChwb2ludGVyX2RpZmYgQDEgQDApKSkNCiANCiAvKiBYICsgWSA8IFkgaXMg dGhlIHNhbWUgYXMgWCA8IDAgd2hlbiB0aGVyZSBpcyBubyBvdmVyZmxvdy4g ICovDQogKGZvciBvcCAobHQgbGUgZ3QgZ2UpDQogIChzaW1wbGlmeQ0KICAg KG9wOmMgKHBsdXM6Y0AyIEAwIEAxKSBAMSkNCiAgIChpZiAoQU5ZX0lOVEVH UkFMX1RZUEVfUCAoVFJFRV9UWVBFIChAMCkpDQogICAgICAgICYmIFRZUEVf T1ZFUkZMT1dfVU5ERUZJTkVEIChUUkVFX1RZUEUgKEAwKSkNCiAgICAgICAg JiYgKENPTlNUQU5UX0NMQVNTX1AgKEAwKSB8fCBzaW5nbGVfdXNlIChAMikp KQ0KICAgIChvcCBAMCB7IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKEAw KSk7IH0pKSkpDQogLyogRm9yIGVxdWFsaXR5LCB0aGlzIGlzIGFsc28gdHJ1 ZSB3aXRoIHdyYXBwaW5nIG92ZXJmbG93LiAgKi8NCkBAIC0xNDk5LDIwICsx NTI4LDI0IEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZOIChSSU5U KQ0KICAgICAgdGVtNSA9IHB0cjEgKyB0ZW00Ow0KICAgIGFuZCBwcm9kdWNl DQogICAgICB0ZW01ID0gcHRyMjsgICovDQogKHNpbXBsaWZ5DQogICAocG9p bnRlcl9wbHVzIEAwIChjb252ZXJ0P0AyIChtaW51c0AzIChjb252ZXJ0IEAx KSAoY29udmVydCBAMCkpKSkNCiAgIC8qIENvbmRpdGlvbmFsbHkgbG9vayB0 aHJvdWdoIGEgc2lnbi1jaGFuZ2luZyBjb252ZXJzaW9uLiAgKi8NCiAgIChp ZiAoVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoQDIpKSA9PSBUWVBFX1BS RUNJU0lPTiAoVFJFRV9UWVBFIChAMykpDQogICAgICAgICYmICgoR0lNUExF ICYmIHVzZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKHR5cGUsIFRSRUVfVFlQ RSAoQDEpKSkNCiAJICAgIHx8IChHRU5FUklDICYmIHR5cGUgPT0gVFJFRV9U WVBFIChAMSkpKSkNCiAgICBAMSkpDQorKHNpbXBsaWZ5DQorICAocG9pbnRl cl9wbHVzIEAwIChjb252ZXJ0P0AyIChwb2ludGVyX2RpZmZAMyBAMSBAQDAp KSkNCisgIChpZiAoVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoQDIpKSA+ PSBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChAMykpKQ0KKyAgIChjb252 ZXJ0IEAxKSkpDQogDQogLyogUGF0dGVybiBtYXRjaA0KICAgICAgdGVtID0g KHNpemV0eXBlKSBwdHI7DQogICAgICB0ZW0gPSB0ZW0gJiBhbGduOw0KICAg ICAgdGVtID0gLXRlbTsNCiAgICAgIC4uLiA9IHB0ciBwKyB0ZW07DQogICAg YW5kIHByb2R1Y2UgdGhlIHNpbXBsZXIgYW5kIGVhc2llciB0byBhbmFseXpl IHdpdGggcmVzcGVjdCB0byBhbGlnbm1lbnQNCiAgICAgIC4uLiA9IHB0ciAm IH5hbGduOyAgKi8NCiAoc2ltcGxpZnkNCiAgIChwb2ludGVyX3BsdXMgQDAg KG5lZ2F0ZSAoYml0X2FuZCAoY29udmVydCBAMCkgSU5URUdFUl9DU1RAMSkp KQ0KQEAgLTE1MjUsMjAgKzE1NTgsMzQgQEAgREVGSU5FX0lOVF9BTkRfRkxP QVRfUk9VTkRfRk4gKFJJTlQpDQogIChpZiAodHJlZV9ub3BfY29udmVyc2lv bl9wICh0eXBlLCBUUkVFX1RZUEUgKEAwKSkpDQogICAod2l0aCB7IEhPU1Rf V0lERV9JTlQgZGlmZjsgfQ0KICAgIChpZiAocHRyX2RpZmZlcmVuY2VfY29u c3QgKEAwLCBAMSwgJmRpZmYpKQ0KICAgICB7IGJ1aWxkX2ludF9jc3RfdHlw ZSAodHlwZSwgZGlmZik7IH0pKSkpDQogKHNpbXBsaWZ5DQogIChtaW51cyAo Y29udmVydCBAMCkgKGNvbnZlcnQgQUREUl9FWFBSQDEpKQ0KICAoaWYgKHRy ZWVfbm9wX2NvbnZlcnNpb25fcCAodHlwZSwgVFJFRV9UWVBFIChAMCkpKQ0K ICAgKHdpdGggeyBIT1NUX1dJREVfSU5UIGRpZmY7IH0NCiAgICAoaWYgKHB0 cl9kaWZmZXJlbmNlX2NvbnN0IChAMCwgQDEsICZkaWZmKSkNCiAgICAgeyBi dWlsZF9pbnRfY3N0X3R5cGUgKHR5cGUsIGRpZmYpOyB9KSkpKQ0KKyhzaW1w bGlmeQ0KKyAocG9pbnRlcl9kaWZmIChjb252ZXJ0P0AyIEFERFJfRVhQUkAw KSAoY29udmVydD9AMyBAMSkpDQorIChpZiAodHJlZV9ub3BfY29udmVyc2lv bl9wIChUUkVFX1RZUEUoQDIpLCBUUkVFX1RZUEUgKEAwKSkNCisgICAgICAm JiB0cmVlX25vcF9jb252ZXJzaW9uX3AgKFRSRUVfVFlQRShAMyksIFRSRUVf VFlQRSAoQDEpKSkNCisgICh3aXRoIHsgSE9TVF9XSURFX0lOVCBkaWZmOyB9 DQorICAgKGlmIChwdHJfZGlmZmVyZW5jZV9jb25zdCAoQDAsIEAxLCAmZGlm ZikpDQorICAgIHsgYnVpbGRfaW50X2NzdF90eXBlICh0eXBlLCBkaWZmKTsg fSkpKSkNCisoc2ltcGxpZnkNCisgKHBvaW50ZXJfZGlmZiAoY29udmVydD9A MiBAMCkgKGNvbnZlcnQ/QDMgQUREUl9FWFBSQDEpKQ0KKyAoaWYgKHRyZWVf bm9wX2NvbnZlcnNpb25fcCAoVFJFRV9UWVBFKEAyKSwgVFJFRV9UWVBFIChA MCkpDQorICAgICAgJiYgdHJlZV9ub3BfY29udmVyc2lvbl9wIChUUkVFX1RZ UEUoQDMpLCBUUkVFX1RZUEUgKEAxKSkpDQorICAod2l0aCB7IEhPU1RfV0lE RV9JTlQgZGlmZjsgfQ0KKyAgIChpZiAocHRyX2RpZmZlcmVuY2VfY29uc3Qg KEAwLCBAMSwgJmRpZmYpKQ0KKyAgICB7IGJ1aWxkX2ludF9jc3RfdHlwZSAo dHlwZSwgZGlmZik7IH0pKSkpDQogDQogLyogSWYgYXJnMCBpcyBkZXJpdmVk IGZyb20gdGhlIGFkZHJlc3Mgb2YgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uLCB3 ZSBtYXkNCiAgICBiZSBhYmxlIHRvIGZvbGQgdGhpcyBleHByZXNzaW9uIHVz aW5nIHRoZSBvYmplY3Qgb3IgZnVuY3Rpb24ncw0KICAgIGFsaWdubWVudC4g ICovDQogKHNpbXBsaWZ5DQogIChiaXRfYW5kIChjb252ZXJ0PyBAMCkgSU5U RUdFUl9DU1RAMSkNCiAgKGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBF IChAMCkpDQogICAgICAgJiYgdHJlZV9ub3BfY29udmVyc2lvbl9wICh0eXBl LCBUUkVFX1RZUEUgKEAwKSkpDQogICAod2l0aA0KICAgIHsNCkBAIC0xNjM3 LDIwICsxNjg0LDI1IEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZO IChSSU5UKQ0KICAgLyogKEEgKy0gQikgKyAoQyAtIEEpICAgLT4gQyArLSBC ICovDQogICAvKiAoQSArICBCKSAtIChBIC0gQykgICAtPiBCICsgQyAqLw0K ICAgLyogTW9yZSBjYXNlcyBhcmUgaGFuZGxlZCB3aXRoIGNvbXBhcmlzb25z LiAgKi8NCiAgIChzaW1wbGlmeQ0KICAgIChwbHVzOmMgKHBsdXM6YyBAMCBA MSkgKG1pbnVzIEAyIEAwKSkNCiAgICAocGx1cyBAMiBAMSkpDQogICAoc2lt cGxpZnkNCiAgICAocGx1czpjIChtaW51cyBAMCBAMSkgKG1pbnVzIEAyIEAw KSkNCiAgICAobWludXMgQDIgQDEpKQ0KICAgKHNpbXBsaWZ5DQorICAgKHBs dXM6YyAocG9pbnRlcl9kaWZmIEAwIEAxKSAocG9pbnRlcl9kaWZmIEAyIEAw KSkNCisgICAoaWYgKFRZUEVfT1ZFUkZMT1dfVU5ERUZJTkVEICh0eXBlKQ0K KwkmJiAhVFlQRV9PVkVSRkxPV19TQU5JVElaRUQgKFRSRUVfVFlQRSAoQDAp KSkNCisgICAgKHBvaW50ZXJfZGlmZiBAMiBAMSkpKQ0KKyAgKHNpbXBsaWZ5 DQogICAgKG1pbnVzIChwbHVzOmMgQDAgQDEpIChtaW51cyBAMCBAMikpDQog ICAgKHBsdXMgQDEgQDIpKQ0KIA0KICAgLyogKEEgKy0gQ1NUMSkgKy0gQ1NU MiAtPiBBICsgQ1NUMw0KICAgICAgVXNlIHZpZXdfY29udmVydCBiZWNhdXNl IGl0IGlzIHNhZmUgZm9yIHZlY3RvcnMgYW5kIGVxdWl2YWxlbnQgZm9yDQog ICAgICBzY2FsYXJzLiAgKi8NCiAgIChmb3Igb3V0ZXJfb3AgKHBsdXMgbWlu dXMpDQogICAgKGZvciBpbm5lcl9vcCAocGx1cyBtaW51cykNCiAJbmVnX2lu bmVyX29wIChtaW51cyBwbHVzKQ0KICAgICAoc2ltcGxpZnkNCkBAIC0xNzQx LDIwICsxNzkzLDI2IEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZO IChSSU5UKQ0KIAkgfHwgKElOVEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFIChA MCkpDQogCSAgICAgJiYgVFlQRV9PVkVSRkxPV19VTkRFRklORUQgKFRSRUVf VFlQRSAoQDApKSkNCiAJIC8qIEZvciBwb2ludGVyIHR5cGVzLCBpZiB0aGUg Y29udmVyc2lvbiBvZiBBIHRvIHRoZQ0KIAkgICAgZmluYWwgdHlwZSByZXF1 aXJlcyBhIHNpZ24tIG9yIHplcm8tZXh0ZW5zaW9uLA0KIAkgICAgdGhlbiB3 ZSBoYXZlIHRvIHB1bnQgLSBpdCBpcyBub3QgZGVmaW5lZCB3aGljaA0KIAkg ICAgb25lIGlzIGNvcnJlY3QuICAqLw0KIAkgfHwgKFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKEAwKSkNCiAJICAgICAmJiBUUkVFX0NPREUgKEAxKSA9 PSBJTlRFR0VSX0NTVA0KIAkgICAgICYmIHRyZWVfaW50X2NzdF9zaWduX2Jp dCAoQDEpID09IDApKQ0KICAgICAgKGNvbnZlcnQgQDEpKSkpDQorICAgKHNp bXBsaWZ5DQorICAgIChwb2ludGVyX2RpZmYgKHBvaW50ZXJfcGx1cyBAQDAg QDEpIEAwKQ0KKyAgICAvKiBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHBvaW50 ZXJfcGx1cyBtdXN0IGJlIGludGVycHJldGVkIGFzIHNpZ25lZCwgYW5kDQor ICAgICAgIHRodXMgc2lnbi1leHRlbmRlZCBpZiBuZWNlc3NhcnkuICAqLw0K KyAgICAod2l0aCB7IHRyZWUgc3R5cGUgPSBzaWduZWRfdHlwZV9mb3IgKFRS RUVfVFlQRSAoQDEpKTsgfQ0KKyAgICAgKGNvbnZlcnQgKGNvbnZlcnQ6c3R5 cGUgQDEpKSkpDQogDQogICAvKiAoVClQIC0gKFQpKFAgKyBBKSAtPiAtKFQp IEEgKi8NCiAgIChmb3IgYWRkIChwbHVzIHBvaW50ZXJfcGx1cykNCiAgICAo c2ltcGxpZnkNCiAgICAgKG1pbnVzIChjb252ZXJ0IEAwKQ0KICAgICAgKGNv bnZlcnQgKGFkZCBAQDAgQDEpKSkNCiAgICAgKGlmIChlbGVtZW50X3ByZWNp c2lvbiAodHlwZSkgPD0gZWxlbWVudF9wcmVjaXNpb24gKFRSRUVfVFlQRSAo QDEpKQ0KIAkgLyogRm9yIGludGVnZXIgdHlwZXMsIGlmIEEgaGFzIGEgc21h bGxlciB0eXBlDQogCSAgICB0aGFuIFQgdGhlIHJlc3VsdCBkZXBlbmRzIG9u IHRoZSBwb3NzaWJsZQ0KIAkgICAgb3ZlcmZsb3cgaW4gUCArIEEuDQpAQCAt MTc2NSwyMCArMTgyMywyNiBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9ST1VO RF9GTiAoUklOVCkNCiAJIHx8IChJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQ RSAoQDApKQ0KIAkgICAgICYmIFRZUEVfT1ZFUkZMT1dfVU5ERUZJTkVEIChU UkVFX1RZUEUgKEAwKSkpDQogCSAvKiBGb3IgcG9pbnRlciB0eXBlcywgaWYg dGhlIGNvbnZlcnNpb24gb2YgQSB0byB0aGUNCiAJICAgIGZpbmFsIHR5cGUg cmVxdWlyZXMgYSBzaWduLSBvciB6ZXJvLWV4dGVuc2lvbiwNCiAJICAgIHRo ZW4gd2UgaGF2ZSB0byBwdW50IC0gaXQgaXMgbm90IGRlZmluZWQgd2hpY2gN CiAJICAgIG9uZSBpcyBjb3JyZWN0LiAgKi8NCiAJIHx8IChQT0lOVEVSX1RZ UEVfUCAoVFJFRV9UWVBFIChAMCkpDQogCSAgICAgJiYgVFJFRV9DT0RFIChA MSkgPT0gSU5URUdFUl9DU1QNCiAJICAgICAmJiB0cmVlX2ludF9jc3Rfc2ln bl9iaXQgKEAxKSA9PSAwKSkNCiAgICAgIChuZWdhdGUgKGNvbnZlcnQgQDEp KSkpKQ0KKyAgIChzaW1wbGlmeQ0KKyAgICAocG9pbnRlcl9kaWZmIEAwIChw b2ludGVyX3BsdXMgQEAwIEAxKSkNCisgICAgLyogVGhlIHNlY29uZCBhcmd1 bWVudCBvZiBwb2ludGVyX3BsdXMgbXVzdCBiZSBpbnRlcnByZXRlZCBhcyBz aWduZWQsIGFuZA0KKyAgICAgICB0aHVzIHNpZ24tZXh0ZW5kZWQgaWYgbmVj ZXNzYXJ5LiAgKi8NCisgICAgKHdpdGggeyB0cmVlIHN0eXBlID0gc2lnbmVk X3R5cGVfZm9yIChUUkVFX1RZUEUgKEAxKSk7IH0NCisgICAgIChuZWdhdGUg KGNvbnZlcnQgKGNvbnZlcnQ6c3R5cGUgQDEpKSkpKQ0KIA0KICAgLyogKFQp KFAgKyBBKSAtIChUKShQICsgQikgLT4gKFQpQSAtIChUKUIgKi8NCiAgIChm b3IgYWRkIChwbHVzIHBvaW50ZXJfcGx1cykNCiAgICAoc2ltcGxpZnkNCiAg ICAgKG1pbnVzIChjb252ZXJ0IChhZGQgQEAwIEAxKSkNCiAgICAgIChjb252 ZXJ0IChhZGQgQDAgQDIpKSkNCiAgICAgKGlmIChlbGVtZW50X3ByZWNpc2lv biAodHlwZSkgPD0gZWxlbWVudF9wcmVjaXNpb24gKFRSRUVfVFlQRSAoQDEp KQ0KIAkgLyogRm9yIGludGVnZXIgdHlwZXMsIGlmIEEgaGFzIGEgc21hbGxl ciB0eXBlDQogCSAgICB0aGFuIFQgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRo ZSBwb3NzaWJsZQ0KIAkgICAgb3ZlcmZsb3cgaW4gUCArIEEuDQpAQCAtMTc5 MSwyMCArMTg1NSwyNiBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9ST1VORF9G TiAoUklOVCkNCiAJIC8qIEZvciBwb2ludGVyIHR5cGVzLCBpZiB0aGUgY29u dmVyc2lvbiBvZiBBIHRvIHRoZQ0KIAkgICAgZmluYWwgdHlwZSByZXF1aXJl cyBhIHNpZ24tIG9yIHplcm8tZXh0ZW5zaW9uLA0KIAkgICAgdGhlbiB3ZSBo YXZlIHRvIHB1bnQgLSBpdCBpcyBub3QgZGVmaW5lZCB3aGljaA0KIAkgICAg b25lIGlzIGNvcnJlY3QuICAqLw0KIAkgfHwgKFBPSU5URVJfVFlQRV9QIChU UkVFX1RZUEUgKEAwKSkNCiAJICAgICAmJiBUUkVFX0NPREUgKEAxKSA9PSBJ TlRFR0VSX0NTVA0KIAkgICAgICYmIHRyZWVfaW50X2NzdF9zaWduX2JpdCAo QDEpID09IDANCiAJICAgICAmJiBUUkVFX0NPREUgKEAyKSA9PSBJTlRFR0VS X0NTVA0KIAkgICAgICYmIHRyZWVfaW50X2NzdF9zaWduX2JpdCAoQDIpID09 IDApKQ0KICAgICAgKG1pbnVzIChjb252ZXJ0IEAxKSAoY29udmVydCBAMikp KSkpKSkNCisgICAoc2ltcGxpZnkNCisgICAgKHBvaW50ZXJfZGlmZiAocG9p bnRlcl9wbHVzIEBAMCBAMSkgKHBvaW50ZXJfcGx1cyBAMCBAMikpDQorICAg IC8qIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgcG9pbnRlcl9wbHVzIG11c3Qg YmUgaW50ZXJwcmV0ZWQgYXMgc2lnbmVkLCBhbmQNCisgICAgICAgdGh1cyBz aWduLWV4dGVuZGVkIGlmIG5lY2Vzc2FyeS4gICovDQorICAgICh3aXRoIHsg dHJlZSBzdHlwZSA9IHNpZ25lZF90eXBlX2ZvciAoVFJFRV9UWVBFIChAMSkp OyB9DQorICAgICAobWludXMgKGNvbnZlcnQgKGNvbnZlcnQ6c3R5cGUgQDEp KSAoY29udmVydCAoY29udmVydDpzdHlwZSBAMikpKSkpDQogDQogDQogLyog U2ltcGxpZmljYXRpb25zIG9mIE1JTl9FWFBSLCBNQVhfRVhQUiwgZm1pbigp IGFuZCBmbWF4KCkuICAqLw0KIA0KIChmb3IgbWlubWF4IChtaW4gbWF4IEZN SU4gRk1JTl9GTiBGTUFYIEZNQVhfRk4pDQogIChzaW1wbGlmeQ0KICAgKG1p bm1heCBAMCBAMCkNCiAgIEAwKSkNCiAvKiBtaW4obWF4KHgseSkseSkgLT4g eS4gICovDQogKHNpbXBsaWZ5DQpAQCAtMjc5MCwyNCArMjg2MCwyNSBAQCBE RUZJTkVfSU5UX0FORF9GTE9BVF9ST1VORF9GTiAoUklOVCkNCiAgICAgKGlj bXAgQDAgQDEpDQogICAgIChpZiAoaWMgPT0gbmNtcCkNCiAgICAgIChuY21w IEAwIEAxKSkpKSkpDQogDQogLyogVHJhbnNmb3JtIGNvbXBhcmlzb25zIG9m IHRoZSBmb3JtIFggLSBZIENNUCAwIHRvIFggQ01QIFkuDQogICAgPz8/IFRo ZSB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBmb3IgdGhlIG90aGVyIG9wZXJh dG9ycyBpZiBvdmVyZmxvdw0KICAgIGlzIHVuZGVmaW5lZCBmb3IgdGhlIHR5 cGUsIGJ1dCBwZXJmb3JtaW5nIGl0IGhlcmUgYmFkbHkgaW50ZXJhY3RzDQog ICAgd2l0aCB0aGUgdHJhbnNmb3JtYXRpb24gaW4gZm9sZF9jb25kX2V4cHJf d2l0aF9jb21wYXJpc29uIHdoaWNoDQogICAgYXR0ZW1wdHMgdG8gc3ludGhl dGl6ZSBBQlNfRVhQUi4gICovDQogKGZvciBjbXAgKGVxIG5lKQ0KLSAoc2lt cGxpZnkNCi0gIChjbXAgKG1pbnVzQDIgQDAgQDEpIGludGVnZXJfemVyb3Ap DQotICAoaWYgKHNpbmdsZV91c2UgKEAyKSkNCi0gICAoY21wIEAwIEAxKSkp KQ0KKyAoZm9yIHN1YiAobWludXMgcG9pbnRlcl9kaWZmKQ0KKyAgKHNpbXBs aWZ5DQorICAgKGNtcCAoc3ViQDIgQDAgQDEpIGludGVnZXJfemVyb3ApDQor ICAgKGlmIChzaW5nbGVfdXNlIChAMikpDQorICAgIChjbXAgQDAgQDEpKSkp KQ0KIA0KIC8qIFRyYW5zZm9ybSBjb21wYXJpc29ucyBvZiB0aGUgZm9ybSBY ICogQzEgQ01QIDAgdG8gWCBDTVAgMCBpbiB0aGUNCiAgICBzaWduZWQgYXJp dGhtZXRpYyBjYXNlLiAgVGhhdCBmb3JtIGlzIGNyZWF0ZWQgYnkgdGhlIGNv bXBpbGVyDQogICAgb2Z0ZW4gZW5vdWdoIGZvciBmb2xkaW5nIGl0IHRvIGJl IG9mIHZhbHVlLiAgT25lIGV4YW1wbGUgaXMgaW4NCiAgICBjb21wdXRpbmcg bG9vcCB0cmlwIGNvdW50cyBhZnRlciBPcGVyYXRvciBTdHJlbmd0aCBSZWR1 Y3Rpb24uICAqLw0KIChmb3IgY21wIChzaW1wbGVfY29tcGFyaXNvbikNCiAg ICAgIHNjbXAgKHN3YXBwZWRfc2ltcGxlX2NvbXBhcmlzb24pDQogIChzaW1w bGlmeQ0KICAgKGNtcCAobXVsdEAzIEAwIElOVEVHRVJfQ1NUQDEpIGludGVn ZXJfemVyb3BAMikNCiAgIC8qIEhhbmRsZSB1bmZvbGRlZCBtdWx0aXBsaWNh dGlvbiBieSB6ZXJvLiAgKi8NCkluZGV4OiBnY2Mvb3B0YWJzLXRyZWUuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9vcHRhYnMtdHJlZS5j CShyZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL29wdGFicy10cmVlLmMJKHdv cmtpbmcgY29weSkNCkBAIC0yMTYsMjAgKzIxNiwyMSBAQCBvcHRhYl9mb3Jf dHJlZV9jb2RlIChlbnVtIHRyZWVfY29kZSBjb2RlDQogDQogICB0cmFwdiA9 IElOVEVHUkFMX1RZUEVfUCAodHlwZSkgJiYgVFlQRV9PVkVSRkxPV19UUkFQ UyAodHlwZSk7DQogICBzd2l0Y2ggKGNvZGUpDQogICAgIHsNCiAgICAgY2Fz ZSBQT0lOVEVSX1BMVVNfRVhQUjoNCiAgICAgY2FzZSBQTFVTX0VYUFI6DQog ICAgICAgaWYgKFRZUEVfU0FUVVJBVElORyAodHlwZSkpDQogCXJldHVybiBU WVBFX1VOU0lHTkVEICh0eXBlKSA/IHVzYWRkX29wdGFiIDogc3NhZGRfb3B0 YWI7DQogICAgICAgcmV0dXJuIHRyYXB2ID8gYWRkdl9vcHRhYiA6IGFkZF9v cHRhYjsNCiANCisgICAgY2FzZSBQT0lOVEVSX0RJRkZfRVhQUjoNCiAgICAg Y2FzZSBNSU5VU19FWFBSOg0KICAgICAgIGlmIChUWVBFX1NBVFVSQVRJTkcg KHR5cGUpKQ0KIAlyZXR1cm4gVFlQRV9VTlNJR05FRCAodHlwZSkgPyB1c3N1 Yl9vcHRhYiA6IHNzc3ViX29wdGFiOw0KICAgICAgIHJldHVybiB0cmFwdiA/ IHN1YnZfb3B0YWIgOiBzdWJfb3B0YWI7DQogDQogICAgIGNhc2UgTVVMVF9F WFBSOg0KICAgICAgIGlmIChUWVBFX1NBVFVSQVRJTkcgKHR5cGUpKQ0KIAly ZXR1cm4gVFlQRV9VTlNJR05FRCAodHlwZSkgPyB1c211bF9vcHRhYiA6IHNz bXVsX29wdGFiOw0KICAgICAgIHJldHVybiB0cmFwdiA/IHNtdWx2X29wdGFi IDogc211bF9vcHRhYjsNCiANCkluZGV4OiBnY2MvdHJlZS1jZmcuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90cmVlLWNmZy5jCShyZXZp c2lvbiAyNTQ4OTYpDQorKysgZ2NjL3RyZWUtY2ZnLmMJKHdvcmtpbmcgY29w eSkNCkBAIC0zMTM1LDIwICszMTM1LDM5IEBAIHZlcmlmeV9leHByICh0cmVl ICp0cCwgaW50ICp3YWxrX3N1YnRyZWUNCiAJIFBPSU5URVJfUExVU19FWFBS LiAqLw0KICAgICAgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFICh0 KSkpDQogCXsNCiAJICBlcnJvciAoImludmFsaWQgb3BlcmFuZCB0byBwbHVz L21pbnVzLCB0eXBlIGlzIGEgcG9pbnRlciIpOw0KIAkgIHJldHVybiB0Ow0K IAl9DQogICAgICAgQ0hFQ0tfT1AgKDAsICJpbnZhbGlkIG9wZXJhbmQgdG8g YmluYXJ5IG9wZXJhdG9yIik7DQogICAgICAgQ0hFQ0tfT1AgKDEsICJpbnZh bGlkIG9wZXJhbmQgdG8gYmluYXJ5IG9wZXJhdG9yIik7DQogICAgICAgYnJl YWs7DQogDQorICAgIGNhc2UgUE9JTlRFUl9ESUZGX0VYUFI6DQorICAgICAg aWYgKCFQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQg KHQsIDApKSkNCisJICB8fCAhUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAo VFJFRV9PUEVSQU5EICh0LCAxKSkpKQ0KKwl7DQorCSAgZXJyb3IgKCJpbnZh bGlkIG9wZXJhbmQgdG8gcG9pbnRlciBkaWZmLCBvcGVyYW5kIGlzIG5vdCBh IHBvaW50ZXIiKTsNCisJICByZXR1cm4gdDsNCisJfQ0KKyAgICAgIGlmIChU UkVFX0NPREUgKFRSRUVfVFlQRSAodCkpICE9IElOVEVHRVJfVFlQRQ0KKwkg IHx8IFRZUEVfVU5TSUdORUQgKFRSRUVfVFlQRSAodCkpDQorCSAgfHwgKFRZ UEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKHQpKQ0KKwkgICAgICAhPSBUWVBF X1BSRUNJU0lPTiAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKHQsIDApKSkp KQ0KKwl7DQorCSAgZXJyb3IgKCJpbnZhbGlkIHR5cGUgZm9yIHBvaW50ZXIg ZGlmZiIpOw0KKwkgIHJldHVybiB0Ow0KKwl9DQorICAgICAgQ0hFQ0tfT1Ag KDAsICJpbnZhbGlkIG9wZXJhbmQgdG8gcG9pbnRlciBkaWZmIik7DQorICAg ICAgQ0hFQ0tfT1AgKDEsICJpbnZhbGlkIG9wZXJhbmQgdG8gcG9pbnRlciBk aWZmIik7DQorICAgICAgYnJlYWs7DQorDQogICAgIGNhc2UgUE9JTlRFUl9Q TFVTX0VYUFI6DQogICAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBm aXJzdCBvcGVyYW5kIGlzIGEgcG9pbnRlciBvciByZWZlcmVuY2UgdHlwZS4g Ki8NCiAgICAgICBpZiAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKFRS RUVfT1BFUkFORCAodCwgMCkpKSkNCiAJew0KIAkgIGVycm9yICgiaW52YWxp ZCBvcGVyYW5kIHRvIHBvaW50ZXIgcGx1cywgZmlyc3Qgb3BlcmFuZCBpcyBu b3QgYSBwb2ludGVyIik7DQogCSAgcmV0dXJuIHQ7DQogCX0NCiAgICAgICAv KiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGEg cHRyb2ZmdHlwZS4gICovDQogICAgICAgaWYgKCFwdHJvZmZ0eXBlX3AgKFRS RUVfVFlQRSAoVFJFRV9PUEVSQU5EICh0LCAxKSkpKQ0KIAl7DQpAQCAtMzk3 MCwyMCArMzk4OSwzOSBAQCB2ZXJpZnlfZ2ltcGxlX2Fzc2lnbl9iaW5hcnkg KGdhc3NpZ24gKnN0DQogCSAgICBlcnJvciAoInR5cGUgbWlzbWF0Y2ggaW4g cG9pbnRlciBwbHVzIGV4cHJlc3Npb24iKTsNCiAJICAgIGRlYnVnX2dlbmVy aWNfc3RtdCAobGhzX3R5cGUpOw0KIAkgICAgZGVidWdfZ2VuZXJpY19zdG10 IChyaHMxX3R5cGUpOw0KIAkgICAgZGVidWdfZ2VuZXJpY19zdG10IChyaHMy X3R5cGUpOw0KIAkgICAgcmV0dXJuIHRydWU7DQogCSAgfQ0KIA0KIAlyZXR1 cm4gZmFsc2U7DQogICAgICAgfQ0KIA0KKyAgICBjYXNlIFBPSU5URVJfRElG Rl9FWFBSOg0KKyAgICAgIHsNCisJaWYgKCFQT0lOVEVSX1RZUEVfUCAocmhz MV90eXBlKQ0KKwkgICAgfHwgIVBPSU5URVJfVFlQRV9QIChyaHMyX3R5cGUp DQorCSAgICB8fCAhdHlwZXNfY29tcGF0aWJsZV9wIChyaHMxX3R5cGUsIHJo czJfdHlwZSkNCisJICAgIHx8IFRSRUVfQ09ERSAobGhzX3R5cGUpICE9IElO VEVHRVJfVFlQRQ0KKwkgICAgfHwgVFlQRV9VTlNJR05FRCAobGhzX3R5cGUp DQorCSAgICB8fCBUWVBFX1BSRUNJU0lPTiAobGhzX3R5cGUpICE9IFRZUEVf UFJFQ0lTSU9OIChyaHMxX3R5cGUpKQ0KKwkgIHsNCisJICAgIGVycm9yICgi dHlwZSBtaXNtYXRjaCBpbiBwb2ludGVyIGRpZmYgZXhwcmVzc2lvbiIpOw0K KwkgICAgZGVidWdfZ2VuZXJpY19zdG10IChsaHNfdHlwZSk7DQorCSAgICBk ZWJ1Z19nZW5lcmljX3N0bXQgKHJoczFfdHlwZSk7DQorCSAgICBkZWJ1Z19n ZW5lcmljX3N0bXQgKHJoczJfdHlwZSk7DQorCSAgICByZXR1cm4gdHJ1ZTsN CisJICB9DQorDQorCXJldHVybiBmYWxzZTsNCisgICAgICB9DQorDQogICAg IGNhc2UgVFJVVEhfQU5ESUZfRVhQUjoNCiAgICAgY2FzZSBUUlVUSF9PUklG X0VYUFI6DQogICAgIGNhc2UgVFJVVEhfQU5EX0VYUFI6DQogICAgIGNhc2Ug VFJVVEhfT1JfRVhQUjoNCiAgICAgY2FzZSBUUlVUSF9YT1JfRVhQUjoNCiAN CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQogDQogICAgIGNhc2UgTFRf RVhQUjoNCiAgICAgY2FzZSBMRV9FWFBSOg0KSW5kZXg6IGdjYy90cmVlLWlu bGluZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3RyZWUt aW5saW5lLmMJKHJldmlzaW9uIDI1NDg5NikNCisrKyBnY2MvdHJlZS1pbmxp bmUuYwkod29ya2luZyBjb3B5KQ0KQEAgLTM4MTAsMjAgKzM4MTAsMjEgQEAg ZXN0aW1hdGVfb3BlcmF0b3JfY29zdCAoZW51bSB0cmVlX2NvZGUgYw0KICAg ICAgIHJldHVybiAwOw0KIA0KICAgICAvKiBBc3NpZ24gY29zdCBvZiAxIHRv IHVzdWFsIG9wZXJhdGlvbnMuDQogICAgICAgID8/PyBXZSBtYXkgY29uc2lk ZXIgbWFwcGluZyBSVEwgY29zdHMgdG8gdGhpcy4gICovDQogICAgIGNhc2Ug Q09ORF9FWFBSOg0KICAgICBjYXNlIFZFQ19DT05EX0VYUFI6DQogICAgIGNh c2UgVkVDX1BFUk1fRVhQUjoNCiANCiAgICAgY2FzZSBQTFVTX0VYUFI6DQog ICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQorICAgIGNhc2UgUE9JTlRF Ul9ESUZGX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCiAgICAgY2Fz ZSBNVUxUX0VYUFI6DQogICAgIGNhc2UgTVVMVF9ISUdIUEFSVF9FWFBSOg0K ICAgICBjYXNlIEZNQV9FWFBSOg0KIA0KICAgICBjYXNlIEFERFJfU1BBQ0Vf Q09OVkVSVF9FWFBSOg0KICAgICBjYXNlIEZJWEVEX0NPTlZFUlRfRVhQUjoN CiAgICAgY2FzZSBGSVhfVFJVTkNfRVhQUjoNCiANCiAgICAgY2FzZSBORUdB VEVfRVhQUjoNCkluZGV4OiBnY2MvdHJlZS1wcmV0dHktcHJpbnQuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90cmVlLXByZXR0eS1wcmlu dC5jCShyZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL3RyZWUtcHJldHR5LXBy aW50LmMJKHdvcmtpbmcgY29weSkNCkBAIC0yMzAxLDIwICsyMzAxLDIxIEBA IGR1bXBfZ2VuZXJpY19ub2RlIChwcmV0dHlfcHJpbnRlciAqcHAsIHQNCiAg ICAgICBwcF9ncmVhdGVyIChwcCk7DQogICAgICAgYnJlYWs7DQogDQogICAg ICAgLyogQmluYXJ5IGFyaXRobWV0aWMgYW5kIGxvZ2ljIGV4cHJlc3Npb25z LiAgKi8NCiAgICAgY2FzZSBXSURFTl9TVU1fRVhQUjoNCiAgICAgY2FzZSBX SURFTl9NVUxUX0VYUFI6DQogICAgIGNhc2UgTVVMVF9FWFBSOg0KICAgICBj YXNlIE1VTFRfSElHSFBBUlRfRVhQUjoNCiAgICAgY2FzZSBQTFVTX0VYUFI6 DQogICAgIGNhc2UgUE9JTlRFUl9QTFVTX0VYUFI6DQorICAgIGNhc2UgUE9J TlRFUl9ESUZGX0VYUFI6DQogICAgIGNhc2UgTUlOVVNfRVhQUjoNCiAgICAg Y2FzZSBUUlVOQ19ESVZfRVhQUjoNCiAgICAgY2FzZSBDRUlMX0RJVl9FWFBS Og0KICAgICBjYXNlIEZMT09SX0RJVl9FWFBSOg0KICAgICBjYXNlIFJPVU5E X0RJVl9FWFBSOg0KICAgICBjYXNlIFRSVU5DX01PRF9FWFBSOg0KICAgICBj YXNlIENFSUxfTU9EX0VYUFI6DQogICAgIGNhc2UgRkxPT1JfTU9EX0VYUFI6 DQogICAgIGNhc2UgUk9VTkRfTU9EX0VYUFI6DQogICAgIGNhc2UgUkRJVl9F WFBSOg0KQEAgLTM1NDYsMjAgKzM1NDcsMjEgQEAgb3BfY29kZV9wcmlvIChl bnVtIHRyZWVfY29kZSBjb2RlKQ0KICAgICBjYXNlIExST1RBVEVfRVhQUjoN CiAgICAgY2FzZSBSUk9UQVRFX0VYUFI6DQogICAgIGNhc2UgVkVDX1dJREVO X0xTSElGVF9ISV9FWFBSOg0KICAgICBjYXNlIFZFQ19XSURFTl9MU0hJRlRf TE9fRVhQUjoNCiAgICAgY2FzZSBXSURFTl9MU0hJRlRfRVhQUjoNCiAgICAg ICByZXR1cm4gMTE7DQogDQogICAgIGNhc2UgV0lERU5fU1VNX0VYUFI6DQog ICAgIGNhc2UgUExVU19FWFBSOg0KICAgICBjYXNlIFBPSU5URVJfUExVU19F WFBSOg0KKyAgICBjYXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAgICBjYXNl IE1JTlVTX0VYUFI6DQogICAgICAgcmV0dXJuIDEyOw0KIA0KICAgICBjYXNl IFZFQ19XSURFTl9NVUxUX0hJX0VYUFI6DQogICAgIGNhc2UgVkVDX1dJREVO X01VTFRfTE9fRVhQUjoNCiAgICAgY2FzZSBXSURFTl9NVUxUX0VYUFI6DQog ICAgIGNhc2UgRE9UX1BST0RfRVhQUjoNCiAgICAgY2FzZSBXSURFTl9NVUxU X1BMVVNfRVhQUjoNCiAgICAgY2FzZSBXSURFTl9NVUxUX01JTlVTX0VYUFI6 DQogICAgIGNhc2UgTVVMVF9FWFBSOg0KQEAgLTM3MzIsMjAgKzM3MzQsMjEg QEAgb3Bfc3ltYm9sX2NvZGUgKGVudW0gdHJlZV9jb2RlIGNvZGUpDQogICAg ICAgcmV0dXJuICJ3KyI7DQogDQogICAgIGNhc2UgV0lERU5fTVVMVF9FWFBS Og0KICAgICAgIHJldHVybiAidyoiOw0KIA0KICAgICBjYXNlIE1VTFRfSElH SFBBUlRfRVhQUjoNCiAgICAgICByZXR1cm4gImgqIjsNCiANCiAgICAgY2Fz ZSBORUdBVEVfRVhQUjoNCiAgICAgY2FzZSBNSU5VU19FWFBSOg0KKyAgICBj YXNlIFBPSU5URVJfRElGRl9FWFBSOg0KICAgICAgIHJldHVybiAiLSI7DQog DQogICAgIGNhc2UgQklUX05PVF9FWFBSOg0KICAgICAgIHJldHVybiAifiI7 DQogDQogICAgIGNhc2UgVFJVVEhfTk9UX0VYUFI6DQogICAgICAgcmV0dXJu ICIhIjsNCiANCiAgICAgY2FzZSBNVUxUX0VYUFI6DQogICAgIGNhc2UgSU5E SVJFQ1RfUkVGOg0KSW5kZXg6IGdjYy90cmVlLXZlY3Qtc3RtdHMuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90cmVlLXZlY3Qtc3RtdHMu YwkocmV2aXNpb24gMjU0ODk2KQ0KKysrIGdjYy90cmVlLXZlY3Qtc3RtdHMu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTUyNTgsMjQgKzUyNTgsMjYgQEAgdmVj dG9yaXphYmxlX29wZXJhdGlvbiAoZ2ltcGxlICpzdG10LCBnaQ0KIA0KICAg LyogSXMgU1RNVCBhIHZlY3Rvcml6YWJsZSBiaW5hcnkvdW5hcnkgb3BlcmF0 aW9uPyAgICovDQogICBpZiAoIWlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpKQ0K ICAgICByZXR1cm4gZmFsc2U7DQogDQogICBpZiAoVFJFRV9DT0RFIChnaW1w bGVfYXNzaWduX2xocyAoc3RtdCkpICE9IFNTQV9OQU1FKQ0KICAgICByZXR1 cm4gZmFsc2U7DQogDQogICBjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29k ZSAoc3RtdCk7DQogDQotICAvKiBGb3IgcG9pbnRlciBhZGRpdGlvbiwgd2Ug c2hvdWxkIHVzZSB0aGUgbm9ybWFsIHBsdXMgZm9yDQotICAgICB0aGUgdmVj dG9yIGFkZGl0aW9uLiAgKi8NCisgIC8qIEZvciBwb2ludGVyIGFkZGl0aW9u IGFuZCBzdWJ0cmFjdGlvbiwgd2Ugc2hvdWxkIHVzZSB0aGUgbm9ybWFsDQor ICAgICBwbHVzIGFuZCBtaW51cyBmb3IgdGhlIHZlY3RvciBvcGVyYXRpb24u ICAqLw0KICAgaWYgKGNvZGUgPT0gUE9JTlRFUl9QTFVTX0VYUFIpDQogICAg IGNvZGUgPSBQTFVTX0VYUFI7DQorICBpZiAoY29kZSA9PSBQT0lOVEVSX0RJ RkZfRVhQUikNCisgICAgY29kZSA9IE1JTlVTX0VYUFI7DQogDQogICAvKiBT dXBwb3J0IG9ubHkgdW5hcnkgb3IgYmluYXJ5IG9wZXJhdGlvbnMuICAqLw0K ICAgb3BfdHlwZSA9IFRSRUVfQ09ERV9MRU5HVEggKGNvZGUpOw0KICAgaWYg KG9wX3R5cGUgIT0gdW5hcnlfb3AgJiYgb3BfdHlwZSAhPSBiaW5hcnlfb3Ag JiYgb3BfdHlwZSAhPSB0ZXJuYXJ5X29wKQ0KICAgICB7DQogICAgICAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQ0KICAgICAgICAgZHVtcF9wcmludGZfbG9j IChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIm51bS4gYXJncyA9ICVkIChub3Qg dW5hcnkvYmluYXJ5L3Rlcm5hcnkgb3ApLlxuIiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgb3BfdHlwZSk7DQogICAgICAgcmV0dXJuIGZhbHNlOw0K SW5kZXg6IGdjYy90cmVlLmRlZg0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy90cmVlLmRlZgkocmV2aXNpb24gMjU0ODk2KQ0KKysrIGdjYy90 cmVlLmRlZgkod29ya2luZyBjb3B5KQ0KQEAgLTY2OSwyMCArNjY5LDI4IEBA IERFRlRSRUVDT0RFIChQTEFDRUhPTERFUl9FWFBSLCAicGxhY2Vob2wNCiAN CiAvKiBTaW1wbGUgYXJpdGhtZXRpYy4gICovDQogREVGVFJFRUNPREUgKFBM VVNfRVhQUiwgInBsdXNfZXhwciIsIHRjY19iaW5hcnksIDIpDQogREVGVFJF RUNPREUgKE1JTlVTX0VYUFIsICJtaW51c19leHByIiwgdGNjX2JpbmFyeSwg MikNCiBERUZUUkVFQ09ERSAoTVVMVF9FWFBSLCAibXVsdF9leHByIiwgdGNj X2JpbmFyeSwgMikNCiANCiAvKiBQb2ludGVyIGFkZGl0aW9uLiAgVGhlIGZp cnN0IG9wZXJhbmQgaXMgYWx3YXlzIGEgcG9pbnRlciBhbmQgdGhlDQogICAg c2Vjb25kIG9wZXJhbmQgaXMgYW4gaW50ZWdlciBvZiB0eXBlIHNpemV0eXBl LiAgKi8NCiBERUZUUkVFQ09ERSAoUE9JTlRFUl9QTFVTX0VYUFIsICJwb2lu dGVyX3BsdXNfZXhwciIsIHRjY19iaW5hcnksIDIpDQogDQorLyogUG9pbnRl ciBzdWJ0cmFjdGlvbi4gIFRoZSB0d28gYXJndW1lbnRzIGFyZSBwb2ludGVy cywgYW5kIHRoZSByZXN1bHQNCisgICBpcyBhIHNpZ25lZCBpbnRlZ2VyIG9m IHRoZSBzYW1lIHByZWNpc2lvbi4gIFBvaW50ZXJzIGFyZSBpbnRlcnByZXRl ZA0KKyAgIGFzIHVuc2lnbmVkLCB0aGUgZGlmZmVyZW5jZSBpcyBjb21wdXRl ZCBhcyBpZiBpbiBpbmZpbml0ZSBzaWduZWQNCisgICBwcmVjaXNpb24uICBC ZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIGRpZmZlcmVuY2UgZG9lcyBu b3QgZml0IGluDQorICAgdGhlIHJlc3VsdCB0eXBlLiAgVGhlIHJlc3VsdCBk b2VzIG5vdCBkZXBlbmQgb24gdGhlIHBvaW50ZXIgdHlwZSwNCisgICBpdCBp cyBub3QgZGl2aWRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgcG9pbnRlZC10byB0 eXBlLiAgKi8NCitERUZUUkVFQ09ERSAoUE9JTlRFUl9ESUZGX0VYUFIsICJw b2ludGVyX2RpZmZfZXhwciIsIHRjY19iaW5hcnksIDIpDQorDQogLyogSGln aHBhcnQgbXVsdGlwbGljYXRpb24uICBGb3IgYW4gaW50ZWdyYWwgdHlwZSB3 aXRoIHByZWNpc2lvbiBCLA0KICAgIHJldHVybnMgYml0cyBbMkItMSwgQl0g b2YgdGhlIGZ1bGwgMipCIHByb2R1Y3QuICAqLw0KIERFRlRSRUVDT0RFIChN VUxUX0hJR0hQQVJUX0VYUFIsICJtdWx0X2hpZ2hwYXJ0X2V4cHIiLCB0Y2Nf YmluYXJ5LCAyKQ0KIA0KIC8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3Vs dCB0aGF0IHJvdW5kcyB0aGUgcXVvdGllbnQgdG93YXJkIHplcm8uICAqLw0K IERFRlRSRUVDT0RFIChUUlVOQ19ESVZfRVhQUiwgInRydW5jX2Rpdl9leHBy IiwgdGNjX2JpbmFyeSwgMikNCiANCiAvKiBEaXZpc2lvbiBmb3IgaW50ZWdl ciByZXN1bHQgdGhhdCByb3VuZHMgaXQgdG93YXJkIHBsdXMgaW5maW5pdHku ICAqLw0KIERFRlRSRUVDT0RFIChDRUlMX0RJVl9FWFBSLCAiY2VpbF9kaXZf ZXhwciIsIHRjY19iaW5hcnksIDIpDQogDQpJbmRleDogZ2NjL3ZhcmFzbS5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3ZhcmFzbS5jCShy ZXZpc2lvbiAyNTQ4OTYpDQorKysgZ2NjL3ZhcmFzbS5jCSh3b3JraW5nIGNv cHkpDQpAQCAtNDYwOCwyMCArNDYwOCwyMSBAQCBpbml0aWFsaXplcl9jb25z dGFudF92YWxpZF9wXzEgKHRyZWUgdmFsDQogICAgICAgZWxzZQ0KICAgICAg IC8qIFN1cHBvcnQgbmFycm93aW5nIHBvaW50ZXIgZGlmZmVyZW5jZXMuICAq Lw0KIAlyZXQgPSBuYXJyb3dpbmdfaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFs aWRfcCAodmFsdWUsIGVuZHR5cGUsIE5VTEwpOw0KICAgICAgIGlmIChjYWNo ZSkNCiAJew0KIAkgIGNhY2hlWzBdID0gdmFsdWU7DQogCSAgY2FjaGVbMV0g PSByZXQ7DQogCX0NCiAgICAgICByZXR1cm4gcmV0Ow0KIA0KKyAgICBjYXNl IFBPSU5URVJfRElGRl9FWFBSOg0KICAgICBjYXNlIE1JTlVTX0VYUFI6DQog ICAgICAgaWYgKFRSRUVfQ09ERSAoZW5kdHlwZSkgPT0gUkVBTF9UWVBFKQ0K IAlyZXR1cm4gTlVMTF9UUkVFOw0KICAgICAgIGlmIChjYWNoZSAmJiBjYWNo ZVswXSA9PSB2YWx1ZSkNCiAJcmV0dXJuIGNhY2hlWzFdOw0KICAgICAgIGlm ICghIElOVEVHUkFMX1RZUEVfUCAoZW5kdHlwZSkNCiAJICB8fCBUWVBFX1BS RUNJU0lPTiAoZW5kdHlwZSkgPj0gVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQ RSAodmFsdWUpKSkNCiAJew0KIAkgIHRyZWUgbmNhY2hlWzRdID0geyBOVUxM X1RSRUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUgfTsNCiAJ ICB0cmVlIHZhbGlkMA0KSW5kZXg6IGdjYy92ci12YWx1ZXMuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy92ci12YWx1ZXMuYwkocmV2aXNp b24gMjU0ODk2KQ0KKysrIGdjYy92ci12YWx1ZXMuYwkod29ya2luZyBjb3B5 KQ0KQEAgLTgyNCwyOSArODI0LDI5IEBAIHZyX3ZhbHVlczo6ZXh0cmFjdF9y YW5nZV9mcm9tX2JpbmFyeV9leHANCiAJc2V0X3ZhbHVlX3JhbmdlICgmbl92 cjAsIFZSX1JBTkdFLCBvcDAsIG9wMCwgTlVMTCk7DQogDQogICAgICAgZXh0 cmFjdF9yYW5nZV9mcm9tX2JpbmFyeV9leHByXzEgKHZyLCBjb2RlLCBleHBy X3R5cGUsICZuX3ZyMCwgJnZyMSk7DQogICAgIH0NCiANCiAgIC8qIElmIHdl IGRpZG4ndCBkZXJpdmUgYSByYW5nZSBmb3IgTUlOVVNfRVhQUiwgYW5kDQog ICAgICBvcDEncyByYW5nZSBpcyB+W29wMCxvcDBdIG9yIHZpY2UtdmVyc2Es IHRoZW4gd2UNCiAgICAgIGNhbiBkZXJpdmUgYSBub24tbnVsbCByYW5nZS4g IFRoaXMgaGFwcGVucyBvZnRlbiBmb3INCiAgICAgIHBvaW50ZXIgc3VidHJh Y3Rpb24uICAqLw0KICAgaWYgKHZyLT50eXBlID09IFZSX1ZBUllJTkcNCi0g ICAgICAmJiBjb2RlID09IE1JTlVTX0VYUFINCisgICAgICAmJiAoY29kZSA9 PSBNSU5VU19FWFBSIHx8IGNvZGUgPT0gUE9JTlRFUl9ESUZGX0VYUFIpDQog ICAgICAgJiYgVFJFRV9DT0RFIChvcDApID09IFNTQV9OQU1FDQogICAgICAg JiYgKCh2cjAudHlwZSA9PSBWUl9BTlRJX1JBTkdFDQogCSAgICYmIHZyMC5t aW4gPT0gb3AxDQogCSAgICYmIHZyMC5taW4gPT0gdnIwLm1heCkNCiAJICB8 fCAodnIxLnR5cGUgPT0gVlJfQU5USV9SQU5HRQ0KIAkgICAgICAmJiB2cjEu bWluID09IG9wMA0KIAkgICAgICAmJiB2cjEubWluID09IHZyMS5tYXgpKSkN Ci0gICAgICBzZXRfdmFsdWVfcmFuZ2VfdG9fbm9ubnVsbCAodnIsIFRSRUVf VFlQRSAob3AwKSk7DQorICAgICAgc2V0X3ZhbHVlX3JhbmdlX3RvX25vbm51 bGwgKHZyLCBleHByX3R5cGUpOw0KIH0NCiANCiAvKiBFeHRyYWN0IHJhbmdl IGluZm9ybWF0aW9uIGZyb20gYSB1bmFyeSBleHByZXNzaW9uIENPREUgT1Aw IGJhc2VkIG9uDQogICAgdGhlIHJhbmdlIG9mIGl0cyBvcGVyYW5kIHdpdGgg cmVzdWx0aW5nIHR5cGUgVFlQRS4NCiAgICBUaGUgcmVzdWx0aW5nIHJhbmdl IGlzIHN0b3JlZCBpbiAqVlIuICAqLw0KIA0KIHZvaWQNCiB2cl92YWx1ZXM6 OmV4dHJhY3RfcmFuZ2VfZnJvbV91bmFyeV9leHByICh2YWx1ZV9yYW5nZSAq dnIsIGVudW0gdHJlZV9jb2RlIGNvZGUsDQogCQkJCQkgIHRyZWUgdHlwZSwg dHJlZSBvcDApDQogew0K --8323329-1685187974-1511135662=:12314--