From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 1D8F44C500 for ; Sun, 7 Sep 2025 22:50:34 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'D5ap8QABfhCI0XpJOnViirmuvsc2hvp70dOpwOF7pp8=', expected b'AaQOpxN2gq6YOgo/AuaHMMq+HkQwPhC5DDZpnxyuXjw=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757285429; h=content-type : mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-transfer-encoding : from; bh=D5ap8QABfhCI0XpJOnViirmuvsc2hvp70dOpwOF7pp8=; b=BwuJ0Xg28qcsBX9yyhUjaUMXYEk7lJHLa2jIktr6sPH6tpPvh50GGEhQpvwrXWLqXYa6X uZy9j90JQQIY8CdB2X6nvhXLUUipShT1fMIDYR5ArZ0ld99sGZffpaRuzaJQCCOs0nbyny5 REm4oGjiccVA9h7SiVbbtXB8W/EiKpCkuNMgK0dwLyTO7U3F4mkkBoCRs+RTLczGEmadGp+ dEFRxQ+vJ//CiigdE4U0LvM4BsyGc5PzrTFWT/JGAf4S19vytVcUEEgv3xsVuiAq5YI5wp5 en2POezwsP5rtw/yq31SgZ1Xa/T9p+u2G9iLISKXhX5Z2PUMshHzk6aRN+qw== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id AB1B668E71A; Mon, 8 Sep 2025 01:50:29 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1757285428; b=sSbY60zytTPtp/ut5SpeLGV3BFMO3Q7Az1l24i3n8Ndt7PewffJWKBQg/8lIqRUTvjHcN iBjp/gukqnuEb1cBnI9qUYdqld1DOO+64Nv7MAjdkUYzYm2KtIqcb2t3moBThiVZgXAu3xH 2OeIIz+8AH8U8fc9veeg3h7bQQc5P0y5tsq5E6fp2q3OtovFTefY+GHzJD+oG8NRMjsHz1f cJ+sf85SDH0tYzVwXDMm/14XMU53BNyBDcqUXMpQI/ehSNRps7H90Xn4Fhw5xsUoga9vQra XPgARKUstNF5ZM0PSRP7XnuSbHiYGXkHF9PuiVwI4TibmR8gLAnlIy9yVD8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1757285428; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=D5ap8QABfhCI0XpJOnViirmuvsc2hvp70dOpwOF7pp8=; b=PovmXTpf179xMEsqjzFotuFoyhc0UCsYKga9JKAH3i8ZpBygK9W/ZYRFS7bHBH3rxiv6p Lodc3e+4PA0WrDZjdmOB0KttUiw5aOJNe4/MBcgsojsA+fj8yeKxhY/uqddT2kdUJrJz7Hj IuRytG+opV6Q5u6Pp6uxKeGoA4FnpspKXAiyoM8NTXIGbOeGEiuPAmPZAwpf+NAgwQBJez/ qFhyq/sxC4zBJfJObSjdxna0HLkNgMFvktfAnAx5WofaD99N54D9XOcyV4w9LjLyw/3jw2J yA3JysvofG4NK4vjogyCK6EwpmeMbQwBa6pQe6VV9XuBEr8IJEnTX+iVBaew== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757285416; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=AaQOpxN2gq6YOgo/AuaHMMq+HkQwPhC5DDZpnxyuXjw=; b=TgAobXTRE4lsp+FoJsiTL3L+iBfyisWXspI9gJPpwKAQ7a5Fl62KStJUenPmRirHA6CWX Or2iijzINVuc/6qjFUVI4yM7nZg0+I+6aAi+hWCy72vcAZsEyzdAC9Nr/SO/lpBCeMC09Tu IRhg5fVyfBDrKezvCePKfM4EtL0UYJVrms6rfgPtUHizmdxbAQnDJcDRqYup+54vwnq1X2K SKaZAlyokNwcMsPgF8rbAKdcSsbuTB/+N2k+82Hpi69qQkH4GTrCbclEev5zpQgcXiXzQ8r a0f+GIDK7z6xv1Oeyn7w+JwD8zxmx+e9K+8AqZb75g4Qx7kVFLYKpfqlz3dQ== Received: from 3f9d35a0eedc (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 93DE468E6D5 for ; Mon, 8 Sep 2025 01:50:16 +0300 (EEST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Sun, 07 Sep 2025 22:50:16 -0000 Message-ID: <175728541704.25.13938384286569916058@463a07221176> Message-ID-Hash: Q4HU2AIMF4Z4ZTHWMRACLBNVHDAACXO2 X-Message-ID-Hash: Q4HU2AIMF4Z4ZTHWMRACLBNVHDAACXO2 X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] Add drawvg video filter. (PR #20458) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: ayosec via ffmpeg-devel Cc: ayosec Content-Transfer-Encoding: base64 Archived-At: List-Archive: List-Post: UFIgIzIwNDU4IG9wZW5lZCBieSBheW9zZWMKVVJMOiBodHRwczovL2NvZGUuZmZtcGVnLm9yZy9G Rm1wZWcvRkZtcGVnL3B1bGxzLzIwNDU4ClBhdGNoIFVSTDogaHR0cHM6Ly9jb2RlLmZmbXBlZy5v cmcvRkZtcGVnL0ZGbXBlZy9wdWxscy8yMDQ1OC5wYXRjaAoKVGhpcyBwdWxsLXJlcXVlc3QgYWRk cyBfZHJhd3ZnXywgYSBuZXcgZmlsdGVyIHRvIGRyYXcgdmVjdG9yIGdyYXBoaWNzIG9uIHRvcCBv ZiBhIHZpZGVvLg0KDQpUaGlzIGRlc2NyaXB0aW9uIGlzIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0 aGUgW3Byb3Bvc2FsIGZyb20gYSBmZXcgd2Vla3MgYWdvXShodHRwczovL2ZmbXBlZy5vcmcvcGlw ZXJtYWlsL2ZmbXBlZy1kZXZlbC8yMDI1LUF1Z3VzdC8zNDc4MjUuaHRtbCkgaW4gdGhlIGZmbXBl Zy1kZXZlbCBtYWlsaW5nIGxpc3QuDQoNCg0KIyMgV2hhdCBpcyBkcmF3dmcNCg0KZHJhd3ZnIGlz IGEgZmlsdGVyIHRvIHJlbmRlciB2ZWN0b3IgZ3JhcGhpY3Mgb24gdG9wIG9mIHZpZGVvIGZyYW1l cy4NCg0KVGhlIHJlbmRlciBpcyBkb25lIGJ5IGV4ZWN1dGluZyBhIHNjcmlwdCB3cml0dGVuIGlu IGl0cyBvd24gbGFuZ3VhZ2UsIGNhbGxlZCBWR1MgKF9WZWN0b3IgR3JhcGhpY3MgU2NyaXB0Xyku IFRoZSBzY3JpcHQgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgY29tbWFuZHMgdG8gZGVzY3JpYmUg MkQgZ3JhcGhpY3MsIHdoaWNoIGFyZSByZW5kZXJlZCB1c2luZyB0aGUgbGliY2Fpcm8gbGlicmFy eS4NCg0KVkdTIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgZ2VuZXJhbC1wdXJwb3Nl IGxhbmd1YWdlLiBTaW5jZSBpdHMgc2NvcGUgaXMgbGltaXRlZCwgaXQgcHJpb3JpdGl6ZXMgYmVp bmcgY29uY2lzZSBhbmQgZWFzeSB0byB1c2UuIFRoZSBzeW50YXggaXMgaGVhdmlseSBpbnNwaXJl ZCBieSBsYW5ndWFnZXMgbGlrZSBbTWFnaWNrIFZlY3RvciBHcmFwaGljc10oaHR0cHM6Ly9pbWFn ZW1hZ2ljay5vcmcvc2NyaXB0L21hZ2ljay12ZWN0b3ItZ3JhcGhpY3MucGhwKSwgb3IgW1NWRydz IGA8cGF0aD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9T VkcvUmVmZXJlbmNlL0VsZW1lbnQvcGF0aCkuDQoNClNvbWUgZmVhdHVyZXMgb2YgdGhlIHN5bnRh eCAobGlrZSB1c2luZyBzcGFjZXMgdG8gc2VwYXJhdGUgYXJndW1lbnRzKSBhcmUgYWxzbyBwcmVz ZW50IGluIGxhbmd1YWdlcyBsaWtlIFRDTCBvciBzaGVsbCBzY3JpcHRzLiBNYW55IGNvbW1hbmQg bmFtZXMgYXJlIHRha2VuIGZyb20gUG9zdFNjcmlwdC4NCg0KU2NyaXB0cyBjYW4gdXNlIEZGbXBl ZyBleHByZXNzaW9ucyB0byBkZXNjcmliZSBncmFwaGljcyBkeW5hbWljYWxseSwgc28gdGhleSBj YW4gY29tcHV0ZSBjb29yZGluYXRlcyBiYXNlZCBvbiBmcmFtZSBkaW1lbnNpb25zLCBmcmFtZSBt ZXRhZGF0YSwgZ2VuZXJhdGUgcmFuZG9tIHZhbHVlcywgcmVhZCBwaXhlbCBjb2xvcnMgZnJvbSB0 aGUgdmlkZW8gZnJhbWUsIGV0Yy4NCg0KRm9yIGV4YW1wbGUsIHRvIGRyYXcgYSBibHVlIGNpcmNs ZSBpbiB0aGUgbWlkZGxlIG9mIGEgZnJhbWU6DQoNCiAgICBjaXJjbGUgKHcgLyAyKSAoaCAvIDIp IDEwMA0KICAgIHNldGNvbG9yIGJsdWUNCiAgICBmaWxsDQoNClRoZW46DQoNCmBgYGJhc2gNCiQg ZmZwbGF5IC1pIGV4YW1wbGUud2VibSAtdmYgJ2RyYXd2Zz1maWxlPWJsdWUtY2lyY2xlLnZncycN CmBgYA0KDQpUaGVyZSBpcyBhIFt3ZWJzaXRlIHdpdGggc29tZSBleGFtcGxlc10oaHR0cHM6Ly9h eW9zZWMuZ2l0aHViLmlvL2ZmbXBlZy1kcmF3dmcvKSBvbiBob3cgdG8gaW50ZWdyYXRlIGRyYXd2 ZyB3aXRoIG90aGVyIEZGbXBlZyBmaWx0ZXJzLCBhbmQgYWxzbyBhIFtwbGF5Z3JvdW5kXShodHRw czovL2F5b3NlYy5naXRodWIuaW8vZmZtcGVnLWRyYXd2Zy9wbGF5Z3JvdW5kLykgdG8gZXhwZXJp bWVudCB3aXRoIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGxhbmd1YWdlLg0KDQoNCiMjIFdoeSBp cyBpdCB1c2VmdWwgZm9yIEZGbXBlZw0KDQpGRm1wZWcgaGFzIHNvbWUgZmlsdGVycyB0byBtb2Rp ZnkgdmlkZW8gZnJhbWVzLCBsaWtlIGBkcmF3Ym94YCwgYHhmYWRlYCwgYGdlcWAsIGBkcmF3dGV4 dGAsIGBkcmF3Z3JpZGAsIGV0Yy4NCg0KSSBndWVzcyB0aGF0IG1vc3QgdXNlcnMgd2lsbCBvbmx5 IG5lZWQgZmlsdGVycyBsaWtlIGBzY2FsZWAgb3IgYGNyb3BgLCBidXQgZm9yIHNvbWUgb3RoZXIg dXNlcnMsIHRoZSBhYmlsaXR5IHRvIGRyYXcgdmVjdG9yIGdyYXBoaWNzIG1ha2VzIHBvc3NpYmxl IHRvIHBlcmZvcm0gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMsIGxpa2UgYWRkaW5nIGFubm90YXRp b25zLCBvciBjcmVhdGluZyBtYXNrcyBmb3IgY3VzdG9tIHRyYW5zaXRpb25zLg0KDQpUaGUgaW1w bGVtZW50YXRpb24gaXMgbXVjaCBzbWFsbGVyIHRoYW4gSSB3YXMgZXhwZWN0aW5nLiBUaGUgW2Zp bGUgYHZmX2RyYXd2Zy5jYF0oaHR0cHM6Ly9jb2RlLmZmbXBlZy5vcmcvYXlvc2VjL0ZGbXBlZy9z cmMvYnJhbmNoL2RyYXd2Zy1maWx0ZXIvbGliYXZmaWx0ZXIvdmZfZHJhd3ZnLmMpLCB3aGljaCBj b250YWlucyB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24gb2YgYGRyYXd2Z2AgKHRoZSBwYXJzZXIg YW5kIHRoZSBpbnRlcnByZXRlciBmb3IgVkdTLCBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gZm9y IHRoZSBmaWx0ZXIpIGlzIGFsbW9zdCAyNzAwIGxpbmVzIChpbmNsdWRpbmcgZW1wdHkgbGluZXMg YW5kIGNvbW1lbnRzKS4NCg0KIyMgV2h5IG5vdCBTVkcNCg0KRkZtcGVnIGNhbiBsb2FkIFNWRyBp bWFnZXMgd2l0aCBsaWJyc3ZnLiBXaGlsZSBTVkcgaXMgbXVjaCBtb3JlIHBvd2VyZnVsIHRoYW4g ZHJhd3ZnLCB0aGUgaW1hZ2VzIGFyZSBzdGF0aWMsIGFuZCBjYW4ndCByZWx5IG9uIGFueSBpbmZv cm1hdGlvbiBmcm9tIEZGbXBlZyBpdHNlbGYuDQoNCkEgZHJhd3ZnIHNjcmlwdCBjYW4gY29tcHV0 ZSBjb29yZGluYXRlcyBhbmQgY29sb3JzIHdpdGggaW5mb3JtYXRpb24gZnJvbSB0byB0aGUgdmlk ZW8gKGxpa2UgZGltZW5zaW9ucywgdGltZXN0YW1wLCBjb2xvcnMgZnJvbSBwaXhlbHMsIGZyYW1l IG1ldGFkYXRhLCBldGMpLg0KDQojIyBXaHkgbGliY2Fpcm8NCg0KVGhlcmUgYXJlIHR3byByZWFz b25zIHRvIGNob29zZSBsaWJjYWlybzoNCg0KRmlyc3QsIGl0IGlzIGEgd2VsbC10ZXN0ZWQsIHN0 YWJsZSwgYW5kIHBvcnRhYmxlIGxpYnJhcnkuDQoNClNlY29uZCwgbGlicnN2ZyBkZXBlbmRzIG9u IGxpYmNhaXJvLCBzbyBhbnkgaW5zdGFsbGF0aW9uIG9mIEZGbXBlZyB0aGF0IHN1cHBvcnRzIFNW RyBpcyBhbHJlYWR5IHVzaW5nIGxpYmNhaXJvLiBJIGV4cGVjdCB0aGF0LCBzaW5jZSB0aGVyZSBh cmUgbm8gbmV3IGRlcGVuZGVuY2llcywgZGlzdHJvIG1haW50YWluZXJzIHNob3VsZCBub3QgbmVl ZCB0byBtYWtlIGNoYW5nZXMgb24gaG93IHRoZWlyIEZGbXBlZyBwYWNrYWdlIGlzIGJ1aWx0IGlu IG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBuZXcgZmlsdGVyLg0KDQojIyBXaHkgYSBjdXN0b20gbGFu Z3VhZ2UNCg0KQmVmb3JlIHN0YXJ0aW5nIHRvIHdvcmsgb24gdGhlIGltcGxlbWVudGF0aW9uIEkg d2FzIGNvbnNpZGVyaW5nIHRvIHJldXNlIGFuIGV4aXN0aW5nIGludGVycHJldGVyLCBsaWtlIEx1 YSBvciBhIGxpZ2h0d2VpZ2h0IEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gKFF1aWNrSlMsIER1 a3RhcGUsIE11SlMsIGV0Yy4pLiBCdXQgdGhpcyBvcHRpb24gd2FzIGRpc2NhcmRlZCBmb3IgdGhy ZWUgcmVhc29uczoNCg0KRmlyc3QsIGl0IGFkZHMgbW9yZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMg dG8gRkZtcGVnLg0KDQpTZWNvbmQsIGEgZmlsdGVyIGxpa2UgdGhpcyBkb2VzIG5vdCBuZWVkIHRo ZSBjb21wbGV4aXR5IG9mIGEgZ2VuZXJhbCBwdXJwb3NlIGxhbmd1YWdlLiBFdmVuIHdoZW4gYm90 aCBMdWEgYW5kIEphdmFTY3JpcHQgYXJlIHF1aXRlIHNpbXBsZSwgd2UgY2FuIGhhdmUgYSBtb3Jl IG1pbmltYWxpc3RpYyBsYW5ndWFnZSB0byBkZXNjcmliZSB3aGF0IG11c3QgYmUgZHJhd24gYnkg dGhlIGZpbHRlci4gQW5kLCBpZiBzb21lb25lIHJlYWxseSBuZWVkcyB0byBjcmVhdGUgYSBtb3Jl IGNvbXBsZXggc2NyaXB0LCB0aGV5IG1heSBwcmVmZXIgc29tZXRoaW5nIGRpZmZlcmVudCB0byBM dWEvSlMgYW55d2F5cy4NCg0KVGhpcmQsIGJ5IHVzaW5nIGEgY3VzdG9tIGxhbmd1YWdlLCB3ZSBj YW4gaGF2ZSBmdWxsIGludGVncmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGxhbmd1YWdlIGZvciBG Rm1wZWcgZXhwcmVzc2lvbnMuIFRodXMsIHVzZXJzIHdpdGggc29tZSBleHBlcmllbmNlIHdyaXRp bmcgY29tcGxleCBmaWx0ZXJncmFwaHMgY2FuIHVzZSBhIGZhbWlsaWFyIHN5bnRheC4NCg0KIyMg SW50ZXJwcmV0ZXIgSW1wbGVtZW50YXRpb24NCg0KVGhlIHdob2xlIGltcGxlbWVudGF0aW9uIGlz IGluIHRoZSBbYGxpYmF2ZmlsdGVyL3ZmX2RyYXd2Zy5jYCBmaWxlXShodHRwczovL2NvZGUuZmZt cGVnLm9yZy9heW9zZWMvRkZtcGVnL3NyYy9icmFuY2gvZHJhd3ZnLWZpbHRlci9saWJhdmZpbHRl ci92Zl9kcmF3dmcuYykuIFRoZXJlIGFyZSBjb21tZW50cyB0byBkZXNjcmliZSBlYWNoIHNlY3Rp b24sIGJ1dCB0aGUgZ2VuZXJhbCBpZGVhIGlzIHF1aXRlIHNpbXBsZToNCg0KKiBJbiB0aGUgYGlu aXRgIGZ1bmN0aW9uIG9mIHRoZSBmaWx0ZXIsIHRoZSBzb3VyY2UgaXMgcGFyc2VkIHRvIGdlbmVy YXRlIGJ5dGVjb2RlIChhbiBhcnJheSBvZiBgc3RydWN0IFZHU1N0YXRlbWVudGAgaW5zdGFuY2Vz KS4NCiogRm9yIGVhY2ggdmlkZW8gZnJhbWUsIGFuIGludGVycHJldGVyIHRyYW5zbGF0ZXMgdGhl IGJ5dGVjb2RlIHRvIGxpYmNhaXJvIGZ1bmN0aW9ucy4NCg0KIyMgRmlsdGVyIE9wdGlvbnMNCg0K VGhlIG9wdGlvbnMgYHNjcmlwdGAvYHNgIGFyZSB1c2VkIHRvIHNldCB0aGUgc291cmNlIG9mIHRo ZSBzY3JpcHQgdG8gZXhlY3V0ZSBieSB0aGUgZmlsdGVyLg0KDQpUaGUgb3B0aW9uIGBmaWxlYCBk b2VzIHRoZSBzYW1lLCBidXQgdGhlIHNvdXJjZSBpcyByZWFkIGZyb20gYSBmaWxlLg0KDQpUaGUg ZmlsdGVyIHJlcXVpcmVzIG9ubHkgb25lIG9wdGlvbi4gSWYgbm9uZSBvciBib3RoIG9wdGlvbnMg YXJlIGdpdmVuLCBpdCByZXR1cm5zIGFuIGVycm9yIGluIHRoZSBgaW5pdGAgZnVuY3Rpb24uDQoN CiMjIERvY3VtZW50YXRpb24NCg0KVGhlIGxhbmd1YWdlIHRvIHdyaXRlIGRyYXd2ZyBzY3JpcHRz IGlzIGRlc2NyaWJlZCBpbiBbYGRvYy9kcmF3dmctcmVmZXJlbmNlLnRleGlgXShodHRwczovL2Nv ZGUuZmZtcGVnLm9yZy9heW9zZWMvRkZtcGVnL3NyYy9icmFuY2gvZHJhd3ZnLWZpbHRlci9kb2Mv ZHJhd3ZnLXJlZmVyZW5jZS50ZXhpKS4gVGhhdCBmaWxlIGlzIGFkZGVkIHRvIGBkb2MvTWFrZWZp bGVgLCBzbyBbYSBgZHJhd3ZnLXJlZmVyZW5jZS5odG1sYCBmaWxlXShodHRwczovL2F5b3NlYy5n aXRodWIuaW8vZmZtcGVnLWRyYXd2Zy9mZm1wZWctZG9jcy9kcmF3dmctcmVmZXJlbmNlLmh0bWwp IGlzIGdlbmVyYXRlZCBpbiBgbWFrZSBkb2N1bWVudGF0aW9uYC4gVGhpcyBkb2N1bWVudCBjb250 YWlucyBhIGxvdCBvZiBleGFtcGxlcywgYW5kIGl0IGlzIGFsbW9zdCBoYWxmIG9mIHRoZSBkaWZm IGluIHRoaXMgcHVsbC1yZXF1ZXN0Lg0KDQpUaGVyZSBpcyBbYW5vdGhlciB2ZXJzaW9uIG9mIHRo YXQgZG9jdW1lbnRdKGh0dHBzOi8vYXlvc2VjLmdpdGh1Yi5pby9mZm1wZWctZHJhd3ZnL3BsYXln cm91bmQvZG9jcy9sYW5ncmVmLmh0bWwpLiBJdCBoYXMgdGhlIHNhbWUgY29udGVudCwgYnV0IHRo ZSBleGFtcGxlcyBhcmUgcmVuZGVyZWQuDQoNCmBkb2MvZmlsdGVycy50ZXhpYCBpbmNsdWRlcyBh IHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmaWx0ZXIsIHRoZSBhcmd1bWVudHMsIHNvbWUgZXhh bXBsZXMsIGFuZCBhIGxpbmsgdG8gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4NCg0KDQojIyBUZXN0 cw0KDQpUaGVyZSBhcmUgdHdvIHRlc3RzIGZvciBkcmF3dmc6DQoNCiogYGZhdGUtZmlsdGVyLWRy YXd2Zy1pbnRlcnByZXRlcmANCg0KICAgIFRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUg ZHJhd3ZnIGludGVycHJldGVyIGV4ZWN1dGVzIHRoZSBleHBlY3RlZCBsaWJjYWlybyBmdW5jdGlv bnMuIFRoZSBmdW5jdGlvbnMgYXJlIFtyZXBsYWNlZCBieSBtb2Nrc10oaHR0cHM6Ly9jb2RlLmZm bXBlZy5vcmcvYXlvc2VjL0ZGbXBlZy9zcmMvY29tbWl0LzM0NDAwZmQ1ZGQxNTM2ZmMzNDA4OWVi NjYxZDUwY2FkYzYwZGViMTAvbGliYXZmaWx0ZXIvdGVzdHMvZHJhd3ZnLmMjTDU4LUwxMjUpLCB3 aGljaCBqdXN0IHByaW50cyB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGFyZ3VtZW50cy4NCg0K KiBgZmF0ZS1maWx0ZXItZHJhd3ZnLXZpZGVvYA0KDQogICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIGEg W3NtYWxsIGRyYXd2ZyBzY3JpcHRdKGh0dHBzOi8vY29kZS5mZm1wZWcub3JnL2F5b3NlYy9GRm1w ZWcvc3JjL2JyYW5jaC9kcmF3dmctZmlsdGVyL3Rlc3RzL3JlZi9sYXZmL2RyYXd2Zy5saW5lcykg dG8gcmVuZGVyIGEgc3F1YXJlLCBieSB1c2luZyBgQ01EID0gdmlkZW9fZmlsdGVyYCAobGlrZSBt YW55IG90aGVyIGZpbHRlcnMgaW4gYHRlc3RzL2ZhdGUvZmlsdGVyLXZpZGVvLm1ha2ApLiBUaGUg cHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgZHJhd3ZnIGNhbiB1cGRhdGUg dmlkZW8gZnJhbWVzLg0KDQpEdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIHRlc3RzLCBJIGFsd2F5cyBi dWlsdCBGRm1wZWcgd2l0aCBgLS10b29sY2hhaW49Y2xhbmctYXNhbmAsIHNvIEkgaG9wZSB0aGF0 IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyAobW9zdGx5KSBjb3JyZWN0LCBhbHRob3VnaCBJJ20gbm90 IGEgQyBleHBlcnQuDQoNCiMjIE9yaWdpbmFsIEhpc3RvcnkNCg0KVGhlIG9yaWdpbmFsIGNvbW1p dCBoaXN0b3J5IChiZWZvcmUgdGhlIHNxdWFzaCkgaXMgaW4gdGhlIFt0YWcgYGRyYXd2Zy1maWx0 ZXItb3JpZ2BdKGh0dHBzOi8vY29kZS5mZm1wZWcub3JnL2F5b3NlYy9GRm1wZWcvY29tcGFyZS9t YXN0ZXIuLmRyYXd2Zy1maWx0ZXItb3JpZykuIFRoZSBjb21taXQgbWVzc2FnZXMgYXJlIG5vdCB2 ZXJ5IGRlc2NyaXB0aXZlIChJIGFzc3VtZWQgdGhhdCB0aGUgcHVsbC1yZXF1ZXN0IHdhcyBnb2lu ZyB0byBiZSBhIHNpbmdsZSBjb21taXQsIHNvIEkgZGlkbid0IHNwZW5kIHRvbyBtdWNoIHRpbWUg b24gd3JpdGluZyBiZXR0ZXIgbWVzc2FnZXMpLCBidXQgZWFjaCBjb21taXQgaXMgKm11Y2gqIHNt YWxsZXIsIGFuZCBtYXliZSB0aGV5IGNhbiBoZWxwIHRvIHJldmlldyB0aGUgaW1wbGVtZW50YXRp b24uDQoKCgpGcm9tIDM0NDAwZmQ1ZGQxNTM2ZmMzNDA4OWViNjYxZDUwY2FkYzYwZGViMTAgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEF5b3NlIDxheW9zZWNAZ21haWwuY29tPgpEYXRl OiBTdW4sIDcgU2VwIDIwMjUgMjI6MDc6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBsYXZmaTog YWRkIGRyYXd2ZyB2aWRlbyBmaWx0ZXIuCgpUaGUgZHJhd3ZnIGZpbHRlciBjYW4gZHJhdyB2ZWN0 b3IgZ3JhcGhpY3Mgb24gdG9wIG9mIGEgdmlkZW8sIHVzaW5nIGxpYmNhaXJvLiBJdAppcyBlbmFi bGVkIGlmIGxpYmNhaXJvIGlzIGRldGVjdGVkIGF0IGNvbXBpbGUgdGltZS4KClRoZSBsYW5ndWFn ZSBmb3IgZHJhd3ZnIHNjcmlwdHMgaXMgZG9jdW1lbnRlZCBpbiBkb2MvZHJhd3ZnLXJlZmVyZW5j ZS50ZXhpLgoKVGhlcmUgYXJlIHR3byBuZXcgdGVzdHM6CgotICdmYXRlLWZpbHRlci1kcmF3dmct aW50ZXJwcmV0ZXInIGxhdW5jaCBhIHNjcmlwdCB3aXRoIG1vc3QgY29tbWFuZHMsIGFuZAogIHZl cmlmeSB3aGljaCBsaWJjYWlybyBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLgotICdmYXRlLWZpbHRl ci1kcmF3dmctdmlkZW8nIHJlbmRlciBhIHZlcnkgc2ltcGxlIGltYWdlLCBqdXN0IHRvIHZlcmlm eSB0aGF0CiAgbGliY2Fpcm8gaXMgd29ya2luZyBhcyBleHBlY3RlZC4KClNpZ25lZC1vZmYtYnk6 IEF5b3NlIDxheW9zZWNAZ21haWwuY29tPgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGRvYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIGRvYy9kcmF3dmctcmVmZXJlbmNlLnRleGkgICAgICAgICAgICAgICAgfCAy NzcyICsrKysrKysrKysrKysrKysrKysrKysKIGRvYy9maWx0ZXJzLnRleGkgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDcwICsKIGxpYmF2ZmlsdGVyL01ha2VmaWxlICAgICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGxpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyAgICAgICAgICAgICAgICAg fCAgICAxICsKIGxpYmF2ZmlsdGVyL3Rlc3RzLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAx ICsKIGxpYmF2ZmlsdGVyL3Rlc3RzL2RyYXd2Zy5jICAgICAgICAgICAgICAgfCAgMzQ3ICsrKwog bGliYXZmaWx0ZXIvdmVyc2lvbi5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGxpYmF2 ZmlsdGVyL3ZmX2RyYXd2Zy5jICAgICAgICAgICAgICAgICAgfCAyNjk5ICsrKysrKysrKysrKysr KysrKysrKwogdGVzdHMvZmF0ZS9maWx0ZXItdmlkZW8ubWFrICAgICAgICAgICAgICB8ICAgMTEg KwogdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLWRyYXd2Zy1pbnRlcnByZXRlciB8ICAxMzAgKwogdGVz dHMvcmVmL2ZhdGUvZmlsdGVyLWRyYXd2Zy12aWRlbyAgICAgICB8ICAgIDEgKwogdGVzdHMvcmVm L2xhdmYvZHJhd3ZnLmFsbCAgICAgICAgICAgICAgICB8ICAxMDAgKwogdGVzdHMvcmVmL2xhdmYv ZHJhd3ZnLmxpbmVzICAgICAgICAgICAgICB8ICAgMTAgKwogMTYgZmlsZXMgY2hhbmdlZCwgNjE1 MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2Ry YXd2Zy1yZWZlcmVuY2UudGV4aQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3Rlc3Rz L2RyYXd2Zy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfZHJhd3ZnLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItZHJhd3ZnLWludGVycHJldGVy CiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLWRyYXd2Zy12aWRlbwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3JlZi9sYXZmL2RyYXd2Zy5hbGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9yZWYvbGF2Zi9kcmF3dmcubGluZXMKCmRpZmYgLS1naXQgYS9DaGFuZ2Vs b2cgYi9DaGFuZ2Vsb2cKaW5kZXggYWFhYjhkOWI1NC4uZTgxNzI5ZGU2MiAxMDA2NDQKLS0tIGEv Q2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtNCw2ICs0LDcgQEAgcmVsZWFzZXMgYXJlIHNv cnRlZCBmcm9tIHlvdW5nZXN0IHRvIG9sZGVzdC4KIHZlcnNpb24gPG5leHQ+OgogLSBmZnByb2Jl IC1jb2RlYyBvcHRpb24KIC0gRVhJRiBNZXRhZGF0YSBQYXJzaW5nCistIGRyYXd2ZyBmaWx0ZXIK IAogCiB2ZXJzaW9uIDguMDoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRl eCBhMzhjYmRiODlmLi42NDdlZDkxMmNkIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29u ZmlndXJlCkBAIC0yMDAsNiArMjAwLDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAt LWRpc2FibGUtYXZmb3VuZGF0aW9uICAgZGlzYWJsZSBBcHBsZSBBVkZvdW5kYXRpb24gZnJhbWV3 b3JrIFthdXRvZGV0ZWN0XQogICAtLWVuYWJsZS1hdmlzeW50aCAgICAgICAgZW5hYmxlIHJlYWRp bmcgb2YgQXZpU3ludGggc2NyaXB0IGZpbGVzIFtub10KICAgLS1kaXNhYmxlLWJ6bGliICAgICAg ICAgIGRpc2FibGUgYnpsaWIgW2F1dG9kZXRlY3RdCisgIC0tZGlzYWJsZS1jYWlybyAgICAgICAg ICBkaXNhYmxlIGNhaXJvIFthdXRvZGV0ZWN0XQogICAtLWRpc2FibGUtY29yZWltYWdlICAgICAg ZGlzYWJsZSBBcHBsZSBDb3JlSW1hZ2UgZnJhbWV3b3JrIFthdXRvZGV0ZWN0XQogICAtLWVuYWJs ZS1jaHJvbWFwcmludCAgICAgZW5hYmxlIGF1ZGlvIGZpbmdlcnByaW50aW5nIHdpdGggY2hyb21h cHJpbnQgW25vXQogICAtLWVuYWJsZS1mcmVpMHIgICAgICAgICAgZW5hYmxlIGZyZWkwciB2aWRl byBmaWx0ZXJpbmcgW25vXQpAQCAtMTg2Myw2ICsxODY0LDcgQEAgRVhURVJOQUxfQVVUT0RFVEVD VF9MSUJSQVJZX0xJU1Q9IgogICAgIGFwcGtpdAogICAgIGF2Zm91bmRhdGlvbgogICAgIGJ6bGli CisgICAgY2Fpcm8KICAgICBjb3JlaW1hZ2UKICAgICBpY29udgogICAgIGxpYnhjYgpAQCAtMzk1 OSw2ICszOTYxLDcgQEAgZG5uX2RldGVjdF9maWx0ZXJfc2VsZWN0PSJkbm4iCiBkbm5fcHJvY2Vz c2luZ19maWx0ZXJfc2VsZWN0PSJkbm4iCiBkcmF3dGV4dF9maWx0ZXJfZGVwcz0ibGliZnJlZXR5 cGUgbGliaGFyZmJ1enoiCiBkcmF3dGV4dF9maWx0ZXJfc3VnZ2VzdD0ibGliZm9udGNvbmZpZyBs aWJmcmliaWRpIgorZHJhd3ZnX2ZpbHRlcl9kZXBzPSJjYWlybyIKIGVsYmdfZmlsdGVyX2RlcHM9 ImF2Y29kZWMiCiBlcV9maWx0ZXJfZGVwcz0iZ3BsIgogZXJvc2lvbl9vcGVuY2xfZmlsdGVyX2Rl cHM9Im9wZW5jbCIKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZSBiL2RvYy9NYWtlZmlsZQppbmRl eCA5OGQyOWYxYzY2Li4yMTEyYWZmNzM3IDEwMDY0NAotLS0gYS9kb2MvTWFrZWZpbGUKKysrIGIv ZG9jL01ha2VmaWxlCkBAIC0yOCw2ICsyOCw3IEBAIEhUTUxQQUdFUyAgID0gJChBVlBST0dTLXll czolPWRvYy8lLmh0bWwpICQoQVZQUk9HUy15ZXM6JT1kb2MvJS1hbGwuaHRtbCkgJChDT01QCiAg ICAgICAgICAgICAgIGRvYy9tYWlsaW5nLWxpc3QtZmFxLmh0bWwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIGRvYy9udXQuaHRtbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIGRvYy9wbGF0 Zm9ybS5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgIGRvYy9kcmF3dmctcmVmZXJlbmNlLmh0bWwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICQoU1JDX1BBVEgpL2RvYy9ib290c3RyYXAubWlu LmNzcyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICQoU1JDX1BBVEgp L2RvYy9zdHlsZS5taW4uY3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg ICAgICAgICQoU1JDX1BBVEgpL2RvYy9kZWZhdWx0LmNzcyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCmRpZmYgLS1naXQgYS9kb2MvZHJhd3ZnLXJlZmVyZW5jZS50ZXhpIGIvZG9jL2Ry YXd2Zy1yZWZlcmVuY2UudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5mNWNlMDQxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2RyYXd2Zy1yZWZlcmVuY2UudGV4 aQpAQCAtMCwwICsxLDI3NzIgQEAKK0Bkb2N1bWVudGVuY29kaW5nIFVURi04CisKK0BzZXR0aXRs ZSBkcmF3dmcgLSBMYW5ndWFnZSBSZWZlcmVuY2UKK0B0aXRsZXBhZ2UKK0BjZW50ZXIgQHRpdGxl Zm9udHtkcmF3dmcgLSBMYW5ndWFnZSBSZWZlcmVuY2V9CitAZW5kIHRpdGxlcGFnZQorCitAdG9w CisKK0Bjb250ZW50cworCitAbWFjcm8gY29kZWV4YW1wbGUge2Jsb2NrfQorQGNhcnRvdWNoZSBF eGFtcGxlCitcYmxvY2tcCitAZW5kIGNhcnRvdWNoZQorQGVuZCBtYWNybworCitAbWFjcm8gdmdz Y21kIHtuYW1lfQorQHJlZntjbWRfXG5hbWVcLCxAY29kZXtcbmFtZVx9fQorQGVuZCBtYWNybwor CitAY2hhcHRlciBJbnRyb2R1Y3Rpb24KKworZHJhd3ZnIChAZW1waHtkcmF3IHZlY3RvciBncmFw aGljc30pIGlzIGEgbGFuZ3VhZ2UgdG8gZHJhdwordHdvLWRpbWVuc2lvbmFsIGdyYXBoaWNzIG9u IHRvcCBvZiB2aWRlbyBmcmFtZXMuIEl0IGlzIG5vdCBpbnRlbmRlZCB0bworYmUgdXNlZCBhcyBh IGdlbmVyYWwtcHVycG9zZSBsYW5ndWFnZS4gU2luY2UgaXRzIHNjb3BlIGlzIGxpbWl0ZWQsIGl0 Citwcmlvcml0aXplcyBiZWluZyBjb25jaXNlIGFuZCBlYXN5IHRvIHVzZS4KKworRm9yIGV4YW1w bGUsIHVzaW5nIHRoZQorQHVyZWZ7aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv ZG9jcy9XZWIvQVBJL0NhbnZhc19BUEksQ2FudmFzCitBUEl9IHdlIGNhbiByZW5kZXIgYSB0cmlh bmdsZSBydW5uaW5nIHRoaXMgY29kZSBpbiBhIFdlYiBicm93c2VyOgorCitAZXhhbXBsZQorY29u c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworY29uc3QgY3R4 ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisKK2N0eC5iZWdpblBhdGgoKTsKK2N0eC5tb3Zl VG8oMTI1LCA1MCk7CitjdHgubGluZVRvKDEwMCwgMTAwKTsKK2N0eC5saW5lVG8oMTUwLCAxMDAp OworY3R4LmNsb3NlUGF0aCgpOworY3R4LnN0cm9rZSgpOworQGVuZCBleGFtcGxlCisKK1RoZSBz YW1lIHRyaWFuZ2xlIGNhbiBiZSB3cml0dGVuIHdpdGggdGhpcyBkcmF3dmcgc2NyaXB0OgorCitA ZXhhbXBsZQorbW92ZXRvIDEyNSA1MAorbGluZXRvIDEwMCAxMDAgMTUwIDEwMAorY2xvc2VwYXRo CitzdHJva2UKK0BlbmQgZXhhbXBsZQorCitJdCBjYW4gYmUgc2hvcnRlbmVkIHVzaW5nIHRoZSBh bGlhc2VzIGZvciBAdmdzY21ke21vdmV0b30sIEB2Z3NjbWR7bGluZXRvfSwKK2FuZCBAdmdzY21k e2Nsb3NlcGF0aH06CisKK0BleGFtcGxlCitNIDEyNSA1MAorTCAxMDAgMTAwIDE1MCAxMDAKK1oK K3N0cm9rZQorQGVuZCBleGFtcGxlCisKK0JvdGggbmV3bGluZXMgKEBjb2Rle1UrMDAwQX0pIGFu ZCBzcGFjZXMgKEBjb2Rle1UrMDAyMH0pIGNhbiBiZSB1c2VkCitpbnRlcmNoYW5nZWFibHkgYXMg ZGVsaW1pdGVycywgc28gbXVsdGlwbGUgY29tbWFuZHMgY2FuIGFwcGVhciBvbiB0aGUKK3NhbWUg bGluZToKKworQGV4YW1wbGUKK00gMTI1IDUwIEwgMTAwIDEwMCAxNTAgMTAwIFoKK3N0cm9rZQor QGVuZCBleGFtcGxlCisKK0BtYWNybyBmZmV4cHJzCitAcmVme0V4cHJlc3Npb24gRXZhbHVhdGlv biwsRkZtcGVnIGV4cHJlc3Npb25zLGZmbXBlZy11dGlsc30KK0BlbmQgbWFjcm8KKworRmluYWxs eSwgZHJhd3ZnIGNhbiB1c2UgQGZmZXhwcnN7fSBhbmQgZnJhbWUgbWV0YWRhdGEgaW4gY29tbWFu ZCBhcmd1bWVudHMuIEluCit0aGlzIGV4YW1wbGUsIHdlIGFyZSB1c2luZyB0aGUgdmFyaWFibGVz IEB2YXJ7d30gKGZyYW1lIHdpZHRoKSBhbmQgQHZhcntofQorKGZyYW1lIGhlaWdodCkgdG8gY3Jl YXRlIGEgY2lyY2xlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZyYW1lLgorCitAZXhhbXBsZQorY2ly Y2xlICh3IC8gMikgKGggLyAyKSAodyAvIDMpCitzdHJva2UKK0BlbmQgZXhhbXBsZQorCitNYW55 IGNvbW1hbmRzIGFyZSBhIGRpcmVjdCBlcXVpdmFsZW50IHRvIGEgZnVuY3Rpb24gaW4gdGhlCitA dXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy8sQ2Fpcm8gZ3JhcGhpY3MgbGlicmFy eX0uIEZvciBzdWNoCitjb21tYW5kcywgdGhlIHJlZmVyZW5jZSBiZWxvdyBwcm92aWRlcyBhIGxp bmsgdG8gdGhlIHJlbGF0ZWQgQ2Fpcm8KK2RvY3VtZW50YXRpb24uCisKK0BjaGFwdGVyIFN5bnRh eAorCitAbWFjcm8gc3ZncGF0aGxpbmsKK0B1cmVme2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu b3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9SZWZlcmVuY2UvRWxlbWVudC9wYXRoLFNWRydzIEBjb2Rl ezxwYXRoPn19CitAZW5kIG1hY3JvCisKK1RoZSBzeW50YXggaXMgaGVhdmlseSBpbnNwaXJlZCBi eSBsYW5ndWFnZXMgbGlrZQorQHVyZWZ7aHR0cHM6Ly9pbWFnZW1hZ2ljay5vcmcvc2NyaXB0L21h Z2ljay12ZWN0b3ItZ3JhcGhpY3MucGhwLE1hZ2ljaworVmVjdG9yIEdyYXBoaWNzfSwgb3IgQHN2 Z3BhdGhsaW5re30uIE1hbnkgY29tbWFuZCBuYW1lcyBhcmUgdGFrZW4gZnJvbQorQHVyZWZ7aHR0 cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9zdFNjcmlwdCxQb3N0U2NyaXB0fS4KKworQHNl Y3Rpb24gU3RydWN0dXJlCisKK0EgZHJhd3ZnIHNjcmlwdCBjb25zaXN0cyBvZiBhIHNlcmllcyBv ZiBjb21tYW5kcyB0byBkZXNjcmliZSAyRAorZ3JhcGhpY3MuCisKK0EgY29tbWFuZCBpcyBhbiBp ZGVudGlmaWVyIChsaWtlIEB2Z3NjbWR7c2V0Y29sb3J9IG9yIEB2Z3NjbWR7bGluZXRvfSkKK2Zv bGxvd2VkIGJ5IGl0cyBhcmd1bWVudHMuIEVhY2ggaXRlbSBpbiB0aGUgY29kZSAoY29tbWFuZCBu YW1lLAorYXJndW1lbnRzLCBldGMuKSBpcyBzZXBhcmF0ZWQgYnkgYW55IG9mIHRoZSBmb2xsb3dp bmcgY2hhcmFjdGVyczoKKworQGl0ZW1pemUKK0BpdGVtIFNwYWNlIChAY29kZXsnICd9KQorQGl0 ZW0gQ29tbWEgKEBjb2RleycsJ30pCitAaXRlbSBOZXdsaW5lIChAY29kZXsnXG4nfSkKK0BpdGVt IFRhYnMgKEBjb2RleydcdCd9KQorQGl0ZW0gUmV0dXJuIChAY29kZXsnXHInfSkKK0BlbmQgaXRl bWl6ZQorCitUaGUgYmVnaW5uaW5nIG9mIHRoZSBpdGVtIGluZGljYXRlcyBob3cgaXQgd2lsbCBi ZSBpbnRlcnByZXRlZDoKKworQHRhYmxlIEByCitAaXRlbSBAY29kZXsvL30KK0NvbW1lbnQKK0Bp dGVtIEBjb2RlezB9LCBAZG90c3t9LCBAY29kZXs5fSwgQGNvZGV7K30sIEBjb2Rley19CitOdW1i ZXIgbGl0ZXJhbAorQGl0ZW0gQGNvZGV7KH0KK0V4cHJlc3Npb24KK0BpdGVtIEBjb2Rle0B7fSwg QGNvZGV7QH19CitCbG9jayBkZWxpbWl0ZXJzCitAaXRlbSBBbnl0aGluZyBlbHNlCitOYW1lIG9m IGEgY29tbWFuZCwgYSBjb2xvciwgZXRjLgorQGVuZCB0YWJsZQorCitAc2VjdGlvbiBDb21tZW50 cworCitDb21tZW50cyBzdGFydCB3aXRoIHR3byBzbGFzaGVzIChAY29kZXsvL30pLCBhbmQgc3Rv cCBhdCB0aGUgZW5kIG9mIHRoZQorbGluZSAoZWl0aGVyIGEgQGNvZGV7XG59LCBvciB0aGUgZW5k IG9mIHRoZSBzY3JpcHQpLgorCitAZXhhbXBsZQorY2lyY2xlIDEwMCAxMDAgNTAgLy8gdGhpcyBp cyBpZ25vcmVkCitmaWxsCisKKy8vIHRoaXMgaXMgYWxzbyBpZ25vcmVkCitAZW5kIGV4YW1wbGUK KworQGNvZGV7Ly99IG11c3QgYXBwZWFyIGFmdGVyIGEgc3BhY2UsIG9yIGF0IHRoZSBiZWdpbm5p bmcgb2YgdGhlIGxpbmUuIElmCitAY29kZXsvL30gaXMgcHJlY2VkZWQgYnkgYW55IG5vbi1ibGFu ayBjaGFyYWN0ZXIsIHRoZSBwYXJzZXIgd2lsbAorY29uc2lkZXIgQGNvZGV7Ly99IGFzIHBhcnQg b2YgdGhlIHByZXZpb3VzIGl0ZW0uCisKK0ZvciBleGFtcGxlLCBpbiB0aGlzIHNjcmlwdDoKKwor QGV4YW1wbGUKK2NpcmNsZSAxMCAxMCA1MC8vIHNvbWV0aGluZworQGVuZCBleGFtcGxlCisKK1Ro ZSBwYXJzZXIgdGhyb3dzIGFuIGVycm9yIGJlY2F1c2UgaXQgdHJpZXMgdG8gcGFyc2UgQGNvZGV7 NTAvL30gYXMgYQorbnVtYmVyIGxpdGVyYWwuCisKK0BzZWN0aW9uIENvbW1hbmRzCisKK1RoZSB3 YXkgY29tbWFuZHMgYXJlIHBhcnNlZCBpcyBpbnNwaXJlZCBieSBAc3ZncGF0aGxpbmt7fToKKwor QGl0ZW1pemUKK0BpdGVtCitFdmVyeSBjb21tYW5kIGluIHRoZSBzY3JpcHQgc3RhcnRzIHdpdGgg aXRzIG5hbWUsIGFuZCBpdCBpcyBmb2xsb3dlZCBieQoremVybyBvciBtb3JlIGFyZ3VtZW50cy4K KworQGl0ZW0KK1RoZXJlIGFyZSBubyBleHBsaWNpdCBkZWxpbWl0ZXJzIGJldHdlZW4gY29tbWFu ZHMgb3IgYXJndW1lbnRzLgorCitNb3N0IHByb2dyYW1taW5nIGxhbmd1YWdlcyBleHBlY3QgY2hh cmFjdGVycyBsaWtlIHBhcmVudGhlc2lzLCBjb21tYXMsCitvciBzZW1pY29sb25zLCB0byBzZXBh cmF0ZSBpdGVtcy4gRm9yIGV4YW1wbGU6CisKK0BleGFtcGxlCittb3ZldG8oMTAsIDEwKTsgbGlu ZXRvKDIwLCAzMCk7CitAZW5kIGV4YW1wbGUKKworVGhlIGVxdWl2YWxlbnQgaW4gZHJhd3ZnIGlz OgorCitAZXhhbXBsZQorbW92ZXRvIDEwIDEwIGxpbmV0byAyMCAzMAorQGVuZCBleGFtcGxlCisK K0BpdGVtCitJZiB0aGUgY29tbWFuZCBoYXMgbm8gYXJndW1lbnRzIChsaWtlIEB2Z3NjbWR7Y2xv c2VwYXRofSBvcgorQHZnc2NtZHtzdHJva2V9KSwgdGhlIG5leHQgY29tbWFuZCBzdGFydHMgYXQg dGhlIG5leHQgaXRlbS4KKworQGVuZCBpdGVtaXplCisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoZSBu ZXh0IHNjcmlwdCB0aGVyZSBhcmUgNCBkaWZmZXJlbnQgY29tbWFuZHM6CisKK0BleGFtcGxlCitu ZXdwYXRoIHJlY3QgMTAgMjAgMzAgNDAgc2V0Y29sb3IgdGVhbCBmaWxsCitAZW5kIGV4YW1wbGUK KworQGVudW1lcmF0ZQorQGl0ZW0KK0B2Z3NjbWR7bmV3cGF0aH0gcmVxdWlyZXMgbm8gYXJndW1l bnRzLgorCitAaXRlbQorQHZnc2NtZHtyZWN0fSByZXF1aXJlcyA0IGFyZ3VtZW50cywgc28gaXQg dGFrZXMgdGhlIG5leHQgNCBudW1iZXJzLgorCitAaXRlbQorQHZnc2NtZHtzZXRjb2xvcn0gcmVx dWlyZXMgMSBhcmd1bWVudCwgc28gaXQgdGFrZXMgdGhlIHdvcmQgQGNvZGV7dGVhbH0uCisKK0Bp dGVtCitAdmdzY21ke2ZpbGx9IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4KK0BlbmQgZW51bWVyYXRl Cit9CisKK0BzdWJzZWN0aW9uIFNpbmdsZS1MZXR0ZXIgQWxpYXNlcworCitNb3N0IGNvbW1hbmRz IGluIEBzdmdwYXRobGlua3t9IGFyZSBhbHNvIHByZXNlbnQgaW4gZHJhd3ZnLiBGb3Igc29tZSBv ZiB0aGVtLAordGhlcmUgaXMgYW4gYWxpYXMgdG8gYSBsb25nZXIgbmFtZToKKworQGl0ZW1pemUK K0BpdGVtIEB2Z3NjbWR7Y3VydmV0b30gZm9yIEB2Z3NjbWR7Q30uCitAaXRlbSBAdmdzY21ke3Jj dXJ2ZXRvfSBmb3IgQHZnc2NtZHtjfS4KK0BpdGVtIEB2Z3NjbWR7bGluZXRvfSBmb3IgQHZnc2Nt ZHtMfS4KK0BpdGVtIEB2Z3NjbWR7cmxpbmV0b30gZm9yIEB2Z3NjbWR7bH0uCitAaXRlbSBAdmdz Y21ke21vdmV0b30gZm9yIEB2Z3NjbWR7TX0uCitAaXRlbSBAdmdzY21ke3Jtb3ZldG99IGZvciBA dmdzY21ke219LgorQGl0ZW0gQHZnc2NtZHtjbG9zZXBhdGh9IGZvciBAdmdzY21ke1p9LCBAdmdz Y21ke3p9LgorQGVuZCBpdGVtaXplCisKK090aGVyIGNvbW1hbmRzIG9ubHkgZXhpc3QgaW4gYSBz aW5nbGUtbGV0dGVyIGZvcm06CisKK0BpdGVtaXplCitAaXRlbSBAdmdzY21ke0h9LCBAdmdzY21k e2h9CitAaXRlbSBAdmdzY21ke1F9LCBAdmdzY21ke3F9CitAaXRlbSBAdmdzY21ke1N9LCBAdmdz Y21ke3N9CitAaXRlbSBAdmdzY21ke1Z9LCBAdmdzY21ke3Z9CitAaXRlbSBAdmdzY21ke1R9LCBA dmdzY21ke3R9CitAZW5kIGl0ZW1pemUKKworVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ug YSBwYXRoIGluIFNWRyB0byBjcmVhdGUgdGhlIHNhbWUgc2hhcGUgaW4KK2EgZHJhd3ZnIHNjcmlw dC4KKworQGFuY2hvcntpbXBsaWNpdCBjb21tYW5kc30KK0BzdWJzZWN0aW9uIEltcGxpY2l0IENv bW1hbmRzCisKK0ZvciBtYW55IGNvbW1hbmRzLCB0aGUgbmFtZSBjYW4gYmUgb21pdHRlZCB3aGVu IGl0IGlzIHVzZWQgbXVsdGlwbGUKK3RpbWVzIGluIHN1Y2Nlc3NpdmUgY2FsbHMuCisKK0luIHRo ZSByZWZlcmVuY2UgYmVsb3csIHRoZXNlIGNvbW1hbmRzIGhhcyBhIEBlbXBoe0NhbiBiZSBJbXBs aWNpdH0gbm90ZQoraW4gdGhlaXIgc2lnbmF0dXJlLgorCitAY29kZWV4YW1wbGUgeworRm9yIGV4 YW1wbGUsIGluIHRoaXMgc2NyaXB0OgorCitAZXhhbXBsZQorTSA1MCA1MAorbCAxMCAxMAorbCAx MCAtMTAKK2wgMTAgMTAKK2wgMTAgLTEwCitsIDEwIDEwCitzdHJva2UKK0BlbmQgZXhhbXBsZQor CitBZnRlciB0aGUgZmlyc3QgY2FsbCB0byBAdmdzY21ke2x9IChhbGlhcyB0byBAdmdzY21ke3Js aW5ldG99KSwgdGhlIGNvbW1hbmQKK2NhbiBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSBuYW1lLCBz byBpdCBjYW4gYmUgd3JpdHRlbiBhczoKKworQGV4YW1wbGUKK00gNTAgNTAKK2wgMTAgMTAgMTAg LTEwIDEwIDEwIDEwIC0xMCAxMCAxMAorc3Ryb2tlCitAZW5kIGV4YW1wbGUKK30KKworVG8gcmV1 c2UgdGhlIHNhbWUgY29tbWFuZCAoQHZnc2NtZHtsfSwgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUp LCB0aGUKK3BhcnNlciBjaGVja3MgaWYgdGhlIGl0ZW0gYWZ0ZXIgdGhlIGxhc3QgYXJndW1lbnQg aXMgYSBudW1lcmljIHZhbHVlLAorbGlrZSBhIG51bWJlciBsaXRlcmFsIG9yIGEgRkZtcGVnIGV4 cHJlc3Npb24uCisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoaXMgZXhhbXBsZToKKworQGV4YW1wbGUK K2wgMTAgMjAgMzAgNDAgc3Ryb2tlCitAZW5kIGV4YW1wbGUKKworQHZnc2NtZHtsfSByZXF1aXJl cyAyIGFyZ3VtZW50cywgYW5kIGNhbiBiZSBpbXBsaWNpdCwgc28gdGhlIHBhcnNlcgorcGVyZm9y bXMgdGhpcyBvcGVyYXRpb246CisKK0BlbnVtZXJhdGUKKworQGl0ZW0KK1Rha2VzIHRoZSB0d28g bmV4dCBpdGVtcyAoQGNvZGV7MTB9IGFuZCBAY29kZXsyMH0pIGFuZCBlbWl0cyB0aGUgZmlyc3QK K2luc3RydWN0aW9uLgorCitAaXRlbQorQ2hlY2tzIGlmIHRoZSBpdGVtIGFmdGVyIEBjb2RlezIw fSBpcyBhIG51bWVyaWMgdmFsdWUuIFNpbmNlIGl0IGlzCitAY29kZXszMH0sIGl0IHRha2VzIEBj b2RlezMwfSBhbmQgQGNvZGV7NDB9IGFuZCBlbWl0cyB0aGUgc2Vjb25kCitpbnN0cnVjdGlvbiAo QGNvZGV7bCAzMCA0MH0pLgorCitAaXRlbQorQ2hlY2tzIGlmIHRoZSBuZXh0IGl0ZW0gYWZ0ZXIg QGNvZGV7NDB9IGlzIGEgbnVtZXJpYyB2YWx1ZSwgYnV0IGl0IGlzIGEKK2NvbW1hbmQgKEB2Z3Nj bWR7c3Ryb2tlfSksIHNvIGl0IHN0b3BzIHJldXNpbmcgQHZnc2NtZHtsfS4KKworQGVuZCBlbnVt ZXJhdGUKK30KKworVGhpcyBpcyBhbm90aGVyIGZlYXR1cmUgdGFrZW4gZnJvbSBAc3ZncGF0aGxp bmt7fS4gQW4gaW1wb3J0YW50IGRpZmZlcmVuY2Ugd2l0aAorU1ZHIGlzIHRoYXQgdGhlIHNlcGFy YXRvciBiZXR3ZWVuIGl0ZW1zIGlzIGFsd2F5cyByZXF1aXJlZC4gSW4gU1ZHLCBpdCBjYW4gYmUK K29taXR0ZWQgaW4gc29tZSBjYXNlcy4gRm9yIGV4YW1wbGUsIHRoZSBleHByZXNzaW9uIEBjb2Rl e20xLTJ9IGlzIGVxdWl2YWxlbnQgdG8KK0Bjb2Rle20gMSAtMn0gaW4gU1ZHLCBidXQgYSBzeW50 YXggZXJyb3IgaW4gZHJhd3ZnLgorCitAc2VjdGlvbiBBcmd1bWVudHMKKworTW9zdCBjb21tYW5k cyBleHBlY3QgbnVtZXJpYyBhcmd1bWVudHMsIGxpa2UgbnVtYmVyIGxpdGVyYWxzLCB2YXJpYWJs ZQorbmFtZXMsIG9yIGV4cHJlc3Npb25zLgorCitAdmdzY21ke3NldGNvbG9yfSBhbmQgQHZnc2Nt ZHtjb2xvcnN0b3B9IGV4cGVjdCBhIGNvbG9yLgorCitAdmdzY21ke3NldGxpbmVjYXB9IGFuZCBA dmdzY21ke3NldGxpbmVqb2lufSBleHBlY3QgYSBjb25zdGFudCB2YWx1ZS4KKworQHN1YnNlY3Rp b24gTnVtYmVyIExpdGVyYWxzCisKK0EgbnVtYmVyIGxpdGVyYWwgaXMgYW4gaXRlbSBpbiB0aGUg c2NyaXB0IHRoYXQgcmVwcmVzZW50cyBhIGNvbnN0YW50Cit2YWx1ZS4gQW55IGl0ZW0gdGhhdCBz dGFydHMgd2l0aCBhIGRlY2ltYWwgZGlnaXQgKGJldHdlZW4gQGNvZGV7MH0gYW5kCitAY29kZXs5 fSksIGEgQGNvZGV7LX0gb3IgYSBAY29kZXsrfSwgaXMgaW50ZXJwcmV0ZWQgYXMgYSBudW1iZXIg bGl0ZXJhbC4KKworVGhlIHZhbHVlIGlzIHBhcnNlZCB3aXRoCitAdXJlZntodHRwczovL2ZmbXBl Zy5vcmcvZG94eWdlbi90cnVuay9ldmFsXzhjLmh0bWwjYTdkMjE5MDVjOTJlZTVhZjBiYjUyOWQy ZGFmOGNiN2MzLEBjb2Rle2F2X3N0cnRvZH19LgorSXQgc3VwcG9ydHMgdGhlIHByZWZpeCBAY29k ZXsweH0gdG8gd3JpdGUgYSB2YWx1ZSB3aXRoIGhleGFkZWNpbWFsCitkaWdpdHMsIGFuZAorQHVy ZWZ7aHR0cHM6Ly9mZm1wZWcub3JnL2ZmbXBlZy11dGlscy5odG1sIzp+OnRleHQ9VGhlJTIwZXZh bHVhdG9yJTIwYWxzbyUyMHJlY29nbml6ZXMlMjB0aGUlMjBJbnRlcm5hdGlvbmFsJTIwU3lzdGVt JTIwdW5pdCUyMHByZWZpeGVzLG1hbnkKK3VuaXRzfSAobGlrZSBAY29kZXtLfSBvciBAY29kZXtH aUJ9KS4KKworSW4gdGhlIG5leHQgZXhhbXBsZSwgYWxsIGxpdGVyYWxzIHJlcHJlc2VudCB0aGUg c2FtZSB2YWx1ZToKKworQGV4YW1wbGUKKzEwMDAwCisxZTQKKzEwSworMHgyNzEwCitAZW5kIGV4 YW1wbGUKKworQHN1YnNlY3Rpb24gRXhwcmVzc2lvbnMKKworQGZmZXhwcnN7fSBjYW4gYmUgdXNl ZCBhcyBhcmd1bWVudHMgZm9yIGFueSBjb21tYW5kIHRoYXQgZXhwZWN0cyBhIG51bWVyaWMKK2Fy Z3VtZW50LiBUaGUgZXhwcmVzc2lvbiBtdXN0IGJlIGVuY2xvc2VkIGluIHBhcmVudGhlc2lzLgor CitAY29kZWV4YW1wbGUgeworVGhlIHZhcmlhYmxlcyBAdmFye3d9IGFuZCBAdmFye2h9IHJlcHJl c2VudCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUKK2ZyYW1lLiBXZSBjYW4gY29tcHV0ZSB0 aGUgY2VudGVyIG9mIHRoZSBmcmFtZSBieSBkaXZpZGluZyB0aGVtIGJ5IEBjb2RlezJ9OgorCitA ZXhhbXBsZQorTSAodyAvIDIpIChoIC8gMikKK0BlbmQgZXhhbXBsZQorCitUaGV5IGNhbiBhbHNv IGNvbnRhaW4gcGFyZW50aGVzaXMgKHRvIGdyb3VwIG9wZXJhdGlvbnMsIHRvIGNhbGwgZnVuY3Rp b25zLAorZXRjKToKKworQGV4YW1wbGUKK21vdmV0bworICAgICgodyArIDEwKSAvIDIpICAgICAg Ly8geAorICAgIChoIC8gKDIgKiBjb3ModCkpKSAgLy8geQorQGVuZCBleGFtcGxlCit9CisKK1Ro ZSB2YXJpYWJsZXMgQHZhcntufSBhbmQgQHZhcnt0fSBjYW4gYmUgdXNlZCB0byBjb21wdXRlIGEg dmFsdWUgdGhhdCBjaGFuZ2VzCitvdmVyIHRpbWUuCisKK0Bjb2RlZXhhbXBsZSB7CitUbyBkcmF3 IGEgY2lyY2xlIG9zY2lsbGF0aW5nIGZyb20gbGVmdCB0byByaWdodCwgd2UgY2FuIHVzZSBhbgor ZXhwcmVzc2lvbiBiYXNlZCBvbiBAY29kZXtzaW4odCl9IGZvciB0aGUgQGNvZGV7eH0gY29vcmRp bmF0ZToKKworQGV4YW1wbGUKK2NpcmNsZQorICAgICh3IC8gMiArIHNpbigyICogdCkgKiB3IC8g NCkgIC8vIHgKKyAgICAoaCAvIDIpICAgICAgICAgICAgICAgICAgICAgICAvLyB5CisgICAgKHcg LyA1KSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFkaXVzCisKK3N0cm9rZQorQGVuZCBleGFt cGxlCit9CisKK0V4cHJlc3Npb25zIGNhbiBiZSBzcGxpdCBpbiBtdWx0aXBsZSBsaW5lcywgYnV0 IHRoZXkgY2FuJ3QgY29udGFpbgorY29tbWVudHMgd2l0aGluIHRoZW0uCisKK0BleGFtcGxlCitt b3ZldG8gICAvLyBUaGlzIGlzIGEgY29tbWVudC4KKyAgICAodyAgIC8vIFRoaXMgaXMgcGFydCBv ZiB0aGUgZXhwcmVzc2lvbiwgbm90IGEgY29tbWVudC4KKyAgICAgKyBoKQorQGVuZCBleGFtcGxl CisKK0BzdWJzZWN0aW9uIFZhcmlhYmxlIE5hbWVzCisKK1doZW4gYW4gZXhwcmVzc2lvbiBpcyBv bmx5IGEgcmVmZXJlbmNlIHRvIGEgdmFyaWFibGUsIHRoZSBwYXJlbnRoZXNpcworY2FuIGJlIG9t aXR0ZWQsIGFuZCB0aGUgaXRlbSBpcyBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lLgorCitAY29kZWV4 YW1wbGUgeworVGhlIG5leHQgMyBleHByZXNzaW9ucyBhcmUgZXF1aXZhbGVudDogaW4gYWxsIGNh c2VzLCB0aGV5IGNyZWF0ZSBhCityZWN0YW5nbGUgY292ZXJpbmcgdGhlIHdob2xlIGZyYW1lLgor CitAZXhhbXBsZQorcmVjdCAoMCkgKDApICh3KSAoaCkKKworcmVjdCAwIDAgdyBoCisKK3JlY3Qg KDApIDAgKHcpIGgKK0BlbmQgZXhhbXBsZQorfQorCitJdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUg YSB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgb2YgYSBjb21tYW5kLCBhbmQKK3RoZW4gdXNl IGl0IGFzIGFuIGFyZ3VtZW50LiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlIGl0ZW0gQHZh cntofSBpcyBhCityZWZlcmVuY2UgdG8gYSB2YXJpYWJsZSAoZnJhbWUgaGVpZ2h0KSwgYnV0IGlu IG90aGVyIGNvbnRleHRzIGl0IG1heSBiZQorYSBjb21tYW5kIChAdmdzY21ke2h9KS4KKworRm9y IEByZWZ7aW1wbGljaXQgY29tbWFuZHN9LCB0aGUgcGFyc2VyIHByaW9yaXRpemVzCitjb21tYW5k cyBvdmVyIHZhcmlhYmxlIG5hbWVzIHdoZW4gaXQgaGFzIHRvIGRldGVybWluZSBpZiB0aGUgY29t bWFuZCBpcworcmV1c2VkLgorCitAY29kZWV4YW1wbGUgeworSW4gdGhpcyBleGFtcGxlLCB0aGUg dmFyaWFibGUgQHZhcntjfSBpcyB1c2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBpbiB0d28KK2Nh bGxzIHRvIEB2Z3NjbWR7bH0uIEhvd2V2ZXIsIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyB2YWxpZCwg YmVjYXVzZSBpbiB0aGUKK3NlY29uZCBjYWxsIHRoZSBwYXJzZXIgcmVjb2duaXplcyBAdmdzY21k e2N9IGFzIGEgY29tbWFuZC4KKworQGV4YW1wbGUKK3NldHZhciBjIDUKK2wgYyAxMCBjIDE1CitA ZW5kIGV4YW1wbGUKKworVGhpcyBpc3N1ZSBjYW4gYmUgZml4ZWQgYnkgc3Vycm91bmRpbmcgdGhl IHN0YXJ0IG9mIHRoZSBzZWNvbmQgY2FsbCB3aXRoCitwYXJlbnRoZXNpczoKKworQGV4YW1wbGUK K3NldHZhciBjIDUKK2wgYyAxMCAoYykgMTUKK0BlbmQgZXhhbXBsZQorfQorCitAYW5jaG9ye0Nv bG9yc30KK0BzdWJzZWN0aW9uIENvbG9ycworCitUaGUgY29sb3IgdG8gc3Ryb2tlIGFuZCB0byBm aWxsIHBhdGhzIGNhbiBiZSBzZXQgd2l0aCBAdmdzY21ke3NldGNvbG9yfS4KK0l0cyBhcmd1bWVu dCBoYXMgdGhlIHNhbWUgc3ludGF4IGZvciBjb2xvcnMgaW4gRkZtcGVnOgorCitAaXRlbWl6ZQor QGl0ZW0KK0EgQHJlZntDb2xvciwscHJlZGVmaW5lZCBjb2xvciBuYW1lLGZmbXBlZy11dGlsc30u CisKK0BpdGVtCitJbiBAY29kZXsjUlJHR0JCfSBmb3JtYXQuCisKK0BpdGVtCitPcHRpb25hbGx5 LCBhbiBAY29kZXtAQGF9IHN1ZmZpeCBjYW4gYmUgYWRkZWQgdG8gc2V0IHRoZSBhbHBoYSB2YWx1 ZSwKK3doZXJlIEBjb2Rle2F9IGlzIGEgbnVtYmVyIGJldHdlZW4gQGNvZGV7MH0gYW5kIEBjb2Rl ezF9LgorQGVuZCBpdGVtaXplCisKK1RoZSBjb2xvciBjYW4gYmUgYSB2YXJpYWJsZSBuYW1lLiBJ biB0aGF0IGNhc2UsIGl0cyB2YWx1ZSBpcyBpbnRlcnByZXRlZAorYXMgYSBAY29kZXsweFJSR0dC QkFBfSBjb2RlLgorCitAZXhhbXBsZQorY2lyY2xlIDc1IDEwMCA1MAorc2V0Y29sb3IgI0ZGMDAw MAorZmlsbAorCitjaXJjbGUgMTI1IDEwMCA1MAorc2V0dmFyIEN1c3RvbUdyZWVuIDB4OTBFRUFB RkYKK3NldGNvbG9yIEN1c3RvbUdyZWVuCitmaWxsCisKK2NpcmNsZSAxNzUgMTAwIDUwCitzZXRj b2xvciBibHVlQEAwLjUKK2ZpbGwKK0BlbmQgZXhhbXBsZQorCitUaGUgY29tbWFuZHMgQHZnc2Nt ZHtzZXRyZ2JhfSBhbmQgQHZnc2NtZHtzZXRoc2xhfSBhbGxvdyBzZXR0aW5nIGNvbG9ycwordXNp bmcgZXhwcmVzc2lvbnMuCisKK0B2Z3NjbWR7ZGVmcmdiYX0gYW5kIEB2Z3NjbWR7ZGVmaHNsYX0g Y29tcHV0ZSB0aGUgY29sb3IgYW5kIHN0b3JlIGl0IGluIGEKK3ZhcmlhYmxlLgorCitAc3Vic2Vj dGlvbiBDb25zdGFudHMKKworVGhlIGFyZ3VtZW50IGZvciBAdmdzY21ke3NldGxpbmVjYXB9IGFu ZCBAdmdzY21ke3NldGxpbmVqb2lufSBpcyBhbgoraWRlbnRpZmllciByZWZlcnJpbmcgdG8gYSBj b25zdGFudCB2YWx1ZS4KKworQGV4YW1wbGUKK3NldGxpbmVjYXAgcm91bmQKK0BlbmQgZXhhbXBs ZQorCitAY2hhcHRlciBHdWlkZQorCitAc2VjdGlvbiBQYXRocworCitBIHBhdGggaXMgYSBjb21w bGV4IHNoYXBlLCBjb21wb3NlZCBieSBsaW5lcyBhbmQgY3VydmVzLCB0aGF0IGNhbiBiZQordXNl ZCB0byBmaWxsIGEgcmVnaW9uLCB0byBzdHJva2UgYW4gb3V0bGluZSwgb3IgdG8gZXN0YWJsaXNo IGEgY2xpcAorcmVnaW9uLgorCitJbiBvcmRlciB0byBkcmF3IGFueXRoaW5nIG9uIHRvcCBvZiBh IHZpZGVvIGZyYW1lLCBmaXJzdCB3ZSBoYXZlIHRvCitkZWZpbmUgYSBwYXRoLCBhbmQgdGhlbiB1 c2UgQHZnc2NtZHtzdHJva2V9IG9yIEB2Z3NjbWR7ZmlsbH0uCisKK1RoZQorQHVyZWZ7aHR0cHM6 Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL1R1dG9yaWFscy9TVkdf ZnJvbV9zY3JhdGNoL1BhdGhzLHR1dG9yaWFsCitvbiBwYXRocyBpbiBNRE59IGlzIGEgZ29vZCBp bnRyb2R1Y3Rpb24gdG8gdGhlIHRvcGljLiBJdCBpcyBmb2N1c2VkIG9uCitAc3ZncGF0aGxpbmt7 fSwgYnV0IHRoZSBzYW1lIGNvbmNlcHRzIGNhbiBiZSBhcHBsaWVkIGluIGRyYXd2Zy4KKworQGFu Y2hvcntjdXJyZW50IHBvaW50fQorQHN1YnNlY3Rpb24gQ3VycmVudCBQb2ludAorCitTb21lIGNv bW1hbmRzIHJlcXVpcmUgYSBAZW1waHtjdXJyZW50IHBvaW50fS4gSW5pdGlhbGx5LCB0aGUKK0Bl bXBoe2N1cnJlbnQgcG9pbnR9IGlzIHNldCB0bworQHVyZWZ7aHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvTmFOLEBjb2Rle05hTn19LiBJdCBpcyBpbml0aWFsaXplZAord2l0aCBAdmdzY21k e019IG9yIEB2Z3NjbWR7bW92ZXRvfS4gT3RoZXIgY29tbWFuZHMsIGxpa2UgQHZnc2NtZHtsaW5l dG99IG9yCitAdmdzY21ke2N1cnZldG99LCB1cGRhdGVzIHRoZSBAZW1waHtjdXJyZW50IHBvaW50 fSB0byB0aGUgbmV3IGVuZCBvZiB0aGUKK3NoYXBlLgorCitUaGUgQGVtcGh7Y3VycmVudCBwb2lu dH0gY2FuIGJlIGNsZWFyZWQgd2l0aCBAdmdzY21ke25ld3BhdGh9LiBDb21tYW5kcwordGhhdCBj bGVhciB0aGUgcGF0aCwgbGlrZSBAdmdzY21ke3N0cm9rZX0gb3IgQHZnc2NtZHtmaWxsfSwgYWxz byBjbGVhciB0aGUKK0BlbXBoe2N1cnJlbnQgcG9pbnR9LgorCitAY29kZWV4YW1wbGUgeworQHZn c2NtZHtybGluZXRvfSB1c2VzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBAZW1waHtjdXJy ZW50IHBvaW50fS4KKworR2l2ZW4gdGhpcyBzY3JpcHQ6CisKK0BleGFtcGxlCittb3ZldG8gMjAg MTAwCitybGluZXRvIDE1MCAtOTAKK3JsaW5ldG8gLTUwIDIwMAorY2xvc2VwYXRoCitzdHJva2UK K0BlbmQgZXhhbXBsZQorCitUaGVzZSBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBAZW1waHtj dXJyZW50IHBvaW50fSBhZnRlciBleGVjdXRpbmcKK2VhY2ggY29tbWFuZDoKKworQG11bHRpdGFi bGUgQGNvbHVtbmZyYWN0aW9ucyAuNSAuNQorQGhlYWRpdGVtIENvbW1hbmQgQHRhYiBDdXJyZW50 IFBvaW50CitAaXRlbSBAY29kZXttb3ZldG8gMjAgMTAwfSBAdGFiIEBjb2RlezIwLCAxMDB9CitA aXRlbSBAY29kZXtybGluZXRvIDE1MCAtOTB9IEB0YWIgQGNvZGV7MTcwLCAxMH0KK0BpdGVtIEBj b2Rle3JsaW5ldG8gLTEwIDUwfSBAdGFiIEBjb2RlezE0MCwgMjEwfQorQGl0ZW0gQGNvZGV7Y2xv c2VwYXRofSBAdGFiIEBjb2RlezIwLCAxMDB9CitAZW5kIG11bHRpdGFibGUKKworVGhlIHNhbWUg c2NyaXB0IGNhbiBiZSB3cml0dGVuIHdpdGggc2luZ2xlLWxldHRlciBhbGlhc2VzOgorCitAZXhh bXBsZQorTSAyMCAxMDAgbCAxNTAgLTkwIC01MCAyMDAgeiBzdHJva2UKK0BlbmQgZXhhbXBsZQor fQorCitAc3Vic2VjdGlvbiBEZWZpbmluZyBhIFNoYXBlCisKK0EgcGF0aCBpcyBkZWZpbmVkIGJ5 IGFkZGluZyBsaW5lcywgY3VydmVzLCBvciBiYXNpYyBzaGFwZXMuCisKK0BpdGVtaXplCitAaXRl bSBCYXNpYyBzaGFwZXMKKworQGl0ZW1pemUKK0BpdGVtIEB2Z3NjbWR7Y2lyY2xlfQorQGl0ZW0g QHZnc2NtZHtlbGxpcHNlfQorQGl0ZW0gQHZnc2NtZHtyZWN0fQorQGl0ZW0gQHZnc2NtZHtyb3Vu ZGVkcmVjdH0KK0BlbmQgaXRlbWl6ZQorCitAaXRlbQorTGluZXMKK0BpdGVtaXplCitAaXRlbSBA dmdzY21ke019LCBAdmdzY21ke21vdmV0b30KK0BpdGVtIEB2Z3NjbWR7bX0sIEB2Z3NjbWR7cm1v dmV0b30KK0BpdGVtIEB2Z3NjbWR7SH0sIEB2Z3NjbWR7aH0KK0BpdGVtIEB2Z3NjbWR7Vn0sIEB2 Z3NjbWR7dn0KK0BpdGVtIEB2Z3NjbWR7TH0sIEB2Z3NjbWR7bGluZXRvfQorQGl0ZW0gQHZnc2Nt ZHtsfSwgQHZnc2NtZHtybGluZXRvfQorQGl0ZW0gQHZnc2NtZHtafSwgQHZnc2NtZHt6fSwgQHZn c2NtZHtjbG9zZXBhdGh9CitAZW5kIGl0ZW1pemUKKworQGl0ZW0KK0N1cnZlcworQGl0ZW1pemUK K0BpdGVtIEB2Z3NjbWR7YXJjfSwgQHZnc2NtZHthcmNufQorQGl0ZW0gQHZnc2NtZHtDfSwgQHZn c2NtZHtjdXJ2ZXRvfSwKK0BpdGVtIEB2Z3NjbWR7Y30sIEB2Z3NjbWR7cmN1cnZldG99CitAaXRl bSBAdmdzY21ke1F9LCBAdmdzY21ke3F9CitAaXRlbSBAdmdzY21ke1N9LCBAdmdzY21ke3N9CitA aXRlbSBAdmdzY21ke1R9LCBAdmdzY21ke3R9CitAZW5kIGl0ZW1pemUKKworQGVuZCBpdGVtaXpl CisKK1NpbmdsZS1sZXR0ZXIgY29tbWFuZHMgYXJlIHRha2VuIGZyb20gQHN2Z3BhdGhsaW5re30u CisKK0BhbmNob3J7ZmlsbCBydWxlc30KK0BzdWJzZWN0aW9uIEZpbGwKKworVGhlIHJlZ2lvbiB3 aXRoaW4gdGhlIHNoYXBlIGRlZmluZWQgYnkgYSBwYXRoIGNhbiBiZSBmaWxsZWQgd2l0aAorQHZn c2NtZHtmaWxsfSBvciBAdmdzY21ke2VvZmlsbH0uIEVhY2ggY29tbWFuZCB1c2VzIGEgZGlmZmVy ZW50CitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fp cm8tdC5odG1sI2NhaXJvLWZpbGwtcnVsZS10LGZpbGwKK3J1bGV9OgorCitAaXRlbWl6ZQorQGl0 ZW0KK0B2Z3NjbWR7ZmlsbH0gdXNlcyB0aGUKK0B1cmVme2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhp Y3Mub3JnL21hbnVhbC9jYWlyby1jYWlyby10Lmh0bWwjQ0FJUk8tRklMTC1SVUxFLVdJTkRJTkc6 Q0FQUyx3aW5kaW5nCitydWxlfSwgYWxzbyBrbm93biBhcworQHVyZWZ7aHR0cHM6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvTm9uemVyby1ydWxlLG5vbnplcm8gcnVsZX0uCitAaXRlbQorQHZnc2Nt ZHtlb2ZpbGx9IHVzZXMgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9t YW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI0NBSVJPLUZJTEwtUlVMRS1FVkVOLU9ERDpDQVBTLGV2 ZW4tLW9kZAorcnVsZX0uCitAZW5kIGl0ZW1pemUKKworQGNvZGVleGFtcGxleworVGhpcyBzY3Jp cHQgc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKK0B1cmVme2h0dHBzOi8vd3d3LmNh aXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1jYWlyby10Lmh0bWwjQ0FJUk8tRklMTC1SVUxF LVdJTkRJTkc6Q0FQUyx3aW5kaW5nfQorYW5kCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBo aWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI0NBSVJPLUZJTEwtUlVMRS1FVkVOLU9E RDpDQVBTLGV2ZW4tLW9kZH0KK3J1bGVzOgorCitAZXhhbXBsZQorcmVjdCA1MCAxMCAxMDAgNjAK K2NpcmNsZSAxNTAgNzAgNDAKK3NldGNvbG9yIHNlYWdyZWVuCitmaWxsCisKK3JlY3QgNTAgMTMw IDEwMCA2MAorY2lyY2xlIDE1MCAxOTAgNDAKK3NldGNvbG9yIHNreWJsdWUKK2VvZmlsbAorQGVu ZCBleGFtcGxlCit9CisKK0BzdWJzZWN0aW9uIFN0cm9rZQorCitAdmdzY21ke3N0cm9rZX0gZHJh d3MgYSBsaW5lIGFyb3VuZCB0aGUgc2hhcGUgZGVmaW5lZCBieSB0aGUgcGF0aC4gVGhlCitzdHJv a2UgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBkaWZmZXJlbnQgY29tbWFuZHM6CisKK0BpdGVtaXpl CitAaXRlbSBAdmdzY21ke3NldGRhc2h9CitAaXRlbSBAdmdzY21ke3NldGRhc2hvZmZzZXR9CitA aXRlbSBAdmdzY21ke3NldGxpbmVjYXB9CitAaXRlbSBAdmdzY21ke3NldGxpbmVqb2lufQorQGl0 ZW0gQHZnc2NtZHtzZXRsaW5ld2lkdGh9CitAaXRlbSBAdmdzY21ke3Jlc2V0ZGFzaH0KK0BlbmQg aXRlbWl6ZQorCitAY29kZWV4YW1wbGV7CitUaGlzIGV4YW1wbGUgdXNlIEB2Z3NjbWR7c2V0ZGFz aG9mZnNldH0gdG8gYW5pbWF0ZSB0aGUgc3Ryb2tlOgorCitAZXhhbXBsZQorbW92ZXRvIDAgMAor bGluZXRvIHcgaAorCitzZXRsaW5lY2FwIHJvdW5kCitzZXRkYXNoIDUwIDUwCitzZXRsaW5ld2lk dGggMjAKK3NldGRhc2hvZmZzZXQgKGh5cG90KHcsIGgpICogdCAvIC0zKQorc2V0Y29sb3Igc2Vh Z3JlZW4KKworc3Ryb2tlCitAZW5kIGV4YW1wbGUKK30KKworQHN1YnNlY3Rpb24gQ2xpcAorCitB IEB1cmVme2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NsaXBwaW5nXyhjb21wdXRlcl9n cmFwaGljcyksY2xpcAorcmVnaW9ufSBjYW4gYmUgZXN0YWJsaXNoZWQgd2l0aCBAdmdzY21ke2Ns aXB9IGFuZCBAdmdzY21ke2VvY2xpcH0uCisKK0lmIHRoZXJlIGlzIGFuIGFjdGl2ZSBjbGlwIHJl Z2lvbiwgdGhlIG5ldyBjbGlwIHJlZ2lvbiB3aWxsIGJlIHRoZQoraW50ZXJzZWN0aW9uIGJldHdl ZW4gdGhlIGV4aXN0aW5nIG9uZSBhbmQgdGhlIHBhdGguIEB2Z3NjbWR7cmVzZXRjbGlwfQorcmVz ZXQgdGhlIGNsaXAgcmVnaW9uIHRvIHRoZSB3aG9sZSBmcmFtZS4KKworQHZnc2NtZHtlb2NsaXB9 IHVzZXMgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fp cm8tY2Fpcm8tdC5odG1sI0NBSVJPLUZJTEwtUlVMRS1FVkVOLU9ERDpDQVBTLGV2ZW4tLW9kZAor cnVsZX0gdG8gY29tcHV0ZSB0aGUgY2xpcCByZWdpb24uCisKK0Bjb2RlZXhhbXBsZXsKK0BleGFt cGxlCityZWN0IDUwIDUwIDEwMCAyMDAKK2NsaXAKKworY2lyY2xlIDMwIDMwIDE1MAorc2V0Y29s b3Igc2VhZ3JlZW4KK2ZpbGwKKworLy8gRHJhdyBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KK3Jl c2V0Y2xpcAorY2lyY2xlIDMwIDMwIDE1MAorc2V0bGluZXdpZHRoIDMKK3NldGNvbG9yIHNreWJs dWUKK3N0cm9rZQorQGVuZCBleGFtcGxlCit9CisKK0BzdWJzZWN0aW9uIFByZXNlcnZpbmcgUGF0 aHMKKworVGhlIHBhdGggaXMgY2xlYXJlZCBhZnRlciBhbnkgb3BlcmF0aW9uIG9uIGl0LCBsaWtl IEB2Z3NjbWR7ZmlsbH0gb3IKK0B2Z3NjbWR7c3Ryb2tlfS4gVG8gcmV1c2UgdGhlIHNhbWUgcGF0 aCBpbiBtdWx0aXBsZSBvcGVyYXRpb25zLAorQHZnc2NtZHtwcmVzZXJ2ZX0gbXVzdCBiZSBjYWxs ZWQgYmVmb3JlIHRoZW0uCisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoaXMgZXhhbXBsZSwgZWFjaCBw YXRoIGlzIHVzZWQgdHdpY2UuCisKK0BleGFtcGxlCitjaXJjbGUgMTIwIDEyMCA1MAorc2V0Y29s b3Igc2VhZ3JlZW4KK3ByZXNlcnZlIHN0cm9rZQorY2xpcAorCitjaXJjbGUgMTAwIDEwMCA1MAor c2V0Y29sb3Igc2t5Ymx1ZQorcHJlc2VydmUgZmlsbAorc2V0Y29sb3IgdG9tYXRvCitzdHJva2UK K0BlbmQgZXhhbXBsZQorfQorCitAc2VjdGlvbiBWYXJpYWJsZXMKKworQSBkcmF3dmcgY2FuIHVz ZSBzb21lIHZhcmlhYmxlcywgcHJvdmlkZWQgYnkgdGhlIGludGVycHJldGVyLCB0byBjb21wdXRl Cit2YWx1ZXMgaW4gQGZmZXhwcnN7fToKKworQHRhYmxlIEB2YXIKK0BpdGVtIGN4CitYIGNvb3Jk aW5hdGUgb2YgdGhlIEByZWZ7Y3VycmVudCBwb2ludH0uCisKK0BpdGVtIGN5CitZIGNvb3JkaW5h dGUgb2YgdGhlIEByZWZ7Y3VycmVudCBwb2ludH0uCisKK0BpdGVtIHcKK1dpZHRoLCBpbiBwaXhl bHMsIG9mIHRoZSBmcmFtZS4KKworQGl0ZW0gaAorSGVpZ2h0LCBpbiBwaXhlbHMsIG9mIHRoZSBm cmFtZS4KKworQGl0ZW0gaQorVGhlIGxvb3AgY291bnRlciBpbiByZXBlYXQgYmxvY2tzLgorCitA aXRlbSBuCitGcmFtZSBudW1iZXIuCisKK0BpdGVtIHQKK1RpbWVzdGFtcCwgaW4gc2Vjb25kcy4K KworQGl0ZW0gdHMKK1RpbWVzdGFtcCwgaW4gc2Vjb25kcywgb2YgdGhlIGZpcnN0IGZyYW1lLgor CitAaXRlbSBkdXJhdGlvbgorRHVyYXRpb24sIGluIHNlY29uZHMsIG9mIHRoZSBmcmFtZS4KK0Bl bmQgdGFibGUKKworQGFuY2hvcntVc2VyIFZhcmlhYmxlc30KK0BzdWJzZWN0aW9uIFVzZXIgVmFy aWFibGVzCisKK05ldyB2YXJpYWJsZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgQHZnc2NtZHtz ZXR2YXJ9IGNvbW1hbmQuIEl0Cithc3NvY2lhdGVzIGEgbmFtZSB3aXRoIGEgbnVtZXJpYyB2YWx1 ZS4KKworVGhlIG5hbWUgbXVzdCBmb2xsb3cgdGhlc2UgcnVsZXM6CisKK0BpdGVtaXplCitAaXRl bQorSXQgbXVzdCBzdGFydCB3aXRoIGFuIEFTQ0lJIGxldHRlciBvciBhbiB1bmRlcnNjb3JlIChA Y29kZXtffSkuCisKK0BpdGVtCitJdCBjYW4gY29udGFpbiBvbmx5IEFTQ0lJIGxldHRlcnMsIHVu ZGVyc2NvcmVzLCBhbmQgZGlnaXRzLgorCitAaXRlbQorSXQgbXVzdCBub3QgbWF0Y2ggdGhlIG5h bWUgb2YgYSB2YXJpYWJsZSBwcm92aWRlZCBieSB0aGUgaW50ZXJwcmV0ZXIKKyhsaWtlIEB2YXJ7 d30gb3IgQHZhcnt0fSkuCitAZW5kIGl0ZW1pemUKKworVGhlIHNhbWUgdmFyaWFibGUgY2FuIGJl IGFzc2lnbmVkIG11bHRpcGxlIHRpbWVzLgorCitAY29kZWV4YW1wbGV7CitJbiB0aGlzIGV4YW1w bGUsIHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbiBpcyBzdG9yZWQgaW4gYSB2YXJpYWJsZQor d2l0aCB0aGUgbmFtZSBAdmFye3Byb2dyZXNzfS4gVGhlbiwgaXQgaXMgdXNlZCBmb3IgdGhlIEB2 YXJ7eH0gYW5kCitAdmFye3dpZHRofSBhcmd1bWVudHMgb2YgQHZnc2NtZHtyZWN0fS4KKworQGV4 YW1wbGUKK3NldHZhciBwcm9ncmVzcyAodyAqIChwb3cobW9kKHQgLyAyICsgMC41LCAxKSwgMi41 KSkpCisKK3JlY3QgKCh3IC0gcHJvZ3Jlc3MpIC8gMikgMCBwcm9ncmVzcyBoCisKK3NldGNvbG9y IGRhcmtibHVlCitmaWxsCitAZW5kIGV4YW1wbGUKK30KKworQ3VycmVudGx5LCBhIHNjcmlwdCBj YW4gY29udGFpbiBvbmx5IDIwIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lcywgYnV0Cit0aGlzIGxp bWl0IGNhbiBiZSBtb2RpZmllZCBpbiB0aGUgZnV0dXJlLgorCitAYW5jaG9ye2N1cnJlbnQgcGF0 dGVybn0KK0BzZWN0aW9uIFBhdHRlcm5zCisKK1RoZSBwYXR0ZXJuIGZvciBmaWxsIGFuZCBzdHJv a2Ugb3BlcmF0aW9ucyBjYW4gYmUgZWl0aGVyIGEgc29saWQgY29sb3IsCitvciBhIGdyYWRpZW50 LgorCitAaXRlbWl6ZQorQGl0ZW0gU29saWQgY29sb3JzLgorCitAaXRlbWl6ZQorQGl0ZW0gQHZn c2NtZHtzZXRjb2xvcn0KK0BpdGVtIEB2Z3NjbWR7c2V0aHNsYX0KK0BpdGVtIEB2Z3NjbWR7c2V0 cmdiYX0KK0BlbmQgaXRlbWl6ZQorCitAaXRlbSBHcmFkaWVudHMuCisKK0BpdGVtaXplCitAaXRl bSBAdmdzY21ke2xpbmVhcmdyYWR9CitAaXRlbSBAdmdzY21ke3JhZGlhbGdyYWR9CitAZW5kIGl0 ZW1pemUKKworQGVuZCBpdGVtaXplCisKK1RoZSBwYXR0ZXJuIGlzIG5vdCBjbGVhcmVkIGFmdGVy IGJlaW5nIHVzZWQgaW4gYSBmaWxsIG9yIHN0cm9rZQorb3BlcmF0aW9uLCBidXQgaXQgaXMgcmVw bGFjZWQgYnkgYW55IGNvbW1hbmQgdGhhdCBzZXRzIGEgbmV3IHBhdHRlcm4uCisKK0BzdWJzZWN0 aW9uIEdyYWRpZW50cworCitUbyBjb25maWd1cmUgYSBncmFkaWVudCwgZmlyc3QgY2FsbCB0byBA dmdzY21ke2xpbmVhcmdyYWR9IG9yCitAdmdzY21ke3JhZGlhbGdyYWR9LCBhbmQgdGhlbiBhZGQg Y29sb3Igc3RvcHMgYnkgY2FsbGluZyBAdmdzY21ke2NvbG9yc3RvcH0KK2ZvciBlYWNoIHN0b3Au CisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoaXMgZXhhbXBsZSwgdGhlIHdob2xlIGZyYW1lIGlzIGZp bGxlZCB3aXRoIGEgbGluZWFyIGdyYWRpZW50OgorCitAZXhhbXBsZQorbGluZWFyZ3JhZCAwIDAg dyBoCitjb2xvcnN0b3AgMCBza3libHVlCitjb2xvcnN0b3AgMSBkYXJrYmx1ZQorCityZWN0IDAg MCB3IGgKK2ZpbGwKK0BlbmQgZXhhbXBsZQorCitJbiB0aGlzIGV4YW1wbGUsIGEgcmFkaWFsIGdy YWRpZW50IGlzIHVzZWQgdG8gc2ltdWxhdGUgYSBzcGhlcmU6CisKK0BleGFtcGxlCityYWRpYWxn cmFkIDkwIDkwIDUgMTIwIDEyMCAxMDAKK2NvbG9yc3RvcCAwLjAgIzkwRERGRgorY29sb3JzdG9w IDAuOSAjMDAwMDMwCitjb2xvcnN0b3AgMS4wICMwMDAwMDAKKworcmVjdCAwIDAgdyBoCitmaWxs CitAZW5kIGV4YW1wbGUKK30KKworQHN1YnNlY3Rpb24gVmFyaWFibGVzCisKK0B2Z3NjbWR7c2V0 Y29sb3J9IGFuZCBAdmdzY21ke2NvbG9yc3RvcH0gYWNjZXB0IGEgdmFyaWFibGUgbmFtZSBhcyB0 aGUKK2FyZ3VtZW50LiBXaGVuIGEgdmFyaWFibGUgaXMgdXNlZCwgaXRzIHZhbHVlIGlzIGludGVy cHJldGVkIGFzIGEKK0Bjb2RlezB4UlJHR0JCQUF9IGNvZGUuCisKK0Bjb2RlZXhhbXBsZXsKK0Bl eGFtcGxlCisvLyBVc2UgY29sb3IgIzEwMjBGRiwgYWxwaGEgPSA1MCUKK3NldHZhciBzb21lYmx1 ZSAweDEwMjBGRjdGCisKK3NldGNvbG9yIHNvbWVibHVlCisKK3JlY3QgMzAgMzAgMTIwIDEyMAor ZmlsbAorCityZWN0IDkwIDkwIDEyMCAxMjAKK2ZpbGwKK0BlbmQgZXhhbXBsZQorfQorCitJZiBh IHZhcmlhYmxlIGhhcyB0aGUgc2FtZSBuYW1lIG9mIGEgQHJlZntDb2xvciwsa25vd24gY29sb3Is ZmZtcGVnLXV0aWxzfSwgdGhlCit2YXJpYWJsZSBoYXMgcHJlZmVyZW5jZSwgYW5kIHdpbGwgYmUg dXNlZCBpbnN0ZWFkIG9mIHRoZSBwcmVkZWZpbmVkIGNvbG9yLgorCitAY29kZWV4YW1wbGV7CitA ZXhhbXBsZQorc2V0Y29sb3IgdGVhbAorcmVjdCAzMCAzMCAxMjAgMTIwCitmaWxsCisKK3NldHZh ciB0ZWFsIDB4NzBBQUFBRkYgIC8vIE5vdywgYHRlYWxgIGlzICM3MEFBQUEKK3NldGNvbG9yIHRl YWwKK3JlY3QgOTAgOTAgMTIwIDEyMAorZmlsbAorQGVuZCBleGFtcGxlCit9CisKK0B2Z3NjbWR7 ZGVmcmdiYX0gYW5kIEB2Z3NjbWR7ZGVmaHNsYX0gY29tcHV0ZSB0aGUgQGNvZGV7MHhSUkdHQkJB QX0gdmFsdWUKK2ZvciBhIGNvbG9yIGdpdmVuIGl0cyBjb2xvciBjb21wb25lbnRzOgorCitAaXRl bWl6ZQorQGl0ZW0KK0ZvciBAdmdzY21ke2RlZnJnYmF9OiBAZW1waHtyZWR9LCBAZW1waHtncmVl bn0sIEBlbXBoe2JsdWV9LCBhbmQKK0BlbXBoe2FscGhhfS4KKworQGl0ZW0KK0ZvciBAdmdzY21k e2RlZmhzbGF9OiBAZW1waHtodWV9LCBAZW1waHtzYXR1cmF0aW9ufSwgQGVtcGh7bGlnaHRuZXNz fSwgYW5kCitAZW1waHthbHBoYX0uCitAZW5kIGl0ZW1pemUKKworRWFjaCBjb2xvciBjb21wb25l bnQgbXVzdCBiZSBpbiByYW5nZSBAY29kZXswfSB0byBAY29kZXsxfSwgZXhjZXB0CitAZW1waHto dWV9LCB3aGljaCBpcyBAY29kZXswfSB0byBAY29kZXszNjB9LgorCitAY29kZWV4YW1wbGV7CitA ZXhhbXBsZQorZGVmcmdiYSBjb2xvckEgMSAwLjUgMC4yNSAxICAgICAvLyBjb2xvckEgPSBSR0Io MjU1LCAxMjcsIDYzKQorZGVmaHNsYSBjb2xvckIgMjAwIDAuNzUgMC4yNSAxICAvLyBjb2xvckIg PSBIU0woMjAwLCA3NSUsIDI1JSkKKworcmVjdCAwIDAgKHcgLyAyKSBoCitzZXRjb2xvciBjb2xv ckEKK2ZpbGwKKworcmVjdCAodyAvIDIpIDAgKHcgLyAyKSBoCitzZXRjb2xvciBjb2xvckIKK2Zp bGwKK0BlbmQgZXhhbXBsZQorfQorCitAYW5jaG9ye3RyYW5zZm9ybWF0aW9uIG1hdHJpeH0KK0Bz ZWN0aW9uIFRyYW5zZm9ybWF0aW9ucworCitUaGUgY29vcmRpbmF0ZXMgZm9yIGVhY2ggY29tbWFu ZCBjYW4gYmUgc2NhbGVkLCByb3RhdGVkLCBhbmQgdHJhbnNsYXRlZCwKK2J5IHVzaW5nIHRoZSBm b2xsb3dpbmcgY29tbWFuZHM6CisKK0BpdGVtaXplCitAaXRlbSBAdmdzY21ke3JvdGF0ZX0KK0Bp dGVtIEB2Z3NjbWR7c2NhbGV9CitAaXRlbSBAdmdzY21ke3NjYWxleHl9CitAaXRlbSBAdmdzY21k e3RyYW5zbGF0ZX0KK0BlbmQgaXRlbWl6ZQorCitUaGUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBs aWVkIHdoZW4gdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQuIFRoZXkgaGF2ZQorbm8gZWZmZWN0IG9u IHRoZSBleGlzdGluZyBwYXRoLCBvbmx5IG9uIHRoZSBuZXcgc2VnbWVudHMgYWRkZWQgdG8gaXQu CisKK1RoZXkgYXJlIGRvbmUgYnkgdXBkYXRpbmcgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWly b2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tVHJhbnNmb3JtYXRpb25zLmh0bWwsY3VycmVudAor dHJhbnNmb3JtYXRpb24gbWF0cml4fSBpbiB0aGUgQ2Fpcm8gY29udGV4dC4gVG8gcmVzZXQgdGhl IG1hdHJpeCB0byBpdHMKK29yaWdpbmFsIHN0YXRlLCBiZWZvcmUgYW55IHRyYW5zZm9ybWF0aW9u LCB1c2UgQHZnc2NtZHtyZXNldG1hdHJpeH0uCisKK1RoZSB0cmFuc2Zvcm0gb3JpZ2luIGZvciBz Y2FsZSBhbmQgcm90YXRpb24gaXMgaW5pdGlhbGx5IGF0IEBjb2RlezAsIDB9LAorYnV0IGl0IGNh biBiZSBhZGp1c3RlZCB3aXRoIEB2Z3NjbWR7dHJhbnNsYXRlfS4KKworQGNvZGVleGFtcGxlewor QGV4YW1wbGUKKy8vIE1hcCAoMCwgMCkgYXMgdGhlIGNlbnRlciBvZiB0aGUgZnJhbWUuCit0cmFu c2xhdGUgKHcgLyAyKSAoaCAvIDIpCisKKy8vIFNjYWxlIHRoZSBzcGFjZSBhcyBpZiB0aGUgZnJh bWUgaXMgMXgxIHBpeGVsLgorc2NhbGV4eSB3IGgKKworLy8gRHJhdyBtdWx0aXBsZSBsaW5lcyB3 aXRoIHRoZSBzYW1lIGFyZ3VtZW50cywKKy8vIGJ1dCBlYWNoIG9uZSBvbiBhIGRpZmZlcmVudCBy b3RhdGlvbi4KK3JlcGVhdCAxMCBAeworICAgIHJvdGF0ZSAoUEkgLyAxMCkKKyAgICBNIC0wLjI1 IDAKKyAgICBIIDAuMjUKK0B9CisKKy8vIFJlc2V0IHRyYW5zZm9ybWF0aW9ucywgc28gdGhlIHNj YWxlIGRvZXMgbm90CisvLyBhZmZlY3Qgc3Ryb2tlLgorcmVzZXRtYXRyaXgKKworc3Ryb2tlCitA ZW5kIGV4YW1wbGUKK30KKworQGFuY2hvcntTdGF0ZSBTdGFja30KK0BzZWN0aW9uIFN0YXRlIFN0 YWNrCisKK1RoZSBzdGF0ZSBvZiBhIGRyYXd2ZyBzY3JpcHQgY29udGFpbnMgYWxsIHBhcmFtZXRl cnMgdXNlZCBmb3IgZHJhd2luZworb3BlcmF0aW9ucywgbGlrZSB0aGUgY3VycmVudCBjb2xvciwg dGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdGhlCitzdHJva2UgY29uZmlndXJhdGlvbiwgZXRj LgorCitUaGUgQHZnc2NtZHtzYXZlfSBjb21tYW5kIHB1c2hlcyBhIHNuYXBzaG90IG9mIHRoZSBz dGF0ZSB0byBhbiBpbnRlcm5hbAorc3RhY2suIExhdGVyLCBAdmdzY21ke3Jlc3RvcmV9IHBvcHMg dGhlIGxhdGVzdCBzbmFwc2hvdCBmcm9tIHRoZSBzdGFjaywKK2FuZCB1c2VzIGl0IGFzIHRoZSBu ZXcgc3RhdGUuCisKK1RoZSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHNhdmVkIGFuZCByZXN0b3Jl ZCBhcmU6CisKK0BpdGVtaXplCitAaXRlbQorUGF0dGVybiBmb3Igc3Ryb2tlIGFuZCBmaWxsIG9w ZXJhdGlvbnMuCisKK0BpdGVtaXplCitAaXRlbSBAdmdzY21ke2xpbmVhcmdyYWR9CitAaXRlbSBA dmdzY21ke3JhZGlhbGdyYWR9CitAaXRlbSBAdmdzY21ke3NldHJnYmF9CitAaXRlbSBAdmdzY21k e3NldGNvbG9yfQorQGl0ZW0gQHZnc2NtZHtzZXRoc2xhfQorQGVuZCBpdGVtaXplCisKK0BpdGVt IFRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KKworQGl0ZW1pemUKK0BpdGVtIEB2Z3NjbWR7cmVzZXRt YXRyaXh9CitAaXRlbSBAdmdzY21ke3JvdGF0ZX0KK0BpdGVtIEB2Z3NjbWR7c2NhbGV9CitAaXRl bSBAdmdzY21ke3NjYWxleHl9CitAaXRlbSBAdmdzY21ke3RyYW5zbGF0ZX0KK0BlbmQgaXRlbWl6 ZQorCitAaXRlbSBTdHJva2UgY29uZmlndXJhdGlvbi4KKworQGl0ZW1pemUKK0BpdGVtIEB2Z3Nj bWR7c2V0ZGFzaH0KK0BpdGVtIEB2Z3NjbWR7c2V0ZGFzaG9mZnNldH0KK0BpdGVtIEB2Z3NjbWR7 c2V0bGluZWNhcH0KK0BpdGVtIEB2Z3NjbWR7c2V0bGluZWpvaW59CitAaXRlbSBAdmdzY21ke3Nl dGxpbmV3aWR0aH0KK0BlbmQgaXRlbWl6ZQorCitAaXRlbQorQ2xpcCByZWdpb24KKworQGl0ZW1p emUKK0BpdGVtIEB2Z3NjbWR7Y2xpcH0KK0BpdGVtIEB2Z3NjbWR7cmVzZXRjbGlwfQorQGVuZCBp dGVtaXplCisKK0BlbmQgaXRlbWl6ZQorCitAYW5jaG9ye0ZyYW1lIE1ldGFkYXRhfQorQHNlY3Rp b24gRnJhbWUgTWV0YWRhdGEKKworU29tZSBGRm1wZWcgZmlsdGVycyBhZGQgbWV0YWRhdGEgdG8g ZnJhbWVzLiBUaGUgY29tbWFuZAorQHZnc2NtZHtnZXRtZXRhZGF0YX0gY2FuIHJlYWQgbWV0YWRh dGEgaXRlbXMgY29udGFpbmluZyBhIG51bWVyaWMgdmFsdWUsCithbmQgc3RvcmUgaXQgaW4gYSB2 YXJpYWJsZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBjb21tYW5kIGFyZ3VtZW50cy4KKworQGNvZGVl eGFtcGxleworVGhlIEBjb2Rle2Nyb3BkZXRlY3R9IGZpbHRlciBjb21wdXRlcyB0aGUgcGFyYW1l dGVycyB0byByZW1vdmUgZW1wdHkKK3JlZ2lvbnMgYXJvdW5kIHRoZSB2aWRlby4gVGhlc2UgcGFy YW1ldGVycyBhcmUgYWNjZXNzaWJsZSBpbiB0aGUKK0Bjb2Rle2xhdmZpLmNyb3BkZXRlY3R9IGtl eXMgb2YgdGhlIGZyYW1lIG1ldGFkYXRhLgorCitAZXhhbXBsZQorLy8gR2V0IG1ldGFkYXRhIGZy b20gY3JvcGRldGVjdCBmaWx0ZXIgYW5kIHN0b3JlIGl0CisvLyBpbiBgY2QqYCB2YXJpYWJsZXMu CitnZXRtZXRhZGF0YSBjZHggbGF2ZmkuY3JvcGRldGVjdC54CitnZXRtZXRhZGF0YSBjZHkgbGF2 ZmkuY3JvcGRldGVjdC55CitnZXRtZXRhZGF0YSBjZHcgbGF2ZmkuY3JvcGRldGVjdC53CitnZXRt ZXRhZGF0YSBjZGggbGF2ZmkuY3JvcGRldGVjdC5oCisKK3JlY3QgY2R4IGNkeSBjZHcgY2RoCitz ZXRjb2xvciB5ZWxsb3dAQDAuNQorc2V0bGluZXdpZHRoIDEwCitzdHJva2UKK0BlbmQgZXhhbXBs ZQorCitUbyB0ZXN0IHRoZSBzY3JpcHQsIGNvcHkgaXQgdG8gYSBAY29kZXtkcmF3Y3JvcGRldGVj dC52Z3N9IGZpbGUsIGFuZAordGhlbiBleGVjdXRlIGEgY29tbWFuZCBsaWtlIHRoaXM6CisKK0Bl eGFtcGxlCitmZnBsYXkgLWkgZXhhbXBsZS12aWRlby53ZWJtIC12ZiAnY3JvcGRldGVjdCwgZHJh d3ZnPWZpbGU9ZHJhd2Nyb3BkZXRlY3QudmdzJworQGVuZCBleGFtcGxlCit9CisKK0BzZWN0aW9u IEBjb2Rle2lmfSAvIEBjb2Rle3JlcGVhdH0gU3RhdGVtZW50cworCitUaGVyZSBpcyBsaW1pdGVk IHN1cHBvcnQgZm9yIGNvbnRyb2wgZmxvdyBzdGF0ZW1lbnRzOiBvbmx5IEB2Z3NjbWR7aWZ9IGFu ZAorQHZnc2NtZHtyZXBlYXR9LgorCitCb3RoIGNvbW1hbmRzIHJlY2VpdmUgdHdvIGFyZ3VtZW50 czogYW4gZXhwcmVzc2lvbiBhbmQgYSBibG9jay4KKworQGV4YW1wbGUKK2lmIChjb25kaXRpb24p IEB7CisgICAgLy8gY29tbWFuZHMKK0B9CisKK3JlcGVhdCAoY291bnQpIEB7CisgICAgLy8gY29t bWFuZHMKK0B9CitAZW5kIGV4YW1wbGUKKworQHZnc2NtZHtpZn0gZXhlY3V0ZXMgaXRzIGJsb2Nr IGlmIHRoZSByZXN1bHQgb2YgQGNvZGV7KGNvbmRpdGlvbil9IGlzIG5vdAoremVyby4KKworQHZn c2NtZHtyZXBlYXR9IGV4ZWN1dGVzIGl0cyBibG9jayB0aGUgbnVtYmVyIG9mIHRpbWVzIHNwZWNp ZmllZCBieQorQGNvZGV7KGNvdW50KX0uIEluIGVhY2ggaXRlcmF0aW9uLCB0aGUgdmFyaWFibGUg QHZhcntpfSBpcyB1c2VkIGFzIGEKK0B1cmVme2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L0Zvcl9sb29wI0xvb3BfY291bnRlcnMsbG9vcAorY291bnRlcn0uCisKK0lmIHRoZSByZXN1bHQg b2YgdGhlIGV4cHJlc3Npb24gaXMgbm90IGEgZmluaXRlIG51bWJlciAobGlrZQorQHVyZWZ7aHR0 cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmFOLEBjb2Rle05hTn19KSB0aGUgYmxvY2sgaXMg bm90CitleGVjdXRlZC4KKworQGFuY2hvcntjb21wLW9wZXJhdG9yc30KK0BzdWJzZWN0aW9uIENv bXBhcmlzb24gYW5kIExvZ2ljYWwgT3BlcmF0b3JzCisKK0BmZmV4cHJze30gb25seSBzdXBwb3J0 cyBhcml0aG1ldGljIG9wZXJhdG9ycyAobGlrZSBAY29kZXsrfSBmb3IgYWRkaXRpb24pLgorQ29t cGFyaXNvbiBvcGVyYXRvcnMgKGxpa2UgQGNvZGV7IT19KSBhcmUgc3VwcG9ydGVkIHZpYSBmdW5j dGlvbnMsIHdoaWxlCitsb2dpY2FsIG9wZXJhdG9ycyAobGlrZSBAY29kZXsmJn0gZm9yIEBjb2Rl e0FORH0pIGNhbiBiZSBlbXVsYXRlZCB3aXRoCithcml0aG1ldGljIG9wZXJhdGlvbnMuCisKK0Bt dWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjUgLjUKK0BoZWFkaXRlbSBFeHByZXNzaW9uIEB0 YWIgRkZtcGVnIEVxdWl2YWxlbnQKK0BpdGVtIEBjb2Rle3ggPSB5fSBAdGFiIEBjb2Rle2VxKHgs IHkpfQorQGl0ZW0gQGNvZGV7eCA8IHl9IEB0YWIgQGNvZGV7bHQoeCwgeSl9CitAaXRlbSBAY29k ZXt4ID4geX0gQHRhYiBAY29kZXtndCh4LCB5KX0KK0BpdGVtIEBjb2Rle3gg4omkIHl9IEB0YWIg QGNvZGV7bHRlKHgsIHkpfQorQGl0ZW0gQGNvZGV7eCDiiaUgeX0gQHRhYiBAY29kZXtndGUoeCwg eSl9CitAaXRlbSBAY29kZXthIOKJpCB4IOKJpCBifSBAdGFiIEBjb2Rle2JldHdlZW4oeCwgYSwg Yil9CitAZW5kIG11bHRpdGFibGUKKworTG9naWNhbCBvcGVyYXRvcnMgY2FuIGJlIGVtdWxhdGVk IHdpdGggbXVsdGlwbGljYXRpb24gKGZvciBAY29kZXtBTkR9KSwKK29yIGFkZGl0aW9uIChmb3Ig QGNvZGV7T1J9KToKKworQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuNSAuNQorQGhlYWRp dGVtIEV4cHJlc3Npb24gQHRhYiBGRm1wZWcgRXF1aXZhbGVudAorQGl0ZW0gQGNvZGV7eCBPUiB5 fSBAdGFiIEBjb2Rle3ggKyB5fQorQGl0ZW0gQGNvZGV7eCBBTkQgeX0gQHRhYiBAY29kZXt4ICog eX0KK0BlbmQgbXVsdGl0YWJsZQorCitAY29kZWV4YW1wbGV7CitJbiBvdGhlciBwcm9ncmFtbWlu ZyBsYW5ndWFnZXMsIGEgY29kZSBsaWtlIHRoaXM6CisKK0BleGFtcGxlCitpZiAoeCA+IHkgJiYg eiAhPSAxKSBAeworICAgIC8vIOKApgorQH0KK0BlbmQgZXhhbXBsZQorCitDYW4gYmUgd3JpdHRl biBmb3IgZHJhd3ZnIGxpa2UgdGhpczoKKworQGV4YW1wbGUKK2lmIChndCh4LCB5KSAqIG5vdChl cSh6LCAxKSkpIEB7CisgICAgLy8g4oCmCitAfQorQGVuZCBleGFtcGxlCit9CisKK0BzdWJzZWN0 aW9uIEVhcmx5IEV4aXQKK0B2Z3NjbWR7YnJlYWt9IGNhdXNlcyBhIEB2Z3NjbWR7cmVwZWF0fSBs b29wIHRvIGJlIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuCisKK0lmIGl0IGlzIGV4ZWN1dGVkIG91 dHNpZGUgYSBAdmdzY21ke3JlcGVhdH0gYmxvY2ssIGl0IHRlcm1pbmF0ZXMgdGhlIHdob2xlCitz Y3JpcHQsIG9yIHRoZSBjdXJyZW50IHByb2NlZHVyZS4KKworQGNvZGVleGFtcGxleworSW4gdGhp cyBleGFtcGxlLCB3ZSBhcmUgdXNpbmcgdGhlIEByZWZ7ZnVuYy1yYW5kb21nLEBjb2Rle3JhbmRv bWd9fSBmdW5jdGlvbgordG8gZHJhdyBhIGxpbmUgd2l0aCByYW5kb20gc2VnbWVudHMuCisKK1Ro ZSBsb29wIGNhbiBiZSBleGVjdXRlZCBAY29kZXs1MDB9IHRpbWVzLCBidXQgaXQgaXMgaW50ZXJy dXB0ZWQgaWYgdGhlIFgKK2Nvb3JkaW5hdGUgb2YgdGhlIEByZWZ7Y3VycmVudCBwb2ludH0gKEB2 YXJ7Y3h9KSBleGNlZWRzIHRoZSBmcmFtZSB3aWR0aAorKEB2YXJ7d30pLiBUaGUgQHJlZntjdXJy ZW50IHBvaW50fSBpcyB1cGRhdGVkIGFmdGVyIGVhY2ggY2FsbCB0bworQHZnc2NtZHtybGluZXRv fS4KKworQGV4YW1wbGUKK21vdmV0byAwIDAKKworcmVwZWF0IDUwMCBAeworICAgIHJsaW5ldG8K KyAgICAgICAgKHJhbmRvbWcoMCkgKiAxNSkKKyAgICAgICAgKHJhbmRvbWcoMCkgKiAyMCkKKwor ICAgIGlmIChndChjeCwgdykpIEB7CisgICAgICAgIGJyZWFrCisgICAgQH0KK0B9CisKK3N0cm9r ZQorQGVuZCBleGFtcGxlCit9CisKK0BhbmNob3J7UHJvY2VkdXJlc30KK0BzZWN0aW9uIFByb2Nl ZHVyZXMKKworQSBwcm9jZWR1cmUgaXMgYSBuYW1lIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2NrIHRo YXQgY2FuIGJlIGV4ZWN1dGVkCittdWx0aXBsZSB0aW1lcy4gSXQgY2FuIHRha2UgYmV0d2VlbiAw IGFuZCA2IHBhcmFtZXRlcnMuCisKK0B2Z3NjbWR7cHJvY30gaXMgdXNlZCB0byBzZXQgdGhlIHBh cmFtZXRlciBuYW1lcyBhbmQgdGhlIGJsb2NrIGZvciBhCitwcm9jZWR1cmU6CisKK0BleGFtcGxl Citwcm9jIHAwIEB7CisgICAgLy8g4oCmCitAfQorCitwcm9jIHAxIHBhcmFtMSBwYXJhbTIgQHsK KyAgICAvLyDigKYKK0B9CitAZW5kIGV4YW1wbGUKKworSW5zaWRlIHRoZSBibG9jaywgdGhlIGFy Z3VtZW50cyBjYW4gYmUgYWNjZXNzZWQgYXMgcmVndWxhciB2YXJpYWJsZXM6CisKK0BleGFtcGxl Citwcm9jIHNxdWFyZSBjZW50ZXJfeCBjZW50ZXJfeSBzaWRlIEB7CisgICAgcmVjdAorICAgICAg ICAoY2VudGVyX3ggLSBzaWRlIC8gMikgKGNlbnRlcl95IC0gc2lkZSAvIDIpCisgICAgICAgIHNp ZGUgc2lkZQorQH0KK0BlbmQgZXhhbXBsZQorCitAdmdzY21ke2NhbGx9IGV4ZWN1dGVzIHRoZSBi bG9jayBhc3NpZ25lZCB0byB0aGUgcHJvY2VkdXJlIG5hbWUuIEl0CityZXF1aXJlcyB0aGUgbmFt ZSBvZiB0aGUgcHJvY2VkdXJlLCBhbmQgdGhlIHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlcgorZGVm aW5lZCBpbiB0aGUgY2FsbCB0byBAdmdzY21ke3Byb2N9LgorCitAZXhhbXBsZQorY2FsbCBwMAor CitjYWxsIHAxIDEgMgorCitjYWxsIHNxdWFyZSAodyAvIDIpIChoIC8gMikgKHcgLyB0KQorQGVu ZCBleGFtcGxlCisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoaXMgZXhhbXBsZSwgdGhlIHByb2NlZHVy ZSBAY29kZXt6aWd6YWd9IGRyYXdzIG11bHRpcGxlIGxpbmVzIGZyb20KK3RoZSBAcmVme2N1cnJl bnQgcG9pbnR9LgorCitAZXhhbXBsZQorc2V0dmFyIGxlbiAodyAvIDEwKQorc2V0bGluZXdpZHRo IDUKKworcHJvYyB6aWd6YWcgQHsKKyAgICByZXBlYXQgMTAgQHsKKyAgICAgICAgbCBsZW4gbGVu IGxlbiAoLWxlbikKKyAgICBAfQorCisgICAgc3Ryb2tlCitAfQorCitzZXRjb2xvciAjNDBDMEZG CitNIDAgNjAKK2NhbGwgemlnemFnCisKK3NldGNvbG9yICMwMEFBQkIKK00gMCAxMjAKK2NhbGwg emlnemFnCisKK3NldGNvbG9yICMyMEYwQjcKK00gMCAxODAKK2NhbGwgemlnemFnCitAZW5kIGV4 YW1wbGUKKworVGhlIGNvbG9yIGFuZCB0aGUgWSBjb29yZGluYXRlIG9mIHRoZSBzdGFydGluZyBw b2ludCBjYW4gYmUgc2VudCBhcworcHJvY2VkdXJlIGFyZ3VtZW50czoKKworQGV4YW1wbGUKK3Nl dHZhciBsZW4gKHcgLyAxMCkKK3NldGxpbmV3aWR0aCA1CisKK3Byb2MgemlnemFnIGNvbG9yIHkg QHsKKyAgICBzZXRjb2xvciBjb2xvcgorCisgICAgTSAwIHkKKyAgICByZXBlYXQgMTAgQHsKKyAg ICAgICAgbCBsZW4gbGVuIGxlbiAoLWxlbikKKyAgICBAfQorCisgICAgc3Ryb2tlCitAfQorCitj YWxsIHppZ3phZyAweDQwQzBGRkZGIDYwCitjYWxsIHppZ3phZyAweDAwQUFCQkZGIDEyMAorY2Fs bCB6aWd6YWcgMHgyMEYwQjdGRiAxODAKK0BlbmQgZXhhbXBsZQorfQorCitXaGVuIHRoZSBwcm9j ZWR1cmUgcmV0dXJucywgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBmb3IgZWFjaCBhcmd1bWVu dAoraXMgcmVzdG9yZWQgdG8gdGhlIHZhbHVlIGl0IGhhZCBiZWZvcmUgY2FsbGluZyB0aGUgcHJv Y2VkdXJlLiBDaGFuZ2VzIGluCitvdGhlciB2YXJpYWJsZXMgKHdpdGggQHZnc2NtZHtzZXR2YXJ9 LCBAdmdzY21ke2dldG1ldGFkYXRhfSwgQHZnc2NtZHtkZWZoc2xhfSwKK2FuZCBAdmdzY21ke2Rl ZnJnYmF9KSBhcmUgcHJlc2VydmVkLgorCitAY29kZWV4YW1wbGV7CitJbiB0aGUgbmV4dCBleGFt cGxlLCB0aGUgdmFyaWFibGUgQHZhcntBfSBoYXMgdGhlIHZhbHVlIEBjb2RlezB9IGJlZm9yZQor Y2FsbGluZyB0aGUgcHJvY2VkdXJlIEB2YXJ7UH0uIER1cmluZyB0aGUgZXhlY3V0aW9uIG9mIEB2 YXJ7UH0sCitAY29kZXtBfSBpcyBAY29kZXsxfSwgYnV0IGFmdGVyIGl0LCBAdmFye0F9IGlzIEBj b2RlezB9IGFnYWluLgorCitAZXhhbXBsZQorc2V0dmFyIEEgMAorCitwcm9jIFAgQSBAeworICAg IHByaW50IEEKK0B9CisKK3ByaW50IEEKK2NhbGwgUCAxCitwcmludCBBCitAZW5kIGV4YW1wbGUK KworSXQgd3JpdGVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXM6CisKK0B2ZXJiYXRpbQorWzc6N10g QSA9IDAuMDAwCitbNDo4XSBBID0gMS4wMDAKK1s5OjddIEEgPSAwLjAwMAorQGVuZCB2ZXJiYXRp bQorfQorCitAdmdzY21ke2JyZWFrfSBjYXVzZXMgdGhlIHNjcmlwdCB0byBsZWF2ZSB0aGUgY3Vy cmVudCBwcm9jZWR1cmUsIHNpbWlsYXIKK3RvIHRoZQorQHVyZWZ7aHR0cHM6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvUmV0dXJuX3N0YXRlbWVudCxAY29kZXtyZXR1cm59CitzdGF0ZW1lbnR9IGlu IG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcywgdW5sZXNzIGl0IGlzIGNhbGxlZCB3aXRoaW4g YQorQHZnc2NtZHtyZXBlYXR9IGxvb3AuCisKK1RoZSBib2R5IG9mIHRoZSBwcm9jZWR1cmUgbXVz dCBiZSBkZWZpbmVkIHdpdGggQHZnc2NtZHtwcm9jfSBAZW1waHtiZWZvcmV9Cit1c2luZyBAdmdz Y21ke2NhbGx9LgorCitAY29kZWV4YW1wbGV7CitJbiB0aGlzIGV4YW1wbGUsIHdoZW4gdGhlIHBy b2NlZHVyZSBAY29kZXtub3R5ZXR9IGlzIGNhbGxlZCwgaXRzIGJvZHkKK2hhcyBub3QgeWV0IGRl ZmluZWQsIHNvIHRoZSBleGVjdXRpb24gZmFpbHMgd2l0aCB0aGUgZXJyb3IKK0Bjb2Rle01pc3Np bmcgYm9keSBmb3IgcHJvY2VkdXJlICdub3R5ZXQnfS4KKworQGV4YW1wbGUKK2NhbGwgbm90eWV0 CisKK3Byb2Mgbm90eWV0IEB7CisgICAgLy8gLi4uCitAfQorQGVuZCBleGFtcGxlCit9CisKK0Eg cHJvY2VkdXJlIGNhbiBiZSByZWRlZmluZWQgYnkgb3RoZXIgY2FsbHMgdG8gQHZnc2NtZHtwcm9j fSB3aXRoIHRoZSBzYW1lCituYW1lLiBJbiBzdWNoIGNhc2UsIEB2Z3NjbWR7Y2FsbH0gaW52b2tl cyB0aGUgbGFzdCBhc3NpZ25lZCBibG9jay4KKworQGNvZGVleGFtcGxleworSW4gdGhpcyBleGFt cGxlLCB0aGUgcHJvY2VkdXJlIEBjb2Rle2V4YW1wbGV9IGhhcyB0d28gZGlmZmVyZW50IGJsb2Nr cy4KKworQGV4YW1wbGUKK3Byb2MgZXhhbXBsZSBAeworICAgIC8vIGJsb2NrMQorQH0KKworY2Fs bCBleGFtcGxlICAgIC8vIGV4ZWN1dGVzIGJsb2NrMQorCitwcm9jIGV4YW1wbGUgQHsKKyAgICAv LyBibG9jazIKK0B9CisKK2NhbGwgZXhhbXBsZSAgICAvLyBleGVjdXRlcyBibG9jazIKK0BlbmQg ZXhhbXBsZQorfQorCitAc2VjdGlvbiBGdW5jdGlvbnMgaW4gRXhwcmVzc2lvbnMKKworVGhlcmUg YXJlIHNvbWUgZnVuY3Rpb25zIHNwZWNpZmljIHRvIGRyYXd2ZyBhdmFpbGFibGUgaW4gQGZmZXhw cnN7fS4KKworQHN1YnNlY3Rpb24gRnVuY3Rpb24gQGNvZGV7cH0KKworQGNvZGV7cCh4LCB5KX0g cmV0dXJucyB0aGUgY29sb3Igb2YgdGhlIHBpeGVsIGF0IGNvb3JkaW5hdGVzCitAY29kZXt4LCB5 fSwgYXMgYSBAY29kZXsweFJSR0dCQkFBfSB2YWx1ZS4gVGhpcyB2YWx1ZSBjYW4gYmUgYXNzaWdu ZWQgdG8KK2EgdmFyaWFibGUsIHdoaWNoIGNhbiBiZSB1c2VkIGxhdGVyIGFzIHRoZSBhcmd1bWVu dCBmb3IgQHZnc2NtZHtzZXRjb2xvcn0uCisKK0lmIHRoZSBjb29yZGluYXRlcyBhcmUgb3V0c2lk ZSB0aGUgZnJhbWUsIG9yIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIG5vdAorYSBmaW5pdGUgbnVt YmVyIChsaWtlCitAdXJlZntodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OYU4sQGNvZGV7 TmFOfX0pLCB0aGUgZnVuY3Rpb24KK3JldHVybnMgQGNvZGV7TmFOfS4KKworVGhlIEByZWZ7dHJh bnNmb3JtYXRpb24gbWF0cml4fSBpcyBhcHBsaWVkIHRvIHRoZQorYXJndW1lbnRzLiBUbyB1c2Ug dGhlIG9yaWdpbmFsIGZyYW1lIGNvb3JkaW5hdGVzLCBjYWxsCitAdmdzY21ke3Jlc2V0bWF0cml4 fSBiZXR3ZWVuIEB2Z3NjbWR7c2F2ZX0gYW5kIEB2Z3NjbWR7cmVzdG9yZX06CisKK0BleGFtcGxl CitzYXZlCityZXNldG1hdHJpeAorc2V0dmFyIHBpeGVsIChwKDAsIDApKSAgICAvLyB0b3AtbGVm dCBwaXhlbCBvZiB0aGUgZnJhbWUuCityZXN0b3JlCisKK3NldGNvbG9yIHBpeGVsCitAZW5kIGV4 YW1wbGUKKworQml0d2lzZSBvcGVyYXRpb25zIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgaW5kaXZp ZHVhbCBjb2xvciBjb21wb25lbnRzOgorCitAZXhhbXBsZQorc2V0dmFyIHBpeGVsIChwKHgsIHkp KQorCitpZiAobm90KGlzbmFuKHBpeGVsKSkpIEB7CisgICAgc2V0dmFyIHB4X3JlZCAgIChwaXhl bCAvIDB4MTAwMDAwMCkKKyAgICBzZXR2YXIgcHhfZ3JlZW4gKGJpdGFuZChwaXhlbCAvIDB4MTAw MDAsIDB4RkYpKQorICAgIHNldHZhciBweF9ibHVlICAoYml0YW5kKHBpeGVsIC8gMHgxMDAsIDB4 RkYpKQorICAgIHNldHZhciBweF9hbHBoYSAoYml0YW5kKHBpeGVsLCAweEZGKSkKK0B9CitAZW5k IGV4YW1wbGUKKworQHN1YnNlY3Rpb24gRnVuY3Rpb24gQGNvZGV7cGF0aGxlbn0KKworQGNvZGV7 cGF0aGxlbihuKX0gY29tcHV0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBwYXRoLCBieSBh ZGRpbmcgdGhlCitsZW5ndGggb2YgZWFjaCBsaW5lIHNlZ21lbnQgcmV0dXJuZWQgYnkKK0B1cmVm e2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1QYXRocy5odG1sI2Nh aXJvLWNvcHktcGF0aC1mbGF0LEBjb2Rle2NhaXJvX2NvcHlfcGF0aF9mbGF0fX0uCisKK1RoZSBm dW5jdGlvbiBleHBlY3RzIGFuIGFyZ3VtZW50IEB2YXJ7bn0sIGFzIHRoZSBtYXhpbXVtIG51bWJl ciBvZiBsaW5lCitzZWdtZW50cyB0byBhZGQgdG8gdGhlIGxlbmd0aCwgb3IgQGNvZGV7MH0gdG8g YWRkIGFsbCBzZWdtZW50cy4KKworQGNvZGVleGFtcGxleworSW4gdGhpcyBleGFtcGxlLCBAY29k ZXtwYXRobGVufSBpcyB1c2VkIHRvIGFuaW1hdGUgdGhlIHN0cm9rZSBvZiBhCitzcGlyYWwsIGlu IGEgNSBzZWNvbmRzIGxvb3AuCisKK0BleGFtcGxlCitNICh3IC8gMikgKGggLyAyKQorCitzZXR2 YXIgYSAtMQorcmVwZWF0IDE2IEB7CisgICAgcmN1cnZldG8KKyAgICAgICAgKGEgKiAyIC8gMykg MAorICAgICAgICAoYSAqIDIgLyAzKSAoYSkKKyAgICAgICAgMCAoYSkKKworICAgIHNldHZhciBh ICgtc2duKGEpICogKGFicyhhKSArIDEwKSkKK0B9CisKK3NldGxpbmV3aWR0aCAzCitzZXRkYXNo CisgICAgKHBhdGhsZW4oMCkgKiAoMSAtIG1vZCh0IC8gNSwgMSkpKQorICAgIDFlNgorCitzZXRj b2xvciB0ZWFsCitzdHJva2UKK0BlbmQgZXhhbXBsZQorfQorCitAYW5jaG9ye2Z1bmMtcmFuZG9t Z30KK0BzdWJzZWN0aW9uIEZ1bmN0aW9uIEBjb2Rle3JhbmRvbWd9CisKK0Bjb2Rle3JhbmRvbWco aWR4KX0gaXMgc2ltaWxhciB0byB0aGUgQGNvZGV7cmFuZG9tKGlkeCl9IGZ1bmN0aW9uLAorYXZh aWxhYmxlIGluIEBmZmV4cHJze30sIGJ1dCBpdHMgc3RhdGUgaXMgZ2xvYmFsIHRvIHRoZSBmcmFt ZSwgaW5zdGVhZAorb2Ygc3BlY2lmaWMgdG8gZWFjaCBleHByZXNzaW9uLgorCitUbyB1bmRlcnN0 YW5kIHRoZSBkaWZmZXJlbmNlLCB3ZSBuZWVkIHRvIGRpdmUgaW50byBob3cKK0Bjb2Rle3JhbmRv bShpZHgpfSB3b3JrcyBpbnNpZGUgYSBkcmF3dmcgc2NyaXB0LgorCitGaXJzdCwgZWFjaCBleHBy ZXNzaW9uIGluIEZGbXBlZyBoYXMgYSBzZXQgb2YgMTAgaW50ZXJuYWwgdmFyaWFibGVzLAord2hp Y2ggY2FuIGJlIHdyaXR0ZW4gd2l0aCBAY29kZXtzdChpZHgsIHZhbHVlKX0sIGFuZCBjYW4gYmUg cmVhZCB3aXRoCitAY29kZXtsZChpZHgpfS4gQHZhcntpZHh9IGlzIGEgdmFsdWUgYmV0d2VlbiBA Y29kZXswfSBhbmQgQGNvZGV7OX0uCitUaGVzZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIHRv IEBjb2RlezB9LgorCitXaGVuIGEgZHJhd3ZnIHNjcmlwdCBpcyBwYXJzZWQsIGVhY2ggZXhwcmVz c2lvbiBpcyBjb21waWxlZCB3aXRoCitAdXJlZntodHRwczovL2ZmbXBlZy5vcmcvZG94eWdlbi84 LjAvZXZhbF84aC5odG1sI2FkM2JmOGYzMzMwZDFmZDEzOWRlMmNhMTU2YzMxM2YzNCxAY29kZXth dl9leHByX3BhcnNlfX0sCitmcm9tIEB1cmVme2h0dHBzOi8vZmZtcGVnLm9yZy9saWJhdnV0aWwu aHRtbCxsaWJhdnV0aWx9LCBhbmQgdGhlc2UKK2NvbXBpbGVkIGV4cHJlc3Npb25zIGFyZSByZXVz ZWQgZm9yIGV2ZXJ5IGZyYW1lLiBUaGUgY2hhbmdlcyBpbiB0aGUKK2ludGVybmFsIHZhcmlhYmxl cyAod2l0aCBAY29kZXtzdChpZHgsIHZhbHVlKX0pIGFyZSB2aXNpYmxlIGJldHdlZW4KK2ZyYW1l cywgYnV0IHRoZXkgYXJlIG5vdCBzaGFyZWQgYmV0d2VlbiBleHByZXNzaW9ucy4KKworQGNvZGVl eGFtcGxleworSW4gdGhpcyBleGFtcGxlLCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIFggY29vcmRp bmF0ZSB1cGRhdGVzIGl0cworaW50ZXJuYWwgdmFyaWFibGUgQGNvZGV7MH0gaW4gZXZlcnkgZnJh bWU6CisKK0BleGFtcGxlCitjaXJjbGUKKyAgICAoc3QoMCwgbW9kKGxkKDApICsgMTUsIHcpKSkg Ly8gWAorICAgIDEyMCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBZCisgICAgKGxkKDApICsg MjApICAgICAgICAgICAgICAgIC8vIHJhZGl1cworCitmaWxsCitAZW5kIGV4YW1wbGUKKworQGNv ZGV7c3QoaWR4LCB2YWx1ZSl9IHJldHVybnMgdGhlIHVwZGF0ZWQgdmFsdWUsIHNvIGl0IGNhbiBi ZSB1c2VkIGFzCit0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uLgorCitUaGUgcmFkaXVzIGlz IG5vdCBhZmZlY3RlZCBiZWNhdXNlIGl0cyBpbnRlcm5hbCB2YXJpYWJsZSAoZnJvbQorQGNvZGV7 bGQoMCl9KSBpcyBub3QgdXBkYXRlZCBieSB0aGUgb3RoZXIgZXhwcmVzc2lvbi4KKworQWxzbywg bm90ZSB0aGF0IHRoaXMgZXhhbXBsZSBpcyBqdXN0IHRvIHNob3cgaG93IGludGVybmFsIHZhcmlh YmxlcyBhcmUKK2tlcHQgYmV0d2VlbiBmcmFtZXMuIEEgYmV0dGVyIGFwcHJvYWNoIHRvIGNyZWF0 ZSB0aGlzIGFuaW1hdGlvbiBpcyB0bwordXNlIHRoZSB2YXJpYWJsZXMgbiBvciB0OgorCitAZXhh bXBsZQorY2lyY2xlIChtb2QobiAqIDE1LCB3KSkgMTIwIDIwCitmaWxsCitAZW5kIGV4YW1wbGUK K30KKworVGhlIGZ1bmN0aW9uIEBjb2Rle3JhbmRvbShpZHgpfSByZXR1cm5zIGEKK0B1cmVme2h0 dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BzZXVkb3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9y LHBzZXVkb3JhbmRvbX0KK3ZhbHVlIGJldHdlZW4gQGNvZGV7MH0gYW5kIEBjb2RlezF9LiBAdmFy e2lkeH0gaXMgdGhlIGludGVybmFsIHZhcmlhYmxlCit0aGF0IGlzIHVzZWQgYm90aCBhcyB0aGUg c2VlZCBhbmQgdG8ga2VlcCB0aGUgc3RhdGUgb2YgdGhlIG51bWJlcgorZ2VuZXJhdG9yLgorCitA Y29kZWV4YW1wbGV7CitUaGUgbmV4dCBleGFtcGxlIHVzZXMgQGNvZGV7cmFuZG9tKDApfSB0byBn ZW5lcmF0ZSBhIHJhbmRvbSB2YWx1ZSBmb3IKK3RoZSBjZW50ZXIgb2YgYSBjaXJjbGU6CisKK0Bl eGFtcGxlCitjaXJjbGUKKyAgICAocmFuZG9tKDApICogdykKKyAgICAocmFuZG9tKDApICogaCkK KyAgICAxMAorCitmaWxsCitAZW5kIGV4YW1wbGUKKworVGhlIGNpcmNsZSBpbiBldmVyeSBmcmFt ZSBpcyBhdCBhIGRpZmZlcmVudCBwb3NpdGlvbiwgYnV0IGFsd2F5cyBvbiB0aGUKK2RpYWdvbmFs IGxpbmUgb2YgdGhlIGZyYW1lLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgdmFsdWVzIGZvciB0 aGUKK2Nvb3JkaW5hdGVzIFggYW5kIFkgYXJlIGlkZW50aWNhbCwgc2luY2UgYm90aCBudW1iZXIg Z2VuZXJhdG9ycyB1c2UgdGhlCitzYW1lIHNlZWQuCisKK1RvIGRpc3RyaWJ1dGUgdGhlIGNpcmNs ZXMgb3ZlciB0aGUgd2hvbGUgZnJhbWUgd2UgbmVlZCBkaWZmZXJlbnQgc2VlZHMKK2ZvciBlYWNo IGV4cHJlc3Npb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHdyaXRpbmcgYSBub24temVybyB2 YWx1ZQorKGxpa2UgQGNvZGV7MHhGMEYwfSkgdG8gdGhlIGludGVybmFsIHZhcmlhYmxlIG9mIG9u ZSBvZiBleHByZXNzaW9ucywgYnV0Citvbmx5IHdoZW4gaXRzIHZhbHVlIGlzIEBjb2RlezB9Ogor CitAZXhhbXBsZQorY2lyY2xlCisgICAgKHJhbmRvbSgwKSAqIHcpCisgICAgKHN0KDAsIGlmKGxk KDApLCBsZCgwKSwgMHhGMEYwKSk7IHJhbmRvbSgwKSAqIGgpCisgICAgMTAKKworZmlsbAorQGVu ZCBleGFtcGxlCisKK1RoaXMgYXBwcm9hY2ggaXMgb25seSB1c2VmdWwgaWYgd2UgbmVlZCBjb21w bGV0ZWx5IGRpZmZlcmVudCBwb3NpdGlvbnMKK2luIGVhY2ggZnJhbWUuIEluIHRoZSBuZXh0IGV4 YW1wbGUsIHJhbmRvbSB2YWx1ZXMgYXJlIHVzZWQgdG8gZGlzdHJpYnV0ZQorbWFueSBjaXJjbGVz IG92ZXIgdGhlIGZyYW1lLCBidXQgdGhlIHBvc2l0aW9uIGlzIGZpeGVkLiBUaGUgb25seSBjaGFu Z2UKK292ZXIgdGltZSBpcyB0aGUgZmlsbCBjb2xvcjoKKworQGV4YW1wbGUKK3JlcGVhdCAyMCBA eworICAgIGNpcmNsZQorICAgICAgICAoc3QoMCwgaSArIDFlNSk7IHJhbmRvbSgwKSAqIHcpCisg ICAgICAgIChzdCgwLCBpICsgMWUxMCk7IHJhbmRvbSgwKSAqIGgpCisgICAgICAgIDEwCitAfQor CitzZXRoc2xhICh0ICogNjApIDAuNSAwLjUgMQorcHJlc2VydmUgZmlsbAorCitzZXRjb2xvciBi bGFja0BAMC41CitzZXRsaW5ld2lkdGggMQorc3Ryb2tlCitAZW5kIGV4YW1wbGUKKworVGhpcyBp cyBhY2hpZXZlZCBieSB1c2luZyBhIHByZWNvbXB1dGVkIHN0YXRlIGJlZm9yZSBjYWxsaW5nIEBj b2Rle3JhbmRvbSgwKX0uCitUaGUgdmFyaWFibGUgQHZhcntpfSwgdXBkYXRlZCBieSBAdmdzY21k e3JlcGVhdH0sIGlzIG5lZWRlZCB0byBjb21wdXRlCitkaWZmZXJlbnQgc3RhdGVzIGluIGVhY2gg aXRlcmF0aW9uLgorfQorCitUaGUgQGNvZGV7cmFuZG9tZyhpZHgpfSBmdW5jdGlvbiwgd2hpY2gg aXMgc3BlY2lmaWMgdG8gZHJhd3ZnIHNjcmlwdHMsCitpcyBzaW1pbGFyIHRvIEBjb2Rle3JhbmRv bShpZHgpfSwgYnV0IGludGVuZGVkIHRvIHNvbHZlIHRoZSBwcmV2aW91cworcHJvYmxlbXM6CisK K0BpdGVtaXplCitAaXRlbSBBbGwgZnJhbWVzIGhhdmUgdGhlIHNhbWUgc2VlZC4KK0BpdGVtIFRo ZSBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiBleHByZXNzaW9ucy4KK0BlbmQgaXRlbWl6ZQorCitU aGUgcGFyYW1ldGVyIEB2YXJ7aWR4fSBoYXMgdHdvIHVzZXM6CisKK0BpdGVtaXplCitAaXRlbQor VGhlIGxhc3QgdHdvIGJpdHMgYXJlIHRoZSBpbmRleCBvZiBhbiBpbnRlcm5hbCBzdGF0ZSwgc28g aXQgaXMgcG9zc2libGUKK3RvIGhhdmUgNCBkaWZmZXJlbnQgbnVtYmVyIGdlbmVyYXRvcnMuCisK K0BpdGVtCitUaGUgZmlyc3QgY2FsbCB0byBAY29kZXtyYW5kb21nfSB3aXRoIGEgc3BlY2lmaWMg aW5kZXggd2lsbCB1c2UgdGhlCithcmd1bWVudCBhcyB0aGUgc2VlZCBmb3IgdGhlIG51bWJlciBn ZW5lcmF0b3IgaW4gdGhhdCBpbmRleC4KK0BlbmQgaXRlbWl6ZQorCitJbiBhIHNjcmlwdCBsaWtl IHRoaXM6CisKK0BleGFtcGxlCitNIChyYW5kb21nKDB4RkYxKSkgKHJhbmRvbWcoMHhGRjApKQor bCAocmFuZG9tZygweEFBMSkpIChyYW5kb21nKDB4RkYwKSkKK0BlbmQgZXhhbXBsZQorCitUaGVy ZSBhcmUgNCBjYWxscyB0byBAY29kZXtyYW5kb21nfToKKworQGVudW1lcmF0ZQorQGl0ZW0KK1Ro ZSBmaXJzdCBjYWxsLCB3aXRoIHRoZSBhcmd1bWVudCBAY29kZXsweEZGMX0sIHVzZXMgdGhlIGlu dGVybmFsIHN0YXRlCithdCBpbmRleCBAY29kZXsxfSAoYmVjYXVzZSBAY29kZXsweEZGMX0gbW9k dWxvIEBjb2RlezR9IGlzIEBjb2RlezF9KS4KKworU2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdXNl IG9mIHRoYXQgaW5kZXgsIHRoZSBudW1iZXIgZ2VuZXJhdG9yIGlzCitpbml0aWFsaXplZCB3aXRo IHRoZSBzZWVkIEBjb2RlezB4RkYxfS4KKworQGl0ZW0KK1RoZSBzZWNvbmQgY2FsbCBoYXMgdGhl IHNhbWUgYmVoYXZpb3VyOiBpdCBpbml0aWFsaXplcyB0aGUgc3RhdGUgYXQKK2luZGV4IEBjb2Rl ezB9IHdpdGggdGhlIHZhbHVlIEBjb2RlezB4RkYwfS4KKworQGl0ZW0KK1RoZSB0aGlyZCBjYWxs IGhhcyB0aGUgYXJndW1lbnQgQGNvZGV7MHhBQTF9LCBhbmQgaXQgdXNlcyBpbmRleAorQGNvZGV7 MX0uIFNpbmNlIHRoYXQgc3RhdGUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCAod2l0aCB0aGUgc2Vl ZAorQGNvZGV7MHhGRjF9KSwgdGhlIHZhbHVlIEBjb2RlezB4QUExfSBpcyBpZ25vcmVkLCBhbmQg aXQgcmV0dXJucyB0aGUKK25leHQgbnVtYmVyLgorCitAZW5kIGVudW1lcmF0ZQorCitAY29kZWV4 YW1wbGV7CitUaGlzIGV4YW1wbGUgcmVuZGVycyBhIHNpbXBsZSByYWluIGFuaW1hdGlvbiwgbW92 aW5nIGxpbmVzIGZyb20gdG9wIHRvCitib3R0b20uCisKK0Bjb2Rle3JhbmRvbWd9IGlzIHVzZWQg dG8gZGlzdHJpYnV0ZSB0aGUgbGluZXMgb3ZlciB0aGUgZnJhbWUsIGFuZCB0bworYXBwbHkgZGlm ZmVyZW50IHNwZWVkcyB0byBlYWNoIG9uZS4KKworQGV4YW1wbGUKK3JlY3QgMCAwIHcgaAorc2V0 Y29sb3IgbWlkbmlnaHRibHVlCitmaWxsCisKK3NldGNvbG9yIHdoaXRlCisKK3JlcGVhdCA1MCBA eworICAgIHNldHZhciBvZmZzZXQgKHQgKiAocmFuZG9tZygwKSArIDEpKQorCisgICAgbW92ZXRv CisgICAgICAgIChtb2QocmFuZG9tZygwKSArIG9mZnNldCAvIDYsIDEpICogdykKKyAgICAgICAg KG1vZChyYW5kb21nKDApICsgb2Zmc2V0LCAxKSAqIGgpCisKKyAgICBybGluZXRvIDYgMzYKKwor ICAgIHNldGxpbmV3aWR0aCAocmFuZG9tZygxKSAvIDIgKyAwLjIpCisgICAgc3Ryb2tlCitAfQor QGVuZCBleGFtcGxlCit9CisKK0BzZWN0aW9uIFRyYWNpbmcgd2l0aCBAY29kZXtwcmludH0KKwor SXQgaXMgcG9zc2libGUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBvZiBhIGRyYXd2ZyBzY3JpcHQg YnkgcHJpbnRpbmcgdGhlCit2YWx1ZSBvZiBhbiBleHByZXNzaW9uLCBlaXRoZXIgd2l0aCB0aGUg QHZnc2NtZHtwcmludH0gY29tbWFuZCwgb3Igd2l0aAordGhlIHByaW50IGZ1bmN0aW9uLgorCitJ biBib3RoIGNhc2VzLCB0aGUgdmFsdWVzIGFyZSB3cml0dGVuIHRvIHRoZSBGRm1wZWcgbG9nLgor CitQcmludGluZyBleHByZXNzaW9ucyBtYXkgaGF2ZSBhIG5vdGljZWFibGUgaW1wYWN0IG9uIHRo ZSBwZXJmb3JtYW5jZSwgc28KK2l0IGlzIHByZWZlcmFibGUgdG8gdXNlIGl0IG9ubHkgd2hlbiBu ZWNlc3NhcnkuCisKK0BzdWJzZWN0aW9uIEZ1bmN0aW9uIHByaW50CisKK1RoZSBmdW5jdGlvbiBA Y29kZXtwcmludCh0KX0gd3JpdGVzIHRoZSB2YWx1ZSBvZiB0LCBhbmQgcmV0dXJucyBpdHMKK2Fy Z3VtZW50LgorCitAY29kZWV4YW1wbGV7CitHaXZlbiBhIGxpbmUgbGluZSB0aGlzOgorCitAZXhh bXBsZQorTSAoc2luKDIgKiBQSSAqIHQpICogdykgMAorQGVuZCBleGFtcGxlCisKK1dlIGNhbiBz ZWUgdGhlIHZhbHVlcyBvZiBAY29kZXtzaW4oMiAqIFBJICogdCl9IGJ5IHN1cnJvdW5kaW5nIGl0 IHdpdGggYQorY2FsbCB0byBAY29kZXtwcmludCgpfToKKworQGV4YW1wbGUKK00gKHByaW50KHNp bigyICogUEkgKiB0KSkgKiB3KSAwCitAZW5kIGV4YW1wbGUKKworRXhlY3V0aW5nIHRoaXMgc2Ny aXB0IHdpdGggYSAxIHNlY29uZCAvIDggRlBTIHZpZGVvIHNob3dzIHRoZSBleHBlY3RlZAordmFs dWVzIGZvciB0aGUgc2luZSBmdW5jdGlvbi4KKworQHZlcmJhdGltCiskIGZmbXBlZyBcCisgICAg LWYgbGF2ZmkgXAorICAgIC1pICdjb2xvcj1yPTg6ZD0xLCBkcmF3dmc9TSAocHJpbnQoc2luKDIg KiBQSSAqIHQpKSAqIHcpIDAnIFwKKyAgICAtZiBudWxsIC9kZXYvbnVsbCBcCisgIHwmIGdyZXAg J0V2YWwgQCcKKworW0V2YWwgQCAweDdmNTAwZjUwMmQyMF0gMC4wMDAwMDAKK1tFdmFsIEAgMHg3 ZjRmZjc4NGI0MjBdIDAuNzA3MTA3CitbRXZhbCBAIDB4N2Y0ZmY3ODRiYTIwXSAxLjAwMDAwMAor W0V2YWwgQCAweDdmNGZmNzg0YzAyMF0gMC43MDcxMDcKK1tFdmFsIEAgMHg3ZjRmZjc4NGM2MjBd IDAuMDAwMDAwCitbRXZhbCBAIDB4N2Y0ZmY3ODRjYzIwXSAtMC43MDcxMDcKK1tFdmFsIEAgMHg3 ZjRmZjc4NGQyMjBdIC0xLjAwMDAwMAorW0V2YWwgQCAweDdmNGZmNzg0ZDgyMF0gLTAuNzA3MTA3 CitAZW5kIHZlcmJhdGltCit9CisKK0BhbmNob3J7Q29tbWFuZCBwcmludH0KK0BzdWJzZWN0aW9u IENvbW1hbmQgQGNvZGV7cHJpbnR9CisKK1RoZSBjb21tYW5kIEB2Z3NjbWR7cHJpbnR9IGFjY2Vw dHMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBhcmd1bWVudHMsIGFuZAorZm9yIGVhY2ggb25lIGl0 IHdyaXRlczoKKworQGl0ZW1pemUKK0BpdGVtCitUaGUgc291cmNlIGxvY2F0aW9uIChsaW5lIGFu ZCBjb2x1bW4pLgorQGl0ZW0KK1RoZSBzb3VyY2UgY29kZSBvZiB0aGUgZXhwcmVzc2lvbi4KK0Bp dGVtCitUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCitAZW5kIGl0ZW1p emUKKworV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMsIHRoZXkgYXJlIHNlcGFy YXRlZCBieSB0aGUgQGNvZGV7fH0KK2NoYXJhY3Rlci4KKworQGNvZGVleGFtcGxleworVGhlIG5l eHQgc2NyaXB0IHByaW50cyB0aGUgcG9zaXRpb24gb2YgdGhlIEByZWZ7Y3VycmVudCBwb2ludH0g YWZ0ZXIgdGhlCitAdmdzY21ke2x9IGNvbW1hbmQ6CisKK0BleGFtcGxlCitNIDEwIDIwCitsIDEw MCAxMDAKK3ByaW50IGN4IGN5CitzdHJva2UKK0BlbmQgZXhhbXBsZQorCitGb3IgZWFjaCBmcmFt ZSwgaXQgcHJvZHVjZXMgdGhpcyBvdXRwdXQ6CisKK0B2ZXJiYXRpbQorWzM6N10gY3ggPSAxMTAu MDAwMDAwIHwgWzM6MTBdIGN5ID0gMTIwLjAwMDAwMAorQGVuZCB2ZXJiYXRpbQorCitUaGUgbmV4 dCBleGFtcGxlIHByaW50cyB0aGUgdmFsdWVzIG9mIEBjb2Rle3JhbmRvbSgwKX06CisKK0B2ZXJi YXRpbQorJCBmZm1wZWcgXAorICAgIC1mIGxhdmZpIFwKKyAgICAtaSAnY29sb3I9cj04OmQ9MSwg ZHJhd3ZnPXByaW50IChyYW5kb20oMCkpJyBcCisgICAgLWYgbnVsbCAvZGV2L251bGwgXAorICB8 JiBncmVwICdkcmF3dmcgQCcKKworW2RyYXd2ZyBAIDB4NTBhMDAwMDAwMTgwXSBbMTo3XSAocmFu ZG9tKDApKSA9IDAuMjI5NzMxCitbZHJhd3ZnIEAgMHg1MGEwMDAwMDAxODBdIFsxOjddIChyYW5k b20oMCkpID0gMC45NTk4MTMKK1tkcmF3dmcgQCAweDUwYTAwMDAwMDE4MF0gWzE6N10gKHJhbmRv bSgwKSkgPSAwLjA3MTY3NgorW2RyYXd2ZyBAIDB4NTBhMDAwMDAwMTgwXSBbMTo3XSAocmFuZG9t KDApKSA9IDAuMDQ0NjAwCitbZHJhd3ZnIEAgMHg1MGEwMDAwMDAxODBdIFsxOjddIChyYW5kb20o MCkpID0gMC4xMzQxMjcKK1tkcmF3dmcgQCAweDUwYTAwMDAwMDE4MF0gWzE6N10gKHJhbmRvbSgw KSkgPSAwLjMyMDUxMworW2RyYXd2ZyBAIDB4NTBhMDAwMDAwMTgwXSBbMTo3XSAocmFuZG9tKDAp KSA9IDAuODU3Njc1CitbZHJhd3ZnIEAgMHg1MGEwMDAwMDAxODBdIFsxOjddIChyYW5kb20oMCkp ID0gMC41NjI0NTYKK0BlbmQgdmVyYmF0aW0KK30KKworQGNoYXB0ZXIgQ29tbWFuZHMKKworQG1h Y3JvIHNpZ25hdHVyZSB7c2lnfQorQGJ7QGNvZGV7XHNpZ1x9fQorQGVuZCBtYWNybworCitAbWFj cm8gc2lnbmF0dXJlaW1wbCB7c2lnfQorQHNpZ25hdHVyZXtcc2lnXH0gQCBAIEAgLS0tIEByZWZ7 aW1wbGljaXQgY29tbWFuZHMsQGl7Q2FuIGJlIGltcGxpY2l0fX0KK0BlbmQgbWFjcm8KKworQGFu Y2hvcntjbWRfYXJjfQorQHNlY3Rpb24gQGNvZGV7YXJjfQorCitAc2lnbmF0dXJlaW1wbHthcmMg QHZhcnt4Y30gQHZhcnt5Y30gQHZhcntyYWRpdXN9IEB2YXJ7YW5nbGUxfSBAdmFye2FuZ2xlMn19 CisKK0FkZHMgYSBjaXJjdWxhciBhcmMgb2YgdGhlIGdpdmVuIEB2YXJ7cmFkaXVzfSB0byB0aGUg Y3VycmVudCBwYXRoLiBUaGUKK2FyYyBpcyBjZW50ZXJlZCBhdCBAdmFye3hjLCB5Y30sIGJlZ2lu cyBhdCBAdmFye2FuZ2xlMX0gYW5kIHByb2NlZWRzCitpbiB0aGUgZGlyZWN0aW9uIG9mIGluY3Jl YXNpbmcgYW5nbGVzIHRvIGVuZCBhdCBAdmFye2FuZ2xlMn0uCisKK0lmIHRoZXJlIGlzIGEgQHJl ZntjdXJyZW50IHBvaW50fSwgYSBsaW5lIGlzIGFkZGVkIGZyb20gaXQgdG8gdGhlIGJlZ2lubmlu ZyBvZgordGhlIGFyYy4gSWYgdGhpcyBpcyBub3QgZGVzaXJlZCwgdXNlIEB2Z3NjbWR7bmV3cGF0 aH0gYmVmb3JlIEB2Z3NjbWR7YXJjfSB0byBjbGVhcgordGhlIEByZWZ7Y3VycmVudCBwb2ludH0u CisKK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKK0B1cmVme2h0dHBzOi8vd3d3LmNhaXJv Z3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1QYXRocy5odG1sI2NhaXJvLWFyYyxAY29kZXtjYWly b19hcmN9fQorZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworQGNvZGVleGFtcGxleworQGV4 YW1wbGUKK2FyYyAxMjAgMTIwIDYwIDAgKDMgKiBQSSAvIDIpCitzdHJva2UKK0BlbmQgZXhhbXBs ZQorfQorCitAYW5jaG9ye2NtZF9hcmNufQorQHNlY3Rpb24gQGNvZGV7YXJjbn0KKworQHNpZ25h dHVyZWltcGx7YXJjbiBAdmFye3hjfSBAdmFye3ljfSBAdmFye3JhZGl1c30gQHZhcnthbmdsZTF9 IEB2YXJ7YW5nbGUyfX0KKworU2ltaWxhciB0byBAdmdzY21ke2FyY30sIGJ1dCBpdCBkaWZmZXJz IGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFyYworYmV0d2VlbiB0aGUgdHdvIGFuZ2xlcy4KKwor U2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorQHVyZWZ7aHR0cHM6Ly93d3cuY2Fpcm9ncmFw aGljcy5vcmcvbWFudWFsL2NhaXJvLVBhdGhzLmh0bWwjY2Fpcm8tYXJjLW5lZ2F0aXZlLEBjb2Rl e2NhaXJvX2FyY19uZWdhdGl2ZX19CitmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitAY29k ZWV4YW1wbGV7CitJbiB0aGlzIGV4YW1wbGUsIGJvdGggQHZnc2NtZHthcmN9IGFuZCBAdmdzY21k e2FyY259IGhhdmUgdGhlIHNhbWUgYW5nbGVzLAorYnV0IHRoZXkgcmVuZGVyIGRpZmZlcmVudCBh cmNzOgorCitAZXhhbXBsZQorYXJjICAxMjAgIDkwIDYwIChQSSAvIDIpIDAKKworbmV3cGF0aAor YXJjbiAxMjAgMTUwIDYwIChQSSAvIDIpIDAKKworc3Ryb2tlCitAZW5kIGV4YW1wbGUKK30KKwor QHZnc2NtZHtuZXdwYXRofSBpcyBuZWVkZWQgdG8gcHJldmVudCBhIGxpbmUgYmV0d2VlbiB0aGUg dHdvIGFyY3MuCisKK0BhbmNob3J7Y21kX2JyZWFrfQorQHNlY3Rpb24gQGNvZGV7YnJlYWt9CisK K0BzaWduYXR1cmV7YnJlYWt9CisKK0B2Z3NjbWR7YnJlYWt9IHRlcm1pbmF0ZXMgdGhlIGV4ZWN1 dGlvbiBvZiB0aGUgaW5uZXJtb3N0IGJsb2NrLCBlaXRoZXIgYQorQHZnc2NtZHtyZXBlYXR9IGxv b3Agb3IgYSBwcm9jZWR1cmUuCisKK0lmIGl0IGlzIHVzZWQgb3V0c2lkZSBvZiBhIEB2Z3NjbWR7 cmVwZWF0fSAvIEB2Z3NjbWR7cHJvY30gYmxvY2ssIGl0Cit0ZXJtaW5hdGVzIHRoZSBzY3JpcHQg Zm9yIHRoZSBjdXJyZW50IGZyYW1lLgorCitAYW5jaG9ye2NtZF9jYWxsfQorQHNlY3Rpb24gQGNv ZGV7Y2FsbH0KKworQHNpZ25hdHVyZXtjYWxsIEB2YXJ7bmFtZX0gQHZhcnthcmdzfSp9CisKK0lu dm9rZXMgYSBwcm9jZWR1cmUgZGVmaW5lZCBieSBAdmdzY21ke3Byb2N9LgorCitTZWUgdGhlIEBy ZWZ7UHJvY2VkdXJlc30gc2VjdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgorCitAYW5jaG9y e2NtZF9jaXJjbGV9CitAc2VjdGlvbiBAY29kZXtjaXJjbGV9CisKK0BzaWduYXR1cmVpbXBse2Np cmNsZSBAdmFye3hjfSBAdmFye3ljfSBAdmFye3JhZGl1c319CisKK0FkZHMgYSBjaXJjbGUgb2Yg dGhlIGdpdmVuIEB2YXJ7cmFkaXVzfSB0byB0aGUgY3VycmVudCBwYXRoLiBUaGUgY2lyY2xlCitp cyBjZW50ZXJlZCBhdCBAdmFye3hjLCB5Y30uIFRoZSBAcmVme2N1cnJlbnQgcG9pbnR9IGlzIGNs ZWFyZWQgYmVmb3JlIGFuZAorYWZ0ZXIgYWRkaW5nIHRoZSBjaXJjbGUuCisKK1RoaXMgaXMgYSBj b252ZW5pZW5jZSB3cmFwcGVyIGZvciBAdmdzY21ke2FyY30uIEEgY2FsbCB0byBAdmdzY21ke2Np cmNsZX0gaXMKK2VxdWl2YWxlbnQgdG86CisKK0BleGFtcGxlCituZXdwYXRoCithcmMgeGMgeWMg cmFkaXVzICgwKSAoMiAqIFBJKQorbmV3cGF0aAorQGVuZCBleGFtcGxlCisKK0BhbmNob3J7Y21k X2NsaXB9CitAYW5jaG9ye2NtZF9lb2NsaXB9CitAc2VjdGlvbiBAY29kZXtjbGlwfSwgQGNvZGV7 ZW9jbGlwfQorCitAc2lnbmF0dXJle2NsaXAsIGVvY2xpcH0KKworRXN0YWJsaXNoZXMgYSBuZXcg Y2xpcCByZWdpb24gYnkgaW50ZXJzZWN0aW5nIHRoZSBjdXJyZW50IGNsaXAgcmVnaW9uCit3aXRo IHRoZSBjdXJyZW50IHBhdGggYXMgaXQgd291bGQgYmUgZmlsbGVkIGJ5IEB2Z3NjbWR7ZmlsbH0g b3IKK0B2Z3NjbWR7ZW9maWxsfS4KKworQHZnc2NtZHtlb2NsaXB9IHVzZXMgdGhlCitAdXJlZnto dHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI0NB SVJPLUZJTEwtUlVMRS1FVkVOLU9ERDpDQVBTLGV2ZW4tLW9kZAorcnVsZX0uIFNlZSBAcmVme2Zp bGwgcnVsZXN9IGZvciBtb3JlIGRldGFpbHMuCisKK1RoZSBwYXRoIGlzIGNsZWFyZWQgYWZ0ZXIg dXBkYXRpbmcgdGhlIGNsaXAgcmVnaW9uLCB1bmxlc3MgdGhlCitAdmdzY21ke3ByZXNlcnZlfSBj b21tYW5kIGlzIHVzZWQgYmVmb3JlIEB2Z3NjbWR7Y2xpcH0gb3IgQHZnc2NtZHtlb2NsaXB9Lgor CitTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dy YXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLWNsaXAsQGNvZGV7Y2Fp cm9fY2xpcH19CitmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitAYW5jaG9ye2NtZF9afQor QGFuY2hvcntjbWRfen0KK0BhbmNob3J7Y21kX2Nsb3NlcGF0aH0KK0BzZWN0aW9uIEBjb2Rle1p9 LCBAY29kZXt6fSwgQGNvZGV7Y2xvc2VwYXRofQorCitAc2lnbmF0dXJle1osIHosIGNsb3NlcGF0 aH0KKworQWRkcyBhIGxpbmUgc2VnbWVudCB0byB0aGUgcGF0aCBmcm9tIHRoZSBAcmVme2N1cnJl bnQgcG9pbnR9IHRvIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBjdXJyZW50IHN1Yi1wYXRoLCBhbmQg Y2xvc2VzIHRoaXMgc3ViLXBhdGguIFRoZSBiZWdpbm5pbmcgaXMgc2V0IGJ5IGFueQorb2YgdGhl IEBlbXBoe21vdmV9IGNvbW1hbmRzIChAdmdzY21ke019LCBAdmdzY21ke219LCBAdmdzY21ke21v dmV0b30sCitAdmdzY21ke3Jtb3ZldG99KS4KKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRo ZQorQHVyZWZ7aHR0cHM6Ly93d3cuY2Fpcm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLVBhdGhz Lmh0bWwjY2Fpcm8tY2xvc2UtcGF0aCxAY29kZXtjYWlyb19jbG9zZV9wYXRofX0KK2Z1bmN0aW9u IGZvciBtb3JlIGRldGFpbHMuCisKK0BhbmNob3J7Y21kX2NvbG9yc3RvcH0KK0BzZWN0aW9uIEBj b2Rle2NvbG9yc3RvcH0KKworQHNpZ25hdHVyZWltcGx7Y29sb3JzdG9wIEB2YXJ7b2Zmc2V0fSBA dmFye2NvbG9yfX0KKworQWRkcyBhIGNvbG9yIHN0b3AgdG8gYSBncmFkaWVudCBwYXR0ZXJuLgor CitAdmFye29mZnNldH0gaXMgYSB2YWx1ZSBiZXR3ZWVuIEBjb2RlezB9IGFuZCBAY29kZXsxfSwg YW5kIGl0IHNwZWNpZmllcwordGhlIGxvY2F0aW9uIGFsb25nIHRoZSBncmFkaWVudCdzIGNvbnRy b2wgdmVjdG9yLgorCitUaGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdXRlZCBhZnRlciBAdmdzY21k e2xpbmVhcmdyYWR9IG9yCitAdmdzY21ke3JhZGlhbGdyYWR9LgorCitDb2xvciBzdG9wcyBjYW4g YmUgYWRkZWQgaW4gYW55IG51bWJlciBvZiBjYWxscyB0byBAdmdzY21ke2NvbG9yc3RvcH0uIElu Cit0aGUgbmV4dCBleGFtcGxlLCB0aGUgMyBibG9ja3MgZGVmaW5lIHRoZSBzYW1lIGdyYWRpZW50 OgorCitAZXhhbXBsZQorLy8gMQorY29sb3JzdG9wIDAuMCByZWQKK2NvbG9yc3RvcCAwLjUgZ3Jl ZW4KK2NvbG9yc3RvcCAxLjAgYmx1ZQorCisvLyAyCitjb2xvcnN0b3AgMCByZWQgMC41IGdyZWVu Citjb2xvcnN0b3AgMSBibHVlCisKKy8vIDMKK2NvbG9yc3RvcCAwIHJlZCAwLjUgZ3JlZW4gMSBi bHVlCitAZW5kIGV4YW1wbGUKKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorQHVyZWZ7 aHR0cHM6Ly93d3cuY2Fpcm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLWNhaXJvLXBhdHRlcm4t dC5odG1sI2NhaXJvLXBhdHRlcm4tYWRkLWNvbG9yLXN0b3AtcmdiYSxAY29kZXtjYWlyb19wYXR0 ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmF9fQorZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKwor QGNvZGVleGFtcGxleworSW4gdGhpcyBleGFtcGxlLCBjb2xvciBzdG9wcyBhcmUgYWRkZWQgaW4g YSBAdmdzY21ke3JlcGVhdH0gbG9vcC4KKworQGV4YW1wbGUKK2xpbmVhcmdyYWQgMCAwIHcgaAor CityZXBlYXQgNiBAeworICAgIGRlZmhzbGEgcyAoaSAqIDYwKSAwLjggMC41IDEKKyAgICBjb2xv cnN0b3AgKGkgLyA1KSBzCitAfQorCityZWN0IDAgMCB3IGgKK2ZpbGwKK0BlbmQgZXhhbXBsZQor CitJdCBpcyBwb3NzaWJsZSB0byBhdm9pZCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNvbG9yIHN0b3Bz IGJ5IHJlcGVhdGluZyB0aGUKK3NhbWUgY29sb3IgaW4gdHdvIHN0b3BzOgorCitAZXhhbXBsZQor bGluZWFyZ3JhZCAwIDAgdyBoCisKK3JlcGVhdCA2IEB7CisgICAgZGVmaHNsYSBzIChpICogNjAp IDAuOCAwLjUgMQorICAgIGNvbG9yc3RvcCAoaSAvIDUpIHMKKyAgICBjb2xvcnN0b3AgKChpICsg MSkgLyA1KSBzCitAfQorCityZWN0IDAgMCB3IGgKK2ZpbGwKK0BlbmQgZXhhbXBsZQorfQorCitA YW5jaG9ye2NtZF9DfQorQGFuY2hvcntjbWRfY3VydmV0b30KK0BzZWN0aW9uIEBjb2Rle0N9LCBA Y29kZXtjdXJ2ZXRvfQorCitAc2lnbmF0dXJlaW1wbHtDLCBjdXJ2ZXRvIEB2YXJ7eDF9IEB2YXJ7 eTF9IEB2YXJ7eDJ9IEB2YXJ7eTJ9IEB2YXJ7eH0gQHZhcnt5fX0KKworRHJhdyBhIGN1YmljIELD qXppZXIgY3VydmUgZnJvbSB0aGUgQHJlZntjdXJyZW50IHBvaW50fSB0byB0aGUgQGVtcGh7ZW5k IHBvaW50fQorc3BlY2lmaWVkIGJ5IEB2YXJ7eCwgeX0uIFRoZSBAZW1waHtzdGFydCBjb250cm9s IHBvaW50fSBpcyBzcGVjaWZpZWQgYnkKK0B2YXJ7eDEsIHkxfSBhbmQgdGhlIEBlbXBoe2VuZCBj b250cm9sIHBvaW50fSBpcyBzcGVjaWZpZWQgYnkgQHZhcnt4MiwgeTJ9LgorCitAbWFjcm8gbWRu Y3ViaWNiZXppZXJjdXJ2ZQorQHVyZWZ7aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4t VVMvZG9jcy9XZWIvU1ZHL1JlZmVyZW5jZS9BdHRyaWJ1dGUvZCNjdWJpY19iJUMzJUE5emllcl9j dXJ2ZSxDdWJpYyBCw6l6aWVyIEN1cnZlIG9uIE1ETn0KK0BlbmQgbWFjcm8KKworQG1hY3JvIG1k bnR1dG9yaWFsY3VydmUKK0B1cmVme2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVT L2RvY3MvV2ViL1NWRy9UdXRvcmlhbHMvU1ZHX2Zyb21fc2NyYXRjaC9QYXRocyNjdXJ2ZV9jb21t YW5kcyxDdXJ2ZSBDb21tYW5kcyBzZWN0aW9uIG9mIHRoZSBQYXRocyB0dXRvcmlhbCBvbiBNRE59 CitAZW5kIG1hY3JvCisKK1RoZSBiZWhhdmlvdXIgaXMgaWRlbnRpY2FsIHRvIHRoZSBAdmdzY21k e0N9IGNvbW1hbmQgaW4gQHN2Z3BhdGhsaW5re30uIEZvciBtb3JlCitkZXRhaWxzLCBzZWUgQG1k bmN1YmljYmV6aWVyY3VydmV7fSwgYW5kIHRoZSBAbWRudHV0b3JpYWxjdXJ2ZXt9LgorCitAY29k ZWV4YW1wbGV7CitAZXhhbXBsZQorbW92ZXRvIDIwIDIwCisKK2N1cnZldG8KKyAgICAwIChoIC8g MikgICAgICAgICAgIC8vIHN0YXJ0IGNvbnRyb2wgcG9pbnQKKyAgICB3IChoIC8gMikgICAgICAg ICAgIC8vIGVuZCBjb250cm9sIHBvaW50CisgICAgKHcgLSAyMCkgKGggLSAyMCkgICAvLyBlbmQg cG9pbnQKKworc3Ryb2tlCitAZW5kIGV4YW1wbGUKK30KKworQGFuY2hvcntjbWRfY30KK0BhbmNo b3J7Y21kX3JjdXJ2ZXRvfQorQHNlY3Rpb24gQGNvZGV7Y30sIEBjb2Rle3JjdXJ2ZXRvfQorCitA c2lnbmF0dXJlaW1wbHtjLCByY3VydmV0byBAdmFye2R4MX0gQHZhcntkeTF9IEB2YXJ7ZHgyfSBA dmFye2R5Mn0gQHZhcntkeH0gQHZhcntkeX19CisKK0xpa2UgQHZnc2NtZHtjdXJ2ZXRvfSwgYnV0 IHRoZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIEByZWZ7Y3VycmVudAorcG9pbnR9 LgorCitAYW5jaG9ye2NtZF9kZWZoc2xhfQorQHNlY3Rpb24gQGNvZGV7ZGVmaHNsYX0KKworQHNp Z25hdHVyZXtkZWZoc2xhIHZhcm5hbWUgQHZhcntofSBAdmFye3N9IEB2YXJ7bH0gQHZhcnthfX0K KworU2ltaWxhciB0byBAdmdzY21ke3NldGhzbGF9LCBidXQgaW5zdGVhZCBvZiBlc3RhYmxpc2hp bmcgdGhlIGNvbG9yIGZvcgorc3Ryb2tlIGFuZCBmaWxsIG9wZXJhdGlvbnMsIHRoZSBjb21wdXRl ZCBjb2xvciBpcyBzdG9yZWQgYXMgYQorQGNvZGV7MHhSUkdHQkJBQX0gdmFsdWUgaW4gdGhlIHZh cmlhYmxlIEB2YXJ7dmFybmFtZX0uCisKK0B2YXJ7dmFybmFtZX0gY2FuIHRoZW4gYmUgdXNlZCBh cyBhIGNvbG9yIGZvciBAdmdzY21ke3NldGNvbG9yfSBhbmQKK0B2Z3NjbWR7Y29sb3JzdG9wfS4K KworU2VlIEB2Z3NjbWR7c2V0aHNsYX0gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdGhlIGNvbG9y IGlzIGNvbXB1dGVkLgorCitAYW5jaG9ye2NtZF9kZWZyZ2JhfQorQHNlY3Rpb24gQGNvZGV7ZGVm cmdiYX0KKworQHNpZ25hdHVyZXtkZWZyZ2JhIHZhcm5hbWUgQHZhcntyfSBAdmFye2d9IEB2YXJ7 Yn0gQHZhcnthfX0KKworQ29tcHV0ZXMgYSBjb2xvciBmcm9tIHRoZSBAZW1waHtyZWR9LCBAZW1w aHtncmVlbn0sIEBlbXBoe2JsdWV9LCBhbmQKK0BlbXBoe2FscGhhfSBjb21wb25lbnRzLCBhbmQg YXNzaWducyBpdCB0byB0aGUgdmFyaWFibGUgQHZhcnt2YXJuYW1lfQorYXMgYSBAY29kZXsweFJS R0dCQkFBfSB2YWx1ZS4KKworQWxsIGNvbXBvbmVudHMgYXJlIHZhbHVlcyBiZXR3ZWVuIEBjb2Rl ezB9IGFuZCBAY29kZXsxfS4gVmFsdWVzIG91dHNpZGUKK3RoYXQgcmFuZ2UgYXJlIGNsYW1wZWQg dG8gaXQuCisKK0BhbmNob3J7Y21kX2VsbGlwc2V9CitAc2VjdGlvbiBAY29kZXtlbGxpcHNlfQor CitAc2lnbmF0dXJlaW1wbHtlbGxpcHNlIEB2YXJ7Y3h9IEB2YXJ7Y3l9IEB2YXJ7cnh9IEB2YXJ7 cnl9fQorCitBZGRzIGFuIGVsbGlwc2UgdG8gdGhlIGN1cnJlbnQgcGF0aC4gU2ltaWxhciB0byBA dmdzY21ke2NpcmNsZX0sIGJ1dCBpdCBpcworcG9zc2libGUgdG8gdXNlIGRpZmZlcmVudCByYWRp dXMgZm9yIGJvdGggYXhlcy4KKworQGNvZGVleGFtcGxleworQHZlcmJhdGltCitlbGxpcHNlIDEy MCAxMjAgNzUgNTAKK3N0cm9rZQorQGVuZCB2ZXJiYXRpbQorfQorCitAYW5jaG9ye2NtZF9maWxs fQorQGFuY2hvcntjbWRfZW9maWxsfQorQHNlY3Rpb24gQGNvZGV7ZmlsbH0sIEBjb2Rle2VvZmls bH0KKworQHNpZ25hdHVyZXtmaWxsLCBlb2ZpbGx9CisKK0ZpbGwgdGhlIGN1cnJlbnQgcGF0aCwg dXNpbmcgdGhlIEByZWZ7Y3VycmVudCBwYXR0ZXJufSAoZWl0aGVyCithIHNvbGlkIGNvbG9yIG9y IGEgZ3JhZGllbnQpLgorCitAdmdzY21ke2VvZmlsbH0gdXNlcyB0aGUKK0B1cmVme2h0dHBzOi8v d3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1jYWlyby10Lmh0bWwjQ0FJUk8tRklM TC1SVUxFLUVWRU4tT0REOkNBUFMsZXZlbi0tb2RkCitydWxlfS4gU2VlIEByZWZ7ZmlsbCBydWxl c30gZm9yIG1vcmUgZGV0YWlscy4KKworVGhlIHBhdGggaXMgY2xlYXJlZCBhZnRlciB0aGUgb3Bl cmF0aW9uLCB1bmxlc3MgdGhlIEB2Z3NjbWR7cHJlc2VydmV9Citjb21tYW5kIGlzIHVzZWQgYmVm b3JlIEB2Z3NjbWR7ZmlsbH0gb3IgQHZnc2NtZHtlb2ZpbGx9LgorCitTZWUgdGhlIGRvY3VtZW50 YXRpb24gb2YgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwv Y2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLWZpbGwsQGNvZGV7Y2Fpcm9fZmlsbH19CitmdW5jdGlv biBmb3IgbW9yZSBkZXRhaWxzLgorCitAYW5jaG9ye2NtZF9nZXRtZXRhZGF0YX0KK0BzZWN0aW9u IEBjb2Rle2dldG1ldGFkYXRhfQorCitAc2lnbmF0dXJle2dldG1ldGFkYXRhIEB2YXJ7dmFybmFt ZX0gQHZhcntrZXl9fQorCitHZXQgdGhlIHZhbHVlIG9mIGEgbWV0YWRhdGEgZW50cnkgY3JlYXRl ZCBieSBhbm90aGVyIGZpbHRlciwgYW5kIGFzc2lnbgoraXQgdG8gdGhlIHZhcmlhYmxlIEB2YXJ7 dmFybmFtZX0uCisKK0lmIHRoZXJlIGlzIG5vIG1ldGFkYXRhIGVudHJ5IGZvciBAdmFye2tleX0s IG9yIGl0cyB2YWx1ZSBpcyBub3QgYQorbnVtYmVyLCBAdmFye3Zhcm5hbWV9IGlzIHNldCB0bwor QHVyZWZ7aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmFOLEBjb2Rle05hTn19LgorCitT ZWUgdGhlIEByZWZ7RnJhbWUgTWV0YWRhdGF9IHNlY3Rpb24gYWJvdmUgZm9yIGFuCitleGFtcGxl LgorCitAYW5jaG9ye2NtZF9IfQorQGFuY2hvcntjbWRfaH0KK0BzZWN0aW9uIEBjb2Rle0h9LCBA Y29kZXtofQorCitAc2lnbmF0dXJlaW1wbHtILCBoIEB2YXJ7eH19CisKK0RyYXcgYSBob3Jpem9u dGFsIGxpbmUgZnJvbSB0aGUgQHJlZntjdXJyZW50IHBvaW50fSB0byB4LgorCitUaGUgY29vcmRp bmF0ZSBmb3IgQHZnc2NtZHtIfSBpcyBhYnNvbHV0ZSwgYW5kIGZvciBAdmdzY21ke2h9IGl0IGlz IHJlbGF0aXZlCit0byB0aGUgQHJlZntjdXJyZW50IHBvaW50fS4KKworQGFuY2hvcntjbWRfaWZ9 CitAc2VjdGlvbiBAY29kZXtpZn0KKworQHNpZ25hdHVyZXtpZiBAdmFye2NvbmRpdGlvbn0gQHsg QHZhcntibG9ja30gQH19CisKK0V4ZWN1dGVzIGEgYmxvY2sgaWYgdGhlIHZhbHVlIG9mIEB2YXJ7 Y29uZGl0aW9ufSBpcyBub3QgemVybywgYW5kIGEKK2Zpbml0ZSBudW1iZXIgKHVubGlrZQorQHVy ZWZ7aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmFOLEBjb2Rle05hTn19KS4KKworU2Vl IHRoZSBAcmVme2NvbXAtb3BlcmF0b3JzLENvbXBhcmlzb24gYW5kIExvZ2ljYWwgT3BlcmF0b3Jz fSBzZWN0aW9uCithYm92ZSBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byB3cml0ZSBjb25kaXRp b25hbCBleHByZXNzaW9ucy4KKworQGFuY2hvcntjbWRfbGluZWFyZ3JhZH0KK0BzZWN0aW9uIEBj b2Rle2xpbmVhcmdyYWR9CisKK0BzaWduYXR1cmV7bGluZWFyZ3JhZCBAdmFye3gwfSBAdmFye3kw fSBAdmFye3gxfSBAdmFye3kxfX0KKworU2V0IHRoZSBAcmVme2N1cnJlbnQgcGF0dGVybn0gdG8g YSBuZXcgbGluZWFyIGdyYWRpZW50LCBhbG9uZwordGhlIGxpbmUgZnJvbSB0aGUgY29vcmRpbmF0 ZXMgQHZhcnt4MCwgeTB9IHRvIEB2YXJ7eDEsIHkxfS4KKworVGhpcyBncmFkaWVudCBjYW4gYmUg dXNlZCBmb3Igc3Ryb2tlIGFuZCBmaWxsIG9wZXJhdGlvbnMuCisKK1VzZSBAdmdzY21ke2NvbG9y c3RvcH0gdG8gc2V0IHRoZSBjb2xvciBmb3IgZWFjaCBwb3NpdGlvbiBpbiB0aGUgZ3JhZGllbnQu CisKK0BhbmNob3J7Y21kX0x9CitAYW5jaG9ye2NtZF9saW5ldG99CitAc2VjdGlvbiBAY29kZXtM fSwgQGNvZGV7bGluZXRvfQorCitAc2lnbmF0dXJlaW1wbHtMLCBsaW5ldG8gQHZhcnt4fSBAdmFy e3l9fQorCitEcmF3IGEgbGluZSBmcm9tIHRoZSBAcmVme2N1cnJlbnQgcG9pbnR9IHRvIHRoZSBj b29yZGluYXRlcyBhdCBAdmFye3gsIHl9LgorCitTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhl CitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tUGF0aHMu aHRtbCNjYWlyby1saW5lLXRvLEBjb2Rle2NhaXJvX2xpbmVfdG99fQorZnVuY3Rpb24gZm9yIG1v cmUgZGV0YWlscy4KKworQGFuY2hvcntjbWRfbH0KK0BhbmNob3J7Y21kX3JsaW5ldG99CitAc2Vj dGlvbiBAY29kZXtsfSwgQGNvZGV7cmxpbmV0b30KKworQHNpZ25hdHVyZWltcGx7bCwgcmxpbmV0 byBAdmFye2R4fSBAdmFye2R5fX0KKworTGlrZSBAdmdzY21ke2xpbmV0b30sIGJ1dCB0aGUgY29v cmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBAcmVme2N1cnJlbnQKK3BvaW50fS4KKworQGFu Y2hvcntjbWRfTX0KK0BhbmNob3J7Y21kX21vdmV0b30KK0BzZWN0aW9uIEBjb2Rle019LCBAY29k ZXttb3ZldG99CisKK0BzaWduYXR1cmVpbXBse00sIG1vdmV0byBAdmFye3h9IEB2YXJ7eX19CisK K0JlZ2luIGEgbmV3IHN1Yi1wYXRoLCBhbmQgc2V0IHRoZSBAcmVme2N1cnJlbnQgcG9pbnR9IHRv IEB2YXJ7eCwgeX0uCisKK0BhbmNob3J7Y21kX219CitAYW5jaG9ye2NtZF9ybW92ZXRvfQorQHNl Y3Rpb24gQGNvZGV7bX0sIEBjb2Rle3Jtb3ZldG99CisKK0BzaWduYXR1cmVpbXBse20sIHJtb3Zl dG8gQHZhcntkeH0gQHZhcntkeX19CisKK0xpa2UgQHZnc2NtZHttb3ZldG99LCBidXQgdGhlIGNv b3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgQHJlZntjdXJyZW50Citwb2ludH0uCisKK0Bh bmNob3J7Y21kX25ld3BhdGh9CitAc2VjdGlvbiBAY29kZXtuZXdwYXRofQorCitAc2lnbmF0dXJl e25ld3BhdGh9CisKK0JlZ2luIGEgbmV3IHN1Yi1wYXRoLiBMaWtlIEB2Z3NjbWR7bW92ZXRvfSwg YnV0IHRoZXJlIGlzIG5vCitAcmVme2N1cnJlbnQgcG9pbnR9IGFmdGVyIGl0LgorCitAY29kZWV4 YW1wbGV7CitJbiB0aGUgbmV4dCBleGFtcGxlLCBAdmdzY21ke25ld3BhdGh9IGlzIHVzZWQgaW4g dGhlIHBhdGggb24gdGhlIHJpZ2h0IHRvCitwcmV2ZW50IHRoZSBsaW5lIGNvbm5lY3RpbmcgYm90 aCBhcmNzLgorCitAdmVyYmF0aW0KK3NldGxpbmV3aWR0aCAzCisKK3NldGNvbG9yIHNreWJsdWUK K2FyY24gNzAgOTAgMjAgMCAoUEkpCithcmMgNzAgMTUwIDIwIDAgKFBJKQorc3Ryb2tlCisKK3Nl dGNvbG9yIHNlYWdyZWVuCithcmNuIDE3MCA5MCAyMCAwIChQSSkKK25ld3BhdGgKK2FyYyAxNzAg MTUwIDIwIDAgKFBJKQorc3Ryb2tlCitAZW5kIHZlcmJhdGltCit9CisKK0BhbmNob3J7Y21kX3By ZXNlcnZlfQorQHNlY3Rpb24gQGNvZGV7cHJlc2VydmV9CisKK0BzaWduYXR1cmV7cHJlc2VydmV9 CisKK0luZGljYXRlcyB0aGF0IHRoZSBuZXh0IG9wZXJhdGlvbiB0byBmaWxsLCBzdHJva2UsIG9y IGNsaXAsIG11c3QKK3ByZXNlcnZlIHRoZSBwYXRoLCBzbyB0aGUgc2FtZSBwYXRoIGNhbiBiZSB1 c2VkIGluIG11bHRpcGxlIG9wZXJhdGlvbnMuCisKK0l0IGhhcyBlZmZlY3Qgb24gdGhlc2UgY29t bWFuZHM6CisKK0BpdGVtaXplCitAaXRlbSBAdmdzY21ke2NsaXB9CitAaXRlbSBAdmdzY21ke2Vv Y2xpcH0KK0BpdGVtIEB2Z3NjbWR7ZW9maWxsfQorQGl0ZW0gQHZnc2NtZHtmaWxsfQorQGl0ZW0g QHZnc2NtZHtzdHJva2V9CitAZW5kIGl0ZW1pemUKKworVGhlIHNjcmlwdCBjYW4gY29udGFpbiBh bnkgY29tbWFuZCBiZXR3ZWVuIEB2Z3NjbWR7cHJlc2VydmV9IGFuZCB0aGUKK2Fzc29jaWF0ZWQg b3BlcmF0aW9uLiBUaGlzIGFsbG93cyBtb2RpZnlpbmcgb3RoZXIgcHJvcGVydGllcywgbGlrZSB0 aGUKK2N1cnJlbnQgY29sb3IuCisKK0Bjb2RlZXhhbXBsZXsKK0luIHRoaXMgZXhhbXBsZSwgdGhl IHNhbWUgcGF0aCBpcyB1c2VkIGZvciBib3RoIEB2Z3NjbWR7ZmlsbH0gYW5kCitAdmdzY21ke3N0 cm9rZX0sIGJ1dCB3aXRoIGRpZmZlcmVudCBjb2xvcnMuCisKK0B2ZXJiYXRpbQorY2lyY2xlICh3 IC8gMikgKGggLyAyKSAodyAvIDMpCisKK3NldGNvbG9yIHNreWJsdWUKK3ByZXNlcnZlIGZpbGwK Kworc2V0bGluZXdpZHRoIDEwCitzZXRjb2xvciBzZWFncmVlbgorc3Ryb2tlCitAZW5kIHZlcmJh dGltCit9CisKK0B2Z3NjbWR7cHJlc2VydmV9IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMs IGlmIHRoZSBzYW1lIHBhdGggaGFzIHRvIGJlCit1c2VkIGluIDMgb3IgbW9yZSBvcGVyYXRpb25z LgorCitAY29kZWV4YW1wbGV7CitJbiB0aGlzIGV4YW1wbGUsIHRoZSBwYXRoIGNyZWF0ZWQgYnkg QHZnc2NtZHtjaXJjbGV9IGlzIHVzZWQgYnkKK0B2Z3NjbWR7ZmlsbH0sIEB2Z3NjbWR7c3Ryb2tl fSwgYW5kIEB2Z3NjbWR7Y2xpcH0uIEFmdGVyIEB2Z3NjbWR7Y2xpcH0sIHRoZQorcGF0aCBpcyBj bGVhcmVkLgorCitAdmVyYmF0aW0KK2NpcmNsZSAxMDAgMTAwIDUwCisKK3ByZXNlcnZlIGZpbGwK K3ByZXNlcnZlIHN0cm9rZQorY2xpcAorQGVuZCB2ZXJiYXRpbQorfQorCitAYW5jaG9ye2NtZF9w cmludH0KK0BzZWN0aW9uIEBjb2Rle3ByaW50fQorCitAc2lnbmF0dXJlaW1wbHtwcmludCBAdmFy e2V4cHJ9fQorCitQcmludCBpdHMgYXJndW1lbnRzIHRvIHRoZSBGRm1wZWcgbG9nLgorCitTZWUg dGhlIEByZWZ7Q29tbWFuZCBwcmludH0gc2VjdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgor CitAYW5jaG9ye2NtZF9wcm9jfQorQHNlY3Rpb24gQGNvZGV7cHJvY30KKworQHNpZ25hdHVyZXtw cm9jIEB2YXJ7bmFtZX0gQHZhcntwYXJhbXN9KiBAeyBAdmFye2Jsb2NrfSBAfX0KKworQXNzaWdu IHRoZSBibG9jayBhbmQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9jZWR1cmUgQHZhcntuYW1l fS4gVGhlCitwcm9jZWR1cmUgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBA dmdzY21ke2NhbGx9IGNvbW1hbmQuCisKK1NlZSB0aGUgQHJlZntQcm9jZWR1cmVzfSBzZWN0aW9u IGFib3ZlIGZvciBtb3JlIGRldGFpbHMuCisKK0BhbmNob3J7Y21kX1F9CitAc2VjdGlvbiBAY29k ZXtRfQorCitAc2lnbmF0dXJle1EgeDEgeTEgQHZhcnt4fSBAdmFye3l9fQorCitEcmF3IGEgcXVh ZHJhdGljIELDqXppZXIgY3VydmUgZnJvbSB0aGUgQHJlZntjdXJyZW50IHBvaW50fSB0byB0aGUg QGVtcGh7ZW5kCitwb2ludH0gc3BlY2lmaWVkIGJ5IEB2YXJ7eCwgeX0uIFRoZSBAZW1waHtjb250 cm9sIHBvaW50fSBpcyBzcGVjaWZpZWQgYnkKK0B2YXJ7eDEsIHkxfS4KKworQG1hY3JvIG1kbnF1 YWRiZXppZXJjdXJ2ZQorQHVyZWZ7aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv ZG9jcy9XZWIvU1ZHL1JlZmVyZW5jZS9BdHRyaWJ1dGUvZCNxdWFkcmF0aWNfYiVDMyVBOXppZXJf Y3VydmUsUXVhZHJhdGljIELDqXppZXIgY3VydmUgb24gTUROfQorQGVuZCBtYWNybworCitUaGUg YmVoYXZpb3VyIGlzIGlkZW50aWNhbCB0byB0aGUgQGNvZGV7UX0gY29tbWFuZCBpbiBAc3ZncGF0 aGxpbmt7fS4gRm9yIG1vcmUKK2RldGFpbHMsIHNlZSBAbWRucXVhZGJlemllcmN1cnZle30sIGFu ZCB0aGUgQG1kbnR1dG9yaWFsY3VydmV7fS4KKworQGNvZGVleGFtcGxleworQHZlcmJhdGltCitt b3ZldG8gMjAgMjAKKworUQorICAgIDAgaCAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBwb2lu dAorICAgICh3IC0gMjApIChoIC0gMjApICAgLy8gZW5kIHBvaW50CisKK3N0cm9rZQorQGVuZCB2 ZXJiYXRpbQorfQorCitAYW5jaG9ye2NtZF9xfQorQHNlY3Rpb24gQGNvZGV7cX0KKworQHNpZ25h dHVyZXtxIEB2YXJ7ZHgxfSBAdmFye2R5MX0gQHZhcntkeH0gQHZhcntkeX19CisKK0xpa2UgQHZn c2NtZHtRfSwgYnV0IHRoZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIEByZWZ7Y3Vy cmVudCBwb2ludH0uCisKK0BhbmNob3J7Y21kX3JhZGlhbGdyYWR9CitAc2VjdGlvbiBAY29kZXty YWRpYWxncmFkfQorCitAc2lnbmF0dXJle3JhZGlhbGdyYWQgQHZhcntjeDB9IEB2YXJ7Y3kwfSBA dmFye3JhZGl1czB9IEB2YXJ7Y3gxfSBAdmFye2N5MX0gQHZhcntyYWRpdXMxfX0KKworQ3JlYXRl cyBhIG5ldyByYWRpYWwgZ3JhZGllbnQgYmV0d2VlbiB0aGUgdHdvIGNpcmNsZXMgZGVmaW5lZCBi eQorQHZhcntjeDAgY3kwIHJhZGl1czB9IGFuZCBAdmFye2N4MSBjeTEgcmFkaXVzMX0uIEVhY2gg c2V0IG9mIGFyZ3VtZW50cworaXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjZW50ZXIgYW5kIHRo ZSByYWRpdXMuCisKK1RoaXMgZ3JhZGllbnQgY2FuIGJlIHVzZWQgZm9yIHN0cm9rZSBhbmQgZmls bCBvcGVyYXRpb25zLgorCitVc2UgQHZnc2NtZHtjb2xvcnN0b3B9IHRvIHNldCB0aGUgY29sb3Ig Zm9yIGVhY2ggcG9zaXRpb24gaW4gdGhlIGdyYWRpZW50LgorCitAY29kZWV4YW1wbGV7CitUaGUg YW5pbWF0aW9uIGluIHRoZSBuZXh0IGV4YW1wbGUgc2hvd3MgaG93IHRoZSB0d28gY2lyY2xlcyBk ZWZpbmVkIGluCit0aGUgQHZnc2NtZHtyYWRpYWxncmFkfSBhcmd1bWVudHMgaW50ZXJhY3Qgd2l0 aCBlYWNoIG90aGVyLgorCitUaGUgcmVkIGNpcmNsZSByZXByZXNlbnQgdGhlIGNpcmNsZSBmb3Ig dGhlIEB2YXJ7Y3gwIGN5MCByYWRpdXMwfQorYXJndW1lbnRzLCBhbmQgdGhlIHllbGxvdyBjaXJj bGUgaXMgdGhlIG9uZSBmb3IgdGhlCitAdmFye2N4MSBjeTEgcmFkaXVzMX0gYXJndW1lbnRzLgor CitAdmVyYmF0aW0KK3NldHZhciBjeDAgKG1vZCh0ICogMzAsIHcpKQorc2V0dmFyIGN5MCAxMjAK K3NldHZhciByYWRpdXMwIDIwCisKK3NldHZhciBjeDEgMTIwCitzZXR2YXIgY3kxIDEyMAorc2V0 dmFyIHJhZGl1czEgNzAKKworcmFkaWFsZ3JhZAorICAgIGN4MCBjeTAgcmFkaXVzMAorICAgIGN4 MSBjeTEgcmFkaXVzMQorCitjb2xvcnN0b3AKKyAgICAwIGxpZ2h0Ymx1ZQorICAgIDEgZGFya2Js dWUKKworLy8gRmlsbCB0aGUgZnJhbWUgd2l0aCB0aGUgZ3JhZGllbnQuCityZWN0IDAgMCB3IGgK K2ZpbGwKKworLy8gRHJhdyBpbm5lciBjaXJjbGUuCitjaXJjbGUgY3gwIGN5MCByYWRpdXMwCitz ZXRjb2xvciByZWQKK3N0cm9rZQorCisvLyBEcmF3IG91dGVyIGNpcmNsZS4KK2NpcmNsZSBjeDEg Y3kxIHJhZGl1czEKK3NldGNvbG9yIHllbGxvdworc3Ryb2tlCitAZW5kIHZlcmJhdGltCit9CisK K0BhbmNob3J7Y21kX3JlY3R9CitAc2VjdGlvbiBAY29kZXtyZWN0fQorCitAc2lnbmF0dXJle3Jl Y3QgQHZhcnt4fSBAdmFye3l9IEB2YXJ7d2lkdGh9IEB2YXJ7aGVpZ2h0fX0KKworQWRkcyBhIHJl Y3RhbmdsZSBvZiB0aGUgZ2l2ZW4gc2l6ZSAoQHZhcnt3aWR0aH0gQFV7MDBEN30gQHZhcntoZWln aHR9KSwgYXQKK3Bvc2l0aW9uIEB2YXJ7eCwgeX0sIHRvIHRoZSBjdXJyZW50IHBhdGguIFRoZSBA cmVme2N1cnJlbnQgcG9pbnR9IGlzIGNsZWFyZWQKK2JlZm9yZSBhbmQgYWZ0ZXIgYWRkaW5nIHRo ZSByZWN0YW5nbGUuCisKK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKK0B1cmVme2h0dHBz Oi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1QYXRocy5odG1sI2NhaXJvLXJl Y3RhbmdsZSxAY29kZXtjYWlyb19yZWN0YW5nbGV9fQorZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWls cy4KKworQGFuY2hvcntjbWRfcmVwZWF0fQorQHNlY3Rpb24gQGNvZGV7cmVwZWF0fQorCitAc2ln bmF0dXJle3JlcGVhdCBAdmFye2NvdW50fSBAeyBAdmFye2Jsb2NrfSBAfX0KKworRXhlY3V0ZXMg YSBibG9jayB0aGUgbnVtYmVyIG9mIHRpbWVzIGluZGljYXRlZCBieSBAdmFye2NvdW50fS4KKwor SW4gZWFjaCBpdGVyYXRpb24sIHRoZSB2YXJpYWJsZSBAdmFye2l9IGlzIHVzZWQgYXMgYQorQHVy ZWZ7aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm9yX2xvb3AjTG9vcF9jb3VudGVycyxs b29wCitjb3VudGVyfS4gSXQgdGFrZXMgdGhlIHZhbHVlcyBmcm9tIEBjb2RlezB9IHRvIEBjb2Rl e2NvdW50IC0gMX0uIFdoZW4KK3RoZSBsb29wIGlzIHRlcm1pbmF0ZWQsIHRoZSB2YXJpYWJsZSBp cyByZXN0b3JlZCB0byB0aGUgdmFsdWUgYmVmb3JlCitzdGFydGluZyB0aGUgbG9vcC4KKworSWYg QHZhcntjb3VudH0gaXMgbGVzcyB0aGFuIEBjb2RlezF9LCBvciBpdCBpcyBub3QgYSBmaW5pdGUg bnVtYmVyCisobGlrZSBAdXJlZntodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OYU4sQGNv ZGV7TmFOfX0pLCB0aGUgYmxvY2sgaXMKK25vdCBleGVjdXRlZC4KKworQGFuY2hvcntjbWRfcmVz ZXRjbGlwfQorQHNlY3Rpb24gQGNvZGV7cmVzZXRjbGlwfQorCitAc2lnbmF0dXJle3Jlc2V0Y2xp cH0KKworUmVzZXQgdGhlIGN1cnJlbnQgY2xpcCByZWdpb24gdG8gaXRzIG9yaWdpbmFsIHN0YXRl LCBjb3ZlcmluZyB0aGUgd2hvbGUKK2ZyYW1lLgorCitTZWUgdGhlIGRvY3VtZW50YXRpb24gb2Yg dGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fp cm8tdC5odG1sI2NhaXJvLXJlc2V0LWNsaXAsQGNvZGV7Y2Fpcm9fcmVzZXRfY2xpcH19CitmdW5j dGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitAYW5jaG9ye2NtZF9yZXNldGRhc2h9CitAc2VjdGlv biBAY29kZXtyZXNldGRhc2h9CisKK0BzaWduYXR1cmV7cmVzZXRkYXNofQorCitEaXNhYmxlIHRo ZSBkYXNoIHBhdHRlcm4gdG8gYmUgdXNlZCBieSBAdmdzY21ke3N0cm9rZX0uIFRoaXMgcmV2ZXJ0 cyBhbnkKK2NoYW5nZSBtYWRlIGJ5IEB2Z3NjbWR7c2V0ZGFzaH0gYW5kIEB2Z3NjbWR7c2V0ZGFz aG9mZnNldH0uCisKK0l0IGNhbGxzCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9y Zy9tYW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLXNldC1kYXNoLEBjb2Rle2NhaXJvX3Nl dF9kYXNofX0KK3dpdGggQGNvZGV7bnVtX2Rhc2hlc30gc2V0IHRvIEBjb2RlezB9LgorCitAYW5j aG9ye2NtZF9yZXNldG1hdHJpeH0KK0BzZWN0aW9uIEBjb2Rle3Jlc2V0bWF0cml4fQorCitAc2ln bmF0dXJle3Jlc2V0bWF0cml4fQorCitSZXNldHMgdGhlIGN1cnJlbnQgQHJlZnt0cmFuc2Zvcm1h dGlvbiBtYXRyaXh9LgorCitAYW5jaG9ye2NtZF9yZXN0b3JlfQorQHNlY3Rpb24gQGNvZGV7cmVz dG9yZX0KKworQHNpZ25hdHVyZXtyZXN0b3JlfQorCitSZXN0b3JlcyB0aGUgc3RhdGUgc2F2ZWQg YnkgYSBwcmVjZWRpbmcgY2FsbCB0byBAdmdzY21ke3NhdmV9LgorCitGb3IgbW9yZSBkZXRhaWxz LCBzZWUgdGhlIEByZWZ7U3RhdGUgU3RhY2t9IHNlY3Rpb24gYWJvdmUsIGFuZCB0aGUKK0B1cmVm e2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1jYWlyby10Lmh0bWwj Y2Fpcm8tcmVzdG9yZSxAY29kZXtjYWlyb19yZXN0b3JlfX0KK2Z1bmN0aW9uLgorCitAYW5jaG9y e2NtZF9yb3RhdGV9CitAc2VjdGlvbiBAY29kZXtyb3RhdGV9CisKK0BzaWduYXR1cmV7cm90YXRl IEB2YXJ7YW5nbGV9fQorCitNb2RpZmllcyB0aGUgY3VycmVudCBAcmVme3RyYW5zZm9ybWF0aW9u IG1hdHJpeH0gYnkgcm90YXRpbmcgdGhlIHVzZXItc3BhY2UKK2F4ZXMgYnkgQHZhcnthbmdsZX0g cmFkaWFucy4KKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorQHVyZWZ7aHR0cHM6Ly93 d3cuY2Fpcm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLVRyYW5zZm9ybWF0aW9ucy5odG1sI2Nh aXJvLXJvdGF0ZSxAY29kZXtjYWlyb19yb3RhdGV9fQorZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWls cy4KKworQGNvZGVleGFtcGxleworSW4gdGhpcyBleGFtcGxlOgorCitAaXRlbWl6ZQorQGl0ZW0g QHZnc2NtZHtzY2FsZXh5fSBtYXBzIHRoZSBjb29yZGluYXRlcyB0byBhIDF4MSBmcmFtZS4KK0Bp dGVtIEB2Z3NjbWR7dHJhbnNsYXRlfSBwdXQgQGNvZGV7MCwgMH0gYXQgdGhlIGNlbnRlciBvZiB0 aGUgZnJhbWUuCitAaXRlbSBAdmdzY21ke3JvdGF0ZX0gcm90YXRlcyA0NcKwLgorQGl0ZW0KK0B2 Z3NjbWR7cmVzZXRtYXRyaXh9IHJldmVydHMgdGhlIHRyYW5zZm9ybWF0aW9ucyBiZWZvcmUgQHZn c2NtZHtzdHJva2V9LCBzbyB0aGUKK2xpbmUgd2lkdGggaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBz Y2FsZS4KK0BlbmQgaXRlbWl6ZQorCitAdmVyYmF0aW0KK3NjYWxleHkgdyBoCit0cmFuc2xhdGUg MC41IDAuNQorcm90YXRlIChQSSAvIDQpCityZWN0IC0wLjI1IC0wLjI1IDAuNSAwLjUKK3Jlc2V0 bWF0cml4CitzdHJva2UKK0BlbmQgdmVyYmF0aW0KK30KKworQGFuY2hvcntjbWRfcm91bmRlZHJl Y3R9CitAc2VjdGlvbiBAY29kZXtyb3VuZGVkcmVjdH0KKworQHNpZ25hdHVyZWltcGx7cm91bmRl ZHJlY3QgQHZhcnt4fSBAdmFye3l9IEB2YXJ7d2lkdGh9IEB2YXJ7aGVpZ2h0fSBAdmFye3JhZGl1 c319CisKK0xpa2UgQHZnc2NtZHtyZWN0fSwgYnV0IGEgY2lyY3VsYXIgYXJjIGlzIHVzZWQgZm9y IHRoZSBjb3JuZXJzLgorCitAY29kZWV4YW1wbGV7CitUaGUgbmV4dCBleGFtcGxlIHNob3dzIHRo ZSBzYW1lIHJlY3RhbmdsZSwgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUKK2Nvcm5lciBy YWRpdXMuCisKK1RoZSByYWRpdXMgaXMgY29tcHV0ZWQgYnkgbXVsdGlwbHlpbmcgQHZhcntpfSAo dGhlCitAdXJlZntodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3JfbG9vcCNMb29wX2Nv dW50ZXJzLGxvb3AgY291bnRlcn0pIGJ5CitAY29kZXs0LjV9LiBUaGlzIG51bWJlciBpcyBjaG9z ZW4gdG8gbWFrZSB0aGUgbGFzdCBzaGFwZSBhIHBlcmZlY3QgY2lyY2xlLgorCitAZXhhbXBsZQor cmVwZWF0IDkgQHsKKyAgICByb3VuZGVkcmVjdAorICAgICAgICAobW9kKGksIDMpICogODAgKyA1 KSAgICAgLy8geAorICAgICAgICAoZmxvb3IoaSAvIDMpICogODAgKyA1KSAgLy8geQorICAgICAg ICA3MCA3MCAgICAgICAgICAgICAgICAgICAgLy8gc2l6ZQorICAgICAgICAoaSAqIDQuNSkgICAg ICAgICAgICAgICAgLy8gcmFkaXVzCitAfQorCitzdHJva2UKK0BlbmQgZXhhbXBsZQorfQorCitA YW5jaG9ye2NtZF9zYXZlfQorQHNlY3Rpb24gQGNvZGV7c2F2ZX0KKworQHNpZ25hdHVyZXtzYXZl fQorCitTYXZlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb24gYW4gaW50ZXJuYWwgc3Rh Y2suIFRoaXMgY29weSBjYW4gYmUKK3Jlc3RvcmVkIGxhdGVyIHdpdGggQHZnc2NtZHtyZXN0b3Jl fS4KKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBAcmVme1N0YXRlIFN0YWNrfSBzZWN0aW9u IGFib3ZlLCBhbmQgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9tYW51 YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLXNhdmUsQGNvZGV7Y2Fpcm9fc2F2ZX19CitmdW5j dGlvbi4KKworQGFuY2hvcntjbWRfc2NhbGV9CitAc2VjdGlvbiBAY29kZXtzY2FsZX0KKworQHNp Z25hdHVyZXtzY2FsZSBAdmFye3N4eX19CisKK1NpbWlsYXIgdG8gQHZnc2NtZHtzY2FsZXh5fSwg YnV0IHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIGJvdGggYXhlcy4gSXQKK2lzIGVxdWl2YWxl bnQgdG86CisKK0BzaWduYXR1cmV7c2NhbGV4eSBAdmFye3N4eX0gQHZhcntzeHl9fQorCitAYW5j aG9ye2NtZF9zY2FsZXh5fQorQHNlY3Rpb24gQGNvZGV7c2NhbGV4eX0KKworQHNpZ25hdHVyZXtz Y2FsZXh5IEB2YXJ7c3h9IEB2YXJ7c3l9fQorCitNb2RpZmllcyB0aGUgY3VycmVudCBAcmVme3Ry YW5zZm9ybWF0aW9uIG1hdHJpeH0gYnkgc2NhbGluZyB0aGUgWCBhbmQgWQordXNlci1zcGFjZSBh eGVzIGJ5IEB2YXJ7c3h9IGFuZCBAdmFye3N5fSByZXNwZWN0aXZlbHkuCisKK1NlZSB0aGUgZG9j dW1lbnRhdGlvbiBvZiB0aGUKK0B1cmVme2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21h bnVhbC9jYWlyby1UcmFuc2Zvcm1hdGlvbnMuaHRtbCNjYWlyby1zY2FsZSxAY29kZXtjYWlyb19z Y2FsZX19CitmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitTZWUgQHZnc2NtZHtyb3RhdGV9 IGZvciBhbiBleGFtcGxlIG9uIGNvbWJpbmluZyBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMuCisK K0BhbmNob3J7Y21kX3NldGNvbG9yfQorQHNlY3Rpb24gQGNvZGV7c2V0Y29sb3J9CisKK0BzaWdu YXR1cmV7c2V0Y29sb3IgQHZhcntjb2xvcn19CisKK1NldCBhIHNvbGlkIGNvbG9yIGFzIHRoZSBA cmVme2N1cnJlbnQgcGF0dGVybn0gZm9yIHN0cm9rZSBhbmQgZmlsbCBvcGVyYXRpb25zCisKK1Nl ZSB0aGUgQHJlZntDb2xvcnN9IHNlY3Rpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KKworQGFu Y2hvcntjbWRfc2V0ZGFzaH0KK0BzZWN0aW9uIEBjb2Rle3NldGRhc2h9CisKK0BzaWduYXR1cmVp bXBse3NldGRhc2ggQHZhcntsZW5ndGh9fQorCitTZXRzIHRoZSBkYXNoIHBhdHRlcm4gdG8gYmUg dXNlZCBieSBAdmdzY21ke3N0cm9rZX0uCisKK0VhY2ggY2FsbCB0byBAdmdzY21ke3NldGRhc2h9 IGFkZHMgYSBsZW5ndGggdG8gdGhlIHBhdHRlcm4sIGFsdGVybmF0aW5nCitiZXR3ZWVuIEBlbXBo e29ufSBhbmQgQGVtcGh7b2ZmfSBwb3J0aW9ucyBvZiB0aGUgc3Ryb2tlLgorCitBZnRlciBhIGNh bGwgdG8gQHZnc2NtZHtzZXRkYXNofSwgQHZnc2NtZHtyZXNldGRhc2h9IGlzIG5lZWRlZCBlaXRo ZXIgdG8KK2NyZWF0ZSBhIG5ldyBwYXR0ZXJuLCBvciB0byBkaXNjYXJkIHRoZSBjdXJyZW50IG9u ZS4KKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorQHVyZWZ7aHR0cHM6Ly93d3cuY2Fp cm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLWNhaXJvLXQuaHRtbCNjYWlyby1zZXQtZGFzaCxA Y29kZXtjYWlyb19zZXRfZGFzaH19CitmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitAYW5j aG9ye2NtZF9zZXRkYXNob2Zmc2V0fQorQHNlY3Rpb24gQGNvZGV7c2V0ZGFzaG9mZnNldH0KKwor QHNpZ25hdHVyZXtzZXRkYXNob2Zmc2V0IEB2YXJ7b2Zmc2V0fX0KKworU2V0IHRoZSBvZmZzZXQg aW50byB0aGUgZGFzaCBwYXR0ZXJuIGF0IHdoaWNoIHRoZSBzdHJva2Ugc2hvdWxkIHN0YXJ0Lgor CitAdmdzY21ke3NldGRhc2h9IG11c3QgYmUgY2FsbGVkIEBlbXBoe2JlZm9yZX0gQHZnc2NtZHtz ZXRkYXNob2Zmc2V0fS4KKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorQHVyZWZ7aHR0 cHM6Ly93d3cuY2Fpcm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLWNhaXJvLXQuaHRtbCNjYWly by1zZXQtZGFzaCxAY29kZXtjYWlyb19zZXRfZGFzaH19CitmdW5jdGlvbiBmb3IgbW9yZSBkZXRh aWxzLgorCitAY29kZWV4YW1wbGV7CitUaGUgbmV4dCBhbmltYXRpb24gc2hvd3MgdGhlIGVmZmVj dCBvZiBAdmdzY21ke3NldGRhc2hvZmZzZXR9IHdoZW4gaXRzCithcmd1bWVudCBjaGFuZ2VzIG92 ZXIgdGltZS4KKworQHZlcmJhdGltCitzY2FsZXh5IHcgaAorTSAwLjUgMQorY3VydmV0byAwIDAu NSwgMSAwLjUsIDAuNSAwCityZXNldG1hdHJpeAorCitzZXRkYXNoIDIwIDUgLy8gMjAgb24sIDUg b2ZmCitzZXRkYXNob2Zmc2V0ICh0ICogMTAwKQorCitzZXRsaW5ld2lkdGggMjAKK3N0cm9rZQor QGVuZCB2ZXJiYXRpbQorfQorCitAYW5jaG9ye2NtZF9zZXRoc2xhfQorQHNlY3Rpb24gQGNvZGV7 c2V0aHNsYX0KKworQHNpZ25hdHVyZXtzZXRoc2xhIEB2YXJ7aH0gQHZhcntzfSBAdmFye2x9IEB2 YXJ7YX19CisKK1NldCB0aGUgQHJlZntjdXJyZW50IHBhdHRlcm59IHRvIGEgc29saWQgY29sb3Is IGdpdmVuIHRoZSBAZW1waHtodWV9LAorQGVtcGh7c2F0dXJhdGlvbn0sIGFuZCBAZW1waHtsaWdo dG5lc3N9LCBhbmQgQGVtcGh7YWxwaGF9IGNvbXBvbmVudHMuCisKK2ggaXMgdGhlIEBlbXBoe2h1 ZX0sIGEgdmFsdWUgYmV0d2VlbiBAY29kZXswfSBhbmQgQGNvZGV7MzU5fS4gTmVnYXRpdmUKK3Zh bHVlcyBhcmUgY2xhbXBlZCB0byBAY29kZXswfSwgYW5kIHZhbHVlcyBncmVhdGVyIHRoYW4gQGNv ZGV7MzU5fSBhcmUKK2ludGVycHJldGVkIGFzIG1vZHVsbyAzNjAuCisKK3MgKEBlbXBoe3NhdHVy YXRpb259KSwgbCAoQGVtcGh7bGlnaHRuZXNzfSksIGFuZCBhIChAZW1waHthbHBoYX0pLCBhcmUK K3ZhbHVlcyBiZXR3ZWVuIEBjb2RlezB9IGFuZCBAY29kZXsxfS4KKworVGhlIGNvbnZlcnNpb24g dG8gUkdCIGlzIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUKK0B1cmVme2h0dHBzOi8vZW4u d2lraXBlZGlhLm9yZy93aWtpL0hTTF9hbmRfSFNWI0hTTF90b19SR0IsZm9ybXVsYWUgZnJvbQor V2lraXBlZGlhfS4KKworQGFuY2hvcntjbWRfc2V0bGluZWNhcH0KK0BzZWN0aW9uIEBjb2Rle3Nl dGxpbmVjYXB9CisKK0BzaWduYXR1cmV7c2V0bGluZWNhcCBAdmFye2NhcH19CisKK1NldCB0aGUg Y3VycmVudCBsaW5lIGNhcCBzdHlsZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgc2hhcGUgdXNlZCB0 byBkcmF3Cit0aGUgZW5kIHBvaW50cyBvZiBsaW5lcy4KKworQHZhcntjYXB9IG11c3QgYmUgb25l IG9mIHRoZSBmb2xsb3dpbmcgbmFtZXM6CisKK0BpdGVtaXplCitAaXRlbSBAY29kZXtidXR0fQor QGl0ZW0gQGNvZGV7cm91bmR9CitAaXRlbSBAY29kZXtzcXVhcmV9CitAZW5kIGl0ZW1pemUKKwor SXQgY2FsbHMgdG8KK0B1cmVme2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9j YWlyby1jYWlyby10Lmh0bWwjY2Fpcm8tc2V0LWxpbmUtY2FwLEBjb2Rle2NhaXJvX3NldF9saW5l X2NhcH19Cit0byBzZXQgdGhlIGxpbmUgY2FwIHN0eWxlLgorCitAY29kZWV4YW1wbGV7CitUaGlz IGV4YW1wbGUgZHJhd3MgMyBsaW5lcyB3aXRoIHRoZSBzYW1lIGxlbmd0aCwgZWFjaCBvbmUgd2l0 aCBhCitkaWZmZXJlbnQgbGluZSBjYXAgc3R5bGU6CisKK0B2ZXJiYXRpbQorc2V0bGluZXdpZHRo IDQwCisKK3NldGxpbmVjYXAgYnV0dAorc2V0Y29sb3IgdG9tYXRvCitNIDYwIDQwIHYgMTAwIHN0 cm9rZQorCitzZXRsaW5lY2FwIHJvdW5kCitzZXRjb2xvciBzZWFncmVlbgorTSAxMjAgNDAgdiAx MDAgc3Ryb2tlCisKK3NldGxpbmVjYXAgc3F1YXJlCitzZXRjb2xvciBza3libHVlCitNIDE4MCA0 MCB2IDEwMCBzdHJva2UKKworTSAyMCA0MCBIIDIyMCBtIDAgMTAwIEggMjAKK3NldGNvbG9yIGJs YWNrQDAuNQorc2V0bGluZXdpZHRoIDIKK3N0cm9rZQorQGVuZCB2ZXJiYXRpbQorfQorCitAYW5j aG9ye2NtZF9zZXRsaW5lam9pbn0KK0BzZWN0aW9uIEBjb2Rle3NldGxpbmVqb2lufQorCitAc2ln bmF0dXJle3NldGxpbmVqb2luIEB2YXJ7am9pbn19CisKK1NldHMgdGhlIGN1cnJlbnQgbGluZSBq b2luIHN0eWxlLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzaGFwZSB1c2VkIHRvCitqb2luIHR3byBs aW5lIHNlZ21lbnRzLgorCitAdmFye2pvaW59IG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcg bmFtZXM6CisKK0BpdGVtaXplCitAaXRlbSBAY29kZXtiZXZlbH0KK0BpdGVtIEBjb2Rle21pdGVy fQorQGl0ZW0gQGNvZGV7cm91bmR9CitAZW5kIGl0ZW1pemUKKworSXQgY2FsbHMgdG8KK0B1cmVm e2h0dHBzOi8vd3d3LmNhaXJvZ3JhcGhpY3Mub3JnL21hbnVhbC9jYWlyby1jYWlyby10Lmh0bWwj Y2Fpcm8tc2V0LWxpbmUtam9pbixAY29kZXtjYWlyb19zZXRfbGluZV9qb2lufX0KK3RvIHNldCB0 aGUgbGluZSBqb2luIHN0eWxlLgorCitAY29kZWV4YW1wbGV7CitUaGlzIGV4YW1wbGUgZHJhd3Mg MyBsaW5lcyB3aXRoIHRoZSBzYW1lIGxlbmd0aCwgZWFjaCBvbmUgd2l0aCBhCitkaWZmZXJlbnQg bGluZSBqb2luIHN0eWxlOgorCitAdmVyYmF0aW0KK3NldGxpbmV3aWR0aCAzMAorCitzZXRsaW5l am9pbiBiZXZlbAorc2V0Y29sb3IgdG9tYXRvCitNIDcwIDIwIGwgNTAgNTAgNTAgLTUwIHN0cm9r ZQorCitzZXRsaW5lam9pbiBtaXRlcgorc2V0Y29sb3Igc2VhZ3JlZW4KK00gNzAgOTAgbCA1MCA1 MCA1MCAtNTAgc3Ryb2tlCisKK3NldGxpbmVqb2luIHJvdW5kCitzZXRjb2xvciBza3libHVlCitN IDcwIDE2MCBsIDUwIDUwIDUwIC01MCBzdHJva2UKK0BlbmQgdmVyYmF0aW0KK30KKworQGFuY2hv cntjbWRfc2V0bGluZXdpZHRofQorQHNlY3Rpb24gQGNvZGV7c2V0bGluZXdpZHRofQorCitAc2ln bmF0dXJle3NldGxpbmV3aWR0aCBAdmFye3dpZHRofX0KKworU2V0IHRoZSBsaW5lIHdpZHRoIGZv ciBAdmdzY21ke3N0cm9rZX0uCisKK0B2YXJ7d2lkdGh9IGlzIGFmZmVjdGVkIGJ5IHRoZSBAcmVm e3RyYW5zZm9ybWF0aW9uIG1hdHJpeH0uCisKK1RvIHNwZWNpZnkgYSB3aWR0aCB0aGF0IGlzIG5v dCBhZmZlY3RlZCBieSBvdGhlciB0cmFuc2Zvcm1hdGlvbnMsCitAdmdzY21ke3Jlc2V0bWF0cml4 fSBjYW4gYmUgdXNlZCBiZXR3ZWVuIEB2Z3NjbWR7c2F2ZX0gLyBAdmdzY21ke3Jlc3RvcmV9Ogor CitAdmVyYmF0aW0KK3NhdmUKKworcmVzZXRtYXRyaXgKK3NldGxpbmV3aWR0aCAxCitzdHJva2UK KworLy8gUmVzdG9yZSBtYXRyaXggYWZ0ZXIgc3Ryb2tlLgorcmVzdG9yZQorQGVuZCB2ZXJiYXRp bQorCitTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWly b2dyYXBoaWNzLm9yZy9tYW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLXNldC1saW5lLXdp ZHRoLEBjb2Rle2NhaXJvX3NldF9saW5lX3dpZHRofX0KK2Z1bmN0aW9uIGZvciBtb3JlIGRldGFp bHMuCisKK0BhbmNob3J7Y21kX3NldHJnYmF9CitAc2VjdGlvbiBAY29kZXtzZXRyZ2JhfQorCitA c2lnbmF0dXJle3NldHJnYmEgQHZhcntyfSBAdmFye2d9IEB2YXJ7Yn0gQHZhcnthfX0KKworU2V0 IHRoZSBAcmVme2N1cnJlbnQgcGF0dGVybn0gdG8gYSBzb2xpZCBjb2xvciwgZ2l2ZW4gdGhlCitA ZW1waHtyZWR9LCBAZW1waHtncmVlbn0sIEBlbXBoe2JsdWV9LCBhbmQgQGVtcGh7YWxwaGF9IGNv bXBvbmVudHMuCisKK0FsbCBjb21wb25lbnRzIGFyZSB2YWx1ZXMgYmV0d2VlbiBAY29kZXswfSBh bmQgQGNvZGV7MX0uIFZhbHVlcyBvdXRzaWRlCit0aGF0IHJhbmdlIGFyZSBjbGFtcGVkIHRvIGl0 LgorCitAYW5jaG9ye2NtZF9zZXR2YXJ9CitAc2VjdGlvbiBAY29kZXtzZXR2YXJ9CisKK0BzaWdu YXR1cmV7c2V0dmFyIEB2YXJ7dmFybmFtZX0gQHZhcnt2YWx1ZX19CisKK1NldCB0aGUgdmFyaWFi bGUgQHZhcnt2YXJuYW1lfSB0byBAdmFye3ZhbHVlfS4KKworU2VlIHRoZSBAcmVme1VzZXIgVmFy aWFibGVzfSBzZWN0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbHMuCisKK0BhbmNob3J7Y21kX3N0 cm9rZX0KK0BzZWN0aW9uIEBjb2Rle3N0cm9rZX0KKworQHNpZ25hdHVyZXtzdHJva2V9CisKK1N0 cm9rZXMgdGhlIGN1cnJlbnQgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbGluZSB3aWR0 aCwgbGluZSBqb2luLAorbGluZSBjYXAsIGFuZCBkYXNoIHNldHRpbmdzLgorCitUaGUgcGF0aCBp cyBjbGVhcmVkIGFmdGVyIHRoZSBvcGVyYXRpb24sIHVubGVzcyB0aGUgQHZnc2NtZHtwcmVzZXJ2 ZX0KK2NvbW1hbmQgaXMgdXNlZCBiZWZvcmUgQHZnc2NtZHtzdHJva2V9LgorCitTZWUgdGhlIGRv Y3VtZW50YXRpb24gb2YgdGhlCitAdXJlZntodHRwczovL3d3dy5jYWlyb2dyYXBoaWNzLm9yZy9t YW51YWwvY2Fpcm8tY2Fpcm8tdC5odG1sI2NhaXJvLXN0cm9rZSxAY29kZXtjYWlyb19zdHJva2V9 fQorZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworQGFuY2hvcntjbWRfU30KK0BhbmNob3J7 Y21kX3N9CitAc2VjdGlvbiBAY29kZXtTfSwgQGNvZGV7c30KKworQHNpZ25hdHVyZWltcGx7Uywg cyBAdmFye3gyfSBAdmFye3kyfSBAdmFye3h9IEB2YXJ7eX19CisKK0RyYXcgYSBzbW9vdGggY3Vi aWMgQsOpemllciBjdXJ2ZSBmcm9tIHRoZSBAcmVme2N1cnJlbnQgcG9pbnR9IHRvIHRoZSBAZW1w aHtlbmQKK3BvaW50fSBzcGVjaWZpZWQgYnkgQHZhcnt4LCB5fS4gVGhlIEBlbXBoe2VuZCBjb250 cm9sIHBvaW50fSBpcyBzcGVjaWZpZWQgYnkKK0B2YXJ7eDIsIHkyfS4KKworVGhlIEBlbXBoe3N0 YXJ0IGNvbnRyb2wgcG9pbnR9IGlzIHRoZSByZWZsZWN0aW9uIG9mIHRoZSBAZW1waHtlbmQKK2Nv bnRyb2wgcG9pbnR9IG9mIHRoZSBwcmV2aW91cyBjdXJ2ZSBjb21tYW5kIGFib3V0IHRoZSBAZW1w aHtjdXJyZW50Citwb2ludH0uCisKK1RoZSBiZWhhdmlvdXIgaXMgaWRlbnRpY2FsIHRvIHRoZSBA Y29kZXtTfSBjb21tYW5kIGluIEBzdmdwYXRobGlua3t9LiBGb3IgbW9yZQorZGV0YWlscywgc2Vl IEBtZG5jdWJpY2JlemllcmN1cnZle30sIGFuZCB0aGUgQG1kbnR1dG9yaWFsY3VydmV7fS4KKwor QHZnc2NtZHtzfSBpcyBsaWtlIEB2Z3NjbWR7U30sIGJ1dCB0aGUgY29vcmRpbmF0ZXMgYXJlIHJl bGF0aXZlIHRvIHRoZSBAcmVme2N1cnJlbnQKK3BvaW50fS4KKworQGNvZGVleGFtcGxleworQGV4 YW1wbGUKK00gMjAgMTIwCisKK2MgMjUgLTUwLCAyNSA1MCwgNTAgMAorCityZXBlYXQgMyBAewor ICAgIHMgMjAgNTAsIDUwIDAKK0B9CisKK3N0cm9rZQorQGVuZCBleGFtcGxlCit9CisKK0BhbmNo b3J7Y21kX3RyYW5zbGF0ZX0KK0BzZWN0aW9uIEBjb2Rle3RyYW5zbGF0ZX0KKworQHNpZ25hdHVy ZXt0cmFuc2xhdGUgQHZhcnt0eH0gQHZhcnt0eX19CisKK01vZGlmaWVzIHRoZSBjdXJyZW50IEBy ZWZ7dHJhbnNmb3JtYXRpb24gbWF0cml4fSBieQordHJhbnNsYXRpbmcgdGhlIHVzZXItc3BhY2Ug b3JpZ2luIGJ5IEB2YXJ7dHgsIHR5fS4KKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQor QHVyZWZ7aHR0cHM6Ly93d3cuY2Fpcm9ncmFwaGljcy5vcmcvbWFudWFsL2NhaXJvLVRyYW5zZm9y bWF0aW9ucy5odG1sI2NhaXJvLXRyYW5zbGF0ZSxAY29kZXtjYWlyb190cmFuc2xhdGV9fQorZnVu Y3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworQGFuY2hvcntjbWRfVH0KK0BhbmNob3J7Y21kX3R9 CitAc2VjdGlvbiBAY29kZXtUfSwgQGNvZGV7dH0KKworQHNpZ25hdHVyZWltcGx7VCwgdCBAdmFy e3h9IEB2YXJ7eX19CisKK0RyYXcgYSBzbW9vdGggcXVhZHJhdGljIELDqXppZXIgY3VydmUgZnJv bSB0aGUgQHJlZntjdXJyZW50IHBvaW50fSB0byB0aGUKK0BlbXBoe2VuZCBwb2ludH0gc3BlY2lm aWVkIGJ5IEB2YXJ7eCwgeX0uCisKK1RoZSBAZW1waHtjb250cm9sIHBvaW50fSBpcyB0aGUgcmVm bGVjdGlvbiBvZiB0aGUgQGVtcGh7Y29udHJvbCBwb2ludH0KK29mIHRoZSBwcmV2aW91cyBjdXJ2 ZSBjb21tYW5kIGFib3V0IHRoZSBAZW1waHtjdXJyZW50IHBvaW50fS4KKworVGhlIGJlaGF2aW91 ciBpcyBpZGVudGljYWwgdG8gdGhlIEBjb2Rle1R9IGNvbW1hbmQgaW4gQHN2Z3BhdGhsaW5re30u IEZvciBtb3JlCitkZXRhaWxzLCBzZWUgQG1kbnF1YWRiZXppZXJjdXJ2ZXt9LCBhbmQgdGhlIEBt ZG50dXRvcmlhbGN1cnZle30uCisKK0B2Z3NjbWR7dH0gaXMgbGlrZSBAdmdzY21ke1R9LCBidXQg dGhlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUKK0ByZWZ7Y3VycmVudCBwb2ludH0u CisKK0Bjb2RlZXhhbXBsZXsKK0BleGFtcGxlCitNIDIwIDEyMAorCitxIDEwIC0yMCwgMjAgMAor CityZXBlYXQgOSBAeworICAgIHQgMjAgMAorQH0KKworc3Ryb2tlCitAZW5kIGV4YW1wbGUKK30K KworQGFuY2hvcntjbWRfVn0KK0BhbmNob3J7Y21kX3Z9CitAc2VjdGlvbiBAY29kZXtWfSwgQGNv ZGV7dn0KKworQHNpZ25hdHVyZWltcGx7ViwgdiBAdmFye3l9fQorCitEcmF3IGEgdmVydGljYWwg bGluZSBmcm9tIHRoZSBAcmVme2N1cnJlbnQgcG9pbnR9IHRvIHkuCisKK1RoZSBjb29yZGluYXRl IGZvciBAdmdzY21ke1Z9IGlzIGFic29sdXRlLCBhbmQgZm9yIEB2Z3NjbWR7dn0gaXQgaXMgcmVs YXRpdmUKK3RvIHRoZSBAcmVme2N1cnJlbnQgcG9pbnR9LgorCitAYnllCmRpZmYgLS1naXQgYS9k b2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCA1YjUyZmM1NTIxLi43MzVk MjkwYTBlIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJzLnRl eGkKQEAgLTEzMDM3LDYgKzEzMDM3LDc2IEBAIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxp YmZyaWJpZGksIGNoZWNrOgogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGliaGFyZmJ1enos IGNoZWNrOgogQHVybHtodHRwczovL2dpdGh1Yi5jb20vaGFyZmJ1enovaGFyZmJ1enp9LgogCitA YW5jaG9ye2RyYXd2Z30KK0BzZWN0aW9uIGRyYXd2ZworCitEcmF3IHZlY3RvciBncmFwaGljcyBv biB0b3Agb2YgdmlkZW8gZnJhbWVzLCBieSBleGVjdXRpbmcgYSBzY3JpcHQgd3JpdHRlbiBpbgor YSBjdXN0b20gbGFuZ3VhZ2UgY2FsbGVkIFZHUyAoQGVtcGh7VmVjdG9yIEdyYXBoaWNzIFNjcmlw dH0pLgorCitUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxhbmd1YWdlIGNhbiBiZSBmb3VuZCBp bgorQHJlZnssLGRyYXd2ZyAtIExhbmd1YWdlIFJlZmVyZW5jZSxkcmF3dmctcmVmZXJlbmNlfS4K KworR3JhcGhpY3MgYXJlIHJlbmRlcmVkIHVzaW5nIHRoZSBAdXJlZntodHRwczovL2NhaXJvZ3Jh cGhpY3Mub3JnLyxjYXJpbyAyRAorZ3JhcGhpY3MgbGlicmFyeX0uIFRoZSBmaWx0ZXIgaXMgZW5h YmxlZCBvbmx5IGlmIGxpYmNhaXJvIGlzIGRldGVjdGVkIHdoZW4KK0ZGbXBlZyBpcyBidWlsdC4K KworQHN1YnNlY3Rpb24gUGFyYW1ldGVycworCitFaXRoZXIgQGNvZGV7c2NyaXB0fSBvciBAY29k ZXtmaWxlfSBtdXN0IGJlIHNldC4KKworQHRhYmxlIEBvcHRpb24KKworQGl0ZW0gcywgc2NyaXB0 CitTY3JpcHQgc291cmNlIHRvIGRyYXcgdGhlIGdyYXBoaWNzLgorCitAaXRlbSBmaWxlCitQYXRo IG9mIHRoZSBmaWxlIHRvIGxvYWQgdGhlIHNjcmlwdCBzb3VyY2UuCisKK0BlbmQgdGFibGUKKwor QHN1YnNlY3Rpb24gUGl4ZWwgRm9ybWF0cworCitTaW5jZSBDYWlybyBvbmx5IHN1cHBvcnRzIFJH QiBpbWFnZXMsIGlmIHRoZSBpbnB1dCB2aWRlbyBpcyBzb21ldGhpbmcgZWxzZSAobGlrZQorWVVW IDQ6MjowKSwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc2NyaXB0IHRoZSB2aWRlbyBpcyBjb252ZXJ0 ZWQgdG8gYSBmb3JtYXQKK2NvbXBhdGlibGUgd2l0aCBDYWlyby4gVGhlbiwgeW91IGhhdmUgdG8g dXNlIHVzZSBlaXRoZXIgdGhlIEByZWZ7Zm9ybWF0fSBmaWx0ZXIsCitvciB0aGUgQGNvZGV7LXBp eF9mbXR9IG9wdGlvbiwgdG8gY29udmVydCBpdCB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0IGluIHRo ZQorb3V0cHV0LgorCitAc3Vic2VjdGlvbiBFeGFtcGxlcworCitAaXRlbWl6ZQorQGl0ZW0KK0Ry YXcgdGhlIG91dGxpbmUgb2YgYW4gZWxsaXBzZS4KKworQGV4YW1wbGUKK2ZmbXBlZyAtaSBpbnB1 dC53ZWJtIFwKKyAgICAtdmYgJ2RyYXd2Zz1lbGxpcHNlICh3LzIpIChoLzIpICh3LzMpIChoLzMp IHN0cm9rZScgXAorICAgIC1waXhfZm10IHl1djQyMHAgXAorICAgIG91dHB1dC53ZWJtCitAZW5k IGV4YW1wbGUKKworQGl0ZW0KKworRHJhdyBhIHNxdWFyZSByb3RhdGluZyBpbiB0aGUgbWlkZGxl IG9mIHRoZSBmcmFtZS4KKworVGhlIHNjcmlwdCBmb3IgZHJhd3ZnIGlzIGluIGEgZmlsZSBAY29k ZXtkcmF3LnZnc306CisKK0BleGFtcGxlCit0cmFuc2xhdGUgKHcvMikgKGgvMikKK3JvdGF0ZSB0 CityZWN0IC0xMDAgLTEwMCAyMDAgMjAwCitzZXRjb2xvciByZWRAQDAuNQorZmlsbAorQGVuZCBl eGFtcGxlCisKK1RoZW46CisKK0BleGFtcGxlCitmZm1wZWcgLWkgaW5wdXQud2VibSAtdmYgJ2Ry YXd2Zz1maWxlPWRyYXcudmdzLGZvcm1hdD15dXY0MjBwJyBvdXRwdXQud2VibQorQGVuZCBleGFt cGxlCisKK0BlbmQgaXRlbWl6ZQorCiBAc2VjdGlvbiBlZGdlZGV0ZWN0CiAKIERldGVjdCBhbmQg ZHJhdyBlZGdlcy4gVGhlIGZpbHRlciB1c2VzIHRoZSBDYW5ueSBFZGdlIERldGVjdGlvbiBhbGdv cml0aG0uCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2ZmlsdGVyL01h a2VmaWxlCmluZGV4IGJkM2Y2ZGEyN2QuLjQzZjM4OTQxZTggMTAwNjQ0Ci0tLSBhL2xpYmF2Zmls dGVyL01ha2VmaWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCkBAIC0yOTgsNiArMjk4LDcg QEAgT0JKUy0kKENPTkZJR19EUkFXQk9YX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0gdmZfZHJh d2JveC5vCiBPQkpTLSQoQ09ORklHX0RSQVdHUkFQSF9GSUxURVIpICAgICAgICAgICAgICArPSBm X2RyYXdncmFwaC5vCiBPQkpTLSQoQ09ORklHX0RSQVdHUklEX0ZJTFRFUikgICAgICAgICAgICAg ICArPSB2Zl9kcmF3Ym94Lm8KIE9CSlMtJChDT05GSUdfRFJBV1RFWFRfRklMVEVSKSAgICAgICAg ICAgICAgICs9IHZmX2RyYXd0ZXh0Lm8gdGV4dHV0aWxzLm8KK09CSlMtJChDT05GSUdfRFJBV1ZH X0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IHZmX2RyYXd2Zy5vIHRleHR1dGlscy5vCiBPQkpT LSQoQ09ORklHX0VER0VERVRFQ1RfRklMVEVSKSAgICAgICAgICAgICArPSB2Zl9lZGdlZGV0ZWN0 Lm8gZWRnZV9jb21tb24ubwogT0JKUy0kKENPTkZJR19FTEJHX0ZJTFRFUikgICAgICAgICAgICAg ICAgICAgKz0gdmZfZWxiZy5vCiBPQkpTLSQoQ09ORklHX0VOVFJPUFlfRklMVEVSKSAgICAgICAg ICAgICAgICArPSB2Zl9lbnRyb3B5Lm8KQEAgLTY4MCw2ICs2ODEsMTAgQEAgU0tJUEhFQURFUlMt JChDT05GSUdfVlVMS0FOKSAgICAgICAgICAgICAgICAgKz0gdnVsa2FuX2ZpbHRlci5oCiBUT09M UyAgICAgPSBncmFwaDJkb3QKIFRFU1RQUk9HUyA9IGRyYXd1dGlscyBmaWx0Zm10cyBmb3JtYXRz IGludGVncmFsCiAKK2lmZGVmIENPTkZJR19EUkFXVkdfRklMVEVSCitURVNUUFJPR1MgKz0gZHJh d3ZnCitlbmRpZgorCiBUT09MUy0kKENPTkZJR19MSUJaTVEpICs9IHptcXNlbmQKIAogY2xlYW46 OgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxs ZmlsdGVycy5jCmluZGV4IDNhYzE1MDIyNTQuLmViM2ZkMmJjNWEgMTAwNjQ0Ci0tLSBhL2xpYmF2 ZmlsdGVyL2FsbGZpbHRlcnMuYworKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKQEAgLTI3 Miw2ICsyNzIsNyBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfZHJhd2JveDsKIGV4dGVy biBjb25zdCBGRkZpbHRlciBmZl92Zl9kcmF3Z3JhcGg7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIg ZmZfdmZfZHJhd2dyaWQ7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfZHJhd3RleHQ7Citl eHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfZHJhd3ZnOwogZXh0ZXJuIGNvbnN0IEZGRmlsdGVy IGZmX3ZmX2VkZ2VkZXRlY3Q7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfZWxiZzsKIGV4 dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9lbnRyb3B5OwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0 ZXIvdGVzdHMvLmdpdGlnbm9yZSBiL2xpYmF2ZmlsdGVyL3Rlc3RzLy5naXRpZ25vcmUKaW5kZXgg ZGI0ODJjZDQ5Yi4uMTgwMTgwNTU3MyAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdGVzdHMvLmdp dGlnbm9yZQorKysgYi9saWJhdmZpbHRlci90ZXN0cy8uZ2l0aWdub3JlCkBAIC03LDYgKzcsNyBA QAogL2Rubi1sYXllci1hdmdwb29sCiAvZG5uLWxheWVyLWRlbnNlCiAvZHJhd3V0aWxzCisvZHJh d3ZnCiAvZmlsdGZtdHMKIC9mb3JtYXRzCiAvaW50ZWdyYWwKZGlmZiAtLWdpdCBhL2xpYmF2Zmls dGVyL3Rlc3RzL2RyYXd2Zy5jIGIvbGliYXZmaWx0ZXIvdGVzdHMvZHJhd3ZnLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMWQwNzE0NDE0MAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2ZmlsdGVyL3Rlc3RzL2RyYXd2Zy5jCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0 aWwvbG9nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKKworc3RhdGljIHZvaWQg bW9ja19hdl9sb2codm9pZCAqcHRyLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlz dCB2bCkgeworICAgIHByaW50ZigiYXZfbG9nWyVkXTogIiwgbGV2ZWwpOworICAgIHZwcmludGYo Zm10LCB2bCk7Cit9CisKKyNpbmNsdWRlICJsaWJhdmZpbHRlci92Zl9kcmF3dmcuYyIKKworLy8g TW9jayBmb3IgY2Fpcm8gZnVuY3Rpb25zLgorLy8KKy8vIGBNT0NLX0ZOX25gIG1hY3JvcyBkZWZp bmUgd3JhcHBlcnMgZm9yIGZ1bmN0aW9ucyB0aGF0IG9ubHkgcmVjZWl2ZSBgbmAKKy8vIGFyZ3Vt ZW50cyBvZiB0eXBlIGBkb3VibGVgLgorLy8KKy8vIGBNT0NLX0ZOX0lgIG1hY3JvIHdyYXAgYSBm dW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgc2luZ2xlIGludGVnZXIgdmFsdWUuCisKK3N0YXRpYyBk b3VibGUgY3VycmVudF9wb2ludF94Oworc3RhdGljIGRvdWJsZSBjdXJyZW50X3BvaW50X3k7CisK K3N0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyZW50X3BvaW50KGNvbnN0IGNoYXIgKmZ1bmMsIGRvdWJs ZSB4LCBkb3VibGUgeSkgeworICAgIC8vIFVwZGF0ZSBjdXJyZW50IHBvaW50IG9ubHkgaWYgdGhl IGZ1bmN0aW9uIG5hbWUgY29udGFpbnMgYF90b2AuCisgICAgaWYgKHN0cnN0cihmdW5jLCAiX3Rv IikgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHN0cnN0cihm dW5jLCAiX3JlbF8iKSA9PSBOVUxMKSB7CisgICAgICAgIGN1cnJlbnRfcG9pbnRfeCA9IHg7Cisg ICAgICAgIGN1cnJlbnRfcG9pbnRfeSA9IHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3VycmVu dF9wb2ludF94ICs9IHg7CisgICAgICAgIGN1cnJlbnRfcG9pbnRfeSArPSB5OworICAgIH0KK30K KworI2RlZmluZSBNT0NLX0ZOXzAoZnVuYykgICAgICBcCisgICAgdm9pZCBmdW5jKGNhaXJvX3Qq IGNyKSB7IFwKKyAgICAgICAgcHV0cygjZnVuYyk7ICAgICAgICAgXAorICAgIH0KKworI2RlZmlu ZSBNT0NLX0ZOXzEoZnVuYykgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIGZ1bmMoY2Fpcm9f dCogY3IsIGRvdWJsZSBhMCkgeyBcCisgICAgICAgIHByaW50ZigjZnVuYyAiICUuMWZcbiIsIGEw KTsgICAgICBcCisgICAgfQorCisjZGVmaW5lIE1PQ0tfRk5fMihmdW5jKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgdm9pZCBmdW5jKGNhaXJvX3QqIGNyLCBkb3VibGUgYTAsIGRv dWJsZSBhMSkgeyBcCisgICAgICAgIHVwZGF0ZV9jdXJyZW50X3BvaW50KCNmdW5jLCBhMCwgYTEp OyAgICAgICBcCisgICAgICAgIHByaW50ZigjZnVuYyAiICUuMWYgJS4xZlxuIiwgYTAsIGExKTsg ICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBNT0NLX0ZOXzQoZnVuYykgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIGZ1bmMoY2Fp cm9fdCogY3IsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIsIGRvdWJsZSBhMykgeyBc CisgICAgICAgIHByaW50ZigjZnVuYyAiICUuMWYgJS4xZiAlLjFmICUuMWZcbiIsIGEwLCBhMSwg YTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIE1PQ0tfRk5fNShm dW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgdm9pZCBmdW5jKGNhaXJvX3QqIGNyLCBkb3VibGUgYTAsIGRvdWJsZSBh MSwgZG91YmxlIGEyLCBkb3VibGUgYTMsIGRvdWJsZSBhNCkgeyBcCisgICAgICAgIHByaW50Zigj ZnVuYyAiICUuMWYgJS4xZiAlLjFmICUuMWYgJS4xZlxuIiwgYTAsIGExLCBhMiwgYTMsIGE0KTsg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBNT0NLX0ZOXzYoZnVuYykg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgdm9pZCBmdW5jKGNhaXJvX3QqIGNyLCBkb3VibGUgYTAsIGRv dWJsZSBhMSwgZG91YmxlIGEyLCBkb3VibGUgYTMsIGRvdWJsZSBhNCwgZG91YmxlIGE1KSB7IFwK KyAgICAgICAgdXBkYXRlX2N1cnJlbnRfcG9pbnQoI2Z1bmMsIGE0LCBhNSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcmludGYo I2Z1bmMgIiAlLjFmICUuMWYgJS4xZiAlLjFmICUuMWYgJS4xZlxuIiwgYTAsIGExLCBhMiwgYTMs IGE0LCBhNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIE1P Q0tfRk5fSShmdW5jLCB0eXBlKSAgICAgICAgICBcCisgICAgdm9pZCBmdW5jKGNhaXJvX3QqIGNy LCB0eXBlIGkpIHsgICBcCisgICAgICAgIHByaW50ZigjZnVuYyAiICVkXG4iLCAoaW50KWkpOyBc CisgICAgfQorCitNT0NLX0ZOXzUoY2Fpcm9fYXJjKTsKK01PQ0tfRk5fMChjYWlyb19jbGlwKTsK K01PQ0tfRk5fMChjYWlyb19jbGlwX3ByZXNlcnZlKTsKK01PQ0tfRk5fMChjYWlyb19jbG9zZV9w YXRoKTsKK01PQ0tfRk5fNihjYWlyb19jdXJ2ZV90byk7CitNT0NLX0ZOXzAoY2Fpcm9fZmlsbCk7 CitNT0NLX0ZOXzAoY2Fpcm9fZmlsbF9wcmVzZXJ2ZSk7CitNT0NLX0ZOXzAoY2Fpcm9faWRlbnRp dHlfbWF0cml4KTsKK01PQ0tfRk5fMihjYWlyb19saW5lX3RvKTsKK01PQ0tfRk5fMihjYWlyb19t b3ZlX3RvKTsKK01PQ0tfRk5fMChjYWlyb19uZXdfcGF0aCk7CitNT0NLX0ZOXzAoY2Fpcm9fbmV3 X3N1Yl9wYXRoKTsKK01PQ0tfRk5fNChjYWlyb19yZWN0YW5nbGUpOworTU9DS19GTl82KGNhaXJv X3JlbF9jdXJ2ZV90byk7CitNT0NLX0ZOXzIoY2Fpcm9fcmVsX2xpbmVfdG8pOworTU9DS19GTl8y KGNhaXJvX3JlbF9tb3ZlX3RvKTsKK01PQ0tfRk5fMChjYWlyb19yZXNldF9jbGlwKTsKK01PQ0tf Rk5fMChjYWlyb19yZXN0b3JlKTsKK01PQ0tfRk5fMShjYWlyb19yb3RhdGUpOworTU9DS19GTl8w KGNhaXJvX3NhdmUpOworTU9DS19GTl8yKGNhaXJvX3NjYWxlKTsKK01PQ0tfRk5fSShjYWlyb19z ZXRfZmlsbF9ydWxlLCBjYWlyb19maWxsX3J1bGVfdCk7CitNT0NLX0ZOXzEoY2Fpcm9fc2V0X2Zv bnRfc2l6ZSk7CitNT0NLX0ZOX0koY2Fpcm9fc2V0X2xpbmVfY2FwLCBjYWlyb19saW5lX2NhcF90 KTsKK01PQ0tfRk5fSShjYWlyb19zZXRfbGluZV9qb2luLCBjYWlyb19saW5lX2pvaW5fdCk7CitN T0NLX0ZOXzEoY2Fpcm9fc2V0X2xpbmVfd2lkdGgpOworTU9DS19GTl8xKGNhaXJvX3NldF9taXRl cl9saW1pdCk7CitNT0NLX0ZOXzQoY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKTsKK01PQ0tfRk5fMChj YWlyb19zdHJva2UpOworTU9DS19GTl8wKGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZSk7CitNT0NLX0ZO XzIoY2Fpcm9fdHJhbnNsYXRlKTsKKworY2Fpcm9fYm9vbF90IGNhaXJvX2dldF9kYXNoX2NvdW50 KGNhaXJvX3QgKmNyKSB7CisgICAgcmV0dXJuIDE7Cit9CisKK2NhaXJvX3N0YXR1c190IGNhaXJv X3N0YXR1cyhjYWlyb190ICpjcikgeworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsK K30KKwordm9pZCBjYWlyb19nZXRfZGFzaChjYWlyb190ICpjciwgZG91YmxlICpkYXNoZXMsIGRv dWJsZSAqb2Zmc2V0KSB7CisgICAgLy8gUmV0dXJuIGEgZHVtbXkgdmFsdWUgdG8gdmVyaWZ5IHRo YXQgaXQgaXMgaW5jbHVkZWQgaW4KKyAgICAvLyB0aGUgbmV4dCBjYWxsIHRvIGBjYWlyb19zZXRf ZGFzaGAuCisgICAgKmRhc2hlcyA9IC0xOworCisgICAgaWYgKG9mZnNldCkKKyAgICAgICAgKm9m ZnNldCA9IC0yOworfQorCit2b2lkIGNhaXJvX3NldF9kYXNoKGNhaXJvX3QgKmNyLCBjb25zdCBk b3VibGUgKmRhc2hlcywgaW50IG51bV9kYXNoZXMsIGRvdWJsZSBvZmZzZXQpIHsKKyAgICBwcmlu dGYoIiVzIFsiLCBfX2Z1bmNfXyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZGFzaGVz OyBpKyspCisgICAgICAgIHByaW50ZigiICUuMWYiLCBkYXNoZXNbaV0pOworICAgIHByaW50Zigi IF0gJS4xZlxuIiwgb2Zmc2V0KTsKK30KKworY2Fpcm9fYm9vbF90IGNhaXJvX2hhc19jdXJyZW50 X3BvaW50KGNhaXJvX3QgKmNyKSB7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgY2Fpcm9fZ2V0 X2N1cnJlbnRfcG9pbnQoY2Fpcm9fdCAqY3IsIGRvdWJsZSAqeCwgZG91YmxlICp5KSB7CisgICAg KnggPSBjdXJyZW50X3BvaW50X3g7CisgICAgKnkgPSBjdXJyZW50X3BvaW50X3k7Cit9CisKK3Zv aWQgY2Fpcm9fc2V0X3NvdXJjZSAoY2Fpcm9fdCAqY3IsIGNhaXJvX3BhdHRlcm5fdCAqc291cmNl KSB7CisgICAgaW50IGNvdW50OworICAgIGRvdWJsZSByLCBnLCBiLCBhOworICAgIGRvdWJsZSB4 MCwgeTAsIHgxLCB5MSwgcjAsIHIxOworCisgICAgcHJpbnRmKCIlcyIsIF9fZnVuY19fKTsKKwor I2RlZmluZSBQUklOVF9DT0xPUihwcmVmaXgpIFwKKyAgICBwcmludGYocHJlZml4ICIjJTAyeCUw MnglMDJ4JTAyeCIsIChpbnQpKHIqMjU1KSwgKGludCkoZyoyNTUpLCAoaW50KShiKjI1NSksIChp bnQpKGEqMjU1KSkKKworICAgIHN3aXRjaCAoY2Fpcm9fcGF0dGVybl9nZXRfdHlwZShzb3VyY2Up KSB7CisgICAgY2FzZSBDQUlST19QQVRURVJOX1RZUEVfU09MSUQ6CisgICAgICAgIGNhaXJvX3Bh dHRlcm5fZ2V0X3JnYmEoc291cmNlLCAmciwgJmcsICZiLCAmYSk7CisgICAgICAgIFBSSU5UX0NP TE9SKCIgIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDQUlST19QQVRURVJOX1RZUEVf TElORUFSOgorICAgICAgICBjYWlyb19wYXR0ZXJuX2dldF9saW5lYXJfcG9pbnRzKHNvdXJjZSwg JngwLCAmeTAsICZ4MSwgJnkxKTsKKyAgICAgICAgcHJpbnRmKCIgbGluZWFyZ3JhZCglLjFmICUu MWYgJS4xZiAlLjFmKSIsIHgwLCB5MCwgeDEsIHkxKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj YXNlIENBSVJPX1BBVFRFUk5fVFlQRV9SQURJQUw6CisgICAgICAgIGNhaXJvX3BhdHRlcm5fZ2V0 X3JhZGlhbF9jaXJjbGVzKHNvdXJjZSwgJngwLCAmeTAsICZyMCwgJngxLCAmeTEsICZyMSk7Cisg ICAgICAgIHByaW50ZigiIHJhZGlhbGdyYWQoJS4xZiAlLjFmICUuMWYgJS4xZiAlLjFmICUuMWYp IiwgeDAsIHkwLCByMCwgeDEsIHkxLCByMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IGlmIChjYWlyb19wYXR0ZXJuX2dldF9jb2xvcl9zdG9wX2NvdW50KHNvdXJjZSwgJmNvdW50KSA9 PSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKKyAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fZ2V0X2NvbG9yX3N0b3Bfcmdi YShzb3VyY2UsIGksICZ4MCwgJnIsICZnLCAmYiwgJmEpOworICAgICAgICAgICAgcHJpbnRmKCIg JS4xZi8iLCB4MCk7CisgICAgICAgICAgICBQUklOVF9DT0xPUigiIik7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBwcmludGYoIlxuIik7Cit9CisKKy8vIFZlcmlmeSB0aGF0IHRoZSBgdmdzX2Nv bW1hbmRzYCBhcnJheSBpcyBzb3J0ZWQsIHNvIGl0IGNhbgorLy8gYmUgdXNlZCB3aXRoIGBic2Vh cmNoKDMpYC4KK3N0YXRpYyB2b2lkIGNoZWNrX3NvcnRlZF9jbWRzX2FycmF5KHZvaWQpIHsKKyAg ICBpbnQgZmFpbHVyZXMgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9F TEVNUyh2Z3NfY29tbWFuZHMpIC0gMTsgaSsrKSB7CisgICAgICAgIGlmICh2Z3NfY29tcF9jb21t YW5kX3NwZWMoJnZnc19jb21tYW5kc1tpXSwgJnZnc19jb21tYW5kc1tpXSkgIT0gMCkgeworICAg ICAgICAgICAgcHJpbnRmKCIlczogY29tcGFyYXRvciBtdXN0IHJldHVybiAwIGZvciBpdGVtICVk XG4iLCBfX2Z1bmNfXywgaSk7CisgICAgICAgICAgICBmYWlsdXJlcysrOworICAgICAgICB9CisK KyAgICAgICAgaWYgKHZnc19jb21wX2NvbW1hbmRfc3BlYygmdmdzX2NvbW1hbmRzW2ldLCAmdmdz X2NvbW1hbmRzW2kgKyAxXSkgPj0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCIlczogZW50cnkg Zm9yICclcycgbXVzdCBhcHBlYXIgYWZ0ZXIgJyVzJywgYXQgaW5kZXggJWRcbiIsCisgICAgICAg ICAgICAgICAgX19mdW5jX18sIHZnc19jb21tYW5kc1tpXS5uYW1lLCB2Z3NfY29tbWFuZHNbaSAr IDFdLm5hbWUsIGkpOworICAgICAgICAgICAgZmFpbHVyZXMrKzsKKyAgICAgICAgfQorICAgIH0K KworICAgIHByaW50ZigiJXM6ICVkIGZhaWx1cmVzXG4iLCBfX2Z1bmNfXywgZmFpbHVyZXMpOwor fQorCisvLyBDb21waWxlIGFuZCBydW4gYSBzY3JpcHQuCitzdGF0aWMgdm9pZCBjaGVja19zY3Jp cHQoaW50IGlzX2ZpbGUsIGNvbnN0IGNoYXIqIHNvdXJjZSkgeworICAgIGludCByZXQ7CisKKyAg ICBBVkRpY3Rpb25hcnkgKm1ldGFkYXRhOworCisgICAgc3RydWN0IFZHU0V2YWxTdGF0ZSBzdGF0 ZTsKKyAgICBzdHJ1Y3QgVkdTUGFyc2VyIHBhcnNlcjsKKyAgICBzdHJ1Y3QgVkdTUHJvZ3JhbSBw cm9ncmFtOworCisgICAgaWYgKGlzX2ZpbGUpIHsKKyAgICAgICAgdWludDhfdCAqcyA9IE5VTEw7 CisKKyAgICAgICAgcHJpbnRmKCJcbi0tLSAlczogJXNcbiIsIF9fZnVuY19fLCBhdl9iYXNlbmFt ZShzb3VyY2UpKTsKKworICAgICAgICByZXQgPSBmZl9sb2FkX3RleHRmaWxlKE5VTEwsIHNvdXJj ZSwgJnMsIE5VTEwpOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIHByaW50 ZigiRmFpbGVkIHRvIHJlYWQgJXM6ICVkXG4iLCBzb3VyY2UsIHJldCk7CisgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzb3VyY2UgPSBzOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHByaW50ZigiXG4tLS0gJXM6ICVzXG4iLCBfX2Z1bmNfXywgc291cmNlKTsKKyAgICB9 CisKKyAgICByZXQgPSBhdl9kaWN0X3BhcnNlX3N0cmluZygmbWV0YWRhdGEsICJtLmE9MTptLmI9 MiIsICI9IiwgIjoiLCAwKTsKKyAgICBhdl9hc3NlcnQwKHJldCA9PSAwKTsKKworICAgIHZnc19w YXJzZXJfaW5pdCgmcGFyc2VyLCBzb3VyY2UpOworCisgICAgcmV0ID0gdmdzX3BhcnNlKE5VTEws ICZwYXJzZXIsICZwcm9ncmFtLCAwKTsKKworICAgIHZnc19ldmFsX3N0YXRlX2luaXQoJnN0YXRl LCAmcHJvZ3JhbSwgTlVMTCwgTlVMTCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBUl9D T1VOVDsgaSsrKQorICAgICAgICBzdGF0ZS52YXJzW2ldID0gMSA8PCBpOworCisgICAgY3VycmVu dF9wb2ludF94ID0gMDsKKyAgICBjdXJyZW50X3BvaW50X3kgPSAwOworCisgICAgdmdzX3BhcnNl cl9mcmVlKCZwYXJzZXIpOworCisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50Zigi JXM6IHZnc19wYXJzZSA9ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKyAgICAgICAgZ290byBleGl0 OworICAgIH0KKworICAgIHN0YXRlLm1ldGFkYXRhID0gbWV0YWRhdGE7CisKKyAgICByZXQgPSB2 Z3NfZXZhbCgmc3RhdGUsICZwcm9ncmFtKTsKKyAgICB2Z3NfZXZhbF9zdGF0ZV9mcmVlKCZzdGF0 ZSk7CisKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHByaW50ZigiJXM6IHZnc19ldmFsID0g JWRcbiIsIF9fZnVuY19fLCByZXQpOworCitleGl0OgorICAgIGF2X2RpY3RfZnJlZSgmbWV0YWRh dGEpOworCisgICAgaWYgKGlzX2ZpbGUpCisgICAgICAgIGF2X2ZyZWUoKHZvaWQqKXNvdXJjZSk7 CisKKyAgICB2Z3NfZnJlZSgmcHJvZ3JhbSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25z dCBjaGFyICoqYXJndikKK3sKKyAgICBjaGFyIGJ1Zls1MTJdOworCisgICAgYXZfbG9nX3NldF9j YWxsYmFjayhtb2NrX2F2X2xvZyk7CisKKyAgICBjaGVja19zb3J0ZWRfY21kc19hcnJheSgpOwor CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgICAgIGNoZWNrX3Njcmlw dCgxLCBhcmd2W2ldKTsKKworICAgIC8vIERldGVjdCB1bmNsb3NlZCBleHByZXNzaW9ucy4KKyAg ICBjaGVja19zY3JpcHQoMCwgIk0gMCAoMSoodCsxKSIpOworCisgICAgLy8gSW52YWxpZCBjb21t YW5kLgorICAgIGNoZWNrX3NjcmlwdCgwLCAic2F2ZSBpbnZhbGlkIDEgMiIpOworCisgICAgLy8g SW52YWxpZCBjb25zdGFudC4KKyAgICBjaGVja19zY3JpcHQoMCwgInNldGxpbmVjYXAgdW5rbm93 biBtIDEwIDIwIik7CisKKyAgICAvLyBNaXNzaW5nIGFyZ3VtZW50cy4KKyAgICBjaGVja19zY3Jp cHQoMCwgIk0gMCAxIDIiKTsKKworICAgIC8vIEludmFsaWQgdmFyaWFibGUgbmFtZXMuCisgICAg Y2hlY2tfc2NyaXB0KDAsICJzZXR2YXIgYmFeZCAwIik7CisKKyAgICAvLyBSZXNlcnZlZCBuYW1l cy4KKyAgICBjaGVja19zY3JpcHQoMCwgInNldHZhciBjeCAwIik7CisKKyAgICAvLyBNYXggbnVt YmVyIG9mIHVzZXIgdmFyaWFibGVzLgorICAgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IFVTRVJfVkFSX0NPVU5UOyBpKyspIHsKKyAgICAgICAg YXZfc3RybGNhdGYoYnVmLCBzaXplb2YoYnVmKSwgIiBzZXR2YXIgdiVkICVkIiwgaSwgaSk7Cisg ICAgfQorICAgIGF2X3N0cmxjYXRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIgTSAodjApICh2JWQpIDEg KHVua25vd25fdmFyKSIsIFVTRVJfVkFSX0NPVU5UIC0gMSk7CisgICAgY2hlY2tfc2NyaXB0KDAs IGJ1Zik7CisKKyAgICAvLyBUb28gbWFueSB2YXJpYWJsZXMuCisgICAgbWVtc2V0KGJ1ZiwgMCwg c2l6ZW9mKGJ1ZikpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVVNFUl9WQVJfQ09VTlQgKyAx OyBpKyspIHsKKyAgICAgICAgYXZfc3RybGNhdGYoYnVmLCBzaXplb2YoYnVmKSwgIiBzZXR2YXIg diVkICVkIiwgaSArIDEsIGkpOworICAgIH0KKyAgICBjaGVja19zY3JpcHQoMCwgYnVmKTsKKwor ICAgIC8vIEludmFsaWQgcHJvY2VkdXJlIG5hbWVzLgorICAgIGNoZWNrX3NjcmlwdCgwLCAiY2Fs bCBhIik7CisgICAgY2hlY2tfc2NyaXB0KDAsICJwcm9jIGEgeyBjYWxsIGIgfSBjYWxsIGEiKTsK KworICAgIC8vIEludmFsaWQgYXJndW1lbnRzIGxpc3QuCisgICAgY2hlY2tfc2NyaXB0KDAsICJw cm9jIHAwIGExIGEyIGEzIGE0IGE1IGE2IGE3IGE4IHsgYnJlYWsgfSIpOworICAgIGNoZWNrX3Nj cmlwdCgwLCAicHJvYyBwMCBhMSBhMiB7IGJyZWFrIH0gY2FsbCBwMCBicmVhayIpOworICAgIGNo ZWNrX3NjcmlwdCgwLCAicHJvYyBwMCBhMSBhMiB7IGJyZWFrIH0gY2FsbCBwMCAxIDIgMyIpOwor CisgICAgLy8gTG9uZyBleHByZXNzaW9ucy4KKyAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVm KSk7CisgICAgc3RybmNhdChidWYsICJNIDAgKDEiLCBzaXplb2YoYnVmKSAtIDEpOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgc3RybmNhdChidWYsICIgKyBu Iiwgc2l6ZW9mKGJ1ZikgLSAxKTsKKyAgICB9CisgICAgc3RybmNhdChidWYsICIpIiwgc2l6ZW9m KGJ1ZikgLSAxKTsKKyAgICBjaGVja19zY3JpcHQoMCwgYnVmKTsKKworICAgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmVyc2lvbi5oIGIvbGliYXZmaWx0ZXIvdmVyc2lv bi5oCmluZGV4IGJhOGE2ZmRhYjIuLjc3ZjM4Y2I5YjQgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVy L3ZlcnNpb24uaAorKysgYi9saWJhdmZpbHRlci92ZXJzaW9uLmgKQEAgLTMxLDcgKzMxLDcgQEAK IAogI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKIAotI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJT SU9OX01JTk9SICAgOAorI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01JTk9SICAgOQogI2Rl ZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01JQ1JPIDEwMAogCiAKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL3ZmX2RyYXd2Zy5jIGIvbGliYXZmaWx0ZXIvdmZfZHJhd3ZnLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDMyY2ZiMWMzNQotLS0gL2Rldi9udWxsCisrKyBi L2xpYmF2ZmlsdGVyL3ZmX2RyYXd2Zy5jCkBAIC0wLDAgKzEsMjY5OSBAQAorLyoKKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKgorICogZHJhd3Zn IGZpbHRlciwgZHJhdyB2ZWN0b3IgZ3JhcGhpY3Mgd2l0aCBjYWlyby4KKyAqCisgKiBUaGlzIGZp bGUgY29udGFpbnMgdGhlIHBhcnNlciBhbmQgdGhlIGludGVycHJldGVyIGZvciBWR1MsIGFuZCB0 aGUKKyAqIEFWQ2xhc3MgZGVmaW5pdGlvbnMgZm9yIHRoZSBkcmF3dmcgZmlsdGVyLgorICovCisK KyNpbmNsdWRlIDxjYWlyby5oPgorCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2Jzd2Fw LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2V2YWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWFjcm9zLmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0 aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9zZmM2NC5oIgorCisjaW5jbHVkZSAi YXZmaWx0ZXIuaCIKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAidGV4dHV0aWxzLmgi CisjaW5jbHVkZSAidmlkZW8uaCIKKworLyoKKyAqID09IEFWRXhwciBJbnRlZ3JhdGlvbiA9PQor ICoKKyAqIERlZmluaXRpb25zIHRvIHVzZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbiB0aGUg ZXhwcmVzc2lvbnMgZnJvbQorICogYGF2X2V4cHJfKmAgZnVuY3Rpb25zLgorICoKKyAqIEZvciB1 c2VyLXZhcmlhYmxlcywgY3JlYXRlZCB3aXRoIGNvbW1hbmRzIGxpa2UgYHNldHZhcmAgb3IgYGRl ZmhzbGFgLAorICogdGhlIFZHUyBwYXJzZXIgdXBkYXRlcyBhIGNvcHkgb2YgdGhlIGB2Z3NfZGVm YXVsdF92YXJzYCBhcnJheS4gVGhlCisgKiBmaXJzdCB1c2VyLXZhcmlhYmxlIGlzIHN0b3JlZCBp biB0aGUgc2xvdCBmb3IgYFZBUl9VMGAuCisgKi8KKworZW51bSB7CisgICAgVkFSX04sICAgICAg ICAgIC8vLzwgRnJhbWUgbnVtYmVyLgorICAgIFZBUl9ULCAgICAgICAgICAvLy88IFRpbWVzdGFt cCBpbiBzZWNvbmRzLgorICAgIFZBUl9UUywgICAgICAgICAvLy88IFRpbWUgaW4gc2Vjb25kcyBv ZiB0aGUgZmlyc3QgZnJhbWUuCisgICAgVkFSX1csICAgICAgICAgIC8vLzwgRnJhbWUgd2lkdGgu CisgICAgVkFSX0gsICAgICAgICAgIC8vLzwgRnJhbWUgaGVpZ2h0LgorICAgIFZBUl9EVVJBVElP TiwgICAvLy88IEZyYW1lIGR1cmF0aW9uLgorICAgIFZBUl9DWCwgICAgICAgICAvLy88IFggY29v cmRpbmF0ZSBmb3IgY3VycmVudCBwb2ludC4KKyAgICBWQVJfQ1ksICAgICAgICAgLy8vPCBZIGNv b3JkaW5hdGUgZm9yIGN1cnJlbnQgcG9pbnQuCisgICAgVkFSX0ksICAgICAgICAgIC8vLzwgTG9v cCBjb3VudGVyLCB0byB1c2Ugd2l0aCBgcmVwZWF0IHt9YC4KKyAgICBWQVJfVTAsICAgICAgICAg Ly8vPCBVc2VyIHZhcmlhYmxlcy4KK307CisKKy8vLyBOdW1iZXIgb2YgdXNlciB2YXJpYWJsZXMg dGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoIGBzZXR2YXJgLgorLy8vCisvLy8gSXQgaXMgcG9zc2li bGUgdG8gYWxsb3cgYW55IG51bWJlciBvZiB2YXJpYWJsZXMsIGJ1dCB0aGlzCisvLy8gYXBwcm9h Y2ggc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCAyMCB2YXJpYWJsZXMKKy8vLyBp cyBtb3JlIHRoYW4gZW5vdWdoIGZvciB0aGUgZXhwZWN0ZWQgdXNlIG9mIHRoaXMgZmlsdGVyLgor I2RlZmluZSBVU0VSX1ZBUl9DT1VOVCAyMAorCisvLy8gVG90YWwgbnVtYmVyIG9mIHZhcmlhYmxl cyAoZGVmYXVsdC0gYW5kIHVzZXItdmFyaWFibGVzKS4KKyNkZWZpbmUgVkFSX0NPVU5UIChWQVJf VTAgKyBVU0VSX1ZBUl9DT1VOVCkKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZnc19kZWZh dWx0X3ZhcnNbXSA9IHsKKyAgICAibiIsCisgICAgInQiLAorICAgICJ0cyIsCisgICAgInciLAor ICAgICJoIiwKKyAgICAiZHVyYXRpb24iLAorICAgICJjeCIsCisgICAgImN5IiwKKyAgICAiaSIs CisgICAgTlVMTCwgLy8gVXNlciB2YXJpYWJsZXMuIE5hbWUgaXMgYXNzaWduZWQgYnkgY29tbWFu ZHMgbGlrZSBgc2V0dmFyYC4KK307CisKKy8vIEZ1bmN0aW9ucyB1c2VkIGluIGV4cHJlc3Npb25z LgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmdzX2Z1bmMxX25hbWVzW10gPSB7CisgICAg InBhdGhsZW4iLAorICAgICJyYW5kb21nIiwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGRvdWJs ZSB2Z3NfZm5fcGF0aGxlbih2b2lkICosIGRvdWJsZSk7CitzdGF0aWMgZG91YmxlIHZnc19mbl9y YW5kb21nKHZvaWQgKiwgZG91YmxlKTsKKworc3RhdGljIGRvdWJsZSAoKmNvbnN0IHZnc19mdW5j MV9pbXBsc1tdKSh2b2lkICosIGRvdWJsZSkgPSB7CisgICAgdmdzX2ZuX3BhdGhsZW4sCisgICAg dmdzX2ZuX3JhbmRvbWcsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25z dCB2Z3NfZnVuYzJfbmFtZXNbXSA9IHsKKyAgICAicCIsCisgICAgTlVMTCwKK307CisKK3N0YXRp YyBkb3VibGUgdmdzX2ZuX3Aodm9pZCAqLCBkb3VibGUsIGRvdWJsZSk7CisKK3N0YXRpYyBkb3Vi bGUgKCpjb25zdCB2Z3NfZnVuYzJfaW1wbHNbXSkodm9pZCAqLCBkb3VibGUsIGRvdWJsZSkgPSB7 CisgICAgdmdzX2ZuX3AsCisgICAgTlVMTCwKK307CisKKy8qCisgKiA9PSBDb21tYW5kIERlY2xh cmF0aW9ucyA9PQorICoKKyAqIEVhY2ggY29tbWFuZCBpcyBkZWZpbmVkIGJ5IGFuIG9wY29kZSAo dXNlZCBsYXRlciBieSB0aGUgaW50ZXJwcmV0ZXIpLCBhIG5hbWUsCisgKiBhbmQgYSBzZXQgb2Yg cGFyYW1ldGVycy4KKyAqCisgKiBJbnNwaXJlZCBieSBTVkcsIHNvbWUgY29tbWFuZHMgY2FuIGJl IHJlcGVhdGVkIHdoZW4gdGhlIG5leHQgdG9rZW4gYWZ0ZXIgdGhlCisgKiBsYXN0IHBhcmFtZXRl ciBpcyBhIG51bWVyaWMgdmFsdWUgKGZvciBleGFtcGxlLCBgTCAxIDIgMyA0YCBpcyBlcXVpdmFs ZW50IHRvCisgKiBgTCAxIDIgTCAzIDRgKS4gSW4gdGhlc2UgY29tbWFuZHMsIHRoZSBsYXN0IHBh cmFtZXRlciBpcyBgUEFSQU1fTUFZX1JFUEVBVGAuCisgKi8KKworZW51bSBWR1NDb21tYW5kIHsK KyAgICBDTURfQVJDID0gMSwgICAgICAgICAgICAgICAgLy8vPCAgYXJjIChjeCBjeSByYWRpdXMg YW5nbGUxIGFuZ2xlMikKKyAgICBDTURfQVJDX05FRywgICAgICAgICAgICAgICAgLy8vPCAgYXJj biAoY3ggY3kgcmFkaXVzIGFuZ2xlMSBhbmdsZTIpCisgICAgQ01EX0JSRUFLLCAgICAgICAgICAg ICAgICAgIC8vLzwgIGJyZWFrCisgICAgQ01EX0NJUkNMRSwgICAgICAgICAgICAgICAgIC8vLzwg IGNpcmNsZSAoY3ggY3kgcmFkaXVzKQorICAgIENNRF9DTElQLCAgICAgICAgICAgICAgICAgICAv Ly88ICBjbGlwCisgICAgQ01EX0NMSVBfRU8sICAgICAgICAgICAgICAgIC8vLzwgIGVvY2xpcAor ICAgIENNRF9DTE9TRV9QQVRILCAgICAgICAgICAgICAvLy88ICBaLCB6LCBjbG9zZXBhdGgKKyAg ICBDTURfQ09MT1JfU1RPUCwgICAgICAgICAgICAgLy8vPCAgY29sb3JzdG9wIChvZmZzZXQgY29s b3IpCisgICAgQ01EX0NVUlZFX1RPLCAgICAgICAgICAgICAgIC8vLzwgIEMsIGN1cnZldG8gKHgx IHkxIHgyIHkyIHggeSkKKyAgICBDTURfREVGX0hTTEEsICAgICAgICAgICAgICAgLy8vPCAgZGVm aHNsYSAodmFybmFtZSBoIHMgbCBhKQorICAgIENNRF9ERUZfUkdCQSwgICAgICAgICAgICAgICAv Ly88ICBkZWZyZ2JhICh2YXJuYW1lIHIgZyBiIGEpCisgICAgQ01EX0NVUlZFX1RPX1JFTCwgICAg ICAgICAgIC8vLzwgIGMsIHJjdXJ2ZXRvIChkeDEgZHkxIGR4MiBkeTIgZHggZHkpCisgICAgQ01E X0VMTElQU0UsICAgICAgICAgICAgICAgIC8vLzwgIGVsbGlwc2UgKGN4IGN5IHJ4IHJ5KQorICAg IENNRF9GSUxMLCAgICAgICAgICAgICAgICAgICAvLy88ICBmaWxsCisgICAgQ01EX0ZJTExfRU8s ICAgICAgICAgICAgICAgIC8vLzwgIGVvZmlsbAorICAgIENNRF9HRVRfTUVUQURBVEEsICAgICAg ICAgICAvLy88ICBnZXRtZXRhZGF0YSB2YXJuYW1lIGtleQorICAgIENNRF9IT1JaLCAgICAgICAg ICAgICAgICAgICAvLy88ICBIICh4KQorICAgIENNRF9IT1JaX1JFTCwgICAgICAgICAgICAgICAv Ly88ICBoIChkeCkKKyAgICBDTURfSUYsICAgICAgICAgICAgICAgICAgICAgLy8vPCAgaWYgKGNv bmRpdGlvbikgeyBzdWJwcm9ncmFtIH0KKyAgICBDTURfTElORUFSX0dSQUQsICAgICAgICAgICAg Ly8vPCAgbGluZWFyZ3JhZCAoeDAgeTAgeDEgeTEpCisgICAgQ01EX0xJTkVfVE8sICAgICAgICAg ICAgICAgIC8vLzwgIEwsIGxpbmV0byAoeCB5KQorICAgIENNRF9MSU5FX1RPX1JFTCwgICAgICAg ICAgICAvLy88ICBsLCBybGluZXRvIChkeCBkeSkKKyAgICBDTURfTU9WRV9UTywgICAgICAgICAg ICAgICAgLy8vPCAgTSwgbW92ZXRvICh4IHkpCisgICAgQ01EX01PVkVfVE9fUkVMLCAgICAgICAg ICAgIC8vLzwgIG0sIHJtb3ZldG8gKGR4IGR5KQorICAgIENNRF9ORVdfUEFUSCwgICAgICAgICAg ICAgICAvLy88ICBuZXdwYXRoCisgICAgQ01EX1BSRVNFUlZFLCAgICAgICAgICAgICAgIC8vLzwg IHByZXNlcnZlCisgICAgQ01EX1BSSU5ULCAgICAgICAgICAgICAgICAgIC8vLzwgIHByaW50IChl eHByKSoKKyAgICBDTURfUFJPQ19BU1NJR04sICAgICAgICAgICAgLy8vPCAgcHJvYyBuYW1lIHZh cm5hbWVzKiB7IHN1YnByb2dyYW0gfQorICAgIENNRF9QUk9DX0NBTEwsICAgICAgICAgICAgICAv Ly88ICBjYWxsIG5hbWUgKGV4cHIpKgorICAgIENNRF9RX0NVUlZFX1RPLCAgICAgICAgICAgICAv Ly88ICBRICh4MSB5MSB4IHkpCisgICAgQ01EX1FfQ1VSVkVfVE9fUkVMLCAgICAgICAgIC8vLzwg IHEgKGR4MSBkeTEgZHggZHkpCisgICAgQ01EX1JBRElBTF9HUkFELCAgICAgICAgICAgIC8vLzwg IHJhZGlhbGdyYWQgKGN4MCBjeTAgcmFkaXVzMCBjeDEgY3kxIHJhZGl1czEpCisgICAgQ01EX1JF Q1QsICAgICAgICAgICAgICAgICAgIC8vLzwgIHJlY3QgKHggeSB3aWR0aCBoZWlnaHQpCisgICAg Q01EX1JFUEVBVCwgICAgICAgICAgICAgICAgIC8vLzwgIHJlcGVhdCAoY291bnQpIHsgc3VicHJv Z3JhbSB9CisgICAgQ01EX1JFU0VUX0NMSVAsICAgICAgICAgICAgIC8vLzwgIHJlc2V0Y2xpcAor ICAgIENNRF9SRVNFVF9EQVNILCAgICAgICAgICAgICAvLy88ICByZXNldGRhc2gKKyAgICBDTURf UkVTRVRfTUFUUklYLCAgICAgICAgICAgLy8vPCAgcmVzZXRtYXRyaXgKKyAgICBDTURfUkVTVE9S RSwgICAgICAgICAgICAgICAgLy8vPCAgcmVzdG9yZQorICAgIENNRF9ST1RBVEUsICAgICAgICAg ICAgICAgICAvLy88ICByb3RhdGUgKGFuZ2xlKQorICAgIENNRF9ST1VOREVEUkVDVCwgICAgICAg ICAgICAvLy88ICByb3VuZGVkcmVjdCAoeCB5IHdpZHRoIGhlaWdodCByYWRpdXMpCisgICAgQ01E X1NBVkUsICAgICAgICAgICAgICAgICAgIC8vLzwgIHNhdmUKKyAgICBDTURfU0NBTEUsICAgICAg ICAgICAgICAgICAgLy8vPCAgc2NhbGUgKHMpCisgICAgQ01EX1NDQUxFWFksICAgICAgICAgICAg ICAgIC8vLzwgIHNjYWxleHkgKHN4IHN5KQorICAgIENNRF9TRVRfQ09MT1IsICAgICAgICAgICAg ICAvLy88ICBzZXRjb2xvciAoY29sb3IpCisgICAgQ01EX1NFVF9EQVNILCAgICAgICAgICAgICAg IC8vLzwgIHNldGRhc2ggKGxlbmd0aCkKKyAgICBDTURfU0VUX0RBU0hfT0ZGU0VULCAgICAgICAg Ly8vPCAgc2V0ZGFzaG9mZnNldCAob2Zmc2V0KQorICAgIENNRF9TRVRfSFNMQSwgICAgICAgICAg ICAgICAvLy88ICBzZXRoc2xhIChoIHMgbCBhKQorICAgIENNRF9TRVRfTElORV9DQVAsICAgICAg ICAgICAvLy88ICBzZXRsaW5lY2FwIChjYXApCisgICAgQ01EX1NFVF9MSU5FX0pPSU4sICAgICAg ICAgIC8vLzwgIHNldGxpbmVqb2luIChqb2luKQorICAgIENNRF9TRVRfTElORV9XSURUSCwgICAg ICAgICAvLy88ICBzZXRsaW5ld2lkdGggKHdpZHRoKQorICAgIENNRF9TRVRfUkdCQSwgICAgICAg ICAgICAgICAvLy88ICBzZXRyZ2JhIChyIGcgYiBhKQorICAgIENNRF9TRVRfVkFSLCAgICAgICAg ICAgICAgICAvLy88ICBzZXR2YXIgKHZhcm5hbWUgdmFsdWUpCisgICAgQ01EX1NUUk9LRSwgICAg ICAgICAgICAgICAgIC8vLzwgIHN0cm9rZQorICAgIENNRF9TX0NVUlZFX1RPLCAgICAgICAgICAg ICAvLy88ICBTICh4MiB5MiB4IHkpCisgICAgQ01EX1NfQ1VSVkVfVE9fUkVMLCAgICAgICAgIC8v LzwgIHMgKGR4MiBkeTIgZHggZHkpCisgICAgQ01EX1RSQU5TTEFURSwgICAgICAgICAgICAgIC8v LzwgIHRyYW5zbGF0ZSAodHggdHkpCisgICAgQ01EX1RfQ1VSVkVfVE8sICAgICAgICAgICAgIC8v LzwgIFQgKHggeSkKKyAgICBDTURfVF9DVVJWRV9UT19SRUwsICAgICAgICAgLy8vPCAgdCAoZHgg ZHkpCisgICAgQ01EX1ZFUlQsICAgICAgICAgICAgICAgICAgIC8vLzwgIFYgKHkpCisgICAgQ01E X1ZFUlRfUkVMLCAgICAgICAgICAgICAgIC8vLzwgIHYgKGR5KQorfTsKKworLy8vIENvbnN0YW50 cyBmb3Igc29tZSBjb21tYW5kcywgbGlrZSBgc2V0bGluZWpvaW5gLgorc3RydWN0IFZHU0NvbnN0 YW50IHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGludCB2YWx1ZTsKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgVkdTQ29uc3RhbnQgdmdzX2NvbnN0c19saW5lX2NhcFtdID0geworICAg IHsgImJ1dHQiLCBDQUlST19MSU5FX0NBUF9CVVRUIH0sCisgICAgeyAicm91bmQiLCBDQUlST19M SU5FX0NBUF9ST1VORCB9LAorICAgIHsgInNxdWFyZSIsIENBSVJPX0xJTkVfQ0FQX1NRVUFSRSB9 LAorICAgIHsgTlVMTCwgMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBWR1NDb25zdGFu dCB2Z3NfY29uc3RzX2xpbmVfam9pbltdID0geworICAgIHsgImJldmVsIiwgQ0FJUk9fTElORV9K T0lOX0JFVkVMIH0sCisgICAgeyAibWl0ZXIiLCBDQUlST19MSU5FX0pPSU5fTUlURVIgfSwKKyAg ICB7ICJyb3VuZCIsIENBSVJPX0xJTkVfSk9JTl9ST1VORCB9LAorICAgIHsgTlVMTCwgMCB9LAor fTsKKworc3RydWN0IFZHU1BhcmFtZXRlciB7CisgICAgZW51bSB7CisgICAgICAgIFBBUkFNX0NP TE9SID0gMSwKKyAgICAgICAgUEFSQU1fQ09OU1RBTlQsCisgICAgICAgIFBBUkFNX0VORCwKKyAg ICAgICAgUEFSQU1fTUFZX1JFUEVBVCwKKyAgICAgICAgUEFSQU1fTlVNRVJJQywKKyAgICAgICAg UEFSQU1fTlVNRVJJQ19NRVRBREFUQSwKKyAgICAgICAgUEFSQU1fUFJPQ19BUkdTLAorICAgICAg ICBQQVJBTV9QUk9DX05BTUUsCisgICAgICAgIFBBUkFNX1BST0NfUEFSQU1TLAorICAgICAgICBQ QVJBTV9SQVdfSURFTlQsCisgICAgICAgIFBBUkFNX1NVQlBST0dSQU0sCisgICAgICAgIFBBUkFN X1ZBUklBRElDLAorICAgICAgICBQQVJBTV9WQVJfTkFNRSwKKyAgICB9IHR5cGU7CisKKyAgICBj b25zdCBzdHJ1Y3QgVkdTQ29uc3RhbnQgKmNvbnN0YW50czsgLy8vPCBBcnJheSBmb3IgUEFSQU1f Q09OU1RBTlQuCit9OworCisvLyBNYXggbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIGEgY29tbWFu ZC4KKyNkZWZpbmUgTUFYX0NPTU1BTkRfUEFSQU1TIDgKKworLy8gTWF4IG51bWJlciBvZiBhcmd1 bWVudHMgd2hlbiBjYWxsaW5nIGEgcHJvY2VkdXJlLiBTdWJ0cmFjdCAyIHRvCisvLyBgTUFYX0NP TU1BTkRfUEFSQU1TYCBiZWNhdXNlIHRoZSBjYWxsIHRvIGBwcm9jYCBuZWVkcyAyIGFyZ3VtZW50 cworLy8gKHRoZSBwcm9jZWR1cmUgbmFtZSBhbmQgaXRzIGJvZHkpLiBUaGUgcmVzdCBjYW4gYmUg dmFyaWFibGUgbmFtZXMKKy8vIGZvciB0aGUgYXJndW1lbnRzLgorI2RlZmluZSBNQVhfUFJPQ19B UkdTIChNQVhfQ09NTUFORF9QQVJBTVMgLSAyKQorCisvLyBEZWZpbml0aW9uIG9mIGVhY2ggY29t bWFuZC4KKworc3RydWN0IFZHU0NvbW1hbmRTcGVjIHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOwor ICAgIGVudW0gVkdTQ29tbWFuZCBjbWQ7CisgICAgY29uc3Qgc3RydWN0IFZHU1BhcmFtZXRlciAq cGFyYW1zOworfTsKKworLy8gUGFyYW1ldGVyIGxpc3RzLgorI2RlZmluZSBQQVJBTVMoLi4uKSAo Y29uc3Qgc3RydWN0IFZHU1BhcmFtZXRlcltdKXsgX19WQV9BUkdTX18gfQorI2RlZmluZSBMKC4u LikgUEFSQU1TKF9fVkFfQVJHU19fLCB7IFBBUkFNX0VORCB9KQorI2RlZmluZSBSKC4uLikgUEFS QU1TKF9fVkFfQVJHU19fLCB7IFBBUkFNX01BWV9SRVBFQVQgfSkKKyNkZWZpbmUgTk9ORSAgIFBB UkFNUyh7IFBBUkFNX0VORCB9KQorCisvLyBDb21tb24gcGFyYW1ldGVyIHR5cGVzLgorI2RlZmlu ZSBOIHsgUEFSQU1fTlVNRVJJQyB9CisjZGVmaW5lIFYgeyBQQVJBTV9WQVJfTkFNRSB9CisjZGVm aW5lIFAgeyBQQVJBTV9TVUJQUk9HUkFNIH0KKyNkZWZpbmUgQyhjKSB7IFBBUkFNX0NPTlNUQU5U LCAuY29uc3RhbnRzID0gYyB9CisKKy8vIERlY2xhcmF0aW9ucyB0YWJsZS4KKy8vCisvLyBUaGUg YXJyYXkgbXVzdCBiZSBzb3J0ZWQgYnkgYG5hbWVgIGluIGFzY2VuZGluZyBvcmRlci4KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgVkdTQ29tbWFuZFNwZWMgdmdzX2NvbW1hbmRzW10gPSB7CisgICAgeyAi QyIsICAgICAgICAgICAgICBDTURfQ1VSVkVfVE8sICAgICAgICAgUihOLCBOLCBOLCBOLCBOLCBO KSB9LAorICAgIHsgIkgiLCAgICAgICAgICAgICAgQ01EX0hPUlosICAgICAgICAgICAgIFIoTikg fSwKKyAgICB7ICJMIiwgICAgICAgICAgICAgIENNRF9MSU5FX1RPLCAgICAgICAgICBSKE4sIE4p IH0sCisgICAgeyAiTSIsICAgICAgICAgICAgICBDTURfTU9WRV9UTywgICAgICAgICAgUihOLCBO KSB9LAorICAgIHsgIlEiLCAgICAgICAgICAgICAgQ01EX1FfQ1VSVkVfVE8sICAgICAgIFIoTiwg TiwgTiwgTikgfSwKKyAgICB7ICJTIiwgICAgICAgICAgICAgIENNRF9TX0NVUlZFX1RPLCAgICAg ICBSKE4sIE4sIE4sIE4pIH0sCisgICAgeyAiVCIsICAgICAgICAgICAgICBDTURfVF9DVVJWRV9U TywgICAgICAgUihOLCBOKSB9LAorICAgIHsgIlYiLCAgICAgICAgICAgICAgQ01EX1ZFUlQsICAg ICAgICAgICAgIFIoTikgfSwKKyAgICB7ICJaIiwgICAgICAgICAgICAgIENNRF9DTE9TRV9QQVRI LCAgICAgICBOT05FIH0sCisgICAgeyAiYXJjIiwgICAgICAgICAgICBDTURfQVJDLCAgICAgICAg ICAgICAgUihOLCBOLCBOLCBOLCBOKSB9LAorICAgIHsgImFyY24iLCAgICAgICAgICAgQ01EX0FS Q19ORUcsICAgICAgICAgIFIoTiwgTiwgTiwgTiwgTikgfSwKKyAgICB7ICJicmVhayIsICAgICAg ICAgIENNRF9CUkVBSywgICAgICAgICAgICBOT05FIH0sCisgICAgeyAiYyIsICAgICAgICAgICAg ICBDTURfQ1VSVkVfVE9fUkVMLCAgICAgUihOLCBOLCBOLCBOLCBOLCBOKSB9LAorICAgIHsgImNh bGwiLCAgICAgICAgICAgQ01EX1BST0NfQ0FMTCwgICAgICAgIEwoeyBQQVJBTV9QUk9DX05BTUUg fSwgeyBQQVJBTV9QUk9DX0FSR1MgfSkgfSwKKyAgICB7ICJjaXJjbGUiLCAgICAgICAgIENNRF9D SVJDTEUsICAgICAgICAgICBSKE4sIE4sIE4pIH0sCisgICAgeyAiY2xpcCIsICAgICAgICAgICBD TURfQ0xJUCwgICAgICAgICAgICAgTk9ORSB9LAorICAgIHsgImNsb3NlcGF0aCIsICAgICAgQ01E X0NMT1NFX1BBVEgsICAgICAgIE5PTkUgfSwKKyAgICB7ICJjb2xvcnN0b3AiLCAgICAgIENNRF9D T0xPUl9TVE9QLCAgICAgICBSKE4sIHsgUEFSQU1fQ09MT1IgfSkgfSwKKyAgICB7ICJjdXJ2ZXRv IiwgICAgICAgIENNRF9DVVJWRV9UTywgICAgICAgICBSKE4sIE4sIE4sIE4sIE4sIE4pIH0sCisg ICAgeyAiZGVmaHNsYSIsICAgICAgICBDTURfREVGX0hTTEEsICAgICAgICAgTChWLCBOLCBOLCBO LCBOKSB9LAorICAgIHsgImRlZnJnYmEiLCAgICAgICAgQ01EX0RFRl9SR0JBLCAgICAgICAgIEwo ViwgTiwgTiwgTiwgTikgfSwKKyAgICB7ICJlbGxpcHNlIiwgICAgICAgIENNRF9FTExJUFNFLCAg ICAgICAgICBSKE4sIE4sIE4sIE4pIH0sCisgICAgeyAiZW9jbGlwIiwgICAgICAgICBDTURfQ0xJ UF9FTywgICAgICAgICAgTk9ORSB9LAorICAgIHsgImVvZmlsbCIsICAgICAgICAgQ01EX0ZJTExf RU8sICAgICAgICAgIE5PTkUgfSwKKyAgICB7ICJmaWxsIiwgICAgICAgICAgIENNRF9GSUxMLCAg ICAgICAgICAgICBOT05FIH0sCisgICAgeyAiZ2V0bWV0YWRhdGEiLCAgICBDTURfR0VUX01FVEFE QVRBLCAgICAgTChWLCB7IFBBUkFNX1JBV19JREVOVCB9KSB9LAorICAgIHsgImgiLCAgICAgICAg ICAgICAgQ01EX0hPUlpfUkVMLCAgICAgICAgIFIoTikgfSwKKyAgICB7ICJpZiIsICAgICAgICAg ICAgIENNRF9JRiwgICAgICAgICAgICAgICBMKE4sIFApIH0sCisgICAgeyAibCIsICAgICAgICAg ICAgICBDTURfTElORV9UT19SRUwsICAgICAgUihOLCBOKSB9LAorICAgIHsgImxpbmVhcmdyYWQi LCAgICAgQ01EX0xJTkVBUl9HUkFELCAgICAgIEwoTiwgTiwgTiwgTikgfSwKKyAgICB7ICJsaW5l dG8iLCAgICAgICAgIENNRF9MSU5FX1RPLCAgICAgICAgICBSKE4sIE4pIH0sCisgICAgeyAibSIs ICAgICAgICAgICAgICBDTURfTU9WRV9UT19SRUwsICAgICAgUihOLCBOKSB9LAorICAgIHsgIm1v dmV0byIsICAgICAgICAgQ01EX01PVkVfVE8sICAgICAgICAgIFIoTiwgTikgfSwKKyAgICB7ICJu ZXdwYXRoIiwgICAgICAgIENNRF9ORVdfUEFUSCwgICAgICAgICBOT05FIH0sCisgICAgeyAicHJl c2VydmUiLCAgICAgICBDTURfUFJFU0VSVkUsICAgICAgICAgTk9ORSB9LAorICAgIHsgInByaW50 IiwgICAgICAgICAgQ01EX1BSSU5ULCAgICAgICAgICAgIEwoeyBQQVJBTV9OVU1FUklDX01FVEFE QVRBIH0sIHsgUEFSQU1fVkFSSUFESUMgfSkgfSwKKyAgICB7ICJwcm9jIiwgICAgICAgICAgIENN RF9QUk9DX0FTU0lHTiwgICAgICBMKHsgUEFSQU1fUFJPQ19OQU1FIH0sIHsgUEFSQU1fUFJPQ19Q QVJBTVMgfSwgUCkgfSwKKyAgICB7ICJxIiwgICAgICAgICAgICAgIENNRF9RX0NVUlZFX1RPX1JF TCwgICBSKE4sIE4sIE4sIE4pIH0sCisgICAgeyAicmFkaWFsZ3JhZCIsICAgICBDTURfUkFESUFM X0dSQUQsICAgICAgTChOLCBOLCBOLCBOLCBOLCBOKSB9LAorICAgIHsgInJjdXJ2ZXRvIiwgICAg ICAgQ01EX0NVUlZFX1RPX1JFTCwgICAgIFIoTiwgTiwgTiwgTiwgTiwgTikgfSwKKyAgICB7ICJy ZWN0IiwgICAgICAgICAgIENNRF9SRUNULCAgICAgICAgICAgICBSKE4sIE4sIE4sIE4pIH0sCisg ICAgeyAicmVwZWF0IiwgICAgICAgICBDTURfUkVQRUFULCAgICAgICAgICAgTChOLCBQKSB9LAor ICAgIHsgInJlc2V0Y2xpcCIsICAgICAgQ01EX1JFU0VUX0NMSVAsICAgICAgIE5PTkUgfSwKKyAg ICB7ICJyZXNldGRhc2giLCAgICAgIENNRF9SRVNFVF9EQVNILCAgICAgICBOT05FIH0sCisgICAg eyAicmVzZXRtYXRyaXgiLCAgICBDTURfUkVTRVRfTUFUUklYLCAgICAgTk9ORSB9LAorICAgIHsg InJlc3RvcmUiLCAgICAgICAgQ01EX1JFU1RPUkUsICAgICAgICAgIE5PTkUgfSwKKyAgICB7ICJy bGluZXRvIiwgICAgICAgIENNRF9MSU5FX1RPX1JFTCwgICAgICBSKE4sIE4pIH0sCisgICAgeyAi cm1vdmV0byIsICAgICAgICBDTURfTU9WRV9UT19SRUwsICAgICAgUihOLCBOKSB9LAorICAgIHsg InJvdGF0ZSIsICAgICAgICAgQ01EX1JPVEFURSwgICAgICAgICAgIEwoTikgfSwKKyAgICB7ICJy b3VuZGVkcmVjdCIsICAgIENNRF9ST1VOREVEUkVDVCwgICAgICBSKE4sIE4sIE4sIE4sIE4pIH0s CisgICAgeyAicyIsICAgICAgICAgICAgICBDTURfU19DVVJWRV9UT19SRUwsICAgUihOLCBOLCBO LCBOKSB9LAorICAgIHsgInNhdmUiLCAgICAgICAgICAgQ01EX1NBVkUsICAgICAgICAgICAgIE5P TkUgfSwKKyAgICB7ICJzY2FsZSIsICAgICAgICAgIENNRF9TQ0FMRSwgICAgICAgICAgICBMKE4p IH0sCisgICAgeyAic2NhbGV4eSIsICAgICAgICBDTURfU0NBTEVYWSwgICAgICAgICAgTChOLCBO KSB9LAorICAgIHsgInNldGNvbG9yIiwgICAgICAgQ01EX1NFVF9DT0xPUiwgICAgICAgIEwoeyBQ QVJBTV9DT0xPUiB9KSB9LAorICAgIHsgInNldGRhc2giLCAgICAgICAgQ01EX1NFVF9EQVNILCAg ICAgICAgIFIoTikgfSwKKyAgICB7ICJzZXRkYXNob2Zmc2V0IiwgIENNRF9TRVRfREFTSF9PRkZT RVQsICBSKE4pIH0sCisgICAgeyAic2V0aHNsYSIsICAgICAgICBDTURfU0VUX0hTTEEsICAgICAg ICAgTChOLCBOLCBOLCBOKSB9LAorICAgIHsgInNldGxpbmVjYXAiLCAgICAgQ01EX1NFVF9MSU5F X0NBUCwgICAgIEwoQyh2Z3NfY29uc3RzX2xpbmVfY2FwKSkgfSwKKyAgICB7ICJzZXRsaW5lam9p biIsICAgIENNRF9TRVRfTElORV9KT0lOLCAgICBMKEModmdzX2NvbnN0c19saW5lX2pvaW4pKSB9 LAorICAgIHsgInNldGxpbmV3aWR0aCIsICAgQ01EX1NFVF9MSU5FX1dJRFRILCAgIEwoTikgfSwK KyAgICB7ICJzZXRyZ2JhIiwgICAgICAgIENNRF9TRVRfUkdCQSwgICAgICAgICBMKE4sIE4sIE4s IE4pIH0sCisgICAgeyAic2V0dmFyIiwgICAgICAgICBDTURfU0VUX1ZBUiwgICAgICAgICAgTChW LCBOKSB9LAorICAgIHsgInN0cm9rZSIsICAgICAgICAgQ01EX1NUUk9LRSwgICAgICAgICAgIE5P TkUgfSwKKyAgICB7ICJ0IiwgICAgICAgICAgICAgIENNRF9UX0NVUlZFX1RPX1JFTCwgICBSKE4s IE4pIH0sCisgICAgeyAidHJhbnNsYXRlIiwgICAgICBDTURfVFJBTlNMQVRFLCAgICAgICAgTChO LCBOKSB9LAorICAgIHsgInYiLCAgICAgICAgICAgICAgQ01EX1ZFUlRfUkVMLCAgICAgICAgIFIo TikgfSwKKyAgICB7ICJ6IiwgICAgICAgICAgICAgIENNRF9DTE9TRV9QQVRILCAgICAgICBOT05F IH0sCit9OworCisjdW5kZWYgQworI3VuZGVmIEwKKyN1bmRlZiBOCisjdW5kZWYgTk9ORQorI3Vu ZGVmIFBBUkFNUworI3VuZGVmIFIKKworLy8vIENvbXBhcmF0b3IgZm9yIGBWR1NDb21tYW5kRGVj bGAsIHRvIGJlIHVzZWQgd2l0aCBgYnNlYXJjaCgzKWAuCitzdGF0aWMgaW50IHZnc19jb21wX2Nv bW1hbmRfc3BlYyhjb25zdCB2b2lkICpjczEsIGNvbnN0IHZvaWQgKmNzMikgeworICAgIHJldHVy biBzdHJjbXAoCisgICAgICAgICgoY29uc3Qgc3RydWN0IFZHU0NvbW1hbmRTcGVjKiljczEpLT5u YW1lLAorICAgICAgICAoKGNvbnN0IHN0cnVjdCBWR1NDb21tYW5kU3BlYyopY3MyKS0+bmFtZQor ICAgICk7Cit9CisKKy8vLyBSZXR1cm4gdGhlIHNwZWNzIGZvciB0aGUgZ2l2ZW4gY29tbWFuZCwg b3IgYE5VTExgIGlmIHRoZSBuYW1lIGlzIG5vdCB2YWxpZC4KKy8vLworLy8vIFRoZSBpbXBsZW1l bnRhdGlvbiBhc3N1bWVzIHRoYXQgYHZnc19jb21tYW5kc2AgaXMgc29ydGVkIGJ5IGBuYW1lYC4K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgVkdTQ29tbWFuZFNwZWMqIHZnc19nZXRfY29tbWFuZChjb25z dCBjaGFyICpuYW1lLCBzaXplX3QgbGVuZ3RoKSB7CisgICAgY2hhciBidWZuYW1lWzY0XTsKKyAg ICBzdHJ1Y3QgVkdTQ29tbWFuZFNwZWMga2V5ID0geyAubmFtZSA9IGJ1Zm5hbWUgfTsKKworICAg IGlmIChsZW5ndGggPj0gc2l6ZW9mKGJ1Zm5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKwor ICAgIG1lbWNweShidWZuYW1lLCBuYW1lLCBsZW5ndGgpOworICAgIGJ1Zm5hbWVbbGVuZ3RoXSA9 ICdcMCc7CisKKyAgICByZXR1cm4gYnNlYXJjaCgKKyAgICAgICAgJmtleSwKKyAgICAgICAgdmdz X2NvbW1hbmRzLAorICAgICAgICBGRl9BUlJBWV9FTEVNUyh2Z3NfY29tbWFuZHMpLAorICAgICAg ICBzaXplb2YodmdzX2NvbW1hbmRzWzBdKSwKKyAgICAgICAgdmdzX2NvbXBfY29tbWFuZF9zcGVj CisgICAgKTsKK30KKworLy8vIFJldHVybiBgMWAgaWYgdGhlIGNvbW1hbmQgY2hhbmdlcyB0aGUg Y3VycmVudCBwYXRoIGluIHRoZSBjYWlybyBjb250ZXh0Lgorc3RhdGljIGludCB2Z3NfY21kX2No YW5nZV9wYXRoKGVudW0gVkdTQ29tbWFuZCBjbWQpIHsKKyAgICBzd2l0Y2ggKGNtZCkgeworICAg IGNhc2UgQ01EX0JSRUFLOgorICAgIGNhc2UgQ01EX0NPTE9SX1NUT1A6CisgICAgY2FzZSBDTURf REVGX0hTTEE6CisgICAgY2FzZSBDTURfREVGX1JHQkE6CisgICAgY2FzZSBDTURfR0VUX01FVEFE QVRBOgorICAgIGNhc2UgQ01EX0lGOgorICAgIGNhc2UgQ01EX0xJTkVBUl9HUkFEOgorICAgIGNh c2UgQ01EX1BSSU5UOgorICAgIGNhc2UgQ01EX1BST0NfQVNTSUdOOgorICAgIGNhc2UgQ01EX1BS T0NfQ0FMTDoKKyAgICBjYXNlIENNRF9SQURJQUxfR1JBRDoKKyAgICBjYXNlIENNRF9SRVBFQVQ6 CisgICAgY2FzZSBDTURfUkVTRVRfREFTSDoKKyAgICBjYXNlIENNRF9SRVNFVF9NQVRSSVg6Cisg ICAgY2FzZSBDTURfU0VUX0NPTE9SOgorICAgIGNhc2UgQ01EX1NFVF9EQVNIOgorICAgIGNhc2Ug Q01EX1NFVF9EQVNIX09GRlNFVDoKKyAgICBjYXNlIENNRF9TRVRfSFNMQToKKyAgICBjYXNlIENN RF9TRVRfTElORV9DQVA6CisgICAgY2FzZSBDTURfU0VUX0xJTkVfSk9JTjoKKyAgICBjYXNlIENN RF9TRVRfTElORV9XSURUSDoKKyAgICBjYXNlIENNRF9TRVRfUkdCQToKKyAgICBjYXNlIENNRF9T RVRfVkFSOgorICAgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy biAxOworICAgIH0KK30KKworLyoKKyAqID09IFZHUyBQYXJzZXIgPT0KKyAqCisgKiBUaGUgbGV4 ZXIgZGV0ZXJtaW5lcyB0aGUgdG9rZW4ga2luZCBieSByZWFkaW5nIHRoZSBmaXJzdCBjaGFyYWN0 ZXIgYWZ0ZXIgYQorICogZGVsaW1pdGVyIChhbnkgb2YgIiBcblx0XHIsIikuCisgKgorICogVGhl IG91dHB1dCBvZiB0aGUgcGFyc2VyIGlzIGFuIGluc3RhbmNlIG9mIGBWR1NQcm9ncmFtYC4gSXQg aXMgYSBsaXN0IG9mCisgKiBzdGF0ZW1lbnRzLCBhbmQgZWFjaCBzdGF0ZW1lbnQgaXMgYSBjb21t YW5kIG9wY29kZSBhbmQgaXRzIGFyZ3VtZW50cy4gVGhpcworICogaW5zdGFuY2UgaXMgY3JlYXRl ZCBvbiBmaWx0ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCByZXVzZWQgZm9yIGV2ZXJ5IGZyYW1lLgor ICoKKyAqIFVzZXItdmFyaWFibGVzIGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgaW5pdGlhbGl6ZWQg d2l0aCBhIGNvcHkgb2YKKyAqIGB2Z3NfZGVmYXVsdF92YXJzYC4KKyAqCisgKiBCbG9ja3MgKHRo ZSBib2R5IGZvciBwcm9jZWR1cmVzLCBgaWZgLCBhbmQgYHJlcGVhdGApIGFyZSBzdG9yZWQgYXMg bmVzdGVkCisgKiBgVkdTUHJvZ3JhbWAgaW5zdGFuY2VzLgorICoKKyAqIFRoZSBzb3VyY2UgaXMg YXNzdW1lZCB0byBiZSBBU0NJSS4gSWYgaXQgY29udGFpbnMgbXVsdGlieXRlIGNoYXJzLCBlYWNo CisgKiBieXRlIGlzIHRyZWF0ZWQgYXMgYW4gaW5kaXZpZHVhbCBjaGFyYWN0ZXIuIFRoaXMgaXMg b25seSByZWxldmFudCB3aGVuIHRoZQorICogcGFyc2VyIG11c3QgcmVwb3J0IHRoZSBsb2NhdGlv biBvZiBhIHN5bnRheCBlcnJvci4KKyAqCisgKiBUaGVyZSBpcyBubyBlcnJvciByZWNvdmVyeS4g VGhlIGZpcnN0IGludmFsaWQgdG9rZW4gd2lsbCBzdG9wIHRoZSBwYXJzZXIuCisgKi8KKworc3Ry dWN0IFZHU1BhcnNlciB7CisgICAgY29uc3QgY2hhciogc291cmNlOworICAgIHNpemVfdCBjdXJz b3I7CisKKyAgICBjb25zdCBjaGFyICoqcHJvY19uYW1lczsKKyAgICBpbnQgcHJvY19uYW1lc19j b3VudDsKKworICAgIC8vIFN0b3JlIHRoZSB2YXJpYWJsZSBuYW1lcyBmb3IgdGhlIGRlZmF1bHQg b25lcyAoZnJvbSBgdmdzX2RlZmF1bHRfdmFyc2ApCisgICAgLy8gYW5kIHRoZSB2YXJpYWJsZXMg Y3JlYXRlZCB3aXRoIGBzZXR2YXJgLgorICAgIC8vCisgICAgLy8gVGhlIGV4dHJhIHNsb3QgaXMg bmVlZGVkIHRvIHN0b3JlIHRoZSBgTlVMTGAgdGVybWluYXRvciBleHBlY3RlZCBieQorICAgIC8v IGBhdl9leHByX3BhcnNlYC4KKyAgICBjb25zdCBjaGFyICp2YXJfbmFtZXNbVkFSX0NPVU5UICsg MV07Cit9OworCitzdHJ1Y3QgVkdTUGFyc2VyVG9rZW4geworICAgIGVudW0geworICAgICAgICBU T0tFTl9FT0YgPSAxLAorICAgICAgICBUT0tFTl9FWFBSLAorICAgICAgICBUT0tFTl9MRUZUX0JS QUNLRVQsCisgICAgICAgIFRPS0VOX0xJVEVSQUwsCisgICAgICAgIFRPS0VOX1JJR0hUX0JSQUNL RVQsCisgICAgICAgIFRPS0VOX1dPUkQsCisgICAgfSB0eXBlOworCisgICAgY29uc3QgY2hhciAq bGV4ZW1lOworICAgIHNpemVfdCBwb3NpdGlvbjsKKyAgICBzaXplX3QgbGVuZ3RoOworfTsKKwor Ly8vIENoZWNrIGlmIGB0b2tlbmAgaXMgdGhlIHZhbHVlIG9mIGBzdHJgLgorc3RhdGljIGludCB2 Z3NfdG9rZW5faXNfc3RyaW5nKGNvbnN0IHN0cnVjdCBWR1NQYXJzZXJUb2tlbiAqdG9rZW4sIGNv bnN0IGNoYXIgKnN0cikgeworICAgIHJldHVybiBzdHJuY21wKHN0ciwgdG9rZW4tPmxleGVtZSwg dG9rZW4tPmxlbmd0aCkgPT0gMAorICAgICAgICAmJiBzdHJbdG9rZW4tPmxlbmd0aF0gPT0gJ1ww JzsKK30KKworLy8vIENvbXB1dGUgdGhlIGxpbmUvY29sdW1uIG51bWJlcnMgb2YgdGhlIGdpdmVu IHRva2VuLgorc3RhdGljIHZvaWQgdmdzX3Rva2VuX3NwYW4oCisgICAgY29uc3Qgc3RydWN0IFZH U1BhcnNlciAqcGFyc2VyLAorICAgIGNvbnN0IHN0cnVjdCBWR1NQYXJzZXJUb2tlbiAqdG9rZW4s CisgICAgc2l6ZV90ICpsaW5lLAorICAgIHNpemVfdCAqY29sdW1uCispIHsKKyAgICBjb25zdCBj aGFyICpzb3VyY2UgPSBwYXJzZXItPnNvdXJjZTsKKworICAgICpsaW5lID0gMTsKKworICAgIGZv ciAoOzspIHsKKyAgICAgICAgY29uc3QgY2hhciAqc2VwID0gc3RyY2hyKHNvdXJjZSwgJ1xuJyk7 CisKKyAgICAgICAgaWYgKHNlcCA9PSBOVUxMIHx8IChzZXAgLSBwYXJzZXItPnNvdXJjZSkgPiB0 b2tlbi0+cG9zaXRpb24pIHsKKyAgICAgICAgICAgICpjb2x1bW4gPSB0b2tlbi0+cG9zaXRpb24g LSAoc291cmNlIC0gcGFyc2VyLT5zb3VyY2UpICsgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisKKyAgICAgICAgKysqbGluZTsKKyAgICAgICAgc291cmNlID0gc2VwICsgMTsKKyAg ICB9Cit9CisKK3N0YXRpYyBhdl9wcmludGZfZm9ybWF0KDQsIDUpCit2b2lkIHZnc19sb2dfaW52 YWxpZF90b2tlbigKKyAgICB2b2lkICpsb2dfY3R4LAorICAgIGNvbnN0IHN0cnVjdCBWR1NQYXJz ZXIgKnBhcnNlciwKKyAgICBjb25zdCBzdHJ1Y3QgVkdTUGFyc2VyVG9rZW4gKnRva2VuLAorICAg IGNvbnN0IGNoYXIgKmV4dHJhX2ZtdCwKKyAgICAuLi4KKykgeworICAgIHZhX2xpc3QgYXA7Cisg ICAgY2hhciBleHRyYVsyNTZdOworICAgIHNpemVfdCBsaW5lLCBjb2x1bW47CisKKyAgICB2Z3Nf dG9rZW5fc3BhbihwYXJzZXIsIHRva2VuLCAmbGluZSwgJmNvbHVtbik7CisKKyAgICAvLyBGb3Jt YXQgZXh0cmEgbWVzc2FnZS4KKyAgICB2YV9zdGFydChhcCwgZXh0cmFfZm10KTsKKyAgICB2c25w cmludGYoZXh0cmEsIHNpemVvZihleHRyYSksIGV4dHJhX2ZtdCwgYXApOworICAgIHZhX2VuZChh cCk7CisKKyAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAiSW52YWxp ZCB0b2tlbiAnJS4qcycgYXQgbGluZSAlenUsIGNvbHVtbiAlenU6ICVzXG4iLAorICAgICAgICAo aW50KXRva2VuLT5sZW5ndGgsIHRva2VuLT5sZXhlbWUsIGxpbmUsIGNvbHVtbiwgZXh0cmEpOwor fQorCisvLy8gUmV0dXJuIHRoZSBuZXh0IHRva2VuIGluIHRoZSBzb3VyY2UuCisvLy8KKy8vLyBA cGFyYW1bb3V0XSAgdG9rZW4gICAgTmV4dCB0b2tlbi4KKy8vLyBAcGFyYW1baW5dICAgYWR2YW5j ZSAgSWYgdHJ1ZSwgdGhlIGN1cnNvciBpcyB1cGRhdGVkIGFmdGVyIGZpbmRpbmcgYSB0b2tlbi4K Ky8vLworLy8vIEByZXR1cm4gYDBgIG9uIHN1Y2Nlc3MsIGFuZCBhIG5lZ2F0aXZlIGBBVkVSUk9S YCBjb2RlIG9uIGZhaWx1cmUuCitzdGF0aWMgaW50IHZnc19wYXJzZXJfbmV4dF90b2tlbigKKyAg ICB2b2lkICpsb2dfY3R4LAorICAgIHN0cnVjdCBWR1NQYXJzZXIgKnBhcnNlciwKKyAgICBzdHJ1 Y3QgVkdTUGFyc2VyVG9rZW4gKnRva2VuLAorICAgIGludCBhZHZhbmNlCispIHsKKworICAgICNk ZWZpbmUgV09SRF9TRVBBUkFUT1IgIiBcblx0XHIsIgorCisgICAgaW50IGxldmVsOworICAgIHNp emVfdCBjdXJzb3IsIGxlbmd0aDsKKyAgICBjb25zdCBjaGFyICpzb3VyY2U7CisKK25leHRfdG9r ZW46CisKKyAgICBzb3VyY2UgPSAmcGFyc2VyLT5zb3VyY2VbcGFyc2VyLT5jdXJzb3JdOworCisg ICAgY3Vyc29yID0gc3Ryc3BuKHNvdXJjZSwgV09SRF9TRVBBUkFUT1IpOworICAgIHRva2VuLT5w b3NpdGlvbiA9IHBhcnNlci0+Y3Vyc29yICsgY3Vyc29yOworICAgIHRva2VuLT5sZXhlbWUgPSAm c291cmNlW2N1cnNvcl07CisKKyAgICBzd2l0Y2ggKHNvdXJjZVtjdXJzb3JdKSB7CisgICAgY2Fz ZSAnXDAnOgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRPS0VOX0VPRjsKKyAgICAgICAgdG9rZW4t PmxleGVtZSA9ICI8RU9GPiI7CisgICAgICAgIHRva2VuLT5sZW5ndGggPSA1OworICAgICAgICBy ZXR1cm4gMDsKKworICAgIGNhc2UgJygnOgorICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIHBhcmVu dGhlc2lzLgorICAgICAgICBsZXZlbCA9IDE7CisgICAgICAgIGxlbmd0aCA9IDE7CisKKyAgICAg ICAgd2hpbGUgKGxldmVsID4gMCkgeworICAgICAgICAgICAgc3dpdGNoIChzb3VyY2VbY3Vyc29y ICsgbGVuZ3RoXSkgeworICAgICAgICAgICAgY2FzZSAnXDAnOgorICAgICAgICAgICAgICAgIHRv a2VuLT5sZW5ndGggPSAxOyAvLyBTaG93IG9ubHkgdGhlICcoJyBpbiB0aGUgZXJyb3IgbWVzc2Fn ZS4KKyAgICAgICAgICAgICAgICB2Z3NfbG9nX2ludmFsaWRfdG9rZW4obG9nX2N0eCwgcGFyc2Vy LCB0b2tlbiwgIlVubWF0Y2hlZCBwYXJlbnRoZXNpcy4iKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOworCisgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAg ICAgICBsZXZlbCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl ICcpJzoKKyAgICAgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgfQorCisgICAg ICAgIHRva2VuLT50eXBlID0gVE9LRU5fRVhQUjsKKyAgICAgICAgdG9rZW4tPmxlbmd0aCA9IGxl bmd0aDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICd7JzoKKyAgICAgICAgdG9rZW4tPnR5 cGUgPSBUT0tFTl9MRUZUX0JSQUNLRVQ7CisgICAgICAgIHRva2VuLT5sZW5ndGggPSAxOworICAg ICAgICBicmVhazsKKworICAgIGNhc2UgJ30nOgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRPS0VO X1JJR0hUX0JSQUNLRVQ7CisgICAgICAgIHRva2VuLT5sZW5ndGggPSAxOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgJysnOgorICAgIGNhc2UgJy0nOgorICAgIGNhc2UgJy4nOgorICAgIGNh c2UgJzAnOgorICAgIGNhc2UgJzEnOgorICAgIGNhc2UgJzInOgorICAgIGNhc2UgJzMnOgorICAg IGNhc2UgJzQnOgorICAgIGNhc2UgJzUnOgorICAgIGNhc2UgJzYnOgorICAgIGNhc2UgJzcnOgor ICAgIGNhc2UgJzgnOgorICAgIGNhc2UgJzknOgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRPS0VO X0xJVEVSQUw7CisgICAgICAgIHRva2VuLT5sZW5ndGggPSBzdHJjc3BuKHRva2VuLT5sZXhlbWUs IFdPUkRfU0VQQVJBVE9SKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcvJzoKKyAgICAg ICAgLy8gSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFsc28gJy8nLCBpZ25vcmUgdGhlIHJlc3Qg b2YKKyAgICAgICAgLy8gdGhlIGxpbmUuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIGl0IGlz IHNvbWV0aGluZyBlbHNlLCByZXR1cm4gYSBgVE9LRU5fV09SRGAuCisgICAgICAgIGlmIChzb3Vy Y2VbY3Vyc29yICsgMV0gPT0gJy8nKSB7CisgICAgICAgICAgICBwYXJzZXItPmN1cnNvciArPSBj dXJzb3IgKyBzdHJjc3BuKHRva2VuLT5sZXhlbWUsICJcbiIpOworICAgICAgICAgICAgZ290byBu ZXh0X3Rva2VuOworICAgICAgICB9CisKKyAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKworICAg IGRlZmF1bHQ6CisgICAgICAgIHRva2VuLT50eXBlID0gVE9LRU5fV09SRDsKKyAgICAgICAgdG9r ZW4tPmxlbmd0aCA9IHN0cmNzcG4odG9rZW4tPmxleGVtZSwgV09SRF9TRVBBUkFUT1IpOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoYWR2YW5jZSkgeworICAgICAgICBwYXJzZXIt PmN1cnNvciArPSBjdXJzb3IgKyB0b2tlbi0+bGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCisvLy8gQ29tbWFuZCBhcmd1bWVudHMuCitzdHJ1Y3QgVkdTQXJndW1lbnQgeworICAg IGVudW0geworICAgICAgICBBUkdfQ09MT1IgPSAxLAorICAgICAgICBBUkdfQ09MT1JfVkFSLAor ICAgICAgICBBUkdfQ09OU1QsCisgICAgICAgIEFSR19FWFBSLAorICAgICAgICBBUkdfTElURVJB TCwKKyAgICAgICAgQVJHX01FVEFEQVRBLAorICAgICAgICBBUkdfUFJPQ0VEVVJFX0lELAorICAg ICAgICBBUkdfU1VCUFJPR1JBTSwKKyAgICAgICAgQVJHX1ZBUklBQkxFLAorICAgIH0gdHlwZTsK KworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBjb2xvcls0XTsKKyAgICAgICAgaW50IGNv bnN0YW50OworICAgICAgICBBVkV4cHIgKmV4cHI7CisgICAgICAgIGRvdWJsZSBsaXRlcmFsOwor ICAgICAgICBpbnQgcHJvY19pZDsKKyAgICAgICAgc3RydWN0IFZHU1Byb2dyYW0gKnN1YnByb2dy YW07CisgICAgICAgIGludCB2YXJpYWJsZTsKKyAgICB9OworCisgICAgY2hhciAqbWV0YWRhdGE7 Cit9OworCisvLy8gUHJvZ3JhbSBzdGF0ZW1lbnRzLgorc3RydWN0IFZHU1N0YXRlbWVudCB7Cisg ICAgZW51bSBWR1NDb21tYW5kIGNtZDsKKyAgICBzdHJ1Y3QgVkdTQXJndW1lbnQgKmFyZ3M7Cisg ICAgaW50IGFyZ3NfY291bnQ7Cit9OworCitzdHJ1Y3QgVkdTUHJvZ3JhbSB7CisgICAgc3RydWN0 IFZHU1N0YXRlbWVudCAqc3RhdGVtZW50czsKKyAgICBpbnQgc3RhdGVtZW50c19jb3VudDsKKwor ICAgIGNvbnN0IGNoYXIgKipwcm9jX25hbWVzOworICAgIGludCBwcm9jX25hbWVzX2NvdW50Owor fTsKKworc3RhdGljIHZvaWQgdmdzX2ZyZWUoc3RydWN0IFZHU1Byb2dyYW0gKnByb2dyYW0pOwor CitzdGF0aWMgaW50IHZnc19wYXJzZSgKKyAgICB2b2lkICpsb2dfY3R4LAorICAgIHN0cnVjdCBW R1NQYXJzZXIgKnBhcnNlciwKKyAgICBzdHJ1Y3QgVkdTUHJvZ3JhbSAqcHJvZ3JhbSwKKyAgICBp bnQgc3VicHJvZ3JhbQorKTsKKworc3RhdGljIHZvaWQgdmdzX3N0YXRlbWVudF9mcmVlKHN0cnVj dCBWR1NTdGF0ZW1lbnQgKnN0bSkgeworICAgIGlmIChzdG0tPmFyZ3MgPT0gTlVMTCkKKyAgICAg ICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdG0tPmFyZ3NfY291bnQ7IGor KykgeworICAgICAgICBzdHJ1Y3QgVkdTQXJndW1lbnQgKmFyZyA9ICZzdG0tPmFyZ3Nbal07CisK KyAgICAgICAgc3dpdGNoIChhcmctPnR5cGUpIHsKKyAgICAgICAgY2FzZSBBUkdfRVhQUjoKKyAg ICAgICAgICAgIGF2X2V4cHJfZnJlZShhcmctPmV4cHIpOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBBUkdfU1VCUFJPR1JBTToKKyAgICAgICAgICAgIHZnc19mcmVlKGFyZy0+ c3VicHJvZ3JhbSk7CisgICAgICAgICAgICBhdl9mcmVlcCgmYXJnLT5zdWJwcm9ncmFtKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZy0+bWV0YWRhdGEp CisgICAgICAgICAgICBhdl9mcmVlcCgmYXJnLT5tZXRhZGF0YSk7CisgICAgfQorCisgICAgYXZf ZnJlZXAoJnN0bS0+YXJncyk7Cit9CisKKy8vLyBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVk IGJ5IHRoZSBwcm9ncmFtLgorc3RhdGljIHZvaWQgdmdzX2ZyZWUoc3RydWN0IFZHU1Byb2dyYW0g KnByb2dyYW0pIHsKKyAgICBpZiAocHJvZ3JhbS0+c3RhdGVtZW50cyA9PSBOVUxMKQorICAgICAg ICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2dyYW0tPnN0YXRlbWVudHNf Y291bnQ7IGkrKykKKyAgICAgICAgdmdzX3N0YXRlbWVudF9mcmVlKCZwcm9ncmFtLT5zdGF0ZW1l bnRzW2ldKTsKKworICAgIGF2X2ZyZWVwKCZwcm9ncmFtLT5zdGF0ZW1lbnRzKTsKKworICAgIGlm IChwcm9ncmFtLT5wcm9jX25hbWVzICE9IE5VTEwpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBwcm9ncmFtLT5wcm9jX25hbWVzX2NvdW50OyBpKyspCisgICAgICAgICAgICBhdl9mcmVl cCgmcHJvZ3JhbS0+cHJvY19uYW1lc1tpXSk7CisKKyAgICAgICAgYXZfZnJlZXAoJnByb2dyYW0t PnByb2NfbmFtZXMpOworICAgIH0KK30KKworLy8vIENvbnN1bWUgdGhlIG5leHQgYXJndW1lbnQg YXMgYSBudW1lcmljIHZhbHVlLCBhbmQgc3RvcmUgaXQgaW4gYGFyZ2AuCisvLy8KKy8vLyBSZXR1 cm4gYDBgIG9uIHN1Y2Nlc3MsIGFuZCBhIG5lZ2F0aXZlIGBBVkVSUk9SYCBjb2RlIG9uIGZhaWx1 cmUuCitzdGF0aWMgaW50IHZnc19wYXJzZV9udW1lcmljX2FyZ3VtZW50KAorICAgIHZvaWQgKmxv Z19jdHgsCisgICAgc3RydWN0IFZHU1BhcnNlciAqcGFyc2VyLAorICAgIHN0cnVjdCBWR1NBcmd1 bWVudCAqYXJnLAorICAgIGludCBtZXRhZGF0YQorKSB7CisgICAgaW50IHJldDsKKyAgICBjaGFy IHN0YWNrX2J1Zls2NF07CisgICAgY2hhciAqbGV4ZW1lLCAqZW5kcDsKKyAgICBzdHJ1Y3QgVkdT UGFyc2VyVG9rZW4gdG9rZW47CisKKyAgICByZXQgPSB2Z3NfcGFyc2VyX25leHRfdG9rZW4obG9n X2N0eCwgcGFyc2VyLCAmdG9rZW4sIDEpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0 dXJuIHJldDsKKworICAgIC8vIENvbnZlcnQgdGhlIGxleGVtZSB0byBhIE5VTC10ZXJtaW5hdGVk IHN0cmluZy4gU21hbGwgbGV4ZW1lcyBhcmUgY29waWVkCisgICAgLy8gdG8gYSBidWZmZXIgb24g dGhlIHN0YWNrOyB0aHVzLCBpdCBhdm9pZHMgYWxsb2NhdGluZyBtZW1vcnkgaXMgbW9zdCBjYXNl cy4KKyAgICBpZiAodG9rZW4ubGVuZ3RoICsgMSA8IHNpemVvZihzdGFja19idWYpKSB7CisgICAg ICAgIGxleGVtZSA9IHN0YWNrX2J1ZjsKKyAgICB9IGVsc2UgeworICAgICAgICBsZXhlbWUgPSBh dl9tYWxsb2ModG9rZW4ubGVuZ3RoICsgMSk7CisgICAgfQorCisgICAgbWVtY3B5KGxleGVtZSwg dG9rZW4ubGV4ZW1lLCB0b2tlbi5sZW5ndGgpOworICAgIGxleGVtZVt0b2tlbi5sZW5ndGhdID0g J1wwJzsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSkgeworICAgIGNhc2UgVE9LRU5fTElURVJB TDoKKyAgICAgICAgYXJnLT50eXBlID0gQVJHX0xJVEVSQUw7CisgICAgICAgIGFyZy0+bGl0ZXJh bCA9IGF2X3N0cnRvZChsZXhlbWUsICZlbmRwKTsKKworICAgICAgICBpZiAoKmVuZHAgIT0gJ1ww JykgeworICAgICAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2VuKGxvZ19jdHgsIHBhcnNlciwg JnRva2VuLCAiRXhwZWN0ZWQgdmFsaWQgbnVtYmVyLiIpOworICAgICAgICAgICAgcmV0ID0gQVZF UlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUT0tF Tl9FWFBSOgorICAgICAgICBhcmctPnR5cGUgPSBBUkdfRVhQUjsKKyAgICAgICAgcmV0ID0gYXZf ZXhwcl9wYXJzZSgKKyAgICAgICAgICAgICZhcmctPmV4cHIsCisgICAgICAgICAgICBsZXhlbWUs CisgICAgICAgICAgICBwYXJzZXItPnZhcl9uYW1lcywKKyAgICAgICAgICAgIHZnc19mdW5jMV9u YW1lcywKKyAgICAgICAgICAgIHZnc19mdW5jMV9pbXBscywKKyAgICAgICAgICAgIHZnc19mdW5j Ml9uYW1lcywKKyAgICAgICAgICAgIHZnc19mdW5jMl9pbXBscywKKyAgICAgICAgICAgIDAsCisg ICAgICAgICAgICBsb2dfY3R4CisgICAgICAgICk7CisKKyAgICAgICAgaWYgKHJldCAhPSAwKQor ICAgICAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2Vu LCAiSW52YWxpZCBleHByZXNzaW9uLiIpOworCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBU T0tFTl9XT1JEOgorICAgICAgICByZXQgPSAxOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IFZBUl9DT1VOVDsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICp2YXIgPSBwYXJzZXIt PnZhcl9uYW1lc1tpXTsKKyAgICAgICAgICAgIGlmICh2YXIgPT0gTlVMTCkKKyAgICAgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKHZnc190b2tlbl9pc19zdHJpbmcoJnRva2Vu LCB2YXIpKSB7CisgICAgICAgICAgICAgICAgYXJnLT50eXBlID0gQVJHX1ZBUklBQkxFOworICAg ICAgICAgICAgICAgIGFyZy0+dmFyaWFibGUgPSBpOworICAgICAgICAgICAgICAgIHJldCA9IDA7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg ICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBmYWxs dGhyb3VnaCAqLworCisgICAgZGVmYXVsdDoKKyAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2Vu KGxvZ19jdHgsIHBhcnNlciwgJnRva2VuLCAiRXhwZWN0ZWQgbnVtZXJpYyBhcmd1bWVudC4iKTsK KyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlmIChyZXQgPT0g MCkgeworICAgICAgICBpZiAobWV0YWRhdGEpIHsKKyAgICAgICAgICAgIHNpemVfdCBsaW5lLCBj b2x1bW47CisgICAgICAgICAgICB2Z3NfdG9rZW5fc3BhbihwYXJzZXIsICZ0b2tlbiwgJmxpbmUs ICZjb2x1bW4pOworICAgICAgICAgICAgYXJnLT5tZXRhZGF0YSA9IGF2X2FzcHJpbnRmKCJbJXp1 OiV6dV0gJXMiLCBsaW5lLCBjb2x1bW4sIGxleGVtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBhcmctPm1ldGFkYXRhID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg ICAgICAgIG1lbXNldChhcmcsIDAsIHNpemVvZigqYXJnKSk7CisgICAgfQorCisgICAgaWYgKGxl eGVtZSAhPSBzdGFja19idWYpCisgICAgICAgIGF2X2ZyZWVwKCZsZXhlbWUpOworCisgICAgcmV0 dXJuIHJldDsKK30KKworLy8vIENoZWNrIGlmIHRoZSBuZXh0IHRva2VuIGlzIGEgbnVtZXJpYyB2 YWx1ZSwgc28gdGhlIGxhc3QgY29tbWFuZCBtdXN0IGJlCisvLy8gcmVwZWF0ZWQuCitzdGF0aWMg aW50IHZnc19wYXJzZXJfY2FuX3JlcGVhdF9jbWQodm9pZCAqbG9nX2N0eCwgc3RydWN0IFZHU1Bh cnNlciAqcGFyc2VyKSB7CisgICAgc3RydWN0IFZHU1BhcnNlclRva2VuIHRva2VuID0geyAwIH07 CisKKyAgICBjb25zdCBpbnQgcmV0ID0gdmdzX3BhcnNlcl9uZXh0X3Rva2VuKGxvZ19jdHgsIHBh cnNlciwgJnRva2VuLCAwKTsKKworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSkgeworICAgIGNhc2UgVE9LRU5fRVhQUjoKKyAg ICBjYXNlIFRPS0VOX0xJVEVSQUw6CisgICAgICAgIHJldHVybiAwOworCisgICAgY2FzZSBUT0tF Tl9XT1JEOgorICAgICAgICAvLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIHdvcmQsIGl0IHdpbGwg YmUgY29uc2lkZXJlZCB0byByZXBlYXQKKyAgICAgICAgLy8gdGhlIGNvbW1hbmQgb25seSBpZiBp dCBpcyBhIHZhcmlhYmxlLCBhbmQgdGhlcmUgaXMgbm90CisgICAgICAgIC8vIGtub3duIGNvbW1h bmQgd2l0aCB0aGUgc2FtZSBuYW1lLgorCisgICAgICAgIGlmICh2Z3NfZ2V0X2NvbW1hbmQodG9r ZW4ubGV4ZW1lLCB0b2tlbi5sZW5ndGgpICE9IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMTsK KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBUl9DT1VOVDsgaSsrKSB7CisgICAgICAg ICAgICBjb25zdCBjaGFyICp2YXIgPSBwYXJzZXItPnZhcl9uYW1lc1tpXTsKKyAgICAgICAgICAg IGlmICh2YXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAg ICAgaWYgKHZnc190b2tlbl9pc19zdHJpbmcoJnRva2VuLCB2YXIpKQorICAgICAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBkZWZhdWx0 OgorICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKKworc3RhdGljIGludCB2Z3NfaXNfdmFs aWRfaWRlbnRpZmllcihjb25zdCBzdHJ1Y3QgVkdTUGFyc2VyVG9rZW4gKnRva2VuKSB7CisgICAg Ly8gQW4gaWRlbnRpZmllciBpcyB2YWxpZCBpZjoKKyAgICAvLworICAgIC8vICAtIEl0IHN0YXJ0 cyB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIG9yIGFuIHVuZGVyc2NvcmUuCisgICAgLy8g IC0gRXZlcnl0aGluZyBlbHNlLCBhbHBoYW51bWVyaWMgb3IgdW5kZXJzY29yZQorCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCB0b2tlbi0+bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY2hhciBjID0g dG9rZW4tPmxleGVtZVtpXTsKKyAgICAgICAgaWYgKGMgIT0gJ18nCisgICAgICAgICAgICAmJiAh KGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorICAgICAgICAgICAgJiYgIShjID49ICdBJyAmJiBjIDw9 ICdaJykKKyAgICAgICAgICAgICYmICEoaSA+IDAgJiYgYyA+PSAnMCcgJiYgYyA8PSAnOScpCisg ICAgICAgICkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICByZXR1cm4gMTsKK30KKworLy8vIEV4dHJhY3QgdGhlIGFyZ3VtZW50cyBmb3IgYSBjb21tYW5k LCBhbmQgYWRkIGEgbmV3IHN0YXRlbWVudAorLy8vIHRvIHRoZSBwcm9ncmFtLgorLy8vCisvLy8g T24gc3VjY2VzcywgcmV0dXJuIGAwYC4KK3N0YXRpYyBpbnQgdmdzX3BhcnNlX3N0YXRlbWVudCgK KyAgICB2b2lkICpsb2dfY3R4LAorICAgIHN0cnVjdCBWR1NQYXJzZXIgKnBhcnNlciwKKyAgICBz dHJ1Y3QgVkdTUHJvZ3JhbSAqcHJvZ3JhbSwKKyAgICBjb25zdCBzdHJ1Y3QgVkdTQ29tbWFuZFNw ZWMgKmRlY2wKKykgeworCisgICAgI2RlZmluZSBGQUlMKGVycikgXAorICAgICAgICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB2Z3Nfc3RhdGVtZW50 X2ZyZWUoJnN0YXRlbWVudCk7IFwKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKGVycik7ICAg ICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApCisKKyAgICBzdHJ1Y3QgVkdTU3RhdGVtZW50 IHN0YXRlbWVudCA9IHsKKyAgICAgICAgLmNtZCA9IGRlY2wtPmNtZCwKKyAgICAgICAgLmFyZ3Mg PSBOVUxMLAorICAgICAgICAuYXJnc19jb3VudCA9IDAsCisgICAgfTsKKworICAgIGNvbnN0IHN0 cnVjdCBWR1NQYXJhbWV0ZXIgKnBhcmFtID0gJmRlY2wtPnBhcmFtc1swXTsKKworICAgIGludCBw cm9jX2FyZ3NfY291bnQgPSAwOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmV0Owor ICAgICAgICB2b2lkICpyOworCisgICAgICAgIHN0cnVjdCBWR1NQYXJzZXJUb2tlbiB0b2tlbiA9 IHsgMCB9OworICAgICAgICBzdHJ1Y3QgVkdTQXJndW1lbnQgYXJnID0geyAwIH07CisKKyAgICAg ICAgc3dpdGNoIChwYXJhbS0+dHlwZSkgeworICAgICAgICBjYXNlIFBBUkFNX1ZBUklBRElDOgor ICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgdG9rZW4gaXMgbnVtZXJpYywgcmVwZWF0IHRoZSBw cmV2aW91cyBwYXJhbWV0ZXIKKyAgICAgICAgICAgIC8vIHRvIGFwcGVuZCBpdCB0byB0aGUgY3Vy cmVudCBzdGF0ZW1lbnQuCisKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuYXJnc19jb3VudCA8 IE1BWF9DT01NQU5EX1BBUkFNUworICAgICAgICAgICAgICAgICYmIHZnc19wYXJzZXJfY2FuX3Jl cGVhdF9jbWQobG9nX2N0eCwgcGFyc2VyKSA9PSAwCisgICAgICAgICAgICApIHsKKyAgICAgICAg ICAgICAgICBwYXJhbS0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw YXJhbSsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICBjYXNlIFBBUkFNX0VORDoKKyAgICAgICAgY2FzZSBQQVJBTV9NQVlfUkVQRUFUOgorICAgICAg ICAgICAgLy8gQWRkIHRoZSBidWlsdCBzdGF0ZW1lbnQgdG8gdGhlIHByb2dyYW0uCisgICAgICAg ICAgICByID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAodm9pZCopJnByb2dy YW0tPnN0YXRlbWVudHMsCisgICAgICAgICAgICAgICAgJnByb2dyYW0tPnN0YXRlbWVudHNfY291 bnQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YXRlbWVudCksCisgICAgICAgICAgICAgICAg KHZvaWQqKSZzdGF0ZW1lbnQKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIGlmIChyID09 IE5VTEwpCisgICAgICAgICAgICAgICAgRkFJTChFTk9NRU0pOworCisgICAgICAgICAgICAvLyBN YXkgcmVwZWF0IGlmIHRoZSBuZXh0IHRva2VuIGlzIG51bWVyaWMuCisgICAgICAgICAgICBpZiAo cGFyYW0tPnR5cGUgIT0gUEFSQU1fRU5ECisgICAgICAgICAgICAgICAgJiYgdmdzX3BhcnNlcl9j YW5fcmVwZWF0X2NtZChsb2dfY3R4LCBwYXJzZXIpID09IDAKKyAgICAgICAgICAgICkgeworICAg ICAgICAgICAgICAgIHBhcmFtID0gJmRlY2wtPnBhcmFtc1swXTsKKyAgICAgICAgICAgICAgICBz dGF0ZW1lbnQuYXJncyA9IE5VTEw7CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LmFyZ3NfY291 bnQgPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIFBBUkFNX0NPTE9SOgorICAgICAgICAg ICAgcmV0ID0gdmdzX3BhcnNlcl9uZXh0X3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2VuLCAx KTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgICAgICBGQUlMKEVJTlZB TCk7CisKKyAgICAgICAgICAgIGFyZy50eXBlID0gQVJHX0NPTE9SOworCisgICAgICAgICAgICBm b3IgKGludCBpID0gVkFSX1UwOyBpIDwgVkFSX0NPVU5UOyBpKyspIHsKKyAgICAgICAgICAgICAg ICBpZiAocGFyc2VyLT52YXJfbmFtZXNbaV0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiAodmdzX3Rva2VuX2lzX3N0cmluZygmdG9rZW4s IHBhcnNlci0+dmFyX25hbWVzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBhcmcudHlwZSA9 IEFSR19DT0xPUl9WQVI7CisgICAgICAgICAgICAgICAgICAgIGFyZy52YXJpYWJsZSA9IGk7Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYgKGFyZy50eXBlID09IEFSR19DT0xPUl9WQVIpCisgICAgICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldCA9IGF2X3BhcnNlX2NvbG9yKGFyZy5j b2xvciwgdG9rZW4ubGV4ZW1lLCB0b2tlbi5sZW5ndGgsIGxvZ19jdHgpOworICAgICAgICAgICAg aWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2VuKGxv Z19jdHgsIHBhcnNlciwgJnRva2VuLCAiRXhwZWN0ZWQgY29sb3IuIik7CisgICAgICAgICAgICAg ICAgRkFJTChFSU5WQUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBjYXNlIFBBUkFNX0NPTlNUQU5UOiB7CisgICAgICAgICAgICBpbnQgZm91bmQgPSAw OworICAgICAgICAgICAgY2hhciBleHBlY3RlZF9uYW1lc1s2NF0gPSB7IDAgfTsKKworICAgICAg ICAgICAgcmV0ID0gdmdzX3BhcnNlcl9uZXh0X3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2Vu LCAxKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgICAgICBGQUlMKEVJ TlZBTCk7CisKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IFZHU0NvbnN0YW50ICpjb25zdGFudCA9IHBhcmFtLT5jb25zdGFudHM7CisgICAgICAgICAgICAg ICAgY29uc3RhbnQtPm5hbWUgIT0gTlVMTDsKKyAgICAgICAgICAgICAgICBjb25zdGFudCsrCisg ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBpZiAodmdzX3Rva2VuX2lzX3N0cmluZygm dG9rZW4sIGNvbnN0YW50LT5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBhcmcudHlwZSA9 IEFSR19DT05TVDsKKyAgICAgICAgICAgICAgICAgICAgYXJnLmNvbnN0YW50ID0gY29uc3RhbnQt PnZhbHVlOworCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ29s bGVjdCB2YWxpZCBuYW1lcyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIGVycm9yIG1lc3NhZ2UsIGlu IGNhc2UKKyAgICAgICAgICAgICAgICAvLyB0aGUgbmFtZSBpcyBub3QgZm91bmQuCisgICAgICAg ICAgICAgICAgYXZfc3RybGNhdGYoZXhwZWN0ZWRfbmFtZXMsIHNpemVvZihleHBlY3RlZF9uYW1l cyksICIgJyVzJyIsIGNvbnN0YW50LT5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHZnc19sb2dfaW52YWxpZF90b2tlbihs b2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwgIkV4cGVjdGVkIG9uZSBvZiVzLiIsIGV4cGVjdGVkX25h bWVzKTsKKyAgICAgICAgICAgICAgICBGQUlMKEVJTlZBTCk7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQQVJBTV9QUk9DX0FS R1M6CisgICAgICAgICAgICBpZiAodmdzX3BhcnNlcl9jYW5fcmVwZWF0X2NtZChsb2dfY3R4LCBw YXJzZXIpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBObyBtb3JlIGFyZ3VtZW50cy4gSnVt cCB0byBuZXh0IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICBwYXJhbSsrOworICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvY19h cmdzX2NvdW50KysgPj0gTUFYX1BST0NfQVJHUykgeworICAgICAgICAgICAgICAgIHZnc19sb2df aW52YWxpZF90b2tlbihsb2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwKKyAgICAgICAgICAgICAgICAg ICAgIlRvbyBtYW55IGFyZ3VtZW50cy4gTGltaXQgaXMgJWQiLCBNQVhfUFJPQ19BUkdTKTsKKyAg ICAgICAgICAgICAgICBGQUlMKEVJTlZBTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IC8qIGZhbGx0aHJvdWdoICovCisKKyAgICAgICAgY2FzZSBQQVJBTV9OVU1FUklDOgorICAgICAg ICBjYXNlIFBBUkFNX05VTUVSSUNfTUVUQURBVEE6CisgICAgICAgICAgICByZXQgPSB2Z3NfcGFy c2VfbnVtZXJpY19hcmd1bWVudCgKKyAgICAgICAgICAgICAgICBsb2dfY3R4LAorICAgICAgICAg ICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAmYXJnLAorICAgICAgICAgICAgICAgIHBh cmFtLT50eXBlID09IFBBUkFNX05VTUVSSUNfTUVUQURBVEEKKyAgICAgICAgICAgICk7CisKKyAg ICAgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgICAgICBGQUlMKEVJTlZBTCk7CisK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUEFSQU1fUFJPQ19OQU1FOiB7Cisg ICAgICAgICAgICBpbnQgcHJvY19pZDsKKworICAgICAgICAgICAgcmV0ID0gdmdzX3BhcnNlcl9u ZXh0X3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2VuLCAxKTsKKyAgICAgICAgICAgIGlmIChy ZXQgIT0gMCkKKyAgICAgICAgICAgICAgICBGQUlMKEVJTlZBTCk7CisKKyAgICAgICAgICAgIGlm ICghdmdzX2lzX3ZhbGlkX2lkZW50aWZpZXIoJnRva2VuKSkgeworICAgICAgICAgICAgICAgIHZn c19sb2dfaW52YWxpZF90b2tlbihsb2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwgIkludmFsaWQgcHJv Y2VkdXJlIG5hbWUuIik7CisgICAgICAgICAgICAgICAgRkFJTChFSU5WQUwpOworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAvLyBVc2UgdGhlIGluZGV4IGluIHRoZSBhcnJheSBhcyB0aGUg aWRlbnRpZmllciBvZiB0aGUgbmFtZS4KKworICAgICAgICAgICAgZm9yIChwcm9jX2lkID0gMDsg cHJvY19pZCA8IHBhcnNlci0+cHJvY19uYW1lc19jb3VudDsgcHJvY19pZCsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKHZnc190b2tlbl9pc19zdHJpbmcoJnRva2VuLCBwYXJzZXItPnByb2NfbmFt ZXNbcHJvY19pZF0pKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgaWYgKHByb2NfaWQgPT0gcGFyc2VyLT5wcm9jX25hbWVzX2NvdW50KSB7 CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGF2X3N0cm5kdXAodG9rZW4ubGV4 ZW1lLCB0b2tlbi5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnIgPSBh dl9keW5hcnJheTJfYWRkKAorICAgICAgICAgICAgICAgICAgICAodm9pZCopJnBhcnNlci0+cHJv Y19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+cHJvY19uYW1lc19jb3VudCwK KyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAo dm9pZCopJm5hbWUKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgaWYgKHIg PT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBhdl9mcmVlcCgmbmFtZSk7CisgICAgICAg ICAgICAgICAgICAgIEZBSUwoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGFyZy50eXBlID0gQVJHX1BST0NFRFVSRV9JRDsKKyAgICAgICAg ICAgIGFyZy5wcm9jX2lkID0gcHJvY19pZDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKworICAgICAgICBjYXNlIFBBUkFNX1JBV19JREVOVDoKKyAgICAgICAgICAgIHJldCA9IHZn c19wYXJzZXJfbmV4dF90b2tlbihsb2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwgMSk7CisgICAgICAg ICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICAgICAgRkFJTChFSU5WQUwpOworCisgICAg ICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVE9LRU5fTElU RVJBTDoKKyAgICAgICAgICAgIGNhc2UgVE9LRU5fV09SRDoKKyAgICAgICAgICAgICAgICBhcmcu dHlwZSA9IEFSR19NRVRBREFUQTsKKyAgICAgICAgICAgICAgICBhcmcubWV0YWRhdGEgPSBhdl9z dHJuZHVwKHRva2VuLmxleGVtZSwgdG9rZW4ubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB2Z3NfbG9nX2ludmFs aWRfdG9rZW4obG9nX2N0eCwgcGFyc2VyLCAmdG9rZW4sICJFeHBlY3RlZCAneycuIik7CisgICAg ICAgICAgICAgICAgRkFJTChFSU5WQUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICBjYXNlIFBBUkFNX1NVQlBST0dSQU06CisgICAgICAgICAgICByZXQg PSB2Z3NfcGFyc2VyX25leHRfdG9rZW4obG9nX2N0eCwgcGFyc2VyLCAmdG9rZW4sIDEpOworICAg ICAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICAgICAgICAgIEZBSUwoRUlOVkFMKTsKKwor ICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gVE9LRU5fTEVGVF9CUkFDS0VUKSB7CisgICAg ICAgICAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2Vu LCAiRXhwZWN0ZWQgJ3snLiIpOworICAgICAgICAgICAgICAgIEZBSUwoRUlOVkFMKTsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgYXJnLnR5cGUgPSBBUkdfU1VCUFJPR1JBTTsKKyAgICAg ICAgICAgIGFyZy5zdWJwcm9ncmFtID0gYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IFZHU1Byb2dy YW0pKTsKKworICAgICAgICAgICAgcmV0ID0gdmdzX3BhcnNlKGxvZ19jdHgsIHBhcnNlciwgYXJn LnN1YnByb2dyYW0sIDEpOworICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAg ICAgICAgYXZfZnJlZXAoJmFyZy5zdWJwcm9ncmFtKTsKKyAgICAgICAgICAgICAgICBGQUlMKEVJ TlZBTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh c2UgUEFSQU1fUFJPQ19QQVJBTVM6CisgICAgICAgICAgICByZXQgPSB2Z3NfcGFyc2VyX25leHRf dG9rZW4obG9nX2N0eCwgcGFyc2VyLCAmdG9rZW4sIDApOworICAgICAgICAgICAgaWYgKHJldCAh PSAwKQorICAgICAgICAgICAgICAgIEZBSUwoRUlOVkFMKTsKKworICAgICAgICAgICAgaWYgKHRv a2VuLnR5cGUgPT0gVE9LRU5fV09SRCAmJiBwcm9jX2FyZ3NfY291bnQrKyA+PSBNQVhfUFJPQ19B UkdTKSB7CisgICAgICAgICAgICAgICAgdmdzX2xvZ19pbnZhbGlkX3Rva2VuKGxvZ19jdHgsIHBh cnNlciwgJnRva2VuLAorICAgICAgICAgICAgICAgICAgICAiVG9vIG1hbnkgcGFyYW1ldGVycy4g TGltaXQgaXMgJWQiLCBNQVhfUFJPQ19BUkdTKTsKKyAgICAgICAgICAgICAgICBGQUlMKEVJTlZB TCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9IFRPS0VO X1dPUkQpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBtb3JlIHZhcmlhYmxlcy4gSnVtcCB0byBu ZXh0IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICBwYXJhbSsrOworICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAq LworCisgICAgICAgIGNhc2UgUEFSQU1fVkFSX05BTUU6IHsKKyAgICAgICAgICAgIGludCB2YXJf aWR4ID0gLTE7CisKKyAgICAgICAgICAgIHJldCA9IHZnc19wYXJzZXJfbmV4dF90b2tlbihsb2df Y3R4LCBwYXJzZXIsICZ0b2tlbiwgMSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IDApCisgICAg ICAgICAgICAgICAgRkFJTChFSU5WQUwpOworCisgICAgICAgICAgICAvLyBGaW5kIHRoZSBzbG90 IHdoZXJlIHRoZSB2YXJpYWJsZSBpcyBhbGxvY2F0ZWQsIG9yIHRoZSBuZXh0CisgICAgICAgICAg ICAvLyBhdmFpbGFibGUgc2xvdCBpZiBpdCBpcyBhIG5ldyB2YXJpYWJsZS4KKyAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgVkFSX0NPVU5UOyBpKyspIHsKKyAgICAgICAgICAgICAgICBp ZiAocGFyc2VyLT52YXJfbmFtZXNbaV0gPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICB8fCB2 Z3NfdG9rZW5faXNfc3RyaW5nKCZ0b2tlbiwgcGFyc2VyLT52YXJfbmFtZXNbaV0pCisgICAgICAg ICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcl9pZHggPSBpOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIC8vIE5vIGZyZWUgc2xvdHMgdG8gYWxsb2NhdGUgbmV3IHZhcmlhYmxlcy4KKyAg ICAgICAgICAgIGlmICh2YXJfaWR4ID09IC0xKSB7CisgICAgICAgICAgICAgICAgdmdzX2xvZ19p bnZhbGlkX3Rva2VuKGxvZ19jdHgsIHBhcnNlciwgJnRva2VuLAorICAgICAgICAgICAgICAgICAg ICAiVG9vIG1hbnkgdXNlciB2YXJpYWJsZXMuIENhbiBkZWZpbmUgdXAgdG8gJWQgdmFyaWFibGVz LiIsIFVTRVJfVkFSX0NPVU5UKTsKKyAgICAgICAgICAgICAgICBGQUlMKEUyQklHKTsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhlIGluZGV4IGlzIGJlZm9yZSBgVkFSX1Uw YCwgdGhlIG5hbWUgaXMgYWxyZWFkeSB0YWtlbiBieQorICAgICAgICAgICAgLy8gYSBkZWZhdWx0 IHZhcmlhYmxlLgorICAgICAgICAgICAgaWYgKHZhcl9pZHggPCBWQVJfVTApIHsKKyAgICAgICAg ICAgICAgICB2Z3NfbG9nX2ludmFsaWRfdG9rZW4obG9nX2N0eCwgcGFyc2VyLCAmdG9rZW4sICJS ZXNlcnZlZCB2YXJpYWJsZSBuYW1lLiIpOworICAgICAgICAgICAgICAgIEZBSUwoRUlOVkFMKTsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0byBhbGxvY2F0ZSBhIG5ldyB2 YXJpYWJsZS4KKyAgICAgICAgICAgIGlmIChwYXJzZXItPnZhcl9uYW1lc1t2YXJfaWR4XSA9PSBO VUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCF2Z3NfaXNfdmFsaWRfaWRlbnRpZmllcigmdG9r ZW4pKSB7CisgICAgICAgICAgICAgICAgICAgIHZnc19sb2dfaW52YWxpZF90b2tlbihsb2dfY3R4 LCBwYXJzZXIsICZ0b2tlbiwgIkludmFsaWQgdmFyaWFibGUgbmFtZS4iKTsKKyAgICAgICAgICAg ICAgICAgICAgRkFJTChFSU5WQUwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIHBhcnNlci0+dmFyX25hbWVzW3Zhcl9pZHhdID0gYXZfc3RybmR1cCh0b2tlbi5sZXhlbWUs IHRva2VuLmxlbmd0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFyZy50eXBlID0g QVJHX0NPTlNUOworICAgICAgICAgICAgYXJnLmNvbnN0YW50ID0gdmFyX2lkeDsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGF2 X2Fzc2VydDAoMCk7IC8qIHVucmVhY2hhYmxlICovCisgICAgICAgIH0KKworICAgICAgICByID0g YXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICh2b2lkKikmc3RhdGVtZW50LmFyZ3MsCisg ICAgICAgICAgICAmc3RhdGVtZW50LmFyZ3NfY291bnQsCisgICAgICAgICAgICBzaXplb2YoYXJn KSwKKyAgICAgICAgICAgICh2b2lkKikmYXJnCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKHIg PT0gTlVMTCkKKyAgICAgICAgICAgIEZBSUwoRU5PTUVNKTsKKworICAgICAgICBzd2l0Y2ggKHBh cmFtLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFBBUkFNX1BST0NfQVJHUzoKKyAgICAgICAg ICAgIGNhc2UgUEFSQU1fUFJPQ19QQVJBTVM6CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdXBk YXRlIHBhcmFtcy4KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgICAgICBwYXJhbSsrOworICAgICAgICB9CisgICAgfQorCisgICAgI3Vu ZGVmIEZBSUwKK30KKworc3RhdGljIHZvaWQgdmdzX3BhcnNlcl9pbml0KHN0cnVjdCBWR1NQYXJz ZXIgKnBhcnNlciwgY29uc3QgY2hhciAqc291cmNlKSB7CisgICAgcGFyc2VyLT5zb3VyY2UgPSBz b3VyY2U7CisgICAgcGFyc2VyLT5jdXJzb3IgPSAwOworCisgICAgcGFyc2VyLT5wcm9jX25hbWVz ID0gTlVMTDsKKyAgICBwYXJzZXItPnByb2NfbmFtZXNfY291bnQgPSAwOworCisgICAgbWVtc2V0 KHBhcnNlci0+dmFyX25hbWVzLCAwLCBzaXplb2YocGFyc2VyLT52YXJfbmFtZXMpKTsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IFZBUl9VMDsgaSsrKQorICAgICAgICBwYXJzZXItPnZhcl9uYW1l c1tpXSA9IHZnc19kZWZhdWx0X3ZhcnNbaV07Cit9CisKK3N0YXRpYyB2b2lkIHZnc19wYXJzZXJf ZnJlZShzdHJ1Y3QgVkdTUGFyc2VyICpwYXJzZXIpIHsKKyAgICBmb3IgKGludCBpID0gVkFSX1Uw OyBpIDwgVkFSX0NPVU5UOyBpKyspCisgICAgICAgIGlmIChwYXJzZXItPnZhcl9uYW1lc1tpXSAh PSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZXAoJnBhcnNlci0+dmFyX25hbWVzW2ldKTsKKwor ICAgIGlmIChwYXJzZXItPnByb2NfbmFtZXMgIT0gTlVMTCkgeworICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHBhcnNlci0+cHJvY19uYW1lc19jb3VudDsgaSsrKQorICAgICAgICAgICAgYXZf ZnJlZXAoJnBhcnNlci0+cHJvY19uYW1lc1tpXSk7CisKKyAgICAgICAgYXZfZnJlZXAoJnBhcnNl ci0+cHJvY19uYW1lcyk7CisgICAgfQorfQorCisvLy8gQnVpbGQgYSBwcm9ncmFtIGJ5IHBhcnNp bmcgYSBzY3JpcHQuCisvLy8KKy8vLyBgc3VicHJvZ3JhbWAgbXVzdCBiZSB0cnVlIHdoZW4gdGhl IGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBwYXJzZSB0aGUgYm9keSBvZgorLy8vIGEgYmxvY2sgKGxp a2UgYGlmYCBvciBgcHJvY2AgY29tbWFuZHMpLgorLy8vCisvLy8gUmV0dXJuIGAwYCBvbiBzdWNj ZXNzLCBhbmQgYSBuZWdhdGl2ZSBgQVZFUlJPUmAgY29kZSBvbiBmYWlsdXJlLgorc3RhdGljIGlu dCB2Z3NfcGFyc2UoCisgICAgdm9pZCAqbG9nX2N0eCwKKyAgICBzdHJ1Y3QgVkdTUGFyc2VyICpw YXJzZXIsCisgICAgc3RydWN0IFZHU1Byb2dyYW0gKnByb2dyYW0sCisgICAgaW50IHN1YnByb2dy YW0KKykgeworICAgIHN0cnVjdCBWR1NQYXJzZXJUb2tlbiB0b2tlbjsKKworICAgIHByb2dyYW0t PnN0YXRlbWVudHMgPSBOVUxMOworICAgIHByb2dyYW0tPnN0YXRlbWVudHNfY291bnQgPSAwOwor CisgICAgcHJvZ3JhbS0+cHJvY19uYW1lcyA9IE5VTEw7CisgICAgcHJvZ3JhbS0+cHJvY19uYW1l c19jb3VudCA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCByZXQ7CisgICAgICAg IGNvbnN0IHN0cnVjdCBWR1NDb21tYW5kU3BlYyAqY21kOworCisgICAgICAgIHJldCA9IHZnc19w YXJzZXJfbmV4dF90b2tlbihsb2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwgMSk7CisgICAgICAgIGlm IChyZXQgIT0gMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBzd2l0Y2ggKHRv a2VuLnR5cGUpIHsKKyAgICAgICAgY2FzZSBUT0tFTl9FT0Y6CisgICAgICAgICAgICBpZiAoc3Vi cHJvZ3JhbSkgeworICAgICAgICAgICAgICAgIHZnc19sb2dfaW52YWxpZF90b2tlbihsb2dfY3R4 LCBwYXJzZXIsICZ0b2tlbiwgIkV4cGVjdGVkICd9Jy4iKTsKKyAgICAgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhl IHByb2MgbmFtZXMgdG8gdGhlIG1haW4gcHJvZ3JhbS4KKyAgICAgICAgICAgICAgICBGRlNXQVAo Y29uc3QgY2hhciAqKiwgcHJvZ3JhbS0+cHJvY19uYW1lcywgcGFyc2VyLT5wcm9jX25hbWVzKTsK KyAgICAgICAgICAgICAgICBGRlNXQVAoaW50LCBwcm9ncmFtLT5wcm9jX25hbWVzX2NvdW50LCBw YXJzZXItPnByb2NfbmFtZXNfY291bnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy ZXR1cm4gMDsKKworICAgICAgICBjYXNlIFRPS0VOX1dPUkQ6CisgICAgICAgICAgICAvLyBUaGUg dG9rZW4gbXVzdCBiZSBhIHZhbGlkIGNvbW1hbmQuCisgICAgICAgICAgICBjbWQgPSB2Z3NfZ2V0 X2NvbW1hbmQodG9rZW4ubGV4ZW1lLCB0b2tlbi5sZW5ndGgpOworICAgICAgICAgICAgaWYgKGNt ZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF90b2tlbjsKKworICAgICAg ICAgICAgcmV0ID0gdmdzX3BhcnNlX3N0YXRlbWVudChsb2dfY3R4LCBwYXJzZXIsIHByb2dyYW0s IGNtZCk7CisgICAgICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICAgICAgZ290byBm YWlsOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPS0VOX1JJR0hUX0JS QUNLRVQ6CisgICAgICAgICAgICBpZiAoIXN1YnByb2dyYW0pCisgICAgICAgICAgICAgICAgZ290 byBpbnZhbGlkX3Rva2VuOworCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgZ290byBpbnZhbGlkX3Rva2VuOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIEFWRVJST1JfQlVHOyAvKiB1bnJlYWNoYWJsZSAqLworCitpbnZhbGlkX3Rv a2VuOgorICAgIHZnc19sb2dfaW52YWxpZF90b2tlbihsb2dfY3R4LCBwYXJzZXIsICZ0b2tlbiwg IkV4cGVjdGVkIGNvbW1hbmQuIik7CisKK2ZhaWw6CisgICAgdmdzX2ZyZWUocHJvZ3JhbSk7Cisg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKK30KKworLyoKKyAqID09IEludGVycHJldGVyID09 CisgKgorICogVGhlIGludGVycHJldGVyIHRha2VzIHRoZSBgVkdTUHJvZ3JhbWAgYnVpbHQgYnkg dGhlIHBhcnNlciwgYW5kIHRyYW5zbGF0ZSB0aGUKKyAqIHN0YXRlbWVudHMgdG8gY2FsbHMgdG8g Y2Fpcm8uCisgKgorICogYFZHU0V2YWxTdGF0ZWAgdHJhY2tzIHRoZSBzdGF0ZSBuZWVkZWQgdG8g ZXhlY3V0ZSBzdWNoIGNvbW1hbmRzLgorICovCisKKy8vLyBOdW1iZXIgb2YgZGlmZmVyZW50IHN0 YXRlcyBmb3IgdGhlIGByYW5kb21nYCBmdW5jdGlvbi4KKyNkZWZpbmUgUkFORE9NX1NUQVRFUyA0 CisKKy8vLyBCbG9jayBhc3NpZ25lZCB0byBhIHByb2NlZHVyZSBieSBhIGNhbGwgdG8gdGhlIGBw cm9jYCBjb21tYW5kLgorc3RydWN0IFZHU1Byb2NlZHVyZSB7CisgICAgY29uc3Qgc3RydWN0IFZH U1Byb2dyYW0gKnByb2dyYW07CisKKyAgICAvLy8gTnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50 cy4KKyAgICBpbnQgcHJvY19hcmdzX2NvdW50OworCisgICAgLy8vIFZhcmlhYmxlIGlkcyB3aGVy ZSBlYWNoIGFyZ3VtZW50IGlzIHN0b3JlZC4KKyAgICBpbnQgYXJnc1tNQVhfUFJPQ19BUkdTXTsK K307CisKK3N0cnVjdCBWR1NFdmFsU3RhdGUgeworICAgIHZvaWQgKmxvZ19jdHg7CisKKyAgICAv Ly8gQ3VycmVudCBmcmFtZS4KKyAgICBBVkZyYW1lICpmcmFtZTsKKworICAgIC8vLyBDYWlybyBj b250ZXh0IGZvciBkcmF3aW5nIG9wZXJhdGlvbnMuCisgICAgY2Fpcm9fdCAqY2Fpcm9fY3R4Owor CisgICAgLy8vIFBhdHRlcm4gYmVpbmcgYnVpbHQgYnkgY29tbWFuZHMgbGlrZSBgY29sb3JzdG9w YC4KKyAgICBjYWlyb19wYXR0ZXJuX3QgKnBhdHRlcm5fYnVpbGRlcjsKKworICAgIC8vLyBSZWdp c3RlciBpZiBgYnJlYWtgIHdhcyBjYWxsZWQgaW4gYSBzdWJwcm9ncmFtLgorICAgIGludCBpbnRl cnJ1cHRlZDsKKworICAgIC8vLyBOZXh0IGNhbGwgdG8gYFtlb11maWxsYCwgYFtlb11jbGlwYCwg b3IgYHN0cm9rZWAsIHNob3VsZCB1c2UKKyAgICAvLy8gdGhlIGBfcHJlc2VydmVgIGZ1bmN0aW9u LgorICAgIGludCBwcmVzZXJ2ZV9wYXRoOworCisgICAgLy8vIFN1YnByb2dyYW1zIGFzc29jaWF0 ZWQgdG8gZWFjaCBwcm9jZWR1cmUgaWRlbnRpZmllci4KKyAgICBzdHJ1Y3QgVkdTUHJvY2VkdXJl ICpwcm9jZWR1cmVzOworCisgICAgLy8vIFJlZmVyZW5jZSB0byB0aGUgcHJvY2VkdXJlIG5hbWVz IGluIHRoZSBgVkdTUHJvZ3JhbWAuCisgICAgY29uc3QgY2hhciAqY29uc3QgKnByb2NfbmFtZXM7 CisKKyAgICAvLy8gVmFsdWVzIGZvciB0aGUgdmFyaWFibGVzIGluIGV4cHJlc3Npb25zLgorICAg IC8vLworICAgIC8vLyBTb21lIHZhcmlhYmxlcyAobGlrZSBgY3hgIG9yIGBjeWApIGFyZSB3cml0 dGVuIGJlZm9yZQorICAgIC8vLyBleGVjdXRpbmcgZWFjaCBzdGF0ZW1lbnQuCisgICAgZG91Ymxl IHZhcnNbVkFSX0NPVU5UXTsKKworICAgIC8vLyBTdGF0ZSBmb3IgZWFjaCBpbmRleCBhdmFpbGFi bGUgZm9yIHRoZSBgcmFuZG9tZ2AgZnVuY3Rpb24uCisgICAgRkZTRkM2NCByYW5kb21fc3RhdGVb UkFORE9NX1NUQVRFU107CisKKyAgICAvLy8gRnJhbWUgbWV0YWRhdGEsIGlmIGFueS4KKyAgICBB VkRpY3Rpb25hcnkgKm1ldGFkYXRhOworCisgICAgLy8gUmVmbGVjdGVkIENvbnRyb2wgUG9pbnRz LiBVc2VkIGluIFQgYW5kIFMgY29tbWFuZHMuCisgICAgLy8KKyAgICAvLyBTZWUgaHR0cHM6Ly93 d3cudzMub3JnL1RSL1NWRy9wYXRocy5odG1sI1JlZmxlY3RlZENvbnRyb2xQb2ludHMKKyAgICBz dHJ1Y3QgeworICAgICAgICBlbnVtIHsgUkNQX05PTkUsIFJDUF9WQUxJRCwgUkNQX1VQREFURUQg fSBzdGF0dXM7CisKKyAgICAgICAgZG91YmxlIGN1YmljX3g7CisgICAgICAgIGRvdWJsZSBjdWJp Y195OworICAgICAgICBkb3VibGUgcXVhZF94OworICAgICAgICBkb3VibGUgcXVhZF95OworICAg IH0gcmNwOworfTsKKworLy8vIEZ1bmN0aW9uIGBwYXRobGVuKG4pYCBmb3IgYGF2X2V4cHJfZXZh bGAuCisvLy8KKy8vLyBDb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgcGF0aCBpbiB0 aGUgY2Fpcm8gY29udGV4dC4gSWYgYG4gPiAwYCwgaXQKKy8vLyBpcyB0aGUgbWF4aW11bSBudW1i ZXIgb2Ygc2VnbWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlIGxlbmd0aC4KK3N0YXRpYyBkb3VibGUg dmdzX2ZuX3BhdGhsZW4odm9pZCAqZGF0YSwgZG91YmxlIGFyZykgeworICAgIGlmICghaXNmaW5p dGUoYXJnKSkKKyAgICAgICAgcmV0dXJuIE5BTjsKKworICAgIGNvbnN0IHN0cnVjdCBWR1NFdmFs U3RhdGUgKnN0YXRlID0gKHN0cnVjdCBWR1NFdmFsU3RhdGUgKilkYXRhOworCisgICAgaW50IG1h eF9zZWdtZW50cyA9IChpbnQpYXJnOworCisgICAgZG91YmxlIGxteCA9IE5BTiwgbG15ID0gTkFO OyAvLyBsYXN0IG1vdmUgcG9pbnQKKyAgICBkb3VibGUgY3ggPSBOQU4sIGN5ID0gTkFOOyAgIC8v IGN1cnJlbnQgcG9pbnQuCisKKyAgICBkb3VibGUgbGVuZ3RoID0gMDsKKyAgICBjYWlyb19wYXRo X3QgKnBhdGggPSBjYWlyb19jb3B5X3BhdGhfZmxhdChzdGF0ZS0+Y2Fpcm9fY3R4KTsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aC0+bnVtX2RhdGE7IGkgKz0gcGF0aC0+ZGF0YVtpXS5o ZWFkZXIubGVuZ3RoKSB7CisgICAgICAgIGRvdWJsZSB4LCB5OworICAgICAgICBjYWlyb19wYXRo X2RhdGFfdCAqZGF0YSA9ICZwYXRoLT5kYXRhW2ldOworCisgICAgICAgIHN3aXRjaCAoZGF0YVsw XS5oZWFkZXIudHlwZSkgeworICAgICAgICBjYXNlIENBSVJPX1BBVEhfTU9WRV9UTzoKKyAgICAg ICAgICAgIGN4ID0gbG14ID0gZGF0YVsxXS5wb2ludC54OworICAgICAgICAgICAgY3kgPSBsbXkg PSBkYXRhWzFdLnBvaW50Lnk7CisKKyAgICAgICAgICAgIC8vIERvbid0IHVwZGF0ZSBgbGVuZ3Ro YC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9MSU5F X1RPOgorICAgICAgICAgICAgeCA9IGRhdGFbMV0ucG9pbnQueDsKKyAgICAgICAgICAgIHkgPSBk YXRhWzFdLnBvaW50Lnk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENBSVJP X1BBVEhfQ0xPU0VfUEFUSDoKKyAgICAgICAgICAgIHggPSBsbXg7CisgICAgICAgICAgICB5ID0g bG15OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbGVuZ3RoICs9IGh5cG90KGN4IC0geCwg Y3kgLSB5KTsKKworICAgICAgICBjeCA9IHg7CisgICAgICAgIGN5ID0geTsKKworICAgICAgICAv LyBJZiB0aGUgZnVuY3Rpb24gYXJndW1lbnQgaXMgYD4gMGAsIHVzZSBpdCBhcyBhIGxpbWl0IGZv ciBob3cKKyAgICAgICAgLy8gbWFueSBzZWdtZW50cyBhcmUgYWRkZWQgdXAuCisgICAgICAgIGlm ICgtLW1heF9zZWdtZW50cyA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg Y2Fpcm9fcGF0aF9kZXN0cm95KHBhdGgpOworCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworLy8v IEZ1bmN0aW9uIGByYW5kb21nKG4pYCBmb3IgYGF2X2V4cHJfZXZhbGAuCisvLy8KKy8vLyBDb21w dXRlIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4gU2ltaWxhciB0byBgcmFuZG9tKClg LCBidXQgdGhlCisvLy8gc3RhdGUgaXMgZ2xvYmFsIHRvIHRoZSBWR1MgcHJvZ3JhbS4KKy8vLwor Ly8vIFRoZSBsYXN0IDIgYml0cyBvZiB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUg YXJndW1lbnQgYXJlIHVzZWQKKy8vLyBhcyB0aGUgc3RhdGUgaW5kZXguIElmIHRoZSBzdGF0ZSBp cyBub3QgaW5pdGlhbGl6ZWQsIHRoZSBhcmd1bWVudCBpcworLy8vIHRoZSBzZWVkIGZvciB0aGF0 IHN0YXRlLgorc3RhdGljIGRvdWJsZSB2Z3NfZm5fcmFuZG9tZyh2b2lkICpkYXRhLCBkb3VibGUg YXJnKSB7CisgICAgaWYgKCFpc2Zpbml0ZShhcmcpKQorICAgICAgICByZXR1cm4gYXJnOworCisg ICAgc3RydWN0IFZHU0V2YWxTdGF0ZSAqc3RhdGUgPSAoc3RydWN0IFZHU0V2YWxTdGF0ZSAqKWRh dGE7CisKKyAgICBjb25zdCB1aW50NjRfdCBpYXJnID0gKHVpbnQ2NF90KWFyZzsKKyAgICBjb25z dCBpbnQgcm5nX2lkeCA9IGlhcmcgJSBGRl9BUlJBWV9FTEVNUyhzdGF0ZS0+cmFuZG9tX3N0YXRl KTsKKworICAgIEZGU0ZDNjQgKnJuZyA9ICZzdGF0ZS0+cmFuZG9tX3N0YXRlW3JuZ19pZHhdOwor CisgICAgaWYgKHJuZy0+Y291bnRlciA9PSAwKQorICAgICAgICBmZl9zZmM2NF9pbml0KHJuZywg aWFyZywgaWFyZywgaWFyZywgMTIpOworCisgICAgcmV0dXJuIGZmX3NmYzY0X2dldChybmcpICog KDEuMCAvIFVJTlQ2NF9NQVgpOworfQorCisvLy8gRnVuY3Rpb24gYHAoeCwgeSlgIGZvciBgYXZf ZXhwcl9ldmFsYC4KKy8vLworLy8vIFJldHVybiB0aGUgcGl4ZWwgY29sb3IgaW4gMHhSUkdHQkJB QSBmb3JtYXQuCisvLy8KKy8vLyBUaGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGlzIGFwcGxpZWQg dG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgorLy8vCisvLy8gSWYgdGhlIGNvb3JkaW5hdGVzIGFy ZSBvdXRzaWRlIHRoZSBmcmFtZSwgcmV0dXJuIE5BTi4KK3N0YXRpYyBkb3VibGUgdmdzX2ZuX3Ao dm9pZCogZGF0YSwgZG91YmxlIHgwLCBkb3VibGUgeTApIHsKKyAgICBjb25zdCBzdHJ1Y3QgVkdT RXZhbFN0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgVkdTRXZhbFN0YXRlICopZGF0YTsKKyAgICBjb25z dCBBVkZyYW1lICpmcmFtZSA9IHN0YXRlLT5mcmFtZTsKKworICAgIGlmIChmcmFtZSA9PSBOVUxM IHx8ICFpc2Zpbml0ZSh4MCkgfHwgIWlzZmluaXRlKHkwKSkKKyAgICAgICAgcmV0dXJuIE5BTjsK KworICAgIGNhaXJvX3VzZXJfdG9fZGV2aWNlKHN0YXRlLT5jYWlyb19jdHgsICZ4MCwgJnkwKTsK KworICAgIGNvbnN0IGludCB4ID0gKGludCl4MDsKKyAgICBjb25zdCBpbnQgeSA9IChpbnQpeTA7 CisKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDAgfHwgeCA+PSBmcmFtZS0+d2lkdGggfHwgeSA+PSBm cmFtZS0+aGVpZ2h0KQorICAgICAgICByZXR1cm4gTkFOOworCisgICAgY29uc3QgQVZQaXhGbXRE ZXNjcmlwdG9yICpkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChmcmFtZS0+Zm9ybWF0KTsKKwor ICAgIHVpbnQzMl90IGNvbG9yWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKKworICAgIGZvciAoaW50 IGMgPSAwOyBjIDwgZGVzYy0+bmJfY29tcG9uZW50czsgYysrKSB7CisgICAgICAgIHVpbnQzMl90 IHBpeGVsOworICAgICAgICBjb25zdCBpbnQgZGVwdGggPSBkZXNjLT5jb21wW2NdLmRlcHRoOwor CisgICAgICAgIGF2X3JlYWRfaW1hZ2VfbGluZTIoCisgICAgICAgICAgICAmcGl4ZWwsCisgICAg ICAgICAgICAodm9pZCopZnJhbWUtPmRhdGEsCisgICAgICAgICAgICBmcmFtZS0+bGluZXNpemUs CisgICAgICAgICAgICBkZXNjLAorICAgICAgICAgICAgeCwgeSwKKyAgICAgICAgICAgIGMsCisg ICAgICAgICAgICAxLCAvLyB3aWR0aAorICAgICAgICAgICAgMCwgLy8gcmVhZF9wYWxfY29tcG9u ZW50CisgICAgICAgICAgICA0ICAvLyBkc3RfZWxlbWVudF9zaXplCisgICAgICAgICk7CisKKyAg ICAgICAgaWYgKGRlcHRoICE9IDgpIHsKKyAgICAgICAgICAgIHBpeGVsID0gcGl4ZWwgKiAyNTUg LyAoKDEgPDwgZGVwdGgpIC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBjb2xvcltjXSA9IHBp eGVsOworICAgIH0KKworICAgIHJldHVybiBjb2xvclswXSA8PCAyNCB8IGNvbG9yWzFdIDw8IDE2 IHwgY29sb3JbMl0gPDwgOCB8IGNvbG9yWzNdOworfQorCitzdGF0aWMgdm9pZCB2Z3NfZXZhbF9z dGF0ZV9pbml0KAorICAgIHN0cnVjdCBWR1NFdmFsU3RhdGUgKnN0YXRlLAorICAgIGNvbnN0IHN0 cnVjdCBWR1NQcm9ncmFtICpwcm9ncmFtLAorICAgIHZvaWQgKmxvZ19jdHgsCisgICAgQVZGcmFt ZSAqZnJhbWUKKykgeworICAgIG1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCisg ICAgc3RhdGUtPmxvZ19jdHggPSBsb2dfY3R4OworICAgIHN0YXRlLT5mcmFtZSA9IGZyYW1lOwor ICAgIHN0YXRlLT5yY3Auc3RhdHVzID0gUkNQX05PTkU7CisKKyAgICBpZiAocHJvZ3JhbS0+cHJv Y19uYW1lcyAhPSBOVUxMKSB7CisgICAgICAgIHN0YXRlLT5wcm9jZWR1cmVzID0gYXZfY2FsbG9j KHNpemVvZihzdHJ1Y3QgVkdTUHJvY2VkdXJlKSwgcHJvZ3JhbS0+cHJvY19uYW1lc19jb3VudCk7 CisgICAgICAgIHN0YXRlLT5wcm9jX25hbWVzID0gcHJvZ3JhbS0+cHJvY19uYW1lczsKKyAgICB9 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBUl9DT1VOVDsgaSsrKQorICAgICAgICBzdGF0 ZS0+dmFyc1tpXSA9IE5BTjsKK30KKworc3RhdGljIHZvaWQgdmdzX2V2YWxfc3RhdGVfZnJlZShz dHJ1Y3QgVkdTRXZhbFN0YXRlICpzdGF0ZSkgeworICAgIGlmIChzdGF0ZS0+cGF0dGVybl9idWls ZGVyICE9IE5VTEwpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShzdGF0ZS0+cGF0dGVy bl9idWlsZGVyKTsKKworICAgIGlmIChzdGF0ZS0+cHJvY2VkdXJlcyAhPSBOVUxMKQorICAgICAg ICBhdl9mcmVlKHN0YXRlLT5wcm9jZWR1cmVzKTsKKworICAgIG1lbXNldChzdGF0ZSwgMCwgc2l6 ZW9mKCpzdGF0ZSkpOworfQorCisvLy8gRHJhdyBhbiBlbGxpcHNlLiBgeGAvYHlgIHNwZWNpZmll cyB0aGUgY2VudGVyLCBhbmQgYHJ4YC9gcnlgIHRoZSByYWRpdXMgb2YKKy8vLyB0aGUgZWxsaXBz ZSBvbiB0aGUgeC95IGF4aXMuCisvLy8KKy8vLyBDYWlybyBkb2VzIG5vdCBwcm92aWRlIGEgbmF0 aXZlIHdheSB0byBjcmVhdGUgYW4gZWxsaXBzZSwgYnV0IGl0IGNhbiBiZSBkb25lCisvLy8gYnkg c2NhbGluZyB0aGUgWSBheGlzIHdpdGggdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KK3N0YXRp YyB2b2lkIGRyYXdfZWxsaXBzZShjYWlyb190ICpjLCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs ZSByeCwgZG91YmxlIHJ5KSB7CisgICAgY2Fpcm9fc2F2ZShjKTsKKyAgICBjYWlyb190cmFuc2xh dGUoYywgeCwgeSk7CisKKyAgICBpZiAocnggIT0gcnkpCisgICAgICAgIGNhaXJvX3NjYWxlKGMs IDEsIHJ5IC8gcngpOworCisgICAgY2Fpcm9fbmV3X3N1Yl9wYXRoKGMpOworICAgIGNhaXJvX2Fy YyhjLCAwLCAwLCByeCwgMCwgMiAqIE1fUEkpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoYyk7Cisg ICAgY2Fpcm9fbmV3X3N1Yl9wYXRoKGMpOworCisgICAgY2Fpcm9fcmVzdG9yZShjKTsKK30KKwor Ly8vIERyYXcgYSBxdWFkcmF0aWMgYmV6aWVyIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgdG8gYHgs IHlgLCBUaGUgY29udHJvbCBwb2ludAorLy8vIGlzIHNwZWNpZmllZCBieSBgeDEsIHkxYC4KKy8v LworLy8vIElmIHRoZSBjb250cm9sIHBvaW50IGlzIE5BTiwgdXNlIHRoZSByZWZsZWN0ZWQgcG9p bnQuCisvLy8KKy8vLyBjYWlybyBvbmx5IHN1cHBvcnRzIGN1YmljIGN1dmVycywgc28gY29udHJv bCBwb2ludHMgbXVzdCBiZSBhZGp1c3RlZCB0bworLy8vIHNpbXVsYXRlIHRoZSBiZWhhdmlvdXIg aW4gU1ZHLgorc3RhdGljIHZvaWQgZHJhd19xdWFkX2N1cnZlX3RvKAorICAgIHN0cnVjdCBWR1NF dmFsU3RhdGUgKnN0YXRlLAorICAgIGludCByZWxhdGl2ZSwKKyAgICBkb3VibGUgeDEsCisgICAg ZG91YmxlIHkxLAorICAgIGRvdWJsZSB4LAorICAgIGRvdWJsZSB5CispIHsKKyAgICBkb3VibGUg eDAgPSAwLCB5MCA9IDA7ICAvLyBDdXJyZW50IHBvaW50LgorICAgIGRvdWJsZSB4YSwgeWEsIHhi LCB5YjsgIC8vIENvbnRyb2wgcG9pbnRzIGZvciB0aGUgY3ViaWMgY3VydmUuCisKKyAgICBjb25z dCBpbnQgdXNlX3JlZmxlY3RlZCA9IGlzbmFuKHgxKTsKKworICAgIGNhaXJvX2dldF9jdXJyZW50 X3BvaW50KHN0YXRlLT5jYWlyb19jdHgsICZ4MCwgJnkwKTsKKworICAgIGlmIChyZWxhdGl2ZSkg eworICAgICAgICBpZiAoIXVzZV9yZWZsZWN0ZWQpIHsKKyAgICAgICAgICAgIHgxICs9IHgwOwor ICAgICAgICAgICAgeTEgKz0geTA7CisgICAgICAgIH0KKworICAgICAgICB4ICs9IHgwOworICAg ICAgICB5ICs9IHkwOworICAgIH0KKworICAgIGlmICh1c2VfcmVmbGVjdGVkKSB7CisgICAgICAg IGlmIChzdGF0ZS0+cmNwLnN0YXR1cyAhPSBSQ1BfTk9ORSkgeworICAgICAgICAgICAgeDEgPSBz dGF0ZS0+cmNwLnF1YWRfeDsKKyAgICAgICAgICAgIHkxID0gc3RhdGUtPnJjcC5xdWFkX3k7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4MSA9IHgwOworICAgICAgICAgICAgeTEgPSB5 MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHhhID0gKHgwICsgMiAqIHgxKSAvIDM7CisgICAg eWEgPSAoeTAgKyAyICogeTEpIC8gMzsKKyAgICB4YiA9ICh4ICsgMiAqIHgxKSAvIDM7CisgICAg eWIgPSAoeSArIDIgKiB5MSkgLyAzOworICAgIGNhaXJvX2N1cnZlX3RvKHN0YXRlLT5jYWlyb19j dHgsIHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKKworICAgIHN0YXRlLT5yY3Auc3RhdHVzID0gUkNQ X1VQREFURUQ7CisgICAgc3RhdGUtPnJjcC5jdWJpY194ID0geDE7CisgICAgc3RhdGUtPnJjcC5j dWJpY195ID0geTE7CisgICAgc3RhdGUtPnJjcC5xdWFkX3ggPSAyICogeCAtIHgxOworICAgIHN0 YXRlLT5yY3AucXVhZF95ID0gMiAqIHkgLSB5MTsKK30KKworLy8vIFNpbWlsYXIgdG8gcXVhZF9j dXJ2ZV90bywgYnV0IGZvciBjdWJpYyBjdXJ2ZXMuCitzdGF0aWMgdm9pZCBkcmF3X2N1YmljX2N1 cnZlX3RvKAorICAgIHN0cnVjdCBWR1NFdmFsU3RhdGUgKnN0YXRlLAorICAgIGludCByZWxhdGl2 ZSwKKyAgICBkb3VibGUgeDEsCisgICAgZG91YmxlIHkxLAorICAgIGRvdWJsZSB4MiwKKyAgICBk b3VibGUgeTIsCisgICAgZG91YmxlIHgsCisgICAgZG91YmxlIHkKKykgeworICAgIGRvdWJsZSB4 MCA9IDAsIHkwID0gMDsgLy8gQ3VycmVudCBwb2ludC4KKworICAgIGNvbnN0IGludCB1c2VfcmVm bGVjdGVkID0gaXNuYW4oeDEpOworCisgICAgY2Fpcm9fZ2V0X2N1cnJlbnRfcG9pbnQoc3RhdGUt PmNhaXJvX2N0eCwgJngwLCAmeTApOworCisgICAgaWYgKHJlbGF0aXZlKSB7CisgICAgICAgIGlm ICghdXNlX3JlZmxlY3RlZCkgeworICAgICAgICAgICAgeDEgKz0geDA7CisgICAgICAgICAgICB5 MSArPSB5MDsKKyAgICAgICAgfQorCisgICAgICAgIHggKz0geDA7CisgICAgICAgIHkgKz0geTA7 CisgICAgICAgIHgyICs9IHgwOworICAgICAgICB5MiArPSB5MDsKKyAgICB9CisKKyAgICBpZiAo dXNlX3JlZmxlY3RlZCkgeworICAgICAgICBpZiAoc3RhdGUtPnJjcC5zdGF0dXMgIT0gUkNQX05P TkUpIHsKKyAgICAgICAgICAgIHgxID0gc3RhdGUtPnJjcC5jdWJpY194OworICAgICAgICAgICAg eTEgPSBzdGF0ZS0+cmNwLmN1YmljX3k7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4 MSA9IHgwOworICAgICAgICAgICAgeTEgPSB5MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNh aXJvX2N1cnZlX3RvKHN0YXRlLT5jYWlyb19jdHgsIHgxLCB5MSwgeDIsIHkyLCB4LCB5KTsKKwor ICAgIHN0YXRlLT5yY3Auc3RhdHVzID0gUkNQX1VQREFURUQ7CisgICAgc3RhdGUtPnJjcC5jdWJp Y194ID0gMiAqIHggLSB4MjsKKyAgICBzdGF0ZS0+cmNwLmN1YmljX3kgPSAyICogeSAtIHkyOwor ICAgIHN0YXRlLT5yY3AucXVhZF94ID0geDI7CisgICAgc3RhdGUtPnJjcC5xdWFkX3kgPSB5MjsK K30KKworc3RhdGljIHZvaWQgZHJhd19yb3VuZGVkX3JlY3QoCisgICAgY2Fpcm9fdCAqYywKKyAg ICBkb3VibGUgeCwKKyAgICBkb3VibGUgeSwKKyAgICBkb3VibGUgd2lkdGgsCisgICAgZG91Ymxl IGhlaWdodCwKKyAgICBkb3VibGUgcmFkaXVzCispIHsKKyAgICByYWRpdXMgPSBhdl9jbGlwZChy YWRpdXMsIDAsIEZGTUlOKGhlaWdodCAvIDIsIHdpZHRoIC8gMikpOworCisgICAgY2Fpcm9fbmV3 X3N1Yl9wYXRoKGMpOworICAgIGNhaXJvX2FyYyhjLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCBy YWRpdXMsIE1fUEksIDMgKiBNX1BJIC8gMik7CisgICAgY2Fpcm9fYXJjKGMsIHggKyB3aWR0aCAt IHJhZGl1cywgeSArIHJhZGl1cywgcmFkaXVzLCAzICogTV9QSSAvIDIsIDIgKiBNX1BJKTsKKyAg ICBjYWlyb19hcmMoYywgeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCBy YWRpdXMsIDAsIE1fUEkgLyAyKTsKKyAgICBjYWlyb19hcmMoYywgeCArIHJhZGl1cywgeSArIGhl aWdodCAtIHJhZGl1cywgcmFkaXVzLCBNX1BJIC8gMiwgTV9QSSk7CisgICAgY2Fpcm9fY2xvc2Vf cGF0aChjKTsKK30KKworc3RhdGljIHZvaWQgaHNsMnJnYigKKyAgICBkb3VibGUgaCwKKyAgICBk b3VibGUgcywKKyAgICBkb3VibGUgbCwKKyAgICBkb3VibGUgKnByLAorICAgIGRvdWJsZSAqcGcs CisgICAgZG91YmxlICpwYgorKSB7CisgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dp a2kvSFNMX2FuZF9IU1YjSFNMX3RvX1JHQgorCisgICAgZG91YmxlIHIsIGcsIGIsIGNocm9tYSwg eCwgaDE7CisKKyAgICBpZiAoaCA8IDAgfHwgaCA+PSAzNjApCisgICAgICAgIGggPSBmbW9kKEZG TUFYKGgsIDApLCAzNjApOworCisgICAgcyA9IGF2X2NsaXBkKHMsIDAsIDEpOworICAgIGwgPSBh dl9jbGlwZChsLCAwLCAxKTsKKworICAgIGNocm9tYSA9ICgxIC0gZmFicygyICogbCAtIDEpKSAq IHM7CisgICAgaDEgPSBoIC8gNjA7CisgICAgeCA9IGNocm9tYSAqICgxIC0gZmFicyhmbW9kKGgx LCAyKSAtIDEpKTsKKworICAgIHN3aXRjaCAoKGludClmbG9vcihoMSkpIHsKKyAgICBjYXNlIDA6 CisgICAgICAgIHIgPSBjaHJvbWE7CisgICAgICAgIGcgPSB4OworICAgICAgICBiID0gMDsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgIHIgPSB4OworICAgICAgICBnID0g Y2hyb21hOworICAgICAgICBiID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6Cisg ICAgICAgIHIgPSAwOworICAgICAgICBnID0gY2hyb21hOworICAgICAgICBiID0geDsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICAgIHIgPSAwOworICAgICAgICBnID0geDsK KyAgICAgICAgYiA9IGNocm9tYTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDQ6CisgICAg ICAgIHIgPSB4OworICAgICAgICBnID0gMDsKKyAgICAgICAgYiA9IGNocm9tYTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByID0gY2hyb21hOworICAgICAgICBnID0g MDsKKyAgICAgICAgYiA9IHg7CisgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgeCA9IGwg LSBjaHJvbWEgLyAyOworCisgICAgKnByID0gciArIHg7CisgICAgKnBnID0gZyArIHg7CisgICAg KnBiID0gYiArIHg7Cit9CisKKy8vLyBJbnRlcnByZXRlciBmb3IgYFZHU1Byb2dyYW1gLgorLy8v CisvLy8gSXRzIGltcGxlbWVudGF0aW9uIGlzIGEgc2ltcGxlIHN3aXRjaC1iYXNlZCBkaXNwYXRj aC4KKy8vLworLy8vIFRvIGV2YWx1YXRlIGJsb2NrcyAobGlrZSBgaWZgIG9yIGBjYWxsYCksIGl0 IG1ha2VzIGEgcmVjdXJzaXZlIGNhbGwgd2l0aAorLy8vIHRoZSBzdWJwcm9ncmFtIGFsbG9jYXRl ZCB0byB0aGUgYmxvY2suCitzdGF0aWMgaW50IHZnc19ldmFsKAorICAgIHN0cnVjdCBWR1NFdmFs U3RhdGUgKnN0YXRlLAorICAgIGNvbnN0IHN0cnVjdCBWR1NQcm9ncmFtICpwcm9ncmFtCispIHsK KworICAgICNkZWZpbmUgQVNTRVJUX0FSR1MobikgYXZfYXNzZXJ0MChzdGF0ZW1lbnQtPmFyZ3Nf Y291bnQgPT0gbikKKworICAgIC8vIFdoZW4gYHByZXNlcnZlYCBpcyB1c2VkLCB0aGUgbmV4dCBj YWxsIHRvIGBjbGlwYCwgYGZpbGxgLCBvciBgc3Ryb2tlYAorICAgIC8vIHVzZXMgdGhlIGBjYWly b18uLi5fcHJlc2VydmVgIGZ1bmN0aW9uLgorICAgICNkZWZpbmUgTUFZX1BSRVNFUlZFKGZ1bmNu YW1lKSBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgaWYgKHN0YXRlLT5wcmVzZXJ2ZV9wYXRoKSB7ICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJlc2VydmVfcGF0aCA9IDA7ICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgZnVuY25hbWUjI19wcmVzZXJ2ZShzdGF0ZS0+Y2Fp cm9fY3R4KTsgXAorICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmdW5jbmFtZShzdGF0ZS0+Y2Fpcm9fY3R4KTsg ICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApCisKKyAgICBkb3VibGUgbnVtZXJpY3Nb TUFYX0NPTU1BTkRfUEFSQU1TXTsKKyAgICBkb3VibGUgY29sb3JzW01BWF9DT01NQU5EX1BBUkFN U11bNF07CisKKyAgICBkb3VibGUgY3gsIGN5OyAvLyBDdXJyZW50IHBvaW50LgorCisgICAgaW50 IHJlbGF0aXZlOworCisgICAgZm9yIChpbnQgc3RfbnVtYmVyID0gMDsgc3RfbnVtYmVyIDwgcHJv Z3JhbS0+c3RhdGVtZW50c19jb3VudDsgc3RfbnVtYmVyKyspIHsKKyAgICAgICAgY29uc3Qgc3Ry dWN0IFZHU1N0YXRlbWVudCAqc3RhdGVtZW50ID0gJnByb2dyYW0tPnN0YXRlbWVudHNbc3RfbnVt YmVyXTsKKworICAgICAgICBpZiAoc3RhdGVtZW50LT5hcmdzX2NvdW50ID4gRkZfQVJSQVlfRUxF TVMobnVtZXJpY3MpKSB7CisgICAgICAgICAgICBhdl9sb2coc3RhdGUtPmxvZ19jdHgsIEFWX0xP R19FUlJPUiwgIlRvbyBtYW55IGFyZ3VtZW50cyAoJWQpLlxuIiwgc3RhdGVtZW50LT5hcmdzX2Nv dW50KTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0JVRzsKKyAgICAgICAgfQorCisgICAg ICAgIGlmIChjYWlyb19oYXNfY3VycmVudF9wb2ludChzdGF0ZS0+Y2Fpcm9fY3R4KSkgeworICAg ICAgICAgICAgY2Fpcm9fZ2V0X2N1cnJlbnRfcG9pbnQoc3RhdGUtPmNhaXJvX2N0eCwgJmN4LCAm Y3kpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3ggPSBOQU47CisgICAgICAgICAg ICBjeSA9IE5BTjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLT52YXJzW1ZBUl9DWF0gPSBj eDsKKyAgICAgICAgc3RhdGUtPnZhcnNbVkFSX0NZXSA9IGN5OworCisgICAgICAgIC8vIENvbXB1 dGUgYXJndW1lbnRzLgorICAgICAgICBmb3IgKGludCBhcmcgPSAwOyBhcmcgPCBzdGF0ZW1lbnQt PmFyZ3NfY291bnQ7IGFyZysrKSB7CisgICAgICAgICAgICB1aW50OF90IGNvbG9yWzRdOworCisg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgVkdTQXJndW1lbnQgKmEgPSAmc3RhdGVtZW50LT5hcmdz W2FyZ107CisKKyAgICAgICAgICAgIHN3aXRjaCAoYS0+dHlwZSkgeworICAgICAgICAgICAgY2Fz ZSBBUkdfQ09MT1I6CisgICAgICAgICAgICBjYXNlIEFSR19DT0xPUl9WQVI6CisgICAgICAgICAg ICAgICAgaWYgKGEtPnR5cGUgPT0gQVJHX0NPTE9SKSB7CisgICAgICAgICAgICAgICAgICAgIG1l bWNweShjb2xvciwgYS0+Y29sb3IsIHNpemVvZihjb2xvcikpOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGMgPSBhdl9iZTJuZTMyKCh1aW50 MzJfdClzdGF0ZS0+dmFyc1thLT52YXJpYWJsZV0pOworICAgICAgICAgICAgICAgICAgICBtZW1j cHkoY29sb3IsICZjLCBzaXplb2YoY29sb3IpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICBjb2xvcnNbYXJnXVswXSA9IChkb3VibGUpKGNvbG9yWzBdKSAvIDI1NS4wLAor ICAgICAgICAgICAgICAgIGNvbG9yc1thcmddWzFdID0gKGRvdWJsZSkoY29sb3JbMV0pIC8gMjU1 LjAsCisgICAgICAgICAgICAgICAgY29sb3JzW2FyZ11bMl0gPSAoZG91YmxlKShjb2xvclsyXSkg LyAyNTUuMCwKKyAgICAgICAgICAgICAgICBjb2xvcnNbYXJnXVszXSA9IChkb3VibGUpKGNvbG9y WzNdKSAvIDI1NS4wOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl IEFSR19FWFBSOgorICAgICAgICAgICAgICAgIG51bWVyaWNzW2FyZ10gPSBhdl9leHByX2V2YWwo YS0+ZXhwciwgc3RhdGUtPnZhcnMsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgICAgY2FzZSBBUkdfTElURVJBTDoKKyAgICAgICAgICAgICAgICBudW1lcmljc1th cmddID0gYS0+bGl0ZXJhbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg Y2FzZSBBUkdfVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChhLT52YXJpYWJs ZSA8IFZBUl9DT1VOVCk7CisgICAgICAgICAgICAgICAgbnVtZXJpY3NbYXJnXSA9IHN0YXRlLT52 YXJzW2EtPnZhcmlhYmxlXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBudW1lcmljc1thcmddID0gTkFOOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg dGhlIGNvbW1hbmQgdXNlcyBhIHBlbmRpbmcgcGF0dGVybiAobGlrZSBhIHNvbGlkIGNvbG9yCisg ICAgICAgIC8vIG9yIGEgZ3JhZGllbnQpLCBzZXQgaXQgdG8gdGhlIGNhaXJvIGNvbnRleHQgYmVm b3JlIGV4ZWN1dGluZworICAgICAgICAvLyBzdHJva2UvZmlsbCBjb21tYW5kcy4KKyAgICAgICAg aWYgKHN0YXRlLT5wYXR0ZXJuX2J1aWxkZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgc3dpdGNo IChzdGF0ZW1lbnQtPmNtZCkgeworICAgICAgICAgICAgY2FzZSBDTURfRklMTDoKKyAgICAgICAg ICAgIGNhc2UgQ01EX0ZJTExfRU86CisgICAgICAgICAgICBjYXNlIENNRF9SRVNUT1JFOgorICAg ICAgICAgICAgY2FzZSBDTURfU0FWRToKKyAgICAgICAgICAgIGNhc2UgQ01EX1NUUk9LRToKKyAg ICAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlKHN0YXRlLT5jYWlyb19jdHgsIHN0YXRlLT5w YXR0ZXJuX2J1aWxkZXIpOworICAgICAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShz dGF0ZS0+cGF0dGVybl9idWlsZGVyKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGF0dGVybl9i dWlsZGVyID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEV4 ZWN1dGUgdGhlIGNvbW1hbmQuCisgICAgICAgIHN3aXRjaCAoc3RhdGVtZW50LT5jbWQpIHsKKyAg ICAgICAgY2FzZSBDTURfQVJDOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoNSk7CisgICAgICAg ICAgICBjYWlyb19hcmMoCisgICAgICAgICAgICAgICAgc3RhdGUtPmNhaXJvX2N0eCwKKyAgICAg ICAgICAgICAgICBudW1lcmljc1swXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1sxXSwKKyAg ICAgICAgICAgICAgICBudW1lcmljc1syXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1szXSwK KyAgICAgICAgICAgICAgICBudW1lcmljc1s0XQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgIGNhc2UgQ01EX0FSQ19ORUc6CisgICAgICAgICAgICBBU1NFUlRf QVJHUyg1KTsKKyAgICAgICAgICAgIGNhaXJvX2FyY19uZWdhdGl2ZSgKKyAgICAgICAgICAgICAg ICBzdGF0ZS0+Y2Fpcm9fY3R4LAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzBdLAorICAgICAg ICAgICAgICAgIG51bWVyaWNzWzFdLAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzJdLAorICAg ICAgICAgICAgICAgIG51bWVyaWNzWzNdLAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzRdCisg ICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfQ0lS Q0xFOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoMyk7CisgICAgICAgICAgICBkcmF3X2VsbGlw c2Uoc3RhdGUtPmNhaXJvX2N0eCwgbnVtZXJpY3NbMF0sIG51bWVyaWNzWzFdLCBudW1lcmljc1sy XSwgbnVtZXJpY3NbMl0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURf Q0xJUDoKKyAgICAgICAgY2FzZSBDTURfQ0xJUF9FTzoKKyAgICAgICAgICAgIEFTU0VSVF9BUkdT KDApOworICAgICAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZSgKKyAgICAgICAgICAgICAgICBz dGF0ZS0+Y2Fpcm9fY3R4LAorICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+Y21kID09IENNRF9D TElQID8KKyAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcgOgorICAg ICAgICAgICAgICAgICAgICBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQKKyAgICAgICAgICAgICk7 CisKKyAgICAgICAgICAgIE1BWV9QUkVTRVJWRShjYWlyb19jbGlwKTsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgIGNhc2UgQ01EX0NMT1NFX1BBVEg6CisgICAgICAgICAgICBBU1NFUlRf QVJHUygwKTsKKyAgICAgICAgICAgIGNhaXJvX2Nsb3NlX3BhdGgoc3RhdGUtPmNhaXJvX2N0eCk7 CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9DT0xPUl9TVE9QOgorICAg ICAgICAgICAgaWYgKHN0YXRlLT5wYXR0ZXJuX2J1aWxkZXIgPT0gTlVMTCkgeworICAgICAgICAg ICAgICAgIGF2X2xvZyhzdGF0ZS0+bG9nX2N0eCwgQVZfTE9HX0VSUk9SLCAiY29sb3JzdG9wIHdp dGggbm8gYWN0aXZlIGdyYWRpZW50LlxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVF9BUkdTKDIpOworICAgICAgICAgICAgY2Fp cm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKAorICAgICAgICAgICAgICAgIHN0YXRlLT5w YXR0ZXJuX2J1aWxkZXIsCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMF0sCisgICAgICAgICAg ICAgICAgY29sb3JzWzFdWzBdLAorICAgICAgICAgICAgICAgIGNvbG9yc1sxXVsxXSwKKyAgICAg ICAgICAgICAgICBjb2xvcnNbMV1bMl0sCisgICAgICAgICAgICAgICAgY29sb3JzWzFdWzNdCisg ICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfQ1VS VkVfVE86CisgICAgICAgIGNhc2UgQ01EX0NVUlZFX1RPX1JFTDoKKyAgICAgICAgICAgIEFTU0VS VF9BUkdTKDYpOworICAgICAgICAgICAgZHJhd19jdWJpY19jdXJ2ZV90bygKKyAgICAgICAgICAg ICAgICBzdGF0ZSwKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmNtZCA9PSBDTURfQ1VSVkVf VE9fUkVMLAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzBdLAorICAgICAgICAgICAgICAgIG51 bWVyaWNzWzFdLAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzJdLAorICAgICAgICAgICAgICAg IG51bWVyaWNzWzNdLAorICAgICAgICAgICAgICAgIG51bWVyaWNzWzRdLAorICAgICAgICAgICAg ICAgIG51bWVyaWNzWzVdCisgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgY2FzZSBDTURfREVGX0hTTEE6CisgICAgICAgIGNhc2UgQ01EX0RFRl9SR0JBOiB7Cisg ICAgICAgICAgICBkb3VibGUgciwgZywgYjsKKworICAgICAgICAgICAgQVNTRVJUX0FSR1MoNSk7 CisKKyAgICAgICAgICAgIGNvbnN0IGludCB1c2VyX3ZhciA9IHN0YXRlbWVudC0+YXJnc1swXS52 YXJpYWJsZTsKKyAgICAgICAgICAgIGF2X2Fzc2VydDAodXNlcl92YXIgPj0gVkFSX1UwICYmIHVz ZXJfdmFyIDwgKFZBUl9VMCArIFVTRVJfVkFSX0NPVU5UKSk7CisKKyAgICAgICAgICAgIGlmIChz dGF0ZW1lbnQtPmNtZCA9PSBDTURfREVGX0hTTEEpIHsKKyAgICAgICAgICAgICAgICBoc2wycmdi KG51bWVyaWNzWzFdLCBudW1lcmljc1syXSwgbnVtZXJpY3NbM10sICZyLCAmZywgJmIpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByID0gbnVtZXJpY3NbMV07CisgICAg ICAgICAgICAgICAgZyA9IG51bWVyaWNzWzJdOworICAgICAgICAgICAgICAgIGIgPSBudW1lcmlj c1szXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2RlZmluZSBDKHYsIG8pICgodWlu dDMyX3QpKGF2X2NsaXBkKHYsIDAsIDEpICogMjU1KSA8PCBvKQorCisgICAgICAgICAgICBzdGF0 ZS0+dmFyc1t1c2VyX3Zhcl0gPSAoZG91YmxlKSgKKyAgICAgICAgICAgICAgICBDKHIsIDI0KQor ICAgICAgICAgICAgICAgIHwgQyhnLCAxNikKKyAgICAgICAgICAgICAgICB8IEMoYiwgOCkKKyAg ICAgICAgICAgICAgICB8IEMobnVtZXJpY3NbNF0sIDApCisgICAgICAgICAgICApOworCisgICAg ICAgICAgICAjdW5kZWYgQworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIGNhc2UgQ01EX0VMTElQU0U6CisgICAgICAgICAgICBBU1NFUlRfQVJHUyg0KTsKKyAgICAg ICAgICAgIGRyYXdfZWxsaXBzZShzdGF0ZS0+Y2Fpcm9fY3R4LCBudW1lcmljc1swXSwgbnVtZXJp Y3NbMV0sIG51bWVyaWNzWzJdLCBudW1lcmljc1szXSk7CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBjYXNlIENNRF9GSUxMOgorICAgICAgICBjYXNlIENNRF9GSUxMX0VPOgorICAgICAg ICAgICAgQVNTRVJUX0FSR1MoMCk7CisKKyAgICAgICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUo CisgICAgICAgICAgICAgICAgc3RhdGUtPmNhaXJvX2N0eCwKKyAgICAgICAgICAgICAgICBzdGF0 ZW1lbnQtPmNtZCA9PSBDTURfRklMTCA/CisgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZJTExf UlVMRV9XSU5ESU5HIDoKKyAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRklMTF9SVUxFX0VWRU5f T0RECisgICAgICAgICAgICApOworCisgICAgICAgICAgICBNQVlfUFJFU0VSVkUoY2Fpcm9fZmls bCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9HRVRfTUVUQURBVEE6 IHsKKyAgICAgICAgICAgIEFTU0VSVF9BUkdTKDIpOworCisgICAgICAgICAgICBkb3VibGUgdmFs dWUgPSBOQU47CisKKyAgICAgICAgICAgIGNvbnN0IGludCB1c2VyX3ZhciA9IHN0YXRlbWVudC0+ YXJnc1swXS5jb25zdGFudDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSA9IHN0YXRlbWVu dC0+YXJnc1sxXS5tZXRhZGF0YTsKKworICAgICAgICAgICAgYXZfYXNzZXJ0MCh1c2VyX3ZhciA+ PSBWQVJfVTAgJiYgdXNlcl92YXIgPCAoVkFSX1UwICsgVVNFUl9WQVJfQ09VTlQpKTsKKworICAg ICAgICAgICAgaWYgKHN0YXRlLT5tZXRhZGF0YSAhPSBOVUxMICYmIGtleSAhPSBOVUxMKSB7Cisg ICAgICAgICAgICAgICAgY2hhciAqZW5kcDsKKyAgICAgICAgICAgICAgICBBVkRpY3Rpb25hcnlF bnRyeSAqZW50cnkgPSBhdl9kaWN0X2dldChzdGF0ZS0+bWV0YWRhdGEsIGtleSwgTlVMTCwgMCk7 CisKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAg ICAgICB2YWx1ZSA9IGF2X3N0cnRvZChlbnRyeS0+dmFsdWUsICZlbmRwKTsKKworICAgICAgICAg ICAgICAgICAgICBpZiAoKmVuZHAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlID0gTkFOOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgc3RhdGUtPnZhcnNbdXNlcl92YXJdID0gdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorCisgICAgICAgIGNhc2UgQ01EX0JSRUFLOgorICAgICAgICAgICAgc3RhdGUtPmlu dGVycnVwdGVkID0gMTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgQ01E X0lGOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoMik7CisKKyAgICAgICAgICAgIGlmIChpc2Zp bml0ZShudW1lcmljc1swXSkgJiYgbnVtZXJpY3NbMF0gIT0gMC4wKSB7CisgICAgICAgICAgICAg ICAgaW50IHJldCA9IHZnc19ldmFsKHN0YXRlLCBzdGF0ZW1lbnQtPmFyZ3NbMV0uc3VicHJvZ3Jh bSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwIHx8IHN0YXRlLT5pbnRlcnJ1cHRlZCAh PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9MSU5FQVJfR1JBRDoKKyAgICAg ICAgICAgIEFTU0VSVF9BUkdTKDQpOworCisgICAgICAgICAgICBpZiAoc3RhdGUtPnBhdHRlcm5f YnVpbGRlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShz dGF0ZS0+cGF0dGVybl9idWlsZGVyKTsKKworICAgICAgICAgICAgc3RhdGUtPnBhdHRlcm5fYnVp bGRlciA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcigKKyAgICAgICAgICAgICAgICBudW1l cmljc1swXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1sxXSwKKyAgICAgICAgICAgICAgICBu dW1lcmljc1syXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1szXQorICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ01EX0xJTkVfVE86CisgICAgICAg ICAgICBBU1NFUlRfQVJHUygyKTsKKyAgICAgICAgICAgIGNhaXJvX2xpbmVfdG8oc3RhdGUtPmNh aXJvX2N0eCwgbnVtZXJpY3NbMF0sIG51bWVyaWNzWzFdKTsKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgIGNhc2UgQ01EX0xJTkVfVE9fUkVMOgorICAgICAgICAgICAgQVNTRVJUX0FSR1Mo Mik7CisgICAgICAgICAgICBjYWlyb19yZWxfbGluZV90byhzdGF0ZS0+Y2Fpcm9fY3R4LCBudW1l cmljc1swXSwgbnVtZXJpY3NbMV0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz ZSBDTURfTU9WRV9UTzoKKyAgICAgICAgICAgIEFTU0VSVF9BUkdTKDIpOworICAgICAgICAgICAg Y2Fpcm9fbW92ZV90byhzdGF0ZS0+Y2Fpcm9fY3R4LCBudW1lcmljc1swXSwgbnVtZXJpY3NbMV0p OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfTU9WRV9UT19SRUw6Cisg ICAgICAgICAgICBBU1NFUlRfQVJHUygyKTsKKyAgICAgICAgICAgIGNhaXJvX3JlbF9tb3ZlX3Rv KHN0YXRlLT5jYWlyb19jdHgsIG51bWVyaWNzWzBdLCBudW1lcmljc1sxXSk7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9ORVdfUEFUSDoKKyAgICAgICAgICAgIEFTU0VS VF9BUkdTKDApOworICAgICAgICAgICAgY2Fpcm9fbmV3X3N1Yl9wYXRoKHN0YXRlLT5jYWlyb19j dHgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfUFJFU0VSVkU6Cisg ICAgICAgICAgICBBU1NFUlRfQVJHUygwKTsKKyAgICAgICAgICAgIHN0YXRlLT5wcmVzZXJ2ZV9w YXRoID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ01EX1BSSU5UOiB7 CisgICAgICAgICAgICBjaGFyIG1zZ1syNTZdOworICAgICAgICAgICAgaW50IGxlbiA9IDA7CisK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGVtZW50LT5hcmdzX2NvdW50OyBp KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgd3JpdHRlbjsKKyAgICAgICAgICAgICAgICBpbnQg Y2FwYWNpdHkgPSBzaXplb2YobXNnKSAtIGxlbjsKKworICAgICAgICAgICAgICAgIHdyaXR0ZW4g PSBzbnByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgbXNnICsgbGVuLAorICAgICAgICAgICAg ICAgICAgICBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgIiVzJXMgPSAlZiIsCisgICAg ICAgICAgICAgICAgICAgIGkgPiAwID8gIiB8ICIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAg c3RhdGVtZW50LT5hcmdzW2ldLm1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICBudW1lcmlj c1tpXQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBidWZmZXIg aXMgdG9vIHNtYWxsLCBkaXNjYXJkIHRoZSBsYXRlc3QgYXJndW1lbnRzLgorICAgICAgICAgICAg ICAgIGlmICh3cml0dGVuID49IGNhcGFjaXR5KQorICAgICAgICAgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgICAgICAgIGxlbiArPSB3cml0dGVuOworICAgICAgICAgICAgfQorCisgICAg ICAgICAgICBhdl9sb2coc3RhdGUtPmxvZ19jdHgsIEFWX0xPR19JTkZPLCAiJS4qc1xuIiwgbGVu LCBtc2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENN RF9QUk9DX0FTU0lHTjogeworICAgICAgICAgICAgc3RydWN0IFZHU1Byb2NlZHVyZSAqcHJvYzsK KworICAgICAgICAgICAgY29uc3QgaW50IHByb2NfYXJncyA9IHN0YXRlbWVudC0+YXJnc19jb3Vu dCAtIDI7CisgICAgICAgICAgICBhdl9hc3NlcnQwKHByb2NfYXJncyA+PSAwICYmIHByb2NfYXJn cyA8PSBNQVhfUFJPQ19BUkdTKTsKKworICAgICAgICAgICAgcHJvYyA9ICZzdGF0ZS0+cHJvY2Vk dXJlc1tzdGF0ZW1lbnQtPmFyZ3NbMF0ucHJvY19pZF07CisgICAgICAgICAgICBwcm9jLT5wcm9n cmFtID0gc3RhdGVtZW50LT5hcmdzW3Byb2NfYXJncyArIDFdLnN1YnByb2dyYW07CisgICAgICAg ICAgICBwcm9jLT5wcm9jX2FyZ3NfY291bnQgPSBwcm9jX2FyZ3M7CisKKyAgICAgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgTUFYX1BST0NfQVJHUzsgaSsrKQorICAgICAgICAgICAgICAgIHBy b2MtPmFyZ3NbaV0gPSBpIDwgcHJvY19hcmdzID8gc3RhdGVtZW50LT5hcmdzW2kgKyAxXS5jb25z dGFudCA6IC0xOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh c2UgQ01EX1BST0NfQ0FMTDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb2NfYXJncyA9IHN0 YXRlbWVudC0+YXJnc19jb3VudCAtIDE7CisgICAgICAgICAgICBhdl9hc3NlcnQwKHByb2NfYXJn cyA+PSAwICYmIHByb2NfYXJncyA8PSBNQVhfUFJPQ19BUkdTKTsKKworICAgICAgICAgICAgY29u c3QgaW50IHByb2NfaWQgPSBzdGF0ZW1lbnQtPmFyZ3NbMF0ucHJvY19pZDsKKworICAgICAgICAg ICAgY29uc3Qgc3RydWN0IFZHU1Byb2NlZHVyZSAqcHJvYyA9ICZzdGF0ZS0+cHJvY2VkdXJlc1tw cm9jX2lkXTsKKworICAgICAgICAgICAgaWYgKHByb2MtPnByb2NfYXJnc19jb3VudCAhPSBwcm9j X2FyZ3MpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coCisgICAgICAgICAgICAgICAgICAgIHN0 YXRlLT5sb2dfY3R4LAorICAgICAgICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAg ICAgICAgICAgICAgICJQcm9jZWR1cmUgZXhwZWN0cyAlZCBhcmd1bWVudHMsIGJ1dCByZWNlaXZl ZCAlZC4iLAorICAgICAgICAgICAgICAgICAgICBwcm9jLT5wcm9jX2FyZ3NfY291bnQsCisgICAg ICAgICAgICAgICAgICAgIHByb2NfYXJncworICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByb2MtPnBy b2dyYW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2NfbmFtZSA9 IHN0YXRlLT5wcm9jX25hbWVzW3Byb2NfaWRdOworICAgICAgICAgICAgICAgIGF2X2xvZyhzdGF0 ZS0+bG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBi b2R5IGZvciBwcm9jZWR1cmUgJyVzJ1xuIiwgcHJvY19uYW1lKTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgaW50IHJldDsKKyAgICAgICAgICAgICAgICBkb3VibGUgY3Vy cmVudF92YXJzW01BWF9QUk9DX0FSR1NdID0geyAwIH07CisKKyAgICAgICAgICAgICAgICAvLyBT ZXQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VkdXJlIGFyZ3VtZW50cworICAgICAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY19hcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgY29uc3QgaW50IHZhciA9IHByb2MtPmFyZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlm ICh2YXIgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFyc1tpXSA9 IHN0YXRlLT52YXJzW3Zhcl07CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+dmFyc1t2 YXJdID0gbnVtZXJpY3NbaSArIDFdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gdmdzX2V2YWwoc3RhdGUsIHByb2MtPnBy b2dyYW0pOworCisgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB2YXJpYWJsZSB2YWx1ZXMuCisg ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jX2FyZ3M7IGkrKykgeworICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdmFyID0gcHJvYy0+YXJnc1tpXTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHZhciAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dGUtPnZhcnNbdmFyXSA9IGN1cnJlbnRfdmFyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgICAgIC8vIGBicmVha2Ag aW50ZXJydXB0cyB0aGUgcHJvY2VkdXJlLCBidXQgZG9uJ3Qgc3RvcCB0aGUgcHJvZ3JhbS4KKyAg ICAgICAgICAgICAgICBpZiAoc3RhdGUtPmludGVycnVwdGVkKSB7CisgICAgICAgICAgICAgICAg ICAgIHN0YXRlLT5pbnRlcnJ1cHRlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBjYXNlIENNRF9RX0NVUlZFX1RPOgorICAgICAgICBjYXNlIENN RF9RX0NVUlZFX1RPX1JFTDoKKyAgICAgICAgICAgIEFTU0VSVF9BUkdTKDQpOworICAgICAgICAg ICAgcmVsYXRpdmUgPSBzdGF0ZW1lbnQtPmNtZCA9PSBDTURfUV9DVVJWRV9UT19SRUw7CisgICAg ICAgICAgICBkcmF3X3F1YWRfY3VydmVfdG8oCisgICAgICAgICAgICAgICAgc3RhdGUsCisgICAg ICAgICAgICAgICAgcmVsYXRpdmUsCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMF0sCisgICAg ICAgICAgICAgICAgbnVtZXJpY3NbMV0sCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMl0sCisg ICAgICAgICAgICAgICAgbnVtZXJpY3NbM10KKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICBjYXNlIENNRF9SQURJQUxfR1JBRDoKKyAgICAgICAgICAgIEFTU0VS VF9BUkdTKDYpOworCisgICAgICAgICAgICBpZiAoc3RhdGUtPnBhdHRlcm5fYnVpbGRlciAhPSBO VUxMKQorICAgICAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShzdGF0ZS0+cGF0dGVy bl9idWlsZGVyKTsKKworICAgICAgICAgICAgc3RhdGUtPnBhdHRlcm5fYnVpbGRlciA9IGNhaXJv X3BhdHRlcm5fY3JlYXRlX3JhZGlhbCgKKyAgICAgICAgICAgICAgICBudW1lcmljc1swXSwKKyAg ICAgICAgICAgICAgICBudW1lcmljc1sxXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1syXSwK KyAgICAgICAgICAgICAgICBudW1lcmljc1szXSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1s0 XSwKKyAgICAgICAgICAgICAgICBudW1lcmljc1s1XQorICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ01EX1JFU0VUX0NMSVA6CisgICAgICAgICAgICBj YWlyb19yZXNldF9jbGlwKHN0YXRlLT5jYWlyb19jdHgpOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBDTURfUkVTRVRfREFTSDoKKyAgICAgICAgICAgIGNhaXJvX3NldF9kYXNo KHN0YXRlLT5jYWlyb19jdHgsIE5VTEwsIDAsIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgY2FzZSBDTURfUkVTRVRfTUFUUklYOgorICAgICAgICAgICAgY2Fpcm9faWRlbnRpdHlf bWF0cml4KHN0YXRlLT5jYWlyb19jdHgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg Y2FzZSBDTURfUkVDVDoKKyAgICAgICAgICAgIEFTU0VSVF9BUkdTKDQpOworICAgICAgICAgICAg Y2Fpcm9fcmVjdGFuZ2xlKHN0YXRlLT5jYWlyb19jdHgsIG51bWVyaWNzWzBdLCBudW1lcmljc1sx XSwgbnVtZXJpY3NbMl0sIG51bWVyaWNzWzNdKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgIGNhc2UgQ01EX1JFUEVBVDogeworICAgICAgICAgICAgZG91YmxlIHZhcl9pID0gc3RhdGUt PnZhcnNbVkFSX0ldOworCisgICAgICAgICAgICBBU1NFUlRfQVJHUygyKTsKKworICAgICAgICAg ICAgaWYgKCFpc2Zpbml0ZShudW1lcmljc1swXSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IChpbnQpbnVtZXJpY3NbMF07IGkg PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPnZhcnNbVkFSX0ldID0gaTsK KworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZXQgPSB2Z3NfZXZhbChzdGF0ZSwgc3RhdGVt ZW50LT5hcmdzWzFdLnN1YnByb2dyYW0pOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgICAgIC8vIGBi cmVha2AgaW50ZXJydXB0cyB0aGUgbG9vcCwgYnV0IGRvbid0IHN0b3AgdGhlIHByb2dyYW0uCisg ICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5pbnRlcnJ1cHRlZCkgeworICAgICAgICAgICAgICAg ICAgICBzdGF0ZS0+aW50ZXJydXB0ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlLT52 YXJzW1ZBUl9JXSA9IHZhcl9pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg ICAgICBjYXNlIENNRF9SRVNUT1JFOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoMCk7CisgICAg ICAgICAgICBjYWlyb19yZXN0b3JlKHN0YXRlLT5jYWlyb19jdHgpOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgY2FzZSBDTURfUk9UQVRFOgorICAgICAgICAgICAgQVNTRVJUX0FSR1Mo MSk7CisgICAgICAgICAgICBjYWlyb19yb3RhdGUoc3RhdGUtPmNhaXJvX2N0eCwgbnVtZXJpY3Nb MF0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfUk9VTkRFRFJFQ1Q6 CisgICAgICAgICAgICBBU1NFUlRfQVJHUyg1KTsKKyAgICAgICAgICAgIGRyYXdfcm91bmRlZF9y ZWN0KAorICAgICAgICAgICAgICAgIHN0YXRlLT5jYWlyb19jdHgsCisgICAgICAgICAgICAgICAg bnVtZXJpY3NbMF0sCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMV0sCisgICAgICAgICAgICAg ICAgbnVtZXJpY3NbMl0sCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbM10sCisgICAgICAgICAg ICAgICAgbnVtZXJpY3NbNF0KKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBjYXNlIENNRF9TQVZFOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoMCk7CisgICAg ICAgICAgICBjYWlyb19zYXZlKHN0YXRlLT5jYWlyb19jdHgpOworICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgY2FzZSBDTURfU0NBTEU6CisgICAgICAgICAgICBBU1NFUlRfQVJHUygxKTsK KyAgICAgICAgICAgIGNhaXJvX3NjYWxlKHN0YXRlLT5jYWlyb19jdHgsIG51bWVyaWNzWzBdLCBu dW1lcmljc1swXSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9TQ0FM RVhZOgorICAgICAgICAgICAgQVNTRVJUX0FSR1MoMik7CisgICAgICAgICAgICBjYWlyb19zY2Fs ZShzdGF0ZS0+Y2Fpcm9fY3R4LCBudW1lcmljc1swXSwgbnVtZXJpY3NbMV0pOworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDTURfU0VUX0NPTE9SOgorICAgICAgICAgICAgQVNT RVJUX0FSR1MoMSk7CisKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cGF0dGVybl9idWlsZGVyICE9 IE5VTEwpCisgICAgICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHN0YXRlLT5wYXR0 ZXJuX2J1aWxkZXIpOworCisgICAgICAgICAgICBzdGF0ZS0+cGF0dGVybl9idWlsZGVyID0gY2Fp cm9fcGF0dGVybl9jcmVhdGVfcmdiYSgKKyAgICAgICAgICAgICAgICBjb2xvcnNbMF1bMF0sCisg ICAgICAgICAgICAgICAgY29sb3JzWzBdWzFdLAorICAgICAgICAgICAgICAgIGNvbG9yc1swXVsy XSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbMF1bM10KKyAgICAgICAgICAgICk7CisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9TRVRfTElORV9DQVA6CisgICAgICAgICAg ICBBU1NFUlRfQVJHUygxKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9saW5lX2NhcChzdGF0ZS0+ Y2Fpcm9fY3R4LCBzdGF0ZW1lbnQtPmFyZ3NbMF0uY29uc3RhbnQpOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgY2FzZSBDTURfU0VUX0xJTkVfSk9JTjoKKyAgICAgICAgICAgIEFTU0VS VF9BUkdTKDEpOworICAgICAgICAgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihzdGF0ZS0+Y2Fpcm9f Y3R4LCBzdGF0ZW1lbnQtPmFyZ3NbMF0uY29uc3RhbnQpOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBDTURfU0VUX0xJTkVfV0lEVEg6CisgICAgICAgICAgICBBU1NFUlRfQVJH UygxKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKHN0YXRlLT5jYWlyb19jdHgs IG51bWVyaWNzWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ01EX1NF VF9EQVNIOgorICAgICAgICBjYXNlIENNRF9TRVRfREFTSF9PRkZTRVQ6IHsKKyAgICAgICAgICAg IGludCBudW07CisgICAgICAgICAgICBkb3VibGUgKmRhc2hlcywgb2Zmc2V0LCBzdGFja19idWZb MTZdOworCisgICAgICAgICAgICBBU1NFUlRfQVJHUygxKTsKKworICAgICAgICAgICAgbnVtID0g Y2Fpcm9fZ2V0X2Rhc2hfY291bnQoc3RhdGUtPmNhaXJvX2N0eCk7CisKKyAgICAgICAgICAgIGlm IChudW0gKyAxIDwgRkZfQVJSQVlfRUxFTVMoc3RhY2tfYnVmKSkgeworICAgICAgICAgICAgICAg IGRhc2hlcyA9IHN0YWNrX2J1ZjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZGFzaGVzID0gYXZfY2FsbG9jKG51bSArIDEsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgY2Fpcm9fZ2V0X2Rhc2goc3RhdGUtPmNhaXJvX2N0eCwgZGFz aGVzLCAmb2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKHN0YXRlbWVudC0+Y21kID09IENNRF9T RVRfREFTSCkgeworICAgICAgICAgICAgICAgIGRhc2hlc1tudW1dID0gbnVtZXJpY3NbMF07Cisg ICAgICAgICAgICAgICAgbnVtKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIG9mZnNldCA9IG51bWVyaWNzWzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj YWlyb19zZXRfZGFzaChzdGF0ZS0+Y2Fpcm9fY3R4LCBkYXNoZXMsIG51bSwgb2Zmc2V0KTsKKwor ICAgICAgICAgICAgaWYgKGRhc2hlcyAhPSBzdGFja19idWYpCisgICAgICAgICAgICAgICAgYXZf ZnJlZXAoJmRhc2hlcyk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg ICAgY2FzZSBDTURfU0VUX0hTTEE6CisgICAgICAgIGNhc2UgQ01EX1NFVF9SR0JBOiB7CisgICAg ICAgICAgICBkb3VibGUgciwgZywgYjsKKworICAgICAgICAgICAgQVNTRVJUX0FSR1MoNCk7CisK KyAgICAgICAgICAgIGlmIChzdGF0ZS0+cGF0dGVybl9idWlsZGVyICE9IE5VTEwpCisgICAgICAg ICAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHN0YXRlLT5wYXR0ZXJuX2J1aWxkZXIpOwor CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5jbWQgPT0gQ01EX1NFVF9IU0xBKSB7CisgICAg ICAgICAgICAgICAgaHNsMnJnYihudW1lcmljc1swXSwgbnVtZXJpY3NbMV0sIG51bWVyaWNzWzJd LCAmciwgJmcsICZiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgciA9 IG51bWVyaWNzWzBdOworICAgICAgICAgICAgICAgIGcgPSBudW1lcmljc1sxXTsKKyAgICAgICAg ICAgICAgICBiID0gbnVtZXJpY3NbMl07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0 YXRlLT5wYXR0ZXJuX2J1aWxkZXIgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKHIsIGcsIGIs IG51bWVyaWNzWzNdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg Y2FzZSBDTURfU0VUX1ZBUjogeworICAgICAgICAgICAgQVNTRVJUX0FSR1MoMik7CisKKyAgICAg ICAgICAgIGNvbnN0IGludCB1c2VyX3ZhciA9IHN0YXRlbWVudC0+YXJnc1swXS5jb25zdGFudDsK KworICAgICAgICAgICAgYXZfYXNzZXJ0MCh1c2VyX3ZhciA+PSBWQVJfVTAgJiYgdXNlcl92YXIg PCAoVkFSX1UwICsgVVNFUl9WQVJfQ09VTlQpKTsKKyAgICAgICAgICAgIHN0YXRlLT52YXJzW3Vz ZXJfdmFyXSA9IG51bWVyaWNzWzFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICBjYXNlIENNRF9TVFJPS0U6CisgICAgICAgICAgICBBU1NFUlRfQVJHUygwKTsKKyAg ICAgICAgICAgIE1BWV9QUkVTRVJWRShjYWlyb19zdHJva2UpOworICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgY2FzZSBDTURfU19DVVJWRV9UTzoKKyAgICAgICAgY2FzZSBDTURfU19DVVJW RV9UT19SRUw6CisgICAgICAgICAgICBBU1NFUlRfQVJHUyg0KTsKKyAgICAgICAgICAgIGRyYXdf Y3ViaWNfY3VydmVfdG8oCisgICAgICAgICAgICAgICAgc3RhdGUsCisgICAgICAgICAgICAgICAg c3RhdGVtZW50LT5jbWQgPT0gQ01EX1NfQ1VSVkVfVE9fUkVMLAorICAgICAgICAgICAgICAgIE5B TiwKKyAgICAgICAgICAgICAgICBOQU4sCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMF0sCisg ICAgICAgICAgICAgICAgbnVtZXJpY3NbMV0sCisgICAgICAgICAgICAgICAgbnVtZXJpY3NbMl0s CisgICAgICAgICAgICAgICAgbnVtZXJpY3NbM10KKyAgICAgICAgICAgICk7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9UUkFOU0xBVEU6CisgICAgICAgICAgICBBU1NF UlRfQVJHUygyKTsKKyAgICAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShzdGF0ZS0+Y2Fpcm9fY3R4 LCBudW1lcmljc1swXSwgbnVtZXJpY3NbMV0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgY2FzZSBDTURfVF9DVVJWRV9UTzoKKyAgICAgICAgY2FzZSBDTURfVF9DVVJWRV9UT19SRUw6 CisgICAgICAgICAgICBBU1NFUlRfQVJHUygyKTsKKyAgICAgICAgICAgIHJlbGF0aXZlID0gc3Rh dGVtZW50LT5jbWQgPT0gQ01EX1RfQ1VSVkVfVE9fUkVMOworICAgICAgICAgICAgZHJhd19xdWFk X2N1cnZlX3RvKHN0YXRlLCByZWxhdGl2ZSwgTkFOLCBOQU4sIG51bWVyaWNzWzBdLCBudW1lcmlj c1sxXSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENNRF9IT1JaOgorICAg ICAgICBjYXNlIENNRF9IT1JaX1JFTDoKKyAgICAgICAgY2FzZSBDTURfVkVSVDoKKyAgICAgICAg Y2FzZSBDTURfVkVSVF9SRUw6CisgICAgICAgICAgICBBU1NFUlRfQVJHUygxKTsKKworICAgICAg ICAgICAgaWYgKGNhaXJvX2hhc19jdXJyZW50X3BvaW50KHN0YXRlLT5jYWlyb19jdHgpKSB7Cisg ICAgICAgICAgICAgICAgZG91YmxlIGQgPSBudW1lcmljc1swXTsKKworICAgICAgICAgICAgICAg IHN3aXRjaCAoc3RhdGVtZW50LT5jbWQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDTURf SE9SWjogICAgIGN4ICA9IGQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENNRF9W RVJUOiAgICAgY3kgID0gZDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ01EX0hP UlpfUkVMOiBjeCArPSBkOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDTURfVkVS VF9SRUw6IGN5ICs9IGQ7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIGNhaXJvX2xpbmVfdG8oc3RhdGUtPmNhaXJvX2N0eCwgY3gsIGN5KTsKKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZWZsZWN0 ZWQgY29udHJvbCBwb2ludHMgd2lsbCBiZSBkaXNjYXJkZWQgaWYgdGhlIGV4ZWN1dGVkCisgICAg ICAgIC8vIGNvbW1hbmQgZGlkIG5vdCB1cGRhdGUgdGhlbSwgYW5kIGl0IGlzIGEgY29tbWFuZHMg dG8KKyAgICAgICAgLy8gbW9kaWZ5IHRoZSBwYXRoLgorICAgICAgICBpZiAoc3RhdGUtPnJjcC5z dGF0dXMgPT0gUkNQX1VQREFURUQpIHsKKyAgICAgICAgICAgIHN0YXRlLT5yY3Auc3RhdHVzID0g UkNQX1ZBTElEOworICAgICAgICB9IGVsc2UgaWYgKHZnc19jbWRfY2hhbmdlX3BhdGgoc3RhdGVt ZW50LT5jbWQpKSB7CisgICAgICAgICAgICBzdGF0ZS0+cmNwLnN0YXR1cyA9IFJDUF9OT05FOwor ICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGVycm9ycyBpbiBjYWlyby4KKyAgICAg ICAgaWYgKGNhaXJvX3N0YXR1cyhzdGF0ZS0+Y2Fpcm9fY3R4KSAhPSBDQUlST19TVEFUVVNfU1VD Q0VTUykgeworICAgICAgICAgICAgYXZfbG9nKAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb2df Y3R4LAorICAgICAgICAgICAgICAgIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAiRXJy b3IgaW4gY2Fpcm8gY29udGV4dDogJXNcbiIsCisgICAgICAgICAgICAgICAgY2Fpcm9fc3RhdHVz X3RvX3N0cmluZyhjYWlyb19zdGF0dXMoc3RhdGUtPmNhaXJvX2N0eCkpCisgICAgICAgICAgICAp OworCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiA9PSBBVkNsYXNzIGZvciBkcmF3dmcgPT0K KyAqCisgKiBTb3VyY2UgaXMgcGFyc2VkIG9uIHRoZSBgaW5pdGAgZnVuY3Rpb24uCisgKgorICog Q2Fpcm8gc3VwcG9ydHMgYSBmZXcgcGl4ZWwgZm9ybWF0cywgYnV0IG9ubHkgUkdCLiBBbGwgY29t cGF0aWJsZSBmb3JtYXRzIGFyZQorICogbGlzdGVkIGluIHRoZSBgZHJhd3ZnX3BpeF9mbXRzYCBh cnJheS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBEcmF3VkdDb250ZXh0IHsKKyAgICBjb25zdCBB VkNsYXNzICpjbGFzczsKKworICAgIC8vLyBFcXVpdmFsZW50IHRvIEFWUGl4ZWxGb3JtYXQuCisg ICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9fZm9ybWF0OworCisgICAgLy8vIFRpbWUgaW4gc2Vjb25k cyBvZiB0aGUgZmlyc3QgZnJhbWUuCisgICAgZG91YmxlIHRpbWVfc3RhcnQ7CisKKyAgICAvLy8g SW5saW5lIHNvdXJjZS4KKyAgICB1aW50OF90ICpzY3JpcHRfdGV4dDsKKworICAgIC8vLyBGaWxl IHBhdGggdG8gbG9hZCB0aGUgc291cmNlLgorICAgIHVpbnQ4X3QgKnNjcmlwdF9maWxlOworCisg ICAgc3RydWN0IFZHU1Byb2dyYW0gcHJvZ3JhbTsKK30gRHJhd1ZHQ29udGV4dDsKKworI2RlZmlu ZSBPUFQobmFtZSwgZmllbGQsIGhlbHApICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5hbWUsICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICBoZWxwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgb2Zmc2V0b2YoRHJhd1ZHQ29udGV4dCwgZmllbGQpLCBcCisgICAgICAgIEFWX09QVF9UWVBF X1NUUklORywgICAgICAgICAgICAgXAorICAgICAgICB7IC5zdHIgPSBOVUxMIH0sICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSAgICAgXAorICAgICAgICAgICB8IEFWX09Q VF9GTEFHX1ZJREVPX1BBUkFNICAgIFwKKyAgICB9CisKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBk cmF3dmdfb3B0aW9uc1tdPSB7CisgICAgT1BUKCJzY3JpcHQiLCBzY3JpcHRfdGV4dCwgInNjcmlw dCBzb3VyY2UgdG8gZHJhdyB0aGUgZ3JhcGhpY3MiKSwKKyAgICBPUFQoInMiLCAgICAgIHNjcmlw dF90ZXh0LCAic2NyaXB0IHNvdXJjZSB0byBkcmF3IHRoZSBncmFwaGljcyIpLAorICAgIE9QVCgi ZmlsZSIsICAgc2NyaXB0X2ZpbGUsICJmaWxlIHRvIGxvYWQgdGhlIHNjcmlwdCBzb3VyY2UiKSwK KyAgICB7IE5VTEwgfQorfTsKKworI3VuZGVmIE9QVAorCisKK0FWRklMVEVSX0RFRklORV9DTEFT UyhkcmF3dmcpOworCitzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IGRyYXd2Z19waXhf Zm10c1tdID0geworICAgIEFWX1BJWF9GTVRfUkdCMzIsCisgICAgQVZfUElYX0ZNVF8wUkdCMzIs CisgICAgQVZfUElYX0ZNVF9SR0I1NjUsCisgICAgQVZfUElYX0ZNVF9YMlJHQjEwLAorICAgIEFW X1BJWF9GTVRfTk9ORQorfTsKKworLy8gUmV0dXJuIHRoZSBjYWlybyBlcXVpdmFsZW50IHRvIEFW UGl4ZWxGb3JtYXQuCitzdGF0aWMgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9fZm9ybWF0X2Zyb21fcGl4 X2ZtdCgKKyAgICBEcmF3VkdDb250ZXh0KiBjdHgsCisgICAgZW51bSBBVlBpeGVsRm9ybWF0IGZv cm1hdAorKSB7CisgICAgLy8gVGhpcyBhcnJheSBtdXN0IGhhdmUgdGhlIHNhbWUgb3JkZXIgb2Yg YGRyYXd2Z19waXhfZm10c2AuCisgICAgY29uc3QgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0X21hcFtd ID0geworICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCAvLyBjYWlybyBleHBlY3RzIHByZS1t dWx0aXBsaWVkIGFscGhhLgorICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisgICAgICAgIENB SVJPX0ZPUk1BVF9SR0IxNl81NjUsCisgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IzMCwKKyAgICAg ICAgQ0FJUk9fRk9STUFUX0lOVkFMSUQsCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgRkZfQVJSQVlfRUxFTVMoZHJhd3ZnX3BpeF9mbXRzKTsgaSsrKSB7CisgICAgICAgIGlmIChk cmF3dmdfcGl4X2ZtdHNbaV0gPT0gZm9ybWF0KQorICAgICAgICAgICAgcmV0dXJuIGZvcm1hdF9t YXBbaV07CisgICAgfQorCisgICAgY29uc3QgY2hhciogbmFtZSA9IGF2X2dldF9waXhfZm10X25h bWUoZm9ybWF0KTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHBpeF9m bXQ6ICVzXG4iLCBuYW1lKTsKKworICAgIHJldHVybiBDQUlST19GT1JNQVRfSU5WQUxJRDsKK30K Kworc3RhdGljIGludCBkcmF3dmdfZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBB VkZyYW1lICpmcmFtZSkgeworICAgIGludCByZXQ7CisgICAgZG91YmxlIHZhcl90OworICAgIGNh aXJvX3N1cmZhY2VfdCogc3VyZmFjZTsKKworICAgIEZpbHRlckxpbmsgKmlubCA9IGZmX2ZpbHRl cl9saW5rKGlubGluayk7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gaW5saW5rLT5kc3Qt Pm91dHB1dHNbMF07CisgICAgQVZGaWx0ZXJDb250ZXh0ICpmaWx0ZXJfY3R4ID0gaW5saW5rLT5k c3Q7CisgICAgRHJhd1ZHQ29udGV4dCAqZHJhd3ZnX2N0eCA9IGZpbHRlcl9jdHgtPnByaXY7CisK KyAgICBzdHJ1Y3QgVkdTRXZhbFN0YXRlIGV2YWxfc3RhdGU7CisgICAgdmdzX2V2YWxfc3RhdGVf aW5pdCgmZXZhbF9zdGF0ZSwgJmRyYXd2Z19jdHgtPnByb2dyYW0sIGRyYXd2Z19jdHgsIGZyYW1l KTsKKworICAgIC8vIERyYXcgZGlyZWN0bHkgb24gdGhlIGZyYW1lIGRhdGEuCisgICAgc3VyZmFj ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAgICAgICBmcmFtZS0+ ZGF0YVswXSwKKyAgICAgICAgZHJhd3ZnX2N0eC0+Y2Fpcm9fZm9ybWF0LAorICAgICAgICBmcmFt ZS0+d2lkdGgsCisgICAgICAgIGZyYW1lLT5oZWlnaHQsCisgICAgICAgIGZyYW1lLT5saW5lc2l6 ZVswXQorICAgICk7CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0g Q0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGRyYXd2Z19jdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgY2Fpcm8gc3VyZmFjZS5cbiIpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBldmFsX3N0YXRlLmNhaXJvX2N0 eCA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKworICAgIHZhcl90ID0gVFMyVChmcmFtZS0+cHRz LCBpbmxpbmstPnRpbWVfYmFzZSk7CisKKyAgICBpZiAoaXNuYW4oZHJhd3ZnX2N0eC0+dGltZV9z dGFydCkpCisgICAgICAgIGRyYXd2Z19jdHgtPnRpbWVfc3RhcnQgPSB2YXJfdDsKKworICAgIGV2 YWxfc3RhdGUudmFyc1tWQVJfTl0gPSBpbmwtPmZyYW1lX2NvdW50X291dDsKKyAgICBldmFsX3N0 YXRlLnZhcnNbVkFSX1RdID0gdmFyX3Q7CisgICAgZXZhbF9zdGF0ZS52YXJzW1ZBUl9UU10gPSBk cmF3dmdfY3R4LT50aW1lX3N0YXJ0OworICAgIGV2YWxfc3RhdGUudmFyc1tWQVJfV10gPSBpbmxp bmstPnc7CisgICAgZXZhbF9zdGF0ZS52YXJzW1ZBUl9IXSA9IGlubGluay0+aDsKKyAgICBldmFs X3N0YXRlLnZhcnNbVkFSX0RVUkFUSU9OXSA9IGZyYW1lLT5kdXJhdGlvbiAqIGF2X3EyZChpbmxp bmstPnRpbWVfYmFzZSk7CisKKyAgICBldmFsX3N0YXRlLm1ldGFkYXRhID0gZnJhbWUtPm1ldGFk YXRhOworCisgICAgcmV0ID0gdmdzX2V2YWwoJmV2YWxfc3RhdGUsICZkcmF3dmdfY3R4LT5wcm9n cmFtKTsKKworICAgIGNhaXJvX2Rlc3Ryb3koZXZhbF9zdGF0ZS5jYWlyb19jdHgpOworICAgIGNh aXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKworICAgIHZnc19ldmFsX3N0YXRlX2ZyZWUo JmV2YWxfc3RhdGUpOworCisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBmcmFtZSk7Cit9CisKK3N0YXRp YyBpbnQgZHJhd3ZnX2NvbmZpZ19wcm9wcyhBVkZpbHRlckxpbmsgKmlubGluaykgeworICAgIEFW RmlsdGVyQ29udGV4dCAqZmlsdGVyX2N0eCA9IGlubGluay0+ZHN0OworICAgIERyYXdWR0NvbnRl eHQgKmRyYXd2Z19jdHggPSBmaWx0ZXJfY3R4LT5wcml2OworCisgICAgLy8gRmluZCB0aGUgY2Fp cm8gZm9ybWF0IGVxdWl2YWxlbnQgdG8gdGhlIGZvcm1hdCBvZiB0aGUgZnJhbWUsCisgICAgLy8g c28gY2Fpcm8gY2FuIGRyYXcgZGlyZWN0bHkgb24gdGhlIG1lbW9yeSBhbHJlYWR5IGFsbG9jYXRl ZC4KKworICAgIGRyYXd2Z19jdHgtPmNhaXJvX2Zvcm1hdCA9IGNhaXJvX2Zvcm1hdF9mcm9tX3Bp eF9mbXQoZHJhd3ZnX2N0eCwgaW5saW5rLT5mb3JtYXQpOworICAgIGlmIChkcmF3dmdfY3R4LT5j YWlyb19mb3JtYXQgPT0gQ0FJUk9fRk9STUFUX0lOVkFMSUQpCisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IGRy YXd2Z19pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KSB7CisgICAgaW50IHJldDsKKyAgICBzdHJ1 Y3QgVkdTUGFyc2VyIHBhcnNlcjsKKyAgICBEcmF3VkdDb250ZXh0ICpkcmF3dmcgPSBjdHgtPnBy aXY7CisKKyAgICBkcmF3dmctPnRpbWVfc3RhcnQgPSBOQU47CisKKyAgICBpZiAoKGRyYXd2Zy0+ c2NyaXB0X3RleHQgPT0gTlVMTCkgPT0gKGRyYXd2Zy0+c2NyaXB0X2ZpbGUgPT0gTlVMTCkpIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgIkVpdGhlciAn c291cmNlJyBvciAnZmlsZScgbXVzdCBiZSBwcm92aWRlZFxuIik7CisKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoZHJhd3ZnLT5zY3JpcHRfZmlsZSAh PSBOVUxMKSB7CisgICAgICAgIHJldCA9IGZmX2xvYWRfdGV4dGZpbGUoCisgICAgICAgICAgICBj dHgsCisgICAgICAgICAgICAoY29uc3QgY2hhciAqKWRyYXd2Zy0+c2NyaXB0X2ZpbGUsCisgICAg ICAgICAgICAmZHJhd3ZnLT5zY3JpcHRfdGV4dCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAg KTsKKworICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKworICAgIHZnc19wYXJzZXJfaW5pdCgmcGFyc2VyLCBkcmF3dmctPnNjcmlwdF90ZXh0KTsK KworICAgIHJldCA9IHZnc19wYXJzZShkcmF3dmcsICZwYXJzZXIsICZkcmF3dmctPnByb2dyYW0s IDApOworCisgICAgdmdzX3BhcnNlcl9mcmVlKCZwYXJzZXIpOworCisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGF2X2NvbGQgdm9pZCBkcmF3dmdfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAq Y3R4KSB7CisgICAgRHJhd1ZHQ29udGV4dCAqZHJhd3ZnID0gY3R4LT5wcml2OworICAgIHZnc19m cmVlKCZkcmF3dmctPnByb2dyYW0pOworfQorCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgZHJh d3ZnX2lucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0 IiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAg LmZsYWdzICAgICAgICA9IEFWRklMVEVSUEFEX0ZMQUdfTkVFRFNfV1JJVEFCTEUsCisgICAgICAg IC5maWx0ZXJfZnJhbWUgPSBkcmF3dmdfZmlsdGVyX2ZyYW1lLAorICAgICAgICAuY29uZmlnX3By b3BzID0gZHJhd3ZnX2NvbmZpZ19wcm9wcywKKyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0ZXIg ZmZfdmZfZHJhd3ZnID0geworICAgIC5wLm5hbWUgICAgICAgID0gImRyYXd2ZyIsCisgICAgLnAu ZGVzY3JpcHRpb24gPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRHJhdyB2ZWN0b3IgZ3JhcGhpY3Mg b24gdG9wIG9mIHZpZGVvIGZyYW1lcy4iKSwKKyAgICAucC5wcml2X2NsYXNzICA9ICZkcmF3dmdf Y2xhc3MsCisgICAgLnAuZmxhZ3MgICAgICAgPSBBVkZJTFRFUl9GTEFHX1NVUFBPUlRfVElNRUxJ TkVfR0VORVJJQywKKyAgICAucHJpdl9zaXplICAgICA9IHNpemVvZihEcmF3VkdDb250ZXh0KSwK KyAgICAuaW5pdCAgICAgICAgICA9IGRyYXd2Z19pbml0LAorICAgIC51bmluaXQgICAgICAgID0g ZHJhd3ZnX3VuaW5pdCwKKyAgICBGSUxURVJfSU5QVVRTKGRyYXd2Z19pbnB1dHMpLAorICAgIEZJ TFRFUl9PVVRQVVRTKGZmX3ZpZGVvX2RlZmF1bHRfZmlsdGVycGFkKSwKKyAgICBGSUxURVJfUElY Rk1UU19BUlJBWShkcmF3dmdfcGl4X2ZtdHMpLAorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZhdGUv ZmlsdGVyLXZpZGVvLm1hayBiL3Rlc3RzL2ZhdGUvZmlsdGVyLXZpZGVvLm1hawppbmRleCAyYjQx NTc0ZGYyLi5kOGNlYTg4ZDRjIDEwMDY0NAotLS0gYS90ZXN0cy9mYXRlL2ZpbHRlci12aWRlby5t YWsKKysrIGIvdGVzdHMvZmF0ZS9maWx0ZXItdmlkZW8ubWFrCkBAIC00NTIsNiArNDUyLDEyIEBA IGZhdGUtZmlsdGVyLWZwcy1kb3duLWVvZi1wYXNzOiBDTUQgPSBmcmFtZWNyYyAtbGF2ZmkgdGVz dHNyYzI9cj03OmQ9My41LGZwcz0zOmVvCiBmYXRlLWZpbHRlci1mcHMtc3RhcnQtZHJvcDogQ01E ID0gZnJhbWVjcmMgLWxhdmZpIHRlc3RzcmMyPXI9NzpkPTMuNSxmcHM9MzpzdGFydF90aW1lPTEu NQogZmF0ZS1maWx0ZXItZnBzLXN0YXJ0LWZpbGw6IENNRCA9IGZyYW1lY3JjIC1sYXZmaSB0ZXN0 c3JjMj1yPTc6ZD0xLjUsc2V0cHRzPVBUUysxNCxmcHM9MzpzdGFydF90aW1lPTEuNQogCitEUkFX VkdfU0NSSVBUX0FMTCA9ICQoU1JDX1BBVEgpL3Rlc3RzL3JlZi9sYXZmL2RyYXd2Zy5hbGwKKwor RkFURV9GSUxURVItJChDT05GSUdfRFJBV1ZHX0ZJTFRFUikgKz0gZmF0ZS1maWx0ZXItZHJhd3Zn LWludGVycHJldGVyCitmYXRlLWZpbHRlci1kcmF3dmctaW50ZXJwcmV0ZXI6ICQoRFJBV1ZHX1ND UklQVF9BTEwpCitmYXRlLWZpbHRlci1kcmF3dmctaW50ZXJwcmV0ZXI6IENNRCA9IHJ1biBsaWJh dmZpbHRlci90ZXN0cy9kcmF3dmckKEVYRVNVRikgJChEUkFXVkdfU0NSSVBUX0FMTCkKKwogRkFU RV9GSUxURVJfU0FNUExFUy0kKGNhbGwgRklMVEVSREVNREVDLCBGUFMgU0NBTEUsIE1PViwgUVRS TEUpICs9IGZhdGUtZmlsdGVyLWZwcy1jZnIgZmF0ZS1maWx0ZXItZnBzCiBmYXRlLWZpbHRlci1m cHMtY2ZyOiBDTUQgPSBmcmFtZWNyYyAtYXV0b19jb252ZXJzaW9uX2ZpbHRlcnMgLWkgJChUQVJH RVRfU0FNUExFUykvcXRybGUvYXBwbGUtYW5pbWF0aW9uLXZhcmlhYmxlLWZwcy1idWcubW92IC1y IDMwIC1mcHNfbW9kZSBjZnIgLXBpeF9mbXQgeXV2NDIwcAogZmF0ZS1maWx0ZXItZnBzOiAgICAg Q01EID0gZnJhbWVjcmMgLWF1dG9fY29udmVyc2lvbl9maWx0ZXJzIC1pICQoVEFSR0VUX1NBTVBM RVMpL3F0cmxlL2FwcGxlLWFuaW1hdGlvbi12YXJpYWJsZS1mcHMtYnVnLm1vdiAtdmYgZnBzPTMw IC1waXhfZm10IHl1djQyMHAKQEAgLTYwMiw2ICs2MDgsMTEgQEAgZmF0ZS1maWx0ZXItdGlsdGFu ZHNoaWZ0LTQxMDogQ01EID0gZnJhbWVjcmMgLWM6diBwZ215dXYgLWkgJChTUkMpIC1mbGFncyAr Yml0ZXgKIGZhdGUtZmlsdGVyLXRpbHRhbmRzaGlmdC00MjI6IENNRCA9IGZyYW1lY3JjIC1jOnYg cGdteXV2IC1pICQoU1JDKSAtZmxhZ3MgK2JpdGV4YWN0IC12ZiBzY2FsZT1zd3NfZmxhZ3M9K2Fj Y3VyYXRlX3JuZCtiaXRleGFjdCxmb3JtYXQ9eXV2NDIycCx0aWx0YW5kc2hpZnQKIGZhdGUtZmls dGVyLXRpbHRhbmRzaGlmdC00NDQ6IENNRCA9IGZyYW1lY3JjIC1jOnYgcGdteXV2IC1pICQoU1JD KSAtZmxhZ3MgK2JpdGV4YWN0IC12ZiBzY2FsZT1zd3NfZmxhZ3M9K2FjY3VyYXRlX3JuZCtiaXRl eGFjdCxmb3JtYXQ9eXV2NDQ0cCx0aWx0YW5kc2hpZnQKIAorRFJBV1ZHX1NDUklQVF9MSU5FUyA9 ICQoU1JDX1BBVEgpL3Rlc3RzL3JlZi9sYXZmL2RyYXd2Zy5saW5lcworRkFURV9GSUxURVJfVlNZ TlRIX1ZJREVPX0ZJTFRFUi0kKENPTkZJR19EUkFXVkdfRklMVEVSKSArPSBmYXRlLWZpbHRlci1k cmF3dmctdmlkZW8KK2ZhdGUtZmlsdGVyLWRyYXd2Zy12aWRlbzogJChEUkFXVkdfU0NSSVBUX0xJ TkVTKQorZmF0ZS1maWx0ZXItZHJhd3ZnLXZpZGVvOiBDTUQgPSB2aWRlb19maWx0ZXIgc2NhbGUs Zm9ybWF0PWJncjAsZHJhd3ZnPWZpbGU9JChEUkFXVkdfU0NSSVBUX0xJTkVTKQorCiB0ZXN0cy9w aXhmbXRzLm1hazogVEFHID0gR0VOCiB0ZXN0cy9waXhmbXRzLm1hazogZmZtcGVnJChQUk9HU1NV RikkKEVYRVNVRikgfCB0ZXN0cwogCSQoTSlwcmludGYgIlBJWEZNVFMgPSAiID4gJEAKZGlmZiAt LWdpdCBhL3Rlc3RzL3JlZi9mYXRlL2ZpbHRlci1kcmF3dmctaW50ZXJwcmV0ZXIgYi90ZXN0cy9y ZWYvZmF0ZS9maWx0ZXItZHJhd3ZnLWludGVycHJldGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjIxYzZjY2Q4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWYv ZmF0ZS9maWx0ZXItZHJhd3ZnLWludGVycHJldGVyCkBAIC0wLDAgKzEsMTMwIEBACitjaGVja19z b3J0ZWRfY21kc19hcnJheTogMCBmYWlsdXJlcworCistLS0gY2hlY2tfc2NyaXB0OiBkcmF3dmcu YWxsCitjYWlyb19zZXRfbGluZV9qb2luIDAKK2NhaXJvX3NldF9saW5lX2NhcCAxCitjYWlyb19t b3ZlX3RvIDAuMCAwLjAKK2NhaXJvX3JlbF9saW5lX3RvIDAuMCAwLjAKK2NhaXJvX3JlbF9saW5l X3RvIDEuMCAxLjAKK2NhaXJvX3JlbF9saW5lX3RvIDIuMCAyLjAKK2NhaXJvX2xpbmVfdG8gLTEu MCAtMi4wCithdl9sb2dbMzJdOiBbMjk6N10gMSA9IDEuMDAwMDAwIHwgWzI5OjldIGZvbyA9IC0x LjAwMDAwMCB8IFsyOToxM10gKGJhciAtIDIpID0gLTQuMDAwMDAwCitjYWlyb19zZXRfc291cmNl IGxpbmVhcmdyYWQoMC4wIDAuMCAxLjAgMS4wKSAwLjAvI2ZmMDAwMGZmIDEuMC8jMDAwMGZmZmYK K2NhaXJvX3NhdmUKK2NhaXJvX3Jlc3RvcmUKK2NhaXJvX3NjYWxlIDEuMCAxLjAKK2NhaXJvX3Nj YWxlIDIuMCAzLjAKK2NhaXJvX3RyYW5zbGF0ZSA0LjAgNS4wCitjYWlyb19yb3RhdGUgNi4wCitj YWlyb19pZGVudGl0eV9tYXRyaXgKK2NhaXJvX3JlY3RhbmdsZSAxLjAgMi4wIDMuMCA0LjAKK2Nh aXJvX3NhdmUKK2NhaXJvX3RyYW5zbGF0ZSAxLjAgMi4wCitjYWlyb19uZXdfc3ViX3BhdGgKK2Nh aXJvX2FyYyAwLjAgMC4wIDMuMCAwLjAgNi4zCitjYWlyb19jbG9zZV9wYXRoCitjYWlyb19uZXdf c3ViX3BhdGgKK2NhaXJvX3Jlc3RvcmUKK2NhaXJvX25ld19zdWJfcGF0aAorY2Fpcm9fYXJjIDE1 MC4wIDE1MC4wIDUwLjAgMy4xIDQuNworY2Fpcm9fYXJjIDQ1MC4wIDE1MC4wIDUwLjAgNC43IDYu MworY2Fpcm9fYXJjIDQ1MC4wIDQ1MC4wIDUwLjAgMC4wIDEuNgorY2Fpcm9fYXJjIDE1MC4wIDQ1 MC4wIDUwLjAgMS42IDMuMQorY2Fpcm9fY2xvc2VfcGF0aAorY2Fpcm9fc2V0X3NvdXJjZSAjYWJj ZGVmZmYKK2NhaXJvX3N0cm9rZQorY2Fpcm9fc2V0X3NvdXJjZSBsaW5lYXJncmFkKDAuMCAxLjAg Mi4wIDMuMCkgMC4wLyNmZjAwMDBmZiAxLjAvIzAwMDBmZmZmCitjYWlyb19zdHJva2UKK2NhaXJv X3NldF9zb3VyY2UgcmFkaWFsZ3JhZCgxLjAgMi4wIDMuMCA0LjAgNS4wIDYuMCkgMC4wLyMwMDAw MDBmZiAwLjEvI2ZmZmZmZmZmIDAuMS8jMDAwMDAwZmYgMC4yLyNmZmZmZmZmZgorY2Fpcm9fc3Ry b2tlCitjYWlyb19tb3ZlX3RvIDEwLjAgNTAuMAorY2Fpcm9fY3VydmVfdG8gMjAuMCAzMy4zIDMw LjAgMzMuMyA0MC4wIDUwLjAKK2NhaXJvX2N1cnZlX3RvIDUwLjAgNjYuNyA2MC4wIDY2LjcgNzAu MCA1MC4wCitjYWlyb19jdXJ2ZV90byA4MC4wIDMzLjMgOTAuMCAzMy4zIDEwMC4wIDUwLjAKK2Nh aXJvX2N1cnZlX3RvIDEyMC4wIDEwMC4wIDE0MC4wIDAuMCAyMDAuMCA1MC4wCitjYWlyb19zZXRf ZmlsbF9ydWxlIDAKK2NhaXJvX2ZpbGxfcHJlc2VydmUKK2NhaXJvX3NldF9maWxsX3J1bGUgMQor Y2Fpcm9fZmlsbF9wcmVzZXJ2ZQorY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlCitjYWlyb19zZXRfZmls bF9ydWxlIDAKK2NhaXJvX2NsaXBfcHJlc2VydmUKK2NhaXJvX3NldF9maWxsX3J1bGUgMAorY2Fp cm9fZmlsbAorY2Fpcm9fc2V0X2ZpbGxfcnVsZSAxCitjYWlyb19maWxsCitjYWlyb19zZXRfZmls bF9ydWxlIDAKK2NhaXJvX2NsaXAKK2NhaXJvX3NldF9maWxsX3J1bGUgMQorY2Fpcm9fY2xpcAor Y2Fpcm9fc2V0X2Rhc2ggWyAtMS4wIDEuMCBdIC0yLjAKK2NhaXJvX3NldF9kYXNoIFsgLTEuMCAy LjAgXSAtMi4wCitjYWlyb19zZXRfZGFzaCBbIC0xLjAgMy4wIF0gLTIuMAorY2Fpcm9fc2V0X2Rh c2ggWyAtMS4wIF0gNC4wCitjYWlyb19zZXRfZGFzaCBbIF0gMC4wCitjYWlyb19tb3ZlX3RvIDEu MCAyLjAKK2NhaXJvX3JlbF9saW5lX3RvIC0xLjAgLTIuMAorY2Fpcm9fc2V0X3NvdXJjZSAjMTkz MzRjNjYKK2NhaXJvX3NldF9maWxsX3J1bGUgMAorY2Fpcm9fZmlsbAorY2Fpcm9fc2V0X3NvdXJj ZSAjNDc1YjNkNjYKK2NhaXJvX3NldF9maWxsX3J1bGUgMAorY2Fpcm9fZmlsbAorY2Fpcm9fc2V0 X3NvdXJjZSAjN2Y5OWIyY2MKK2NhaXJvX3NldF9maWxsX3J1bGUgMAorY2Fpcm9fZmlsbAorY2Fp cm9fc2V0X3NvdXJjZSAjYThkN2VmZTUKK2NhaXJvX3NldF9maWxsX3J1bGUgMAorY2Fpcm9fZmls bAorY2Fpcm9fcmVsX2xpbmVfdG8gMS4wIDMuMAorY2Fpcm9fcmVsX2xpbmVfdG8gbmFuIDAuMAor CistLS0gY2hlY2tfc2NyaXB0OiBNIDAgKDEqKHQrMSkKK2F2X2xvZ1sxNl06IEludmFsaWQgdG9r ZW4gJygnIGF0IGxpbmUgMSwgY29sdW1uIDU6IFVubWF0Y2hlZCBwYXJlbnRoZXNpcy4KK2NoZWNr X3NjcmlwdDogdmdzX3BhcnNlID0gLTIyCisKKy0tLSBjaGVja19zY3JpcHQ6IHNhdmUgaW52YWxp ZCAxIDIKK2F2X2xvZ1sxNl06IEludmFsaWQgdG9rZW4gJ2ludmFsaWQnIGF0IGxpbmUgMSwgY29s dW1uIDY6IEV4cGVjdGVkIGNvbW1hbmQuCitjaGVja19zY3JpcHQ6IHZnc19wYXJzZSA9IC0yMgor CistLS0gY2hlY2tfc2NyaXB0OiBzZXRsaW5lY2FwIHVua25vd24gbSAxMCAyMAorYXZfbG9nWzE2 XTogSW52YWxpZCB0b2tlbiAndW5rbm93bicgYXQgbGluZSAxLCBjb2x1bW4gMTI6IEV4cGVjdGVk IG9uZSBvZiAnYnV0dCcgJ3JvdW5kJyAnc3F1YXJlJy4KK2NoZWNrX3NjcmlwdDogdmdzX3BhcnNl ID0gLTIyCisKKy0tLSBjaGVja19zY3JpcHQ6IE0gMCAxIDIKK2F2X2xvZ1sxNl06IEludmFsaWQg dG9rZW4gJzxFT0Y+JyBhdCBsaW5lIDEsIGNvbHVtbiA4OiBFeHBlY3RlZCBudW1lcmljIGFyZ3Vt ZW50LgorY2hlY2tfc2NyaXB0OiB2Z3NfcGFyc2UgPSAtMjIKKworLS0tIGNoZWNrX3NjcmlwdDog c2V0dmFyIGJhXmQgMAorYXZfbG9nWzE2XTogSW52YWxpZCB0b2tlbiAnYmFeZCcgYXQgbGluZSAx LCBjb2x1bW4gODogSW52YWxpZCB2YXJpYWJsZSBuYW1lLgorY2hlY2tfc2NyaXB0OiB2Z3NfcGFy c2UgPSAtMjIKKworLS0tIGNoZWNrX3NjcmlwdDogc2V0dmFyIGN4IDAKK2F2X2xvZ1sxNl06IElu dmFsaWQgdG9rZW4gJ2N4JyBhdCBsaW5lIDEsIGNvbHVtbiA4OiBSZXNlcnZlZCB2YXJpYWJsZSBu YW1lLgorY2hlY2tfc2NyaXB0OiB2Z3NfcGFyc2UgPSAtMjIKKworLS0tIGNoZWNrX3NjcmlwdDog IHNldHZhciB2MCAwIHNldHZhciB2MSAxIHNldHZhciB2MiAyIHNldHZhciB2MyAzIHNldHZhciB2 NCA0IHNldHZhciB2NSA1IHNldHZhciB2NiA2IHNldHZhciB2NyA3IHNldHZhciB2OCA4IHNldHZh ciB2OSA5IHNldHZhciB2MTAgMTAgc2V0dmFyIHYxMSAxMSBzZXR2YXIgdjEyIDEyIHNldHZhciB2 MTMgMTMgc2V0dmFyIHYxNCAxNCBzZXR2YXIgdjE1IDE1IHNldHZhciB2MTYgMTYgc2V0dmFyIHYx NyAxNyBzZXR2YXIgdjE4IDE4IHNldHZhciB2MTkgMTkgTSAodjApICh2MTkpIDEgKHVua25vd25f dmFyKQorYXZfbG9nWzE2XTogVW5kZWZpbmVkIGNvbnN0YW50IG9yIG1pc3NpbmcgJygnIGluICd1 bmtub3duX3ZhciknCithdl9sb2dbMTZdOiBJbnZhbGlkIHRva2VuICcodW5rbm93bl92YXIpJyBh dCBsaW5lIDEsIGNvbHVtbiAyNzc6IEludmFsaWQgZXhwcmVzc2lvbi4KK2NoZWNrX3NjcmlwdDog dmdzX3BhcnNlID0gLTIyCisKKy0tLSBjaGVja19zY3JpcHQ6ICBzZXR2YXIgdjEgMCBzZXR2YXIg djIgMSBzZXR2YXIgdjMgMiBzZXR2YXIgdjQgMyBzZXR2YXIgdjUgNCBzZXR2YXIgdjYgNSBzZXR2 YXIgdjcgNiBzZXR2YXIgdjggNyBzZXR2YXIgdjkgOCBzZXR2YXIgdjEwIDkgc2V0dmFyIHYxMSAx MCBzZXR2YXIgdjEyIDExIHNldHZhciB2MTMgMTIgc2V0dmFyIHYxNCAxMyBzZXR2YXIgdjE1IDE0 IHNldHZhciB2MTYgMTUgc2V0dmFyIHYxNyAxNiBzZXR2YXIgdjE4IDE3IHNldHZhciB2MTkgMTgg c2V0dmFyIHYyMCAxOSBzZXR2YXIgdjIxIDIwCithdl9sb2dbMTZdOiBJbnZhbGlkIHRva2VuICd2 MjEnIGF0IGxpbmUgMSwgY29sdW1uIDI3MDogVG9vIG1hbnkgdXNlciB2YXJpYWJsZXMuIENhbiBk ZWZpbmUgdXAgdG8gMjAgdmFyaWFibGVzLgorY2hlY2tfc2NyaXB0OiB2Z3NfcGFyc2UgPSAtMjIK KworLS0tIGNoZWNrX3NjcmlwdDogY2FsbCBhCithdl9sb2dbMTZdOiBNaXNzaW5nIGJvZHkgZm9y IHByb2NlZHVyZSAnYScKKworLS0tIGNoZWNrX3NjcmlwdDogcHJvYyBhIHsgY2FsbCBiIH0gY2Fs bCBhCithdl9sb2dbMTZdOiBNaXNzaW5nIGJvZHkgZm9yIHByb2NlZHVyZSAnYicKKworLS0tIGNo ZWNrX3NjcmlwdDogcHJvYyBwMCBhMSBhMiBhMyBhNCBhNSBhNiBhNyBhOCB7IGJyZWFrIH0KK2F2 X2xvZ1sxNl06IEludmFsaWQgdG9rZW4gJ2E3JyBhdCBsaW5lIDEsIGNvbHVtbiAyNzogVG9vIG1h bnkgcGFyYW1ldGVycy4gTGltaXQgaXMgNgorY2hlY2tfc2NyaXB0OiB2Z3NfcGFyc2UgPSAtMjIK KworLS0tIGNoZWNrX3NjcmlwdDogcHJvYyBwMCBhMSBhMiB7IGJyZWFrIH0gY2FsbCBwMCBicmVh aworYXZfbG9nWzE2XTogUHJvY2VkdXJlIGV4cGVjdHMgMiBhcmd1bWVudHMsIGJ1dCByZWNlaXZl ZCAwLgorLS0tIGNoZWNrX3NjcmlwdDogcHJvYyBwMCBhMSBhMiB7IGJyZWFrIH0gY2FsbCBwMCAx IDIgMworYXZfbG9nWzE2XTogUHJvY2VkdXJlIGV4cGVjdHMgMiBhcmd1bWVudHMsIGJ1dCByZWNl aXZlZCAzLgorLS0tIGNoZWNrX3NjcmlwdDogTSAwICgxICsgbiArIG4gKyBuICsgbiArIG4gKyBu ICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4g KyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiAr IG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsg biArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBu ICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4g KyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbiAr IG4gKyBuICsgbiArIG4gKyBuICsgbiArIG4gKyBuICsgbikKK2NhaXJvX21vdmVfdG8gMC4wIDEw MS4wCmRpZmYgLS1naXQgYS90ZXN0cy9yZWYvZmF0ZS9maWx0ZXItZHJhd3ZnLXZpZGVvIGIvdGVz dHMvcmVmL2ZhdGUvZmlsdGVyLWRyYXd2Zy12aWRlbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4wYTY0NmY2ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVmL2Zh dGUvZmlsdGVyLWRyYXd2Zy12aWRlbwpAQCAtMCwwICsxIEBACitkcmF3dmctdmlkZW8gICAgICAg IGNhYTc2NDI5NTBhYjJmYjEzNjdiZDI4YzI4N2YzMWJkCmRpZmYgLS1naXQgYS90ZXN0cy9yZWYv bGF2Zi9kcmF3dmcuYWxsIGIvdGVzdHMvcmVmL2xhdmYvZHJhd3ZnLmFsbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45NjAzYzhlZDhmCi0tLSAvZGV2L251bGwKKysrIGIv dGVzdHMvcmVmL2xhdmYvZHJhd3ZnLmFsbApAQCAtMCwwICsxLDEwMCBAQAorLy8gU2NyaXB0IHRv IHRlc3QgaG93IGRyYXd2ZyBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zbGF0ZWQgdG8gY2Fpcm8gZnVu Y3Rpb25zLAorLy8gZm9yIGBtYWtlIGZhdGUtZmlsdGVyLWRyYXd2Zy1pbnRlcnByZXRlcmAuCisK Ky8vIENvbW1lbnRzLgorbGluZWFyZ3JhZCAwIDAgMSAxCitjb2xvcnN0b3AgMCByZWQgLy8gYWZ0 ZXIgYSBzdGF0ZW1lbnQKK2NvbG9yc3RvcAorICAgIDEgLy8gaW4gdGhlIG1pZGRsZSBvZiBhIHN0 YXRlbWVudAorICAgIGJsdWUKKworCisvLyBDb25zdGFudHMuCitzZXRsaW5lam9pbiBtaXRlcgor c2V0bGluZWNhcCByb3VuZAorCisvLyBpZi9yZXBlYXQKK00gMCAwCityZXBlYXQgMTAgeworICAg IGlmIChlcShpLDMpKSB7IGJyZWFrIH0KKyAgICBsIChpKSAoaSkKK30KKworLy8gVXNlciB2YXJp YWJsZXMuCitzZXR2YXIgZm9vIC0xCitzZXR2YXIgYmFyIC0yCitsaW5ldG8gZm9vIChiYXIpCisK Ky8vIFByaW50CitwcmludCAxIGZvbyAoYmFyIC0gMikKKworLy8gU3RhdGUKK3NhdmUKK3Jlc3Rv cmUKKworLy8gVHJhbnNmb3JtYXRpb24gbWF0cml4Lgorc2NhbGUgMQorc2NhbGV4eSAyIDMKK3Ry YW5zbGF0ZSA0IDUKK3JvdGF0ZSA2CityZXNldG1hdHJpeAorCisvLyBCYXNpYyBzaGFwZXMKK3Jl Y3QgMSAyIDMgNAorY2lyY2xlIDEgMiAzCityb3VuZGVkcmVjdCAxMDAgMTAwIDQwMCA0MDAgNTAK KworLy8gU291cmNlcworc2V0Y29sb3IgI2FiY2RlZgorc3Ryb2tlCisKK2xpbmVhcmdyYWQgMCAx IDIgMworY29sb3JzdG9wIDAgcmVkIDEgYmx1ZQorc3Ryb2tlCisKK3JhZGlhbGdyYWQgMSAyIDMg NCA1IDYKK3JlcGVhdCAyIHsgY29sb3JzdG9wIChpLzEwKSBibGFjayAoKGkrMSkvMTApIHdoaXRl IH0KK3N0cm9rZQorCisvLyBDdXJ2ZXMuIFRoZSBuZXh0IGxpbmUgc2hvdWxkIGJlIGNvbXBhdGli bGUgd2l0aCBTVkcncyA8cGF0aD4uCitNIDEwLDUwIFEgMjUsMjUgNDAsNTAgdCAzMCwwIDMwLDAg YyAyMCA1MCA0MCAtNTAgMTAwIDAKKworLy8gUHJlc2VydmUKK3ByZXNlcnZlIGZpbGwKK3ByZXNl cnZlIGVvZmlsbAorcHJlc2VydmUgc3Ryb2tlCitwcmVzZXJ2ZSBjbGlwCisKKy8vIEZpbGwvY2xp cAorZmlsbCBlb2ZpbGwKK2NsaXAgZW9jbGlwCisKKy8vIERhc2hlcworc2V0ZGFzaCAxIDIgMwor c2V0ZGFzaG9mZnNldCA0CityZXNldGRhc2gKKworLy8gUHJvY2VkdXJlcworc2V0dmFyIGEgLTEK K3NldHZhciBiIC0yCitwcm9jIGYyIGEgYiB7IE0gYSBiIGJyZWFrIGNhbGwgaW52YWxpZCB9Citw cm9jIGYxIGEgeyBjYWxsIGYyIGEgMiB9Citwcm9jIGYwIHsgY2FsbCBmMSAxIH0KK2NhbGwgZjAK K2wgYSBiCisKKy8vIENvbG9ycworc2V0cmdiYSAwLjEgMC4yIDAuMyAwLjQgZmlsbAorc2V0aHNs YSAxMDAgMC4yIDAuMyAwLjQgZmlsbAorCitkZWZyZ2JhIGMwIDAuNSAwLjYgMC43IDAuOAorZGVm aHNsYSBjMSAyMDAgMC43IDAuOCAwLjkKKworc2V0Y29sb3IgYzAgZmlsbAorc2V0Y29sb3IgYzEg ZmlsbAorCisvLyBGcmFtZSBtZXRhZGF0YQorZ2V0bWV0YWRhdGEgbWQwIG0uYQorZ2V0bWV0YWRh dGEgbWQxIG0uYgorZ2V0bWV0YWRhdGEgbWQyIG0uYworbCBtZDAgKG1kMSArIDEpIG1kMiAwCmRp ZmYgLS1naXQgYS90ZXN0cy9yZWYvbGF2Zi9kcmF3dmcubGluZXMgYi90ZXN0cy9yZWYvbGF2Zi9k cmF3dmcubGluZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTE0NTA1 MmQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JlZi9sYXZmL2RyYXd2Zy5saW5lcwpAQCAt MCwwICsxLDEwIEBACisvLyBSZW5kZXIgYSBzcXVhcmUsIGZvciBgbWFrZSBmYXRlLWZpbHRlci1k cmF3dmctdmlkZW9gLgorCitNIDEwIDEwCitsIDAgMTAKK2ggMTAKK3YgLTEwCitoIC0xMAoregor c2V0Y29sb3IgYmx1ZQorc3Ryb2tlCi0tIAoyLjQ5LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QgLS0gZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBmZm1w ZWctZGV2ZWwtbGVhdmVAZmZtcGVnLm9yZwo=